Source for file TreeBuilder.class.php

Documentation is available at TreeBuilder.class.php

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

Documentation generated on Mon, 17 Sep 2007 13:32:55 +0300 by phpDocumentor 1.4.0a2