CourseController.class.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. <?php
  2. namespace Admin\Controller;
  3. use Common\Controller\AdminController;
  4. class CourseController extends AdminController {
  5. public function __construct(){
  6. parent::__construct();
  7. }
  8. //课程列表
  9. public function index(){
  10. $sort = I('sort','1');
  11. $courseStatus = I('course_status','');
  12. $courseType = I('course_type','');
  13. $keyword = I('get.keyword','');
  14. $condition = array('is_delete'=>1,'course_source'=>1,'course_flag'=>1);
  15. $orderList = array(
  16. 1=>array('operate_dt desc','时间倒序',1),
  17. 2=>array('operate_dt asc','时间正序',2),
  18. 3=>array('course_join desc','加入量倒序',3),
  19. 4=>array('course_join asc','加入量倒序',4),
  20. );
  21. $statusList = array('全部状态',1=>'编辑中',2=>'未审核',3=>'已上架');
  22. $orderby = $orderList[$sort][0];
  23. if (!empty($keyword)){
  24. $condition['course_id|course_name'] = array('LIKE','%'.$keyword.'%');
  25. }
  26. if (!empty($courseStatus)){
  27. $condition['course_status'] = $courseStatus;
  28. }
  29. if (!empty($courseType)){
  30. $condition['course_type'] = $courseType;
  31. }
  32. $this->assign('sort',$sort);
  33. $this->assign('orderby',$orderby);
  34. $this->assign('keyword',$keyword);
  35. $this->assign('orderList',$orderList);
  36. $this->assign('statusList',$statusList);
  37. $this->assign('courseType',$courseType);
  38. $this->assign('courseStatus',$courseStatus);
  39. //课程类型
  40. $typeRes = M('CourseType')->where(array('is_delete'=>1))->field('type_id,type_name')->select();
  41. $typeList = array();
  42. foreach ($typeRes as $type){
  43. $typeList[$type['type_id']] = $type['type_name'];
  44. }
  45. $count = M('Course')->where($condition)->count();
  46. //分页
  47. $Page = new \Think\Page($count);
  48. $show = $Page->show();
  49. $courseList = M('Course')->where($condition)->order($orderby)->limit($Page->firstRow.','.$Page->listRows)->select();
  50. $this->assign('page',$show);
  51. $this->assign('list',$courseList);
  52. $this->assign('typeList',$typeList);
  53. $this->display();
  54. }
  55. //修改课程状态
  56. public function status(){
  57. $courseId = I('course_id','');
  58. $courseStatus = I('course_status','');
  59. if (empty($courseId) || $courseId<1000000){
  60. $this->error("课程ID错误",'/admin/course/index');
  61. }
  62. M('Course')->where(array('course_id'=>$courseId))->save(array('course_status'=>$courseStatus));
  63. $this->success('课程状态修改成功','/admin/course/index');
  64. }
  65. //删除课程
  66. public function del(){
  67. $courseId = I('course_id','');
  68. if (empty($courseId) || $courseId<1000000){
  69. $this->error("课程ID错误",'/admin/course/index');
  70. }
  71. $info = M('Course')->where(array('course_id'=>$courseId))->field('course_type,course_name')->find();
  72. M('CourseType')->where(array('type_id'=>$info['course_type']))->setDec('type_num');
  73. $res = M('TitleNum')->where(array('title_name'=>$info['course_name']))->field('title_id,title_num')->find();
  74. if ($res!=NULL && $res['title_num']>1){
  75. M('TitleNum')->where(array('title_id'=>$res['title_id']))->setDec('title_num');
  76. }else if($res!=NULL && $res['title_num']==1){
  77. M('TitleNum')->where(array('title_id'=>$res['title_id']))->delete();
  78. }
  79. M('Course')->where(array('course_id'=>$courseId))->delete();
  80. $this->success('课程删除成功','/admin/course/index');
  81. }
  82. //编辑课程
  83. public function edit(){
  84. $step = I('step','');
  85. $courseId = I('course_id','');
  86. if (empty($step)){
  87. $info = array();
  88. if (!empty($courseId)){
  89. $info = M('Course')->where(array('course_id'=>$courseId))->find();
  90. }
  91. $typeList = M('CourseType')->where(array('is_delete'=>1))->field('type_id,type_name')->select();
  92. $this->assign('info',$info);
  93. $this->assign('typeList',$typeList);
  94. $this->display();
  95. }else if($step==2){
  96. $courseType = I('course_type','');
  97. $courseName = I('course_name','');
  98. $courseIntro = I('course_intro','');
  99. if ( mb_strlen($courseName,'UTF8')>12){
  100. $this->error('课程名称小于30个汉字');
  101. }
  102. if ( mb_strlen($courseIntro,'UTF8')>300){
  103. $this->error('课程介绍小于300个汉字');
  104. }
  105. $res = M('Course')->where(array('course_name'=>$courseName,'is_delete'=>1))->field('course_id')->find();
  106. //新增
  107. if (empty($courseId) && $res!=NULL){
  108. $courseName = $this->getCourseName($courseName);
  109. }
  110. //更新
  111. if (!empty($courseId) && $courseId!=$res['course_id']){
  112. $courseName = $this->getCourseName($courseName);
  113. }
  114. if (empty($courseId)){
  115. $data=array('course_type'=>$courseType,'course_name'=>$courseName,'course_intro'=>$courseIntro,'operate_dt'=>time());
  116. M('Course')->add($data);
  117. M('CourseType')->where(array('type_id'=>$courseType))->setInc('type_num');
  118. $info = M('Course')->where($data)->find();
  119. $courseId=$info['course_id'];
  120. }else{
  121. M('Course')->where(array('course_id'=>$courseId))->save(array('course_type'=>$courseType,'course_name'=>$courseName,'course_intro'=>$courseIntro));
  122. }
  123. $this->success('课程操作成功','/admin/course/detail?course_id='.$courseId);
  124. }
  125. }
  126. //单词导入
  127. public function import(){
  128. $step = I('step','');
  129. $courseId = I('course_id','');
  130. if (empty($step)){
  131. $info = array();
  132. if (!empty($courseId)){
  133. $info = M('Course')->where(array('course_id'=>$courseId))->find();
  134. }
  135. $Course = M('Course')->where(array('is_delete'=>1,'course_flag'=>1,'course_source'=>1))->field('*')->order("course_id desc")->select();
  136. $this->assign('info',$info);
  137. $this->assign('Course',$Course);
  138. $this->display();
  139. }else if($step==2){
  140. $json=array();
  141. $json['course_id']=$courseId;
  142. if(is_uploaded_file($_FILES['file']['tmp_name'])){
  143. $upfile=$_FILES["file"];
  144. $filename=$upfile['name'];
  145. $tmp_name=$upfile["tmp_name"];//上传文件的临时存放路径
  146. $arr = pathinfo($filename);
  147. $ext_suffix = $arr['extension'];
  148. $allow_suffix = array('zip');
  149. if(!in_array($ext_suffix, $allow_suffix)){
  150. $res=array('code'=>1,'msg'=>'仅支持zip文件');
  151. echo json_encode($res);
  152. die;
  153. }
  154. $new_filename = date('YmdHis',time()).rand(100,1000).'.'.$ext_suffix;
  155. if (move_uploaded_file($tmp_name, './Uploads/zip/'.$new_filename)){
  156. $json['file']=$new_filename;
  157. }else{
  158. $res=array('code'=>1,'msg'=>'上传失败');
  159. echo json_encode($res);
  160. die;
  161. }
  162. }
  163. else{
  164. $res=array('code'=>1,'msg'=>'请选择文件');
  165. echo json_encode($res);
  166. die;
  167. }
  168. $arr['json']=json_encode($json);
  169. $arr['operate_dt']=time();
  170. M('import')->add($arr);
  171. $r=M('import')->limit('0,1')->order('id desc')->where($arr)->find();
  172. $res=array('code'=>0,'data'=>$r);
  173. echo json_encode($res);
  174. }
  175. }
  176. public function task(){
  177. $id = I('id','');
  178. $r=M('import')->limit('0,1')->order('id desc')->where(array('id'=>$id))->find();
  179. if($r){
  180. $res=array('code'=>0,'data'=>$r);
  181. echo json_encode($res);
  182. }else{
  183. $res=array('code'=>1,'msg'=>'未知错误');
  184. echo json_encode($res);
  185. }
  186. }
  187. //获取课程名称相同时,新的课程名称
  188. private function getCourseName($courseName){
  189. $course = M('Course')->where(array('course_name'=>$courseName,'is_delete'=>1))->field('course_id')->find();
  190. $res = M('TitleNum')->where(array('title_name'=>$courseName))->field('title_id,title_num')->find();
  191. if ($res!=NULL){
  192. $courseName = $courseName.'('.($res['title_num']+1).')';
  193. M('TitleNum')->where(array('title_id'=>$res['title_id']))->setInc('title_num');
  194. }else if($course!=NULL){
  195. $courseName = $courseName.'('.($res['title_num']+1).')';
  196. M('TitleNum')->add(array('title_name'=>$courseName,'operate_dt'=>time()));
  197. //$courseName = $courseName;
  198. }
  199. return $courseName;
  200. }
  201. //获取课程的单词列表
  202. public function detail(){
  203. $courseId = I('course_id','');
  204. if (empty($courseId) || $courseId<1000000){
  205. $this->error("课程ID错误",'/admin/course/index');
  206. }
  207. $keyword = I('get.keyword','');
  208. $condition = array('is_delete'=>1,'course_id'=>$courseId);
  209. if (!empty($keyword)){
  210. $condition['words_name'] = array('LIKE','%'.$keyword.'%');
  211. }
  212. $count = M('Words')->where($condition)->count();
  213. //分页
  214. $Page = new \Think\Page($count);
  215. $show = $Page->show();
  216. $wordsRes = M('Words')->where($condition)->field()->order('words_id desc')->limit($Page->firstRow.','.$Page->listRows)->select();
  217. $wordsList = array();
  218. foreach ($wordsRes as $row){
  219. $wordsList[] = array(
  220. 'words_id' => $row['words_id'],
  221. 'course_id' => $row['course_id'],
  222. 'words_name' => $row['words_name'],
  223. 'words_voice' => $row['words_voice'],
  224. 'words_read' => $row['words_read'],
  225. 'operate_dt' => $row['operate_dt'],
  226. 'words_text' => $this->getWordsText($row),
  227. );
  228. }
  229. $info = M('Course')->where(array('course_id'=>$courseId))->find();
  230. $res = M('course_reply')->join('left join t_user as a on a.user_id = t_course_reply.user_id')->join('left join t_user as b on b.user_id = t_course_reply.reply_user_id')->join('left join t_course_reply_praise on t_course_reply_praise.cr_id = t_course_reply.cr_id')->where(array('t_course_reply.is_delete'=>1,'t_course_reply.reply_cr_id'=>0,'t_course_reply.course_id'=>$courseId))->group('t_course_reply.cr_id')->field('t_course_reply.*,a.user_name,a.user_icon,b.user_name as reply_user_name,count(t_course_reply_praise.cr_id) as praise')->order('t_course_reply.operate_dt desc')->select();
  231. $arr=array();
  232. foreach($res as $k=>$v){
  233. if(!$v['cr_id']){
  234. unset($res[$k]);
  235. }else{
  236. $res[$k]['operate_dt']=date("Y-m-d H:i:s",$v['operate_dt']);
  237. $arr[]=$v['cr_id'];
  238. $res[$k]['reply_list']=array();
  239. }
  240. }
  241. if($arr){
  242. $res2 = M('course_reply')->join('left join t_user as a on a.user_id = t_course_reply.user_id')->join('left join t_user as b on b.user_id = t_course_reply.reply_user_id')->join('left join t_course_reply_praise on t_course_reply_praise.cr_id = t_course_reply.cr_id')->where("t_course_reply.course_id='$courseId' and t_course_reply.is_delete=1 and t_course_reply.reply_cr_id in ( ".implode(',',$arr).")" )->group('t_course_reply.cr_id')->field('t_course_reply.*,a.user_name,a.user_icon,b.user_name as reply_user_name,count(t_course_reply_praise.cr_id) as praise')->order('t_course_reply.operate_dt desc')->select();;
  243. }else{
  244. $res2=array();
  245. }
  246. foreach($res as $k=>$v){
  247. foreach($res2 as $m=>$n){
  248. $res2[$m]['operate_dt']=date("Y-m-d H:i:s",$n['operate_dt']);
  249. if($n['reply_cr_id']==$v['cr_id']){
  250. $res[$k]['reply_list'][]=$res2[$m];
  251. }
  252. }
  253. }
  254. $this->assign('page',$show);
  255. $this->assign('list',$wordsList);
  256. $this->assign('courseId', $courseId);
  257. $this->assign('info', $info);
  258. $this->assign('reply', $res);
  259. $this->display();
  260. }
  261. }