Changeset 89267 in spip-zone


Ignore:
Timestamp:
May 9, 2015, 7:21:52 PM (4 years ago)
Author:
tcharlss@…
Message:

Bugfix du champ "vu" des rôles de documents, étape 2 (merci à Maïeul pour le dépannage) : dès qu'on modifie un objet, on regarde s'il a des documents liés, si c'est le cas on synchronise tous les champs "vu" des liens portant des rôles avec le lien de base correspondant (sans rôle). C'est sans doute simplifiable et optimisable, mais pour l'instant ça fonctionne.
Dans l'idéal, il faudrait agir directement dans la fonction marquer_doublons_docs du plugin Médias, au moment où il met à jour le champ vu sur les liens des documents.

Location:
_plugins_/roles_documents/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/roles_documents/trunk/paquet.xml

    r89167 r89267  
    22        prefix="roles_documents"
    33        categorie="edition"
    4         version="0.1.5"
     4        version="0.1.6"
    55        etat="experimental"
    66        compatibilite="[3.0.0;3.1.*]"
     
    2727        <pipeline nom="document_desc_actions" inclure="roles_documents_pipelines.php" />
    2828        <pipeline nom="post_edition_lien" inclure="roles_documents_pipelines.php" />
     29        <pipeline nom="post_edition" inclure="roles_documents_pipelines.php" />
    2930
    3031</paquet>
  • _plugins_/roles_documents/trunk/roles_documents_pipelines.php

    r89167 r89267  
    5959
    6060/**
    61  * Synchroniser le champ "vu" des liens de documents recevant des roles.
     61 * Synchroniser le champ "vu" lors de la création d'un nouveau lien de document portant un rôle.
    6262 *
    6363 * @pipeline post_edition_liens
     
    7272                and $flux['args']['objet_source'] == 'document' // on a affaire à un document
    7373                and isset($flux['args']['role'])
    74                 and $role = $flux['args']['role']               // et il y a un role donné
     74                and $role = $flux['args']['role']
     75                and strlen($role)                               // et il y a un role donné
    7576                and isset($flux['args']['colonne_role'])
    7677                and $colonne_role = $flux['args']['colonne_role']
     
    7879                and $objet = $flux['args']['objet']
    7980                and $id_objet = intval($flux['args']['id_objet'])
     81                and $vu = sql_getfetsel('vu', 'spip_documents_liens', 'id_document=' .$id_document .' AND objet='.sql_quote($objet) .' AND id_objet='.$id_objet .' AND '.$colonne_role.'=\'\'')
    8082        ){
    81        
    82                 // il y a forcément déjà un lien existant sans rôle
    83                 // on récupère son vu, et on qualifie le nouveau lien avec
    84                 if ($vu = sql_getfetsel('vu', 'spip_documents_liens', 'id_document=' .$id_document .' AND objet='.sql_quote($objet) .' AND id_objet='.$id_objet .' AND '.$colonne_role.'=\'\'')) {
    85 
    86                         include_spip('action/editer_liens');
    87                         objet_qualifier_liens(array('document'=>$id_document), array($objet=>$id_objet), array($colonne_role=>$role, 'vu'=>$vu));
    88                 }
     83                include_spip('action/editer_liens');
     84                objet_qualifier_liens(array('document'=>$id_document), array($objet=>$id_objet), array($colonne_role=>$role, 'vu'=>$vu));
    8985        }
    9086
     
    9389
    9490
     91/**
     92 * Après la modif d'un objet, synchroniser le vu de tous les document liés ayant un rôle avec celui du lien de base (sans rôle)
     93 *
     94 * @pipeline post_edition
     95 *
     96 * @param  array $flux Données du pipeline
     97 * @return array       Données du pipeline
     98 */
     99function roles_documents_post_edition($flux) {
     100
     101                if (
     102                        $flux['args']['action'] == 'modifier'           // on modifie un objet
     103                        and $flux['args']['table'] !== 'spip_documents' // mais pas un document
     104                        and $objet = $flux['args']['type']
     105                        and $id_objet = intval($flux['args']['id_objet'])
     106                ){
     107
     108                        // on regarde s'il y a des documents liés à l'objet modifié
     109                        include_spip('inc/editer_liens');
     110                        if (count($liens = objet_trouver_liens(array('document'=>'*'),array($objet=>$id_objet)))) {
     111                                foreach ($liens as $l) {
     112                                        // on récupère le champ "vu" du lien sans rôle (= lien de base)
     113                                        $vu = sql_getfetsel(
     114                                                'vu',
     115                                                'spip_documents_liens',
     116                                                'id_document=' .$l['id_document'] .' AND objet='.sql_quote($objet) .' AND id_objet='.$id_objet .' AND role = \'\''
     117                                        );
     118                                        var_dump($vu);
     119                                        // on met à jour tous les liens avec rôle
     120                                        sql_updateq(
     121                                                'spip_documents_liens',
     122                                                array('vu'=>$vu),
     123                                                'id_document=' .$l['id_document'] .' AND objet='.sql_quote($objet) .' AND id_objet='.$id_objet .' AND role != \'\''
     124                                        );
     125                                }
     126                        }
     127                }
     128
     129        return $flux;
     130}
     131
     132
    95133?>
  • _plugins_/roles_documents/trunk/todo.md

    r89167 r89267  
    1 - **Balises** : Prendre en charge tous les `LOGO_XXX` (pour l'instant seuls `#LOGO_ARTICLE` et `#LOGO_RUBRIQUE` sont pris en charge).
     1## Balises
    22
    3 - **Critères** : Ajouter la possibilité de filtrer les rôles avec des critères, `{role=truc}` est insuffisant car les rôles peuvent être multiples.
     3Prendre en charge tous les `LOGO_XXX` (pour l'instant seuls `#LOGO_ARTICLE` et `#LOGO_RUBRIQUE` sont pris en charge).
    44
    5 - **Déclarations** : Dans les déclarations, il faudrait pouvoir dire qu'un rôle DOIT être unique pour un même contenu, ou inversement qu'un autre rôle peut être multiple et quand on l'assigne à un autre document : ça l'enlève alors du précédent (pour le cas où le rôle doit être unique).
     5## Critères
     6
     7Ajouter la possibilité de filtrer les rôles avec des critères, `{role=truc}` est insuffisant car les rôles peuvent être multiples.
     8
     9## Déclarations
     10
     11Dans les déclarations, il faudrait pouvoir dire qu'un rôle DOIT être unique pour un même contenu, ou inversement qu'un autre rôle peut être multiple et quand on l'assigne à un autre document : ça l'enlève alors du précédent (pour le cas où le rôle doit être unique).
    612En conséquence, dans l'interface, il faudrait prendre en compte ces limitations. Par ex. rendre impossible l'attribution d'un même rôle à plusieurs documents (cas des logos).
    713À noter : en ajoutant des rôles à un type d'objet, il faut prendre en compte les rôles portant sur tous les objets et qui ont la clé '*', et faire un merge.
    814
    9 - **Interface** : Rendre les rôles attribués plus visibles. Le rôle doit prendre la primeur sur le titre. Quand c'est le logo, ça devrait alors placer l'image dans dans un sous-titre "Logo", comme il y a "illustration" et "portfolio" (qui disparaitront ). Ça donnerait 3 listes de documents : Logo / Documents insérés / Documents joints . Après sélection d'un rôle, recharger tout le bloc des documents.
     15## Interface
    1016
    11 - **Bugs/limitations** : Chaque rôle donné à un document crée une nouvelle ligne dans la table `spip_documents_liens`, donc si on boucle sur cette table pour afficher les documents liés à un objet, le même document ressortira autant de fois qu'il a de rôles (cf. `documents_colonne.html` du plugins Médias). De plus, ça rend le critère `{vu}` inopérant puisqu'un même document peut se retrouver à la fois vu et non vu après plusieurs manoeuvres. Pistes pour résoudre ça : une seul ligne par document lié, avec plusieurs rôles séparés par des virgules ? Ou alors par défaut faire en sorte que la boucle documents ne retourne qu'une seule fois un doc lié ayant plusieurs rôles ?
     17Rendre les rôles attribués plus visibles. Le rôle doit prendre la primeur sur le titre. Quand c'est le logo, ça devrait alors placer l'image dans dans un sous-titre "Logo", comme il y a "illustration" et "portfolio" (qui disparaitront ). Ça donnerait 3 listes de documents : Logo / Documents insérés / Documents joints . Après sélection d'un rôle, recharger tout le bloc des documents.
     18
     19## Bugs/limitations
     20
     21- Chaque rôle donné à un document crée une nouvelle ligne dans la table `spip_documents_liens`, donc si on boucle sur cette table pour afficher les documents liés à un objet, le même document ressortira autant de fois qu'il a de rôles (cf. `documents_colonne.html` du plugins Médias).
     22- Le critère `{vu}` est inopérant puisqu'un même document peut se retrouver à la fois vu et non vu après plusieurs manoeuvres. Pistes pour résoudre ça : une seul ligne par document lié, avec plusieurs rôles séparés par des virgules ? Ou alors par défaut faire en sorte que la boucle documents ne retourne qu'une seule fois un doc lié ayant plusieurs rôles ?
     23- On ne peux pas détacher un document qui possède un rôle déclaré par un plugin désactivé.
Note: See TracChangeset for help on using the changeset viewer.