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); } }
/** * 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)); }
/** * 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)); }
/** * 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()); }
/** * 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())); }
/** * 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; }
/** * 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; }
/** * 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); }