Bonjour à tous,
Je poste sur spip-zone seulement puisqu’il me semble que la gestion des documents joints sera totalement déléguée au plugin dans les versions à venir.
Une petite réflexion sur la recherche des documents dans les objets :
Dans la fonction de la dist marquer_doublons_documents (http://doc.spip.org/@marquer_doublons_documents) ou dans celle de gestion_documents (mediathèque) inc_marquer_doublons_doc_dist de inc/marquer_doublons_doc (http://www.spip-contrib.net/Mediatheque) :
On ne prend en compte les champs textes « chapo » et « texte » pour chercher les documents à lier à l’objet. Or, bien que ce soit peu courant, il peut tout à fait arriver que l’on mette un raccourci vers un document dans un autre champ texte nommé « toto », « ps », ou « descriptif ». il peut aussi arriver qu’un objet n’est qu’un champ descriptif (au hasard, évènement dans le plugin agenda). Le lien document-objet ne pourra pas se faire avec cet objet.
Cette fonction, qu’elle soit du core ou de mediathèque, permettrait pourtant par défaut de créer un lien document-objet avec n’importe quel type d’objet à partir du moment où il y a le formulaire document qui va bien dans l’édition de l’objet et que son url est normalisée (objet_edit&id_objet=XX).
Ne faudrait t-il pas qu’elle lise tous les champs type « text » de l’objet ? Ou au moins dans tous ceux d’une liste d’objet que l’on définit dans la configuration ? A la façon du porte_plume_partout ?
Je me demandais s’il y a une raison à cela (je veux dire un « sens spip » dans ce comportement), sinon je veux bien tenter de m’y coller pour que ce soit intégré à médiathèque ou délégué à une extension de mediathèque « mediatheque_tout_objet » (encore une fois à la façon du porte plume partout).
Une petite question technique :
Dans ce dernier cas de figure, comment on peut « surcharger » la fonction dans le plugin via un autre plugin ? Je vois pas trop comment on s’y prend, à part écrire une seconde fois la fonction avec tous les autres champs type « text » des objets. Ca m’a fait faire des trucs pas beau (cf le hack ci-dessous) de pas trouver comment on fait.
Une autre question plus spécifique :
Sur l’agenda, j’ai voulu intégrer cette gestion des documents joints. J’ai fait le hack pas beau (et pas extensible) sur marquer_doublons_doc de médiathèque de rajouter le champs descriptif partout où il y avait les deux autres champs chapo et texte.
function inc_marquer_doublons_doc_dist($champs,$id,$type,$id_table_objet,$table_objet,$spip_table_objet, $desc=array(), $serveur=’’){
if (!isset($champs[‹ texte ›]) AND !isset($champs[‹ chapo ›]) AND !isset($champs[‹ descriptif ›])) return;
…
if (!isset($champs[‹ texte ›]) && isset($desc[‹ field ›][‹ texte ›])) $load = ‹ texte ›;
if (!isset($champs[‹ chapo ›]) && isset($desc[‹ field ›][‹ chapo ›])) $load = ‹ chapo ›;
if (!isset($champs[‹ descriptif ›]) && isset($desc[‹ field ›][‹ descriptif ›])) $load = ‹ chapo ›;
…
traiter_modeles($champs[‹ descriptif ›].$champs[‹ chapo ›].$champs[‹ texte ›],true);
…
}
Et j’ai ajouté le formulaire de mediatheque via un microplugin qui récupère le fond de mediatheque ainsi :
function machin_affiche_gauche($flux) {
…blabla…
$flux[‹ data ›] .= recuperer_fond(_DIR_PLUGIN_GESTDOC.’/prive/editer/colonne_document’,array(‹ objet ›=>$type,‹ id_objet ›=>$id));
…blabla…
}
Est-ce qu’il faut faire comme cela pour appeler un fond d’un autre plugin dans un plugin _DIR_PLUGIN_GESTDOC (j’ai pas trouvé d’exemple, ça doit être rare que les plugins s’appellent leurs fonds entre eux) ? En ajoutant au plugin.xml necessite id=« gestdoc » c’est propre ou il manque quelque chose ?