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

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

Pouvoir depuis le formulaire de forum modifier les champs comme version, projet, composant etc...

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/**
100 * Insertion dans le pipeline affiche milieu (SPIP)
101 *
102 * Ajout de la liste des tickets en cours de rédaction
103 *
104 * @param array $flux
105 *              Le contexte du pipeline
106 * @return array $flux
107 *              Le contexte du pipeline modifié
108 */
109function tickets_affiche_milieu($flux){
110        if (isset($flux["args"]["exec"]) && $flux["args"]["exec"] == "accueil") {
111                $flux['data'] .= '<br class="nettoyeur" />';
112                $flux['data'] .= recuperer_fond('prive/squelettes/inclure/inc_classement_accueil', array());
113        }
114        return $flux;
115}
116
117/**
118 * Insertion dans le pipeline forum_objets_depuis_env (plugin forums balises/formulaire_forum.php)
119 *
120 * Permet de récupérer l'id du ticket dans le formulaire de forum
121 *
122 * @param array $objets
123 * @return array $objets
124 */
125function tickets_forum_objets_depuis_env($objets){
126        $objets['ticket'] = id_table_objet('ticket');
127        return $objets;
128}
129
130/**
131 * Insertion dans le pipeline formulaire_charger (SPIP)
132 * Si on est dans un formulaire de forum sur un ticket, on ajoute l'id_ticket dans les champs chargés
133 * Permet de le récupérer par la suite dans le contexte de recuperer_fond
134 *
135 * @param array $flux Le contexte du formulaire
136 * @return array $flux Le contexte du formulaire modifié
137 */
138function tickets_formulaire_charger($flux){
139        if ($flux['args']['form'] == 'forum'){
140                if($flux['args']['args'][0] == 'ticket'){
141                        $flux['data']['objet'] = 'ticket';
142                        $flux['data']['id_objet'] = $flux['args']['args'][1];
143                        $flux['data']['id_ticket'] = $flux['args']['args'][1];
144                        $flux['data']['ticket_statut'] = _request('ticket_statut');
145                        $flux['data']['id_assigne'] = _request('id_assigne');
146                }
147        }
148        return $flux;
149}
150
151/**
152 * Insertion dans le pipeline recuperer_fond (SPIP)
153 *
154 * Sur le formulaire de forum (public seulement), on ajoute 2 champs quand on commente un ticket :
155 * -* La possibilité de changer le statut;
156 * -* La possibilité de changer l'assignation
157 * Dans le privé, recours au formulaire usuel de l'espace privé, le changement de statut et d'assignation étant
158 * directement disponibles dans la page.
159 *
160 * @param array $flux Le contexte du pipeline
161 */
162function tickets_recuperer_fond($flux){
163        if ($flux['args']['fond'] == 'formulaires/forum'){
164                if(is_numeric($flux['args']['contexte']['id_ticket'])){
165                        $infos_ticket = sql_fetsel('*','spip_tickets','id_ticket='.intval($flux['args']['contexte']['id_ticket']));
166                        foreach(array('projet','composant','version','severite','navigateur','tracker','id_assigne','exemple') as $champ){
167                                if(_request($champ))
168                                        $infos_ticket[$champ] = _request($champ);
169                        }
170                        if(_request('ticket_statut'))
171                                $infos_ticket['ticket_statut'] = _request('ticket_statut');
172                        if(is_array($infos_ticket)){
173                                $saisie_ticket = recuperer_fond('inclure/inc-tickets_formulaire_forum',array_merge($flux['args']['contexte'],$infos_ticket));
174                                $flux['data']['texte'] = preg_replace(",(<fieldset>.*<\/fieldset>),Uims","\\1".$saisie_ticket,$flux['data']['texte'],1);
175                        }
176                }
177        }
178        return $flux;
179}
180
181/**
182 * Insertion dans le pipeline formulaire_verifier (SPIP)
183 *
184 * On ajoute nos valeurs des champs de tickets dans la prévisu de forum
185 *
186 * @param array $flux
187 * @return array $flux
188 */
189function tickets_formulaire_verifier($flux){
190        if (($flux['args']['form']=='forum') AND ($flux['args']['args'][0]=='ticket') && isset($flux['data']['previsu'])) {
191                $flux['data']['previsu'] .= '<input type="hidden" name="ticket_statut" value="'._request('ticket_statut').'" />';
192                foreach(array('projet','composant','version','severite','navigateur','tracker','id_assigne','exemple') as $champ){
193                        if(_request($champ))
194                                $flux['data']['previsu'] .= '<input type="hidden" name="'.$champ.'" value="'._request($champ).'" />';
195                }
196        }
197        return $flux;
198}
199
200
201/**
202 * Insertion dans le pipeline formulaire_traiter (SPIP)
203 * Si on est dans un formulaire de forum sur un ticket, on récupère le statut et l'assignation si présents
204 * pour modifier le ticket en conséquence.
205 *
206 * De plus, si configuration de tickets, on repercute la configuration des documents joints au plugin medias.
207 *
208 * @param array $flux
209 * @return array $flux
210 */
211function tickets_formulaire_traiter($flux){
212        if (($flux['args']['form']=='forum') AND ($flux['args']['args'][0]=='ticket')) {
213                include_spip('action/editer_ticket');
214                include_spip('inc/autoriser');
215                $id_ticket = $flux['args']['args'][1];
216                $infos_ticket = sql_fetsel('*','spip_tickets','id_ticket='.intval($id_ticket));
217                if(autoriser('modifier','ticket',$id_ticket)){
218                        $set = array();
219                        if(($new_statut = _request('ticket_statut')) && ($new_statut != $infos_ticket['statut']))
220                                $set['statut']= $new_statut;
221                        /**
222                         * On met le $_POST['texte'] à null pour ne pas mettre le texte du forum dans le texte du ticket
223                         */
224                        set_request('texte',NULL);
225                        ticket_modifier($id_ticket,$set);
226                }
227                else if(autoriser('assigner','ticket',$id_ticket)){
228                        if(($new_assigne=_request('id_assigne')) && ($new_assigne != $infos_ticket['id_assigne']))
229                                ticket_modifier($id_ticket, array('id_assigne'=>$new_assigne));
230                }
231        }
232        if ($flux['args']['form']=='configurer_tickets_general') {
233                $config_docs = explode(',',$GLOBALS['meta']['documents_objets']);
234                $cle = array_search('spip_tickets', $config_docs);
235                if ($cle AND !_request('joindre_fichiers')) unset($config_docs[$cle]);
236                if (!$cle AND _request('joindre_fichiers')) $config_docs[] = 'spip_tickets';
237                ecrire_meta('documents_objets',implode(',', $config_docs));
238        }
239        return $flux;
240}
241
242/**
243 * Insertion dans le pipeline notifications_destinataires (Forum)
244 * Ajoute des destinataires dans les notifications
245 *
246 * @param array $flux : le contexte du pipeline
247 * @return array $flux : le contexte modifié
248 */
249function tickets_notifications_destinataires($flux){
250        /**
251         * Notification des auteurs de tickets et des assignés et des autres forumeurs lorsque le post est validé
252         */
253        if(($flux['args']['quoi'] == 'forumvalide')){
254                if(($flux['args']['options']['forum']['objet'] == 'ticket') && ($id_ticket = intval($flux['args']['options']['forum']['id_objet']))){
255                        /**
256                         * On notifie l'id_auteur et l'id_assigné du ticket s'ils ne sont pas l'auteur du post en question
257                         */
258                        $auteurs = sql_fetsel('id_auteur,id_assigne','spip_tickets','id_ticket='.intval($id_ticket).' AND id_auteur !='.intval($flux['args']['options']['forum']['id_auteur']));
259                        if(is_array($auteurs)){
260                                foreach($auteurs as $auteur){
261                                        $email = sql_getfetsel('email','spip_auteurs','id_auteur='.intval($auteur));
262                                        $flux['data'][] = $email;
263                                }
264                        }
265                        /**
266                         * On notifie les autres forumeurs du ticket
267                         * GROUP BY id_auteur
268                         */
269                        $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'));
270                        while($forum = sql_fetch($id_forums)){
271                                $email = sql_getfetsel('email','spip_auteurs','id_auteur='.intval($forum['id_auteur']));
272                                $flux['data'][] = $email;
273                        }
274                }
275        }
276        return $flux;
277}
278
279?>
Note: See TracBrowser for help on using the repository browser.