コード例 #1
0
ファイル: SqlTest.php プロジェクト: rodrigofns/ExpressoLivre3
 public function testSearchEvents()
 {
     $from = '2009-04-03 00:00:00';
     $until = '2009-04-10 23:59:59';
     $events = new Tinebase_Record_RecordSet('Calendar_Model_Event', array(array('dtstart' => '2009-04-02 22:00:00', 'dtend' => '2009-04-02 23:59:59', 'summary' => 'non recur event ending before search period => should _not_ be found', 'attendee' => $this->_getAttendee(), 'container_id' => $this->_testCalendar->getId(), 'organizer' => Tinebase_Core::getUser()->getId(), 'uid' => Calendar_Model_Event::generateUID(), Tinebase_Model_Grants::GRANT_READ => true), array('dtstart' => '2009-04-02 23:30:00', 'dtend' => '2009-04-03 00:30:00', 'summary' => 'non recur event ending within search period => should be found', 'attendee' => $this->_getAttendee(), 'container_id' => $this->_testCalendar->getId(), 'organizer' => Tinebase_Core::getUser()->getId(), 'uid' => Calendar_Model_Event::generateUID(), Tinebase_Model_Grants::GRANT_READ => true), array('dtstart' => '2009-04-06 12:00:00', 'dtend' => '2009-04-07 12:00:00', 'summary' => 'non recur event completly within search period => should be found', 'attendee' => $this->_getAttendee(), 'container_id' => $this->_testCalendar->getId(), 'organizer' => Tinebase_Core::getUser()->getId(), 'uid' => Calendar_Model_Event::generateUID(), Tinebase_Model_Grants::GRANT_READ => true), array('dtstart' => '2009-04-10 23:30:00', 'dtend' => '2009-04-11 00:30:00', 'summary' => 'non recur event starting within search period => should be found', 'attendee' => $this->_getAttendee(), 'container_id' => $this->_testCalendar->getId(), 'organizer' => Tinebase_Core::getUser()->getId(), 'uid' => Calendar_Model_Event::generateUID(), Tinebase_Model_Grants::GRANT_READ => true), array('dtstart' => '2009-04-11 00:00:00', 'dtend' => '2009-04-11 02:00:00', 'summary' => 'non recur event starting after search period => should _not_ be found', 'attendee' => $this->_getAttendee(), 'container_id' => $this->_testCalendar->getId(), 'organizer' => Tinebase_Core::getUser()->getId(), 'uid' => Calendar_Model_Event::generateUID(), Tinebase_Model_Grants::GRANT_READ => true), array('dtstart' => '2009-03-27 22:00:00', 'dtend' => '2009-03-27 23:59:59', 'rrule' => 'FREQ=DAILY;INTERVAL=1;UNTIL=2009-04-02 23:59:59', 'summary' => 'recur event ending before search period => should _not_ be found', 'attendee' => $this->_getAttendee(), 'container_id' => $this->_testCalendar->getId(), 'organizer' => Tinebase_Core::getUser()->getId(), 'uid' => Calendar_Model_Event::generateUID(), 'rrule_until' => '2009-04-02 23:59:59', Tinebase_Model_Grants::GRANT_READ => true), array('dtstart' => '2009-03-27 22:00:00', 'dtend' => '2009-03-27 23:59:59', 'rrule' => 'FREQ=DAILY;INTERVAL=1;UNTIL=2009-04-05 23:59:59', 'summary' => 'recur event ending within search period => should be found', 'attendee' => $this->_getAttendee(), 'container_id' => $this->_testCalendar->getId(), 'organizer' => Tinebase_Core::getUser()->getId(), 'uid' => Calendar_Model_Event::generateUID(), 'rrule_until' => '2009-04-05 23:59:59', Tinebase_Model_Grants::GRANT_READ => true), array('dtstart' => '2009-04-03 22:00:00', 'dtend' => '2009-04-03 23:59:59', 'rrule' => 'FREQ=DAILY;INTERVAL=1;UNTIL=2009-04-06 23:59:59', 'summary' => 'recur event completly within search period => should be found', 'attendee' => $this->_getAttendee(), 'container_id' => $this->_testCalendar->getId(), 'organizer' => Tinebase_Core::getUser()->getId(), 'uid' => Calendar_Model_Event::generateUID(), 'rrule_until' => '2009-04-06 23:59:59', Tinebase_Model_Grants::GRANT_READ => true), array('dtstart' => '2009-04-03 22:00:00', 'dtend' => '2009-04-03 23:59:59', 'rrule' => 'FREQ=DAILY;INTERVAL=1;UNTIL=2009-04-12 23:59:59', 'summary' => 'recur event starting within search period => should be found', 'attendee' => $this->_getAttendee(), 'container_id' => $this->_testCalendar->getId(), 'organizer' => Tinebase_Core::getUser()->getId(), 'uid' => Calendar_Model_Event::generateUID(), 'rrule_until' => '2009-04-12 23:59:59', Tinebase_Model_Grants::GRANT_READ => true), array('dtstart' => '2009-04-11 00:00:00', 'dtend' => '2009-04-11 02:00:00', 'rrule' => 'FREQ=DAILY;INTERVAL=1;UNTIL=2009-04-15 02:00:00', 'summary' => 'recur event starting after search period => should _not_ be found', 'attendee' => $this->_getAttendee(), 'container_id' => $this->_testCalendar->getId(), 'organizer' => Tinebase_Core::getUser()->getId(), 'uid' => Calendar_Model_Event::generateUID(), 'rrule_until' => '2009-04-15 02:00:00', Tinebase_Model_Grants::GRANT_READ => true)));
     foreach ($events as $event) {
         $persistentEvent = $this->_backend->create($event);
         $event->attendee->cal_event_id = $persistentEvent->getId();
         foreach ($event->attendee as $attender) {
             $this->_backend->createAttendee($attender);
         }
     }
     $filter = new Calendar_Model_EventFilter(array(array('field' => 'container_id', 'operator' => 'equals', 'value' => $this->_testCalendar->getId()), array('field' => 'period', 'operator' => 'within', 'value' => array('from' => $from, 'until' => $until))));
     $eventsFound = $this->_backend->search($filter, new Tinebase_Model_Pagination());
     $eventsFoundIds = $eventsFound->getArrayOfIds();
     foreach ($events as $event) {
         $eventId = $event->getId();
         if (strpos($event->summary, '_not_') === false) {
             $this->assertTrue(in_array($eventId, $eventsFoundIds), 'The following event is missing in the search result :' . print_r($event->toArray(), true));
         } else {
             $this->assertFalse(in_array($eventId, $eventsFoundIds), 'The following event is in the search result, but should not be :' . print_r($event->toArray(), true));
         }
     }
     $expectedAttendee = $this->_getAttendee();
     foreach ($eventsFound as $fetchedEvent) {
         $this->_assertAttendee($expectedAttendee, $fetchedEvent->attendee);
     }
 }
コード例 #2
0
 /**
  * returns a simple event
  *
  * @param array $_contact
  * @return Calendar_Model_Event
  */
 protected function _getEvent($_contact)
 {
     $testCalendar = Tinebase_Container::getInstance()->addContainer(new Tinebase_Model_Container(array('name' => 'PHPUnit test calendar', 'type' => Tinebase_Model_Container::TYPE_PERSONAL, 'backend' => 'Sql', 'application_id' => Tinebase_Application::getInstance()->getApplicationByName('Calendar')->getId()), true));
     return new Calendar_Model_Event(array('summary' => 'Wakeup', 'dtstart' => '2009-03-25 06:00:00', 'dtend' => '2009-03-25 06:15:00', 'description' => 'Early to bed and early to rise, makes a men healthy, wealthy and wise', 'attendee' => new Tinebase_Record_RecordSet('Calendar_Model_Attender', array(array('user_id' => Tinebase_Core::getUser()->contact_id, 'user_type' => Calendar_Model_Attender::USERTYPE_USER, 'role' => Calendar_Model_Attender::ROLE_REQUIRED, 'status_authkey' => Tinebase_Record_Abstract::generateUID()), array('user_id' => $_contact['id'], 'user_type' => Calendar_Model_Attender::USERTYPE_USER, 'role' => Calendar_Model_Attender::ROLE_OPTIONAL, 'status_authkey' => Tinebase_Record_Abstract::generateUID()))), 'container_id' => $testCalendar->getId(), 'organizer' => Tinebase_Core::getUser()->contact_id, 'uid' => Calendar_Model_Event::generateUID(), Tinebase_Model_Grants::GRANT_READ => true, Tinebase_Model_Grants::GRANT_EDIT => true, Tinebase_Model_Grants::GRANT_DELETE => true));
 }
コード例 #3
0
 /**
  * returns a simple event
  *
  * @return Calendar_Model_Event
  */
 protected function _getEvent()
 {
     return new Calendar_Model_Event(array('summary' => 'Wakeup', 'dtstart' => '2009-03-25 06:00:00', 'dtend' => '2009-03-25 06:15:00', 'description' => 'Early to bed and early to rise, makes a men healthy, wealthy and wise', 'attendee' => $this->_getAttendee(), 'container_id' => $this->_testCalendar->getId(), 'organizer' => $this->_testUserContact->getId(), 'uid' => Calendar_Model_Event::generateUID(), Tinebase_Model_Grants::GRANT_READ => true, Tinebase_Model_Grants::GRANT_EDIT => true, Tinebase_Model_Grants::GRANT_DELETE => true));
 }
コード例 #4
0
 /**
  * saves exdates of an event
  *
  * @param Calendar_Model_Event $_event
  */
 protected function _saveExdates($_event)
 {
     $this->_db->delete($this->_tablePrefix . 'cal_exdate', $this->_db->quoteInto($this->_db->quoteIdentifier('cal_event_id') . '= ?', $_event->getId()));
     // only save exdates if its an recurring event
     if (!empty($_event->rrule)) {
         foreach ((array) $_event->exdate as $exdate) {
             if (is_object($exdate)) {
                 $this->_db->insert($this->_tablePrefix . 'cal_exdate', array('id' => $_event->generateUID(), 'cal_event_id' => $_event->getId(), 'exdate' => $exdate->get(Tinebase_Record_Abstract::ISO8601LONG)));
             } else {
                 if (Tinebase_Core::isLogLevel(Zend_Log::WARN)) {
                     Tinebase_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__ . ' Exdate needs to be an object:' . var_export($exdate, TRUE));
                 }
             }
         }
     }
 }
 /**
  * test alarm inspection from 24.03.2012 -> 25.03.2012
  */
 public function testAdoptAlarmDSTBoundaryWithSkipping()
 {
     $event = new Calendar_Model_Event(array('summary' => 'Cleanup', 'dtstart' => '2012-01-31 07:30:00', 'dtend' => '2012-01-31 10:30:00', 'container_id' => $this->_getTestCalendar()->getId(), 'uid' => Calendar_Model_Event::generateUID(), 'rrule' => 'FREQ=WEEKLY;INTERVAL=1;WKST=MO;BYDAY=TU', 'originator_tz' => 'Europe/Berlin'));
     $alarm = new Tinebase_Model_Alarm(array('model' => 'Calendar_Model_Event', 'alarm_time' => '2012-03-26 06:30:00', 'minutes_before' => 1440, 'options' => '{"minutes_before":1440,"recurid":"a7c55ce09cea9aec4ac37d9d72789183b12cad7c-2012-03-27 06:30:00","custom":false}'));
     $this->_eventController->adoptAlarmTime($event, $alarm, 'instance');
     $this->assertEquals('2012-04-02 06:30:00', $alarm->alarm_time->toString());
 }
コード例 #6
0
 /**
  * returns a simple event
  *
  * @return Calendar_Model_Event
  * @param bool $_now
  * @param bool $mute
  * @todo replace with TestCase::_getEvent
  */
 protected function _getEvent($now = FALSE, $mute = NULL)
 {
     return new Calendar_Model_Event(array('summary' => 'Sleep very long', 'dtstart' => '2012-03-25 01:00:00', 'dtend' => '2012-03-25 11:15:00', 'description' => 'Early to bed and early to rise, makes a men healthy, wealthy and wise ... not.', 'attendee' => $this->_getAttendee(), 'organizer' => Tinebase_Core::getUser()->contact_id, 'uid' => Calendar_Model_Event::generateUID()));
 }
コード例 #7
0
 /**
  * gets implicit exceptions due to status settings
  * 
  * @param  array                $_egwEventAttendee
  * @return Tinebase_Record_RecordSet of Calendar_Model_Event
  */
 protected function _getRecurImplicitExceptions($_egwEventData)
 {
     $implictExceptions = new Tinebase_Record_RecordSet('Calendar_Model_Event');
     if (empty($_egwEventData['attendee'])) {
         return $implictExceptions;
     }
     $select = $this->_egwDb->select()->from(array('attendee' => 'egw_cal_user'), 'DISTINCT(' . $this->_egwDb->quoteIdentifier('attendee.cal_recur_date') . ')')->where($this->_egwDb->quoteInto($this->_egwDb->quoteIdentifier('cal_id') . ' = ?', $_egwEventData['attendee'][0]['cal_id']))->where($this->_egwDb->quoteInto($this->_egwDb->quoteIdentifier('cal_recur_date') . ' != ?', 0));
     $groupSelect = new Tinebase_Backend_Sql_Filter_GroupSelect($select);
     foreach ($_egwEventData['attendee'] as $attender) {
         $groupSelect->orWhere($this->_egwDb->quoteInto($this->_egwDb->quoteIdentifier('attendee.cal_user_type') . ' = ?', $attender['cal_user_type']) . ' AND ' . $this->_egwDb->quoteInto($this->_egwDb->quoteIdentifier('attendee.cal_user_id') . ' = ?', $attender['cal_user_id']) . ' AND ' . $this->_egwDb->quoteInto($this->_egwDb->quoteIdentifier('attendee.cal_status') . ' NOT LIKE ?', $attender['cal_status']));
     }
     $groupSelect->appendWhere(Zend_Db_Select::SQL_AND);
     $egwExceptionDates = $this->_egwDb->fetchAll($select, NULL, Zend_Db::FETCH_ASSOC);
     if (count($egwExceptionDates) > 0) {
         $this->_log->debug(__METHOD__ . '::' . __LINE__ . ' found ' . count($egwExceptionDates) . ' implicit exceptions for event ' . $_egwEventData['attendee'][0]['cal_id']);
         //print_r($_egwEventAttendee);
     }
     if (count($egwExceptionDates) > 500) {
         $this->_log->err(__METHOD__ . '::' . __LINE__ . " egw's horizont for event " . $_egwEventData['attendee'][0]['cal_id'] . " seems to be broken. Status exceptions will not be considered/migrated");
         return $implictExceptions;
     }
     //print_r($egwExceptionDates);
     $eventDuration = $_egwEventData['cal_end'] - $_egwEventData['cal_start'];
     foreach ($egwExceptionDates as $exdate) {
         $select = $this->_egwDb->select()->from(array('attendee' => 'egw_cal_user'))->where($this->_egwDb->quoteInto($this->_egwDb->quoteIdentifier('cal_recur_date') . ' = ?', $exdate['cal_recur_date']));
         $egwExceptionEventAttendee = $this->_egwDb->fetchAll($select, NULL, Zend_Db::FETCH_ASSOC);
         $exEventData = $_egwEventData;
         $exEventData['cal_id'] = Calendar_Model_Event::generateUID();
         $exEventData['cal_start'] = $exdate['cal_recur_date'];
         $exEventData['cal_end'] = $exdate['cal_recur_date'] + $eventDuration;
         $exEventData['attendee'] = $egwExceptionEventAttendee;
         $event = $this->_getTineEventRecord($exEventData);
         $event->attendee = $this->_getEventAttendee($exEventData);
         $implictExceptions->addRecord($event);
     }
     return $implictExceptions;
 }
コード例 #8
0
 /**
  * returns a simple event
  * 
  * @param bool $now
  * @param bool $mute
  * @return Calendar_Model_Event
  */
 protected function _getEvent($now = FALSE, $mute = NULL)
 {
     $event = new Calendar_Model_Event(array('summary' => 'Wakeup', 'dtstart' => '2009-03-25 06:00:00', 'dtend' => '2009-03-25 06:15:00', 'description' => 'Early to bed and early to rise, makes a men healthy, wealthy and wise', 'attendee' => $this->_getAttendee(), 'container_id' => $this->_getTestCalendar()->getId(), 'organizer' => $this->_getTestUserContact()->getId(), 'uid' => Calendar_Model_Event::generateUID(), 'mute' => $mute, Tinebase_Model_Grants::GRANT_READ => true, Tinebase_Model_Grants::GRANT_EDIT => true, Tinebase_Model_Grants::GRANT_DELETE => true));
     if ($now) {
         $event->dtstart = Tinebase_DateTime::now();
         $event->dtend = Tinebase_DateTime::now()->addMinute(15);
     }
     return $event;
 }
コード例 #9
0
 /**
  * adds feast days to feast calendar
  *
  * @param array|Tinebase_DateTime $date
  */
 protected function _createFeastDay($date)
 {
     if (!$this->_feast_calendar) {
         $this->_getFeastCalendar();
     }
     $organizer = Addressbook_Controller_Contact::getInstance()->getContactByUserId(Tinebase_Core::getUser()->getId());
     if (is_array($date)) {
         $allDay = TRUE;
         if (count($date) == 1) {
             $dtstart = $date[0]->setTimezone(Tinebase_Core::getUserTimezone())->setTime(0, 0, 0);
             $dtend = clone $dtstart;
         } else {
             $dtstart = $date[0]->setTimezone(Tinebase_Core::getUserTimezone())->setTime(0, 0, 0);
             $dtend = clone $dtstart;
             $dtend = $dtend->addDay(count($date))->subHour(5);
         }
     } else {
         $allDay = FALSE;
         $dtstart = $date->setTimezone(Tinebase_Core::getUserTimezone())->setTime(6, 0, 0);
         $dtend = clone $dtstart;
         $dtend->addMinute(15);
     }
     $event = new Calendar_Model_Event(array('summary' => 'Feast Day', 'dtstart' => $dtstart->format('Y-m-d H:i:s'), 'dtend' => $dtend->format('Y-m-d H:i:s'), 'description' => Tinebase_Record_Abstract::generateUID(10), 'container_id' => $this->_feast_calendar->getId(), 'organizer' => $organizer->getId(), 'uid' => Calendar_Model_Event::generateUID(), 'is_all_day_event' => $allDay, 'attendee' => new Tinebase_Record_RecordSet('Calendar_Model_Attender', array(array('user_id' => $organizer->getId(), 'user_type' => Calendar_Model_Attender::USERTYPE_USER, 'role' => Calendar_Model_Attender::ROLE_REQUIRED, 'status_authkey' => Tinebase_Record_Abstract::generateUID()))), Tinebase_Model_Grants::GRANT_READ => true, Tinebase_Model_Grants::GRANT_EDIT => true, Tinebase_Model_Grants::GRANT_DELETE => true));
     return Calendar_Controller_Event::getInstance()->create($event);
 }