Changeset 59888 in spip-zone


Ignore:
Timestamp:
Mar 28, 2012, 6:09:08 PM (7 years ago)
Author:
marcimat@…
Message:

Report de : r59887 (#IDS_ORGANISATION_BRANCHE)

Location:
_plugins_/contacts_et_organisations/trunk
Files:
2 edited

Legend:

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

    r58283 r59888  
    8383
    8484
     85// --------------
     86
     87/**
     88 *
     89 * Cette balise retourne un tableau listant toutes les id_rubrique d'une branche.
     90 * L'identifiant de la branche (id_rubrique) est pris dans la boucle
     91 * la plus proche sinon dans l'environnement.
     92 *
     93 * On ne peut pas l'utiliser dans un {critere IN #IDS_BRANCHE} en 1.8.3 :(
     94 *
     95 */
     96function balise_IDS_ORGANISATION_BRANCHE_dist($p) {
     97
     98        // parcours de tous les identifiants recus en parametre
     99        $n = 0;
     100        $ids = array();
     101        while ($id_org = interprete_argument_balise(++$n,$p)) {
     102                if ($id_org = trim(trim($id_org), "'")) { // vire les guillements pour accepter soit un terme soit un nombre
     103                        $ids = array_merge($ids, array($id_org)); // ... les merge avec id
     104                }
     105        }
     106       
     107        // pas d'identifiant, on prend la boucle la plus proche
     108        if (!$ids) {
     109                $ids = champ_sql('id_organisation', $p);
     110                $p->code = "explode(',', calcul_organisation_branche_in($ids))"; // 200
     111        } else {
     112                $p->code = "explode(',', calcul_organisation_branche_in(" . var_export($ids, true) . "))"; // 200
     113        }
     114
     115        return $p;
     116}
     117
     118
     119
     120/**
     121 * Calcul d'une branche
     122 * (liste des id_organisation contenues dans une organisation donnee)
     123 *
     124 * @param string|int|array $id
     125 * @return string
     126 */
     127function calcul_organisation_branche_in($id) {
     128        static $b = array();
     129
     130        // normaliser $id qui a pu arriver comme un array, comme un entier, ou comme une chaine NN,NN,NN
     131        if (!is_array($id)) $id = explode(',',$id);
     132        $id = join(',', array_map('intval', $id));
     133        if (isset($b[$id]))
     134                return $b[$id];
     135
     136        // Notre branche commence par l'organisation de depart
     137        $branche = $r = $id;
     138
     139        // On ajoute une generation (les filles de la generation precedente)
     140        // jusqu'a epuisement
     141        while ($filles = sql_allfetsel(
     142                                        'id_organisation',
     143                                        'spip_organisations',
     144                                        sql_in('id_parent', $r)." AND ". sql_in('id_organisation', $r, 'NOT')
     145                                        )) {
     146                $r = join(',', array_map('array_shift', $filles));
     147                $branche .= ',' . $r;
     148        }
     149
     150        # securite pour ne pas plomber la conso memoire sur les sites prolifiques
     151        if (strlen($branche)<10000)
     152                $b[$id] = $branche;
     153        return $branche;
     154}
     155
     156
     157
    85158?>
  • _plugins_/contacts_et_organisations/trunk/paquet.xml

    r58274 r59888  
    22        prefix="contacts"
    33        categorie="auteur"
    4         version="2.0.0"
     4        version="2.1.0"
    55        etat="test"
    66        compatibilite="[3.0.0-dev;3.0.*]"
Note: See TracChangeset for help on using the changeset viewer.