[SPIP Zone] Médiathèque (gestdoc) et / ou core : oubli ou choix pour les champs type "text" ?

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 ?

personne ?

Le 16 avril 2010 10:10, Guy Cesaro <guy.cesaro@gmail.com> a écrit :

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 ?

Je relance une dernière fois cette question et après j’abandonne, je laisse mon hack tel quel.

inc_marquer_doublons_documents du core ou inc_marquer_doublons_doc_dist de médiathèque, qui permettent de lier les documents à l’objet que l’on enregistre ou modifie ne devraient-ils pas chercher dans tous les champs de type « text » d’un objet et pas seuleument dans le descriptif ou dans le chapo ?
Si c’est un choix, est-ce pour des raisons de performances ? de règles logiques (on ne doit pas mettre une image dans le descriptif ou le ps ?).

Le 20 avril 2010 09:48, Guy Cesaro <guy.cesaro@gmail.com> a écrit :

personne ?

Le 16 avril 2010 10:10, Guy Cesaro <guy.cesaro@gmail.com> a écrit :

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 ?

Le 23 avril 2010 10:19, Guy Cesaro <guy.cesaro@gmail.com> a écrit :

Je relance une dernière fois cette question et après j'abandonne, je laisse
mon hack tel quel.

inc_marquer_doublons_documents du core ou inc_marquer_doublons_doc_dist de
médiathèque, qui permettent de lier les documents à l'objet que l'on
enregistre ou modifie ne devraient-ils pas chercher dans tous les champs de
type "text" d'un objet et pas seuleument dans le descriptif ou dans le chapo
?
Si c'est un choix, est-ce pour des raisons de performances ? de règles
logiques (on ne doit pas mettre une image dans le descriptif ou le ps ?).

Je ne sais pas.
C'est historique car cela fonctionne comme cela dans le core, et je me
suis contenté de reproduire le même fonctionnement dans le plugin.

On peut envisager de faire évoluer la fonction pour la rendre
extensible et généralisable mais il faut veiller à ne pas casser la
retro-compatibilité.

Cédric

ne devraient-ils pas chercher dans tous les champs de
type "text" d'un objet et pas seuleument dans le descriptif ou dans le chapo ?

en bonne logique ça devrait être la liste des éléments qui subissent |propre().
C'est codé en dur parce que fait à un moment où on n'avait pas pensé à
l'extensibilité

-- Fil

* Cédric Morin tapuscrivait, le 23/04/2010 10:33:

Le 23 avril 2010 10:19, Guy Cesaro<guy.cesaro@gmail.com> a écrit :

Je relance une dernière fois cette question et après j'abandonne, je laisse
mon hack tel quel.

  inc_marquer_doublons_documents du core ou inc_marquer_doublons_doc_dist de
médiathèque, qui permettent de lier les documents à l'objet que l'on
enregistre ou modifie ne devraient-ils pas chercher dans tous les champs de
type "text" d'un objet et pas seuleument dans le descriptif ou dans le chapo
?
Si c'est un choix, est-ce pour des raisons de performances ? de règles
logiques (on ne doit pas mettre une image dans le descriptif ou le ps ?).

Je ne sais pas.
C'est historique car cela fonctionne comme cela dans le core, et je me
suis contenté de reproduire le même fonctionnement dans le plugin.

On peut envisager de faire évoluer la fonction pour la rendre
extensible et généralisable mais il faut veiller à ne pas casser la
retro-compatibilité.

J'ai moi aussi rencontré le cas avec un surtitre contenant un appel à une image.

-- RealET

Chouette, donc a priori vous êtes pas contre, on peut tenter de se lancer là-dedans ?
Ce que j’avais pensé :

  1. Une page de configuration où l’on choisit les objets sur lesquels on veut permettre la gestion de docs joints.
  2. Pour les objets sélectionnés, on liste les champs qui subissent |propre(), éventuellement cochés par défaut.
  3. On valide, et à ce moment, on boucle la fonction sur l’ensemble des objets pour vérifier qu’ils n’ont pas déjà des docs dans les champs non liés à l’objet. C’est peut être un traitement un peu lourd, alors on pourrait procéder objet par objet, l’utilisateur choississant les objets à vérifier ?
  4. Et ça roule, gestdoc gère déjà le reste (enfin, d’après mon hack en rajoutant descriptif à chapo et texte dans inc_marquer_doublons_doc_dist, j’ai bien la gestion des docs pour agenda 2 ou le champs descriptif des articles).
  5. A la désinstallation, on propose de supprimer les liens de l’objet avec les documents.

Ah oui, pour gestdoc il y a aussi le tableau des objets sélectionnés à rajouter au pipeline affiche_gauche :

function gestdoc_affiche_gauche($flux){

if (in_array($flux[‹ args ›][‹ exec ›],array(‹ articles_edit ›,‹ breves_edit ›,‹ rubriques_edit ›))

Il faudrait que le tableau contienne les objets sélectionnés $objet.‹ _edit ›.

Mais comment surcharger inc_marquer_doublons_doc_dist de médiathèque dans ce qui pourrait être ce sous-plugin de médiathèque ?
Faut-il que ce soit un sous-plugin ou pourrait-on l’intégrer à médiathèque avec par défaut la configuration ‹ articles_edit ›,‹ breves_edit ›,‹ rubriques_edit › et chapo+texte

Le 23 avril 2010 10:44, Fil <fil@rezo.net> a écrit :

ne devraient-ils pas chercher dans tous les champs de
type « text » d’un objet et pas seuleument dans le descriptif ou dans le chapo ?

en bonne logique ça devrait être la liste des éléments qui subissent |propre().
C’est codé en dur parce que fait à un moment où on n’avait pas pensé à
l’extensibilité

– Fil

J'ai moi aussi rencontré le cas avec un surtitre contenant un appel à une
image.

/me se demande la pertinence d'une image (ou autres
fioritures/décorations) dans un (sur|sous)-titre :S

Une page de configuration où l'on choisit les objets sur lesquels on veut
permettre la gestion de docs joints.

Euh, tous ?

Pour les objets sélectionnés, on liste les champs qui subissent |propre(),
éventuellement cochés par défaut.

non ça c'est une donnée du compilateur, pas une série de cases à
cocher. A moins que tu envisages en amont de paramétrer le compilateur
avec des cases à cocher, bien sûr.

-- Fil

* Gildas Cotomale tapuscrivait, le 23/04/2010 11:15:

J'ai moi aussi rencontré le cas avec un surtitre contenant un appel à une
image.

/me se demande la pertinence d'une image (ou autres
fioritures/décorations) dans un (sur|sous)-titre :S

/me se demande ce qui devrait l'interdire. Après tout, une image est un caractère comme un autre.

-- RealET

Le 23 avril 2010 11:30, Fil <fil@rezo.net> a écrit :

Une page de configuration où l’on choisit les objets sur lesquels on veut
permettre la gestion de docs joints.

Euh, tous ?

Comment choisir à l’avance ceux qui nous intéressent ? Qu’est-ce qui peut définir qu’un nouvel objet a un potentiel éditorial (je pensais à agenda - grappes pour mon propre usage, mais peut être généraliser à tout nouvel objet est intéressant) par contre, ça risque pas de faire des bugs de jointures si on lie des documents à des documents (même table…) ? Peut être interdire cet objet ?

Pour les objets sélectionnés, on liste les champs qui subissent |propre(),
éventuellement cochés par défaut.

non ça c’est une donnée du compilateur, pas une série de cases à
cocher. A moins que tu envisages en amont de paramétrer le compilateur
avec des cases à cocher, bien sûr.

Euh, oui, non, en fait, les noms des champs sur les plugins sont finalement assez standardisés, peut être rajouter simplement une liste de champs plus complète que texte et chapo alors ? En reprenant l’exemple agenda et grappes, c’est descriptif.

Pour les champs qui ne sont pas en textearea dans la présentation, je trouve que ça a peu d’intérêts et ça ferait beaucoup de configuration pour peu d’usage.
Je rappelle que l’objectif est de lier les docs à l’objet dans spip_documents_liens, et c’est tout…

– Fil

Le 23 avril 2010 11:10, Guy Cesaro <guy.cesaro@gmail.com> a écrit :

Chouette, donc a priori vous êtes pas contre, on peut tenter de se lancer
là-dedans ?
Ce que j'avais pensé :

Une page de configuration où l'on choisit les objets sur lesquels on veut
permettre la gestion de docs joints.

non pour moi il faut une API sur laquelle se branchent les plugins. Si
le plugin qui ajoute un objet editorial ne permet pas la gestion des
documents joins, cela n'a pas d'intérêt de gerer ça ici.

Pour les objets sélectionnés, on liste les champs qui subissent |propre(),
éventuellement cochés par défaut.

Non, automatiquement à partir de la $table_des_traitements, ainsi que
le propose fil

On valide, et à ce moment, on boucle la fonction sur l'ensemble des objets
pour vérifier qu'ils n'ont pas déjà des docs dans les champs non liés à
l'objet. C'est peut être un traitement un peu lourd, alors on pourrait
procéder objet par objet, l'utilisateur choississant les objets à vérifier ?
Et ça roule, gestdoc gère déjà le reste (enfin, d'après mon hack en
rajoutant descriptif à chapo et texte dans inc_marquer_doublons_doc_dist,
j'ai bien la gestion des docs pour agenda 2 ou le champs descriptif des
articles).
A la désinstallation, on propose de supprimer les liens de l'objet avec les
documents.

Ah oui, pour gestdoc il y a aussi le tableau des objets sélectionnés à
rajouter au pipeline affiche_gauche :
function gestdoc_affiche_gauche($flux){

if

(in_array($flux['args']['exec'],array('articles_edit','breves_edit','rubriques_edit'))
Il faudrait que le tableau contienne les objets sélectionnés $objet.'_edit'.

Non, encore une fois, il faut une API sur laquelle les plugins peuvent
se brancher pour dire "he, moi coco je gere les documents, affiche moi
l'interface sur telle page et regarde mes doublons"

Mais comment surcharger inc_marquer_doublons_doc_dist de médiathèque dans ce
qui pourrait être ce sous-plugin de médiathèque ?

Pas de sous plugin à faire : une API dans la mediatheque, et un
enrichissement des plugins qui ajoutent du contenu qui peut etre lié
aux documents.

Cédric,
API

Le 23 avr. 2010 à 10:33, Cédric Morin a écrit :

On peut envisager de faire évoluer la fonction pour la rendre
extensible et généralisable mais il faut veiller à ne pas casser la
retro-compatibilité.

Excellente idée !

J'avais lancé il y a déjà pas mal de temps le plugin « liens_contenus »—aka « Liens inter-contenus »—avec l'idée de référencer justement dans une unique table tous les liens entre contenus SPIP, pas uniquement les documents.

La fonction "lienscontenus_referencer_liens()" est ainsi lancée à chaque modification d'un contenu, et analyse ce contenu pour trouver les éventuels liens [...->...] et appels de modèles <...|...>, dont les documents et images :

L'idée du plugin n'est pas simplement de référencer tous ces liens bien sûr, mais surtout d'éviter des erreurs pénibles et pour lesquelles SPIP n'alerte malheureusement pas nativement, comme retirer du site un article vers lequel pointe un autre article publié...

-Nicolas

--
Nicolas HOIZEY

Imgur

@nicolas
Très intéressant ce liens_contenus ! Je l’avais pas vu…
quelques questions :
C’est pas un peu lourd comme traitement sur une base bien garnie ?
Pour la suppression, gestdoc le fait déjà pour les docs et images non ? Enfin, à partir du moment où c’est dans spip_documents_liens.

@tous
Je ne mesure certainement tous les aspects de la chose et leurs implications, mais ça semble assez simple d’adapter gestdoc en partant de ce qu’il est actuellement. En modifiant très légèrement ces fonctions :

  • gestdoc_affiche_gauche
  • inc_marquer_doublons_docs
  • lien_objet

Il peut se greffer sur de nouveaux objets tant qu’ils ont un exec $objets_edit.

Après, je me base sur ma petite adaptation à moi pour un truc bien spécifique. Mais je vois pas trop les pièges ? Me gourreraige ?

Du côté d’un plugin objet, cédric et fil suggèrent que c’est le plugin qui doit dire ou pas s’il veut gérer des documents et appeler gestdoc. Pourtant, dans le spip/configuration du site/documents joints, on peut choisir et je trouve ça chouette.
Il faudrait que chaque plugin ‹ objet › demande à disposer de la fonctionnalité, au risque que l’auteur du plugin l’impose / ne le propose pas du tout, mais ne propose pas de choisir ?

Je trouve ça un peu dommage dans le sens où ça fonctionne directement avec 3 modifs sur de nombreux plugins, même s’ils ne sont pas prévus pour. C’est pour ça que je pensais à une partie configuration, où l’on choisirait les objets.

En tout cas, pour que l’idée, les remarques et suggestions ne soient pas perdues, je fais une page dans carnet_plugins de contrib où il y en a déjà une où ça rentrerait ?

Le 27 avril 2010 13:43, Nicolas Hoizey <nicolas@hoizey.com> a écrit :

Le 23 avr. 2010 à 10:33, Cédric Morin a écrit :

On peut envisager de faire évoluer la fonction pour la rendre
extensible et généralisable mais il faut veiller à ne pas casser la
retro-compatibilité.

Excellente idée !

J’avais lancé il y a déjà pas mal de temps le plugin « liens_contenus »—aka « Liens inter-contenus »—avec l’idée de référencer justement dans une unique table tous les liens entre contenus SPIP, pas uniquement les documents.

La fonction « lienscontenus_referencer_liens() » est ainsi lancée à chaque modification d’un contenu, et analyse ce contenu pour trouver les éventuels liens […->…] et appels de modèles <…|…>, dont les documents et images :
http://zone.spip.org/trac/spip-zone/browser/plugins/liens_contenus/trunk/inc/lienscontenus.php#L2

L’idée du plugin n’est pas simplement de référencer tous ces liens bien sûr, mais surtout d’éviter des erreurs pénibles et pour lesquelles SPIP n’alerte malheureusement pas nativement, comme retirer du site un article vers lequel pointe un autre article publié…

-Nicolas


Nicolas HOIZEY
http://www.gasteroprod.com/
http://flic.kr/nicolas-hoizey/

Le 28 avr. 2010 à 16:16, Guy Cesaro a écrit :

@nicolas
Très intéressant ce liens_contenus ! Je l’avais pas vu…
quelques questions :
C’est pas un peu lourd comme traitement sur une base bien garnie ?

C’est juste lors des modifications, contenu par contenu.

Pour la suppression, gestdoc le fait déjà pour les docs et images non ? Enfin, à partir du moment où c’est dans spip_documents_liens.

A priori oui, mais liens_contenus existait bien avant… Je ne crois pas qu’une fusion des deux soit possible, faudrait voir si liens_contenus peut s’appuyer directement sur gestdoc pour la partie documents, plutôt que réinventer la roue.

@tous
Je ne mesure certainement tous les aspects de la chose et leurs implications, mais ça semble assez simple d’adapter gestdoc en partant de ce qu’il est actuellement. En modifiant très légèrement ces fonctions :

  • gestdoc_affiche_gauche
  • inc_marquer_doublons_docs
  • lien_objet

Il peut se greffer sur de nouveaux objets tant qu’ils ont un exec $objets_edit.

Après, je me base sur ma petite adaptation à moi pour un truc bien spécifique. Mais je vois pas trop les pièges ? Me gourreraige ?

Du côté d’un plugin objet, cédric et fil suggèrent que c’est le plugin qui doit dire ou pas s’il veut gérer des documents et appeler gestdoc. Pourtant, dans le spip/configuration du site/documents joints, on peut choisir et je trouve ça chouette.
Il faudrait que chaque plugin ‹ objet › demande à disposer de la fonctionnalité, au risque que l’auteur du plugin l’impose / ne le propose pas du tout, mais ne propose pas de choisir ?

Je trouve ça un peu dommage dans le sens où ça fonctionne directement avec 3 modifs sur de nombreux plugins, même s’ils ne sont pas prévus pour. C’est pour ça que je pensais à une partie configuration, où l’on choisirait les objets.

En tout cas, pour que l’idée, les remarques et suggestions ne soient pas perdues, je fais une page dans carnet_plugins de contrib où il y en a déjà une où ça rentrerait ?

Le 27 avril 2010 13:43, Nicolas Hoizey <nicolas@hoizey.com> a écrit :

Le 23 avr. 2010 à 10:33, Cédric Morin a écrit :

On peut envisager de faire évoluer la fonction pour la rendre
extensible et généralisable mais il faut veiller à ne pas casser la
retro-compatibilité.

Excellente idée !

J’avais lancé il y a déjà pas mal de temps le plugin « liens_contenus »—aka « Liens inter-contenus »—avec l’idée de référencer justement dans une unique table tous les liens entre contenus SPIP, pas uniquement les documents.

La fonction « lienscontenus_referencer_liens() » est ainsi lancée à chaque modification d’un contenu, et analyse ce contenu pour trouver les éventuels liens […->…] et appels de modèles <…|…>, dont les documents et images :
http://zone.spip.org/trac/spip-zone/browser/plugins/liens_contenus/trunk/inc/lienscontenus.php#L2

L’idée du plugin n’est pas simplement de référencer tous ces liens bien sûr, mais surtout d’éviter des erreurs pénibles et pour lesquelles SPIP n’alerte malheureusement pas nativement, comme retirer du site un article vers lequel pointe un autre article publié…

-Nicolas


Nicolas HOIZEY
http://www.gasteroprod.com/
http://flic.kr/nicolas-hoizey/

-Nicolas


Nicolas HOIZEY
http://www.gasteroprod.com/
http://flic.kr/nicolas-hoizey/