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;
}