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

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

tickets - habiliter "créer et associer" un ticket.

Permet d'appeler "créer et associer un ticket" depuis
la page d'un article, par exemple, et revenir sur la
page de cet article une fois le ticket créé (le ticket
ayant été associé à cet article).

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