Changeset 109243 in spip-zone


Ignore:
Timestamp:
Mar 2, 2018, 6:16:14 PM (15 months ago)
Author:
tcharlss@…
Message:

Possibilité d'attribuer des rôles principaux (=logos) dans la liste des documents. En clair, on peut dire : je veux utiliser tel document lié comme logo. L'unicité du logo est maintenue : si on choisit un rôle de logo qui est déjà attribué, celui-ci sera remplacé (avec le rechargement ajax qui va bien).

Location:
_plugins_/roles_documents/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/roles_documents/trunk/formulaires/editer_roles_document.html

    r109227 r109243  
    3232                        objet,
    3333                        id_objet,
    34                         principaux='',
    3534                        libelle=<:roles_documents:bouton_modifier_roles:>,
    3635                }>
  • _plugins_/roles_documents/trunk/formulaires/editer_roles_document.php

    r109227 r109243  
    4444 * Traiter le post des informations d'édition des rôles des liens d'un document
    4545 *
     46 * On effectue les traitements par défaut de editer_liens, sauf qu'on s'assure de conserver l'unicité des rôles principaux (= logos)
     47 *
    4648 * @param int $id_document
    4749 *     Identifiant du document
     
    5759function formulaires_editer_roles_document_traiter_dist($id_document, $objet, $id_objet, $options = array()) {
    5860
    59         // retourner les traitements de editer_liens
    60         $editer_liens_traiter = charger_fonction('traiter', 'formulaires/editer_liens');
    61         $res = $editer_liens_traiter('spip_documents', $objet, $id_objet);
     61        include_spip('inc/editer_liens'); // inclus également les rôles
     62        $res = array();
     63        $done = false;
     64
     65        // Récupérer les rôles principaux (=logos) de l'objet
     66        $roles = roles_documents_presents_sur_objet($objet, $id_objet, 0, true);
     67
     68        // Action effectuée
     69        $ajouter = _request('ajouter_lien');
     70        $supprimer = _request('supprimer_lien');
     71
     72        // Ajouter
     73        if ($ajouter) {
     74                $role = retrouver_action_role_document($ajouter);
     75                // Si c'est rôle principal (=logo) déjà attribué, on met à jour le lien existant
     76                if (in_array($role, $roles['attribues'])
     77                        and $document_present = objet_trouver_liens(array('document' => '*'), array($objet => $id_objet), array('role=' . sql_quote($role)))
     78                ) {
     79                        $update = sql_updateq(
     80                                'spip_documents_liens',
     81                                array(
     82                                        'id_document' => $id_document,
     83                                ),
     84                                array(
     85                                        'id_document='. intval($document_present[0]['id_document']),
     86                                        'objet=' . sql_quote($objet),
     87                                        'id_objet=' . intval($id_objet),
     88                                        'role=' . sql_quote($role),
     89                                )
     90                        );
     91                        $done = true;
     92                }
     93        }
     94
     95        // Si on a fait les traitements nous-même
     96        if ($done) {
     97                $res['editable'] = true;
     98
     99        // Sinon traitements génériques de editer_liens
     100        } else {
     101                $editer_liens_traiter = charger_fonction('traiter', 'formulaires/editer_liens');
     102                $res = $editer_liens_traiter('spip_documents', $objet, $id_objet);
     103        }
    62104
    63105        // recharger un ou plusieurs blocs après modification des roles
     
    78120        return $res;
    79121}
     122
     123
     124/**
     125 * Fonction privée pour retrouver le rôle sélectionné dans une action.
     126 *
     127 * @param array $action
     128 *     Valeur du bouton = arguments séparés par des tirets
     129 *     document-id_document-objet-id_objet-role
     130 * @return string|false
     131 *     Le rôle de l'action, sinon false
     132 */
     133function retrouver_action_role_document($action) {
     134
     135        $role = false;
     136        $action = array_shift(array_flip($action));
     137        if (is_array($arguments = explode('-', $action))
     138                and count($arguments) === 5
     139        ) {
     140                $role = $arguments[4];
     141        }
     142
     143        return $role;
     144}
  • _plugins_/roles_documents/trunk/formulaires/inc-editer_liens_actions_roles_documents.html

    r109228 r109243  
    66
    77        Notes :
    8         - On n'affiche pas les rôles principaux (de logos)
    98        - S'il n'y a qu'un rôle, on ne permet pas de le supprimer (l'API nécessite au moins un rôle)
    109        - S'il n'y a qu'un rôle et pas d'autres attribuables, on n'affiche pas le dropdown
  • _plugins_/roles_documents/trunk/roles_documents_fonctions.php

    r109228 r109243  
    9191        // On retourne le détail
    9292        $roles = array(
    93                 'possibles'     => $roles_possibles,
    94                 'attribues'     => $roles_attribues,
     93                'possibles'    => $roles_possibles,
     94                'attribues'    => $roles_attribues,
    9595                'attribuables' => $roles_attribuables,
    9696        );
  • _plugins_/roles_documents/trunk/roles_documents_pipelines.php

    r109235 r109243  
    4141        ) {
    4242                // bloc à recharger
    43                 $ajaxreload = !empty($flux['args']['ajaxreload']) ? $flux['args']['ajaxreload'] : '#documents';
     43                $ajaxreload = !empty($flux['args']['ajaxreload']) ? $flux['args']['ajaxreload'] : '.liste_items.documents';
    4444                // mini-formulaire
    4545                $form = recuperer_fond(
Note: See TracChangeset for help on using the changeset viewer.