/** * 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; }
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(); }
/** * 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; }
/** * 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); } } }
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; }
/** * @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()); }
/** * 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; }
/** * 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; }
/** * 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; }