From 662315be2b5f6153fda03e8ec48ea3f8b343f68b Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 21 Mar 2018 11:05:25 +0100 Subject: Update permission translations --- modules-available/locationinfo/lang/de/permissions.json | 8 ++++++++ modules-available/locationinfo/lang/en/permissions.json | 8 ++++++++ 2 files changed, 16 insertions(+) create mode 100644 modules-available/locationinfo/lang/de/permissions.json create mode 100644 modules-available/locationinfo/lang/en/permissions.json (limited to 'modules-available/locationinfo/lang') diff --git a/modules-available/locationinfo/lang/de/permissions.json b/modules-available/locationinfo/lang/de/permissions.json new file mode 100644 index 00000000..1cd78eab --- /dev/null +++ b/modules-available/locationinfo/lang/de/permissions.json @@ -0,0 +1,8 @@ +{ + "backend.check": "Backend Verbindung pr\u00fcfen", + "backend.edit": "Backend bearbeiten", + "location.edit": "Raum\/Ort Einstellungen bearbeiten", + "panel.assign-client": "Client als Infoscreen festlegen", + "panel.edit": "Panel bearbeiten", + "panel.list": "Panel anzeigen" +} \ No newline at end of file diff --git a/modules-available/locationinfo/lang/en/permissions.json b/modules-available/locationinfo/lang/en/permissions.json new file mode 100644 index 00000000..4b620b04 --- /dev/null +++ b/modules-available/locationinfo/lang/en/permissions.json @@ -0,0 +1,8 @@ +{ + "backend.check": "Test backend connection", + "backend.edit": "Edit backend", + "location.edit": "Edit location settings", + "panel.assign-client": "Set client as infoscreen", + "panel.edit": "Edit panel", + "panel.list": "List panels" +} \ No newline at end of file -- cgit v1.2.3-55-g7522 From a7198124169059d32da12487a067a05c8507ef3c Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 10 Apr 2018 13:02:50 +0200 Subject: Update translations --- modules-available/adduser/lang/de/permissions.json | 4 ++-- modules-available/adduser/lang/en/permissions.json | 4 ++-- .../locationinfo/lang/de/backend-exchange.json | 14 ++++++++++++++ .../locationinfo/lang/en/backend-exchange.json | 14 ++++++++++++++ modules-available/news/lang/de/permissions.json | 9 +++++---- modules-available/news/lang/en/permissions.json | 9 +++++---- .../serversetup-bwlp/lang/de/permissions.json | 1 + .../serversetup-bwlp/lang/en/permissions.json | 7 ++++--- modules-available/webinterface/lang/de/permissions.json | 7 ++++--- modules-available/webinterface/lang/en/permissions.json | 7 ++++--- 10 files changed, 55 insertions(+), 21 deletions(-) create mode 100644 modules-available/locationinfo/lang/de/backend-exchange.json create mode 100644 modules-available/locationinfo/lang/en/backend-exchange.json (limited to 'modules-available/locationinfo/lang') diff --git a/modules-available/adduser/lang/de/permissions.json b/modules-available/adduser/lang/de/permissions.json index 636b73ff..8792ac14 100644 --- a/modules-available/adduser/lang/de/permissions.json +++ b/modules-available/adduser/lang/de/permissions.json @@ -1,6 +1,6 @@ { - "list.view": "Nutzerliste anzeigen", "user.add": "Neuen Nutzer hinzuf\u00fcgen", "user.edit": "Nutzer bearbeiten", - "user.remove": "Nutzer l\u00f6schen" + "user.remove": "Nutzer l\u00f6schen", + "user.view-list": "Nutzerliste anzeigen" } \ No newline at end of file diff --git a/modules-available/adduser/lang/en/permissions.json b/modules-available/adduser/lang/en/permissions.json index d12d100e..ed3d8ee3 100644 --- a/modules-available/adduser/lang/en/permissions.json +++ b/modules-available/adduser/lang/en/permissions.json @@ -1,6 +1,6 @@ { - "list.view": "Show userlist", "user.add": "Add new user", "user.edit": "Edit user", - "user.remove": "Remove user" + "user.remove": "Remove user", + "user.view-list": "Show userlist" } \ No newline at end of file diff --git a/modules-available/locationinfo/lang/de/backend-exchange.json b/modules-available/locationinfo/lang/de/backend-exchange.json new file mode 100644 index 00000000..51b4ed37 --- /dev/null +++ b/modules-available/locationinfo/lang/de/backend-exchange.json @@ -0,0 +1,14 @@ +{ + "clientVersion": "Version", + "clientVersion_helptext": "Eingesetzte Exchange Version", + "password": "Passwort", + "password_helptext": "Passwort des Nutzers in Exchange", + "serverAddress": "Server-IP", + "serverAddress_helptext": "IP-Adresse des Exchange Servers", + "username": "Benutzername", + "username_helptext": "Benutzer muss mind. Reviewer Rechte auf Kalender besitzen", + "verifyCert": "Zertifikat pr\u00fcfen", + "verifyCert_helptext": "Wenn das Zertifikat abgelaufen ist, oder von keiner bekannten CA ausgestellt wurde, wird die Verbindung abgelehnt.", + "verifyHostname": "Hostnamen pr\u00fcfen", + "verifyHostname_helptext": "Der im Zertifikat angegebene Hostname muss mit dem Hostnamen aus der URL \u00fcbereinstimmen, sonst wird die Verbindung abgelehnt." +} \ No newline at end of file diff --git a/modules-available/locationinfo/lang/en/backend-exchange.json b/modules-available/locationinfo/lang/en/backend-exchange.json new file mode 100644 index 00000000..b3025d88 --- /dev/null +++ b/modules-available/locationinfo/lang/en/backend-exchange.json @@ -0,0 +1,14 @@ +{ + "clientVersion": "Version", + "clientVersion_helptext": "Used exchange version", + "password": "Password", + "password_helptext": "User password in exchange", + "serverAddress": "Server-IP", + "serverAddress_helptext": "IP of the exchange server", + "username": "Username", + "username_helptext": "User needs at least reviewer rights on calendar", + "verifyCert": "Verify certificate", + "verifyCert_helptext": "If the certificate expired or was not signed by a known CA, the connection will be aborted", + "verifyHostname": "Verify host name", + "verifyHostname_helptext": "The certificate's host name must match the host name given in the URL, otherwise the connection will be aborted." +} \ No newline at end of file diff --git a/modules-available/news/lang/de/permissions.json b/modules-available/news/lang/de/permissions.json index b2c6fb1b..888bb4a7 100644 --- a/modules-available/news/lang/de/permissions.json +++ b/modules-available/news/lang/de/permissions.json @@ -1,6 +1,7 @@ { - "news.save": "Änderungen am News Text speichern.", - "news.delete": "Alte News Texte löschen.", - "help.save": "Änderungen am Hilfe Text speichern.", - "help.delete": "Alte Hilfe Texte löschen." + "access-page": "Seite sehen.", + "help.delete": "Alte Hilfe Texte l\u00f6schen.", + "help.save": "\u00c4nderungen am Hilfe Text speichern.", + "news.delete": "Alte News Texte l\u00f6schen.", + "news.save": "\u00c4nderungen am News Text speichern." } \ No newline at end of file diff --git a/modules-available/news/lang/en/permissions.json b/modules-available/news/lang/en/permissions.json index 90d07aef..37fc7a8e 100644 --- a/modules-available/news/lang/en/permissions.json +++ b/modules-available/news/lang/en/permissions.json @@ -1,6 +1,7 @@ { - "news.save": "Save new news.", - "news.delete": "Delete old news.", - "help.save": "Save new help texts.", - "help.delete": "Delete old help texts" + "access-page": "View page.", + "help.delete": "Delete old help texts.", + "help.save": "Save new help texts.", + "news.delete": "Delete old news.", + "news.save": "Save new news." } \ No newline at end of file diff --git a/modules-available/serversetup-bwlp/lang/de/permissions.json b/modules-available/serversetup-bwlp/lang/de/permissions.json index 65367c51..98baec3c 100644 --- a/modules-available/serversetup-bwlp/lang/de/permissions.json +++ b/modules-available/serversetup-bwlp/lang/de/permissions.json @@ -1,4 +1,5 @@ { + "access-page": "Seite sehen.", "download": "USB-Image herunterladen.", "edit.address": "Boot-Adresse des Servers ausw\u00e4hlen.", "edit.menu": "Bootmen\u00fc anpassen." diff --git a/modules-available/serversetup-bwlp/lang/en/permissions.json b/modules-available/serversetup-bwlp/lang/en/permissions.json index c04f09f7..44d1c519 100644 --- a/modules-available/serversetup-bwlp/lang/en/permissions.json +++ b/modules-available/serversetup-bwlp/lang/en/permissions.json @@ -1,5 +1,6 @@ { - "edit.address": "Choose boot address of the server.", - "edit.menu": "Customize boot menu.", - "download": "Download USB Image." + "access-page": "View page.", + "download": "Download USB Image.", + "edit.address": "Choose boot address of the server.", + "edit.menu": "Customize boot menu." } \ No newline at end of file diff --git a/modules-available/webinterface/lang/de/permissions.json b/modules-available/webinterface/lang/de/permissions.json index ee96810a..213ebd8f 100644 --- a/modules-available/webinterface/lang/de/permissions.json +++ b/modules-available/webinterface/lang/de/permissions.json @@ -1,5 +1,6 @@ { - "edit.https": "HTTPS Einstellungen bearbeiten.", - "edit.password": "Ändern, ob Passwortfelder in der Web-Schnittstelle maskiert werden sollen.", - "edit.design": "Seitentitel und Hintergrundfarbe des Logos bearbeiten." + "access-page": "Seite sehen.", + "edit.design": "Seitentitel und Hintergrundfarbe des Logos bearbeiten.", + "edit.https": "HTTPS Einstellungen bearbeiten.", + "edit.password": "\u00c4ndern, ob Passwortfelder in der Web-Schnittstelle maskiert werden sollen." } \ No newline at end of file diff --git a/modules-available/webinterface/lang/en/permissions.json b/modules-available/webinterface/lang/en/permissions.json index caf6d0cb..8ebb2830 100644 --- a/modules-available/webinterface/lang/en/permissions.json +++ b/modules-available/webinterface/lang/en/permissions.json @@ -1,5 +1,6 @@ { - "edit.https": "Edit HTTPS settings.", - "edit.password": "Change whether password fields should be masked or not.", - "edit.design": "Edit page title and logo background color." + "access-page": "View page.", + "edit.design": "Edit page title and logo background color.", + "edit.https": "Edit HTTPS settings.", + "edit.password": "Change whether password fields should be masked or not." } \ No newline at end of file -- cgit v1.2.3-55-g7522 From cd092274b88599449902f480f35291768be6e99e Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 7 Aug 2018 16:54:01 +0200 Subject: [inc/User] Fix access to Page if class is not loaded --- inc/user.inc.php | 11 ++++- lang/pt/flag.png | Bin 1115 -> 0 bytes lang/pt/name.txt | 1 - modules-available/exams/lang/de/template-tags.json | 2 +- modules-available/exams/lang/en/template-tags.json | 2 +- .../coursebackend/coursebackend_hisinone.inc.php | 48 +++++++++++++-------- .../locationinfo/lang/de/template-tags.json | 2 +- .../locationinfo/lang/en/template-tags.json | 2 +- 8 files changed, 43 insertions(+), 25 deletions(-) delete mode 100644 lang/pt/flag.png delete mode 100644 lang/pt/name.txt (limited to 'modules-available/locationinfo/lang') diff --git a/inc/user.inc.php b/inc/user.inc.php index 2571c61c..20e8cd3d 100644 --- a/inc/user.inc.php +++ b/inc/user.inc.php @@ -34,8 +34,15 @@ class User if ($permission{0} === '.') { $permission = substr($permission, 1); } else { - $module = Page::getModule(); - $permission = $module ? $module->getIdentifier() . "." . $permission : $permission; + if (class_exists('Page')) { + $module = Page::getModule(); + if ($module !== false) { + $module = $module->getIdentifier(); + } + } else { + $module = strtolower(Request::any('do')); + } + $permission = $module ? $module . "." . $permission : $permission; } return PermissionUtil::userHasPermission(self::$user['userid'], $permission, $locationid); } diff --git a/lang/pt/flag.png b/lang/pt/flag.png deleted file mode 100644 index 78c57dea..00000000 Binary files a/lang/pt/flag.png and /dev/null differ diff --git a/lang/pt/name.txt b/lang/pt/name.txt deleted file mode 100644 index 811b10b4..00000000 --- a/lang/pt/name.txt +++ /dev/null @@ -1 +0,0 @@ -Português \ No newline at end of file diff --git a/modules-available/exams/lang/de/template-tags.json b/modules-available/exams/lang/de/template-tags.json index 8bf37143..1dd51374 100644 --- a/modules-available/exams/lang/de/template-tags.json +++ b/modules-available/exams/lang/de/template-tags.json @@ -29,7 +29,7 @@ "lang_headingMain": "bwLehrpool Pr\u00fcfungsmodus", "lang_id": "ID", "lang_lectureName": "Veranstaltungsname", - "lang_lectureOutOfRange": "Achtung: Start- bzw. Endzeitpunkt der Veranstaltung liegen au\u00dferhalb des oben angegebenen Zeitraums", + "lang_lectureOutOfRange": "Achtung: Der oben angegebene Zeitraum ist k\u00fcrzer als die Dauer der Veranstaltung", "lang_location": "Raum\/Ort", "lang_locationInfo": "W\u00e4hlen Sie hier die R\u00e4ume und Orte aus, die w\u00e4hrend des unten ausgew\u00e4hlten Zeitraums in den Pr\u00fcfungsmodus versetzt werden. Wenn sie hier keine Auswahl treffen, werden alle R\u00e4ume in den Pr\u00fcfungsmodus versetzt.", "lang_locations": "R\u00e4ume\/Orte", diff --git a/modules-available/exams/lang/en/template-tags.json b/modules-available/exams/lang/en/template-tags.json index af87bb01..23266154 100644 --- a/modules-available/exams/lang/en/template-tags.json +++ b/modules-available/exams/lang/en/template-tags.json @@ -29,7 +29,7 @@ "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", + "lang_lectureOutOfRange": "Hint: The exam period given above is shorter than the duration of the given lecture", "lang_location": "Room\/Location", "lang_locationInfo": "Select the rooms and locations you want to enable the exam mode in. Selecting nothing at all means that all clients will boot into exam mode during the given time period.", "lang_locations": "Rooms\/Locations", diff --git a/modules-available/locationinfo/inc/coursebackend/coursebackend_hisinone.inc.php b/modules-available/locationinfo/inc/coursebackend/coursebackend_hisinone.inc.php index 558f5cd0..3b26e625 100644 --- a/modules-available/locationinfo/inc/coursebackend/coursebackend_hisinone.inc.php +++ b/modules-available/locationinfo/inc/coursebackend/coursebackend_hisinone.inc.php @@ -274,8 +274,7 @@ class CourseBackend_HisInOne extends CourseBackend foreach ($eventDetails as $event) { foreach (array('/hisdefaulttext', '/hisshorttext', - '/hisshortcomment', - '/hisplanelements/hisplanelement/hisdefaulttext') as $path) { + '/hisshortcomment') as $path) { $name = $this->getArrayPath($event, $path); if (!empty($name) && !empty($name[0])) break; @@ -284,25 +283,38 @@ class CourseBackend_HisInOne extends CourseBackend if ($name === false) { $name = ['???']; } - $unitPlannedDates = $this->getArrayPath($event, - '/hisplanelements/hisplanelement/hisplannedDates/hisplannedDate/hisindividualDates/hisindividualDate'); - if ($unitPlannedDates === false) { - $this->error = 'Cannot find ./hisplanelements/hisplanelement/hisplannedDates/hisplannedDate/hisindividualDates/hisindividualDate'; - error_log('Cannot find ./hisplanelements/hisplanelement/hisplannedDates/hisplannedDate/hisindividualDates/hisindividualDate'); + $planElements = $this->getArrayPath($event, '/hisplanelements/hisplanelement'); + if ($planElements === false) { + $this->error = 'Cannot find ./hisplanelements/hisplanelement'; + error_log('Cannot find ./hisplanelements/hisplanelement'); error_log(print_r($event, true)); continue; } - foreach ($unitPlannedDates as $plannedDate) { - $eventRoomId = $this->getArrayPath($plannedDate, '/hisroomId')[0]; - $eventDate = $this->getArrayPath($plannedDate, '/hisexecutiondate')[0]; - if (in_array($eventRoomId, $requestedRoomIds) && in_array($eventDate, $currentWeek)) { - $startTime = $this->getArrayPath($plannedDate, '/hisstarttime')[0]; - $endTime = $this->getArrayPath($plannedDate, '/hisendtime')[0]; - $tTables[$eventRoomId][] = array( - 'title' => $name[0], - 'start' => $eventDate . "T" . $startTime, - 'end' => $eventDate . "T" . $endTime - ); + foreach ($planElements as $planElement) { + $unitPlannedDates = $this->getArrayPath($planElement, + '/hisplannedDates/hisplannedDate/hisindividualDates/hisindividualDate'); + if ($unitPlannedDates === false) { + $this->error = 'Cannot find ./hisplannedDates/hisplannedDate/hisindividualDates/hisindividualDate'; + error_log('Cannot find ./hisplannedDates/hisplannedDate/hisindividualDates/hisindividualDate'); + error_log(print_r($planElement, true)); + continue; + } + $localName = $this->getArrayPath($planElement, '/hisdefaulttext'); + if ($localName === false || empty($localName[0])) { + $localName = $name; + } + foreach ($unitPlannedDates as $plannedDate) { + $eventRoomId = $this->getArrayPath($plannedDate, '/hisroomId')[0]; + $eventDate = $this->getArrayPath($plannedDate, '/hisexecutiondate')[0]; + if (in_array($eventRoomId, $requestedRoomIds) && in_array($eventDate, $currentWeek)) { + $startTime = $this->getArrayPath($plannedDate, '/hisstarttime')[0]; + $endTime = $this->getArrayPath($plannedDate, '/hisendtime')[0]; + $tTables[$eventRoomId][] = array( + 'title' => $localName[0], + 'start' => $eventDate . "T" . $startTime, + 'end' => $eventDate . "T" . $endTime + ); + } } } } diff --git a/modules-available/locationinfo/lang/de/template-tags.json b/modules-available/locationinfo/lang/de/template-tags.json index bcdf7148..b51c420b 100644 --- a/modules-available/locationinfo/lang/de/template-tags.json +++ b/modules-available/locationinfo/lang/de/template-tags.json @@ -76,7 +76,7 @@ "lang_remoteSchedule": "Abruf Belegungsplan", "lang_room": "Raum", "lang_roomId": "Raum ID", - "lang_roomIdTooltip": "Die Raum ID, die der Server ben\u00f6tigt, um Kalenderdaten abzurufen", + "lang_roomIdTooltip": "Die Raum ID, die der Server ben\u00f6tigt, um Kalenderdaten abzurufen (bei Exchange die Postfachadresse)", "lang_roomupdateTooltip": "Zeit nach der die PCs aktualisiert werden (in Sekunden)", "lang_rotation": "Rotation", "lang_rotation0": "0\u00b0", diff --git a/modules-available/locationinfo/lang/en/template-tags.json b/modules-available/locationinfo/lang/en/template-tags.json index 558ddff0..f041dc0a 100644 --- a/modules-available/locationinfo/lang/en/template-tags.json +++ b/modules-available/locationinfo/lang/en/template-tags.json @@ -76,7 +76,7 @@ "lang_remoteSchedule": "Time table retrieval", "lang_room": "Room", "lang_roomId": "Room ID", - "lang_roomIdTooltip": "The ID of the room the server needs, for querying the calendar data", + "lang_roomIdTooltip": "The ID of the room the server needs, for querying the calendar data (when using exchange the room mailbox)", "lang_roomupdateTooltip": "Time the PCs in the room gets updated (in seconds)", "lang_rotation": "Rotation", "lang_rotation0": "0\u00b0", -- cgit v1.2.3-55-g7522 From 410946b3c55f5b1b3a8e5f1056504caebca37ee1 Mon Sep 17 00:00:00 2001 From: Christian Hofmaier Date: Thu, 11 Oct 2018 15:29:03 +0200 Subject: [locationinfo] apply design guidelines / table styling - move buttons to the right hand side - use modals for confirmation check - table styling/adjustment -- add missing headers -- remove text from buttons in table -- center buttons / header-text - improve language-tags --- .../locationinfo/lang/de/template-tags.json | 3 +- .../locationinfo/lang/en/template-tags.json | 3 +- .../templates/page-config-panel-summary.html | 13 ++- .../templates/page-config-panel-url.html | 7 +- .../locationinfo/templates/page-locations.html | 6 +- .../locationinfo/templates/page-panels.html | 49 +++++++--- .../locationinfo/templates/page-servers.html | 101 ++++++++++++--------- 7 files changed, 114 insertions(+), 68 deletions(-) (limited to 'modules-available/locationinfo/lang') diff --git a/modules-available/locationinfo/lang/de/template-tags.json b/modules-available/locationinfo/lang/de/template-tags.json index b51c420b..7862297c 100644 --- a/modules-available/locationinfo/lang/de/template-tags.json +++ b/modules-available/locationinfo/lang/de/template-tags.json @@ -42,6 +42,7 @@ "lang_locations": "Orte", "lang_locationsTable": "R\u00e4ume \/ Orte", "lang_locationsTableHints": "Hier k\u00f6nnen Sie f\u00fcr die R\u00e4ume und Orte Ihrer Einrichtung \u00d6ffnungszeiten hinterlegen, sowie die Verkn\u00fcpfung mit Raum-IDs aus konfigurierten Backends (z.B. HISinOne) vornehmen, damit Belegungspl\u00e4ne abgerufen werden k\u00f6nnen.", + "lang_locsHint": "Hier k\u00f6nnen Sie die Orte ausw\u00e4hlen, die in diesem Panel angezeigt werden.", "lang_longFri": "Freitag", "lang_longMon": "Montag", "lang_longSat": "Samstag", @@ -57,7 +58,7 @@ "lang_modeTooltip": "Die Anzeigemodi, welche das Frontend unterst\u00fctzt", "lang_monTilFr": "Montag - Freitag", "lang_nameTooltip": "Legt den Namen des Servers fest", - "lang_noLocationsWarning": "Sie haben keine Orte f\u00fcr dieses Panel ausgew\u00e4hlt", + "lang_noLocationsWarning": "Bitte w\u00e4hlen Sie mindestens einen Ort aus, der vom Panel angezeigt werden soll.", "lang_noServer": "", "lang_openingTime": "\u00d6ffnungszeit", "lang_openingtimes": "\u00d6ffnungszeiten", diff --git a/modules-available/locationinfo/lang/en/template-tags.json b/modules-available/locationinfo/lang/en/template-tags.json index f041dc0a..2a191379 100644 --- a/modules-available/locationinfo/lang/en/template-tags.json +++ b/modules-available/locationinfo/lang/en/template-tags.json @@ -42,6 +42,7 @@ "lang_locations": "Locations", "lang_locationsTable": "Rooms \/ Locations", "lang_locationsTableHints": "Here you can define opening times for your locations and link the location ID to a configured backend (e.g. HISinOne) to show calendar events.", + "lang_locsHint": "You can pick up the locations that will be shown in this panel.", "lang_longFri": "Friday", "lang_longMon": "Monday", "lang_longSat": "Saturday", @@ -57,7 +58,7 @@ "lang_modeTooltip": "The display modes the frontend supports", "lang_monTilFr": "Monday - Friday", "lang_nameTooltip": "Defines the name of the server", - "lang_noLocationsWarning": "Please select at least one location this panel should display", + "lang_noLocationsWarning": "Please select at least one location this panel should display.", "lang_noServer": "", "lang_openingTime": "Opening time", "lang_openingtimes": "Opening times", diff --git a/modules-available/locationinfo/templates/page-config-panel-summary.html b/modules-available/locationinfo/templates/page-config-panel-summary.html index 7f145916..11f0dc65 100644 --- a/modules-available/locationinfo/templates/page-config-panel-summary.html +++ b/modules-available/locationinfo/templates/page-config-panel-summary.html @@ -101,7 +101,7 @@
{{lang_locations}}
-

{{lang_fourLocsHint}}

+

{{lang_locsHint}}

@@ -122,8 +122,10 @@
- {{lang_cancel}} - +
+ {{lang_cancel}} + +
- - {{lang_cancel}} - +
+ {{lang_cancel}} + +