source: pmb4.2/trunk/fuentes/pmb/cms/modules/agenda/datasources/cms_module_agenda_datasource_agenda.class.php @ 815

Last change on this file since 815 was 815, checked in by jrpelegrina, 4 years ago

Initial release of pmb 4.2

  • Property svn:executable set to *
File size: 9.3 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2012 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: cms_module_agenda_datasource_agenda.class.php,v 1.8 2015-04-03 11:16:29 jpermanne Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9class cms_module_agenda_datasource_agenda extends cms_module_common_datasource{
10
11        public function __construct($id=0){
12                parent::__construct($id);
13        }
14        /*
15         * On défini les sélecteurs utilisable pour cette source de donnée
16         */
17        public function get_available_selectors(){
18                return array(
19                        "cms_module_common_selector_env_var",
20                        "cms_module_agenda_selector_calendars_date",
21                        "cms_module_agenda_selector_calendars"
22                );
23        }
24
25        /*
26         * Récupération des données de la source...
27         */
28        public function get_datas(){
29                $datas = array();
30                $selector = $this->get_selected_selector();
31
32                switch($this->parameters['selector']){
33                        //devrait être le seul survivant...
34                        case "cms_module_agenda_selector_calendars" :
35                                if($selector){
36                                        $calendars = array();
37                                        $query = "select managed_module_box from cms_managed_modules join cms_cadres on id_cadre = ".$this->cadre_parent." and cadre_object = managed_module_name";
38                                        $result = pmb_mysql_query($query);
39                                        $events=array();
40                                        if(pmb_mysql_num_rows($result)){
41                                                $box = pmb_mysql_result($result,0,0);
42                                                $infos =unserialize($box);
43                                                $calendars = $selector->get_value();
44                                                foreach($calendars as $calendar){
45                                                        $elem = $infos['module']['calendars'][$calendar];
46                                                        $query="select id_article from cms_articles where article_num_type = ".$elem['type'];
47                                                        $result = pmb_mysql_query($query);
48                                                        if($result && pmb_mysql_num_rows($result)){
49                                                                $articles = array();
50                                                                while($row = pmb_mysql_fetch_object($result)){
51                                                                        $articles[]=$row->id_article;
52                                                                }
53                                                                $articles = $this->filter_datas("articles",$articles);
54                                                                foreach($articles as $article){
55                                                                        $art = new cms_article($article);
56                                                                        $event = $art->format_datas();
57                                                                        foreach($event['fields_type'] as $field){
58                                                                                if($field['id'] == $elem['start_date']){
59                                                                                        $event['event_start'] = $field['values'][0];
60                                                                                        $event['event_start']['time'] = mktime(0,0,0,substr($field['values'][0]['value'],5,2),substr($field['values'][0]['value'],8,2),substr($field['values'][0]['value'],0,4));
61                                                                                }
62                                                                                if($field['id'] == $elem['end_date']){
63                                                                                        $event['event_end'] = $field['values'][0];
64                                                                                        $event['event_end']['time'] = mktime(0,0,0,substr($field['values'][0]['value'],5,2),substr($field['values'][0]['value'],8,2),substr($field['values'][0]['value'],0,4));
65                                                                                }
66                                                                        }
67                                                                        $event['id_type'] = $elem['type'];
68                                                                        $event['color'] = $elem['color'];
69                                                                        $event['calendar'] = $elem['name'];
70                                                                        $events[] = $event;
71                                                                }
72                                                        }
73                                                }
74                                        }
75                                        usort($events,array($this,"sort_event"));
76                                        return array('events'=>$events);
77                                }
78                                break;
79                        case "cms_module_common_selector_env_var" :
80                                if($selector){
81                                        $art = new cms_article($selector->get_value());
82                                        $event = $art->format_datas();
83                                        //allons chercher les infos du calendrier associé à cet évènement
84                                        $query = "select managed_module_box from cms_managed_modules join cms_cadres on id_cadre = ".$this->cadre_parent." and cadre_object = managed_module_name";
85                                        $result = pmb_mysql_query($query);
86                                        if(pmb_mysql_num_rows($result)){
87                                                $box = pmb_mysql_result($result,0,0);
88                                                $infos =unserialize($box);
89                                                foreach($infos['module']['calendars'] as $calendar){
90                                                        if($calendar['type'] == $art->num_type){
91                                                                foreach($event['fields_type'] as $field){
92                                                                        if($field['id'] == $calendar['start_date']){
93                                                                                $event['event_start'] = $field['values'][0];
94                                                                                $event['event_start']['time'] = mktime(0,0,0,substr($field['values'][0]['value'],5,2),substr($field['values'][0]['value'],8,2),substr($field['values'][0]['value'],0,4));
95                                                                        }
96                                                                        if($field['id'] == $calendar['end_date']){
97                                                                                $event['event_end'] = $field['values'][0];
98                                                                                $event['event_end']['time'] = mktime(0,0,0,substr($field['values'][0]['value'],5,2),substr($field['values'][0]['value'],8,2),substr($field['values'][0]['value'],0,4));
99                                                                        }
100                                                                }
101                                                                $event['id_type'] = $calendar['type'];
102                                                                $event['color'] = $calendar['color'];   
103                                                                $event['calendar'] = $calendar['name'];
104                                                                break;
105                                                        }
106                                                }
107                                        }
108                                        return $event;
109                                }
110                                break;
111                        case "cms_module_agenda_selector_calendars_date" :
112                                if($selector){
113                                        $query = "select managed_module_box from cms_managed_modules join cms_cadres on id_cadre = ".$this->cadre_parent." and cadre_object = managed_module_name";
114                                        $result = pmb_mysql_query($query);
115                                        if(pmb_mysql_num_rows($result)){
116                                                $box = pmb_mysql_result($result,0,0);
117                                                $infos =unserialize($box);
118                                                $datas = $selector->get_value();
119                                                $time = mktime(0,0,0,substr($datas['date'],5,2),substr($datas['date'],8,2),substr($datas['date'],0,4));
120                                                foreach($datas['calendars'] as $calendar){
121                                                        $elem = $infos['module']['calendars'][$calendar];
122                                                        $query="select id_article from cms_articles where article_num_type = ".$elem['type'];
123                                                        $result = pmb_mysql_query($query);
124                                                        if(pmb_mysql_num_rows($result)){
125                                                                $articles = array();
126                                                                while($row = pmb_mysql_fetch_object($result)){
127                                                                        $articles[]=$row->id_article;
128                                                                }
129                                                                $articles = $this->filter_datas("articles",$articles);
130                                                                if(is_array($articles)){
131                                                                        foreach($articles as $article){
132                                                                                $art = new cms_article($article);
133                                                                                $event = $art->format_datas();
134                                                                                foreach($event['fields_type'] as $field){
135                                                                                        if($field['id'] == $elem['start_date']){
136                                                                                                $event['event_start'] = $field['values'][0];
137                                                                                                $event['event_start']['time'] = mktime(0,0,0,substr($field['values'][0]['value'],5,2),substr($field['values'][0]['value'],8,2),substr($field['values'][0]['value'],0,4));
138                                                                                        }
139                                                                                        if($field['id'] == $elem['end_date']){
140                                                                                                $event['event_end'] = $field['values'][0];
141                                                                                                $event['event_end']['time'] = mktime(0,0,0,substr($field['values'][0]['value'],5,2),substr($field['values'][0]['value'],8,2),substr($field['values'][0]['value'],0,4));
142                                                                                        }
143                                                                                }
144                                                                                $event['id_type'] = $elem['type'];
145                                                                                $event['color'] = $elem['color'];
146                                                                                $event['calendar'] = $elem['name'];
147                                                                                if($event['event_start']['time']>=$time || ($event['event_start'] && $event['event_end'] && $event['event_end']['time']>=$time)){
148                                                                                        $events[] = $event;
149                                                                                }
150                                                                        }
151                                                                }
152                                                        }
153                                                }
154                                        }
155                                        usort($events,array($this,"sort_event"));
156                                        return array('events'=>$events);
157                                }
158                                break;
159                }
160        }
161       
162       
163        public static function sort_event($a,$b){
164                if($a['event_start']['time'] > $b['event_start']['time']){
165                        return 1;
166                }else if($a['event_start']['time'] == $b['event_start']['time']){
167                        if($a['event_end']['time'] > $b['event_end']['time']){
168                                return 1;
169                        }else{
170                                return -1;
171                        }
172                }else{
173                        return -1;
174                }
175        }
176       
177        public function get_format_data_structure($type='event'){
178                $format_datas = array();
179                switch($type){
180                        //event
181                        case "event" :
182                                $format_datas = cms_article::get_format_data_structure("article");
183                                $format_datas[] = array(
184                                        'var' => "event_start",
185                                        'desc' => $this->msg['cms_module_agenda_datasource_agenda_event_start_desc'],
186                                        'children' => array(
187                                                array(
188                                                        'var' => "event_start.format_value",
189                                                        'desc' => $this->msg['cms_module_agenda_datasource_agenda_event_start_format_value_desc'],
190                                                ),
191                                                array(
192                                                        'var' => "event_start.value",
193                                                        'desc' => $this->msg['cms_module_agenda_datasource_agenda_event_start_value_desc'],
194                                                ),
195                                                array(
196                                                        'var' => "event_start.time",
197                                                        'desc' => $this->msg['cms_module_agenda_datasource_agenda_event_start_time_desc'],
198                                                )
199                                        )
200                                );
201                                $format_datas[] = array(
202                                        'var' => "event_end",
203                                        'desc' => $this->msg['cms_module_agenda_datasource_agenda_event_end_desc'],
204                                        'children' => array(
205                                                array(
206                                                        'var' => "event_end.format_value",
207                                                        'desc' => $this->msg['cms_module_agenda_datasource_agenda_event_end_format_value_desc'],
208                                                ),
209                                                array(
210                                                        'var' => "event_end.value",
211                                                        'desc' => $this->msg['cms_module_agenda_datasource_agenda_event_end_value_desc'],
212                                                ),
213                                                array(
214                                                        'var' => "event_end.time",
215                                                        'desc' => $this->msg['cms_module_agenda_datasource_agenda_event_end_time_desc'],
216                                                )
217                                        )
218                                );
219                                $format_datas[] = array(
220                                        'var' => "id_type",
221                                        'desc' => $this->msg['cms_module_agenda_datasource_agenda_id_type_desc']
222                                );
223                                $format_datas[] = array(
224                                        'var' => "color",
225                                        'desc' => $this->msg['cms_module_agenda_datasource_agenda_color_desc']
226                                );
227                                $format_datas[] = array(
228                                        'var' => "calendar",
229                                        'desc' => $this->msg['cms_module_agenda_datasource_agenda_calendar_desc']
230                                );
231                                break;
232                        case "eventslist" :
233                                $format_event = $this->get_format_data_structure("event");
234                                $format_datas[] = array(
235                                        'var' => "events",
236                                        'desc'=> $this->msg['cms_module_agenda_datasource_agenda_events_desc'],
237                                        'children' => $this->prefix_var_tree($format_event,"events[i]")
238                                ); 
239                                break; 
240                }                                                       
241                return $format_datas;
242        }
243}
244
245
246
247
248
249
250
251
252
253
254
Note: See TracBrowser for help on using the repository browser.