diff --git a/library/Icinga/Application/Hook/GrapherHook.php b/library/Icinga/Application/Hook/GrapherHook.php new file mode 100644 index 000000000..b923d2978 --- /dev/null +++ b/library/Icinga/Application/Hook/GrapherHook.php @@ -0,0 +1,111 @@ +init(); + } + + /** + * Overwrite this function if you want to do some initialization stuff + * + * @return void + */ + protected function init() + { + } + + /** + * Whether this grapher provides previews + * + * @return bool + */ + public function hasPreviews() + { + return $this->hasPreviews; + } + + /** + * Whether this grapher provides tiny previews + * + * @return bool + */ + public function hasTinyPreviews() + { + return $this->hasTinyPreviews; + } + + /** + * Whether a graph for the monitoring object exist + * + * @param MonitoredObject $object + * + * @return bool + */ + abstract public function has(MonitoredObject $object); + + /** + * Get a preview for the given object + * + * This function must return an empty string if no graph exists. + * + * @param MonitoredObject $object + * + * @return string + * @throws ProgrammingError + * + */ + public function getPreviewHtml(MonitoredObject $object) + { + throw new ProgrammingError('This hook provide previews but it is not implemented'); + } + + + /** + * Get a tiny preview for the given object + * + * This function must return an empty string if no graph exists. + * + * @param MonitoredObject $object + * + * @return string + * @throws ProgrammingError + */ + public function getTinyPreviewHtml(MonitoredObject $object) + { + throw new ProgrammingError('This hook provide tiny previews but it is not implemented'); + } +} diff --git a/library/Icinga/Application/Hook/TicketHook.php b/library/Icinga/Application/Hook/TicketHook.php new file mode 100644 index 000000000..8e0aa4cc2 --- /dev/null +++ b/library/Icinga/Application/Hook/TicketHook.php @@ -0,0 +1,124 @@ +init(); + } + + /** + * Overwrite this function for hook initialization, e.g. loading the hook's config + */ + protected function init() + { + } + + /** + * Set the hook as failed w/ the given message + * + * @param string $message Error message or error format string + * @param mixed ...$arg Format string argument + */ + private function fail($message) + { + $args = array_slice(func_get_args(), 1); + $lastError = vsprintf($message, $args); + Logger::debug($lastError); + $this->lastError = $lastError; + } + + /** + * Get the last error, if any + * + * @return string|null + */ + public function getLastError() + { + return $this->lastError; + } + + /** + * Get the pattern + * + * @return string + */ + abstract public function getPattern(); + + /** + * Create a link for each matched element in the subject text + * + * @param array $match Array of matched elements according to {@link getPattern()} + * + * @return string Replacement string + */ + abstract public function createLink($match); + + /** + * Create links w/ {@link createLink()} in the given text that matches to the subject from {@link getPattern()} + * + * In case of errors a debug message is recorded to the log and any subsequent call to {@link createLinks()} will + * be a no-op. + * + * @param string $text + * + * @return string + */ + final public function createLinks($text) + { + if ($this->lastError !== null) { + return $text; + } + + try { + $pattern = $this->getPattern(); + } catch (Exception $e) { + $this->fail('Can\'t create ticket links: Retrieving the pattern failed: %s', IcingaException::describe($e)); + return $text; + } + if (empty($pattern)) { + $this->fail('Can\'t create ticket links: Pattern is empty'); + return $text; + } + try { + $text = preg_replace_callback( + $pattern, + array($this, 'createLink'), + $text + ); + } catch (ErrorException $e) { + $this->fail('Can\'t create ticket links: Pattern is invalid: %s', IcingaException::describe($e)); + return $text; + } catch (Exception $e) { + $this->fail('Can\'t create ticket links: %s', IcingaException::describe($e)); + return $text; + } + + return $text; + } +} diff --git a/library/Icinga/Web/Hook/WebBaseHook.php b/library/Icinga/Application/Hook/WebBaseHook.php similarity index 96% rename from library/Icinga/Web/Hook/WebBaseHook.php rename to library/Icinga/Application/Hook/WebBaseHook.php index 544d2afa3..826b52a33 100644 --- a/library/Icinga/Web/Hook/WebBaseHook.php +++ b/library/Icinga/Application/Hook/WebBaseHook.php @@ -1,7 +1,7 @@ init(); - } - - /** - * Overwrite this function if you want to do some initialization stuff - * - * @return void - */ - protected function init() - { - } - - /** - * Whether this grapher provides previews - * - * @return bool - */ - public function hasPreviews() - { - return $this->hasPreviews; - } - - /** - * Whether this grapher provides tiny previews - * - * @return bool - */ - public function hasTinyPreviews() - { - return $this->hasTinyPreviews; - } - - /** - * Whether a graph for the monitoring object exist - * - * @param MonitoredObject $object - * - * @return bool - */ - abstract public function has(MonitoredObject $object); - - /** - * Get a preview for the given object - * - * This function must return an empty string if no graph exists. - * - * @param MonitoredObject $object - * - * @return string - * @throws ProgrammingError - * - */ - public function getPreviewHtml(MonitoredObject $object) - { - throw new ProgrammingError('This hook provide previews but it is not implemented'); - } - - - /** - * Get a tiny preview for the given object - * - * This function must return an empty string if no graph exists. - * - * @param MonitoredObject $object - * - * @return string - * @throws ProgrammingError - */ - public function getTinyPreviewHtml(MonitoredObject $object) - { - throw new ProgrammingError('This hook provide tiny previews but it is not implemented'); - } -} +abstract class GrapherHook extends BaseHook {} diff --git a/library/Icinga/Web/Hook/TicketHook.php b/library/Icinga/Web/Hook/TicketHook.php index 74af1a91f..63a4aa75c 100644 --- a/library/Icinga/Web/Hook/TicketHook.php +++ b/library/Icinga/Web/Hook/TicketHook.php @@ -3,122 +3,11 @@ namespace Icinga\Web\Hook; -use ErrorException; -use Exception; -use Icinga\Application\Logger; -use Icinga\Exception\IcingaException; +use Icinga\Application\Hook\TicketHook as BaseHook; /** - * Base class for ticket hooks + * Deprecated, compat only. * - * Extend this class if you want to integrate your ticketing solution Icinga Web 2 + * Please implement hooks in Icinga\Application\Hook */ -abstract class TicketHook -{ - /** - * Last error, if any - * - * @var string|null - */ - protected $lastError; - - /** - * Create a new ticket hook - * - * @see init() For hook initialization. - */ - final public function __construct() - { - $this->init(); - } - - /** - * Overwrite this function for hook initialization, e.g. loading the hook's config - */ - protected function init() - { - } - - /** - * Set the hook as failed w/ the given message - * - * @param string $message Error message or error format string - * @param mixed ...$arg Format string argument - */ - private function fail($message) - { - $args = array_slice(func_get_args(), 1); - $lastError = vsprintf($message, $args); - Logger::debug($lastError); - $this->lastError = $lastError; - } - - /** - * Get the last error, if any - * - * @return string|null - */ - public function getLastError() - { - return $this->lastError; - } - - /** - * Get the pattern - * - * @return string - */ - abstract public function getPattern(); - - /** - * Create a link for each matched element in the subject text - * - * @param array $match Array of matched elements according to {@link getPattern()} - * - * @return string Replacement string - */ - abstract public function createLink($match); - - /** - * Create links w/ {@link createLink()} in the given text that matches to the subject from {@link getPattern()} - * - * In case of errors a debug message is recorded to the log and any subsequent call to {@link createLinks()} will - * be a no-op. - * - * @param string $text - * - * @return string - */ - final public function createLinks($text) - { - if ($this->lastError !== null) { - return $text; - } - - try { - $pattern = $this->getPattern(); - } catch (Exception $e) { - $this->fail('Can\'t create ticket links: Retrieving the pattern failed: %s', IcingaException::describe($e)); - return $text; - } - if (empty($pattern)) { - $this->fail('Can\'t create ticket links: Pattern is empty'); - return $text; - } - try { - $text = preg_replace_callback( - $pattern, - array($this, 'createLink'), - $text - ); - } catch (ErrorException $e) { - $this->fail('Can\'t create ticket links: Pattern is invalid: %s', IcingaException::describe($e)); - return $text; - } catch (Exception $e) { - $this->fail('Can\'t create ticket links: %s', IcingaException::describe($e)); - return $text; - } - - return $text; - } -} +abstract class TicketHook extends BaseHook {}