source: plugins_spip/import_video/emballe_medias/formulaires/em_ajouter_media.php @ 2801

Last change on this file since 2801 was 2801, checked in by kent1, 10 years ago

Les plugins up to date

File size: 17.7 KB
Line 
1<?php
2
3function formulaires_em_ajouter_media_charger_dist($id_article='new', $id_rubrique=0, $lier_trad=0, $type='normal'){
4        global $visiteur_session;
5        $valeurs = array();
6        $id_auteur = $visiteur_session['id_auteur'];
7       
8        // charger une seule fois la config
9        $config = lire_config('emballe_medias/statuts/');
10
11        if(!$id_auteur){
12                $valeurs['editable'] = false;
13                $valeurs['message_erreur'] = _T('emballe_medias:droits_insuffisants').'<br />'._T('emballe_medias:connection_obligatoire');
14        }
15
16        else{
17                $auteur_statut = $visiteur_session['statut'];
18
19                // on cherche un article deja existant seulement si la configuration le permet
20                if ($config['chercher_article']=='oui') {
21                        if(!intval($id_article)){
22                                $id_article = sql_getfetsel("art.id_article","spip_articles AS art LEFT JOIN spip_auteurs_articles AS aut ON (art.id_article=aut.id_article)","art.statut IN ('prop','prepa') AND art.em_type = '$type' AND aut.id_auteur = $id_auteur");
23                                if(!intval($id_article)){
24                                        $id_article = 'new';
25                                }
26                        }
27                }
28
29                include_spip('inc/autoriser');
30                $auteur_info = $config['statuts'];
31
32                // On vérifie si l'auteur connecté a les droits nécessaires pour créer l'article
33                if(is_array($auteur_info)){
34                        if(autoriser('em_publier')){
35                                $valeurs['editable'] = true;
36                        }
37                        else{
38                                $valeurs['message_erreur'] = _T('emballe_medias:droits_insuffisants');
39                                $valeurs['editable'] = false;
40                        }
41                }
42                else{
43                        $valeurs['editable'] = false;
44                        $valeurs['message_erreur'] = _T('emballe_medias:configurer_auteurs');
45                }
46                if($valeurs['editable'] && ($id_article != 'new') && (!_request('valider'))){
47
48                        // Si l'article existe déjà, on récupÚre ses anciennes valeurs
49                        $valeurs = sql_fetsel("*","spip_articles","id_article=$id_article");
50
51                        // Le textarea pour le texte dans le public est dénommé textearticle
52                        $valeurs['textearticle'] = $valeurs['texte'];
53
54                        // et la valeur pour rubrique = rubrique
55                        $valeurs['rubrique'] = $valeurs['id_rubrique'];
56
57                        $valeurs['id'] = $id_article;
58
59                        // on est dans une trad => on affiche le formulaire de langue
60                        if($lier_trad != 0){
61                                $valeurs['titre'] .= ' '._T('emballe_medias:new_traduction');
62                                $valeurs['id_trad'] = $lier_trad;
63                        }
64
65                        $valeurs['selecteur_langue'] = true;
66
67                        // L'article est publiable uniquement si un document associé existe
68                        $validable = sql_getfetsel("doc_objet.id_document","spip_documents_liens AS doc_objet LEFT JOIN spip_documents as doc ON (doc.id_document=doc_objet.id_document)","doc_objet.id_objet = '$id_article' AND doc_objet.objet='article'");
69                        spip_log("EM : id_document = $validable","emballe_medias");
70
71                        if (intval($validable)) {
72                                $valeurs['selecteur_statut'] = $config['statut_visible'];
73                                spip_log("EM : selecteur_statut = ".$config['statut_visible'],"emballe_medias");
74                        }
75
76                        /*
77                         * On récupÚre les mots qui sont peut être associés
78                         * On les place dans l'array $valeurs de la sorte $valeurs['groupe_#ID_GROUPE']
79                         */
80                        $groupes_possibles = array_merge(lire_config('emballe_medias/texte/mots_obligatoires',array()),lire_config('emballe_medias/texte/mots_facultatifs',array()));
81                        foreach($groupes_possibles as $groupe){
82                                $valeurs['groupe_'.$groupe]     = sql_fetsel('mot.id_mot','spip_mots as mot left join spip_mots_articles as mots_articles ON (mot.id_mot=mots_articles.id_mot)','mots_articles.id_article='.intval($id_article).' AND mot.id_groupe='.intval($groupe));
83                        }
84
85                        // Pipeline pour compléter les valeurs déjà récupérées
86                        $post_valeurs = pipeline('em_ajout_media_post_charger',
87                                array(
88                                        'args' => array(
89                                                'id_article' => $id_article,
90                                                'mode' => 'chargement',
91                                                'valeurs' => $valeurs
92                                        ),
93                                        'data' => array()
94                                )
95                        );
96                        if(is_array($post_valeurs)){
97                                $valeurs = array_merge($valeurs,$post_valeurs);
98                        }
99                        if($valeurs['statut'] != 'publie'){
100                                if(($config['statut_article'] == 'prop') && ($valeurs['statut'] == 'prop')){
101                                        $valeurs['message_ok'] = _T('emballe_medias:message_article_prop_prop');
102                                }
103                                else if (($config['statut_article'] == 'prop') && ($valeurs['statut'] == 'prepa')){
104                                        $valeurs['message_ok'] = _T('emballe_medias:message_article_prop_prepa');
105                                }
106                                else if(($config['statut_article'] == 'publie') && ($valeurs['statut'] == 'prepa')){
107                                        $valeurs['message_ok'] = _T('emballe_medias:message_article_publie_prepa');
108                                }
109                        }
110                        spip_log($valeurs['message_ok']);
111                }
112                if(($valeurs['editable'] == true) && (_request('valider'))){
113                        spip_log("EM : On récupÚre les valeurs des inputs pour les recharger dans le formulaire");
114                        $valeurs = emballe_medias_recuperer_champs();
115                        $valeurs['titre'] = _request('titre');
116                        $valeurs['id_rubrique'] = _request('rubrique');
117                        $valeurs['selecteur_langue'] = true;
118                        $valeurs['id_article'] = $id_article;
119                        $groupes_possibles = array_merge(lire_config('emballe_medias/texte/mots_obligatoires',array()),lire_config('emballe_medias/texte/mots_facultatifs',array()));
120                        foreach($groupes_possibles as $groupe){
121                                $valeurs['groupe_'.$groupe]     = sql_fetsel('mot.id_mot','spip_mots as mot left join spip_mots_articles as mots_articles ON (mot.id_mot=mots_articles.id_mot)','mots_articles.id_article='.intval($id_article).' AND mot.id_groupe='.intval($groupe));
122                        }
123                        $post_valeurs = pipeline('em_ajout_media_post_charger',
124                                array(
125                                        'args' => array(
126                                                'id_article' => $id_article,
127                                                'mode' => 'rechargement',
128                                                'valeurs' => $valeurs
129                                        ),
130                                        'data' => array()
131                                )
132                        );
133                        // L'article est publiable uniquement si un document associé existe
134                        $validable = sql_getfetsel("doc_objet.id_document","spip_documents_liens AS doc_objet LEFT JOIN spip_documents as doc ON (doc.id_document=doc_objet.id_document)","doc_objet.id_objet = '$id_article' AND doc_objet.objet='article'");
135
136                        if (intval($validable)) {
137                                $valeurs['selecteur_statut'] = $config['statut_visible'];
138                                spip_log("EM : selecteur_statut = ".$config['statut_visible'],"emballe_medias");
139                                $valeurs['statut'] = _request('statut') ? _request('statut') : 'prepa';
140                        }
141                        if(is_array($post_valeurs)){
142                                $valeurs = array_merge($valeurs,$post_valeurs);
143                        }
144                }
145                else if ($valeurs['editable'] == true){
146                        $valeurs['formulaire_langue'] = true;
147                }
148                $valeurs['em_type'] = $type;
149        }
150        if(_request('page') == 'inc-emballe_media_form'){
151                $valeurs['action'] = str_replace('&amp;','&',_request('redirect'));
152        }
153       
154        return $valeurs;
155}
156
157function formulaires_em_ajouter_media_verifier_dist($id_article='new',$id_rubrique=0, $lier_trad=0,$type='normal'){
158        //initialise le tableau des erreurs
159        $erreurs = array();
160
161    //initilise le tableau de valeurs $champs => $valeur
162    $valeurs = array();
163
164        //récupere la liste des champs possible
165        $champs = emballe_medias_champs_textes();
166
167        $longueur_titre = 3;
168        $longueur_texte = lire_config('emballe_medias/texte/textearticle_taille', 30);
169
170        //gere la correspondance champs -> _request(champs)
171        foreach($champs as $clef => $valeur) {
172                $valeurs[$valeur] = _request($valeur);
173        }
174
175        //verifier les champs obligatoires
176        foreach ($valeurs as $champs => $valeur) {
177                if ((lire_config('emballe_medias/texte/'.$champs.'_obligatoire') == 'on') && empty($valeur)) {
178                        spip_log("$champs : ".lire_config('emballe_medias/texte/'.$champs.'_obligatoire'));
179                        $erreurs[$champs] = _T('emballe_medias:champ_obligatoire');
180                }
181                else if(($length = lire_config('emballe_medias/texte/'.$champs.'_taille') > 0) && (strlen($valeur) < $length)){
182                        spip_log("$champs : ".lire_config('emballe_medias/texte/'.$champs.'_taille'));
183                        $erreurs[$champs] = _T('emballe_medias:champs_trop_court',array('nombre'=>$length));
184                }
185                spip_log("EM : $champs - ".$erreurs[$champs]);
186        }
187        if(!_request('titre')){
188                $erreurs['titre'] = _T('emballe_medias:titre_obligatoire');
189        }
190        else if(strlen(_request('titre'))<$longueur_titre){
191                $erreurs['titre']= _T('emballe_medias:titre_trop_court',array('nombre'=>$longueur_titre));
192        }
193
194        /*
195         * On teste si les groupes obligatoires sont ok
196         */
197        if(is_array(lire_config('emballe_medias/texte/mots_obligatoires'))){
198                foreach(lire_config('emballe_medias/texte/mots_obligatoires') as $groupe_obligatoire){
199                        $mots_groupe = _request('groupe_'.$groupe_obligatoire);
200                        if(empty($mots_groupe)){
201                                $erreurs['groupe_'.$groupe_obligatoire] = _T('emballe_medias:champ_obligatoire');
202                        }
203                }
204        }
205        $erreurs = pipeline('em_ajout_media_post_verifier',
206                                array(
207                                        'args' => array(
208                                                'erreurs' => $erreurs,
209                                                'valeurs' => $valeurs
210                                        ),
211                                        'data' => $erreurs
212                                )
213                        );
214
215
216        if (count($erreurs)) $erreurs['message_erreur'] = _T('emballe_medias:verifier_formulaire');
217        return $erreurs;
218}
219
220// http://doc.spip.org/@inc_editer_article_dist
221function formulaires_em_ajouter_media_traiter_dist($id_article='new',$id_rubrique=0, $lier_trad=0,$type='normal'){
222        include_spip('base/abstract_sql');
223        $invalider = false;
224        $config = lire_config('emballe_medias/statuts/');
225       
226        $id_auteur = $GLOBALS['visiteur_session']['id_auteur'];
227
228        // si dans le charger() on avait trouve un id_article deja exisant, il se trouve
229        // dans le parametre em_id_article
230        if ($art = _request('em_id_article')) {
231                $id_article = $art;
232        }
233
234    //initialise le tableau de valeurs $champs => $valeur
235    $valeurs = array();
236
237        //récupere la liste des champs possible
238        $champs = emballe_medias_champs_textes();
239
240        //gere la correspondance champs -> _request(champs)
241        foreach($champs as $clef => $valeur) {
242                $valeurs[$valeur] = _request($valeur);
243        }
244
245        $valeurs['titre'] = _request('titre');
246        $valeurs['texte'] = $valeurs['textearticle'];
247        unset($valeurs['textearticle']);
248
249        $valeurs['id_rubrique'] = _request('rubrique') ? _request('rubrique') : $id_rubrique;
250        unset($valeurs['rubrique']);
251
252        $valeurs['statut'] = _request('statut');
253
254        // Si id_rubrique vaut 0 ou n'est pas definie, creer l'article
255        // dans la premiere rubrique racine
256        if (!$valeurs['id_rubrique'] OR ($id_rubrique == 0) OR !intval($id_rubrique)) {
257                $row = sql_fetsel("id_rubrique, id_secteur, lang", "spip_rubriques", "id_parent=0",'', '0+titre,titre', "1");
258                $id_rubrique = $row['id_rubrique'];
259        } else $row = sql_fetsel("lang, id_secteur", "spip_rubriques", "id_rubrique=$id_rubrique");
260
261        $id_secteur = $row['id_secteur'];
262        $lang_rub = $row['lang'];
263
264        $lang = _request('choix_langue');
265
266        if($lang){
267                $choisie = 'oui';
268        }
269        // La langue a la creation : si les liens de traduction sont autorises
270        // dans les rubriques, on essaie avec la langue de l'auteur,
271        // ou a defaut celle de la rubrique
272        // Sinon c'est la langue de la rubrique qui est choisie + heritee
273        else{
274                if ($GLOBALS['meta']['multi_articles'] == 'oui') {
275                        lang_select($GLOBALS['visiteur_session']['lang']);
276                        if (in_array($GLOBALS['spip_lang'],
277                        explode(',', $GLOBALS['meta']['langues_multilingue']))) {
278                                $lang = $GLOBALS['spip_lang'];
279                                $choisie = 'oui';
280                        }
281                }
282                if (!$lang) {
283                        $choisie = 'non';
284                        $lang = $lang_rub ? $lang_rub : $GLOBALS['meta']['langue_site'];
285                }
286        }
287
288        if(lire_config('emballe_medias/types/gerer_types') == 'on'){
289                $valeurs['em_type'] = $type;
290        }else{
291                $valeurs['em_type'] = 'normal';
292        }
293
294        $valeurs['lang'] = $lang;
295        $valeurs['langue_choisie'] = $choisie;
296
297        $valeurs['accepter_forum'] = substr($GLOBALS['meta']['forums_publics'],0,3);
298
299        // Dans le cas de la création d'un nouvel article
300        // NB trouver la fonction d'insertion d'articles plutot
301        if($id_article == 'new'){
302                include_spip('action/editer_article');
303               
304                $rubriques = lire_config('emballe_medias/texte/rubrique',array(0=>1));
305                $id_parent = lire_config('emballe_medias/texte/rubrique_defaut', $rubriques[0]);
306                $statut = $statut ? $statut : lire_config('emballe_medias/statuts/statut_article_defaut');
307                $id_article = insert_article($id_parent);
308
309                $message_ok = _T('emballe_medias:fin_article_cree');
310                $editable = false;
311                $invalider = true;
312                $valeurs['formulaire_documents'] = true;
313
314                /*
315                 * On traite les mots clés obligatoires ou pas
316                 * Les mots ne devraient pas être dans $valeurs
317                 */
318                $groupes_possibles = array_merge(lire_config('emballe_medias/texte/mots_obligatoires',array()),lire_config('emballe_medias/texte/mots_facultatifs',array()));
319                /*
320                 * On traite chaque groupe séparément
321                 * L'article est nouveau donc on ne fait pas de vérification sur les mots
322                 */
323                foreach($groupes_possibles as $groupe){
324                        /*
325                         * Si le select est multiple
326                         */
327                        if(is_array(_request('groupe_'.$groupe))){
328                                foreach(_request('groupe_'.$groupe) as $cle => $mot){
329                                        sql_insertq('spip_mots_articles', array('id_mot' =>$mot,  'id_article' => $id_article));
330                                }
331                        }
332                        /*
333                         * Si le select est simple
334                         */
335                        else{
336                                sql_insertq('spip_mots_articles', array('id_mot' =>_request('groupe_'.$groupe),  'id_article' => $id_article));
337                        }
338                        pipeline('post_edition',
339                                array(
340                                        'args' => array(
341                                                'operation' => 'editer_mots',
342                                                'table' => 'spip_articles',
343                                                'id_objet' => $id_article
344                                        ),
345                                        'data' => null
346                                )
347                        );
348                }
349        }
350        // Dans le cas de la traduction d'un article
351        // NB : Trouver la fonction de traduction d'un article plutot
352        else if($lier_trad != 0){
353                $valeurs['id_trad'] = $lier_trad;
354                $id_article = sql_insertq("spip_articles", $valeurs);
355                        // controler si le serveur n'a pas renvoye une erreur
356                if ($id_article > 0)
357                        sql_insertq('spip_auteurs_articles', array('id_auteur' => $GLOBALS['visiteur_session']['id_auteur'], 'id_article' => $id_article));
358
359                $invalider = true;
360                $message_ok = _T('emballe_medias:fin_article_traduire');
361        }
362        // Cas de la modification d'un article
363        else{
364                // Méthode reprise depuis ecrire/action/editer_article.php
365                $err = '';
366
367                /*
368                 * On traite les mots clés obligatoires ou pas
369                 * Les mots ne devraient pas être dans $valeurs
370                 */
371                include_spip('inc/editer_mots');
372                $groupes_possibles = array_merge(lire_config('emballe_medias/texte/mots_obligatoires',array()),lire_config('emballe_medias/texte/mots_facultatifs',array()));
373
374                /*
375                 * On traite chaque groupe séparément
376                 * L'article n'est pas nouveau, donc il se peut qu'il faille supprimer les anciens mots
377                 * On fait une vérifications sur chaque groupe
378                 */
379                foreach($groupes_possibles as $groupe){
380                        $mots = sql_fetsel('mot.id_mot','spip_mots as mot left join spip_mots_articles as articles ON mot.id_mot=articles.id_mot','id_groupe='.intval($groupe).' AND id_article='.intval($id_article));
381                        /*
382                         * Si le select est multiple
383                         */
384                        if(is_array(_request('groupe_'.$groupe))){
385                                foreach(_request('groupe_'.$groupe) as $cle => $mot){
386                                        /*
387                                         * Si le mot est déja dans les mots, on le supprime juste
388                                         * de l'array des mots originaux
389                                         */
390                                        if(in_array($mot, $mots)){
391                                                unset($mots[$cle]);
392                                        }
393                                        else{
394                                                sql_insertq('spip_mots_articles', array('id_mot' =>$mot,  'id_article' => $id_article));
395                                        }
396                                }
397                        }
398                        /*
399                         * Si le select est simple
400                         */
401                        else{
402                                if(in_array(_request('groupe_'.$groupe), $mots)){
403                                        unset($mots);
404                                }
405                                else{
406                                        sql_insertq('spip_mots_articles', array('id_mot' =>_request('groupe_'.$groupe),  'id_article' => $id_article));
407                                }
408                        }
409                        /*
410                         * S'il reste quelque chose dans les mots d'origine, on les délie d l'article
411                         */
412                        if(count($mots)>0){
413                                spip_log('on supprime des mots','emballe_media');
414                                spip_log($mots);
415                                sql_delete('spip_mots_articles','id_article='.intval($id_article).' AND id_mot IN ('.implode(',',$mots).')');
416                        }
417                }
418                include_spip('inc/modifier');
419                revision_article($id_article, $valeurs);
420
421                // Modification de statut, changement de rubrique ?
422                include_spip('action/editer_article');
423                $c = array('date' => $valeurs['date'],'statut' => $valeurs['statut'], 'id_parent' => $valeurs['id_rubrique']);
424                $err .= instituer_article($id_article, $c);
425
426                $invalider = false; // L'invalidation a déja été faite dans instituer_article
427                $message_ok = _T('emballe_medias:fin_article_update');
428        }
429
430        if($invalider){
431                include_spip('inc/invalideur');
432                suivre_invalideur("0",true);
433                spip_log('EM : emballe_media - invalider');
434        }
435
436        $res = array();
437       
438        if($valeurs['statut'] == 'publie'){
439                $redirect = generer_url_entite($id_article,'article');
440        }
441        if(($config['statut_article'] == 'prop') && ($valeurs['statut'] == 'prop')){
442                $message_ok = $message_ok.'<br />'._T('emballe_medias:message_article_prop_prop');
443        }
444        else if (($config['statut_article'] == 'prop') && ($valeurs['statut'] == 'prepa')){
445                $message_ok = $message_ok.'<br />'._T('emballe_medias:message_article_prop_prepa');
446        }
447        else if(($config['statut_article'] == 'publie') && ($valeurs['statut'] == 'prepa')){
448                $message_ok = $message_ok.'<br />'._T('emballe_medias:message_article_publie_prepa');
449        }
450        else if(($config['statut_article'] == 'publie') && ($valeurs['statut'] == 'publie')){
451                $message_ok = $message_ok.'<br />'._T('emballe_medias:message_voir_en_ligne',array('url'=>$redirect));
452        }
453       
454        $res['message_ok'] = $message_ok;
455        $res['editable'] = true;
456
457        $res = pipeline('em_ajout_media_post_traiter',
458                array(
459                        'args' => array(
460                                'id_article' => $id_article,
461                                'valeurs' => $valeurs
462                        ),
463                        'data' => $res,
464                )
465        );
466        return $res;
467}
468
469/**
470 * RécupÚre l'ensemble des champs textes de la configuration
471 * Retourne un array des champs disponibles dans le formulaire
472 *
473 * @return array
474 */
475function emballe_medias_champs_textes() {
476        //charge les valeurs de chaque champs proposés dans le formulaire
477        foreach (lire_config('emballe_medias/texte/') as $clef => $valeur) {
478                preg_match('/^(.*)(?:_obligatoire)/i', $clef, $resultat);
479
480                if ((!empty($resultat[1])) && (lire_config('emballe_medias/texte/'.$resultat[1]) == 'on')) {
481                        $valeurs[] = $resultat[1];
482                }
483        }
484        $autres_champs = pipeline('em_champs_texte',
485                array(
486                        'args' => array(
487                                'valeurs' => $valeurs
488                        ),
489                        'data' => array()
490                )
491        );
492        if(is_array($autres_champs)){
493                $valeurs = array_merge($valeurs,$autres_champs);
494        }
495        return $valeurs;
496}
497
498
499/**
500 * RécupÚre les champs de textes de la configuration.
501 * Retourne un array bidimentionnel en récupérant la valeur postée depuis le formulaire
502 *
503 * @return array
504 */
505function emballe_medias_recuperer_champs(){
506        foreach (lire_config('emballe_medias/texte/') as $clef => $valeur) {
507                preg_match('/^(.*)(?:_obligatoire)/i', $clef, $resultat);
508                $valeurs[$resultat[1]] = _request($resultat[1]);
509        }
510        return $valeurs;
511}
512?>
Note: See TracBrowser for help on using the repository browser.