diff options
author | msquare <msquare@notrademark.de> | 2019-12-08 11:48:58 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-12-08 11:48:58 +0100 |
commit | a3a938a1210f1bfb2680c25b2bcf53e47444bdba (patch) | |
tree | fd4c13fd9b714c0d8c60b6d3fe3e2fc88b82b717 /resources | |
parent | b540ac93856065ce6e145930b6611e0a0946d646 (diff) | |
parent | 064a1750279be244f86cf24f29749b391b11f1dd (diff) |
Merge pull request #685 from MyIgel/schedule-import
Rebuild Schedule import
Diffstat (limited to 'resources')
-rw-r--r-- | resources/lang/de_DE/additional.po | 33 | ||||
-rw-r--r-- | resources/lang/de_DE/default.po | 57 | ||||
-rw-r--r-- | resources/lang/en_US/additional.po | 33 | ||||
-rw-r--r-- | resources/lang/en_US/default.po | 60 | ||||
-rw-r--r-- | resources/views/admin/schedule/index.twig | 41 | ||||
-rw-r--r-- | resources/views/admin/schedule/load.twig | 79 | ||||
-rw-r--r-- | resources/views/macros/form.twig | 35 | ||||
-rw-r--r-- | resources/views/pages/password/reset-form.twig | 4 | ||||
-rw-r--r-- | resources/views/pages/password/reset.twig | 2 |
9 files changed, 332 insertions, 12 deletions
diff --git a/resources/lang/de_DE/additional.po b/resources/lang/de_DE/additional.po index 00eb90b3..ffbd7792 100644 --- a/resources/lang/de_DE/additional.po +++ b/resources/lang/de_DE/additional.po @@ -34,3 +34,36 @@ msgstr "Deine Passwörter stimmen nicht überein." msgid "validation.password_confirmation.required" msgstr "Du musst dein Passwort bestätigen." + +msgid "schedule.import" +msgstr "Programm importieren" + +msgid "schedule.import.request-error" +msgstr "Das Programm konnte nicht abgerufen werden." + +msgid "schedule.import.read-error" +msgstr "Das Programm konnte nicht gelesen werden." + +msgid "schedule.import.invalid-shift-type" +msgstr "Der Schichttyp konnte nicht gefunden werden." + +msgid "schedule.import.success" +msgstr "Das Programm wurde erfolgreich importiert." + +msgid "validation.schedule-url.required" +msgstr "Bitte gib eine Programm URL an." + +msgid "validation.schedule-url.url" +msgstr "Die Programm URL muss eine URL sein." + +msgid "validation.shift-type.required" +msgstr "Der Schichttyp ist erforderlich." + +msgid "validation.shift-type.int" +msgstr "Der Schichttyp muss eine Zahl sein." + +msgid "validation.minutes-before.int" +msgstr "Die Minuten vor dem Talk müssen eine Zahl sein." + +msgid "validation.minutes-after.int" +msgstr "Die Minuten nach dem Talk müssen eine Zahl sein." diff --git a/resources/lang/de_DE/default.po b/resources/lang/de_DE/default.po index d5a6c59e..7f017f13 100644 --- a/resources/lang/de_DE/default.po +++ b/resources/lang/de_DE/default.po @@ -2806,3 +2806,60 @@ msgstr "" #~ msgid "auth.no-nickname" #~ msgstr "Gib bitte einen Nick an." + +msgid "form.load_schedule" +msgstr "Programm laden" + +msgid "form.import" +msgstr "Importieren" + +msgid "schedule.import.title" +msgstr "Programm importieren" + +msgid "schedule.import.text" +msgstr "Dieser Import erstellt Räume und erstellt, aktualisiert und löscht Schichten anhand des schedule.xml exportes." + +msgid "schedule.import.load.title" +msgstr "Programm importieren: Vorschau" + +msgid "schedule.import.load.info" +msgstr "Importiere \"%s\" (Version \"%s\")" + +msgid "schedule.url" +msgstr "Programm URL (schedule.xml)" + +msgid "schedule.shift-type" +msgstr "Schichttyp" + +msgid "schedule.minutes-before" +msgstr "Minuten vor Talk beginn hinzufügen" + +msgid "schedule.minutes-after" +msgstr "Minuten nach Talk ende hinzufügen" + +msgid "schedule.import.rooms.add" +msgstr "Neue Räume" + +msgid "schedule.import.shifts.add" +msgstr "Neue Schichten" + +msgid "schedule.import.shifts.update" +msgstr "Zu aktualisierende Schichten" + +msgid "schedule.import.shifts.delete" +msgstr "Zu löschende Schichten" + +msgid "schedule.import.rooms.name" +msgstr "Name" + +msgid "schedule.import.shift.dates" +msgstr "Zeit" + +msgid "schedule.import.shift.type" +msgstr "Typ" + +msgid "schedule.import.shift.title" +msgstr "Titel" + +msgid "schedule.import.shift.room" +msgstr "Raum" diff --git a/resources/lang/en_US/additional.po b/resources/lang/en_US/additional.po index 9943b0ab..fa49ffdf 100644 --- a/resources/lang/en_US/additional.po +++ b/resources/lang/en_US/additional.po @@ -32,3 +32,36 @@ msgstr "Your passwords are not equal." msgid "validation.password_confirmation.required" msgstr "You have to confirm your password." + +msgid "schedule.import" +msgstr "Import schedule" + +msgid "schedule.import.request-error" +msgstr "The schedule could not be requested." + +msgid "schedule.import.read-error" +msgstr "Unable to parse schedule." + +msgid "schedule.import.invalid-shift-type" +msgstr "The shift type can't not be found." + +msgid "schedule.import.success" +msgstr "Schedule import successful." + +msgid "validation.schedule-url.required" +msgstr "The schedule URL is required." + +msgid "validation.schedule-url.url" +msgstr "The schedule URL needs to be of type URL." + +msgid "validation.shift-type.required" +msgstr "The shift type is required." + +msgid "validation.shift-type.int" +msgstr "The shift type has to ba a number." + +msgid "validation.minutes-before.int" +msgstr "The minutes before the talk have to be an integer." + +msgid "validation.minutes-after.int" +msgstr "The minutes after the talk have to be an integer." diff --git a/resources/lang/en_US/default.po b/resources/lang/en_US/default.po index cfb587f1..4ee92c78 100644 --- a/resources/lang/en_US/default.po +++ b/resources/lang/en_US/default.po @@ -45,3 +45,63 @@ msgstr "" "Please have a look at the " "[contributors list on GitHub](https://github.com/engelsystem/engelsystem/graphs/contributors)" " for a complete list." + +msgid "form.load_schedule" +msgstr "Load schedule" + +msgid "form.import" +msgstr "Import" + +msgid "schedule.import.title" +msgstr "Import schedule" + +msgid "schedule.import.text" +msgstr "This import creates rooms and creates, updates and deletes shifts according to the schedule.xml export." + +msgid "schedule.import.load.title" +msgstr "Import schedule: Preview" + +msgid "schedule.import.load.info" +msgstr "Import \"%s\" (version \"%s\")" + +msgid "schedule.url" +msgstr "Schedule URL (schedule.xml)" + +msgid "schedule.shift-type" +msgstr "Shift type" + +msgid "schedule.minutes-before" +msgstr "Add minutes before talk begins" + +msgid "schedule.minutes-after" +msgstr "Add minutes after talk ends" + +msgid "schedule.import.request_error" +msgstr "Unable to load schedule." + +msgid "schedule.import.rooms.add" +msgstr "Rooms to create" + +msgid "schedule.import.shifts.add" +msgstr "Shifts to create" + +msgid "schedule.import.shifts.update" +msgstr "Shifts to update" + +msgid "schedule.import.shifts.delete" +msgstr "Shifts to delete" + +msgid "schedule.import.rooms.name" +msgstr "Name" + +msgid "schedule.import.shift.dates" +msgstr "Times" + +msgid "schedule.import.shift.type" +msgstr "Type" + +msgid "schedule.import.shift.title" +msgstr "Title" + +msgid "schedule.import.shift.room" +msgstr "Room" diff --git a/resources/views/admin/schedule/index.twig b/resources/views/admin/schedule/index.twig new file mode 100644 index 00000000..08a9cb2b --- /dev/null +++ b/resources/views/admin/schedule/index.twig @@ -0,0 +1,41 @@ +{% extends 'layouts/app.twig' %} +{% import 'macros/base.twig' as m %} +{% import 'macros/form.twig' as f %} + +{% set title %}{% block title %}{{ __('schedule.import.title') }}{% endblock %}{% endset %} + +{% block content %} + <div class="container"> + <h1>{% block content_title %}{{ title }}{% endblock %}</h1> + + {% for message in errors|default([]) %} + {{ m.alert(__(message), 'danger') }} + {% endfor %} + {% for message in success|default([]) %} + {{ m.alert(__(message), 'success') }} + {% endfor %} + + <div class="row"> + {% block row_content %} + <form method="POST" action="{{ url('/admin/schedule/load') }}"> + {{ csrf() }} + + <div class="col-md-12"> + <p>{{ __('schedule.import.text') }}</p> + </div> + + <div class="col-lg-6"> + {{ f.input('schedule-url', __('schedule.url'), 'url', {'required': true}) }} + + {{ f.select('shift-type', shift_types|default([]), __('schedule.shift-type')) }} + + {{ f.input('minutes-before', __('schedule.minutes-before'), 'number', {'value': 15, 'required': true}) }} + {{ f.input('minutes-after', __('schedule.minutes-after'), 'number', {'value': 15, 'required': true}) }} + + {{ f.submit(__('form.load_schedule')) }} + </div> + </form> + {% endblock %} + </div> + </div> +{% endblock %} diff --git a/resources/views/admin/schedule/load.twig b/resources/views/admin/schedule/load.twig new file mode 100644 index 00000000..8c936bec --- /dev/null +++ b/resources/views/admin/schedule/load.twig @@ -0,0 +1,79 @@ +{% extends 'admin/schedule/index.twig' %} +{% import 'macros/form.twig' as f %} + +{% block title %}{{ __('schedule.import.load.title') }}{% endblock %} + +{% block row_content %} + <form method="POST" action="{{ url('/admin/schedule/import') }}"> + {{ csrf() }} + {{ f.hidden('schedule-url', schedule_url) }} + {{ f.hidden('shift-type', shift_type) }} + {{ f.hidden('minutes-before', minutes_before) }} + {{ f.hidden('minutes-after', minutes_after) }} + + <div class="col-lg-12"> + <p>{{ __('schedule.import.load.info', [schedule.conference.title, schedule.version]) }}</p> + + <h2>{{ __('schedule.import.rooms.add') }}</h2> + {{ _self.roomsTable(rooms.add) }} + + <h2>{{ __('schedule.import.shifts.add') }}</h2> + {{ _self.shiftsTable(shifts.add) }} + + <h2>{{ __('schedule.import.shifts.update') }}</h2> + {{ _self.shiftsTable(shifts.update) }} + + <h2>{{ __('schedule.import.shifts.delete') }}</h2> + {{ _self.shiftsTable(shifts.delete) }} + + {{ f.submit(__('form.import')) }} + </div> + </form> +{% endblock %} + + +{% macro roomsTable(rooms) %} + <div class="table-responsive"> + <table class="table table-striped"> + <thead> + <tr> + <th>{{ __('schedule.import.rooms.name') }}</th> + </tr> + </thead> + + <tbody> + {% for room in rooms %} + <tr> + <td>{{ room.name }}</td> + </tr> + {% endfor %} + </tbody> + </table> + </div> +{% endmacro %} + +{% macro shiftsTable(shifts) %} + <div class="table-responsive"> + <table class="table table-striped"> + <thead> + <tr> + <th>{{ __('schedule.import.shift.dates') }}</th> + <th>{{ __('schedule.import.shift.type') }}</th> + <th>{{ __('schedule.import.shift.title') }}</th> + <th>{{ __('schedule.import.shift.room') }}</th> + </tr> + </thead> + + <tbody> + {% for shift in shifts %} + <tr> + <td>{{ shift.date.format(__('Y-m-d H:i')) }} - {{ shift.endDate.format(__('H:i')) }}</td> + <td>{{ shift.type }}</td> + <td>{{ shift.title }}{% if shift.subtitle %}<br><small>{{ shift.subtitle }}</small>{% endif %}</td> + <td>{{ shift.room.name }}</td> + </tr> + {% endfor %} + </tbody> + </table> + </div> +{% endmacro %} diff --git a/resources/views/macros/form.twig b/resources/views/macros/form.twig index 5d41b085..ece85fcf 100644 --- a/resources/views/macros/form.twig +++ b/resources/views/macros/form.twig @@ -1,18 +1,35 @@ -{% macro input(name, label, type, required) %} +{% macro input(name, label, type, opt) %} <div class="form-group"> - {% if label %} + {% if label -%} <label for="{{ name }}">{{ label }}</label> - {% endif %} - <input type="{{ type|default('text') }}" class="form-control" id="{{ name }}" name="{{ name }}" - {%- if required|default(false) %} required="required"{% endif -%} + {%- endif %} + <input type="{{ type|default('text') }}" class="form-control" + id="{{ name }}" name="{{ name }}" + value="{{ opt.value|default('') }}" + {%- if opt.required|default(false) %} + required="required" + {%- endif -%} > </div> -{% endmacro %} +{%- endmacro %} + +{% macro select(name, data, label, selected) %} + <div class="form-group"> + {% if label -%} + <label for="{{ name }}">{{ label }}</label> + {% endif %} + <select id="{{ name }}" name="{{ name }}" class="form-control"> + {% for value,decription in data -%} + <option value="{{ value }}" {% if name == selected %} selected{% endif %}>{{ decription }}</option> + {% endfor %} + </select> + </div> +{%- endmacro %} {% macro hidden(name, value) %} <input type="hidden" id="{{ name }}" name="{{ name }}" value="{{ value }}"> -{% endmacro %} +{%- endmacro %} {% macro submit(label) %} - <button type="submit" class="btn btn-default">{{ label|default(__('form.submit')) }}</button> -{% endmacro %} + <button type="submit" class="btn btn-primary">{{ label|default(__('form.submit')) }}</button> +{%- endmacro %} diff --git a/resources/views/pages/password/reset-form.twig b/resources/views/pages/password/reset-form.twig index 60eb2499..a72dc92b 100644 --- a/resources/views/pages/password/reset-form.twig +++ b/resources/views/pages/password/reset-form.twig @@ -7,8 +7,8 @@ <form action="" enctype="multipart/form-data" method="post"> {{ csrf() }} - {{ f.input('password', __('Password'), 'password', true) }} - {{ f.input('password_confirmation', __('Confirm password'), 'password', true) }} + {{ f.input('password', __('Password'), 'password', {'required': true}) }} + {{ f.input('password_confirmation', __('Confirm password'), 'password', {'required': true}) }} <div class="form-group"> {{ f.submit(__('Save')) }} diff --git a/resources/views/pages/password/reset.twig b/resources/views/pages/password/reset.twig index 289152ea..b1de4eae 100644 --- a/resources/views/pages/password/reset.twig +++ b/resources/views/pages/password/reset.twig @@ -19,7 +19,7 @@ {{ csrf() }} {{ __('We will send you an e-mail with a password recovery link. Please use the email address you used for registration.') }} - {{ f.input('email', __('E-Mail'), 'email', true) }} + {{ f.input('email', __('E-Mail'), 'email', {'required': true}) }} <div class="form-group"> {{ f.submit(__('Recover')) }} |