public function FullCalendarController::updateEvent in Smart Date 3.x
Same name and namespace in other branches
- 8.2 src/Controller/FullCalendarController.php \Drupal\smart_date\Controller\FullCalendarController::updateEvent()
- 3.0.x src/Controller/FullCalendarController.php \Drupal\smart_date\Controller\FullCalendarController::updateEvent()
- 3.1.x src/Controller/FullCalendarController.php \Drupal\smart_date\Controller\FullCalendarController::updateEvent()
- 3.2.x src/Controller/FullCalendarController.php \Drupal\smart_date\Controller\FullCalendarController::updateEvent()
- 3.3.x src/Controller/FullCalendarController.php \Drupal\smart_date\Controller\FullCalendarController::updateEvent()
- 3.4.x src/Controller/FullCalendarController.php \Drupal\smart_date\Controller\FullCalendarController::updateEvent()
File
- src/
Controller/ FullCalendarController.php, line 24
Class
- FullCalendarController
- Calendar Event Controller, overridden to handle Smart Date events.
Namespace
Drupal\smart_date\ControllerCode
public function updateEvent(Request $request) {
$user = $this
->currentUser();
if (empty($user)) {
return new Response($this
->t('Invalid User!'));
}
$csrf_token = $request->request
->get('token');
if (!$this->csrfToken
->validate($csrf_token, $user
->id())) {
return new Response($this
->t('Access denied!'));
}
$eid = $request->request
->get('eid', '');
$entity_type = $request->request
->get('entity_type', '');
$start_date = $request->request
->get('start', '');
$end_date = $request->request
->get('end', '');
$start_field = $request->request
->get('start_field', '');
$end_field = $request->request
->get('end_field', '');
if (empty($eid) || empty($start_date) || empty($start_field) || empty($entity_type)) {
return new Response($this
->t('Parameter Missing.'));
}
$recurring = FALSE;
$id = explode('-', $eid);
$entity = $this
->entityTypeManager()
->getStorage($entity_type)
->load($id[0]);
if (count($id) > 1) {
if ($id[1] == 'D') {
$delta = $id[2];
}
elseif ($id[1] == 'R') {
/* @var \Drupal\smart_date_recur\Entity\SmartDateRule $rule */
$rule = $this
->entityTypeManager()
->getStorage('smart_date_rule')
->load($id[2]);
// Load overridden instances from rule object.
$instances = $rule
->getRuleInstances();
$rruleindex = $id[4];
$instance = $instances[$rruleindex];
$recurring = TRUE;
}
}
if (empty($entity) || !$entity
->access('update')) {
return new Response($this
->t('Access denied!'));
}
if (!$entity
->hasField($start_field)) {
// Can't process without $start_field.
return;
}
// Field definitions.
$fields_def = $entity
->getFieldDefinition($start_field);
$start_type = $fields_def
->getType();
if ($start_type != 'smartdate') {
parent::updateEvent($request);
return;
}
if ($recurring) {
$endDate = strtotime($end_date);
$duration = (strtotime($end_date) - strtotime($start_date)) / 60;
$starttime = date('H:i:s', strtotime($start_date));
// Check if allday event (one day or multiple days long)
if ($starttime == '00:00:00') {
if (empty($endDate)) {
// this is a regular event becoming all day
$endDate = strtotime($start_date) + 1439 * 60;
$duration = 0;
}
elseif ((strtotime($end_date) - strtotime($start_date)) % 86400 == 0) {
$endDate = strtotime($end_date) + 1439 * 60;
$duration = 0;
}
}
elseif (empty($endDate)) {
// this is allday event becoming regular event
$endDate = strtotime($start_date) + $this->defaultTimedEventDuration;
$duration = $this->defaultTimedEventDuration / 60;
}
if (isset($instance['oid'])) {
$override = SmartDateOverride::load($instance['oid']);
$override
->set('value', strtotime($start_date));
$override
->set('end_value', $endDate);
$override
->set('duration', $duration);
}
else {
$values = [
'rrule' => $rule
->id(),
'rrule_index' => $rruleindex,
'value' => strtotime($start_date),
'end_value' => $endDate,
'duration' => $duration,
];
$override = SmartDateOverride::create($values);
}
$override
->save();
$instancesController = new Instances();
$instancesController
->applyChanges($rule);
}
else {
$entity->{$start_field}[$delta]->value = strtotime($start_date);
$duration = $entity->{$start_field}[$delta]->duration;
$this
->calculateEndDateFromDuration($duration, $end_date, $start_date);
$entity->{$end_field}[$delta]->end_value = $end_date;
if ($duration != $entity->{$start_field}[$delta]->duration) {
$entity->{$start_field}[$delta]->duration = $duration;
}
$entity
->save();
}
// Log the content changed.
$this->loggerFactory
->get($entity_type)
->notice('%entity_type: updated %title', [
'%entity_type' => $entity
->getType(),
'%title' => $entity
->getTitle(),
]);
return new Response(1);
}