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

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

Une option supplémentaire permettant d'avoir plusieurs boutons d'upload dans le même document

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