X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/a6633642232efd164d4708967ab59e498fbff896..refs/pull/4291/head:/app/Exceptions/NotifyException.php diff --git a/app/Exceptions/NotifyException.php b/app/Exceptions/NotifyException.php index 4f8105960..67ef27a75 100644 --- a/app/Exceptions/NotifyException.php +++ b/app/Exceptions/NotifyException.php @@ -1,18 +1,82 @@ - */ - public function __construct(string $message, string $redirectLocation = "/") + protected array $headers = []; + + public function __construct(string $message, string $redirectLocation = '/', int $status = 500) { $this->message = $message; $this->redirectLocation = $redirectLocation; + $this->status = $status; + + if ($status >= 300 && $status < 400) { + // add redirect header only when a matching HTTP status is given + $this->headers = ['location' => $redirectLocation]; + } + parent::__construct(); } + + /** + * Get the desired HTTP status code for this exception. + * + * {@inheritdoc} + */ + public function getStatusCode(): int + { + return $this->status; + } + + /** + * Get the desired HTTP headers for this exception. + * + * {@inheritdoc} + */ + public function getHeaders(): array + { + return $this->headers; + } + + /** + * @param array $headers + */ + public function setHeaders(array $headers): void + { + $this->headers = $headers; + } + + /** + * Send the response for this type of exception. + * + * {@inheritdoc} + */ + public function toResponse($request) + { + $message = $this->getMessage(); + + // Front-end JSON handling. API-side handling managed via handler. + if ($request->wantsJson()) { + return response()->json(['error' => $message], $this->getStatusCode()); + } + + if (!empty($message)) { + session()->flash('error', $message); + } + + return redirect($this->redirectLocation); + } }