/** * @param int|array $ids * @return bool */ public static function updateModuleMenu($ids = null) { if ($ids != null) { if (is_array($ids)) { ZArrayHelper::toInteger($ids); } else { $id = intval($ids); $ids = []; $ids[] = $id; } } $menus = CoreModules::find(['conditions' => 'menu != "" AND location = "backend" AND published = 1 AND base_name NOT IN("admin","system","template")', 'order' => 'ordering ASC'])->toArray(); if (!count($menus)) { $menus = []; } $menuAdmin = CoreModules::findFirst("base_name = 'admin'"); $menuTemplate = CoreModules::findFirst("base_name = 'template'"); $menuSystem = CoreModules::findFirst("base_name = 'system'"); if ($menuTemplate) { array_unshift($menus, $menuAdmin->toArray()); } if ($menuTemplate) { $menus[] = $menuTemplate->toArray(); } if ($menuSystem) { $menus[] = $menuSystem->toArray(); } $menusAll = []; foreach ($menus as $index => $menu) { $menusAll[] = unserialize($menu['menu']); } $newMenuAll = []; foreach ($menusAll as $menu) { if (isset($menu['link'])) { $menu['link'] = self::checkUrl($menu['link']); $tmp = $menu; $tmp['items'] = []; if (isset($menu['items']) && count($menu['items'])) { foreach ($menu['items'] as $index1 => $item) { if (isset($item['link'])) { $item['link'] = self::checkUrl($item['link']); $tmp['items'][$index1] = $item; if (isset($item['items']) && count($item['items'])) { foreach ($item['items'] as $index2 => $childItem) { $childItem['link'] = self::checkUrl($childItem['link']); $tmp['items'][$index1]['items'][$index2] = $childItem; } } } } } $newMenuAll[] = $tmp; } } $menusAll = $newMenuAll; if (count($ids)) { /** * @var UserRoles[] $roles */ $roles = UserRoles::find('id IN (' . implode(',', $ids) . ')'); } else { $roles = UserRoles::find(); } $menuForRole = []; foreach ($roles as $role) { if ($role->role_id != 1) { $rules = UserRoles::getRules($role->role_id); if (count($rules)) { $menuTMPArray = []; foreach ($menusAll as $menu) { if ($menu['rule'] == "" || self::checkRuleMenuInRole($menu['rule'], $rules)) { $menuTMP = ['menu_name' => $menu['menu_name'], 'module' => $menu['module'], 'link' => $menu['link'], 'rule' => $menu['rule'], 'link_class' => $menu['link_class'], 'icon_class' => $menu['icon_class'], 'link_target' => $menu['link_target']]; $menuTMP['items'] = []; if (isset($menu['items']) && count($menu['items'])) { foreach ($menu['items'] as $index1 => $item) { if ($item['rule'] == "" || self::checkRuleMenuInRole($item['rule'], $rules)) { $childItem = []; if (isset($item['items'])) { $childItem = $item['items']; } $item['items'] = []; $menuTMP['items'][$index1] = $item; if (count($childItem)) { foreach ($childItem as $cItem) { if ($cItem['rule'] == "" || self::checkRuleMenuInRole($cItem['rule'], $rules)) { $menuTMP['items'][$index1]['items'][] = $cItem; } } } if (!count($menuTMP['items'][$index1]['items']) && ($menuTMP['items'][$index1]['link'] == "" || $menuTMP['items'][$index1]['link'] == "#") && $menuTMP['items'][$index1]["role"] == "") { unset($menuTMP['items'][$index1]); } } } } if (!count($menuTMP['items']) && ($menuTMP['link'] == "" || $menuTMP['link'] == "#") && $menuTMP["rule"] == "") { } else { $menuTMPArray[] = $menuTMP; } } } $menuForRole[$role->role_id] = $menuTMPArray; } else { $menuForRole[$role->role_id] = null; } } else { $menuForRole[$role->role_id] = $menusAll; } } foreach ($roles as $role) { $role->menu = serialize($menuForRole[$role->role_id]); if (!$role->save()) { //Do something } } return true; }
/** * Update module information * * @param array $arrayModule * @param $moduleLocale * @return array */ protected function updateModuleInfo($arrayModule = [], $moduleLocale) { if (count($arrayModule) == 0 || $moduleLocale == '' || $moduleLocale != 'backend' && $moduleLocale != 'frontend') { return false; } else { $arrayModuleReturn = []; foreach ($arrayModule as $module) { $filePath = APP_DIR . '/' . $moduleLocale . '/' . $module . '/Resource.php'; //Get new Module name $resource = check_resource($filePath, $module, $moduleLocale); if (file_exists($filePath) && $resource) { /** * CoreModule $coreModule */ $coreModule = CoreModules::findFirst(['conditions' => 'base_name = ?1', 'bind' => ['1' => $module]]); if (!$coreModule) { $coreModule = new CoreModules(); $coreModule->base_name = $module; $coreModule->name = $module; $coreModule->is_core = 0; $coreModule->published = 0; $coreModule->location = $moduleLocale; $coreModule->ordering = (int) CoreModules::maximum(['column' => 'ordering']) + 1; } $coreModule->name = $resource['name']; $coreModule->class_name = $resource['class_name']; $coreModule->path = $resource['path']; $coreModule->menu = ''; $coreModule->description = $resource['description']; $coreModule->author = $resource['author']; $coreModule->authorUri = $resource['authorUri']; $coreModule->version = $resource['version']; $coreModule->uri = $resource['uri']; if ($moduleLocale == 'backend') { $coreModule->menu = $this->getModuleMenu($module); } if ($moduleLocale == 'frontend') { $coreModule->router = null; //$this->getModuleRouter($module); } if (!$coreModule->save()) { //Do some thing } else { $arrayModuleReturn['success'][] = [$coreModule->name, $moduleLocale]; } } else { $arrayModuleReturn['error'][] = [$module, $moduleLocale]; } } return $arrayModuleReturn; } }