Admin_MultidateController::addAction PHP Метод

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

public addAction ( )
    public function addAction()
    {
        $date_type = $this->_request->getParam('date-type');
        $articleId = $this->_request->getParam('article-number');
        $repo = $this->_helper->entity->getRepository('Newscoop\\Entity\\ArticleDatetime');
        $multidateId = $this->_request->getParam('multidateId');
        $multidateField = $this->_request->getParam('multidatefield');
        $eventComment = $this->_request->getParam('event-comment');
        $timeSet = array();
        if ($date_type == 'specific') {
            //single date
            $startDate = $this->_request->getParam('start-date-specific');
            $startTime = $this->_request->getParam('start-time-specific');
            $endTime = $this->_request->getParam('end-time-specific');
            $type = $this->_request->getParam('specific-radio');
            switch ($type) {
                case 'start-only':
                    $timeSet = array('start_date' => $startDate, 'end_date' => $startDate, 'start_time' => $startTime);
                    break;
                case 'start-and-end':
                    $timeSet = array('start_date' => $startDate, 'end_date' => $startDate, 'start_time' => $startTime, 'end_time' => $endTime);
                    break;
                case 'all-day':
                    $timeSet = array('start_date' => $startDate, 'end_date' => $startDate);
                    break;
            }
            $timeSet = new ArticleDatetime($timeSet);
            if ($multidateId > 0) {
                $repo->update($multidateId, $timeSet, null, $multidateField, null, array('eventComment' => $eventComment));
            } else {
                $repo->add($timeSet, $articleId, $multidateField, null, false, array('eventComment' => $eventComment));
            }
        } else {
            $startDate = $this->_request->getParam('start-date-daterange');
            if ($this->_request->getParam('cycle-ends') == 'never') {
                $endDate = null;
            } else {
                $endDate = $this->_request->getParam('end-date-daterange');
            }
            if ($this->_request->getParam('daterange-all-day') == 1) {
                $startTime = '00:00';
                $endTime = null;
            } else {
                $startTime = $this->_request->getParam('start-time-daterange');
                $endTime = $this->_request->getParam('end-time-daterange');
            }
            $recurring = $this->_request->getParam('repeats-cycle');
            if ($endDate !== null && 'weekly' == $recurring) {
                $start_week_day = date('w', date_timestamp_get(date_create($startDate)));
                $end_week_day = date('w', date_timestamp_get(date_create($endDate)));
                if ($start_week_day != $end_week_day) {
                    $days_sub = (7 + $end_week_day - $start_week_day) % 7;
                    $end_date_new = date_create($endDate);
                    $sub_interval = new \DateInterval('P' . $days_sub . 'D');
                    $end_date_new->sub($sub_interval);
                    $endDate = date('Y-m-d', date_timestamp_get($end_date_new));
                }
            }
            if ($endDate !== null && 'monthly' == $recurring) {
                $start_month_day = date('j', date_timestamp_get(date_create($startDate)));
                $orig_end_date = date_create($endDate);
                $end_month_day = date('j', date_timestamp_get($orig_end_date));
                if ($start_month_day != $end_month_day) {
                    $end_month_month = date('n', date_timestamp_get($orig_end_date));
                    $end_month_year = date('Y', date_timestamp_get($orig_end_date));
                    if ($start_month_day < $end_month_day) {
                        $end_month_day = $start_month_day;
                    } else {
                        $end_month_day = $start_month_day;
                        while (true) {
                            $end_month_month -= 1;
                            if (0 == $end_month_month) {
                                $end_month_month = 12;
                                $end_month_year -= 1;
                            }
                            if (checkdate($end_month_month, $end_month_day, $end_month_year)) {
                                break;
                            }
                        }
                    }
                    $new_end_date = mktime(0, 0, 0, $end_month_month, $end_month_day, $end_month_year);
                    $endDate = date('Y-m-d', $new_end_date);
                }
            }
            $timeSet = array('start_date' => $startDate, 'end_date' => $endDate, 'start_time' => $startTime, 'end_time' => $endTime, 'recurring' => $recurring);
            $timeSet = new ArticleDatetime($timeSet);
            if ($multidateId > 0) {
                $repo->update($multidateId, $timeSet, null, $multidateField, null, array('eventComment' => $eventComment));
            } else {
                $repo->add($timeSet, $articleId, $multidateField, null, false, array('eventComment' => $eventComment));
            }
        }
        echo json_encode(array('code' => 200));
        die;
    }