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

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

tickets - on retire les 7 champs des formulaires

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