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

Last change on this file since 119815 was 119815, checked in by chankalan@…, 5 months ago

prefixer les fonctions nospam_ + necessite nospam

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