source: spip-zone/_plugins_/_stable_/openPublishing/balise/formulaire_article.php @ 22257

Last change on this file since 22257 was 22257, checked in by edd@…, 13 years ago

correction bug sur l'insertion des documents liés aux brèves en spip2.0 + correction bug sur l'insertion d'un logo lié à une brève

File size: 28.5 KB
Line 
1<?php
2
3/* Test de sécurité */
4if (!defined("_ECRIRE_INC_VERSION")) return;
5
6/*
7 * Les includes de spip utilisé dans cette balise
8 */
9
10include_spip('inc/ajouter_documents'); // pour l'ajout de documents
11include_spip('inc/barre');
12
13/*
14 * Les includes propre au plugin
15 */
16
17if (version_compare($GLOBALS['spip_version_code'],'1.9300','<'))
18        include_spip('inc/compat_op.php');
19
20include_spip('inc/op_functions'); // fonctions diverses
21
22spip_connect();
23charger_generer_url();
24
25function balise_FORMULAIRE_ARTICLE ($p) {
26
27        $p = calculer_balise_dynamique($p,'FORMULAIRE_ARTICLE',array());
28        return $p;
29}
30
31
32function balise_FORMULAIRE_ARTICLE_stat($args, $filtres) {
33
34        return ($args);
35}
36
37
38function balise_FORMULAIRE_ARTICLE_dyn() {
39
40/*
41 * récuperation des données indispensables
42 * le global $_FILES : indispensables pour récuperer les documents joints
43 * la configuration de Publication Ouverte
44 */
45
46global $_FILES, $_HTTP_POST_FILES;
47$config = lire_config('op');
48
49/*
50 * Premier test : si pas d'auteur "anonyme", on jette.
51 */
52
53if(!$config['IDAuteur']) return _T('opconfig:erreur_die');
54
55/*
56 * Si tentative d'attaquer un article déjà existant, on jette.
57 */
58
59if (isset($_GET['id_article'])) return _T('opconfig:erreur_protection');
60
61/*
62 *  récapitulatif des pipelines :
63 * ==============================
64 *
65 * (cf spip-contrib pour exemples d'utilisations et doc plus complete)
66 *
67 * OP_environnement : permet aux plugins d'ajouter des variables d'environnement
68 * OP_pre_validation : permet aux plugins d'effectuer des traitements avant la validation
69 * OP_validation : permet aux plugins d'effectuer une validation "alternative"
70 * OP_action : permet aux plugins d'effectuer les traitements sur les variables.
71 * OP_squelette : permet aux plugins de calculer leur formulaire.
72 *
73 *
74 * les clé de $variables correspondent aux "names" dans les formulaires HTML
75 * celles-ci sont classée en plusieurs catégories
76 * actions : les boutons input
77 * type : un type pour un champ : 'texte'
78 * champs_pri : les champs "principaux" du formulaire (ceux n'étant pas pris en compte par un formulaire auxilliaire
79 * champs_aux : les champs "auxilliaires" d'un formulaire auxilliaires
80 * flag_erreur : dans le process de pre_validation, si il est mis à true, alors il y a une erreur, retour au formulaire sans validation
81 * flag_valider : dans le process de validation, si il est mis à true, alors validation et evite les autres process de validation
82 */
83
84$variables = array(
85        'actions' => array(),
86        'type' => array(),
87        'champs_pri' => array(),
88        'champs_aux' => array(),
89        'flag_erreur' => false,
90        'flag_valider' => false
91        );
92
93/*
94 * Definition des variables
95 * Les variables pré-remplies sont des cas particuliés
96 */
97
98// definition des actions principales du formulaire
99$variables['actions']['previsualiser'] = '';
100$variables['actions']['valider'] = '';
101$variables['actions']['sup_logo'] = '';
102$variables['actions']['media'] = '';
103$variables['actions']['mots'] = '';
104$variables['actions']['abandonner'] = '';
105
106// definition des champs principaux du formulaire
107$variables['champs_pri']['id_article'] = '';
108$variables['champs_pri']['id_rubrique'] = '';
109$variables['champs_pri']['titre'] = '';
110$variables['champs_pri']['texte'] = '';
111$variables['champs_pri']['surtitre'] = '';
112$variables['champs_pri']['soustitre'] = '';
113$variables['champs_pri']['chapo'] = '';
114$variables['champs_pri']['descriptif'] = '';
115$variables['champs_pri']['ps'] = '';
116$variables['champs_pri']['nom_inscription'] = '';
117$variables['champs_pri']['mail_inscription'] = '';
118$variables['champs_pri']['mess_error'] = '';
119
120$variables['champs_aux']['url_site'] = _request('url_site');
121$variables['champs_aux']['doc'] = '';
122$variables['champs_aux']['type_doc'] = '';
123$variables['champs_aux']['titre_doc'] = '';
124$variables['champs_aux']['description_doc'] = '';
125$variables['champs_aux']['url_doc'] = _request('url_doc');
126$variables['champs_aux']['choix_agenda'] = '';
127$variables['champs_aux']['choix_AuteurSpip'] = '';
128$variables['champs_aux']['annee'] = '';
129$variables['champs_aux']['mois'] = '';
130$variables['champs_aux']['jour'] = '';
131$variables['champs_aux']['heure'] = '';
132if (!empty($_POST["motschoix"])) $variables['champs_aux']['motschoix'] = $_POST["motschoix"];
133
134// définition des types(permet de faire passer ces champs par entities_html
135$variables['type']['titre'] = 'texte';
136$variables['type']['nom_inscription'] = 'texte';
137$variables['type']['mail_inscription'] = 'texte';
138$variables['type']['ps'] = 'texte';
139$variables['type']['descriptif'] = 'texte';
140$variables['type']['soustitre'] = 'texte';
141$variables['type']['surtitre'] = 'texte';
142$variables['type']['chapo'] = 'texte';
143$variables['type']['titre_doc'] = 'texte';
144$variables['type']['description_doc'] = 'texte';
145
146/*
147 * création pipeline variables d'environnement
148 * ce pipeline permet aux plugins d'ajouter des actions et/ou des champs
149 */
150
151$variables = pipeline('OP_environnement', array(
152                        'args'=>array('pub_ouverte'=>'pub_ouverte'),
153                        'data'=>$variables
154                        ));
155
156/*
157 * Récuperation des valeurs pour toutes les actions
158 */
159
160foreach ($variables['actions'] as $key => $action) {
161                $variables['actions'][$key] = _request($key);
162}
163
164/*
165 * Pour chacuns des champs principaux ou auxilliaires, récupérer la valeur
166 * Sauf si il a déjà été traité auparavant p.e :
167 * - url_site : ne doit pas être traité par stripslashes
168 */
169
170foreach ($variables['champs_pri'] as $key => $champ) {
171                if (empty($champ)) $variables['champs_pri'][$key] = stripslashes(_request($key));
172}
173
174foreach ($variables['champs_aux'] as $key => $champ) {
175                if (empty($champ)) $variables['champs_aux'][$key] = stripslashes(_request($key));
176}
177
178// traitement particulier pour id_article et id_rubrique
179$variables['champs_pri']['id_article'] = intval($variables['champs_pri']['id_article']);
180$variables['champs_pri']['id_rubrique'] = intval($variables['champs_pri']['id_rubrique']);
181
182
183// traitement particulier pour un type de document automatique
184if ($config['DocIncAuto'] == 'yes') {
185        $variables['champs_aux']['type_doc'] = $config['DocAuto'];
186}
187
188// déclarations de variables supplémentaires (pour la fonction ajout_document)
189$documents_actifs = array();
190$lang = _request('var_lang');
191
192// remise à zero
193$variables['champs_pri']['formulaire_previsu'] = '';
194$variables['champs_pri']['bouton'] = '';
195$variables['champs_pri']['mess_error'] = '';
196
197
198// filtrage par html_entities de toutes les variables typées texte
199foreach ($variables['champs_pri'] as $key => $champ) {
200        if ((!empty($champ)) && ($variables['type'][$key] == 'texte'))
201                $variables['champs_pri'][$key] = entites_html($champ);
202}
203
204foreach ($variables['champs_aux'] as $key => $champ) {
205        if ((!empty($champ)) && ($variables['type'][$key] == 'texte'))
206                $variables['champs_aux'][$key] = entites_html($champ);
207}
208
209
210// Action Abandonner
211if (!empty($variables['actions']['abandonner'])) {
212
213        /*
214         * création pipeline abandon
215         * ce pipeline permet aux plugins d'ajouter traitement en cas d'abandon
216         * par exemple, supressions de la base de donnée des enregistrements temporaires
217         */
218
219        $variables = pipeline('OP_abandon', array(
220                                'args'=>array('pub_ouverte'=>'pub_ouverte'),
221                                'data'=>$variables
222                                ));
223
224        // suppression des enregistrements éventuellement créé dans la table spip_mot_article
225        if($variables['champs_pri']['id_article'])
226                sql_delete(
227                        array('spip_mots_articles'),
228                        array('id_article = '.sql_quote($variables['champs_pri']['id_article']).' LIMIT 1')
229                );
230       
231
232        // suppression du logo si il existe
233        if ($config['Logo'] == 'yes') {
234                $nom = 'arton' . $variables['champs_pri']['id_article'];
235                $formats_logos = Array('jpg' ,'png', 'gif', 'bmp', 'tif');
236       
237                foreach ($formats_logos as $format) {
238                        if (@file_exists($d = (_DIR_LOGOS . $nom . '.' . $format)))
239                                @unlink($d);
240                }
241        }
242
243        // construction de la page de retour
244        $url_retour = $variables['champs_aux']['url_site'] . $config['UrlAbandon'] ;
245        $message = '<META HTTP-EQUIV="refresh" content="'.$config['TempsAtt'].'; url='.$url_retour.'">' . $config['TextAbandon'];
246       
247        return $message;
248} // FIN action Abandonner
249
250
251
252
253/*
254 * Gestion de l'identifiant
255 * on demande un nouvel identifiant pour l'article si l'utilisateur clique sur l'un des boutons action
256 */
257
258$identifiant = false;
259
260foreach ($variables['actions'] as $key => $action) {
261        if (!empty($action)) $identifiant = true;
262}
263
264if ($identifiant == true) {
265        if (!$variables['champs_pri']['id_article']) { // premier passage
266                $variables['champs_pri']['id_article'] = op_request_new_id($config['IDAuteur']);
267        }
268}
269// FIN gestion identifiant
270
271
272
273
274// l'auteur demande la publication de son article
275// Action Abandonner
276if(!empty($variables['actions']['valider'])) {
277        // vérification avant mise en Base de donnée
278       
279        // récupération du statut par défaut de l'article
280        $statut = $config['StatutArt'];
281       
282        /*
283         * création pipeline pre_validation
284         * ce pipeline permet aux plugins d'effectuer des traitements avant la validation
285         * p.e : traitement typographique sur le texte
286         */
287
288        $variables = pipeline('OP_pre_validation', array(
289                                'args'=>array('pub_ouverte'=>'pub_ouverte'),
290                                'data'=>$variables
291                                ));
292
293        // vérifications et traitements des champs texte
294        // Anti spam (remplace les @ par un texte aléatoire)
295        if ($config['AntiSpam'] == 'yes') {
296                $variables['champs_pri']['texte'] = antispam($variables['champs_pri']['texte']);
297                $variables['champs_pri']['ps'] = antispam($variables['champs_pri']['ps']);
298                $variables['champs_pri']['chapo'] = antispam($variables['champs_pri']['chapo']);
299                $variables['champs_pri']['descriptif'] = antispam($variables['champs_pri']['descriptif']);
300                $variables['champs_pri']['mail_inscription'] = antispam($variables['champs_pri']['mail_inscription']);
301        }
302
303        // pas de majuscule dans le titre d'un article
304        if ($config['TitreMaj'] != 'yes') {
305                $variables['champs_pri']['titre'] = strtolower($variables['champs_pri']['titre']);
306        }
307
308        // vérification taille du titre : si x caractère ou moins : erreur
309        if (strlen($variables['champs_pri']['titre']) < $config['TitreMin']) {
310                $variables['flag_erreur'] = true;
311                $variables['champs_pri']['mess_error'] = _T('opconfig:erreur_min_len') . $config['TitreMin'] . _T('opconfig:caracteres');
312        }
313       
314        /*
315         * création pipeline validation
316         * ce pipeline permet aux plugins d'effectuer une validation "alternative"
317         * p.e : pour passer ailleur que par la création d'un article (création d'un evenement p.e)
318         * IMPORTANT ; ne surtout pas oublier de mettre le flag_valider à true, sinon on embraye sur les autres types de validation
319         * IMPORTANT : tester le flag_valider, il ce peut qu'un autre plugin le mette à true avant :)
320         * IMPORTANT : tester sa variable action .. sinon le process se déroulera si on clique sur un autre bouton
321         */
322
323        $variables = pipeline('OP_validation', array(
324                                'args'=>array('pub_ouverte'=>'pub_ouverte'),
325                                'data'=>$variables
326                                ));
327
328        // SI l'auteur demande une insertion dans l'agenda
329        // ET que le flag_erreur et toujours à false
330        // ET que le flag_valider et toujouts à false
331        if (($variables['champs_aux']['choix_agenda'] == "OK")
332                && (!$variables['flag_erreur'])
333                && (!$variables['flag_valider'])        ) {
334
335                $RubAgenda = $config['RubAgenda'];
336
337                // construction de la date complete
338                $tableau = split('[:]', $variables['champs_aux']['heure']);
339                $heure = $tableau[0];
340                $minute = $tableau[1];
341
342                $date_complete = date('Y-m-d H:i:s',mktime($heure, $minute, 0, $variables['champs_aux']['mois'], $variables['champs_aux']['jour'], $variables['champs_aux']['annee']));
343
344                // calcul extra, l'identification est gérée dans les brèves agenda
345                $extra=array(
346                        "OP_pseudo"=>$variables['champs_pri']['nom_inscription'],
347                        "OP_mail"=>$variables['champs_pri']['mail_inscription']
348                );
349                $extra=serialize($extra);
350
351                // Concatenation : le texte est composé du texte ET du chapo, descriptif, ps
352                $texte_agenda = $variables['champs_pri']['descriptif']
353                                . $variables['champs_pri']['chapo']
354                                . $variables['champs_pri']['texte']
355                                . $variables['champs_pri']['ps'];
356
357                sql_insertq(
358                        'spip_breves',
359                        array(
360                                "date_heure" => $date_complete,
361                                "titre" => $variables['champs_pri']['titre'],
362                                "texte" => $texte_agenda,
363                                "lien_url" => '',
364                                "statut" => $statut,
365                                "id_rubrique" => $RubAgenda,
366                                "extra" => $extra
367                        )
368                );
369
370                // on recupere l'id de la nouvelle breve
371                $ret = sql_fetch(sql_select(
372                        array('MAX(id_breve) as id_breve'),
373                        array('spip_breves')
374                ));
375
376                $id_breve = $ret['id_breve'];
377
378                // les mots clef liées le sont maintenant a la breve
379                $mots = sql_select (
380                        array('id_mot'),
381                        array('spip_mots_articles'),
382                        array('id_article = '.sql_quote($variables['champs_pri']['id_article']))
383                        );
384
385                while ($mot = sql_fetch($mots)) {
386                        sql_insertq(
387                                'spip_mots_breves',
388                                array(
389                                        'id_mot' => $mot['id_mot'],
390                                        'id_breve' => $id_breve
391                                )
392                        );
393                }
394
395                // les images liées le sont maintenant a la breve
396                // dés la sortie de spip 2.0, virer l'horrible compatibilité descendante
397                if (version_compare($GLOBALS['spip_version_code'], '1.9300', '<')) {
398                        $documents = sql_select (
399                                array('id_document'),
400                                array('spip_documents_articles'),
401                                array('id_article = '.sql_quote($variables['champs_pri']['id_article']))
402                                );
403                }
404                else { // version 2.0
405                        $documents = sql_select (
406                                array('id_document'),
407                                array('spip_documents_liens'),
408                                array('id_objet = '.sql_quote($variables['champs_pri']['id_article']).' AND objet = '.sql_quote("article"))
409                                );
410                }
411
412                while ($document = sql_fetch($documents)) {
413
414                        if (version_compare($GLOBALS['spip_version_code'], '1.9300', '<')) {
415                                sql_insertq(
416                                        'spip_documents_breves',
417                                        array(
418                                                'id_document' => $document['id_document'],
419                                                'id_breve' => $id_breve
420                                        )
421                                );
422                        }
423                        else {
424                                sql_insertq(
425                                        'spip_documents_liens',
426                                        array(
427                                                'id_document' => $document['id_document'],
428                                                'id_objet' => $id_breve,
429                                                'objet' => sql_quote("breve")
430                                        )
431                                );
432                        }
433                }
434
435                if (version_compare($GLOBALS['spip_version_code'], '1.9300', '<')) {
436                        sql_delete (
437                                array('spip_documents_articles'),
438                                array('id_article = '.sql_quote($variables['champs_pri']['id_article']))
439                        );
440                }
441                else {
442                        sql_delete (
443                                array('spip_documents_liens'),
444                                array('id_objet = '.sql_quote($variables['champs_pri']['id_article']).' AND objet = '.sql_quote("article"))
445                        );
446                }
447
448
449                // si il y a un logo attaché à l'article
450                $chercher_logo = charger_fonction('chercher_logo','inc');
451                $a = $chercher_logo($variables['champs_pri']['id_article'],'id_article');
452                if (count($a)) { // on le ratache à la breve
453                        @rename ($a[0], _DIR_LOGOS . 'breveon'.$id_breve. '.' . $a[3]);
454                }
455
456
457                sql_delete (
458                        array('spip_mots_articles'),
459                        array('id_article = '.sql_quote($variables['champs_pri']['id_article']))
460                );
461
462                sql_delete(
463                        array('spip_articles'),
464                        array('id_article = '.sql_quote($variables['champs_pri']['id_article']).' LIMIT 1')
465                );
466
467                $variables['flag_valider'] = true;
468        }
469
470        if (    (!$variables['flag_erreur']) // par défaut, c'est un article
471                && (!$variables['flag_valider']) ) {
472
473                // préparation de la mise en base de donnée
474
475                // on recupere le secteur et la langue associée
476                $row = sql_fetch(sql_select(
477                        array('lang, id_secteur'),
478                        array('spip_rubriques'),
479                        array('id_rubrique='.sql_quote($variables['champs_pri']['id_rubrique']))
480                        ));
481                $id_secteur = $row['id_secteur'];
482                $lang_rub = $row['lang'];
483       
484                // La langue a la creation : si les liens de traduction sont autorises
485                // dans les rubriques, on essaie avec la langue de l'auteur,
486                // ou a defaut celle de la rubrique
487                // Sinon c'est la langue de la rubrique qui est choisie + heritee
488                if ($GLOBALS['meta']['multi_articles'] == 'oui') {
489                        lang_select($GLOBALS['visiteur_session']['lang']);
490                        if (in_array($GLOBALS['spip_lang'],
491                        explode(',', $GLOBALS['meta']['langues_multilingue']))) {
492                                $lang = $GLOBALS['spip_lang'];
493                        }
494                }
495               
496                if (!$lang) {
497                        $lang = $lang_rub ? $lang_rub : $GLOBALS['meta']['langue_site'];
498                }
499
500                // calcul extra
501                $extra=array(
502                        "OP_pseudo"=>$variables['champs_pri']['nom_inscription'],
503                        "OP_mail"=>$variables['champs_pri']['mail_inscription']
504                );
505                $extra=serialize($extra);
506
507
508                // construction du tableau $champs pour les pipelines pre_edition et post_edition
509                $champs = array(
510                        'surtitre' => $variables['champs_pri']['surtitre'],
511                        'titre' => $variables['champs_pri']['titre'],
512                        'soustitre' => $variables['champs_pri']['soustitre'],
513                        'descriptif' => $variables['champs_pri']['descriptif'],
514                        'nom_site' => $variables['champs_pri']['ps'],
515                        'url_site' => '',
516                        'chapo' => $variables['champs_pri']['chapo'],
517                        'texte' => $variables['champs_pri']['texte'],
518                        'ps' => $variables['champs_pri']['ps'],
519                        'id_rubrique' => $variables['champs_pri']['id_rubrique'],
520                        'statut' => $statut,
521                        'extra' => $extra
522                );
523               
524                // calcul la date
525                $champs['date'] = date('Y-m-d H:i:s');
526
527                // Envoyer autres aux plugins
528                if ($config['Pipeline'] == 'yes') {
529                        $champs = pipeline('pre_edition',
530                                array(
531                                        'args' => array(
532                                                'table' => 'spip_articles',
533                                                'id_objet' => $variables['champs_pri']['id_article']
534                                        ),
535                                        'data' => $champs
536                                )
537                        );
538                }
539
540                sql_update(
541                        'spip_articles',
542                        array(  "titre" => sql_quote($champs['titre']),
543                                "id_rubrique" => sql_quote($champs['id_rubrique']),
544                                "surtitre" => sql_quote($champs['surtitre']),
545                                "soustitre" => sql_quote($champs['soustitre']),
546                                "chapo" => sql_quote($champs['chapo']),
547                                "descriptif" => sql_quote($champs['descriptif']),
548                                "ps" => sql_quote($champs['ps']),
549                                "texte" => sql_quote($champs['texte']),
550                                "statut" => sql_quote($champs['statut']),
551                                "lang" => sql_quote($lang),
552                                "id_secteur" => sql_quote($id_secteur),
553                                "date" => sql_quote($champs['date']),
554                                "date_redac" => sql_quote($champs['date']),
555                                "date_modif" => sql_quote($champs['date']),
556                                "extra" => sql_quote($champs['extra'])),
557                         array("id_article=".$variables['champs_pri']['id_article'])
558                );
559
560               
561                if ($config['AuteurSpip'] == 'yes') {
562                        // si auteur SPIP, attribuer l'article à l'auteur et non à "anonyme"
563                        if ($variables['champs_aux']['choix_AuteurSpip'] != 'OK') {
564                                if (empty($GLOBALS['auteur_session'])) {
565                                        sql_insertq(
566                                                'spip_auteurs_articles',
567                                                array(
568                                                        'id_auteur' => $config['IDAuteur'],
569                                                        'id_article' => $variables['champs_pri']['id_article'])
570                                        );
571                                }
572                                else {
573                                        sql_insertq(
574                                                'spip_auteurs_articles',
575                                                array(
576                                                        'id_auteur' => $GLOBALS['auteur_session']['id_auteur'],
577                                                        'id_article' => $variables['champs_pri']['id_article'])
578                                        );
579                                }
580                        }
581                        else {
582                                sql_insertq(
583                                        'spip_auteurs_articles',
584                                        array(
585                                                'id_auteur' => $config['IDAuteur'],
586                                                'id_article' => $variables['champs_pri']['id_article'])
587                                );
588                        }
589                }
590                else {
591                        sql_insertq(
592                                'spip_auteurs_articles',
593                                array(
594                                        'id_auteur' => $config['IDAuteur'],
595                                        'id_article' => $variables['champs_pri']['id_article'])
596                        );
597                }
598
599                // Envoyer autres aux plugins
600                if ($config['Pipeline'] == 'yes') {
601                        pipeline('post_edition',
602                                array(
603                                        'args' => array(
604                                                'table' => 'spip_articles',
605                                                'id_objet' => $variables['champs_pri']['id_article']
606                                        ),
607                                        'data' => $champs
608                                )
609                        );
610                }
611               
612                // notification
613                if (($config['Notification'] == "yes") && (!$variables['flag_erreur'])) {
614                        include_spip('inc/mail');
615                        include_spip('inc/notifications');
616
617                        if (($config['StatutArt'] == "prop") ||  ($config['StatutArt'] == "redac")) {
618                                notifier_proposition_article($variables['champs_pri']['id_article']);
619                        }
620                        if ($config['StatutArt'] == "valid") {
621                                notifier_publication_article($variables['champs_pri']['id_article']);
622                        }
623                }
624        }
625       
626        if (!$variables['flag_erreur']) { // si pas d'erreur : on sort :)
627                // construction de la page de retour
628                $url_retour = $variables['champs_aux']['url_site'] . $config['UrlValidation'];
629                $message = '<META HTTP-EQUIV="refresh" content="'.$config['TempsAtt'].'; url='.$url_retour.'">' . $config['TextValidation'];
630                $message = $message . $retour .'<br />';
631                return $message;
632        }
633}// FIN Action valider
634
635
636// si l'auteur ne valide pas ou entre pour la première fois, ou bien on effectue une action
637
638
639
640// statut de l'article : en préparation
641$statut="prepa";
642
643
644/*
645 * création pipeline action
646 * ce pipeline permet aux plugins d'effectuer les traitements sur les variables.
647 * IMPORTANT : toujours commencer par un test sur sa variable action !
648 * pourra contenir manipulation de la base de donnée, etc ..
649 */
650
651$variables = pipeline('OP_action', array(
652                        'args'=>array('pub_ouverte'=>'pub_ouverte'),
653                        'data'=>$variables
654                        ));
655
656
657if ($config['AuteurSpip'] == 'yes') { // si la configuration autorise les auteurs spip
658        // l'auteur est identifié et a coché la case Auteur SPIP
659        if ($variables['champs_aux']['choix_AuteurSpip'] != 'OK') {
660                $variables['champs_pri']['nom_inscription'] = $GLOBALS['auteur_session']['nom'];
661                $variables['champs_pri']['mail_inscription'] = $GLOBALS['auteur_session']['email'];
662        }
663}
664
665// l'auteur demande la suppression de son logo
666if (!empty($variables['actions']['sup_logo'])) {
667        $nom = 'arton' . $variables['champs_pri']['id_article'];
668        $formats_logos = Array('jpg' ,'png', 'gif', 'bmp', 'tif');
669       
670        foreach ($formats_logos as $format) {
671                if (@file_exists($d = (_DIR_LOGOS . $nom . '.' . $format)))
672                        @unlink($d);
673        }
674}       
675
676// si l'auteur demande la prévisualisation
677if(!empty($variables['actions']['previsualiser'])) {
678
679        // vérification taille du titre : si x caractère ou moins : erreur
680        if (strlen($variables['champs_pri']['titre']) < $config['TitreMin']) {
681                $variables['flag_erreur'] = true;
682                $variables['champs_pri']['mess_error'] = _T('opconfig:erreur_min_len') . $config['TitreMin'] . _T('opconfig:caracteres');
683        }
684
685       
686        // on rempli le formulaire de prévisualisation
687        $variables['champs_pri']['formulaire_article_previsu'] = 
688                inclure_balise_dynamique(
689                        array('formulaires/formulaire_article_previsu', 0,
690                                array(
691                                        'date_redac' => $date_redac,
692                                        'surtitre' => interdire_scripts(typo($variables['champs_pri']['surtitre'])),
693                                        'soustitre' => interdire_scripts(typo($variables['champs_pri']['soustitre'])),
694                                        'chapo' => propre($variables['champs_pri']['chapo']),
695                                        'descriptif' => propre($variables['champs_pri']['descriptif']),
696                                        'ps' => propre($variables['champs_pri']['ps']),
697                                        'titre' => interdire_scripts(typo($variables['champs_pri']['titre'])),
698                                        'texte' => propre($variables['champs_pri']['texte']),
699                                        'nom_inscription' => interdire_scripts(typo($variables['champs_pri']['nom_inscription'])),
700                                        'mail_inscription' => interdire_scripts(typo($variables['champs_pri']['mail_inscription']))
701                                )
702                        ), false);
703}
704
705// si l'auteur demande des mots-clefs
706if(!empty($variables['actions']['mots'])) {
707        if (!empty($variables['champs_aux']['motschoix'])) {
708                foreach($variables['champs_aux']['motschoix'] as $mot){
709                        //protection contre mots-clefs vide
710                        $row = sql_fetch(sql_select(
711                                array('titre'),
712                                array('spip_mots'),
713                                array('id_mot='.$mot.' LIMIT 1'))
714                                );
715
716                        $titremot = $row['titre'];
717
718                        if (!(strcmp($titremot,"")==0)) {
719                                if ($mot) {
720                                        // on lie l'article aux mots clefs choisis
721                                        sql_insertq(
722                                                'spip_mots_articles',
723                                                array(
724                                                        'id_mot' => $mot,
725                                                        'id_article' => $variables['champs_pri']['id_article'])
726                                        );
727                                }
728                        }
729                }
730        }
731}
732       
733// si l'auteur ajoute un documents
734if(!empty($variables['actions']['media'])) {
735
736        // ce n'est pas un document distant
737        if (empty($variables['champs_aux']['url_doc'])) {
738                // compatibilité php < 4.1
739                if (!$_FILES) $_FILES = $GLOBALS['HTTP_POST_FILES'];
740                       
741                // récupération des variables
742                $fichier = $_FILES['doc']['name'];
743                $size = $_FILES['doc']['size'];
744                $tmp = $_FILES['doc']['tmp_name'];
745                $type = $_FILES['doc']['type'];
746                $error = $_FILES['doc']['error'];
747        }
748
749        // Intercepter une erreur a l'envoi
750        if (check_upload_error($error)) {
751                $variables['champs_pri']['mess_error'] = _T('opconfig:erreur_upload');
752        }
753        else {
754
755                if (empty($variables['champs_aux']['url_doc'])) {
756                        $mode = $variables['champs_aux']['type_doc'];
757                }
758                else {
759                        $tmp = $variables['champs_aux']['url_doc'];// fichier
760                        $mode = 'distant';
761                }
762
763                // verification si extention OK
764                $tableau = split('[.]', $fichier);
765                $type_ext = $tableau[1];
766       
767                // renomme les extensions
768                if (strcmp($type_ext,"jpeg")==0) $type_ext = "jpg";
769                // attention a la case : tout en minuscule
770                $type_ext = strtolower($type_ext);
771               
772                $return = sql_fetch(sql_select(
773                        array('extension'),
774                        array('spip_types_documents'),
775                        array('extension = '.sql_quote($type_ext))
776                        ));
777
778                if ($return['extension'] == $type_ext) {
779
780                        if ($variables['champs_aux']['type_doc'] == 'logo') { // reprise du code iconifier ... action/iconifer.php
781                                include_spip('inc/iconifier'); // pour les logos
782
783                                // si le logo existe déjà : refus
784                                if (!@file_exists( _DIR_LOGOS . 'arton'.$variables['champs_pri']['id_article']. '.' . $type_ext)) {
785                                        // placer le document arton$article dans IMG
786                                        $f =_DIR_LOGOS . 'arton'.$variables['champs_pri']['id_article']. '.tmp'; // nom temporaire
787                                        $source = deplacer_fichier_upload($tmp, $f); // on deplace le fichier temp ds le rep logo
788                                        $size = getimagesize($f);
789                                        $formats_logos = Array('jpg' ,'png', 'gif', 'bmp', 'tif');
790                                        if (in_array($type_ext,$formats_logos)) {
791                                                $poids = filesize($f);
792       
793                                                if (_LOGO_MAX_SIZE > 0
794                                                AND $poids > _LOGO_MAX_SIZE*1024) {
795                                                        @unlink ($f);
796                                                        $variables['champs_pri']['mess_error'] = _T('info_logo_max_poids',
797                                                                array('maxi' => taille_en_octets(_LOGO_MAX_SIZE*1024),
798                                                                'actuel' => taille_en_octets($poids)));
799                                                }
800                       
801                                                if (_LOGO_MAX_WIDTH * _LOGO_MAX_HEIGHT
802                                                AND ($size[0] > _LOGO_MAX_WIDTH
803                                                OR $size[1] > _LOGO_MAX_HEIGHT)) {
804                                                        @unlink ($f);
805                                                        //ERREUR
806                                                        $variables['champs_pri']['mess_error'] = _T('info_logo_max_taille',
807                                                                        array(
808                                                                        'maxi' =>
809                                                                                _T('info_largeur_vignette',
810                                                                                        array('largeur_vignette' => _LOGO_MAX_WIDTH,
811                                                                                        'hauteur_vignette' => _LOGO_MAX_HEIGHT)),
812                                                                        'actuel' =>
813                                                                                _T('info_largeur_vignette',
814                                                                                        array('largeur_vignette' => $size[0],
815                                                                                        'hauteur_vignette' => $size[1]))
816                                                                ));
817                                                }
818                                                @rename ($f, _DIR_LOGOS . 'arton'.$variables['champs_pri']['id_article']. '.' . $type_ext);
819                                        }
820                                        else {
821                                                @unlink ($f);
822       
823                                                // ERREUR
824                                                $variables['champs_pri']['mess_error'] = _T('info_logo_format_interdit',
825                                                                        array('formats' => join(', ', $formats_logos)));
826                                        }
827                                }
828                                else  {
829                                        $variables['champs_pri']['mess_error'] = _T('opconfig:logo_existe_deja');
830                                }
831                        }
832                        else {
833
834                                $ajouter_document = charger_fonction('ajouter_documents','inc');
835                                $ajouter_document($tmp,$fichier,"article",$variables['champs_pri']['id_article'],$mode,$id_document,$documents_actifs);
836
837                                // récupération de l'id
838                                $ret = sql_fetch(sql_select(
839                                        array('MAX(id_document) as id_document'),
840                                        array('spip_documents')
841                                ));
842               
843                                $id_document = $ret['id_document'];
844
845                                // création champs dans la table documents
846                                sql_update(
847                                        'spip_documents',
848                                        array(
849                                                'titre' => sql_quote($variables['champs_aux']['titre_doc']),
850                                                'descriptif' => sql_quote($variables['champs_aux']['description_doc'])
851                                        ),
852                                        array('id_document = '.$id_document)
853                                );
854                        }
855                }
856                else { // sinon, erreur
857                        $variables['champs_pri']['mess_error'] = _T('opconfig:erreur_extension');
858                }
859        }
860}
861
862// cas d'un nouvel article ou re-affichage du formulaire
863if ($config['Agenda'] == 'yes') {
864        // Gestion de l'agenda
865        $variables['champs_pri']['formulaire_agenda'] = 
866                inclure_balise_dynamique(
867                        array('formulaires/formulaire_agenda',  0,
868                                array(
869                                        'annee' => $variables['champs_aux']['annee'],
870                                        'mois' => $variables['champs_aux']['mois'],
871                                        'jour' => $variables['champs_aux']['jour'],
872                                        'heure' => $variables['champs_aux']['heure'],
873                                        'choix_agenda' => $variables['champs_aux']['choix_agenda']
874                                )
875                        ), false);
876}
877
878// Gestion des documents
879if ($config['DocInc'] == 'yes') {
880
881        $variables['champs_pri']['formulaire_documents'] =
882                inclure_balise_dynamique(
883                        array('formulaires/formulaire_documents', 0,
884                                array(
885                                        'bouton' => 'Ajouter l\'image ou le document'
886                                )
887                        ), false);
888}
889
890// Gestion des mot-clefs
891if ($config['MotCle'] == 'yes') {
892
893        $variables['champs_pri']['formulaire_motclefs'] =
894                inclure_balise_dynamique(
895                        array('formulaires/formulaire_motclefs', 0,
896                                array(
897                                        'id_article' => $variables['champs_pri']['id_article'] ,
898                                        'bouton' => "Ajouter les nouveaux mot-clefs"
899                                )
900                        ), false);
901}
902
903if ($config['AuteurSpip'] == 'yes') {
904
905        // si l'utilisateur est loggé
906        if ($GLOBALS['auteur_session']) {
907               
908                $variables['champs_pri']['formulaire_auteurspip'] =
909                        inclure_balise_dynamique(
910                                array('formulaires/formulaire_auteurspip', 0,
911                                        array(
912                                                'choix_AuteurSpip' => $variables['champs_aux']['choix_AuteurSpip']
913                                        )
914                                ), false);
915        }
916}
917
918
919
920// le bouton valider
921$variables['champs_pri']['bouton'] = _T('form_prop_confirmer_envoi');
922
923// Envoi de toutes les variables principales au formulaire principale
924return array('formulaires/formulaire_article', 0, $variables['champs_pri']);
925
926}
927
928?>
Note: See TracBrowser for help on using the repository browser.