function displayBody() { parent::displayBody(); $translator = new Translator(); $course = new Course(); $training = new Training(); $t_data = $training->get(array('course_hash' => $this->course_hash, 'user_id' => $_SESSION['user_id'])); $c_data = $course->get(array('id' => $t_data['course_id'])); foreach ($c_data as $key => $val) { $c_data[$key] = htmlspecialchars($val, ENT_QUOTES); } echo <<<EOF <div class="container-fluid"> <div class="col-lg-10 col-lg-offset-1" id="window"> \t<div class="row" > \t<div class="col-xs-10"> \t <h4>{$c_data[category_name]}</h4> \t <h2>{$c_data[name]}</h2> \t</div> \t<div class="col-xs-2 text-right" id="top_buttons"> \t <a href="#" id="fullscreen"><span class="glyphicon glyphicon-fullscreen"></span></a> \t <a href="#" id="inscreen" class="collapse"><span class="glyphicon glyphicon-remove"></span></a> \t</div> \t</div> \t<div class="embed-responsive embed-responsive-16by9" id="fullscreen_media"> \t <iframe class="embed-responsive-item" src="/learn/{$this->course_hash}/index.html" id="iframe"></iframe> \t</div> \t<nav id="bottom_buttons"> \t <ul class="pager"> \t <li class="previous"><a href="#" id="back"><span aria-hidden="true">←</span> {$translator->Back}</a></li> \t <li class="top"><a href="#" id="top">{$translator->Top}</a>| \t\t<a href="/mycourses/finish/{$t_data[id]}" onclick='return confirm("{$translator->AreYouSure}");'>{$translator->Finish}</a></li> \t <li class="next"><a href="#" id="next">{$translator->Next} <span aria-hidden="true">→</span></a></li> \t </ul> \t</nav> </div> </div> <!-- /container --> EOF; }
function displayBody() { parent::displayBody(); $translator = new Translator(); $course = new Course(); $category = new Category(); $training = new Training(); $t_data = $training->get(array('id' => $this->id, 'user_id' => $_SESSION['user_id'])); $c_data = $course->get(array('id' => $t_data['course_id'])); foreach ($c_data as $key => $val) { $c_data[$key] = htmlspecialchars($val, ENT_QUOTES); } $category_id = $c_data['category_id']; $enum = $category->enumerate(); if ($enum) { foreach ($enum as $key => $val) { if ($val['id'] != 0) { $items[$val['id']] = $val; } } $categories = $this->makeCategoryList($items, $category_id); } if ($t_data['status_id'] == Training::FINISHED) { $result = $translator->Congratulations; $result_class = "alert-success"; } else { $result = $translator->Sorry; $result_class = "alert-danger"; } echo <<<EOF <div class="container-fluid"> <div class="col-lg-10 col-lg-offset-1" id="window"> \t<h4>{$categories}</h4> \t<h2>{$c_data[name]}</h2> \t<h3 class="alert {$result_class}" role="alert">{$result}</h3> \t<h4>{$translator->Result}: {$t_data[result]}% ({$t_data['answers']} / {$t_data[questions]})</h4> \t<table class="table"> \t <tr> \t\t<th>#</th> \t\t<th>{$translator->Question}</th> \t\t<th>{$translator->Result}</th> \t </tr> EOF; $exam = new Exam(); $enum = $exam->enumerateResult($t_data['id']); $i = 1; foreach ($enum as $key => $e_data) { $answer = $e_data['result'] == 't' ? $translator->Right : $translator->Wrong; $class = $e_data['result'] == 't' ? "success" : "danger"; echo <<<EOF \t <tr class="alert alert-{$class}" role="alert"> \t\t<td>{$i}</td> \t\t<td>{$e_data[question]}</td> \t\t<td >{$answer}</td> \t </tr> EOF; $i++; } echo <<<EOF \t</table> </div> </div> <!-- /container --> EOF; }
function init() { $this->func = array_shift($this->param); switch ($this->func) { case 'courses': $category_id = array_shift($this->param); $course = new Course(); $data = $course->enumerate(array('category_id' => $category_id), null, null, 'name'); foreach ($data as $key => $val) { $items[] = array($val['id'], $val['name']); } echo json_encode($items); exit; break; case 'finduser': $id = array_shift($this->param); $search = $_GET['search']; $user = new User(); try { foreach ($user->find($search, 5) as $data) { $json[] = array('id' => $data['id'], 'name' => $data['name'], 'email' => $data['email'], 'company' => $data['company'], 'city' => $data['city']); } echo json_encode($json); } catch (Exception $e) { } exit; break; case 'adduser': $plan_id = array_shift($this->param); $user_id = array_shift($this->param); $user = new User(); try { $data = $user->get(array('id' => $user_id)); $plan = new Plan(); $plan->adduser($plan_id, $user_id); $json = array('id' => $data['id'], 'name' => $data['name'], 'email' => $data['email'], 'company' => $data['company'], 'city' => $data['city']); echo json_encode($json); } catch (Exception $e) { echo $e; } exit; break; case 'removeuser': $plan_id = array_shift($this->param); $user_id = array_shift($this->param); $training = new Training(); $t_data = $training->get(array('plan_id' => $plan_id, 'user_id' => $user_id)); $training->delete($t_data['id']); try { echo json_encode(''); } catch (Exception $e) { echo $e; } exit; break; } }
function displayBody() { parent::displayBody(); $translator = new Translator(); $course = new Course(); $training = new Training(); $t_data = $training->get(array('exam_hash' => $this->exam_hash, 'user_id' => $_SESSION['user_id'])); $c_data = $course->get(array('id' => $t_data['course_id'])); foreach ($c_data as $key => $val) { $c_data[$key] = htmlspecialchars($val, ENT_QUOTES); } echo <<<EOF <div class="container-fluid"> <div class="col-lg-10 col-lg-offset-1" id="window"> \t<div class="row" > \t<div class="col-xs-10"> \t <h4>{$c_data[category_name]}</h4> \t <h2>{$c_data[name]}</h2> \t</div> \t<div class="col-xs-2 text-right" id="top_buttons"> \t <a href="#" id="fullscreen"><span class="glyphicon glyphicon-fullscreen"></span></a> \t <a href="#" id="inscreen" class="collapse"><span class="glyphicon glyphicon-remove"></span></a> \t</div> \t</div> EOF; try { $d2 = new DateTime('now'); $diff = $d2->diff(new DateTime($t_data['finished'])); $diff = $diff->format('%r%i'); if ($diff < 0) { throw new Exception("Time out", self::TIMEOUT); } $exam = new Exam(); $enum = $exam->enumerate(array('training_id' => $t_data['id']), intval($this->page), 1, 'id'); $cnt = $exam->getCount(array('training_id' => $t_data['id'])); $current = $this->page + 1; $back = $this->page > 0 ? $this->page - 1 : 0; $next = $this->page + 1; if (!$enum) { throw new Exception("Not found", self::NOTFOUND); } $e_data = $enum->current(); $question = new Question(); $q_data = $question->get(array('id' => $e_data['question_id'])); echo <<<EOF \t<div class="embed-responsive embed-responsive-16by9" id="fullscreen_media"> \t<p>{$translator->Question}: {$current} / {$cnt}</p> \t<p> {$translator->Time_remain}: {$diff}</p> \t{$q_data[data]} \t<hr> \t{$translator->Answer}: \t <form action="?" method="post"> \t <input type="hidden" name="id" value="{$e_data[id]}"> EOF; switch ($q_data['type_id']) { case Question::SINGLE: echo "<ol>"; for ($i = 1; $i <= $q_data['count']; $i++) { echo "<li><input type=\"radio\" name=\"answer\" value=\"{$i}\" " . ($i == $e_data['answer'] ? 'checked' : '') . "></li>" . NL; } echo "</ol>"; break; case Question::MULTI: echo "<ol>"; $e_data['answer'] = explode(',', $e_data['answer']); for ($i = 1; $i <= $q_data['count']; $i++) { echo "<li><input type=\"checkbox\" name=\"answer[]\" value=\"{$i}\" " . (in_array($i, $e_data['answer']) ? 'checked' : '') . "></li>" . NL; } echo "</ol>"; break; case Question::TEXT: echo "<input type=\"text\" name=\"answer\" value=\"{$e_data['answer']}\">" . NL; break; default: } $back = $this->page > 0 ? $this->page - 1 : 0; $next = $this->page + 1; echo <<<EOF \t <input type="submit" class="btn btn-primary"> \t </form> \t</div> EOF; } catch (Exception $e) { switch ($e->getCode()) { case self::TIMEOUT: echo <<<EOF <div class="bs-callout bs-callout-danger" id="callout-type-b-i-elems"> <h4>{$translator->Timeout}</h4> <p>{$translator->Timeout_Desc}</p> <p class="text-muted">{$translator->BackCourses}</p> </div> EOF; $training->update($t_data['id'], array('status_id' => Training::FAILED)); break; case self::NOTFOUND: echo <<<EOF <div class="embed-responsive embed-responsive-16by9" id="fullscreen_media"> <div class="bs-callout bs-callout-info" id="callout-type-b-i-elems"> <h4>{$translator->Not_found}</h4> <p>{$translator->Not_found_Desc}</p> <p class="text-muted">{$translator->BackExam}</p> </div> </div> EOF; break; default: echo $e; echo <<<EOF <div class="bs-callout bs-callout-danger" id="callout-type-b-i-elems"> <h4>{$translator->Error}</h4> <p>{$translator->Error_Desc}</p> <p class="text-muted">{$translator->BackExam}</p> </div> EOF; } // echo "<script>window.history.back();</script>"; } echo <<<EOF \t<nav id="bottom_buttons"> \t <ul class="pager"> \t <li class="previous"><a href="{$back}" id="back"><span aria-hidden="true">←</span> {$translator->Back}</a></li> \t <li class="top"><a href="0" id="top">{$translator->Top}</a>| \t\t<a href="/result/{$t_data[id]}" onclick='return confirm("{$translator->AreYouSure}");'>{$translator->Finish}</a></li> \t <li class="next"><a href="{$next}" id="next">{$translator->Next} <span aria-hidden="true">→</span></a></li> \t </ul> \t</nav> </div> </div> <!-- /container --> EOF; }
function delete($id) { $training = new Training(); try { $t_data = $training->get(array('id' => $id, 'user_id' => $_SESSION['user_id'])); $training->delete($id); header('Location: /mycourses'); exit; } catch (Exception $e) { echo $e; exit; } }