Ejemplo n.º 1
0
 /**
  * Информация о разделе
  * 
  * @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... надо что-то придумать
     }
 }
Ejemplo n.º 2
0
 /**
  * Определяем массив опций и дергаем родительский конструктор
  *
  * @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);
 }
Ejemplo n.º 3
0
 /**
  * Загрузка файлов
  * Метод переписан для поддержки 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->_('Не задан тип')))))));
     }
 }
Ejemplo n.º 4
0
 /**
  * Сохраняет структуру
  *
  * @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;
 }
Ejemplo n.º 5
0
 /**
  * Определяем массив опций и дергаем родительский конструктор
  *
  * @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);
 }
Ejemplo n.º 6
0
 /**
  * Сохраняет данные формы создания/редактирования страницы
  * 
  * @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;
 }
Ejemplo n.º 7
0
 /**
  * Строит форму
  * 
  * @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;
 }
Ejemplo n.º 8
0
 /**
  * Возвращает форму добавления/редактирования виджета
  *
  * @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;
 }
Ejemplo n.º 9
0
 /**
  * Редактирование группы
  * 
  * @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 не найдена');
     }
 }
Ejemplo n.º 10
0
 /**
  * Возвращает форму добавления/редактирования пользователей и ролей
  *
  * @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;
 }
Ejemplo n.º 11
0
 /**
  * Сохраняет данные формы создания/редактирования раздела
  * 
  * @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;
 }
Ejemplo n.º 12
0
 /**
  * Сохраняет данные формы создания/редактирования материала
  * 
  * @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;
 }