From 64ca9826eaa022b524fa316d335389e1309b3c6b Mon Sep 17 00:00:00 2001 From: Philipp Hofer Date: Wed, 11 Dec 2024 19:22:29 +0100 Subject: [PATCH] nicer explanations --- src/model/user.rs | 12 ++- src/tera/admin/mod.rs | 20 +---- src/tera/admin/user.rs | 28 +++---- templates/admin/user/index.html.tera | 11 +++ templates/impressum.html.tera | 40 ++-------- templates/includes/footer.html.tera | 3 +- templates/includes/macros.html.tera | 108 ++++++++++++++++++++++++++- templates/index.html.tera | 6 +- 8 files changed, 153 insertions(+), 75 deletions(-) diff --git a/src/model/user.rs b/src/model/user.rs index 344d4c2..7ddcad8 100644 --- a/src/model/user.rs +++ b/src/model/user.rs @@ -250,12 +250,20 @@ ORDER BY last_access DESC .unwrap() } - pub async fn create(db: &SqlitePool, name: &str) -> bool { + pub async fn create(db: &SqlitePool, name: &str) { let name = name.trim(); - sqlx::query!("INSERT INTO USER(name) VALUES (?)", name) + if sqlx::query!("INSERT INTO USER(name) VALUES (?)", name) .execute(db) .await .is_ok() + { + return; + } + + sqlx::query!("UPDATE user SET deleted = false where name = ?", name) + .execute(db) + .await + .unwrap(); } pub async fn update(&self, db: &SqlitePool, data: UserEditForm) -> Result<(), String> { diff --git a/src/tera/admin/mod.rs b/src/tera/admin/mod.rs index 8424194..9348017 100644 --- a/src/tera/admin/mod.rs +++ b/src/tera/admin/mod.rs @@ -4,25 +4,13 @@ use rocket_dyn_templates::{context, Template}; use sqlx::SqlitePool; use super::notification; -use crate::{ - model::{log::Log, role::Role, user::AdminUser}, - tera::Config, -}; +use crate::model::{log::Log, role::Role, user::AdminUser}; pub mod event; pub mod user; -#[get("/rss?")] -async fn rss(db: &State, key: &str, config: &State) -> String { - if key.eq(&config.rss_key) { - Log::generate_feed(db).await - } else { - "Not allowed".into() - } -} - -#[get("/rss", rank = 2)] -async fn show_rss(db: &State, _admin: AdminUser) -> String { +#[get("/log")] +async fn log(db: &State, _admin: AdminUser) -> String { Log::show(db).await } @@ -75,6 +63,6 @@ pub fn routes() -> Vec { ret.append(&mut user::routes()); ret.append(&mut notification::routes()); ret.append(&mut event::routes()); - ret.append(&mut routes![rss, show_rss, show_list, list]); + ret.append(&mut routes![log, show_list, list]); ret } diff --git a/src/tera/admin/user.rs b/src/tera/admin/user.rs index 9b1f21f..2c800ba 100644 --- a/src/tera/admin/user.rs +++ b/src/tera/admin/user.rs @@ -176,22 +176,18 @@ async fn create( data: Form>, admin: ManageUserUser, ) -> Flash { - if User::create(db, data.name).await { - Log::create( - db, - format!("{} created new user: {data:?}", admin.user.name), - ) - .await; - Flash::success( - Redirect::to("/admin/user"), - "Mitglied erfolgreich angelegt!", - ) - } else { - Flash::error( - Redirect::to("/admin/user"), - format!("Mitlgied {} gibt/gab es bereits", data.name), - ) - } + User::create(db, data.name).await; + + Log::create( + db, + format!("{} created new user: {data:?}", admin.user.name), + ) + .await; + + Flash::success( + Redirect::to("/admin/user"), + "Mitglied erfolgreich angelegt!", + ) } pub fn routes() -> Vec { diff --git a/templates/admin/user/index.html.tera b/templates/admin/user/index.html.tera index 28840e7..1ea5ce4 100644 --- a/templates/admin/user/index.html.tera +++ b/templates/admin/user/index.html.tera @@ -80,7 +80,18 @@
{% for role in roles %} {% if not role.cluster %} + {% if role.name == "admin" %} + {{ macros::checkbox(label=role.name, name="roles[" ~ role.id ~ "]", id=loop.index , checked=role.name in user.roles, disabled=allowed_to_edit == false, help="Admins können Mitglieder (auf dieser Seite) verwalten") }} + {% elif role.name == "scheckbuch" %} + {{ macros::checkbox(label=role.name, name="roles[" ~ role.id ~ "]", id=loop.index , checked=role.name in user.roles, disabled=allowed_to_edit == false, help="Anfänger sehen nur Ausfahrten/Events, die explizit für sie ausgeschrieben wurden") }} + {% elif role.name == "cox" %} + {{ macros::checkbox(label=role.name, name="roles[" ~ role.id ~ "]", id=loop.index , checked=role.name in user.roles, disabled=allowed_to_edit == false, help="Steuerpersonen können selbstständig Ausfahrten ausschreiben und sich bei Events zum steuern anmelden") }} + {% elif role.name == "manage_events" %} + {{ macros::checkbox(label=role.name, name="roles[" ~ role.id ~ "]", id=loop.index , checked=role.name in user.roles, disabled=allowed_to_edit == false, help="Eventmanager können Events ausschreiben und bearbeiten") }} + {% else %} {{ macros::checkbox(label=role.name, name="roles[" ~ role.id ~ "]", id=loop.index , checked=role.name in user.roles, disabled=allowed_to_edit == false) }} + + {% endif %} {% endif %} {% endfor %}
diff --git a/templates/impressum.html.tera b/templates/impressum.html.tera index 11572f3..1009257 100644 --- a/templates/impressum.html.tera +++ b/templates/impressum.html.tera @@ -7,17 +7,17 @@ role="alert">

Allgemein

- Die Website wird vom ASKÖ Ruderverein Donau Linz betrieben. + Die Website wird von ruad.at betrieben.
Postanschrift:
- ASKÖ Ruderverein Donau Linz + Philipp Hofer
- Heilhamerweg 2 + Rubinweg 8
- 4040 Linz + 4225 Luftenberg
- ZVR: 363903285 + Mail: philipp@hofer.link
@@ -55,39 +55,11 @@
  • Letzter Zugriff: {{ loggedin_user.last_access }}
  • -
  • - Mitglied seit: {{ loggedin_user.member_since_date }} -
  • -
  • - Geburtsdatum: {{ loggedin_user.birthdate }} -
  • -
  • - Mail: {{ loggedin_user.mail }} -
  • - {% if loggedin_user.nickname %} -
  • - Spitzname: {{ loggedin_user.nickname }} -
  • - {% endif %} -
  • - Telefonnummer: {{ loggedin_user.phone }} -
  • -
  • - Adresse: {{ loggedin_user.address }} -
  • -
  • (Beitrittserklärung)
  • - {% if loggedin_user.family_id %} -
  • Verbindung zu Familienmitglied (gespeichert um Familientarif anstatt Vollmitglied zu haben)
  • - {% endif %}
  • Rollen: {{ loggedin_user.roles }} (werden für verschiedene Funktionen im Ruderassistenten verwendet)
  • Anmeldungen zu Ausfahrten
  • Anmeldungen zu Events (zB Fetzenfahrt, Anrudern, USI-Rudern, ...)
  • -
  • Logbucheinträge
  • -
  • Selber eingetragene Bootsschäden, solange sie nicht > 1 Monat verifiziert und repariert wurden
  • -
  • Selber eingetragene Bootsreservierung
  • -
  • Boote, sofern es welche im Privatbesitz gibt
  • @@ -103,7 +75,7 @@ Die Wetterdaten werden von OpenWeather bereitgestellt.
  • - Wasserstandsvorhersagen: Die Vorhersagen werden stündlich vom Hydrographischen Dienstes Oberösterreich geladen und zwischengespeichert, der höchste Tages-Mittelwert wird gemeinsam mit der Schwankungsbreite bei den geplanten Ausfahrten angezeigt. Es handelt sich hierbei um ungeprüfte Rohdaten. Rohdatenfehler können durch betriebliche Störungen an den Messgeräten, Fernübertragungseinrichtungen u. dgl. entstehen. Die Vorhersagen sind daher mit Unsicherheiten behaftet! Mit der Länge des Vorhersagezeitraumeszeitraumes werden diese Unsicherheiten größer! Es wird keine Gewähr für die Vollständigkeit, Richtigkeit und Genauigkeit der dargestellten Daten übernommen. Gewährleistungs- und Haftungsansprüche werden ausdrücklich ausgeschlossen (sowohl vom Hydrographischen Dienstes Oberösterreich als auch vom ASKÖ Ruderverein Donau Linz). + Wasserstandsvorhersagen: Die Vorhersagen werden stündlich vom Hydrographischen Dienstes Oberösterreich geladen und zwischengespeichert, der höchste Tages-Mittelwert wird gemeinsam mit der Schwankungsbreite bei den geplanten Ausfahrten angezeigt. Es handelt sich hierbei um ungeprüfte Rohdaten. Rohdatenfehler können durch betriebliche Störungen an den Messgeräten, Fernübertragungseinrichtungen u. dgl. entstehen. Die Vorhersagen sind daher mit Unsicherheiten behaftet! Mit der Länge des Vorhersagezeitraumeszeitraumes werden diese Unsicherheiten größer! Es wird keine Gewähr für die Vollständigkeit, Richtigkeit und Genauigkeit der dargestellten Daten übernommen. Gewährleistungs- und Haftungsansprüche werden ausdrücklich ausgeschlossen (sowohl vom Hydrographischen Dienstes Oberösterreich als auch von ruad.at).
  • diff --git a/templates/includes/footer.html.tera b/templates/includes/footer.html.tera index 3f7db97..4413439 100644 --- a/templates/includes/footer.html.tera +++ b/templates/includes/footer.html.tera @@ -3,8 +3,7 @@
    - Erstellt vom ASKÖ Ruderverein Donau Linz ... und dir? + Erstellt von ruad.at
    + +
    + +
    +

    + Willkommen in der Testversion von ruad.at! + Hier wird nochmal alles vieles erklärt. + Wenn du Fragen/Wünsche/... hast, kannst du dich gerne jederzeit unter philipp@hofer.link melden. +

    +
    + Rollen: Admin, Steuerperson, Anfänger + Eventmanager +

    + Aktuell gibt es 4 Rollen, die jedes Mitglied haben kann: +

      +
    1. Admin: dürfen Mitglieder verwalten (siehe Menüeintrag rechts oben → Mitgliederverwaltung
    2. +
    3. Steuerperson: können selbstständig Ausfahrten ausschreiben/bearbeiten, und sich zum steuern bei Events melden
    4. +
    5. Anfänger: sehen nur Ausfahrten und Events, die explizit für Anfänger ausgeschrieben wurden
    6. +
    7. Eventmanager: können Events ausschreiben/bearbeiten
    8. +
    +

    +
    +
    + Rudertrips: Ausfahrten + Events +

    + Es gibt 2 Arten von Rudertrips, die ausgeschrieben werden können: +

      +
    1. Ausfahrten: Können jederzeit von Steuerpersonen ausgeschrieben/bearbeitet werden
    2. +
    3. Events: für Veranstaltungen, wo nicht nur Rudererinnen gesucht werden, sondern auch Steuerpersonen (zB Anrudern, Abrudern, Sternfahrten, Wanderfahrten, ...)
    4. +
    +

    +
    +
    + Bearbeiten +

    + Details, wie zB Anmerkungen können jederzeit geändert werden. + Wichtige Infos, auf die sich Rudernde verlassen (zB Startzeit und Ausfahrtstyp) können nicht mehr geändert werden. + Wenn sich die Startzeit ändert, kann man die Ausfahrt/Event absagen und stattdessen einen neuen Trip ausschreiben. +

    +
    +
    + Absagen/Löschen +

    + Ausfahrten und Events können gelöscht werden, solange keine Ruderer angemeldet sind. + Sobald jemand angemeldet ist, kann die Ausfahrt/Event nicht mehr gelöscht werden, dafür abgesagt werden. + In diesem Fall bekommen alle die sich angemeldet haben eine Nachricht. + Sobald alle die Nachricht gelesen haben, wird der Trip automatisch gelöscht. +

    +
    +
    + Wieviele Tage sehe ich? +

    + Rudernde sehen alle Trips 10 Tage im voraus + zusätzlich alle, wo Immer Anzeigen ausgewählt wurde. + Steuerpersonen sehen das ganze Jahr (um im Vorhinein Ausfahrten ausschreiben zu können). Ab Dezember sehen sie auch das volle kommende Jahr. +

    +
    + +
    + +
    {% endmacro header %} {% macro input(label, name, type, required=false, class='rounded-md', value='', min='', hide_label=false, id='', autofocus=false, wrapper_class='', pattern='', readonly=false, accept='') %} @@ -169,7 +246,7 @@ function setChoiceByLabel(choicesInstance, label) { {{name}} {%- endif -%} {% endmacro fancy_role_name %} -{% macro checkbox(label, name, id='', checked=false, class='', disabled=false, readonly=false) %} +{% macro checkbox(label, name, id='', checked=false, class='', disabled=false, readonly=false, help=false) %} {% endmacro checkbox %} {% macro select(label, data, name='trip_type', default='', id='', selected_id='', display='', extras='', class='', wrapper_class='', required=false, show_seats=false, new_last_entry='', nonSelectableDefault=false, only_ergo=false) %} diff --git a/templates/index.html.tera b/templates/index.html.tera index 12fcd58..309dedb 100644 --- a/templates/index.html.tera +++ b/templates/index.html.tera @@ -169,8 +169,8 @@ {{ macros::input(label='Titel', name='name', type='input', value=event.name) }} {{ macros::input(label='Anzahl Ruderer', name='max_people', type='number', required=true, value=event.max_people, min='1') }} {{ macros::input(label='Anzahl Steuerleute', name='planned_amount_cox', type='number', value=event.planned_amount_cox, required=true, min='0') }} - {{ macros::checkbox(label='Immer anzeigen', name='always_show', id=event.id,checked=event.always_show) }} - {{ macros::checkbox(label='Gesperrt', name='is_locked', id=event.id,checked=event.is_locked) }} + {{ macros::checkbox(label='Immer anzeigen', name='always_show', id=event.id,checked=event.always_show, help="Grundsätzlich sehen Rudernde Ausfahrten 10 Tage im vorhinein. Wenn du diese Option aktivierst, ist diese Ausfahrt sofort allen ersichtlich.") }} + {{ macros::checkbox(label='Gesperrt', name='is_locked', id=event.id,checked=event.is_locked, help="Wenn diese Option aktiviert ist, kann sich keiner mehr an- und abmelden. Sinnvoll, wenn zB bereits die Bootseinteilung vorgenommen wurde") }} {{ macros::select(label='Typ', name='trip_type', data=trip_types, default='Reguläre Ausfahrt', selected_id=event.trip_type_id) }} {{ macros::input(label='Anmerkungen', name='notes', type='input', value=event.notes) }} @@ -301,7 +301,7 @@
    {{ macros::input(label='Anzahl Ruderer', name='max_people', type='number', required=true, value=trip.max_people, min=trip.rower | length) }} {{ macros::input(label='Anmerkungen', name='notes', type='input', value=trip.notes) }} - {{ macros::checkbox(label='Gesperrt', name='is_locked', id=trip.id,checked=trip.is_locked) }} + {{ macros::checkbox(label='Gesperrt', name='is_locked', id=trip.id,checked=trip.is_locked, help="Wenn diese Option aktiviert ist, kann sich keiner mehr an- und abmelden. Sinnvoll, wenn zB bereits die Bootseinteilung vorgenommen wurde") }} {% if loggedin_user.allowed_to_steer %} {{ macros::select(label='Typ', name='trip_type', data=trip_types, default='Reguläre Ausfahrt', selected_id=trip.trip_type_id, only_ergo=not loggedin_user.allowed_to_steer) }} {% else %}