CommonController.class.php 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  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. * [Is_Login 登录校验]
  74. * @author Devil
  75. * @blog http://gong.gg/
  76. * @version 0.0.1
  77. * @datetime 2016-12-03T12:42:35+0800
  78. */
  79. protected function Is_Login()
  80. {
  81. if(empty($_SESSION['admin']))
  82. {
  83. $this->error(L('common_login_invalid'), U('Admin/Admin/LoginInfo'));
  84. } else {
  85. // 用户
  86. $this->admin = I('session.admin');
  87. }
  88. }
  89. /**
  90. * [ViewInit 视图初始化]
  91. * @author Devil
  92. * @blog http://gong.gg/
  93. * @version 0.0.1
  94. * @datetime 2016-12-03T12:30:06+0800
  95. */
  96. public function ViewInit()
  97. {
  98. // 主题
  99. $default_theme = C('DEFAULT_THEME');
  100. $this->assign('default_theme', $default_theme);
  101. // 控制器静态文件状态css,js
  102. $module_css = MODULE_NAME.DS.$default_theme.DS.'Css'.DS.CONTROLLER_NAME.'.css';
  103. $this->assign('module_css', file_exists(ROOT_PATH.'Public'.DS.$module_css) ? $module_css : '');
  104. $module_js = MODULE_NAME.DS.$default_theme.DS.'Js'.DS.CONTROLLER_NAME.'.js';
  105. $this->assign('module_js', file_exists(ROOT_PATH.'Public'.DS.$module_js) ? $module_js : '');
  106. // 权限菜单
  107. $this->assign('left_menu', $this->left_menu);
  108. // 用户
  109. $this->assign('admin', $this->admin);
  110. // 图片host地址
  111. $this->assign('image_host', C('IMAGE_HOST'));
  112. }
  113. /**
  114. * [PowerInit 权限初始化]
  115. * @author Devil
  116. * @blog http://gong.gg/
  117. * @version 0.0.1
  118. * @datetime 2016-12-19T22:41:20+0800
  119. */
  120. private function PowerInit()
  121. {
  122. // 基础参数
  123. $admin_id = isset($_SESSION['admin']['id']) ? intval($_SESSION['admin']['id']) : 0;
  124. $role_id = isset($_SESSION['admin']['role_id']) ? intval($_SESSION['admin']['role_id']) : 0;
  125. // 读取缓存数据
  126. $this->left_menu = S(C('cache_admin_left_menu_key').$admin_id);
  127. $this->power = S(C('cache_admin_power_key').$admin_id);
  128. // 缓存没数据则从数据库重新读取
  129. if(($role_id > 0 || $admin_id == 1) && empty($this->left_menu))
  130. {
  131. // 获取一级数据
  132. $p = M('Power');
  133. if($admin_id == 1)
  134. {
  135. $field = array('id', 'name', 'control', 'action', 'is_show', 'icon');
  136. $this->left_menu = $p->where(array('pid' => 0))->field($field)->order('sort')->select();
  137. } else {
  138. $field = array('p.id', 'p.name', 'p.control', 'p.action', 'p.is_show', 'p.icon');
  139. $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();
  140. }
  141. // 有数据,则处理子级数据
  142. if(!empty($this->left_menu))
  143. {
  144. foreach($this->left_menu as $k=>$v)
  145. {
  146. // 权限
  147. $this->power[$v['id']] = strtolower($v['control'].'_'.$v['action']);
  148. // 获取子权限
  149. if($admin_id == 1)
  150. {
  151. $item = $p->where(array('pid' => $v['id']))->field($field)->order('sort')->select();
  152. } else {
  153. $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();
  154. }
  155. // 权限列表
  156. if(!empty($item))
  157. {
  158. foreach($item as $ks=>$vs)
  159. {
  160. // 权限
  161. $this->power[$vs['id']] = strtolower($vs['control'].'_'.$vs['action']);
  162. // 是否显示视图
  163. if($vs['is_show'] == 0)
  164. {
  165. unset($item[$ks]);
  166. }
  167. }
  168. }
  169. // 是否显示视图
  170. if($v['is_show'] == 1)
  171. {
  172. // 子级
  173. $this->left_menu[$k]['item'] = $item;
  174. } else {
  175. unset($this->left_menu[$k]);
  176. }
  177. }
  178. }
  179. S(C('cache_admin_left_menu_key').$admin_id, $this->left_menu);
  180. S(C('cache_admin_power_key').$admin_id, $this->power);
  181. }
  182. }
  183. /**
  184. * [Is_Power 是否有权限]
  185. * @author Devil
  186. * @blog http://gong.gg/
  187. * @version 0.0.1
  188. * @datetime 2016-12-20T19:18:29+0800
  189. */
  190. protected function Is_Power()
  191. {
  192. // 不需要校验权限的方法
  193. $unwanted_power = array('getnodeson');
  194. if(!in_array(strtolower(ACTION_NAME), $unwanted_power))
  195. {
  196. // 角色组权限列表校验
  197. if(!in_array(strtolower(CONTROLLER_NAME.'_'.ACTION_NAME), $this->power))
  198. {
  199. $this->error(L('common_there_is_no_power'));
  200. }
  201. }
  202. }
  203. /**
  204. * [GetClassList 获取班级列表,二级]
  205. * @author Devil
  206. * @blog http://gong.gg/
  207. * @version 0.0.1
  208. * @datetime 2016-12-30T13:26:00+0800
  209. * @return [array] [班级列表]
  210. */
  211. protected function GetClassList()
  212. {
  213. $m = M('Class');
  214. $data = $m->field(array('id', 'name'))->where(array('is_enable'=>1, 'pid'=>0))->select();
  215. if(!empty($data))
  216. {
  217. foreach($data as $k=>$v)
  218. {
  219. $data[$k]['item'] = $m->field(array('id', 'name'))->where(array('is_enable'=>1, 'pid'=>$v['id']))->select();
  220. }
  221. }
  222. return $data;
  223. }
  224. /**
  225. * [GetRoomList 获取教室列表,二级]
  226. * @author Devil
  227. * @blog http://gong.gg/
  228. * @version 0.0.1
  229. * @datetime 2016-12-30T13:26:00+0800
  230. * @return [array] [班级列表]
  231. */
  232. protected function GetRoomList()
  233. {
  234. $m = M('Room');
  235. $data = $m->field(array('id', 'name'))->where(array('is_enable'=>1, 'pid'=>0))->select();
  236. if(!empty($data))
  237. {
  238. foreach($data as $k=>$v)
  239. {
  240. $data[$k]['item'] = $m->field(array('id', 'name'))->where(array('is_enable'=>1, 'pid'=>$v['id']))->select();
  241. }
  242. }
  243. return $data;
  244. }
  245. /**
  246. * [MyConfigSave 配置数据保存]
  247. * @author Devil
  248. * @blog http://gong.gg/
  249. * @version 0.0.1
  250. * @datetime 2017-01-02T23:08:19+0800
  251. */
  252. protected function MyConfigSave()
  253. {
  254. // 是否ajax请求
  255. if(!IS_AJAX)
  256. {
  257. $this->error(L('common_unauthorized_access'));
  258. }
  259. // 参数校验
  260. if(empty($_POST))
  261. {
  262. $this->error(L('common_param_error'));
  263. }
  264. // 循环保存数据
  265. $success = 0;
  266. $c = M('Config');
  267. // 不实例化的字段
  268. $no_all = array(
  269. 'home_footer_info',
  270. 'home_site_close_reason',
  271. 'home_email_user_reg',
  272. 'home_email_user_forget_pwd',
  273. 'home_email_user_student_binding',
  274. 'home_email_user_email_binding',
  275. );
  276. // 开始更新数据
  277. foreach($_POST as $k=>$v)
  278. {
  279. if(!in_array($k, $no_all))
  280. {
  281. $v = I($k);
  282. }
  283. if($c->where(array('only_tag'=>$k))->save(array('value'=>$v, 'upd_time'=>time())))
  284. {
  285. $success++;
  286. }
  287. }
  288. if($success > 0)
  289. {
  290. // 配置信息更新
  291. MyConfigInit(1);
  292. $this->ajaxReturn(L('common_operation_edit_success').'['.$success.']');
  293. } else {
  294. $this->ajaxReturn(L('common_operation_edit_error'), -100);
  295. }
  296. }
  297. }
  298. ?>