summaryrefslogtreecommitdiff
path: root/resources
diff options
context:
space:
mode:
authorIgor Scheller <igor.scheller@igorshp.de>2019-11-27 23:43:21 +0100
committerIgor Scheller <igor.scheller@igorshp.de>2019-12-08 02:20:48 +0100
commit42721e95726559b4a601240bb5b0fe4e5d755b2a (patch)
tree6810e05f845ca787acc1d02fa82d3df15cd0ef9b /resources
parent377b390c97afb9106fd9a139819d00306f996f24 (diff)
Added Schedule parsing and replaced old Fahrplan importer
Resolves #553 (Change Frab Import from xCal to XML) Resolves #538 (Feature Request: Multi Frab Import)
Diffstat (limited to 'resources')
-rw-r--r--resources/lang/de_DE/additional.po33
-rw-r--r--resources/lang/de_DE/default.po57
-rw-r--r--resources/lang/en_US/additional.po33
-rw-r--r--resources/lang/en_US/default.po60
-rw-r--r--resources/views/admin/schedule/index.twig41
-rw-r--r--resources/views/admin/schedule/load.twig79
-rw-r--r--resources/views/macros/form.twig13
7 files changed, 316 insertions, 0 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..d5f30f22 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 and 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 6e821a28..ece85fcf 100644
--- a/resources/views/macros/form.twig
+++ b/resources/views/macros/form.twig
@@ -13,6 +13,19 @@
</div>
{%- 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 %}