fix tz of calendar demo data
[tine20] / tine20 / Calendar / Setup / DemoData.php
1 <?php
2 /**
3  * Tine 2.0
4  *
5  * @package     Calendar
6  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
7  * @author      Alexander Stintzing <a.stintzing@metaways.de>
8  * @copyright   Copyright (c) 2012-2013 Metaways Infosystems GmbH (http://www.metaways.de)
9  *
10  */
11
12 /**
13  * class for Calendar initialization
14  *
15  * @package     Setup
16  */
17 class Calendar_Setup_DemoData extends Tinebase_Setup_DemoData_Abstract
18 {
19     /**
20      * holds the instance of the singleton
21      *
22      * @var Calendar_Setup_DemoData
23      */
24     private static $_instance = NULL;
25
26     /**
27      * 
28      * required apps
29      * @var array
30      */
31     protected static $_requiredApplications = array('Admin');
32     
33     /**
34      * models to work on
35      * 
36      * @var array
37      */
38     protected $_models = array('event');
39
40     /**
41      * the event controller
42      * 
43      * @var Calendar_Controller_Event
44      */
45     protected $_controller = NULL;
46     
47     /**
48      * private calendars
49      * 
50      * @var Array
51      */
52     protected $_calendars = array();
53
54     /**
55      * the constructor
56      *
57      */
58     private function __construct()
59     {
60         $this->_controller = Calendar_Controller_Event::getInstance();
61         $this->_controller->sendNotifications(false);
62     }
63
64     /**
65      * the singleton pattern
66      *
67      * @return Calendar_Setup_DemoData
68      */
69     public static function getInstance()
70     {
71         if (self::$_instance === NULL) {
72             self::$_instance = new Calendar_Setup_DemoData;
73         }
74
75         return self::$_instance;
76     }
77
78     /**
79      * unsets the instance to save memory, be aware that hasBeenRun still needs to work after unsetting!
80      *
81      */
82     public function unsetInstance()
83     {
84         if (self::$_instance !== NULL) {
85             self::$_instance = null;
86         }
87     }
88
89     /**
90      * this is required for other applications needing demo data of this application
91      * if this returns true, this demodata has been run already
92      * 
93      * @return boolean
94      */
95     public static function hasBeenRun()
96     {
97         $c = Calendar_Controller_Event::getInstance();
98         
99         $f = new Calendar_Model_EventFilter(array(
100             array('field' => 'summary', 'operator' => 'equals', 'value' => 'Meeting for further education'),
101             array('field' => 'summary', 'operator' => 'equals', 'value' => 'Fortbildungsveranstaltung')
102         ), 'OR');
103         
104         return ($c->search($f)->count() > 0) ? true : false;
105     }
106     
107     /**
108      * @see Tinebase_Setup_DemoData_Abstract
109      */
110     protected function _onCreate() {
111
112         $this->_getDays();
113         foreach($this->_personas as $loginName => $persona) {
114             $this->_calendars[$loginName] = Tinebase_Container::getInstance()->getContainerById(Tinebase_Core::getPreference('Calendar')->getValueForUser(Calendar_Preference::DEFAULTCALENDAR, $persona->getId()));
115
116             if (isset($this->_personas['sclever'])) {
117                 Tinebase_Container::getInstance()->addGrants($this->_calendars[$loginName]->getId(), 'user', $this->_personas['sclever']->getId(), $this->_secretaryGrants, true);
118             }
119             if (isset($this->_personas['rwright'])) {
120                 Tinebase_Container::getInstance()->addGrants($this->_calendars[$loginName]->getId(), 'user', $this->_personas['rwright']->getId(), $this->_controllerGrants, true);
121             }
122
123         }
124     }
125     
126     /**
127      * creates a shared calendar
128      */
129     private function _createSharedCalendar()
130     {
131         // create shared calendar
132         $this->sharedCalendar = Tinebase_Container::getInstance()->addContainer(new Tinebase_Model_Container(array(
133             'name'           => static::$_de ? 'Gemeinsamer Kalender' : 'Shared Calendar',
134             'type'           => Tinebase_Model_Container::TYPE_SHARED,
135             'owner_id'       => Tinebase_Core::getUser(),
136             'backend'        => 'SQL',
137             'application_id' => Tinebase_Application::getInstance()->getApplicationByName('Calendar')->getId(),
138             'color'          => '#00FF00'
139         ), true));
140
141         $group = Tinebase_Group::getInstance()->getDefaultGroup();
142         Tinebase_Container::getInstance()->addGrants($this->sharedCalendar->getId(), 'group', $group->getId(), $this->_userGrants, true);
143         if (isset($this->_personas['sclever'])) {
144             Tinebase_Container::getInstance()->addGrants($this->sharedCalendar->getId(), 'user', $this->_personas['sclever']->getId(), $this->_secretaryGrants, true);
145         }
146
147         // create some resorces as well
148         $this->_ressources = array();
149         $this->_ressources[] = Calendar_Controller_Resource::getInstance()->create(new Calendar_Model_Resource(array(
150             'name'                 => static::$_de ? 'Besprechnungsraum Mars (1.OG)' : 'Meeting Room Mars (first floor)',
151             'description'          => static::$_de ? 'Bis zu 10 Personen' : 'Up to 10 people',
152             'email'                => 'mars@tin20.com',
153             'is_location'          => TRUE,
154         )));
155         $this->_ressources[] = Calendar_Controller_Resource::getInstance()->create(new Calendar_Model_Resource(array(
156             'name'                 => static::$_de ? 'Besprechnungsraum Venus (2.OG)' : 'Meeting Room Venus (second floor)',
157             'description'          => static::$_de ? 'Bis zu 14 Personen' : 'Up to 14 people',
158             'email'                => 'venus@tin20.com',
159             'is_location'          => TRUE,
160         )));
161     }
162     
163     /**
164      * creates shared events
165      */
166     protected function _createSharedEvents()
167     {
168         $this->_createSharedCalendar();
169
170         $monday = clone $this->_monday;
171         $tuesday = clone $this->_tuesday;
172         $wednesday = clone $this->_wednesday;
173         $thursday = clone $this->_thursday;
174         $lastMonday = clone $this->_lastMonday;
175         $lastFriday = clone $this->_lastFriday;
176
177         $defaultAttendeeData = array(
178             'quantity'  => "1",
179             'role'  => "REQ",
180             'status'  => "ACCEPTED",
181             'transp'  => "OPAQUE",
182             'user_type'  => "user"
183         );
184         $defaultData = array(
185             'container_id' => $this->sharedCalendar->getId(),
186             Tinebase_Model_Grants::GRANT_EDIT    => true,
187         );
188         $defaultData['attendee'] = array();
189         foreach ($this->_personas as $persona) {
190             $defaultData['attendee'][] = array_merge($defaultAttendeeData,
191                 array('user_id'  => $persona->toArray())
192             );
193         }
194
195         $lastMonday->add(date_interval_create_from_date_string('20 weeks'));
196         $rruleUntilMondayMeeting = $lastMonday->format('d-m-Y') . ' 16:00:00';
197         
198         // shared events data
199         $this->sharedEventsData = array(
200             array_merge_recursive($defaultData,
201                 array(
202                     'summary'     => static::$_de ? 'Mittagspause' : 'lunchtime',
203                     'description' => '',
204                     'dtstart'     => $monday->format('d-m-Y') . ' 12:00:00',
205                     'dtend'       => $monday->format('d-m-Y') . ' 13:00:00',
206                 )),
207             array_merge_recursive($defaultData,
208                 array(
209                     'summary'     => static::$_de ? 'Projektleitermeeting' : 'project leader meeting',
210                     'description' => static::$_de ? 'Treffen aller Projektleiter' : 'meeting of all project leaders',
211                     'dtstart'     => $monday->format('d-m-Y') . ' 14:15:00',
212                     'dtend'       => $monday->format('d-m-Y') . ' 16:00:00',
213                 )),
214             array_merge_recursive($defaultData,
215                 array(
216                     'summary'     => static::$_de ? 'Geschäftsführerbesprechung' : 'CEO Meeting',
217                     'description' => static::$_de ? 'Treffen aller Geschäftsführer' : 'Meeting of all CEO',
218                     'dtstart'     => $tuesday->format('d-m-Y') . ' 12:30:00',
219                     'dtend'       => $tuesday->format('d-m-Y') . ' 13:45:00',
220                 )),
221             array_merge_recursive($defaultData,
222                 array(
223                     'summary'     => static::$_de ? 'Fortbildungsveranstaltung' : 'Meeting for further education',
224                     'description' => static::$_de ? 'Wie verhalte ich mich meinen Mitarbeitern gegenüber in Problemsituationen.' : 'How to manage problematic situations with the employees',
225                     'dtstart'     => $tuesday->format('d-m-Y') . ' 17:00:00',
226                     'dtend'       => $tuesday->format('d-m-Y') . ' 18:30:00',
227                 )),
228             array_merge_recursive($defaultData,
229                 array(
230                     'summary'     => static::$_de ? 'Projektbesprechung Alpha' : 'project meeting alpha',
231                     'description' => static::$_de ? 'Besprechung des Projekts Alpha' : 'Meeting of the Alpha project',
232                     'dtstart'     => $wednesday->format('d-m-Y') . ' 08:30:00',
233                     'dtend'       => $wednesday->format('d-m-Y') . ' 09:45:00',
234                 )),
235             array_merge_recursive($defaultData,
236                 array(
237                     'summary'     => static::$_de ? 'Projektbesprechung Beta' : 'project meeting beta',
238                     'description' => static::$_de ? 'Besprechung des Projekts Beta' : 'Meeting of the beta project',
239                     'dtstart'     => $wednesday->format('d-m-Y') . ' 10:00:00',
240                     'dtend'       => $wednesday->format('d-m-Y') . ' 11:00:00',
241                 )),
242             array_merge_recursive($defaultData,
243                 array(
244                     'summary'     => static::$_de ? 'Betriebsausflug' : 'company trip',
245                     'description' => static::$_de ? 'Fahrt in die Semperoper nach Dresden' : 'Trip to the Semper Opera in Dresden',
246                     'dtstart'     => $thursday->format('d-m-Y') . ' 12:00:00',
247                     'dtend'       => $thursday->format('d-m-Y') . ' 13:00:00',
248                 )),
249             array_merge_recursive($defaultData,
250                 array(
251                     'summary'     => static::$_de ? 'Präsentation Projekt Alpha' : 'Presentation project Alpha',
252                     'description' => static::$_de ? 'Das Projekt Alpha wird der Firma GammaTecSolutions vorgestellt' : 'presentation of Project Alpha for GammaTecSolutions',
253                     'dtstart'     => $thursday->format('d-m-Y') . ' 16:00:00',
254                     'dtend'       => $thursday->format('d-m-Y') . ' 17:00:00',
255                 )),
256             array_merge_recursive($defaultData,
257                 array(
258                     'summary'     => static::$_de ? 'Montagsmeeting' : 'monday meeting',
259                     'description' => static::$_de ? 'Wöchentliches Meeting am Montag' : 'weekly meeting on monday',
260                     'dtstart'     => $lastMonday->format('d-m-Y') . ' 10:00:00',
261                     'dtend'       => $lastMonday->format('d-m-Y') . ' 12:30:00',
262                     'rrule' => array(
263                         'freq' => 'WEEKLY',
264                         'interval' => '1',
265                         'count' => 20,
266                         'wkst' => 'MO',
267                         'byday' => 'MO',
268                     ),
269                     'rrule_until' => $rruleUntilMondayMeeting
270         )),
271         array_merge_recursive(
272             $defaultData,
273             array(
274                 'summary'     => static::$_de ? 'Freitagsmeeting' : 'friday meeting',
275                 'description' => static::$_de ? 'Wöchentliches Meeting am Freitag' : 'weekly meeting on friday',
276                 'dtstart'     => $lastFriday->format('d-m-Y') . ' 16:00:00',
277                 'dtend'       => $lastFriday->format('d-m-Y') . ' 17:30:00',
278                 'rrule' => array(
279                     'freq' => 'WEEKLY',
280                     'interval' => '1',
281                     'count' => 20,
282                     'wkst' => 'FR',
283                     'byday' => 'FR',
284                 ),
285                 'rrule_until' => $lastFriday->add(date_interval_create_from_date_string('20 weeks'))->format('d-m-Y') . ' 16:00:00'
286             ))
287         );
288
289         // create shared events
290         foreach($this->sharedEventsData as $eData) {
291             $this->_createEvent($eData, false);
292         }
293     }
294
295     /**
296      * creates events for pwulf
297      */
298     protected function _createEventsForPwulf() {
299
300         // Paul Wulf
301         $monday = clone $this->_monday;
302         $tuesday = clone $this->_tuesday;
303         $wednesday = clone $this->_wednesday;
304         $thursday = clone $this->_thursday;
305         $friday = clone $this->_friday;
306         $saturday = clone $this->_saturday;
307         $sunday = clone $this->_sunday;
308         $lastMonday = clone $this->_lastMonday;
309         $lastFriday = clone $this->_lastFriday;
310         $lastSaturday = clone $this->_lastSaturday;
311         $lastSunday = clone $this->_lastSunday;
312
313         $cal = $this->_calendars['pwulf'];
314         $user = $this->_personas['pwulf'];
315
316         $defaultEventData = array(
317             'container_id' => $cal->getId(),
318             'class' => 'PRIVATE',
319             Tinebase_Model_Grants::GRANT_EDIT    => true,
320             'attendee' => array(array(
321                 'quantity'  => "1",
322                 'role'  => "REQ",
323                 'status'  => "ACCEPTED",
324                 'transp'  => "OPAQUE",
325                 'user_id'  => $user->toArray(),
326                 'user_type'  => "user"
327             ))
328         );
329         $eventsData = array(
330             array_merge_recursive($defaultEventData,
331                 array(
332                     'summary'     => static::$_de ? 'Lucy\'s Geburtstag' : 'Lucy\'s birthday',
333                     'description' => static::$_de ? '' : '',
334                     'dtstart'     => $monday->format('d-m-Y') . ' 00:00:00',
335                     'dtend'       => $monday->format('d-m-Y') . ' 23:59:00',
336                     'is_all_day_event' => true,
337                     'alarms'      => array(array(
338                         'alarm_time' => $lastSaturday->format('d-m-Y') . " 12:00:00",
339                         'minutes_before' => 2880,
340                         'model' => "Calendar_Model_Event",
341                         'options' => json_encode(array("custom" => false,"recurid" => null,"minutes_before" => "2880")),
342                         'sent_message' => "",
343                         'sent_status' => "pending"
344                     )),
345                     'rrule' => array(
346                         "bymonth" => $monday->format('m'),
347                         "bymonthday" => $monday->format('d'),
348                         "freq" => "YEARLY",
349                         "interval" => "1",
350                     ),
351                     'rrule_until' => ''
352                 )),
353             array_merge_recursive($defaultEventData,
354                 array(
355                     'summary'     => static::$_de ? 'Lucy\'s Geburtstagsfeier' : 'Lucy\'s birthday party',
356                     'description' => static::$_de ? '' : '',
357                     'dtstart'     => $friday->format('d-m-Y') . ' 19:00:00',
358                     'dtend'       => $friday->format('d-m-Y') . ' 23:00:00',
359                 )
360             ),
361             array_merge_recursive($defaultEventData,
362                 array(
363                     'summary'     => static::$_de ? 'Wettlauf mit Kevin' : 'Race with Kevin',
364                     'description' => static::$_de ? 'Treffpunkt ist am oberen Parkplatz' : 'Meet at upper parking lot',
365                     'dtstart'     => $saturday->format('d-m-Y') . ' 15:00:00',
366                     'dtend'       => $saturday->format('d-m-Y') . ' 16:00:00',
367                 )
368             ),
369             array_merge_recursive($defaultEventData,
370                 array(
371                     'summary'     => static::$_de ? 'Schwimmen gehen' : 'go swimming',
372                     'description' => static::$_de ? '' : '',
373                     'dtstart'     => $tuesday->format('d-m-Y') . ' 17:00:00',
374                     'dtend'       => $tuesday->format('d-m-Y') . ' 18:00:00',
375                 )
376             ),
377             array_merge_recursive($defaultEventData,
378                 array(
379                     'summary'     => static::$_de ? 'Schwimmen gehen' : 'go swimming',
380                     'description' => '',
381                     'dtstart'     => $thursday->format('d-m-Y') . ' 17:00:00',
382                     'dtend'       => $thursday->format('d-m-Y') . ' 18:00:00',
383                 )
384             ),
385             array_merge_recursive($defaultEventData,
386                 array(
387                     'summary'     => static::$_de ? 'Auto aus der Werkstatt abholen' : 'fetch car from the garage',
388                     'description' => '',
389                     'dtstart'     => $thursday->format('d-m-Y') . ' 15:00:00',
390                     'dtend'       => $thursday->format('d-m-Y') . ' 16:00:00',
391                 )
392             ),
393             array_merge_recursive($defaultEventData,
394                 array(
395                     'summary'     => static::$_de ? 'Oper mit Lucy' : 'Got to the Opera with Lucy',
396                     'description' => 'Brighton Centre',
397                     'dtstart'     => $sunday->format('d-m-Y') . ' 20:00:00',
398                     'dtend'       => $sunday->format('d-m-Y') . ' 21:30:00',
399                 )
400             ),
401
402         );
403         foreach($eventsData as $eData) {
404             $this->_createEvent($eData, false);
405         }
406
407         $cal = Tinebase_Container::getInstance()->addContainer(new Tinebase_Model_Container(array(
408             'name'           => static::$_de ? 'Geschäftlich' : 'Business',
409             'type'           => Tinebase_Model_Container::TYPE_PERSONAL,
410             'owner_id'       => Tinebase_Core::getUser(),
411             'backend'        => 'SQL',
412             'application_id' => Tinebase_Application::getInstance()->getApplicationByName('Calendar')->getId(),
413             'color'          => '#00CCFF'
414         ), true));
415
416         if (isset($this->_personas['sclever'])) {
417             Tinebase_Container::getInstance()->addGrants($cal->getId(), 'user', $this->_personas['sclever']->getId(), $this->_secretaryGrants, true);
418         }
419         if (isset($this->_personas['rwright'])) {
420             Tinebase_Container::getInstance()->addGrants($cal->getId(), 'user', $this->_personas['rwright']->getId(), $this->_controllerGrants, true);
421         }
422
423         $defaultEventData = array(
424             'container_id' => $cal->getId(),
425             Tinebase_Model_Grants::GRANT_EDIT    => true
426         );
427
428         $eventsData = array(
429             array_merge_recursive($defaultEventData,
430                 array(
431                     'summary'     => static::$_de ? 'Projektbesprechung Projekt Epsilon mit John' : 'Project Epsilon Meeting with John',
432                     'description' => '',
433                     'dtstart'     => $monday->format('d-m-Y') . ' 08:00:00',
434                     'dtend'       => $monday->format('d-m-Y') . ' 09:30:00',
435                 )
436             ),
437         );
438
439         foreach($eventsData as $eData) {
440             $this->_createEvent($eData, false);
441         }
442     }
443     
444     /**
445      * creates events for jsmith
446      */
447     protected function _createEventsForJsmith() {
448
449         // John Smith
450         $monday = clone $this->_monday;
451         $tuesday = clone $this->_tuesday;
452         $wednesday = clone $this->_wednesday;
453         $thursday = clone $this->_thursday;
454         $friday = clone $this->_friday;
455         $saturday = clone $this->_saturday;
456         $sunday = clone $this->_sunday;
457         $lastMonday = clone $this->_lastMonday;
458         $lastFriday = clone $this->_lastFriday;
459         $lastSaturday = clone $this->_lastSaturday;
460         $lastSunday = clone $this->_lastSunday;
461
462         $cal = $this->_calendars['jsmith'];
463         $user = $this->_personas['jsmith'];
464
465         $defaultEventData = array(
466             'container_id' => $cal->getId(),
467             'class' => 'PRIVATE',
468             Tinebase_Model_Grants::GRANT_EDIT    => true,
469             'attendee' => array(array(
470                 'quantity'  => "1",
471                 'role'  => "REQ",
472                 'status'  => "ACCEPTED",
473                 'transp'  => "OPAQUE",
474                 'user_id'  => $user->toArray(),
475                 'user_type'  => "user"
476             ))
477         );
478
479         $eventsData = array(
480             array_merge_recursive($defaultEventData,
481                 array(
482                     'summary'     => static::$_de ? 'Catherine\'s Geburtstag' : 'Catherine\'s birthday',
483                     'description' => static::$_de ? '' : '',
484                     'dtstart'     => $saturday->format('d-m-Y') . ' 00:00:00',
485                     'dtend'       => $saturday->format('d-m-Y') . ' 23:59:00',
486                     'is_all_day_event' => true,
487                     'alarms'      => array(array(
488                         'alarm_time' => $lastSaturday->format('d-m-Y') . " 12:00:00",
489                         'minutes_before' => 2880,
490                         'model' => "Calendar_Model_Event",
491                         'options' => json_encode(array("custom" => false, "recurid" => null, "minutes_before" => "2880")),
492                         'sent_message' => "",
493                         'sent_status' => "pending"
494                     )),
495                     'rrule' => array(
496                         "bymonth" => $monday->format('m'),
497                         "bymonthday" => $monday->format('d'),
498                         "freq" => "YEARLY",
499                         "interval" => "1",
500                     ),
501                     'rrule_until' => ''
502                 )),
503             array_merge_recursive($defaultEventData,
504                 array(
505                     'summary'     => static::$_de ? 'Elternabend Anne' : 'Talk to Ann\'s teacher',
506                     'description' => static::$_de ? '' : '',
507                     'dtstart'     => $friday->format('d-m-Y') . ' 19:00:00',
508                     'dtend'       => $friday->format('d-m-Y') . ' 23:00:00',
509                 )
510             ),
511             array_merge_recursive($defaultEventData,
512                 array(
513                     'summary'     => static::$_de ? 'I-Phone vom I-Store abholen'  : 'Fetch Iphone from store',
514                     'description' => static::$_de ? '':'',
515                     'dtstart'     => $saturday->format('d-m-Y') . ' 15:00:00',
516                     'dtend'       => $saturday->format('d-m-Y') . ' 16:00:00',
517                 )
518             ),
519             array_merge_recursive($defaultEventData,
520                 array(
521                     'summary'     => static::$_de ? 'Anne vom Sport abholen' : 'Pick up Ann after her sports lesson',
522                     'description' => static::$_de ? '' : '',
523                     'dtstart'     => $tuesday->format('d-m-Y') . ' 17:00:00',
524                     'dtend'       => $tuesday->format('d-m-Y') . ' 18:00:00',
525                 )
526             ),
527             array_merge_recursive($defaultEventData,
528                 array(
529                     'summary'     => static::$_de ? 'Paul vom Klavierunterricht abholen' : 'Pick up Paul after his piano lesson',
530                     'description' => static::$_de ? '' : '',
531                     'dtstart'     => $thursday->format('d-m-Y') . ' 17:00:00',
532                     'dtend'       => $thursday->format('d-m-Y') . ' 18:00:00',
533                 )
534             ),
535
536         );
537         foreach($eventsData as $eData) {
538             $this->_createEvent($eData, false);
539         }
540
541         $cal = Tinebase_Container::getInstance()->addContainer(new Tinebase_Model_Container(array(
542             'name'           => static::$_de ? 'Geschäftlich' : 'Business',
543             'type'           => Tinebase_Model_Container::TYPE_PERSONAL,
544             'owner_id'       => Tinebase_Core::getUser(),
545             'backend'        => 'SQL',
546             'application_id' => Tinebase_Application::getInstance()->getApplicationByName('Calendar')->getId(),
547             'color'          => '#00CCFF'
548         ), true));
549
550         if (isset($this->_personas['sclever'])) {
551             Tinebase_Container::getInstance()->addGrants($cal->getId(), 'user', $this->_personas['sclever']->getId(), $this->_secretaryGrants, true);
552         }
553
554         if (isset($this->_personas['rwright'])) {
555             Tinebase_Container::getInstance()->addGrants($cal->getId(), 'user', $this->_personas['rwright']->getId(), $this->_controllerGrants, true);
556         }
557
558         $defaultEventData['container_id'] = $cal->getId();
559         $defaultEventData['attendee'][] = array(
560             'quantity'  => "1",
561             'role'  => "REQ",
562             'status'  => "NEEDS-ACTION",
563             'transp'  => "OPAQUE",
564             'user_id'  => $this->_personas['jsmith']->toArray(),
565             'user_type'  => "user"
566         );
567         $eventsData = array(
568             array_merge_recursive($defaultEventData,
569                 array(
570                     'summary'     => static::$_de ? 'Projektbesprechung Projekt Epsilon mit John' : 'Project Epsilon Meeting with John',
571                     'description' => static::$_de ? '' : '',
572                     'dtstart'     => $monday->format('d-m-Y') . ' 09:00:00',
573                     'dtend'       => $monday->format('d-m-Y') . ' 10:30:00',
574                 )
575             ),
576         );
577
578         foreach($eventsData as $eData) {
579             $this->_createEvent($eData, false);
580         }
581     }
582
583     /**
584      * creates events for rwright
585      */
586     protected function _createEventsForRwright() {
587         // Roberta Wright
588         $monday = clone $this->_monday;
589         $tuesday = clone $this->_tuesday;
590         $wednesday = clone $this->_wednesday;
591         $thursday = clone $this->_thursday;
592         $friday = clone $this->_friday;
593         $saturday = clone $this->_saturday;
594         $sunday = clone $this->_sunday;
595         $lastMonday = clone $this->_lastMonday;
596         $lastFriday = clone $this->_lastFriday;
597         $lastSaturday = clone $this->_lastSaturday;
598         $lastSunday = clone $this->_lastSunday;
599
600         $cal = $this->_calendars['rwright'];
601         $user = $this->_personas['rwright'];
602
603         $defaultEventData = array(
604             'container_id' => $cal->getId(),
605             'class' => 'PRIVATE',
606             Tinebase_Model_Grants::GRANT_EDIT    => true,
607             'attendee' => array(array(
608                 'quantity'  => "1",
609                 'role'  => "REQ",
610                 'status'  => "ACCEPTED",
611                 'transp'  => "OPAQUE",
612                 'user_id'  => $user->toArray(),
613                 'user_type'  => "user"
614             ))
615         );
616         $eventsData = array(
617             array_merge_recursive($defaultEventData,
618                 array(
619                     'summary'     => static::$_de ? 'Joshuas Geburtstag' : 'Joshua\'s Birthday',
620                     'description' => static::$_de ? '' : '',
621                     'dtstart'     => $monday->format('d-m-Y') . ' 00:00:00',
622                     'dtend'       => $monday->format('d-m-Y') . ' 23:59:00',
623                     'is_all_day_event' => true,
624                     'alarms'      => array(array(
625                         'alarm_time' => $lastSaturday->format('d-m-Y') . " 12:00:00",
626                         'minutes_before' => 2880,
627                         'model' => "Calendar_Model_Event",
628                         'options' => json_encode(array("custom" => false,"recurid" => null,"minutes_before" => "2880")),
629                         'sent_message' => "",
630                         'sent_status' => "pending"
631                     )),
632                     'rrule' => array(
633                         "bymonth" => $monday->format('m'),
634                         "bymonthday" => $monday->format('d'),
635                         "freq" => "YEARLY",
636                         "interval" => "1",
637                     ),
638                     'rrule_until' => ''
639                 )),
640             array_merge_recursive($defaultEventData,
641                 array(
642                     'summary'     => static::$_de ? 'James Geburtstag' : 'James\'s Birthday',
643                     'description' => static::$_de ? '' : '',
644                     'dtstart'     => $friday->format('d-m-Y') . ' 00:00:00',
645                     'dtend'       => $friday->format('d-m-Y') . ' 23:59:00',
646                     'is_all_day_event' => true,
647                     'alarms'      => array(array(
648                         'alarm_time' => $wednesday->format('d-m-Y') . " 12:00:00",
649                         'minutes_before' => 2880,
650                         'model' => "Calendar_Model_Event",
651                         'options' => json_encode(array("custom" => false,"recurid" => null,"minutes_before" => "2880")),
652                         'sent_message' => "",
653                         'sent_status' => "pending"
654                     )),
655                     'rrule' => array(
656                         "bymonth" => $friday->format('m'),
657                         "bymonthday" => $friday->format('d'),
658                         "freq" => "YEARLY",
659                         "interval" => "1",
660                     ),
661                     'rrule_until' => ''
662                 )),
663             array_merge_recursive($defaultEventData,
664                 array(
665                     'summary'     => static::$_de ? 'Shoppen mit Susan' : 'Go shopping with Susan',
666
667                     'description' => static::$_de ? '' : '',
668                     'dtstart'     => $monday->format('d-m-Y') . ' 19:00:00',
669                     'dtend'       => $monday->format('d-m-Y') . ' 23:00:00',
670                 )
671             ),
672             array_merge_recursive($defaultEventData,
673                 array(
674                     'summary'     => static::$_de ? 'Joga Kurs' : 'yoga course',
675                     'description' => static::$_de ? '' : '',
676                     'dtstart'     => $saturday->format('d-m-Y') . ' 16:00:00',
677                     'dtend'       => $saturday->format('d-m-Y') . ' 18:00:00',
678                     'rrule' => array(
679                         "bymonth" => $saturday->format('m'),
680                         "bymonthday" => $saturday->format('d'),
681                         "freq" => "YEARLY",
682                         "interval" => "1",
683                     ),
684                     'rrule_until' => ''
685                 )
686             ),
687             array_merge_recursive($defaultEventData,
688                 array(
689                     'summary'     => static::$_de ? 'Controlling einfach gemacht' : 'Controlling made easy',
690                     'description' => static::$_de ? 'Fortbildungsveranstaltung' : 'further education',
691                     'dtstart'     => $tuesday->format('d-m-Y') . ' 17:00:00',
692                     'dtend'       => $tuesday->format('d-m-Y') . ' 18:00:00',
693                 )
694             )
695         );
696         foreach($eventsData as $eData) {
697             $this->_createEvent($eData, false);
698         }
699
700         $cal = Tinebase_Container::getInstance()->addContainer(new Tinebase_Model_Container(array(
701             'name'           => static::$_de ? 'Geschäftlich' : 'Business',
702             'type'           => Tinebase_Model_Container::TYPE_PERSONAL,
703             'owner_id'       => Tinebase_Core::getUser(),
704             'backend'        => 'SQL',
705             'application_id' => Tinebase_Application::getInstance()->getApplicationByName('Calendar')->getId(),
706             'color'          => '#00CCFF'
707         ), true));
708
709         if (isset($this->_personas['sclever'])) {
710             Tinebase_Container::getInstance()->addGrants($cal->getId(), 'user', $this->_personas['sclever']->getId(), $this->_secretaryGrants, true);
711         }
712
713         $defaultEventData = array(
714             'container_id' => $cal->getId(),
715             Tinebase_Model_Grants::GRANT_EDIT    => true
716         );
717
718         $eventsData = array(
719             array_merge_recursive($defaultEventData,
720                 array(
721                     'summary'     => static::$_de ? 'Präsentation Quartalszahlen' : 'presentation quarter figures',
722                     'description' => static::$_de ? '' : '',
723                     'dtstart'     => $monday->format('d-m-Y') . ' 09:00:00',
724                     'dtend'       => $monday->format('d-m-Y') . ' 10:30:00',
725                 )
726             ),
727             array_merge_recursive($defaultEventData,
728                 array(
729                     'summary'     => static::$_de ? 'Kostenstellenanalyse' : 'cost put analysis',
730                     'description' => static::$_de ? '' : '',
731                     'dtstart'     => $monday->format('d-m-Y') . ' 10:30:00',
732                     'dtend'       => $monday->format('d-m-Y') . ' 12:00:00',
733                 )
734             ),
735             array_merge_recursive($defaultEventData,
736                 array(
737                     'summary'     => static::$_de ? 'Controller Meeting' : 'Controllers meeting',
738                     'description' => static::$_de ? '' : '',
739                     'dtstart'     => $tuesday->format('d-m-Y') . ' 10:30:00',
740                     'dtend'       => $tuesday->format('d-m-Y') . ' 12:00:00',
741                 )
742             ),
743         );
744
745         foreach($eventsData as $eData) {
746             $this->_createEvent($eData, false);
747         }
748
749     }
750     
751     /**
752      * creates events for sclever
753      */
754     protected function _createEventsForSclever() {
755         // Susan Clever
756         $monday = clone $this->_monday;
757         $tuesday = clone $this->_tuesday;
758         $wednesday = clone $this->_wednesday;
759         $thursday = clone $this->_thursday;
760         $friday = clone $this->_friday;
761         $saturday = clone $this->_saturday;
762         $sunday = clone $this->_sunday;
763         $lastMonday = clone $this->_lastMonday;
764         $lastFriday = clone $this->_lastFriday;
765         $lastSaturday = clone $this->_lastSaturday;
766         $lastSunday = clone $this->_lastSunday;
767
768         $cal = $this->_calendars['sclever'];
769         $user = $this->_personas['sclever'];
770
771         $defaultEventData = array(
772             'container_id' => $cal->getId(),
773             'class' => 'PRIVATE',
774             Tinebase_Model_Grants::GRANT_EDIT    => true,
775             'attendee' => array(array(
776                 'quantity'  => "1",
777                 'role'  => "REQ",
778                 'status'  => "ACCEPTED",
779                 'transp'  => "OPAQUE",
780                 'user_id'  => $user->toArray(),
781                 'user_type'  => "user"
782             ))
783         );
784         $eventsData = array(
785             array_merge_recursive($defaultEventData,
786                 array(
787                     'summary'     => static::$_de ? 'Elvis\' Geburtstag' : 'Elvis\' birthday',
788                     'description' => static::$_de ? '' : '',
789                     'dtstart'     => $monday->format('d-m-Y') . ' 00:00:00',
790                     'dtend'       => $monday->format('d-m-Y') . ' 23:59:00',
791                     'is_all_day_event' => true,
792                     'alarms'      => array(array(
793                         'alarm_time' => $lastSaturday->format('d-m-Y') . " 12:00:00",
794                         'minutes_before' => 2880,
795                         'model' => "Calendar_Model_Event",
796                         'options' => json_encode(array("custom" => false,"recurid" => null,"minutes_before" => "2880")),
797                         'sent_message' => "",
798                         'sent_status' => "pending"
799                     )),
800                     'rrule' => array(
801                         "bymonth" => $monday->format('m'),
802                         "bymonthday" => $monday->format('d'),
803                         "freq" => "YEARLY",
804                         "interval" => "1",
805                     ),
806                     'rrule_until' => ''
807                 )),
808             array_merge_recursive($defaultEventData,
809                 array(
810                     'summary'     => static::$_de ? 'James Geburtstag' : 'James\'s Birthday',
811                     'description' => static::$_de ? '' : '',
812                     'dtstart'     => $friday->format('d-m-Y') . ' 00:00:00',
813                     'dtend'       => $friday->format('d-m-Y') . ' 23:59:00',
814                     'is_all_day_event' => true,
815                     'alarms'      => array(array(
816                         'alarm_time' => $wednesday->format('d-m-Y') . " 12:00:00",
817                         'minutes_before' => 2880,
818                         'model' => "Calendar_Model_Event",
819                         'options' => json_encode(array("custom" => false,"recurid" => null,"minutes_before" => "2880")),
820                         'sent_message' => "",
821                         'sent_status' => "pending"
822                     )),
823                     'rrule' => array(
824                         "bymonth" => $friday->format('m'),
825                         "bymonthday" => $friday->format('d'),
826                         "freq" => "YEARLY",
827                         "interval" => "1",
828                     ),
829                     'rrule_until' => ''
830                 )),
831             array_merge_recursive($defaultEventData,
832                 array(
833                     'summary'     => static::$_de ? 'Shoppen mit Roberta' : 'Go shopping with Roberta',
834
835                     'description' => static::$_de ? '' : '',
836                     'dtstart'     => $monday->format('d-m-Y') . ' 19:00:00',
837                     'dtend'       => $monday->format('d-m-Y') . ' 23:00:00',
838                 )
839             ),
840             array_merge_recursive($defaultEventData,
841                 array(
842                     'summary'     => static::$_de ? 'Shoppen gehen' : 'go shopping',
843                     'description' => static::$_de ? '' : '',
844                     'dtstart'     => $saturday->format('d-m-Y') . ' 15:00:00',
845                     'dtend'       => $saturday->format('d-m-Y') . ' 16:00:00',
846                     'rrule' => array(
847                         "bymonth" => $friday->format('m'),
848                         "bymonthday" => $friday->format('d'),
849                         "freq" => "YEARLY",
850                         "interval" => "1",
851                     ),
852                     'rrule_until' => ''
853                 )
854             ),
855             array_merge_recursive($defaultEventData,
856                 array(
857                     'summary'     => static::$_de ? 'Shoppen gehen' : 'go shopping',
858                     'description' => static::$_de ? '' : '',
859                     'dtstart'     => $tuesday->format('d-m-Y') . ' 17:00:00',
860                     'dtend'       => $tuesday->format('d-m-Y') . ' 18:00:00',
861                 )
862             ),
863             array_merge_recursive($defaultEventData,
864                 array(
865                     'summary'     => static::$_de ? 'Tanzen gehen mit Elvis' : 'Dance with Elvis',
866                     'description' => static::$_de ? '' : '',
867                     'dtstart'     => $friday->format('d-m-Y') . ' 19:00:00',
868                     'dtend'       => $friday->format('d-m-Y') . ' 23:00:00',
869                 )
870             ),
871             array_merge_recursive($defaultEventData,
872                 array(
873                     'summary'     => static::$_de ? 'Disco Fever' : 'Disco fever',
874                     'description' => static::$_de ? '' : '',
875                     'dtstart'     => $saturday->format('d-m-Y') . ' 19:00:00',
876                     'dtend'       => $saturday->format('d-m-Y') . ' 23:00:00',
877                 )
878             ),
879         );
880         foreach($eventsData as $eData) {
881             $this->_createEvent($eData, false);
882         }
883
884     }
885
886     protected function _createEventsForJmcblack() {
887
888         // James McBlack
889         $monday =       clone $this->_monday;
890         $tuesday =      clone $this->_tuesday;
891         $wednesday =    clone $this->_wednesday;
892         $thursday =     clone $this->_thursday;
893         $friday =       clone $this->_friday;
894         $saturday =     clone $this->_saturday;
895         $sunday =       clone $this->_sunday;
896         $lastMonday =   clone $this->_lastMonday;
897         $lastFriday =   clone $this->_lastFriday;
898         $lastSaturday = clone $this->_lastSaturday;
899         $lastSunday =   clone $this->_lastSunday;
900
901         $cal = $this->_calendars['jmcblack'];
902         $user = $this->_personas['jmcblack'];
903
904         $defaultEventData = array(
905             'container_id' => $cal->getId(),
906             'class' => 'PRIVATE',
907             Tinebase_Model_Grants::GRANT_EDIT    => true,
908             'attendee' => array(array(
909                 'quantity'  => "1",
910                 'role'  => "REQ",
911                 'status'  => "ACCEPTED",
912                 'transp'  => "OPAQUE",
913                 'user_id'  => $user->toArray(),
914                 'user_type'  => "user"
915             ))
916         );
917         $eventsData = array(
918             array_merge_recursive($defaultEventData,
919                 array(
920                     'summary'     => static::$_de ? 'Catherines Geburtstag' : 'Catherine\'s Birthday',
921                     'description' => static::$_de ? '' : '',
922                     'dtstart'     => $thursday->format('d-m-Y') . ' 00:00:00',
923                     'dtend'       => $thursday->format('d-m-Y') . ' 23:59:00',
924                     'is_all_day_event' => true,
925                     'alarms'      => array(array(
926                         'alarm_time' => $tuesday->format('d-m-Y') . " 12:00:00",
927                         'minutes_before' => 2880,
928                         'model' => "Calendar_Model_Event",
929                         'options' => json_encode(array("custom" => false,"recurid" => null,"minutes_before" => "2880")),
930                         'sent_message' => "",
931                         'sent_status' => "pending"
932                     )),
933                     'rrule' => array(
934                         "bymonth" => $thursday->format('m'),
935                         "bymonthday" => $thursday->format('d'),
936                         "freq" => "YEARLY",
937                         "interval" => "1",
938                     ),
939                     'rrule_until' => ''
940                 )),
941             array_merge_recursive($defaultEventData,
942                 array(
943                     'summary'     => static::$_de ? 'Alyssas Geburtstag' : 'Alyssa\'s Birthday',
944                     'description' => static::$_de ? '' : '',
945                     'dtstart'     => $friday->format('d-m-Y') . ' 00:00:00',
946                     'dtend'       => $friday->format('d-m-Y') . ' 23:59:00',
947                     'is_all_day_event' => true,
948                     'alarms'      => array(array(
949                         'alarm_time' => $wednesday->format('d-m-Y') . " 12:00:00",
950                         'minutes_before' => 2880,
951                         'model' => "Calendar_Model_Event",
952                         'options' => json_encode(array("custom" => false,"recurid" => null,"minutes_before" => "2880")),
953                         'sent_message' => "",
954                         'sent_status' => "pending"
955                     )),
956                     'rrule' => array(
957                         "bymonth" => $friday->format('m'),
958                         "bymonthday" => $friday->format('d'),
959                         "freq" => "YEARLY",
960                         "interval" => "1",
961                     ),
962                     'rrule_until' => ''
963                 )),
964             array_merge_recursive($defaultEventData,
965                 array(
966                     'summary'     => static::$_de ? 'Brendas\' Geburtstag' : 'Brenda\'s Birthday',
967                     'description' => static::$_de ? '' : '',
968                     'dtstart'     => $thursday->format('d-m-Y') . ' 00:00:00',
969                     'dtend'       => $thursday->format('d-m-Y') . ' 23:59:00',
970                     'is_all_day_event' => true,
971                     'alarms'      => array(array(
972                         'alarm_time' => $tuesday->format('d-m-Y') . " 12:00:00",
973                         'minutes_before' => 2880,
974                         'model' => "Calendar_Model_Event",
975                         'options' => json_encode(array("custom" => false,"recurid" => null,"minutes_before" => "2880")),
976                         'sent_message' => "",
977                         'sent_status' => "pending"
978                     )),
979                     'rrule' => array(
980                         "bymonth" => $thursday->format('m'),
981                         "bymonthday" => $thursday->format('d'),
982                         "freq" => "YEARLY",
983                         "interval" => "1",
984                     ),
985                     'rrule_until' => ''
986                 )),
987             array_merge_recursive($defaultEventData,
988                 array(
989                     'summary'     => static::$_de ? 'Automesse in Liverpool' : 'Auto fair in Liverpool',
990                     'description' => static::$_de ? '' : '',
991                     'dtstart'     => $monday->format('d-m-Y') . ' 19:00:00',
992                     'dtend'       => $monday->format('d-m-Y') . ' 23:00:00',
993                 )
994             ),
995             array_merge_recursive($defaultEventData,
996                 array(
997                     'summary'     => static::$_de ? 'Weinverkostung auf der Burg' : 'Wine tasting at the castle',
998                     'description' => static::$_de ? '' : '',
999                     'dtstart'     => $saturday->format('d-m-Y') . ' 15:00:00',
1000                     'dtend'       => $saturday->format('d-m-Y') . ' 16:00:00',
1001                 )
1002             ),
1003             array_merge_recursive($defaultEventData,
1004                 array(
1005                     'summary'     => static::$_de ? 'Eigentümerversammlung' : 'Owners\' meeting',
1006                     'description' => static::$_de ? '' : '',
1007                     'dtstart'     => $tuesday->format('d-m-Y') . ' 17:00:00',
1008                     'dtend'       => $tuesday->format('d-m-Y') . ' 18:00:00',
1009                 )
1010             ),
1011             array_merge_recursive($defaultEventData,
1012                 array(
1013                     'summary'     => static::$_de ? 'Datamining Konferenz' : 'Data mining conference',
1014                     'description' => static::$_de ? '' : '',
1015                     'dtstart'     => $thursday->format('d-m-Y') . ' 17:00:00',
1016                     'dtend'       => $thursday->format('d-m-Y') . ' 18:00:00',
1017                 )
1018             )
1019         );
1020         foreach($eventsData as $eData) {
1021             $this->_createEvent($eData, false);
1022         }
1023
1024         $cal = Tinebase_Container::getInstance()->addContainer(new Tinebase_Model_Container(array(
1025             'name'           => static::$_de ? 'Geschäftlich' : 'Business',
1026             'type'           => Tinebase_Model_Container::TYPE_PERSONAL,
1027             'owner_id'       => Tinebase_Core::getUser(),
1028             'backend'        => 'SQL',
1029             'application_id' => Tinebase_Application::getInstance()->getApplicationByName('Calendar')->getId(),
1030             'color'          => '#00CCFF'
1031         ), true));
1032
1033         if (isset($this->_personas['sclever'])) {
1034             Tinebase_Container::getInstance()->addGrants($cal->getId(), 'user', $this->_personas['sclever']->getId(), $this->_secretaryGrants, true);
1035         }
1036         if (isset($this->_personas['rwright'])) {
1037             Tinebase_Container::getInstance()->addGrants($cal->getId(), 'user', $this->_personas['rwright']->getId(), $this->_controllerGrants, true);
1038         }
1039
1040         $defaultEventData = array(
1041             'container_id' => $cal->getId(),
1042             Tinebase_Model_Grants::GRANT_EDIT    => true
1043         );
1044
1045         $eventsData = array(
1046             array_merge_recursive($defaultEventData,
1047                 array(
1048                     'summary'     => static::$_de ? 'Projektbesprechung Projekt Gamma mit Herrn Pearson' : 'Project Gamma Meeting with Mr. Pearson',
1049                     'description' => static::$_de ? '' : '',
1050                     'dtstart'     => $monday->format('d-m-Y') . ' 09:00:00',
1051                     'dtend'       => $monday->format('d-m-Y') . ' 10:30:00',
1052                 )
1053             ),
1054             array_merge_recursive($defaultEventData,
1055                 array(
1056                     'summary'     => static::$_de ? 'MDH Pitch' : 'MDH Pitch',
1057                     'description' => static::$_de ? '' : '',
1058                     'dtstart'     => $monday->format('d-m-Y') . ' 10:30:00',
1059                     'dtend'       => $monday->format('d-m-Y') . ' 12:00:00',
1060                 )
1061             ),
1062             array_merge_recursive($defaultEventData,
1063                 array(
1064                     'summary'     => static::$_de ? 'Mitarbeitergespräch mit Jack' : 'employee appraisal with Jack',
1065                     'description' => static::$_de ? '' : '',
1066                     'dtstart'     => $monday->format('d-m-Y') . ' 10:30:00',
1067                     'dtend'       => $monday->format('d-m-Y') . ' 12:00:00',
1068                 )
1069             ),
1070         );
1071
1072         foreach($eventsData as $eData) {
1073             $this->_createEvent($eData, false);
1074         }
1075     }
1076
1077     protected function _createEvent($eData, $checkBusy = true)
1078     {
1079         $tz = static::$_de ? 'Europe/Berlin' : 'UTC';
1080
1081         $eData['originator_tz'] = $tz;
1082         date_default_timezone_set($tz);
1083         $event = new Calendar_Model_Event($eData);
1084         $event->setTimezone('UTC');
1085         date_default_timezone_set('UTC');
1086
1087         $this->_controller->create($event, $checkBusy);
1088     }
1089 }