function shutdown_handler() { global $dev_mode, $errorString, $errorDescription, $errorCode; $e = error_get_last(); if ($e['type'] == 1) { // фатальная ошибка if ($dev_mode) { $errorString = $e['message']; $errorDescription = '[' . $e['file'] . ':' . $e['line'] . ']'; } else { $errorDescription = ''; $errorString = $e['message']; } $errorCode = 0; XMLClass::reinitialize(); $page = new PageConstructor('errors/p502.xml'); @ob_end_clean(); echo $page->process(); } }
public function process() { global $current_user; /* @var $current_user CurrentUser */ if ($pid = Request::get('pid')) { Statistics::setPartnerCookie($pid); } XMLClass::$pageNode = XMLClass::createNodeFromObject(array(), false, 'page', false); XMLClass::appendNode(XMLClass::$pageNode, ''); XMLClass::$accessNode = XMLClass::createNodeFromObject(AccessRules::getRules(), false, 'access', true); XMLClass::appendNode(XMLClass::$accessNode, ''); XMLClass::$pageNode->setAttribute('current_url', Request::$url); if ($mn = $this->getMessageNode()) { XMLClass::$pageNode->appendChild($mn); } XMLClass::$pageNode->setAttribute('prefix', Config::need('www_path') . '/'); XMLClass::$varNode = XMLClass::$xml->createElement('variables'); foreach (Request::$get_normal as $f => $v) { if (is_numeric($f)) { // cachebreaker? XMLClass::$varNode->setAttribute('n' . $f, $f); } else { XMLClass::$varNode->setAttribute($f, $v); } } XMLClass::$pageNode->appendChild(XMLClass::$varNode); XMLClass::$rootNode->appendChild(XMLClass::$xml->importNode(StructureParser::toXML(), 1)); if ($current_user->authorized) { XMLClass::$CurrentUserNode = XMLClass::createNodeFromObject($current_user->getXMLInfo(), false, 'current_user', true); } else { XMLClass::$CurrentUserNode = XMLClass::createNodeFromObject(array(), false, 'current_user', false); } XMLClass::$pageNode->appendChild(XMLClass::$CurrentUserNode); // втыкаем модули страницы $role = $current_user->getRole(); foreach ($this->modules as $module) { $this->processModule($module['name'], $module); } if ($pageTitle = StructureParser::getTitle()) { $this->buildPageTitle($pageTitle); } switch (Request::$responseType) { case 'xml': case 'xmlc': return XMLClass::dumpToBrowser(); break; case 'xsl': case 'xslc': $xslTemplateClass = new XSLClass($this->xsltFileName); return $xslTemplateClass->dumpToBrowser(); break; case 'html': $xslTemplateClass = new XSLClass($this->xsltFileName); $html = $xslTemplateClass->getHTML(XMLClass::$xml); return $html; break; default: return XMLClass::dumpToBrowser(); break; } }
public static function reinitialize() { self::$initialized = false; self::initialize(); }
public function getResultXML() { if ($this->xmlPart !== false) { return $this->xmlPart; } $this->xmlPart = XMLClass::createNodeFromObject(array('data' => $this->data, 'settings' => $this->settings), false, 'module'); if ($this->xHTMLCachingEnabled) { Log::timingplus('BaseModule:xHTML generating #' . $this->moduleName); // процессим кусок XML с шаблоном, чтобы получить xHTML // шаблон, который отпроцессит только наш модуль - null.xsl $XSLClass = new XSLClass(LibPages::$pages[Request::$pageName]['xslt'], $xHTML = true); $arr = array($this->moduleName => $this->getXSLTFileName(true)); // и шаблон модуля $XSLClass->setTemplates($arr); // создаем документ $xml = new DOMDocument('1.0', 'UTF-8'); $xml->loadXML("<xml version=\"1.0\" encoding=\"utf-8\" >" . "<root></root></xml>"); $rootNode = $xml->getElementsByTagName("root")->item(0); // нода page также нужна для корректной обработки шаблонаы $pageNode = $xml->importNode(XMLClass::$pageNode); $rootNode->appendChild($pageNode); // вставляем в него ноду с данными модуля $xHTMLnode = $xml->importNode($this->xmlPart, true); $rootNode->appendChild($xHTMLnode); $xHTMLnode->setAttribute('name', $this->moduleName); // теперь полученный xml процессим с шаблоном $xHTML = $XSLClass->getHTML($xml); // полученный xHTML нужно вбить в XML ноду "module" $xHTMLdoc = new DOMDocument('1.0', 'UTF-8'); $xHTMLdoc->loadHTML($xHTML); $xpath = new DOMXPath($xHTMLdoc); $part = $xpath->query('body')->item(0); $part = $xHTMLdoc->importNode($part, true); // в part лежит HTML код // копируем его в новую ноду $NewElement = XMLClass::$xml->createElement('module'); // Clone the attributes: foreach ($part->attributes as $attribute) { $NewElement->setAttribute($attribute->name, $attribute->value); } foreach ($part->childNodes as $child) { $NewElement->appendChild(XMLClass::$xml->importNode($child, true)); } $this->xmlPart = $NewElement; Log::timingplus('BaseModule:xHTML generating #' . $this->moduleName); } $this->putInCache(); return $this->xmlPart; }
ob_start(); // разбираем запрос $pageName = Request::initialize(); // авторизуем пользователя $current_user = new CurrentUser(); // выполняем модули записи, если был соответствующий POST запрос if (Request::post('writemodule')) { PostWrite::process(Request::post('writemodule')); } // запускаем обработку страницы $page = new PageConstructor(Request::$pageName); @ob_end_clean(); echo $page->process(); } catch (Exception $e) { if ($dev_mode) { $errorString = "<h3>" . $e->getMessage() . '</h3><br/>[' . $e->getFile() . ':' . $e->getLine() . '][' . $e->getCode() . ']'; $errorString .= '<br/><pre>' . $e->getTraceAsString() . '</pre>'; die($errorString); } else { $errorString = $e->getMessage(); } $errorCode = $e->getCode(); XMLClass::reinitialize(); $page = new PageConstructor('p502'); @ob_end_clean(); echo $page->process(); } Log::timing('total'); if ($dev_mode) { echo Log::getHtmlLog(); }
public function getResultXML() { if ($this->xmlPart !== false) { return $this->xmlPart; } $this->xmlPart = XMLClass::createNodeFromObject($this->data, false, 'module'); $this->putInCache(); return $this->xmlPart; }
public function process() { global $current_user; /* @var $current_user CurrentUser */ XMLClass::$pageNode = XMLClass::createNodeFromObject($this->pageSettings, false, 'page', false); XMLClass::appendNode(XMLClass::$pageNode, $this->pageName); XMLClass::$pageNode->setAttribute('current_url', Request::$url); XMLClass::$pageNode->setAttribute('url', Request::$urlfirst); XMLClass::$pageNode->setAttribute('page_url', Config::need('www_path') . '/' . Request::$pageName . '/'); XMLClass::$pageNode->setAttribute('prefix', Config::need('www_path') . '/'); if ($current_user->authorized) XMLClass::$CurrentUserNode = XMLClass::createNodeFromObject($current_user->getXMLInfo(), false, 'current_user', false); else XMLClass::$CurrentUserNode = XMLClass::createNodeFromObject(array(), false, 'current_user', false); XMLClass::$pageNode->appendChild(XMLClass::$CurrentUserNode); // втыкаем модули страницы $role = $current_user->getRole(); // авторизация - везде $this->pageSettings['modules'][] = array( 'users' => array( 'roles' => array( '' => '', ), 'action' => 'show', 'mode' => 'auth', 'params' => array( ), ), ); if (isset($this->pageSettings['modules']) && is_array($this->pageSettings['modules'])) { foreach ($this->pageSettings['modules'] as $fid => $module) { foreach ($module as $moduleName => $additionalSettings) { if (!isset($additionalSettings['roles'][$role])) $this->processModule($moduleName, $additionalSettings); } } } $this->appendCss(); // xml дерево создано, теперь генерируем xslt шаблон // выдаем html //Request::$responseType = 'xml'; switch (Request::$responseType) { case 'xml':case 'xmlc': return XMLClass::dumpToBrowser(); break; case 'xsl':case 'xslc': $xslTemplateClass = new XSLClass($this->pageSettings['xslt']); $xslTemplateClass->setTemplates($this->xsltFiles); return $xslTemplateClass->dumpToBrowser(); break; case 'html': $xslTemplateClass = new XSLClass($this->pageSettings['xslt']); $xslTemplateClass->setTemplates($this->xsltFiles); $html = $xslTemplateClass->getHTML(XMLClass::$xml); if ($xslTemplateClass->fetched_from_cache) { // чтобы знать, что файл из кеша Log::logHtml('xslt template GOT from cache'); } if ($xslTemplateClass->puted_into_cache) { // чтобы знать, что файл из кеша Log::logHtml('xslt template PUT to cache'); } return $html; break; default: return XMLClass::dumpToBrowser(); break; } }