From d2d52eaa1ed8ac2007c1f710cee74823f080de6d Mon Sep 17 00:00:00 2001 From: Jannik Schönartz Date: Fri, 17 Mar 2017 06:10:28 +0100 Subject: Rework of the Server List. Many Bugfixes (see Mail). --- .../inc/coursebackend/coursebackend_dummy.inc.php | 4 +- .../locationinfo/lang/de/messages.json | 2 +- .../locationinfo/lang/de/template-tags.json | 22 ++- .../locationinfo/lang/en/template-tags.json | 14 +- modules-available/locationinfo/page.inc.php | 165 ++++++++++++------- modules-available/locationinfo/style.css | 15 ++ .../locationinfo/templates/config.html | 2 +- .../locationinfo/templates/credentials.html | 31 ---- .../locationinfo/templates/location-info.html | 175 +++------------------ .../locationinfo/templates/server-settings.html | 128 +++++++++++++++ .../locationinfo/templates/timetable.html | 4 +- 11 files changed, 302 insertions(+), 260 deletions(-) delete mode 100644 modules-available/locationinfo/templates/credentials.html create mode 100644 modules-available/locationinfo/templates/server-settings.html (limited to 'modules-available/locationinfo') diff --git a/modules-available/locationinfo/inc/coursebackend/coursebackend_dummy.inc.php b/modules-available/locationinfo/inc/coursebackend/coursebackend_dummy.inc.php index 3dd0f7aa..e6ba0fe8 100644 --- a/modules-available/locationinfo/inc/coursebackend/coursebackend_dummy.inc.php +++ b/modules-available/locationinfo/inc/coursebackend/coursebackend_dummy.inc.php @@ -4,7 +4,7 @@ class Coursebackend_Dummy extends CourseBackend { public function setCredentials($json,$location,$serverID) { $x = $json; - $this->pw = $x['password']; + $this->pw = $x['password_str']; if ($this->pw == "mfg") { $this->error = false; @@ -29,7 +29,7 @@ class Coursebackend_Dummy extends CourseBackend { public function getCredentials(){ $options = ["opt1", "opt2", "opt3", "opt4", "opt5", "opt6", "opt7", "opt8"]; - $credentials = ["username" => "string","password"=>"string","option"=>$options]; + $credentials = ["username" => ["string", "This is a helptext.", false],"password_str"=>["string", "SOME SECRET PW U WILL NEVER KNOW!", true],"password_int"=>["int", "INT PW", true],"option"=>[$options, "OMG WHAT THE", false], "CheckTheBox" => ["bool", "Test with a cb", false]]; return $credentials; } diff --git a/modules-available/locationinfo/lang/de/messages.json b/modules-available/locationinfo/lang/de/messages.json index d2ea6b05..52a48a02 100644 --- a/modules-available/locationinfo/lang/de/messages.json +++ b/modules-available/locationinfo/lang/de/messages.json @@ -2,7 +2,7 @@ "no-days-selected": "Es wurden keine Tage ausgewählt.", "added-x-entries": "Eintr\u00e4ge hinzugef\u00fcgt: {{0}}", "deleted-x-entries": "Eintr\u00e4ge gelöscht: {{0}}", - "openingtime-updated": "Öffnungszeiten aktualisierts.", + "openingtime-updated": "Öffnungszeiten aktualisiert.", "config-saved": "Einstellungen erfolgreich gespeichert.", "auth-failed": "[{{0}}] {{1}} Error: {{2}}" } diff --git a/modules-available/locationinfo/lang/de/template-tags.json b/modules-available/locationinfo/lang/de/template-tags.json index 5525dec2..75a945ce 100644 --- a/modules-available/locationinfo/lang/de/template-tags.json +++ b/modules-available/locationinfo/lang/de/template-tags.json @@ -3,6 +3,7 @@ "lang_locationName": "Name", "lang_locationID": "ID", "lang_locationIsHidden": "Versteckt", + "lang_locationIsHidden_title": "Wenn aktiv, dann liefert die API keine Informationen über diesen Raum.", "lang_locationInUse": "In Benutzung / Gesamt", "lang_locationSettings": "Einstellungen", "lang_locationConfig": "Config", @@ -12,9 +13,8 @@ "lang_pcY": "Y", "lang_pcState": "PC Status", "lang_day": "Tag", - "lang_openingTime": "Öffnungszeit", + "lang_openingTime": "Öffnungszeiten", "lang_closingTime": "Schließungszeit", - "lang_deleteAll": "Alles Löschen", "lang_shortMonday": "Mo", "lang_shortTuesday": "Di", "lang_shortWednesday": "Mi", @@ -27,6 +27,7 @@ "lang_saturday": "Samstag", "lang_sunday": "Sonntag", "lang_expertMode": "Experten Modus", + "lang_expertMode_title": "Ermöglicht es dir Öffnungzeiten für jeden Tag zu Setzen.", "lang_language": "Sprache", "lang_languageEn": "en", "lang_languageDe": "de", @@ -49,26 +50,31 @@ "lang_rotation2": "180°", "lang_rotation3": "90° ⟳", "lang_vertical": "Vertikal", - "lang_calupdate": "Kalender update rate", + "lang_calupdate": "Kalenderabfragrate", "lang_calupdateTooltip": "Zeit nachdem der Kalender geupdated wird (in minutes)", - "lang_roomupdate": "Raum update rate", + "lang_roomupdate": "Raumabfragrate", "lang_roomupdateTooltip": "Zeit nachder die Pcs geupdated werden (in sekunden)", - "lang_configupdate": "Einstellungs update rate", + "lang_configupdate": "Einstellungsabfragrate", "lang_configupdateTooltip": "Zeit nachder die Einstellungen geupdated werden (in minuten)", "lang_min": "min", "lang_sec": "sec", "lang_autoScale": "Auto skalierung", "lang_deleteConfirmation": "Bist du sicher?", "lang_addServer": "Server", + "lang_addServer_title": "Server hinzufügen", "lang_serverTable": "Server Liste", "lang_buildingTable": "Gebäude / Raum Liste", - "lang_serverUrl": "Url", - "lang_serverType": "Type", + "lang_serverUrl": "URL", + "lang_serverType": "Typ", "lang_serverUser": "Benutzer", "lang_serverPassword": "Passwort", "lang_serverID": "Server ID", "lang_sID": "sID", "lang_server": "Server", "lang_serverRoomId": "Server: Raum ID", - "lang_credentials": "Anmeldeinformationen" + "lang_credentials": "Anmeldung", + "lang_refresh_title": "Überprüft ob die Serververbindung gültig ist.", + "lang_delete": "Löschen", + "lang_refresh": "Aktualisieren", + "lang_general": "Allgemein" } diff --git a/modules-available/locationinfo/lang/en/template-tags.json b/modules-available/locationinfo/lang/en/template-tags.json index 3b3a9e56..ec0bae12 100644 --- a/modules-available/locationinfo/lang/en/template-tags.json +++ b/modules-available/locationinfo/lang/en/template-tags.json @@ -4,6 +4,7 @@ "lang_locationName": "Name", "lang_locationID": "ID", "lang_locationIsHidden": "Hidden", + "lang_locationIsHidden_title": "If checked the API doesn't return information about the room.", "lang_locationInUse": "In use / total", "lang_locationSettings": "Settings", "lang_locationConfig": "Config", @@ -15,9 +16,8 @@ "lang_pcState": "PC state", "lang_day": "Day", - "lang_openingTime": "Opening time", + "lang_openingTime": "Opening times", "lang_closingTime": "Closing time", - "lang_deleteAll": "Delete all", "lang_shortMonday": "Mon", "lang_shortTuesday": "Tue", @@ -31,6 +31,7 @@ "lang_saturday": "Saturday", "lang_sunday": "Sunday", "lang_expertMode": "Expert mode", + "lang_expertMode_title": "Allows you to set openingtimes for every day.", "lang_language": "Language", "lang_languageEn": "en", @@ -65,9 +66,10 @@ "lang_autoScale": "Auto scale", "lang_deleteConfirmation": "Are you sure?", "lang_addServer": "Server", + "lang_addServer_title": "Add server", "lang_serverTable": "Server List", "lang_buildingTable": "Building / Room List", - "lang_serverUrl": "Url", + "lang_serverUrl": "URL", "lang_serverType": "Type", "lang_serverUser": "User", "lang_serverPassword": "Password", @@ -75,5 +77,9 @@ "lang_sID": "sID", "lang_server": "Server", "lang_serverRoomId": "Server: Room ID", - "lang_credentials": "Credentials" + "lang_credentials": "Login", + "lang_refresh_title": "Checks if the server connection is valid.", + "lang_delete": "Delete", + "lang_refresh": "Refresh", + "lang_general": "General" } diff --git a/modules-available/locationinfo/page.inc.php b/modules-available/locationinfo/page.inc.php index ede1ac37..ccf37d0e 100644 --- a/modules-available/locationinfo/page.inc.php +++ b/modules-available/locationinfo/page.inc.php @@ -27,10 +27,10 @@ class Page_LocationInfo extends Page $this->updateServer(); } elseif ($this->action === 'deleteServer') { $this->deleteServer(); - } elseif ($this->action === 'updateCredentials') { - $this->updateCredentials(); } elseif ($this->action === 'checkConnection') { $this->checkConnection(); + } elseif ($this->action === 'updateServerSettings') { + $this->updateServerSettings(); } } @@ -109,18 +109,32 @@ class Page_LocationInfo extends Page Util::redirect('?do=locationinfo'); } - private function updateCredentials() { - $serverid = Request::post('id', 0, 'int'); - $dbresult = Database::queryFirst('SELECT servertype FROM `setting_location_info` WHERE serverid = :id', array('id' => $serverid)); - $backend = CourseBackend::getInstance($dbresult['servertype']); + private function updateServerSettings() { + $serverid = Request::post('id', -1, 'int'); + $servername = Request::post('name', 'unnamed', 'string'); + $serverurl = Request::post('url', '', 'string'); + $servertype = Request::post('type', '', 'string'); + + $backend = CourseBackend::getInstance($servertype); $tmptypeArray = $backend->getCredentials(); $credentialsJson = array(); foreach ($tmptypeArray as $key => $value) { $credentialsJson[$key] = Request::post($key); } - Database::exec('UPDATE `setting_location_info` SET credentials = :credentials WHERE serverid = :id', array('id' => $serverid, 'credentials' => json_encode($credentialsJson, true))); - $this->checkConnection(); + if ($serverid == 0) { + Database::exec('INSERT INTO `setting_location_info` (servername, serverurl, servertype, credentials) VALUES (:name, :url, :type, :credentials)', + array('name' => $servername, 'url' => $serverurl, 'type' => $servertype, 'credentials' => json_encode($credentialsJson, true))); + + $dbresult = Database::queryFirst('SELECT serverid FROM `setting_location_info` WHERE servername = :name AND serverurl = :url AND servertype = :type AND credentials = :credentials', + array('name' => $servername, 'url' => $serverurl, 'type' => $servertype, 'credentials' => json_encode($credentialsJson, true))); + + $this->checkConnection($dbresult['serverid']); + } else { + Database::exec('UPDATE `setting_location_info` SET servername = :name, serverurl = :url, servertype = :type, credentials = :credentials WHERE serverid = :id', + array('id' => $serverid, 'name' => $servername, 'url' => $serverurl, 'type' => $servertype, 'credentials' => json_encode($credentialsJson, true))); + $this->checkConnection(); + } } private function updateOpeningTimeExpert() @@ -235,15 +249,17 @@ class Page_LocationInfo extends Page Util::redirect('?do=locationinfo'); } - private function checkConnection() { + private function checkConnection($id = 0) { $serverid = Request::post('id', 0, 'int'); + if ($id != 0) { + $serverid = $id; + } if ($serverid != 0) { $dbresult = Database::queryFirst("SELECT * FROM `setting_location_info` WHERE serverid = :serverid", array('serverid' => $serverid)); $serverInstance = CourseBackend::getInstance($dbresult['servertype']); $serverInstance->setCredentials(json_decode($dbresult['credentials'], true), $dbresult['serverurl'], $serverid); - //$setCred = $serverInstance->fetchSchedule(array(42)); $setCred = $serverInstance->checkConnection(); if (!$setCred) { @@ -356,10 +372,10 @@ class Page_LocationInfo extends Page $servertypes = array(); $s_list = CourseBackend::getList(); foreach ($s_list as $s) { - $type['type'] = $s; + $t['type'] = $s; $typeInstance = CourseBackend::getInstance($s); - $type['display'] = $typeInstance->getDisplayName(); - $servertypes[] = $type; + $t['display'] = $typeInstance->getDisplayName(); + $servertypes[] = $t; } // Get the Serverlist from the DB and make it mustache accesable @@ -368,6 +384,13 @@ class Page_LocationInfo extends Page while($db=$dbquery2->fetch(PDO::FETCH_ASSOC)) { $server['id'] = $db['serverid']; $server['name'] = $db['servername']; + $server['type'] = $db['servertype']; + foreach ($servertypes as $type) { + if ($server['type'] == $type['type']) { + $server['display'] = $type['display']; + break; + } + } if ($db['error'] == NULL) { $server['auth'] = true; @@ -377,30 +400,16 @@ class Page_LocationInfo extends Page $time = date('Y/m/d H:i:s', $error['timestamp']); - Message::addError('auth-failed', $server['id'], $time, $error['error']); + Message::addError('auth-failed', $server['name'], $time, $error['error']); } - $serverty = array(); - foreach ($servertypes as $type) { - $st = array(); - $st['type'] = $type['type']; - $st['display'] = $type['display']; - if ($type['type'] == $db['servertype']) { - $st['active'] = true; - } else { - $st['active'] = false; - } - $serverty[] = $st; - } - $server['types'] = $serverty; - $server['url'] = $db['serverurl']; $serverlist[] = $server; } // Pass the data to the html and render it. Render::addTemplate('location-info', array( - 'list' => array_values($pcs), 'serverlist' => array_values($serverlist), 'servertypelist' => array_values($servertypes), + 'list' => array_values($pcs), 'serverlist' => array_values($serverlist), )); } @@ -420,47 +429,75 @@ class Page_LocationInfo extends Page } elseif ($action === 'config') { $id = Request::any('id', 0, 'int'); $this->ajaxConfig($id); - } elseif ($action === 'credentials') { + } elseif ($action === 'serverSettings') { $id = Request::any('id', 0, 'int'); - $this->ajaxCredentials($id); + $this->ajaxServerSettings($id); } } - private function ajaxCredentials($id) { - $dbresult = Database::queryFirst('SELECT servertype, credentials FROM `setting_location_info` WHERE serverid = :id', array('id' => $id)); - $tmpcredentialArray = json_decode($dbresult['credentials'], true); - $backend = CourseBackend::getInstance($dbresult['servertype']); - $tmptypeArray = $backend->getCredentials(); - $credentialsArray = array(); - foreach ($tmptypeArray as $key => $value) { - $x['name'] = $key; + private function ajaxServerSettings($id) { + $dbresult = Database::queryFirst('SELECT servername, serverurl, servertype, credentials FROM `setting_location_info` WHERE serverid = :id', array('id' => $id)); - foreach ($tmpcredentialArray as $ke => $val) { - if($ke == $key) { - $x['value'] = $val; - break; - } + // Credentials stuff. + $dbcredentials = json_decode($dbresult['credentials'], true); + + // Get a list of all the backend types. + $serverBackends = array(); + $s_list = CourseBackend::getList(); + foreach ($s_list as $s) { + $backend['typ'] = $s; + $backendInstance = CourseBackend::getInstance($s); + $backend['display'] = $backendInstance->getDisplayName(); + + if ($backend['typ'] == $dbresult['servertype']) { + $backend['active'] = true; + } else { + $backend['active'] = false; } - $x['type'] = $value; - - if (is_array($value)) { - $selection = array(); - foreach ($value as $opt) { - $option['option'] = $opt; - if ($opt == $x['value']) { - $option['active'] = true; - } else { - $option['active'] = false; + + $credentials = $backendInstance->getCredentials(); + $backend['credentials'] = array(); + foreach ($credentials as $key => $value) { + $credential['name'] = $key; + $credential['type'] = $value[0]; + $credential['title'] = $value[1]; + + if (Property::getPasswordFieldType() === 'text') { + $credential['mask'] = false; + } else { + $credential['mask'] = $value[2]; + } + + if ($backend['typ'] == $dbresult['servertype']) { + foreach ($dbcredentials as $k => $v) { + if($k == $key) { + $credential['value'] = $v; + break; + } } - $selection[] = $option; } - $x['type'] = "array"; - $x['array'] = $selection; + + if (is_array($value[0])) { + $selection = array(); + foreach ($value[0] as $opt) { + $option['option'] = $opt; + if ($opt == $credential['value']) { + $option['active'] = true; + } else { + $option['active'] = false; + } + $selection[] = $option; + } + $credential['type'] = "array"; + $credential['array'] = $selection; + } + + $backend['credentials'][] = $credential; } - $credentialsArray[] = $x; + $serverBackends[] = $backend; } - echo Render::parse('credentials', array('id' => $id, 'credentials' => array_values($credentialsArray))); + echo Render::parse('server-settings', array('id' => $id, 'name' => $dbresult['servername'], 'url' => $dbresult['serverurl'], 'servertype' => $dbresult['servertype'], 'backendList' => array_values($serverBackends))); } private function ajaxTimeTable($id) { @@ -480,10 +517,16 @@ class Page_LocationInfo extends Page foreach($dbresult as $db) { $index = 0; foreach ($db as $key) { - $str = "| "; + $str = ""; + + $first = true; foreach ($key['days'] as $val) { + if ($first) { + $first = false; + } else { + $str .= ", "; + } $str .= $val; - $str .= " | "; } $ar = array(); $ar['days'] = $str; diff --git a/modules-available/locationinfo/style.css b/modules-available/locationinfo/style.css index c0b10cd9..b152c3b3 100644 --- a/modules-available/locationinfo/style.css +++ b/modules-available/locationinfo/style.css @@ -1,3 +1,18 @@ .tablerow:hover { background-color: #F2F2F2; } + +.glyphicon-refresh-animate { + -animation: spin .7s infinite linear; + -webkit-animation: spin2 .7s infinite linear; +} + +@-webkit-keyframes spin2 { + from { -webkit-transform: rotate(0deg);} + to { -webkit-transform: rotate(360deg);} +} + +@keyframes spin { + from { transform: scale(1) rotate(0deg);} + to { transform: scale(1) rotate(360deg);} +} diff --git a/modules-available/locationinfo/templates/config.html b/modules-available/locationinfo/templates/config.html index 79d6f085..3168c6a2 100644 --- a/modules-available/locationinfo/templates/config.html +++ b/modules-available/locationinfo/templates/config.html @@ -17,7 +17,7 @@

+ style="width: 250px; text-align: center;">
diff --git a/modules-available/locationinfo/templates/credentials.html b/modules-available/locationinfo/templates/credentials.html deleted file mode 100644 index f8c04bcb..00000000 --- a/modules-available/locationinfo/templates/credentials.html +++ /dev/null @@ -1,31 +0,0 @@ -
-
- - - -
- -
-
- diff --git a/modules-available/locationinfo/templates/location-info.html b/modules-available/locationinfo/templates/location-info.html index ef8de412..d494ebdc 100644 --- a/modules-available/locationinfo/templates/location-info.html +++ b/modules-available/locationinfo/templates/location-info.html @@ -3,11 +3,10 @@

{{lang_serverTable}}

-
+
- @@ -21,40 +20,24 @@ - - - - + + + + @@ -69,8 +52,8 @@
{{lang_sID}} {{lang_serverType}} {{lang_locationName}} {{lang_serverUrl}}
{{id}} - - - - - - {{display}}{{name}}{{url}} - - -

- +


@@ -83,7 +66,7 @@ {{lang_locationName}} {{lang_locationID}} {{lang_locationInUse}} - {{lang_locationIsHidden}} + {{lang_locationIsHidden}} {{lang_openingTime}} {{lang_locationSettings}} @@ -113,10 +96,10 @@ cb.addEventListener("click", function() { cbClick(this, {{locationid}}); }); {{lang_openingTime}} + onclick="loadTimeModal({{locationid}}, '{{locationname}}');">{{lang_openingTime}} {{lang_locationSettings}} + onclick="loadConfigModal({{locationid}}, '{{locationname}}');">{{lang_locationSettings}} @@ -151,11 +134,11 @@ window.location.href = "?do=locationinfo&action=hide&id=" + locID + "&value=" + value; } - function loadCredentialModal(serverid, servername) { - $('#myModalHeader').text("[" + serverid + "] " + servername).css("font-weight", "Bold"); + function loadSettingsModal(serverid, servername) { + $('#myModalHeader').text("{{lang_locationSettings}}").css("font-weight", "Bold"); $('#myModal').modal('show'); - $('#myModalBody').load("?do=locationinfo&action=credentials&id=" + serverid); + $('#myModalBody').load("?do=locationinfo&action=serverSettings&id=" + serverid); } function loadTimeModal(locationId, locationName) { @@ -165,6 +148,11 @@ $('#myModalBody').load("?do=locationinfo&action=timetable&id=" + locationId); } + /** + * + * @param locationId + * @param locationName + */ function loadConfigModal(locationId, locationName) { $('#myModalHeader').text("[" + locationId + "] " + locationName).css("font-weight", "Bold"); @@ -187,124 +175,13 @@ } } - function servertype_changed(value, id) { - if (value == "Frontend") { - $('#input-user-' + id).removeAttr('required'); - $('#input-password-' + id).removeAttr('required'); - } else { - $('#input-user-' + id).attr('required'); - $('#input-password-' + id).attr('required'); - } - } - - function editButtonClick(id) { - var name = $('#input-name-' + id); - var url = $('#input-url-' + id); - var user = $('#input-user-' + id); - var password = $('#input-password-' + id); - var type = $('#input-type-' + id); - - name.attr('readonly', false); - url.attr('readonly', false); - user.attr('readonly', false); - password.attr('readonly', false); - type.attr('disabled', false); - - name.css("color", "#000"); - url.css("color", "#000"); - user.css("color", "#000"); - password.css("color", "#000"); - type.css("color", "#000"); - - preEditName = name.val(); - preEditUrl = url.val(); - preEditUser = user.val(); - preEditPassword = password.val(); - preEditType = type.val(); - - servertype_changed(preEditType, id); - - $('#btncell-' + id).html('\ - \ - '); - $('.table-edit').attr('disabled', true); - $('.table-delete').attr('disabled', true); - $('.table-refresh').attr('disabled', true); - $('#addServerButton').attr('disabled', true); - } - - function saveButtonClick(id) { - $('#serverFormAction-' + id).val("updateServer"); - $('#submit-serverForm-' + id).trigger("click"); - } - function refreshButtonClick(id) { + $('#refresh-btn-animate-' + id).addClass('glyphicon-refresh-animate'); $('#serverFormAction-' + id).val("checkConnection"); $('#submit-serverForm-' + id).trigger("click"); } - function addNewServer() { - $('#serverFormAction-0').val("updateServer"); - - $('#submit-serverForm-0').trigger("click"); - } - - function cancelButtonClick(id) { - var name = $('#input-name-' + id); - var url = $('#input-url-' + id); - var user = $('#input-user-' + id); - var password = $('#input-password-' + id); - var type = $('#input-type-' + id); - - name.attr('readonly', true); - url.attr('readonly', true); - user.attr('readonly', true); - password.attr('readonly', true); - type.attr('disabled', true); - - name.css("color", ""); - url.css("color", ""); - user.css("color", ""); - password.css("color", ""); - type.css("color", ""); - - name.val(preEditName); - url.val(preEditUrl); - user.val(preEditUser); - password.val(preEditPassword); - type.val(preEditType); - - $('#btncell-' + id).html('\ - \ - '); - $('.table-edit').attr('disabled', false); - $('.table-delete').attr('disabled', false); - $('.table-refresh').attr('disabled', false); - $('#addServerButton').attr('disabled', false); - } - - function deleteNewServer() { - $('#new').remove(); - $('.table-edit').attr('disabled', false); - $('.table-delete').attr('disabled', false); - $('#addServerButton').attr('disabled', false); - } - - function addNewServerRow() { - $('#lastServerTableElement').before('\ - \ - \ - \ - \ - \ - \ - \ - \ - '); - $('.table-edit').attr('disabled', true); - $('.table-delete').attr('disabled', true); - $('#addServerButton').attr('disabled', true); + function addServer() { + loadSettingsModal(0, ''); } diff --git a/modules-available/locationinfo/templates/server-settings.html b/modules-available/locationinfo/templates/server-settings.html new file mode 100644 index 00000000..f7aa2af8 --- /dev/null +++ b/modules-available/locationinfo/templates/server-settings.html @@ -0,0 +1,128 @@ +
+
+ + + + + +
+
{{lang_general}}
+
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + +
+
+
+ +
+
+
+ +
+
{{lang_credentials}}
+
+
+ +
+
+
+ +
+ +
+
+ diff --git a/modules-available/locationinfo/templates/timetable.html b/modules-available/locationinfo/templates/timetable.html index 29446f58..78d13e29 100644 --- a/modules-available/locationinfo/templates/timetable.html +++ b/modules-available/locationinfo/templates/timetable.html @@ -1,7 +1,7 @@
- +

@@ -115,7 +115,6 @@ {{openingtime}} {{closingtime}} - {{/openingtimes}} @@ -125,7 +124,6 @@
{{lang_openingTime}} -

-- cgit v1.2.3-55-g7522