PageRenderTime 52ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/_core_/tags/spip-3.0.0-alpha1/organiseur/inc/quete_calendrier.php

https://bitbucket.org/pombredanne/spip-zone-treemap
PHP | 279 lines | 196 code | 45 blank | 38 comment | 32 complexity | ef5e7bd3a06354290b726ad47e79aaeb MD5 | raw file
  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. include_spip('inc/filtres');
  13. // http://doc.spip.org/@calendrier_categories
  14. function calendrier_categories($table, $num, $objet)
  15. {
  16. if (function_exists('generer_calendrier_class'))
  17. return generer_calendrier_class($table, $num, $objet);
  18. else {
  19. // cf agenda.css
  20. $num= sql_getfetsel((($objet != 'id_breve') ? 'id_secteur' : 'id_rubrique') . " AS id", $table, "$objet=$num");
  21. return 'calendrier-couleur' . (($num%14)+1);
  22. }
  23. }
  24. // http://doc.spip.org/@quete_calendrier_mois
  25. function quete_calendrier_mois($annee,$mois,$jour) {
  26. $avant = "'" . date("Y-m-d", mktime(0,0,0,$mois,1,$annee)) . "'";
  27. $apres = "'" . date("Y-m-d", mktime(0,0,0,$mois+1,1,$annee)) .
  28. " 00:00:00'";
  29. return array($avant, $apres);
  30. }
  31. // http://doc.spip.org/@quete_calendrier_semaine
  32. function quete_calendrier_semaine($annee,$mois,$jour) {
  33. $w_day = date("w", mktime(0,0,0,$mois, $jour, $annee));
  34. if ($w_day == 0) $w_day = 7; // Gaffe: le dimanche est zero
  35. $debut = $jour-$w_day;
  36. $avant = "'" . date("Y-m-d", mktime(0,0,0,$mois,$debut,$annee)) . "'";
  37. $apres = "'" . date("Y-m-d", mktime(1,1,1,$mois,$debut+7,$annee)) .
  38. " 23:59:59'";
  39. return array($avant, $apres);
  40. }
  41. // ici on prend en fait le jour, la veille et le lendemain
  42. // http://doc.spip.org/@quete_calendrier_jour
  43. function quete_calendrier_jour($annee,$mois,$jour) {
  44. $avant = "'" . date("Y-m-d", mktime(0,0,0,$mois,$jour-1,$annee)) . "'";
  45. $apres = "'" . date("Y-m-d", mktime(1,1,1,$mois,$jour+1,$annee)) .
  46. " 23:59:59'";
  47. return array($avant, $apres);
  48. }
  49. // retourne un tableau de 2 tableaux indexes par des dates
  50. // - le premier indique les evenements du jour, sans indication de duree
  51. // - le deuxime indique les evenements commencant ce jour, avec indication de duree
  52. // http://doc.spip.org/@quete_calendrier_interval
  53. function quete_calendrier_interval($limites) {
  54. include_spip('inc/urls');
  55. list($avant, $apres) = $limites;
  56. $evt = array();
  57. quete_calendrier_interval_articles($avant, $apres, $evt);
  58. quete_calendrier_interval_breves($avant, $apres, $evt);
  59. quete_calendrier_interval_rubriques($avant, $apres, $evt);
  60. return array($evt, quete_calendrier_interval_rv($avant, $apres));
  61. }
  62. // http://doc.spip.org/@quete_calendrier_interval_forums
  63. function quete_calendrier_interval_forums($limites, &$evenements) {
  64. list($avant, $apres) = $limites;
  65. $result=sql_select("DISTINCT titre, date_heure, id_forum", "spip_forum", "date_heure >= $avant AND date_heure < $apres", '', "date_heure");
  66. while($row=sql_fetch($result)){
  67. $amj = date_anneemoisjour($row['date_heure']);
  68. $id = $row['id_forum'];
  69. if (autoriser('voir','forum',$id))
  70. $evenements[$amj][]=
  71. array(
  72. 'URL' => generer_url_entite($id, 'forum'),
  73. 'CATEGORIES' => 'calendrier-couleur7',
  74. 'SUMMARY' => $row['titre'],
  75. 'DTSTART' => date_ical($row['date_heure']));
  76. }
  77. }
  78. # 3 fonctions retournant les evenements d'une periode
  79. # le tableau retourne est indexe par les balises du format ics
  80. # afin qu'il soit facile de produire de tels documents.
  81. # L'URL de chacun de ces evenements est celle de l'espace prive
  82. # pour faciliter la navigation, ce qu'on obtient utilisant
  83. # le 4e argument des fonctions generer_url_ecrire_$table
  84. // http://doc.spip.org/@quete_calendrier_interval_articles
  85. function quete_calendrier_interval_articles($avant, $apres, &$evenements) {
  86. $result=sql_select('id_article, titre, date, descriptif, chapo, lang', 'spip_articles', "statut='publie' AND date >= $avant AND date < $apres", '', "date");
  87. if ($GLOBALS['meta']['multi_articles'] == 'oui') {
  88. include_spip('inc/lang_liste');
  89. $langues = $GLOBALS['codes_langues'];
  90. } else $langues = array();
  91. while($row=sql_fetch($result)){
  92. $amj = date_anneemoisjour($row['date']);
  93. $id = $row['id_article'];
  94. if (autoriser('voir','article',$id))
  95. $evenements[$amj][]=
  96. array(
  97. 'CATEGORIES' => calendrier_categories('spip_articles', $id, 'id_article'),
  98. 'DESCRIPTION' => $row['descriptif'] ? $row['descriptif'] : $langues[$row['lang']],
  99. 'SUMMARY' => $row['titre'],
  100. 'URL' => generer_url_ecrire_objet('article',$id, '','','prop'));
  101. }
  102. }
  103. // http://doc.spip.org/@quete_calendrier_interval_rubriques
  104. function quete_calendrier_interval_rubriques($avant, $apres, &$evenements) {
  105. $result=sql_select('DISTINCT R.id_rubrique, titre, descriptif, date', 'spip_rubriques AS R, spip_documents_liens AS L', "statut='publie' AND date >= $avant AND date < $apres AND R.id_rubrique = L.id_objet AND L.objet='rubrique'",'', "date");
  106. while($row=sql_fetch($result)){
  107. $amj = date_anneemoisjour($row['date']);
  108. $id = $row['id_rubrique'];
  109. if (autoriser('voir','rubrique',$id))
  110. $evenements[$amj][]=
  111. array(
  112. 'CATEGORIES' => calendrier_categories('spip_rubriques', $id, 'id_rubrique'),
  113. 'DESCRIPTION' => $row['descriptif'],
  114. 'SUMMARY' => $row['titre'],
  115. 'URL' => generer_url_ecrire_objet('rubrique',$id, '','', 'prop'));
  116. }
  117. }
  118. // http://doc.spip.org/@quete_calendrier_interval_breves
  119. function quete_calendrier_interval_breves($avant, $apres, &$evenements) {
  120. $result=sql_select("id_breve, titre, date_heure, id_rubrique", 'spip_breves', "statut='publie' AND date_heure >= $avant AND date_heure < $apres", '', "date_heure");
  121. while($row=sql_fetch($result)){
  122. $amj = date_anneemoisjour($row['date_heure']);
  123. $id = $row['id_breve'];
  124. $ir = $row['id_rubrique'];
  125. if (autoriser('voir','breve',$id))
  126. $evenements[$amj][]=
  127. array(
  128. 'URL' => generer_url_ecrire_objet('breve',$id, '','', 'prop'),
  129. 'CATEGORIES' => calendrier_categories('spip_breves', $ir, 'id_breve'),
  130. 'SUMMARY' => $row['titre']);
  131. }
  132. }
  133. // http://doc.spip.org/@quete_calendrier_interval_rv
  134. function quete_calendrier_interval_rv($avant, $apres) {
  135. global $connect_id_auteur;
  136. $evenements= array();
  137. if (!$connect_id_auteur) return $evenements;
  138. $result=sql_select("M.id_message, M.titre, M.texte, M.date_heure, M.date_fin, M.type", "spip_messages AS M LEFT JOIN spip_auteurs_liens AS L ON (L.objet='message' AND L.id_objet=M.id_message)", "(L.id_auteur=$connect_id_auteur OR M.type='affich') AND M.rv='oui' AND ((M.date_fin >= $avant OR M.date_heure >= $avant) AND M.date_heure <= $apres) AND M.statut='publie'", "M.id_message", "M.date_heure");
  139. while($row=sql_fetch($result)){
  140. $date_heure=$row["date_heure"];
  141. $date_fin=$row["date_fin"];
  142. $type=$row["type"];
  143. $id_message=$row['id_message'];
  144. if ($type=="pb")
  145. $cat = 'calendrier-couleur2';
  146. else {
  147. if ($type=="affich")
  148. $cat = 'calendrier-couleur4';
  149. else {
  150. if ($type!="normal")
  151. $cat = 'calendrier-couleur12';
  152. else {
  153. $cat = 'calendrier-couleur9';
  154. $auteurs = array_map('array_shift', sql_allfetsel("nom", "spip_auteurs AS A LEFT JOIN spip_auteurs_liens AS L ON L.id_auteur=A.id_auteur", "(L.objet='message' AND L.id_objet=$id_message AND (A.id_auteur!=$connect_id_auteur))"));
  155. }
  156. }
  157. }
  158. $jour_avant = substr($avant, 9,2);
  159. $mois_avant = substr($avant, 6,2);
  160. $annee_avant = substr($avant, 1,4);
  161. $jour_apres = substr($apres, 9,2);
  162. $mois_apres = substr($apres, 6,2);
  163. $annee_apres = substr($apres, 1,4);
  164. $ical_apres = date_anneemoisjour("$annee_apres-$mois_apres-".sprintf("%02d",$jour_apres));
  165. // Calcul pour les semaines a cheval sur deux mois
  166. $j = 0;
  167. $amj = date_anneemoisjour("$annee_avant-$mois_avant-".sprintf("%02d", $j+($jour_avant)));
  168. while ($amj <= $ical_apres) {
  169. if (!($amj == date_anneemoisjour($date_fin) AND preg_match(",00:00:00,", $date_fin))) // Ne pas prendre la fin a minuit sur jour precedent
  170. $evenements[$amj][$id_message]=
  171. array(
  172. 'URL' => generer_url_ecrire("message","id_message=$id_message"),
  173. 'DTSTART' => date_ical($date_heure),
  174. 'DTEND' => date_ical($date_fin),
  175. 'DESCRIPTION' => $row['texte'],
  176. 'SUMMARY' => $row['titre'],
  177. 'CATEGORIES' => $cat,
  178. 'ATTENDEE' => (count($auteurs) == 0) ? '' : join($auteurs,", "));
  179. $j ++;
  180. $ladate = date("Y-m-d",mktime (1,1,1,$mois_avant, ($j + $jour_avant), $annee_avant));
  181. $amj = date_anneemoisjour($ladate);
  182. }
  183. }
  184. return $evenements;
  185. }
  186. // fonction SQL, pour la messagerie
  187. // http://doc.spip.org/@tache_redirige
  188. function tache_redirige ($row) {
  189. $m = $row['description'];
  190. if (substr($m,0,1) == '=')
  191. if ($m = virtuel_redirige(substr($m,1), true))
  192. return $m;
  193. return generer_url_ecrire("message", "id_message=".$row['uid']);
  194. }
  195. // http://doc.spip.org/@quete_calendrier_taches_annonces
  196. function quete_calendrier_taches_annonces () {
  197. global $connect_id_auteur;
  198. if (!$connect_id_auteur) return array();
  199. $r = sql_allfetsel("texte AS description, id_message AS uid, date_heure AS dtstart, date_fin AS dtend, titre AS summary, type AS category, rv AS location", "spip_messages", "type = 'affich' AND rv != 'oui' AND statut = 'publie'", "", "date_heure DESC");
  200. foreach ($r as $k => $row) $r[$k]['url'] = tache_redirige($row);
  201. return $r;
  202. }
  203. // http://doc.spip.org/@quete_calendrier_taches_pb
  204. function quete_calendrier_taches_pb () {
  205. global $connect_id_auteur;
  206. if (!$connect_id_auteur) return array();
  207. $r = sql_allfetsel("texte AS description, id_message AS uid, date_heure AS dtstart, date_fin AS dtend, titre AS summary, type AS category, rv AS location", "spip_messages", "id_auteur=$connect_id_auteur AND statut='publie' AND type='pb' AND rv!='oui'");
  208. foreach ($r as $k => $row) $r[$k]['url'] = tache_redirige($row);
  209. return $r;
  210. }
  211. // http://doc.spip.org/@quete_calendrier_taches_rv
  212. function quete_calendrier_taches_rv () {
  213. global $connect_id_auteur;
  214. if (!$connect_id_auteur) return array();
  215. $r = sql_allfetsel("M.texte AS description, M.id_message AS uid, M.date_heure AS dtstart, M.date_fin AS dtend, M.titre AS summary, M.type AS category, M.rv AS location", "spip_messages AS M LEFT JOIN spip_auteurs_liens AS L ON (L.id_objet=M.id_message)", "(L.objet='message' AND L.id_auteur=$connect_id_auteur OR M.type='affich') AND M.rv='oui' AND (( " . sql_date_proche('M.date_heure', -1, 'DAY') . ' AND ' . sql_date_proche('M.date_heure', 1, 'MONTH') . ") OR (M.date_heure < NOW() AND M.date_fin > NOW() )) AND M.statut='publie'", "M.id_message", "M.date_heure");
  216. foreach ($r as $k => $row) $r[$k]['url'] = tache_redirige($row);
  217. return $r;
  218. }
  219. // http://doc.spip.org/@quete_calendrier_agenda
  220. function quete_calendrier_agenda ($annee, $mois) {
  221. global $connect_id_auteur;
  222. $rv = array();
  223. if (!$connect_id_auteur) return $rv;
  224. $date = date("Y-m-d", mktime(0,0,0,$mois, 1, $annee));
  225. $mois = mois($date);
  226. $annee = annee($date);
  227. // rendez-vous personnels dans le mois
  228. $result_messages = sql_select("M.titre AS summary, M.texte AS description, M.id_message AS uid, M.date_heure", "spip_messages AS M, spip_auteurs_liens AS L", "((L.id_auteur=$connect_id_auteur AND L.id_objet=M.id_message AND L.objet='message') OR M.type='affich') AND M.rv='oui' AND M.date_heure >='$annee-$mois-1' AND date_heure < DATE_ADD('$annee-$mois-1', INTERVAL 1 MONTH) AND M.statut='publie'");
  229. while($row=sql_fetch($result_messages)) {
  230. $rv[journum($row['date_heure'])] = $row;
  231. }
  232. return $rv;
  233. }
  234. ?>