source: spip-zone/_plugins_/roles_documents/branches/v0/roles_documents_pipelines.php @ 98414

Last change on this file since 98414 was 98414, checked in by tcharlss@…, 4 years ago

report de r98413 sur la branche v0 : correction du pipeline document_desc_actions.
up de Z : version 0.2.3

  • Property svn:executable set to *
File size: 4.6 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        $exec                = trouver_objet_exec(_request('exec'));
27        $objet_exec          = $exec['type'];
28        $id_table_objet_exec = $exec['id_table_objet'];
29        $id_objet_exec       = intval(_request($id_table_objet_exec));
30        // soit objet et id_objet sont passés en paramètre, soit on prend l'objet édité sur la page
31        $objet               = !empty($flux['args']['objet']) ? $flux['args']['objet'] : $objet_exec;
32        $id_objet            = !empty($flux['args']['id_objet']) ? $flux['args']['id_objet'] : $id_objet_exec;
33
34        if (
35                $exec !== false // page d'un objet éditorial
36                and $exec['edition'] === false // pas en mode édition
37                and $id_document = intval($flux['args']['id_document'])
38                // AND ($media=sql_getfetsel('media','spip_documents',"id_document=".$id_document)=='image') // que pour les images
39                and autoriser('modifier', 'document', $id_document)
40                and $objet
41                and $id_objet
42        ) {
43                // description des roles
44                include_spip('inc/roles');
45                $roles = roles_presents('document', $objet);
46                // bloc à recharger
47                $ajaxreload = !empty($flux['args']['ajaxreload']) ? $flux['args']['ajaxreload'] : '#documents';
48                // mini-formulaire
49                $form = recuperer_fond('prive/squelettes/inclure/editer_roles_objet_lie',
50                        array(
51                                'objet_source'    => "document",
52                                'id_objet_source' => $id_document,
53                                'objet'           => $objet,
54                                'id_objet'        => $id_objet,
55                                'options' => array(
56                                        'ajaxReload' => $ajaxreload,
57                                ),
58                        )
59                );
60                $texte = $form;
61        }
62
63        if ($texte) {
64                $flux['data'] .= $texte;
65        }
66
67        return $flux;
68}
69
70
71/**
72 * Synchroniser le champ "vu" lors de la création d'un nouveau lien de document portant un rôle.
73 *
74 * @pipeline post_edition_liens
75 *
76 * @param  array $flux Données du pipeline
77 * @return array       Données du pipeline
78 */
79function roles_documents_post_edition_lien($flux) {
80        if (
81                $flux['args']['action'] == 'insert'             // il s'agit d'une création de lien
82                and $flux['args']['objet_source'] == 'document' // on a affaire à un document
83                and isset($flux['args']['role'])
84                and $role = $flux['args']['role']
85                and strlen($role)                               // et il y a un role donné
86                and isset($flux['args']['colonne_role'])
87                and $colonne_role = $flux['args']['colonne_role']
88                and $id_document = intval($flux['args']['id_objet_source'])
89                and $objet = $flux['args']['objet']
90                and $id_objet = intval($flux['args']['id_objet'])
91                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'))
92        ) {
93                include_spip('action/editer_liens');
94                objet_qualifier_liens(array('document'=>$id_document), array($objet=>$id_objet), array($colonne_role=>$role, 'vu'=>$vu));
95        }
96
97        return $flux;
98}
99
100
101/**
102 * Après la modif d'un objet, synchroniser le vu de tous les document liés ayant un rôle
103 * avec celui du lien de base (ayant le rôle par défaut)
104 *
105 * @pipeline post_edition
106 *
107 * @param  array $flux Données du pipeline
108 * @return array       Données du pipeline
109 */
110function roles_documents_post_edition($flux) {
111        if (
112                isset($flux['args']['action'])
113                and $flux['args']['action'] == 'modifier'       // on modifie un objet
114                and $flux['args']['table'] !== 'spip_documents'  // mais pas un document
115                and $objet = $flux['args']['type']
116                and $id_objet = intval($flux['args']['id_objet'])
117        ){
118                include_spip('action/editer_liens');
119
120                // on regarde s'il y a des documents liés à l'objet modifié
121                if (count($liens = objet_trouver_liens(array('document'=>'*'),array($objet=>$id_objet)))) {
122                        foreach ($liens as $l) {
123                                // on récupère le champ "vu" du lien avec le rôle par défaut
124                                $vu = sql_getfetsel(
125                                        'vu',
126                                        'spip_documents_liens',
127                                        'id_document=' .$l['id_document'] .' AND objet='.sql_quote($objet) .' AND id_objet='.$id_objet .' AND role='.sql_quote('document')
128                                );
129                                // on met à jour tous les autres liens avec rôle
130                                sql_updateq(
131                                        'spip_documents_liens',
132                                        array('vu'=>$vu),
133                                        'id_document=' .$l['id_document'] .' AND objet='.sql_quote($objet) .' AND id_objet='.$id_objet .' AND role!='.sql_quote('document')
134                                );
135                        }
136                }
137        }
138
139        return $flux;
140}
Note: See TracBrowser for help on using the repository browser.