isAttributeChanged('status') && in_array($entity->get('status'), $this->reminderSkippingStatusList) ) { $entity->set('reminders', []); } if ($entity->has('dateStartDate')) { $dateStartDate = $entity->get('dateStartDate'); if (!empty($dateStartDate)) { $dateStart = $dateStartDate . ' 00:00:00'; $dateStart = $this->convertDateTimeToDefaultTimezone($dateStart); $entity->set('dateStart', $dateStart); } else { $entity->set('dateStartDate', null); } } if ($entity->has('dateEndDate')) { $dateEndDate = $entity->get('dateEndDate'); if (!empty($dateEndDate)) { $dateEnd = $dateEndDate . ' 00:00:00'; $dateEnd = $this->convertDateTimeToDefaultTimezone($dateEnd); try { $dt = new DateTime($dateEnd); $dt->modify('+1 day'); $dateEnd = $dt->format('Y-m-d H:i:s'); } catch (Exception $e) {} $entity->set('dateEnd', $dateEnd); } else { $entity->set('dateEndDate', null); } } if ( !$entity->isNew() && $this->preserveDuration && $entity->isAttributeChanged('dateStart') && $entity->get('dateStart') && $entity->isAttributeChanged('dateStart') && !$entity->isAttributeChanged('dateEnd') ) { $dateEndPrevious = $entity->getFetched('dateEnd'); $dateStartPrevious = $entity->getFetched('dateStart'); if ($dateStartPrevious && $dateEndPrevious) { $dtStart = new DateTime($dateStartPrevious); $dtEnd = new DateTime($dateEndPrevious); $dt = new DateTime($entity->get('dateStart')); $duration = ($dtEnd->getTimestamp() - $dtStart->getTimestamp()); $dt->modify('+' . $duration . ' seconds'); $dateEnd = $dt->format('Y-m-d H:i:s'); $entity->set('dateEnd', $dateEnd); } } parent::beforeSave($entity, $options); } protected function afterRemove(Entity $entity, array $options = []) { parent::afterRemove($entity, $options); $delete = $this->getEntityManager()->getQueryBuilder() ->delete() ->from('Reminder') ->where([ 'entityId' => $entity->id, 'entityType' => $entity->getEntityType(), ]) ->build(); $this->getEntityManager()->getQueryExecutor()->execute($delete); } protected function convertDateTimeToDefaultTimezone($string) { $timeZone = $this->config->get('timeZone') ?? 'UTC'; $tz = new DateTimeZone($timeZone); try { $dt = DateTime::createFromFormat( DateTimeUtil::SYSTEM_DATE_TIME_FORMAT, $string, $tz ); } catch (Exception $e) {} if ($dt) { $utcTz = new DateTimeZone('UTC'); return $dt ->setTimezone($utcTz) ->format(DateTimeUtil::SYSTEM_DATE_TIME_FORMAT); } return null; } }