Line 567... |
Line 567... |
567 |
*/
|
567 |
*/
|
568 |
private function ajouterContrainteTagDel() {
|
568 |
private function ajouterContrainteTagDel() {
|
569 |
if (isset($this->parametres['masque.tag_del'])) {
|
569 |
if (isset($this->parametres['masque.tag_del'])) {
|
570 |
$nbTags = $this->getNombreDeTags();
|
570 |
$nbTags = $this->getNombreDeTags();
|
571 |
if($nbTags > 1) {
|
571 |
if($nbTags > 1) {
|
- |
|
572 |
// sous-requêtes car le GROUP BY avec GROUP_CONCAT est *trop* lent
|
572 |
$tagsMotif = $this->construireTagsMotif();
|
573 |
if (isset($this->parametres['masque.tag_del']['AND'])) {
|
- |
|
574 |
foreach ($this->parametres['masque.tag_del']['AND'] as $mc) {
|
573 |
if (is_null($tagsMotif) === false) {
|
575 |
$sousRequete = 'SELECT ce_image '.
|
- |
|
576 |
'FROM del_image_tag '.
|
- |
|
577 |
'WHERE actif = 1 '.
|
- |
|
578 |
"AND tag_normalise LIKE '%$mc%' ";
|
- |
|
579 |
$this->addWhere('masque.tag_del', "di.id_image IN ($sousRequete)");
|
- |
|
580 |
}
|
- |
|
581 |
} else if (isset($this->parametres['masque.tag_del']['OR'])) {
|
- |
|
582 |
$tagsMotif = "'(" . implode('|', $this->parametres['masque.tag_del']['OR']) . ")'";
|
574 |
$sousRequete = 'SELECT ce_image '.
|
583 |
$sousRequete = 'SELECT ce_image '.
|
575 |
'FROM del_image_tag '.
|
584 |
'FROM del_image_tag '.
|
576 |
'WHERE actif = 1 '.
|
585 |
'WHERE actif = 1 '.
|
577 |
'GROUP BY ce_image '.
|
586 |
"AND tag_normalise REGEXP $tagsMotif ";
|
- |
|
587 |
|
578 |
"HAVING GROUP_CONCAT(DISTINCT tag_normalise ORDER BY tag_normalise) REGEXP $tagsMotif ";
|
588 |
$this->addWhere('masque.tag_del', "di.id_image IN ($sousRequete)");
|
579 |
}
|
589 |
}
|
580 |
} else {
|
590 |
} else {
|
581 |
// Si un seul tag est demandé il se trouve dans le OR dans le cas de la recherche
|
591 |
// Si un seul tag est demandé il se trouve dans le OR dans le cas de la recherche
|
582 |
// spécifique et dans le AND dans le cas de la recherche générale
|
592 |
// spécifique et dans le AND dans le cas de la recherche générale
|
583 |
// WTF?
|
593 |
// WTF?
|
Line 590... |
Line 600... |
590 |
|
600 |
|
591 |
$sousRequete = 'SELECT ce_image '.
|
601 |
$sousRequete = 'SELECT ce_image '.
|
592 |
'FROM del_image_tag '.
|
602 |
'FROM del_image_tag '.
|
593 |
'WHERE actif = 1 '.
|
603 |
'WHERE actif = 1 '.
|
- |
|
604 |
'AND tag_normalise LIKE '.$this->bdd->proteger($tag.'%');
|
- |
|
605 |
|
594 |
'AND tag_normalise LIKE '.$this->bdd->proteger($tag.'%');
|
606 |
$this->addWhere('masque.tag_del', "di.id_image IN ($sousRequete)");
|
Line 595... |
Line -... |
595 |
}
|
- |
|
596 |
|
607 |
}
|
597 |
$this->addWhere('masque.tag_del', "di.id_image IN ($sousRequete)");
|
608 |
|
Line 598... |
Line 609... |
598 |
}
|
609 |
}
|
599 |
}
|
610 |
}
|
Line 606... |
Line 617... |
606 |
$somme = count($this->parametres['masque.tag_del']['OR']);
|
617 |
$somme = count($this->parametres['masque.tag_del']['OR']);
|
607 |
}
|
618 |
}
|
608 |
return $somme;
|
619 |
return $somme;
|
609 |
}
|
620 |
}
|
Line 610... |
Line -... |
610 |
|
- |
|
611 |
private function construireTagsMotif() {
|
- |
|
612 |
$tagsMotif = null;
|
- |
|
613 |
if (isset($this->parametres['masque.tag_del']['AND'])) {
|
- |
|
614 |
$tags = $this->parametres['masque.tag_del']['AND'];
|
- |
|
615 |
// ATTENTION -> optimisation: en cas de "AND" on sort() l'input et le GROUP_CONCAT()
|
- |
|
616 |
// donc nous utilisons des ".*" plutôt que de multiples conditions et "|"
|
- |
|
617 |
sort($tags);
|
- |
|
618 |
$tagsMotif = $this->bdd->proteger(implode('.*', $tags));
|
- |
|
619 |
} else if (isset($this->parametres['masque.tag_del']['OR'])) {
|
- |
|
620 |
$tags = $this->parametres['masque.tag_del']['OR'];
|
- |
|
621 |
$tagsMotif = $this->bdd->proteger(implode('|', $tags));
|
- |
|
622 |
}
|
- |
|
623 |
return $tagsMotif;
|
- |
|
624 |
}
|
- |
|
625 |
|
621 |
|
626 |
/**
|
622 |
/**
|
627 |
* Partie spécifique à PictoFlora:
|
623 |
* Partie spécifique à PictoFlora:
|
628 |
* Attention : si le critère de tri n'est pas suffisant, les résultats affichés peuvent varier à chaque appel
|
624 |
* Attention : si le critère de tri n'est pas suffisant, les résultats affichés peuvent varier à chaque appel
|
629 |
* de la même page de résultat de PictoFlora.
|
625 |
* de la même page de résultat de PictoFlora.
|
Line 741... |
Line 737... |
741 |
|
737 |
|
742 |
public function getTotalLignesTrouvees() {
|
738 |
public function getTotalLignesTrouvees() {
|
743 |
$resultat = $this->bdd->recuperer('SELECT FOUND_ROWS() AS nbre -- '.__FILE__.':'.__LINE__);
|
739 |
$resultat = $this->bdd->recuperer('SELECT FOUND_ROWS() AS nbre -- '.__FILE__.':'.__LINE__);
|
744 |
return intval($resultat['nbre']);
|
740 |
return intval($resultat['nbre']);
|
745 |
}
|
741 |
}
|
746 |
|
742 |
|
747 |
public function getRequeteIdObsMonactiviteTout($id_utilisateur, $limite = "") {
|
743 |
public function getRequeteIdObsMonactiviteTout($id_utilisateur, $limite = "") {
|
748 |
/*
|
744 |
/*
|
749 |
Une action c'est :
|
745 |
Une action c'est :
|
750 |
- Quelqu'un commente mon observation
|
746 |
- Quelqu'un commente mon observation
|
751 |
- Quelqu'un fait une proposition sur mon observation
|
747 |
- Quelqu'un fait une proposition sur mon observation
|
752 |
|
748 |
|
753 |
- Quelqu'un vote pour ma proposition
|
749 |
- Quelqu'un vote pour ma proposition
|
754 |
- Quelqu'un commente ma proposition ou mon commentaire
|
750 |
- Quelqu'un commente ma proposition ou mon commentaire
|
755 |
|
751 |
|
756 |
- Quelqu'un vote pour une proposition sur mon observation
|
752 |
- Quelqu'un vote pour une proposition sur mon observation
|
757 |
- Quelqu'un commente une proposition ou un commentaire sur mon observation
|
753 |
- Quelqu'un commente une proposition ou un commentaire sur mon observation
|
Line 758... |
Line 754... |
758 |
*/
|
754 |
*/
|
759 |
|
755 |
|
760 |
// on selectionne aussi la combinaison des champs de date afin que la liste soit triée correctement
|
756 |
// on selectionne aussi la combinaison des champs de date afin que la liste soit triée correctement
|
761 |
// pas d'autre meilleure solution mais attention ce comportement dépend entièrement de mysql
|
757 |
// pas d'autre meilleure solution mais attention ce comportement dépend entièrement de mysql
|
762 |
$requete = "SELECT SQL_CALC_FOUND_ROWS DISTINCT id_observation, ".$this->getCombinaisonChampsDateMax()." as date_max FROM del_observation do ".
|
758 |
$requete = "SELECT SQL_CALC_FOUND_ROWS DISTINCT id_observation, ".$this->getCombinaisonChampsDateMax()." as date_max FROM del_observation do ".
|
763 |
$this->getJointureMonActivite($id_utilisateur).
|
759 |
$this->getJointureMonActivite($id_utilisateur).
|
764 |
$this->getConditionMonActivite($id_utilisateur).
|
760 |
$this->getConditionMonActivite($id_utilisateur).
|
765 |
"ORDER BY date_max DESC ".
|
761 |
"ORDER BY date_max DESC ".
|
766 |
$limite;
|
762 |
$limite;
|
767 |
|
763 |
|
Line 768... |
Line 764... |
768 |
return $requete;
|
764 |
return $requete;
|
769 |
}
|
765 |
}
|
770 |
|
766 |
|
771 |
public function getRequeteNbEvenementsDepuisDate($id_utilisateur, $date) {
|
767 |
public function getRequeteNbEvenementsDepuisDate($id_utilisateur, $date) {
|
772 |
$requete = "SELECT COUNT(DISTINCT id_observation) as nb_evenements FROM del_observation do ".
|
768 |
$requete = "SELECT COUNT(DISTINCT id_observation) as nb_evenements FROM del_observation do ".
|
773 |
$this->getJointureMonActivite($id_utilisateur).
|
769 |
$this->getJointureMonActivite($id_utilisateur).
|
774 |
$this->getConditionMonActivite($id_utilisateur).
|
770 |
$this->getConditionMonActivite($id_utilisateur).
|
775 |
"AND ".$this->getCombinaisonChampsDateMax()." > '".$date."' ".
|
771 |
"AND ".$this->getCombinaisonChampsDateMax()." > '".$date."' ".
|
776 |
"ORDER BY ".$this->getCombinaisonChampsDateMax()." DESC ";
|
772 |
"ORDER BY ".$this->getCombinaisonChampsDateMax()." DESC ";
|
Line 777... |
Line 773... |
777 |
|
773 |
|
778 |
return $requete;
|
774 |
return $requete;
|
779 |
}
|
775 |
}
|
780 |
|
776 |
|
781 |
public function getEvenementsObs($idsObsConcat, $id_utilisateur) {
|
777 |
public function getEvenementsObs($idsObsConcat, $id_utilisateur) {
|
782 |
$sous_champ_date_max = $this->getCombinaisonChampsDateMax()." as date_max";
|
778 |
$sous_champ_date_max = $this->getCombinaisonChampsDateMax()." as date_max";
|
783 |
$sous_champ_date = "dc.date as date_com, dc.nom_sel as nom_sel_com, dcpr.ce_commentaire_parent as parent_com, dcv.date as date_vote, ".
|
779 |
$sous_champ_date = "dc.date as date_com, dc.nom_sel as nom_sel_com, dcpr.ce_commentaire_parent as parent_com, dcv.date as date_vote, ".
|
784 |
"do.date_observation as date_obs, dcp.date_validation as date_validation, dcpr.date as date_com_reponse, ".
|
780 |
"do.date_observation as date_obs, dcp.date_validation as date_validation, dcpr.date as date_com_reponse, ".
|
785 |
"dcvp.nom_sel as nom_sel_com_parent";
|
781 |
"dcvp.nom_sel as nom_sel_com_parent";
|
Line 786... |
Line 782... |
786 |
$sous_champs_utilisateurs = "dc.ce_utilisateur as utilisateur_commentaire, dcp.ce_utilisateur as utilisateur_commentaire_valide, ".
|
782 |
$sous_champs_utilisateurs = "dc.ce_utilisateur as utilisateur_commentaire, dcp.ce_utilisateur as utilisateur_commentaire_valide, ".
|
787 |
"dcv.ce_utilisateur as utilisateur_vote_commentaire, do.ce_utilisateur as utilisateur_observation, ".
|
783 |
"dcv.ce_utilisateur as utilisateur_vote_commentaire, do.ce_utilisateur as utilisateur_observation, ".
|
Line 788... |
Line 784... |
788 |
"dcp.ce_validateur as utilisateur_validation, dcvp.ce_utilisateur as utilisateur_commentaire_vote, ".
|
784 |
"dcp.ce_validateur as utilisateur_validation, dcvp.ce_utilisateur as utilisateur_commentaire_vote, ".
|
789 |
"dcpr.ce_utilisateur as utilisateur_commentaire_reponse";
|
785 |
"dcpr.ce_utilisateur as utilisateur_commentaire_reponse";
|
790 |
|
786 |
|
791 |
$sous_champs_infos = "dc.nom_sel as proposition_commentaire_nom_sel, dc.texte as proposition_commentaire_texte, dcp.nom_sel as proposition_validee_nom_sel, ".
|
787 |
$sous_champs_infos = "dc.nom_sel as proposition_commentaire_nom_sel, dc.texte as proposition_commentaire_texte, dcp.nom_sel as proposition_validee_nom_sel, ".
|
792 |
"dcvp.nom_sel as proposition_commentaire_nom_sel_votee, dcpr.texte as proposition_commentaire_texte_commente";
|
788 |
"dcvp.nom_sel as proposition_commentaire_nom_sel_votee, dcpr.texte as proposition_commentaire_texte_commente";
|
793 |
|
789 |
|
794 |
$requete = "SELECT DISTINCT id_observation, ".$sous_champs_utilisateurs.", ".$sous_champ_date_max.", ".$sous_champ_date.", ".$sous_champs_infos." ".
|
790 |
$requete = "SELECT DISTINCT id_observation, ".$sous_champs_utilisateurs.", ".$sous_champ_date_max.", ".$sous_champ_date.", ".$sous_champs_infos." ".
|
795 |
"FROM del_observation do ".
|
791 |
"FROM del_observation do ".
|
796 |
$this->getJointureMonActivite($id_utilisateur).
|
792 |
$this->getJointureMonActivite($id_utilisateur).
|
Line 797... |
Line 793... |
797 |
$this->getConditionMonActivite($id_utilisateur).
|
793 |
$this->getConditionMonActivite($id_utilisateur).
|
798 |
"AND id_observation IN ($idsObsConcat) ORDER BY date_max DESC";
|
794 |
"AND id_observation IN ($idsObsConcat) ORDER BY date_max DESC";
|
799 |
|
795 |
|
800 |
$evenements = $this->bdd->recupererTous($requete);
|
796 |
$evenements = $this->bdd->recupererTous($requete);
|
801 |
return $evenements;
|
797 |
return $evenements;
|
802 |
}
|
798 |
}
|
803 |
|
799 |
|
804 |
public function getJointureMonActivite($id_utilisateur) {
|
800 |
public function getJointureMonActivite($id_utilisateur) {
|
805 |
return // quelqu'un commente mon observation ou fait une proposition
|
801 |
return // quelqu'un commente mon observation ou fait une proposition
|
806 |
"LEFT JOIN del_commentaire dc ON do.id_observation = dc.ce_observation ".
|
802 |
"LEFT JOIN del_commentaire dc ON do.id_observation = dc.ce_observation ".
|
807 |
" AND do.ce_utilisateur = ".$id_utilisateur." ".
|
803 |
" AND do.ce_utilisateur = ".$id_utilisateur." ".
|
808 |
" AND dc.ce_utilisateur != ".$id_utilisateur." ".
|
804 |
" AND dc.ce_utilisateur != ".$id_utilisateur." ".
|
809 |
// quelqu'un valide ma proposition (et ce n'est pas moi qui l'ai validée)
|
805 |
// quelqu'un valide ma proposition (et ce n'est pas moi qui l'ai validée)
|
810 |
"LEFT JOIN del_commentaire dcp ON do.id_observation = dcp.ce_observation ".
|
806 |
"LEFT JOIN del_commentaire dcp ON do.id_observation = dcp.ce_observation ".
|
811 |
" AND dcp.nom_sel IS NOT NULL AND dcp.ce_validateur != ".$id_utilisateur." ".
|
807 |
" AND dcp.nom_sel IS NOT NULL AND dcp.ce_validateur != ".$id_utilisateur." ".
|
812 |
" AND dcp.ce_validateur != 0 ".
|
808 |
" AND dcp.ce_validateur != 0 ".
|
813 |
" AND dcp.date_validation IS NOT NULL ".
|
809 |
" AND dcp.date_validation IS NOT NULL ".
|
814 |
" AND dcp.ce_utilisateur = ".$id_utilisateur." ".
|
810 |
" AND dcp.ce_utilisateur = ".$id_utilisateur." ".
|
815 |
// quelqu'un vote pour ma proposition ou sur une proposition sur une de mes observations
|
811 |
// quelqu'un vote pour ma proposition ou sur une proposition sur une de mes observations
|
816 |
"LEFT JOIN del_commentaire dcvp ON do.id_observation = dcvp.ce_observation ".
|
812 |
"LEFT JOIN del_commentaire dcvp ON do.id_observation = dcvp.ce_observation ".
|
817 |
"LEFT JOIN del_commentaire_vote dcv ON dcv.ce_proposition = dcvp.id_commentaire ".
|
813 |
"LEFT JOIN del_commentaire_vote dcv ON dcv.ce_proposition = dcvp.id_commentaire ".
|
818 |
"AND (dcvp.ce_utilisateur = $id_utilisateur OR do.ce_utilisateur = $id_utilisateur) ".
|
814 |
"AND (dcvp.ce_utilisateur = $id_utilisateur OR do.ce_utilisateur = $id_utilisateur) ".
|
819 |
"AND dcv.ce_utilisateur != $id_utilisateur ".
|
815 |
"AND dcv.ce_utilisateur != $id_utilisateur ".
|
820 |
"AND dcv.ce_utilisateur != dcvp.ce_utilisateur ".
|
816 |
"AND dcv.ce_utilisateur != dcvp.ce_utilisateur ".
|
821 |
// Quelqu'un répond à l'un de mes commentaires ou commente une de mes propositions
|
817 |
// Quelqu'un répond à l'un de mes commentaires ou commente une de mes propositions
|
822 |
"LEFT JOIN del_commentaire dcpr ON do.id_observation = dcpr.ce_observation ".
|
818 |
"LEFT JOIN del_commentaire dcpr ON do.id_observation = dcpr.ce_observation ".
|
823 |
"AND dcpr.ce_commentaire_parent = dcvp.id_commentaire AND dcvp.ce_utilisateur = $id_utilisateur ";
|
819 |
"AND dcpr.ce_commentaire_parent = dcvp.id_commentaire AND dcvp.ce_utilisateur = $id_utilisateur ";
|
824 |
}
|
820 |
}
|
825 |
|
821 |
|
826 |
public function getConditionMonActivite($id_utilisateur, $type = "autres") {
|
822 |
public function getConditionMonActivite($id_utilisateur, $type = "autres") {
|
827 |
//TODO: gérer les cas suivants :
|
823 |
//TODO: gérer les cas suivants :
|
828 |
// demander les activités des autres sur mes obs ou propositions (c'est dejà le cas)
|
824 |
// demander les activités des autres sur mes obs ou propositions (c'est dejà le cas)
|
829 |
// demander mes activités
|
825 |
// demander mes activités
|
830 |
// demander toutes les activités (combinaisons des deux cas ci dessus)
|
826 |
// demander toutes les activités (combinaisons des deux cas ci dessus)
|
831 |
return // Vérification que l'évènement me concerne (de près ou ou de loin)
|
827 |
return // Vérification que l'évènement me concerne (de près ou ou de loin)
|
832 |
"WHERE (do.ce_utilisateur = $id_utilisateur OR dc.ce_utilisateur = $id_utilisateur ".
|
828 |
"WHERE (do.ce_utilisateur = $id_utilisateur OR dc.ce_utilisateur = $id_utilisateur ".
|
833 |
"OR dcp.ce_utilisateur = $id_utilisateur OR dcv.ce_utilisateur = $id_utilisateur ".
|
829 |
"OR dcp.ce_utilisateur = $id_utilisateur OR dcv.ce_utilisateur = $id_utilisateur ".
|
834 |
"OR dcvp.ce_utilisateur = $id_utilisateur) AND ".
|
830 |
"OR dcvp.ce_utilisateur = $id_utilisateur) AND ".
|
835 |
// mais qu'il y a au moins eu une action de la part d'une autre personne
|
831 |
// mais qu'il y a au moins eu une action de la part d'une autre personne
|
836 |
"(dc.ce_utilisateur IS NOT NULL OR dcp.ce_utilisateur IS NOT NULL OR dcv.ce_utilisateur IS NOT NULL) ";
|
832 |
"(dc.ce_utilisateur IS NOT NULL OR dcp.ce_utilisateur IS NOT NULL OR dcv.ce_utilisateur IS NOT NULL) ";
|