1,'msg'=>'章节ID错误');
$this->returnData($data);exit;
}
if (empty($courseId) || $courseId<1000000){
$data = array('code'=>1,'msg'=>'课程ID错误');
$this->returnData($data);exit;
}
$info = M('TestPart')->where(array('course_id'=>$courseId,'user_id'=>$this->userId))->field('tp_id')->find();
if ($info==NULL){
M('TestPart')->add(array('course_id'=>$courseId,'user_id'=>$this->userId,'part_id'=>$partId,'operate_dt'=>time()));
}else {
M('TestPart')->where(array('tp_id'=>$info['tp_id']))->save(array('part_id'=>$partId));
}
$data = array('code'=>0,'msg'=>'设置章节成功');
$this->returnData($data);exit;
}
//获取测试题目
public function index(){
$num = I('num');
$partId = I('part_id');
//1中文填词,2英文填意,3英文选词,4听音选意,5完形填空
$testType = I('test_type');
$courseId = I('course_id');
if (empty($partId)){
$data = array('code'=>1,'msg'=>'章节ID错误');
$this->returnData($data);exit;
}
if (empty($courseId) || $courseId<1000000){
$data = array('code'=>1,'msg'=>'课程ID错误');
$this->returnData($data);exit;
}
if (!in_array($testType, array(1,2,3,4,5,6))){
$data = array('code'=>1,'msg'=>'题型错误');
$this->returnData($data);exit;
}
if ($testType==3){
$data = array('code'=>1,'msg'=>'即将推出');
$this->returnData($data);exit;
}
/* if ($num==0){
$num = M('Words')->where(array('course_id'=>$courseId))->count();
} */
if ($num<20){
$data = array('code'=>1,'msg'=>'题量不能少于20');
$this->returnData($data);exit;
}
$partInfo = M('UserWords')->where(array('course_id'=>$courseId,'user_id'=>$this->userId))->field('user_part')->find();
if ($partInfo==NULL){
$partInfo['user_part'] = 15;
}
$total = M('Words')->where(array('course_id'=>$courseId))->count();
//每章节单词数量(10/3)=4 3,3,3,1
$partWordsNum = ceil($total/$partInfo['user_part']);
$partArr = explode(',', trim($partId,','));
sort($partArr);
//每章节获取单词数量(6/4)=1 2,2,1,1
$partNum = floor($num/count($partArr));
$number = $num - $partNum*count($partArr);
//章节数大于出题数,每章节获取一个单词
if ($partNum==0){
$partNum = 1;
$partWordsNum = $num;
$number = 0;
}
/* if ($testType==3){
$wordsInfo = M('Words')->where(array('course_id'=>$courseId,'similar_en'=>array('neq','')))->order('words_id asc')->select();
}else{
$wordsInfo = M('Words')->where(array('course_id'=>$courseId))->order('words_id asc')->select();
} */
$wordsSortInfo = M('WordsSort')->where(array('course_id'=>$courseId,'user_id'=>$this->userId,'sort_status'=>1))->field('word_ids')->find();
if ($wordsSortInfo==NULL){
$orderby = 'words_id asc';
}else{
$orderby = 'field(words_id,'. $wordsSortInfo['word_ids'] .')';
}
//$wordsInfo = M('Words')->where(array('course_id'=>$courseId,'words_voice1|words_voice2'=>array('NEQ','')))->order($orderby)->select();
$wordsInfo = M('Words')->where(array('course_id'=>$courseId))->order($orderby)->select();
if ($wordsInfo==NULL){
$data = array('code'=>0,'msg'=>'','data'=>array());
$this->returnData($data);exit;
}
$wordsList = array();
for($i=1;$i<=$partWordsNum;$i++){
if (in_array($i, $partArr)){
$page = ($i-1)*$partInfo['user_part'];
//截取每章节单词
$partWordsList = array_slice($wordsInfo,$page,$partInfo['user_part']);
//随机获取指定数量的单词
if ($number>0){
$n = $partNum+1;
if ($n';
}else{
//echo $partNum,'
';
$n = $partNum;
if ($ngetWords($wordsList,$courseId,$testType);
}
//获取特殊课程测试题目
public function specialIndex(){
$num = I('num');
$partId = I('part_id');
//1中文填词,2英文填意,3英文选词,4听音选意,5完形填空
$testType = I('test_type');
$courseId = I('course_id');
if (empty($partId)){
$data = array('code'=>1,'msg'=>'章节ID错误');
$this->returnData($data);exit;
}
if (empty($courseId) || $courseId<1000000){
$data = array('code'=>1,'msg'=>'课程ID错误');
$this->returnData($data);exit;
}
if (!in_array($testType, array(1,2,3,4,5,6))){
$data = array('code'=>1,'msg'=>'题型错误');
$this->returnData($data);exit;
}
if ($testType==3){
$data = array('code'=>1,'msg'=>'即将推出');
$this->returnData($data);exit;
}
/* if ($num==0){
$num = M('Words')->where(array('course_id'=>$courseId))->count();
} */
if ($num<20){
$data = array('code'=>1,'msg'=>'题量不能少于20');
$this->returnData($data);exit;
}
$partArr = explode(',', trim($partId,','));
sort($partArr);
$wordsInfo = M('Words')->where(array('course_id'=>$courseId,'operate_dt'=>array('IN',$partArr)))->order('rand()')->limit($num)->select();
if ($wordsInfo==NULL){
$data = array('code'=>0,'msg'=>'','data'=>array());
$this->returnData($data);exit;
}
$this->getWords($wordsInfo,$courseId,$testType);
}
//特殊课程章节测试
public function specialPart(){
$partId = I('part_id');
//1中文填词,2英文填意,3英文选词,4听音选意,5完形填空
$testType = I('test_type');
$courseId = I('course_id');
if (empty($partId)){
$data = array('code'=>1,'msg'=>'章节ID错误');
$this->returnData($data);exit;
}
if (empty($courseId) || $courseId<1000000){
$data = array('code'=>1,'msg'=>'课程ID错误');
$this->returnData($data);exit;
}
if ($testType==3){
$data = array('code'=>1,'msg'=>'即将推出');
$this->returnData($data);exit;
}
$wordsInfo = M('Words')->where(array('course_id'=>$courseId,'operate_dt'=>$partId))->order('rand()')->select();
if ($wordsInfo==NULL){
$data = array('code'=>0,'msg'=>'','data'=>array());
$this->returnData($data);exit;
}
$this->getWords($wordsInfo,$courseId,$testType);
}
//章节测试
public function part(){
$partId = I('part_id');
//1中文填词,2英文填意,3英文选词,4听音选意,5完形填空
$testType = I('test_type');
$courseId = I('course_id');
if (empty($partId)){
$data = array('code'=>1,'msg'=>'章节ID错误');
$this->returnData($data);exit;
}
if (empty($courseId) || $courseId<1000000){
$data = array('code'=>1,'msg'=>'课程ID错误');
$this->returnData($data);exit;
}
if ($testType==3){
$data = array('code'=>1,'msg'=>'即将推出');
$this->returnData($data);exit;
}
$partInfo = M('UserWords')->where(array('course_id'=>$courseId,'user_id'=>$this->userId))->field('user_part')->find();
if ($partInfo==NULL){
$partInfo['user_part'] = 15;
}
$total = M('Words')->where(array('course_id'=>$courseId))->count();
//每章节单词数量(10/3)=4 3,3,3,1
$partWordsNum = ceil($total/$partInfo['user_part']);
if ($testType==3){
$wordsInfo = M('Words')->where(array('course_id'=>$courseId,'similar_en'=>array('neq','')))->order('words_id asc')->select();
}else if($testType==5){
$wordsInfo = M('Words')->where(array('course_id'=>$courseId,'jz_en1|jz_en2|jz_en3'=>array('neq','')))->order('words_id asc')->select();
}else{
$wordsInfo = M('Words')->where(array('course_id'=>$courseId))->order('words_id asc')->select();
}
if ($wordsInfo==NULL){
$data = array('code'=>0,'msg'=>'','data'=>array());
$this->returnData($data);exit;
}
$wordsList = array();
for($i=1;$i<=$partWordsNum;$i++){
if ($i == $partId){
$page = ($i-1)*$partInfo['user_part'];
//截取每章节单词
$partWordsList = array_slice($wordsInfo,$page,$partInfo['user_part']);
shuffle($partWordsList);
}
}
$this->getWords($partWordsList,$courseId,$testType);
}
private function getWords($wordsList,$courseId,$testType){
//生成错误项
$wordsKeys = array('words_n','words_pron','words_adj','words_num','words_v','words_adv','words_art','words_prep','words_conj','words_int','words_vt','words_vi','words_other',);
$returnData = array();
foreach ($wordsList as $key=>$row){
if ($testType==1){
$returnData[$key]['words_id'] = $row['words_id'];
$returnData[$key]['words_text'] = $this->getWordsText1($row,$testType);
$returnData[$key]['words_title'] = $row['words_name'];
}else if($testType==2){
$returnData[$key]['words_id'] = $row['words_id'];
$returnData[$key]['words_text'] = $this->getWordsText1($row,$testType);
$returnData[$key]['words_title'] = $row['words_name'];
}else if($testType==3){
if (empty($row['similar_en'])){
continue;
}
$keyName = '';
foreach ($wordsKeys as $keys){
if (!empty($row[$keys])){
$keyName = $keys;
break;
}
}
//$condition = array('course_id'=>$courseId,'words_id'=>array('NEQ',$row['words_id']),$keyName=>array('neq',''),'similar_en'=>array('neq',''),);
$condition = array('words_name'=>array('NEQ',$row['words_name']),$keyName=>array('neq',''),'store_id'=>array('IN',array(17,16,14,13,12,11)),);
$subArr = $this->subString($row['words_name']);
if (!empty($subArr[0])){
$condition['words_name'] = array('LIKE',$subArr[0].'%');
}
if (!empty($subArr[1])){
$condition['words_name'] = array('LIKE','%'.$subArr[1].'%');
}
if (!empty($subArr[2])){
$condition['words_name'] = array('LIKE','%'.$subArr[2].'%');
}
//$errorInfo = M('Words')->where($condition)->order('rand()')->limit(3)->select();
$errorInfo = M('StoreWords')->where($condition)->order('store_id desc,rand()')->limit(3)->select();
$errorInfo[3] = $row;
$returnData[$key] = $this->getStore($errorInfo, $testType);
$returnData[$key]['words_id'] = $row['words_id'];
$returnData[$key]['words_title'] = $row['similar_en'];
}else if($testType==4){
$keyName = '';
foreach ($wordsKeys as $keys){
if (!empty($row[$keys])){
$keyName = $keys;
break;
}
}
//$condition = array('course_id'=>$courseId,'words_voice1|words_voice2'=>array('NEQ',''),$keyName=>array('neq',''),'words_id'=>array('NEQ',$row['words_id']));
$condition = array('words_name'=>array('NEQ',$row['words_name']),$keyName=>array('neq',''),'store_id'=>array('IN',array(17,16,14,13,12,11)),);
$subArr = $this->subString($row['words_name']);
if (!empty($subArr[0])){
$condition['words_name'] = array('LIKE',$subArr[0].'%');
}
if (!empty($subArr[1])){
$condition['words_name'] = array('LIKE','%'.$subArr[1].'%');
}
if (!empty($subArr[2])){
$condition['words_name'] = array('LIKE','%'.$subArr[2].'%');
}
//$errorInfo = M('Words')->where($condition)->order('rand()')->limit(3)->select();
$errorInfo = M('StoreWords')->where($condition)->order('store_id desc,rand()')->limit(3)->select();
$errorInfo[3] = $row;
$returnData[$key] = $this->getStore($errorInfo, $testType);
$returnData[$key]['words_id'] = $row['words_id'];
$returnData[$key]['words_title'] = $row['words_voice1'];
//判断读音是否空
if (empty($row['words_read1'])){
$returnData[$key]['words_title'] = $row['words_voice2'];
}
if (empty($returnData[$key]['words_title'])){
unset($returnData[$key]);
}
}elseif($testType==5){
$keyName = '';
foreach ($wordsKeys as $keys){
if (!empty($row[$keys])){
$keyName = $keys;
break;
}
}
if (empty($row['jz_en1'])){
if (!empty($row['jz_en2'])){
$row['jz_en1'] = $row['jz_en2'];
}else if(!empty($row['jz_en3'])){
$row['jz_en1'] = $row['jz_en3'];
}else{
continue;
}
}
//$condition = array('course_id'=>$courseId,'words_id'=>array('NEQ',$row['words_id']),$keyName=>array('neq',''),'jz_en1'=>array('neq',''),);
$condition = array('words_name'=>array('NEQ',$row['words_name']),$keyName=>array('neq',''),'store_id'=>array('IN',array(17,16,14,13,12,11)),);
$subArr = $this->subString($row['words_name']);
if (!empty($subArr[0])){
$condition['words_name'] = array('LIKE',$subArr[0].'%');
}
if (!empty($subArr[1])){
$condition['words_name'] = array('LIKE','%'.$subArr[1].'%');
}
if (!empty($subArr[2])){
$condition['words_name'] = array('LIKE','%'.$subArr[2].'%');
}
//$errorInfo = M('Words')->where($condition)->order('rand()')->limit(3)->select();
$errorInfo = M('StoreWords')->where($condition)->order('store_id desc,rand()')->limit(3)->select();
$errorInfo[3] = $row;
$returnData[$key] = $this->getStore($errorInfo, $testType);
$returnData[$key]['words_id'] = $row['words_id'];
$flag = true;
$jzEnNew = array();
$jzEn = explode(' ', $row['jz_en1']);
$i = 0;
foreach ($jzEn as $val){
$wordsVal = str_replace(array('.','?','!',',',':',';','-','"',"'",'(',')','{','}','[',']'),'',$val);
if (strtolower($row['words_name'])==strtolower($val)){
$flag = false;
if ($i==0){
$jzEnNew[] = '______';
}else{
$jzEnNew[] = $val;
}
$i++;
}else{
$jzEnNew[] = $val;
}
}
if ($flag){
$pos = strpos($row['jz_en1'], $row['words_name']);
if ($pos === false) {
$returnData[$key]['words_title'] = $row['jz_en1'];
}else{
$returnData[$key]['words_title'] = substr_replace($row['jz_en1'], '______', $pos, strlen($row['words_name']));
}
//$returnData[$key]['words_title'] = str_replace($row['words_name'], '______', $row['jz_en1']);
}else{
$returnData[$key]['words_title'] = implode(' ', $jzEnNew);
}
//$returnData[$key]['words_title'] = $row['jz_en1'];
//$returnData[$key]['words_name'] = $row['words_voice1'];
}
}
$returnNewData = array();
foreach ($returnData as $r){
$returnNewData[] = $r;
}
$data = array('code'=>0,'msg'=>'','data'=>$returnNewData);
$this->returnData($data);exit;
}
private function getStore($info, $testType){
$total = count($info);
if ($total!=4){
$limit = 4-$total;
$condition = array('words_id'=>array('NEQ',$info[3]['words_id']),'jz_en1'=>array('neq',''),);
$res = M('Words')->where($condition)->order('rand()')->limit($limit)->select();
if ($limit==1){
$info[2] = $res[0];
}else if($limit==2){
$info[2] = $res[0];
$info[1] = $res[1];
}else if($limit==1){
$info[2] = $res[0];
$info[1] = $res[1];
$info[0] = $res[2];
}
}
//1中文填词,2英文填意,3英文选词,4听音选意,5完形填空
$wordsKey = array('a','b','c','d');
$wordsArr = array();
foreach ($info as $k=>$r){
if ($testType==1){
$wordsArr[$wordsKey[$k]] = $this->getWordsText1($r);
}elseif ($testType==3){
$wordsArr[$wordsKey[$k]] = $r['words_name'];
}elseif ($testType==4){
//$wordsArr[$wordsKey[$k]] = $r['words_name'];
$wordsArr[$wordsKey[$k]] = $this->getWordsText1($r,4);
}elseif ($testType==5){
$wordsArr[$wordsKey[$k]] = $r['words_name'];
}elseif ($testType==6){
}
}
shuffle($wordsKey);
$wordsNewArr = array();
foreach ($wordsKey as $char){
$wordsNewArr[] = $wordsArr[$char];
}
$rightKey = array_search('d', $wordsKey);
$returnData = array(
'key'=>$rightKey+1,
'words_text' =>$wordsNewArr,
);
return $returnData;
}
public function subString($word){
$firstNum = substr($word, 0, 1);
$otherNum = substr($word, 1);
$otherArr = array();
if(strlen($otherNum)>0){
$otherArr = str_split($otherNum,1);
$otherArr = array_unique($otherArr);
}
if (strlen($otherNum)>5) {
$keys = array_rand($otherArr,2);
$twoNum = $otherArr[$keys[0]];
$threeNum = $otherArr[$keys[1]];
}else if (strlen($otherNum)>1) {
$keys = array_rand($otherArr,1);
$twoNum = $otherArr[$keys[0]];
$threeNum = '';
}else if(strlen($otherNum)==1){
$twoNum = $otherNum;
$threeNum = '';
}else{
$twoNum = '';
$threeNum = '';
}
return array($firstNum,$twoNum,$threeNum);
}
}