WordsController.class.php20180405 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824
  1. <?php
  2. namespace Api\Controller;
  3. use Common\Controller\ApiController;
  4. class WordsController extends ApiController {
  5. public function __construct(){
  6. parent::__construct();
  7. }
  8. //获取单词列表
  9. public function index(){
  10. $sort = I('sort',1);
  11. $lastId = I('last_id',0);
  12. $courseId = I('course_id');
  13. $pageSize = I('page_size',20);
  14. $keyword = I('keyword','');
  15. if (empty($courseId) || $courseId<1000000){
  16. $data = array('code'=>1,'msg'=>'课程ID错误');
  17. $this->returnData($data);exit;
  18. }
  19. $condition = array('is_delete'=>1,'course_id'=>$courseId);
  20. if (!empty($keyword)){
  21. $condition['words_name'] = array('LIKE','%'.$keyword.'%');
  22. }
  23. $orderby = '';
  24. if ($sort==1){
  25. $orderby = 'words_id asc';
  26. }else if($sort==2){
  27. $wordsSortInfo = M('WordsSort')->where(array('course_id'=>$courseId,'user_id'=>$this->userId))->field('word_ids')->find();
  28. if ($wordsSortInfo==NULL){
  29. $data = array('code'=>0,'msg'=>'占未设置乱序','data'=>array());
  30. $this->returnData($data);exit;
  31. }
  32. }
  33. if ($lastId>0 && $sort==1){
  34. $condition['words_id'] = array('LT',$lastId);
  35. }
  36. $courseInfo = M('Course')->where(array('course_id'=>$courseId,'is_show'=>1))->field('course_id,user_id,course_name,course_source,operate_dt')->find();
  37. if ($courseInfo['course_name']=='易错单词'){
  38. if ($lastId>0){
  39. $data = array('code'=>0,'msg'=>'无更多数据','data'=>array());
  40. $this->returnData($data);exit;
  41. }
  42. $errorInfo = M('Test')->where(array('user_id'=>$this->userId))->order('test_id desc')->field('words_error')->find();
  43. if ($errorInfo==NULL){
  44. $data = array('code'=>0,'msg'=>'暂无错误单词','data'=>array());
  45. $this->returnData($data);exit;
  46. }
  47. $res = M('Words')->where(array('words_id'=>array('IN',$errorInfo['words_error'])))->order($orderby)->select();
  48. }else{
  49. //$join = 'w LEFT JOIN t_words_notepad wn ON w.words_id=wn.words_id';
  50. if ($sort==1){
  51. $res = M('Words')->where($condition)->order($orderby)->limit($pageSize)->select();
  52. }else if($sort==2){
  53. $wordIdArr = explode(',', $wordsSortInfo['word_ids']);
  54. if ($lastId!=0){
  55. $key = array_search($lastId,$wordIdArr);
  56. $key = $key+1;
  57. }else{
  58. $key = 0;
  59. }
  60. $wordsIdPage = array_slice($wordIdArr,$key,$pageSize);
  61. if (empty($wordsIdPage)){
  62. $data = array('code'=>0,'msg'=>'无更多数据','data'=>array());
  63. $this->returnData($data);exit;
  64. }
  65. $wordsIdpageStr = implode(',', $wordsIdPage);
  66. $condition['words_id'] = array('IN',$wordsIdPage);
  67. $orderby = 'field(words_id,'. $wordsIdpageStr .')';
  68. $res = M('Words')->where($condition)->order($orderby)->select();
  69. //echo M('Words')->getLastSql();exit;
  70. }
  71. }
  72. $wordsList = array();
  73. foreach ($res as $row){
  74. $wnRes = M('WordsNotepad')->where(array('words_id'=>$row['words_id'],'user_id'=>$this->userId))->field('wn_content')->find();
  75. $wnContent = '';
  76. if ($wnRes!=NULL){
  77. $wnContent = $wnRes['wn_content'];
  78. }
  79. unset($row['is_delete']);
  80. unset($row['words_source']);
  81. $row['wn_content'] = $wnContent;
  82. $wordsList[] = $row;
  83. /* $wordsList[] = array(
  84. 'words_id' => $row['words_id'],
  85. 'course_id' => $row['course_id'],
  86. 'words_name' => $row['words_name'],
  87. 'wn_content'=>$wnContent,
  88. 'operate_dt' => $row['operate_dt'],
  89. 'words_text' => $this->getWordsText($row),
  90. ); */
  91. }
  92. if ($res==NULL&&$lastId>0){
  93. $data = array('code'=>0,'msg'=>'无更多数据','data'=>array());
  94. $this->returnData($data);exit;
  95. }
  96. if ($lastId==0){
  97. if ($courseInfo['user_id']!=$this->userId){
  98. $fansInfo = M('Fans')->where(array('user_id'=>$this->userId,'fans_user_id'=>$courseInfo['user_id']))->field('fans_id')->find();
  99. $courseInfo['is_fans'] = $fansInfo==NULL?0:1;
  100. /* if ($courseInfo['course_source']==1){
  101. $courseInfo['user_name'] = '系统课程';
  102. $courseInfo['user_icon'] = C('DOMAIN').'/Public/img/admin_icon.png';
  103. }else{
  104. $userInfo = M('User')->where(array('user_id'=>$courseInfo['user_id']))->field('user_name,user_icon,user_sex')->find();
  105. $courseInfo['user_name'] = $userInfo['user_name'];
  106. $courseInfo['user_icon'] = $userInfo['user_icon'];
  107. } */
  108. }else{
  109. $courseInfo['is_fans'] = 2;
  110. }
  111. $userInfo = M('User')->where(array('user_id'=>$courseInfo['user_id']))->field('user_id,user_name,user_icon,user_sex')->find();
  112. $courseInfo['user_id'] = $userInfo['user_id'];
  113. $courseInfo['user_sex'] = $userInfo['user_sex'];
  114. $courseInfo['user_icon'] = $userInfo['user_icon'];
  115. $courseInfo['user_name'] = $userInfo['user_name'];
  116. }else{
  117. $courseInfo = new \stdClass();
  118. }
  119. $data = array('code'=>0,'msg'=>'','data'=>$wordsList);
  120. if ($lastId==0){
  121. $data['info'] = $courseInfo;
  122. }
  123. $this->returnData($data);exit;
  124. }
  125. //获取指定章节单词列表
  126. public function part(){
  127. $sort = I('sort',1);
  128. $courseId = I('course_id');
  129. $partNum = I('part_num');
  130. if (empty($partNum) || $partNum<=0){
  131. $data = array('code'=>10,'msg'=>'章节ID错误');
  132. $this->returnData($data);exit;
  133. }
  134. if (empty($courseId) || $courseId<1000000){
  135. $data = array('code'=>1,'msg'=>'课程ID错误');
  136. $this->returnData($data);exit;
  137. }
  138. $partInfo = M('UserWords')->where(array('course_id'=>$courseId,'user_id'=>$this->userId))->field('uw_id,user_part,part_num')->find();
  139. if ($partInfo==NULL){
  140. $courseInfo = M('Course')->where(array('course_id'=>$courseId,'is_delete'=>1))->field('course_num')->find();
  141. $partInfo['user_part'] = 15;
  142. $partInfo['part_num'] = ceil($courseInfo['course_num']/$partInfo['user_part']);
  143. }
  144. if (empty($partInfo['part_num'])){
  145. $courseInfo = M('Course')->where(array('course_id'=>$courseId,'is_delete'=>1))->field('course_num')->find();
  146. $partInfo['user_part'] = 15;
  147. $partInfo['part_num'] = ceil($courseInfo['course_num']/$partInfo['user_part']);
  148. M('UserWords')->where(array('uw_id'=>$partInfo['uw_id']))->save(array('part_num'=>$partInfo['part_num']));
  149. }
  150. if ($partNum>$partInfo['part_num']){
  151. $data = array('code'=>10,'msg'=>'章节ID错误');
  152. $this->returnData($data);exit;
  153. }
  154. $wordsSortInfo = M('WordsSort')->where(array('course_id'=>$courseId,'user_id'=>$this->userId))->field('word_ids')->find();
  155. if ($wordsSortInfo==NULL){
  156. $condition = array('is_delete'=>1,'course_id'=>$courseId);
  157. $orderby = '';
  158. if ($sort==1){
  159. $orderby = 'words_id asc';
  160. }
  161. $condition['user_id'] = $this->userId;
  162. //$join = 'w LEFT JOIN t_words_notepad wn ON w.words_id=wn.words_id';
  163. $res =M('Words')->where($condition)->order($orderby)->limit(($partNum-1)*$partInfo['user_part'], $partInfo['user_part'])->select();
  164. }else{
  165. $wordIdArr = explode(',', $wordsSortInfo['word_ids']);
  166. $wordsIdPage = array_slice($wordIdArr,($partNum-1)*$partInfo['user_part'], $partInfo['user_part']);
  167. if (empty($wordsIdPage)){
  168. $data = array('code'=>0,'msg'=>'章节ID错误','data'=>array());
  169. $this->returnData($data);exit;
  170. }
  171. $wordsIdpageStr = implode(',', $wordsIdPage);
  172. $condition['words_id'] = array('IN',$wordsIdPage);
  173. $orderby = 'field(words_id,'. $wordsIdpageStr .')';
  174. $res = M('Words')->where($condition)->order($orderby)->select();
  175. }
  176. $wordsList = array();
  177. foreach ($res as $k=>$row){
  178. $wnRes = M('WordsNotepad')->where(array('words_id'=>$row['words_id'],'user_id'=>$this->userId))->field('wn_content')->find();
  179. $wnContent = '';
  180. if ($wnRes!=NULL){
  181. $wnContent = $wnRes['wn_content'];
  182. }
  183. unset($row['is_delete']);
  184. unset($row['words_source']);
  185. $row['wn_content'] = $wnContent;
  186. $wordsList[] = $row;
  187. }
  188. $data = array('code'=>0,'msg'=>'','data'=>$wordsList);
  189. $this->returnData($data);exit;
  190. }
  191. //添加编辑单词
  192. public function edit(){
  193. $courseId = I('course_id');
  194. $wordsId = I('words_id','');
  195. $wordsName = I('words_name','');
  196. if (empty($courseId) || $courseId<1000000){
  197. $data = array('code'=>1,'msg'=>'课程ID错误');
  198. $this->returnData($data);exit;
  199. }
  200. //判断单词是否重复
  201. if (empty($wordsId)){
  202. $wordsInfo = M('Words')->where(array('course_id'=>$courseId,'words_name'=>$wordsName))->field('words_id,words_name')->find();
  203. if ($wordsInfo!=NUll){
  204. $data = array('code'=>1,'msg'=>'该课程已经添加过该单词,请勿重复添加!');
  205. $this->returnData($data);exit;
  206. }
  207. }
  208. if (!empty($wordsId)){
  209. $wordsInfo = M('Words')->where(array('course_id'=>$courseId,'words_name'=>$wordsName))->field('words_id,words_name')->find();
  210. if ($wordsInfo!=NUll && $wordsInfo['words_id']!=$wordsId){
  211. $data = array('code'=>1,'msg'=>'该课程已经添加过该单词,请勿重复添加!');
  212. $this->returnData($data);exit;
  213. }
  214. }
  215. $courseInfo = M('Course')->where(array('course_id'=>$courseId,'is_delete'=>1))->field('course_id,user_id,course_name,course_num,course_status,course_source')->find();
  216. if ($courseInfo==NULL){
  217. $data = array('code'=>1,'msg'=>'课程ID错误');
  218. $this->returnData($data);exit;
  219. }
  220. $oldCourseInfo = $courseInfo;
  221. if ($courseInfo['course_status']==3 || $courseInfo['user_id']!=$this->userId){
  222. //创建新课程,并把就课程里面的所有的单词添加到新创建的课程中
  223. $userCourseInfo = M('Course')->where(array('user_id'=>$this->userId))->field('operate_dt')->find();
  224. if($userCourseInfo!=NULL){
  225. $time = time() - $userCourseInfo['operate_dt'];
  226. if ($time<C('COURSE_TIME')){
  227. $data = array('code'=>1,'msg'=>'3分钟内无法连续创建课程');
  228. $this->returnData($data);exit;
  229. }
  230. }
  231. $oldCourseId = $courseInfo['course_id'];
  232. if ($courseInfo['user_id']==$this->userId){
  233. M('Course')->where(array('course_id'=>$oldCourseId,'user_id'=>$this->userId))->save(array('is_show'=>2));
  234. }else if($courseInfo['course_source']==1){
  235. //系统课程
  236. $sysCourse = M('UserWords')->where(array('course_id'=>$oldCourseId,'user_id'=>$this->userId))->field('uw_id')->find();
  237. if ($sysCourse==NULL){
  238. $userInfo = M('User')->where(array('user_id'=>$this->userId))->field('user_part')->find();
  239. if ($userInfo==NULL || empty($userInfo['user_part'])){
  240. $userPart = 15;
  241. $partNum =ceil($courseInfo['course_num']/15);
  242. }else{
  243. $userPart = $userInfo['user_part'];
  244. $partNum =ceil($courseInfo['course_num']/$userInfo['user_part']);
  245. }
  246. $sysCourseInfo = array(
  247. 'user_id'=>$this->userId,
  248. 'course_id'=>$courseId,
  249. 'user_part'=>$userPart,
  250. 'part_num'=>$partNum,
  251. 'is_show'=>2,
  252. 'operate_dt'=>time(),
  253. );
  254. M('UserWords')->add($sysCourseInfo);
  255. }else{
  256. M('UserWords')->where(array('uw_id'=>$sysCourse['uw_id']))->save(array('is_show'=>2));
  257. }
  258. }
  259. //创建课程
  260. unset($courseInfo['course_id']);
  261. $courseInfo['course_status'] = 1;
  262. $courseInfo['operate_dt'] = time();
  263. $courseInfo['user_id'] = $this->userId;
  264. $courseInfo['course_source']=2;
  265. $courseInfo['course_name'] = $courseInfo['course_name'];//$this->getCourseName($courseInfo['course_name']);
  266. $courseId = M('Course')->add($courseInfo);
  267. $userWordsInfo = M('UserWords')->where(array('course_id'=>$oldCourseId,'user_id'=>$this->userId))->field('uw_id')->find();
  268. if ($userWordsInfo==NULL){
  269. $userInfo = M('User')->where(array('user_id'=>$this->userId))->field('user_part')->find();
  270. if ($userInfo==NULL || empty($userInfo['user_part'])){
  271. $userPart = 15;
  272. $partNum =ceil($courseInfo['course_num']/15);
  273. }else{
  274. $userPart = $userInfo['user_part'];
  275. $partNum =ceil($courseInfo['course_num']/$userInfo['user_part']);
  276. }
  277. $saveCourseWordsInfo = array(
  278. 'user_id'=>$this->userId,
  279. 'course_id'=>$courseId,
  280. 'user_part'=>$userPart,
  281. 'part_num'=>$partNum,
  282. 'operate_dt'=>time(),
  283. );
  284. M('UserWords')->add($saveCourseWordsInfo);
  285. }else{
  286. M('UserWords')->where(array('uw_id'=>$userWordsInfo['uw_id']))->save(array('course_id'=>$courseId));
  287. //M('UserWords')->where(array('course_id'=>$oldCourseId,'user_id'=>$this->userId))->save(array('course_id'=>$courseId));
  288. }
  289. //复制单词
  290. $this->copyWords($oldCourseId,$courseId);
  291. }else{
  292. $userWordsInfo = M('UserWords')->where(array('course_id'=>$courseId,'user_id'=>$this->userId))->field('uw_id')->find();
  293. if ($userWordsInfo==NULL){
  294. $userInfo = M('User')->where(array('user_id'=>$this->userId))->field('user_part')->find();
  295. if ($userInfo==NULL || empty($userInfo['user_part'])){
  296. $userPart = 15;
  297. $partNum =ceil($courseInfo['course_num']/15);
  298. }else{
  299. $userPart = $userInfo['user_part'];
  300. $partNum =ceil($courseInfo['course_num']/$userInfo['user_part']);
  301. }
  302. $saveCourseWordsInfo = array(
  303. 'user_id'=>$this->userId,
  304. 'course_id'=>$courseId,
  305. 'user_part'=>$userPart,
  306. 'part_num'=>$partNum,
  307. 'operate_dt'=>time(),
  308. );
  309. M('UserWords')->add($saveCourseWordsInfo);
  310. }
  311. }
  312. $wordsKeys = array('n'=>'words_n','pron'=>'words_pron','adj'=>'words_adj','num'=>'words_num','v'=>'words_v','adv'=>'words_adv','art'=>'words_art',
  313. 'prep'=>'words_prep','conj'=>'words_conj','int'=>'words_int','vt'=>'words_vt','vi'=>'words_vi','other'=>'words_other',);
  314. $saveData['course_id'] = $courseId;
  315. $saveData['words_name'] = I('words_name','');
  316. /* $wordsVoice = I('words_voice','');
  317. $wordsRead = I('words_read','');
  318. if (substr($wordsVoice,-1)==','){
  319. $wordsVoice = substr($wordsVoice, 0, -1);
  320. }
  321. $wordsVoiceArr = explode(',', $wordsVoice);
  322. $wordsReadArr = explode(',', $wordsRead);
  323. for ($i=0;$i<count($wordsVoiceArr);$i++){
  324. $j = $i+1;
  325. $saveData['words_read'.$j] = $wordsReadArr[$i];
  326. $saveData['words_voice'.$j] = $wordsVoiceArr[$i];
  327. } */
  328. $saveData['words_voice1'] = I('words_voice1','');
  329. $saveData['words_read1'] = I('words_read1','');
  330. $wordsVals = array_values($wordsKeys);
  331. $checkWords = true;
  332. foreach ($wordsVals as $keys){
  333. $saveData[$keys] = I($keys,'');
  334. if (!empty($saveData[$keys])){
  335. $checkWords = false;
  336. }
  337. }
  338. if (empty($saveData['words_name'])){
  339. $data = array('code'=>1,'msg'=>'单词不能为空');
  340. $this->returnData($data);exit;
  341. }
  342. if (empty($saveData['words_voice1'])){
  343. $data = array('code'=>1,'msg'=>'读音不能为空');
  344. $this->returnData($data);exit;
  345. }
  346. if (empty($saveData['words_read1'])){
  347. $data = array('code'=>1,'msg'=>'音标不能为空');
  348. $this->returnData($data);exit;
  349. }
  350. if ($checkWords){
  351. $data = array('code'=>1,'msg'=>'中文释义不能为空');
  352. $this->returnData($data);exit;
  353. }
  354. $saveData['jz_en1'] = I('jz_en1','');
  355. $saveData['jz_cn1'] = I('jz_cn1','');
  356. $saveData['jz_en2'] = I('jz_en2','');
  357. $saveData['jz_cn2'] = I('jz_cn2','');
  358. $saveData['jz_en3'] = I('jz_en3','');
  359. $saveData['jz_cn3'] = I('jz_cn3','');
  360. $saveData['similar_cn'] = I('similar_cn','');
  361. $saveData['similar_en'] = I('similar_en','');
  362. $saveData['words_similar'] = I('words_similar');
  363. $saveData['annotation_cn'] = I('annotation_cn','');
  364. if (!empty($saveData['jz_en1']) && strpos(strtolower($saveData['jz_en1']), $saveData['words_name'])===FALSE){
  365. $data = array('code'=>1,'msg'=>'您添加的例句1不包含对应单词,请仔细核对后提交');
  366. $this->returnData($data);exit;
  367. }
  368. if (!empty($saveData['jz_en2']) && strpos(strtolower($saveData['jz_en2']), $saveData['words_name'])===FALSE){
  369. $data = array('code'=>1,'msg'=>'您添加的例句2不包含对应单词,请仔细核对后提交交');
  370. $this->returnData($data);exit;
  371. }
  372. if (!empty($saveData['jz_en3']) && strpos(strtolower($saveData['jz_en3']), $saveData['words_name'])===FALSE){
  373. $data = array('code'=>1,'msg'=>'您添加的例句3不包含对应单词,请仔细核对后提交');
  374. $this->returnData($data);exit;
  375. }
  376. if (!empty($saveData['jz_en1']) && empty($saveData['jz_cn1'])){
  377. $data = array('code'=>1,'msg'=>'您添加的例句1释义不能为空,请仔细核对后提交');
  378. $this->returnData($data);exit;
  379. }
  380. if (!empty($saveData['jz_en2']) && empty($saveData['jz_cn2'])){
  381. $data = array('code'=>1,'msg'=>'您添加的例句1释义不能为空,请仔细核对后提交');
  382. $this->returnData($data);exit;
  383. }
  384. if (!empty($saveData['jz_en3']) && empty($saveData['jz_cn3'])){
  385. $data = array('code'=>1,'msg'=>'您添加的例句1释义不能为空,请仔细核对后提交');
  386. $this->returnData($data);exit;
  387. }
  388. if (!empty($saveData['words_similar']) && strlen($saveData['words_similar'])>50){
  389. $data = array('code'=>1,'msg'=>'英文释义不能大于50个字节');
  390. $this->returnData($data);exit;
  391. }
  392. if (!empty($saveData['similar_cn']) && strlen($saveData['similar_cn'])>50){
  393. $data = array('code'=>1,'msg'=>'近义词不能大于50个字节');
  394. $this->returnData($data);exit;
  395. }
  396. if (!empty($saveData['similar_en']) && strlen($saveData['similar_en'])>240){
  397. $data = array('code'=>1,'msg'=>'英文释义不能大于240个字节');
  398. $this->returnData($data);exit;
  399. }
  400. $saveData['operate_dt'] = time();
  401. if ($wordsId){
  402. if ($oldCourseInfo['course_status']==3 || $oldCourseInfo['user_id']!=$this->userId){
  403. //$wordsId = M('Words')->add($saveData);
  404. $wordsOldInfo = M('Words')->where(array('words_id'=>$wordsId,))->field('words_id,words_name')->find();
  405. $wordsNewInfo = M('Words')->where(array('course_id'=>$saveData['course_id'],'words_name'=>$wordsOldInfo['words_name'],))->field('words_id')->find();
  406. M('Words')->where(array('words_id'=>$wordsNewInfo['words_id']))->save($saveData);
  407. $returnWordsId = $wordsNewInfo['words_id'];
  408. }else{
  409. M('Words')->where(array('words_id'=>$wordsId))->save($saveData);
  410. $returnWordsId = $wordsId;
  411. }
  412. }else{
  413. $wordsId = M('Words')->add($saveData);
  414. $wordsSortInfo = M('WordsSort')->where(array('course_id'=>$oldCourseId,'user_id'=>$this->userId))->field('sort_id,word_ids')->find();
  415. if ($wordsSortInfo != NULL){
  416. $wordsSortInfo['word_ids'] = $wordsSortInfo['word_ids'].','.$wordsId;
  417. M('WordsSort')->where(array('sort_id'=>$wordsSortInfo['sort_id']))->save(array('word_ids'=>$wordsSortInfo['word_ids']));
  418. }
  419. M('Course')->where(array('course_id'=>$courseId))->setInc('course_num');
  420. $returnWordsId = $wordsId;
  421. }
  422. $join = 'uw LEFT JOIN t_course c ON uw.course_id=c.course_id';
  423. $resUserWords = M('UserWords')->join($join)->where(array('c.course_id'=>$saveData['course_id'],'uw.user_id'=>$this->userId,))->field('uw.course_id,uw.user_id,course_join,course_num,course_name,uw_id,uw.user_part,uw.part_num')->find();
  424. $resUserWords['words_id'] = $returnWordsId;
  425. $data = array('code'=>0,'msg'=>'单词操作成功','data'=>$resUserWords);
  426. $this->returnData($data);exit;
  427. /* $data = array('code'=>0,'msg'=>'单词操作成功','data'=>array('words_id'=>$wordsId,'course_id'=>$courseId));
  428. $this->returnData($data);exit; */
  429. }
  430. //把其他课程里面的单词添加到指定课程中
  431. public function addWordsToCourse(){
  432. $wordsId = I('words_id');
  433. $courseId = I('course_id');
  434. if (empty($wordsId)){
  435. $data = array('code'=>1,'msg'=>'单词ID错误');
  436. $this->returnData($data);exit;
  437. }
  438. if (empty($courseId) || $courseId<1000000){
  439. $data = array('code'=>1,'msg'=>'课程ID错误');
  440. $this->returnData($data);exit;
  441. }
  442. $wordsInfo = M('Words')->where(array('words_id'=>$wordsId,'is_delete'=>1))->find();
  443. if ($wordsInfo!=NULL && $wordsInfo['course_id']==$courseId){
  444. $data = array('code'=>1,'msg'=>'已是该课程单词');
  445. $this->returnData($data);exit;
  446. }
  447. $courseInfo = M('Course')->where(array('course_id'=>$courseId,'is_delete'=>1))->field('course_id,user_id,course_name,course_num,course_status')->find();
  448. if ($courseInfo==NULL){
  449. $data = array('code'=>1,'msg'=>'课程ID错误');
  450. $this->returnData($data);exit;
  451. }
  452. if ($courseInfo['course_status']==3 || $courseInfo['user_id']!=$this->userId){
  453. //创建新课程,并把就课程里面的所有的单词添加到新创建的课程中
  454. $userCourseInfo = M('Course')->where(array('user_id'=>$this->userId))->field('operate_dt')->find();
  455. if($userCourseInfo!=NULL){
  456. $time = time() - $userCourseInfo['operate_dt'];
  457. if ($time<C('COURSE_TIME')){
  458. $data = array('code'=>1,'msg'=>'3分钟内无法连续创建课程');
  459. $this->returnData($data);exit;
  460. }
  461. }
  462. $oldCourseId = $courseInfo['course_id'];
  463. //创建课程
  464. unset($courseInfo['course_id']);
  465. $courseInfo['course_status'] = 1;
  466. $courseInfo['operate_dt'] = time();
  467. $courseInfo['user_id'] = $this->userId;
  468. $courseInfo['course_source']=2;
  469. $courseInfo['course_name'] = $this->getCourseName($courseInfo['course_name']);
  470. $courseId = M('Course')->add($courseInfo);
  471. //复制单词
  472. $this->copyWords($oldCourseId,$courseId);
  473. }
  474. $wordsInfo['operate_dt'] = time();
  475. $wordsInfo['course_id'] = $courseId;
  476. $wordsInfo['words_source'] = 2;
  477. unset($wordsInfo['words_id']);
  478. M('Words')->add($wordsInfo);
  479. M('Course')->where(array('course_id'=>$courseId))->setInc('course_num');
  480. $data = array('code'=>0,'msg'=>'单词添加成功','data'=>'');
  481. $this->returnData($data);exit;
  482. }
  483. //删除单词
  484. public function del(){
  485. $wordsId = I('words_id');
  486. $courseId = I('course_id');
  487. if (empty($wordsId)){
  488. $data = array('code'=>1,'msg'=>'单词ID错误');
  489. $this->returnData($data);exit;
  490. }
  491. if (empty($courseId) || $courseId<1000000){
  492. $data = array('code'=>1,'msg'=>'课程ID错误');
  493. $this->returnData($data);exit;
  494. }
  495. $wordsInfo = M('Words')->where(array('words_id'=>$wordsId,'is_delete'=>1))->find();
  496. if ($wordsInfo!=NULL && $wordsInfo['course_id']!=$courseId){
  497. $data = array('code'=>1,'msg'=>'不是该课程单词');
  498. $this->returnData($data);exit;
  499. }
  500. $courseInfo = M('Course')->where(array('course_id'=>$courseId,'is_delete'=>1))->field('course_id,user_id,course_name,course_num,course_status,course_source')->find();
  501. if ($courseInfo==NULL){
  502. $data = array('code'=>1,'msg'=>'课程ID错误');
  503. $this->returnData($data);exit;
  504. }
  505. $oldCourseInfo = $courseInfo;
  506. if ($courseInfo['course_status']==3 || $courseInfo['user_id']!=$this->userId){
  507. //创建新课程,并把就课程里面的所有的单词添加到新创建的课程中
  508. $userCourseInfo = M('Course')->where(array('user_id'=>$this->userId))->field('operate_dt')->find();
  509. if($userCourseInfo!=NULL){
  510. $time = time() - $userCourseInfo['operate_dt'];
  511. if ($time<C('COURSE_TIME')){
  512. $data = array('code'=>1,'msg'=>'3分钟内无法连续创建课程');
  513. $this->returnData($data);exit;
  514. }
  515. }
  516. $oldCourseId = $courseInfo['course_id'];
  517. if ($courseInfo['user_id']==$this->userId){
  518. M('Course')->where(array('course_id'=>$oldCourseId,'user_id'=>$this->userId))->save(array('is_show'=>2));
  519. }else if($courseInfo['course_source']==1){
  520. //系统课程
  521. $sysCourse = M('UserWords')->where(array('course_id'=>$oldCourseId,'user_id'=>$this->userId))->field('uw_id')->find();
  522. if ($sysCourse==NULL){
  523. $userInfo = M('User')->where(array('user_id'=>$this->userId))->field('user_part')->find();
  524. if ($userInfo==NULL || empty($userInfo['user_part'])){
  525. $userPart = 15;
  526. $partNum =ceil($courseInfo['course_num']/15);
  527. }else{
  528. $userPart = $userInfo['user_part'];
  529. $partNum =ceil($courseInfo['course_num']/$userInfo['user_part']);
  530. }
  531. $sysCourseInfo = array(
  532. 'user_id'=>$this->userId,
  533. 'course_id'=>$courseId,
  534. 'user_part'=>$userPart,
  535. 'part_num'=>$partNum,
  536. 'is_show'=>2,
  537. 'operate_dt'=>time(),
  538. );
  539. M('UserWords')->add($sysCourseInfo);
  540. }else{
  541. M('UserWords')->where(array('uw_id'=>$sysCourse['uw_id']))->save(array('is_show'=>2));
  542. }
  543. }
  544. //创建课程
  545. unset($courseInfo['course_id']);
  546. $courseInfo['course_status'] = 1;
  547. $courseInfo['operate_dt'] = time();
  548. $courseInfo['user_id'] = $this->userId;
  549. $courseInfo['course_source']=2;
  550. $courseInfo['course_name'] = $courseInfo['course_name'];//$this->getCourseName($courseInfo['course_name']);
  551. $courseId = M('Course')->add($courseInfo);
  552. $userWordsInfo = M('UserWords')->where(array('course_id'=>$courseId,'user_id'=>$this->userId))->field('uw_id')->find();
  553. if ($userWordsInfo==NULL){
  554. $userInfo = M('User')->where(array('user_id'=>$this->userId))->field('user_part')->find();
  555. if ($userInfo==NULL || empty($userInfo['user_part'])){
  556. $userPart = 15;
  557. $partNum =ceil($courseInfo['course_num']/15);
  558. }else{
  559. $userPart = $userInfo['user_part'];
  560. $partNum =ceil($courseInfo['course_num']/$userInfo['user_part']);
  561. }
  562. $saveCourseWordsInfo = array(
  563. 'user_id'=>$this->userId,
  564. 'course_id'=>$courseId,
  565. 'user_part'=>$userPart,
  566. 'part_num'=>$partNum,
  567. 'operate_dt'=>time(),
  568. );
  569. M('UserWords')->add($saveCourseWordsInfo);
  570. }else{
  571. M('UserWords')->where(array('uw_id'=>$userWordsInfo['uw_id']))->save(array('course_id'=>$courseId));
  572. //M('UserWords')->where(array('course_id'=>$oldCourseId,'user_id'=>$this->userId))->save(array('course_id'=>$courseId));
  573. }
  574. //复制单词
  575. $this->copyWords($oldCourseId,$courseId,$wordsId);
  576. }else{
  577. $userWordsInfo = M('UserWords')->where(array('course_id'=>$courseId,'user_id'=>$this->userId))->field('uw_id')->find();
  578. if ($userWordsInfo==NULL){
  579. $userInfo = M('User')->where(array('user_id'=>$this->userId))->field('user_part')->find();
  580. if ($userInfo==NULL || empty($userInfo['user_part'])){
  581. $userPart = 15;
  582. $partNum =ceil($courseInfo['course_num']/15);
  583. }else{
  584. $userPart = $userInfo['user_part'];
  585. $partNum =ceil($courseInfo['course_num']/$userInfo['user_part']);
  586. }
  587. $saveCourseWordsInfo = array(
  588. 'user_id'=>$this->userId,
  589. 'course_id'=>$courseId,
  590. 'user_part'=>$userPart,
  591. 'part_num'=>$partNum,
  592. 'operate_dt'=>time(),
  593. );
  594. M('UserWords')->add($saveCourseWordsInfo);
  595. }
  596. M('Words')->where(array('words_id'=>array('IN',$wordsId)))->delete();
  597. }
  598. $wordsIdArr = explode(',', $wordsId);
  599. $num = count($wordsIdArr);
  600. M('Course')->where(array('course_id'=>$courseId))->setDec('course_num',$num);
  601. $wordsSortInfo = M('WordsSort')->where(array('course_id'=>$oldCourseId,'user_id'=>$this->userId))->field('sort_id,word_ids')->find();
  602. if ($wordsSortInfo != NULL){
  603. $wordsSortIdArr = explode(',', $wordsSortInfo['word_ids']);
  604. $wordsSortInfo['word_ids'] = array_shift($wordsSortIdArr,$wordsIdArr);
  605. M('WordsSort')->where(array('sort_id'=>$wordsSortInfo['sort_id']))->save(array('word_ids'=>$wordsSortInfo['word_ids']));
  606. }
  607. $data = array('code'=>0,'msg'=>'单词删除成功','data'=>'');
  608. $this->returnData($data);exit;
  609. }
  610. //添加单词笔记
  611. public function notepad(){
  612. $wordsId = I('words_id');
  613. $courseId = I('course_id');
  614. $wnContent = I('wn_content');
  615. if(empty($wordsId)){
  616. $data = array('code'=>1,'msg'=>'单词ID错误');
  617. $this->returnData($data);exit;
  618. }
  619. if(empty($courseId)){
  620. $data = array('code'=>1,'msg'=>'课程ID错误');
  621. $this->returnData($data);exit;
  622. }
  623. if (mb_strlen($wnContent,'UTF8')<2 || mb_strlen($wnContent,'UTF8')>80){
  624. $data = array('code'=>1,'msg'=>'单词笔记2到80个汉字');
  625. $this->returnData($data);exit;
  626. }
  627. $res = M('WordsNotepad')->where(array('words_id'=>$wordsId,'user_id'=>$this->userId))->field('wn_id')->find();
  628. if ($res==NULL){
  629. $saveData = array('user_id'=>$this->userId,'words_id'=>$wordsId,'course_id'=>$courseId,'wn_content'=>$wnContent,'operate_dt'=>time());
  630. $wnId = M('WordsNotepad')->add($saveData);
  631. $msg = '单词笔记添加成功';
  632. }else{
  633. $wnId = $res['wn_id'];
  634. M('WordsNotepad')->where(array('wn_id'=>$wnId))->save(array('wn_content'=>$wnContent));
  635. $msg = '单词笔记修改成功';
  636. }
  637. $info = M('WordsNotepad')->where(array('wn_id'=>$wnId))->field('user_id,words_id,course_id,wn_content')->find();
  638. $data = array('code'=>0,'msg'=>$msg,'data'=>$info);
  639. $this->returnData($data);exit;
  640. }
  641. //添加错误单词到易错单词课程中
  642. private function addErrorWords($wordsId){
  643. $wordsId = rtrim(I('words_id'),',');
  644. if (empty($wordsId)){
  645. return false;
  646. }
  647. $courseInfo = M('Course')->where(array('user_id'=>$this->userId,'course_name'=>'易错单词','course_flag'=>1))->field('course_id')->find();
  648. if ($courseInfo==NULL){
  649. $courseId = M('Course')->add(array('course_type'=>0,'course_name'=>'易错单词','course_source'=>2,'user_id'=>$this->userId,'operate_dt'=>time()));
  650. }else{
  651. $courseId = $courseInfo['course_id'];
  652. }
  653. $wordsList = M('Words')->where(array('words_id'=>array('IN',$wordsId),'is_delete'=>1))->order('words_id asc')->select();
  654. //var_dump($wordsList);exit;
  655. foreach ($wordsList as $words){
  656. unset($words['words_id']);
  657. $words['course_id'] = $courseId;
  658. $words['words_source'] = 2;
  659. $words['operate_dt'] = time();
  660. M('Words')->add($words);
  661. }
  662. return false;
  663. }
  664. //测试模式上报
  665. public function test(){
  666. $testType = I('test_type');
  667. $wordsId = rtrim(I('words_id'),',');
  668. //$wordsTotal = I('words_total');
  669. $wordsError = rtrim(I('words_error'),',');
  670. //$wordsSuccess = rtrim(I('words_success'));
  671. //$testNum = I('test_num');
  672. //$testScore = I('test_score');
  673. if (!in_array($testType, array(1,2,3,4,5,6))){
  674. $data = array('code'=>1,'msg'=>'测试模式错误');
  675. $this->returnData($data);exit;
  676. }
  677. if (empty($wordsId)){
  678. $data = array('code'=>1,'msg'=>'测试单词id错误');
  679. $this->returnData($data);exit;
  680. }
  681. $wordsTotal = substr_count($wordsId,',')+1;
  682. if (empty($wordsError)){
  683. $wordsErrLen = 0;
  684. }else{
  685. $wordsErrLen = substr_count($wordsError,',')+1;
  686. }
  687. $wordsSucLen = $wordsTotal-$wordsErrLen;
  688. $score = round($wordsSucLen/$wordsTotal*100);
  689. $wordsIdArr = explode(',', $wordsId);
  690. $wordsErrorArr = explode(',', $wordsError);
  691. $wordsSuccess = implode(',', array_diff($wordsIdArr, $wordsErrorArr));
  692. //var_dump($wordsId,$wordsError,$wordsSuccess,$wordsSucLen,$wordsTotal);exit;
  693. $saveData = array(
  694. 'user_id'=>$this->userId,'test_type'=>$testType,'words_ids'=>$wordsId,
  695. 'words_total'=>$wordsTotal,'words_error'=>$wordsError,'words_success'=>$wordsSuccess,
  696. 'test_num'=>$wordsTotal,'test_score'=>$score,'operate_dt'=>time(),
  697. );
  698. M('Test')->add($saveData);
  699. $this->addErrorWords($wordsError);
  700. $data = array('code'=>0,'msg'=>'单词测试上报成功','data'=>array('score'=>$score));
  701. $this->returnData($data);exit;
  702. }
  703. //获取单词信息接口
  704. public function dict(){
  705. $wordsName = I('words_name','');
  706. if (empty($wordsName)){
  707. $data = array('code'=>1,'msg'=>'单词不能为空');
  708. $this->returnData($data);exit;
  709. }
  710. $wordsKeys = array('n'=>'words_n','pron'=>'words_pron','adj'=>'words_adj','num'=>'words_num','v'=>'words_v','adv'=>'words_adv','art'=>'words_art','prep'=>'words_prep','conj'=>'words_conj','int'=>'words_int','vt'=>'words_vt','vi'=>'words_vi',);
  711. $httpCurl = new \Org\Net\HttpCurl();
  712. $url = C('TRANS').'&w='.$wordsName;
  713. $res = $httpCurl->get($url,'xml');
  714. $res = json_decode(json_encode(simplexml_load_string($res, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
  715. /* $url = C('TRANS').'&type=json&w='.$wordsName;
  716. $res = $httpCurl->get($url); */
  717. if (!isset($res['key'])){
  718. $data = array('code'=>1,'msg'=>'单词翻译出错');
  719. echo json_encode($data);
  720. }
  721. $saveData = array();
  722. if (isset($res['ps'])){
  723. if (is_array($res['ps'])){
  724. for ($i=0;$i<count($res['ps']);$i++){
  725. $j = $i+1;
  726. $saveData['words_read'.$j] = $res['ps'][$i];
  727. $saveData['words_voice'.$j] = $res['pron'][$i];
  728. }
  729. }else{
  730. $saveData['words_read1'] = $res['ps'];
  731. $saveData['words_voice1'] = $res['pron'];
  732. }
  733. }else{
  734. $saveData['words_read1'] = '';
  735. $saveData['words_voice1'] = '';
  736. }
  737. if (isset($res['pos'])){
  738. if (is_array($res['pos'])){
  739. foreach ($res['pos'] as $k=>$v){
  740. if (isset($wordsKeys[str_replace('.', '', $v)])){
  741. $saveData[$wordsKeys[str_replace('.', '', $v)]] = trim($res['acceptation'][$k]);
  742. }
  743. }
  744. }else{
  745. if (isset($wordsKeys[str_replace('.', '', $res['pos'])])){
  746. $saveData[$wordsKeys[str_replace('.', '', $res['pos'])]] = trim($res['acceptation']);
  747. }else{
  748. $saveData['words_other'] = trim($res['acceptation']);
  749. }
  750. }
  751. }
  752. if (isset($res['sent'])){
  753. for ($i=0;$i<count($res['sent']);$i++){
  754. $j = $i+1;
  755. if ($j>3){
  756. continue;
  757. }
  758. $saveData['jz_en'.$j] = trim($res['sent'][$i]['orig']);
  759. $saveData['jz_cn'.$j] = trim($res['sent'][$i]['trans']);
  760. }
  761. }
  762. $data = array('code'=>0,'msg'=>'','data'=>$saveData);
  763. $this->returnData($data);exit;
  764. }
  765. //删除单词笔记
  766. public function delNote(){
  767. $wordsId = I('words_id','');
  768. if (empty($wordsId)){
  769. $data = array('code'=>1,'msg'=>'单词ID出错');
  770. echo json_encode($data);
  771. }
  772. M('WordsNotepad')->where(array('words_id'=>$wordsId,'user_id'=>$this->userId))->delete();
  773. $data = array('code'=>0,'msg'=>'删除成功','data'=>'');
  774. $this->returnData($data);exit;
  775. }
  776. //单词乱序
  777. public function sort(){
  778. $courseId = I('course_id');
  779. if (empty($courseId) || $courseId<1000000){
  780. $data = array('code'=>1,'msg'=>'课程ID错误');
  781. $this->returnData($data);exit;
  782. }
  783. $info = M('WordsSort')->where(array('course_id'=>$courseId,'user_id'=>$this->userId))->field('sort_id')->find();
  784. if ($info!=NULL){
  785. $data = array('code'=>1,'msg'=>'已经设置过乱序排列');
  786. echo json_encode($data);
  787. }
  788. $wordsInfo = M('Words')->where(array('course_id'=>$courseId))->order('RAND()')->field('words_id')->select();
  789. if (function_exists('array_column')){
  790. $wordsIdArr = array_column($wordsInfo, 'words_id');
  791. }else{
  792. foreach ($wordsInfo as $row){
  793. $wordsIdArr[] = $row['words_id'];
  794. }
  795. }
  796. $saveData = array(
  797. 'user_id'=>$this->userId,
  798. 'course_id'=>$courseId,
  799. 'word_ids'=>implode(',', $wordsIdArr),
  800. 'operate_dt'=>time(),
  801. );
  802. M('WordsSort')->add($saveData);
  803. }
  804. }