summaryrefslogtreecommitdiffstats
path: root/modules-available/exams
diff options
context:
space:
mode:
Diffstat (limited to 'modules-available/exams')
-rw-r--r--modules-available/exams/config.json2
-rw-r--r--modules-available/exams/lang/de/template-tags.json3
-rw-r--r--modules-available/exams/lang/en/module.json2
-rw-r--r--modules-available/exams/lang/en/template-tags.json13
-rw-r--r--modules-available/exams/page.inc.php4
-rw-r--r--modules-available/exams/style.css8
-rw-r--r--modules-available/exams/templates/page-add-edit-exam.html219
-rw-r--r--modules-available/exams/templates/page-exams-vis.html13
-rw-r--r--modules-available/exams/templates/page-exams.html113
-rw-r--r--modules-available/exams/templates/page-upcoming-lectures.html99
10 files changed, 279 insertions, 197 deletions
diff --git a/modules-available/exams/config.json b/modules-available/exams/config.json
index 95d8aa3e..0780ebef 100644
--- a/modules-available/exams/config.json
+++ b/modules-available/exams/config.json
@@ -1,5 +1,5 @@
{
"category":"main.content",
- "dependencies": [ "locations", "js_vis", "bootstrap_datepicker", "bootstrap_timepicker", "bootstrap_multiselect"],
+ "dependencies": [ "locations", "js_vis", "js_stupidtable", "bootstrap_datepicker", "bootstrap_timepicker", "bootstrap_multiselect"],
"permission": "0"
}
diff --git a/modules-available/exams/lang/de/template-tags.json b/modules-available/exams/lang/de/template-tags.json
index e011ee20..8bf37143 100644
--- a/modules-available/exams/lang/de/template-tags.json
+++ b/modules-available/exams/lang/de/template-tags.json
@@ -12,6 +12,7 @@
"lang_begin_date": "Beginn Datum",
"lang_begin_time": "Uhrzeit",
"lang_comfirmGlobalExam": "Wollen Sie wirklich eine globale Pr\u00fcfung definieren? Im gew\u00e4hlten Zeitraum werden s\u00e4mtliche R\u00e4ume in den Pr\u00fcfungsmodus geschaltet.",
+ "lang_dateTime": "Datum\/Uhrzeit",
"lang_deleteConfirmation": "Wirklich l\u00f6schen?",
"lang_description": "Beschreibung",
"lang_duration": "Dauer",
@@ -21,7 +22,9 @@
"lang_end_time": "Uhrzeit",
"lang_examModeDescription": "Hier k\u00f6nnen Sie bwLehrpool-R\u00e4ume zeitgesteuert in den Pr\u00fcfungsmodus versetzen. Im Pr\u00fcfungsmodus ist das Client-System st\u00e4rker abgeriegelt, sodass es sich zum Schreiben von E-Pr\u00fcfungen eignet. Nach dem Ein- bzw. Ausschalten des Pr\u00fcfungsmodus ist es notwendig, die Rechner in den betroffenen R\u00e4umen neuzustarten.",
"lang_global": "Global",
+ "lang_headingAddExam": "Zeitraum hinzuf\u00fcgen",
"lang_headingAllExamLectures": "Ausstehende Pr\u00fcfungsveranstaltungen (30 Tage)",
+ "lang_headingEditExam": "Zeitraum bearbeiten",
"lang_headingGraphicalOverview": "Grafische Darstellung",
"lang_headingMain": "bwLehrpool Pr\u00fcfungsmodus",
"lang_id": "ID",
diff --git a/modules-available/exams/lang/en/module.json b/modules-available/exams/lang/en/module.json
index a066b3aa..a2403da1 100644
--- a/modules-available/exams/lang/en/module.json
+++ b/modules-available/exams/lang/en/module.json
@@ -1,5 +1,5 @@
{
- "module_name": "Exam mode",
+ "module_name": "Exam Mode",
"title_add-exam": "Add exam",
"title_edit-exam": "Edit exam",
"warning_lecture_is_not_enabled": "Warning: Lecture is not enabled by tutor"
diff --git a/modules-available/exams/lang/en/template-tags.json b/modules-available/exams/lang/en/template-tags.json
index a4ae9325..af87bb01 100644
--- a/modules-available/exams/lang/en/template-tags.json
+++ b/modules-available/exams/lang/en/template-tags.json
@@ -2,7 +2,7 @@
"lang_actions": "Actions",
"lang_addExam": "Add exam period",
"lang_addingBasedOnLecture": "Adding exam period based on lecture",
- "lang_allExamPeriods": "All exam periods",
+ "lang_allExamPeriods": "All Exam Periods",
"lang_autoLogin": "Skip login",
"lang_autoLoginInfo": "If this option is enabled, the login mask will not be shown and instead, an anonymous session is opened. This is useful if there is another authentication mechanism in place inside the VM, e.g. web-based (LMS). The user will see the vmChooser right away after booting up the computer. You can combine this option with the \"Automatically launched course\" feature, so the boot process is completely automated. Note that when using \"skip login\", no personalization like mapping of home directories is possible inside the VM without additional actions by the user and\/or creator of the VM.",
"lang_autoStartInfo": "Here you can select a course that will be launched automatically after the user logged in. This will skip the vmChooser screen, and directly start the couse selected here. This function can be combined with the \"skip login\" feature to further automate the boot-up process.",
@@ -12,18 +12,21 @@
"lang_begin_date": "Begin Date",
"lang_begin_time": "Time",
"lang_comfirmGlobalExam": "Do you really want to create a global exam? Every single room will be set to lecture mode during the selected time period.",
+ "lang_dateTime": "Date\/Time",
"lang_deleteConfirmation": "Are you sure?",
"lang_description": "Description",
"lang_duration": "Duration",
- "lang_editExam": "Edit Exam Period",
+ "lang_editExam": "Edit exam period",
"lang_end": "End",
"lang_end_date": "End Date",
"lang_end_time": "Time",
"lang_examModeDescription": "Here you can define time spans during which selected rooms will be set to exam mode. In exam mode, the client computers are more locked down than usual so it is suitable for writing electronic exams.",
"lang_global": "Global",
- "lang_headingAllExamLectures": "Upcoming lectures marked as exams (30 days)",
- "lang_headingGraphicalOverview": "Graphical overview",
- "lang_headingMain": "bwLehrpool exam mode",
+ "lang_headingAddExam": "Add Exam Period",
+ "lang_headingAllExamLectures": "Upcoming Lectures Marked As Exams (30 Days)",
+ "lang_headingEditExam": "Edit Exam Period",
+ "lang_headingGraphicalOverview": "Graphical Overview",
+ "lang_headingMain": "bwLehrpool Exam Mode",
"lang_id": "ID",
"lang_lectureName": "Lecture name",
"lang_lectureOutOfRange": "Hint: Start or end date of given lecture lies outside of exam period given above",
diff --git a/modules-available/exams/page.inc.php b/modules-available/exams/page.inc.php
index 48af287a..a6bd7e16 100644
--- a/modules-available/exams/page.inc.php
+++ b/modules-available/exams/page.inc.php
@@ -150,10 +150,10 @@ class Page_Exams extends Page
foreach ($this->exams as $exam) {
if ($exam['endtime'] < $now) {
$exam['rowClass'] = 'text-muted';
- $exam['btnClass'] = 'btn-success';
+ $exam['btnClass'] = 'btn-default';
$exam['liesInPast'] = true;
} else {
- $exam['btnClass'] = 'btn-default';
+ $exam['btnClass'] = 'btn-danger';
}
$exam['starttime_s'] = date('Y-m-d H:i', $exam['starttime']);
$exam['endtime_s'] = date('Y-m-d H:i', $exam['endtime']);
diff --git a/modules-available/exams/style.css b/modules-available/exams/style.css
index 4a6cd7da..c6e5bada 100644
--- a/modules-available/exams/style.css
+++ b/modules-available/exams/style.css
@@ -15,3 +15,11 @@
.vis-item.disabled {
background-color: rgba(189, 195, 199, 1.0) !important;
}
+
+.table > tbody > tr > td {
+ vertical-align: middle;
+}
+
+label {
+ font-weight: inherit;
+} \ No newline at end of file
diff --git a/modules-available/exams/templates/page-add-edit-exam.html b/modules-available/exams/templates/page-add-edit-exam.html
index bf000df5..58c61b11 100644
--- a/modules-available/exams/templates/page-add-edit-exam.html
+++ b/modules-available/exams/templates/page-add-edit-exam.html
@@ -1,108 +1,122 @@
{{#exam.examid}}
-<h1>{{lang_editExam}}</h1>
+<h1>{{lang_headingEditExam}}</h1>
{{/exam.examid}}
{{^exam.examid}}
-<h1>{{lang_addExam}}</h1>
+<h1>{{lang_headingAddExam}}</h1>
{{/exam.examid}}
{{#exam.displayname}}
<div class="alert alert-info">{{lang_addingBasedOnLecture}}:<br><b>{{exam.displayname}}</b></div>
{{/exam.displayname}}
+
<form class="form" method="POST" action="?do=exams" id="tolleform">
- <div class="form-group">
- <div>
- <label for="locations">{{lang_location}}</label>
- <p><i>{{lang_locationInfo}}</i></p>
+ <div class="panel panel-default">
+ <div class="panel-heading"><label for="locations">{{lang_location}}</label></div>
+ <div class="panel-body">
+ <div class="form-group">
+ <div>
+ <p><i>{{lang_locationInfo}}</i></p>
+ </div>
+ <select id="locations" multiple name="locations[]">
+ {{#locations}}
+ <option value="{{locationid}}" {{#selected}}selected{{/selected}}>{{locationpad}} {{locationname}}</option>
+ {{/locations}}
+ </select>
+ </div>
</div>
- <select id="locations" multiple name="locations[]">
- {{#locations}}
- <option value="{{locationid}}" {{#selected}}selected{{/selected}}>{{locationpad}} {{locationname}}</option>
- {{/locations}}
- </select>
</div>
- <div class="row form-group">
- <div class="col-xs-6">
- <label for="starttime_date">{{lang_begin_date}}</label>
- <div class="input-group">
- <span class="input-group-addon">
- <span class="glyphicon glyphicon-calendar"></span>
- </span>
- <input required class="form-control datepicker" name="starttime_date" id="starttime_date"
- value="{{exam.starttime_date}}">
- </div>
- </div>
- <div class="col-xs-6">
- <label for="starttime_time">{{lang_begin_time}}</label>
- <div class="input-group bootstrap-timepicker timepicker">
- <span class="input-group-addon">
- <span class="glyphicon glyphicon-time"></span>
- </span>
- <input required type="text" class="form-control timepicker2" name="starttime_time" id="starttime_time"
- value="{{exam.starttime_time}}"
- pattern="[0-9]{1,2}:[0-9]{2}">
+ <div class="panel panel-default">
+ <div class="panel-heading">{{lang_dateTime}}</div>
+ <div class="panel-body">
+ <div class="row form-group">
+ <div class="col-xs-6">
+ <label for="starttime_date">{{lang_begin_date}}</label>
+ <div class="input-group">
+ <span class="input-group-addon">
+ <span class="glyphicon glyphicon-calendar"></span>
+ </span>
+ <input required class="form-control datepicker" name="starttime_date" id="starttime_date"
+ value="{{exam.starttime_date}}">
+ </div>
+ </div>
+ <div class="col-xs-6">
+ <label for="starttime_time">{{lang_begin_time}}</label>
+ <div class="input-group bootstrap-timepicker timepicker">
+ <span class="input-group-addon">
+ <span class="glyphicon glyphicon-time"></span>
+ </span>
+ <input required type="text" class="form-control timepicker2" name="starttime_time" id="starttime_time"
+ value="{{exam.starttime_time}}"
+ pattern="[0-9]{1,2}:[0-9]{2}">
+ </div>
+ </div>
</div>
- </div>
- </div>
- <div class="row form-group">
- <div class="col-xs-6">
- <label for="endtime_date">{{lang_end_date}}</label>
- <div class="input-group">
- <span class="input-group-addon">
- <span class="glyphicon glyphicon-calendar"></span>
- </span>
- <input required class="form-control datepicker" name="endtime_date" id="endtime_date"
- value="{{exam.endtime_date}}">
+ <div class="row form-group">
+ <div class="col-xs-6">
+ <label for="endtime_date">{{lang_end_date}}</label>
+ <div class="input-group">
+ <span class="input-group-addon">
+ <span class="glyphicon glyphicon-calendar"></span>
+ </span>
+ <input required class="form-control datepicker" name="endtime_date" id="endtime_date"
+ value="{{exam.endtime_date}}">
+ </div>
+ </div>
+ <div class="col-xs-6">
+ <label for="endtime_time">{{lang_end_time}}</label>
+ <div class="input-group bootstrap-timepicker timepicker">
+ <span class="input-group-addon">
+ <span class="glyphicon glyphicon-time"></span>
+ </span>
+ <input required type="text" class="form-control timepicker2" name="endtime_time" id="endtime_time"
+ value="{{exam.endtime_time}}"
+ pattern="[0-9]{1,2}:[0-9]{2}">
+ </div>
+ </div>
</div>
- </div>
- <div class="col-xs-6">
- <label for="endtime_time">{{lang_end_time}}</label>
- <div class="input-group bootstrap-timepicker timepicker">
- <span class="input-group-addon">
- <span class="glyphicon glyphicon-time"></span>
- </span>
- <input required type="text" class="form-control timepicker2" name="endtime_time" id="endtime_time"
- value="{{exam.endtime_time}}"
- pattern="[0-9]{1,2}:[0-9]{2}">
+
+ <div class="panel">
+ <div class="panel-body">
+ {{lang_duration}}: <span id="exam-duration">-</span>
+ </div>
</div>
</div>
</div>
- <div class="panel">
+ <div class="panel panel-default">
+ <div class="panel-heading"><label for="lecturelist">{{lang_autoStartLecture}}</label></div>
<div class="panel-body">
- {{lang_duration}}: <span id="exam-duration">-</span>
- </div>
- </div>
-
- <div class="row form-group">
- <div class="form-group col-xs-12">
- <label for="description">{{lang_autoStartLecture}}</label>
- <p><i>{{lang_autoStartInfo}}</i></p>
- <div class="input-group">
- <span class="input-group-addon">
- <span class="glyphicon glyphicon-pencil"></span>
- </span>
- <select class="form-control" id="lecturelist" name="lectureid">
- <option value="">{{lang_none}}</option>
- {{#lectures}}
- <option data-from="{{starttime}}" data-to="{{endtime}}" value="{{lectureid}}" {{selected}} >{{displayname}}</option>
- {{/lectures}}
- </select>
+ <div class="row form-group">
+ <div class="form-group col-xs-12">
+ <p><i>{{lang_autoStartInfo}}</i></p>
+ <div class="input-group">
+ <span class="input-group-addon">
+ <span class="glyphicon glyphicon-pencil"></span>
+ </span>
+ <select class="form-control" id="lecturelist" name="lectureid">
+ <option value="">{{lang_none}}</option>
+ {{#lectures}}
+ <option data-from="{{starttime}}" data-to="{{endtime}}" value="{{lectureid}}" {{selected}} >{{displayname}}</option>
+ {{/lectures}}
+ </select>
+ </div>
+ </div>
+ <div class="form-group col-xs-12">
+ <div class="checkbox"><input id="autologin" type="checkbox" name="autologin" value="demo" class="form-control" {{#exam.autologin}}checked{{/exam.autologin}}><label for="autologin">{{lang_autoLogin}}</label></div>
+ <p><i>{{lang_autoLoginInfo}}</i></p>
+ </div>
+ <div class="col-xs-12" id="lecture-info">
+ -
+ </div>
</div>
</div>
- <div class="form-group col-xs-12">
- <div class="checkbox"><input id="autologin" type="checkbox" name="autologin" value="demo" class="form-control" {{#exam.autologin}}checked{{/exam.autologin}}><label for="autologin">{{lang_autoLogin}}</label></div>
- <p><i>{{lang_autoLoginInfo}}</i></p>
- </div>
- <div class="col-xs-12" id="lecture-info">
- -
- </div>
</div>
- <div class="row form-group">
- <div class="form-group col-xs-12">
- <label for="description">{{lang_description}}</label>
+ <div class="panel panel-default">
+ <div class="panel-heading"><label for="description">{{lang_description}}</label></div>
+ <div class="panel-body">
<textarea class="form-control" type="textarea" name="description" id="description">{{exam.description}}</textarea>
</div>
</div>
@@ -110,10 +124,39 @@
<input type="hidden" name="action" value="save">
<input type="hidden" name="token" value="{{token}}">
<input type="hidden" name="examid" value="{{exam.examid}}">
- <button class="btn btn-success" type="submit">{{lang_save}}</button>
+ <div class="text-right" style="margin-bottom: 20px">
+ <button type="button" id="cancelButton" class="btn btn-default"< style="margin-right: 10px">{{lang_cancel}}</button>
+ <button type="button" onclick="checkGlobalExam()" id="saveButton" class="btn btn-primary"><span class="glyphicon glyphicon-floppy-disk"></span> {{lang_save}}</button>
+ </div>
+
+ <div class ="modal fade" id="confirmGlobalModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
+ <div class="modal-dialog" style="width: 400px" role="document">
+ <div class="modal-content">
+ <div class="modal-body">
+ {{lang_comfirmGlobalExam}}
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-default" data-dismiss="modal">{{lang_cancel}}</button>
+ <button type="submit" class="btn btn-sm btn-primary"><span class="glyphicon glyphicon-floppy-disk"></span> {{lang_save}}</button>
+ </div>
+ </div>
+ </div>
+ </div>
+
</form>
+
+
<script type="application/javascript"><!--
+
+function checkGlobalExam() {
+ if ($('#locations option:selected').length === 0 && $('#locations option').length > 1) {
+ $("#confirmGlobalModal").modal();
+ } else {
+ $('#tolleform').submit();
+ }
+}
+
document.addEventListener("DOMContentLoaded", function () {
var filename = "modules/bootstrap_datepicker/lang/bootstrap-datepicker." + LANG + ".js";
moment.locale(LANG);
@@ -189,7 +232,7 @@ document.addEventListener("DOMContentLoaded", function () {
}
});
updateLectureInfo();
- }
+ };
var updateLectureInfo = function() {
var sel = $('#lecturelist option:selected');
@@ -198,7 +241,7 @@ document.addEventListener("DOMContentLoaded", function () {
} else {
$('#lecture-info').text('{{lang_lectureOutOfRange}} (' + slxMoment(sel.data('from') * 1000).format('YYYY-MM-DD H:mm') + ' - ' + slxMoment(sel.data('to') * 1000).format('YYYY-MM-DD H:mm') + ')');
}
- }
+ };
start_date.change(startEndChanged);
start_time.change(startEndChanged);
@@ -206,12 +249,8 @@ document.addEventListener("DOMContentLoaded", function () {
end_time.change(startEndChanged);
$('#lecturelist').change(updateLectureInfo);
- $('#tolleform').submit(function(ev) {
- if ($('#locations option:selected').length === 0 && $('#locations option').length > 1) {
- if (!confirm('{{lang_comfirmGlobalExam}}')) {
- ev.preventDefault();
- }
- }
+ $("#cancelButton").click(function () {
+ window.location.replace("?do=exams");
});
}, false);
diff --git a/modules-available/exams/templates/page-exams-vis.html b/modules-available/exams/templates/page-exams-vis.html
index e347900b..caf4aea2 100644
--- a/modules-available/exams/templates/page-exams-vis.html
+++ b/modules-available/exams/templates/page-exams-vis.html
@@ -1,6 +1,15 @@
-<h2>{{lang_headingGraphicalOverview}}</h2>
+<div class="panel panel-default">
+ <div class="panel-heading">
+ {{lang_headingGraphicalOverview}}
+ </div>
+ <div class="panel-body">
+ <div id="timeline" class="slx-space"></div>
+ </div>
+</div>
+
+
+
-<div id="timeline" class="slx-space"></div>
<script type="application/javascript"><!--
diff --git a/modules-available/exams/templates/page-exams.html b/modules-available/exams/templates/page-exams.html
index fc88e4f4..29b8c319 100644
--- a/modules-available/exams/templates/page-exams.html
+++ b/modules-available/exams/templates/page-exams.html
@@ -1,52 +1,63 @@
-<h2>{{lang_allExamPeriods}}</h2>
-<div class="slx-space">
- <table class="table">
- <tr>
- <th>{{lang_id}}</th>
- <th>{{lang_locations}}</th>
- <th>{{lang_begin}}</th>
- <th>{{lang_end}}</th>
- <th>{{lang_actions}}</th>
- </tr>
- {{#exams}}
- <tr class="{{rowClass}}">
- <td>{{examid}}</td>
- <td>
- {{locationnames}}
- {{^locationnames}}
- <i>{{lang_global}}</i>
- {{/locationnames}}
- {{#lecturename}}
- <div>
- <b>{{lang_autostart}}</b>: {{lecturename}}
- </div>
- {{/lecturename}}
- <div class="small">
- {{description}}
- {{^description}}
- <i>{{lang_noDescription}}</i>
- {{/description}}
- </div>
- </td>
- <td class="text-nowrap">{{starttime_s}}</td>
- <td class="text-nowrap">{{endtime_s}}</td>
- <td class="text-nowrap text-right">
- <form method="POST" action="?do=exams&action=delete" {{^liesInPast}}onsubmit="return confirm('{{lang_deleteConfirmation}}');"{{/liesInPast}} >
- {{^liesInPast}}
- <a onclick="slxShow({{starttime}}, {{endtime}})" class="btn btn-default btn-sm"><span class="glyphicon glyphicon-eye-open"></span></a>
- {{/liesInPast}}
- <a href="?do=exams&action=edit&examid={{examid}}" class="btn btn-default btn-sm" >{{lang_edit}}</a>
- <input type="hidden" name="token" value="{{token}}">
- <input type="hidden" name="examid" value="{{examid}}">
- <button class="btn {{btnClass}} btn-sm">{{lang_delete}}</button>
- </form>
- </td>
- </tr>
- {{/exams}}
- </table>
-</div>
-
-<div class="btn-group" role="group">
- <a href="?do=exams&action=add" class="btn btn-success">{{lang_addExam}}</a>
-</div>
+<div class="panel panel-default">
+ <div class="panel-heading">
+ {{lang_allExamPeriods}}
+ </div>
+ <div class="panel-body">
+ <div class="slx-space">
+ <table class="table table-bordered stupidtable">
+ <thead>
+ <tr>
+ <th data-sort="int">{{lang_id}}</th>
+ <th data-sort="string">{{lang_locations}}</th>
+ <th data-sort="int">{{lang_begin}}</th>
+ <th data-sort="int">{{lang_end}}</th>
+ <th></th>
+ </tr>
+ </thead>
+ <tbody>
+ {{#exams}}
+ <tr class="{{rowClass}}">
+ <td>{{examid}}</td>
+ <td>
+ {{locationnames}}
+ {{^locationnames}}
+ <i>{{lang_global}}</i>
+ {{/locationnames}}
+ {{#lecturename}}
+ <div>
+ <b>{{lang_autostart}}</b>: {{lecturename}}
+ </div>
+ {{/lecturename}}
+ <div class="small">
+ {{description}}
+ {{^description}}
+ <i>{{lang_noDescription}}</i>
+ {{/description}}
+ </div>
+ </td>
+ <td class="text-nowrap" data-sort-value={{starttime}}>{{starttime_s}}</td>
+ <td class="text-nowrap" data-sort-value={{endtime}}>{{endtime_s}}</td>
+ <td class="text-nowrap text-right">
+ <form method="POST" action="?do=exams&action=delete" {{^liesInPast}}onsubmit="return confirm('{{lang_deleteConfirmation}}');"{{/liesInPast}} >
+ {{^liesInPast}}
+ <a onclick="slxShow({{starttime}}, {{endtime}})" class="btn btn-default btn-sm"><span class="glyphicon glyphicon-eye-open"></span></a>
+ {{/liesInPast}}
+ <a href="?do=exams&action=edit&examid={{examid}}" class="btn btn-default btn-sm" >{{lang_edit}}</a>
+ <input type="hidden" name="token" value="{{token}}">
+ <input type="hidden" name="examid" value="{{examid}}">
+ <button class="btn {{btnClass}} btn-sm">{{lang_delete}}</button>
+ </form>
+ </td>
+ </tr>
+ {{/exams}}
+ </tbody>
+ </table>
+ </div>
+ <div class="text-right">
+ <div class="btn-group" role="group">
+ <a href="?do=exams&action=add" class="btn btn-success"><span class="glyphicon glyphicon-plus-sign"></span> {{lang_addExam}}</a>
+ </div>
+ </div>
+ </div>
+</div> \ No newline at end of file
diff --git a/modules-available/exams/templates/page-upcoming-lectures.html b/modules-available/exams/templates/page-upcoming-lectures.html
index 323b1017..8ff8143e 100644
--- a/modules-available/exams/templates/page-upcoming-lectures.html
+++ b/modules-available/exams/templates/page-upcoming-lectures.html
@@ -1,46 +1,55 @@
-<h2>{{lang_headingAllExamLectures}}</h2>
-
-<div class="slx-space">
- <table class="table">
- <tr>
- <th>{{lang_lectureName}}</th>
- <th>{{lang_timeFrame}}</th>
- <th>{{lang_actions}}</th>
- </tr>
- {{#pending_lectures}}
- <tr class="{{class}}">
- <td>
- {{displayname}}
- <div class="small">
- <a href="mailto:{{email}}">{{lastname}}, {{firstname}}</a>
- </div>
- </td>
- <td width="30%" class="text-nowrap">
- {{starttime_s}} &ensp; {{endtime_s}}
- <div class="small">
- {{lang_duration}}: {{duration_s}}
- {{^duration_s}}{{lang_moreThanOneDay}}{{/duration_s}}
- </div>
- </td>
- <td width="20%">
- <div class="pull-right text-nowrap">
- <a class="btn btn-sm btn-default" role="button" onclick="slxShow({{starttime}}, {{endtime}})"><span class="glyphicon glyphicon-eye-open"></span></a>
- <a href="?do=exams&amp;action=add&amp;lectureid={{lectureid}}" class="btn btn-sm btn-default" role="button">
- <span class="glyphicon glyphicon-plus-sign"></span>
- <span class="hidden-sm">{{lang_addExam}}</span>
- </a>
- </div>
- </td>
- </tr>
- {{/pending_lectures}}
- {{#decollapse}}
- <tr class="slx-decollapse">
- <td colspan="3">
- <span class="btn-group btn-group-justified">
- <span class="btn btn-default btn-sm"><span class="glyphicon glyphicon-menu-down"></span></span>
- </span>
- </td>
- </tr>
- {{/decollapse}}
- </table>
+<div class="panel panel-default">
+ <div class="panel-heading">
+ {{lang_headingAllExamLectures}}
+ </div>
+ <div class="panel-body">
+ <div class="slx-space">
+ <table class="table stupidtable">
+ <thead>
+ <tr>
+ <th data-sort="string">{{lang_lectureName}}</th>
+ <th data-sort="int">{{lang_timeFrame}}</th>
+ <th></th>
+ </tr>
+ </thead>
+ <tbody>
+ {{#pending_lectures}}
+ <tr class="{{class}}">
+ <td>
+ {{displayname}}
+ <div class="small">
+ <a href="mailto:{{email}}">{{lastname}}, {{firstname}}</a>
+ </div>
+ </td>
+ <td data-sort-value={{starttime}} width="30%" class="text-nowrap">
+ {{starttime_s}} &ensp; {{endtime_s}}
+ <div class="small">
+ {{lang_duration}}: {{duration_s}}
+ {{^duration_s}}{{lang_moreThanOneDay}}{{/duration_s}}
+ </div>
+ </td>
+ <td width="20%">
+ <div class="pull-right text-nowrap">
+ <a class="btn btn-sm btn-default" role="button" onclick="slxShow({{starttime}}, {{endtime}})"><span class="glyphicon glyphicon-eye-open"></span></a>
+ <a href="?do=exams&amp;action=add&amp;lectureid={{lectureid}}" class="btn btn-sm btn-success" role="button">
+ <span class="glyphicon glyphicon-plus-sign"></span>
+ <span class="hidden-sm">{{lang_addExam}}</span>
+ </a>
+ </div>
+ </td>
+ </tr>
+ {{/pending_lectures}}
+ {{#decollapse}}
+ <tr class="slx-decollapse">
+ <td colspan="3">
+ <span class="btn-group btn-group-justified">
+ <span class="btn btn-default btn-sm"><span class="glyphicon glyphicon-menu-down"></span></span>
+ </span>
+ </td>
+ </tr>
+ {{/decollapse}}
+ </tbody>
+ </table>
+ </div>
+ </div>
</div> \ No newline at end of file