source: spip-zone/_plugins_/diogene/diogene_complements/diogene_documents/trunk/diogene_documents_pipelines.php @ 97999

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

Nettoyage

File size: 8.6 KB
Line 
1<?php
2/**
3 * Plugin Diogene Documents
4 *
5 * Auteurs :
6 * kent1 (http://www.kent1.info - kent1@arscenic.info)
7 *
8 * © 2014-2015 - Distribue sous licence GNU/GPL
9 *
10 * Utilisation des pipelines par Diogene Documents
11 *
12 * @package SPIP\Diogene Documents\Pipelines
13 **/
14
15if (!defined('_ECRIRE_INC_VERSION')) {
16        return;
17}
18
19/**
20 * Insertion dans le pipeline diogene_ajouter_saisies (Diogene)
21 *
22 * Ajout des saisies supplémentaires dans le formulaire
23 *
24 * @param array $flux Le contexte du pipeline
25 * @return array $flux le contexte modifié passé aux suivants
26 */
27function diogene_documents_diogene_ajouter_saisies($flux) {
28        if (is_array(unserialize($flux['args']['champs_ajoutes']))
29                and in_array('documents', unserialize($flux['args']['champs_ajoutes']))) {
30                $objet = $flux['args']['type'];
31                $id_table_objet = id_table_objet($flux['args']['type']);
32                $id_objet = $flux['args']['contexte'][$id_table_objet];
33                if (is_array(unserialize($flux['args']['options_complements']['champs_documents']))) {
34                        $flux['args']['contexte']['champs_documents'] = unserialize($flux['args']['options_complements']['champs_documents']);
35                } else {
36                        $flux['args']['contexte']['champs_documents'] = array();
37                }
38
39                $flux['args']['contexte']['nombre_documents'] = isset($flux['args']['options_complements']['nombre_documents']) ? $flux['args']['options_complements']['nombre_documents'] : 0;
40
41                if (intval($id_objet) > 0) {
42                        $documents_objet = sql_allfetsel('*', 'spip_documents as docs LEFT JOIN spip_documents_liens as liens on docs.id_document = liens.id_document', 'liens.objet='.sql_quote($objet).' AND liens.id_objet='.intval($id_objet));
43                        foreach ($documents_objet as $doc) {
44                                $id_document = $doc['id_document'];
45                                foreach (array('titre','credits','descriptif','supprimer') as $champ) {
46                                        $champ_ok = $champ.'_'.$id_document;
47                                        $flux['args']['contexte'][$champ_ok] = _request($champ_ok) ? _request($champ_ok) : $doc[$champ];
48                                }
49                        }
50                }
51
52                if (isset($flux['args']['options_complements']['documents_un_par_un'])
53                        and $flux['args']['options_complements']['documents_un_par_un'] == 'on'
54                        and intval($flux['args']['options_complements']['nombre_documents']) >= 1) {
55                        $flux['data'] .= recuperer_fond('formulaires/diogene_ajouter_documents_un_par_un', $flux['args']['contexte']);
56                } else {
57                        $flux['data'] .= recuperer_fond('formulaires/diogene_ajouter_documents', $flux['args']['contexte']);
58                }
59        }
60        return $flux;
61}
62
63/**
64 * Insertion dans le pipeline diogene_traiter (Diogene)
65 * Fonction s'exécutant au traitement des formulaires modifiés par Diogene
66 *
67 * @param array $flux Le contexte du pipeline
68 * @return array $flux le contexte modifié passé aux suivants
69 */
70function diogene_documents_diogene_traiter($flux) {
71        $pipeline = pipeline('diogene_objets');
72        if (in_array($flux['args']['type'], array_keys($pipeline))
73                and isset($pipeline[$flux['args']['type']]['champs_sup']['documents'])
74                and _request('id_diogene')) {
75                $objet = $flux['args']['type'];
76                $id_objet = $flux['args']['id_objet'];
77
78                $post = isset($_FILES) ? $_FILES : $GLOBALS['HTTP_POST_FILES'];
79
80                if (_request('titre')) {
81                        $ancien_titre = _request('titre');
82                }
83                if (_request('credits')) {
84                        $ancien_credits = _request('credits');
85                }
86                if (_request('descriptif')) {
87                        $ancien_descriptif = _request('descriptif');
88                }
89
90                $nouveaux_doc = array();
91                if (is_array($post)) {
92                        include_spip('inc/joindre_document');
93                        include_spip('formulaires/joindre_document');
94                        $ajouter_documents = charger_fonction('ajouter_documents', 'action');
95                        $mode = joindre_determiner_mode('auto', 'new', $objet);
96                        $files = diogene_document_joindre_trouver_fichier_envoye(array($post['fichier_upload']));
97                        if (is_array($files)) {
98                                $nouveaux_doc = $ajouter_documents('new', $files, $objet, $id_objet, $mode);
99                                foreach ($files as $i => $file) {
100                                        $infos_doc = array();
101                                        foreach (array('titre','credits','descriptif') as $champ) {
102                                                if (isset($file[$champ])) {
103                                                        set_request($champ, $file[$champ]);
104                                                        $infos_doc[$champ] = $file[$champ];
105                                                } else {
106                                                        set_request($champ, '');
107                                                }
108                                        }
109                                        document_modifier($nouveaux_doc[$i], $infos_doc);
110                                }
111                        }
112                }
113
114                if (intval($id_objet) > 0) {
115                        include_spip('action/editer_document');
116                        $documents_objet = sql_allfetsel('id_document', 'spip_documents_liens', 'objet='.sql_quote($objet).' AND id_objet='.intval($id_objet));
117                        foreach ($documents_objet as $doc) {
118                                if (!in_array($doc['id_document'], $nouveaux_doc)) {
119                                        $id_document = $doc['id_document'];
120                                        if (_request('supprimer_'.$id_document)) {
121                                                include_spip('action/dissocier_document');
122                                                supprimer_lien_document($id_document, $objet, $id_objet, true);
123                                        } else {
124                                                $infos_doc = array();
125                                                foreach (array('titre', 'credits', 'descriptif') as $champ) {
126                                                        if (_request($champ . '_' . $id_document)) {
127                                                                $valeur_champ = _request($champ.'_'.$id_document);
128                                                                set_request($champ, $valeur_champ);
129                                                                $infos_doc[$champ] = $valeur_champ;
130                                                        } else {
131                                                                set_request($champ, '');
132                                                        }
133                                                }
134                                                document_modifier($id_document, $infos_doc);
135                                        }
136                                }
137                        }
138                }
139                if (isset($ancien_titre)) {
140                        set_request('titre', $ancien_titre);
141                }
142                if (isset($ancien_credits)) {
143                        set_request('credits', $ancien_credits);
144                }
145                if (isset($ancien_descriptif)) {
146                        set_request('descriptif', $ancien_descriptif);
147                }
148        }
149        return $flux;
150}
151
152function diogene_document_joindre_trouver_fichier_envoye($post) {
153        if (is_array($post)) {
154                $i = 1;
155                include_spip('action/ajouter_documents');
156                foreach ($post as $file) {
157                        $files = array();
158                        if (is_array($file['name'])) {
159                                while (count($file['name'])) {
160                                                $test = array(
161                                                        'error'=>array_shift($file['error']),
162                                                        'name'=>array_shift($file['name']),
163                                                        'tmp_name'=>array_shift($file['tmp_name']),
164                                                        'type'=>array_shift($file['type']),
165                                                );
166                                                if (!($test['error'] == 4)) {
167                                                        if (is_string($err = joindre_upload_error($test['error']))) {
168                                                                return $err; // un erreur upload
169                                                        }
170                                                        if (!is_array(verifier_upload_autorise($test['name']))) {
171                                                                return _T('medias:erreur_upload_type_interdit', array('nom'=>$test['name']));
172                                                        }
173                                                        if (_request('titre_document'.$i)) {
174                                                                $test['titre'] = _request('titre_document'.$i);
175                                                        }
176                                                        if (_request('descriptif_document'.$i)) {
177                                                                $test['descriptif'] = _request('descriptif_document'.$i);
178                                                        }
179                                                        if (_request('credits_document'.$i)) {
180                                                                $test['credits'] = _request('credits_document'.$i);
181                                                        }
182                                                        $files[] = $test;
183                                                }
184                                                $i++;
185                                }
186                        } else {
187                                //UPLOAD_ERR_NO_FILE
188                                if (!($file['error'] == 4)) {
189                                        if (is_string($err = joindre_upload_error($file['error']))) {
190                                                return $err; // un erreur upload
191                                        }
192                                        if (!is_array(verifier_upload_autorise($file['name']))) {
193                                                return _T('medias:erreur_upload_type_interdit', array('nom' => $file['name']));
194                                        }
195                                        $files[] = $file;
196                                }
197                        }
198                }
199                if (!count($files)) {
200                        return _T('medias:erreur_indiquez_un_fichier');
201                }
202        }
203        return $files;
204}
205/**
206 * Insertion dans le pipeline diogene_objets (Diogene)
207 *
208 * Ajout des documents comme champs supplémentaires possible sur les articles
209 *
210 * @param array $flux Le contexte du pipeline
211 * @return array $flux le contexte modifié passé aux suivants
212 */
213function diogene_documents_diogene_objets($flux) {
214        $flux['article']['champs_sup']['documents'] = _T('medias:info_documents');
215        if (defined('_DIR_PLUGIN_PAGES')) {
216                $flux['page']['champs_sup']['documents'] = _T('medias:info_documents');
217        }
218        return $flux;
219}
220
221/**
222 * Insertion dans le pipeline diogene_champs_texte (Diogene)
223 *
224 * Ajout du squelette permettant de configurer les éléments supplémentaires liés aux documents :
225 * - les champs éditables de chaque document
226 * - le nombre maximal de documents
227 *
228 * @param array $flux
229 * @return array
230 */
231function diogene_documents_diogene_champs_texte($flux) {
232        $champs = $flux['args']['champs_ajoutes'];
233        if ((is_array($champs)
234                or is_array($champs = unserialize($champs)))
235                and in_array('documents', $champs)) {
236                $flux['data'] .= recuperer_fond('prive/diogene_documents_champs_texte', $flux['args']);
237        }
238        return $flux;
239}
240
241/**
242 * Insertion dans le pipeline diogene_champs_pre_edition (Diogene)
243 *
244 * Ajoute la prise en compte des champs insérés dans le diogène :
245 * - champs_documents : tableau de champs associés aux documents dans l'interface de saisie
246 * - nombre_documents : nombre maximal de documents pouvant être lié
247 * - documents_un_par_un : affichera dans le formulaire autant de bouton parcourir que de documents possibles
248 *
249 * @param array $array
250 * @return array
251 */
252function diogene_documents_diogene_champs_pre_edition($array) {
253        $array[] = 'champs_documents';
254        $array[] = 'nombre_documents';
255        $array[] = 'documents_un_par_un';
256        return $array;
257}
Note: See TracBrowser for help on using the repository browser.