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

Source for file TreeBuilder.class.php

Documentation is available at TreeBuilder.class.php

  1. <?php
  2.  
  3. /**
  4.  * Класс TreeBuilder.
  5.  *
  6.  * @package energine
  7.  * @subpackage core
  8.  * @author dr.Pavka
  9.  * @copyright Energine 2006
  10.  * @version $Id$
  11.  */
  12.  
  13. //require_once('core/framework/Builder.class.php');
  14.  
  15. /**
  16.  * Построитель древовидных данных.
  17.  * Кроме Data и DataDescription имеет еще и Tree c помощью которого определяется структура
  18.  *
  19.  * @package energine
  20.  * @subpackage core
  21.  * @author dr.Pavka
  22.  */
  23. class TreeBuilder extends Builder  {
  24.     /**
  25.      * Имя поля содержащего ключевой идентификатор
  26.      *
  27.      * @var string 
  28.      * @access private
  29.      */
  30.     private $idFieldName = false;
  31.     /**
  32.      * Дерево
  33.      *
  34.      * @var TreeNodeList 
  35.      * @access private
  36.      */
  37.     private $tree;
  38.  
  39.     /**
  40.      * Конструктор класса.
  41.      *
  42.      * @access public
  43.      * @return void 
  44.      */
  45.     public function __construct({
  46.         parent::__construct();
  47.     }
  48.  
  49.     /**
  50.      * Устанавливает дерево
  51.      *
  52.      * @param TreeNodeList 
  53.      * @return void 
  54.      * @access public
  55.      */
  56.  
  57.     public function setTree(TreeNodeList $tree{
  58.         $this->tree = $tree;
  59.     }
  60.  
  61.     /**
  62.      * Построение результата.
  63.      *
  64.      * @access protected
  65.      * @return void 
  66.      */
  67.     protected function run({
  68.         foreach ($this->dataDescription as $fieldName => $fieldDescription{
  69.             if (!is_null($fieldDescription->getPropertyValue('key'))) {
  70.                 $this->idFieldName = $fieldName;
  71.             }
  72.         }
  73.         if (!$this->idFieldName{
  74.             throw new SystemException('ERR_DEV_NO_TREE_IDENT'SystemException::ERR_DEVELOPERarray($this->idFieldName));
  75.         }
  76.         $this->result->appendChild($this->treeBuild($this->tree));
  77.     }
  78.  
  79.     /**
  80.      * Внутренний метод постройки древовидного XML
  81.      *
  82.      * @return DOMNode 
  83.      * @access private
  84.      */
  85.  
  86.     private function treeBuild(TreeNodeList $tree{
  87.         $dom_recordset $this->result->createElement('recordset');
  88.         $data array_flip($this->data->getFieldByName($this->idFieldName)->getData());
  89.         foreach ($tree as $id => $node{
  90.             if(isset($data[$id])){
  91.             //Идентификатор строки
  92.             $num $data[$id];
  93.             $dom_record $this->result->createElement('record');
  94.             foreach ($this->dataDescription as $fieldName => $fieldDescription{
  95.                 $fieldValue $this->data->getFieldByName($fieldName)->getRowData($num);
  96.                 $fieldProperties $this->data->getFieldByName($fieldName)->getRowProperties($num);
  97.                 if ($fieldDescription->getType(== FieldDescription::FIELD_TYPE_SELECT {
  98.                     $fieldValue $this->createOptions($fieldDescriptionarray($fieldValue));
  99.                 }
  100.  
  101.                 $dom_field $this->createField($fieldName$fieldDescription$fieldValue$fieldProperties);
  102.                 $dom_record->appendChild($dom_field);
  103.             }
  104.             $dom_recordset->appendChild($dom_record);
  105.             if ($node->hasChildren()) {
  106.                 $dom_record->appendChild($this->treeBuild($node->getChildren()));
  107.             }
  108.             }
  109.  
  110.         }
  111.         return $dom_recordset;
  112.     }
  113. }
В создании документации нам помог: phpDocumentor