/** * @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); } } }