source: spip-zone/_plugins_/tickets/trunk/formulaires/editer_ticket.php @ 80807

Last change on this file since 80807 was 80807, checked in by severo@…, 5 years ago

tickets - on inclut les mots-clés dans le form d'édition d'un ticket.

Remarque : on utilise la fonction SQL "FIND_IN_SET" pour
chercher 'tickets' dans la colonne 'tables_liees' de
la table 'spip_groupes_mots' (ex: dans 'articles,rubriques,tickets').
Est-ce que c'est standard pour SQLite, MySQL, PostGreSQL ?

File size: 8.4 KB
Line 
1<?php
2/**
3 * Plugin Tickets
4 * Licence GPL (c) 2008-2013
5 *
6 * Formulaire d'édition de tickets
7 *
8 * @package SPIP\Tickets\Formulaires
9 */
10
11if (!defined("_ECRIRE_INC_VERSION")) return;
12
13include_spip('inc/autoriser');
14include_spip('inc/actions');
15include_spip('inc/editer');
16include_spip('inc/filtres'); # Pour extraire_muti dans editer_ticket.html
17
18/**
19 * Identification unique d'un formulaire poste
20 * 
21 * @param int $id_ticket[optional]
22 *              Identifiant numérique du ticket ou new si nouveau
23 * @param string $retour[optional]
24 *              URL de retour
25 * @param string $config_fonc[optional]
26 *              Fonction de configuration du formulaire
27 * @param array $row[optional]
28 * @return string
29 */
30function formulaires_editer_ticket_identifier($id_ticket='new', $retour='', $config_fonc='tickets_edit_config', $row=array(), $hidden=''){
31        return serialize(array(intval($id_ticket)));
32}
33
34/**
35 * Fonction de chargement des valeurs du formulaire
36 *
37 * @param int $id_ticket[optional]
38 *              Identifiant numérique du ticket ou new si nouveau
39 * @param string $retour[optional]
40 *              URL de retour
41 * @param string $config_fonc[optional]
42 *              Fonction de configuration du formulaire
43 * @param array $row[optional]
44 * @return array $valeurs
45 *              Un tableau des valeurs chargées au formulaire
46 */
47function formulaires_editer_ticket_charger($id_ticket='new', $retour='', $config_fonc='tickets_edit_config', $row=array(), $hidden=''){
48        // mettre une valeur new pour formulaires_editer_objet_charger()
49       
50        if (!intval($id_ticket)) $id_ticket='oui'; // oui pour le traitement de l'action (new, c'est pas suffisant)
51
52        if (!autoriser('ecrire', 'ticket', $id_ticket))
53                $valeurs['editable'] = false;
54        else{
55                if(is_numeric($id_ticket) && !autoriser('modifier','ticket',$id_ticket))
56                        $valeurs['editable'] = false;
57                else{
58                        $valeurs = formulaires_editer_objet_charger('ticket',$id_ticket,0,0,$retour,$config_fonc,$row,$hidden);
59                        $valeurs['editable'] = true;
60               
61                        // si nouveau ticket
62                        if (!$id_ticket OR $id_ticket=='oui'){
63                                $valeurs['id_assigne'] = $GLOBALS['visiteur_session']['id_auteur'];
64                                // Si un des champs de ce tableau est passé dans l'URL, on l'utilise dans le formulaire
65                                foreach(array('composant','version','severite','navigateur','tracker','id_assigne','exemple') as $champ){
66                                        if(!$valeurs[$champ] && _request($champ))
67                                                $valeurs[$champ] = _request($champ);
68                                }
69                        }
70
71                        if (lire_config('tickets/general/lier_mots','off')=='on') {
72                                $valeurs['groupesmots'] = array_map('array_shift', sql_allfetsel("id_groupe", "spip_groupes_mots", "FIND_IN_SET('tickets', tables_liees)"));
73                                foreach ($valeurs['groupesmots'] as $id_groupe) {
74                                        $valeurs['groupemots_'.$id_groupe] = valeur_champ_groupemots_ticket('tickets', $id_ticket.'-'.$id_groupe, 'groupemots_ticket');
75                                }
76                        }
77                }
78        }
79        $valeurs['public'] = test_espace_prive() ? '' : 'on';
80
81        return $valeurs;
82}
83
84/**
85 *
86 * Fonction de vérification des valeurs
87 *
88 * @param int $id_ticket[optional]
89 *              Identifiant numérique du ticket ou new si nouveau
90 * @param string $retour[optional]
91 *              URL de retour
92 * @param string $config_fonc[optional]
93 *              Fonction de configuration du formulaire
94 * @param array $row[optional]
95 * @return array $erreurs
96 *              Un tableau des erreurs de validation
97 */
98function formulaires_editer_ticket_verifier($id_ticket='new', $retour='', $config_fonc='tickets_edit_config', $row=array(), $hidden=''){
99
100        $erreurs = formulaires_editer_objet_verifier('ticket',$id_ticket,array('titre','texte'));
101       
102        /**
103         * Utilisation des fonctions de nospam pour filtrer un peu
104         */
105        if (include_spip('inc/nospam')) {
106                include_spip('inc/texte');
107                $texte = _request('texte');
108        $caracteres = compter_caracteres_utiles($texte);
109        // moins de 10 caracteres sans les liens = spam !
110        if ($caracteres < 10)
111                        $erreurs['texte'] = _T('forum:forum_attention_dix_caracteres');
112
113        // on analyse le titre
114        $infos_titre = analyser_spams(_request('titre'));
115        // si un lien dans le titre = spam !
116        if ($infos_titre['nombre_liens'] > 0)
117                        $erreurs['titre'] = _T('nospam:erreur_spam');
118        // on analyse le texte
119        $infos_texte = analyser_spams($texte);
120
121        if ($infos_texte['nombre_liens'] > 0) {
122                // plus de 3 liens = spam, sauf si todo est là et donc 6 liens
123                        $max_liens = defined('_DIR_PLUGIN_TODO') ? 6 : 3;
124                        // si un lien a un titre de moins de 3 caracteres = spam, sauf si todo est là
125                        $max_caracteres_liens = defined('_DIR_PLUGIN_TODO') ? 1 : 3;
126                        if ($infos_texte['caracteres_texte_lien_min'] < $max_caracteres_liens)
127                                $erreurs['texte'] = _T('nospam:erreur_spam');
128                        if ($infos_texte['nombre_liens'] > $max_liens && !isset($GLOBALS['visiteur_session']['id_auteur']))
129                                $erreurs['texte'] = _T('nospam:erreur_spam');
130        }
131        }
132        if(count($erreurs) == 0){
133                if (!isset($GLOBALS['visiteur_session']['tmp_ticket_document'])) {
134                        include_spip('inc/session');
135                        session_set('tmp_ticket_document',sous_repertoire(_DIR_TMP, 'documents_ticket') . md5(uniqid(rand())));
136                }
137                $tmp = $GLOBALS['visiteur_session']['tmp_ticket_document'];
138                $doc = &$_FILES['ajouter_document'];
139                if (isset($_FILES['ajouter_document'])
140                AND $_FILES['ajouter_document']['tmp_name']) {
141                        include_spip('inc/joindre_document');
142                        include_spip('action/ajouter_documents');
143                        list($extension,$doc['name']) = fixer_extension_document($doc);
144                        $acceptes = ticket_documents_acceptes();
145       
146                        if (!in_array($extension, $acceptes)) {
147                                # normalement on n'arrive pas ici : pas d'upload si aucun format
148                                if (!$formats = join(', ',$acceptes))
149                                        $formats = '-'; //_L('aucun');
150                                $erreurs['ajouter_document'] = _T('public:formats_acceptes', array('formats' => $formats));
151                        }
152                        else {
153                                include_spip('inc/getdocument');
154                                if (!deplacer_fichier_upload($doc['tmp_name'], $tmp.'.bin'))
155                                        $erreurs['ajouter_document'] = _T('copie_document_impossible');
156       
157                                #               else if (...)
158                                #               verifier le type_document autorise
159                                #               retailler eventuellement les photos
160                        }
161       
162                        // si ok on stocke les meta donnees, sinon on efface
163                        if (isset($erreurs['ajouter_document'])) {
164                                spip_unlink($tmp.'.bin');
165                                unset ($_FILES['ajouter_document']);
166                        } else {
167                                $doc['tmp_name'] = $tmp.'.bin';
168                                ecrire_fichier($tmp.'.txt', serialize($doc));
169                        }
170                }
171        }
172        return $erreurs;
173}
174
175function tickets_edit_config(){
176        return array();
177}
178
179/**
180 * Fonction de traitement du formulaire
181 *
182 * @param int $id_ticket[optional]
183 *              Identifiant numérique du ticket ou new si nouveau
184 * @param string $retour[optional]
185 *              URL de retour
186 * @param string $config_fonc[optional]
187 *              Fonction de configuration du formulaire
188 * @param array $row[optional]
189 * @return array $message
190 *              Un tableau des éléments de retour du formulaire CVT
191 */
192function formulaires_editer_ticket_traiter($id_ticket='new',$retour='', $config_fonc='tickets_edit_config', $row=array(), $hidden=''){
193        $res = formulaires_editer_objet_traiter('ticket',$id_ticket,0,0,$retour,$config_fonc,$row,$hidden);
194       
195        /* Enregistrement des mots-clés */
196        foreach (explode(',',_request('groupesmots')) as $id_groupe) {
197                groupemots_ticket_revision($res['id_ticket'].'-'.$id_groupe, array('groupemots_ticket'=> implode(',',_request('groupemots_'.$id_groupe))), 'groupes_mot');
198        }
199
200        if (isset($res['message_erreur']))
201                $message['message_erreur'] = $res['message_erreur'];
202        else {
203                $message['message_ok'] = _T('tickets:ticket_enregistre');
204                /**
205                 * Si pas d'adresse de retour on revient sur la page en cours avec l'id_ticket en paramètre
206                 * Utile pour l'utilisation dans le public
207                 */
208                if (!$retour)
209                        $message['redirect'] = parametre_url(parametre_url(self(),'id_ticket', $res['id_ticket']),'ticket','');
210                else {
211                        if (strncmp($retour,'javascript:',11)==0)
212                                $message['message_ok'] .= '<script type="text/javascript">/*<![CDATA[*/'.substr($retour,11).'/*]]>*/</script>';
213                        else // sinon on utilise la redirection donnee.
214                                $message['redirect'] = parametre_url($retour, 'id_ticket', $res['id_ticket']);
215                }
216        }
217        return $message;
218}
219
220/**
221 * Fonction listant les extensions de fichiers que l'on peut mettre en ligne depuis le
222 * formulaire de tickets
223 *
224 * @return array $formats
225 *              Le tableau des extensions autorisées
226 */
227function ticket_documents_acceptes(){
228        include_spip('inc/config');
229        $formats = trim(lire_config('tickets/general/formats_documents_ticket'));
230        if (!$formats) return array('jpg','gif','png','txt');
231        if ($formats !== '*')
232                $formats = array_filter(preg_split(',[^a-zA-Z0-9/+_],', $formats));
233        else {
234                include_spip('base/typedoc');
235                $formats =  array_keys($GLOBALS['tables_mime']);
236        }
237        sort($formats);
238        return $formats;
239}
240?>
Note: See TracBrowser for help on using the repository browser.