Exemplo n.º 1
0
 /**
  * Save text.
  */
 protected function saveText()
 {
     $result = '';
     if ($this->getParam('editable') && isset($_POST['ID']) && isset($_POST['num']) && isset($_POST['data'])) {
         $result = DataSet::cleanupHTML($_POST['data']);
         $langID = E()->getLanguage()->getCurrent();
         $entityId = (int) $_POST['ID'];
         $field = $_POST['num'];
         $this->dbh->modify(gears\QAL::UPDATE, $this->getTranslationTableName(), [$field => $result], ['lang_id' => $langID, $this->getPK() => $entityId]);
     }
     $this->response->setHeader('Content-Type', 'application/xml; charset=utf-8');
     $this->response->write($result);
     $this->response->commit();
 }
Exemplo n.º 2
0
 /**
  * Save data.
  */
 public function save()
 {
     //Основные данные для сохранения
     $data = [];
     //Данные для сохранения в связанные таблицы или в mysql set
     //Начальное значение false, поскольку пустой массив будет говорить о том что поле существует. но ничего не выбрано
     $m2mData = false;
     $m2mFDs = $this->getDataDescription()->getFieldDescriptionsByType(FieldDescription::FIELD_TYPE_MULTI);
     if (!empty($m2mFDs)) {
         foreach ($m2mFDs as $fieldInfo) {
             if (is_null($fieldInfo->getPropertyValue('customField'))) {
                 //@todo На хера оно здесь?
                 //с 260 тот же самый код - пока не убираю но нужно разобраться
                 if (!in_array($fieldInfo->getSystemType(), [QAL::COLTYPE_ENUM, QAL::COLTYPE_SET])) {
                     //Определяем имя m2m таблицы
                     list($m2mTableName, $m2mPKName) = array_values($fieldInfo->getPropertyValue('key'));
                     //Определяем имя поля
                     $m2mInfo = $this->dbh->getColumnsInfo($m2mTableName);
                     unset($m2mInfo[$m2mPKName]);
                     $m2mData[$m2mTableName]['pk'] = $m2mPKName;
                 }
             }
         }
     }
     for ($i = 0; $i < $this->getData()->getRowCount(); $i++) {
         foreach ($this->getDataDescription() as $fieldName => $fieldInfo) {
             // исключаем поля, которым нет соответствия в БД
             if (is_null($fieldInfo->getPropertyValue('customField')) && $this->getData()->getFieldByName($fieldName)) {
                 $fieldValue = $this->getData()->getFieldByName($fieldName)->getRowData($i);
                 if ($fieldInfo->getType() == FieldDescription::FIELD_TYPE_HTML_BLOCK) {
                     $fieldValue = DataSet::cleanupHTML($fieldValue);
                 }
                 // сохраняем поля из основной таблицы
                 if ($fieldInfo->isMultilanguage() == false && $fieldInfo->getPropertyValue('key') !== true && $fieldInfo->getPropertyValue('languageID') == false) {
                     switch ($fieldInfo->getType()) {
                         case FieldDescription::FIELD_TYPE_FLOAT:
                             $fieldValue = str_replace(',', '.', $fieldValue);
                             break;
                         case FieldDescription::FIELD_TYPE_MULTI:
                             /**
                              * @todo необходимо оптимизировать алгоритм, а то произошло дублирование кода
                              *
                              */
                             //many 2 many relations stored in tables
                             if (!in_array($fieldInfo->getSystemType(), [QAL::COLTYPE_ENUM, QAL::COLTYPE_SET])) {
                                 $m2mValues = $fieldValue;
                                 //Поскольку мультиполе реально фейковое
                                 //записываем в него NULL
                                 $fieldValue = '';
                                 //Определяем имя m2m таблицы
                                 list($m2mTableName, $m2mPKName) = array_values($fieldInfo->getPropertyValue('key'));
                                 //Определяем имя поля
                                 $m2mInfo = $this->dbh->getColumnsInfo($m2mTableName);
                                 unset($m2mInfo[$m2mPKName]);
                                 foreach ($m2mValues as $val) {
                                     $m2mData[$m2mTableName]['pk'] = $m2mPKName;
                                     $m2mData[$m2mTableName][key($m2mInfo)][] = $val;
                                 }
                                 unset($m2mValues, $m2mPKName, $m2mInfo, $m2mTableName);
                             } else {
                                 $fieldValue = implode(',', $fieldValue);
                             }
                             break;
                     }
                     $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');
                     // имя основной таблицы
                 }
             }
         }
     }
     if ($this->getMode() == QAL::INSERT) {
         $data[$mainTableName] = !isset($data[$mainTableName]) ? [] : $data[$mainTableName];
         $id = $this->dbh->modify(QAL::INSERT, $mainTableName, $data[$mainTableName]);
         unset($data[$mainTableName]);
         foreach ($data as $tableName => $langRow) {
             foreach ($langRow as $row) {
                 $row[$pkName] = $id;
                 /*$result = */
                 $this->dbh->modify(QAL::INSERT, $tableName, $row);
             }
         }
         $result = $id;
     } else {
         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) {
                 try {
                     /*$result = */
                     $this->dbh->modify(QAL::INSERT, $tableName, array_merge($row, $this->getFilter()));
                 } catch (\Exception $e) {
                     /*$result = */
                     $this->dbh->modify(QAL::UPDATE, $tableName, $row, array_merge($this->getFilter(), ['lang_id' => $langID]));
                 }
             }
         }
         if ($pkName) {
             $result = $this->getData()->getFieldByName($pkName)->getRowData(0);
         } else {
             $result = true;
         }
     }
     if (is_array($m2mData) && is_numeric($result)) {
         foreach ($m2mData as $tableName => $m2mInfo) {
             $this->dbh->modify(QAL::DELETE, $tableName, NULL, [$m2mInfo['pk'] => $result]);
         }
         foreach ($m2mData as $tableName => $m2mInfo) {
             $pk = $m2mInfo['pk'];
             unset($m2mInfo['pk']);
             if ($m2mInfo) {
                 foreach (current($m2mInfo) as $fieldValue) {
                     $this->dbh->modify(QAL::INSERT_IGNORE, $tableName, [key($m2mInfo) => $fieldValue, $pk => $result]);
                 }
             }
         }
     }
     return $this->result = $result;
 }
Exemplo n.º 3
0
 /**
  * Save data.
  */
 protected function save()
 {
     $this->dbh->beginTransaction();
     try {
         if (!isset($_POST['data']) && !isset($_POST['num'])) {
             throw new SystemException('ERR_DEV_NO_DATA', SystemException::ERR_DEVELOPER);
         }
         $langID = $this->document->getLang();
         $docID = isset($_POST['ID']) ? $_POST['ID'] : '';
         //пытаемся определить есть ли у нас запись о содержимом блока в основной таблице
         $tbID = $this->getTextBlockID($docID, $_POST['num']);
         $result = DataSet::cleanupHTML($_POST['data']);
         //$result = $_POST['data'];
         if (trim($result)) {
             if (!$tbID) {
                 $tbID = $this->dbh->modify(QAL::INSERT, $this->tableName, array('smap_id' => $docID, 'tb_num' => $_POST['num']));
             }
             $tableName = $this->tableName . '_translation';
             $res = $this->dbh->select($tableName, array('tb_id'), array('tb_id' => $tbID, 'lang_id' => $langID));
             //если есть запись в таблице переводов - апдейтим
             if (!empty($res)) {
                 $this->dbh->modify(QAL::UPDATE, $tableName, array('tb_content' => $result), array('tb_id' => $tbID, 'lang_id' => $langID));
             } else {
                 //если нет - вставляем
                 $this->dbh->modify(QAL::INSERT, $tableName, array('tb_content' => $result, 'tb_id' => $tbID, 'lang_id' => $langID));
             }
         } elseif ($tbID) {
             $this->dbh->modify(QAL::DELETE, $this->tableName, null, array('tb_id' => $tbID));
         }
         $this->dbh->commit();
     } catch (\Exception $e) {
         $this->dbh->rollback();
         $result = $e->getMessage();
     }
     $this->response->setHeader('Content-Type', 'application/xml; charset=utf-8');
     $this->response->write($result);
     $this->response->commit();
 }