source: spip-zone/_plugins_/diogene/diogene_complements/diogene_gerer_auteurs/trunk/diogene_gerer_auteurs_pipelines.php @ 87594

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

Améliorations de tests

File size: 5.7 KB
Line 
1<?php
2/**
3 * Plugin Diogene Auteurs
4 *
5 * Auteurs :
6 * kent1 (http://www.kent1.info - kent1@arscenic.info)
7 *
8 * © 2010-2014 - Distribue sous licence GNU/GPL
9 *
10 * Utilisation des pipelines par Diogene Auteurs
11 *
12 * @package SPIP\Diogene Auteurs\Pipelines
13 **/
14
15if (!defined("_ECRIRE_INC_VERSION")) return;
16
17/**
18 * Insertion dans le pipeline diogene_ajouter_saisies (Diogène)
19 *
20 * On ajoute la partie du formulaire concernant les auteurs si nécessaire
21 *
22 * @param array $flux
23 *      Le contexte du pipeline
24 * @return array $flux
25 *      Le contexte modifié passé aux suivants
26 */
27function diogene_gerer_auteurs_diogene_ajouter_saisies($flux){
28        if(is_array(unserialize($flux['args']['champs_ajoutes'])) && in_array('auteurs',unserialize($flux['args']['champs_ajoutes']))){
29                $objet = $flux['args']['type'];
30                $id_table_objet = id_table_objet($flux['args']['type']);
31                $id_objet = $flux['args']['contexte'][$id_table_objet];
32                $auteur_uniques = array();
33
34                if(is_numeric($id_objet) && intval($id_objet) > 0){
35                        include_spip('inc/autoriser');
36                        if(!autoriser('associerauteurs',$objet,$id_objet))
37                                return $flux;
38                       
39                        $nb_auteurs = sql_countsel('spip_auteurs','statut < 7');
40
41                        if($nb_auteurs > 1){
42                                $auteurs = sql_allfetsel("auteur.id_auteur","spip_auteurs as auteur LEFT join spip_auteurs_liens as auteur_lien ON auteur.id_auteur=auteur_lien.id_auteur","auteur_lien.objet=".sql_quote($objet)." AND auteur_lien.id_objet=".intval($id_objet));
43                                if($GLOBALS['visiteur_session']['statut']=='0minirezo'){
44                                        $auteur = sql_fetsel("auteur.id_auteur","spip_auteurs as auteur LEFT join spip_auteurs_liens as auteur_lien ON auteur.id_auteur=auteur_lien.id_auteur","auteur.id_auteur=".intval($GLOBALS['visiteur_session']['id_auteur'])." AND auteur_lien.objet=".sql_quote($objet)." AND auteur_lien.id_objet=".intval($id_objet));
45                                        if(is_array($auteur))
46                                                $flux['args']['contexte']['auteurs'][] = $auteur['id_auteur'];
47                                }
48                                if(count($auteurs) > 0){
49                                        foreach($auteurs as $auteur){
50                                                $flux['args']['contexte']['auteurs'][] = $auteur['id_auteur'];
51                                        }
52                                }
53                                if(is_array(_request('diogene_gerer_auteurs')))
54                                        $flux['args']['contexte']['auteurs'] = _request('diogene_gerer_auteurs');
55                                else if(_request('type_diogene'))
56                                        $flux['args']['contexte']['auteurs'] = array();
57                                $flux['data'] .= recuperer_fond('formulaires/diogene_ajouter_medias_gerer_auteurs',$flux['args']['contexte']);
58                        }
59                }else{
60                        if($GLOBALS['visiteur_session']['statut']=='0minirezo'){
61                                $auteur = sql_fetsel("nom, id_auteur,statut","spip_auteurs","id_auteur=".intval($GLOBALS['visiteur_session']['id_auteur']));
62                                $auteur_uniques[] = $auteur['id_auteur'];
63                        }
64                        if(count($auteur_uniques) > 0)
65                                $flux['args']['contexte']['auteurs'] = $auteur_uniques;
66                        $flux['data'] .= recuperer_fond('formulaires/diogene_ajouter_medias_gerer_auteurs',$flux['args']['contexte']);
67                }
68        }
69        return $flux;
70}
71
72/**
73 * Insertion dans le pipeline diogene_traiter (Diogène)
74 *
75 * Fonction s'exécutant au traitement du formulaire
76 *
77 * @param array $flux
78 *      Le contexte du pipeline
79 * @return array $flux
80 *      Le contexte modifié passé aux suivants
81 */
82function diogene_gerer_auteurs_diogene_traiter($flux){
83        $id_objet = $flux['args']['id_objet'];
84        $type = $flux['args']['type'];
85        $pipeline = pipeline('diogene_objets');
86        if(_request('id_diogene') && in_array($type,array_keys($pipeline)) && isset($pipeline[$type]['champs_sup']['auteurs'])){
87                include_spip('inc/autoriser');
88                if(!autoriser('associerauteurs',$type,$id_objet))
89                        return $flux;
90
91                include_spip('inc/invalideur');
92                include_spip('action/editer_auteur');
93
94                $auteurs_liste = array();
95                $auteurs = sql_allfetsel("auteur.id_auteur","spip_auteurs as auteur LEFT join spip_auteurs_liens as auteur_lien ON auteur.id_auteur=auteur_lien.id_auteur","auteur_lien.objet=".sql_quote($type)." AND auteur_lien.id_objet=".intval($id_objet));
96                foreach($auteurs as $auteur){
97                        $auteurs_liste[] = $auteur['id_auteur'];
98                }
99                /**
100                 * diogene_gerer_auteurs n'est pas un array, on supprime tous les auteurs sauf soi même si on n'est pas admin
101                 */
102                if(!is_array(_request('diogene_gerer_auteurs'))){
103                        foreach($auteurs_liste as $auteur){
104                                /**
105                                 * On ne peut pas s'enlever soit même des auteurs si l'on n'est pas admin
106                                 */
107                                if($auteur != $GLOBALS['visiteur_session']['id_auteur'] || $GLOBALS['visiteur_session']['statut'] == '0minirezo'){
108                                         $suppr = auteur_dissocier($auteur,array($type=>$id_objet));
109                                        suivre_invalideur("id='id_auteur/$auteur'",true);
110                                }
111                        }
112                }
113                else {
114                        foreach(_request('diogene_gerer_auteurs') as $auteur){
115                                if(!in_array($auteur,$auteurs_liste) && $id_auteur = sql_getfetsel('id_auteur','spip_auteurs','id_auteur='.intval($auteur))){
116                                        $ajout = auteur_associer($auteur,array($type=>$id_objet));
117                                        suivre_invalideur("id='id_auteur/$auteur'",true);
118                                }
119                        }
120                        foreach($auteurs_liste as $id_auteur){
121                                if(!in_array($id_auteur,_request('diogene_gerer_auteurs'))){
122                                        if($id_auteur != $GLOBALS['visiteur_session']['id_auteur'] || $GLOBALS['visiteur_session']['statut'] == '0minirezo'){
123                                                $suppr = auteur_dissocier($id_auteur,array($type=>$id_objet));
124                                                suivre_invalideur("id='id_auteur/$id_auteur'",true);
125                                        }
126                                }
127                        }
128                }
129        }
130        return $flux;
131}
132
133/**
134 * Insertion dans le pipeline diogene_objets (Diogène)
135 *
136 * On ajoute la possibilité d'ajouter le champ auteur dans les articles
137 * dans la configuration d'un Diogène
138 *
139 * @param array $flux
140 *      La liste des champs pour les diogenes
141 * @return array $flux
142 *      La liste des champs modifiée
143 */
144function diogene_gerer_auteurs_diogene_objets($flux){
145        $flux['article']['champs_sup']['auteurs'] = _T('diogene_gerer_auteurs:label_cfg_ajout_auteurs');
146        if(defined('_DIR_PLUGIN_PAGES'))
147                $flux['page']['champs_sup']['auteurs'] = _T('diogene_gerer_auteurs:label_cfg_ajout_auteurs');
148        return $flux;
149}
150?>
Note: See TracBrowser for help on using the repository browser.