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 Besucherstatistik-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 RechteverwaltungJobangebote.php
undBewerbungsformular.php
für Job-Listing und Bewerbungs-Workflow mit Dropzone & ClamAVStandorte.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.