survey.php 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702
  1. <?php
  2. /****************************
  3. * File : survey.php
  4. * Author : Cygnusa
  5. * @2018
  6. ****************************/
  7. //SECURITY
  8. if ( ! defined('APPLICATION_PATH')) exit('No direct script access allowed');
  9. //FUNCTION LISTS
  10. class survey
  11. {
  12. function __construct($parent)
  13. {
  14. //GET PAGE MESSAGE
  15. $this->page_data=globalfunc::getMessage($parent,$parent->lang,'survey');
  16. if(count($parent->params)==0)
  17. {
  18. //$parent->response(array('response'=>'failed', 'message' => 'PAGE NOT FOUND'), 404);
  19. $this->surveyfunc($parent);
  20. }else
  21. {
  22. $qry_params=explode ("?",$parent->params[0]);
  23. $parameter_val=strtolower($qry_params[0]);
  24. if(strtolower($parent->device_type)=='app')
  25. {
  26. switch($parameter_val){
  27. case "question":
  28. case "startsurvey":
  29. case "review":
  30. case "survey_status":
  31. $this->$parameter_val($parent );
  32. break;
  33. default:
  34. $this->surveyfunc($parent);
  35. break;
  36. }
  37. }else if(strtolower($parent->device_type)=='web')
  38. {
  39. switch($parameter_val){
  40. case "question":
  41. case "startsurvey":
  42. case "review":
  43. case "survey_status":
  44. $this->$parameter_val($parent );
  45. break;
  46. default:
  47. $this->surveyfunc($parent);
  48. break;
  49. }
  50. }
  51. }
  52. $parent->response(array('response'=>'failed', 'message' => 'PAGE NOT FOUND'), 404);
  53. }
  54. /* /////////////////////////////// ASSESSMENT MAIN FUNCTION //////////////////////////////////////////////// */
  55. private function surveyfunc($parent){
  56. globalfunc::checkMethodType($parent,array('GET','POST'));
  57. switch ($parent->get_request_method()){
  58. case "GET":
  59. globalfunc::checkParamCount($parent,0);
  60. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  61. //USER COND
  62. $user_cond_arr=projectfunc::getUserAssessmentCond($parent);
  63. $user_cond=" AND ".@implode(' AND ',$user_cond_arr);
  64. $status_arr=array();
  65. //NEW ROLE CONDITION
  66. $user_cond.=($parent->current_user_role>7 && $parent->current_user_role<14)?" AND a.user_type=0 ":" AND a.user_type=1 ";
  67. if($parent->current_user_role>7 && $parent->current_user_role<14)
  68. {
  69. $user_cond.=" AND (a.segment='0' OR a.segment='".$parent->current_user_data->segment."')";
  70. }
  71. //$assessment_str = "SELECT a.*,au.attemptslimit,au.publisheddate,au.enddate FROM ".TABLE_ASSESSMENT_USER." as au JOIN ".TABLE_ASSESSMENT." as a ON au.assessmentid=a.assessmentid WHERE a.status='1' AND a.assettypeid='2' AND au.status='1' AND au.userid='".$parent->current_user_id."' AND a.lvl_id='".$lvl_id."' AND au.publisheddate<='".NOW."'".$user_cond;
  72. $assessment_str = "SELECT a.* FROM ".TABLE_ASSESSMENT." as a WHERE a.status='1' AND a.assettypeid='2' AND a.schedule_id ='' AND a.publisheddate<='".NOW."' ".$user_cond;
  73. $assessment_arr=$parent->getQueryValue($assessment_str);
  74. if(count($assessment_arr)>0)
  75. {
  76. //GET ALL STATUS
  77. $status_str = "SELECT * FROM ".TABLE_STATUS;
  78. $status_res_arr=$parent->getQueryValue($status_str);
  79. //print_r($status_res_arr);
  80. if(count($status_res_arr)>0)
  81. {
  82. foreach($status_res_arr as $res)
  83. {
  84. $obj_key=$res->statusid;
  85. $status_arr[$obj_key]=$res->status;
  86. }
  87. }
  88. /*
  89. *
  90. 1 Active
  91. //2 Inactive
  92. 3 Completed
  93. //4 In Progress
  94. //5 Published
  95. //6 Closed
  96. 7 Not started
  97. 8 Expired
  98. *
  99. */
  100. //S3 OBJECT
  101. $s3=awsfileserver::connectS3();
  102. //ADD EXTRA FIELDS
  103. foreach($assessment_arr as $key=>$res_assessment)
  104. {
  105. $assessment_arr[$key]->publisheddate_str=date('Y-M-d',strtotime($res_assessment->publisheddate));
  106. //SURVEY IMAGE
  107. $assessment_arr[$key]->assessmentimage_url=SURVEYIMAGE_URL;
  108. if($res_assessment->assessmentimage!='')
  109. {
  110. $assessment_arr[$key]->assessmentimage_url=awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_ASSESSMENT_URL.$res_assessment->assessmentimage);
  111. }
  112. $assessment_arr[$key]->is_expired ='0';
  113. //CHECK ALREADY ATTENDTED
  114. $assessment_result_str = "SELECT * FROM ".TABLE_ASSESSMENTRESULT." WHERE assessmentid='".$res_assessment->assessmentid."' AND userid='".$parent->current_user_id."' ORDER BY arid DESC";
  115. $assessment_result_arr=$parent->getQueryValue($assessment_result_str);
  116. if(count($assessment_result_arr)>0)
  117. {
  118. // 3-Completed , 4 - In Progress
  119. $assessment_arr[$key]->status =($assessment_result_arr[0]->status=='1')?'3':'1';
  120. $res_assessment->status = $assessment_arr[$key]->status;
  121. } else {
  122. $assessment_arr[$key]->status ='7';
  123. $res_assessment->status = $assessment_arr[$key]->status;
  124. }
  125. //EXPIRED
  126. if(strtotime($res_assessment->enddate)<strtotime(NOW))
  127. {
  128. $assessment_arr[$key]->is_expired='1';
  129. $assessment_arr[$key]->status = '8';
  130. $res_assessment->status = '8';
  131. }
  132. //STATUS STRING
  133. $assessment_arr[$key]->statusname=(isset($status_arr[$res_assessment->status]))?$status_arr[$res_assessment->status]:"";
  134. //ATTEMPT TIME
  135. $attempt_time_str = "SELECT * FROM ".TABLE_ASSESSMENTRESULT." WHERE assessmentid='".$res_assessment->assessmentid."' AND userid='".$parent->current_user_id."' ORDER by attempt_time DESC";
  136. $attempt_time_arr=$parent->getQueryValue($attempt_time_str);
  137. $assessment_arr[$key]->attempt_time=(count($attempt_time_arr)>0)?$attempt_time_arr[0]->attempt_time:0;
  138. //IS ATTENDED
  139. $assessment_arr[$key]->is_attended='0';
  140. $assessment_arr[$key]->result_id='';
  141. //HIGHSCORE
  142. $assessment_arr[$key]->highscore='0';
  143. if(count($attempt_time_arr)>0)
  144. {
  145. $user_assessment_score_arr=array_column($attempt_time_arr,'percentage_score');
  146. rsort( $user_assessment_score_arr);
  147. $assessment_arr[$key]->highscore=(string)$user_assessment_score_arr[0];
  148. $assessment_arr[$key]->is_attended='1';
  149. //FOR SURVEY RESULT VIEW
  150. $assessment_arr[$key]->result_id=$attempt_time_arr[0]->arid;
  151. }
  152. }
  153. }
  154. //LOG
  155. $logstr='SURVEY LIST';
  156. globalfunc::insertUserLog($parent,$logstr);
  157. $parent->response(array('response'=>'success', 'data'=>$assessment_arr,'message'=>$this->page_data['success1']),200);
  158. break;
  159. case "POST":
  160. //ASSESSMENT SUBMIT
  161. globalfunc::checkParamCount($parent,1);
  162. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  163. $userid=$parent->current_user_id;
  164. $assessmentid = escape_str($parent->params['0']);
  165. //USER ASSESSMENT CHECK
  166. $assessment_user_str = "SELECT * FROM ".TABLE_ASSESSMENT_USER." WHERE assessmentid='".$assessmentid."' AND userid='".$parent->current_user_id."' LIMIT 1";
  167. $assessment_user_arr=$parent->getQueryValue($assessment_user_str);
  168. //VALIDATE ASSESSMENT
  169. projectfunc::userSurveyValid($parent,$parent->current_user_id,$assessmentid);
  170. //ASSESSMENT VALIDATION
  171. $assessment_str = "SELECT * FROM ".TABLE_ASSESSMENT." WHERE assessmentid='".$assessmentid."' AND status='1' AND assettypeid='2' LIMIT 1";
  172. $assessment_arr=$parent->getQueryValue($assessment_str);
  173. if(count($assessment_arr)!=1) $parent->response(array('response'=>'failed','message'=>$this->page_data["error2"]),406);
  174. //FIELDS VALIDATION
  175. $REQUEST_KEYS=array('ans_arr'=>'string','startdatetime'=>'date|Y-m-d H:i:s','enddatetime'=>'date|Y-m-d H:i:s');
  176. globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
  177. //CHECK ANS ARRAY
  178. $ans_arr = json_decode($parent->_request["ans_arr"]);
  179. if(count($ans_arr)==0) {
  180. $parent->response(array('response'=>'failed','message'=>$this->page_data["error5"]), 406);
  181. }
  182. $startdatetime = isset($parent->_request["startdatetime"])?$parent->_request["startdatetime"]:NOW;
  183. $enddatetime = isset($parent->_request["enddatetime"])?$parent->_request["enddatetime"]:NOW;
  184. $attempt_time=1;
  185. $remarks = escape_str($parent->_request["remarks"]);
  186. //CHECK USER ATTEMPT LIMIT
  187. $get_userresult_str="SELECT * FROM ".TABLE_ASSESSMENTRESULT." WHERE assessmentid='".$assessmentid."' AND userid='".$parent->current_user_id."' AND status=0 ORDER BY arid DESC";
  188. $userresult_arr=$parent->getQueryValue($get_userresult_str);
  189. //if(!(count($userresult_arr)>0)) $parent->response(array('response'=>'failed','message'=>$this->page_data["error8"]), 406);
  190. if(count($userresult_arr)>0 &&$userresult_arr[0]->status=='0')
  191. {
  192. //RESULT ALREADY STARTED NEED TO RESET
  193. $parent->executeQuery("UPDATE ".TABLE_ASSESSMENTRESULT." SET `remarks`= '".$remarks."', `assessmentdate`='".NOW."', `startdatetime`='".NOW."', `modified_on`='".NOW."' WHERE arid='".$userresult_arr[0]->arid."'");
  194. }else
  195. {
  196. $get_userresult_str="SELECT * FROM ".TABLE_ASSESSMENTRESULT." WHERE assessmentid='".$assessmentid."' AND userid='".$parent->current_user_id."' ORDER BY arid DESC";
  197. $userresult_arr=$parent->getQueryValue($get_userresult_str);
  198. $attempt_time=count($userresult_arr)+1;
  199. if($assessment_arr[0]->attemptslimit<=count($userresult_arr))
  200. {
  201. $parent->response(array('response'=>'failed','message'=>$this->page_data["error6"]), 406);
  202. }
  203. //RESULT INSERT
  204. $parent->executeQuery("INSERT INTO ".TABLE_ASSESSMENTRESULT." (`remarks`, `assessmentid`, `attempt_time`, `userid`, `assettypeid`, `assessmenttype`,`assessmentdate` , `startdatetime`,`status`, `created_on`, `modified_on`)VALUES('".$remarks."','".$assessmentid."','".$attempt_time."','".$parent->current_user_id."','".$assessment_arr[0]->assettypeid."','".$assessment_arr[0]->assessmenttype."', '".NOW."','".NOW."','0','".NOW."','".NOW."')");
  205. $get_userresult_str="SELECT * FROM ".TABLE_ASSESSMENTRESULT." WHERE assessmentid='".$assessmentid."' AND userid='".$parent->current_user_id."' ORDER BY arid DESC";
  206. $userresult_arr=$parent->getQueryValue($get_userresult_str);
  207. }
  208. //ASSESSMENT SCORE
  209. $ques_arr=array();
  210. $assessment_ques_arr=array();
  211. if(count($ans_arr)>0)
  212. {
  213. //GET QUESTION ARRAY
  214. foreach($ans_arr as $res)
  215. {
  216. //print_r($res);
  217. $question_arr[]=$res->qid;
  218. $assessment_ques_arr[]=$res->aqid;
  219. }
  220. }
  221. //CHECK QUESTION COUNT
  222. if(!(count($question_arr)>0) || !(count($assessment_ques_arr)>0))
  223. {
  224. $parent->response(array('response'=>'failed','message'=>$this->page_data["error7"]), 406);
  225. }
  226. //VALIDATE QUESTION
  227. $validate_assessment_ques_str =" SELECT * FROM ".TABLE_ASSESSMENT_QUESTION." WHERE assessmentid='".$assessmentid."' AND aqid IN (".@implode(',',$assessment_ques_arr).") AND qid IN (".@implode(',',$question_arr).") ";
  228. $validate_assessment_ques_arr=$parent->getQueryValue($validate_assessment_ques_str);
  229. if(!(count($validate_assessment_ques_arr)>0)) $parent->response(array('response'=>'failed','message'=>$this->page_data["error9"]), 406);
  230. //if(!(count($validate_assessment_ques_arr)==count($assessment_ques_arr))) $parent->response(array('response'=>'failed','message'=>$this->page_data["error9"]), 406);
  231. //INSERT OPTIONS
  232. $insert_result_arr=array();
  233. for($mid = 0; $mid < count($ans_arr);$mid++)
  234. {
  235. $aqid = $ans_arr[$mid]->aqid;
  236. $qid = $ans_arr[$mid]->qid;
  237. $survey_rating = (isset($ans_arr[$mid]->survey_rating))?$ans_arr[$mid]->survey_rating:0;
  238. $survey_text=(isset($ans_arr[$mid]->survey_text) && is_string($ans_arr[$mid]->survey_text))?$ans_arr[$mid]->survey_text:'';
  239. $options_arr =(isset($ans_arr[$mid]->options))?$ans_arr[$mid]->options:array();
  240. //print_r($options_arr);
  241. if(is_array($options_arr) && count($options_arr)>0) {
  242. for($nid = 0; $nid < count($options_arr);$nid++) {
  243. $option_id = $options_arr[$nid];
  244. $insert_result_arr[] = " ('".$userresult_arr[0]->arid."','".$assessmentid."','".$parent->current_user_id."','".$aqid."','".$qid."','".$survey_rating."','".$survey_text."','".$option_id."','".NOW."','".NOW."')";
  245. }
  246. } else {
  247. $insert_result_arr[] = " ('".$userresult_arr[0]->arid."','".$assessmentid."','".$parent->current_user_id."','".$aqid."','".$qid."','".$survey_rating."','".$survey_text."','','".NOW."','".NOW."')";
  248. }
  249. }
  250. //DELETE USER RESULT
  251. $parent->executeQuery("DELETE FROM ".TABLE_ASSESSMENT_USERRESULT." WHERE arid='".$userresult_arr[0]->arid."' AND userid='".$parent->current_user_id."' AND assessmentid='".$assessmentid."'");
  252. if(count($insert_result_arr)>0) {
  253. //print "INSERT INTO ".TABLE_ASSESSMENT_USERRESULT." (arid,assessmentid,userid,aqid,qid,survey_rating,survey_text,choiseid,created_on,modified_on)VALUES ".@implode(',',$insert_result_arr)."";
  254. $parent->executeQuery("INSERT INTO ".TABLE_ASSESSMENT_USERRESULT." (arid,assessmentid,userid,aqid,qid,survey_rating,survey_text,choiseid,created_on,modified_on)VALUES ".@implode(',',$insert_result_arr)."");
  255. }
  256. $exam_time_diff=strtotime($enddatetime)-strtotime($startdatetime);
  257. //ASSESSMENT RESULT
  258. $update = $parent->executeQuery("UPDATE ".TABLE_ASSESSMENTRESULT." SET `remarks`= '".$remarks."', `startdatetime`='".$startdatetime."',`enddatetime`='".$enddatetime."',time_taken='".$exam_time_diff."', `status`='1', `modified_on`='".NOW."' WHERE arid='".$userresult_arr[0]->arid."'");
  259. $highscore=0;
  260. $highscorearid=$userresult_arr[0]->arid;
  261. if(count($assessment_user_arr)>0)
  262. {
  263. $parent->executeQuery("UPDATE ".TABLE_ASSESSMENT_USER." SET highscore='".$highscore."',highscorearid='".$highscorearid."',modified_on='".NOW."' WHERE id='".$assessment_user_arr[0]->id."' AND userid='".$parent->current_user_id."'");
  264. }else
  265. {
  266. $parent->executeQuery("INSERT INTO `".TABLE_ASSESSMENT_USER."`( `assessmentid`, `userid`, `highscore`, `highscorearid`, `status`, `created_on`, `modified_on`) VALUES ('".$assessmentid."','".$parent->current_user_id."','".$highscore."','".$highscorearid."','1','".NOW."','".NOW."')");
  267. }
  268. //LOG
  269. $logstr='SURVEY SUBMIT';
  270. globalfunc::insertUserLog($parent,$logstr,$assessmentid);
  271. $parent->response(array('response'=>'success', 'data'=>array('result_id'=>$userresult_arr[0]->arid),'message'=>$this->page_data['success1']),200);
  272. break;
  273. }
  274. }
  275. /* //////////////////////////////////////////////////////////////////////////////////////////// */
  276. /* /////////////////////////////// ASSESSMENT STATUS //////////////////////////////////////////////// */
  277. private function survey_status($parent){
  278. globalfunc::checkMethodType($parent,array('GET'));
  279. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  280. globalfunc::checkParamCount($parent,2);
  281. $assessmentid = escape_str($parent->params['1']);
  282. //USER COND
  283. $user_cond_arr=projectfunc::getUserAssessmentCond($parent);
  284. $user_cond=" AND ".@implode(' AND ',$user_cond_arr);
  285. if($parent->current_user_role>7 && $parent->current_user_role<14)
  286. {
  287. $user_cond.=" AND (a.segment='0' OR a.segment='".$parent->current_user_data->segment."')";
  288. }
  289. $assessment_str = "SELECT a.* FROM ".TABLE_ASSESSMENT." as a WHERE a.status='1' AND a.assettypeid='2' AND a.schedule_id ='' AND a.assessmentid='".$assessmentid."' AND a.publisheddate<='".NOW."' ".$user_cond." LIMIT 1";
  290. $assessment_arr=$parent->getQueryValue($assessment_str);
  291. if(count($assessment_arr)>0)
  292. {
  293. //GET ALL STATUS
  294. $status_str = "SELECT * FROM ".TABLE_STATUS;
  295. $status_res_arr=$parent->getQueryValue($status_str);
  296. //print_r($status_res_arr);
  297. if(count($status_res_arr)>0)
  298. {
  299. foreach($status_res_arr as $res)
  300. {
  301. $obj_key=$res->statusid;
  302. $status_arr[$obj_key]=$res->status;
  303. }
  304. }
  305. /*
  306. *
  307. 1 Active
  308. //2 Inactive
  309. 3 Completed
  310. //4 In Progress
  311. //5 Published
  312. //6 Closed
  313. 7 Not started
  314. 8 Expired
  315. *
  316. */
  317. //S3 OBJECT
  318. $s3=awsfileserver::connectS3();
  319. //ADD EXTRA FIELDS
  320. foreach($assessment_arr as $key=>$res_assessment)
  321. {
  322. //SURVEY IMAGE
  323. $assessment_arr[$key]->assessmentimage_url=SURVEYIMAGE_URL;
  324. if($res_assessment->assessmentimage!='')
  325. {
  326. $assessment_arr[$key]->assessmentimage_url=awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_ASSESSMENT_URL.$res_assessment->assessmentimage);
  327. }
  328. $assessment_arr[$key]->is_expired ='0';
  329. //CHECK ALREADY ATTENDTED
  330. $assessment_result_str = "SELECT * FROM ".TABLE_ASSESSMENTRESULT." WHERE assessmentid='".$res_assessment->assessmentid."' AND userid='".$parent->current_user_id."' ORDER BY arid DESC";
  331. $assessment_result_arr=$parent->getQueryValue($assessment_result_str);
  332. if(count($assessment_result_arr)>0)
  333. {
  334. // 3-Completed , 4 - In Progress
  335. $assessment_arr[$key]->status =($assessment_result_arr[0]->status=='1')?'3':'1';
  336. $res_assessment->status = $assessment_arr[$key]->status;
  337. } else {
  338. $assessment_arr[$key]->status ='7';
  339. $res_assessment->status = $assessment_arr[$key]->status;
  340. }
  341. //EXPIRED
  342. if(strtotime($res_assessment->enddate)<strtotime(NOW))
  343. {
  344. $assessment_arr[$key]->is_expired='1';
  345. $assessment_arr[$key]->status = '8';
  346. $res_assessment->status = '8';
  347. }
  348. //STATUS STRING
  349. $assessment_arr[$key]->statusname=(isset($status_arr[$res_assessment->status]))?$status_arr[$res_assessment->status]:"";
  350. //ATTEMPT TIME
  351. $attempt_time_str = "SELECT * FROM ".TABLE_ASSESSMENTRESULT." WHERE assessmentid='".$res_assessment->assessmentid."' AND userid='".$parent->current_user_id."' ORDER by attempt_time DESC";
  352. $attempt_time_arr=$parent->getQueryValue($attempt_time_str);
  353. $assessment_arr[$key]->attempt_time=(count($attempt_time_arr)>0)?$attempt_time_arr[0]->attempt_time:0;
  354. //IS ATTENDED
  355. $assessment_arr[$key]->is_attended='0';
  356. $assessment_arr[$key]->result_id='';
  357. //HIGHSCORE
  358. $assessment_arr[$key]->highscore='0';
  359. if(count($attempt_time_arr)>0)
  360. {
  361. $user_assessment_score_arr=array_column($attempt_time_arr,'percentage_score');
  362. rsort( $user_assessment_score_arr);
  363. $assessment_arr[$key]->highscore=(string)$user_assessment_score_arr[0];
  364. $assessment_arr[$key]->is_attended='1';
  365. //FOR SURVEY RESULT VIEW
  366. $assessment_arr[$key]->result_id=$attempt_time_arr[0]->arid;
  367. }
  368. }
  369. }else
  370. {
  371. $parent->response(array('response'=>'failed', 'message'=>$this->page_data['error2']),406);
  372. }
  373. //LOG
  374. $logstr='SURVEY STATUS';
  375. globalfunc::insertUserLog($parent,$logstr,$assessmentid);
  376. $parent->response(array('response'=>'success', 'data'=>$assessment_arr[0],'message'=>$this->page_data['success1']),200);
  377. }
  378. /* //////////////////////////////////////////////////////////////////////////////////////////// */
  379. /* /////////////////////////////// QUESTION //////////////////////////////////////// */
  380. private function question($parent){
  381. globalfunc::checkMethodType($parent,array('GET'));
  382. globalfunc::checkParamCount($parent,2);
  383. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  384. $assessmentid = escape_str($parent->params['1']);
  385. //VALIDATE ASSESSMENT
  386. projectfunc::userSurveyValid($parent,$parent->current_user_id,$assessmentid);
  387. //ASSESSMENT VALIDATION
  388. $assessment_str = "SELECT * FROM ".TABLE_ASSESSMENT." WHERE assessmentid='".$assessmentid."' AND status='1' AND assettypeid='2' LIMIT 1";
  389. $assessment_arr=$parent->getQueryValue($assessment_str);
  390. if(count($assessment_arr)!=1) $parent->response(array('response'=>'failed','message'=>$this->page_data["error2"]),406);
  391. //S3 OBJECT
  392. $s3=awsfileserver::connectS3();
  393. if($assessment_arr[0]->randomcond=='1' )
  394. {
  395. $econd=" ORDER BY RAND() ";
  396. }else
  397. {
  398. $econd=" ORDER BY aq.aqid ASC";
  399. }
  400. //GET RATINGS IS COMMON
  401. $survey_str = "SELECT * FROM ".TABLE_SURVEY_RATING." ORDER BY id ASC";
  402. $survey_arr=$parent->getQueryValue($survey_str);
  403. $limit_str=" LIMIT 0,".$assessment_arr[0]->total_question." ";
  404. $ques_str ="SELECT aq.aqid,aq.is_mandatory,q.id as qid, q.`questiontypeid`, q.`questiontext`, q.`qimage`, q.`qvideo` FROM ".TABLE_QUESTION." as q JOIN (SELECT * FROM ".TABLE_ASSESSMENT_QUESTION." WHERE assessmentid='".$assessmentid."' )as aq ON q.id=aq.qid WHERE 1=1 ".$econd.$limit_str;
  405. $ques_arr=$parent->getQueryValue($ques_str);
  406. if(count($ques_arr)>0)
  407. {
  408. //CONNECT S3
  409. $s3=awsfileserver::connectS3();
  410. $this->rating_rid=1;
  411. foreach($ques_arr as $key=>$res_ques)
  412. {
  413. $res_ques->rating_options=array();
  414. //QUESTION IMAGE
  415. $res_ques->qimage_url='';
  416. if($res_ques->qimage!='')
  417. {
  418. $res_ques->qimage_url=awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_QUESTION_URL.$res_ques->qimage);
  419. }
  420. //QUESTION VIDEO
  421. $res_ques->qvideo_url='';
  422. if($res_ques->qvideo!='')
  423. {
  424. $res_ques->qvideo_url=awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_QUESTION_URL.$res_ques->qvideo);
  425. }
  426. //RATING QUESTION
  427. $res_ques->rating_options=array();
  428. $res_ques->options=array();
  429. if($res_ques->questiontypeid=='3')
  430. {
  431. $res_ques->rating_options=$survey_arr;
  432. }else if($res_ques->questiontypeid=='5'||$res_ques->questiontypeid=='6')
  433. {
  434. //CHOICE
  435. $chocie_arr=array();
  436. //WEB NEED selected
  437. $wed_cond=($parent->device_type=='web')?" ,'0' as selected ":'';
  438. $quesoption_str = "SELECT optid,opttext ".$wed_cond." FROM ".TABLE_QUESTIONOPTION." WHERE qid='".$res_ques->qid."'";
  439. $quesoption_arr=$parent->getQueryValue($quesoption_str);
  440. $res_ques->options = $quesoption_arr;
  441. }
  442. $question_arr[]=$res_ques;
  443. }
  444. }
  445. //LOG
  446. $logstr='SURVEY QUESTION';
  447. globalfunc::insertUserLog($parent,$logstr,$assessmentid);
  448. $parent->response(array('response'=>'success', 'data'=>$question_arr,'message'=>$this->page_data['success1']),200);
  449. }
  450. /* //////////////////////////////////////////////////////////////////////////////////////////// */
  451. /* /////////////////////////////// START SURVEY //////////////////////////////////////// */
  452. private function startsurvey($parent){
  453. globalfunc::checkMethodType($parent,array('GET'));
  454. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  455. globalfunc::checkParamCount($parent,2);
  456. //GET ASSESSMENTID
  457. $assessmentid = escape_str($parent->params[1]);
  458. //VALIDATE ASSESSMENT
  459. projectfunc::userSurveyValid($parent,$parent->current_user_id,$assessmentid);
  460. //ASSESSMENT VALIDATION
  461. $assessment_str = "SELECT * FROM ".TABLE_ASSESSMENT." WHERE assessmentid='".$assessmentid."' AND status='1' AND assettypeid='2' LIMIT 1";
  462. $assessment_arr=$parent->getQueryValue($assessment_str);
  463. if(count($assessment_arr)!=1) $parent->response(array('response'=>'failed','message'=>$this->page_data["error2"]),406);
  464. $attempt_time=1;
  465. //CHECK USER ATTEMPT LIMIT
  466. $get_userresult_str="SELECT * FROM ".TABLE_ASSESSMENTRESULT." WHERE assessmentid='".$assessmentid."' AND userid='".$parent->current_user_id."' ORDER BY arid DESC";
  467. $userresult_arr=$parent->getQueryValue($get_userresult_str);
  468. if($assessment_user_arr[0]->attemptslimit<=count($userresult_arr))
  469. {
  470. $parent->response(array('response'=>'failed','message'=>$this->page_data["error6"]), 406);
  471. }
  472. else
  473. {
  474. $attempt_time=count($userresult_arr)+1;
  475. }
  476. //CHECK IN PROGRESS EXAM EXIST
  477. if($userresult_arr[0]->status=='0')
  478. {
  479. //RESULT ALREADY STARTED NEED TO RESET
  480. $parent->executeQuery("UPDATE ".TABLE_ASSESSMENTRESULT." SET `assessmentdate`='".NOW."', `startdatetime`='".NOW."', `modified_on`='".NOW."' WHERE arid='".$userresult_arr[0]->arid."'");
  481. }else
  482. {
  483. //RESULT INSERT
  484. $parent->executeQuery("INSERT INTO ".TABLE_ASSESSMENTRESULT." (`assessmentid`, `attempt_time`, `userid`, `assettypeid`, `assessmenttype`,`assessmentdate` , `startdatetime`,`status`, `created_on`, `modified_on`)VALUES('".$assessmentid."','".$attempt_time."','".$parent->current_user_id."','".$assessment_arr[0]->assettypeid."','".$assessment_arr[0]->assessmenttype."', '".NOW."','".NOW."','0','".NOW."','".NOW."')");
  485. }
  486. //LOG
  487. $logstr='START SURVEY';
  488. globalfunc::insertUserLog($parent,$logstr,$assessmentid);
  489. $parent->response(array('response'=>'success','message'=>$this->page_data['success1']),200);
  490. }
  491. /* //////////////////////////////////////////////////////////////////////////////////////////// */
  492. /* /////////////////////////////// REVIEW //////////////////////////////////////// */
  493. private function review($parent){
  494. globalfunc::checkMethodType($parent,array('GET'));
  495. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  496. globalfunc::checkParamCount($parent,2);
  497. //GET RESULTID
  498. $arid = escape_str($parent->params[1]);
  499. $get_user_assessmentresult_str="SELECT * FROM ".TABLE_ASSESSMENTRESULT." WHERE userid='".$parent->current_user_id."' AND arid='".$arid."'";
  500. $user_assessmentresult_arr=$parent->getQueryValue($get_user_assessmentresult_str);
  501. if(!(count($user_assessmentresult_arr)>0))
  502. {
  503. $parent->response(array('response'=>'failed','message'=>$this->page_data["error2"]), 406);
  504. }
  505. //CONNECT S3
  506. $s3=awsfileserver::connectS3();
  507. $result_arr=array();
  508. //GET ASSESSMENT RESULT
  509. $get_user_ques_result_str="SELECT * FROM ".TABLE_ASSESSMENT_USERRESULT." WHERE userid='".$parent->current_user_id."' AND arid='".$arid."' GROUP BY aqid ORDER BY userresultid ASC";
  510. $user_ques_result_arr=$parent->getQueryValue($get_user_ques_result_str);
  511. if(count($user_ques_result_arr)>0)
  512. {
  513. //RATING
  514. $survey_str = "SELECT * FROM ".TABLE_SURVEY_RATING." ORDER BY id ASC";
  515. $survey_arr=$parent->getQueryValue($survey_str);
  516. foreach($user_ques_result_arr as $res_value)
  517. {
  518. $ques_str ="SELECT q.id as qid, q.`questiontypeid`, q.`questiontext`, q.`qimage`, q.`qvideo` FROM ".TABLE_QUESTION." as q WHERE id='".$res_value->qid."' LIMIT 1";
  519. $ques_arr=$parent->getQueryValue($ques_str);
  520. if(count($ques_arr)>0)
  521. {
  522. //QUESTION IMAGE
  523. $ques_arr[0]->qimage_url='';
  524. if($ques_arr[0]->qimage!='')
  525. {
  526. $ques_arr[0]->qimage_url=awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_QUESTION_URL.$ques_arr[0]->qimage);
  527. }
  528. //QUESTION VIDEO
  529. $ques_arr[0]->qvideo_url='';
  530. if($ques_arr[0]->qvideo!='')
  531. {
  532. $ques_arr[0]->qvideo_url=awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_QUESTION_URL.$ques_arr[0]->qvideo);
  533. }
  534. //GET USER ANSWERED OPTIONS
  535. $user_answer_str ="SELECT * FROM ".TABLE_ASSESSMENT_USERRESULT." WHERE userid='".$parent->current_user_id."' AND arid='".$arid."' AND aqid='".$res_value->aqid."'";
  536. $user_answer_arr=$parent->getQueryValue($user_answer_str);
  537. //GET RATING
  538. $ques_arr[0]->rating_options=array();
  539. $ques_arr[0]->survey_text='';
  540. $ques_arr[0]->options=array();
  541. if($ques_arr[0]->questiontypeid=='3')
  542. {
  543. if(count($survey_arr)>0)
  544. {
  545. foreach($survey_arr as $skey=>$res_survey)
  546. {
  547. $survey_arr[$skey]->selected=(count($user_answer_arr)>0 && $user_answer_arr[0]->survey_rating==$res_survey->score)?'1':'0';
  548. }
  549. }
  550. $ques_arr[0]->rating_options=$survey_arr;
  551. }elseif($ques_arr[0]->questiontypeid=='5' ||$ques_arr[0]->questiontypeid=='6')
  552. {
  553. $choise_arr=array();
  554. if(count($user_answer_arr)>0)
  555. {
  556. $choise_arr=array_column($user_answer_arr,'choiseid');
  557. }
  558. //GET ALL QUESTION OPTIONS
  559. $ques_option_str ="SELECT op.optid,op.opttext,'0' as selected FROM ".TABLE_QUESTIONOPTION." as op WHERE op.qid='".$res_value->qid."'";
  560. $ques_option_arr=$parent->getQueryValue($ques_option_str);
  561. if(count($ques_option_arr)>0)
  562. {
  563. foreach($ques_option_arr as $mkey=>$res_opt)
  564. {
  565. if(count($user_answer_arr)>0)
  566. {
  567. $ques_option_arr[$mkey]->selected=(in_array($res_opt->optid,$choise_arr))?'1':'0';
  568. }
  569. }
  570. }
  571. $ques_arr[0]->options=$ques_option_arr;
  572. }
  573. else{
  574. $ques_arr[0]->survey_text=(count($user_answer_arr)>0 && $user_answer_arr[0]->survey_text!='')?$user_answer_arr[0]->survey_text:'';
  575. }
  576. $result_arr[]=$ques_arr[0];
  577. }
  578. }
  579. }
  580. //LOG
  581. $logstr='SURVEY REVIEW';
  582. globalfunc::insertUserLog($parent,$logstr,$arid);
  583. $parent->response(array('response'=>'success','data'=>$result_arr,'message'=>$this->page_data['success1']),200);
  584. }
  585. /* //////////////////////////////////////////////////////////////////////////////////////////// */
  586. }
  587. ?>