Update хук

https://www.hostcms.ru/api7/classes/Update-Entity.html

Разместите код хука (подробнее) в файле bootstrap.php

В массивах $aAdminForms и $aAdminFormActions настраиваются формы, их поля и действия, которые нужно удалить [delete] или модифицировать [update]

class My_Update_Observer
{
    static public function onAfterInstall($entity)
    {
        // Формы центра администрирования /admin/admin_form/index.php
        $aAdminForms = array(
            // удаление в корзину
            'delete' => array(
                // ID формы "Интернет-магазин, товары и группы"
                65 => array(
                    249, // ID поля "Комментарии"
                    250, // ID поля "Модификации"
                    600 // ID поля "Цифровые товары"
                ),
                // ID формы "Оформленные заказы"
                75 => array(
                    293, // ID поля "Компания"
                    833, // ID поля "Фамилия"
                    836, // ID поля "Вес"
                    886 // ID поля "Статус"
                )
            ),
            // обновление полей
            'update' => array(
                // ID формы "Оформленные заказы"
                75 => array(
                    // ID поля "Дата"
                    292 => array(
                        'allow_sorting' => 0, // отключаем "Разрешить сортировку"
                        'allow_filter' => 0 // отключаем "Разрешить фильтр"
                    ),
                    // ID поля "Товар"
                    297 => array(
                        'word_name' => 'Список товаров', // меняем имя поля
                        'sorting' => 25 // меняем "Порядок сортировки"
                    )
                )
            )
        );

        // Действия формы центра администрирования
        $aAdminFormActions = array(
            // удаление в корзину
            'delete' => array(
                // ID формы "Список интернет-магазинов"
                54 => array(
                    668 // ID действия "Пересчитать"
                )
            ),
            // обновление действий
            'update' => array(
                // ID формы "Оформленные заказы"
                75 => array(
                    // ID действия "Пересчет стоимости доставки"
                    292 => array(
                        'sorting' => 10, // меняем "Порядок сортировки"
                    ),
                )
            )
        );

        $oAdmin_Language = Core_Entity::factory('Admin_Language')->getByShortname('ru');

        foreach ($aAdminForms as $action => $aAdminForm)
        {
            foreach ($aAdminForm as $admin_form_id => $array)
            {
                $oAdmin_Form = Core_Entity::factory('Admin_Form')->find($admin_form_id);

                if($oAdmin_Form->id)
                {
                    $oAdmin_Form_Word = $oAdmin_Form->Admin_Word->getWordByLanguage($oAdmin_Language->id);

                    $aIDs = $action == 'delete' ? $array : array_keys($array);

                    $aAdmin_Form_Fields = $oAdmin_Form->Admin_Form_Fields->getAllById($aIDs, FALSE, 'IN');

                    foreach ($aAdmin_Form_Fields as $oAdmin_Form_Field)
                    {
                        $oAdmin_Form_Field_Word = $oAdmin_Form_Field->Admin_Word->getWordByLanguage($oAdmin_Language->id);

                        $form_field_name = $oAdmin_Form_Field_Word->name;

                        switch ($action)
                        {
                            case 'delete':

                                $oAdmin_Form_Field->markDeleted();

                                Core_Message::show("{$action} поле \"{$form_field_name}\" форма \"{$oAdmin_Form_Word->name}\"", 'warning');

                                break;
                            case 'update':

                                foreach ($array[$oAdmin_Form_Field->id] as $field => $value)
                                {
                                    switch ($field)
                                    {
                                        case 'word_name':
                                            $oAdmin_Form_Field_Word->name = $value;
                                            $oAdmin_Form_Field_Word->save();
                                            break;
                                        default:
                                            $oAdmin_Form_Field->$field = $value;
                                            $oAdmin_Form_Field->save();
                                    }

                                    Core_Message::show("{$action} поле \"{$form_field_name}\" параметр \"{$field}\" форма \"{$oAdmin_Form_Word->name}\"", 'message');
                                }

                                break;
                        }
                    }
                }
            }
        }

        foreach ($aAdminFormActions as $action => $aAdminFormAction)
        {
            foreach ($aAdminFormAction as $admin_form_id => $array)
            {
                $oAdmin_Form = Core_Entity::factory('Admin_Form')->find($admin_form_id);

                if($oAdmin_Form->id)
                {
                    $oAdmin_Form_Word = $oAdmin_Form->Admin_Word->getWordByLanguage($oAdmin_Language->id);

                    $aIDs = $action == 'delete' ? $array : array_keys($array);

                    $aAdmin_Form_Actions = $oAdmin_Form->Admin_Form_Actions->getAllById($aIDs, FALSE, 'IN');

                    foreach ($aAdmin_Form_Actions as $oAdmin_Form_Action)
                    {
                        $oAdmin_Form_Action_Word = $oAdmin_Form_Action->Admin_Word->getWordByLanguage($oAdmin_Language->id);

                        $form_action_name = $oAdmin_Form_Action_Word->name;

                        switch ($action)
                        {
                            case 'delete':

                                $oAdmin_Form_Action->markDeleted();

                                Core_Message::show("{$action} действие \"{$form_action_name}\" форма \"{$oAdmin_Form_Word->name}\"", 'warning');

                                break;
                            case 'update':

                                foreach ($array[$oAdmin_Form_Action->id] as $field => $value)
                                {
                                    switch ($field)
                                    {
                                        case 'word_name':
                                            $oAdmin_Form_Action_Word->name = $value;
                                            $oAdmin_Form_Action_Word->save();
                                            break;
                                        default:
                                            $oAdmin_Form_Action->$field = $value;
                                            $oAdmin_Form_Action->save();
                                    }

                                    Core_Message::show("{$action} действие \"{$form_action_name}\" параметр \"{$field}\" форма \"{$oAdmin_Form_Word->name}\"", 'message');
                                }

                                break;
                        }
                    }
                }
            }
        }
    }
}

Core_Event::attach('Update_Entity.onAfterInstall', array('My_Update_Observer', 'onAfterInstall'));

Last updated