trainer.php 65 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211
  1. <?php
  2. /****************************
  3. * File : trainer.php
  4. * Author : Cygnusa
  5. * @2018
  6. ****************************/
  7. //SECURITY
  8. if ( ! defined('APPLICATION_PATH')) exit('No direct script access allowed');
  9. class trainer
  10. {
  11. //FUNCTION LISTS
  12. function __construct($parent)
  13. {
  14. //GET PAGE MESSAGE
  15. $this->page_data=globalfunc::getMessage($parent,$parent->lang,'trainer');
  16. if(count($parent->params)==0)
  17. {
  18. // $this->dashboardfunc($parent);
  19. }else
  20. {
  21. $qry_params=explode ("?",$parent->params[0]);
  22. $parameter_val=strtolower($qry_params[0]);
  23. switch($parameter_val){
  24. case "monthdata":
  25. case "training":
  26. case "participant":
  27. case "smpinparticipant":
  28. case "removeparticipant":
  29. case "batch":
  30. case "newtraining":
  31. case "participantscore":
  32. case "trainingimageupload":
  33. case "participantimageupload":
  34. $this->$parameter_val($parent );
  35. break;
  36. default:
  37. break;
  38. }
  39. }
  40. $parent->response(array('response'=>'failed', 'message' => 'PAGE NOT FOUND'), 404);
  41. }
  42. /* /////////////////////////////// MONTH DATA //////////////////////////////////////////////// */
  43. private function monthdata($parent)
  44. {
  45. globalfunc::checkMethodType($parent,array('POST'));
  46. globalfunc::checkParamCount($parent,3);
  47. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  48. projectfunc::authorizedRole($parent,array('5'));
  49. $year_data=escape_str($parent->params[1]);
  50. $last_data = escape_str($parent->params[2]);
  51. $last_data_arr= explode('?',$last_data);
  52. $month_data=escape_str(trim($last_data_arr[0]));
  53. $startmonth=date('Y-m-d',strtotime($year_data."-".$month_data."-01"))." 00:00:00";
  54. $nextmonth=date('Y-m-d',strtotime('+1 month',strtotime($startmonth)))." 23:59:59";
  55. //PAGINDATION
  56. $limit_str=globalfunc::setPageLimit($parent,$parent->params[2]);
  57. $limit_cond=($limit_str)?" LIMIT ".$limit_str:'';
  58. //SEARCH
  59. $search_cond='';
  60. $search_str = (isset($parent->_request["search"]))?escape_str($parent->_request["search"]):'';
  61. if($search_str!='')
  62. {
  63. $search_cond=" AND schedule_name LIKE'%".$search_str."%'";
  64. }
  65. $date_cond .= " AND (( start_date BETWEEN CAST('".$startmonth."' AS DATE) AND CAST('".$nextmonth."' AS DATE)) OR (end_date BETWEEN CAST('".$startmonth."' AS DATE)AND CAST('".$nextmonth."' AS DATE))OR ( CAST('".$startmonth."' AS DATE) BETWEEN start_date AND end_date) OR ( CAST('".$nextmonth."' AS DATE) BETWEEN start_date AND end_date))";
  66. $order_by_cond=" ORDER BY start_date ASC ";
  67. $schedule_str = "SELECT * FROM ".TABLE_TRAINING_SCHEDULE." WHERE trainer_id='".$parent->current_user_id."' ".$date_cond.$search_cond.$order_by_cond.$limit_cond;;
  68. $schedule_arr=$parent->getQueryValue($schedule_str);
  69. if(count($schedule_arr)>0)
  70. {
  71. foreach($schedule_arr as $skey=>$res_schedule)
  72. {
  73. switch($res_schedule->assessment_type)
  74. {
  75. case "0":
  76. $assessment_type_str="Pre Assessment";
  77. break;
  78. case "1":
  79. $assessment_type_str="Post Assessment";
  80. break;
  81. case "2":
  82. $assessment_type_str="Common";
  83. break;
  84. }
  85. $schedule_arr[$skey]->assessment_type_str=$assessment_type_str;
  86. $schedule_status_str="";
  87. switch($res_schedule->status)
  88. {
  89. case "1":
  90. if(strtotime($res_schedule->start_date)>strtotime(NOW))
  91. {
  92. $schedule_status_str="Not Started";
  93. }else if(strtotime($res_schedule->end_date)>strtotime(NOW))
  94. {
  95. $schedule_status_str="Expired";
  96. }else
  97. {
  98. $schedule_status_str="In-progress";
  99. }
  100. break;
  101. case "2":
  102. $schedule_status_str="Closed";
  103. break;
  104. case "3":
  105. $schedule_status_str="Closed";
  106. break;
  107. case "4":
  108. $schedule_status_str="Closed";
  109. break;
  110. }
  111. $schedule_arr[$skey]->status_str=$schedule_status_str;
  112. $schedule_arr[$skey]->schedule_start_date=date('Y-m-d',strtotime($res_schedule->start_date));
  113. }
  114. }
  115. //GET COUNT
  116. $get_count_str="SELECT COUNT(schedule_id)as scount FROM ".TABLE_TRAINING_SCHEDULE." WHERE trainer_id='".$parent->current_user_id."' ".$search_cond.$date_cond." LIMIT 1";
  117. $get_count_arr=$parent->getQueryValue($get_count_str);
  118. $total=(count($get_count_arr)>0)?$get_count_arr[0]->scount:0;
  119. $last_page=($total)?ceil($total/$parent->current_limit)-1:0;
  120. //LOG
  121. $logstr='TRAINER TRAINING LIST';
  122. globalfunc::insertUserLog($parent,$logstr);
  123. $parent->response(array('response'=>'success', 'data'=>$schedule_arr,'total'=>$total,'last_page'=>$last_page,'current_page'=>$parent->current_page, 'message'=>$this->page_data['success1']),200);
  124. }
  125. /* //////////////////////////////////////////////////////////////////////////////////////////// */
  126. /* /////////////////////////////// TRAINING //////////////////////////////////////////////// */
  127. private function training($parent)
  128. {
  129. globalfunc::checkMethodType($parent,array('GET','POST'));
  130. switch ($parent->get_request_method()){
  131. case "GET":
  132. globalfunc::checkParamCount($parent,2);
  133. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  134. projectfunc::authorizedRole($parent,array('5'));
  135. $schedule_id=escape_str($parent->params[1]);
  136. $schedule_str = "SELECT * FROM ".TABLE_TRAINING_SCHEDULE." WHERE trainer_id='".$parent->current_user_id."' AND schedule_id='".$schedule_id."' LIMIT 1";
  137. $schedule_arr=$parent->getQueryValue($schedule_str);
  138. if(count($schedule_arr)>0)
  139. {
  140. $schedule_arr[0]->participant=array();
  141. switch($schedule_arr[0]->assessment_type)
  142. {
  143. case "0":
  144. $assessment_type_str="Pre Assessment";
  145. break;
  146. case "1":
  147. $assessment_type_str="Post Assessment";
  148. break;
  149. }
  150. $schedule_arr[0]->assessment_type_str=$assessment_type_str;
  151. $schedule_status_str="";
  152. switch($schedule_arr[0]->status)
  153. {
  154. case "1":
  155. if(strtotime($schedule_arr[0]->start_date)>strtotime(NOW))
  156. {
  157. $schedule_status_str="Not Started";
  158. }else if(strtotime($schedule_arr[0]->end_date)>strtotime(NOW))
  159. {
  160. $schedule_status_str="Expired";
  161. }else
  162. {
  163. $schedule_status_str="In-progress";
  164. }
  165. break;
  166. case "2":
  167. $schedule_status_str="Closed";
  168. break;
  169. case "3":
  170. $schedule_status_str="Closed";
  171. break;
  172. case "4":
  173. $schedule_status_str="Closed";
  174. break;
  175. }
  176. $schedule_arr[0]->status_str=$schedule_status_str;
  177. $schedule_arr[0]->schedule_start_date=date('Y-m-d',strtotime($res_schedule->start_date));
  178. //PARTICIPANT
  179. $participant_str = "SELECT p.`userid`, p.`is_attendance`,p.remarks, p.`score`, p.`assessment_score`,u.smpin,CONCAT(fname,lname)as name,d.dealer_name,p.creatorid FROM ".TABLE_TRAINING_PARTICIPANT." p JOIN ".TABLE_USER." u ON p.userid=u.userid JOIN ".DMS_DEALER." d ON d.dealer_code=u.dealer_code WHERE p.schedule_id='".$schedule_arr[0]->schedule_id."' ";
  180. $participant_arr=$parent->getQueryValue($participant_str);
  181. if(count($participant_arr)>0)
  182. {
  183. foreach($participant_arr as $skey=>$res_part)
  184. {
  185. $assessment_str = "SELECT ta.assessmentid,ta.schedule_id FROM ".TABLE_TRAINING_ASSESSMENT." as ta JOIN ".TABLE_ASSESSMENT_USER." as au ON ta.assessmentid=au.assessmentid AND ta.userid=au.userid WHERE ta.schedule_id='".$schedule_arr[0]->schedule_id."' AND ta.userid='".$res_part->userid."' LIMIT 1";
  186. $assessment_arr=$parent->getQueryValue($assessment_str);
  187. $participant_arr[$skey]->is_edit=($res_part->creatorid==$parent->current_user_id)?"1":"0";
  188. $participant_arr[$skey]->is_delete=(count($assessment_arr)>0)?"0":"1";
  189. $participant_arr[$skey]->is_created=($res_part->creatorid==$parent->current_user_id)?"1":"0";
  190. }
  191. $schedule_arr[0]->participant=$participant_arr;
  192. }
  193. //LOG
  194. $logstr='TRAINING DETAILS';
  195. globalfunc::insertUserLog($parent,$logstr);
  196. $parent->response(array('response'=>'success', 'data'=>$schedule_arr[0], 'message'=>$this->page_data['success1']),200);
  197. }else
  198. {
  199. $parent->response(array('response'=>'failed','message'=>$this->page_data["error1"]),406);
  200. }
  201. break;
  202. case "POST":
  203. //SUBMIT
  204. globalfunc::checkParamCount($parent,2);
  205. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  206. projectfunc::authorizedRole($parent,array('5'));
  207. $schedule_id=escape_str($parent->params[1]);
  208. //FIELDS VALIDATION
  209. $REQUEST_KEYS=array('participant_json'=>'string');
  210. globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
  211. //CHECK ANS ARRAY
  212. $participant_arr = json_decode($parent->_request["participant_json"]);
  213. if(!count($participant_arr)>0) $parent->response(array('response'=>'failed','message'=>$this->page_data["error2"]),406);
  214. $schedule_str = "SELECT * FROM ".TABLE_TRAINING_SCHEDULE." WHERE trainer_id='".$parent->current_user_id."' AND schedule_id='".$schedule_id."' LIMIT 1";
  215. $schedule_arr=$parent->getQueryValue($schedule_str);
  216. $user_id_arr=array();
  217. if(count($schedule_arr)>0)
  218. {
  219. //DATE CHECK
  220. if(strtotime(NOW)>=strtotime($schedule_arr[0]->end_date))$parent->response(array('response'=>'failed','message'=>$this->page_data["error3"]),406);
  221. foreach($participant_arr as $res_part)
  222. {
  223. $participant_ids[]=$res_part->userid;
  224. $user_id_arr[$res_part->userid]=$res_part;
  225. }
  226. $assessment_str = "SELECT ta.assessmentid,ta.schedule_id FROM ".TABLE_TRAINING_ASSESSMENT." as ta JOIN ".TABLE_ASSESSMENT_USER." as au ON ta.assessmentid=au.assessmentid AND ta.userid=au.userid WHERE ta.schedule_id='".$schedule_id."' AND ta.userid NOT IN (".@implode(',',$participant_ids).") LIMIT 1";
  227. $assessment_arr=$parent->getQueryValue($assessment_str);
  228. if(count($assessment_arr)>0) $parent->response(array('response'=>'failed','message'=>$this->page_data["error4"]),406);
  229. //CURRENT PARTICIPNAT
  230. $schedule_part_str = "SELECT * FROM ".TABLE_TRAINING_PARTICIPANT." WHERE schedule_id='".$schedule_id."' ";
  231. $schedule_part_arr=$parent->getQueryValue($schedule_part_str);
  232. if(count($schedule_part_arr)>0)
  233. {
  234. foreach($schedule_part_arr as $res_part)
  235. {
  236. $cur_participant_ids[]=$res_part->userid;
  237. if(in_array($res_part->userid, $participant_ids))
  238. {
  239. $update_str="UPDATE ".TABLE_TRAINING_PARTICIPANT ." SET `is_attendance`='".$user_id_arr[$res_part->userid]->is_attendance."', `remarks`='".$user_id_arr[$res_part->userid]->remarks."', `score`='".$user_id_arr[$res_part->userid]->score."', `modified_on`='".NOW."' WHERE participant_id='".$res_part->participant_id."'";
  240. $parent->executeQuery($update_str);
  241. }
  242. }
  243. //GET NEW PARTICIPANT
  244. $new_participant=array_diff($participant_ids,$cur_participant_ids);
  245. if(count($new_participant)>0)
  246. {
  247. $new_part_ins=array();
  248. foreach($new_participant as $res_part)
  249. {
  250. $participant_data=$user_id_arr[$res_part];
  251. $new_part_ins[]=" ( '".$schedule_id."', '".$res_part."','".$participant_data->is_attendance."', '".$participant_data->remarks."','".$participant_data->score."','','".$parent->current_user_id."','".NOW."','".NOW."')";
  252. }
  253. //INSERT NEW PARTICIPANT
  254. $insert_part_qry = "INSERT INTO ".TABLE_TRAINING_PARTICIPANT ." ( `schedule_id`, `userid`, `is_attendance`, `remarks`, `score`, `assessment_score`, `creatorid`, `created_on`, `modified_on`) VALUES ".@implode(',',$new_part_ins);
  255. $parent->executeQuery($insert_part_qry);
  256. }
  257. //DELETE
  258. $delete_participant=array_diff($cur_participant_ids,$participant_ids);
  259. if(count($delete_participant)>0)
  260. {
  261. //DELETE PARTICIPANT
  262. $delete_part_qry = "DELETE FROM ".TABLE_TRAINING_PARTICIPANT ." WHERE schedule_id='".$schedule_id."' AND userid IN (".@implode(',',$delete_participant).")";
  263. $parent->executeQuery($delete_part_qry);
  264. }
  265. }else
  266. {
  267. $new_part_ins=array();
  268. foreach($participant_arr as $res_part)
  269. {
  270. $participant_ids[]=$res_part->userid;
  271. $participant_data=$user_id_arr[$res_part];
  272. $new_part_ins[]=" ( '".$schedule_id."', '".$res_part."','".$participant_data->is_attendance."', '".$participant_data->remarks."','".$participant_data->score."','','".$parent->current_user_id."','".NOW."','".NOW."')";
  273. }
  274. //INSERT NEW PARTICIPANT
  275. $insert_part_qry = "INSERT INTO ".TABLE_TRAINING_PARTICIPANT ." ( `schedule_id`, `userid`, `is_attendance`, `remarks`, `score`, `assessment_score`, `creatorid`, `created_on`, `modified_on`) VALUES ".@implode(',',$new_part_ins);
  276. $parent->executeQuery($insert_part_qry);
  277. }
  278. $assessment_str = "SELECT * FROM ".TABLE_TRAINING_ASSESSMENT." WHERE schedule_id='".$schedule_id."'";
  279. $assessment_arr=$parent->getQueryValue($assessment_str);
  280. if(count($assessment_arr)>0)
  281. {
  282. foreach($assessment_arr as $res_ass)
  283. {
  284. $cur_assess_ids[]=$res_ass->userid;
  285. }
  286. //GET NEW PARTICIPANT
  287. $new_ass_participant=array_diff($participant_ids,$cur_assess_ids);
  288. if(count($new_ass_participant)>0)
  289. {
  290. $new_ass_ins=array();
  291. foreach($new_ass_participant as $res_ass_part)
  292. {
  293. $new_ass_ins[]=" ( '".$assessment_arr[0]->assessmentid."', '".$schedule_id."','".$res_ass_part->userid."', '0')";
  294. }
  295. //INSERT NEW PARTICIPANT
  296. $insert_ass_qry = "INSERT INTO ".TABLE_TRAINING_ASSESSMENT ." (`assessmentid`, `schedule_id`, `userid`, `is_attended`) VALUES ".@implode(',',$new_ass_ins);
  297. $parent->executeQuery($insert_ass_qry);
  298. }
  299. //DELETE
  300. $delete_ass_participant=array_diff($cur_assess_ids,$participant_ids);
  301. if(count($delete_ass_participant)>0)
  302. {
  303. //DELETE PARTICIPANT
  304. $delete_asspart_qry = "DELETE FROM ".TABLE_TRAINING_ASSESSMENT ." WHERE schedule_id='".$schedule_id."' AND userid IN (".@implode(',',$delete_ass_participant).")" ;
  305. $parent->executeQuery($delete_asspart_qry);
  306. }
  307. }else
  308. {
  309. $get_assess_str = "SELECT * FROM ".TABLE_ASSESSMENT." WHERE schedule_id='".$schedule_id."' AND atype='1' LIMIT 1";
  310. $get_assess_arr=$parent->getQueryValue($get_assess_str);
  311. if(count($get_assess_arr)>0)
  312. {
  313. $new_ins_ass=array();
  314. foreach($participant_arr as $res_part)
  315. {
  316. //$participant_ids[]=$res_part->userid;
  317. $new_ins_ass[]=" ( '".$get_assess_arr[0]->assessmentid."', '".$schedule_id."','".$res_part->userid."','')";
  318. }
  319. //INSERT TRAINING ASSESSMENT
  320. $insert_ins_qry = "INSERT INTO ".TABLE_TRAINING_ASSESSMENT ." (`assessmentid`, `schedule_id`, `userid`, `is_attended`) VALUES ".@implode(',',$new_ins_ass);
  321. $parent->executeQuery($insert_ins_qry);
  322. }
  323. }
  324. $is_save =(isset($parent->_request["is_save"]))? escape_str($parent->_request["is_save"]):'';
  325. if($is_save!='1')
  326. {
  327. //UPDATE
  328. $update_qry = "UPDATE ".TABLE_TRAINING_SCHEDULE ." SET status='2', modified_on='".NOW."' WHERE schedule_id='".$schedule_id."'";
  329. $parent->executeQuery($update_qry);
  330. }
  331. }else
  332. {
  333. $parent->response(array('response'=>'failed','message'=>$this->page_data["error1"]),406);
  334. }
  335. //LOG
  336. $logstr='TRAINING SUBMIT';
  337. globalfunc::insertUserLog($parent,$logstr,$schedule_id);
  338. $parent->response(array('response'=>'success', 'data'=>$schedule_arr[0], 'message'=>$this->page_data['success1']),200);
  339. break;
  340. }
  341. }
  342. /* //////////////////////////////////////////////////////////////////////////////////////////// */
  343. /* /////////////////////////////// PARTICIPANT //////////////////////////////////////////////// */
  344. private function participant($parent)
  345. {
  346. globalfunc::checkMethodType($parent,array('POST'));
  347. globalfunc::checkParamCount($parent,1);
  348. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  349. $REQUEST_KEYS=array('lvl_id'=>'integer');
  350. globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
  351. $lvl_id=$parent->_request["lvl_id"];
  352. if((isset($parent->_request["zone"])))
  353. {
  354. $zone = (isset($parent->_request["zone"]))?escape_str($parent->_request["zone"]):'';
  355. if($zone)
  356. {
  357. $zone_arr=@explode(',',$zone);
  358. $zone_quotes = array_map("quotes_array", $zone_arr);
  359. $dealercond.=" AND zone IN (".@implode(',',$zone_quotes).")";
  360. }else
  361. {
  362. $dealercond.=" AND zone IN ('')";
  363. }
  364. }
  365. if(isset($parent->_request["city"]) )
  366. {
  367. $city = (isset($parent->_request["city"]) )?escape_str($parent->_request["city"]):'';
  368. if($city)
  369. {
  370. $city_arr=@explode(',',$city);
  371. $city_quotes = array_map("quotes_array", $city_arr);
  372. $dealercond.=" AND city IN (".@implode(',',$city_quotes).")";
  373. }else
  374. {
  375. $dealercond.=" AND city IN ('')";
  376. }
  377. }
  378. if((isset($parent->_request["dealer"])))
  379. {
  380. $dealer = (isset($parent->_request["dealer"]))?escape_str($parent->_request["dealer"]):'';
  381. if($dealer)
  382. {
  383. $dealer_arr=@explode(',',$dealer);
  384. $dealer_quotes = array_map("quotes_array", $dealer_arr);
  385. $cond.=" AND dealer IN (".@implode(',',$dealer_quotes).")";
  386. $dealer_code_cond=" AND dealer_code IN (".@implode(',',$dealer_quotes).")";
  387. }else
  388. {
  389. $cond.=" AND dealer IN ('')";
  390. $dealer_code_cond=" AND dealer_code IN ('')";
  391. }
  392. }
  393. if((isset($parent->_request["schedule_id"])))
  394. {
  395. $edit_cond=" AND s.schedule_id!='".escape_str($parent->_request["schedule_id"])."'";
  396. }
  397. if((isset($parent->_request["user_type"])))
  398. {
  399. $edit_cond=" AND s.schedule_id!='".escape_str($parent->_request["user_type"])."'";
  400. }
  401. $user_cond=(isset($parent->_request["user_type"]) && $parent->_request["user_type"]=='0')?" AND role>7 AND role<14":" AND role=15";
  402. $data_arr=array();
  403. $dealercond=($dealercond!='')?" AND dealer_code IN (SELECT * FROM ".DMS_DEALER." WHERE status='1' AND ".$dealercond.")":"";
  404. $dealer_arr=$parent->getQueryValue("SELECT * FROM ".DMS_DEALER." WHERE status='1' ".$dealer_code_cond.$dealercond);
  405. if(count($dealer_arr)>0)
  406. {
  407. foreach($dealer_arr as $res_dealer)
  408. {
  409. $arr=new stdClass();
  410. $query_str = "SELECT userid,`smpin`, CONCAT(fname,lname) as name FROM ".TABLE_USER." WHERE status='1' ".$user_cond." AND is_deleted='0' AND dealer_code='".$res_dealer->dealer_code."' AND smpin IN (SELECT smpin FROM ".TABLE_USER_LEARNING." WHERE current_status='1' AND lvl_id='".$lvl_id."') AND userid NOT IN (SELECT p.userid FROM ".TABLE_TRAINING_PARTICIPANT." p JOIN ".TABLE_TRAINING_SCHEDULE." s ON p.schedule_id=s.schedule_id WHERE s.status<4 AND s.is_deleted=0 ".$edit_cond.") ORDER BY dealer_code";
  411. $user_arr=$parent->getQueryValue($query_str);
  412. if(count($user_arr)>0)
  413. {
  414. $arr->user =$user_arr;
  415. $arr->dealer_code=$res_dealer->dealer_code;
  416. $arr->dealer_name=$res_dealer->dealer_name;
  417. $data_arr[]=$arr;
  418. }
  419. }
  420. }
  421. //LOG
  422. $logstr='PARTICIPANT LIST';
  423. globalfunc::insertUserLog($parent,$logstr);
  424. $parent->response(array('response'=>'success', 'data'=>$data_arr, 'message'=>$this->page_data['success1']),200);
  425. }
  426. /* //////////////////////////////////////////////////////////////////////////////////////////// */
  427. /* /////////////////////////////// PARTICIPANT //////////////////////////////////////////////// */
  428. private function smpinparticipant($parent)
  429. {
  430. globalfunc::checkMethodType($parent,array('POST'));
  431. globalfunc::checkParamCount($parent,1);
  432. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  433. //FIELDS VALIDATION
  434. $REQUEST_KEYS=array('schedule_id'=>'integer','smpin'=>'string');
  435. globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
  436. $schedule_id= escape_str($parent->_request["schedule_id"]);
  437. $smpin= escape_str($parent->_request["smpin"]);
  438. $schedule_str = "SELECT * FROM ".TABLE_TRAINING_SCHEDULE." WHERE trainer_id='".$parent->current_user_id."' AND schedule_id='".$schedule_id."' LIMIT 1";
  439. $schedule_arr=$parent->getQueryValue($schedule_str);
  440. $user_id_arr=array();
  441. if(count($schedule_arr)>0)
  442. {
  443. $lvl_id=$schedule_arr[0]->lvl_id;
  444. $user_cond=($schedule_arr[0]->user_type=='0')?" AND role>7 AND role<14":" AND role=15";
  445. $query_smpin_str = "SELECT userid,`smpin`, CONCAT(fname,lname) as name FROM ".TABLE_USER." WHERE status='1' ".$user_cond." AND is_deleted='0' AND smpin IN (SELECT smpin FROM ".TABLE_USER_LEARNING." WHERE current_status='1' AND lvl_id='".$lvl_id."') AND smpin='".$smpin."' ORDER BY dealer_code";
  446. $user_arr=$parent->getQueryValue($query_smpin_str);
  447. if(count($user_arr)>0)
  448. {
  449. // AND userid NOT IN (SELECT p.userid FROM ".TABLE_TRAINING_PARTICIPANT." p JOIN ".TABLE_TRAINING_SCHEDULE." s ON p.schedule_id=s.schedule_id WHERE s.status<4 AND s.is_deleted=0 )
  450. //USER ALREADY IN PARTICIPANT
  451. $query_check_str ="SELECT p.userid FROM ".TABLE_TRAINING_PARTICIPANT." p JOIN ".TABLE_TRAINING_SCHEDULE." s ON p.schedule_id=s.schedule_id WHERE s.status<4 AND s.is_deleted=0 AND p.userid='".$user_arr[0]->userid."' ";
  452. $check_arr=$parent->getQueryValue($query_check_str);
  453. if(count($check_arr)>0)
  454. {
  455. $parent->response(array('response'=>'failed','message'=>$this->page_data["error6"]),406);
  456. }else
  457. {
  458. $insert_train_qry = "INSERT INTO ".TABLE_TRAINING_PARTICIPANT ." ( `schedule_id`, `userid`, `is_attendance`, `score`, `assessment_score`, `creatorid`, `created_on`, `modified_on`) VALUES ( '".$schedule_id."', '".$user_arr[0]->userid."','','', '','".$parent->current_user_id."', '".NOW."', '".NOW."')";
  459. $parent->executeQuery($insert_train_qry);
  460. //SEND NOTIFICATION
  461. $nobj=new stdClass();
  462. $notificationtext="New Training scheduled - `".$schedule_arr[0]->schedule_name."` from date : ".date('d M Y',strtotime($schedule_arr[0]->start_date))." - ".date('d M Y',strtotime($shedule_arr[0]->end_date));
  463. $nobj->notificationtitle=$schedule_arr[0]->schedule_name;
  464. $nobj->notificationtext=$notificationtext;
  465. $nobj->notificationtype='5';
  466. $nobj->notificationdata=new stdClass();
  467. // projectfunc::sendUserNotification($parent,$nobj,$user_arr[0]->userid);
  468. $train_assess_str ="SELECT * FROM ".TABLE_ASSESSMENT." WHERE schedule_id='".$schedule_id."' AND atype='1' LIMIT 1 ";
  469. $train_assess_arr=$parent->getQueryValue($train_assess_str);
  470. if(count($train_assess_arr)>0)
  471. {
  472. //ASSESSMENT QUESTION
  473. $train_assess_qry= "INSERT INTO ".TABLE_TRAINING_ASSESSMENT ." ( `assessmentid`, `schedule_id`, `userid`, `is_attended`) VALUES ('".$train_assess_arr[0]->assessmentid."', '".$schedule_id."', '".$user_arr[0]->userid."','')";
  474. $parent->executeQuery($train_assess_qry);
  475. }
  476. //PARTICIPANT
  477. $participant_str = "SELECT p.`userid`, p.`is_attendance`,p.remarks, p.`score`, p.`assessment_score`,u.smpin,CONCAT(fname,lname)as name,d.dealer_name,p.creatorid FROM ".TABLE_TRAINING_PARTICIPANT." p JOIN ".TABLE_USER." u ON p.userid=u.userid JOIN ".DMS_DEALER." d ON d.dealer_code=u.dealer_code WHERE p.schedule_id='".$schedule_id."' AND u.userid='".$user_arr[0]->userid."' ";
  478. $participant_arr=$parent->getQueryValue($participant_str);
  479. if(count($participant_arr)>0)
  480. {
  481. foreach($participant_arr as $skey=>$res_part)
  482. {
  483. $assessment_str = "SELECT ta.assessmentid,ta.schedule_id FROM ".TABLE_TRAINING_ASSESSMENT." as ta JOIN ".TABLE_ASSESSMENT_USER." as au ON ta.assessmentid=au.assessmentid AND ta.userid=au.userid WHERE ta.schedule_id='".$schedule_id."' AND ta.userid='".$res_part->userid."' LIMIT 1";
  484. $assessment_arr=$parent->getQueryValue($assessment_str);
  485. $participant_arr[$skey]->is_edit="1";
  486. $participant_arr[$skey]->is_delete=(count($assessment_arr)>0)?"0":"1";
  487. $participant_arr[$skey]->is_created=($res_part->creatorid==$parent->current_user_id)?"1":"0";
  488. }
  489. }
  490. //LOG
  491. $logstr='PARTICIPANT ADD';
  492. globalfunc::insertUserLog($parent,$logstr,$schedule_id);
  493. $parent->response(array('response'=>'success', 'data'=>$participant_arr, 'message'=>$this->page_data['success1']),200);
  494. }
  495. }else
  496. {
  497. $parent->response(array('response'=>'failed','message'=>$this->page_data["error5"]),406);
  498. }
  499. }else{
  500. $parent->response(array('response'=>'failed','message'=>$this->page_data["error1"]),406);
  501. }
  502. $parent->response(array('response'=>'success', 'data'=>$data_arr, 'message'=>$this->page_data['success1']),200);
  503. }
  504. /* //////////////////////////////////////////////////////////////////////////////////////////// */
  505. /* /////////////////////////////// REMOVE PARTICIPANT //////////////////////////////////////////////// */
  506. private function removeparticipant($parent)
  507. {
  508. globalfunc::checkMethodType($parent,array('POST'));
  509. globalfunc::checkParamCount($parent,1);
  510. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  511. //FIELDS VALIDATION
  512. $REQUEST_KEYS=array('schedule_id'=>'integer','userid'=>'integer');
  513. globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
  514. $schedule_id= escape_str($parent->_request["schedule_id"]);
  515. $userid= escape_str($parent->_request["userid"]);
  516. $schedule_str = "SELECT * FROM ".TABLE_TRAINING_SCHEDULE." WHERE trainer_id='".$parent->current_user_id."' AND schedule_id='".$schedule_id."' LIMIT 1";
  517. $schedule_arr=$parent->getQueryValue($schedule_str);
  518. $user_id_arr=array();
  519. if(count($schedule_arr)>0)
  520. {
  521. $train_parti_str ="SELECT * FROM ".TABLE_TRAINING_PARTICIPANT." WHERE schedule_id='".$schedule_id."' AND userid='".$userid."' LIMIT 1 ";
  522. $train_parti_arr=$parent->getQueryValue($train_parti_str);
  523. if(count($train_parti_arr)>0)
  524. {
  525. $assess_user_str = "SELECT au.* FROM ".TABLE_ASSESSMENT_USER." as au JOIN ".TABLE_TRAINING_ASSESSMENT." as ta ON ta.assessmentid=au.assessmentid AND au.userid=ta.userid WHERE ta.schedule_id='".$schedule_id."' AND au.userid='".$userid."' LIMIT 1 ";
  526. $assess_user_arr=$parent->getQueryValue($assess_user_str);
  527. // $is_edit=(count($assess_arr)>0)?"0":"1";
  528. if(count($assess_user_arr)>0)
  529. {
  530. $parent->response(array('response'=>'failed','message'=>$this->page_data["error6"]),406);
  531. }else
  532. {
  533. $delete_parti_qry= "DELETE FROM ".TABLE_TRAINING_PARTICIPANT ." WHERE `schedule_id`='".$schedule_id."' AND userid='".$userid."'";
  534. $parent->executeQuery($delete_parti_qry);
  535. $delete_assess_qry= "DELETE FROM ".TABLE_TRAINING_ASSESSMENT ." WHERE `schedule_id`='".$schedule_id."' AND userid='".$userid."'";
  536. $parent->executeQuery($delete_assess_qry);
  537. //LOG
  538. $logstr='PARTICIPANT REMOVE';
  539. globalfunc::insertUserLog($parent,$logstr,$schedule_id);
  540. $parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
  541. }
  542. }else
  543. {
  544. $parent->response(array('response'=>'failed','message'=>$this->page_data["error5"]),406);
  545. }
  546. }else{
  547. $parent->response(array('response'=>'failed','message'=>$this->page_data["error1"]),406);
  548. }
  549. $parent->response(array('response'=>'success', 'data'=>$data_arr, 'message'=>$this->page_data['success1']),200);
  550. }
  551. /* //////////////////////////////////////////////////////////////////////////////////////////// */
  552. /* /////////////////////////////// BATCH //////////////////////////////////////////////// */
  553. private function batch($parent)
  554. {
  555. globalfunc::checkMethodType($parent,array('GET','POST','DELETE'));
  556. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  557. switch ($parent->get_request_method())
  558. {
  559. case "GET": //LIST
  560. if(count($parent->params)==1) //LIST DATA
  561. {
  562. globalfunc::checkParamCount($parent,1);
  563. $userid=$parent->current_user_id;
  564. $role=$parent->current_user_role;
  565. if(strstr($parent->params[0],"page="))
  566. {
  567. //PAGINATION SETTINGS
  568. $limit_cond='';
  569. $data_arr=array();
  570. $limit_str=globalfunc::setPageLimit($parent,$parent->params[0]);
  571. $limit_cond=($limit_str)?" LIMIT ".$limit_str:'';
  572. }else
  573. {
  574. $parent->current_page=0;
  575. }
  576. $get_list_arr=$parent->selectQuery(TABLE_TRAINERBATCH."" ,"SQL_CALC_FOUND_ROWS * ","trainerid='".$userid."' ORDER BY id ASC ".$limit_cond,"");
  577. $tot = $parent->getQueryValue("select FOUND_ROWS() as total_records");
  578. $total=(count($tot)>0)?$tot[0]->total_records:0;
  579. $data_arr=($get_list_arr['nr']>0)?$get_list_arr['result']:array();
  580. $last_page=($total && strstr($parent->params[0],"page="))?ceil($total/$parent->current_limit)-1:0;
  581. //LOG
  582. $logstr='BATCH LIST DATA';
  583. globalfunc::insertUserLog($parent,$logstr);
  584. $parent->response(array('response'=>'success', 'data'=>$data_arr,'total'=>$total,'last_page'=>$last_page,'current_page'=>$parent->current_page,'message'=>$this->page_data['success1']),200);
  585. }else if(count($parent->params)==2)
  586. {
  587. $batchid= escape_str($parent->params[1]);
  588. $check_str = "SELECT * FROM ".TABLE_TRAINERBATCH." WHERE batchid='".$batchid."'";
  589. $batch_arr=$parent->getQueryValue($check_str);
  590. if(!count($data_arr)>0) $parent->response(array('response'=>'failed','message'=>$this->page_data["error8"]),406);
  591. $user_str = "SELECT b.smpin,u.fname,u.lname,u.dealer_code,d.dealer_name FROM ".TABLE_TRAINERBATCHUSER." b JOIN ".TABLE_USER." u ON u.smpin=b.smpin JOIN ".DMS_DEALER." d ON d.dealer_code=u.dealer_code WHERE u.role>7 AND u.role<14 AND b.batchid='".$batchid."' GROUP BY b.smpin ORDER BY u.smpin ASC,u.userid ASC";
  592. $user_arr=$parent->getQueryValue($user_str);
  593. $data_arr=array('batch'=>$batch_arr[0],'user'=>$user_arr);
  594. //LOG
  595. $logstr='BATCH SINGLE DATA';
  596. globalfunc::insertUserLog($parent,$logstr);
  597. $parent->response(array('response'=>'success', 'data'=>$data_arr,'message'=>$this->page_data['success1']),200);
  598. }
  599. break;
  600. case "POST": //ADD
  601. if(count($parent->params)==1)
  602. {
  603. $REQUEST_KEYS=array('title'=>'string', 'smpin'=>'string');
  604. globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
  605. $title=escape_str($parent->_request["title"]);
  606. $smpin_json=escape_str($parent->_request["smpin"]);
  607. $smpin_arr=json_encode($smpin_json);
  608. if(!count($smpin_arr)>0) $parent->response(array('response'=>'failed','message'=>$this->page_data["error7"]),406);
  609. $insert_str= "INSERT INTO ".TABLE_TRAINERBATCH ." (`trainerid`, `title`, `created_on`) VALUES ('".$parent->current_user_id."','".$title."','".NOW."')";
  610. $parent->executeQuery($insert_str);
  611. $id=$parent->lastInsertId();
  612. $ins_arr=array();
  613. foreach($smpin_arr as $smpin)
  614. {
  615. $ins_arr[]="('".$id."', '".$smpin."', '".NOW."')";
  616. }
  617. $insert_user= "INSERT INTO ".TABLE_TRAINERBATCHUSER ." (`batchid`, `smpin`, `created_on`) VALUES ".@implode(",".$ins_arr);
  618. $parent->executeQuery($insert_user);
  619. //LOG
  620. $logstr='BATCH INSERT';
  621. globalfunc::insertUserLog($parent,$logstr);
  622. $parent->response(array('response'=>'success','message'=>$this->page_data['success1']),200);
  623. }else if(count($parent->params)==2)//EDIT
  624. {
  625. $editid= escape_str($parent->params[1]);
  626. $REQUEST_KEYS=array('title'=>'string', 'smpin'=>'string');
  627. globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
  628. $title=escape_str($parent->_request["title"]);
  629. $smpin_json=escape_str($parent->_request["smpin"]);
  630. $smpin_arr=json_encode($smpin_json);
  631. if(!count($smpin_arr)>0) $parent->response(array('response'=>'failed','message'=>$this->page_data["error7"]),406);
  632. $parent->executeQuery("UPDATE ".TABLE_TRAINERBATCH." SET `title`='".$title."' WHERE id='".$editid."'");
  633. $parent->executeQuery("DELETE FROM ".TABLE_TRAINERBATCHUSER." WHERE batchid='".$editid."'");
  634. $ins_arr=array();
  635. foreach($smpin_arr as $smpin)
  636. {
  637. $ins_arr[]="('".$editid."', '".$smpin."', '".NOW."')";
  638. }
  639. $insert_user= "INSERT INTO ".TABLE_TRAINERBATCHUSER ." (`batchid`, `smpin`, `created_on`) VALUES ".@implode(",".$ins_arr);
  640. $parent->executeQuery($insert_user);
  641. //LOG
  642. $logstr='BATCH EDIT';
  643. globalfunc::insertUserLog($parent,$logstr);
  644. $parent->response(array('response'=>'success','message'=>$this->page_data['success1']),200);
  645. }
  646. break;
  647. case "DELETE"://DELETE
  648. globalfunc::checkParamCount($parent,2);
  649. $del_id= escape_str($parent->params[1]);
  650. $delete_parti_qry= "DELETE FROM ".TABLE_TRAINERBATCH ." WHERE `id`='".$del_id."'";
  651. $parent->executeQuery($delete_parti_qry);
  652. $delete_assess_qry= "DELETE FROM ".TABLE_TRAINERBATCHUSER ." WHERE `batchid`='".$del_id."'";
  653. $parent->executeQuery($delete_assess_qry);
  654. //LOG
  655. $logstr='BATCH DELETE';
  656. globalfunc::insertUserLog($parent,$logstr);
  657. $parent->response(array('response'=>'success','message'=>$this->page_data['success1']),200);
  658. break;
  659. }
  660. }
  661. /* //////////////////////////////////////////////////////////////////////////////////////////// */
  662. /* /////////////////////////////// NEW TRAINING SUBMIT //////////////////////////////////////////////// */
  663. private function newtraining($parent)
  664. {
  665. globalfunc::checkMethodType($parent,array('POST'));
  666. globalfunc::checkParamCount($parent,1);
  667. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  668. projectfunc::authorizedRole($parent,array('5'));
  669. //FIELDS VALIDATION
  670. $REQUEST_KEYS=array('schedule_name'=>'string','lvl_id'=>'integer');
  671. globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
  672. $title=escape_str($parent->_request["schedule_name"]);
  673. $lvl_id=escape_str($parent->_request["lvl_id"]);
  674. $startdate=escape_str($parent->_request["startdate"]);
  675. $enddate=escape_str($parent->_request["enddate"]);
  676. $starttime=escape_str($parent->_request["starttime"]);
  677. $endtime=escape_str($parent->_request["endtime"]);
  678. if($starttime!='' && $endtime!='')
  679. {
  680. $startdate.=" ".$starttime;
  681. $enddate.=" ".$endtime;
  682. }else
  683. {
  684. $startdate.=" 00:00:00";
  685. $enddate.=" 23:59:59";
  686. }
  687. $trainer_id=$parent->current_user_id;
  688. $filter_region='';
  689. $filter_dealer='';
  690. $travel_desc=escape_str($parent->_request["travel_desc"]);
  691. $hotel_desc=escape_str($parent->_request["hotel_desc"]);
  692. $assessment_type=escape_str($parent->_request["assessment_type"]); //0-Before,1-After,2 Both
  693. $assessmentname=escape_str($parent->_request["assessmentname"]);
  694. if(!in_array($assessment_type, array('0','1','2'))) $parent->response(array('response'=>'failed','message'=>$this->page_data["error8"]),406);
  695. $randomcond=escape_str($parent->_request["randomcond"]);
  696. $assessmenttime=escape_str($parent->_request["assessmenttime"]);
  697. $user_type=escape_str($parent->_request["user_type"]);
  698. $ques_count=escape_str($parent->_request["ques_count"]);
  699. //$buffer_day=escape_str($parent->_request["buffer_day"]);
  700. $buffer_day='1';
  701. $location='';
  702. $participant_json=$parent->_request["participant"];
  703. $participant_arr=json_decode($participant_json);
  704. $is_feedback=$parent->_request["is_feedback"];
  705. if(!(is_array($participant_arr) && count($participant_arr)>0)) $parent->response(array('response'=>'failed','message'=>$this->page_data["error5"]),406);
  706. if(!(is_numeric($ques_count)&& $ques_count>0)) $parent->response(array('response'=>'failed','message'=>$this->page_data["error9"]),406);
  707. //CHECK QUESTION COUNT EXIST
  708. $ques_count_valid='0';
  709. $q_count=0;
  710. $assess_str = "SELECT COUNT(id) as ques_count FROM ".TABLE_QUESTION." WHERE status='1' AND cateid='".$lvl_id."' LIMIT 1";
  711. $assess_arr=$parent->getQueryValue($assess_str);
  712. if(count($assess_arr)>0)
  713. {
  714. $ques_count_valid=($ques_count<=$assess_arr[0]->ques_count)?'1':'0';
  715. $q_count=$assess_arr[0]->ques_count;
  716. }
  717. if($ques_count_valid=='0') $parent->response(array('response'=>'failed','message'=>'Add Question\'s in Question Bank for selected Category. Total Question for selected Category : '.$q_count),406);
  718. $insert_qry = "INSERT INTO ".TABLE_TRAINING_SCHEDULE ." ( `lvl_id`, `user_type`, `schedule_name`, `trainer_id`, `start_date`, `end_date`, `assessmentname`, `assessmenttime`, `randomcond`, `ques_count`, `location`, `assessment_type`, `buffer_day`, `filter_zone`, `filter_region`, `filter_dealer`, `travel_desc`, `hotel_desc`,is_feedback, `is_deleted`, `status`, `created_on`, `modified_on`) VALUES ( '".$lvl_id."','".$user_type."','".$schedule_name."', '".$trainer_id."','".$startdate."', '".$enddate."','".$assessmentname."','".$assessmenttime."','".$randomcond."','".$ques_count."','".$location."','".$assessment_type."','".$buffer_day."','".$filter_zone."','".$filter_region."','".$filter_dealer."','".$travel_desc."','".$hotel_desc."','0','".$is_feedback."','1','".NOW."', '".NOW."')";
  719. $parent->executeQuery($insert_qry);
  720. $schedule_id=$parent->lastInsertId();
  721. if(count($participant_arr)>0)
  722. {
  723. $participant_arr= array_unique($participant_arr);
  724. $ins_participant_arr=array();
  725. foreach($participant_arr as $userid)
  726. {
  727. $ins_participant_arr[] =" ( '".$schedule_id."', '".$userid."', '0', '0', '0', '".$trainer_id."','".NOW."', '".NOW."')";
  728. }
  729. //print_r($ins_participant_arr);
  730. $insert_qry = "INSERT INTO ".TABLE_TRAINING_PARTICIPANT ." ( `schedule_id`, `userid`, `is_attendance`, `score`, `assessment_score`, `creatorid`, `created_on`, `modified_on`) VALUES ".@implode(',',$ins_participant_arr);
  731. $parent->executeQuery($insert_qry);
  732. }
  733. if($assessment_type!=2)
  734. {
  735. //GET ASSESSMENT START DATE
  736. $assessment_startdate=($assessment_type=='0')?NOW:date('Y-m-d H:i:s',strtotime($enddate));
  737. //GET ASSESSMENT END DATE
  738. $assessment_enddate=date('Y-m-d H:i:s',strtotime('+'.$buffer_day.' day',strtotime($enddate)));
  739. }else
  740. {
  741. //GET ASSESSMENT START DATE
  742. $assessment_startdate=NOW;
  743. //GET ASSESSMENT END DATE
  744. $assessment_enddate=date('Y-m-d H:i:s',strtotime('+'.$buffer_day.' day',strtotime($enddate)));
  745. //INSERT ASSESSMENT
  746. $insert_qry = "INSERT INTO ".TABLE_ASSESSMENT ." ( `atype`, `lvl_id`, `assessmentname`, `description`, `assessmentimage`, `assessmenttype`, `assettypeid`, `assessmenttimetype`, `assessmenttime`, `attemptslimit`, `publisheddate`, `enddate`, `randomcond`, `filter_role`, `filter_zone`, `filter_region`, `filter_dealer`, `assessmentnotification`, `total_question`,`schedule_id`, `status`, `creatorid`, `created_on`, `modified_on`) VALUES ('1','".$lvl_id."','".$assessmentname."','".$assessmentname."','','1','1','1','".$assessmenttime."','1','".$assessment_startdate."','".$assessment_enddate."','".$randomcond."','','','','','','".$ques_count."','".$schedule_id."','1','".$trainer_id."','".NOW."','".NOW."')";
  747. $parent->executeQuery($insert_qry);
  748. $assessmentid = $parent->lastInsertId();
  749. if(count($participant_arr)>0)
  750. {
  751. $ins_assess_arr=array();
  752. foreach($participant_arr as $userid)
  753. {
  754. $ins_assess_arr[] =" ( '".$assessmentid."','".$schedule_id."', '".$userid."', '0')";
  755. }
  756. }
  757. //ASSESSMENT PARTICPANT ADD
  758. $insert_qry = "INSERT INTO ".TABLE_TRAINING_ASSESSMENT ." ( `assessmentid`, `schedule_id`, `userid`, `is_attended`) VALUES ".@implode(',',$ins_assess_arr);
  759. $parent->executeQuery($insert_qry);
  760. //ASSESSMENT QUESTION ADD
  761. $rcond=($randomcond)?"ORDER BY RAND()":"ORDER BY id ASC";
  762. $ques_str = "SELECT * FROM ".TABLE_QUESTION." WHERE status='1' AND cateid='".$lvl_id."' ".$rcond." LIMIT ".$ques_count;
  763. $ques_arr=$parent->getQueryValue($ques_str);
  764. if(count($ques_arr)>0)
  765. {
  766. $ins_ques_arr=array();
  767. foreach($ques_arr as $res_ques)
  768. {
  769. $ins_ques_arr[] =" ( '".$assessmentid."','".$res_ques->id."', '1', '".$trainer_id."','".NOW."', '".NOW."')";
  770. }
  771. //ASSESSMENT QUESTION
  772. $insert_qry = "INSERT INTO ".TABLE_ASSESSMENT_QUESTION ." (`assessmentid`, `qid`, `is_mandatory`, `creatorid`, `created_on`, `modified_on`) VALUES ".@implode(',',$ins_ques_arr);
  773. $parent->executeQuery($insert_qry);
  774. }
  775. //SECOND START AND END
  776. //GET ASSESSMENT START DATE
  777. $assessment_startdate=date('Y-m-d H:i:s',strtotime($enddate));
  778. //GET ASSESSMENT END DATE
  779. $assessment_enddate=date('Y-m-d H:i:s',strtotime('+'.$buffer_day.' day',strtotime($enddate)));
  780. $ins_ques_arr=array();
  781. $ins_assess_arr=array();
  782. }
  783. //INSERT ASSESSMENT
  784. $insert_qry = "INSERT INTO ".TABLE_ASSESSMENT ." ( `atype`, `lvl_id`, `assessmentname`, `description`, `assessmentimage`, `assessmenttype`, `assettypeid`, `assessmenttimetype`, `assessmenttime`, `attemptslimit`, `publisheddate`, `enddate`, `randomcond`, `filter_role`, `filter_zone`, `filter_region`, `filter_dealer`, `assessmentnotification`, `total_question`,`schedule_id`, `status`, `creatorid`, `created_on`, `modified_on`) VALUES ('1','".$lvl_id."','".$assessmentname."','".$assessmentname."','','1','1','1','".$assessmenttime."','1','".$assessment_startdate."','".$assessment_enddate."','".$randomcond."','','','','','','".$ques_count."','".$schedule_id."','1','".$trainer_id."','".NOW."','".NOW."')";
  785. $parent->executeQuery($insert_qry);
  786. $assessmentid = $parent->lastInsertId();
  787. if(count($participant_arr)>0)
  788. {
  789. $ins_assess_arr=array();
  790. foreach($participant_arr as $userid)
  791. {
  792. $ins_assess_arr[] =" ( '".$assessmentid."','".$schedule_id."', '".$userid."', '0')";
  793. }
  794. }
  795. //ASSESSMENT PARTICPANT ADD
  796. $insert_qry = "INSERT INTO ".TABLE_TRAINING_ASSESSMENT ." ( `assessmentid`, `schedule_id`, `userid`, `is_attended`) VALUES ".@implode(',',$ins_assess_arr);
  797. $parent->executeQuery($insert_qry);
  798. //ASSESSMENT QUESTION ADD
  799. $rcond=($randomcond)?"ORDER BY RAND()":"ORDER BY id ASC";
  800. $ques_str = "SELECT * FROM ".TABLE_QUESTION." WHERE status='1' AND cateid='".$lvl_id."' ".$rcond." LIMIT ".$ques_count;
  801. $ques_arr=$parent->getQueryValue($ques_str);
  802. if(count($ques_arr)>0)
  803. {
  804. $ins_ques_arr=array();
  805. foreach($ques_arr as $res_ques)
  806. {
  807. $ins_ques_arr[] =" ( '".$assessmentid."','".$res_ques->id."', '1', '".$trainer_id."','".NOW."', '".NOW."')";
  808. }
  809. //ASSESSMENT QUESTION
  810. $insert_qry = "INSERT INTO ".TABLE_ASSESSMENT_QUESTION ." (`assessmentid`, `qid`, `is_mandatory`, `creatorid`, `created_on`, `modified_on`) VALUES ".@implode(',',$ins_ques_arr);
  811. $parent->executeQuery($insert_qry);
  812. }
  813. $mobj=new stdClass();
  814. $mobj->schedule_id=$trainer_id;
  815. $this->trainingnotifictaion($parent,$mobj);
  816. //LOG
  817. $logstr='TRAINING CREATE';
  818. globalfunc::insertUserLog($parent,$logstr,$schedule_id);
  819. $parent->response(array('response'=>'success', 'message'=>$this->page_data['success1']),200);
  820. }
  821. private function trainingnotifictaion($parent,$obj)
  822. {
  823. if(!(isset($obj) && isset($obj->schedule_id))) $parent->response(array('response'=>'failed','message'=>'PHP ERROR Value not passed'),500);
  824. $schedule_id=$obj->schedule_id;
  825. $query_str = "SELECT * FROM ".TABLE_TRAINING_SCHEDULE." WHERE is_deleted='0' AND schedule_id='".$schedule_id."' LIMIT 1";
  826. $query_arr=$parent->getQueryValue($query_str);
  827. $query_str = "SELECT * FROM `".TABLE_TRAINING_PARTICIPANT."` WHERE schedule_id='".$schedule_id."' ";
  828. $user_arr=$parent->getQueryValue($query_str);
  829. if(count($query_arr)>0 && count($user_arr)>0)
  830. {
  831. $ntext="New Training Scheduled - ".$query_arr[0]->schedule_name." from date : ".date('d M Y',strtotime($query_arr[0]->start_date))." - ".date('d M Y',strtotime($query_arr[0]->end_date));
  832. $notificationtitle=$schedule_arr[0]->schedule_name;
  833. $notificationtext=$ntext;
  834. $notificationtype=5;
  835. $obj=new stdClass();
  836. $notificationdata= json_encode($obj);
  837. //INSERT NOTIFICATION
  838. $parent->executeQuery("INSERT INTO `".TABLE_NOTIFICATION."` ( `notificationtitle`, `notificationtext`, `notificationdata`, `notificationtype`, `status`, `publisheddate`, `created_on`, `modified_on`) VALUES ('".escape_str($notificationtitle)."','".escape_str($notificationtext)."','".$notificationdata."','".$notificationtype."', '1','".NOW."','".NOW."','".NOW."')");
  839. $notificationid=$parent->lastInsertId();
  840. $data=array('notification_id'=>$notificationid,'title'=>$notificationtitle,'message'=>$notificationtext,'notificationtype'=>$notificationtype,'notificationdata'=>$notificationdata,'created_date'=>NOW);
  841. if(count($user_arr)>0)
  842. {
  843. foreach ($part_arr as $res_user)
  844. {
  845. $user_arr[]=$res_user->userid;
  846. }
  847. $ins_arr=array();
  848. foreach($user_arr as $res)
  849. {
  850. $ins_arr[]=" ('".$notificationid."', '".$res."', '0', '".NOW."')";
  851. }
  852. $insert_chunk=array_chunk($ins_arr, 1000);
  853. foreach($insert_chunk as $chunk_ins)
  854. {
  855. $parent->executeQuery("INSERT INTO ".TABLE_NOTIFICATION_USER."(`notificationid`, `userid`, `status`, `created_on`) VALUES ".@implode(',',$chunk_ins)." ON DUPLICATE KEY UPDATE `status` =0");
  856. }
  857. $usertokenarr['ios']=array();
  858. $usertokenarr['android']=array();
  859. $user_device_str = "SELECT ud.devicetype,ud.token FROM `".TABLE_USER_DEVICES."` as ud JOIN (SELECT userid FROM ".TABLE_NOTIFICATION_USER." WHERE notificationid='".$notificationid."') as u ON ud.userid=u.userid WHERE ud.is_deleted='0' AND (devicetype='ios' OR devicetype='android') AND token!=''";
  860. $user_device_arr = $parent->getQueryValue($user_device_str);
  861. if(count($user_device_arr)>0)
  862. {
  863. foreach($user_device_arr as $res_dev)
  864. {
  865. //print_r($user_device_arr);
  866. if(strtolower($res_dev->devicetype)=='ios')
  867. {
  868. $usertokenarr['ios'][]=$res_dev->token;
  869. }else if(strtolower($res_dev->devicetype)=='android')
  870. {
  871. $usertokenarr['android'][]=$res_dev->token;
  872. }
  873. }
  874. // globalfunc::sendUserNotification($data,$usertokenarr);
  875. }
  876. }
  877. }
  878. }
  879. /* //////////////////////////////////////////////////////////////////////////////////////////// */
  880. /* /////////////////////////////// PARTICIPANT SCORE //////////////////////////////////////////////// */
  881. private function participantscore($parent)
  882. {
  883. globalfunc::checkMethodType($parent,array('GET','POST'));
  884. //globalfunc::checkParamCount($parent,1);
  885. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  886. projectfunc::authorizedRole($parent,array('5'));
  887. switch ($parent->get_request_method())
  888. {
  889. case "GET":
  890. globalfunc::checkParamCount($parent,2);
  891. $schedule_id=escape_str($parent->params[1]);
  892. $data_arr=array();
  893. $query_str = "SELECT p.participant_id,p.userid,p.score,p.remarks,p.image,u.smpin,u.fname,u.lname,u.dealer_code,d.dealer_name FROM `".TABLE_TRAINING_PARTICIPANT."` as p JOIN ".TABLE_USER." u ON p.userid=u.userid JOIN ".DMS_DEALER." d ON d.dealer_code=u.dealer_code WHERE p.schedule_id='".$schedule_id."' ";
  894. $user_arr=$parent->getQueryValue($query_str);
  895. if(count($user_arr)>0)
  896. {
  897. //CONNECT S3
  898. $s3=awsfileserver::connectS3();
  899. foreach($user_arr as $key=>$res)
  900. {
  901. $user_arr[$key]->image_url=($res->image!='')?awsfileserver::getS3FileUrl($s3,S3_BUCKET,S3_TRAINING_URL.$res->image):'';
  902. }
  903. $data_arr=$user_arr;
  904. }
  905. //LOG
  906. $logstr='PARTICIPANT SCORE DATA LIST';
  907. globalfunc::insertUserLog($parent,$logstr);
  908. $parent->response(array('response'=>'success', 'data'=>$data_arr,'message'=>$this->page_data['success1']),200);
  909. break;
  910. case "POST":
  911. globalfunc::checkParamCount($parent,1);
  912. $id=escape_str($parent->_request["id"]);
  913. $participant_arr=json_decode($parent->_request["participant"]);
  914. if(!(json_last_error() == JSON_ERROR_NONE && is_array($participant_arr)&& count($participant_arr)>0)) $parent->response(array('response'=>'failed','message'=>$this->page_data['error10']),406);
  915. if(count($participant_arr)>0)
  916. {
  917. $check_arr=array();
  918. $update_str=array();
  919. foreach($participant_arr as $val)
  920. {
  921. $check_arr[]=$val->userid;
  922. $val->score=(isset($val->score)&&$val->score>0)?$val->score:0;
  923. $val->remarks=(isset($val->remarks)&&$val->remarks!='')?$val->remarks:'';
  924. $val->is_attendance=(isset($val->is_attendance)&&$val->is_attendance!='')?$val->is_attendance:'';
  925. $update_str[]="UPDATE ".TABLE_TRAINING_PARTICIPANT." SET score='".$val->score."',remarks='".$val->remarks."',is_attendance='".$val->is_attendance."' WHERE schedule_id='".$schedule_id."' AND userid='".$val->userid."'";
  926. }
  927. //VALIDATION
  928. $query_str = "SELECT * FROM `".TABLE_TRAINING_PARTICIPANT."` WHERE schedule_id='".$schedule_id."' AND userid IN (".@implode(',',$check_arr).")";
  929. $checkparticipant_arr=$parent->getQueryValue($query_str);
  930. if(!(count($participant_arr)==count($checkparticipant_arr))) $parent->response(array('response'=>'failed','message'=>$this->page_data['error10']),406);
  931. if(count($update_str)>0)
  932. {
  933. foreach($update_str as $qry)
  934. {
  935. $parent->executeQuery($qry);
  936. }
  937. }
  938. //LOG
  939. $logstr='PARTICIPANT SCORE UPDATE';
  940. globalfunc::insertUserLog($parent,$logstr);
  941. $parent->response(array('response'=>'success','message'=>$this->page_data['success1']),200);
  942. }
  943. break;
  944. }
  945. }
  946. /* //////////////////////////////////////////////////////////////////////////////////////////// */
  947. /* /////////////////////////////// TRAINING IMAGE UPLOAD //////////////////////////////////////////////// */
  948. private function trainingimageupload($parent)
  949. {
  950. globalfunc::checkMethodType($parent,array('POST'));
  951. globalfunc::checkParamCount($parent,1);
  952. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  953. projectfunc::authorizedRole($parent,array('5'));
  954. $REQUEST_KEYS=array('id'=>'number');
  955. globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
  956. $schedule_id=escape_str($parent->_request["id"]);
  957. //validate training
  958. $query_str = "SELECT schedule_id FROM `".TABLE_TRAINING_SCHEDULE."` WHERE schedule_id='".$schedule_id."' AND trainer_id='".$parent->current_user_id."' AND is_deleted=0 LIMIT 1";
  959. $check_arr=$parent->getQueryValue($query_str);
  960. if(!count($check_arr)>0) $parent->response(array('response'=>'success','message'=>$this->page_data['error1']),406);
  961. //CONNECT S3
  962. $s3=awsfileserver::connectS3();
  963. //IMAGE UPLOAD
  964. $obj= new stdClass();
  965. $obj->filekey='file';
  966. $obj->size='10'; //IN MB
  967. $obj->type=array('jpg','jpeg','png');
  968. globalfunc::validateFile($parent,$obj);
  969. $obj->path="../../".S3_TRAINING_URL;
  970. $obj->filename= 'training_'.$schedule_id.'_'.uniqid();
  971. $fileName=globalfunc::uploadFile($parent,$obj);
  972. awsfileserver::checkupload($parent,$s3,S3_BUCKET,S3_TRAINING_URL.$fileName,dirname(__FILE__)."/../../../".S3_TRAINING_URL.$fileName) ;
  973. $qry="UPDATE ".TABLE_TRAINING_SCHEDULE." SET image='".$fileName."' WHERE schedule_id='".$check_arr[0]->schedule_id."'";
  974. $parent->executeQuery($qry);
  975. //LOG
  976. $logstr='TRAINING IMAGE UPDATE';
  977. globalfunc::insertUserLog($parent,$logstr);
  978. $parent->response(array('response'=>'success','message'=>$this->page_data['success1']),200);
  979. }
  980. /* //////////////////////////////////////////////////////////////////////////////////////////// */
  981. /* /////////////////////////////// IMAGE UPLOAD //////////////////////////////////////////////// */
  982. private function participantimageupload($parent)
  983. {
  984. globalfunc::checkMethodType($parent,array('POST'));
  985. globalfunc::checkParamCount($parent,1);
  986. globalfunc::checkAuthrozation($parent,array('type'=>'user'));
  987. projectfunc::authorizedRole($parent,array('5'));
  988. $REQUEST_KEYS=array('id'=>'number','userid'=>'number');
  989. globalfunc::mandatoryKey($parent,$REQUEST_KEYS);
  990. $schedule_id=escape_str($parent->_request["id"]);
  991. $userid=escape_str($parent->_request["userid"]);
  992. //validate training
  993. $query_str = "SELECT * FROM `".TABLE_TRAINING_SCHEDULE."` WHERE schedule_id='".$schedule_id."' AND trainer_id='".$parent->current_user_id."' AND is_deleted=0 LIMIT 1";
  994. $check_arr=$parent->getQueryValue($query_str);
  995. if(!count($check_arr)>0) $parent->response(array('response'=>'success','message'=>$this->page_data['error1']),406);
  996. //CONNECT S3
  997. $s3=awsfileserver::connectS3();
  998. //IMAGE UPLOAD
  999. $obj= new stdClass();
  1000. $obj->filekey='file';
  1001. $obj->size='10'; //IN MB
  1002. $obj->type=array('jpg','jpeg','png');
  1003. globalfunc::validateFile($parent,$obj);
  1004. $obj->path="../../".S3_TRAINING_URL;
  1005. $obj->filename= 'partcipant_'.$schedule_id.'_'.$userid.'_'.uniqid();
  1006. $fileName=globalfunc::uploadFile($parent,$obj);
  1007. awsfileserver::checkupload($parent,$s3,S3_BUCKET,S3_TRAINING_URL.$fileName,dirname(__FILE__)."/../../../".S3_TRAINING_URL.$fileName) ;
  1008. $qry="UPDATE ".TABLE_TRAINING_PARTICIPANT." SET image='".$fileName."' WHERE schedule_id='".$check_arr[0]->schedule_id."' AND userid='".$userid."'";
  1009. $parent->executeQuery($qry);
  1010. //LOG
  1011. $logstr='TRAINING PARTCIPANT IMAGE UPDATE';
  1012. globalfunc::insertUserLog($parent,$logstr);
  1013. $parent->response(array('response'=>'success','message'=>$this->page_data['success1']),200);
  1014. }
  1015. /* //////////////////////////////////////////////////////////////////////////////////////////// */
  1016. }
  1017. ?>