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

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

Eviter de repasser dans les documents en les modifiant vide

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