Exemplo n.º 1
0
 /**
  * @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;
 }
Exemplo n.º 2
0
 /**
  * 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;
     }
 }