From a1f6242c262abdbd84f2a1dcc124df93c8815387 Mon Sep 17 00:00:00 2001 From: "cedric@yterium.com" <> Date: Mon, 14 Nov 2011 18:39:14 +0000 Subject: [PATCH] Le media d'un document (image, video, audio, file) utilise par convenance dans l'interface ne peut dependre en dur de l'extension du fichier : avec oEmbed, on peut se retrouver a integrer toute sorte de media au format html Du coup on revoit la structure de la base : spip_types_documents porte un champ media_defaut (renommage de l'ancien media) utilise comme valeur par defaut du media si non renseigne quand un document est ajoute spip_documents porte son propre champ media, qui est peuple en fonction de media_defaut, sauf si renseigne lors de l'ajout du document (ie via fonction de description ou pipeline) Revision du code partout ou on referencait media, en dispatchant sur l'un ou l'autre selon les cas upgrade de la base (en deux fois) --- .gitattributes | 1 + action/ajouter_documents.php | 9 ++++++-- action/editer_document.php | 2 +- action/supprimer_tous_orphelins.php | 6 ++--- base/medias.php | 7 +++--- inc/renseigner_document.php | 2 +- medias_administrations.php | 23 +++++++++++++++++++ paquet.xml | 4 ++-- .../inclure/mediatheque-navigation.html | 10 ++++---- .../mediatheque-navigation_fonctions.php | 19 +++++++++++++++ 10 files changed, 65 insertions(+), 18 deletions(-) create mode 100644 prive/squelettes/inclure/mediatheque-navigation_fonctions.php diff --git a/.gitattributes b/.gitattributes index ddd8631c..4f80a591 100644 --- a/.gitattributes +++ b/.gitattributes @@ -139,6 +139,7 @@ prive/squelettes/inclure/document_infos.html -text prive/squelettes/inclure/mediatheque-choisir.html -text prive/squelettes/inclure/mediatheque-galerie.html -text prive/squelettes/inclure/mediatheque-navigation.html -text +prive/squelettes/inclure/mediatheque-navigation_fonctions.php -text prive/squelettes/inclure/portfolio-documents.html -text prive/squelettes/navigation/document_edit.html -text prive/squelettes/top/documents.html -text diff --git a/action/ajouter_documents.php b/action/ajouter_documents.php index 066d2666..b3428c49 100644 --- a/action/ajouter_documents.php +++ b/action/ajouter_documents.php @@ -161,6 +161,11 @@ function action_ajouter_un_document_dist($id_document, $file, $objet, $id_objet, unset($champs['inclus']); $champs['fichier'] = set_spip_doc($champs['fichier']); } + + // si le media est pas renseigne, le faire, en fonction de l'extension + if (!isset($champs['media'])){ + $champs['media'] = sql_getfetsel('media_defaut','spip_types_documents','extension='.sql_quote($champs['extension'])); + } // lier le parent si necessaire if ($id_objet=intval($id_objet) AND $objet) @@ -256,11 +261,11 @@ function verifier_upload_autorise($source, $mode=''){ AND $ext = $match[1]){ $ext = corriger_extension(strtolower($ext)); - if ($res = sql_fetsel("extension,inclus,media", "spip_types_documents", "extension=" . sql_quote($ext) . " AND upload='oui'")) + if ($res = sql_fetsel("extension,inclus,media_defaut as media", "spip_types_documents", "extension=" . sql_quote($ext) . " AND upload='oui'")) $infos = array_merge($infos,$res); } if (!$res){ - if ($res = sql_fetsel("extension,inclus,media", "spip_types_documents", "extension='zip' AND upload='oui'")){ + if ($res = sql_fetsel("extension,inclus,media_defaut as media", "spip_types_documents", "extension='zip' AND upload='oui'")){ $infos = array_merge($infos,$res); $res['autozip'] = true; } diff --git a/action/editer_document.php b/action/editer_document.php index 2ccb2e35..4df43869 100644 --- a/action/editer_document.php +++ b/action/editer_document.php @@ -90,7 +90,7 @@ function document_modifier($id_document, $set=false) { // white list array( 'titre', 'descriptif', 'date', 'taille', 'largeur','hauteur','mode','credits', - 'fichier','distant','extension', 'id_vignette', + 'fichier','distant','extension', 'id_vignette', 'media', ), // black list array('parents', 'ajout_parents'), diff --git a/action/supprimer_tous_orphelins.php b/action/supprimer_tous_orphelins.php index 6920654a..6964bf1f 100644 --- a/action/supprimer_tous_orphelins.php +++ b/action/supprimer_tous_orphelins.php @@ -23,10 +23,8 @@ function action_supprimer_tous_orphelins() { list($media,$distant,$statut,$sanstitre) = explode('/',$arg); //critere sur le media - if($media) { - $select = sql_get_select("extension","spip_types_documents as nnnn","media=".sql_quote($media)); - $where[] = "spip_documents.extension IN ($select)"; - } + if($media) + $select = "media=".sql_quote($media); //critere sur le distant if($distant) diff --git a/base/medias.php b/base/medias.php index 9fb22816..80eb8b64 100644 --- a/base/medias.php +++ b/base/medias.php @@ -25,7 +25,7 @@ function medias_declarer_tables_interfaces($interfaces) { $interfaces['exceptions_des_tables']['documents']['type_document']=array('types_documents', 'titre'); $interfaces['exceptions_des_tables']['documents']['extension_document']=array('types_documents', 'extension'); $interfaces['exceptions_des_tables']['documents']['mime_type']=array('types_documents', 'mime_type'); - $interfaces['exceptions_des_tables']['documents']['media']=array('types_documents', 'media'); + $interfaces['exceptions_des_tables']['documents']['media_document']=array('types_documents', 'media'); $interfaces['exceptions_des_jointures']['spip_documents']['id_forum']=array('spip_documents_liens','id_forum'); $interfaces['exceptions_des_jointures']['spip_documents']['vu']=array('spip_documents_liens', 'vu'); @@ -52,7 +52,7 @@ function medias_declarer_tables_principales($tables_principales) { "mime_type" => "varchar(100) DEFAULT '' NOT NULL", "inclus" => "ENUM('non', 'image', 'embed') DEFAULT 'non' NOT NULL", "upload" => "ENUM('oui', 'non') DEFAULT 'oui' NOT NULL", - "media" => "varchar(10) DEFAULT 'file' NOT NULL", + "media_defaut" => "varchar(10) DEFAULT 'file' NOT NULL", "maj" => "TIMESTAMP"); $spip_types_documents_key = array( @@ -131,6 +131,7 @@ function medias_declarer_tables_objets_sql($tables){ "taille" => "bigint", "largeur" => "integer", "hauteur" => "integer", + "media" => "varchar(10) DEFAULT 'file' NOT NULL", "mode" => "varchar(10) DEFAULT 'document' NOT NULL", "distant" => "VARCHAR(3) DEFAULT 'non'", "statut" => "varchar(10) DEFAULT '0' NOT NULL", @@ -221,7 +222,7 @@ function creer_base_types_doc($serveur='') { 'titre' => $titre, 'inclus' => $inclus, 'extension' => $extension, - 'media' => $media, + 'media_defaut' => $media, 'upload' => 'oui' ); } diff --git a/inc/renseigner_document.php b/inc/renseigner_document.php index 9b185f8e..343afe91 100644 --- a/inc/renseigner_document.php +++ b/inc/renseigner_document.php @@ -82,7 +82,7 @@ function renseigner_taille_dimension_image($fichier,$ext){ $meta = $metadata($fichier); } else { - $media = sql_getfetsel('media','spip_types_documents','extension='.sql_quote($ext)); + $media = sql_getfetsel('media_defaut','spip_types_documents','extension='.sql_quote($ext)); if ($metadata = charger_fonction($media,"metadata",true)){ $meta = $metadata($fichier); } diff --git a/medias_administrations.php b/medias_administrations.php index 4e83216b..36ef49fe 100644 --- a/medias_administrations.php +++ b/medias_administrations.php @@ -99,6 +99,19 @@ function medias_upgrade($nom_meta_base_version,$version_cible){ $maj['0.16.0'] = array( array('creer_base_types_doc'), ); + + $maj['1.0.0'] = array( + // on cree le champ en defaut '?' pour reperer les nouveaux a peupler + array('sql_alter',"TABLE spip_documents ADD media varchar(10) DEFAULT '?' NOT NULL"), + array('medias_peuple_media_document'), + // puis on retablit le bon defaut + array('sql_alter',"TABLE spip_documents CHANGE media media varchar(10) DEFAULT 'file' NOT NULL"), + ); + $maj['1.0.1'] = array( + // puis on retablit le bon defaut + array('sql_alter',"TABLE spip_types_documents CHANGE media media_defaut varchar(10) DEFAULT 'file' NOT NULL"), + ); + include_spip('base/upgrade'); maj_plugin($nom_meta_base_version, $version_cible, $maj); @@ -117,6 +130,16 @@ function medias_maj_meta_documents(){ ecrire_meta('documents_objets',implode(',',$config)); } +function medias_peuple_media_document(){ + $res = sql_select("DISTINCT extension","spip_documents","media=".sql_quote('?')); + while($row = sql_fetch($res)){ + $media = sql_getfetsel('media_defaut','spip_types_documents','extension='.sql_quote($row['extension'])); + sql_updateq('spip_documents',array('media'=>$media),"media=".sql_quote('?').' AND extension='.sql_quote($row['extension'])); + if (time() >= _TIME_OUT) + return; + } +} + /* function medias_install($action,$prefix,$version_cible){ $version_base = $GLOBALS[$prefix."_base_version"]; diff --git a/paquet.xml b/paquet.xml index 78d2adb2..3742036b 100644 --- a/paquet.xml +++ b/paquet.xml @@ -1,11 +1,11 @@ <paquet prefix="medias" categorie="multimedia" - version="2.6.0" + version="2.7.0" etat="test" compatibilite="[3.0.0-alpha2;[" logo="prive/themes/spip/images/portfolio-32.png" - schema="0.16.0" + schema="1.0.1" > <nom>Medias</nom> diff --git a/prive/squelettes/inclure/mediatheque-navigation.html b/prive/squelettes/inclure/mediatheque-navigation.html index abcbc098..7e174e4e 100644 --- a/prive/squelettes/inclure/mediatheque-navigation.html +++ b/prive/squelettes/inclure/mediatheque-navigation.html @@ -45,11 +45,11 @@ <B_types> <ul class='choix-type'> -<BOUCLE_types(TYPES_DOCUMENTS){media=#ENV{media,''}}> -<BOUCLE_compte(DOCUMENTS){id_rubrique ?}{id_article ?}{id_breve ?}{id_document ?}{recherche ?}{statut==.*}{extension} /> -[(#TOTAL_BOUCLE|oui)[<li>(#GET{self}|parametre_url{extension,#EXTENSION}|lien_ou_expose{#TITRE|concat{' (',#TOTAL_BOUCLE,')'},#ENV{extension}|=={#EXTENSION},ajax})<span> | </span></li>]] -<//B_compte> -</BOUCLE_types> + <BOUCLE_types(TYPES_DOCUMENTS){par titre}{extension IN #ENV{media,''}|liste_extensions_utilisees}> + <BOUCLE_compte(DOCUMENTS){id_rubrique ?}{id_article ?}{id_breve ?}{id_document ?}{recherche ?}{statut==.*}{extension}{media=#ENV{media}} /> + [(#_compte:TOTAL_BOUCLE|oui)[<li>(#GET{self}|parametre_url{extension,#EXTENSION}|lien_ou_expose{#TITRE|concat{' (',#_compte:TOTAL_BOUCLE,')'},#ENV{extension}|=={#EXTENSION},ajax})<span> | </span></li>]] + <//B_compte> + </BOUCLE_types> </ul> </B_types> diff --git a/prive/squelettes/inclure/mediatheque-navigation_fonctions.php b/prive/squelettes/inclure/mediatheque-navigation_fonctions.php new file mode 100644 index 00000000..3429dfff --- /dev/null +++ b/prive/squelettes/inclure/mediatheque-navigation_fonctions.php @@ -0,0 +1,19 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2011 * + * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * + * * + * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * + * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * +\***************************************************************************/ + + +if (!defined('_ECRIRE_INC_VERSION')) return; + + +function liste_extensions_utilisees($media){ + return $media?array_map('reset',sql_allfetsel('extension','spip_documents','media='.sql_quote($media))):array(); +} \ No newline at end of file -- GitLab