/spip/ecrire/inc/drapeau_edition.php
PHP | 166 lines | 107 code | 25 blank | 34 comment | 23 complexity | a04facae6e90732f948d18a6332e7667 MD5 | raw file
Possible License(s): LGPL-2.1, GPL-3.0
- <?php
- /***************************************************************************\
- * SPIP, Systeme de publication pour l'internet *
- * *
- * Copyright (c) 2001-2011 *
- * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
- * *
- * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
- * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
- \***************************************************************************/
- 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
- // Le format est une meta drapeau_edition qui contient un tableau
- // serialise id_article => (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);
- }
- }
- }
- ?>