public function getdatesAction() { require_once $GLOBALS['g_campsiteDir'] . '/classes/Article.php'; require_once $GLOBALS['g_campsiteDir'] . '/classes/ArticleTypeField.php'; $field_ranks = array(); $field_infos = array(); $dark_blues = array('#4040ff', '#8040ff'); $yellow = '#ffff40'; $articleId = $this->_request->getParam('articleId'); $languageId = $this->_request->getParam('languageId'); $article_obj = new \Article($languageId, $articleId); $article_type = $article_obj->getType(); $repo = $this->_helper->entity->getRepository('Newscoop\\Entity\\ArticleDatetime'); $return = array(); $dates = $repo->findDates((object) array('articleId' => "{$articleId}")); foreach ($dates as $date) { $recurring = $date->getRecurring(); $event_comment = $date->getEventComment(); $itemField = $date->getFieldName(); $itemColor = '#'; $itemRank = 0; $itemHidden = false; if (array_key_exists($itemField, $field_ranks)) { $itemRank = $field_ranks[$itemField]; } else { $field_obj = new \ArticleTypeField($article_type, $itemField); $allItemRanks = $field_obj->getOrders(); foreach ($allItemRanks as $one_weight => $one_field) { $field_ranks[$one_field] = $one_weight; if ($one_field == $itemField) { $itemRank = $one_weight; } } } if (array_key_exists($itemField, $field_infos)) { $itemColor = $field_infos[$itemField]['background_color']; $itemHidden = $field_infos[$itemField]['hidden_status']; } else { $field_obj = new \ArticleTypeField($article_type, $itemField); $itemColor = $field_obj->getColor(); $itemHidden = $field_obj->isHidden(); $field_infos[$itemField] = array('background_color' => $itemColor, 'hidden_status' => $itemHidden); } if ($itemHidden) { continue; } if (strlen($recurring) > 1) { //daterange $start = strtotime($this->getDate($date->getStartDate()->getTimestamp()) . ' ' . $this->getTime(is_null($date->getStartTime()) ? $this->tz : $date->getStartTime()->getTimestamp()) . ' UTC'); $end = strtotime($this->getDate(is_null($date->getEndDate()) ? $this->distant : $date->getEndDate()->getTimestamp()) . ' ' . $this->getTime(is_null($date->getEndTime()) ? $this->tz + 86399 : $date->getEndTime()->getTimestamp()) . ' UTC'); $itemStart = $start; $itemEnd = strtotime($this->getDate($date->getStartDate()->getTimestamp()) . ' ' . $this->getTime(is_null($date->getEndTime()) ? $this->tz + 86399 : $date->getEndTime()->getTimestamp()) . ' UTC'); $step = "+1 day"; switch ($recurring) { case 'weekly': $step = "+1 week"; break; case 'monthly': $step = "+1 month"; break; } while ($itemStart <= $end) { $calDate = array(); $calDate['id'] = $date->id; $calDate['title'] = $itemField; $calDate['start_utc'] = $itemStart; $calDate['start'] = gmdate('Y-m-d\\TH:i:s\\Z', $itemStart); $calDate['start_day'] = gmdate('m-d', $itemStart); $calDate['end_utc'] = $itemEnd; $calDate['end'] = gmdate('Y-m-d\\TH:i:s\\Z', $itemEnd); $calDate['allDay'] = $this->isAllDay($date); $calDate['field_name'] = $itemField; $calDate['backgroundColor'] = $itemColor; $calDate['textColor'] = '#000000'; $calDate['event_comment'] = $event_comment; $calDate['weight'] = $itemRank; $return[] = $calDate; if ('+1 month' == $step) { $curr_start_year = date('Y', $itemStart); $curr_start_month = date('n', $itemStart); $curr_start_day = date('j', $itemStart); while (true) { $curr_start_month += 1; if (13 == $curr_start_month) { $curr_start_month = 1; $curr_start_year += 1; } if (checkdate($curr_start_month, $curr_start_day, $curr_start_year)) { $itemStart = mktime(date('G', $itemStart), 0 + ltrim(date('i', $itemStart), '0'), 0, $curr_start_month, $curr_start_day, $curr_start_year); $itemEnd = mktime(date('G', $itemEnd), 0 + ltrim(date('i', $itemEnd), '0'), 0, $curr_start_month, $curr_start_day, $curr_start_year); break; } } } else { $itemStart = strtotime($step, $itemStart); $itemEnd = strtotime($step, $itemEnd); } } } else { //specific $calDate = array(); $calDate['id'] = $date->id; $calDate['title'] = $itemField; $itemStart = strtotime($this->getDate($date->getStartDate()->getTimestamp()) . ' ' . $this->getTime(is_null($date->getStartTime()) ? $this->tz : $date->getStartTime()->getTimestamp()) . ' UTC'); $calDate['start_utc'] = $itemStart; $calDate['start'] = gmdate('Y-m-d\\TH:i:s\\Z', $itemStart); $calDate['start_day'] = gmdate('m-d', $itemStart); $endDate = $date->getEndDate(); // TODO: at this moment, specific dates without end dates are taken as single-date dates, even though they should be taken as never-ending continuous events $itemEnd = 0; if (empty($endDate)) { $itemEnd = strtotime($this->getDate($date->getStartDate()->getTimestamp()) . ' ' . $this->getTime(is_null($date->getEndTime()) ? $this->tz + 86399 : $date->getEndTime()->getTimestamp()) . ' UTC'); } else { $itemEnd = strtotime($this->getDate($date->getEndDate()->getTimestamp()) . ' ' . $this->getTime(is_null($date->getEndTime()) ? $this->tz + 86399 : $date->getEndTime()->getTimestamp()) . ' UTC'); } $calDate['end_utc'] = $itemEnd; $calDate['end'] = gmdate('Y-m-d\\TH:i:s\\Z', $itemEnd); $calDate['allDay'] = $this->isAllDay($date); $calDate['restOfDay'] = false; if (!$calDate['allDay']) { if (is_null($date->getEndTime())) { $calDate['restOfDay'] = true; } } $calDate['field_name'] = $itemField; $calDate['backgroundColor'] = $itemColor; $calDate['textColor'] = '#000000'; if (in_array($itemColor, $dark_blues)) { $calDate['textColor'] = $yellow; } $calDate['event_comment'] = $event_comment; $calDate['weight'] = $itemRank; $return[] = $calDate; } } $res = usort($return, 'self::EventOrder'); echo json_encode($return); die; }