function displayBody() { parent::displayBody(); $translator = new Translator(); $course = new Course(); $data = $course->get(array('id' => $this->id)); foreach ($data as $key => $val) { $data[$key] = htmlspecialchars($val, ENT_QUOTES); } echo <<<EOF <h2 class="page-header">{$data[name]}</h2> <h4>{$data[category_name]}</h4> <div class="col-lg-8"> <ul class="list-group category-list" index="{$this->id}/"> EOF; $root = $_SERVER['DOCUMENT_ROOT'] . '/../files/courses/' . $this->id; $this->put_list($root); echo <<<EOF </ul> <div class="row"> \t \t<a href="#" data-toggle="toggler" parent-id="{$this->id}/" title="{$translator->addfile}" type="file"> \t\t\t<span class="glyphicon glyphicon-file"></span> </a> \t\t\t<a href="#" data-toggle="toggler" parent-id="{$this->id}/" title="{$translator->addfolder}" type="folder"> \t\t\t<span class="glyphicon glyphicon-folder-open"></span> </a> \t </div> </div> EOF; }
function displayBody() { parent::displayBody(); $translator = new Translator(); $request = new Request(); try { $id = array_shift($this->param); $course = new Course(); $c_data = $course->get(array('id' => $id)); $data['course_id'] = $id; $data['user_id'] = $_SESSION['user_id']; $data['active'] = true; $data['planned_date'] = $_GET['planned_date'] != '' ? $_GET['planned_date'] : date('Y-m-d H:i:s', time()); $r_id = $request->add($data); if ($c_data['need_approve'] == 'f') { $request->approve($r_id); echo <<<EOF <div class="container"> <div class="page-header"> <h1>{$translator->Request_updated}</h1> </div> <p class="lead">{$translator->Request_updated_Desc}</p> <p >{$translator->Error_Backcourses}</p> </div> <script type="text/javascript"> window.location.href='/mycourses'; </script> EOF; } else { echo <<<EOF <div class="container"> <div class="page-header"> <h1>{$translator->Request_updated}</h1> </div> <p class="lead">{$translator->Request_need_approve_Desc}</p> <p >{$translator->Error_Backcourses}</p> </div> EOF; } } catch (Exception $e) { echo <<<EOF <div class="container"> <div class="page-header"> <h1>{$translator->Request_error}</h1> </div> <p class="lead">{$translator->Request_error_Desc}</p> <p >{$translator->Error_Backcourses}</p> </div> EOF; } }
function displayBody() { parent::displayBody(); $translator = new Translator(); echo <<<EOF <div class="container-fluid"> <div class="col-md-10 col-lg-8 col-lg-offset-2 "> \t<h1 class="page-header">{$translator->Help} <small>{$translator->Help_desc}</small></h1> \t\t<ul> \t\t\t<li><a href="?file=LMS - Editor.pdf">Створення і керування переліком курсів в системі (Укр)</a></li> \t\t</ul> \t</div> </div> <!-- /container --> EOF; }
function displayBody() { parent::displayBody(); $translator = new Translator(); $course = new Course(); $page = $_GET['page']; $offset = intval($page) * ITEMS_IN_PAGE; if (isset($_GET['search'])) { $search = $_GET['search']; unset($_GET['search']); unset($_GET['page']); } else { $search = null; } $cnt = $course->getCount(array('search' => $search)); if ($cnt > ITEMS_IN_PAGE) { $pagination = $this->addPaginator($cnt, $page); } echo <<<EOF <div class="container-fluid"> <div class="col-md-10 col-lg-8 col-lg-offset-2 "> \t<h4 class="page-header">{$translator->Search_result}: <span class="badge">{$cnt}</span></h4> \t{$pagination} EOF; $enum = $course->enumerate(array('search' => $search), $offset, ITEMS_IN_PAGE); if (isset($enum)) { foreach ($enum as $data) { echo <<<EOF \t\t<h4>{$data[name]}</h4> \t\t<h6>{$data[category_name]}</h6> \t\t<p>{$data[describe]}</p> \t\t<p><a href="/course/{$data[id]}">{$translator->Go_to}...</a></p> EOF; } } else { $search = htmlspecialchars($search); echo <<<EOF \t\t<h4>{$translator->no_results} по "{$search}"</h4>\t\t EOF; } echo <<<EOF \t{$pagination} \t</div> </div> <!-- /container --> EOF; }
function displayBody() { parent::displayBody(); if (!is_array($this->param)) { return; } $func = array_shift($this->param); switch ($func) { case 'approve': $this->approve(); break; case 'delete': $this->delete(); break; default: $this->view(); } }
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(); $obj = new Category(); $cnt = $obj->getCount(); if (sizeof($_GET) > 0) { foreach ($_GET as $key => $val) { $values[$key] = htmlspecialchars($val, ENT_QUOTES); } } $enum = $obj->enumerate(); foreach ($enum as $key => $val) { if ($val['id'] != 0) { $this->items[$val['parent_id']][] = $val; } } foreach ($this->items as $key => $val) { asort($this->items[$key]); } echo <<<EOF <h2 class="page-header">{$translator->Categories_header} <span class="badge">{$cnt}</span></h2> <div class="col-lg-8"> <ul class="list-group category-list" index="0"> EOF; $this->put_list(); echo <<<EOF </ul> <div class="row"> \t<div class="btn-group"> \t<a href="#" class="btn btn-sm" data-toggle="toggler" parent-id="0"> \t <span class="glyphicon glyphicon-plus"></span> {$translator->add}</a> \t</div> </div> </div> EOF; }
function displayBody() { parent::displayBody(); $translator = new Translator(); $category = new Category(); $course = new Course(); $cnt = $course->getCount(); $enum = $category->enumerate(array('active' => true)); foreach ($enum as $key => $val) { if ($val['id'] != 0) { $this->items[$val['parent_id']][] = $val; } } foreach ($this->items as $key => $val) { asort($this->items[$key]); } $enum = $course->enumerate(array('active' => true)); if (isset($enum)) { foreach ($enum as $key => $val) { $this->courses[$val['category_id']][] = $val; } } foreach ($this->items as $key => $val) { asort($this->items[$key]); } echo <<<EOF <h2 class="page-header">{$translator->Courses_header} <span class="badge">{$cnt}</span></h2> <div class="col-lg-8"> <ul class="list-group category-list" index="0"> EOF; $this->put_list(); echo <<<EOF </ul> </div> EOF; }
function displayBody() { parent::displayBody(); $translator = new Translator(); $course = new Course(); $training = new Training(); $id = array_shift($this->param); try { $t_exists = $training->checkFinish($_SESSION['user_id'], $id); } catch (Exception $e) { } $data = $course->get(array('id' => $id)); foreach ($data as $key => $val) { $data[$key] = htmlspecialchars($val, ENT_QUOTES); } foreach ($course->formats as $key => $val) { if ($key == $data['format_id']) { $format = htmlspecialchars($val, ENT_QUOTES); } } foreach ($course->languages as $key => $val) { if ($key == $data['language']) { $language = htmlspecialchars($val, ENT_QUOTES); } } if ($data['active'] == 't') { $active = 'checked'; } if ($data['exam'] == 't') { $exam = 'checked'; } if ($data[duration] > 8) { $duration = floor($data['duration'] / 8) . " {$translator->days}" . ($data['duration'] % 8 > 0 ? " + " . $data['duration'] % 8 . " {$translator->hours}" : ''); } else { $duration = $data['duration'] . " {$translator->hours}"; } if ($t_exists) { $disabled = 'disabled'; } echo <<<EOF <div class="container-fluid"> <div class="col-md-10 col-lg-8 col-lg-offset-2 "> \t<h4>{$data[category_name]}</h4> \t<h2>{$data[name]}</h2> \t<div class="row"> \t <div class="col-sm-6"><small>{$translator->Duration}: {$duration}</small></div> \t <div class="col-sm-6 text-right"><small>{$translator->Format}: {$format}</small></div> \t</div> \t<hr/> \t<label for="describe">{$translator->Describe}:</label> \t<p class="describe">{$data[describe]}</p> \t<label for="data">{$translator->Prerequisites}:</label> \t<p class="describe">{$data[prerequisites]}</p> \t<label for="skills">{$translator->Skills}:</label> \t<p class="describe">{$data[skills]}</p> \t<label for="equipment">{$translator->Equipment}:</label> \t<p class="describe">{$data[equipment]}</p> <!-- TODO> Add needed courses select-box \t <div class="form-group">Courses</div> <!--> \t<div> \t <label for="language">{$translator->Language}:</label> {$language} \t</div> \t<div> \t <label for="language">{$translator->Author}:</label> {$data[author]} \t</div> \t<hr/> \t<div> \t\t<a href="/enroll/{$data['id']}" class="btn btn-primary btn-lg {$disabled}" >{$translator->Register}</a> \t</div> \t</div> </div> <!-- /container --> EOF; }
function displayBody() { parent::displayBody(); $translator = new Translator(); $user = new User(); $page = $_GET['page']; $offset = intval($page) * ITEMS_IN_PAGE; if (isset($_GET['search'])) { unset($_GET['search']); unset($_GET['page']); $search = $_GET; } else { $search = null; } $cnt = $user->getCount($search); if (sizeof($_GET) > 0) { foreach ($_GET as $key => $val) { $values[$key] = htmlspecialchars($val, ENT_QUOTES); } foreach ($user->roles as $key => $val) { if (($_GET['role_id'] & $val) > 0) { $valname = 'role' . $val; ${$valname} = 'checked'; } } if ($_GET['role_id'] == 0) { $role0 = 'checked'; $values['role_id'] = 0; } } if ($cnt > ITEMS_IN_PAGE) { $pagination = $this->addPaginator($cnt, $page); } echo <<<EOF <h2 class="page-header">{$translator->Users_header} <span class="badge">{$cnt}</span></h2> <div class="row"> \t<div class="col-md-1"> \t<button class="btn btn-sm btn-default" data-toggle="collapse" data-target="#filter"> \t <span class="glyphicon glyphicon-filter"></span> {$translator->Filter}</button> \t</div> </div> <div class="row"> <div class="col-md-5 collapse" id="filter"> \t <form role="form" class="form-horizontal" action="?" method="get"> \t\t<div class="form-group"> \t\t <div class="form-group"> \t\t <label for="name" class="control-label col-sm-3">{$translator->Name}:</label> \t\t <div class="col-sm-8"> \t\t <input type="text" class="form-control" id="name" name="name" value="{$values[name]}"> \t\t </div> \t\t </div> \t\t <div class="form-group"> \t\t <label for="email" class="control-label col-sm-3">{$translator->Email}:</label> \t\t <div class="col-sm-8"> \t\t <input type="text" class="form-control" id="email" name="email" value="{$values[email]}"> \t\t </div> \t\t </div> \t\t <div class="form-group"> \t\t <label for="company" class="control-label col-sm-3">{$translator->Company}:</label> \t\t <div class="col-sm-8"> \t\t <input type="text" class="form-control" id="company" name="company" value="{$values[company]}"> \t\t </div> \t\t </div> \t\t <div class="form-group"> \t\t <label for="phone" class="control-label col-sm-3">{$translator->Phone}:</label> \t\t <div class="col-sm-8"> \t\t <input type="text" class="form-control" id="phone" name="phone" value="{$values[phone]}"> \t\t </div> \t\t </div> \t\t <div class="form-group"> \t\t <label for="country" class="control-label col-sm-3">{$translator->Country}:</label> \t\t <div class="col-sm-8"> \t\t <input type="text" class="form-control" id="country" name="country" value="{$values[country]}"> \t\t </div> \t\t </div> \t\t <div class="form-group"> \t\t <label for="city" class="control-label col-sm-3">{$translator->City}:</label> \t\t <div class="col-sm-8"> \t\t <input type="text" class="form-control" id="city" name="city" value="{$values[city]}"> \t\t </div> \t\t </div> \t\t <div class="col-sm-offset-3"> EOF; foreach ($user->roles as $key => $val) { $valname = 'role' . $val; echo "\t\t <input type=\"checkbox\" class=\"role_id\" id=\"{$valname}\" value=\"{$val}\" " . ${$valname} . ">\n\t\t <label for=\"{$valname}\">" . User::RolesAsString($val) . "</label>" . NL; } echo <<<EOF \t\t <input class="sr-only" id="role_id" name="role_id" value="{$values[role_id]}"> \t\t <input class="sr-only" name="search" value="1"> \t\t </div> \t\t <div class="form-group"> \t\t <div class="col-sm-offset-3 col-md-10"> \t\t <button type="submit" class="btn btn-sm btn-default">{$translator->Apply}</button> \t\t </div> \t\t </div> \t\t</div> \t </form> \t</div> </div> {$pagination} <div class="table-responsive"> <table class="table table-striped"> <thead> <tr> <th>#</th> <th>{$translator->Name}</th> <th>{$translator->Roles}</th> <th>{$translator->Email}</th> <th>{$translator->Phone}</th> <th>{$translator->Company}</th> <th>{$translator->Place}</th> </tr> </thead> <tbody> EOF; $enum = $user->enumerate($search, $offset, ITEMS_IN_PAGE, 'users.last_name,users.first_name'); if (is_object($enum)) { $i = 1 + $offset; foreach ($enum as $key => $data) { if ($data['active'] == 'f') { $active = " class=\"not-active\""; } else { $active = ""; } echo " <tr>\n <td>{$i}</td>\n <td" . $active . ">{$data[name]}</td>\n <td>" . User::RolesAsString($data['role_id']) . "</td>\n <td>{$data[email]}</td>\n <td>{$data[phone]}</td>\n <td>{$data[company]} <small>{$data[position]}</small></td>\n <td>{$data[country]} <small>{$data[city]}</small></td>\n <td><a href=\"/admin_user/edit/{$data[id]}\" title=\"{$translator->edit}\"><span class=\"glyphicon glyphicon-user\"></span></a></td>\n <td><a href=\"/admin_user/delete/{$data[id]}\" title=\"{$translator->del}\" onClick=\"return confirm('{$translator->AreYouSure}');\"><span class=\"glyphicon glyphicon-trash\"></span></a></td>\n </tr>\n"; $i++; } } echo <<<EOF \t </table> \t</div> EOF; }
function displayBody() { parent::displayBody(); if (!is_array($this->param)) { return; } $func = array_shift($this->param); switch ($func) { case 'new': $this->edit(true); break; case 'add': $this->add(); break; case 'edit': $this->edit(); break; case 'save': $this->save(); 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 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 displayFooter() { parent::displayFooter(); $locale = LC; echo <<<EOF <script src="/js/moment-with-locales.js"></script> <script src="/js/bootstrap-datetimepicker.js"></script> <script> \$(function() { \$.ajaxSetup({ \tasync: false }); \$( ".datetimepicker" ).each(function(){ \t\$(this).datetimepicker({ \t locale: '{$locale}', \t format: 'YYYY-MM-DD HH:mm' \t }); \t}); \$("#category_id").change(function(){ \t\$.getJSON("/admin_training/courses/"+\$("#category_id :selected").val(), \t\t function(data){ \t\t \$("#course_id").html(''); \t\t \$.each(data,function(i,field){ \t\t\t\$('#course_id').append(\$('<option>', { \t\t\t value: field[0], \t\t\t text: field[1] \t\t\t })); \t\t }); \t }); }); \$("#searchuser").keyup(function(){ \t\$('#usermenu').html(''); \tif (\$("#searchuser").val().length > 0) \t\$.getJSON("/admin_training/finduser/{$this->id}?search="+\$("#searchuser").val(), \tfunction(res){ \t \$.each(res,function(i,data){ \t \$('#usermenu').append('<a class="list-group-item adduser list-group-item-info" '+ \t\t\t\t 'href="#" onclick="return adduser('+data['id']+');"><h4>'+ \t\t\t\t data['name']+' <small>'+data['email']+'</small></h4><p>'+data['city']+' / '+data['company']+ \t\t '</p></a>'+"\\n"); \t\t }); \t}); }); }); function removeuser(id){ \$.getJSON("/admin_training/removeuser/{$this->id}/"+id,function(data){ \t\$('table#users tr#row'+id).remove(); }); return false; } function adduser(id){ \$.getJSON("/admin_training/adduser/{$this->id}/"+id,function(data){ \t\$('#users').find('tbody').append('<tr id="row'+data['id']+'"><td>'+data['name']+'</td><td>'+ \t\tdata['email']+'</td><td>'+data['company']+' / '+data['city']+'</td><td>'+ \t\t'<a href="#" onclick="return removeuser('+data['id']+');">'+ \t\t'<span class="glyphicon glyphicon-trash"></span></a></td></tr>'); \t\$('#usermenu').html(''); }); return false; } </script> EOF; }
function displayFooter() { parent::displayFooter(); $translator = new Translator(); $question = new Question(); foreach ($question->types as $key => $name) { $types .= "<option value=\"{$key}\">" . htmlspecialchars($translator->{$name}) . "</option>"; } echo <<<EOF <script src="/js/tinymce.min.js"></script> <script> \$(function() { \$.ajaxSetup({ async: false }); \$("a[data-toggle='add']").each(function(){ \$(this).click(function(){ \t \$.getJSON("/admin_questions/find/{$this->id}", \t\tfunction(data){ \t \$('#question-list').before('<li class="list-group-item"><form action="/admin_questions/save/{$this->id}" method="post">'+ '<input type="hidden" name="id" value="'+data['id']+'">'+ \t\t '<select name="type_id" class="form-control">{$types}</select>'+ \t\t '<textarea name="data" id="data" rows=5 class="form-control"></textarea>'+ \t\t '<input name="count" type="number" min="1" placeholder="Answers" class="form-control">'+ \t\t '<input name="answer" class="form-control">'+ \t\t '<input type="submit" class="btn btn-primary">'+ \t\t '<a href="/admin_questions/delete/{$this->id}/'+data['id']+'" class="btn btn-danger">{$translator->Cancel}</a>'+"</form></li>\\n"); \t\t tinymce.init({selector:'textarea#data', \t\t plugins: [ \t\t\t "advlist autolink lists link image charmap print preview anchor", \t\t\t "searchreplace visualblocks code fullscreen", \t\t\t "insertdatetime media table contextmenu paste" \t\t\t], \t\t\ttoolbar: "undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist | link image", \t\t\tautosave_ask_before_unload: false, \t\t\tmin_height: 160, \t\t\theight : 180}); \t\t}); \t return false; \t}); }); \$("a[data-toggle='del']").each(function(){ \$(this).click(function(){ \t document.location.href="/admin_questions/delete/"+\$(this).attr('parent-id')+"/"+\$(this).attr('item-id'); \t}); }); \$("a[data-toggle='edit']").each(function(){ \$(this).click(function(){ \t item=\$(this).attr('item-id'); \t \$.getJSON("/admin_questions/load/{$this->id}/"+item, \t\tfunction(data){ \t \$('.question-item[item-id="'+data['id']+'"]').html('<form action="/admin_questions/save/{$this->id}" method="post">'+ '<input type="hidden" name="id" value="'+data['id']+'">'+ \t\t '<select name="type_id" class="form-control type-id" id="'+data['id']+'">{$types}</select>'+ \t\t '<textarea name="data" id="data" rows=5 class="form-control">'+data['data']+'</textarea>'+ \t\t '<input name="count" class="form-control" type="number" min="1" placeholder="Answers" value="'+data['count']+'">'+ \t\t '<input name="answer" class="form-control" value="'+data['answer']+'">'+ \t\t '<input type="submit" class="btn btn-primary">'+ \t\t '<a href="/admin_questions/delete/{$this->id}/'+data['id']+'" class="btn btn-danger">{$translator->Cancel}</a>'+"</form>\\n"); \t\t \$('#'+data['id']+'.type-id').val(data['type_id']); \t\t tinymce.init({selector:'textarea#data', \t\t plugins: [ \t\t\t "advlist autolink lists link image charmap print preview anchor", \t\t\t "searchreplace visualblocks code fullscreen", \t\t\t "insertdatetime media table contextmenu paste" \t\t\t], \t\t\ttoolbar: "undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist | link image", \t\t\tautosave_ask_before_unload: false, \t\t\tmin_height: 160, \t\t\theight : 180}); \t\t}); \t return false; \t}); }); }); </script> EOF; }
function displayBody() { parent::displayBody(); $translator = new Translator(); $course = new Course(); $data = $course->get(array('id' => $this->id)); foreach ($data as $key => $val) { $data[$key] = htmlspecialchars($val, ENT_QUOTES); } $path = preg_replace('/\\//', '</li><li>', $this->path); echo <<<EOF <h4>{$data[category_name]}</h4> <h2 class="page-header">{$data[name]}</h2> <ol class="breadcrumb"> \t<li><a href="/admin_manager/list/{$this->id}"><span class="glyphicon glyphicon-home"></span> {$translator->Back}</a> \t<li>{$path} </ol> EOF; if (preg_match('/.*(jpe?g|png|gif|svg)$/i', $this->path)) { $type = "image"; } if (preg_match('/.*(txt|htm|html)$/i', $this->path)) { $type = "text"; } if (preg_match('/.*(swf|pdf)$/i', $this->path)) { $type = "embed"; } if (preg_match('/.*(mov|mp4|wmv|avi)$/i', $this->path)) { $type = "video"; } if (preg_match('/.*(mp3)$/i', $this->path)) { $type = "audio"; } switch ($type) { case 'text': echo <<<EOF <div class="col-lg-8"> <form action="/admin_editor/save/{$this->id}/{$this->path}" method="post"> \t\t<textarea name="data" id="data" rows=5 class="form-control"> EOF; echo htmlspecialchars(file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/../files/courses/' . $this->id . '/' . $this->path)); echo <<<EOF \t\t</textarea> <button type="submit" class="btn btn-md btn-primary">{$translator->Save}</button>\t\t </form> </div> EOF; break; case 'image': echo <<<EOF \t\t<img src="/admin_editor/get_image/{$this->id}/{$this->path}" class="img-responsive"> \t\t EOF; break; case 'video': echo <<<EOF \t\t<div class="embed-responsive embed-responsive-16by9"> \t\t <video class="embed-responsive-item" controls> \t\t <source src="/admin_editor/get_image/{$this->id}/{$this->path}" ></source> \t\t </video> \t\t</div> EOF; break; case 'audio': echo <<<EOF \t\t<div class=""> \t\t <audio class="embed-responsive-item" controls> \t\t <source src="/admin_editor/get_image/{$this->id}/{$this->path}" > \t\t </audio> \t\t</div> EOF; break; case 'embed': echo <<<EOF \t\t<div class="embed-responsive embed-responsive-16by9"> \t\t <object data="/admin_editor/get_image/{$this->id}/{$this->path}" class="embed-responsive-item"></object> \t\t</div> EOF; break; } }
/** * @param AuthorizedPage $Page * @param string $Email * @param string $AccessCode * @param string $ClientKey * @param string $ClientInfo * @return Authorization|boolean */ public static function Fetch(AuthorizedPage $Page, $Email, $AccessCode, $ClientKey = null, $ClientInfo = null) { if (!$Page || !$Page->ID || !$Page->IsAllowedEmail(strtolower($Email))) { return false; } return Authorization::get()->filter(array('PageID' => $Page->ID, 'Email' => strtolower($Email), 'AccessCode' => strtoupper($AccessCode), 'ClientKey' => $ClientKey ? $ClientKey : Authorization::generateClientKey(), 'ClientInfo' => $ClientInfo ? $ClientInfo : Authorization::generateClientInfo()))->First(); }
function displayBody() { parent::displayBody(); $translator = new Translator(); $trainer = new Trainer(); $page = $_GET['page']; $offset = intval($page) * ITEMS_IN_PAGE; if (isset($_GET['search'])) { unset($_GET['search']); unset($_GET['page']); $search = $_GET; } else { $search = null; } $cnt = $trainer->getCount($search); if (sizeof($_GET) > 0) { foreach ($_GET as $key => $val) { $values[$key] = htmlspecialchars($val, ENT_QUOTES); } } if ($cnt > ITEMS_IN_PAGE) { $pagination = $this->addPaginator($cnt, $page); } echo <<<EOF <h2 class="page-header">{$translator->Trainers_header} <span class="badge">{$cnt}</span></h2> <div class="row"> \t<div class="btn-group"> \t<a href="/admin_trainer/new" class="btn btn-sm btn-default"> \t <span class="glyphicon glyphicon-plus"></span><span class="glyphicon glyphicon-user"></span> {$translator->Add}</a> \t<button class="btn btn-sm btn-default" data-toggle="collapse" data-target="#filter"> \t <span class="glyphicon glyphicon-filter"></span> {$translator->Filter} \t</button> \t</div> </div> <div class="row"> <div class="col-md-5 collapse" id="filter"> \t <form role="form" class="form-horizontal" action="?" method="get"> \t\t<div class="form-group"> \t\t <div class="form-group"> \t\t <label for="name" class="control-label col-sm-3">{$translator->Name}:</label> \t\t <div class="col-sm-8"> \t\t <input type="text" class="form-control" id="name" name="name" value="{$values[name]}"> \t\t </div> \t\t </div> \t\t <div class="form-group"> \t\t <label for="email" class="control-label col-sm-3">{$translator->Email}:</label> \t\t <div class="col-sm-8"> \t\t <input type="text" class="form-control" id="email" name="email" value="{$values[email]}"> \t\t </div> \t\t </div> \t\t <div class="form-group"> \t\t <label for="data" class="control-label col-sm-3">{$translator->Data}:</label> \t\t <div class="col-sm-8"> \t\t <input type="text" class="form-control" id="data" name="data" value="{$values[data]}"> \t\t </div> \t\t </div> \t\t <div class="form-group"> \t\t <div class="col-sm-offset-3 col-md-10"> \t\t <input class="sr-only" name="search" value="1"> \t\t <button type="submit" class="btn btn-sm btn-default">{$translator->Apply}</button> \t\t </div> \t\t </div> \t\t</div> \t </form> \t</div> </div> {$pagination} <div class="table-responsive"> <table class="table table-striped"> <thead> <tr> <th>#</th> <th>{$translator->Name}</th> <th>{$translator->Email}</th> <th>{$translator->Data}</th> </tr> </thead> <tbody> EOF; $enum = $trainer->enumerate($search, $offset, ITEMS_IN_PAGE); if (is_object($enum)) { $i = 1 + $offset; foreach ($enum as $key => $data) { if (strlen($data['data']) > 50) { $data['data'] = '<small>' . $data['data'] . '</small>'; } else { if (strlen($data['data']) > 200) { $data['data'] = '<small>' . substr($data['data'], 0, 200) . '...</small>'; } } echo " <tr>\n <td>{$i}</td>\n <td>{$data[name]}</td>\n <td>{$data[email]}</td>\n <td>{$data[data]}</td>\n <td><a href=\"/admin_trainer/edit/{$data[id]}\" title=\"{$translator->edit}\"><span class=\"glyphicon glyphicon-user\"></span></a></td>\n <td><a href=\"/admin_trainer/delete/{$data[id]}\" title=\"{$translator->del}\" onClick=\"return confirm('{$translator->AreYouSure}');\"><span class=\"glyphicon glyphicon-trash\"></span></a></td>\n </tr>" . NL; $i++; } } echo <<<EOF \t </table> \t</div> EOF; }
function displayFooter() { parent::displayFooter(); $locale = LC; echo <<<EOF <script src="/js/moment-with-locales.js"></script> <script src="/js/bootstrap-datetimepicker.js"></script> <script> \$(function() { \$( ".datetimepicker" ).each(function(){ \$(this).datetimepicker({ locale: '{$locale}', format: 'YYYY-MM-DD HH:mm' }); }); }); </script> EOF; }
function displayBody() { parent::displayBody(); $translator = new Translator(); $training = new Training(); echo <<<EOF <h2 class="page-header">{$translator->MyCourses}</h2> EOF; $enum = $training->enumerate(array('user_id' => $_SESSION['user_id'], 'active' => 'true')); if ($enum) { foreach ($enum as $key => $data) { $now = new DateTime('now'); $finish = new DateTime($data['finish']); // check for timeout and set new status switch ($data['status_id']) { case Training::CREATED: case Training::STARTED: case Training::EXAM: case Training::EXAM_STARTED: if ($now > $finish) { $training->update($data['id'], array('status_id' => Training::TIMEOUT)); $data['status_id'] = Training::TIMEOUT; } default: } // prepeare data for display switch ($data['status_id']) { case Training::TIMEOUT: $data['result_desc'] = "<span class=\"label label-danger\">{$translator->Overtime}</span>"; $actions = "<a href=\"/course/{$data[course_id]}\" class=\"btn btn-default btn-md\">\n\t <span class=\"glyphicon glyphicon glyphicon-repeat\"></span> {$translator->Repeat}</a>\n\t <a href=\"/mycourses/delete/{$data[id]}\" class=\"btn btn-default btn-md\"\n\t onclick='return confirm(\"{$translator->AreYouSure}\");'>\n\t <span class=\"glyphicon glyphicon glyphicon-trash\"></span> {$translator->Delete}</a>"; break; case Training::CREATED: $data['result_desc'] = "<span class=\"label label-default\">{$translator->Not_started}</span>"; $actions = "<a href=\"/learn/{$data[course_hash]}\" class=\"btn btn-primary btn-md\">\n \t <span class=\"glyphicon glyphicon-play\"></span> {$translator->Learn}</a>\n \t <a href=\"/mycourses/dismiss/{$data[id]}\" class=\"btn btn-danger btn-md\">\n \t <span class=\"glyphicon glyphicon-trash\"></span> {$translator->Dismiss}</a>"; break; case Training::DELETED: $data['result_desc'] = "<span class=\"label label-default\">{$translator->Deleted}</span>"; $actions = "<a href=\"/course/{$data[course_id]}\" class=\"btn btn-default btn-md\">\n <span class=\"glyphicon glyphicon glyphicon-repeat\"></span> {$translator->Repeat}</a>\n <a href=\"/mycourses/delete/{$data[id]}\" class=\"btn btn-default btn-md\"\n onclick='return confirm(\"{$translator->AreYouSure}\");'>\n\t <span class=\"glyphicon glyphicon glyphicon-trash\"></span> {$translator->Delete}</a>"; break; case Training::STARTED: $data['result_desc'] = "<span class=\"label label-warning\">{$translator->Not_tested}</span>"; $actions = "<a href=\"/learn/{$data[course_hash]}\" class=\"btn btn-primary btn-md\">\n\t <span class=\"glyphicon glyphicon-play\"></span> {$translator->Learn}</a>\n\t "; break; case Training::EXAM: case Training::EXAM_STARTED: $data['result_desc'] = "<span class=\"label label-danger\">{$translator->NotCertified}</span>" . "<div>{$translator->Result}: " . intval($data['result']) . "%({$data[answers]}/{$data[questions]})</div>"; $actions = "<a href=\"/exam/{$data[exam_hash]}/\" class=\"btn btn-warning btn-md\">\n\t <span class=\"glyphicon glyphicon-check\"></span> {$translator->Test}</a>"; break; case Training::FAILED: $data['result_desc'] = "<span class=\"label label-danger\">{$translator->NotCertified}</span>" . "<div>{$translator->Result}: " . intval($data['result']) . "%({$data[answers]}/{$data[questions]})</div>"; $actions = "<a href=\"/course/{$data[course_id]}\" class=\"btn btn-default btn-md\">\n <span class=\"glyphicon glyphicon glyphicon-repeat\"></span> {$translator->Repeat}</a>\n <a href=\"/mycourses/delete/{$data[id]}\" class=\"btn btn-default btn-md\"\n onclick='return confirm(\"{$translator->AreYouSure}\");'>\n\t <span class=\"glyphicon glyphicon glyphicon-trash\"></span> {$translator->Delete}</a>"; break; case Training::FINISHED: if ($data['exam'] == 't') { $data['result_desc'] = "<span class=\"label label-success\">{$translator->Certified}</span>" . "<div>{$translator->Result}: " . intval($data['result']) . "%({$data[answers]}/{$data[questions]})</div>"; $actions = "<a href=\"/certificate/{$data[course_hash]}\" class=\"btn btn-success btn-md\">\n\t\t<span class=\"glyphicon glyphicon-certificate\"></span> {$translator->Certificate}</a>"; } else { $data['result_desc'] = "<span class=\"label label-success\">{$translator->Certified}</span>"; $actions = "<a href=\"/certificate/{$data[course_hash]}\" class=\"btn btn-success btn-md\">\n\t\t<span class=\"glyphicon glyphicon-thumbs-star\"></span> {$translator->Certificate}</a>"; } break; default: } if ($data['finished']) { $finish = $data['finished']; } else { $finish = $data['finish']; } echo <<<EOF <div class="panel panel-default col-md-6 col-lg-4 mycourse"> <div class="panel-heading overflow-hidden"> \t<p class="text-muted">{$data[category_name]}</p> \t<h4><a href="/course/{$data[course_id]}">{$data[course_name]}</a></h4> </div> <div class="panel-body"> \t<div class="row"> \t <div class="col-md-8"> \t<p>{$translator->Start}: {$data[start]}</p> \t<p>{$translator->Finish}: {$finish}</p> \t </div> \t <div class="col-md-4"> \t\t{$data[result_desc]} \t </div> \t</div> \t<div class="row"> \t{$actions} \t</div> </div> </div> EOF; } } else { echo <<<EOF <div class="panel panel-default col-lg-8"> <div class="panel-body"> \t{$translator->No_courses} </div> </div> EOF; } }