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

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

pouvoir 'biper' quelqu'un en utilisant [->autxxx] ou [->auteurxxx]

File size: 10.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:tous_tickets_ouverts'), 'statut'=>'ouvert', 'bloc'=>'_bloc2');
36                $options = array('ajax'=>true);
37                $page = recuperer_fond('prive/squelettes/inclure/inc_liste_simple', $contexte, $options);
38                $ret .= $page;
39               
40                $flux["data"] .= $ret;
41        }
42        return $flux;
43}
44
45
46/**
47 * Insertion dans le pipeline accueil_informations (SPIP)
48 *
49 * Affichage de l'etat des tickets
50 *
51 * @param string $flux
52 *              Le contexte du pipeline
53 * @return string $flux
54 *              Le contexte du pipeline modifié
55 */
56function tickets_accueil_informations($flux){
57        global $spip_lang_left;
58        include_spip('inc/presentation');
59        $q = sql_select("COUNT(*) AS cnt, statut", 'spip_tickets', '', 'statut', '','', "COUNT(*)<>0");
60
61        $cpt = $cpt2 = array();
62        $defaut = $where ? '0/' : '';
63        while($row = sql_fetch($q)) {
64                $cpt[$row['statut']] = $row['cnt'];
65                $cpt2[$row['statut']] = $defaut;
66        }
67
68        if ($cpt) {
69                if ($where) {
70                        $q = sql_select("COUNT(*) AS cnt, statut", 'spip_tickets', $where, "statut");
71                        while($row = sql_fetch($q)) {
72                                $r = $row['statut'];
73                                $cpt2[$r] = intval($row['cnt']) . '/';
74                        }
75                }
76                $afficher_plus = 'afficher_plus_info';
77                $plus = "";
78                if (!function_exists($afficher_plus))
79                        $afficher_plus = 'afficher_plus';
80               
81                $plus = $afficher_plus(generer_url_ecrire("tickets",""));
82                $res .= "<h4>$plus"._T('tickets:info_tickets')."</h4>";
83                $res .= "<ul class=\"liste-items\">";
84                if (isset($cpt['ouvert'])) $res .= "<li class=\"item\">"._T('tickets:info_tickets_ouvert').": ".$cpt2['ouvert'] .$cpt['ouvert'] . "</li>";
85                $res .= "</ul>";
86        }
87
88        $flux .= "<div class=\"accueil_informations ticket liste\">" . $res . "</div>";
89        return $flux;
90}
91
92/**
93 * Insertion dans le pipeline affiche milieu (SPIP)
94 *
95 * Ajout de la liste des tickets en cours de rédaction
96 *
97 * @param array $flux
98 *              Le contexte du pipeline
99 * @return array $flux
100 *              Le contexte du pipeline modifié
101 */
102function tickets_affiche_milieu($flux){
103        if (isset($flux["args"]["exec"]) && $flux["args"]["exec"] == "accueil") {
104                $flux['data'] .= '<br class="nettoyeur" />';
105                $flux['data'] .= recuperer_fond('prive/squelettes/inclure/inc_classement_accueil', array());
106        }
107        return $flux;
108}
109
110/**
111 * Insertion dans le pipeline forum_objets_depuis_env (plugin forums balises/formulaire_forum.php)
112 *
113 * Permet de récupérer l'id du ticket dans le formulaire de forum
114 *
115 * @param array $objets
116 * @return array $objets
117 */
118function tickets_forum_objets_depuis_env($objets){
119        $objets['ticket'] = id_table_objet('ticket');
120        return $objets;
121}
122
123/**
124 * Insertion dans le pipeline formulaire_charger (SPIP)
125 * Si on est dans un formulaire de forum sur un ticket, on ajoute l'id_ticket dans les champs chargés
126 * Permet de le récupérer par la suite dans le contexte de recuperer_fond
127 *
128 * @param array $flux Le contexte du formulaire
129 * @return array $flux Le contexte du formulaire modifié
130 */
131function tickets_formulaire_charger($flux){
132        if (($flux['args']['form'] == 'forum') && ($flux['args']['args'][0] == 'ticket')){
133                $flux['data']['objet'] = 'ticket';
134                $flux['data']['id_objet'] = $flux['args']['args'][1];
135                $flux['data']['id_ticket'] = $flux['args']['args'][1];
136                $flux['data']['ticket_statut'] = _request('ticket_statut');
137                $flux['data']['id_assigne'] = _request('id_assigne');
138        }
139        return $flux;
140}
141
142/**
143 * Insertion dans le pipeline recuperer_fond (SPIP)
144 *
145 * Sur le formulaire de forum (public seulement), on ajoute 2 champs quand on commente un ticket :
146 * -* La possibilité de changer le statut;
147 * -* La possibilité de changer l'assignation
148 * Dans le privé, recours au formulaire usuel de l'espace privé, le changement de statut et d'assignation étant
149 * directement disponibles dans la page.
150 *
151 * @param array $flux Le contexte du pipeline
152 */
153function tickets_recuperer_fond($flux){
154        if (($flux['args']['fond'] == 'formulaires/forum')
155                && is_numeric($flux['args']['contexte']['id_ticket'])){
156                $infos_ticket = sql_fetsel('*','spip_tickets','id_ticket='.intval($flux['args']['contexte']['id_ticket']));
157                foreach(objet_info('ticket','champs_editables') as $champ){
158                        if(_request($champ))
159                                $infos_ticket[$champ] = _request($champ);
160                }
161                if(_request('ticket_statut'))
162                        $infos_ticket['ticket_statut'] = _request('ticket_statut');
163                if(is_array($infos_ticket)){
164                        $saisie_ticket = recuperer_fond('inclure/inc-tickets_formulaire_forum',array_merge($flux['args']['contexte'],$infos_ticket));
165                        $flux['data']['texte'] = preg_replace(",(<fieldset>.*<\/fieldset>),Uims","\\1".$saisie_ticket,$flux['data']['texte'],1);
166                }
167        }
168        return $flux;
169}
170
171/**
172 * Insertion dans le pipeline formulaire_verifier (SPIP)
173 *
174 * On ajoute nos valeurs des champs de tickets dans la prévisu de forum
175 *
176 * @param array $flux
177 * @return array $flux
178 */
179function tickets_formulaire_verifier($flux){
180        if (($flux['args']['form']=='forum') AND ($flux['args']['args'][0]=='ticket') && isset($flux['data']['previsu'])) {
181                $flux['data']['previsu'] .= '<input type="hidden" name="ticket_statut" value="'._request('ticket_statut').'" />';
182                foreach(objet_info('ticket','champs_editables') as $champ){
183                        if(_request($champ))
184                                $flux['data']['previsu'] .= '<input type="hidden" name="'.$champ.'" value="'._request($champ).'" />';
185                }
186        }
187        return $flux;
188}
189
190
191/**
192 * Insertion dans le pipeline formulaire_traiter (SPIP)
193 * Si on est dans un formulaire de forum sur un ticket, on récupère le statut et l'assignation si présents
194 * pour modifier le ticket en conséquence.
195 *
196 * De plus, si configuration de tickets, on repercute la configuration des documents joints au plugin medias.
197 *
198 * @param array $flux
199 * @return array $flux
200 */
201function tickets_formulaire_traiter($flux){
202        if (($flux['args']['form']=='forum') AND ($flux['args']['args'][0]=='ticket')) {
203                include_spip('action/editer_ticket');
204                include_spip('inc/autoriser');
205                $id_ticket = $flux['args']['args'][1];
206                $infos_ticket = sql_fetsel('*','spip_tickets','id_ticket='.intval($id_ticket));
207                if(autoriser('modifier','ticket',$id_ticket)){
208                        $set = array();
209                        if(($new_statut = _request('ticket_statut')) && ($new_statut != $infos_ticket['statut']))
210                                $set['statut']= $new_statut;
211                        /**
212                         * On met le $_POST['texte'] à null pour ne pas mettre le texte du forum dans le texte du ticket
213                         */
214                        set_request('texte',NULL);
215                        ticket_modifier($id_ticket,$set);
216                }
217                else if(autoriser('assigner','ticket',$id_ticket)){
218                        if(($new_assigne=_request('id_assigne')) && ($new_assigne != $infos_ticket['id_assigne']))
219                                ticket_modifier($id_ticket, array('id_assigne'=>$new_assigne));
220                }
221        }
222        if ($flux['args']['form']=='configurer_tickets_general') {
223                $config_docs = explode(',',$GLOBALS['meta']['documents_objets']);
224                $cle = array_search('spip_tickets', $config_docs);
225                if ($cle AND !_request('joindre_fichiers')) unset($config_docs[$cle]);
226                if (!$cle AND _request('joindre_fichiers')) $config_docs[] = 'spip_tickets';
227                ecrire_meta('documents_objets',implode(',', $config_docs));
228        }
229        return $flux;
230}
231
232/**
233 * Insertion dans le pipeline notifications_destinataires (Forum)
234 * Ajoute des destinataires dans les notifications
235 *
236 * @param array $flux : le contexte du pipeline
237 * @return array $flux : le contexte modifié
238 */
239function tickets_notifications_destinataires($flux){
240        /**
241         * Notification des auteurs de tickets et des assignés et des autres forumeurs lorsque le post est validé
242         */
243        if(($flux['args']['quoi'] == 'forumvalide' or $flux['args']['quoi'] == 'forumprive')
244                && ($flux['args']['options']['forum']['objet'] == 'ticket') 
245                && ($id_ticket = intval($flux['args']['options']['forum']['id_objet']))){
246                /**
247                 * On notifie l'id_auteur et l'id_assigné du ticket s'ils ne sont pas l'auteur du post en question
248                 */
249                $auteurs = sql_fetsel('id_auteur,id_assigne','spip_tickets','id_ticket='.intval($id_ticket));
250                if(is_array($auteurs)){
251                        foreach($auteurs as $auteur){
252                if ($auteur!=$flux['args']['options']['forum']['id_auteur']){
253                    $email = sql_getfetsel('email','spip_auteurs','id_auteur='.intval($auteur));
254                    $flux['data'][] = $email;
255                }
256                        }
257                }
258                /**
259                 * On notifie les autres forumeurs du ticket
260                 * GROUP BY id_auteur
261                 */
262                $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'));
263                while($forum = sql_fetch($id_forums)){
264                        $email = sql_getfetsel('email','spip_auteurs','id_auteur='.intval($forum['id_auteur']));
265                        $flux['data'][] = $email;
266                }
267        /** On notifie les personnes référencées dans le ticket via [->autXXX] ou [->autWWW]
268        */
269        $match=array();
270        preg_match_all("#\[(.*)->(aut|auteur)(\d*)\]#U",$flux['args']['options']['forum']['texte'],$match);
271        $auteurs = $match[3];
272        foreach($auteurs as $auteur){
273                if ($auteur!=$flux['args']['options']['forum']['id_auteur']){
274                    $email = sql_getfetsel('email','spip_auteurs','id_auteur='.intval($auteur));
275                    $flux['data'][] = $email;
276                }   
277            }
278        }
279        return $flux;
280}
281
282/**
283 * Insertion dans le pipeline revisions_chercher_label (Révisions)
284 * Ajoute les labels des champs qui peuvent être révisés
285 *
286 * @param array $flux
287 *              Le contexte du pipeline
288 * @return array $flux
289 *              Le contexte modifié
290 */
291function tickets_revisions_chercher_label($flux){
292        if($flux['args']['objet'] == 'ticket'){
293                switch ($flux['args']['champ']){
294                        case 'composant':
295                                $flux['data'] = "tickets:champ_composant";
296                                break;
297                        case 'jalon':
298                                $flux['data'] = "tickets:champ_jalon";
299                                break;
300                        case 'navigateur':
301                                $flux['data'] = "tickets:champ_navigateur";
302                                break;
303                        case 'projet':
304                                $flux['data'] = "tickets:champ_projet";
305                                break;
306                        case 'severite':
307                                $flux['data'] = "tickets:champ_severite";
308                                break;
309                        case 'sticked':
310                                $flux['data'] = "tickets:champ_sticked";
311                                break;
312                        case 'tracker':
313                                $flux['data'] = "tickets:champ_type";
314                                break;
315                        case 'version':
316                                $flux['data'] = "tickets:champ_version";
317                                break;
318                }
319        }
320        return $flux;
321}
322?>
Note: See TracBrowser for help on using the repository browser.