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

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

Le trunk n'est plus que pour 3.1, et on enlève le code spécifique à des logos précis avec méthode par squelettes (tout ce qui venait de logo auto), car on utilise maintenant le nouveau pipeline de recherche de logos.

  • Property svn:executable set to *
File size: 5.2 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 * Ajout de contenu dans le bloc «actions» des documents
12 *
13 * - Formulaire pour définir les rôles des documents de type image
14 *
15 * @pipeline document_desc_actions
16 *
17 * @param  array $flux Données du pipeline
18 * @return array       Données du pipeline
19 */
20function roles_documents_document_desc_actions($flux) {
21        include_spip('inc/autoriser');
22       
23        $texte = "";
24        $e = trouver_objet_exec(_request('exec'));
25
26        if (
27                $e !== false // page d'un objet éditorial
28                AND $e['edition'] === false // pas en mode édition
29                AND $id_document = intval($flux['args']['id_document'])
30                // AND ($media=sql_getfetsel('media','spip_documents',"id_document=".$id_document)=='image') // que pour les images
31                AND $objet = $e['type'] // article
32                AND $id_table_objet = $e['id_table_objet'] // id_article
33                AND $id_objet = intval(_request($id_table_objet))
34                AND autoriser('modifier', 'document', $id_document)
35        ) {
36                // description des roles
37                include_spip('inc/roles');
38                $roles = roles_presents('document', $objet);
39                // mini-formulaire
40                $form = recuperer_fond('prive/squelettes/inclure/editer_roles_objet_lie',
41                        array(
42                                'objet_source' => "document",
43                                'id_objet_source' => $id_document,
44                                'objet' => $objet,
45                                'id_objet' => $id_objet,
46                                'options' => array(
47                                        'ajaxReload' => '#documents',
48                                ),
49                        )
50                );
51                $texte = $form;
52        }
53
54        if ($texte) {
55                $flux['data'] .= $texte;
56        }
57
58        return $flux;
59}
60
61
62/**
63 * Synchroniser le champ "vu" lors de la création d'un nouveau lien de document portant un rôle.
64 *
65 * @pipeline post_edition_liens
66 *
67 * @param  array $flux Données du pipeline
68 * @return array       Données du pipeline
69 */
70function roles_documents_post_edition_lien($flux) {
71        if (
72                $flux['args']['action'] == 'insert'             // il s'agit d'une création de lien
73                and $flux['args']['objet_source'] == 'document' // on a affaire à un document
74                and isset($flux['args']['role'])
75                and $role = $flux['args']['role']
76                and strlen($role)                               // et il y a un role donné
77                and isset($flux['args']['colonne_role'])
78                and $colonne_role = $flux['args']['colonne_role']
79                and $id_document = intval($flux['args']['id_objet_source'])
80                and $objet = $flux['args']['objet']
81                and $id_objet = intval($flux['args']['id_objet'])
82                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'))
83        ) {
84                include_spip('action/editer_liens');
85                objet_qualifier_liens(array('document'=>$id_document), array($objet=>$id_objet), array($colonne_role=>$role, 'vu'=>$vu));
86        }
87
88        return $flux;
89}
90
91
92/**
93 * Après la modif d'un objet, synchroniser le vu de tous les document liés ayant un rôle
94 * avec celui du lien de base (ayant le rôle par défaut)
95 *
96 * @pipeline post_edition
97 *
98 * @param  array $flux Données du pipeline
99 * @return array       Données du pipeline
100 */
101function roles_documents_post_edition($flux) {
102        if (
103                isset($flux['args']['action'])
104                and $flux['args']['action'] == 'modifier'       // on modifie un objet
105                and $flux['args']['table'] !== 'spip_documents'  // mais pas un document
106                and $objet = $flux['args']['type']
107                and $id_objet = intval($flux['args']['id_objet'])
108        ){
109                include_spip('action/editer_liens');
110
111                // on regarde s'il y a des documents liés à l'objet modifié
112                if (count($liens = objet_trouver_liens(array('document'=>'*'),array($objet=>$id_objet)))) {
113                        foreach ($liens as $l) {
114                                // on récupère le champ "vu" du lien avec le rôle par défaut
115                                $vu = sql_getfetsel(
116                                        'vu',
117                                        'spip_documents_liens',
118                                        'id_document=' .$l['id_document'] .' AND objet='.sql_quote($objet) .' AND id_objet='.$id_objet .' AND role='.sql_quote('document')
119                                );
120                                // on met à jour tous les autres liens avec rôle
121                                sql_updateq(
122                                        'spip_documents_liens',
123                                        array('vu'=>$vu),
124                                        'id_document=' .$l['id_document'] .' AND objet='.sql_quote($objet) .' AND id_objet='.$id_objet .' AND role!='.sql_quote('document')
125                                );
126                        }
127                }
128        }
129
130        return $flux;
131}
132
133function roles_documents_chercher_logo($flux) {
134        // Si personne n'a trouvé de logo avant
135        if (empty($flux['data'])) {
136                // On cherche la première image avec un rôle "logo"
137                include_spip('base/abstract_sql');
138               
139                // Quel rôle va-t-on chercher ?
140                if ($flux['args']['mode'] === 'on') {
141                        $role = 'logo';
142                } elseif ($flux['args']['mode'] === 'off') {
143                        $role = 'logo_survol';
144                } else {
145                        $role = $flux['args']['mode'];
146                }
147               
148                if ($image = sql_fetsel(
149                        'fichier, extension',
150                        'spip_documents as d inner join spip_documents_liens as l on d.id_document = l.id_document',
151                        array(
152                                'l.objet = '.sql_quote($flux['args']['objet']),
153                                'l.id_objet = '.intval($flux['args']['id_objet']),
154                                sql_in('extension', array('png', 'jpg', 'gif')),
155                                'l.role='.sql_quote($role),
156                        ),
157                        '', //group
158                        '0+titre, titre'
159                )) {
160                        $chemin_complet = _DIR_IMG . $image['fichier'];
161                       
162                        $flux['data'] = array(
163                                $chemin_complet,
164                                dirname($chemin_complet) . '/',
165                                basename($chemin_complet, '.' . $image['extension']),
166                                $image['extension'],
167                                @filemtime($chemin_complet)
168                        );
169                }
170        }
171       
172        return $flux;
173}
Note: See TracBrowser for help on using the repository browser.