<?php
/**
* ÐлаÑÑ JSONBuilder
*
* @package energine
* @subpackage core
* @author dr.Pavka
* @copyright ColoCall 2006
* @version $Id: JSONBuilder.class.php,v 1.7 2007/12/17 14:16:03 pavka Exp $
*/
//require_once('core/framework/Builder.class.php');
/**
* ÐоÑÑÑоиÑÐµÐ»Ñ Ð´Ð°Ð½Ð½ÑÑ
в ÑоÑÐ¼Ð°Ñ JSON (JavaScript Object Notation).
*
* @package energine
* @subpackage core
*/
class JSONBuilder extends Builder {
/**
* ÐиÑÑалка
*
* @var Pager
* @access private
*/
private $pager = null;
/**
* @access private
* @var array ÑпиÑок оÑибок
* @todo заÑем ÑÑо!?
*/
private $errors = array();
/**
* ÐонÑÑÑÑкÑÐ¾Ñ ÐºÐ»Ð°ÑÑа.
*
* @access public
* @return void
*/
public function __construct() {
parent::__construct();
}
/**
* Ð¡Ð¾Ð·Ð´Ð°ÐµÑ ÑезÑлÑÑиÑÑÑÑий JSON-обÑекÑ.
*
* @access public
* @return bool
*/
public function build() {
$result = false;
if ($this->dataDescription == false) {
throw new SystemException('ERR_DEV_NO_DATA_DESCRIPTION', SystemException::ERR_DEVELOPER);
}
$fields = $this->dataDescription->getFieldDescriptions();
foreach ($fields as $fieldName => $fieldInfo) {
$result['meta'][$fieldName] = array(
'type' => $fieldInfo->getType(),
'key' => $fieldInfo->getPropertyValue('key')&&$fieldInfo->getPropertyValue('index')=='PRI'? true: false,
'visible' => $fieldInfo->getPropertyValue('key')&&$fieldInfo->getPropertyValue('index')=='PRI' ? false : true,
'name' => $fieldInfo->getPropertyValue('tableName')."[$fieldName]",
'rights' => $fieldInfo->getRights(),
'field' => $fieldName
);
}
if ($this->data) {
for ($i = 0; $i < $this->data->getRowCount(); $i++) {
foreach ($fields as $fieldName => $fieldInfo) {
$fieldType = $fieldInfo->getType();
$fieldValue = $this->data->getFieldByName($fieldName)->getRowData($i);
switch ($fieldType) {
case FieldDescription::FIELD_TYPE_DATETIME:
case FieldDescription::FIELD_TYPE_DATE:
if (!empty($fieldValue)) {
$fieldValue = strftime($fieldInfo->getPropertyValue('outputFormat'), $fieldValue);
}
break;
case FieldDescription::FIELD_TYPE_SELECT:
$value = $fieldInfo->getAvailableValues();
if (isset($value[$fieldValue])) {
$fieldValue = $value[$fieldValue]['value'];
}
break;
default: // not used
}
if (is_null($fieldValue)) {
$fieldValue = '';
}
$result['data'][$i][$fieldName] = $fieldValue;
}
}
}
$result['result'] = true;
$result['mode'] = 'select';
$this->result = $result;
return true;
}
/**
* ÐозвÑаÑÐ°ÐµÑ ÑезÑлÑÑÐ°Ñ ÑабоÑÑ Ð¿Ð¾ÑÑÑоиÑелÑ.
*
* @access public
* @return string
*/
public function getResult() {
$result = $this->result;
if (!is_null($this->pager)) {
$result['pager'] = array(
'current' => $this->pager->getCurrentPage(),
'count' => $this->pager->getNumPages()
);
}
$result = json_encode($result);
return $result;
}
/**
* ÐозвÑаÑÐ°ÐµÑ ÑпиÑок оÑибок.
*
* @return string
* @access public
* @todo заÑем ÑÑо!?
*/
public function getErrors() {
return json_encode($this->errors);
}
/**
* УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ ÐºÐ¾Ð¾Ð»Ð¸ÑеÑÑво ÑÑÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð»Ð¸ÑÑлки
*
* @param int
* @return void
* @access public
*/
public function setPager($pager) {
$this->pager = $pager;
}
}