[SPIP] +2.1.12
[velocampus/web/www.git] / www / ecrire / inc / drapeau_edition.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2011 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 if (!defined('_ECRIRE_INC_VERSION')) return;
14
15 // Drapeau d'edition : on regarde qui a ouvert quel article en edition,
16 // et on le signale aux autres redacteurs pour eviter de se marcher sur
17 // les pieds
18
19 // Le format est une meta drapeau_edition qui contient un tableau
20 // serialise id_article => (id_auteur_modif, date_modif)
21
22 // a chaque mise a jour de ce tableau on oublie les enregistrements datant
23 // de plus d'une heure
24
25 // Attention ce n'est pas un verrou "bloquant", juste un drapeau qui signale
26 // que l'on bosse sur un article ; les autres peuvent passer outre
27 // (en cas de communication orale c'est plus pratique)
28
29
30 // http://doc.spip.org/@lire_tableau_edition
31 function lire_tableau_edition () {
32 $edition = @unserialize($GLOBALS['meta']['drapeau_edition']);
33 if (!$edition) return array();
34 $changed = false;
35
36 $bon_pour_le_service = time()-3600;
37 // parcourir le tableau et virer les vieux
38 foreach ($edition as $objet => $data) {
39 if (!is_array($data))
40 unset ($edition[$objet]); // vieille version
41 else foreach ($data as $id => $tab) {
42 if (!is_array($tab))
43 unset ($edition[$objet][$tab]); // vieille version
44 else foreach ($tab as $n => $duo) {
45 if (current($duo) < $bon_pour_le_service) {
46 unset($edition[$objet][$id][$n]);
47 $changed = true;
48 }
49 }
50 if (!$edition[$objet][$id])
51 unset($edition[$objet][$id]);
52 }
53 if (!$edition[$objet])
54 unset($edition[$objet]);
55 }
56
57 if ($changed)
58 ecrire_tableau_edition($edition);
59
60 return $edition;
61 }
62
63 // http://doc.spip.org/@ecrire_tableau_edition
64 function ecrire_tableau_edition($edition) {
65 ecrire_meta('drapeau_edition', serialize($edition));
66 }
67
68 // J'edite tel objet
69 // http://doc.spip.org/@signale_edition
70 function signale_edition ($id, $auteur, $type='article') {
71 $edition = lire_tableau_edition();
72 if ($id_a = $auteur['id_auteur'])
73 $nom = $auteur['nom'];
74 else
75 $nom = $id_a = $GLOBALS['ip'];
76 if (!is_array($edition[$type][$id]))
77 $edition[$type][$id] = array();
78 $edition[$type][$id][$id_a][$nom] = time();
79 ecrire_tableau_edition($edition);
80 }
81
82 // Qui edite mon objet ?
83 // http://doc.spip.org/@qui_edite
84 function qui_edite ($id, $type='article') {
85
86 $edition = lire_tableau_edition();
87
88 return $edition ? $edition[$type][$id] : array();
89 }
90
91 // http://doc.spip.org/@mention_qui_edite
92 function mention_qui_edite ($id, $type='article') {
93 $modif = qui_edite($id, $type);
94 unset($modif[$GLOBALS['visiteur_session']['id_auteur']]);
95
96 if ($modif) {
97 $quand = 0;
98 foreach ($modif as $duo) {
99 $auteurs[] = typo(key($duo));
100 $quand = max($quand, current($duo));
101 }
102 // format lie a la chaine de langue 'avis_article_modifie'
103 return array(
104 'nom_auteur_modif' => join(' | ', $auteurs),
105 'date_diff' => ceil((time()-$quand) / 60)
106 );
107 }
108 }
109
110 // Quels sont les articles en cours d'edition par X ?
111 // http://doc.spip.org/@liste_drapeau_edition
112 function liste_drapeau_edition ($id_auteur, $type = 'article') {
113 $edition = lire_tableau_edition();
114 $articles_ouverts = array();
115
116 foreach ($edition as $objet => $data)
117 if ($objet == 'article')
118 foreach ($data as $id => $auteurs)
119 {
120 if (isset($auteurs[$id_auteur])
121 AND (array_pop($auteurs[$id_auteur]) > time()-3600)) {
122 $row = sql_fetsel("titre, statut", "spip_articles", "id_article=".$id);
123 $articles_ouverts[] = array(
124 'id_article' => $id,
125 'titre' => typo($row['titre']),
126 'statut' => typo($row['statut'])
127 );
128 }
129 }
130 return $articles_ouverts;
131 }
132
133 // Quand l'auteur veut liberer tous ses articles
134 // http://doc.spip.org/@debloquer_tous
135 function debloquer_tous($id_auteur) {
136 $edition = lire_tableau_edition();
137 foreach ($edition as $objet => $data)
138 if ($objet == 'article')
139 foreach ($data as $id => $auteurs)
140 {
141 if (isset($auteurs[$id_auteur])) {
142 unset ($edition[$objet][$id][$id_auteur]);
143 ecrire_tableau_edition($edition);
144 }
145 }
146 }
147
148 // quand l'auteur libere un article precis
149 // http://doc.spip.org/@debloquer_edition
150 function debloquer_edition($id_auteur, $debloquer_article, $type='article') {
151 $edition = lire_tableau_edition();
152
153 foreach ($edition as $objet => $data)
154 if ($objet == $type)
155 foreach ($data as $id => $auteurs)
156 {
157 if ($id == $debloquer_article
158 AND isset($auteurs[$id_auteur])) {
159 unset ($edition[$objet][$id][$id_auteur]);
160 ecrire_tableau_edition($edition);
161 }
162 }
163 }
164
165
166 ?>