source: spip-zone/_core_/branches/spip-3.0/plugins/organiseur/inc/quete_calendrier.php @ 104360

Last change on this file since 104360 was 104360, checked in by spip.franck@…, 3 years ago

code.spip est maintenant en https, donc j'ajoute le "s" à http

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