[spip-dev] Actualisation ecrire/inc/drapeau_edition.php

Salut,

je propose quelques modifications pour le fichier
ecrire/inc/drapeau_edition.php, je sais pas si qqn peut me donner son avis:
* la doc est un peu desactualisée
* quelques fonctions fonctionnent seulement avec les articles, alors qu'il est
possible qu'elles fonctionnent pour tous les objets editoriaux.

Pour la fonction liste_drapeau_edition, je pense qu'elle est trop spécifique aux
articles, alors je l'ai laissée telle quelle...

************* update_drapeau_edition.patch *************
--- ecrire/inc/drapeau_edition.php 2011-02-17 10:31:42.000000000 -0400
+++ ecrire/inc/drapeau_edition.php.new 2011-02-17 10:46:10.000000000 -0400
@@ -12,18 +12,19 @@

if (!defined('_ECRIRE_INC_VERSION')) return;

-// Drapeau d'edition : on regarde qui a ouvert quel article en edition,
-// et on le signale aux autres redacteurs pour eviter de se marcher sur
-// les pieds
+// Drapeau d'edition : on regarde qui a ouvert quel objet editorial en
+// edition, et on le signale aux autres redacteurs pour eviter de se marcher
+// sur les pieds

// Le format est une meta drapeau_edition qui contient un tableau
-// serialise id_article => (id_auteur_modif, date_modif)
+// serialise
+// type_objet => (id_objet => (id_auteur => (nom_auteur => (date_modif))))

// a chaque mise a jour de ce tableau on oublie les enregistrements datant
// de plus d'une heure

// Attention ce n'est pas un verrou "bloquant", juste un drapeau qui signale
-// que l'on bosse sur un article ; les autres peuvent passer outre
+// que l'on bosse sur cet objet editorial ; les autres peuvent passer outre
// (en cas de communication orale c'est plus pratique)

@@ -130,12 +131,12 @@
   return $articles_ouverts;
}

-// Quand l'auteur veut liberer tous ses articles
+// Quand l'auteur veut liberer tous ses objets d'un type donné
// http://doc.spip.org/@debloquer_tous
-function debloquer_tous($id_auteur) {
+function debloquer_tous($id_auteur, $type='article') {
   $edition = lire_tableau_edition();
   foreach ($edition as $objet => $data)
- if ($objet == 'article')
+ if ($objet == $type)
   foreach ($data as $id => $auteurs)
   {
     if (isset($auteurs[$id_auteur])) {
@@ -145,16 +146,16 @@
   }
}

-// quand l'auteur libere un article precis
+// quand l'auteur libere un objet precis
// http://doc.spip.org/@debloquer_edition
-function debloquer_edition($id_auteur, $debloquer_article, $type='article') {
+function debloquer_edition($id_auteur, $id_objet, $type='article') {
   $edition = lire_tableau_edition();

   foreach ($edition as $objet => $data)
   if ($objet == $type)
   foreach ($data as $id => $auteurs)
   {
- if ($id == $debloquer_article
+ if ($id == $id_objet
     AND isset($auteurs[$id_auteur])) {
       unset ($edition[$objet][$id][$id_auteur]);
       ecrire_tableau_edition($edition);
************* update_drapeau_edition.patch *************

Severo

je propose quelques modifications pour le fichier
ecrire/inc/drapeau_edition.php, je sais pas si qqn peut me donner son avis:
* la doc est un peu desactualisée
* quelques fonctions fonctionnent seulement avec les articles, alors qu'il est
possible qu'elles fonctionnent pour tous les objets editoriaux.

Pour la fonction liste_drapeau_edition, je pense qu'elle est trop spécifique aux
articles, alors je l'ai laissée telle quelle...

Ca paraît pas mal, mais je ne suis pas d'accord avec ton dernier point
: quand on veut "tout débloquer" on va pas finasser par type d'objet.
J'afficherais donc tous les objets dans la liste des objets en cours
d'édition, et le bouton "tout débloquer" les débloquerait tous,
indépendamment de leur type.

-- Fil

Ma foi, pas d'objection pour la -dev ; c'est le moment !

gogogo

Cédric

qqn va commiter ? moi je peux pas, je pense.

pour la fonction liste_drapeau_edition, j'imagine que ca aura des repercutions
si on change le contenu... J'ai pas vérifié où, mais peut être qu'il faut faire
une autre fonction pour lister tous les objets.

qqn va commiter ? moi je peux pas, je pense.

tu peux faire ça dans une extension sur la zone ici

tu créé juste un plugin 'drapeau' avec un plugin.xml et un dossier inc/ et ton fichier drapeau_edition
ainsi qu'un fonction
liste_objets_bloques()
pour remplacer le
liste_articles_bloques() de
http://core.spip.org/projects/spip/repository/entry/spip/ecrire/inc/presentation_mini.php#L108

Ensuite il suffira de se brancher dessus pour tester et fignoler

pour la fonction liste_drapeau_edition, j'imagine que ca aura des repercutions
si on change le contenu... J'ai pas vérifié où, mais peut être qu'il faut faire
une autre fonction pour lister tous les objets.

oui il faut faire un squelette générique qui utilise objet et #INFO_TITRE

Cédric

pour la fonction liste_drapeau_edition, j'imagine que ca aura des repercutions
si on change le contenu... J'ai pas vérifié où, mais peut être qu'il faut faire
une autre fonction pour lister tous les objets.

c'est utilisé dans la marge de l'espace privé pour afficher ce qui est
en cours d'édition ; pas de problème donc... en revanche je crois
qu'il va falloir aussi indiquer "attention Machin a modifié cette
rubrique" etc. au-dessus de chaque objet éditorial concerné

-- Fil

Ah mais ça c'est déjà codé dans tous les objets en squelette, via la fonction
afficher_qui_edite($id_objet,$objet)
http://core.spip.org/projects/spip/repository/entry/spip/ecrire/inc/filtres_ecrire.php#L230

Mais il reste a traiter

  // TODO -- _L("Fil a travaille sur cet objet il y a x minutes")
  return $qui[$objet][$id_objet] = _T('texte_travail_article', $modif);

Cela dit c'est pile poil dans ce que je suis en train de faire.
Donc je finis, et j'envoie un recap documentaire sur le pipeline declarer_tables_objets_sql

Cédric

Je viens de créer le plugin...

http://zone.spip.org/trac/spip-zone/browser/core/plugins/drapeaux