CommonController.class.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. <?php
  2. namespace Admin\Controller;
  3. use Think\Controller;
  4. /**
  5. * 管理员
  6. * @author Devil
  7. * @blog http://gong.gg/
  8. * @version 0.0.1
  9. * @datetime 2016-12-01T21:51:08+0800
  10. */
  11. class CommonController extends Controller
  12. {
  13. // 用户
  14. protected $user;
  15. // 权限
  16. protected $power;
  17. // 左边权限菜单
  18. protected $left_menu;
  19. /**
  20. * [__construt 构造方法]
  21. * @author Devil
  22. * @blog http://gong.gg/
  23. * @version 0.0.1
  24. * @datetime 2016-12-03T12:29:53+0800
  25. * @param [string] $msg [提示信息]
  26. * @param [int] $code [状态码]
  27. * @param [mixed] $data [数据]
  28. */
  29. protected function _initialize()
  30. {
  31. // 配置信息初始化
  32. MyConfigInit();
  33. // 权限
  34. $this->PowerInit();
  35. // 视图初始化
  36. $this->ViewInit();
  37. }
  38. /**
  39. * [ajaxReturn 重写ajax返回方法]
  40. * @author Devil
  41. * @blog http://gong.gg/
  42. * @version 0.0.1
  43. * @datetime 2016-12-07T22:03:40+0800
  44. * @param [string] $msg [提示信息]
  45. * @param [int] $code [状态码]
  46. * @param [mixed] $data [数据]
  47. * @return [json] [json数据]
  48. */
  49. protected function ajaxReturn($msg = '', $code = 0, $data = '')
  50. {
  51. // ajax的时候,success和error错误由当前方法接收
  52. if(IS_AJAX)
  53. {
  54. if(isset($msg['info']))
  55. {
  56. // success模式下code=0, error模式下code参数-1
  57. $result = array('msg'=>$msg['info'], 'code'=>-1, 'data'=>'');
  58. }
  59. }
  60. // 默认情况下,手动调用当前方法
  61. if(empty($result))
  62. {
  63. $result = array('msg'=>$msg, 'code'=>$code, 'data'=>$data);
  64. }
  65. // 错误情况下,防止提示信息为空
  66. if($result['code'] != 0 && empty($result['msg']))
  67. {
  68. $result['msg'] = L('common_operation_error');
  69. }
  70. exit(json_encode($result));
  71. }
  72. /*
  73. * 设置分导航参数
  74. * @param object $page 导航连接对象
  75. * @param string|array $config 参数设置
  76. */
  77. function page_config($page, $config = "PAGE_CONFIG"){
  78. if(!is_object($page)) return $page;
  79. if(method_exists($page,'setConfig')){
  80. $page ->lastSuffix =false;
  81. if(is_string($config)) $config = C($config);
  82. if(is_array($config)){
  83. foreach ($config as $key => $val){
  84. $page->setConfig($key,$val);
  85. }
  86. }
  87. }
  88. return $page;
  89. }
  90. /**
  91. * [Is_Login 登录校验]
  92. * @author Devil
  93. * @blog http://gong.gg/
  94. * @version 0.0.1
  95. * @datetime 2016-12-03T12:42:35+0800
  96. */
  97. protected function Is_Login()
  98. {
  99. if(empty($_SESSION['admin']))
  100. {
  101. $this->error(L('common_login_invalid'), U('Admin/Admin/LoginInfo'));
  102. } else {
  103. // 用户
  104. $this->admin = I('session.admin');
  105. }
  106. }
  107. /**
  108. * [ViewInit 视图初始化]
  109. * @author Devil
  110. * @blog http://gong.gg/
  111. * @version 0.0.1
  112. * @datetime 2016-12-03T12:30:06+0800
  113. */
  114. public function ViewInit()
  115. {
  116. // 主题
  117. $default_theme = C('DEFAULT_THEME');
  118. $this->assign('default_theme', $default_theme);
  119. // 控制器静态文件状态css,js
  120. $module_css = MODULE_NAME.DS.$default_theme.DS.'Css'.DS.CONTROLLER_NAME.'.css';
  121. $this->assign('module_css', file_exists(ROOT_PATH.'Public'.DS.$module_css) ? $module_css : '');
  122. $module_js = MODULE_NAME.DS.$default_theme.DS.'Js'.DS.CONTROLLER_NAME.'.js';
  123. $this->assign('module_js', file_exists(ROOT_PATH.'Public'.DS.$module_js) ? $module_js : '');
  124. // 权限菜单
  125. $this->assign('left_menu', $this->left_menu);
  126. // 用户
  127. $this->assign('admin', $this->admin);
  128. // 图片host地址
  129. $this->assign('image_host', C('IMAGE_HOST'));
  130. }
  131. /**
  132. * [PowerInit 权限初始化]
  133. * @author Devil
  134. * @blog http://gong.gg/
  135. * @version 0.0.1
  136. * @datetime 2016-12-19T22:41:20+0800
  137. */
  138. private function PowerInit()
  139. {
  140. // 基础参数
  141. $admin_id = isset($_SESSION['admin']['id']) ? intval($_SESSION['admin']['id']) : 0;
  142. $role_id = isset($_SESSION['admin']['role_id']) ? intval($_SESSION['admin']['role_id']) : 0;
  143. // 读取缓存数据
  144. $this->left_menu = S(C('cache_admin_left_menu_key').$admin_id);
  145. $this->power = S(C('cache_admin_power_key').$admin_id);
  146. // 缓存没数据则从数据库重新读取
  147. if(($role_id > 0 || $admin_id == 1) && empty($this->left_menu))
  148. {
  149. // 获取一级数据
  150. $p = M('Power');
  151. if($admin_id == 1)
  152. {
  153. $field = array('id', 'name', 'control', 'action', 'is_show', 'icon');
  154. $this->left_menu = $p->where(array('pid' => 0))->field($field)->order('sort')->select();
  155. } else {
  156. $field = array('p.id', 'p.name', 'p.control', 'p.action', 'p.is_show', 'p.icon');
  157. $this->left_menu = $p->alias('p')->join('__ROLE_POWER__ AS rp ON p.id = rp.power_id')->where(array('rp.role_id' => $role_id, 'p.pid' => 0))->field($field)->order('p.sort')->select();
  158. }
  159. // 有数据,则处理子级数据
  160. if(!empty($this->left_menu))
  161. {
  162. foreach($this->left_menu as $k=>$v)
  163. {
  164. // 权限
  165. $this->power[$v['id']] = strtolower($v['control'].'_'.$v['action']);
  166. // 获取子权限
  167. if($admin_id == 1)
  168. {
  169. $item = $p->where(array('pid' => $v['id']))->field($field)->order('sort')->select();
  170. } else {
  171. $item = $p->alias('p')->join('__ROLE_POWER__ AS rp ON p.id = rp.power_id')->where(array('rp.role_id' => $role_id, 'p.pid' => $v['id']))->field($field)->order('p.sort')->select();
  172. }
  173. // 权限列表
  174. if(!empty($item))
  175. {
  176. foreach($item as $ks=>$vs)
  177. {
  178. // 权限
  179. $this->power[$vs['id']] = strtolower($vs['control'].'_'.$vs['action']);
  180. // 是否显示视图
  181. if($vs['is_show'] == 0)
  182. {
  183. unset($item[$ks]);
  184. }
  185. }
  186. }
  187. // 是否显示视图
  188. if($v['is_show'] == 1)
  189. {
  190. // 子级
  191. $this->left_menu[$k]['item'] = $item;
  192. } else {
  193. unset($this->left_menu[$k]);
  194. }
  195. }
  196. }
  197. S(C('cache_admin_left_menu_key').$admin_id, $this->left_menu);
  198. S(C('cache_admin_power_key').$admin_id, $this->power);
  199. }
  200. }
  201. /**
  202. * [Is_Power 是否有权限]
  203. * @author Devil
  204. * @blog http://gong.gg/
  205. * @version 0.0.1
  206. * @datetime 2016-12-20T19:18:29+0800
  207. */
  208. protected function Is_Power()
  209. {
  210. // 不需要校验权限的方法
  211. $unwanted_power = array('getnodeson');
  212. if(!in_array(strtolower(ACTION_NAME), $unwanted_power))
  213. {
  214. // 角色组权限列表校验
  215. if(!in_array(strtolower(CONTROLLER_NAME.'_'.ACTION_NAME), $this->power))
  216. {
  217. $this->error(L('common_there_is_no_power'));
  218. }
  219. }
  220. }
  221. /**
  222. * [GetClassList 获取班级列表,二级]
  223. * @author Devil
  224. * @blog http://gong.gg/
  225. * @version 0.0.1
  226. * @datetime 2016-12-30T13:26:00+0800
  227. * @return [array] [班级列表]
  228. */
  229. protected function GetClassList()
  230. {
  231. $m = M('Class');
  232. $data = $m->field(array('id', 'name'))->where(array('is_enable'=>1, 'pid'=>0))->select();
  233. if(!empty($data))
  234. {
  235. foreach($data as $k=>$v)
  236. {
  237. $data[$k]['item'] = $m->field(array('id', 'name'))->where(array('is_enable'=>1, 'pid'=>$v['id']))->select();
  238. }
  239. }
  240. return $data;
  241. }
  242. /**
  243. * [GetRoomList 获取教室列表,二级]
  244. * @author Devil
  245. * @blog http://gong.gg/
  246. * @version 0.0.1
  247. * @datetime 2016-12-30T13:26:00+0800
  248. * @return [array] [班级列表]
  249. */
  250. protected function GetRoomList()
  251. {
  252. $m = M('Room');
  253. $data = $m->field(array('id', 'name'))->where(array('is_enable'=>1, 'pid'=>0))->select();
  254. if(!empty($data))
  255. {
  256. foreach($data as $k=>$v)
  257. {
  258. $data[$k]['item'] = $m->field(array('id', 'name'))->where(array('is_enable'=>1, 'pid'=>$v['id']))->select();
  259. }
  260. }
  261. return $data;
  262. }
  263. /**
  264. * [MyConfigSave 配置数据保存]
  265. * @author Devil
  266. * @blog http://gong.gg/
  267. * @version 0.0.1
  268. * @datetime 2017-01-02T23:08:19+0800
  269. */
  270. protected function MyConfigSave()
  271. {
  272. // 是否ajax请求
  273. if(!IS_AJAX)
  274. {
  275. $this->error(L('common_unauthorized_access'));
  276. }
  277. // 参数校验
  278. if(empty($_POST))
  279. {
  280. $this->error(L('common_param_error'));
  281. }
  282. // 循环保存数据
  283. $success = 0;
  284. $c = M('Config');
  285. // 不实例化的字段
  286. $no_all = array(
  287. 'home_footer_info',
  288. 'home_site_close_reason',
  289. 'home_email_user_reg',
  290. 'home_email_user_forget_pwd',
  291. 'home_email_user_student_binding',
  292. 'home_email_user_email_binding',
  293. );
  294. // 开始更新数据
  295. foreach($_POST as $k=>$v)
  296. {
  297. if(!in_array($k, $no_all))
  298. {
  299. $v = I($k);
  300. }
  301. if($c->where(array('only_tag'=>$k))->save(array('value'=>$v, 'upd_time'=>time())))
  302. {
  303. $success++;
  304. }
  305. }
  306. if($success > 0)
  307. {
  308. // 配置信息更新
  309. MyConfigInit(1);
  310. $this->ajaxReturn(L('common_operation_edit_success').'['.$success.']');
  311. } else {
  312. $this->ajaxReturn(L('common_operation_edit_error'), -100);
  313. }
  314. }
  315. }
  316. ?>