Portal: NRW Vernetzt!

Portal für Firmen, Jobs & Services

Zusammenfassung:
Das Shopware-5-Plugin NRW-Vernetzt! realisiert ein umfassendes Portal für Wirtschaft, Soziales, Landwirtschaft und Umwelt in Nordrhein-Westfalen. Besucher finden Unternehmen, Behörden und Dienstleister über eine Freitext- und Branchen-Ort-Suche mit Umkreis-Slider. Unternehmen pflegen Mini-Websites, Niederlassungen und Jobangebote, Bewerbungen werden per Formular mit ClamAV-Scan entgegengenommen. Ein anonymisiertes Besucherstatis­tik-Modul, rollenbasierte Zugriffsrechte für Admins, Firmen und Gäste sowie sichere Dateiuploads und Soft-Deletes garantieren DSGVO-Konformität. Die aktuelle Implementation in Shopware 5 ist stabil, aber veraltet – ein vollständiger Relaunch als WordPress-Plugin unter Einsatz moderner REST-APIs, Gutenberg-Blocks und aktueller Security-Standards ist in Planung.

In Kooperation mit:

Startseite + Suchmaske

In der Startseite führt die zentrale Suchmaske Besucher schnell zu Firmen, Behörden oder Landwirten. Über die Standardsuche mit Freitext und Postleitzahl bzw. Ort kann wahlweise der Umkreis und die Berücksichtigung von Öffnungszeiten aktiviert werden. Tabs für Jobangebote und Aktions-Suchmodi erweitern die Funktion. Eine erweiterte Suche öffnet Zusatzfilter wie Alphabet, Gemeindeverzeichnis oder Branchenauswahl.

Vollständige technische Dokumentation

1 Projektübersicht

Das Plugin „NRW-Vernetzt!“ wurde unter Shopware 5 als Unternehmens-, Behörden- und Agrar-Portal konzipiert. Es bietet:
– Zentrale Firmen- und Dienstleistersuchen mit Umkreis-Slider
– Mini-Websites pro Firma/Behörde mit eigenen Domains / Sub-URLs
– Verwaltung mehrerer Standorte und Filialen
– Job- und Bewerbungsplattform mit Upload-Formular, Virenscan und Mail-Workflow
– Nachrichtenmodul für anonyme Besucherkommunikation und Inbox im Unternehmens-Backend
– Dokumenten-Upload (PDF, JPEG, DOCX) im Bewerbungs- bzw. Admin-Kontext
– DSGVO-konforme Besucherstatistiken mit IP-Hashing und Soft-Delete

2 Benutzerrollen & Zugriffsrechte

Es existieren drei Hauptrollen:
Besucher (öffentlich): Zugriff auf Suche, Firmenprofile, Bewerbungsformulare und Nachrichten-Anonymversand. Keine Schreibrechte in Datenbank.
Unternehmen/Behörde/Verein: Verwaltung eigener Firmen- und Standortdaten, Pflege von Mini-Sites, Einstellung von Jobangeboten, Einsehen und Beantworten von Bewerbungen, Upload eigener Dokumente, Konfiguration DSGVO-Opt-In.
Administrator: Vollzugriff auf alle Module und Daten. Moderiert Einträge, delegiert Rechte, führt Massenimporte durch und pflegt globale Einstellungen.

Zugriffsprüfungen erfolgen in jedem Controller über if (!$this->admin->sCheckUser()) { forward('register'); }.

3 Login- & Authentifizierung

Der Login erfolgt über das Shopware-Standardformular (E-Mail + Hash-Passwort). Externe OAuth/SSO-Provider werden nicht unterstützt.
Nach erfolgreichem Login leitet das System rollenabhängig weiter: Admins in die Einstellungen, Unternehmen zu ihren Firmendaten, Besucher auf die zuletzt aufgerufene URL. Ein Passwort-Reset nutzt den Shopware-Kernprozess.

4 Funktionsmatrix

| Feature | Besucher | Unternehmen | Admin |
| ——————————|:——–:|:—————-:|:——————:|
| Suche (Branche · Ort · Radius)| ✓ | ✓ | ✓ |
| Erweiterte Filter | ✓ | ✓ | ✓ |
| Mini-Site / Firmenprofil | lesen | bearbeiten | freigeben / löschen|
| Standorte verwalten | – | ✓ | ✓ |
| Jobangebote einstellen | – | ✓ | ✓ |
| Bewerben (Form + Upload) | ✓ | lesen / beantworten | einsehen |
| Nachrichten-System | ✓ | ✓ | moderieren |
| Dokumenten-Upload | via Bewerbung | eigene Vorlagen | prüfen |
| Statistik-Übersicht | – | – | ✓ |

5 Technische Struktur des Shopware-Plugins

  • Bootstrap (addactaPortal.php): Registriert Event-Subscriber und Services.

  • DI-Container (Resources/services.xml): Bindet Ajax-Subscriber, Cron-Jobs, Mail-Services.

  • Controllers/Frontend:

    • Suche.php für Hauptsuchseite (Branchensuche, Umkreisslider)

    • Zugriffsverwaltung.php für Freigaben und Rechte­verwaltung

    • Jobangebote.php und Bewerbungsformular.php für Job-Listing und Bewerbungs-Workflow mit Dropzone & ClamAV

    • Standorte.php für Standort-CRUD und Google-Maps-Embedding

  • Smarty-Templates (Resources/views/frontend/ / emotion_components/): Präsentation der Suchergebnisse und Mini-Sites.

  • Models (Doctrine) in models/: Unternehmens-, Job-, Standort-Entitäten mit relationalen Foreign Keys.

  • Subscriber/Install.php: Migration und Anlage der Tabellen portal_*.

  • Assets (JS & SCSS): jQuery-Autocomplete, Select2-Dropdowns, jQuery-UI-Slider für Radius, Dropzone-Uploader für Bewerbungen.

6 Datenbankschema (Auszug)

Alle Tabellen besitzen ein gemeinsames Feld deleted_at für Soft-Deletes.

  • portal_firmen: id, name, branche_id, url, logo_media_id

  • portal_standorte: id, firma_id, strasse, plz, ort, geo_lat, geo_lon

  • portal_branchen: id, parent_id, titel (Branchenbaum)

  • portal_firmen_jobs: id, firma_id, titel, beschreibung, aktiv_bis

  • portal_firmen_jobs_bewerber: id, job_id, name, email, cv_path, created_at

  • portal_messages: id, sender_id, receiver_id, betreff, text, gelesen

  • portal_visitors: id, standort_id, ip_hash, created_at

  • portal_firmen_einstellungen: id, firma_id, newsletter_optin, cookie_optin

7 Frontend-Flows & UI-Bausteine

  • Landing „Suche“: Controller Suche liefert Twig-/Smarty-Templates mit AJAX-Autovervollständigung. Filtersidebar für Branche, Ort, Umkreis.

  • Ergebnisliste: Pagination, Kartenpins via Google-Maps-JS, responsive Tabellen.

  • Mini-Site: Headerbild, Firmenlogo, Social-Icons, Tabs für „Über uns“, „Angebote“, „Jobs“, „Dokumente“.

  • Bewerben: Dropzone-Upload (max. 10 MB, PDF/DOCX), MIME- und Extension-Whitelist, ClamAV-Scan, Mailversand an Unternehmen.

  • Unternehmens-Backend: Sidebar-Navigation zu Dashboard (KPIs), Standorte (AJAX-CRUD), Jobangebote (Listing + Bewerber-Tabellen), Einstellungen (DSGVO-Opt-Ins, API-Keys).

8 Sicherheits- & DSGVO-Aspekte

Alle Controller prüfen User-Sessions und Rollen. CSRF-Protection über Shopware-Token und Nonces.
Upload-Härtung mit finfo-MIME-Checks, Whitelists und Virenscan, Ablage außerhalb des Webroots, Download per PHP-Stream.
Visitor-Logging in portal_visitors verwendet SHA-256-gehashte IPs mit Salt für DSGVO-Konformität. Double-Opt-In beim Erst-Signup und Cookie-Banner gemäß Consent API runden das Sicherheitskonzept ab.