/** * Checks if access is allowed * * @return boolean */ public function isAccessAllowed() { if ($this->request->getControllerActionName() === 'error') { return true; } $sessionHasReservation = $this->session->has(ReservationController::SESSION_IDENTIFIER_RESERVATION); $requestHasReservation = $this->request->hasArgument('reservation'); if (!$requestHasReservation) { if ($sessionHasReservation) { $this->accessError = Reservation::ERROR_INCOMPLETE_RESERVATION_IN_SESSION; } return !$sessionHasReservation; } $sessionValue = (int) $this->session->get(ReservationController::SESSION_IDENTIFIER_RESERVATION); $reservationId = $this->getReservationIdFromRequest(); if (!$sessionHasReservation && $requestHasReservation) { $this->accessError = Reservation::ERROR_MISSING_RESERVATION_KEY_IN_SESSION; return false; } if ((bool) $reservationId) { if (!($sessionHasReservation && $sessionValue === $reservationId)) { $this->accessError = Reservation::ERROR_MISMATCH_SESSION_KEY_REQUEST_ARGUMENT; } // allow access if argument reservation matches session value return $sessionHasReservation && $sessionValue === $reservationId; } $this->accessError = Reservation::ERROR_MISSING_SESSION_KEY_AND_REQUEST_ARGUMENT; return false; }
/** * Slot method for CPSIT\T3eventsReservation\ReservationController signal 'handleEntityNotFoundError' * * @param array $params * @return array */ public function handleEntityNotFoundSlot(array $params) { if (isset($params['config']) && is_array($params['config'])) { $handler = $params['config'][0]; $actionName = $params['config'][1]; $params[$handler]['actionName'] = $actionName; if ($handler === 'redirect') { $params[$handler]['statusCode'] = 302; } if ($this->session->has(ReservationController::SESSION_IDENTIFIER_RESERVATION)) { $reservationId = (string) $this->session->get(ReservationController::SESSION_IDENTIFIER_RESERVATION); $params[$handler]['arguments'] = ['reservation' => $reservationId]; } if (isset($params['requestArguments']['reservation'])) { $params[$handler]['controllerName'] = 'Reservation'; $params[$handler]['arguments']['reservation'] = $params['requestArguments']['reservation']; } } return [$params]; }