Пример #1
0
 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;
 }
Пример #2
0
 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;
     }
 }
Пример #3
0
	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;
		}
	}