source: plugins_spip/media_collections/formulaires/associer_media_collection.php @ 7333

Last change on this file since 7333 was 7333, checked in by kent1, 8 years ago

Un formulaire / bouton #FORMULAIRE_ASSOCIER_MEDIA_COLLECTION permettant d'associer rapidement un média à une collection

Ce formulaire est caché au chargement de la page et est accessible par l'utilisateur via un bouton "Associer à une collection"

Au click sur ce bouton le formulaire peut s'afficher de deux méthodes différentes :
-* via mediabox si le plugin mediabox est activé et que l'option dans la configuration des collections l'empêchant n'est pas cochée;
-* insertion dans la page juste après le bouton si mediabox est désactivé ou son usage empêché;

Ce formulaire ne présente qu'un seul select permettant de choisir à quelle collection ce média doit être ajouté.

Le select est composé de deux "optgroup" :
-* la liste des collections de l'utilisateur en cours, toutes ses collections sont affichées, même celle dont le média fait déjà parti et celles dont le genre n'acceptera pas le media en cours (si on est sur un média vidéo et la collection n'accepte que des sons par exemple). Dans ces deux derniers cas, l'option du select sera grisée et non sélectionnable;
-* la liste des collections collaboratives qui n'appartiennent pas à l'auteur en cours. Dans ce cas seules les collections où l'on peut ajouter le média son affichées;

Après l'ajout du média à une collection, le formulaire recharche automatiquement la liste des collections liées au média si l'inclusion "inclure/collections_liees_media.html" est insérée dans la page avec l'option "ajax"

File size: 3.5 KB
Line 
1<?php
2/**
3 * Plugin Collection (ou albums)
4 *
5 * Auteurs :
6 * kent1 (http://www.kent1.info - kent1@arscenic.info)
7 *
8 * © 2012 - Distribue sous licence GNU/GPL
9 *
10 * Formulaire d'association d'un media à une collection
11 *
12 **/
13
14if (!defined("_ECRIRE_INC_VERSION")) return;
15
16include_spip('inc/editer');
17include_spip('inc/config');
18
19/**
20 *
21 * @param string $objet
22 * @param int $id_objet
23 * @return array
24 */
25function formulaires_associer_media_collection_charger_dist($id_objet){
26        $valeurs = array(
27                'editable'=>true, # Peut on utiliser le formulaire
28                'id_objet' => $id_objet, # Quel est l'id_objet à utiliser
29                '_collections' => array() # La liste des collections auxquelles le media est déjà lié
30        );
31       
32        /**
33         * Le secteur des medias
34         */
35        $secteur_medias = sql_getfetsel('id_secteur','spip_diogenes','objet="emballe_media"');
36       
37        /**
38         * On n'est pas auteur ou l'$id_objet passé n'est pas numérique
39         * On rend le formulaire non éditable
40         */
41        if(!isset($GLOBALS['visiteur_session']['statut']) OR !is_numeric(intval($id_objet))){
42                $valeurs['editable'] = false;
43        }
44        /**
45         * On vérifie que l'on est bien sur un media et non un article X
46         */
47        else if(
48                (sql_getfetsel('id_secteur','spip_articles','id_article = '.intval($id_objet)) != $secteur_medias)
49                OR (sql_countsel('spip_documents_liens','objet="article" AND id_objet = '.intval($id_objet)) != 1)){
50                $valeurs['editable'] = false;
51        }
52       
53        /**
54         * On rempli l'array "collections" avec l'ensemble des collections où ce media est associé
55         *
56         * On récupÚre également le media du document
57         */
58        else {
59                $deja_collections = sql_select('id_collection','spip_collections_liens','objet="article" AND id_objet='.intval($id_objet));
60                while($collection = sql_fetch($deja_collections)){
61                        $valeurs['_collections'][] = $collection['id_collection']; 
62                }
63                $valeurs['_genres'] = array('mixed');
64                $valeurs['_genres'][] = sql_getfetsel('doc.media','spip_documents as doc LEFT JOIN spip_documents_liens as lien ON doc.id_document=lien.id_document','lien.objet="article" AND lien.id_objet='.intval($id_objet));
65        }
66        return $valeurs;
67}
68
69function formulaires_associer_media_collection_verifier_dist($id_objet){
70        $erreurs = array();
71        return $erreurs;
72}
73
74function formulaires_associer_media_collection_traiter_dist($id_objet){
75        $res = array('message_ok'=>' ');
76        $collection_ajoutee = false;
77       
78        if(intval(_request('id_collection')) && ($id_collection = sql_getfetsel('id_collection','spip_collections','id_collection='.intval(_request('id_collection')))) && autoriser('lierobjet','collection',intval(_request('id_collection')))){
79                $id_collection = $id_collection;
80        }else if(_request('id_collection')){
81                return $res['message_erreur'] = _T('collection:erreur_collection_non_existante');
82        }else if(!_request('id_collection')){
83                unset($res['message_ok']);
84                return $res;
85        }
86       
87       
88        include_spip('action/editer_liens');
89       
90        if (autoriser('lierobjet', 'collection', $id_collection)) {
91                $association = objet_associer(array('collection' => $id_collection), array('article' => $id_objet));
92        }
93       
94        if(!$association){
95                return $res['message_erreur'] = _T('collection:erreur_association_collection');
96        }
97       
98        $autoclose = (lire_config('collections/mediabox') == "on" OR !defined('_DIR_PLUGIN_MEDIABOX')) ? '' : "<script type='text/javascript'>if (window.jQuery) jQuery.modalboxclose();</script>";
99        if (!isset($res['message_erreur'])){
100                $res['message_ok'] = $autoclose;
101                $res['editable'] = false;
102        }
103
104        if ($res['message_ok'])
105                $res['message_ok'].= '<script type="text/javascript">if (window.jQuery) jQuery(".info-collections_liees").ajaxReload();</script>';
106       
107        return $res;
108}
109?>
Note: See TracBrowser for help on using the repository browser.