public function majPositionsEvenements($params = array()) { $retour = true; $tabTravail = array(); if (isset($params['idEvenementGroupeAdresse']) && $params['idEvenementGroupeAdresse'] != '' && !isset($params['idNouvelEvenement']) && isset($params['refreshAfterDelete']) && $params['refreshAfterDelete'] == true) { // on met a jour les positions apres la suppression d'un evenement sur le groupe d'adresse par exemple // donc en fait on ne fait qu'un rafraichissement des positions // si l'evenement supprimé etait le dernier du groupe d'adresse , le passage par cette fonction va permettre la suppression des liaisons dans la table positionEvenement , en theorie du dernier evenement qui restait , voir d'autres s'il y a eu un probleme (en principe cela n'arrive pas) $tabIdEvenementsLies = $this->getEvenementsLies($params['idEvenementGroupeAdresse'], true); // on a recuperer le tableau des positions enregistrées, on peut donc supprimer les positions precedentes, $reqDelete = "DELETE FROM positionsEvenements WHERE idEvenementGroupeAdresse = '" . $params['idEvenementGroupeAdresse'] . "'"; $resDelete = $this->connexionBdd->requete($reqDelete); // et inserer les nouvelles positions $position = 1; foreach ($tabIdEvenementsLies as $indice => $value) { $reqPositions = "INSERT INTO positionsEvenements (idEvenementGroupeAdresse, idEvenement, position) VALUES ('" . $params['idEvenementGroupeAdresse'] . "','" . $value['idEvenementAssocie'] . "','" . $position . "') "; $resPositions = $this->connexionBdd->requete($reqPositions); $position++; } } elseif (isset($params['idEvenementGroupeAdresse']) && $params['idEvenementGroupeAdresse'] != '' && (isset($params['idNouvelEvenement']) && $params['idNouvelEvenement'] != '' || isset($params['idEvenementModifie']) && $params['idEvenementModifie'] != '')) { $effectueMaj = false; // dans le cas d'un evenement modifie , on ne fait de mise a jour que si la date de l'evenement a ete changée par rapport a son dernier historique // if (isset($params['idNouvelEvenement']) && $params['idNouvelEvenement'] != '') { $idEvenementConcerne = $params['idNouvelEvenement']; $effectueMaj = true; } elseif (isset($params['idEvenementModifie']) && $params['idEvenementModifie'] != '') { // verification du dernier historique $idEvenementConcerne = $params['idEvenementModifie']; $reqDernierHistoriqueEvenementModifie = "\n\n\t\t\t\t\t\tSELECT he1.idEvenement as idHistoriqueEvenement, he1.dateDebut as dateDebutDernierHistorique\n\t\t\t\t\t\tFROM evenements he2, evenements he1\n\t\t\t\t\t\tWHERE he1.idEvenement = he2.idEvenement\n\t\t\t\t\t\tAND he1.idEvenement = '" . $idEvenementConcerne . "'\n\t\t\t\t\t\t\t\tGROUP BY he1.idEvenement\n\t\t\t\t\t\t\t\t"; $resDernierHistoriqueEvenementModifie = $this->connexionBdd->requete($reqDernierHistoriqueEvenementModifie); if (mysql_num_rows($resDernierHistoriqueEvenementModifie) == 1) { $fetchDernierHistoriqueEvenementModifie = mysql_fetch_assoc($resDernierHistoriqueEvenementModifie); if (isset($fetchDernierHistoriqueEvenementModifie['idHistoriqueEvenement']) && $fetchDernierHistoriqueEvenementModifie['idHistoriqueEvenement'] != '') { $reqVerifChangementDate = "\n\n\t\t\t\t\t\t\t\tSELECT he1.dateDebut as dateDebutAvantDernier\n\t\t\t\t\t\t\t\tFROM evenements he2, evenements he1\n\t\t\t\t\t\t\t\tWHERE he1.idEvenement = he2.idEvenement\n\t\t\t\t\t\t\t\tAND he1.idEvenement='" . $idEvenementConcerne . "'\n\t\t\t\t\t\t\t\tAND he1.idEvenement<>'" . $fetchDernierHistoriqueEvenementModifie['idHistoriqueEvenement'] . "'\n\t\t\t\t\t\t\t\tAND he2.idEvenement<>'" . $fetchDernierHistoriqueEvenementModifie['idHistoriqueEvenement'] . "'\n\t\t\t\t\t\t\t\tGROUP BY he1.idEvenement\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t"; $resVerifChangementDate = $this->connexionBdd->requete($reqVerifChangementDate); if (mysql_num_rows($resVerifChangementDate) > 0) { $fetchVerifChangementDate = mysql_fetch_assoc($resVerifChangementDate); if ($fetchVerifChangementDate['dateDebutAvantDernier'] != $fetchDernierHistoriqueEvenementModifie['dateDebutDernierHistorique']) { // si dernier historique , date différente $effectueMaj = true; // la date a ete changé, on met a jour les positions } else { // si dernier historique date identique $effectueMaj = false; // pas la peine de mettre a jour les positions } } } } } if ($effectueMaj) { // mise a jour apres ajout d'un nouvel evenement sur le groupe d'adresses $d = new dateObject(); $tabIdEvenementsLies = $this->getEvenementsLies($params['idEvenementGroupeAdresse'], true); $position = 1; $dateNouvelEvenement = "0000-00-00"; foreach ($tabIdEvenementsLies as $indice => $value) { if ($value['idEvenementAssocie'] != $idEvenementConcerne) { $tabTravail[$position]['idEvenement'] = $value['idEvenementAssocie']; // recuperation des dates des evenements $reqDates = "\n\t\t\t\t\t\t\t\tSELECT h1.idEvenement as idEvenement, h1.dateDebut as dateDebut\n\t\t\t\t\t\t\t\tFROM evenements h2, evenements h1\n\n\t\t\t\t\t\t\t\tWHERE h2.idEvenement = h1.idEvenement\n\t\t\t\t\t\t\t\tAND h1.idEvenement = '" . $value['idEvenementAssocie'] . "'\n\t\t\t\t\t\t\t\t\t\tGROUP BY h1.idEvenement\n\t\t\t\t\t\t\t\t\t\t"; $resDates = $this->connexionBdd->requete($reqDates); $tabTravail[$position]['dateDebut'] = "0000-00-00"; if (mysql_num_rows($resDates) > 0) { $fetchDates = mysql_fetch_assoc($resDates); $tabTravail[$position]['dateDebut'] = $fetchDates['dateDebut']; } $position++; } else { $fetchDates = ""; $reqDates = "\n\t\t\t\t\t\t\t\tSELECT h1.idEvenement as idEvenement, h1.dateDebut as dateDebut\n\t\t\t\t\t\t\t\tFROM evenements h2, evenements h1\n\n\t\t\t\t\t\t\t\tWHERE h2.idEvenement = h1.idEvenement\n\t\t\t\t\t\t\t\tAND h1.idEvenement = '" . $value['idEvenementAssocie'] . "'\n\t\t\t\t\t\t\t\t\t\tGROUP BY h1.idEvenement\n\t\t\t\t\t\t\t\t\t\t"; $resDates = $this->connexionBdd->requete($reqDates); $fetchDates = mysql_fetch_assoc($resDates); $dateNouvelEvenement = $fetchDates['dateDebut']; if (pia_substr($dateNouvelEvenement, 4, 6) == '-00-00') { $dateNouvelEvenement = pia_substr($dateNouvelEvenement, 0, 4) . "-01-01"; } } } // parcours des dates pour voir ou on va inserer l'evenement //echo "dateNouvelEvenement = ".$dateNouvelEvenement."<br>"; $positionNouvelEvenement = 1; if ($dateNouvelEvenement != '0000-00-00') { foreach ($tabTravail as $position => $valueEvenement) { // on transforme la date en date valide et analysable par la fonction de comparaison de dates if (pia_substr($tabTravail[$position]['dateDebut'], 4, 6) == '-00-00') { $tabTravail[$position]['dateDebut'] = pia_substr($tabTravail[$position]['dateDebut'], 0, 4) . "-01-01"; } //echo "dateDebut = ".pia_substr($tabTravail[$position]['dateDebut'],4,6)." ".pia_substr($tabTravail[$position]['dateDebut'],0,4)." ".$tabTravail[$position]['dateDebut']."<br>"; if ($tabTravail[$position]['dateDebut'] != '0000-00-00' && $d->isGreaterThan($dateNouvelEvenement, $tabTravail[$position]['dateDebut'])) { $positionNouvelEvenement = $position + 1; } elseif ($tabTravail[$position]['dateDebut'] == '0000-00-00') { $positionNouvelEvenement = $position + 1; } } } else { $positionNouvelEvenement = 1; } //echo "positionNouvelEvenement = ".$positionNouvelEvenement."<br>"; // insertion dans un tableau trié $nouveauTableau = array(); $nouvellesPositions = 1; $decalageApresInsertion = 0; foreach ($tabTravail as $position => $valueEvenement) { if ($position == $positionNouvelEvenement) { $decalageApresInsertion = 1; $nouveauTableau[$position]['idEvenement'] = $idEvenementConcerne; } $nouveauTableau[$position + $decalageApresInsertion]['idEvenement'] = $valueEvenement['idEvenement']; } if ($positionNouvelEvenement > count($tabTravail)) { // si le nouvel evenement se place en derniere position (le nouvel element n'est donc pas encore dans tabTravail , on le rajoute a la fin du tableau $nouveauTableau[$positionNouvelEvenement]['idEvenement'] = $idEvenementConcerne; } // mise a jour de la table positionEvenements // suppr des valeurs du groupe d'adresse precedentes $reqDelete = "DELETE FROM positionsEvenements WHERE idEvenementGroupeAdresse = '" . $params['idEvenementGroupeAdresse'] . "'"; $resDelete = $this->connexionBdd->requete($reqDelete); foreach ($nouveauTableau as $positionFinale => $value) { $reqPositions = "INSERT INTO positionsEvenements (idEvenementGroupeAdresse, idEvenement, position) VALUES ('" . $params['idEvenementGroupeAdresse'] . "','" . $value['idEvenement'] . "','" . $positionFinale . "') "; $resPositions = $this->connexionBdd->requete($reqPositions); } } } return $retour; }