Admin_MultidateController::getdatesAction PHP Метод

getdatesAction() публичный Метод

public getdatesAction ( )
    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;
    }