source: spip-zone/_plugins_/tickets/trunk/tickets_fonctions.php @ 81170

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

A l'insertion en base un ticket a pour statut redac, qui est passé directement au statut ouvert pour faire fonctionner la notification

Version 2.6.7

  • Property svn:eol-style set to native
File size: 9.5 KB
Line 
1<?php
2/**
3 * Plugin Tickets
4 * Licence GPL (c) 2008-2013
5 *
6 * @package SPIP\Tickets\Fonctions
7 */
8 
9if (!defined("_ECRIRE_INC_VERSION")) return;
10
11/**
12 * Crée la liste des options du select des champs :
13 * -* jalon
14 * -* version
15 * -* projet
16 * -* composant
17 *
18 * @param string $nom
19 *              Le nom du champ
20 * @return array|false
21 *              Le tableau des valeurs possibles ou false si aucune
22 */
23function tickets_champ_optionnel_actif($nom){
24        $constante = '_TICKETS_LISTE_' . strtoupper($nom);
25        if (!defined($constante) && !lire_config('tickets/general/'.$nom))
26                return false;
27        if(defined($constante))
28                $liste = constant($constante);
29        else
30                $liste = lire_config('tickets/general/'.$nom,'');
31
32        if ($liste == '') return false;
33
34        return array_map('trim',explode(':', $liste));
35}
36
37/**
38 *
39 * Crée la liste des options du champ select d'assignation de ticket
40 * Prend deux arguments optionnels :
41 * -* $en_cours qui est l'id_auteur que l'on souhaite préselectionner
42 * -* $format qui permet de choisir le format que la fonction renvoit :
43 * -** rien ou autre chose que 'array' renverra les options d'un select
44 * -** 'array' renverra un array des auteurs possibles
45 *
46 * @param int $en_cours
47 * @param string $format
48 * @return multitype:array|string
49 */
50function tickets_select_assignation($en_cours='0',$format='select'){
51        $options = NULL;
52        $liste_assignables=array();
53       
54        include_spip('inc/tickets_autoriser');
55        $select = array('nom','id_auteur');
56        $from = array('spip_auteurs AS t1');
57       
58        $autorises = false;
59        $type = lire_config('tickets/autorisations/assigneretre_type');
60        if($type){
61                switch($type) {
62                        case 'webmestre':
63                                // Webmestres uniquement
64                                $autorises['statut'] = array('0minirezo');
65                                $autorises['webmestre'] = 'oui';
66                                break;
67                        case 'par_statut':
68                                $autorises['statut'] = lire_config('tickets/autorisations/assigneretre_statuts',array('0minirezo'));
69                                break;
70                        case 'par_auteur':
71                                // Autorisation par id d'auteurs
72                                $autorises['auteur'] = lire_config('tickets/autorisations/assigneretre_auteurs',array());
73                                break;
74                }
75        }
76        if(!$autorises)
77                $autorises = definir_autorisations_tickets('assigneretre');
78       
79        if ($autorises['statut']){
80                $where = array(sql_in('t1.statut', $autorises['statut']), 't1.email LIKE '.sql_quote('%@%'));
81                if($autorises['webmestre'] == 'oui')
82                        $where[] = 't1.webmestre = '.sql_quote('oui');
83        }
84        else
85                $where = array(sql_in('t1.id_auteur', $autorises['auteur']), 't1.email LIKE '.sql_quote('%@%'));
86
87        $query_auteurs = sql_select($select, $from, $where);
88        while ($row_auteur = sql_fetch($query_auteurs)) {
89                $liste_assignables[$row_auteur["id_auteur"]] = $row_auteur["nom"];
90                $selected = ($row_auteur["id_auteur"] == $en_cours) ? ' selected="selected"' : '';
91                $options .= '<option value="' . $row_auteur["id_auteur"] . '"' . $selected . '>' . $row_auteur["nom"] . '</option>';
92        }
93        if($format=='array')
94                return $liste_assignables;
95
96        return $options;
97}
98
99// Affichage de la page des tickets classes par version
100function tickets_classer_par_version($bidon) {
101        $page = NULL;
102        if (defined('_TICKETS_LISTE_VERSIONS') OR lire_config('tickets/general/versions')){
103                if (defined('_TICKETS_LISTE_VERSIONS'))
104                        $liste = explode(":", _TICKETS_LISTE_VERSIONS);
105                else
106                        $liste = explode(":", lire_config('tickets/general/versions'));
107               
108                $liste = array_map('trim',$liste);
109               
110                include_spip('inc/texte');
111                $i = 0;
112                foreach($liste as $_version) {
113                        $i += 1;
114                        $page .= recuperer_fond('prive/squelettes/inclure/inc_liste_detaillee',
115                                array_merge($_GET, array('titre' => _T('tickets:champ_version').' '.((strlen($_version) > 0) ? extraire_multi($_version) : _T('tickets:info_sans_version')), 'statut' => 'ouvert', 'version' => $_version, 'bloc' => "_bloc$i")),
116                                array('ajax'=>true));
117                }
118        }
119        return $page;
120}
121
122// Affichage de la page des tickets classes par jalon
123function tickets_classer_par_jalon($bidon) {
124        $page = NULL;
125        if (defined('_TICKETS_LISTE_JALONS') OR lire_config('tickets/general/jalons')) {
126                if (defined('_TICKETS_LISTE_JALONS'))
127                        $liste = explode(":", _TICKETS_LISTE_JALONS);
128                else
129                        $liste = explode(":", lire_config('tickets/general/jalons'));
130                       
131                $liste = array_map('trim',$liste);
132               
133                $i = 0;
134                foreach($liste as $_jalon) {
135                        $i += 1;
136                        $page .= recuperer_fond('prive/squelettes/inclure/inc_liste_detaillee',
137                                array_merge($_GET, array('titre' => _T('tickets:champ_jalon').' '.$_jalon, 'statut' => 'ouvert', 'jalon' => $_jalon, 'bloc' => "_bloc$i")),
138                                array('ajax'=>true));
139                }
140        }
141        return $page;
142}
143
144// Affichage de la page des tickets classes par composant
145function tickets_classer_par_composant($bidon) {
146        $page = NULL;
147        if (defined('_TICKETS_LISTE_COMPOSANTS') OR lire_config('tickets/general/composants')) {
148                if (defined('_TICKETS_LISTE_COMPOSANTS'))
149                        $liste = explode(":", _TICKETS_LISTE_COMPOSANTS);
150                else
151                        $liste = explode(":", lire_config('tickets/general/composants'));
152                       
153                $liste = array_map('trim',$liste);
154               
155                $i = 0;
156                foreach($liste as $_composant) {
157                        $i += 1;
158                        $page .= recuperer_fond('prive/squelettes/inclure/inc_liste_detaillee',
159                                array_merge($_GET, array('titre' => _T('tickets:champ_composant').' '.((strlen($_composant) > 0) ? $_composant : _T('tickets:info_sans')), 'statut' => 'ouvert', 'composant' => $_composant, 'bloc' => "_bloc$i")),
160                                array('ajax'=>true));
161                }
162        }
163        return $page;
164}
165
166// Affichage de la page des tickets classes par projet
167function tickets_classer_par_projet($bidon) {
168        $page = NULL;
169        if (defined('_TICKETS_LISTE_PROJETS') OR lire_config('tickets/general/projets')) {
170                if (defined('_TICKETS_LISTE_PROJETS'))
171                        $liste = explode(":", _TICKETS_LISTE_PROJETS);
172                else
173                        $liste = explode(":", lire_config('tickets/general/projets'));
174               
175                $liste = array_map('trim',$liste);
176               
177                $i = 0;
178                foreach($liste as $_projet) {
179                        $i += 1;
180                        $page .= recuperer_fond('prive/squelettes/inclure/inc_liste_detaillee',
181                                array_merge($_GET, array('titre' => _T('tickets:champ_projet').' '.$_projet, 'statut' => 'ouvert', 'projet' => $_projet, 'bloc' => "_bloc$i")),
182                                array('ajax'=>true));
183                }
184        }
185        return $page;
186}
187
188// creation des fonction de selection de texte
189// encore en truc a reprendre !
190foreach (array('severite', 'tracker', 'statut', 'navigateur') as $nom){
191        eval("function tickets_texte_$nom(\$valeur) {
192                \$type = tickets_liste_$nom();
193                if (isset(\$type[\$valeur])) {
194                        return \$type[\$valeur];
195                }
196        }");
197}
198
199function tickets_icone_statut ($niveau,$full=false) {
200        $img = array(
201                "ouvert" => "puce-orange.gif",
202                "resolu" => "puce-verte.gif",
203                "ferme" => "puce-poubelle.gif",
204                "poubelle" => "puce-poubelle.gif"
205                );
206        if($full)
207                return '<img src="'.find_in_path('prive/images/'.$img[$niveau]).'" alt="'.tickets_texte_statut($niveau).'" />';
208        else
209                return $img[$niveau];
210}
211
212function tickets_icone_severite ($niveau,$full=false,$alt=false) {
213        $img = array(
214                1 => "puce-rouge-breve.gif",
215                2 => "puce-orange-breve.gif",
216                3 => "puce-verte-breve.gif",
217                4 => "puce-poubelle-breve.gif"
218                );
219        if($full){
220                $balise_img = charger_filtre('balise_img');
221                $img = $balise_img(find_in_path('prive/images/'.$img[$niveau]));
222                if($alt)
223                        $img = inserer_attribut($img,'alt',tickets_texte_severite($niveau));
224                return $img;
225        }
226        else
227                return $img[$niveau];
228}
229
230/**
231 * Lister les statuts affichés dans les sélecteurs
232 *
233 * On teste les autorisations à instituer à ce niveau de statut
234 *
235 * @param int $id_ticket
236 *              L'identifiant numérique du ticket
237 * @return array $statuts
238 *              La liste des statuts autorisés
239 */
240function tickets_liste_statut($id_ticket = null){
241        $statuts = array(
242                "ouvert" => _T("tickets:statut_ouvert"),
243                "resolu" => _T("tickets:statut_resolu"),
244                "ferme" => _T("tickets:statut_ferme"),
245                "poubelle" => _T("tickets:statut_poubelle")
246        );
247        include_spip('inc/autoriser');
248        foreach($statuts as $statut => $titre){
249                if(!autoriser('instituer','ticket',$id_ticket,$GLOBALS['visiteur_session'],array('statut'=>$statut)))
250                        unset($statuts[$statut]);
251        }
252        return $statuts;
253}
254
255
256function tickets_liste_tracker($id_ticket = null){
257        $trackers = array(
258                1 => _T("tickets:type_probleme"),
259                2 => _T("tickets:type_amelioration"),
260                3 => _T("tickets:type_tache"),
261        );
262        $trackers = pipeline('tickets_liste_tracker',array('args'=>'nom_court','data'=>$trackers));
263        return $trackers;
264}
265
266function tickets_liste_tracker_nom_long($id_ticket = null){
267        $trackers = array(
268                1 => _T("tickets:type_probleme_long"),
269                3 => _T("tickets:type_tache_long"),
270                2 => _T("tickets:type_amelioration_long"),
271        );
272        $trackers = pipeline('tickets_liste_tracker',array('args'=>'nom_long','data'=>$trackers));
273        return $trackers;
274}
275
276function tickets_liste_severite($id_ticket = null){
277        $severites = array(
278                1 => _T("tickets:severite_bloquant"),
279                2 => _T("tickets:severite_important"),
280                3 => _T("tickets:severite_normal"),
281                4 => _T("tickets:severite_peu_important"),
282        );
283        return $severites;
284}
285
286/**
287 * Liste des navigateurs possibles
288 */
289function tickets_liste_navigateur($nav=false){
290        $navs = array(
291                'tous' => _T('tickets:option_navigateur_tous'),
292                'android2' => 'Android 2.x',
293                'android4' => 'Android 4.x',
294                'firefox4' => 'Firefox <= 4',
295                'firefox10' => 'Firefox <= 10',
296                'firefox15' => 'Firefox <= 15',
297                'firefox20' => 'Firefox <= 20',
298                'chrome10' => 'Google <= 10',
299                'chrome15' => 'Google Chrome <= 15',
300                'chrome20' => 'Google Chrome <= 20',
301                'chrome25' => 'Google Chrome <= 25',
302                'chrome30' => 'Google Chrome > 25',
303                'ie8' => 'Internet Explorer 8',
304                'ie9' => 'Internet Explorer 9',
305                'ie10' => 'Internet Explorer 10',
306                'opera11' => 'Opera 11.x',
307                'opera12' => 'Opera 12.x',
308                'safari4' => 'Safari 4.x',
309                'safari5' => 'Safari 5.x',
310                'safariipad' => 'Safari Ipad',
311                'autre' => _T('tickets:option_navigateur_autre')
312        );
313        return $navs;
314}
315
316?>
Note: See TracBrowser for help on using the repository browser.