Changeset 69592 in spip-zone


Ignore:
Timestamp:
Feb 1, 2013, 4:13:23 PM (7 years ago)
Author:
marcimat@…
Message:

Un critère {branche_organisation}.

Faut vraiment améliorer SPIP 3 sur ces histoires de branches pour les généraliser mieux.

Location:
_plugins_/contacts_et_organisations/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/contacts_et_organisations/trunk/contacts_fonctions.php

    r69591 r69592  
    217217
    218218
     219// Gestion des branches d'organisation
     220// -----------------------------------
     221
     222
    219223/**
    220224 * Calcul de la balise IDS_ORGANISATION_BRANCHE
     
    303307
    304308
     309/**
     310 * Sélectionne dans une boucle les éléments appartenant à une branche d'une organisation
     311 *
     312 * Calcule une branche d'une organisation et conditionne la boucle avec.
     313 * Cherche l'identifiant de l'organisation en premier paramètre du critère {branche_organisation XX}
     314 * sinon dans les boucles parentes ou par jointure.
     315 *
     316 * @internal
     317 *              Copie quasi identique de critere_branche_dist()
     318 *
     319 * @param string $idb
     320 *              Identifiant de la boucle
     321 * @param array $boucles
     322 *              AST du squelette
     323 * @param Critere $crit
     324 *              Paramètres du critère dans cette boucle
     325 * @return void
     326**/
     327function critere_branche_organisation_dist($idb, &$boucles, $crit){
     328
     329        $not = $crit->not;
     330        $boucle = &$boucles[$idb];
     331        // prendre en priorite un identifiant en parametre {branche_organisation XX}
     332        if (isset($crit->param[0])) {
     333                $arg = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
     334        }
     335        // sinon on le prend chez une boucle parente
     336        else {
     337                $arg = kwote(calculer_argument_precedent($idb, 'id_organisation', $boucles));
     338        }
     339
     340        // Trouver une jointure
     341        $champ = "id_organisation";
     342        $desc = $boucle->show;
     343        //Seulement si necessaire
     344        if (!array_key_exists($champ, $desc['field'])){
     345                $cle = trouver_jointure_champ($champ, $boucle);
     346                $trouver_table = charger_fonction("trouver_table", "base");
     347                $desc = $trouver_table($boucle->from[$cle]);
     348                if (count(trouver_champs_decomposes($champ, $desc))>1){
     349                        $decompose = decompose_champ_id_objet($champ);
     350                        $champ = array_shift($decompose);
     351                        $boucle->where[] = array("'='", _q($cle.".".reset($decompose)), '"'.sql_quote(end($decompose)).'"');
     352                }
     353        }
     354        else $cle = $boucle->id_table;
     355
     356        $c = "sql_in('$cle".".$champ', calcul_organisation_branche_in($arg)"
     357             .($not ? ", 'NOT'" : '').")";
     358        $boucle->where[] = !$crit->cond ? $c :
     359                ("($arg ? $c : ".($not ? "'0=1'" : "'1=1'").')');
     360}
     361
     362
    305363?>
  • _plugins_/contacts_et_organisations/trunk/test/co_balises.html

    r69591 r69592  
    6565<div class='description'>
    6666<p>Retourne la liste des identifiants d'organisation d'une branche
    67 d'organisations, séparés par des virgules. Utile avec l'opérateur <code>IN</code> dans
     67d'organisations, séparés par des virgules.</p>
     68
     69<p>Il peut être utile avec l'opérateur <code>IN</code> dans
    6870un critère de boucle tel que <code>{id_organisation IN \#IDS_ORGANISATION_BRANCHE}</code>.</p>
    6971
     
    7173<pre>
    7274&lt;BOUCLE_contacts(CONTACTS){id_organisation IN \#IDS_ORGANISATION_BRANCHE}{par nom}>
     75        \#NOM
     76        ...
     77</pre>
     78
     79<p>Il conviendra cependant de préférer le critère <code>branche_organisation</code> pour cet usage.</p>
     80<pre>
     81&lt;BOUCLE_contacts(CONTACTS){branche_organisation}{par nom}>
    7382        \#NOM
    7483        ...
Note: See TracChangeset for help on using the changeset viewer.