383 lines
13 KiB
PHP
Executable File
383 lines
13 KiB
PHP
Executable File
<?php
|
|
|
|
namespace Admin\Controller;
|
|
use Gy_Library\GyListController;
|
|
use Gy_Library\DBCont;
|
|
|
|
class NodeController extends GyListController {
|
|
|
|
public function index($status = DBCont::NORMAL_STATUS, $level = DBCont::LEVEL_ACTION){
|
|
// 搜索
|
|
$keyword = I('keyword', '', 'string');
|
|
if(!empty($keyword)){
|
|
$node_ent = D('Node')->getByName($keyword);
|
|
$map['pid'] = $node_ent['id'];
|
|
}
|
|
|
|
$get_data = I('get.');
|
|
if(isset($get_data['key']) && $get_data['word']){
|
|
switch($get_data['key']){
|
|
case 'controller':
|
|
$s_map['level'] = DBCont::LEVEL_CONTROLLER;
|
|
$s_map['name'] = $get_data['word'];
|
|
$s_map['status'] = DBCont::NORMAL_STATUS;
|
|
$pids = D('Node')->where($s_map)->getField('id', true);
|
|
$map['pid'] = array('in', $pids);
|
|
break;
|
|
default:
|
|
$map[$get_data['key']] = array('like', '%' . $get_data['word'] . '%');
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
$map['level'] = $level;
|
|
$map['status'] = $status;
|
|
|
|
$node_model = D('Node');
|
|
$count = $node_model->getListForCount($map);
|
|
$per_page = C('ADMIN_PER_PAGE_NUM', null, false);
|
|
if($per_page === false){
|
|
$page = new \Gy_Library\GyPage($count);
|
|
}
|
|
else{
|
|
$page = new \Gy_Library\GyPage($count, $per_page);
|
|
}
|
|
|
|
$data_list = $node_model->getListForPage($map, $page->nowPage, $page->listRows, 'id desc');
|
|
|
|
foreach($data_list as &$v){
|
|
$menu_ent = D('Menu')->getOne($v['menu_id']);
|
|
$v['menu'] = $menu_ent['title'];
|
|
|
|
$controller_ent = D('Node')->getOne($v['pid']);
|
|
$v['controller'] = $controller_ent['name'];
|
|
|
|
$module_ent = D('Node')->getOne($controller_ent['pid']);
|
|
$v['module'] = $module_ent['name'];
|
|
}
|
|
|
|
|
|
// 设置Tab导航数据列表
|
|
$status_list = DBCont::getStatusList();
|
|
foreach ($status_list as $key => $val) {
|
|
$tab_list[$key]['title'] = $val;
|
|
$tab_list[$key]['href'] = U('index', array('status' => $key));
|
|
}
|
|
|
|
// 使用Builder快速建立列表页面。
|
|
$builder = new \Qscmf\Builder\ListBuilder();
|
|
|
|
$builder = $builder->setMetaTitle('节点管理') // 设置页面标题
|
|
->addTopButton('addnew') // 添加新增按钮
|
|
->addTopButton('self', array('title' => '权限点检查', 'href' => U('authCheck')));
|
|
switch($status){
|
|
case DBCont::NORMAL_STATUS;
|
|
$builder = $builder->addTopButton('forbid'); // 添加禁用按钮
|
|
break;
|
|
case DBCont::FORBIDDEN_STATUS;
|
|
$builder = $builder->addTopButton('resume'); // 添加启用按钮
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
$builder->addTopButton('delete') // 添加删除按钮
|
|
->addSearchItem('', 'select_text', '搜索内容', array('name'=>'节点名称', 'controller' => '控制器', 'title' => '节点标题'))
|
|
->setNID(28)
|
|
->setTabNav($tab_list, $status) // 设置页面Tab导航
|
|
->addTableColumn('id', 'ID')
|
|
->addTableColumn('name', '节点名称')
|
|
->addTableColumn('title', '节点标题')
|
|
->addTableColumn('sort', '排序')
|
|
->addTableColumn('menu', '菜单')
|
|
->addTableColumn('controller', '控制器')
|
|
->addTableColumn('module', '模块')
|
|
->addTableColumn('right_button', '操作', 'btn')
|
|
->setTableDataList($data_list) // 数据列表
|
|
->setTableDataPage($page->show()) // 数据列表分页
|
|
->addRightButton('edit') // 添加编辑按钮
|
|
->addRightButton('forbid') // 添加禁用/启用按钮
|
|
->addRightButton('delete') // 添加删除按钮
|
|
->display();
|
|
}
|
|
|
|
public function add(){
|
|
if (IS_POST) {
|
|
parent::autoCheckToken();
|
|
$data = I('post.');
|
|
|
|
$pid = $this->_handleController();
|
|
|
|
$data['pid'] = $pid;
|
|
$data['level'] = DBCont::LEVEL_ACTION;
|
|
|
|
$node_model = D('Node');
|
|
if(!$node_model->create($data)){
|
|
$this->error($node_model->getError());
|
|
}
|
|
$r = $node_model->add();
|
|
if($r !== false){
|
|
sysLogs('新增节点ID:' . $r);
|
|
$this->success(l('add') . l('success'), U(CONTROLLER_NAME . '/index'));
|
|
}
|
|
else{
|
|
$this->error($node_model->getError());
|
|
}
|
|
}
|
|
else {
|
|
// 使用FormBuilder快速建立表单页面。
|
|
$menu_model = new \Common\Model\MenuModel();
|
|
|
|
$menu_list = $menu_model->getMenuListGroupByType();
|
|
$this->assign('menu_list_json', json_encode($menu_list));
|
|
|
|
$builder = new \Qscmf\Builder\FormBuilder();
|
|
|
|
$data_list = array(
|
|
"status"=>1, );
|
|
|
|
if($data_list){
|
|
$builder->setFormData($data_list);
|
|
}
|
|
|
|
$builder->setMetaTitle('新增节点') //设置页面标题
|
|
->setNID(28)
|
|
->setPostUrl(U('add')) //设置表单提交地址
|
|
->addFormItem('name', 'text', '名称')
|
|
->addFormItem('title', 'text', '标题')
|
|
->addFormItem('sort', 'text', '排序')
|
|
->addFormItem('icon', 'text', 'icon')
|
|
->addFormItem('remark', 'text', '备注')
|
|
->addFormItem('controller', 'text', '控制器')
|
|
->addFormItem('module', 'text', '模块')
|
|
->addFormItem('menu_type', 'select', '菜单类型', '', array(), '', 'id=cmbType')
|
|
->addFormItem('menu_id', 'select', '菜单', '', array(), '', 'id=cmbMenu')
|
|
->addFormItem('status', 'select', '状态', '', DBCont::getStatusList())
|
|
->setExtraHtml($this->fetch('Node/add_script'))
|
|
->display();
|
|
}
|
|
}
|
|
|
|
public function edit($id){
|
|
if (IS_POST) {
|
|
parent::autoCheckToken();
|
|
$data = I('post.');
|
|
|
|
$node_model = new \Common\Model\NodeModel();
|
|
$node_ent = $node_model->getOne($data['id']);
|
|
|
|
$data = array_merge($node_ent, $data);
|
|
|
|
$pid = $this->_handleController();
|
|
|
|
$data['pid'] = $pid;
|
|
if(!$node_model->create($data)){
|
|
|
|
$this->error($node_model->getError());
|
|
}
|
|
|
|
$r = $node_model->edit();
|
|
if($r !== false){
|
|
sysLogs('修改节点ID:' . $data['post.id']);
|
|
$this->success('修改成功', U(CONTROLLER_NAME . '/index'));
|
|
}
|
|
else{
|
|
$this->error($node_model->getError());
|
|
}
|
|
} else {
|
|
$node_ent = D('Node')->getOne($id);
|
|
$controller_ent = D('Node')->getOne($node_ent['pid']);
|
|
$module_ent = D('Node')->getOne($controller_ent['pid']);
|
|
$node_ent['controller'] = $controller_ent['name'];
|
|
$node_ent['module'] = $module_ent['name'];
|
|
|
|
$menu_model = new \Common\Model\MenuModel();
|
|
|
|
$cur_menu = $menu_model->find($node_ent['menu_id']);
|
|
$menu_list = $menu_model->getMenuListGroupByType();
|
|
$this->assign('menu_list_json', json_encode($menu_list));
|
|
$this->assign('cur_menu', $cur_menu);
|
|
|
|
|
|
// 使用FormBuilder快速建立表单页面。
|
|
$builder = new \Qscmf\Builder\FormBuilder();
|
|
$builder->setMetaTitle('编辑用户') // 设置页面标题
|
|
->setNID(28)
|
|
->setPostUrl(U('edit')) //设置表单提交地址
|
|
->addFormItem('id', 'hidden', 'ID')
|
|
->addFormItem('name', 'text', '名称')
|
|
->addFormItem('title', 'text', '标题')
|
|
->addFormItem('sort', 'text', '排序')
|
|
->addFormItem('icon', 'text', 'icon')
|
|
->addFormItem('remark', 'text', '备注')
|
|
->addFormItem('controller', 'text', '控制器')
|
|
->addFormItem('module', 'text', '模块')
|
|
->addFormItem('menu_type', 'select', '菜单类型', '', array(), '', 'id=cmbType')
|
|
->addFormItem('menu_id', 'select', '菜单', '', array(), '', 'id=cmbMenu')
|
|
->addFormItem('status', 'select', '状态', '', DBCont::getStatusList())
|
|
->setFormData($node_ent)
|
|
->setExtraHtml($this->fetch('Node/edit_script'))
|
|
->display();
|
|
}
|
|
}
|
|
|
|
public function forbid(){
|
|
$ids = I('ids');
|
|
if(!$ids){
|
|
$this->error('请选择要禁用的数据');
|
|
}
|
|
$r = parent::_forbid($ids);
|
|
if($r !== false){
|
|
sysLogs('Node id: ' . $ids . ' 禁用');
|
|
$this->success('禁用成功', U(CONTROLLER_NAME . '/index'));
|
|
}
|
|
else{
|
|
$this->error($this->_getError());
|
|
}
|
|
}
|
|
|
|
public function resume(){
|
|
$ids = I('ids');
|
|
if(!$ids){
|
|
$this->error('请选择要启用的数据');
|
|
}
|
|
$r = parent::_resume($ids);
|
|
if($r !== false){
|
|
sysLogs('Node id: ' . $ids . ' 启用');
|
|
$this->success('启用成功', U(CONTROLLER_NAME . '/index'));
|
|
}
|
|
else{
|
|
$this->error($this->_getError());
|
|
}
|
|
|
|
}
|
|
|
|
public function delete(){
|
|
$ids = I('ids');
|
|
if(!$ids){
|
|
$this->error('请选择要删除的数据');
|
|
}
|
|
$r = parent::_del($ids);
|
|
if($r === false){
|
|
$this->error($this->_getError());
|
|
}
|
|
else{
|
|
sysLogs('Node id: ' . $ids . ' 删除');
|
|
$this->success('删除成功', U(MODULE_NAME . '/' . CONTROLLER_NAME . '/index'));
|
|
}
|
|
}
|
|
|
|
private function _handleController(){
|
|
//控制器必填
|
|
if(!I('post.controller')){
|
|
$this->error('控制器不能为空');
|
|
}
|
|
|
|
$controller = I('post.controller');
|
|
|
|
if(!isEnglish($controller)){
|
|
$this->error('必须填写英文');
|
|
}
|
|
|
|
$node = new \Common\Model\NodeModel();
|
|
|
|
$controller_map = array();
|
|
$controller_map['name'] = $controller;
|
|
$controller_map['level'] = DBCont::LEVEL_CONTROLLER;
|
|
|
|
$controller_node = $node->getNode($controller_map);
|
|
if(!$controller_node){
|
|
//控制器不存在,自动完成代码添加,并检查模块,如没有也一并添加
|
|
|
|
//检查是否有输入模块名
|
|
if(!I('post.module')){
|
|
$this->error('新建控制器时,必须填写模块名!');
|
|
}
|
|
|
|
$module = I('post.module');
|
|
|
|
if(!isEnglish($module)){
|
|
$this->error('必须填写英文');
|
|
}
|
|
|
|
$module_map = array();
|
|
$module_map['name'] = $module;
|
|
$module_map['level'] = DBCont::LEVEL_MODULE;
|
|
|
|
$module_node = $node->getNode($module_map);
|
|
if(!$module_node){
|
|
//模块不存在,自动创建模块代码
|
|
|
|
$module_node['id'] = $this->_insertModule($module);
|
|
}
|
|
|
|
$controller_node['id'] = $this->_insertController($module, $module_node['id'], $controller);
|
|
}
|
|
return $controller_node['id'];
|
|
}
|
|
|
|
|
|
private function _insertModule($module){
|
|
//GyBuild::buildAppDir(ucfirst($module));
|
|
|
|
$node = new \Common\Model\NodeModel();
|
|
$module_node = array();
|
|
|
|
$module_node['name'] = $module;
|
|
$module_node['title'] = $module;
|
|
$module_node['status'] = DBCont::NORMAL_STATUS;
|
|
$module_node['pid'] = 0;
|
|
$module_node['level'] = DBCont::LEVEL_MODULE;
|
|
|
|
if(!$node->create($module_node)){
|
|
$this->error($node->getError());
|
|
}
|
|
|
|
$module_node['id'] = $node->add();
|
|
if(!$module_node['id']){
|
|
$this->error($node->getError());
|
|
}
|
|
else{
|
|
return $module_node['id'];
|
|
}
|
|
}
|
|
|
|
private function _insertController($module, $module_id, $controller){
|
|
//GyBuild::buildController(ucfirst($module), ucfirst($controller));
|
|
|
|
$node = new \Common\Model\NodeModel();
|
|
|
|
$controller_node = array();
|
|
$controller_node['name'] = $controller;
|
|
$controller_node['title'] = $controller;
|
|
$controller_node['status'] = DBCont::NORMAL_STATUS;
|
|
$controller_node['pid'] = $module_id;
|
|
$controller_node['level'] = DBCont::LEVEL_CONTROLLER;
|
|
|
|
if(!$node->create($controller_node)){
|
|
$this->error($node->getError());
|
|
}
|
|
|
|
$controller_node['id'] = $node->add();
|
|
if(!$controller_node['id']){
|
|
$this->error($node->getError());
|
|
}
|
|
else{
|
|
return $controller_node['id'];
|
|
}
|
|
}
|
|
|
|
public function authCheck(){
|
|
|
|
if(IS_POST){
|
|
$check_module = I('post.module');
|
|
$this->assign('check_module', $check_module);
|
|
}
|
|
|
|
$module_list = D('Node')->getModuleList();
|
|
$this->assign('module_list', $module_list);
|
|
$this->display();
|
|
}
|
|
}
|