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