50 lines
1.8 KiB
PHP
50 lines
1.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Ddeboer\Imap\Exception;
|
|
|
|
abstract class AbstractException extends \RuntimeException
|
|
{
|
|
private const ERROR_LABELS = [
|
|
\E_ERROR => 'E_ERROR',
|
|
\E_WARNING => 'E_WARNING',
|
|
\E_PARSE => 'E_PARSE',
|
|
\E_NOTICE => 'E_NOTICE',
|
|
\E_CORE_ERROR => 'E_CORE_ERROR',
|
|
\E_CORE_WARNING => 'E_CORE_WARNING',
|
|
\E_COMPILE_ERROR => 'E_COMPILE_ERROR',
|
|
\E_COMPILE_WARNING => 'E_COMPILE_WARNING',
|
|
\E_USER_ERROR => 'E_USER_ERROR',
|
|
\E_USER_WARNING => 'E_USER_WARNING',
|
|
\E_USER_NOTICE => 'E_USER_NOTICE',
|
|
\E_STRICT => 'E_STRICT',
|
|
\E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR',
|
|
\E_DEPRECATED => 'E_DEPRECATED',
|
|
\E_USER_DEPRECATED => 'E_USER_DEPRECATED',
|
|
];
|
|
|
|
final public function __construct(string $message, int $code = 0, \Throwable $previous = null)
|
|
{
|
|
$errorType = '';
|
|
if (isset(self::ERROR_LABELS[$code])) {
|
|
$errorType = \sprintf('[%s] ', self::ERROR_LABELS[$code]);
|
|
}
|
|
|
|
$joinString = "\n- ";
|
|
$alerts = \imap_alerts();
|
|
$errors = \imap_errors();
|
|
$completeMessage = \sprintf(
|
|
"%s%s\nimap_alerts (%s):%s\nimap_errors (%s):%s",
|
|
$errorType,
|
|
$message,
|
|
false !== $alerts ? \count($alerts) : 0,
|
|
false !== $alerts ? $joinString . \implode($joinString, $alerts) : '',
|
|
false !== $errors ? \count($errors) : 0,
|
|
false !== $errors ? $joinString . \implode($joinString, $errors) : ''
|
|
);
|
|
|
|
parent::__construct($completeMessage, $code, $previous);
|
|
}
|
|
}
|