$1OK$2',
'$1WARNING$2',
'$1CRITICAL$2',
'$1UNKNOWN$2',
'@@@@@@',
);
public function pluginOutput($output, $raw = false)
{
if (empty($output)) {
return '';
}
$output = preg_replace('~
]*>~', "\n", $output);
if (strlen($output) > strlen(strip_tags($output))) {
// HTML
$output = preg_replace(
'~
getPurifier()->purify($output)
);
} else {
// Plaintext
$output = preg_replace(
self::$txtPatterns,
self::$txtReplacements,
$this->view->escape($output)
);
}
if (! $raw) {
$output = '' . $output . '
';
}
$output = $this->fixLinks($output);
return $output;
}
protected function fixLinks($html)
{
$ret = array();
$dom = new DOMDocument;
$dom->loadXML('' . $html . '
', LIBXML_NOERROR | LIBXML_NOWARNING);
$dom->preserveWhiteSpace = false;
$links = $dom->getElementsByTagName('a');
foreach ($links as $tag)
{
$href = $tag->getAttribute('href');
if (preg_match('~^/cgi\-bin/status\.cgi\?(.+)$~', $href, $m)) {
parse_str($m[1], $params);
if (isset($params['host'])) {
$tag->setAttribute('href', $this->view->baseUrl(
'/monitoring/host/show?host=' . urlencode($params['host']
)));
}
} else {
// ignoring
}
//$ret[$tag->getAttribute('href')] = $tag->childNodes->item(0)->nodeValue;
}
return substr($dom->saveHTML(), 5, -7);
}
protected function getPurifier()
{
if (self::$purifier === null) {
require_once 'HTMLPurifier/Bootstrap.php';
require_once 'HTMLPurifier/HTMLPurifier.php';
require_once 'HTMLPurifier/HTMLPurifier.autoload.php';
$config = HTMLPurifier_Config::createDefault();
$config->set('Core.EscapeNonASCIICharacters', true);
$config->set('HTML.Allowed', 'p,br,b,a[href],i,table,tr,td[colspan],div[class]');
// This avoids permission problems:
// $config->set('Core.DefinitionCache', null);
$config->set('Cache.DefinitionImpl', null);
// TODO: Use a cache directory:
// $config->set('Cache.SerializerPath', '/var/spool/whatever');
// $config->set('URI.Base', 'http://www.example.com');
// $config->set('URI.MakeAbsolute', true);
// $config->set('AutoFormat.AutoParagraph', true);
self::$purifier = new HTMLPurifier($config);
}
return self::$purifier;
}
}