How To: Действие для переноса копии информационного элемента в другую информационную систему
В данной статье рассмотрим пример реализации в центре администрирования кнопки(действия формы) для переноса выбранных элементов в другую информационную систему.
- Первый шаг - создание самого действия. Для этого перейдите в раздел Система → Формы центра администрирования. Далее необходимо найти стандартную форму списка информационных элементов под названием "Информационные группы и элементы" (id 12). Заходим в список действий формы, создаем новое действие и указываем:
Название - "Перенести в ИС" (может быть любым, даже пустым);
Функция-обработчик - moveToInfSys;
Пиктограмма - fa fa-sign-out
Цвет - purple
Ставим только(!) флаг "Групповая операция".
После этого сохраняем действие и у нас в писке действие появится новая кнопка. - Следующий шаг - добавление обработчика действия. Редактируем файл bootstrap.php в корне системы на сервере и в самый конец файла добавляем код:
class Admin_Form_Controller_Observer
{
static public function onCallmoveToInfSys($oAdmin_Form_Controller, $args)
{
list($datasetKey, $oObject, $operation) = $args;
$oAdmin_Form = $oAdmin_Form_Controller->getAdminForm();
Core_I18n::instance()->expandLng('informationsystem_item',
array(
'moveToInfSys_success' => 'Элемент перенесен успешно!',
)
);
// Проверка на GUID нужной формы
if ($oAdmin_Form->guid == '0F65DDC4-926A-5A48-65A2-531620F09FD1')
{
if (is_null($operation))
{
// Original windowId
$windowId = $oAdmin_Form_Controller->getWindowId();
$newWindowId = 'Move_' . time();
$oCore_Html_Entity_Form = Core::factory('Core_Html_Entity_Form');
$oCore_Html_Entity_Div = Core::factory('Core_Html_Entity_Div')
->id($newWindowId)
->add($oCore_Html_Entity_Form);
$oCore_Html_Entity_Form->action($oAdmin_Form_Controller->getPath())
->method('post');
$window_Admin_Form_Controller = clone $oAdmin_Form_Controller;
// Select на всплывающем окне должен быть найден через ID нового окна, а не id_content
$window_Admin_Form_Controller->window($newWindowId);
$oSite = Core_Entity::factory('Site')->getById(CURRENT_SITE);
$aOptions = array();
$aInformationsystems = $oSite->Informationsystems->findAll(FALSE);
foreach ($aInformationsystems as $oInformationsystem)
{
$aOptions[$oInformationsystem->id] = $oInformationsystem->name;
}
$oAdmin_Form_Entity_Select = Admin_Form_Entity::factory('Select')
->name('destinationId')
->id('destinationId')
->style('width: 280px; float: left')
->filter(TRUE)
->options($aOptions)
->caption('Информационная система')
// ->value($this->value)
->controller($window_Admin_Form_Controller);
$oCore_Html_Entity_Form->add($oAdmin_Form_Entity_Select);
// Идентификаторы переносимых указываем скрытыми полями в форме, чтобы не превысить лимит GET
$aChecked = $oAdmin_Form_Controller->getChecked();
// Clear checked list
$oAdmin_Form_Controller->clearChecked();
foreach ($aChecked as $datasetKey => $checkedItems)
{
foreach ($checkedItems as $key => $value)
{
$oCore_Html_Entity_Form->add(
Core::factory('Core_Html_Entity_Input')
->name('hostcms[checked][' . $datasetKey . '][' . $key . ']')
->value(1)
->type('hidden')
//->controller($window_Admin_Form_Controller)
);
}
}
$oAdmin_Form_Entity_Button = Admin_Form_Entity::factory('Button')
->name('apply')
->type('submit')
->class('applyButton btn btn-blue')
->value('Перенести')
->onclick(
'bootbox.hideAll(); '
. $oAdmin_Form_Controller->getAdminSendForm(NULL, 'apply')
)
->controller($oAdmin_Form_Controller);
$oCore_Html_Entity_Form
->add(
Admin_Form_Entity::factory('Div')
->class('form-group col-12')
->add($oAdmin_Form_Entity_Button)
);
$oCore_Html_Entity_Div->execute();
ob_start();
Core::factory('Core_Html_Entity_Script')
->value("$(function() {
$('#{$newWindowId}').HostCMSWindow({ autoOpen: true, destroyOnClose: false, title: 'Выберите информационную систему для переноса', AppendTo: '#{$windowId}', width: 750, height: 140, addContentPadding: true, modal: false, Maximize: false, Minimize: false }); });")
->execute();
// Break execution for other
return array(TRUE, ob_get_clean(), NULL);
}
else
{
$destinationId = intval(Core_Array::getPost('destinationId'));
if (is_null($destinationId))
{
throw new Core_Exception("destinationId is NULL");
}
$oNewInformationsystemItem = clone $oObject;
$oNewInformationsystemItem->informationsystem_group_id = 0;
$oNewInformationsystemItem->informationsystem_id = $destinationId;
$oNewInformationsystemItem->datetime = Core_Date::timestamp2sql(time());
$oNewInformationsystemItem->save();
return array(FALSE, '', NULL);
}
}
}
}
Core_Event::attach('Admin_Form_Controller.onCallmoveToInfSys', array('Admin_Form_Controller_Observer', 'onCallmoveToInfSys'));
Не нашли ответ на свой вопрос в документации? Направьте обращение в службу поддержки или онлайн чат.