diff options
Diffstat (limited to '')
-rw-r--r-- | application/views/helpers/Column.php | 51 | ||||
-rw-r--r-- | application/views/helpers/ColumnHeader.php | 17 | ||||
-rw-r--r-- | application/views/helpers/Event.php | 12 | ||||
-rw-r--r-- | application/views/helpers/EventMessage.php | 70 |
4 files changed, 150 insertions, 0 deletions
diff --git a/application/views/helpers/Column.php b/application/views/helpers/Column.php new file mode 100644 index 0000000..b343de4 --- /dev/null +++ b/application/views/helpers/Column.php @@ -0,0 +1,51 @@ +<?php +/* Icinga Web 2 | (c) 2016 Icinga Development Team | GPLv2+ */ + +use Icinga\Module\Eventdb\Event; + +class Zend_View_Helper_Column extends Zend_View_Helper_Abstract +{ + public function column($column, Event $event, $classes = array()) + { + switch ($column) { + case 'host_name': + $default = 'host_url'; + break; + case 'message': + $default = 'message'; + break; + default: + $default = null; + break; + } + + if ($column === 'ack') { + $html = $event->$column ? $this->view->icon('ok', $this->view->translate('Acknowledged')) : '-'; + } else { + $renderer = $this->view->columnConfig->get($column, 'renderer', $default); + + switch ($renderer) { + case 'host_url': + $html = $this->view->qlink($event->$column, 'eventdb/event/host', + array('host' => $event->$column)); + break; + case 'service_url': + $html = $this->view->qlink($event->$column, 'eventdb/event/service', + array('service' => $event->$column, 'host' => $event->host_name)); + break; + case 'url': + $html = $this->view->qlink($event->$column, $event->$column); + break; + case 'message': + $html = $this->view->eventMessage($event->$column); + break; + default: + $html = $this->view->escape($event->$column); + break; + } + } + + return '<td class="' . 'event-' . $this->view->escape($column) . ' ' + . implode(' ', $classes) . '" data-base-target="_next">' . $html . '</td>'; + } +} diff --git a/application/views/helpers/ColumnHeader.php b/application/views/helpers/ColumnHeader.php new file mode 100644 index 0000000..3c7f7cd --- /dev/null +++ b/application/views/helpers/ColumnHeader.php @@ -0,0 +1,17 @@ +<?php +/* Icinga Web 2 | (c) 2016 Icinga Development Team | GPLv2+ */ + +class Zend_View_Helper_ColumnHeader extends Zend_View_Helper_Abstract +{ + public function columnHeader($columnHeader, $classes = array(), $plain = false) + { + $header = $this->view->columnConfig->get($columnHeader, 'label', ucwords(str_replace('_', ' ', $columnHeader))); + if ($plain) { + return $header; + } + $htm = '<th classes="' . implode(' ', $classes) . '">'; + $htm .= $this->view->escape($header); + $htm .= '</th>'; + return $htm; + } +} diff --git a/application/views/helpers/Event.php b/application/views/helpers/Event.php new file mode 100644 index 0000000..f61a793 --- /dev/null +++ b/application/views/helpers/Event.php @@ -0,0 +1,12 @@ +<?php +/* Icinga Web 2 | (c) 2016 Icinga Development Team | GPLv2+ */ + +use Icinga\Module\Eventdb\Event; + +class Zend_View_Helper_Event extends Zend_View_Helper_Abstract +{ + public function event($data) + { + return Event::fromData($data); + } +} diff --git a/application/views/helpers/EventMessage.php b/application/views/helpers/EventMessage.php new file mode 100644 index 0000000..de52518 --- /dev/null +++ b/application/views/helpers/EventMessage.php @@ -0,0 +1,70 @@ +<?php +/* Icinga Web 2 | (c) 2016 Icinga Development Team | GPLv2+ */ + +use Icinga\Application\Config; + +class Zend_View_Helper_EventMessage extends Zend_View_Helper_Abstract +{ + /** + * The RegExp for locating URLs. + * + * Modifications: + * - Don't allow ; in + * + * @source https://mathiasbynens.be/demo/url-regex + */ + const URL_REGEX = '@(https?)://(-\.)?([^\s/?\.#-]+\.?)+(/[^\s;]*)?@i'; + + /** + * Purifier instance + * + * @var HTMLPurifier + */ + protected static $purifier; + + public function eventMessage($message) + { + $htm = $this->getPurifier()->purify($message); + + // search for URLs and make them a link + $htm = preg_replace_callback( + static::URL_REGEX, + function ($match) { + return sprintf( + '<a href="%s" target="_blank">%s</a>', + htmlspecialchars($match[0]), + htmlspecialchars($match[0]) + ); + }, + $htm + ); + + return $htm; + } + + /** + * Get the purifier instance + * + * @return HTMLPurifier + */ + protected function getPurifier() + { + if (self::$purifier === null) { + require_once 'HTMLPurifier/Bootstrap.php'; + require_once 'HTMLPurifier.php'; + require_once 'HTMLPurifier.autoload.php'; + + $config = HTMLPurifier_Config::createDefault(); + $config->set('Core.EscapeNonASCIICharacters', true); + $config->set('HTML.Allowed', Config::module('eventdb')->get( + 'frontend', + 'allowed_html', + 'p,br,b,a[href|target],i,table,tr,td[colspan],div,*[class]' + )); + $config->set('Attr.AllowedFrameTargets', array('_blank')); + $config->set('Cache.DefinitionImpl', null); + self::$purifier = new HTMLPurifier($config); + } + return self::$purifier; + } +} |