Changeset 88325 in spip-zone


Ignore:
Timestamp:
Apr 1, 2015, 8:45:28 AM (4 years ago)
Author:
cedric@…
Message:

Refactoring : on supprime la variable definir_role et on la remplace par la variable qualifier_lien plus generique. Cette derniere peut porter le role mais aussi d'autres valeurs qui sont passees a l'api editer_liens
Le fonctionnement du plugin est inchangé pour qui utilise bien inc-editer_liens_roles.html (cas du plugin roles_auteurs qui n'est pas impacte par cette modification)

Location:
_plugins_/roles/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/roles/trunk/formulaires/editer_liens.php

    r88320 r88325  
    121121                'ajouter_lien' => '',
    122122                'supprimer_lien' => '',
    123                 'definir_roles' => '',
     123                'qualifier_lien' => '',
    124124                '_roles' => $roles, # description des roles
    125125                '_oups' => _request('_oups'),
     
    136136 * - ajouter_lien et supprimer_lien
    137137 * - remplacer_lien
    138  * - definir_roles
     138 * - qualifier_lien
    139139 *
    140140 * Les deux premières peuvent être de trois formes différentes :
     
    149149 * ou objet1-id1 est celui qu'on enleve et objet3-id3 celui qu'on ajoute
    150150 *
    151  * definir_roles doit être de la forme, et sert en complément de ajouter_lien
    152  * definir_roles[objet1-id1-objet2-id2] = array("role", "autre_role")
     151 * qualifier_lien doit être de la forme, et sert en complément de ajouter_lien
     152 * qualifier_lien[objet1-id1-objet2-id2][role] = array("role1", "autre_role")
     153 * qualifier_lien[objet1-id1-objet2-id2][valeur] = array("truc", "chose")
     154 * produira 2 liens chacun avec array("role"=>"role1","valeur"=>"truc") et array("role"=>"autre_role","valeur"=>"chose")
    153155 *
    154156 * @param string $a
     
    247249                                                $ajout_ok = true;
    248250                                                list($objet1, $ids, $objet2, $idl) = explode("-", $lien);
    249                                                 $roles = lien_retrouver_roles_postes($lien);
     251                                                $qualifs = lien_retrouver_qualif($objet_lien, $lien);
    250252                                                if ($objet_lien==$objet1){
    251                                                         lien_ajouter_liaison($objet1, $ids, $objet2, $idl, $roles);
     253                                                        lien_ajouter_liaisons($objet1, $ids, $objet2, $idl, $qualifs);
    252254                                                } else {
    253                                                         lien_ajouter_liaison($objet2, $idl, $objet1, $ids, $roles);
     255                                                        lien_ajouter_liaisons($objet2, $idl, $objet1, $ids, $qualifs);
    254256                                                }
    255257                                                set_request('id_lien_ajoute', $ids);
     
    307309
    308310/**
    309  * Retrouve le ou les roles postés avec une liaison demandée
     311 * Retrouve le ou les qualificatifs postés avec une liaison demandée
    310312 *
    311313 * @internal
    312  * @param string $lien Action du lien
    313  * @return array          Liste des rôles. Tableau vide s'il n'y en a pas.
     314 * @param string $objet_lien
     315 *    objet qui porte le lien
     316 * @param string $lien
     317 *   Action du lien
     318 * @return array
     319 *   Liste des qualifs pour chaque lien. Tableau vide s'il n'y en a pas.
    314320 **/
    315 function lien_retrouver_roles_postes($lien){
     321function lien_retrouver_qualif($objet_lien, $lien){
    316322        // un role est défini dans la liaison
    317323        $defs = explode('-', $lien);
    318         list(, , , , $role) = $defs;
    319         if ($role) return array($role);
     324        list($objet1, , $objet2, , $role) = $defs;
     325        if ($objet_lien==$objet1){
     326                $colonne_role = roles_colonne($objet1, $objet2);
     327        }
     328        else {
     329                $colonne_role = roles_colonne($objet2, $objet1);
     330        }
     331
     332        // cas ou le role est defini en 5e argument de l'action sur le lien (suppression, ajout rapide sans autre attribut)
     333        if ($role) {
     334                return array(
     335                        // un seul lien avec ce role
     336                        array($colonne_role=>$role)
     337                );
     338        }
    320339
    321340        // retrouver les rôles postés pour cette liaison, s'il y en a.
    322         $roles = _request('definir_roles');
    323         if (!$roles OR !is_array($roles)){
     341        $qualifier_lien = _request('qualifier_lien');
     342        if (!$qualifier_lien OR !is_array($qualifier_lien)){
    324343                return array();
    325344        }
    326345
    327346        // pas avec l'action complete (incluant le role)
    328         if (!isset($roles[$lien]) OR !$roles = $roles[$lien]){
     347        $qualif = array();
     348        if ((!isset($qualifier_lien[$lien]) OR !$qualif = $qualifier_lien[$lien])
     349          AND count($defs)==5){
    329350                // on tente avec l'action sans le role
    330351                array_pop($defs);
    331352                $lien = implode('-', $defs);
    332                 if (!isset($roles[$lien]) OR !$roles = $roles[$lien]){
    333                         $roles = array();
    334                 }
    335         }
    336 
    337         // pas de rôle vide
    338         return array_filter($roles);
     353                if (!isset($qualifier_lien[$lien]) OR !$qualif = $qualifier_lien[$lien]){
     354                        $qualif = array();
     355                }
     356        }
     357
     358        // $qualif de la forme array(role=>array(...),valeur=>array(...),....)
     359        // on le reforme en array(array(role=>..,valeur=>..,..),array(role=>..,valeur=>..,..),...)
     360        $qualifs = array();
     361        while (count($qualif)){
     362                $q = array();
     363                foreach($qualif as $att=>$values){
     364                        if (is_array($values)){
     365                                $q[$att] = array_shift($qualif[$att]);
     366                                if (!count($qualif[$att])){
     367                                        unset($qualif[$att]);
     368                                }
     369                        }
     370                        else {
     371                                $q[$att] = $values;
     372                                unset($qualif[$att]);
     373                        }
     374                }
     375                // pas de rôle vide
     376                if (!$colonne_role OR !isset($q[$colonne_role]) OR $q[$colonne_role])
     377                        $qualifs[] = $q;
     378        }
     379
     380        return $qualifs;
    339381}
    340382
     
    350392 * @param string $objet_lien Objet à lier
    351393 * @param array|string $idl Identifiants pour l'objet lié
     394 * @param array $qualifs
    352395 * @return void
    353396 **/
    354 function lien_ajouter_liaison($objet_source, $ids, $objet_lien, $idl, $roles){
     397function lien_ajouter_liaisons($objet_source, $ids, $objet_lien, $idl, $qualifs){
    355398
    356399        // retrouver la colonne de roles s'il y en a a lier
    357         if ($roles and $colonne_role = roles_colonne($objet_source, $objet_lien)){
    358                 foreach ($roles as $role){
    359                         objet_associer(array($objet_source => $ids), array($objet_lien => $idl), array($colonne_role => $role));
     400        if (is_array($qualifs) and count($qualifs)){
     401                foreach ($qualifs as $qualif){
     402                        objet_associer(array($objet_source => $ids), array($objet_lien => $idl), $qualif);
    360403                }
    361404        } else {
     
    364407}
    365408
    366 ?>
  • _plugins_/roles/trunk/formulaires/inc-editer_liens_roles.html

    r88320 r88325  
    11#SET{exclus,#ENV{id}|roles_presents_sur_id{#ENV{objet_source},#ENV{objet},#ENV{id_objet},#ENV{_objet_lien}}}
    22<B_roles>
    3 <select class="selection_roles chosen" name="definir_roles\[#ENV{cle}\]\[\]" title="<:roles:selectionner_roles|attribut_html:>"
     3<select class="selection_roles chosen" name="qualifier_lien\[#ENV{cle}\]\[#ENV{_roles/colonne}\]\[\]" title="<:roles:selectionner_roles|attribut_html:>"
    44        multiple="multiple" data-placeholder="<:roles:choisir_role|attribut_html:>">
    55<BOUCLE_roles(DATA){source table,#ENV{_roles/roles/choix}}{valeur !IN #GET{exclus}}>
  • _plugins_/roles/trunk/paquet.xml

    r88320 r88325  
    22        prefix="roles"
    33        categorie="outil"
    4         version="1.3.1"
     4        version="1.4.0"
    55        etat="dev"
    66        compatibilite="[3.0.0;3.1.*]"
Note: See TracChangeset for help on using the changeset viewer.