/** * @inheritdoc */ public function disableContentContainer(ContentContainerActiveRecord $container) { parent::disableContentContainer($container); foreach (CalendarEntry::find()->contentContainer($container)->all() as $entry) { $entry->delete(); } }
public function run() { $calendarEntries = CalendarEntry::getUpcomingEntries($this->contentContainer, $this->daysInFuture, $this->maxEvents); if (count($calendarEntries) == 0) { return; } return $this->render('nextEvents', array('calendarEntries' => $calendarEntries)); }
public function up() { // Namespace Classes $this->renameClass('CalendarEntry', CalendarEntry::className()); $this->renameClass('CalendarEntryParticipant', CalendarEntryParticipant::className()); // Merge EntryCreated to ContentCreated Activity $this->update('activity', ['class' => 'humhub\\modules\\content\\activities\\ContentCreated'], ['class' => 'EntryCreated']); $this->update('activity', ['class' => \humhub\modules\calendar\activities\ResponseAttend::className()], ['class' => 'EntryResponseAttend']); $this->update('activity', ['class' => \humhub\modules\calendar\activities\ResponseDeclined::className()], ['class' => 'EntryResponseDeclined']); $this->update('activity', ['class' => \humhub\modules\calendar\activities\ResponseMaybe::className()], ['class' => 'EntryResponseMaybe']); }
public function actionLoadAjax() { Yii::$app->response->format = 'json'; $output = array(); $startDate = new DateTime(Yii::$app->request->get('start')); $endDate = new DateTime(Yii::$app->request->get('end')); $entries = CalendarEntry::getContainerEntriesByRange($startDate, $endDate, $this->contentContainer); foreach ($entries as $entry) { $output[] = $entry->getFullCalendarArray(); } return $output; }
public function actionLoadAjax() { Yii::$app->response->format = 'json'; $output = array(); $startDate = new \DateTime(Yii::$app->request->get('start')); $endDate = new \DateTime(Yii::$app->request->get('end')); $selectors = explode(",", Yii::$app->request->get('selectors')); $filters = explode(",", Yii::$app->request->get('filters')); Yii::$app->user->getIdentity()->setSetting('lastSelectors', Json::encode($selectors), 'calendar'); Yii::$app->user->getIdentity()->setSetting('lastFilters', Json::encode($filters), 'calendar'); $entries = CalendarEntry::getEntriesByRange($startDate, $endDate, $selectors, $filters); foreach ($entries as $entry) { $output[] = $entry->getFullCalendarArray(); } return $output; }
/** * Returns a readable calendar entry by given id * * @param int $id * @return CalendarEntry */ protected function getCalendarEntry($id) { return CalendarEntry::find()->contentContainer($this->contentContainer)->readable()->where(['calendar_entry.id' => $id])->one(); }
private function iCalParseTmpFile($path) { $user = $container = $this->content->container; $public = false; if ($container instanceof Space) { $public = $container->getDefaultContentVisibility(); $user = User::findOne(['id' => $this->content->user_id]); } Yii::$app->user->setIdentity($user); $config = array("unique_id" => "ical{$this->id}", "filename" => basename($path), "directory" => dirname($path)); $vcalendar = new vcalendar($config); $vcalendar->parse(); while ($event = $vcalendar->getComponent('vevent')) { $dtstart = $event->getProperty("dtstart"); $dtend = $event->getProperty("dtend"); $all_day = !isset($dtstart["hour"]); if ($all_day) { $st = mktime(0, 0, 0, $dtstart['month'], $dtstart['day'], $dtstart['year']); $start_date = date("Y-m-d H:i:s", $st); $end_date = date("Y-m-d H:i:s", mktime(23, 59, 59, $dtend['month'], $dtend['day'] - 1, $dtend['year'])); } else { $st = gmmktime($dtstart['hour'], $dtstart['min'], $dtstart['sec'], $dtstart['month'], $dtstart['day'], $dtstart['year']); $start_date = date('Y-m-d H:i:s', $st); $end_date = date('Y-m-d H:i:s', gmmktime($dtend['hour'], $dtend['min'], $dtend['sec'], $dtend['month'], $dtend['day'], $dtend['year'])); } if (time() - $st > 60 * 60 * 24 * 30 * 2) { continue; } // ignore events older than 2 months $uid = $event->getProperty("uid"); $entry = CalendarEntry::findOne(["external_source_id" => $this->id, "external_uid" => $uid]); if (!$entry) { $entry = new CalendarEntry(['participation_mode' => CalendarEntry::PARTICIPATION_MODE_NONE, 'color' => $this->color, 'external_source_id' => $this->id, 'external_uid' => $uid]); } $entry->content->container = $container; $entry->title = $event->getProperty("summary"); $entry->description = $event->getProperty("description"); $entry->start_datetime = $start_date; $entry->end_datetime = $end_date; $entry->all_day = $all_day; $entry->is_public = $public; $entry->validate(); $entry->save(); } }
public static function getUpcomingEntries(ContentContainerActiveRecord $contentContainer = null, $daysInFuture = 7, $limit = 5) { $entries = array(); $start = new DateTime(); $query = CalendarEntry::find(); $query->orderBy('start_datetime ASC'); if ($daysInFuture > 0) { $startEnd = new DateTime(); $startEnd->add(new DateInterval("P" . $daysInFuture . "D")); $query->andWhere(['>=', 'start_datetime', $start->format('Y-m-d H:i:s')]); $query->andWhere(['<=', 'end_datetime', $startEnd->format('Y-m-d H:i:s')]); } else { $query->andWhere(['>=', 'start_datetime', $start->format('Y-m-d H:i:s')]); } if ($contentContainer == null) { // When no contentcontainer is specified - limit to events where current user participate $query->leftJoin('calendar_entry_participant', 'calendar_entry.id=calendar_entry_participant.calendar_entry_id AND calendar_entry_participant.user_id=:userId', [':userId' => Yii::$app->user->id]); $query->andWhere(['IS NOT', 'calendar_entry_participant.id', new \yii\db\Expression('NULL')]); } if ($limit != 0) { $query->limit($limit); } if ($contentContainer !== null) { $query->contentContainer($contentContainer); } foreach ($query->all() as $entry) { if ($entry->content->canRead()) { $entries[] = $entry; } } return $entries; }
public function getCalendarEntry() { return $this->hasOne(CalendarEntry::className(), ['id' => 'calendar_entry_id']); }