accueil: correction d'un lien (pour Gustavo)
[aidenligne_francais_universite.git] / ecrire / inc / drapeau_edition.php
CommitLineData
c495c100
P
1<?php
2
3/***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2007 *
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
13if (!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
31function 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
64function ecrire_tableau_edition($edition) {
65 include_spip('inc/meta');
66 ecrire_meta('drapeau_edition', serialize($edition));
67 ecrire_metas();
68}
69
70// J'edite tel objet
71// http://doc.spip.org/@signale_edition
72function signale_edition ($id, $auteur, $type='article') {
73 $edition = lire_tableau_edition();
74 if ($id_a = $auteur['id_auteur'])
75 $nom = $auteur['nom'];
76 else
77 $nom = $id_a = $GLOBALS['ip'];
78 if (!is_array($edition[$type][$id]))
79 $edition[$type][$id] = array();
80 $edition[$type][$id][$id_a][$nom] = time();
81 ecrire_tableau_edition($edition);
82}
83
84// Qui edite mon objet ?
85// http://doc.spip.org/@qui_edite
86function qui_edite ($id, $type='article') {
87
88 $edition = lire_tableau_edition();
89
90 return $edition[$type][$id];
91}
92
93// http://doc.spip.org/@mention_qui_edite
94function mention_qui_edite ($id, $type='article') {
95 $modif = qui_edite($id, $type);
96 unset($modif[$GLOBALS['auteur_session']['id_auteur']]);
97
98 if ($modif) {
99 $quand = 0;
100 foreach ($modif as $duo) {
101 $auteurs[] = typo(extraire_multi(key($duo)));
102 $quand = max($quand, current($duo));
103 }
104 // format lie a la chaine de langue 'avis_article_modifie'
105 return array(
106 'nom_auteur_modif' => join(' | ', $auteurs),
107 'date_diff' => ceil((time()-$quand) / 60)
108 );
109 }
110}
111
112// Quels sont les articles en cours d'edition par X ?
113// http://doc.spip.org/@liste_drapeau_edition
114function liste_drapeau_edition ($id_auteur, $type = 'article') {
115 $edition = lire_tableau_edition();
116 $articles_ouverts = array();
117
118 foreach ($edition as $objet => $data)
119 if ($objet == 'article')
120 foreach ($data as $id => $auteurs)
121 {
122 if (isset($auteurs[$id_auteur])
123 AND (array_pop($auteurs[$id_auteur]) > time()-3600)) {
124 $row = spip_fetch_array(spip_query(
125 "SELECT titre, statut FROM spip_articles WHERE id_article=".$id
126 ));
127 $articles_ouverts[] = array(
128 'id_article' => $id,
129 'titre' => typo($row['titre']),
130 'statut' => typo($row['statut'])
131 );
132 }
133 }
134 return $articles_ouverts;
135}
136
137// Quand l'auteur veut liberer tous ses articles
138// http://doc.spip.org/@debloquer_tous
139function debloquer_tous($id_auteur) {
140 $edition = lire_tableau_edition();
141 foreach ($edition as $objet => $data)
142 if ($objet == 'article')
143 foreach ($data as $id => $auteurs)
144 {
145 if (isset($auteurs[$id_auteur])) {
146 unset ($edition[$objet][$id][$id_auteur]);
147 ecrire_tableau_edition($edition);
148 }
149 }
150}
151
152// quand l'auteur libere un article precis
153// http://doc.spip.org/@debloquer_edition
154function debloquer_edition($id_auteur, $debloquer_article, $type='article') {
155 $edition = lire_tableau_edition();
156
157 foreach ($edition as $objet => $data)
158 if ($objet == $type)
159 foreach ($data as $id => $auteurs)
160 {
161 if ($id == $debloquer_article
162 AND isset($auteurs[$id_auteur])) {
163 unset ($edition[$objet][$id][$id_auteur]);
164 ecrire_tableau_edition($edition);
165 }
166 }
167}
168
169
170?>