示例#1
0
 /**
  * Save data.
  *
  * @param array $data Data.
  * @return bool|mixed
  *
  * @throws SystemException 'ERR_VALIDATE_FORM'
  */
 protected function saveData($data)
 {
     $result = false;
     //создаем объект описания данных
     $dataDescriptionObject = new DataDescription();
     //получаем описание полей для метода
     $configDataDescription = $this->getConfig()->getStateConfig($this->getPreviousState());
     //если в конфиге есть описание полей для метода - загружаем их
     if (isset($configDataDescription->fields)) {
         $dataDescriptionObject->loadXML($configDataDescription->fields);
     }
     //Создаем объект описания данных взятых из БД
     $DBDataDescription = new DataDescription();
     //Загружаем в него инфу о колонках
     $DBDataDescription->load($this->loadDataDescription());
     $this->setDataDescription($dataDescriptionObject->intersect($DBDataDescription));
     $dataObject = new Data();
     $dataObject->load($data);
     $this->setData($dataObject);
     //Создаем сейвер
     $saver = new Saver();
     //Устанавливаем его режим
     $saver->setMode(self::COMPONENT_TYPE_FORM_ADD);
     $saver->setDataDescription($this->getDataDescription());
     $saver->setData($this->getData());
     if ($saver->validate() === true) {
         $saver->setFilter($this->getFilter());
         $saver->save();
         $result = $saver->getResult();
     } else {
         //выдвигается пустой exception который перехватывается в методе save
         throw new SystemException('ERR_VALIDATE_FORM', SystemException::ERR_WARNING, $saver->getErrors());
     }
     return $result;
 }
示例#2
0
 protected function main()
 {
     $id = !($id = $this->getParam('id')) ? $this->document->getID() : $id;
     $this->setBuilder(new SimpleBuilder());
     $dd = new DataDescription();
     if ($this->getConfig()->getCurrentStateConfig() && $this->getConfig()->getCurrentStateConfig()->fields) {
         $dd->loadXML($this->getConfig()->getCurrentStateConfig()->fields);
     } else {
         $dd->load(['Id' => ['type' => FieldDescription::FIELD_TYPE_INT], 'Name' => ['type' => FieldDescription::FIELD_TYPE_STRING], 'Title' => ['type' => FieldDescription::FIELD_TYPE_STRING], 'HtmlTitle' => ['type' => FieldDescription::FIELD_TYPE_STRING], 'DescriptionRtf' => ['type' => FieldDescription::FIELD_TYPE_HTML_BLOCK]]);
     }
     $fd = new FieldDescription('Url');
     $fd->setType(FieldDescription::FIELD_TYPE_STRING);
     $dd->addFieldDescription($fd);
     $info = E()->getMap()->getDocumentInfo($id);
     $d = new Data();
     $info['Id'] = $id;
     $info['Url'] = E()->getMap()->getURLByID($id);
     $d->load([$info]);
     $this->setDataDescription($dd);
     $this->setData($d);
     $m = new AttachmentManager($this->getDataDescription(), $this->getData(), 'share_sitemap', true);
     $m->createFieldDescription();
     $m->createField('smap_id', false, $id);
     $this->addToolbar($this->loadToolbar());
     $this->js = $this->buildJS();
 }
示例#3
0
 /**
  * Get data description.
  *
  * @return DataDescription
  */
 public function getDataDescription()
 {
     $result = new DataDescription();
     $result->load(array('field_id' => array('nullable' => false, 'length' => 10, 'default' => '', 'key' => true, 'type' => FieldDescription::FIELD_TYPE_INT, 'index' => 'PRI', 'tableName' => 'table_name'), 'lang_id' => array('nullable' => false, 'length' => 10, 'default' => '', 'key' => false, 'type' => FieldDescription::FIELD_TYPE_INT, 'index' => 'PRI', 'tableName' => 'table_name', 'languageID' => true), 'field_name' => array('nullable' => false, 'length' => 255, 'default' => '', 'key' => false, 'type' => FieldDescription::FIELD_TYPE_STRING, 'index' => false, 'tableName' => 'share_lang_tags_translation', 'isMultilanguage' => true), 'field_type' => array('nullable' => false, 'length' => 255, 'default' => '', 'key' => false, 'type' => FieldDescription::FIELD_TYPE_HIDDEN, 'index' => true, 'tableName' => 'table_name'), 'field_type_real' => array('nullable' => false, 'length' => 255, 'default' => '', 'key' => false, 'type' => FieldDescription::FIELD_TYPE_STRING, 'index' => true), 'field_is_nullable' => array('nullable' => false, 'length' => 1, 'default' => '', 'key' => false, 'type' => FieldDescription::FIELD_TYPE_BOOL, 'index' => false, 'tableName' => 'table_name')));
     $f = $result->getFieldDescriptionByName('field_type');
     $f->setType(FieldDescription::FIELD_TYPE_SELECT);
     $f->loadAvailableValues(array(array('key' => FieldDescription::FIELD_TYPE_STRING, 'value' => $this->translate('FIELD_TYPE_STRING')), array('key' => FieldDescription::FIELD_TYPE_EMAIL, 'value' => $this->translate('FIELD_TYPE_EMAIL')), array('key' => FieldDescription::FIELD_TYPE_PHONE, 'value' => $this->translate('FIELD_TYPE_PHONE')), array('key' => FieldDescription::FIELD_TYPE_BOOL, 'value' => $this->translate('FIELD_TYPE_BOOL')), array('key' => FieldDescription::FIELD_TYPE_TEXT, 'value' => $this->translate('FIELD_TYPE_TEXT')), array('key' => FieldDescription::FIELD_TYPE_MULTI, 'value' => $this->translate('FIELD_TYPE_MULTI')), array('key' => FieldDescription::FIELD_TYPE_SELECT, 'value' => $this->translate('FIELD_TYPE_SELECT')), array('key' => FieldDescription::FIELD_TYPE_DATE, 'value' => $this->translate('FIELD_TYPE_DATE')), array('key' => FieldDescription::FIELD_TYPE_DATETIME, 'value' => $this->translate('FIELD_TYPE_DATETIME')), array('key' => FieldDescription::FIELD_TYPE_FILE, 'value' => $this->translate('FIELD_TYPE_FILE')), array('key' => FieldDescription::FIELD_TYPE_INFO, 'value' => $this->translate('FIELD_TYPE_INFO'))), 'key', 'value');
     return $result;
 }
示例#4
0
 /**
  * Edit ad.
  * Modify input DataDescription argument by adding to it an information about ad.
  *
  * @param Data $d Data.
  * @param DataDescription $dd Data description.
  */
 public function edit(Data $d, DataDescription $dd)
 {
     $fds = $this->dbh->getColumnsInfo(self::TABLE_NAME);
     unset($fds['smap_id']);
     $fds['ad_id']['key'] = false;
     foreach ($fds as $key => $value) {
         $fds[$key]['tabName'] = 'TXT_ADS';
     }
     $dd->load($fds);
     $data = $this->dbh->select(self::TABLE_NAME, array_keys($fds), array('smap_id' => $d->getFieldByName('smap_id')->getRowData(0)));
     if (is_array($data)) {
         //Тут как всегда проблема с загрузкой значений в мультиязычный билдер
         foreach ($data[0] as $fieldName => $fieldData) {
             $f = new Field($fieldName);
             for ($i = 0, $l = sizeof(E()->getLanguage()->getLanguages()); $i < $l; $i++) {
                 $f->setRowData($i, $fieldData);
             }
             $d->addField($f);
         }
     }
 }
示例#5
0
 private function buildGroups(Field $field)
 {
     $builder = new SimpleBuilder();
     $data = new Data();
     $dd = new DataDescription();
     $dd->load(['id' => ['type' => FieldDescription::FIELD_TYPE_INT, 'key' => true], 'link' => ['type' => FieldDescription::FIELD_TYPE_STRING], 'title' => ['type' => FieldDescription::FIELD_TYPE_STRING], 'text' => ['type' => FieldDescription::FIELD_TYPE_HTML_BLOCK]]);
     $builder->setDataDescription($dd);
     foreach ($field as $key => $id) {
         if ($d = $this->dbh->select('SELECT t.top_id as id, top_name as `title`, top_link as link,top_text_rtf as `text`  FROM apps_tops t LEFT JOIN apps_tops_translation tt ON (tt.top_id=t.top_id) AND (lang_id=%s) WHERE (t.tg_id =%s) AND top_is_active ORDER BY top_order_num', $this->document->getLang(), $id)) {
             $data->load($d);
             $builder->setData($data);
             $am = new AttachmentManager($dd, $data, 'apps_tops');
             $am->createFieldDescription();
             $am->createField('top_id', false, $data->getFieldByName('id')->getData());
             $builder->build();
             $field->setRowData($key, $builder->getResult());
         } else {
             $field->setRowData($key, null);
         }
     }
 }
 protected function saveData()
 {
     $result = false;
     //если в POST не пустое значение значение первичного ключа - значит мы находимся в режиме редактирования
     if (isset($_POST[$this->getTableName()][$this->getPK()]) && !empty($_POST[$this->getTableName()][$this->getPK()])) {
         $mode = self::COMPONENT_TYPE_FORM_ALTER;
         $this->setFilter([$this->getPK() => $_POST[$this->getTableName()][$this->getPK()]]);
     } else {
         $mode = self::COMPONENT_TYPE_FORM_ADD;
     }
     //создаем объект описания данных
     $dataDescriptionObject = new DataDescription();
     if (!method_exists($this, $this->getPreviousState())) {
         throw new SystemException('ERR_NO_ACTION', SystemException::ERR_CRITICAL);
     }
     //получаем описание полей для метода
     $configDataDescription = $this->getConfig()->getStateConfig($this->getPreviousState());
     //если в конфиге есть описание полей для метода - загружаем их
     if (isset($configDataDescription->fields)) {
         $dataDescriptionObject->loadXML($configDataDescription->fields);
     }
     //Создаем объект описания данных взятых из БД
     $DBDataDescription = new DataDescription();
     //Загружаем в него инфу о колонках
     $DBDataDescription->load($this->loadDataDescription());
     $this->setDataDescription($dataDescriptionObject->intersect($DBDataDescription));
     //Поле с порядком следования убираем из списка
     if (($col = $this->getOrderColumn()) && ($field = $this->getDataDescription()->getFieldDescriptionByName($col))) {
         $this->getDataDescription()->removeFieldDescription($field);
     }
     $dataObject = new Data();
     $dataObject->load($this->loadData());
     $this->setData($dataObject);
     //Создаем сейвер
     $saver = $this->getSaver();
     //Устанавливаем его режим
     $saver->setMode($mode);
     $saver->setDataDescription($this->getDataDescription());
     $saver->setData($this->getData());
     if ($saver->validate() === true) {
         $saver->setFilter($this->getFilter());
         $saver->save();
         $result = $saver->getResult();
     } else {
         //выдвигается exception который перехватывается в методе save
         throw new SystemException('ERR_VALIDATE_FORM', SystemException::ERR_WARNING, $this->saver->getErrors());
     }
     //Если у нас режим вставки и определена колонка для порядка следования,
     // изменяем порядок следования
     if (($orderColumn = $this->getOrderColumn()) && $mode == self::COMPONENT_TYPE_FORM_ADD) {
         $linkedID = $this->getParam('linkedID');
         $pk = $this->getParam('pk');
         if ($linkedID) {
             $new_order_num = $this->dbh->getScalar('SELECT max(' . $orderColumn . ') as max_order_num
                 FROM ' . $this->getTableName() . ' WHERE `' . $pk . '` = %s', $linkedID);
         } else {
             $new_order_num = $this->dbh->getScalar('SELECT max(' . $orderColumn . ') as max_order_num
                 FROM ' . $this->getTableName() . ' WHERE `' . $pk . '` IS NULL AND session_id = %s ', session_id());
         }
         $new_order_num = !$new_order_num ? 1 : $new_order_num + 1;
         $this->addFilterCondition([$this->getPK() . '=' . $result]);
         $request = 'UPDATE ' . $this->getTableName() . ' SET ' . $orderColumn . ' = %s ' . $this->dbh->buildWhereCondition($this->getFilter());
         $this->dbh->modify($request, $new_order_num);
     }
     return $result;
 }
示例#7
0
 /**
  * @copydoc DataSet::prepare
  */
 protected function prepare()
 {
     $data = new Data();
     $dataDescription = new DataDescription();
     $dataDescription->load(['vote_question_id' => ['key' => true, 'nullable' => false, 'type' => FieldDescription::FIELD_TYPE_INT, 'length' => 10, 'index' => 'PRI'], 'vote_question_title' => ['key' => false, 'nullable' => false, 'type' => FieldDescription::FIELD_TYPE_STRING, 'length' => 255, 'index' => false]]);
     $this->setData($data);
     $this->setDataDescription($dataDescription);
     E()->getController()->getTransformer()->setFileName('../../../../core/modules/apps/transformers/single_vote.xslt');
     $this->setBuilder($this->createBuilder());
 }
示例#8
0
 /**
  * Save data.
  * @return mixed
  * @throws SystemException 'ERR_NO_ACTION'
  * @throws SystemException 'ERR_VALIDATE_FORM'
  */
 protected function saveData()
 {
     $result = false;
     //если в POST не пустое значение значение первичного ключа - значит мы находимся в режиме редактирования
     if (isset($_POST[$this->getTableName()][$this->getPK()]) && !empty($_POST[$this->getTableName()][$this->getPK()])) {
         $mode = self::COMPONENT_TYPE_FORM_ALTER;
         $this->setFilter([$this->getPK() => $_POST[$this->getTableName()][$this->getPK()]]);
     } else {
         $mode = self::COMPONENT_TYPE_FORM_ADD;
     }
     //создаем объект описания данных
     $dataDescriptionObject = new DataDescription();
     if (!method_exists($this, $this->getPreviousState())) {
         throw new SystemException('ERR_NO_ACTION', SystemException::ERR_CRITICAL);
     }
     //получаем описание полей для метода
     $configDataDescription = $this->getConfig()->getStateConfig($this->getPreviousState());
     //если в конфиге есть описание полей для метода - загружаем их
     if (isset($configDataDescription->fields)) {
         $dataDescriptionObject->loadXML($configDataDescription->fields);
     }
     //Создаем объект описания данных взятых из БД
     $DBDataDescription = new DataDescription();
     //Загружаем в него инфу о колонках
     $DBDataDescription->load($this->loadDataDescription());
     $this->setDataDescription($dataDescriptionObject->intersect($DBDataDescription));
     //Поле с порядком следования убираем из списка
     /**
      * @todo  Надо бы это как то переделать, потому что разбросано получилось
      * часть кода относящаяся к обработке колонки с нумерацией здесь, часть
      * @see Grid::createDataDescription
      */
     if (($col = $this->getOrderColumn()) && ($field = $this->getDataDescription()->getFieldDescriptionByName($col))) {
         $this->getDataDescription()->removeFieldDescription($field);
     }
     $dataObject = new Data();
     $dataObject->load($this->loadData());
     $this->setData($dataObject);
     //Создаем сейвер
     $saver = $this->getSaver();
     //Устанавливаем его режим
     $saver->setMode($mode);
     $saver->setDataDescription($this->getDataDescription());
     $saver->setData($this->getData());
     if ($saver->validate() === true) {
         $saver->setFilter($this->getFilter());
         $saver->save();
         $result = $saver->getResult();
     } else {
         //выдвигается exception который перехватывается в методе save
         throw new SystemException('ERR_VALIDATE_FORM', SystemException::ERR_WARNING, $this->saver->getErrors());
     }
     //Если у нас режим вставки и определена колонка для порядка следования, изменяем порядок следования
     if (($orderColumn = $this->getOrderColumn()) && $mode == self::COMPONENT_TYPE_FORM_ADD) {
         $this->addFilterCondition([$this->getPK() . '!=' . $result]);
         $request = 'UPDATE ' . $this->getTableName() . ' SET ' . $orderColumn . '=' . $orderColumn . '+1 ' . $this->dbh->buildWhereCondition($this->getFilter());
         $this->dbh->modify($request);
     }
     return $result;
 }
示例#9
0
 /**
  * Create data description.
  *
  * @return DataDescription
  *
  * @throws SystemException 'ERR_DEV_LOAD_DATA_DESCR_IS_FUNCTION'
  */
 protected function createDataDescription()
 {
     // описание данных из конфигурации
     $configDataDescriptionObject = new DataDescription();
     if ($this->getConfig()->getCurrentStateConfig()) {
         $configDataDescriptionObject->loadXML($this->getConfig()->getCurrentStateConfig()->fields);
     }
     // внешнее описание данных
     $externalDataDescription = $this->loadDataDescription();
     if (is_null($externalDataDescription)) {
         throw new SystemException('ERR_DEV_LOAD_DATA_DESCR_IS_FUNCTION', SystemException::ERR_DEVELOPER);
     }
     // если существует внешнее описание данных - пересекаем с описанием из конфиг
     if ($externalDataDescription) {
         $externalDataDescriptionObject = new DataDescription();
         $externalDataDescriptionObject->load($externalDataDescription);
         $configDataDescriptionObject = $configDataDescriptionObject->intersect($externalDataDescriptionObject);
     }
     return $configDataDescriptionObject;
 }
示例#10
0
 /**
  * Save data.
  *
  * @param array $data Data.
  * @return mixed
  *
  * @throws SystemException 'ERR_VALIDATE_FORM'
  */
 protected function saveData(&$data)
 {
     //Обрабатываем аплоадсы
     $result = false;
     if (isset($_FILES) && !empty($_FILES)) {
         list($dbName, $tName) = QAL::getFQTableName($this->getTableName(), true);
         if (isset($_FILES[$phpTableName = $dbName . '_' . $tName])) {
             $fileData = [];
             //Переворачиваем пришедший массив в удобный для нас вид
             foreach ($_FILES[$phpTableName] as $fParam => $fileInfo) {
                 foreach ($fileInfo as $fName => $val) {
                     $fileData[$fName][$fParam] = $val;
                 }
             }
             $uploader = new FileUploader();
             foreach ($fileData as $fieldName => $fileInfo) {
                 //Завантажувати лише якщо файл дійсно завантажили
                 if (!empty($fileInfo['name']) && $fileInfo['size'] > 0) {
                     $uploader->setFile($fileInfo);
                     $uploader->upload('uploads/forms');
                     $data[$this->getTableName()][$fieldName] = $uploader->getFileObjectName();
                     $uploader->cleanUp();
                 }
             }
         }
     }
     //создаем объект описания данных
     $dataDescriptionObject = new DataDescription();
     //получаем описание полей для метода
     $configDataDescription = $this->getConfig()->getStateConfig($this->getPreviousState());
     //если в конфиге есть описание полей для метода - загружаем их
     if (isset($configDataDescription->fields)) {
         $dataDescriptionObject->loadXML($configDataDescription->fields);
     }
     //Создаем объект описания данных взятых из БД
     $DBDataDescription = new DataDescription();
     //Загружаем в него инфу о колонках
     $DBDataDescription->load($this->loadDataDescription());
     $this->setDataDescription($dataDescriptionObject->intersect($DBDataDescription));
     $this->getDataDescription()->getFieldDescriptionByName('form_date')->removeProperty('pattern');
     $dataObject = new Data();
     foreach ($data[$this->getTableName()] as $key => $value) {
         if (is_scalar($value)) {
             $data[$this->getTableName()][$key] = strip_tags($value);
         }
     }
     $dataObject->load($data);
     $this->setData($dataObject);
     //Создаем сейвер
     $this->saver = new Saver();
     //Устанавливаем его режим
     $this->saver->setMode(self::COMPONENT_TYPE_FORM_ADD);
     $this->saver->setDataDescription($this->getDataDescription());
     $this->saver->setData($this->getData());
     if ($this->saver->validate() === true) {
         $this->saver->setFilter($this->getFilter());
         $this->saver->save();
         $result = $this->saver->getResult();
     } else {
         //выдвигается пустой exception который перехватывается в методе save
         //выдвигается exception который перехватывается в методе save
         throw new SystemException('ERR_VALIDATE_FORM', SystemException::ERR_WARNING, $this->saver->getErrors());
     }
     return $result;
 }