From cea7984575a987a0fc4fbf844398bf8406176586 Mon Sep 17 00:00:00 2001
From: phoenixhackt <125221177+phoenixhackt@users.noreply.github.com>
Date: Wed, 3 Jan 2024 12:24:58 +0100
Subject: [PATCH] Ajout equipes.php
---
.../championnat_par_equipes/Fftt/Service.php | 479 ++++++++++++++++++
.../championnat_par_equipes/equipes.php | 163 ++++++
2 files changed, 642 insertions(+)
create mode 100644 Les competitions/championnat_par_equipes/Fftt/Service.php
create mode 100644 Les competitions/championnat_par_equipes/equipes.php
diff --git a/Les competitions/championnat_par_equipes/Fftt/Service.php b/Les competitions/championnat_par_equipes/Fftt/Service.php
new file mode 100644
index 0000000..555e8d8
--- /dev/null
+++ b/Les competitions/championnat_par_equipes/Fftt/Service.php
@@ -0,0 +1,479 @@
+appId = $appId;
+ $this->appKey = $appKey;
+
+ libxml_use_internal_errors(true);
+ }
+
+ public function getAppId()
+ {
+ return $this->appId;
+ }
+
+ public function getAppKey()
+ {
+ return $this->appKey;
+ }
+
+ public function setSerial($serial)
+ {
+ $this->serial = $serial;
+
+ return $this;
+ }
+
+ public function getSerial()
+ {
+ return $this->serial;
+ }
+
+ public function setCache($cache)
+ {
+ $this->cache = $cache;
+
+ return $this;
+ }
+
+ public function getCache()
+ {
+ return $this->cache;
+ }
+
+ public function setLogger($logger)
+ {
+ $this->logger = $logger;
+
+ return $this;
+ }
+
+ public function getLogger()
+ {
+ return $this->logger;
+ }
+
+ public function setIpSource($ipSource)
+ {
+ $this->ipSource = $ipSource;
+
+ return $this;
+ }
+
+ public function getIpSource()
+ {
+ return $this->ipSource;
+ }
+
+ public function initialization()
+ {
+ return Service::getObject($this->getData('https://apiv2.fftt.com/mobile/pxml/xml_initialisation.php', array()));
+ }
+
+ public function getClubsByDepartement($departement)
+ {
+ return $this->getCachedData("clubs_{$departement}", 3600 * 24 * 7, function ($service) use ($departement) {
+ return Service::getCollection($service->getData('https://apiv2.fftt.com/mobile/pxml/xml_club_dep2.php', array('dep' => $departement)), 'club');
+ });
+ }
+
+ public function getClub($numero)
+ {
+ return $this->getCachedData("club_{$numero}", 3600 * 24 * 7, function ($service) use ($numero) {
+ return Service::getObject($service->getData('https://apiv2.fftt.com/mobile/pxml/xml_club_detail.php', array('club' => $numero)), 'club');
+ });
+ }
+ public function cleanClub($numero)
+ {
+ if (!$this->cache) {
+ return;
+ }
+
+ $this->cache->delete("club_{$numero}");
+ $this->cache->delete("clubjoueurs_{$numero}");
+ $this->cache->delete("clubequipes_{$numero}_M");
+ $this->cache->delete("clubequipes_{$numero}_F");
+ $this->cache->delete("clubequipes_{$numero}_");
+ }
+
+ public function getJoueur($licence)
+ {
+ $joueur = $this->getCachedData("joueur_{$licence}", 3600 * 24 * 7, function ($service) use ($licence) {
+ return Service::getObject($service->getData('https://apiv2.fftt.com/mobile/pxml/xml_joueur.php', array('licence' => $licence, 'auto' => 1)), 'joueur');
+ });
+
+ if (!isset($joueur['licence'])) {
+ return null;
+ }
+
+ if (empty($joueur['natio'])) {
+ $joueur['natio'] = 'F';
+ }
+
+ $joueur['photo'] = "https://apiv2.fftt.com/espacelicencie/photolicencie/{$joueur['licence']}_.jpg";
+ $joueur['progmois'] = round($joueur['point'] - $joueur['apoint'], 2); // Progression mensuelle
+ $joueur['progann'] = round($joueur['point'] - $joueur['valinit'], 2); // Progression annuelle
+
+ return $joueur;
+ }
+
+ public function cleanJoueur($licence)
+ {
+ if (!$this->cache) {
+ return;
+ }
+
+ $this->cache->delete("joueur_{$licence}");
+ $this->cache->delete("joueurparties_{$licence}");
+ $this->cache->delete("joueurspid_{$licence}");
+ }
+
+ public function getJoueurParties($licence)
+ {
+ return $this->getCachedData("joueurparties_{$licence}", 3600 * 24 * 7, function ($service) use ($licence) {
+ return Service::getCollection($service->getData('https://apiv2.fftt.com/mobile/pxml/xml_partie_mysql.php', array('licence' => $licence, 'auto' => 1)), 'partie');
+ });
+ }
+
+ public function getJoueurPartiesSpid($licence)
+ {
+ return $this->getCachedData("joueurspid_{$licence}", 3600 * 24 * 1, function ($service) use ($licence) {
+ return Service::getCollection($service->getData('https://apiv2.fftt.com/mobile/pxml/xml_partie.php', array('numlic' => $licence)), 'resultat');
+ });
+ }
+
+ public function getJoueurHistorique($licence)
+ {
+ return $this->getCachedData("joueur_historique_{$licence}", 3600 * 24 * 2, function ($service) use ($licence) {
+ return Service::getCollection($service->getData('https://apiv2.fftt.com/mobile/pxml/xml_histo_classement.php', array('numlic' => $licence)), 'histo');
+ });
+ }
+
+ public function getJoueursByName($nom, $prenom = '')
+ {
+ return $this->getCachedData("joueurs_{$nom}_{$prenom}", 3600 * 24 * 7, function ($service) use ($nom, $prenom) {
+ return Service::getCollection($service->getData('https://apiv2.fftt.com/mobile/pxml/xml_liste_joueur.php', array('nom' => $nom, 'prenom' => $prenom)), 'joueur');
+ });
+ }
+
+ public function getJoueursByClub($club)
+ {
+ return $this->getCachedData("clubjoueurs_{$club}", 3600 * 24 * 7, function ($service) use ($club) {
+ return Service::getCollection($service->getData('https://apiv2.fftt.com/mobile/pxml/xml_liste_joueur.php', array('club' => $club)), 'joueur');
+ });
+ }
+
+ public function getEquipesByClub($club, $type = null)
+ {
+ if ($type && !in_array($type, array('M', 'F'))) {
+ $type = 'M';
+ }
+
+ $teams = $this->getCachedData("clubequipes_{$club}_{$type}", 3600 * 24 * 7, function ($service) use ($club, $type) {
+ return Service::getCollection($service->getData('https://apiv2.fftt.com/mobile/pxml/xml_equipe.php', array('numclu' => $club, 'type' => $type)), 'equipe');
+ });
+
+ foreach ($teams as &$team) {
+ $params = is_array($team['liendivision']) ? $team['liendivision'] : json_decode($team['liendivision'], true);
+
+ // Vérifier si les clés existent avant de les utiliser
+ $team['idpoule'] = isset($params['cx_poule']) ? $params['cx_poule'] : null;
+ $team['iddiv'] = isset($params['D1']) ? $params['D1'] : null;
+ }
+
+ return $teams;
+ }
+
+ public function getPoules($division)
+ {
+ $poules = $this->getCachedData("poules_{$division}", 3600 * 24 * 7, function ($service) use ($division) {
+ return Service::getCollection($service->getData('https://apiv2.fftt.com/mobile/pxml/xml_result_equ.php', array('action' => 'poule', 'D1' => $division)), 'poule');
+ });
+
+ foreach ($poules as &$poule) {
+ $params = array();
+ parse_str($poule['lien'], $params);
+
+ $poule['idpoule'] = $params['cx_poule'];
+ $poule['iddiv'] = $params['D1'];
+ }
+
+ return $poules;
+ }
+
+ public function getPouleClassement($division, $poule = null)
+ {
+ return $this->getCachedData("pouleclassement_{$division}_{$poule}", 3600 * 24 * 1, function ($service) use ($division, $poule) {
+ return Service::getCollection($service->getData('https://apiv2.fftt.com/mobile/pxml/xml_result_equ.php', array('auto' => 1, 'action' => 'classement', 'D1' => $division, 'cx_poule' => $poule)), 'classement');
+ });
+ }
+
+ public function getPouleRencontres($division, $poule = null)
+ {
+ return $this->getCachedData("poulerencontres_{$division}_{$poule}", 3600 * 24 * 1, function ($service) use ($division, $poule) {
+ return Service::getCollection($service->getData('https://apiv2.fftt.com/mobile/pxml/xml_result_equ.php', array('auto' => 1, 'D1' => $division, 'cx_poule' => $poule)), 'tour');
+ });
+ }
+
+ public function getIndivGroupes($division)
+ {
+ $groupes = $this->getCachedData("groupes_{$division}", 3600 * 24 * 7, function ($service) use ($division) {
+ return Service::getCollection($service->getData('https://apiv2.fftt.com/mobile/pxml/xml_result_indiv.php', array('action' => 'poule', 'res_division' => $division)), 'tour');
+ });
+
+ foreach ($groupes as &$groupe) {
+ $params = array();
+ parse_str($groupe['lien'], $params);
+
+ if (isset($params['cx_tableau'])) {
+ $groupe['idgroupe'] = $params['cx_tableau'];
+ } else {
+ $groupe['idgroupe'] = null;
+ }
+ $groupe['iddiv'] = $params['res_division'];
+ }
+
+ return $groupes;
+ }
+
+ public function getGroupeClassement($division, $groupe = null)
+ {
+ return $this->getCachedData("groupeclassement_{$division}_{$groupe}", 3600 * 24 * 1, function ($service) use ($division, $groupe) {
+ return Service::getCollection($service->getData('https://apiv2.fftt.com/mobile/pxml/xml_result_indiv.php', array('action' => 'classement', 'res_division' => $division, 'cx_tableau' => $groupe)), 'classement');
+ });
+ }
+
+ public function getGroupeRencontres($division, $groupe = null)
+ {
+ return $this->getCachedData("grouperencontres_{$division}_{$groupe}", 3600 * 24 * 1, function ($service) use ($division, $groupe) {
+ return Service::getCollection($service->getData('https://apiv2.fftt.com/mobile/pxml/xml_result_indiv.php', array('action' => 'partie', 'res_division' => $division, 'cx_tableau' => $groupe)), 'partie');
+ });
+ }
+
+ public function getOrganismes($type)
+ {
+ // Zone / Ligue / Departement
+ if (!in_array($type, array('Z', 'L', 'D'))) {
+ $type = 'L';
+ }
+
+ return $this->getCachedData("organismes_{$type}", 3600 * 24 * 30, function ($service) use ($type) {
+ return Service::getCollection($service->getData('https://apiv2.fftt.com/mobile/pxml/xml_organisme.php', array('type' => $type)), 'organisme');
+ });
+ }
+
+ public function getEpreuves($organisme, $type)
+ {
+ // Equipe / Individuelle
+ if (!in_array($type, array('E', 'I'))) {
+ $type = 'E';
+ }
+
+ return $this->getCachedData("epreuves_{$organisme}_{$type}", 3600 * 24 * 30, function ($service) use ($organisme, $type) {
+ return Service::getCollection($service->getData('https://apiv2.fftt.com/mobile/pxml/xml_epreuve.php', array('type' => $type, 'organisme' => $organisme)), 'epreuve');
+ });
+ }
+
+ public function getDivisions($organisme, $epreuve, $type = 'E')
+ {
+ // Equipe / Individuelle
+ if (!in_array($type, array('E', 'I'))) {
+ $type = 'E';
+ }
+
+ return $this->getCachedData("divisions_{$organisme}_{$epreuve}_{$type}", 3600 * 24 * 7, function ($service) use ($organisme, $epreuve, $type) {
+ return Service::getCollection($service->getData('https://apiv2.fftt.com/mobile/pxml/xml_division.php', array('organisme' => $organisme, 'epreuve' => $epreuve, 'type' => $type)), 'division');
+ });
+ }
+
+ public function getRencontre($link)
+ {
+ $params = array();
+ parse_str($link, $params);
+
+ return $this->getCachedData("rencontre_" . sha1($link), 3600 * 24 * 1, function ($service) use ($params) {
+ return Service::getObject($service->getData('https://apiv2.fftt.com/mobile/pxml/xml_chp_renc.php', $params), null);
+ });
+ }
+
+ public function getLicencesByName($nom, $prenom = '')
+ {
+ return $this->getCachedData("licences_{$nom}_{$prenom}", 3600 * 24 * 2, function ($service) use ($nom, $prenom) {
+ return Service::getCollection($service->getData('https://apiv2.fftt.com/mobile/pxml/xml_liste_joueur_o.php', array('nom' => strtoupper($nom), 'prenom' => ucfirst($prenom))), 'joueur');
+ });
+ }
+
+ public function getLicencesByClub($club)
+ {
+ return $this->getCachedData("licencesclub_{$club}", 3600 * 24 * 2, function ($service) use ($club) {
+ return Service::getCollection($service->getData('https://apiv2.fftt.com/mobile/pxml/xml_liste_joueur_o.php', array('club' => $club)), 'joueur');
+ });
+ }
+
+ public function getLicence($licence)
+ {
+ return $this->getCachedData("licence_{$licence}", 3600 * 24 * 2, function ($service) use ($licence) {
+ return Service::getObject($service->getData('https://apiv2.fftt.com/mobile/pxml/xml_licence.php', array('licence' => $licence)), 'licence');
+ });
+ }
+
+ protected function getCachedData($key, $lifeTime, $callback)
+ {
+ if (!$this->cache) {
+ return $callback($this);
+ }
+
+ if (false === ($data = $this->cache->fetch($key))) {
+ $data = $callback($this);
+
+ if ($data !== false) {
+ $this->cache->save($key, $data, $lifeTime);
+ }
+ }
+
+ return $data;
+ }
+
+ public function getData($url, $params = array(), $generateHash = true)
+ /**
+ * Retrieves data from a specified URL.
+ *
+ * @param string $url The URL from which to retrieve the data.
+ * @param array $params An optional array of parameters to include in the request.
+ * @param bool $generateHash Whether or not to generate a hash for the request.
+ * @throws Exception If there is an error in the cURL request or the HTTP response code is not 200.
+ * @return string The retrieved data.
+ */
+ {
+ if ($generateHash) {
+ $params['serie'] = substr(hash('sha256', $this->getSerial()), 0, 15);
+ $params['id'] = $this->getAppId();
+ $params['tm'] = date('YmdHis') . substr(microtime(), 2, 3);
+ $params['tmc'] = hash_hmac('sha1', $params['tm'], hash('md5', $this->getAppKey(), false));
+ }
+
+ if (!empty($params)) {
+ $url .= '?' . http_build_query($params);
+ }
+
+ $curl = curl_init();
+ curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // Désactiver la vérification SSL
+ curl_setopt($curl, CURLOPT_URL, $url);
+ if ($this->getIpSource()) {
+ curl_setopt($curl, CURLOPT_INTERFACE, $this->getIpSource());
+ }
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($curl, CURLOPT_HTTPHEADER, array(
+ "Accept:", // Suprime le header par défaut de cUrl (Accept: */*)
+ "User-agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32)",
+ "Content-Type: application/x-www-form-urlencoded",
+ "Accept-Encoding: gzip",
+ "Connection: Keep-Alive",
+ ));
+
+ $data = curl_exec($curl);
+ // $data_info = curl_getinfo($curl);
+ // print_r($data_info);
+ $error = curl_error($curl); // Récupérer les éventuelles erreurs cURL
+ $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); // Récupérer le code HTTP de la requête
+ curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); // Suivre les redirections
+ curl_close($curl);
+
+ if ($error) {
+ // En cas d'erreur cURL, afficher l'erreur
+ die("Erreur cURL : " . $error);
+ }
+
+ if ($httpCode !== 200) {
+ // En cas de code HTTP différent de 200, afficher le code
+ die("Erreur HTTP : " . $httpCode);
+ }
+
+ $data = gzdecode($data);
+
+ $xml = simplexml_load_string($data);
+
+ if (!$xml) {
+ // En cas d'échec du chargement XML, afficher le message d'erreur
+ die("Erreur XML : Impossible de charger le XML.");
+ }
+
+ // Petite astuce pour transformer simplement le XML en tableau
+ return json_decode(json_encode($xml), true);
+ }
+
+
+
+ public static function getCollection($data, $key = null)
+ {
+ if (empty($data)) {
+ return array();
+ }
+
+ if ($key) {
+ if (!array_key_exists($key, $data)) {
+ return array();
+ }
+ $data = $data[$key];
+ }
+
+ return isset($data[0]) ? $data : array($data);
+ }
+
+ public static function getObject($data, $key = null)
+ {
+ if ($key && $data !== false) {
+ return array_key_exists($key, $data) ? $data[$key] : null;
+ } else {
+ return empty($data) ? null : $data;
+ }
+ }
+
+ public static function generateSerial()
+ {
+ $serial = '';
+ for ($i = 0; $i < 15; $i++) {
+ $serial .= chr(mt_rand(65, 90)); //(A-Z)
+ }
+
+ return $serial;
+ }
+}
diff --git a/Les competitions/championnat_par_equipes/equipes.php b/Les competitions/championnat_par_equipes/equipes.php
new file mode 100644
index 0000000..b5f73b5
--- /dev/null
+++ b/Les competitions/championnat_par_equipes/equipes.php
@@ -0,0 +1,163 @@
+
+
+
+
+
+
+ Equipes
+
+
+
+
+ initialization();
+
+ // Remplacez NUMERO_CLUB par le numéro de votre club
+ $clubDetails = $service->getClub('08920067');
+ $getJoueursByClub = $service->getJoueursByClub('08920067');
+ $equipesByClub = $service->getEquipesByClub('08920067');
+ // $getEpreuves = $service->getEpreuves('16', 'E');
+ // $getDivisions = $service->getDivisions('F', '257', 'E');
+ // Pour récupérer les id equipes, il suffit d'aller sur le lien de redirection xml_equipe.php et de regarder l'iddiv et cx_poule dans liendivision
+ $getPouleClassementR1 = $service->getPouleClassement('126126', '656628');
+ $getPouleClassementR2 = $service->getPouleClassement('125922', '655864');
+ $getPouleClassementD1_P1 = $service->getPouleClassement('125705', '655053');
+ $getPouleClassementD1_P2 = $service->getPouleClassement('125705', '655054');
+ $getPouleClassementD2_P6 = $service->getPouleClassement('125705', '655058');
+ ?>
+
+ Club
+
+
+
+
+
+ n°
+ |
+
+
+ Salle |
+ |
+
+
+ Code postal |
+ |
+
+
+ Ville |
+ |
+
+
+ Latitude |
+ |
+
+
+ Longitude |
+ |
+
+
+ Afficher la carte |
+
+
+ Contact |
+
+
+ Prénom |
+ |
+
+
+ NOM |
+ |
+
+
+ Téléphone |
+ |
+
+
+ Mail |
+ |
+
+
+ Site internet |
+ https://asmeudontennisdetable.fr |
+
+
+
+
+ Équipes
+
+
+ Nom équipe |
+ Phase |
+ Division |
+
+
+
+
+
+
+
+
+ |
+ 1 |
+ |
+
+
+
+
+
+ Résultat Equipes
+
+
+
+
+
+ Poule
+ |
+
+
+ Classement |
+ Équipe |
+
+
+
+ |
+
+ ' . mb_convert_encoding($equipeClassement['equipe'], 'HTML-ENTITIES', 'UTF-8') . '';
+ } else {
+ echo mb_convert_encoding($equipeClassement['equipe'], 'HTML-ENTITIES', 'UTF-8');
+ }
+ ?>
+ |
+
+
+
+
+
+
+
\ No newline at end of file