source: spip-zone/_plugins_/tickets/trunk/tickets_pipelines.php @ 73195

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

Une broutille

File size: 9.8 KB
Line 
1<?php
2/**
3 * Plugin Tickets
4 * Licence GPL (c) 2008-2013
5 *
6 * @package SPIP\Tickets\Pipelines
7 */
8 
9if (!defined("_ECRIRE_INC_VERSION")) return;
10
11/**
12 * Insertion dans le pipeline affiche_aguche (SPIP)
13 *
14 * Affichage du bouton de création de tickets sur la page ?exec=ticket
15 * Affichage de la liste des tickets ouverts et des tickets en cours
16 *
17 * @param array $flux
18 *              Le contexte du pipeline
19 * @return array $flux
20 *              Le contexte du pipeline modifié
21 */
22function tickets_affiche_gauche($flux) {
23        if (isset($flux["args"]["exec"]) && ($flux["args"]["exec"] == "ticket")) {
24                $ret = '';
25               
26                include_spip('inc/autoriser');
27               
28                if (autoriser('ecrire', 'ticket')) {
29                        include_spip('inc/presentation'); # pour icone_horizontale
30                        $ret .= boite_ouvrir('','simple');
31                        $ret .= icone_horizontale(_T('tickets:creer_ticket'), generer_url_ecrire('ticket_edit','new=oui'), 'ticket-24.png', 'creer.gif', false);
32                        $ret .= boite_fermer();
33                }
34               
35                $contexte = array('titre'=>_T('tickets:vos_tickets_en_cours'), 'id_auteur'=>$connect_id_auteur, "statut"=>"redac", 'bloc'=>'_bloc1');
36                $options = array("ajax"=>true);
37                $page = recuperer_fond('prive/squelettes/inclure/inc_liste_simple', $contexte, $options);
38                $ret .= $page;
39       
40                $contexte = array('titre'=>_T('tickets:tous_tickets_ouverts'), 'statut'=>'ouvert', 'bloc'=>'_bloc2');
41                $options = array('ajax'=>true);
42                $page = recuperer_fond('prive/squelettes/inclure/inc_liste_simple', $contexte, $options);
43                $ret .= $page;
44               
45                $flux["data"] .= $ret;
46        }
47        return $flux;
48}
49
50
51/**
52 * Insertion dans le pipeline accueil_informations (SPIP)
53 *
54 * Affichage de l'etat des tickets
55 *
56 * @param string $flux
57 *              Le contexte du pipeline
58 * @return string $flux
59 *              Le contexte du pipeline modifié
60 */
61function tickets_accueil_informations($flux){
62        global $spip_lang_left;
63        include_spip('inc/presentation');
64        $q = sql_select("COUNT(*) AS cnt, statut", 'spip_tickets', '', 'statut', '','', "COUNT(*)<>0");
65
66        $cpt = $cpt2 = array();
67        $defaut = $where ? '0/' : '';
68        while($row = sql_fetch($q)) {
69          $cpt[$row['statut']] = $row['cnt'];
70          $cpt2[$row['statut']] = $defaut;
71        }
72
73        if ($cpt) {
74                if ($where) {
75                        $q = sql_select("COUNT(*) AS cnt, statut", 'spip_tickets', $where, "statut");
76                        while($row = sql_fetch($q)) {
77                                $r = $row['statut'];
78                                $cpt2[$r] = intval($row['cnt']) . '/';
79                        }
80                }
81                $afficher_plus = 'afficher_plus_info';
82                $plus = "";
83                if (!function_exists($afficher_plus))
84                        $afficher_plus = 'afficher_plus';
85               
86                $plus = $afficher_plus(generer_url_ecrire("tickets",""));
87                $res .= "<h4>$plus"._T('tickets:info_tickets')."</h4>";
88                $res .= "<ul class=\"liste-items\">";
89                if (isset($cpt['redac'])) $res .= "<li class=\"item\">"._T('tickets:info_tickets_redac').": ".$cpt2['redac'].$cpt['redac'] . "</li>";
90                if (isset($cpt['ouvert'])) $res .= "<li class=\"item\">"._T('tickets:info_tickets_ouvert').": ".$cpt2['ouvert'] .$cpt['ouvert'] . "</li>";
91                $res .= "</ul>";
92        }
93
94        $flux .= "<div class=\"accueil_informations ticket liste\">" . $res . "</div>";
95        return $flux;
96}
97
98/**
99 * Insertion dans le pipeline affiche milieu (SPIP)
100 *
101 * Ajout de la liste des tickets en cours de rédaction
102 *
103 * @param array $flux
104 *              Le contexte du pipeline
105 * @return array $flux
106 *              Le contexte du pipeline modifié
107 */
108function tickets_affiche_milieu($flux){
109        if (isset($flux["args"]["exec"]) && $flux["args"]["exec"] == "accueil") {
110                $flux['data'] .= '<br class="nettoyeur" />';
111                $flux['data'] .= recuperer_fond('prive/squelettes/inclure/inc_classement_accueil', array());
112        }
113        return $flux;
114}
115
116/**
117 * Insertion dans le pipeline forum_objets_depuis_env (plugin forums balises/formulaire_forum.php)
118 *
119 * Permet de récupérer l'id du ticket dans le formulaire de forum
120 *
121 * @param array $objets
122 * @return array $objets
123 */
124function tickets_forum_objets_depuis_env($objets){
125        $objets['ticket'] = id_table_objet('ticket');
126        return $objets;
127}
128
129/**
130 * Insertion dans le pipeline formulaire_charger (SPIP)
131 * Si on est dans un formulaire de forum sur un ticket, on ajoute l'id_ticket dans les champs chargés
132 * Permet de le récupérer par la suite dans le contexte de recuperer_fond
133 *
134 * @param array $flux Le contexte du formulaire
135 * @return array $flux Le contexte du formulaire modifié
136 */
137function tickets_formulaire_charger($flux){
138        if (($flux['args']['form'] == 'forum') && ($flux['args']['args'][0] == 'ticket')){
139                $flux['data']['objet'] = 'ticket';
140                $flux['data']['id_objet'] = $flux['args']['args'][1];
141                $flux['data']['id_ticket'] = $flux['args']['args'][1];
142                $flux['data']['ticket_statut'] = _request('ticket_statut');
143                $flux['data']['id_assigne'] = _request('id_assigne');
144        }
145        return $flux;
146}
147
148/**
149 * Insertion dans le pipeline recuperer_fond (SPIP)
150 *
151 * Sur le formulaire de forum (public seulement), on ajoute 2 champs quand on commente un ticket :
152 * -* La possibilité de changer le statut;
153 * -* La possibilité de changer l'assignation
154 * Dans le privé, recours au formulaire usuel de l'espace privé, le changement de statut et d'assignation étant
155 * directement disponibles dans la page.
156 *
157 * @param array $flux Le contexte du pipeline
158 */
159function tickets_recuperer_fond($flux){
160        if ($flux['args']['fond'] == 'formulaires/forum'){
161                if(is_numeric($flux['args']['contexte']['id_ticket'])){
162                        $infos_ticket = sql_fetsel('*','spip_tickets','id_ticket='.intval($flux['args']['contexte']['id_ticket']));
163                        foreach(array('projet','composant','version','severite','navigateur','tracker','id_assigne','exemple') as $champ){
164                                if(_request($champ))
165                                        $infos_ticket[$champ] = _request($champ);
166                        }
167                        if(_request('ticket_statut'))
168                                $infos_ticket['ticket_statut'] = _request('ticket_statut');
169                        if(is_array($infos_ticket)){
170                                $saisie_ticket = recuperer_fond('inclure/inc-tickets_formulaire_forum',array_merge($flux['args']['contexte'],$infos_ticket));
171                                $flux['data']['texte'] = preg_replace(",(<fieldset>.*<\/fieldset>),Uims","\\1".$saisie_ticket,$flux['data']['texte'],1);
172                        }
173                }
174        }
175        return $flux;
176}
177
178/**
179 * Insertion dans le pipeline formulaire_verifier (SPIP)
180 *
181 * On ajoute nos valeurs des champs de tickets dans la prévisu de forum
182 *
183 * @param array $flux
184 * @return array $flux
185 */
186function tickets_formulaire_verifier($flux){
187        if (($flux['args']['form']=='forum') AND ($flux['args']['args'][0]=='ticket') && isset($flux['data']['previsu'])) {
188                $flux['data']['previsu'] .= '<input type="hidden" name="ticket_statut" value="'._request('ticket_statut').'" />';
189                foreach(array('projet','composant','version','severite','navigateur','tracker','id_assigne','exemple') as $champ){
190                        if(_request($champ))
191                                $flux['data']['previsu'] .= '<input type="hidden" name="'.$champ.'" value="'._request($champ).'" />';
192                }
193        }
194        return $flux;
195}
196
197
198/**
199 * Insertion dans le pipeline formulaire_traiter (SPIP)
200 * Si on est dans un formulaire de forum sur un ticket, on récupère le statut et l'assignation si présents
201 * pour modifier le ticket en conséquence.
202 *
203 * De plus, si configuration de tickets, on repercute la configuration des documents joints au plugin medias.
204 *
205 * @param array $flux
206 * @return array $flux
207 */
208function tickets_formulaire_traiter($flux){
209        if (($flux['args']['form']=='forum') AND ($flux['args']['args'][0]=='ticket')) {
210                include_spip('action/editer_ticket');
211                include_spip('inc/autoriser');
212                $id_ticket = $flux['args']['args'][1];
213                $infos_ticket = sql_fetsel('*','spip_tickets','id_ticket='.intval($id_ticket));
214                if(autoriser('modifier','ticket',$id_ticket)){
215                        $set = array();
216                        if(($new_statut = _request('ticket_statut')) && ($new_statut != $infos_ticket['statut']))
217                                $set['statut']= $new_statut;
218                        /**
219                         * On met le $_POST['texte'] à null pour ne pas mettre le texte du forum dans le texte du ticket
220                         */
221                        set_request('texte',NULL);
222                        ticket_modifier($id_ticket,$set);
223                }
224                else if(autoriser('assigner','ticket',$id_ticket)){
225                        if(($new_assigne=_request('id_assigne')) && ($new_assigne != $infos_ticket['id_assigne']))
226                                ticket_modifier($id_ticket, array('id_assigne'=>$new_assigne));
227                }
228        }
229        if ($flux['args']['form']=='configurer_tickets_general') {
230                $config_docs = explode(',',$GLOBALS['meta']['documents_objets']);
231                $cle = array_search('spip_tickets', $config_docs);
232                if ($cle AND !_request('joindre_fichiers')) unset($config_docs[$cle]);
233                if (!$cle AND _request('joindre_fichiers')) $config_docs[] = 'spip_tickets';
234                ecrire_meta('documents_objets',implode(',', $config_docs));
235        }
236        return $flux;
237}
238
239/**
240 * Insertion dans le pipeline notifications_destinataires (Forum)
241 * Ajoute des destinataires dans les notifications
242 *
243 * @param array $flux : le contexte du pipeline
244 * @return array $flux : le contexte modifié
245 */
246function tickets_notifications_destinataires($flux){
247        /**
248         * Notification des auteurs de tickets et des assignés et des autres forumeurs lorsque le post est validé
249         */
250        if(($flux['args']['quoi'] == 'forumvalide')){
251                if(($flux['args']['options']['forum']['objet'] == 'ticket') && ($id_ticket = intval($flux['args']['options']['forum']['id_objet']))){
252                        /**
253                         * On notifie l'id_auteur et l'id_assigné du ticket s'ils ne sont pas l'auteur du post en question
254                         */
255                        $auteurs = sql_fetsel('id_auteur,id_assigne','spip_tickets','id_ticket='.intval($id_ticket).' AND id_auteur !='.intval($flux['args']['options']['forum']['id_auteur']));
256                        if(is_array($auteurs)){
257                                foreach($auteurs as $auteur){
258                                        $email = sql_getfetsel('email','spip_auteurs','id_auteur='.intval($auteur));
259                                        $flux['data'][] = $email;
260                                }
261                        }
262                        /**
263                         * On notifie les autres forumeurs du ticket
264                         * GROUP BY id_auteur
265                         */
266                        $id_forums = sql_select('*','spip_forum','objet='.sql_quote('ticket').' AND id_objet='.intval($id_ticket).' AND id_forum != '.intval($flux['args']['options']['forum']['id_forum']),array('id_auteur'));
267                        while($forum = sql_fetch($id_forums)){
268                                $email = sql_getfetsel('email','spip_auteurs','id_auteur='.intval($forum['id_auteur']));
269                                $flux['data'][] = $email;
270                        }
271                }
272        }
273        return $flux;
274}
275
276?>
Note: See TracBrowser for help on using the repository browser.