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;
}
}