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

Source for file MultiLanguageBuilder.class.php

Documentation is available at MultiLanguageBuilder.class.php

  1. <?php
  2.  
  3. /**
  4.  * Класс MultiLanguageBuilder.
  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.  *
  18.  * @package energine
  19.  * @subpackage core
  20.  * @author dr.Pavka
  21.  */
  22. class MultiLanguageBuilder extends Builder {
  23.  
  24.     /**
  25.      * Конструктор класса.
  26.      *
  27.      * @access public
  28.      * @return void 
  29.      */
  30.     public function __construct({
  31.         parent::__construct();
  32.     }
  33.  
  34.     /**
  35.      * Построение результата.
  36.      *
  37.      * @access protected
  38.      * @return void 
  39.      */
  40.     protected function run({
  41.         $lang Language::getInstance();
  42.  
  43.         $dom_recordSet $this->result->createElement('recordset');
  44.         $this->result->appendChild($dom_recordSet);
  45.         $records array();
  46.         $correlation array();
  47.  
  48.         // для режима списка и режима редактирования (когда есть данные)
  49.         if (!$this->data->isEmpty()) {
  50.             foreach ($this->dataDescription->getFieldDescriptions(as $fieldName => $fieldInfo{
  51.                 $fieldData $this->data->getFieldByName($fieldName);
  52.                 // если это первичный ключ
  53.                 if ($fieldInfo->getPropertyValue('key'=== true{
  54.                     $fieldInfo->setProperty('tabName'$this->translate('TXT_PROPERTIES'));
  55.                     $i 0;
  56.                     while ($i $fieldData->getRowCount()) {
  57.                         $rowData $fieldData->getRowData($i);
  58.                         $index (is_null($rowData))?0:$rowData;
  59.  
  60.                         $correlation[$i$index;
  61.                         if (!isset($records[$index])) {
  62.                             $records[$index][$this->createField($fieldName$fieldInfo$rowData$fieldData->getRowProperties($i));
  63.                         }
  64.                         $i++;
  65.                     }
  66.                 }
  67.                 // если это мультиязычное поле
  68.                 elseif ($fieldInfo->isMultilanguage()) {
  69. //                    $title = $fieldInfo->getPropertyValue('title');
  70.                     foreach ($fieldData->getData(as $key => $data{
  71.                         $langID $this->data->getFieldByName('lang_id')->getRowData($key);
  72.                         $dataProperties $fieldData->getRowProperties($key);
  73.                         $fieldInfo->setProperty('language'$langID);
  74.                         $fieldInfo->setProperty('tabName'$lang->getNameByID($langID));
  75.                         $dom_field $this->createField($fieldName$fieldInfo$data$dataProperties);
  76.                         $records[$correlation[$key]][$dom_field;
  77.                     }
  78.                 }
  79.                 // все остальные поля
  80.                 elseif (!$fieldInfo->getPropertyValue('languageID')) {
  81.                     $i 0;
  82.                     $tmp array_flip($correlation);
  83.                     foreach ($tmp as $key => $value{
  84.                         $fieldValue false;
  85.                         if (in_array($fieldInfo->getType()array(FieldDescription::FIELD_TYPE_MULTIFieldDescription::FIELD_TYPE_SELECT))) {
  86.                             if ($this->data && $this->data->getFieldByName($fieldName)) {
  87.                                 if ($fieldInfo->getType(== FieldDescription::FIELD_TYPE_SELECT{
  88.                                     $data array($this->data->getFieldByName($fieldName)->getRowData($i));
  89.                                 }
  90.                                 else {
  91.                                     $data $this->data->getFieldByName($fieldName)->getRowData($i);
  92.                                 }
  93.                             }
  94.                             else {
  95.                                 $data false;
  96.                             }
  97.                             $fieldValue $this->createOptions($fieldInfo$data);
  98.                         }
  99.                         elseif (!$this->data{
  100.                             $fieldValue false;
  101.                         }
  102.                         elseif ($this->data->getFieldByName($fieldName)) {
  103.                             $fieldValue $fieldData->getRowData($value);
  104.                         }
  105.  
  106.                         $dataProperties ($fieldData)?$fieldData->getRowProperties($value):false;
  107.                         if (is_null($fieldInfo->getPropertyValue('tabName'))) {
  108.                             $fieldInfo->setProperty('tabName'$this->translate('TXT_PROPERTIES'));
  109.                         }
  110.                         else {
  111.                             $fieldInfo->setProperty('tabName'$fieldInfo->getPropertyValue('tabName'));
  112.                         }
  113.  
  114.                         $dom_field $this->createField($fieldName$fieldInfo$fieldValue$dataProperties);
  115.                         $records[$correlation[$value]][$dom_field;
  116.                         $i++;
  117.                     }
  118.                 }
  119.             }
  120.             foreach ($records as $key => $value{
  121.                 $dom_record $this->result->createElement('record');
  122.                 foreach ($value as $val{
  123.                     $dom_record->appendChild($val);
  124.                 }
  125.                 $dom_recordSet->appendChild($dom_record);
  126.             }
  127.         }
  128.         // для режима вставки (когда данные отсутствуют)
  129.         else {
  130.             $dom_record $this->result->createElement('record');
  131.             foreach ($this->dataDescription->getFieldDescriptions(as $fieldName => $fieldInfo{
  132.                 if ($fieldInfo->isMultilanguage()) {
  133.                     //$title = $fieldInfo->getPropertyValue('title');
  134.                     foreach (array_keys($lang->getLanguages()) as $langID{
  135.                         $fieldInfo->setProperty('language'$langID);
  136.                         $fieldInfo->setProperty('tabName'$lang->getNameByID($langID));
  137.                         $dom_record->appendChild($this->createField($fieldName$fieldInfo''));
  138.                     }
  139.                 }
  140.                 elseif (!$fieldInfo->getPropertyValue('languageID')){
  141.                     if (in_array($fieldInfo->getType()array(FieldDescription::FIELD_TYPE_MULTIFieldDescription::FIELD_TYPE_SELECT))) {
  142.                         $fieldValue $this->createOptions($fieldInfo);
  143.                     }
  144.                     else {
  145.                         $fieldValue false;
  146.                     }
  147.  
  148.                     if (is_null($fieldInfo->getPropertyValue('tabName'))) {
  149.                         $fieldInfo->setProperty('tabName'$this->translate('TXT_PROPERTIES'));
  150.                     }
  151.                     else {
  152.                         $fieldInfo->setProperty('tabName'$fieldInfo->getPropertyValue('tabName'));
  153.                     }
  154.  
  155.                     $dom_record->appendChild($this->createField($fieldName$fieldInfo$fieldValue));
  156.                 }
  157.             }
  158.             $dom_recordSet->setAttribute('empty''empty');
  159.             $dom_recordSet->appendChild($dom_record);
  160.         }
  161.     }
  162. }
В создании документации нам помог: phpDocumentor