X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fecrire%2Finc%2Fdrapeau_edition.php;fp=www%2Fecrire%2Finc%2Fdrapeau_edition.php;h=9682f39b8a74269dcbda2f0e9f3f504ea8c486a1;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c diff --git a/www/ecrire/inc/drapeau_edition.php b/www/ecrire/inc/drapeau_edition.php new file mode 100644 index 0000000..9682f39 --- /dev/null +++ b/www/ecrire/inc/drapeau_edition.php @@ -0,0 +1,166 @@ + (id_auteur_modif, 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 +// (en cas de communication orale c'est plus pratique) + + +// http://doc.spip.org/@lire_tableau_edition +function lire_tableau_edition () { + $edition = @unserialize($GLOBALS['meta']['drapeau_edition']); + if (!$edition) return array(); + $changed = false; + + $bon_pour_le_service = time()-3600; + // parcourir le tableau et virer les vieux + foreach ($edition as $objet => $data) { + if (!is_array($data)) + unset ($edition[$objet]); // vieille version + else foreach ($data as $id => $tab) { + if (!is_array($tab)) + unset ($edition[$objet][$tab]); // vieille version + else foreach ($tab as $n => $duo) { + if (current($duo) < $bon_pour_le_service) { + unset($edition[$objet][$id][$n]); + $changed = true; + } + } + if (!$edition[$objet][$id]) + unset($edition[$objet][$id]); + } + if (!$edition[$objet]) + unset($edition[$objet]); + } + + if ($changed) + ecrire_tableau_edition($edition); + + return $edition; +} + +// http://doc.spip.org/@ecrire_tableau_edition +function ecrire_tableau_edition($edition) { + ecrire_meta('drapeau_edition', serialize($edition)); +} + +// J'edite tel objet +// http://doc.spip.org/@signale_edition +function signale_edition ($id, $auteur, $type='article') { + $edition = lire_tableau_edition(); + if ($id_a = $auteur['id_auteur']) + $nom = $auteur['nom']; + else + $nom = $id_a = $GLOBALS['ip']; + if (!is_array($edition[$type][$id])) + $edition[$type][$id] = array(); + $edition[$type][$id][$id_a][$nom] = time(); + ecrire_tableau_edition($edition); +} + +// Qui edite mon objet ? +// http://doc.spip.org/@qui_edite +function qui_edite ($id, $type='article') { + + $edition = lire_tableau_edition(); + + return $edition ? $edition[$type][$id] : array(); +} + +// http://doc.spip.org/@mention_qui_edite +function mention_qui_edite ($id, $type='article') { + $modif = qui_edite($id, $type); + unset($modif[$GLOBALS['visiteur_session']['id_auteur']]); + + if ($modif) { + $quand = 0; + foreach ($modif as $duo) { + $auteurs[] = typo(key($duo)); + $quand = max($quand, current($duo)); + } + // format lie a la chaine de langue 'avis_article_modifie' + return array( + 'nom_auteur_modif' => join(' | ', $auteurs), + 'date_diff' => ceil((time()-$quand) / 60) + ); + } +} + +// Quels sont les articles en cours d'edition par X ? +// http://doc.spip.org/@liste_drapeau_edition +function liste_drapeau_edition ($id_auteur, $type = 'article') { + $edition = lire_tableau_edition(); + $articles_ouverts = array(); + + foreach ($edition as $objet => $data) + if ($objet == 'article') + foreach ($data as $id => $auteurs) + { + if (isset($auteurs[$id_auteur]) + AND (array_pop($auteurs[$id_auteur]) > time()-3600)) { + $row = sql_fetsel("titre, statut", "spip_articles", "id_article=".$id); + $articles_ouverts[] = array( + 'id_article' => $id, + 'titre' => typo($row['titre']), + 'statut' => typo($row['statut']) + ); + } + } + return $articles_ouverts; +} + +// Quand l'auteur veut liberer tous ses articles +// http://doc.spip.org/@debloquer_tous +function debloquer_tous($id_auteur) { + $edition = lire_tableau_edition(); + foreach ($edition as $objet => $data) + if ($objet == 'article') + foreach ($data as $id => $auteurs) + { + if (isset($auteurs[$id_auteur])) { + unset ($edition[$objet][$id][$id_auteur]); + ecrire_tableau_edition($edition); + } + } +} + +// quand l'auteur libere un article precis +// http://doc.spip.org/@debloquer_edition +function debloquer_edition($id_auteur, $debloquer_article, $type='article') { + $edition = lire_tableau_edition(); + + foreach ($edition as $objet => $data) + if ($objet == $type) + foreach ($data as $id => $auteurs) + { + if ($id == $debloquer_article + AND isset($auteurs[$id_auteur])) { + unset ($edition[$objet][$id][$id_auteur]); + ecrire_tableau_edition($edition); + } + } +} + + +?>