| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- <?php declare(strict_types = 1);
- // phpcs:ignoreFile PSR1.Classes.ClassDeclaration
- namespace MailPoet;
- if (!defined('ABSPATH')) exit;
- /**
- * Provides information for converting exceptions to HTTP responses.
- */
- interface HttpAwareException {
- public function getHttpStatusCode(): int;
- }
- /**
- * Frames all MailPoet exceptions ("$e instanceof MailPoet\Exception").
- */
- abstract class Exception extends \Exception {
- /** @var string[] */
- private $errors = [];
- final public function __construct($message = '', $code = 0, \Throwable $previous = null) {
- parent::__construct($message, $code, $previous);
- }
- public static function create(\Throwable $previous = null): self {
- return new static('', 0, $previous);
- }
- public function withMessage(string $message): self {
- $this->message = $message;
- return $this;
- }
- public function withCode(int $code): self {
- $this->code = $code;
- return $this;
- }
- public function withErrors(array $errors): self {
- $this->errors = $errors;
- return $this;
- }
- public function getErrors(): array {
- return $this->errors;
- }
- }
- /**
- * USE: Generic runtime error. When possible, use a more specific exception instead.
- * API: 500 Server Error (not HTTP-aware)
- */
- class RuntimeException extends Exception {}
- /**
- * USE: When wrong data VALUE is received.
- * API: 400 Bad Request
- */
- class UnexpectedValueException extends RuntimeException implements HttpAwareException {
- public function getHttpStatusCode(): int {
- return 400;
- }
- }
- /**
- * USE: When an action is forbidden for given actor (although generally valid).
- * API: 403 Forbidden
- */
- class AccessDeniedException extends UnexpectedValueException implements HttpAwareException {
- public function getHttpStatusCode(): int {
- return 403;
- }
- }
- /**
- * USE: When the main resource we're interested in doesn't exist.
- * API: 404 Not Found
- */
- class NotFoundException extends UnexpectedValueException implements HttpAwareException {
- public function getHttpStatusCode(): int {
- return 404;
- }
- }
- /**
- * USE: When the main action produces conflict (i.e. duplicate key).
- * API: 409 Conflict
- */
- class ConflictException extends UnexpectedValueException implements HttpAwareException {
- public function getHttpStatusCode(): int {
- return 409;
- }
- }
- /**
- * USE: An application state that should not occur. Can be subclassed for feature-specific exceptions.
- * API: 500 Server Error (not HTTP-aware)
- */
- class InvalidStateException extends RuntimeException {}
|