mirror of
				https://github.com/Icinga/icingaweb2.git
				synced 2025-10-31 03:14:31 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			94 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| // {{{ICINGA_LICENSE_HEADER}}}
 | |
| // {{{ICINGA_LICENSE_HEADER}}}
 | |
| 
 | |
| class Zend_View_Helper_PluginOutput extends Zend_View_Helper_Abstract
 | |
| {
 | |
|     protected static $purifier;
 | |
| 
 | |
|     public function pluginOutput($output)
 | |
|     {
 | |
|         if (empty($output)) {
 | |
|             return '';
 | |
|         }
 | |
|         $output = preg_replace('~<br[^>]+>~', "\n", $output);
 | |
|         if (preg_match('~<\w+[^>]*>~', $output)) {
 | |
|             // HTML
 | |
|             $output = preg_replace('~<table~', '<table style="font-size: 0.75em"',
 | |
|                 $this->getPurifier()->purify($output)
 | |
|             );
 | |
|         } elseif (preg_match('~\\\n~', $output)) {
 | |
|             // Plaintext
 | |
|             $output = '<pre class="pluginoutput">'
 | |
|                . preg_replace(
 | |
|               '~\\\n~', "\n", preg_replace(
 | |
|                 '~\\\n\\\n~', "\n",
 | |
|                 preg_replace('~\[OK\]~', '<span class="ok">[OK]</span>',
 | |
|                  preg_replace('~\[WARNING\]~', '<span class="warning">[WARNING]</span>',
 | |
|                   preg_replace('~\[CRITICAL\]~', '<span class="error">[CRITICAL]</span>',
 | |
|                    preg_replace('~\@{6,}~', '@@@@@@',
 | |
|                      $this->view->escape($output)
 | |
|                 ))))
 | |
|               )
 | |
|             ) . '</pre>';
 | |
|         } else {
 | |
|             $output = '<pre class="pluginoutput">'
 | |
|                . preg_replace('~\@{6,}~', '@@@@@@',
 | |
|                 $this->view->escape($output)
 | |
|             ) . '</pre>';
 | |
|         }
 | |
|         $output = $this->fixLinks($output);
 | |
|         return $output;
 | |
|     }
 | |
| 
 | |
|     protected function fixLinks($html)
 | |
|     {
 | |
| 
 | |
|         $ret = array();
 | |
|         $dom = new DOMDocument;
 | |
|         $dom->loadXML('<div>' . $html . '</div>', 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/detail/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;
 | |
|     }
 | |
| }
 |