summaryrefslogtreecommitdiffstats
path: root/application/views/helpers
diff options
context:
space:
mode:
Diffstat (limited to 'application/views/helpers')
-rw-r--r--application/views/helpers/Column.php51
-rw-r--r--application/views/helpers/ColumnHeader.php17
-rw-r--r--application/views/helpers/Event.php12
-rw-r--r--application/views/helpers/EventMessage.php70
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;
+ }
+}