<?php
/**
* ÐлаÑÑ MultiLanguageBuilder.
*
* @package energine
* @subpackage core
* @author dr.Pavka
* @copyright ColoCall 2006
* @version $Id: MultiLanguageBuilder.class.php,v 1.6 2007/12/17 14:16:03 pavka Exp $
*/
//require_once('core/framework/Builder.class.php');
/**
* ÐоÑÑÑоиÑÐµÐ»Ñ Ð´Ð»Ñ Ð¼ÑлÑÑиÑзÑÑнÑÑ
компоненÑов.
*
* @package energine
* @subpackage core
*/
class MultiLanguageBuilder extends Builder {
/**
* ÐонÑÑÑÑкÑÐ¾Ñ ÐºÐ»Ð°ÑÑа.
*
* @access public
* @return void
*/
public function __construct() {
parent::__construct();
}
/**
* ÐоÑÑÑоение ÑезÑлÑÑаÑа.
*
* @access protected
* @return void
*/
protected function run() {
$lang = Language::getInstance();
$dom_recordSet = $this->result->createElement('recordset');
$this->result->appendChild($dom_recordSet);
$records = array();
$correlation = array();
// Ð´Ð»Ñ Ñежима ÑпиÑка и Ñежима ÑедакÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ (когда еÑÑÑ Ð´Ð°Ð½Ð½Ñе)
if ($this->data) {
foreach ($this->dataDescription->getFieldDescriptions() as $fieldName => $fieldInfo) {
$fieldData = $this->data->getFieldByName($fieldName);
// еÑли ÑÑо пеÑвиÑнÑй клÑÑ
if ($fieldInfo->getPropertyValue('key') === true) {
$fieldInfo->addProperty('tabName', $this->translate('TXT_PROPERTIES'));
$i = 0;
while ($i < $fieldData->getRowCount()) {
$rowData = $fieldData->getRowData($i);
$index = (is_null($rowData))?0:$rowData;
$correlation[$i] = $index;
if (!isset($records[$index])) {
$records[$index][] = $this->createField($fieldName, $fieldInfo, $rowData);
}
$i++;
}
}
// еÑли ÑÑо мÑлÑÑиÑзÑÑное поле
elseif ($fieldInfo->isMultilanguage()) {
// $title = $fieldInfo->getPropertyValue('title');
foreach ($fieldData->getData() as $key => $data) {
$langID = $this->data->getFieldByName('lang_id')->getRowData($key);
$dataProperties = $fieldData->getRowProperties($key);
$fieldInfo->addProperty('language', $langID);
$fieldInfo->addProperty('tabName', $lang->getNameByID($langID));
$dom_field = $this->createField($fieldName, $fieldInfo, $data, $dataProperties);
$records[$correlation[$key]][] = $dom_field;
}
}
// вÑе оÑÑалÑнÑе полÑ
elseif (!$fieldInfo->getPropertyValue('languageID')) {
$i = 0;
$tmp = array_flip($correlation);
foreach ($tmp as $key => $value) {
$fieldValue = false;
if (in_array($fieldInfo->getType(), array(FieldDescription::FIELD_TYPE_MULTI, FieldDescription::FIELD_TYPE_SELECT))) {
if ($this->data && $this->data->getFieldByName($fieldName)) {
if ($fieldInfo->getType() == FieldDescription::FIELD_TYPE_SELECT) {
$data = array($this->data->getFieldByName($fieldName)->getRowData($i));
}
else {
$data = $this->data->getFieldByName($fieldName)->getRowData($i);
}
}
else {
$data = false;
}
$fieldValue = $this->createOptions($fieldInfo, $data);
}
elseif (!$this->data) {
$fieldValue = false;
}
elseif ($this->data->getFieldByName($fieldName)) {
$fieldValue = $fieldData->getRowData($value);
}
$dataProperties = ($fieldData)?$fieldData->getRowProperties($value):false;
if (is_null($fieldInfo->getPropertyValue('tabName'))) {
$fieldInfo->addProperty('tabName', $this->translate('TXT_PROPERTIES'));
}
else {
$fieldInfo->addProperty('tabName', $fieldInfo->getPropertyValue('tabName'));
}
$dom_field = $this->createField($fieldName, $fieldInfo, $fieldValue, $dataProperties);
$records[$correlation[$value]][] = $dom_field;
$i++;
}
}
}
foreach ($records as $key => $value) {
$dom_record = $this->result->createElement('record');
foreach ($value as $val) {
$dom_record->appendChild($val);
}
$dom_recordSet->appendChild($dom_record);
}
}
// Ð´Ð»Ñ Ñежима вÑÑавки (когда даннÑе оÑÑÑÑÑÑвÑÑÑ)
else {
$dom_record = $this->result->createElement('record');
foreach ($this->dataDescription->getFieldDescriptions() as $fieldName => $fieldInfo) {
if ($fieldInfo->isMultilanguage()) {
//$title = $fieldInfo->getPropertyValue('title');
foreach (array_keys($lang->getLanguages()) as $langID) {
$fieldInfo->addProperty('language', $langID);
$fieldInfo->addProperty('tabName', $lang->getNameByID($langID));
$dom_record->appendChild($this->createField($fieldName, $fieldInfo, ''));
}
}
elseif (!$fieldInfo->getPropertyValue('languageID')){
if (in_array($fieldInfo->getType(), array(FieldDescription::FIELD_TYPE_MULTI, FieldDescription::FIELD_TYPE_SELECT))) {
$fieldValue = $this->createOptions($fieldInfo);
}
else {
$fieldValue = false;
}
if (is_null($fieldInfo->getPropertyValue('tabName'))) {
$fieldInfo->addProperty('tabName', $this->translate('TXT_PROPERTIES'));
}
else {
$fieldInfo->addProperty('tabName', $fieldInfo->getPropertyValue('tabName'));
}
$dom_record->appendChild($this->createField($fieldName, $fieldInfo, $fieldValue));
}
}
$dom_recordSet->setAttribute('empty', 'empty');
$dom_recordSet->appendChild($dom_record);
}
}
}