mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-22 18:35:35 +08:00
342 lines
13 KiB
PHP
342 lines
13 KiB
PHP
<?php
|
|
/**
|
|
* Copyright 2012-2026 ShopeX (https://www.shopex.cn)
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
|
|
class desktop_mdl_menus extends dbeav_model{
|
|
|
|
//根据工作组获得菜单
|
|
var $defaultOrder = array('menu_order', ' ASC');
|
|
|
|
function menu($get,$defaultWorkground){
|
|
$menu_type = 'menu';
|
|
$workground = '';
|
|
$aper = array();
|
|
$this->user = kernel::single('desktop_user');
|
|
if($this->user->is_super()){
|
|
$pers = $this->getList('permission',array('menu_type' => 'permission','disabled' => 'false'));
|
|
foreach($pers as $val){
|
|
$aper[] = $val['permission'];
|
|
}
|
|
}
|
|
else{
|
|
$group = $this->user->group();
|
|
foreach($group as $v){
|
|
#$data = $this->dump($v);
|
|
$aper[] = $v;
|
|
}
|
|
}
|
|
|
|
|
|
$menu_path = "app=".$get['app']."&ctl=".$get['ctl']."&act=".$get['act'];
|
|
$aData = $this->getList('*',array('menu_type' => 'menu','menu_path' => $menu_path));
|
|
if(count($aData) == 0){
|
|
$aPanel = $this->getList('*',array('menu_type' => 'adminpanel','menu_path' => $menu_path));
|
|
if(count($aPanel) == 0){
|
|
if($defaultWorkground){
|
|
$workground = $defaultWorkground;
|
|
|
|
}
|
|
else{
|
|
return null;
|
|
}
|
|
}
|
|
else{
|
|
$menu_title = $aPanel[0]['menu_title'];
|
|
$adminpanel_wg = $this->adminpanel($aper);
|
|
return $adminpanel_wg;
|
|
|
|
}
|
|
|
|
}
|
|
if(count($aData) > 1){
|
|
foreach($aData as $k => $row){
|
|
$addon = unserialize($row['addon']);
|
|
$flag = true;
|
|
foreach((array)$addon['url_params'] as $field => $val){
|
|
if($get[$field] != $val){
|
|
$flag = false;
|
|
break;
|
|
}
|
|
}
|
|
if($flag){
|
|
$workground = $aData[$k]['workground'];
|
|
break;
|
|
}
|
|
}
|
|
}elseif(count($aData) == 1){
|
|
$workground = $aData[0]['workground'];
|
|
}else{
|
|
# $menu_type = 'workground';
|
|
}
|
|
|
|
$menu = $this->getList('*',array('menu_type' => $menu_type,'workground' => $workground,'display'=>'true','permission' => $aper));
|
|
$menu_group = array();
|
|
$data_menu = array();
|
|
foreach($menu as $val){
|
|
if($val['menu_group']) $menu_group[] = $val['menu_group'];
|
|
}
|
|
$menu_group = array_unique($menu_group);
|
|
$tmp = array();
|
|
$tmp['menugroup'] = '';
|
|
foreach($menu_group as $key_=>$value){
|
|
$data_menu[$key_]['menugroup'] = $value;
|
|
foreach($menu as $res){
|
|
if($res['menu_title']) $res['menu_title'] = app::get('b2c')->_($res['menu_title']);
|
|
$url_params = unserialize($res['addon']);
|
|
if(is_array($url_params['url_params']) && count($url_params['url_params'])>0){
|
|
$query = '&'.utils::http_build_query($url_params['url_params']);
|
|
$res['menu_path'] = $res['menu_path'].$query;
|
|
}
|
|
if(!$res['menu_group']){
|
|
$tmp['menu'][$res['menu_id']] = $res;
|
|
}else{
|
|
//$res['menu_group'] = app::get('b2c')->_($res['menu_group']);
|
|
if($res['menu_group'] ==$value){
|
|
$data_menu[$key_]['menu'][] = $res;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$data_menu['nogroup'] = $tmp;
|
|
return $data_menu;
|
|
}
|
|
|
|
//根据permission ID获取工作组菜单
|
|
|
|
function workgroup($permission_id, $need_group = false){
|
|
if ($need_group == true) {
|
|
// 支持批量查询,并返回的时候按permission_id进行分组
|
|
$data = $this->getList('*',array('menu_type'=>'menu','permission|in'=>$permission_id,'display' =>'true'));
|
|
$workground_menu = $workground = $aTmpAll = array();
|
|
if ($data) {
|
|
$workground = array_column($data, 'workground');
|
|
$workground = @array_unique($workground);
|
|
|
|
if($workground){
|
|
$aTmpAll = $this->getList('*',array('menu_type' => 'workground','workground|in' => $workground,'display' => 'true'));
|
|
if ($aTmpAll) {
|
|
$aTmpAll = array_column($aTmpAll, null, 'workground');
|
|
}
|
|
}
|
|
}
|
|
foreach ($data as $dk => $dv) {
|
|
if (!isset($workground_menu[$dv['permission']])) {
|
|
$workground_menu[$dv['permission']] = [];
|
|
}
|
|
if (isset($aTmpAll[$dv['workground']]) && $aTmpAll[$dv['workground']]) {
|
|
$workground_menu[$dv['permission']][] = $aTmpAll[$dv['workground']];
|
|
}
|
|
}
|
|
return $workground_menu;
|
|
|
|
} else {
|
|
// 下面是老代码逻辑
|
|
#$sdf = $this->dump($permission_id);
|
|
$data = $this->getList('*',array('menu_type'=>'menu','permission'=>$permission_id,'display' =>'true'));
|
|
$menu_group = array();
|
|
$workground_menu = $workground = array();
|
|
foreach($data as $val){
|
|
$workground[] = $val['workground'];
|
|
}
|
|
$workground = @array_unique($workground);
|
|
if(is_array($workground)){
|
|
foreach($workground as $value){
|
|
$aTmp = $this->getList('*',array('menu_type' => 'workground','workground' => $value,'display' => 'true'));
|
|
if(!$aTmp[0]) {
|
|
continue;
|
|
}
|
|
$workground_menu[] = $aTmp[0];
|
|
}
|
|
}//if
|
|
#print_r($workground_menu);exit;
|
|
return $workground_menu;
|
|
}
|
|
}
|
|
|
|
//根据permission ID获得工作组ID
|
|
function wrokground($permission_id){
|
|
$sdf = $this->dump($permission_id);
|
|
$data = $this->getList('menu_id',array('menu_type' => 'workground','permission' => $sdf['addon']));
|
|
return $data;
|
|
}
|
|
|
|
|
|
//根据$_GET获得permission_id
|
|
|
|
function permissionId($get){
|
|
$menu_path = "app=".$get['app']."&ctl=".$get['ctl']."&act=".$get['act'];
|
|
$aData = $this->getList('*',array('menu_path' => $menu_path));
|
|
if(count($aData) > 1){
|
|
foreach($aData as $k => $row){
|
|
$addon = unserialize($row['addon']);
|
|
$flag = true;
|
|
foreach((array)$addon['url_params'] as $field => $val){
|
|
if($get[$field] != $val){
|
|
$flag = false;
|
|
break;
|
|
}
|
|
}
|
|
if($flag){
|
|
if($row['disabled'] === 'true')
|
|
{
|
|
echo "链接不可用";
|
|
exit;
|
|
}
|
|
$permission = $row['permission'];
|
|
$res_data = $this->getList('permission',array('menu_type' => 'permission','permission' => $permission,'disabled' => 'false'));
|
|
$permission_data = $res_data[0]['permission'];
|
|
|
|
}
|
|
}
|
|
}elseif(count($aData) == 1){
|
|
if($aData[0]['disabled'] === 'true')
|
|
{
|
|
echo "链接不可用";
|
|
exit;
|
|
}
|
|
$permission = $aData[0]['permission'];
|
|
$per_data = $this->getList('permission',array('menu_type' => 'permission','permission' => $permission,'disabled' => 'false'));
|
|
$permission_data = $per_data[0]['permission'];
|
|
}//
|
|
else{
|
|
$permission_data = '0';
|
|
}
|
|
return $permission_data;
|
|
}
|
|
|
|
// //根据permission ID获得子菜单
|
|
|
|
function get_menu($permission_id, $need_group = false){
|
|
#$sdf = $this->dump($permission_id);
|
|
$data = $this->getList('*',array('menu_type' => 'menu','permission' => $permission_id,'display' =>'true'));
|
|
// 支持批量查询,并返回的时候按permission_id进行分组
|
|
if ($need_group) {
|
|
$dateArr = [];
|
|
foreach ($data as $k => $v) {
|
|
if (!isset($dateArr[$v['permission']])) {
|
|
$dateArr[$v['permission']] = [];
|
|
}
|
|
$dateArr[$v['permission']][] = $v;
|
|
}
|
|
unset($data);
|
|
return $dateArr;
|
|
}
|
|
return $data;
|
|
}
|
|
function get_current_workground($get){
|
|
$menu_path = "app=".$get['app']."&ctl=".$get['ctl']."&act=".$get['act'];
|
|
if(!$menu_path) return;
|
|
$aData = $this->getList('*',array('menu_type' => 'menu','menu_path' => $menu_path));
|
|
if(count($aData) == 0) return null;
|
|
if(count($aData) > 1){
|
|
foreach($aData as $k => $row){
|
|
$addon = unserialize($row['addon']);
|
|
$flag = true;
|
|
foreach((array)$addon['url_params'] as $field => $val){
|
|
if($get[$field] != $val){
|
|
$flag = false;
|
|
break;
|
|
}
|
|
}
|
|
if($flag){
|
|
$workground = $aData[$k]['workground'];
|
|
break;
|
|
}
|
|
}
|
|
}else{
|
|
$workground = $aData[0]['workground'];
|
|
}
|
|
|
|
|
|
$rows = $this->getList('*',array('menu_type'=>'workground','workground' => $workground));
|
|
return $rows[0];
|
|
}
|
|
|
|
//控制面板中属于同一panelgroup
|
|
|
|
function adminpanel($aper){
|
|
$admin_data = array();
|
|
$panelgroups = $this->getList('*',array('menu_type' => 'panelgroup','disabled' => 'false'));
|
|
$aData = $this->getList('*',array('menu_type' => 'adminpanel','permission' => $aper, 'display' => 'true', 'disabled' => 'false'));
|
|
foreach($panelgroups as $key=>$val){
|
|
$menu_title = $val['app_id'].'_'.$val['addon'];
|
|
$admin_data[$key]['menugroup'] = $val['menu_title'];
|
|
foreach($aData as $row){
|
|
if(strpos($row['menu_title'],$menu_title) !==false){
|
|
$aTmp = explode(':',$row['menu_title']);
|
|
$row['menu_title'] = $aTmp[1];
|
|
$admin_data[$key]['menu'][] = $row;
|
|
}
|
|
}
|
|
}
|
|
foreach($admin_data as $key=>$v){
|
|
if(!$v['menu']) unset($admin_data[$key]);
|
|
}
|
|
return $admin_data;
|
|
|
|
}
|
|
|
|
//获取menu的menuID,menugroupId,workgroundId
|
|
|
|
function get_allid($get){
|
|
$get['act'] = $get['act']?$get['act']:'index';
|
|
$menu_path = "app=".$get['app']."&ctl=".$get['ctl']."&act=".$get['act'];
|
|
if(!$menu_path) return;
|
|
$aData = $this->getList('*',array('menu_type'=>'menu','menu_path' => $menu_path));
|
|
if(count($aData) == 0) return null;
|
|
if(count($aData) > 1){
|
|
foreach($aData as $k => $row){
|
|
$addon = unserialize($row['addon']);
|
|
if(!isset($addon['url_params'])){
|
|
$menu['menu_id'] = $row['menu_id'];
|
|
continue;
|
|
}
|
|
$flag = true;
|
|
foreach((array)$addon['url_params'] as $field => $val){
|
|
if($get[$field] != $val){
|
|
$flag = false;
|
|
break;
|
|
}
|
|
}
|
|
if($flag){
|
|
$menu['menu_id'] = $aData[$k]['menu_id'];
|
|
break;
|
|
}
|
|
}
|
|
if($aData[$k]['workground']){
|
|
$workground_data = $this->getList('menu_id',array('menu_type' => 'workground','workground' => $aData[$k]['workground']));
|
|
}
|
|
else{
|
|
$workground_data = null;
|
|
}
|
|
$menu['workground_id'] = $workground_data[0]['menu_id'];
|
|
|
|
}else{
|
|
$menu['menu_id'] = $aData[0]['menu_id'];
|
|
if($aData[0]['workground']){
|
|
$workground_data = $this->getList('menu_id',array('menu_type' => 'workground','workground' => $aData[0]['workground']));
|
|
}
|
|
else{
|
|
$workground_data = null;
|
|
}
|
|
$menu['workground_id'] = $workground_data[0]['menu_id'];
|
|
}
|
|
return $menu;
|
|
}
|
|
|
|
}
|