PageRenderTime 50ms CodeModel.GetById 24ms RepoModel.GetById 1ms app.codeStats 0ms

/spip/ecrire/inc/drapeau_edition.php

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