source: spip-zone/_plugins_/roles_documents/trunk/roles_documents_pipelines.php @ 96366

Last change on this file since 96366 was 96366, checked in by marcimat@…, 3 years ago

Recharger le bloc des documents après avoir modifié un rôle. Cela permet
entre autres d'enlever un document de la liste lorsqu'on lui retire son
dernier rôle.

  • Property svn:executable set to *
File size: 4.1 KB
Line 
1<?php
2/**
3 * Plugin Rôles de documents
4 * (c) 2015
5 * Licence GNU/GPL
6 */
7
8if (!defined('_ECRIRE_INC_VERSION')) return;
9
10
11
12/**
13 * Ajout de contenu dans le bloc «actions» des documents
14 *
15 * - Formulaire pour définir les rôles des documents de type image
16 *
17 * @pipeline document_desc_actions
18 *
19 * @param  array $flux Données du pipeline
20 * @return array       Données du pipeline
21 */
22function roles_documents_document_desc_actions($flux) {
23        include_spip('inc/autoriser');
24       
25        $texte = "";
26        $e = trouver_objet_exec(_request('exec'));
27
28        if (
29                $e !== false // page d'un objet éditorial
30                AND $e['edition'] === false // pas en mode édition
31                AND $id_document = intval($flux['args']['id_document'])
32                // AND ($media=sql_getfetsel('media','spip_documents',"id_document=".$id_document)=='image') // que pour les images
33                AND $objet = $e['type'] // article
34                AND $id_table_objet = $e['id_table_objet'] // id_article
35                AND $id_objet = intval(_request($id_table_objet))
36                AND autoriser('modifier', 'document', $id_document)
37        ) {
38                // description des roles
39                include_spip('inc/roles');
40                $roles = roles_presents('document', $objet);
41                // mini-formulaire
42                $form = recuperer_fond('prive/squelettes/inclure/editer_roles_objet_lie',
43                        array(
44                                'objet_source' => "document",
45                                'id_objet_source' => $id_document,
46                                'objet' => $objet,
47                                'id_objet' => $id_objet,
48                                'options' => array(
49                                        'ajaxReload' => '#documents',
50                                ),
51                        )
52                );
53                $texte = $form;
54        }
55
56        if ($texte) {
57                $flux['data'] .= $texte;
58        }
59
60        return $flux;
61}
62
63
64/**
65 * Synchroniser le champ "vu" lors de la création d'un nouveau lien de document portant un rôle.
66 *
67 * @pipeline post_edition_liens
68 *
69 * @param  array $flux Données du pipeline
70 * @return array       Données du pipeline
71 */
72function roles_documents_post_edition_lien($flux) {
73        if (
74                $flux['args']['action'] == 'insert'             // il s'agit d'une création de lien
75                and $flux['args']['objet_source'] == 'document' // on a affaire à un document
76                and isset($flux['args']['role'])
77                and $role = $flux['args']['role']
78                and strlen($role)                               // et il y a un role donné
79                and isset($flux['args']['colonne_role'])
80                and $colonne_role = $flux['args']['colonne_role']
81                and $id_document = intval($flux['args']['id_objet_source'])
82                and $objet = $flux['args']['objet']
83                and $id_objet = intval($flux['args']['id_objet'])
84                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.'='.sql_quote('document'))
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        }
89
90        return $flux;
91}
92
93
94/**
95 * Après la modif d'un objet, synchroniser le vu de tous les document liés ayant un rôle
96 * avec celui du lien de base (ayant le rôle par défaut)
97 *
98 * @pipeline post_edition
99 *
100 * @param  array $flux Données du pipeline
101 * @return array       Données du pipeline
102 */
103function roles_documents_post_edition($flux) {
104        if (
105                isset($flux['args']['action'])
106                and $flux['args']['action'] == 'modifier'       // on modifie un objet
107                and $flux['args']['table'] !== 'spip_documents'  // mais pas un document
108                and $objet = $flux['args']['type']
109                and $id_objet = intval($flux['args']['id_objet'])
110        ){
111                include_spip('action/editer_liens');
112
113                // on regarde s'il y a des documents liés à l'objet modifié
114                if (count($liens = objet_trouver_liens(array('document'=>'*'),array($objet=>$id_objet)))) {
115                        foreach ($liens as $l) {
116                                // on récupère le champ "vu" du lien avec le rôle par défaut
117                                $vu = sql_getfetsel(
118                                        'vu',
119                                        'spip_documents_liens',
120                                        'id_document=' .$l['id_document'] .' AND objet='.sql_quote($objet) .' AND id_objet='.$id_objet .' AND role='.sql_quote('document')
121                                );
122                                // on met à jour tous les autres liens avec rôle
123                                sql_updateq(
124                                        'spip_documents_liens',
125                                        array('vu'=>$vu),
126                                        'id_document=' .$l['id_document'] .' AND objet='.sql_quote($objet) .' AND id_objet='.$id_objet .' AND role!='.sql_quote('document')
127                                );
128                        }
129                }
130        }
131
132        return $flux;
133}
Note: See TracBrowser for help on using the repository browser.