source: spip-zone/_plugins_/_test_/spip-listes/spip-listes_1_9_3/inc/spiplistes_agenda.php @ 24647

Last change on this file since 24647 was 24647, checked in by paladin@…, 11 years ago

optimisation, concerne principalement le texte affiché en espace privé

  • Property svn:eol-style set to LF
  • Property svn:keywords set to LastChangedBy LastChangedDate LastChangedRevision
File size: 10.0 KB
Line 
1<?php 
2        // inc/spiplistes_agenda.php
3        // CP-20080621
4       
5// $LastChangedRevision: 24647 $
6// $LastChangedBy: paladin@quesaco.org $
7// $LastChangedDate: 2008-11-26 06:03:42 +0000 (Wed, 26 Nov 2008) $
8
9define("_SPIPLISTES_AGENDA_PERIODE_HEBDO", 10);
10define("_SPIPLISTES_AGENDA_PERIODE_MOIS", 45);
11define("_SPIPLISTES_AGENDA_PERIODE_DEFAUT", _SPIPLISTES_AGENDA_PERIODE_MOIS);
12
13define("_SPIPLISTES_AGENDA_CADRE_WIDTH", 200);
14define("_SPIPLISTES_AGENDA_CADRE_PADDING", 8);
15define("_SPIPLISTES_AGENDA_LOUPE_HEIGHT", 24);
16define("_SPIPLISTES_AGENDA_CAPTION_HEIGHT", 16);
17define("_SPIPLISTES_AGENDA_TABLE_WIDTH", (_SPIPLISTES_AGENDA_CADRE_WIDTH - (_SPIPLISTES_AGENDA_CADRE_PADDING * 2)));
18define("_SPIPLISTES_AGENDA_TABLE_HEIGHT", 200);
19
20define("_SPIPLISTES_ACTION_AGENDA", _SPIPLISTES_ACTION_PREFIX."agenda");
21
22define("_SPIPLISTES_MIN_HEIGHT_BAR", 5);
23define("_SPIPLISTES_MAX_HEIGHT_BAR", _SPIPLISTES_AGENDA_TABLE_HEIGHT);
24
25include_spip('inc/spiplistes_api_presentation');
26
27function spiplistes_boite_agenda ($periode = false) {
28
29        $result = ""
30                . "<!-- boite agenda spiplistes -->\n"
31                . debut_cadre_relief("statistiques-24.gif", true)
32                . "<span class='verdana2 titre-petite-boite'>"
33                . _T('spiplistes:boite_agenda_titre_').":"
34                . "</span><br />"
35                . "<div style='width:"._SPIPLISTES_AGENDA_CADRE_WIDTH."px;height:"
36                        . (_SPIPLISTES_AGENDA_LOUPE_HEIGHT 
37                                + _SPIPLISTES_AGENDA_CAPTION_HEIGHT
38                                + _SPIPLISTES_AGENDA_TABLE_HEIGHT
39                                + (_SPIPLISTES_AGENDA_CADRE_PADDING * 4)
40                                )
41                        . "px'>\n"
42                . "<div id='spiplistes_boite_agenda' style='padding:"._SPIPLISTES_AGENDA_CADRE_PADDING."px 0'>\n"
43                . spiplistes_boite_agenda_contenu($periode, self(), _DIR_IMG_PACK)
44                . "</div>\n"
45                . "</div>\n"
46                . fin_cadre_relief(true)
47                . "<!-- fin boite agenda spiplistes -->\n"
48                ;
49        return($result);
50}
51
52function spiplistes_boite_agenda_contenu ($periode, $retour, $img_pack) {
53        $result = "";
54        $maintenant = time();
55        switch($periode) {
56                case _SPIPLISTES_AGENDA_PERIODE_HEBDO:
57                        $loupe_img = 'loupe-moins.gif';
58                        $autre_periode = _SPIPLISTES_AGENDA_PERIODE_MOIS;
59                        break;
60                case _SPIPLISTES_AGENDA_PERIODE_MOIS:
61                default:
62                        $loupe_img = 'loupe-plus.gif';
63                        $autre_periode = _SPIPLISTES_AGENDA_PERIODE_HEBDO;
64                        $periode = _SPIPLISTES_AGENDA_PERIODE_DEFAUT;
65        }
66
67        $inventaire = spiplistes_listes_inventaire($periode);
68
69        if($inventaire) {
70
71                $inventaire = spiplistes_listes_completer_planning($inventaire, $periode);
72               
73                $exec_url = parametre_url($retour, 'periode_agenda', $autre_periode);
74                $action_url = generer_action_auteur(_SPIPLISTES_ACTION_AGENDA, $autre_periode);
75                $action_url = parametre_url($action_url, 'redirect', rawurlencode($retour));
76                $result .= ""
77                        . "<div style='height:"._SPIPLISTES_AGENDA_LOUPE_HEIGHT."px'>\n"
78                        . "<a href='".$exec_url."'"
79                                . " onclick=\"return(AjaxSqueeze('".$action_url."','spiplistes_boite_agenda','',event))\""
80                                . " title='"._T('spiplistes:boite_agenda_voir_jours', array('nb_jours' => $autre_periode))."'"
81                                . " class='agenda-loupe'"
82                                . " style='background-image: url(".$img_pack.$loupe_img.")'"
83                                . " >"
84                        . "</a>\n"
85                        . "</div>\n"
86                        ;
87        } //
88
89        $result .= ""
90                . "<div style='position:relative'>\n"
91                ;
92
93        // tableau datas
94        $result_datas = ""
95                . "<!-- tableau agenda des datas -->\n"
96                . "<table cellpadding='0' cellspacing='0' border='0' class='table-agenda'"
97                        . " style='width:"
98                                . _SPIPLISTES_AGENDA_TABLE_WIDTH . "px;"
99                                . "height:"
100                                . _SPIPLISTES_AGENDA_TABLE_HEIGHT . "px'"
101                        . " >\n"
102                . "<caption class='verdana2'>\n"
103                .       (
104                        $inventaire
105                        ? _T('spiplistes:boite_agenda_legende', array('nb_jours' => $periode))
106                        : _T('spiplistes:pas_de_liste_prog')
107                        )
108                . "</caption>\n"
109                . "<tr>\n"
110                ;
111
112        if($inventaire) {
113                $max_jour = spiplistes_boitelistes_calculer_max($inventaire);
114                $coef_graph = _SPIPLISTES_AGENDA_TABLE_HEIGHT / $max_jour;
115                $larg_col = ceil(_SPIPLISTES_AGENDA_CADRE_WIDTH / $periode);
116                function spiplistes_redate($matches) {
117                        $matches[1]++;
118                        return(_T('date_jour_'.$matches[1])." ".$matches[2]);
119                }
120                for($ii = 0; $ii < $periode; $ii++) {
121                        $date_sql = spiplistes_date_jour_sql($ii);
122                        $date_jour = date("w j", mktime(0, 0, 0, date("m")  , date("d")+$ii, date("Y")));
123                        $dimanche = ($date_jour[0] == "0");
124                        $date_jour = preg_replace_callback("/^(\d{1,2}) (.*)$/", "spiplistes_redate", $date_jour);
125                        $style = "border-right:1px solid #" . ($dimanche ? "f99" : "cff") . ";";
126                        $liste_graph =
127                                (isset($inventaire[$date_sql]))
128                                ? spiplistes_boitelistes_planning_jour($inventaire[$date_sql], $date_jour, $coef_graph)
129                                : ""
130                                ;
131                        $result_datas .= ""
132                                . "<td class='bas' style='".$style."width:".$larg_col."px;height:"._SPIPLISTES_AGENDA_TABLE_HEIGHT."px'"
133                                . " title='$date_jour'"
134                                . " >\n"
135                                . $liste_graph
136                                . "</td>\n"
137                                ;
138                }
139        } //
140        else {
141                $result_datas .= "<td class='centrer' style='font-weight:bold;color:#ccc'>?</td>\n";
142        }
143
144        $result_datas .= ""
145                . "</tr>\n"
146                . "</table>\n"
147                . "<!-- fin tableau agenda des datas -->\n"
148                ;
149       
150        $result_legend = "";
151        if($inventaire) {
152                $titre_tableau = _T('spiplistes:max_').": ".$max_jour;
153                $hauteur_col = ceil(_SPIPLISTES_AGENDA_TABLE_HEIGHT / 2);
154                $style_col = "border:0;height:".$hauteur_col."px;";
155                $moyenne_jour = ceil($max_jour / 2);
156                $result_legend = ""
157                        . "<!-- tableau agenda des legendes -->\n"
158                        . "<table cellpadding='0' cellspacing='0' border='0' class='table-agenda'"
159                                . " style='width:" . _SPIPLISTES_AGENDA_TABLE_WIDTH . "px;"
160                                        . "height:"     . _SPIPLISTES_AGENDA_TABLE_HEIGHT . "px;"
161                                        . "border:0'"
162                                . " >\n"
163                        . "<caption style='text-align:right;font-size:60%' title='".$titre_tableau."'>$titre_tableau"
164                                . "<caption>\n"
165                        . "<tr class='tr-legend'>\n"
166                        . "<td style='".$style_col."border:1px solid #000;border-left:0;border-right:0'>"
167                                . "<div>"
168                                        . "<div class='left-legend'>$max_jour</div>"
169                                        . "<div class='right-legend'>$max_jour</div>"
170                                . "</div>"
171                        . "</td>\n"
172                        . "</tr>\n"
173                        . "<tr class='tr-legend'>\n"
174                        . "<td style='$style_col'>"
175                                . "<div>"
176                                        . "<div class='left-legend'>$moyenne_jour</div>"
177                                        . "<div class='right-legend'>$moyenne_jour</div>"
178                                . "</div>"
179                        . "</td>\n"
180                        . "</tr>\n"
181                        . "</table>\n"
182                        . "<!-- fin tableau agenda des legendes -->\n"
183                        ;
184        }
185       
186        $result .= ""
187                . $result_legend
188                . $result_datas
189                . "</div>\n"
190                ;
191        return($result);
192}
193
194// dresser l'inventaire des listes a partir
195// d'aujourd'hui, sur $jours jours.
196function spiplistes_listes_inventaire ($jours) {
197
198        $sql_result = sql_select(
199                'l.id_liste, l.titre, COUNT( a.id_auteur ) AS nb_abos, l.date, l.statut, l.periode'
200                , 'spip_listes AS l LEFT JOIN spip_auteurs_listes AS a ON a.id_liste = l.id_liste'
201                , array(
202                        "date >= CURDATE()"
203                        , "date <= INTERVAL ".$jours." DAY + CURDATE()"
204                        )
205                , 'l.id_liste'
206        );
207        if(sql_count($sql_result)) {
208                $result = array();
209                while($row = sql_fetch($sql_result)) {
210                        $date = substr($row['date'], 0, 10);
211                        if(!isset($result[$date])) {
212                                $result[$date] = array();
213                        }
214                        $result[$date][] = $row;
215                }
216                return($result);
217        }
218        return(false);
219}
220
221function spiplistes_boitelistes_planning_jour ($planning, $prefix_titre, $coef_graph) {
222        $result = "";
223        $ii = 0;
224        foreach($planning as $liste) {
225                $titre_nb_abos = spiplistes_nb_destinataire_str_get($liste['nb_abos']);
226                $titre = $prefix_titre.": ".couper($liste['titre'])." ($titre_nb_abos)";
227                $height = "height:".max(_SPIPLISTES_MIN_HEIGHT_BAR, ceil($liste['nb_abos'] * $coef_graph))."px;";
228                $href = generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER, "id_liste=".$liste['id_liste']);
229                $bgcolor = "background-color:#".spiplistes_items_get_item("icon_color", $liste['statut']).";";
230                $result .= ""
231                        . "<a href='$href' class='a-fond-".intval($ii++ % 2)."' title='".$titre."' style='$height $bgcolor'>\n"
232                        . "</a>\n"
233                        ;
234        }
235        return($result);
236}
237
238function spiplistes_boitelistes_calculer_max ($inventaire) {
239        $count = 0;
240        foreach($inventaire as $jour) {
241                $count = max(spiplistes_boitelistes_calculer_jour($jour), $count);
242        }
243        return($count);
244}
245
246function spiplistes_boitelistes_calculer_jour ($jour) {
247        $count = 0;
248        foreach($jour as $liste) {
249                $count += $liste['nb_abos'];
250        }
251        return($count);
252}
253
254function spiplistes_date_jour_sql ($ii) {
255        return(date("Y-m-d", mktime(0, 0, 0, date("m")  , date("d")+$ii, date("Y"))));
256}
257
258function spiplistes_listes_completer_planning ($inventaire, $periode_max) {
259        $planning = array();
260        for($ii = 0; $ii < $periode_max; $ii++) {
261                $date_sql = spiplistes_date_jour_sql($ii);
262                if(isset($inventaire[$date_sql])) {
263                        foreach($inventaire[$date_sql] as $liste) {
264                                $rythme_jour = 0;
265                                switch($liste['statut']) {
266                                        case _SPIPLISTES_DAILY_LIST:
267                                                $rythme_jour = 
268                                                        ($liste['periode'] > 0)
269                                                        ? $liste['periode']
270                                                        : 1
271                                                        ; // pas de break, continue sur rythme_jour
272                                        case _SPIPLISTES_HEBDO_LIST:
273                                        case _SPIPLISTES_WEEKLY_LIST:
274                                                if(!$rythme_jour) {
275                                                        $rythme_jour = 7;
276                                                }
277                                                $planning = spiplistes_listes_completer_planning_jour(
278                                                        $planning, $liste, $rythme_jour, $ii, $periode_max
279                                                );
280                                                break;
281                                        case _SPIPLISTES_MENSUEL_LIST:
282                                        case _SPIPLISTES_MONTHLY_LIST:
283                                                $planning = spiplistes_listes_completer_planning_mois(
284                                                        $planning, $liste, $ii, $periode_max
285                                                );
286                                                break;
287                                        //case _SPIPLISTES_YEARLY_LIST: // inutile, pour l'instant
288                                        default:
289                                                if(!isset($planning[$date_sql])) {
290                                                        $planning[$date_sql] = array();
291                                                }
292                                                $planning[$date_sql][] = $liste;
293                                                break;
294                                }
295                        }
296                }
297        }
298        return($planning);
299}
300
301function spiplistes_listes_completer_planning_jour ($planning, $liste, $rythme_jour, $periode_debut, $periode_max) {
302        if($rythme_jour) {
303                for($ii = $periode_debut; $ii < $periode_max; $ii += $rythme_jour) {
304                        $date_sql = spiplistes_date_jour_sql($ii);
305                        if(!isset($planning[$date_sql])) {
306                                $planning[$date_sql] = array();
307                        }
308                        $planning[$date_sql][] = $liste;
309                }
310        }
311        return($planning);
312}
313
314function spiplistes_listes_completer_planning_mois ($planning, $liste, $periode_debut, $periode_max) {
315        $time_futur = strtotime("+ $periode_debut day");
316        $time_max = strtotime("+ $periode_max day");
317        while($time_futur < $time_max) {
318                $date_sql = date("Y-m-d", $time_futur);
319                if(!isset($planning[$date_sql])) {
320                        $planning[$date_sql] = array();
321                }
322                $planning[$date_sql][] = $liste;
323                $time_futur = strtotime("+ 1 month", $time_futur);
324        }
325        return($planning);
326}
327
328//
329?>
Note: See TracBrowser for help on using the repository browser.