public function FullCalendarController::updateEvent in Smart Date 3.3.x
Same name and namespace in other branches
- 8.2 src/Controller/FullCalendarController.php \Drupal\smart_date\Controller\FullCalendarController::updateEvent()
- 3.x 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.4.x src/Controller/FullCalendarController.php \Drupal\smart_date\Controller\FullCalendarController::updateEvent()
Update the event entity based on information passed in request.
Parameters
Symfony\Component\HttpFoundation\Request $request: The Symfony-processed request from the user to update entity data.
Return value
Symfony\Component\HttpFoundation\Response An HTTP reponse based on the outcome of the operation.
File
- src/
Controller/ FullCalendarController.php, line 38
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 new Response($this
->t('Invalid start date.'));
}
// Field definitions.
$fields_def = $entity
->getFieldDefinition($start_field);
$start_type = $fields_def
->getType();
if ($start_type != 'smartdate') {
parent::updateEvent($request);
return new Response(1);
}
if ($recurring) {
// $endDate = strtotime($end_date);
$duration = !empty($instance['end_value']) ? ($instance['end_value'] - $instance['value']) / 60 : 0;
$this
->calculateEndDateFromDuration($duration, $end_date, $start_date);
$start_date = strtotime($start_date);
if (isset($instance['oid'])) {
$override = SmartDateOverride::load($instance['oid']);
$override
->set('value', $start_date);
$override
->set('end_value', $end_date);
$override
->set('duration', $duration);
}
else {
$values = [
'rrule' => $rule
->id(),
'rrule_index' => $rruleindex,
'value' => $start_date,
'end_value' => $end_date,
'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
->bundle(),
'%title' => $entity
->label(),
]);
return new Response(1);
}