Beispiel #1
0
 public function isAlreadyUsedCalendarId(Member $member = null, $token = null)
 {
     $member = $this->getMember($member);
     $id = $this->getPrimaryId($member, $token);
     $memberId = opCalendarPluginToolkit::seekEmailAndGetMemberId($id);
     return $memberId && (int) $member->id !== (int) $memberId;
 }
 protected function getContents($id, Google_Service_Calendar $calendar)
 {
     $endYear = date('Y', strtotime('+1 month'));
     $endMonth = date('m', strtotime('+1 month'));
     $endDay = opCalendarPluginToolkit::getLastDay($endMonth, $endYear);
     return $calendar->events->listEvents($id, array('timeMin' => date('c', strtotime(sprintf('%s-01 00:00:00', date('Y-m', strtotime('-1 month'))))), 'timeMax' => date('c', strtotime(sprintf('%04d-%02d-%02d 23:59:59', $endYear, $endMonth, $endDay))), 'showDeleted' => true));
 }
 protected function getContents($src, $token)
 {
     // get 3 months data.
     $api = new opCalendarApi($this->consumer, new OAuthConsumer($token['token'], $token['secret']), opCalendarApiHandler::GET, $src, array('start-min' => date('Y-m-01\\T00:00:00', strtotime('-1 month')), 'start-max' => sprintf(date('Y-m-%02\\d\\T23:59:59', strtotime('+1 month')), opCalendarPluginToolkit::getLastDay(date('m', strtotime('+1 month')))), 'alt' => 'jsonc'));
     $handler = new opCalendarApiHandler($api, new opCalendarApiResultsJsonEvents());
     $results = $handler->execute();
     return $results->is200StatusCode() ? $results : false;
 }
 public function validateMonthDay(sfValidatorBase $validator, $values)
 {
     $limitedMonths = array(2 => $values['year'] ? opCalendarPluginToolkit::isLeap((int) $values['year']) ? 29 : 28 : 29, 4 => 30, 6 => 30, 9 => 30, 11 => 30);
     if (isset($limitedMonths[$values['month']]) && $limitedMonths[(int) $values['month']] < (int) $values['day']) {
         throw new sfValidatorError($validator, 'invalid');
     }
     return $values;
 }
 public function save()
 {
     $values = $this->getValues();
     $list = $this->getOption('list');
     $opGoogleCalendarOAuth = $this->getOption('opGoogleCalendarOAuth');
     $entry = $list[$values['choice']];
     $result = $opGoogleCalendarOAuth->getContents(str_replace(opGoogleCalendarOAuth::SCOPE, '', $entry['contents']['src']), 'opCalendarApiResultsJsonEvents', opCalendarApiHandler::GET, array('start-min' => sprintf('%04d-%02d-01T00:00:00', date('Y'), $values['months']), 'start-max' => sprintf('%04d-%02d-%02dT23:59:59', date('Y'), $values['months'], opCalendarPluginToolkit::getLastDay($values['months'])), 'alt' => 'jsonc'));
     if (!$result) {
         return false;
     }
     opCalendarPluginToolkit::updateGoogleCalendarCronFlags($entry['contents']['src'], $values['google_cron_update'][0], $values['public_flag'], $this->member);
     return opCalendarPluginToolkit::insertSchedules($result->toArray(), $values['public_flag'], true);
 }
 public function save()
 {
     $values = $this->getValues();
     $id = $this->getOption('id');
     $googleCronUpdate = isset($values['google_cron_update']) && (bool) $values['google_cron_update'];
     $publicFlag = $values['public_flag'];
     $calendar = $this->getOption('googleCalendar');
     $lastDay = opCalendarPluginToolkit::getLastDay($values['months']);
     $yearMonth = sprintf('%04d-%02d', date('Y'), $values['months']);
     $events = $calendar->events->listEvents($id, array('timeMin' => date('c', strtotime(sprintf('%s-01 00:00:00', $yearMonth))), 'timeMax' => date('c', strtotime(sprintf('%s-%02d 23:59:59', $yearMonth, $lastDay))), 'showDeleted' => true));
     if (!$events) {
         return false;
     }
     opCalendarPluginToolkit::updateGoogleCalendarCronFlags($googleCronUpdate, $publicFlag, $this->member);
     return opCalendarPluginToolkit::insertSchedules($events, $publicFlag);
 }
 public function save()
 {
     if ($this->isOAuthAuthenticate() && array_key_exists(self::IS_GOOGLE_CALENDAR_OAUTH_KEY_REVOKE, $this->values)) {
         $isDelete = (bool) $this->values[self::IS_GOOGLE_CALENDAR_OAUTH_KEY_REVOKE];
         unset($this->values[self::IS_GOOGLE_CALENDAR_OAUTH_KEY_REVOKE]);
         if ($isDelete) {
             $con = opDoctrineQuery::getMasterConnection();
             $con->beginTransaction();
             try {
                 $this->opCalendarOAuth->getClient()->revokeToken();
                 opCalendarPluginToolkit::deleteMemberGoogleCalendar($this->member);
                 $con->commit();
             } catch (Exception $e) {
                 $con->rollback();
                 return false;
             }
         }
     }
     return parent::save();
 }
 public function updateApiFromArray($list)
 {
     $scheduleMemberTable = Doctrine_Core::getTable('ScheduleMember');
     $conn = $this->getConnection();
     $conn->beginTransaction();
     try {
         $sql = 'SELECT id, api_etag FROM ' . $this->getTableName() . ' WHERE api_flag = ? AND api_id_unique = ?';
         $params = array($list['api_flag'], $list['api_id_unique']);
         if ($schedule = $conn->fetchRow($sql, $params)) {
             $id = $schedule['id'];
             if ($list['api_etag'] === $schedule['api_etag']) {
                 $conn->rollback();
                 return $id;
             }
             $sql = 'DELETE ' . $scheduleMemberTable->getTableName() . ' FROM ' . $scheduleMemberTable->getTableName() . ' WHERE schedule_id = ?';
             $conn->execute($sql, array((int) $id));
         }
         $scheduleMembers = array_unique($list['ScheduleMember']);
         unset($list['ScheduleMember']);
         if (!isset($id)) {
             if (!($id = opCalendarPluginToolkit::insertInto($this->getTableName(), $list, $conn))) {
                 throw new Exception('schedule commit error.');
             }
         } else {
             if (!opCalendarPluginToolkit::update($this->getTableName(), $list, array('id' => (int) $id), $conn)) {
                 throw new Exception('schedule commit error.');
             }
         }
         $members = array();
         foreach ($scheduleMembers as $member_id) {
             $members['member_id'] = $member_id;
             $members['schedule_id'] = $id;
             opCalendarPluginToolkit::insertInto($scheduleMemberTable->getTableName(), $members, $conn);
         }
         $conn->commit();
     } catch (Exception $e) {
         $conn->rollback();
         throw $e;
     }
     return $id;
 }
 public function updateApiFromEvent(Google_Service_Calendar_Event $event, Member $member, $publicFlag)
 {
     $conn = $this->getConnection();
     $conn->beginTransaction();
     try {
         $schedule = $this->findOneByApiIdUnique($event->id);
         if ('cancelled' === $event->status) {
             if ($schedule) {
                 $schedule->delete();
             }
             $conn->commit();
             return true;
         }
         if (!$schedule) {
             $schedule = new Schedule();
             $schedule->setApiIdUnique($event->id);
         } elseif ($event->etag === $schedule->api_etag) {
             $conn->rollback();
             return $schedule->id;
         }
         $schedule->setTitle($event->summary);
         $schedule->setBody($event->description);
         $schedule->setMember($member);
         $schedule->setPublicFlag($this->getEventPublicFlag($event, $publicFlag));
         if ($event->start->dateTime) {
             $startDateTime = new DateTime($event->start->dateTime);
             $schedule->setStartDate($startDateTime->format('Y-m-d'));
             $schedule->setStartTime($startDateTime->format('H:i:s'));
         } elseif ($event->start->date) {
             $schedule->setStartDate($event->start->date);
         }
         if ($event->end->dateTime) {
             $endDateTime = new DateTime($event->end->dateTime);
             $schedule->setEndDate($endDateTime->format('Y-m-d'));
             $schedule->setEndTime($endDateTime->format('H:i:s'));
         } elseif ($event->end->date) {
             $schedule->setStartDate($event->end->date);
         }
         $schedule->setApiEtag($event->etag);
         $schedule->save();
         ScheduleMemberTable::getInstance()->updateScheduleMember(array('schedule_id' => $schedule->id, 'member_id' => $schedule->member_id));
         foreach ($event->attendees as $attendee) {
             $memberId = opCalendarPluginToolkit::seekEmailAndGetMemberId($attendee->email);
             if (!$memberId) {
                 continue;
             }
             ScheduleMemberTable::getInstance()->updateScheduleMember(array('schedule_id' => $schedule->id, 'member_id' => $memberId));
         }
         $conn->commit();
     } catch (Exception $e) {
         $conn->rollback();
         throw $e;
     }
     return $schedule->id;
 }