Last active
July 22, 2020 23:38
-
-
Save maximzasorin/b77610939b5da0ebae47 to your computer and use it in GitHub Desktop.
Управление ярлыками товаров и элементов информационной системы в отдельной вкладке (HostCMS)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
* Управление ярлыками элементов информационной системы в отдельной вкладке | |
* | |
* В bootstrap.php: | |
* | |
// Управление ярлыками элементов информационной системы в отдельной вкладке | |
Core_Event::attach('Admin_Form_Action_Controller_Type_Edit.onBeforeExecute',array('Admin_Form_Observer_ShortcutsTab_Informationsystem', 'onBeforeExecute')); | |
Core_Event::attach('Admin_Form_Action_Controller_Type_Edit.onAfterRedeclaredPrepareForm', array('Admin_Form_Observer_ShortcutsTab_Informationsystem', 'onAfterRedeclaredPrepareForm')); | |
* | |
*/ | |
defined('HOSTCMS') || exit('HostCMS: access denied.'); | |
class Admin_Form_Observer_ShortcutsTab_Informationsystem extends Admin_Form_Observer_ShortcutsTab | |
{ | |
// Событие | |
static public function onAfterRedeclaredPrepareForm($controller, $args) | |
{ | |
list($object, $Admin_Form_Controller) = $args; | |
// Данное событие будет вызываться для всех форм, определяем с каким контроллером работаем | |
switch (get_class($controller)) | |
{ | |
case 'Informationsystem_Item_Controller_Edit': | |
if (get_class($object) == 'Informationsystem_Item_Model') | |
{ | |
self::shortcutsTab($controller, $object); | |
} | |
break; | |
} | |
} | |
// Обрабатываем операцию сохранения формы | |
static public function onAfterExecute($controller, $args) | |
{ | |
list($operation, $Admin_Form_Controller) = $args; | |
if ($operation == 'save' || $operation == 'apply') | |
{ | |
$object = $controller->getObject(); | |
switch (get_class($controller)) | |
{ | |
case 'Informationsystem_Item_Controller_Edit': | |
if (get_class($object) == 'Informationsystem_Item_Model') | |
{ | |
self::saveShortcuts($controller, $object); | |
} | |
break; | |
} | |
} | |
} | |
static protected function getChildGroups($oGroup) | |
{ | |
return $oGroup->Informationsystem_Groups; | |
} | |
static protected function getModuleGroups($object, $all = false) | |
{ | |
$oModuleGroups = $object->Informationsystem->Informationsystem_Groups; | |
$oModuleGroups->queryBuilder() | |
->where('active', '=', 1) | |
->where('deleted', '=', 0); | |
if (!$all) | |
{ | |
$oModuleGroups->queryBuilder()->where('parent_id', '=', 0); | |
} | |
return $oModuleGroups->findAll(); | |
} | |
static protected function getObjectGroupId($object) | |
{ | |
return $object->informationsystem_group_id; | |
} | |
static protected function getShortcuts($object, $oGroup = null) | |
{ | |
if ($object->shortcut_id == 0) | |
{ | |
$oShortcuts = $object->Informationsystem_Items; | |
} | |
else | |
{ | |
$oShortcuts = $object->Informationsystem_Item->Informationsystem_Items; | |
} | |
if ($oGroup) | |
{ | |
$oShortcuts->queryBuilder() | |
->where('informationsystem_group_id', '=', $oGroup->id); | |
} | |
return $oShortcuts; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
* Управление ярлыками товара в отдельной вкладке | |
* | |
* В bootstrap.php: | |
* | |
// Управление ярлыками товара в отдельной вкладке | |
Core_Event::attach('Admin_Form_Action_Controller_Type_Edit.onBeforeExecute', array('Admin_Form_Observer_ShortcutsTab_Shop', 'onBeforeExecute')); | |
Core_Event::attach('Admin_Form_Action_Controller_Type_Edit.onAfterExecute', array('Admin_Form_Observer_ShortcutsTab_Shop', 'onAfterExecute')); | |
* | |
*/ | |
defined('HOSTCMS') || exit('HostCMS: access denied.'); | |
class Admin_Form_Observer_ShortcutsTab_Shop extends Admin_Form_Observer_ShortcutsTab | |
{ | |
// Событие | |
static public function onBeforeExecute($controller, $args) | |
{ | |
list($operation, $Admin_Form_Controller) = $args; | |
if (is_null($operation)) | |
{ | |
switch (get_class($controller)) | |
{ | |
case 'Shop_Item_Controller_Edit': | |
$object = $controller->getObject(); | |
if (get_class($object) == 'Shop_Item_Model') | |
{ | |
self::shortcutsTab($controller, $object); | |
} | |
break; | |
} | |
} | |
} | |
// Обрабатываем операцию сохранения формы | |
static public function onAfterExecute($controller, $args) | |
{ | |
list($operation, $Admin_Form_Controller) = $args; | |
if ($operation == 'save' || $operation == 'apply') | |
{ | |
$object = $controller->getObject(); | |
switch (get_class($controller)) | |
{ | |
case 'Shop_Item_Controller_Edit': | |
if (get_class($object) == 'Shop_Item_Model') | |
{ | |
self::saveShortcuts($controller, $object); | |
} | |
break; | |
} | |
} | |
} | |
static protected function getChildGroups($oGroup) | |
{ | |
return $oGroup->Shop_Groups; | |
} | |
static protected function getModuleGroups($object, $all = false) | |
{ | |
$oModuleGroups = $object->Shop->Shop_Groups; | |
$oModuleGroups->queryBuilder() | |
->where('active', '=', 1) | |
->where('deleted', '=', 0); | |
if (!$all) | |
{ | |
$oModuleGroups->queryBuilder()->where('parent_id', '=', 0); | |
} | |
return $oModuleGroups->findAll(); | |
} | |
static protected function getObjectGroupId($object) | |
{ | |
return $object->shop_group_id; | |
} | |
static protected function getShortcuts($object, $oGroup = null) | |
{ | |
if ($object->shortcut_id == 0) | |
{ | |
$oShortcuts = $object->Shop_Items; | |
} | |
else | |
{ | |
$oShortcuts = $object->Shop_Item->Shop_Items; | |
} | |
if ($oGroup) | |
{ | |
$oShortcuts->queryBuilder() | |
->where('shop_group_id', '=', $oGroup->id); | |
} | |
return $oShortcuts; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
* Управление ярлыками в отдельной вкладке | |
* | |
* Базовый класс для информационныой системы и магазина | |
* | |
*/ | |
defined('HOSTCMS') || exit('HostCMS: access denied.'); | |
abstract class Admin_Form_Observer_ShortcutsTab | |
{ | |
static protected $_shortcutsGroups = array(); | |
// Добавляет вкладку с ярлыками | |
static protected function shortcutsTab($controller, $object) | |
{ | |
$oItemShortcutsTab = Admin_Form_Entity::factory('Tab') | |
->caption( | |
Core_I18n::instance()->getLng() == 'ru' | |
? 'Группы' | |
: 'Groups' | |
) | |
->name('shortcuts_groups'); | |
if ($controller->issetTab('additional')) | |
{ | |
$controller->addTabBefore( | |
$oItemShortcutsTab, | |
$controller->getTab('additional') | |
); | |
} | |
else | |
{ | |
$controller->addTab($oItemShortcutsTab); | |
} | |
static::addGroupsToTab($oItemShortcutsTab, $object); | |
} | |
// Добавляет все группы на вкладку с ярлыками | |
static protected function addGroupsToTab($oShopItemShortcutsTab, $object) | |
{ | |
$aoModuleGroups = static::getModuleGroups($object); | |
foreach ($aoModuleGroups as $oModuleGroup) | |
{ | |
static::addGroupToTab($oShopItemShortcutsTab, $object, $oModuleGroup); | |
} | |
} | |
// Добавляет одну группы на вкладку с ярлыками | |
static protected function addGroupToTab($oShopItemShortcutsTab, $object, $oModuleGroup, $level = 0) | |
{ | |
$oShopItemShortcutsTabGroupRow = Admin_Form_Entity::factory('Div') | |
->class('row') | |
->style('padding-left: ' . (25 * $level) . 'px'); | |
$oShopItemShortcutsTab->add($oShopItemShortcutsTabGroupRow); | |
$oModuleGroupCheckbox = Admin_Form_Entity::factory('Checkbox'); | |
$oModuleGroupCheckbox | |
->value( | |
in_array($oModuleGroup->id, static::getShortcutsGroups($object)) ? 1 : 0 | |
) | |
->caption($oModuleGroup->name) | |
->name('shortcut_group_' . $oModuleGroup->id) | |
->divAttr(array('class' => 'form-group col-lg-6 col-md-6 col-sm-6')) | |
; | |
if (static::getObjectGroupId($object) == $oModuleGroup->id) | |
{ | |
$oModuleGroupCheckbox->disabled = 'disabled'; | |
} | |
$oShopItemShortcutsTabGroupRow->add($oModuleGroupCheckbox); | |
$aoChildGroups = static::getChildGroups($oModuleGroup)->findAll(); | |
foreach ($aoChildGroups as $oChildGroup) | |
{ | |
static::addGroupToTab($oShopItemShortcutsTab, $object, $oChildGroup, $level + 1); | |
} | |
} | |
// Возвращает группы, в которых присутствую ярлыки объекта | |
static protected function getShortcutsGroups($object) | |
{ | |
if (count(self::$_shortcutsGroups) > 0) | |
{ | |
return self::$_shortcutsGroups; | |
} | |
$aoShortcuts = static::getShortcuts($object)->findAll(); | |
// $aShortcutsGroups = array(); | |
$aShortcutsGroups = array(static::getObjectGroupId($object)); | |
foreach ($aoShortcuts as $oShortcut) | |
{ | |
$aShortcutsGroups[] = static::getObjectGroupId($oShortcut); | |
} | |
return (self::$_shortcutsGroups = $aShortcutsGroups); | |
} | |
// Сохраняем ярлыки групп | |
static protected function saveShortcuts($controller, $object) | |
{ | |
$aoModuleGroups = static::getModuleGroups($object, true); | |
foreach ($aoModuleGroups as $oModuleGroup) | |
{ | |
$oGroupShortcuts = static::getShortcuts($object, $oModuleGroup); | |
$aoGroupShortcuts = $oGroupShortcuts->findAll(); | |
if (Core_Array::getPost('shortcut_group_' . $oModuleGroup->id)) | |
{ | |
if (count($aoGroupShortcuts) == 0) | |
{ | |
$object->shortcut($oModuleGroup->id); | |
} | |
} | |
else | |
{ | |
foreach ($aoGroupShortcuts as $oGroupShortcut) | |
{ | |
$oGroupShortcut->delete(); | |
} | |
} | |
} | |
} | |
// Возвращает подгруппы | |
abstract static protected function getChildGroups($oGroup); | |
// Возвращает все группы текущего модуля | |
abstract static protected function getModuleGroups($object, $all = false); | |
// Возвращает группу объекта | |
abstract static protected function getObjectGroupId($object); | |
// Возвращает ярлыки объекта | |
abstract static protected function getShortcuts($object, $oGroup = null); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment