/** * Информация о разделе * * @return void */ public function viewAction() { if (isset($this->_params['categoryid']) && ($CategoryInfo = $this->Categories->getCategoryInfo($this->_params['categoryid']))) { $CategoryInfo['acl'] = array('mvc' => $this->_usersession->UserData['acl']['mvc']['control']['categories'], 'category' => $this->_usersession->UserData['acl']['categories'][$CategoryInfo['categoryid']]); $this->view->assign("CategoryInfo", $CategoryInfo); $this->view->assign("Header", $CategoryInfo['categoryname']); $MoveForm = new Phorm_Form('forms/control/categories.xml', 'move'); $MoveForm->setAction($this->view->siteUrl() . '/control/categories/move/categoryid/' . $CategoryInfo['categoryid']); $this->view->assign('MoveForm', $MoveForm); if (!empty($CategoryInfo['moduleid'])) { $Resource = new Phorm_Resource($CategoryInfo['moduleid']); $options = $Resource->getGridOptions('category'); $options['url'] = '/control/resource/index/moduleid/' . $CategoryInfo['moduleid'] . '/categoryid/' . $CategoryInfo['categoryid'] . '/section/category/'; $this->view->assign('ResourceDataTable', $this->view->DataGrid('ResourceDataTable', $options)); } /** * Обновление дерева разделов */ if (isset($this->_params['tree']) && $this->_params['tree'] == 'reload') { $js = 'window.parent.trees.categories.reload(\'' . $this->view->siteUrl() . '/control/?categoryid=' . $CategoryInfo['categoryid'] . '\');'; $this->_boot->jquery->addOnload($js); } } else { // Ошибка 404... надо что-то придумать } }
/** * Определяем массив опций и дергаем родительский конструктор * * @param mixed $spec * @param array $options */ public function __construct($spec, $options = null) { $this->translate = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('Translate'); /** * Выделяем дополнительные элементы в отдельную форму и рендерим ее */ require_once 'Phorm/Form.php'; if (isset($options['elements']) && is_array($options['elements'])) { $config = array('elements' => $options['elements']); if (isset($options['paths']['prefixPath'])) { $config['prefixPath'] = array_values($options['paths']['prefixPath']); } if (isset($options['paths']['elementPrefixPath'])) { $config['elementPrefixPath'] = array_values($options['paths']['elementPrefixPath']); } /*foreach ($options as $key=>$option) { if(!in_array($key,array('elements','prefixPath','elementPrefixPath'))) { unset($options[$key]); } }*/ $form = new Phorm_Form(null, null, $config); $form->removeDecorator('Form'); $form->removeDecorator('DtDdWrapper'); $form->setElementsBelongTo($spec . '[]'); $this->renderform = $form->render() . '<div class="clear"></div>'; unset($options['elements'], $config['elements']); foreach ($form->getElements() as $element) { $element->setAttrib('id', null); } $this->form = $form; } /** * Инициализируем родительский конструктор */ parent::__construct($spec, $options); }
/** * Загрузка файлов * Метод переписан для поддержки IE8- и загрузку через iframe * * @return void */ public function uploadAction() { Zend_Controller_Action_HelperBroker::removeHelper('viewRenderer'); if (isset($this->_params['type'])) { $filetype = $this->_params['type']; foreach ($_FILES as $filename => $data) { break; } // Определяем имя элемента загружаемого файла // Получаем конфигурацию формы $config = Phorm_Config::xml('forms/control/media.xml', 'upload'); if (isset($config['elements'][$filetype]) && isset($filename)) { // Выделяем из конфигурации формы нужный тип элемента и инициализируем форму с нужным именем элемента $form = new Phorm_Form(null, null, array('elements' => array($filename => $config['elements'][$filetype]))); // Получаем объект элемента из формы $element = $form->getElement($filename); // Валидируем элемент if ($element->isValid($filename)) { // Получаем информацию о файле $fileinfo = $element->getTransferAdapter()->getFileInfo($filename); // Добавляем тип медиа-файла $fileinfo[$filename]['mediatype'] = $filetype; // Сохраняем файл в медиа-библиотеке if ($MediaInfo = $this->Media->saveUploadedFile($fileinfo[$filename])) { // Возвращаем информацию о файле как об объекте медиа-библиотеки exit(Zend_Json::encode(array($MediaInfo))); } else { // Ошибки сохранения exit(Zend_Json::encode(array(array('errors' => array_values($this->Media->_errors))))); } } else { // Ошибки валидации exit(Zend_Json::encode(array(array('errors' => array_values($form->getMessages()))))); } } else { // Ошибка в запросе типа элемента exit(Zend_Json::encode(array(array('errors' => array(array($this->_translate->_('Неверный тип запроса'))))))); } } else { // Ошибка - не указан тип элемента exit(Zend_Json::encode(array(array('errors' => array(array($this->_translate->_('Не задан тип'))))))); } }
/** * Сохраняет структуру * * @param Phorm_Form $form * @param mixed $data Дополнительные данные формы. Если передана строка, то принимается как structureid * @return array | false */ public function saveStructureForm(Phorm_Form $form, $data = null) { if (!is_null($data) && is_string($data)) { $data = array('structureid' => $data); } $data = array_merge($form->getValues(), (array) $data); $data['groups'] = join(',', $data['groups']); $data = $this->getFilteredValuesByTableCols('pw_structures', $data); $this->_db->beginTransaction(); try { // Изменение существующей записи if (isset($data['structureid'])) { $this->_db->update('pw_structures', $data, 'structureid=' . (int) $data['structureid']); // Вставка новой записи } else { $this->_db->insert('pw_structures', $data); $data['structureid'] = $this->_db->lastInsertId(); } $this->_db->commit(); return $data; } catch (Exception $e) { $this->_db->rollBack(); $this->_errors[] = $e->getMessage(); } return false; }
/** * Определяем массив опций и дергаем родительский конструктор * * @param mixed $spec * @param array $options */ public function __construct($spec, $options = null) { $this->translate = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('Translate'); /** * Получаем информацию о структуре или структурах */ if (isset($options['structures'])) { $options['structures'] = explode(',', $options['structures']); require_once 'Phorm/Structures.php'; $StructuresModel = new Phorm_Structures(); $structures = array(); $multioptions = array(); foreach ($options['structures'] as $key => $structureid) { if ($StructureInfo = $StructuresModel->getStructureFullInfo($structureid)) { $structures[$StructureInfo['structureid']] = $StructureInfo; } else { unset($options['structures'][$key]); } $multioptions[$StructureInfo['structureid']] = $StructureInfo['structurename']; $options['multioptions'] = $multioptions; } /** * Определяем шаблон формы для элементов структур */ $form_tpl = new Phorm_Form(null, null, array('elements' => $options['elements'])); /** * Создаем форму для каждой из структур */ require_once 'Phorm/Form.php'; foreach ($structures as $structure) { $form = new Phorm_Form(); $form->removeDecorator('Form'); $form->removeDecorator('DtDdWrapper'); foreach ($structure['groups'] as $group) { $form->setElementsBelongTo($spec . '[' . $structure['structureid'] . ']' . '[' . $group['groupid'] . ']'); /** * Добавляем элементы на форму * @todo Добавить обязательность заполнения */ $elements = array(); // массив элементов для добавления в DisplayGroup foreach ($group['properties'] as $property) { /** * Определяем тип используемого элемента */ $type = $property['propertytype']; $realtype = in_array($type, array('select', 'structure', 'dictionary')) && $property['ismultiple'] == 'yes' ? 'multiselect' : $type; if ($element = clone $form_tpl->getElement($realtype)) { // Устанавливаем имя и заголовок элемента $element->setLabel($property['propertyname'])->setName($property['propertyid']); // Допиливаем обычный селект if ($type == 'select' && !empty($property['propertyoptions'])) { $propertyoptions = array(); // ставим ключи массива опций в их значение foreach ($property['propertyoptions'] as $prop) { $propertyoptions[$prop] = $prop; } if ($property['ismultiple'] == 'no') { $propertyoptions = array(null => $this->translate->_('---Выберите---')) + $propertyoptions; } $element->setMultiOptions($propertyoptions); } // Допиливаем селект из другой структуры if ($type == 'structure' && $property['structureid'] > 0) { $propertyoptions = $StructuresModel->getStructureResourcesAsPairs($property['structureid']); if ($property['ismultiple'] == 'no') { $propertyoptions = array(null => $this->translate->_('---Выберите---')) + $propertyoptions; } $element->setMultiOptions($propertyoptions); } // Допиливаем селект из справочника if ($type == 'dictionary' && $property['dictionaryid'] > 0) { $DictionariesModel = new Phorm_Dictionaries(); $propertyoptions = $DictionariesModel->getEntriesListAsPairs($property['dictionaryid']); if ($property['ismultiple'] == 'no') { $propertyoptions = array(null => $this->translate->_('---Выберите---')) + $propertyoptions; } $element->setMultiOptions($propertyoptions); } $form->addElement($element); $elements[] = $property['propertyid']; } } /** * Если групп несколько, то добавляем DisplayGroup * @todo Добавить в опции возможность задавать css-классы */ if (count($structure['groups']) > 1) { $DisplayGroup = $form->addDisplayGroup($elements, 'group-' . $group['groupid'], array('legend' => $group['groupname'])); } } $this->forms[$structure['structureid']] = $form; $this->renderforms[$structure['structureid']] = $form->render(); } unset($options['elements']); } /** * Инициализируем родительский конструктор */ parent::__construct($spec, $options); }
/** * Сохраняет данные формы создания/редактирования страницы * * @param Phorm_Form $form Объект формы * @param mixed $data Дополнительные данные формы. Если передана строка, то принимается как pageid * * @return array | false */ public function savePageForm(Phorm_Form $form, $data = null) { /** * Получаем значения формы и объединяем их с массивом дополнительных данных */ if (!is_null($data) && is_string($data)) { $data = array('pageid' => $data); } $data = array_merge($form->getValues(), (array) $data); /** * Предварительный фильтр значений */ $maindata = $this->getFilteredValuesByTableCols('pw_pages', $data); $maindata['controllername'] = $this->getController(); /** * Сохранение данных */ $this->_db->beginTransaction(); try { // Изменение существующей записи if (isset($data['pageid'])) { $action = 'update'; $this->_db->update('pw_pages', $maindata, 'pageid=' . (int) $data['pageid']); // Вставка новой записи } else { $action = 'insert'; $this->_db->insert('pw_pages', $maindata); $data['pageid'] = $this->_db->lastInsertId(); } /** * Логирование */ $this->setLog($action, array('url' => '/control/page/edit/pageid/' . (int) $data['pageid'] . '/', 'name' => $data['pagename'], 'tablename' => 'pw_pages', 'identity' => (int) $data['pageid'], 'fieldname' => 'pageid')); $this->_db->commit(); return $data; } catch (Exception $e) { $this->_db->rollBack(); $this->_errors[] = $e->getMessage(); } return false; }
/** * Строит форму * * @param array $fields Массив данных о полях формы * * @return Zend_Form */ public function buildForm($fields) { $form = Phorm_Form::makeForm(); foreach ($fields as $data) { $fieldname = "field_" . $data["fieldid"]; switch ($data["fieldtype"]) { /** * Однострочное текстовое поле */ case "Text": $field = new Zend_Form_Element_Text($fieldname); // Типы валидаторов if ($data["fieldvalidators"] == "Email") { $field->addValidator("EmailAddress", true, array("messages" => array("emailAddressInvalid" => $this->_translate->_("Неверно указан email"), "emailAddressInvalidHostname" => $this->_translate->_("Неверно указан email"), "emailAddressInvalidMxRecord" => $this->_translate->_("Неверно указан email"), "emailAddressInvalidSegment" => $this->_translate->_("Неверно указан email"), "emailAddressDotAtom" => $this->_translate->_("Неверно указан email"), "emailAddressQuotedString" => $this->_translate->_("Неверно указан email"), "emailAddressInvalidLocalPart" => $this->_translate->_("Неверно указан email"), "emailAddressLengthExceeded" => $this->_translate->_("Неверно указан email"), "emailAddressInvalidFormat" => $this->_translate->_("Неверный формат")))); } elseif ($data["fieldvalidators"] == "Date") { $field->addValidator("Date", true, array("messages" => array("dateInvalid" => $this->_translate->_("Неверная дата"), "dateInvalidDate" => $this->_translate->_("Неверная дата"), "dateFalseFormat" => $this->_translate->_("Неверная дата")))); } elseif ($data["fieldvalidators"] == "Int") { $field->addValidator("Int", true, array("messages" => array("notInt" => $this->_translate->_("Значение должно быть числом"), "intInvalid" => $this->_translate->_("Значение должно быть числом")))); } elseif ($data["fieldvalidators"] == "Hostname") { $field->addValidator("Hostname", true, array("messages" => array("hostnameInvalid" => $this->_translate->_("Неверный адрес"), "hostnameIpAddressNotAllowed" => $this->_translate->_("Неверный адрес"), "hostnameUnknownTld" => $this->_translate->_("Неверный адрес"), "hostnameDashCharacter" => $this->_translate->_("Неверный адрес"), "hostnameInvalidHostnameSchema" => $this->_translate->_("Неверный адрес"), "hostnameUndecipherableTld" => $this->_translate->_("Неверный адрес"), "hostnameInvalidHostname" => $this->_translate->_("Неверный адрес"), "hostnameInvalidLocalName" => $this->_translate->_("Неверный адрес"), "hostnameLocalNameNotAllowed" => $this->_translate->_("Неверный адрес"), "hostnameCannotDecodePunycode" => $this->_translate->_("Неверный адрес")))); } // Если разрешен HTML if ($data["htmlallowed"] == "yes") { $field->addFilter("StringTrim"); } else { $field->addFilter("StripTags"); } break; /** * Многострочное текстовое поле */ /** * Многострочное текстовое поле */ case "Textarea": $field = new Zend_Form_Element_Textarea($fieldname); // Если разрешен HTML if ($data["htmlallowed"] == "yes") { $field->addFilter("StringTrim"); } else { $field->addFilter("StripTags"); } break; /** * Чекбокс */ /** * Чекбокс */ case "Checkbox": $field = new Zend_Form_Element_Checkbox($fieldname); break; /** * Радиоточка */ /** * Радиоточка */ case "Radio": $field = new Zend_Form_Element_Radio($fieldname); break; /** * Список */ /** * Список */ case "Select": $field = new Zend_Form_Element_Select($fieldname); $haystack = array(); $optionsdata = explode("\n", $data["optionsdata"]); foreach ($optionsdata as $k => $v) { $haystack[$k] = trim($v); } $field->addMultiOption("", $this->_translate->_("---Выберите---")); foreach ($haystack as $value) { $field->addMultiOption($value, $value); } $haystack[$this->_translate->_("---Выберите---")] = ""; $field->addValidator("InArray", true, array("haystack" => $haystack, "messages" => array("notInArray" => $this->_translate->_("Не выбрано ни одного значения")))); break; /** * Список с множественным выбором */ /** * Список с множественным выбором */ case "Multiselect": $field = new Zend_Form_Element_Multiselect($fieldname); $haystack = array(); $optionsdata = explode("\n", $data["optionsdata"]); foreach ($optionsdata as $k => $v) { $haystack[$k] = trim($v); } foreach ($optionsdata as $value) { $field->addMultiOption($value, $value); } $field->addValidator("InArray", true, array("haystack" => $haystack, "messages" => array("notInArray" => $this->_translate->_("Не выбрано ни одного значения")))); break; /** * Файл */ /** * Файл */ case "File": $field = new Zend_Form_Element_File($fieldname); if ($data["filestypes"] == "Images") { $field->addValidator("Extension", false, array("extension" => "png,jpg,gif,jpeg,bmp", "messages" => array("fileExtensionFalse" => $this->_translate->_("Файл '%value%' не является изображением")))); } elseif ($data["filestypes"] == "Documents") { $field->addValidator("Extension", false, array("extension" => "doc,xls,odt,docx,xlsx,pdf,txt", "messages" => array("fileExtensionFalse" => $this->_translate->_("Файл '%value%' не является документом")))); } elseif ($data["filestypes"] == "Archives") { $field->addValidator("Extension", false, array("extension" => "zip,rar,7z,gz,tgz", "messages" => array("fileExtensionFalse" => $this->_translate->_("Файл '%value%' не является файловым архивом")))); } //$field -> setDestination($this->paths["html"]."forms/files/"); $field->setValueDisabled(true); break; /** * Refferer */ /** * Refferer */ case "Refferer": $field = new Zend_Form_Element_Hidden($fieldname); if (isset($_SERVER["HTTP_REFERER"])) { $field->setValue($_SERVER["HTTP_REFERER"]); } break; /** * CAPTCHA */ /** * CAPTCHA */ case "Captcha": $captcha = Phorm_Captcha_Image::getCaptcha(); $captcha->setOptions(array("messages" => array("badCaptcha" => $this->_translate->_("Неверно указан код подтверждения"), "missingID" => $this->_translate->_("Неверный идентификатор Captcha")))); $field = new Zend_Form_Element_Captcha($fieldname, array("captcha" => $captcha)); break; default: continue; } // Если поле обязательно для заполнения if ($data["isrequired"] == "yes") { $field->setRequired(true)->addValidator("NotEmpty", true, array("messages" => array("isEmpty" => $this->_translate->_("Не заполнено поле")))); } // Устанавливаем заголовок и описание поля if ($field instanceof Zend_Form_Element_Hidden) { $field->removeDecorator("label")->removeDecorator("HtmlTag"); } else { $field->setLabel($data["fieldname"])->setDescription($data["fieldtxt"]); } $form->addElement($field); } $form->addElement(new Zend_Form_Element_Submit("Send", $this->_translate->_("Отправить"))); $form->setAttrib('enctype', 'multipart/form-data'); return $form; }
/** * Возвращает форму добавления/редактирования виджета * * @param string $section Секция xml-файла * @param array $TypeInfo Массив данных о типе виджета (для расширения формы) * @return Phorm_Form */ public function getWidgetForm($section = 'add', $TypeInfo = array()) { /** * Расширяем базовую форму формой виджета через аналогичную секцию (add или edit) */ $files = array('forms/control/widgets.xml'); if (!empty($TypeInfo)) { $files[] = 'widgets/' . $TypeInfo['template'] . '/' . $TypeInfo['context'] . '.xml'; } /** * Инициализируем объект формы */ $form = new Phorm_Form($files, $section); /** * Добавляем валидацию на тип элемента CategoriesMultiSelect */ foreach ($form->getElements() as $element) { if ($element->getType() == 'Phorm_Form_Element_CategoriesMultiSelect') { $haystack = $element->getMultiOptions(); foreach ($haystack as $key => $val) { $haystack[$key] = is_array($val) ? $val['categoryid'] : $key; } $element->addValidator("InArray", true, array("haystack" => $haystack)); continue; } } /** * Добавляем данные для элементов формы */ if (isset($form->typeid)) { $form->typeid->options = array(0 => $this->_translate->_('---Выберите---')) + $this->getWidgetsTypes(); } if (isset($form->acl)) { $form->acl->options = $this->getRolesList(); } return $form; }
/** * Редактирование группы * * @return void */ public function editgroupAction() { if (isset($this->_params['groupid']) && ($GroupInfo = $this->Structures->getGroupInfo($this->_params['groupid']))) { $form = new Phorm_Form('forms/control/structures.xml', 'editgroup'); $form->setDefaults($GroupInfo); if ($this->_request->isPost() && $form->isValid($this->_request->getPost())) { if ($this->Structures->saveGroupForm($form, $GroupInfo['groupid'])) { return $this->composeSuccessMessage('Изменения внесены', '/control/structures/groups/'); } else { $this->composeTransactionErrorMessage($this->Structures->_errors); } } $this->view->assign('Form', $form); } else { return $this->composeErrorMessage('Группа с указанным Id не найдена'); } }
/** * Возвращает форму добавления/редактирования пользователей и ролей * * @param string $section * @return Zend_Form */ public function getUserForm($section = 'add') { $form = new Phorm_Form('forms/control/users.xml', $section); /** * Добавляем справочники на элементы */ if (isset($form->timezone)) { $form->timezone->addMultioptions(array(null => $this->_translate->_('---Выберите---')) + $this->getTimezonesList()); $form->setDefault('timezone', date_default_timezone_get()); } if (isset($form->roleid)) { $form->roleid->addMultioptions(array(null => $this->_translate->_('---Выберите---')) + $this->getRolesListAsPairs()); } if (isset($form->acl_categories)) { $form->acl_categories->addMultioptions(array(null => $this->_translate->_('Без изменений')) + $this->getAccessLevelsAsPairs()); } return $form; }
/** * Сохраняет данные формы создания/редактирования раздела * * @param Phorm_Form $form Объект формы * @param mixed $data Дополнительные данные формы. Если передана строка, то принимается как categoryid * @param mixed $additionals Имя метода или массив имен для дополнительной обработки данных * Методы должны существовать в текущем классе (в т.ч. могут быть и в расширенном) * Используется для сохранения дополнительных данных разделов * Каждый из методов должен возвращать массив данных с модифицированными ключами * @param mixed $filters Имя метода или массив имен для предварительной фильтрации данных * Методы должны существовать в текущем классе (в т.ч. могут быть и в расширенном) * Каждый из методов должен возвращать массив данных с модифицированными ключами * @see /application/configs/forms/control/categories.xml * @return array | false */ public function saveCategoryForm(Phorm_Form $form, $data = null, $additionals = null, $filters = null) { /** * Получаем значения формы и объединяем их с массивом дополнительных данных */ if (!is_null($data) && is_string($data)) { $data = array('categoryid' => $data); } $data = array_merge($form->getValues(), (array) $data); /** * Предварительный фильтр значений */ if (!($data = $this->_filterFormInfo($data, $filters))) { return false; } $maindata = $this->getFilteredValuesByTableCols('pw_categories', $data); /** * Сохранение данных */ $this->_db->beginTransaction(); try { if (isset($data['categoryid'])) { // Обновление существующей записи $this->_db->update('pw_categories', $maindata, 'categoryid=' . (int) $data['categoryid']); $action = 'update'; } elseif (isset($data['parentid'])) { // Создание нового раздела $data['categoryid'] = $this->_dbtree->Insert($data['parentid'], null, $maindata); $action = 'insert'; } /** * Дополнительные данные раздела */ if (!($data = $this->_saveAdditionalInfo($data, $additionals))) { $this->_db->rollBack(); return false; } /** * Поисковый индекс */ $this->buildSearchIndex(array('indextitle' => $data['categoryname'], 'indextxt' => $data['categorytxt'], 'categoryid' => $data['categoryid'])); /** * Логирование */ $this->setLog($action, array('url' => '/control/categories/edit/categoryid/' . (int) $data['categoryid'] . '/', 'name' => $data['categoryname'], 'tablename' => 'pw_categories', 'identity' => (int) $data['categoryid'], 'fieldname' => 'categoryid')); /** * Очистка кеша */ $this->getCache('categories')->clean(); $this->_db->commit(); return $data; } catch (Exception $e) { $this->_db->rollBack(); $this->_errors[] = $e->getMessage(); } return false; }
/** * Сохраняет данные формы создания/редактирования материала * * @param Phorm_Form $form Объект формы * @param mixed $data Дополнительные данные формы. Если передана строка, то принимается как resourceid * @param mixed $additionals Имя метода или массив имен для дополнительной обработки данных * Методы должны существовать в текущем классе (в т.ч. могут быть и в расширенном) * Используется для сохранения дополнительных данных в модулях материалов * Каждый из методов должен возвращать массив данных с модифицированными ключами * @see Например, Phorm_Resource_Forms::saveFormInfo * @param mixed $filters Имя метода или массив имен для предварительной фильтрации данных * Методы должны существовать в текущем классе (в т.ч. могут быть и в расширенном) * Каждый из методов должен возвращать массив данных с модифицированными ключами * @see /application/configs/resources/forms.xml * @return array | false */ public function saveResourceForm(Phorm_Form $form, $data = null, $additionals = null, $filters = null) { /** * Получаем значения формы и объединяем их с массивом дополнительных данных */ if (!is_null($data) && is_string($data)) { $data = array('resourceid' => $data); } $data = array_merge($form->getValues(), (array) $data); /** * Предварительный фильтр значений */ if (!($data = $this->_filterFormInfo($data, $filters))) { return false; } $maindata = $this->getFilteredValuesByTableCols('pw_resources', $data); /** * Сохранение данных */ $this->_db->beginTransaction(); try { // Изменение существующей записи if (isset($data['resourceid'])) { $this->_db->update('pw_resources', $maindata, 'resourceid=' . (int) $data['resourceid']); $action = 'update'; // Вставка новой записи } else { $this->_db->insert('pw_resources', $maindata); $data['resourceid'] = $this->_db->lastInsertId(); $action = 'insert'; } /** * Дополнительные данные материала */ if (!($data = $this->_saveAdditionalInfo($data, $additionals))) { $this->_db->rollBack(); return false; } /** * Поисковый индекс */ $this->buildSearchIndex(array('indextitle' => $data['resourcename'], 'indextxt' => $data['resourcetxt'], 'resourceid' => $data['resourceid'])); /** * Логирование */ $this->setLog($action, array('url' => '/control/resource/edit/resourceid/' . (int) $data['resourceid'] . '/', 'name' => $data['resourcename'], 'tablename' => 'pw_resources', 'identity' => (int) $data['resourceid'], 'fieldname' => 'resourceid')); $this->_db->commit(); return $data; } catch (Exception $e) { $this->_db->rollBack(); $this->_errors[] = $e->getMessage(); $this->_errors[] = $e->getTraceAsString(); } return false; }