where($where)->find(); $_side_menu_list = json_decode($module_info['admin_menu'], true); // 转换成树结构 $tree = new tree(); return $tree->list2tree($_side_menu_list); } /** * 获取模块当前菜单 * */ public function getCurrentMenu($module_name = MODULE_NAME) { $admin_menu = $this->getFieldByName($module_name, 'admin_menu'); $admin_menu = json_decode($admin_menu, true); foreach ($admin_menu as $key => $val) { if (isset($val['url'])) { $config_url =$val['url']; $current_url = MODULE_NAME . '/' . CONTROLLER_NAME . '/' . ACTION_NAME; if ($config_url === $current_url) { $result = $val; } } } return $result; } /** * 获取所有模块菜单 * @param string $addon_dir * */ public function getAllMenu() { $uid = is_login(); $user_group = D('Admin/Access')->getFieldByUid($uid, 'group'); // 获得当前登录用户信息 $group_info = D('Admin/Group')->find($user_group); $group_auth = json_decode($group_info['menu_auth'], true); // 获得当前登录用户所属部门的权限列表 // 获取所有菜单 $menu_list = S('MENU_LIST_' . $uid); if (!$menu_list || APP_DEBUG === true) { $con['status'] = 1; $system_module_list = $this->where($con)->order('sort asc, id asc')->select(); $tree = new tree(); $menu_list = array(); foreach ($system_module_list as $key => &$module) { $menu = json_decode($module['admin_menu'], true); if(!empty($group_auth['Admin'])) {//为空表示是管理员 foreach ($menu as $k => $v) { if ($v['id'] == 1) continue; if (!in_array($v['id'], $group_auth['Admin'])) unset($menu[$k]); } } $temp = $tree->list2tree($menu); $menu_list[$module['name']] = $temp[0]; $menu_list[$module['name']]['id'] = $module['id']; $menu_list[$module['name']]['name'] = $module['name']; } S('MENU_LIST_' . $uid, $menu_list, 3600); // 缓存配置 } return $menu_list; } /** * 根据菜单ID的获取其所有父级菜单 * @param array $current_menu 当前菜单信息 * @return array 父级菜单集合 * */ public function getParentMenu($current_menu = '', $module_name = MODULE_NAME) { if (!$current_menu) { $current_menu = $this->getCurrentMenu(); } if (!$current_menu) { return false; } $admin_menu = $this->getFieldByName($module_name, 'admin_menu'); $admin_menu = json_decode($admin_menu, true); $pid = $current_menu['pid']; $temp = array(); $result[] = $current_menu; while (true) { foreach ($admin_menu as $key => $val) { if ($val['id'] == $pid) { $pid = $val['pid']; array_unshift($result, $val); // 将父菜单插入到第一个元素前 } } if ($pid == '0') { break; } } return $result; } /** * 获取模块列表 * @param string $addon_dir * */ public function getAll() { // 获取除了Common等系统模块外的用户模块 // 文件夹下必须有$install_file定义的安装描述文件 $dirs = array_map('basename', glob(APP_PATH . '*', GLOB_ONLYDIR)); foreach ($dirs as $dir) { $config_file = realpath(APP_PATH . $dir) . '/' . $this->install_file(); if (Storage::has($config_file)) { $module_dir_list[] = $dir; $temp_arr = include $config_file; $temp_arr['info']['status'] = -1; //未安装 $module_list[$temp_arr['info']['name']] = $temp_arr['info']; } } // 获取系统已经安装的模块信息 $installed_module_list = $this->field(true) ->order('sort asc,id asc') ->select(); if ($installed_module_list) { foreach ($installed_module_list as &$module) { $new_module_list[$module['name']] = $module; $new_module_list[$module['name']]['admin_menu'] = json_decode($module['admin_menu'], true); } // 系统已经安装的模块信息与文件夹下模块信息合并 $module_list = array_merge($module_list, $new_module_list); } foreach ($module_list as &$val) { switch ($val['status']) { case '-2': // 损坏 $val['status_icon'] = '删除记录'; $val['right_button']['damaged']['title'] = '删除记录'; $val['right_button']['damaged']['attribute'] = 'class="label label-danger ajax-get" href="' . U('setStatus', array('status' => 'delete', 'ids' => $val['id'])) . '"'; break; case '-1': // 未安装 $val['status_icon'] = ''; $val['right_button']['install_before']['title'] = '安装'; $val['right_button']['install_before']['attribute'] = 'class="label label-success" href="' . U('install_before', array('name' => $val['name'])) . '"'; break; case '0': // 禁用 $val['status_icon'] = ''; $val['right_button']['update_info']['title'] = '更新菜单'; $val['right_button']['update_info']['attribute'] = 'class="label label-info ajax-get no-refresh" href="' . U('updateInfo', array('id' => $val['id'])) . '"'; $val['right_button']['forbid']['title'] = '启用'; $val['right_button']['forbid']['attribute'] = 'class="label label-success ajax-get" href="' . U('setStatus', array('status' => 'resume', 'ids' => $val['id'])) . '"'; $val['right_button']['uninstall_before']['title'] = '卸载'; $val['right_button']['uninstall_before']['attribute'] = 'class="label label-danger " href="' . U('uninstall_before', array('id' => $val['id'])) . '"'; break; case '1': // 正常 $val['status_icon'] = ''; $val['right_button']['update_info']['title'] = '更新菜单'; $val['right_button']['update_info']['attribute'] = 'class="label label-info ajax-get no-refresh" href="' . U('updateInfo', array('id' => $val['id'])) . '"'; if (!$val['is_system']) { $val['right_button']['forbid']['title'] = '禁用'; $val['right_button']['forbid']['attribute'] = 'class="label label-warning ajax-get" href="' . U('setStatus', array('status' => 'forbid', 'ids' => $val['id'])) . '"'; $val['right_button']['uninstall_before']['title'] = '卸载'; $val['right_button']['uninstall_before']['attribute'] = 'class="label label-danger " href="' . U('uninstall_before', array('id' => $val['id'])) . '"'; } break; } } return $module_list; } /** * 获取模块名称列表 * @param string $addon_dir * */ public function getNameList() { $list = $this->getField('name', true); foreach ($list as $val) { $return[$val] = $val; } return $return; } }