Source for file Saver.class.php
Documentation is available at Saver.class.php
* @copyright Energine 2006
//require_once('core/framework/DBWorker.class.php');
//require_once('core/framework/DataDescription.class.php');
//require_once('core/framework/Data.class.php');
* Сохранитель данных в БД.
* @var array имена полей, в которых произошли ошибки
* @var mixed условие SQL-запроса сохранения
* @var string режим сохранения
private $mode = QAL::INSERT;
* @var DataDescription описание данных
* @var mixed результат сохранения
* Устанавливает описание данных.
* @param DataDescription $dataDescription
* Возвращает описание данных.
* @return DataDescription
public function setData(Data $data) {
* Устанавливает режим сохранения данных.
* Возвращает режим сохранения данных.
* Возвращает условие SQL-запроса сохранения.
* Устанавливает условие SQL-запроса сохранения.
* Валидация сохраняемых данных.
* @todo возможность передачи в объект callback функции для пользовательской валидации
$fieldName == 'lang_id' ||
!is_null($fieldDescription->getPropertyValue('customField'))
|| $fieldDescription->getPropertyValue('nullable')
// если нет данных в POST-запросе для какого-либо из полей
elseif ($fieldData == false && $fieldName != 'lang_id') {
for ($i = 0; $i < $fieldData->getRowCount(); $i++ ) {
if (!$fieldDescription->validate($fieldData->getRowData($i))) {
* Возвращает имена полей, в которых произошли ошибки.
* Добавляет имя поле в набор ошибочных имён полей.
* @param string $fieldName
// исключаем поля, которым нет соответствия в БД
// сохраняем поля из основной таблицы
if ($fieldInfo->isMultilanguage() == false && $fieldInfo->getPropertyValue('key') !== true && $fieldInfo->getPropertyValue('languageID') == false) {
//Для типа флоат меняем запятые на точки
$data[$fieldInfo->getPropertyValue('tableName')][$fieldName] = $fieldValue;
elseif ($fieldInfo->isMultilanguage() || $fieldInfo->getPropertyValue('languageID')) {
$data[$fieldInfo->getPropertyValue('tableName')][$this->data->getFieldByName('lang_id')->getRowData($i)][$fieldName] = $fieldValue;
elseif ($fieldInfo->getPropertyValue('key') === true) {
$pkName = $fieldName; // имя первичного ключа
$mainTableName = $fieldInfo->getPropertyValue('tableName'); // имя основной таблицы
$data[$mainTableName] = (!isset ($data[$mainTableName]))? array(): $data[$mainTableName];
$id = $this->dbh->modify(QAL::INSERT, $mainTableName, $data[$mainTableName]);
unset ($data[$mainTableName]);
foreach ($data as $tableName => $langRow) {
foreach ($langRow as $row) {
$result = $this->dbh->modify(QAL::INSERT, $tableName, $row);
if (isset ($data[$mainTableName])) {
$result = $this->dbh->modify(QAL::UPDATE, $mainTableName, $data[$mainTableName], $this->getFilter());
unset ($data[$mainTableName]);
foreach ($data as $tableName => $langRow) {
foreach ($langRow as $langID => $row) {
* Возвращает результат сохранения данных.
|