Re,
Maintenant que la branche sexy n'a plus de gestionnaire de médias, je
remets sur le tapis le sujet de refonte du gestionnaire de médias, qui
reviendra sous forme d'un plugin.
Les limitations de l'ancien gestionnaire de médias :
* peu d'extensibilité
* pas ouvert vers les médias externes
* limité à 1 media_path par blog.
Le nouveau modèle proposé :
* Ajout d'un "media provider" (ex typique : un couple media_path/media_url,
mais extensible à d'autres types de fournisseurs : youtube, flickr, ...)
* Les médias sont tous associés à un media provider
* Ajout d'une table dc_media_meta pour mieux gérer les métadonnées des
médias
* Ajout d'urlhandlers dédiés aux médias
* Nouveaux templates tpl:Media
Plutôt que de continuer à paraphraser une vieille page sur le sujet,
ci-dessous un copier-coller de la réflexion :
Refonte du gestionnaire de médias
Le but de cette page est de dégrossir la prochaine cible du gestionnaire de
médias
Classes core dcMedia
- rendre cette classe indépendante du provider de médias.
- fournir des méthodes type getPosts de dcCore
- permettre d'étendre chaque recordset via le media provider associé
dcMediaProviders
Classe abstraite, à étendre en dcMediaLocal, dcMediaYoutube, dcMediaFlickr
- Permet d'avoir les informations sur un média donné (URL, miniature,
inventaire, ...)
- Permet de synchroniser les médias (nouveaux, supprimés, ...)
Coté public
- URLHandlers : proposer un URLHandler pour afficher un média (le plugin
dlManager a déjà défini des
URLs<http://lab.dotclear.org/browser/plugins/dlManager/trunk/_prepend....
des
fichiers
template<http://lab.dotclear.org/browser/plugins/dlManager/trunk/defau...
Moe)
- proposer les templates liés à ce urlhandler
- nouveaux templates : <tpl:Media></tpl:Media> ...
Coté admin
- Proposer une vision sous forme de liste, pas forcément dépendante du
répertoire. Un répertoire devient un filtre comme un autre
- Points d'extension coté liste de médias, sélection multiple, actions
groupées (déplacement, suppression, regénération, ...)
- Points d'extension coté affichage média (rotation, redéfinition
miniatures, manipulation métadonnées, ...)
Tables dc_media
Objectif : limiter les impacts sur la modification de cette table Structure
actuelle :
- media_id (bigint) : id du média
- user_id (varchar 32) : utilisateur
- media_path (varchar 255) : chemin du répertoire public
- media_title (varchar 255) : titre du média
- media_file (varchar 255) : nom du fichier contenant le média
(répertoire inclus)
- media_dir (varchar 255) : répertoire contenant le média
- media_meta (text) : métadonnées de l'image (structure xml)
- media_dt, media_creadt, media_upddt
- media_private (smallint)
Evolutions à porter :
- Remplacer media_path par mp_id, avec jointure avec dc_media_pro (le
media_path est alors porté par la table dc_media_pro)
dc_media_pro
Nouvelle table, elle décrit les fournisseurs de médias :
Champs :
- mp_id (bigint) : identifiant du provider
- mp_type (varchar 64): type du provider ("file", "youtube",
"flickr")
- mp_name (varchar 255) : nom du provider ("Compte youtube de toto")
- ... (à compléter selon étude)
dc_blog_media_pro
Nouvelle table, elle associe des media providers à un blog :
Champs :
- blog_id () : identifiant du blog
- mp_id (bigint) : identifiant du media provider
dc_media_meta
L'idée de cette table est de calquer les mécanismes de dc_meta, mais pour
les médias. En plus d'avoir des métadonnées des médias dans un champ de dc_
media, elles sont en plus stockées en table. Cela permet un requêtage plus
complet sur les médias. Structure proposée : comme dc_meta, à savoir :
- media_id( bigint) : id du média
- meta_value (varchar 255) : contenu de la métadonnée
- meta_type (varchar 64) : nom de la métadonnée
dc_post_media
Cette table a un rôle très limité actuellement, elle sert uniquement à la
gestion des pièces jointes.
Elle prendrait un sens beaucoup plus complet si ont pouvait qualifier le
type de lien post <-> média Nouvelle structure :
- post_id (bigint) : id du billet
- media_id (bigint) : id du média
- link_type (varchar 64) : type de lien entre billet et média
Exemples de link_type : "attach" pour une pièce jointe (valeur par défaut
pour rétrocompatibilité), "embed" pour un média inclus dans un billet (par
exemple pour propager un renommage d'un média au sein d'un billet, gérer
les effets de bord à ma suppression d'un média)