source: spip-zone/_plugins_/diogene/diogene/trunk/diogene_pipelines.php @ 77168

Last change on this file since 77168 was 77168, checked in by lesage.sylvain@…, 8 years ago

Avec l'option "workflow_simplifie", on publie l'article directement

Si l'option "workflow_simplifie" du diogene est selectionnée, alors
le formulaire de gestion du statut de l'article est simplement
un champ "hidden" qui vaut "publie", si

  • l'article est déjà publié
  • ou l'utilisateur a le droit de le publier

Sinon, on montre le formulaire normal.

Voir http://www.mediaspip.net/spip.php?page=ticket&id_ticket=163#forum1318

File size: 30.6 KB
Line 
1<?php
2/**
3 * Plugin Diogene
4 *
5 * Auteurs :
6 * kent1 (http://www.kent1.info - kent1@arscenic.info)
7 *
8 * © 2010-2013 - Distribue sous licence GNU/GPL
9 *
10 * Utilisation des pipelines par Diogene
11 *
12 * @package SPIP\Diogenes\Pipelines
13 **/
14
15if (!defined("_ECRIRE_INC_VERSION")) return;
16
17/**
18 * Insertion dans le pipeline insert_head_css (SPIP)
19 *
20 * Compromis entre faire deux hits pour de petits fichiers sur la page d'upload
21 * ou les trimballer sur tout le site dans une css compressée pour quelques octets (on choisi la 2)
22 *
23 * @param $flux string
24 *              Le contenu de la balise #INSERT_HEAD_CSS
25 * @return $flux string
26 *              Le contenu de la balise modifié
27 */
28function diogene_insert_head_css($flux){
29        $diogene_css = direction_css(find_in_path('css/diogene.css'), lang_dir());
30        $datepicker_css = direction_css(find_in_path('css/jquery.ui.datepicker.css'), lang_dir());
31        $flux .= "<link rel='stylesheet' type='text/css' media='all' href='$diogene_css' />\n"
32                         . "<link rel='stylesheet' type='text/css' media='all' href='$datepicker_css' />\n";
33        return $flux;
34}
35/**
36 * Insertion dans le pipeline editer_contenu_objet (SPIP)
37 *
38 * Insère ou enlève les champs dans le formulaire
39 * que l'on souhaite ajouter ou supprimer
40 *
41 * @param array $flux
42 *              Le contexte du pipeline
43 * @return array $flux
44 *              Le contexte du pipeline modifié
45 */
46function diogene_editer_contenu_objet($flux){
47        $args = $flux['args'];
48        $type = $args['type'];
49        $pipeline = pipeline('diogene_objets', array());
50        if (in_array($type,array_keys($pipeline))){
51                $langues_dispos = explode(',',$GLOBALS['meta']['langues_multilingue']);
52               
53                /**
54                 * Recherche de l'id_secteur afin de trouver le bon diogène
55                 * - soit on a un id_secteur > 0 dans le contexte;
56                 * - soit on a un id_parent dans le contexte et on cherche son secteur
57                 */
58                $id_secteur = ($args['contexte']['id_secteur'] > 0) ?
59                        $args['contexte']['id_secteur'] :
60                        sql_getfetsel('id_secteur','spip_rubriques','id_rubrique='.intval($args['contexte']['id_parent']));
61               
62                /**
63                 * Cas des pages uniques
64                 *
65                 * On n'a pas d'id_secteur et on a un id_parent dans le contexte soit = 0 soit = -1
66                 * Du coup c'est le cas d'une page unique, on change donc le type en "page", id_secteur en "0"
67                 */
68                if(!$id_secteur && (($args['contexte']['id_parent'] == 0) OR ($args['contexte']['id_parent'] == '-1') OR (!$args['contexte']['id_parent']  && !$args['contexte']['parents'])) && ($type=='article')){
69                        $id_secteur='0';
70                        $type = 'page';
71                }
72               
73                /**
74                 * Création de la clause Where de la requète pour trouver dans quel diogène on est
75                 */
76                if($type == 'article'){
77                        if($id_diogene = intval(_request('id_diogene')))
78                                $where = "id_diogene = $id_diogene AND id_secteur=".intval($id_secteur)." AND objet IN ('article','emballe_media')";
79                        else
80                                $where = "id_secteur=".intval($id_secteur)." AND objet IN ('article','emballe_media')";
81                }
82               
83                if(!$where){
84                        if((!$id_secteur) && $pipeline[$type]['diogene_max'] == 1)
85                                $where = "objet=".sql_quote($type);
86                        else
87                                $where = "id_secteur=".intval($id_secteur)." AND objet=".sql_quote($type);
88                }
89
90                /**
91                 * On n'agit que si on a trouvé un diogene
92                 */
93                if($diogene = sql_fetsel('*','spip_diogenes',$where)){
94                        /**
95                         * On ajoute dans l'environnement les champs ajoutés par diogènes et ses sous plugins
96                         */
97                        if(unserialize($diogene['champs_ajoutes']) == 'false')
98                                $args['diogene_ajouts'] = array();
99                        else
100                                $args['diogene_ajouts'] = unserialize($diogene['champs_ajoutes']);
101                       
102                        /**
103                         * On ajoute dans l'environnement les options des complements
104                         */
105                        if(unserialize($diogene['options_complements']) == 'false')
106                                $args['options_complements'] = array();
107                        else
108                                $args['options_complements'] = unserialize($diogene['options_complements']);
109
110                        /**
111                         * On vire les champs que l'on ne souhaite pas
112                         */
113                        if($diogene['objet'] == 'page')
114                                $diogene['champs_caches']['id_parent'];
115
116                        /**
117                         * Si on a des champs à cacher :
118                         * - On les enlève si présents dans la conf
119                         * - Avant de les enlever, on vérifie bien qu'ils ne soient pas remplis, si ils le sont,
120                         * on laisse le champ jusqu'à ce qu'il soit vide
121                         */
122                        if(is_array($champs_caches = unserialize($diogene['champs_caches']))){
123                                foreach($champs_caches as $champ){
124                                        if($champ == 'urlref')
125                                                $champ = 'liens_sites';
126                                        if (($champ == 'liens_sites') && preg_match(",<li [^>]*class=[\"']editer editer_($champ).*<fieldset>.*<\/fieldset>.*<\/li>,Uims",$flux['data'],$regs))
127                                                $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer (editer_$champ).*<fieldset>.*<\/fieldset>.*<\/li>),Uims","",$flux['data'],1);
128                                        else if (($champ != 'liens_site') && (!isset($args['contexte'][$champ]) OR (strlen($args['contexte'][$champ]) == 0)) && preg_match(",<li [^>]*class=[\"']editer editer_($champ).*<\/li>,Uims",$flux['data'],$regs)){
129                                                $flux['data'] = preg_replace(",<li [^>]*class=[\"']editer editer_$champ.*<\/li>,Uims","",$flux['data'],1);
130                                        }
131                                }
132                        }
133
134                        /**
135                         * On ajoute ce que l'on souhaite ajouter avant le formulaire
136                         */
137                        if($type=='page'){
138                                $type='article';
139                                $args['type'] = 'article';
140                                $old_type = 'page';
141                        }
142                        if (preg_match(",<div [^>]*class=[\"'][^>]*formulaire_editer_($type),Uims",$flux['data'],$regs)){
143                                $args['champs_ajoutes'] = $diogene['champs_ajoutes'];
144                                $ajouts = pipeline('diogene_avant_formulaire',array('args'=>$args,'data'=>''));
145                                $flux['data'] = preg_replace(",(<div [^>]*class=[\"'][^>]*formulaire_editer_$type),Uims",$ajouts."\\1",$flux['data'],1);
146                        }
147                        /**
148                         * On ajoute le formulaire de langue sur les articles
149                         */
150                        if($old_type){
151                                $type=$old_type;
152                                $args['type'] = $old_type;
153                        }
154                        if(in_array($type,array('article','page')) && (count($langues_dispos)>1)){
155                                $saisie_langue = recuperer_fond('formulaires/selecteur_langue',array('langues_dispos'=>$langues_dispos,'id_article'=>$args['contexte']['id_article']));
156                                $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer editer_titre.*<\/li>),Uims","\\1".$saisie_langue,$flux['data'],1);
157                        }
158                        /**
159                         * On remplace le selecteur de rubrique par le notre dans le public
160                         * On fait attention au fait qu'il y ait ou pas polyhiérarchie
161                         */
162                        if (!test_espace_prive() && preg_match(",<li [^>]*class=[\"']editer editer_parent,Uims",$flux['data'],$regs) && (!preg_match(",<li [^>]*class=[\"']editer editer_parents,Uims",$flux['data'],$regs2) OR ($args['options_complements']['polyhier_desactiver'] == 'on'))){
163                                $contexte_selecteur = array(
164                                        'id_rubrique_limite'=>$id_secteur,
165                                        'type' => $type,
166                                        'id_parent'=>$args['contexte']['id_parent'],
167                                        'rubrique_principale' => $rubrique_principale);
168                                if($type == 'rubrique'){
169                                        $contexte_selecteur['id_rubrique'] = $args['contexte']['id_rubrique'];
170                                }
171                                if(count($regs2) > 0){
172                                        $class = "editer editer_parents";
173                                        $contexte_selecteur['selecteur_type'] = "polyhier";
174                                        $contexte_selecteur['parents'] = $args['contexte']['parents'];
175                                }else{
176                                        $class = "editer editer_parent";
177                                        $contexte_selecteur['selecteur_type'] = "normal";
178                                }
179                                $contexte_selecteur['rubrique_principale'] = 'oui';
180                                if($diogene['objet'] == 'emballe_media')
181                                        $contexte_selecteur['rubrique_principale'] = 'non';
182
183                                $saisie_rubrique = recuperer_fond('formulaires/selecteur_rubrique',$contexte_selecteur);
184                                if($args['contexte']['id_parent'] > 0)
185                                        $flux['data'] = preg_replace(",(<li [^>]*class=[\"']$class.*)(<li [^>]*class=[\"'](editer|fieldset).*),Uims",$saisie_rubrique."\\2",$flux['data'],1);
186                                else
187                                        $flux['data'] = preg_replace(",(<li [^>]*class=[\"']$class.*)(<li [^>]*class=[\"'](editer|fieldset).*),Uims","\\2",$flux['data'],1);
188                                if(($class == 'editer editer_parents') && ($args['options_complements']['polyhier_desactiver'] == 'on'))
189                                        $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer editer_parent.*)(<li [^>]*class=[\"']editer.*),Uims",''."\\2",$flux['data'],1);
190                        }else if(!test_espace_prive() && ($type != 'page') && preg_match(",<li [^>]*class=[\"']editer editer_parents,Uims",$flux['data'],$regs)){
191                                $contexte = $args['contexte'];
192                                $contexte['id_rubrique'] = $diogene['id_secteur'];
193                                $contexte['limite_branche'] = $diogene['id_secteur'];
194                                $saisie_rubrique = recuperer_fond("formulaires/inc-selecteur-parents_diogene",$contexte);
195                                $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer editer_parents.*)(<li [^>]*class=[\"']editer.*),Uims",$saisie_rubrique."\\2",$flux['data'],1);
196                        }
197                        /**
198                         * On ajoute en fin de formulaire les blocs supplémentaires
199                         */
200                       
201                        if (strpos($flux['data'],'<!--extra-->')!==FALSE){
202                                $saisie = pipeline('diogene_ajouter_saisies',array('args'=>$args,'data' => ''));
203                                /**
204                                 * On ajoute encore à la fin le sélecteur de statuts à la fin du formulaire
205                                 * Uniquement si l'on n'est pas dans le privé
206                                 */
207                                if($type=='page')
208                                        $type='article';
209
210                                if ($args['options_complements']['workflow_simplifie']=='on') {
211                                        spip_log('Gestion simplifiée du workflow de publication', "diogene"._LOG_DEBUG);
212                                        $args['contexte']['workflow_simplifie']=$args['options_complements']['workflow_simplifie'];
213                                }
214
215                                if(!test_espace_prive() && find_in_path('formulaires/selecteur_statut_'.$diogene['objet'].'.html'))
216                                        $saisie .= trim(recuperer_fond('formulaires/selecteur_statut_'.$diogene['objet'],$args['contexte']));
217                                else if(!test_espace_prive() && find_in_path('formulaires/selecteur_statut_'.$type.'.html'))
218                                        $saisie .= trim(recuperer_fond('formulaires/selecteur_statut_'.$type,$args['contexte']));
219                                else if(!test_espace_prive() && find_in_path('formulaires/selecteur_statut_objet.html') AND $type != 'rubrique'){
220                                        $args['contexte']['type'] = $type;
221                                        $saisie .= trim(recuperer_fond('formulaires/selecteur_statut_objet',$args['contexte']));
222                                }
223                                $flux['data'] = preg_replace(',(.*)(<!--extra-->),ims',"\\1<ul>".$saisie."</ul>\\2",$flux['data'],1);
224                        }
225                }
226        }
227        return $flux;
228}
229
230/**
231 * Insertion dans le pipeline formulaire_charger (SPIP)
232 *
233 * Charge des valeurs spécifiques dans le formulaire d'édition en cours
234 * Les sous plugins peuvent se brancher sur le pipeline spécifique à Diogene : diogene_charger
235 * Diogène ajoute dans le $flux de départ l'id_diogene correspondant à l'objet édité ($flux['data']['id_diogene'])
236 * ainsi que l'id_diogene dans les hidden.
237 *
238 * @param array $flux
239 *              Le contexte d'environnement du pipeline
240 * @return array $flux
241 *              Le contexte d'environnement modifié
242 */
243function diogene_formulaire_charger($flux){
244        if(isset($flux['args']['form']) && $flux['args']['form'] == 'editer_diogene'){
245                $complements = unserialize($flux['data']['options_complements']);
246                $valeurs = array();
247                if(is_array($complements)){
248                        foreach($complements as $complement => $valeur){
249                                if(is_array(unserialize($valeur)))
250                                        $valeurs[$complement] = unserialize($valeur);
251                                else
252                                        $valeurs[$complement] = $valeur;
253                        }
254                }
255                if($flux['data']['objet'] == 'page'){
256                        $diogene_orig = _request('id_diogene');
257                        if($diogene = sql_getfetsel('id_diogene','spip_diogenes',"objet = 'page' AND id_diogene != ".intval($diogene_orig))){
258                                $flux['data']['editable'] = false;
259                                $flux['data']['message_erreur'] = _T('diogene:erreur_diogene_multiple_page');
260                        }else
261                                $flux['data']['_hidden'] .= "\n<input type='hidden' name='id_secteur' value='0' />\n";
262                }
263                $flux['data'] = array_merge($flux['data'],$valeurs);
264        }else{
265                $pipeline = pipeline('diogene_objets', array());
266                if (isset($flux['args']['form']) &&  substr($flux['args']['form'],0,7) == 'editer_' && ($objet = substr($flux['args']['form'],7)) && in_array($objet,array_keys($pipeline))){
267                        $id_table_objet = id_table_objet($objet);
268                        $id_objet = $flux['data'][$id_table_objet];
269                        $flux['data']['id_objet'] = $id_objet;
270                        $id_secteur = (intval($flux['data']['id_secteur']) > 0) ? $flux['data']['id_secteur'] : ((intval($flux['data']['id_parent']) > 0) ? $flux['data']['id_parent'] : false);
271       
272                        /**
273                         * Cas spécifique pour les pages uniques
274                         * -* Uniquement dans l'espace public
275                         */
276                        if(($flux['args']['form'] == 'editer_article') && !$flux['args']['id_parent']){
277                                $type_objet= _request('type_objet');
278                                $id_secteur = sql_getfetsel('id_secteur','spip_diogenes','type='.sql_quote($type_objet));
279                                if(!$flux['args']['id_parent'] && is_numeric($flux['args']['args'][1])){
280                                        $flux['data']['id_parent'] = $flux['args']['args'][1];
281                                        $id_secteur = sql_getfetsel('id_secteur','spip_rubriques','id_rubrique='.$flux['data']['id_parent']);
282                                }
283                        }
284                       
285                        if(!test_espace_prive() && (($flux['args']['form'] == 'editer_article') && ($flux['data']['id_parent'] == '-1') OR ($id_secteur == 0)))
286                                $flux['data']['type'] = 'page';
287                       
288                        if(intval($id_secteur)){
289                                if($objet == 'article'){
290                                        $diogene = sql_fetsel('id_diogene,objet','spip_diogenes','id_secteur='.intval($id_secteur).' AND objet IN ("article","emballe_media")');
291                                        $id_diogene = $diogene['id_diogene'];
292                                        $type_diogene = $diogene['objet'];
293                                }else{
294                                        $id_diogene = sql_getfetsel('id_diogene','spip_diogenes','id_secteur='.intval($id_secteur).' AND objet ='.sql_quote($objet));
295                                        $type_diogene = $objet;
296                                }
297                        }else if($pipeline[$objet]['diogene_max'] == 1)
298                                $id_diogene = sql_getfetsel('id_diogene','spip_diogenes','objet ='.sql_quote($objet));
299                       
300                        /**
301                         * On est effectivement dans un diogene
302                         * On ajoute deux input hidden :
303                         * -* id_diogene qui est l'id_diogene
304                         * -* type_diogene qui est le champ 'objet' de la table spip_diogene
305                         * Ces deux informations peuvent être intéressantes dans d'autres pipeline comme formulaire_traiter ...
306                         */
307                        if(intval($id_diogene)){
308                                $flux['data']['_hidden'] .= "<input type='hidden' name='id_diogene' value='".$id_diogene."' />\n";
309                                $flux['data']['_hidden'] .= "<input type='hidden' name='type_diogene' value='".$type_diogene."' />\n";
310                                $flux['data']['id_diogene'] = $id_diogene;
311                        }
312       
313                        $post_valeurs = pipeline('diogene_charger',
314                                        array(
315                                                'args' => array(
316                                                        $id_table_objet => $id_objet,
317                                                        'mode' => 'chargement',
318                                                        'valeurs' => $flux['data']
319                                                ),
320                                                'data' => array()
321                                        ));
322       
323                        if(is_array($post_valeurs))
324                                $flux['data'] = array_merge($flux['data'],$post_valeurs);
325                }
326        }
327        return $flux;
328}
329
330/**
331 * Insertion dans le pipeline formulaire_verifier (SPIP)
332 *
333 * Vérifie les valeurs du formulaire avant leur traitement
334 * Les sous plugins peuvent se brancher sur le pipeline spécifique à Diogene : diogene_verifier
335 *
336 * @param array $flux
337 *              Le contexte d'environnement du pipeline
338 * @return array $flux
339 *              Le contexte d'environnement modifié
340 */
341function diogene_formulaire_verifier($flux){
342        $pipeline = pipeline('diogene_objets', array());
343        if ($objet = substr($flux['args']['form'],7) AND in_array($objet,array_keys($pipeline))){
344                // On ne fait rien si l'id_parent principal est incoherent (exemple : compat pages uniques)
345                //if (_request('id_parent') < 0) return $flux;
346
347                if($objet == 'rubrique' &&
348                        (_request('id_rubrique') == _request('id_parent'))){
349                                $flux['data']['id_parent'] = _T('diogene:erreur_id_parent_id_rubrique');
350                }
351                       
352                $flux['data'] = pipeline('diogene_verifier',
353                        array(
354                                'args' => array(
355                                        'erreurs' => $flux['data']
356                                ),
357                                'data' => $flux['data']
358                        )
359                );
360                $messages = $flux['data'];
361                unset($messages['message_ok']);
362                if(count($messages) > 0){
363                        /**
364                         * Si c'est la récupération automatique des infos d'un site, on n'affiche pas de message d'erreur
365                         */
366                        if(count($messages) == 1 && isset($messages['verif_url_auto']))
367                                return $flux;
368                        $flux['data']['message_erreur'] = _T('diogene:message_erreur_general');
369                }
370        }
371        return $flux;
372}
373
374/**
375 * Insertion dans le pipeline formulaire_traiter (SPIP)
376 *
377 * Insertion à la fin du traitement des formulaires
378 * Les sous plugins peuvent également se brancher sur le pipeline spécifique à Diogene : diogene_traiter
379 * Ce pipeline agit au moment de la pré édition de SPIP
380 *
381 * On ne s'insère que sous certaines conditions :
382 * -* on se trouve dans l'espace public;
383 * -* on est dans le cas d'un formulaire du type #FORMULAIRE_EDITER_xx
384 * -* dans le cas d'un diogene (passé dans le post);
385 * -* le diogène passé dans le post existe bien;
386 *
387 * Ce pipeline agit sur le message de retour et la redirection lors de la validation d'un formulaire
388 * -* On ne redirige pas sur la page de l'objet même si publié;
389 * -* On ajoute un lien pour voir l'objet publié dans le message de retour du formulaire
390 * -* On ajoute un ajaxReload dans le message de retour pour rafraichir certains morceaux de la page (jQuery(".description_$objet,.diogene_$id_diogene"))
391 *
392 * @param array $flux
393 *              Le contexte d'environnement du pipeline
394 * @return array $flux
395 *              Le contexte d'environnement modifié
396 */
397function diogene_formulaire_traiter($flux){
398        if(!test_espace_prive()
399                && isset($flux['args']['form'])
400                && (substr($flux['args']['form'],0,7) == 'editer_')
401                && ($objet = substr($flux['args']['form'],7))
402                && ($objet != 'diogene')
403                && ($id_diogene = intval(_request('id_diogene'))) 
404                && ($id_diogene == sql_getfetsel('id_diogene','spip_diogenes','id_diogene='.intval($id_diogene)))){
405               
406                $id_table_objet = id_table_objet($objet);
407                $table_objet = table_objet_sql($objet);
408                $id_objet = intval($flux['data'][$id_table_objet]);
409                $statut_objet = sql_getfetsel('statut',$table_objet,$id_table_objet.'='.intval($id_objet));
410               
411                /**
412                 * On récupère le titre dans le post que l'on passera aux chaines de langue
413                 * On test 'titre','nom_site','nom' qui sont les 3 plus probables
414                 * En dernier ressort on utilise generer_info_entite() pour trouver quelque chose
415                 * (dans ce cas on doit appeler inc/texte qui pose problème)
416                 */
417                $titre = _request('titre') ? _request('titre') : (_request('nom_site') ? _request('nom_site') : _request('nom'));
418                if(!$titre){
419                        include_spip('inc/filtres'); // Pour generer_info_entite
420                        $titre = generer_info_entite($id_objet,$objet,'titre');
421                }
422                       
423                /**
424                 * Cas de la modification d'un objet
425                 */
426                if((_request($id_table_objet) == $flux['data'][$id_table_objet]) || (_request('arg') == $flux['data'][$id_table_objet])){
427                        /**
428                         * TODO Utiliser les fonctions recherchant dans la déclaration des tables pour prendre le bon statut
429                         * ici : refuse est pour les sites et poubelle pour le reste
430                         */
431                        include_spip('inc/filtres');
432                        if(in_array($statut_objet,array('refuse','poubelle'))){
433                                $flux['data']['message_ok'] = _T('diogene:message_objet_supprime',array('titre'=>extraire_multi($titre)));
434                                $flux['data']['redirect'] = parametre_url(self(),$id_table_objet,'');
435                                $flux['data']['editable'] = false;
436                        }
437                        else{
438                                $flux['data']['message_ok'] = _T('diogene:message_objet_mis_a_jour',array('titre'=>extraire_multi($titre)));
439                                if($statut_objet == 'publie'){
440                                        $url = generer_url_entite($id_objet,$objet);
441                                        $flux['data']['message_ok'] .= '<br />'._T('diogene:message_objet_mis_a_jour_lien',array('url'=>$url));
442                                }
443                                if (!defined('_DIOGENE_REDIRIGE_PUBLICATION')) { // TODO : à ajouter dans infos_supp du diogene
444                                        $flux['data']['message_ok'] .= '<script type="text/javascript">if (window.jQuery) jQuery(".description_'.$objet.',.diogene_'.$id_diogene.'").ajaxReload();</script>';
445                                        $flux['data']['editable'] = true;
446                                        $flux['data']['redirect'] = false;
447                                } else {
448                                        $flux['data']['editable'] = false;
449                                        $flux['data']['redirect'] = $url;
450                                }
451                        }
452                }else{
453                        $flux['data']['message_ok'] = _T('diogene:message_objet_cree',array('titre'=>extraire_multi($titre)));
454                        $flux['data']['editable'] = false;
455                        $flux['data']['redirect'] = parametre_url(self(),$id_table_objet,$id_objet);
456                }
457        }
458        return $flux;
459}
460
461/**
462 * Insertion dans le pipeline pre_insertion (SPIP)
463 *
464 * A la création d'un article on vérifie si on nous envoie la langue
465 * si oui on la met correctement dès l'insertion
466 *
467 * @param array $flux
468 *              Le contexte du pipeline
469 * @return array $flux
470 *              Le contexte modifié
471 */
472function diogene_pre_insertion($flux){
473        if(($flux['args']['table'] == 'spip_articles') && _request('changer_lang')){
474                $flux['data']['lang'] = _request('changer_lang');
475                $flux['data']['langue_choisie'] = 'oui';
476        }
477        return $flux;
478}
479
480/**
481 * Insertion dans le pipeline pre_edition (SPIP)
482 *
483 * A la modification d'un article on vérifie si on nous envoie la langue
484 * si elle est différente de celle de l'article on la change
485 *
486 * @param array $flux
487 *              Le contexte du pipeline
488 * @return array $flux
489 *              Le contexte modifié
490 */
491function diogene_pre_edition($flux){
492        $pipeline = pipeline('diogene_objets', array());
493        if(in_array($flux['args']['type'],array_keys($pipeline)) && ($flux['args']['action']=='modifier'))
494                $flux = pipeline('diogene_traiter',$flux);
495
496        /**
497         * Attention au herit envoyé dans le privé
498         */
499        if(($flux['args']['table'] == 'spip_articles') && _request('changer_lang') && _request('changer_lang') != 'herit'){
500                $flux['data']['lang'] = _request('changer_lang');
501                $flux['data']['langue_choisie'] = 'oui';
502        }
503       
504        if($flux['args']['table'] == 'spip_diogenes'){
505                $champs = pipeline('diogene_champs_pre_edition',array('polyhier_desactiver','cextras_enleves','cacher_heure','workflow_simplifie'));
506                if(isset($flux['data']['options_complements']))
507                        $options_complements = is_array(unserialize($flux['data']['options_complements'])) ? unserialize($flux['data']['options_complements']) : array();
508
509                foreach(array('champs_ajoutes','champs_caches') as $array){
510                                if($val_array = _request($array)){
511                                        if(is_array($val_array))
512                                                $flux['data'][$array] = serialize($val_array);
513                                        else
514                                                $flux['data'][$array] = $val_array;
515                                }
516                }
517                foreach($champs as $champ){
518                        if(_request($champ)){
519                                if(is_array($val = _request($champ)))
520                                        $options_complements[$champ] = serialize($val);
521                                else
522                                        $options_complements[$champ] = $val;
523                        }
524                }
525                if($flux['data']['objet'] == 'page')
526                        $options_complements['polyhier_desactiver'] = 'on';
527                if($options_complements)
528                        $flux['data']['options_complements'] = serialize($options_complements);
529        }
530        return $flux;
531}
532
533/**
534 * Insertion dans le pipeline post_edition (SPIP)
535 *
536 * On s'insère à la fin des actions d'edition (action/editer_*)
537 * Notamment pour lancer un recalcul de la publication des rubriques
538 *
539 * @param array $flux
540 *              Le contexte du pipeline
541 * @return array $flux
542 *              Le contexte modifié
543 */
544function diogene_post_edition($flux){
545        /**
546         * On rejoue le calcul des rubriques car il n'a pas lieu avec le bon
547         * id_rubrique au premier coup
548         * C'est un hack ...
549         */
550        if(isset($flux['data']['id_rubrique']) && ($flux['data']['statut'] == 'publie') && ($flux['args']['action'] == 'instituer')){
551                $id_rubrique = $flux['data']['id_rubrique'];
552                $modifs['statut'] = 'publie';
553                include_spip('inc/rubriques');
554                calculer_rubriques_if($id_rubrique, $modifs,'');
555        }
556        return $flux;
557}
558
559/**
560 * Insertion dans le pipeline diogene_objets (plugin Diogene)
561 *
562 * On ajoute les champs que l'on peut ajouter
563 *
564 * @param array $flux
565 *              Un tableau bidimentionnel listant les champs pouvant être ajoutés aux objets
566 * @return array $flux
567 *              Le tableau modifié
568 */
569function diogene_diogene_objets($flux){
570        $flux['article']['champs_sup']['date'] = _T('diogene:champ_date_publication');
571        if($GLOBALS['meta']['articles_redac'] !== 'non')
572                $flux['article']['champs_sup']['date_redac'] = _T('diogene:champ_date_publication_anterieure');
573        $flux['article']['champs_sup']['forum'] = _T('diogene:champ_forum');
574       
575        if(defined('_DIR_PLUGIN_PAGES')){
576                $flux['page'] = $flux['article'];
577                $flux['page']['type_orig'] = 'article';
578                $flux['page']['diogene_max'] = 1;
579                $flux['page']['ss_rubrique'] = true;
580        }
581       
582        $flux['site'] = array();
583       
584        $flux['rubrique'] = array();
585        return $flux;
586}
587
588/**
589 * Insertion dans le formulaire diogene_avant_formulaire (plugin Diogene)
590 *
591 * Insert des scripts javascript nécessaire au bon fonctionnement des formulaires d'édition :
592 * -* prive/javascript/presentation.js
593 * -* formulaires/dateur/inc-dateur.html si une date est présente dans le formulaire
594 *
595 * @param array $flux
596 *              Le contexte du pipeline
597 * @return array $flux
598 *              Le contexte modifié
599 */
600function diogene_diogene_avant_formulaire($flux){
601        $flux['data'] .= '<script type="text/javascript" src="'.find_in_path('prive/javascript/presentation.js').'"></script>';
602        if(is_array(unserialize($flux['args']['champs_ajoutes'])) &&
603                (in_array('date',unserialize($flux['args']['champs_ajoutes'])) || in_array('date_redac',unserialize($flux['args']['champs_ajoutes'])))){
604                $flux['data'] .= recuperer_fond('formulaires/dateur/inc-dateur', $flux['args']);
605    }
606        return $flux;
607}
608
609/**
610 * Insertion dans le formulaire diogene_ajouter_saisies (plugin Diogene)
611 *
612 * Insert les saisies configurées dans le formulaire
613 *
614 * @param array $flux
615 *              Le contexte du pipeline
616 * @return array $flux
617 *              Le contexte modifié
618 */
619function diogene_diogene_ajouter_saisies($flux){
620        if(is_array(unserialize($flux['args']['champs_ajoutes']))){
621                if(in_array('date_redac',unserialize($flux['args']['champs_ajoutes'])) && in_array('date',unserialize($flux['args']['champs_ajoutes'])) && ($GLOBALS['meta']['articles_redac'] != 'non')){
622                        $dates_ajoutees = 'date_full';
623                        if(!$flux['args']['contexte']['date'])
624                                list($flux['args']['contexte']['date_orig'],$flux['args']['contexte']['heure_orig']) = explode(' ',date('d/m/Y H:i',time()));
625                        else
626                                list($flux['args']['contexte']['date_orig'],$flux['args']['contexte']['heure_orig']) = explode(' ',date('d/m/Y H:i',strtotime($flux['args']['contexte']['date'])));
627                        if($flux['args']['contexte']['date_redac'])
628                                list($flux['args']['contexte']['date_redac'],$flux['args']['contexte']['heure_redac']) = explode(' ',date('d/m/Y H:i',strtotime($flux['args']['contexte']['date_redac'])));
629                }elseif(in_array('date_redac',unserialize($flux['args']['champs_ajoutes'])) && ($GLOBALS['meta']['articles_redac'] != 'non')){
630                        list($flux['args']['contexte']['date_redac'],$flux['args']['contexte']['heure_redac']) = explode(' ',date('d/m/Y H:i',strtotime($flux['args']['contexte']['date_redac'])));
631                        $dates_ajoutees = 'date_redac';
632                }elseif(in_array('date',unserialize($flux['args']['champs_ajoutes']))){
633                        if(!$flux['args']['contexte']['date'])
634                                list($flux['args']['contexte']['date_orig'],$flux['args']['contexte']['heure_orig']) = explode(' ',date('d/m/Y H:i',time()));
635                        else
636                                list($flux['args']['contexte']['date_orig'],$flux['args']['contexte']['heure_orig']) = explode(' ',date('d/m/Y H:i',strtotime($flux['args']['contexte']['date'])));
637                        $dates_ajoutees = 'date_orig';
638                }
639                if($dates_ajoutees){
640                        $flux['args']['contexte']['dates_ajoutees'] = $dates_ajoutees;
641                        $flux['args']['contexte']['cacher_heure'] = $flux['args']['options_complements']['cacher_heure'];
642                        $flux['data'] .= recuperer_fond('formulaires/diogene_ajouter_dates',$flux['args']['contexte']);
643                }
644                if(in_array('forum',unserialize($flux['args']['champs_ajoutes']))){
645                        if(isset($flux['args']['contexte']['id_article']) && is_numeric($flux['args']['contexte']['id_article'])){
646                                include_spip('formulaires/activer_forums_objet'); // Pour get_forums_publics
647                                $flux['args']['contexte']['forums_actuels'] = get_forums_publics($flux['args']['contexte']['id_article']);
648                        }
649                        $flux['data'] .= recuperer_fond('formulaires/diogene_ajouter_forums',$flux['args']['contexte']);
650                }
651        }
652    return $flux;
653}
654
655/**
656 * Insertion dans le formulaire diogene_verifier (plugin Diogene)
657 *
658 * Vérification de saisies du formulaire
659 * -* vérifie principalement les dates "date" et "date_redac"
660 * -* vérifie la valeur pour le forum également
661 *
662 * @param array $flux
663 *              Le contexte du pipeline
664 * @return array $flux
665 *              Le contexte modifié
666 */
667function diogene_diogene_verifier($flux){
668        $erreurs = &$flux['args']['erreurs'];
669        if(_request('date_orig') || _request('date_redac')){
670                /**
671                 * Ce fichier se trouve dans plugins-dist/organiseur/inc/date_gestion.php
672                 * Mériterait une réincorporation dans SPIP?
673                 */
674                include_spip('inc/date_gestion');
675                if(!$erreurs['date'] && ($date = _request('date_orig')))
676                        $date_orig = verifier_corriger_date_saisie('orig', 'oui', $erreurs);
677                if(!$erreurs['date_redac'] && ($date = _request('date_redac')))
678                        $date_redac = verifier_corriger_date_saisie('redac', 'oui', $erreurs);
679        }
680        if(!$erreurs['forums'] && ($forums = _request('forums')) && !in_array($forums,array('pos','pri','abo','non')))
681                $erreurs['forums'] = _T('diogene:erreur_forums');
682        return $flux;
683}
684
685/**
686 * Insertion dans le formulaire diogene_traiter (plugin Diogene)
687 *
688 * Traitement de saisies du formulaire
689 * -* traite les dates "date" et "date_redac"
690 * -* traite la valeur pour le forum également, si spécifié à "abo" et
691 * l'inscription des visiteurs n'est pas ouverte, on l'ouvre automatiquement
692 *
693 * @param array $flux
694 *              Le contexte du pipeline
695 * @return array $flux
696 *              Le contexte modifié
697 */
698function diogene_diogene_traiter($flux){
699        $id_objet = $flux['args']['id_objet'];
700
701        if(_request('date_orig') || _request('date_redac')){
702                include_spip('inc/date_gestion');
703                if(_request('date_orig'))
704                        $flux['data']['date'] = date('Y-m-d H:i:s',verifier_corriger_date_saisie('orig', 'oui', $erreurs));
705                if(_request('date_redac'))
706                        $flux['data']['date_redac'] = date('Y-m-d H:i:s',verifier_corriger_date_saisie('redac','oui', $erreurs));
707        }
708        if($forums = _request('forums')){
709                $flux['data']['accepter_forum'] = $forums;
710                if ($forums == 'abo' && ($GLOBALS['meta']['accepter_visiteurs'] != 'oui')){
711                        ecrire_meta('accepter_visiteurs', 'oui');
712                        include_spip('inc/invalideur');
713                        suivre_invalideur("id='id_forum/$id_objet'");
714                }
715        }
716        return $flux;
717}
718
719/**
720 * Insertion dans le pipeline ajouter_menus (SPIP)
721 *
722 * Ajouter des boutons dans les menus pour chaque diogène que l'on sait gérer dans l'espace privé
723 *
724 * @param object $boutons_admin
725 *              La description des boutons
726 * @return object $boutons_admin
727 *              La description des boutons complétée
728 */
729function diogene_ajouter_menus($boutons_admin) {
730        $diogenes = sql_select('*','spip_diogenes','objet != "emballe_media"');
731        if(!function_exists('quete_logo'))
732                include_spip('public/quete');
733       
734        while($diogene = sql_fetch($diogenes)){
735                if (autoriser('utiliser', 'diogene',$diogene['id_diogene'])) {
736                        if($diogene['objet'] == 'rubrique'){
737                                $url = generer_url_ecrire('rubrique_edit','new=oui&id_parent='.$diogene['id_secteur']);
738                                $icon = find_in_theme('images/rubrique-add-16.png');
739                        }
740                        if($diogene['objet'] == 'article'){
741                                $url = generer_url_ecrire('article_edit','new=oui&id_rubrique='.$diogene['id_secteur']);
742                                $icon = find_in_theme('images/article-add-16.png');
743                        }
744                        if($diogene['objet'] == 'site'){
745                                $url = generer_url_ecrire('site_edit','new=oui&id_rubrique='.$diogene['id_secteur']);
746                                $icon = find_in_theme('images/site-add-16.png');
747                        }
748                       
749                        if($logo = quete_logo('diogene', 'ON', $diogene['id_diogene'], $diogene['id_secteur'], false)){
750                                include_spip('inc/filtres_images_mini');
751                                include_spip('filtres/images_transforme');
752                                $icon = extraire_attribut(image_reduire($logo[0],'16','16'),'src');
753                        }
754                       
755                        $boutons_admin['menu_edition']->sousmenu[$diogene['type']] =
756                        new Bouton($icon, extraire_multi($diogene['titre']),$url);
757                }
758        }
759        return $boutons_admin;
760}
761?>
Note: See TracBrowser for help on using the repository browser.