energine
[ class tree: energine ] [ index: energine ] [ all elements ]

Source for file DocumentController.class.php

Documentation is available at DocumentController.class.php

  1. <?php
  2.  
  3. /**
  4.  * Класс DocumentController.
  5.  *
  6.  * @package energine
  7.  * @subpackage core
  8.  * @author 1m.dm
  9.  * @copyright Energine 2006
  10.  */
  11.  
  12. /**
  13.  * Отвечает за подготовку среды и запуск работы объекта Document.
  14.  *
  15.  * @package energine
  16.  * @subpackage core
  17.  * @author 1m.dm
  18.  * @final
  19.  */
  20. final class DocumentController extends Object {
  21.     /**
  22.      * 
  23.      * @var Transformer 
  24.      */
  25.     private static $transformer;
  26.     /**
  27.      * 
  28.      * @var DocumentController 
  29.      */
  30.     private static $instance;
  31.  
  32.     /**
  33.      * Конструктор класса.
  34.      *
  35.      * @access public
  36.      * @return void 
  37.      */
  38.     public function __construct({
  39.         parent::__construct();
  40.     }
  41.  
  42.     /**
  43.      * Возвращает единый для всей системы экземпляр класса DocumentController
  44.      *
  45.      * @access public
  46.      * @static
  47.      * @return DocumentController 
  48.      */
  49.     static public function getInstance({
  50.         if (!isset(self::$instance)) {
  51.             self::$instance new DocumentController();
  52.         }
  53.         return self::$instance;
  54.     }
  55.  
  56.     /**
  57.      * Подготавливает среду для работы, создаёт объект Document и передаёт
  58.      * ему управление. После отработки объекта Document, запускает трансформацию
  59.      * XML-документа страницы в выходной формат.
  60.      *
  61.      * @access public
  62.      * @return void 
  63.      */
  64.     public function run({
  65.         $request Request::getInstance();
  66.         $language Language::getInstance();
  67.         $language->setCurrent($language->getIDByAbbr($request->getLang()true));
  68.  
  69.         //unset($sitemap);
  70.         $document new Document($request->getPath());
  71.         $documentDescription Sitemap::getInstance()->getDocumentInfo($document->getID())
  72.         $document->loadComponents($documentDescription['templateID']);
  73.         
  74.         // уберём за собой
  75.         unset($request$language$documentDescription);
  76.         
  77.        /*
  78.         * Если в каком-либо компоненте происходит ошибка, не позволяющая ему
  79.         * продолжить работу, генерируется фиктивное исключение, с помощью
  80.         * которого прерывается работа компонента. В дальнейшем, при вызове
  81.         * метода Document::build, происходит обработка всех возникших ошибок.
  82.         */
  83.         try {
  84.             $document->runComponents();
  85.         }
  86.         catch (DummyException $dummyException{}
  87.         $document->build();
  88.         
  89.         $this->transform($document);
  90.     }
  91.     /**
  92.      * Возвращает объект  - XSLT трансформатор
  93.      *
  94.      * @return Transformer 
  95.      */
  96.     public function getTransformer(){
  97.         if(!isset(self::$transformer)){
  98.             self::$transformer new Transformer();
  99.         }
  100.  
  101.         return self::$transformer;
  102.     }
  103.  
  104.  
  105.     /**
  106.      * Трансформирует XML-документ страницы в выходной формат,
  107.      * и выводит результат клиенту.
  108.      *
  109.      * @param $document Document
  110.      * @access private
  111.      * @return void 
  112.      */
  113.     private function transform($document{
  114.         $response Response::getInstance();
  115.         $dom_document $document->getResult();
  116.         if (!($dom_document instanceof DOMDocument)) {
  117.             throw new SystemException('ERR_BAD_DOCUMENT'SystemException::ERR_CRITICAL);
  118.         }
  119.  
  120.         if ((isset($_GET['debug']&& $this->getConfigValue('site.debug')) || $this->getConfigValue('site.asXML')) {
  121.             $result trim($dom_document->saveXML());
  122.             $response->setHeader('Content-Type''text/xml; charset=UTF-8');
  123.         }
  124.         else {
  125.             $result $this->getTransformer()->transform($dom_document);
  126.               $response->setHeader('Content-Type''text/html; charset=UTF-8'false);
  127.         }
  128.  
  129.         $response->write($result);
  130.     }
  131. }
В создании документации нам помог: phpDocumentor