# Oggauer Gemeindetrommler đŸ„ Die **Oggauer Gemeindetrommler App** ist die offizielle Smartphone-Anwendung (Flutter fĂŒr Android & iOS) des **BĂŒrgerforums Oggau** fĂŒr alle BĂŒrgerinnen und BĂŒrger der Marktgemeinde Oggau am Neusiedler See. Die App vereint aktuelle Gemeinde-Nachrichten, offizielle PDF-Aussendungen des BĂŒrgerforums, einen bĂŒrgernahen MĂ€ngelmelder mit Foto-Upload, eine Ideenplattform sowie einen direkten Kontaktkanal mit integriertem Admin-Posteingang und vollstĂ€ndiger In-App-Benutzerverwaltung. --- ## đŸ“± Funktionsumfang & Module ### 1. 📰 Nachrichten & Offizielle PDF-Aussendungen (`News`) - **Chronologischer Feed:** Vereint manuell erstellte Gemeinde-Nachrichten und die offiziellen Rundschreiben/Aussendungen des BĂŒrgerforums nach Datum sortiert (neueste zuerst). - **WordPress REST-API Anbindung:** Vollautomatische Synchronisation der Aussendungen von [buergerforumoggau.at](https://buergerforumoggau.at/category/aktuelles/aussendungen/) inklusive HTML-Bereinigung und PDF-Extraktion. - **Offline-First:** Geladene Aussendungen werden lokal via `SharedPreferences` zwischengespeichert und stehen sofort beim App-Start sowie offline zur VerfĂŒgung. - **Integrierter PDF-Reader:** - FlĂŒssige In-App-Vorschau ohne externe App zwingend öffnen zu mĂŒssen. - **Stufenloser Zoom:** Gesten-Zoom (Pinch-to-Zoom von 0.8x bis 5.0x) und schwebendes Bedienfeld (`+`, `-`, `1:1` Reset auf 100%). - **Drucken & Teilen:** Direktes Teilen von PDFs via `Printing.sharePdf` und System-Druckfunktion. - **Browser-Aufruf:** Öffnen des Original-Dokuments im Standard-Webbrowser oder externen PDF-Viewer. - **Filter-Leiste:** Schnelles Filtern nach `Alle`, `Aussendungen (PDF)` und `Aktuelles`. - **Echtzeitsuche & PDF-Export:** Volltextsuche in BeitrĂ€gen sowie Export von EinzelbeitrĂ€gen oder TabellenĂŒbersichten als PDF. - **Redaktions-Funktion:** Berechtigte Administratoren können neue Nachrichten direkt ĂŒber die App mit Titel, Text und Beitragsbild erfassen. ### 2. ⚠ MĂ€ngelmelder (`Issues`) - **MĂ€ngelĂŒbersicht:** Chronologische Liste aller im Gemeindegebiet gemeldeten MĂ€ngel mit Bildvorschau, Status und Ortsangabe. - **Strukturierte Erfassung:** - Titel und detaillierte Beschreibung. - Kategorie-Auswahl (z. B. Straßenbeleuchtung, StraßenschĂ€den, GrĂŒnflĂ€chen, MĂŒll, SpielplĂ€tze). - Pflicht-Dropdown aller offiziellen Straßen in Oggau. - Bis zu 2 Fotos (Aufnahme direkt per Kamera oder Auswahl aus der Galerie). - Automatische Bildkomprimierung und Speicheroptimierung (< 10 MB). - **Status-Workflow:** Verwaltung durch Administratoren (`Gemeldet` $\rightarrow$ `In Bearbeitung` $\rightarrow$ `Behoben`). - **Sammel-PDF-Druck:** Mehrfachauswahl gemeldeter MĂ€ngel mit tabellarischem PDF-Export (ideal zur Weiterleitung an den Bauhof oder Gemeinderat). - **Löschfunktion:** Verfasser und Administratoren können Meldungen per Wischgeste entfernen. ### 3. 💡 BĂŒrgerForum & Ideen (`CitizensForum`) - BĂŒrger-Beteiligungsplattform fĂŒr Anregungen, Projektideen und Initiativen zur Dorfentwicklung. - Erfassung mit Titel, Freitextbeschreibung und bis zu 2 Fotos/AnhĂ€ngen. - PDF-Export und DruckunterstĂŒtzung zur Vorstellung in AusschĂŒssen oder Sitzungen. ### 4. 📬 Kontakt & Admin-Posteingang (`Contact`) - **BĂŒrger-Kontaktformular:** - Einfache und direkte Kontaktaufnahme mit dem BĂŒrgerforum. - Pflichtangaben: Name, E-Mail-Adresse und Anliegen. - Optionale RĂŒckruf-Telefonnummer fĂŒr schnelle RĂŒckfragen. - Rechtlicher Datenschutzhinweis. - **Admin-Posteingang (`AdminMessagesScreen`):** - Administratoren haben direkten Zugriff auf alle ĂŒber die App eingesendeten BĂŒrgernachrichten. - **Echtzeit-Aktualisierung** via Firestore. - **Filter-Chips:** Schnelles Filtern nach `Alle`, `Neu`, `In Bearbeitung` und `Erledigt`. - **Volltextsuche:** Durchsucht Betreff, Nachrichtentext, Absender-Name und E-Mail-Adresse. - **Detail-Ansicht (Bottom Sheet):** - VollstĂ€ndiger Nachrichtentext mit Metadaten und Zeitstempel. - Statuswechsel (`Neu`, `In Bearbeitung`, `Erledigt`). - Ein-Klick-Aktionen: Direkte E-Mail-Antwort (`mailto:`) und Anruf (`tel:`). - Sicheres Löschen erledigter Nachrichten. ### 5. â„č BĂŒrgerforum-Info, Leitbild & In-App-Benutzerverwaltung (`Info`) - **Leitbild & Über uns:** Informationen ĂŒber die GrundsĂ€tze, Ziele und AktivitĂ€ten des BĂŒrgerforums Oggau. - **Notrufnummern:** Wichtige Notfallkontakte (Feuerwehr, Polizei, Rettung, Euronotruf, Vergiftungszentrale, etc.) auf einen Blick mit direkter Anruffunktion. - **Benutzerkonto-Status:** Transparente Anzeige des Anmeldestatus (`Gast`, `BĂŒrger`, `Administrator`). - **In-App-Benutzerverwaltung (`UserManagementScreen`):** - Keine Notwendigkeit mehr, fĂŒr die Rollenvergabe die Firebase Console zu öffnen. - VollstĂ€ndige Liste aller registrierten BĂŒrger mit Such- und Filterfunktion (`Alle`, `Administratoren`, `BĂŒrger`). - **Admin-Rechte verwalten:** Beförderung zum Administrator oder Entzug von Admin-Rechten mit einem Klick (inklusive Sicherheits-BestĂ€tigungsdialog). - **Selbstentzugs-Schutz:** Der angemeldete Admin kann sich nicht versehentlich selbst die Administrationsrechte entziehen. - **Manuelle Admin-Freischaltung:** ZusĂ€tzliche Dialog-Eingabe zur direkten Autorisierung per E-Mail oder UID. --- ## 🔒 Sicherheitsarchitektur (Backend & Frontend) Die Sicherheit und IntegritĂ€t der BĂŒrgerdaten wird durch ein mehrstufiges Sicherheitskonzept gewĂ€hrleistet: 1. **Firestore Security Rules (`firestore.rules`):** - **`/Users/{userId}`:** Nutzer können ihr eigenes Profil lesen und pflegen. Nur Administratoren (`isAdmin()`) haben Vollzugriff auf alle Benutzerprofile. - **`/Admins/{adminDoc}`:** Schreib- und Löschrechte sind strikt auf bestehende Administratoren beschrĂ€nkt. - **`/ContactMessages/{doc}`:** Eingereichte Kontaktanfragen können ausschließlich von Administratoren oder dem jeweiligen Verfasser gelesen werden. StatusĂ€nderungen und Löschungen sind Administratoren vorbehalten. - **`/News/{newsId}`:** Erstellen und Löschen von News-BeitrĂ€gen ist nur fĂŒr Administratoren gestattet. - **`/Issues` & `/CitizensForum`:** Angemeldete Nutzer dĂŒrfen eigene BeitrĂ€ge erfassen und löschen; Admins dĂŒrfen den Bearbeitungsstatus pflegen. 2. **Cloud Storage Rules (`storage.rules`):** - Uploads sind auf angemeldete Nutzer, DateigrĂ¶ĂŸen unter 10 MB und gĂŒltige Bildformate (`image/*`) limitiert. - Fotos dĂŒrfen ausschließlich vom ursprĂŒnglichen Verfasser oder von einem berechtigten Administrator gelöscht werden. 3. **Automatische Profil-Synchronisation:** - Bei jeder Anmeldung oder Registrierung gleicht `AuthService` das Benutzerprofil mit Firestore (`Users/{uid}`) ab. --- ## 📊 Umsetzungsstatus (Soll vs. Ist) | Anforderung / Modul | Spezifikation & Features | Umsetzungsstatus | Status | |---|---|---|:---:| | **News & Aussendungen** | Chronologischer Feed, Volltextsuche, PDF-Aussendungen der Webseite, Zoom-Viewer, PDF-Export | VollstĂ€ndig integriert (WordPress REST-API, In-App Zoom Reader, Filter-Chips) | 🟱 Erledigt | | **MĂ€ngelĂŒbersicht** | Chronologische Liste, Straßenauswahl, Volltextsuche, Tabellen-PDF-Export, Status-Tracking | VollstĂ€ndig integriert (Dropdown aller Oggauer Straßen, Statusanzeige, PDF-Export) | 🟱 Erledigt | | **MĂ€ngelerfassung** | Pflicht-Straße, Kategorie, max. 2 Fotos, automatische Komprimierung, Verfasser-Zuordnung | VollstĂ€ndig integriert (Kamera/Galerie, Dual-Foto-Upload, Validierung) | 🟱 Erledigt | | **BĂŒrgerforum / Ideen** | BĂŒrgerbeteiligung, Beschreibung, bis zu 2 AnhĂ€nge, PDF-Export | VollstĂ€ndig integriert | 🟱 Erledigt | | **Kontakt & Posteingang** | Kontaktformular mit Validierung, Datenschutzhinweis, Admin-Nachrichten-Posteingang | VollstĂ€ndig integriert (Echtzeit-Inbox, Status-Workflow, Schnellantwort) | 🟱 Erledigt | | **Benutzerverwaltung** | Rollenverwaltung (Admin/BĂŒrger), Kontoverwaltung in der App ohne Firebase Console | VollstĂ€ndig integriert (In-App User Management, Selbstschutz, Echtzeit) | 🟱 Erledigt | | **Info & Notruf** | Leitbild BĂŒrgerforum, Gemeinde-Informationen, Notfallnummern mit Schnellwahl | VollstĂ€ndig integriert | 🟱 Erledigt | | **Authentifizierung & Rechte** | E-Mail/Passwort, BĂŒrger-Freischaltung, Rollenkonzept, Gast-Zugang, Security Rules | VollstĂ€ndig integriert & backend-seitig gehĂ€rtet | 🟱 Erledigt | --- ## đŸ—ïž Technische Architektur & Tech-Stack ### Verwendete Technologien: - **Framework:** [Flutter](https://flutter.dev) `3.47.x` (Dart SDK `>=3.11`), Android `minSdk 23`, iOS `>= 15.0` - **Backend & Cloud Services (Google Firebase):** - `firebase_core` (Initialisierung) - `firebase_auth` (E-Mail & Passwort Authentifizierung, Gast-Modus) - `cloud_firestore` (NoSQL Echtzeit-Datenbank) - `firebase_storage` (Cloud-Bilderspeicher) - **Externe APIs & Web-Services:** - WordPress REST-API (`http`-Paket fĂŒr BĂŒrgerforum-Aussendungen) - `shared_preferences` (Offline-Zwischenspeicherung) - **Dokumentenverarbeitung & PDF:** - `pdf`, `printing` (PDF-Generierung, In-App Vorschau & Druck) - `url_launcher` (System-Browser, Telefon- und E-Mail-Intents) - **Bildverarbeitung:** - `image_picker`, `cached_network_image`, `image` - **State Management:** - `provider` (`MultiProvider` Architektur) ### Projektstruktur (`lib/`): ```text lib/ ├── firebase_options.dart # Firebase-Konfiguration fĂŒr Android & iOS ├── main.dart # Einstiegspunkt, Theme & MultiProvider Setup ├── models/ │ └── post_item.dart # Datenmodell fĂŒr News, Aussendungen, MĂ€ngel & Ideen ├── screens/ │ ├── add_issue_screen.dart # MĂ€ngelerfassung (Straßen-Dropdown & bis zu 2 Fotos) │ ├── add_post_screen.dart # Erfassung von News (Admins) & BĂŒrgerideen │ ├── admin_messages_screen.dart # Admin-Posteingang fĂŒr eingegangene Kontaktanfragen │ ├── auth_dialog.dart # Anmelde-, Registrierungs- & Freischaltungs-Dialog │ ├── contact_screen.dart # BĂŒrger-Kontaktformular mit Admin-Posteingang-Banner │ ├── detail_screen.dart # Beitrags-Detailansicht mit PDF-Direktaufruf │ ├── home_screen.dart # Haupt-Navigation mit 5 Tabs │ ├── info_screen.dart # BĂŒrgerforum Leitbild, Notrufnummern & Kontostatus │ ├── pdf_viewer_screen.dart # In-App PDF-Viewer mit Pinch-to-Zoom & Schwebepanel │ ├── post_list_screen.dart # News-, MĂ€ngel- & Ideen-Listen mit Volltextsuche & Filter │ └── user_management_screen.dart# In-App Benutzerverwaltung & Admin-Rollenvergabe └── services/ ├── aussendungen_service.dart # WordPress REST-API Client mit SharedPreferences-Cache ├── auth_service.dart # Authentifizierung & automatischer Firestore-Profilabgleich ├── firestore_service.dart # Firestore CRUD, Admin-Verwaltung & Kontakt-Stream ├── pdf_service.dart # PDF-Tabellen und Einzeldokument-Erstellung └── storage_service.dart # Komprimierter Cloud-Storage Bild-Upload ``` --- ## đŸ€– CI/CD Pipeline Die Flutter-Version ist zentral gepinnt (`FLUTTER_VERSION` in beiden Workflows, `environment` in `pubspec.yaml`) und muss bei einem Upgrade an allen drei Stellen gemeinsam angehoben werden. ### Android (Gitea Actions, `.gitea/workflows/build-apk.yaml`) - **Build-Container:** `ghcr.io/cirruslabs/flutter:3.44.0` (letztes von Cirrus Labs veröffentlichtes Image, liefert JDK 21 + Android SDK 36). Das darin enthaltene Flutter-SDK wird im ersten Schritt per `git checkout` auf `FLUTTER_VERSION` umgeschaltet. - **Runner:** Oracle Cloud ARM64 – x86_64-Werkzeuge (AAPT2, `gen_snapshot`) laufen ĂŒber QEMU (`scripts/ci/qemu_intercept.c`). - **Automatisierte QualitĂ€tskontrolle:** FĂŒhrt vor jedem Build `flutter analyze` und `flutter test` aus. - **Erzeugte APK-Pakete:** 1. `oggauer-gemeindetrommler-universal-release.apk` (Universelle Version fĂŒr alle Android-Smartphones). 2. `oggauer-gemeindetrommler-arm64-v8a.apk` (Optimiert fĂŒr moderne 64-Bit GerĂ€te). 3. `oggauer-gemeindetrommler-armeabi-v7a.apk` (FĂŒr Ă€ltere 32-Bit GerĂ€te). 4. `oggauer-gemeindetrommler-x86_64.apk` (FĂŒr Emulatoren). - **Download:** Die gebauten APKs stehen nach jedem Durchlauf als Artefakte im Gitea-Reiter **Aktionen** sowie im Release `latest` zum Download bereit. ### iOS (GitHub Actions, `.github/workflows/build-ios.yaml`) - **Runner:** `macos-26` (Xcode 26), Flutter ĂŒber `subosito/flutter-action`. - **Plugins:** ausschließlich ĂŒber CocoaPods (Swift Package Manager ist im Workflow bewusst deaktiviert); `ios/Podfile.lock` wird nicht versioniert, `pod install` lĂ€uft bei jedem Build frisch. - **Ergebnis:** unsigniertes IPA (`flutter build ios --release --no-codesign`) als Artefakt `oggauer-gemeindetrommler-ios` – fĂŒr die Verteilung muss es nachtrĂ€glich signiert werden. --- ## đŸ› ïž Einrichtung & Lokale AusfĂŒhrung ### Voraussetzungen: - **Flutter SDK:** `3.47.x` (stable) – identisch zur in den Workflows gepinnten Version - **Dart SDK:** Im Flutter SDK enthalten - **Android Studio / VS Code / Xcode** mit entsprechenden Emulatoren oder TestgerĂ€ten ### Befehle: ```bash # 1. AbhĂ€ngigkeiten laden flutter pub get # 2. Statische Code-Analyse ausfĂŒhren flutter analyze # 3. Unit-Tests ausfĂŒhren flutter test # 4. App im Entwicklungsmodus starten flutter run ``` --- ## 📄 Lizenz & Urheberschaft Entwickelt fĂŒr das **BĂŒrgerforum Oggau**. Private & gemeinnĂŒtzige Verwendung.