From bb59380052256f893e397025b30b8edee8f181af Mon Sep 17 00:00:00 2001 From: "cedric@yterium.com" <> Date: Wed, 16 Feb 2011 18:41:46 +0000 Subject: [PATCH] generalisation du branchement sur objet, fusion des deux meta documents_article et documents_rubrique en une seule meta documents_objets --- .gitattributes | 1 + base/medias.php | 10 +++++++++ formulaires/configurer_documents.html | 28 ++++-------------------- formulaires/configurer_documents.php | 16 ++++++-------- formulaires/inc-choisir-objets.html | 8 +++++++ lang/medias_fr.php | 1 + medias_autoriser.php | 31 ++++++++++++++++++--------- medias_pipelines.php | 18 ++++++---------- plugin.xml | 2 +- 9 files changed, 59 insertions(+), 56 deletions(-) create mode 100644 formulaires/inc-choisir-objets.html diff --git a/.gitattributes b/.gitattributes index 4bc466d5..16c2b6ce 100644 --- a/.gitattributes +++ b/.gitattributes @@ -19,6 +19,7 @@ formulaires/editer_document.html -text formulaires/editer_document.php -text formulaires/illustrer_document.html -text formulaires/illustrer_document.php -text +formulaires/inc-choisir-objets.html -text formulaires/inc-lister_archive_jointe.html -text formulaires/inc-upload_document.html -text formulaires/joindre_document.html -text diff --git a/base/medias.php b/base/medias.php index 5ce4e88a..1027cfcb 100644 --- a/base/medias.php +++ b/base/medias.php @@ -279,6 +279,16 @@ function medias_upgrade($nom_meta_base_version,$version_cible){ sql_alter("TABLE spip_documents CHANGE mode mode varchar(10) DEFAULT 'document' NOT NULL"); ecrire_meta($nom_meta_base_version,$current_version="0.11.0",'non'); } + if (version_compare($current_version,'0.12.0','<')){ + // generalisation des metas documents_article et documents_rubriques + $config = array(); + if (isset($GLOBALS['meta']['documents_article']) AND $GLOBALS['meta']['documents_article']!=='non') + $config[] = 'spip_articles'; + if (isset($GLOBALS['meta']['documents_rubrique']) AND $GLOBALS['meta']['documents_rubrique']!=='non') + $config[] = 'spip_rubriques'; + ecrire_meta('documents_objets',implode(',',$config)); + ecrire_meta($nom_meta_base_version,$current_version="0.12.0",'non'); + } } medias_check_statuts(); } diff --git a/formulaires/configurer_documents.html b/formulaires/configurer_documents.html index 882e84f2..e5605213 100644 --- a/formulaires/configurer_documents.html +++ b/formulaires/configurer_documents.html @@ -4,37 +4,17 @@ [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) <p><:texte_documents_joints:></p> - <p><:texte_documents_joints_2:></p> <form method='post' action='#ENV{action}' enctype='multipart/form-data'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE{#ENV{action}} <ul> - #SET{name,documents_article}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} + #SET{name,documents_objets}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <li class="editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> - [ + <label><:medias:label_activer_document_objets:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> - ]<div class="choix"> - <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" - [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:item_autoriser_documents_joints:></label> - </div> - <div class="choix"> - <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" - [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] /><label for="#GET{name}_non"><:item_non_autoriser_documents_joints:></label> - </div> - </li> - #SET{name,documents_rubrique}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} - <li class="editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> - [ - <span class='erreur_message'>(#GET{erreurs})</span> - ]<div class="choix"> - <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" - [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:item_autoriser_documents_joints_rubriques:></label> - </div> - <div class="choix"> - <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" - [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] /><label for="#GET{name}_non"><:item_non_autoriser_documents_joints_rubriques:></label> - </div> + ]<p class="explication"><:texte_documents_joints_2:></p> + #INCLURE{fond=formulaires/inc-choisir-objets,name=#GET{name},selected=#ENV**{#GET{name}}} </li> #SET{name,documents_date}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <li class="editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> diff --git a/formulaires/configurer_documents.php b/formulaires/configurer_documents.php index 34bca203..96f805d3 100644 --- a/formulaires/configurer_documents.php +++ b/formulaires/configurer_documents.php @@ -14,25 +14,21 @@ if (!defined('_ECRIRE_INC_VERSION')) return; function formulaires_configurer_documents_charger_dist(){ foreach(array( - "documents_article", - "documents_rubrique", + "documents_objets", "documents_date", ) as $m) $valeurs[$m] = $GLOBALS['meta'][$m]; - + $valeurs['documents_objets']=explode(',',$valeurs['documents_objets']); return $valeurs; } function formulaires_configurer_documents_traiter_dist(){ $res = array('editable'=>true); - foreach(array( - "documents_article", - "documents_rubrique", - "documents_date", - ) as $m) - if (!is_null($v=_request($m))) - ecrire_meta($m, $v=='oui'?'oui':'non'); + if (!is_null($v=_request($m='documents_date'))) + ecrire_meta($m, $v=='oui'?'oui':'non'); + if (!is_null($v=_request($m='documents_objets'))) + ecrire_meta($m, is_array($v)?impode(',',$v):''); $res['message_ok'] = _T('config_info_enregistree'); return $res; diff --git a/formulaires/inc-choisir-objets.html b/formulaires/inc-choisir-objets.html new file mode 100644 index 00000000..2f1607cb --- /dev/null +++ b/formulaires/inc-choisir-objets.html @@ -0,0 +1,8 @@ +<BOUCLE_objets(POUR){tableau #REM|lister_tables_objets_sql}{cle!=#ENV{exclus,''}}> +#SET{id,#ENV{name}|replace{\W,'_'}|concat{'_',#CLE}} +<div class="choix choix_#CLE"> + <input type="checkbox" id="#GET{id}" name="#ENV{name}[]" value="#CLE"[(#CLE|in_any{#ENV{selected}})checked="checked"] /> + <label for="#GET{id}">[(#VALEUR{texte_objets}|_T)]</label> +</div> +</BOUCLE_objets> +<input type="hidden" name="#ENV{name}[]" value="" /> diff --git a/lang/medias_fr.php b/lang/medias_fr.php index e16c44e6..529f8e54 100644 --- a/lang/medias_fr.php +++ b/lang/medias_fr.php @@ -93,6 +93,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // L 'logo' => 'Logo', + 'label_activer_document_objets' => 'Activer les documents pour les contenus :', 'label_refdoc_joindre' => 'Document numéro', 'label_parents' => 'Ce document est lié à', 'label_fichier' => 'Fichier', diff --git a/medias_autoriser.php b/medias_autoriser.php index 61c36d45..38cd9efc 100644 --- a/medias_autoriser.php +++ b/medias_autoriser.php @@ -67,18 +67,29 @@ function autoriser_document_tailler_dist($faire,$quoi,$id,$qui,$options) { return true; } -// On ne peut joindre un document qu'a un article qu'on a le droit d'editer -// mais il faut prevoir le cas d'une *creation* par un redacteur, qui correspond -// au hack id_article = 0-id_auteur -// http://doc.spip.org/@autoriser_joindredocument_dist +/** + * On ne peut joindre un document qu'a un objet qu'on a le droit d'editer + * mais il faut prevoir le cas d'une *creation* par un redacteur, qui correspond + * au hack id_objet = 0-id_auteur + * Il faut aussi que les documents aient ete actives sur les objets concernes + * ou que ce soit un article, sur lequel on peut toujours uploader des images + * + * http://doc.spip.org/@autoriser_joindredocument_dist + * + * @return bool + */ function autoriser_joindredocument_dist($faire, $type, $id, $qui, $opt){ return - autoriser('modifier', $type, $id, $qui, $opt) - OR ( - $type == 'article' - AND $id<0 - AND abs($id) == $qui['id_auteur'] - AND autoriser('ecrire', $type, $id, $qui, $opt) + (autoriser('modifier', $type, $id, $qui, $opt) + OR ( + $id<0 + AND abs($id) == $qui['id_auteur'] + AND autoriser('ecrire', $type, $id, $qui, $opt) + ) + ) + AND + ( + $type=='article' OR in_array(table_objet_sql($type),explode(',',$GLOBALS['meta']['documents_objets'])) ); } diff --git a/medias_pipelines.php b/medias_pipelines.php index 3e284ef8..4374da08 100644 --- a/medias_pipelines.php +++ b/medias_pipelines.php @@ -42,8 +42,7 @@ function medias_post_insertion($flux){ } function medias_configurer_liste_metas($config){ - $config['documents_article'] = 'non'; - $config['documents_rubrique'] = 'non'; + $config['documents_objets'] = ''; $config['documents_date'] = 'non'; return $config; } @@ -82,21 +81,19 @@ function medias_post_edition($flux){ return $flux; } -// liste des exec avec la colonne document -$GLOBALS['medias_exec_colonne_document'][] = 'article_edit'; -$GLOBALS['medias_exec_colonne_document'][] = 'breve_edit'; -$GLOBALS['medias_exec_colonne_document'][] = 'rubriques_edit'; - /** * Pipeline afficher_complement_objet - * afficher le portfolio et ajout de document sur les fiches objet (article, rubrique..) + * afficher le portfolio et ajout de document sur les fiches objet + * sur lesquelles les medias ont ete activees + * Pour les articles, on ajoute toujours ! * * @param $flux * @return */ function medias_afficher_complement_objet($flux){ if ($type=$flux['args']['type'] - AND $id=intval($flux['args']['id'])) { + AND $id=intval($flux['args']['id']) + AND (autoriser('joindredocument',$type,$id))) { $documenter_objet = charger_fonction('documenter_objet','inc'); $flux['data'] .= $documenter_objet($id,$type); } @@ -104,8 +101,7 @@ function medias_afficher_complement_objet($flux){ } function medias_affiche_gauche($flux){ - if (in_array($flux['args']['exec'],$GLOBALS['medias_exec_colonne_document']) - AND $table = preg_replace(",_edit$,","",$flux['args']['exec']) + if ($table = preg_replace(",_edit$,","",$flux['args']['exec']) AND $type = objet_type($table) AND $id_table_objet = id_table_objet($type) AND ($id = intval($flux['args'][$id_table_objet]) OR $id = 0-$GLOBALS['visiteur_session']['id_auteur']) diff --git a/plugin.xml b/plugin.xml index 40d3ac89..47d7c1a7 100644 --- a/plugin.xml +++ b/plugin.xml @@ -3,7 +3,7 @@ <auteur>Collectif SPIP, Cedric Morin & Romy Duhem-Verdiere pour la mediatheque</auteur> <icon>images/portfolio-64.png</icon> <version>2.0.0</version> - <version_base>0.11.0</version_base> + <version_base>0.12.0</version_base> <etat>dev</etat> <description>Gestion des medias de SPIP</description> <install>base/medias.php</install> -- GitLab