Changeset 90861 in spip-zone


Ignore:
Timestamp:
Jul 15, 2015, 1:21:59 PM (4 years ago)
Author:
marcimat@…
Message:

Introduction du critère {!gis}, négation du critère existant {gis}.
Cela permet de récupérer par exemple <BOUCLE_sans_points(ARTICLES){!gis}>... les articles sans point.

Location:
_plugins_/gis/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/gis/trunk/gis_fonctions.php

    r88709 r90861  
    138138
    139139/**
    140  * Critere {gis distance<XX} pour filtrer une liste de points par rapport à la distance du point de l'env
    141  *
    142  * @param unknown_type $idb
    143  * @param unknown_type $boucles
    144  * @param unknown_type $crit
     140 * Compile le critère `{gis}` qui permet de compléter la boucle avec les points GIS
     141 *
     142 * Usage
     143 * - `{gis}` Retourne les objets ayant des points (et ajoute les balises spéciales GIS tel que `#TITRE_GIS`)
     144 * - `{!gis}` Retourne les objets sans points
     145 * - `{gis distance<XX}`, sur une boucle `GIS`, filtre une liste de points par rapport à la distance du point de l'env
     146 *
     147 * @param string $idb
     148 * @param array $boucles
     149 * @param Critere $crit
    145150 */
    146151function critere_gis_dist($idb, &$boucles, $crit) {
     
    181186                $boucle->order[]= $order;
    182187        } else {
    183                 // ajouter tous les champs du point au select
    184                 // et les suffixer pour lever toute ambiguite avec des champs homonymes
    185                 $boucle->select[]= 'gis.titre AS titre_gis';
    186                 $boucle->select[]= 'gis.descriptif AS descriptif_gis';
    187                 $boucle->select[]= 'gis.adresse AS adresse_gis';
    188                 $boucle->select[]= 'gis.pays AS pays_gis';
    189                 $boucle->select[]= 'gis.code_pays AS code_pays_gis';
    190                 $boucle->select[]= 'gis.region AS region_gis';
    191                 $boucle->select[]= 'gis.departement AS departement_gis';
    192                 $boucle->select[]= 'gis.ville AS ville_gis';
    193                 $boucle->select[]= 'gis.code_postal AS code_postal_gis';
    194                 // jointure sur spip_gis_liens/spip_gis
    195                 // cf plugin notation
    196                 // $boucle->join["surnom (as) table de liaison"] = array("surnom de la table a lier", "cle primaire de la table de liaison", "identifiant a lier", "type d'objet de l'identifiant");
    197                 $boucle->from['gis_liens'] = 'spip_gis_liens';
    198                 $boucle->join['gis_liens']= array("'$id_table'","'id_objet'","'$primary'","'gis_liens.objet='.sql_quote('$objet')");
    199                 $boucle->from['gis'] = 'spip_gis';
    200                 $boucle->join['gis']= array("'gis_liens'","'id_gis'");
    201                 // bien renvoyer tous les points qui son attachés à l'objet
    202                 // mais attention, si on trouve en amont un groupement portant sur un champ *de GIS*,
    203                 // alors cela signifie que la personne veut faire une opération de groupement sur les points donc là on n'ajoute pas id_gis
    204                 $tous_les_points = true;
    205                 foreach ($boucle->group as $champ){
    206                         if (in_array($champ, array('ville', 'code_postal', 'pays', 'code_pays', 'region','departement'))) {
    207                                 $tous_les_points = false;
    208                         }
    209                 }
    210                 if ($tous_les_points) {
    211                         $boucle->group[] = 'gis_liens.id_gis';
    212                 }
    213                 // ajouter gis aux jointures et spécifier les jointures explicites pour pouvoir utiliser les balises de la table de jointure
    214                 // permet de passer dans trouver_champ_exterieur() depuis index_tables_en_pile()
    215                 // cf http://article.gmane.org/gmane.comp.web.spip.zone/6628
    216                 $boucle->jointures[] = 'gis';
    217                 if (empty($boucle->jointures_explicites)){
    218                         $boucle->jointures_explicites = 'gis_liens gis';
    219                 }
    220                 else{
    221                         $boucle->jointures_explicites .= ' gis_liens gis';
     188
     189                /* Recherche d'objets SANS point */
     190                if ($crit->not) {
     191                        $boucle->from['gis_liens'] = 'spip_gis_liens';
     192                        $boucle->from_type['gis_liens'] = "LEFT";
     193                        $boucle->join['gis_liens'] = array("'$id_table'","'id_objet'","'$primary'","'gis_liens.objet='.sql_quote('$objet')");
     194                        $boucle->where[] = "'gis_liens.id_gis IS NULL'";
     195
     196                /* Recherche d'objets AVEC point + ajout des champs GIS */
     197                } else {
     198                        // ajouter tous les champs du point au select
     199                        // et les suffixer pour lever toute ambiguite avec des champs homonymes
     200                        $boucle->select[]= 'gis.titre AS titre_gis';
     201                        $boucle->select[]= 'gis.descriptif AS descriptif_gis';
     202                        $boucle->select[]= 'gis.adresse AS adresse_gis';
     203                        $boucle->select[]= 'gis.pays AS pays_gis';
     204                        $boucle->select[]= 'gis.code_pays AS code_pays_gis';
     205                        $boucle->select[]= 'gis.region AS region_gis';
     206                        $boucle->select[]= 'gis.departement AS departement_gis';
     207                        $boucle->select[]= 'gis.ville AS ville_gis';
     208                        $boucle->select[]= 'gis.code_postal AS code_postal_gis';
     209                        // jointure sur spip_gis_liens/spip_gis
     210                        // cf plugin notation
     211                        // $boucle->join["surnom (as) table de liaison"] = array("surnom de la table a lier", "cle primaire de la table de liaison", "identifiant a lier", "type d'objet de l'identifiant");
     212                        $boucle->from['gis_liens'] = 'spip_gis_liens';
     213                        $boucle->join['gis_liens']= array("'$id_table'","'id_objet'","'$primary'","'gis_liens.objet='.sql_quote('$objet')");
     214                        $boucle->from['gis'] = 'spip_gis';
     215                        $boucle->join['gis']= array("'gis_liens'","'id_gis'");
     216                        // bien renvoyer tous les points qui son attachés à l'objet
     217                        // mais attention, si on trouve en amont un groupement portant sur un champ *de GIS*,
     218                        // alors cela signifie que la personne veut faire une opération de groupement sur les points donc là on n'ajoute pas id_gis
     219                        $tous_les_points = true;
     220                        foreach ($boucle->group as $champ){
     221                                if (in_array($champ, array('ville', 'code_postal', 'pays', 'code_pays', 'region','departement'))) {
     222                                        $tous_les_points = false;
     223                                }
     224                        }
     225                        if ($tous_les_points) {
     226                                $boucle->group[] = 'gis_liens.id_gis';
     227                        }
     228                        // ajouter gis aux jointures et spécifier les jointures explicites pour pouvoir utiliser les balises de la table de jointure
     229                        // permet de passer dans trouver_champ_exterieur() depuis index_tables_en_pile()
     230                        // cf http://article.gmane.org/gmane.comp.web.spip.zone/6628
     231                        $boucle->jointures[] = 'gis';
     232                        if (empty($boucle->jointures_explicites)){
     233                                $boucle->jointures_explicites = 'gis_liens gis';
     234                        }
     235                        else{
     236                                $boucle->jointures_explicites .= ' gis_liens gis';
     237                        }
    222238                }
    223239        }
  • _plugins_/gis/trunk/paquet.xml

    r90597 r90861  
    22        prefix="gis"
    33        categorie="divers"
    4         version="4.26.12"
     4        version="4.27.00"
    55        schema="2.0.7"
    66        etat="stable"
Note: See TracChangeset for help on using the changeset viewer.