示例#1
0
 /**
  * @group Bug
  */
 public function testBug()
 {
     $ctx = IcingaWebTestTool::getContext();
     $file = AppKitFileUtil::getAlternateFilename(AgaviConfig::get('modules.cronks.xml.path.grid'), self::TEMPLATE, '.xml');
     $template = new CronkGridTemplateXmlParser($file->getRealPath(), $ctx);
     $template->parseTemplate();
     $worker = CronkGridTemplateWorkerFactory::createWorker($template, $ctx, self::CONNECTION);
     $this->assertGreaterThanOrEqual(0, $worker->countResults());
 }
 public static function createWorker(CronkGridTemplateXmlParser $template, AgaviContext $context, $connection = "icinga")
 {
     if ($template->hasSection('type')) {
         $className = $template->getSection('type') . 'CronkTemplateWorker';
         if (class_exists($className)) {
             return new $className($template, $context, $connection);
         }
     }
     return new GenericCronkTemplateWorker($template, $context);
 }
 public function executeJson(AgaviRequestDataHolder $rd)
 {
     $data = array();
     $jsonResult = new AppKitExtJsonDocument();
     $storage = $this->getContext()->getUser()->getNsmUser()->getStorage();
     try {
         $file = $this->getTemplateFile($rd);
         $template = unserialize($storage->read("icinga.cronks.template." . $file));
         if (!$template) {
             $template = new CronkGridTemplateXmlParser($file->getRealPath(), $this->getContext());
             $template->parseTemplate();
             $storage->write("icinga.cronks.template" . $file, serialize($template));
         }
         $connection = $rd->getParameter("connection", "icinga");
         $worker = CronkGridTemplateWorkerFactory::createWorker($template, $this->getContext(), $connection);
         if (is_numeric($rd->getParameter('page_start')) && is_numeric($rd->getParameter('page_limit'))) {
             $worker->setResultLimit($rd->getParameter('page_start'), $rd->getParameter('page_limit'));
         } else {
             $user = $this->context->getUser();
             $worker->setResultLimit(0, $user->getPrefVal('org.icinga.grid.pagerMaxItems', AgaviConfig::get('modules.cronks.grid.pagerMaxItems', 25)));
         }
         if ($rd->getParameter('sort_field', null) !== null) {
             $worker->setOrderColumn($rd->getParameter('sort_field'), $rd->getParameter('sort_dir', 'ASC'));
             if ($rd->getParameter('additional_sort_field', null) !== null) {
                 $worker->addOrderColumn($rd->getParameter('additional_sort_field'), $rd->getParameter('sort_dir', 'ASC'));
             }
         }
         // apply json and legacy filters
         /** @var $pm Cronks_System_ViewProcFilterParamsModel */
         $pm = $this->getContext()->getModel('System.ViewProcFilterParams', 'Cronks');
         if (is_array($rd->getParameter('f'))) {
             $pm->setParams($rd->getParameter('f'));
         }
         if ($rd->getParameter('filter_json', false)) {
             $pm->setParamsFromJson(json_decode($rd->getParameter('filter_json'), true));
         }
         $pm->applyToWorker($worker);
         $worker->buildAll();
         $data = $worker->fetchDataArray();
         $worker->countResults();
         $jsonResult->hasFieldBulk(array_fill_keys($template->getFieldKeys(), ""));
         $jsonResult->setSuccess(true);
         $jsonResult->setDefault(AppKitExtJsonDocument::PROPERTY_TOTAL, $worker->countResults());
         $jsonResult->setData($data);
     } catch (AppKitFileUtilException $e) {
         $jsonResult->resetDoc();
         $jsonResult->hasFieldBulk($template->getFieldKeys());
         $jsonResult->setSuccess(true);
         $jsonResult->setDefault(AppKitExtJsonDocument::PROPERTY_TOTAL, 0);
     }
     return (string) $jsonResult;
 }
 public function executeJson(AgaviRequestDataHolder $rd)
 {
     try {
         $modules = AgaviConfig::get("org.icinga.modules", array());
         $fileName = $rd->getParameter('template');
         $file = null;
         foreach ($modules as $name => $path) {
             if (file_exists($path . "/config/templates/" . $fileName . '.xml')) {
                 $file = AppKitFileUtil::getAlternateFilename($path . "/config/templates/", $fileName, '.xml');
             }
         }
         if ($file === null) {
             $file = AppKitFileUtil::getAlternateFilename(AgaviConfig::get('modules.cronks.xml.path.grid'), $rd->getParameter('template'), '.xml');
         }
         $template = new CronkGridTemplateXmlParser($file->getRealPath());
         $template->parseTemplate();
         $user = $this->getContext()->getUser()->getNsmUser();
         $data = $template->getTemplateData();
         if ($user->hasTarget('IcingaCommandRestrictions')) {
             $template->removeRestrictedCommands();
         }
         return json_encode(array('template' => $template->getTemplateData(), 'fields' => $template->getFields(), 'keys' => $template->getFieldKeys(), 'params' => $rd->getParameters(), 'connections' => IcingaDoctrineDatabase::$icingaConnections));
     } catch (AppKitFileUtilException $e) {
         $msg = 'Could not find template for ' . $rd->getParameter('template');
         AppKitAgaviUtil::log('Could not find template for ' . $rd->getParameter('template'), AgaviLogger::ERROR);
         return $msg;
     }
 }
 public function execute(AgaviXmlConfigDomDocument $document)
 {
     $code = array();
     $parser = new CronkGridTemplateXmlParser();
     $parser->disableCache();
     $templates = $document->getElementsByTagName("template");
     foreach ($templates as $extension) {
         $attrs = $extension->attributes;
         $pattern = $attrs->getNamedItem('match-pattern');
         if (!$pattern) {
             continue;
         }
         // we don't have a dtd, so this can happen
         $parser->setDom($extension);
         $parser->parseTemplate(true);
         $code[] = array("pattern" => $pattern->value, "data" => $parser->getTemplateData(), "fields" => $parser->getFields());
     }
     return $this->generate('return ' . var_export($code, true));
 }
 private function extendTemplate()
 {
     $filename = "";
     if (is_object($this->file)) {
         $filename = basename($this->file->getFilename(), ".xml");
     }
     if (is_string($this->file)) {
         $filename = basename($this->file, ".xml");
     }
     if (empty(self::$registeredExtenders)) {
         self::$registeredExtenders = (include AgaviConfigCache::checkConfig(AgaviToolkit::expandDirectives('%core.module_dir%/Cronks/config/templateExtensions.xml')));
     }
     foreach (self::$registeredExtenders as $handler) {
         if (preg_match("/" . $handler["pattern"] . "/i", basename($filename))) {
             $this->applyExtender($handler);
         }
     }
 }