@php
$locale = in_array(app()->getLocale(), ['hu', 'en', 'de', 'ro', 'sk']) ? app()->getLocale() : 'en';
$versions = [
[
'version' => 'v1.26.0',
'latest' => true,
'badge' => [
'text' => ['hu' => 'Fejlesztés', 'en' => 'Improvement', 'de' => 'Verbesserung', 'ro' => 'Îmbunătățire', 'sk' => 'Vylepšenie'],
'style' => 'background:rgba(64,81,137,0.1);color:#405189;',
],
'date' => ['hu' => '2026. május 18.', 'en' => 'May 18, 2026', 'de' => '18. Mai 2026', 'ro' => '18 mai 2026', 'sk' => '18. mája 2026'],
'items' => [
['hu' => 'Nyilvános changelog oldal (/changelog): A verziókövetés oldal mostantól bejelentkezés nélkül is elérhető a /changelog URL-en. Az oldal tartalmazza a NationForge logót, a Programozás Kft. Facebook-hivatkozást, HU / EN / DE / RO / SK nyelvváltó zászlókat és egy Bejelentkezés gombot. Az admin bejelentkezési oldalon megjelent egy közvetlen hivatkozás az oldalra.',
'en' => 'Public changelog page (/changelog): The changelog is now publicly accessible at /changelog without login. The page includes the NationForge logo, a Programozás Kft. Facebook link, HU / EN / DE / RO / SK language switcher flags and a Login button. A direct link to the page was added to the admin login page.',
'de' => 'Öffentliche Changelog-Seite (/changelog): Das Changelog ist jetzt ohne Anmeldung unter /changelog öffentlich zugänglich. Die Seite enthält das NationForge-Logo, einen Programozás Kft. Facebook-Link, HU / EN / DE / RO / SK Sprachumschalter-Flags und einen Anmelde-Button. Ein direkter Link zur Seite wurde auf der Admin-Anmeldeseite hinzugefügt.',
'ro' => 'Pagină publică changelog (/changelog): Jurnalul de modificări este acum accesibil public la /changelog fără autentificare. Pagina include logo-ul NationForge, un link Facebook Programozás Kft., indicatoare de limbă HU / EN / DE / RO / SK și un buton de autentificare. Un link direct către pagină a fost adăugat pe pagina de autentificare admin.',
'sk' => 'Verejná stránka changelog (/changelog): Záznam zmien je teraz verejne prístupný na /changelog bez prihlásenia. Stránka obsahuje logo NationForge, odkaz na Facebook Programozás Kft., prepínače jazykov HU / EN / DE / RO / SK a tlačidlo Prihlásenia. Priamy odkaz na stránku bol pridaný na stránku prihlásenia správcu.'],
['hu' => 'Öt nyelvű changelog (HU / EN / DE / RO / SK): A verziókövetés oldal összes bejegyzése — verziószámok, dátumok, badge-ek és fejlesztési leírások — mind az öt támogatott nyelven jelenik meg a kiválasztott zászló alapján. A DE / RO / SK zászlókra kattintva az angolra esik vissza, ahol nincs külön fordítás.',
'en' => 'Five-language changelog (HU / EN / DE / RO / SK): All entries on the changelog page — version numbers, dates, badges and descriptions — are displayed in all five supported languages based on the selected flag. DE / RO / SK flags fall back to English where no dedicated translation is available.',
'de' => 'Fünfsprachiges Changelog (HU / EN / DE / RO / SK): Alle Einträge auf der Changelog-Seite — Versionsnummern, Daten, Badges und Beschreibungen — werden in allen fünf unterstützten Sprachen basierend auf der ausgewählten Flagge angezeigt. DE / RO / SK-Flags fallen auf Englisch zurück, wenn keine dedizierte Übersetzung verfügbar ist.',
'ro' => 'Changelog în cinci limbi (HU / EN / DE / RO / SK): Toate intrările de pe pagina de changelog — numere de versiune, date, insigne și descrieri — sunt afișate în toate cele cinci limbi suportate pe baza steagului selectat. Steagurile DE / RO / SK revin la engleză unde nu există traducere dedicată.',
'sk' => 'Päťjazyčný changelog (HU / EN / DE / RO / SK): Všetky záznamy na stránke changelog — čísla verzií, dátumy, odznaky a popisy — sú zobrazené vo všetkých piatich podporovaných jazykoch na základe vybranej vlajky. Vlajky DE / RO / SK sa vracajú k angličtine, kde nie je k dispozícii dedikovaný preklad.'],
['hu' => 'Audit napló dátum formázás javítása: Az AuditLog modell $timestamps = false beállítása miatt a created_at mező néha szövegként érkezett, ami format() on string hibát okozott. Javítás: \Carbon\Carbon::parse($log->created_at)->format(\'Y.m.d H:i\') a nézetben.',
'en' => 'Audit log date formatting fix: The AuditLog model\'s $timestamps = false setting caused the created_at field to sometimes arrive as a string, triggering a format() on string error. Fix: \Carbon\Carbon::parse($log->created_at)->format(\'Y.m.d H:i\') in the view.',
'de' => 'Fehlerbehebung bei der Datumsformatierung im Audit-Log: Die Einstellung $timestamps = false im AuditLog-Modell verursachte, dass das Feld created_at manchmal als String ankam und einen format() on string-Fehler auslöste. Behebung: \Carbon\Carbon::parse($log->created_at)->format(\'Y.m.d H:i\') in der Ansicht.',
'ro' => 'Remedierea formatării datei în jurnalul de audit: Setarea $timestamps = false a modelului AuditLog a cauzat ca câmpul created_at să ajungă uneori ca șir de caractere, declanșând o eroare format() on string. Remediere: \Carbon\Carbon::parse($log->created_at)->format(\'Y.m.d H:i\') în vizualizare.',
'sk' => 'Oprava formátovania dátumu v audit logu: Nastavenie $timestamps = false v modeli AuditLog spôsobilo, že pole created_at niekedy prišlo ako reťazec, čo vyvolalo chybu format() on string. Oprava: \Carbon\Carbon::parse($log->created_at)->format(\'Y.m.d H:i\') v pohľade.'],
],
],
[
'version' => 'v1.26.0 Pro',
'badge' => [
'text' => ['hu' => 'Pro', 'en' => 'Pro', 'de' => 'Pro', 'ro' => 'Pro', 'sk' => 'Pro'],
'style' => 'background:rgba(247,184,75,0.18);color:#946800;border:1px solid rgba(247,184,75,0.4);',
],
'date' => ['hu' => '2026. május 18.', 'en' => 'May 18, 2026', 'de' => '18. Mai 2026', 'ro' => '18 mai 2026', 'sk' => '18. mája 2026'],
'items' => [
['hu' => 'NationForge Pro repository elindítva: A nationforge-pro privát GitHub repó szinkronizálva a Community összes fejlesztésével (99 commit behúzva). A Pro verzió tartalmaz mindent ami a Community-ban van, kiegészítve a Pro-exkluzív funkciókkal.',
'en' => 'NationForge Pro repository launched: The nationforge-pro private GitHub repo was synchronised with all Community developments (99 commits merged in). The Pro version contains everything in Community, extended with Pro-exclusive features.',
'de' => 'NationForge Pro-Repository gestartet: Das private GitHub-Repo nationforge-pro wurde mit allen Community-Entwicklungen synchronisiert (99 Commits zusammengeführt). Die Pro-Version enthält alles aus der Community, erweitert um Pro-exklusive Funktionen.',
'ro' => 'Repository NationForge Pro lansat: Repo-ul privat GitHub nationforge-pro a fost sincronizat cu toate dezvoltările Community (99 de commit-uri îmbinate). Versiunea Pro conține tot ce există în Community, extins cu funcții exclusive Pro.',
'sk' => 'Repozitár NationForge Pro spustený: Súkromný GitHub repozitár nationforge-pro bol synchronizovaný so všetkými vývojmi Community (zlúčených 99 commitov). Verzia Pro obsahuje všetko z Community, rozšírená o funkcie exkluzívne pre Pro.'],
['hu' => 'Helyi Pro fejlesztői környezet (nationforge-pro.test): Az XAMPP Apache konfigurációban beállításra került egy dedikált VirtualHost, amely a nationforge-pro.test doménen, a Community-tól teljesen függetlenül szolgálja ki a Pro verziót. A .env, composer install, npm run build és az ASSET_URL konfiguráció teljes körűen elvégezve.',
'en' => 'Local Pro development environment (nationforge-pro.test): A dedicated VirtualHost was configured in the XAMPP Apache setup, serving the Pro version on the nationforge-pro.test domain, fully independent from the Community. The .env, composer install, npm run build and ASSET_URL configuration were completed in full.',
'de' => 'Lokale Pro-Entwicklungsumgebung (nationforge-pro.test): Ein dedizierter VirtualHost wurde in der XAMPP-Apache-Konfiguration eingerichtet, der die Pro-Version auf der Domain nationforge-pro.test völlig unabhängig von der Community bereitstellt. Die Konfiguration von .env, composer install, npm run build und ASSET_URL wurde vollständig durchgeführt.',
'ro' => 'Mediu local de dezvoltare Pro (nationforge-pro.test): Un VirtualHost dedicat a fost configurat în setarea Apache XAMPP, servind versiunea Pro pe domeniul nationforge-pro.test, complet independent față de Community. Configurația .env, composer install, npm run build și ASSET_URL a fost finalizată complet.',
'sk' => 'Lokálne vývojové prostredie Pro (nationforge-pro.test): Dedikovaný VirtualHost bol nakonfigurovaný v nastavení Apache XAMPP, ktorý obsluhuje verziu Pro na doméne nationforge-pro.test, úplne nezávisle od Community. Konfigurácia .env, composer install, npm run build a ASSET_URL bola úplne dokončená.'],
['hu' => 'sync-from-community.bat — egyetlen kattintásos szinkronizálás: A Pro könyvtárban elhelyezett szkript automatikusan végrehajtja a git fetch community + git merge community/main + git push origin main lépéseket. Merge konfliktus esetén leáll és útmutatót jelenít meg a manuális feloldáshoz.',
'en' => 'sync-from-community.bat — one-click sync: A script placed in the Pro directory automatically executes git fetch community + git merge community/main + git push origin main. In case of a merge conflict it stops and displays instructions for manual resolution.',
'de' => 'sync-from-community.bat — Synchronisierung mit einem Klick: Ein Skript im Pro-Verzeichnis führt automatisch git fetch community + git merge community/main + git push origin main aus. Bei einem Merge-Konflikt stoppt es und zeigt Anweisungen zur manuellen Lösung an.',
'ro' => 'sync-from-community.bat — sincronizare cu un singur clic: Un script plasat în directorul Pro execută automat git fetch community + git merge community/main + git push origin main. În caz de conflict de îmbinare, se oprește și afișează instrucțiuni pentru rezolvarea manuală.',
'sk' => 'sync-from-community.bat — synchronizácia jedným kliknutím: Skript umiestnený v adresári Pro automaticky vykoná git fetch community + git merge community/main + git push origin main. V prípade konfliktu zlúčenia sa zastaví a zobrazí pokyny na manuálne riešenie.'],
],
],
[
'version' => 'v1.25.0',
'badge' => [
'text' => ['hu' => 'Aktuális, Legújabb', 'en' => 'Current, Latest', 'de' => 'Aktuell, Neueste', 'ro' => 'Curent, Cel mai nou', 'sk' => 'Aktuálne, Najnovšie'],
'style' => 'background:rgba(10,179,156,0.1);color:#0ab39c;',
],
'date' => ['hu' => '2026. május 17.', 'en' => 'May 17, 2026', 'de' => '17. Mai 2026', 'ro' => '17 mai 2026', 'sk' => '17. mája 2026'],
'items' => [
['hu' => 'Google Calendar / iCal szinkronizáció: Nyilvános iCal feed (/events.ics) — az összes publikált esemény előfizethetővé vált bármilyen naptáralkalmazásban (Google Calendar, Apple Calendar, Outlook). Az Integrációk oldalon megjelenő URL egyetlen kattintással a Google Naptárba is hozzáadható.',
'en' => 'Google Calendar / iCal sync: Public iCal feed (/events.ics) — all published events are now subscribable in any calendar app (Google Calendar, Apple Calendar, Outlook). The URL shown on the Integrations page can be added to Google Calendar in a single click.', 'de' => 'Google Calendar / iCal-Synchronisation: Öffentlicher iCal-Feed (/events.ics) — alle veröffentlichten Ereignisse können nun in jeder Kalender-App abonniert werden (Google Calendar, Apple Calendar, Outlook). Die auf der Integrationsseite angezeigte URL kann mit einem Klick zu Google Calendar hinzugefügt werden.', 'ro' => 'Sincronizare Google Calendar / iCal: Feed iCal public (/events.ics) — toate evenimentele publicate pot fi acum abonate în orice aplicație de calendar (Google Calendar, Apple Calendar, Outlook). URL-ul afișat pe pagina Integrări poate fi adăugat la Google Calendar cu un singur clic.', 'sk' => 'Synchronizácia Google Calendar / iCal: Verejný iCal feed (/events.ics) — všetky zverejnené udalosti je teraz možné odoberať v ľubovoľnej kalendárovej aplikácii (Google Calendar, Apple Calendar, Outlook). URL zobrazená na stránke Integrácie sa dá pridať do Google Kalendára jediným kliknutím.'],
['hu' => 'Facebook Esemény közzétevő: A publikált esemény nézetében megjelent egy Közzétesz Facebookon gomb, amely a Graph API v19.0 segítségével létrehozza az eseményt a beállított Facebook Oldalon. Az Integrációk oldalon adható meg az Oldal ID és a Page Access Token.',
'en' => 'Facebook Event publisher: A Publish to Facebook button appears on published event pages, creating the event on the configured Facebook Page via Graph API v19.0. The Page ID and Page Access Token are configured on the Integrations page.', 'de' => 'Facebook-Ereignis-Veröffentlicher: Ein Auf Facebook veröffentlichen-Button erscheint auf veröffentlichten Ereignisseiten und erstellt das Ereignis auf der konfigurierten Facebook-Seite über die Graph API v19.0. Die Seiten-ID und der Seiten-Zugriffstoken werden auf der Integrationsseite konfiguriert.', 'ro' => 'Publisher de evenimente Facebook: Un buton Publică pe Facebook apare pe paginile de evenimente publicate, creând evenimentul pe Pagina Facebook configurată prin Graph API v19.0. ID-ul paginii și Token-ul de acces al paginii sunt configurate pe pagina Integrări.', 'sk' => 'Publikátor udalostí na Facebooku: Tlačidlo Zverejniť na Facebooku sa zobrazuje na stránkach zverejnených udalostí a vytvára udalosť na nakonfigurovanej stránke Facebook prostredníctvom Graph API v19.0. ID stránky a prístupový token stránky sa konfigurujú na stránke Integrácie.'],
['hu' => 'Zapier & Make (Integromat) integráció: A meglévő kimenő webhook rendszer (v1.24.0) az alapja. Az új Integrációk oldalon lépésről lépésre útmutató mutatja, hogyan kell Zapier Catch Hook és Make Custom Webhook triggert összekapcsolni a NationForge-zal — kód nélkül.',
'en' => 'Zapier & Make (Integromat) integration: Built on the existing outgoing webhook system (v1.24.0). The new Integrations page provides a step-by-step guide on how to connect Zapier Catch Hook and Make Custom Webhook triggers to NationForge — no code required.', 'de' => 'Zapier & Make (Integromat) Integration: Basiert auf dem bestehenden ausgehenden Webhook-System (v1.24.0). Die neue Integrationsseite bietet eine Schritt-für-Schritt-Anleitung zur Verbindung von Zapier Catch Hook und Make Custom Webhook-Triggern mit NationForge — kein Code erforderlich.', 'ro' => 'Integrare Zapier & Make (Integromat): Construit pe sistemul de webhook-uri de ieșire existent (v1.24.0). Noua pagină Integrări oferă un ghid pas cu pas despre cum să conectați Zapier Catch Hook și declanșatoarele Make Custom Webhook la NationForge — nu este necesar cod.', 'sk' => 'Integrácia Zapier & Make (Integromat): Postavená na existujúcom systéme odchádzajúcich webhookov (v1.24.0). Nová stránka Integrácie poskytuje podrobného sprievodcu, ako prepojiť Zapier Catch Hook a Make Custom Webhook spúšťače s NationForge — nevyžaduje sa žiadny kód.'],
['hu' => 'Integrációk menüpont a sidebarban: Az összes külső integráció egy dedikált Integrációk oldalon érhető el — Google Calendar URL másoló, Facebook token beállítás és a Zapier/Make útmutató egy helyen.',
'en' => 'Integrations menu item in sidebar: All external integrations are accessible from a dedicated Integrations page — Google Calendar URL copy, Facebook token configuration, and the Zapier/Make guide all in one place.', 'de' => 'Integrationen-Menüpunkt in der Seitenleiste: Alle externen Integrationen sind über eine dedizierte Integrationen-Seite zugänglich — Google Calendar URL-Kopie, Facebook-Token-Konfiguration und die Zapier/Make-Anleitung an einem Ort.', 'ro' => 'Element de meniu Integrări în bara laterală: Toate integrările externe sunt accesibile de pe o pagină dedicată Integrări — copierea URL-ului Google Calendar, configurarea token-ului Facebook și ghidul Zapier/Make, toate într-un singur loc.', 'sk' => 'Položka menu Integrácie v bočnom paneli: Všetky externé integrácie sú dostupné z dedikovanej stránky Integrácie — kopírovanie URL Google Kalendára, konfigurácia tokenu Facebooku a sprievodca Zapier/Make na jednom mieste.'],
],
],
[
'version' => 'v1.24.0',
'badge' => [
'text' => ['hu' => 'Új modul', 'en' => 'New module', 'de' => 'Neues Modul', 'ro' => 'Modul nou', 'sk' => 'Nový modul'],
'style' => 'background:rgba(64,81,137,0.1);color:#405189;',
],
'date' => ['hu' => '2026. május 17.', 'en' => 'May 17, 2026', 'de' => '17. Mai 2026', 'ro' => '17 mai 2026', 'sk' => '17. mája 2026'],
'items' => [
['hu' => 'Kimenő webhookok: Konfigurálható HTTP POST küldés tetszőleges URL-re rendszereseményekre. 12 eseménytípus: contact.*, event.*, donation.created, campaign.sent, task.*, drip.enrolled. HMAC-SHA256 aláírás (X-NationForge-Signature). Kézbesítési napló per-kísérlet státusszal, HTTP kóddal és válasz törzzsel. Automatikus újrakísérlet (3 alkalom, 60 másodperces visszatartással) queue-n. Sikertelen kézbesítések manuális újraküldése az admin felületről.',
'en' => 'Outgoing webhooks: Configurable HTTP POST to any URL on system events. 12 event types: contact.*, event.*, donation.created, campaign.sent, task.*, drip.enrolled. HMAC-SHA256 signing (X-NationForge-Signature). Delivery log with per-attempt status, HTTP code and response body. Automatic retry (3 attempts, 60 s backoff) via queue. Manual retry for failed deliveries from the admin UI.', 'de' => 'Ausgehende Webhooks: Konfigurierbares HTTP POST an eine beliebige URL bei Systemereignissen. 12 Ereignistypen: contact.*, event.*, donation.created, campaign.sent, task.*, drip.enrolled. HMAC-SHA256-Signierung (X-NationForge-Signature). Zustellungsprotokoll mit Status pro Versuch, HTTP-Code und Antworttext. Automatischer Wiederholungsversuch (3 Versuche, 60 s Backoff) über Queue. Manueller Wiederholungsversuch für fehlgeschlagene Zustellungen aus der Admin-Oberfläche.', 'ro' => 'Webhook-uri de ieșire: HTTP POST configurabil la orice URL la evenimentele sistemului. 12 tipuri de evenimente: contact.*, event.*, donation.created, campaign.sent, task.*, drip.enrolled. Semnare HMAC-SHA256 (X-NationForge-Signature). Jurnal de livrare cu starea per-tentativă, codul HTTP și corpul răspunsului. Reîncercare automată (3 tentative, 60 s backoff) prin coadă. Reîncercare manuală pentru livrările eșuate din interfața de administrare.', 'sk' => 'Odchádzajúce webhooky: Konfigurovateľný HTTP POST na ľubovoľnú URL pri systémových udalostiach. 12 typov udalostí: contact.*, event.*, donation.created, campaign.sent, task.*, drip.enrolled. Podpisovanie HMAC-SHA256 (X-NationForge-Signature). Protokol doručenia so stavom za pokus, HTTP kódom a telom odpovede. Automatické opakovanie (3 pokusy, 60 s backoff) cez frontu. Manuálne opakovanie pre neúspešné doručenia z administrátorského rozhrania.'],
],
],
[
'version' => 'v1.23.0',
'badge' => [
'text' => ['hu' => 'Fejlesztés', 'en' => 'Improvement', 'de' => 'Verbesserung', 'ro' => 'Îmbunătățire', 'sk' => 'Vylepšenie'],
'style' => 'background:rgba(64,81,137,0.1);color:#405189;',
],
'date' => ['hu' => '2026. május 17.', 'en' => 'May 17, 2026', 'de' => '17. Mai 2026', 'ro' => '17 mai 2026', 'sk' => '17. mája 2026'],
'items' => [
['hu' => 'Többnyelvű súgó (DE / RO / SK): A súgódokumentáció immár öt nyelven érhető el: magyar, angol, német, román és szlovák. Mind a 16 súgócikk teljes szövege le van fordítva. A nyelvváltó a súgó oldalsávjában érhető el — a kiválasztott nyelv azonnal érvényes.',
'en' => 'Multilingual help (DE / RO / SK): The help documentation is now available in five languages: Hungarian, English, German, Romanian and Slovak. All 16 help articles are fully translated. The language switcher is available in the help sidebar — the selected language takes effect immediately.', 'de' => 'Mehrsprachige Hilfe (DE / RO / SK): Die Hilfedokumentation ist jetzt in fünf Sprachen verfügbar: Ungarisch, Englisch, Deutsch, Rumänisch und Slowakisch. Alle 16 Hilfeartikel sind vollständig übersetzt. Der Sprachumschalter ist in der Hilfe-Seitenleiste verfügbar — die ausgewählte Sprache wirkt sofort.', 'ro' => 'Ajutor multilingv (DE / RO / SK): Documentația de ajutor este acum disponibilă în cinci limbi: maghiară, engleză, germană, română și slovacă. Toate cele 16 articole de ajutor sunt complet traduse. Selectorul de limbă este disponibil în bara laterală a ajutorului — limba selectată intră în vigoare imediat.', 'sk' => 'Viacjazyčná pomoc (DE / RO / SK): Dokumentácia pomocníka je teraz dostupná v piatich jazykoch: maďarčina, angličtina, nemčina, rumunčina a slovenčina. Všetkých 16 článkov pomocníka je plne preložených. Prepínač jazykov je dostupný v bočnom paneli pomocníka — vybraný jazyk sa uplatní okamžite.'],
['hu' => 'Adatbázis-séma bővítése: A help_articles táblához hat új nullable szöveges oszlop adódott: title_de, content_de, title_ro, content_ro, title_sk, content_sk.',
'en' => 'Database schema extension: Six new nullable text columns were added to the help_articles table: title_de, content_de, title_ro, content_ro, title_sk, content_sk.', 'de' => 'Datenbankschema-Erweiterung: Sechs neue nullable Textspalten wurden zur Tabelle help_articles hinzugefügt: title_de, content_de, title_ro, content_ro, title_sk, content_sk.', 'ro' => 'Extinderea schemei bazei de date: Șase noi coloane de text nullable au fost adăugate la tabelul help_articles: title_de, content_de, title_ro, content_ro, title_sk, content_sk.', 'sk' => 'Rozšírenie schémy databázy: Do tabuľky help_articles bolo pridaných šesť nových stĺpcov nullable textu: title_de, content_de, title_ro, content_ro, title_sk, content_sk.'],
['hu' => 'Súgószerkesztő — DE / RO / SK fülek: Az admin súgókezelő szerkesztő modáljában megjelent a Deutsch, Română és Slovenčina fül, így az összes nyelvi tartalom egy helyen szerkeszthető.',
'en' => 'Help editor — DE / RO / SK tabs: The admin help editor modal now includes Deutsch, Română and Slovenčina tabs, allowing all language content to be edited from one place.', 'de' => 'Hilfe-Editor — DE / RO / SK Tabs: Das Admin-Hilfe-Editor-Modal enthält jetzt Tabs für Deutsch, Română und Slovenčina, sodass alle Sprachinhalte von einem Ort aus bearbeitet werden können.', 'ro' => 'Editor ajutor — file DE / RO / SK: Modalul de editare al ajutorului de administrare include acum file pentru Deutsch, Română și Slovenčina, permițând editarea conținutului în toate limbile dintr-un singur loc.', 'sk' => 'Editor pomocníka — karty DE / RO / SK: Modálne okno editora pomocníka v administrácii teraz obsahuje karty Deutsch, Română a Slovenčina, čo umožňuje upravovať obsah vo všetkých jazykoch z jedného miesta.'],
['hu' => 'Képek szinkronizálása minden nyelvre: A HelpSyncImagesAllLangsSeeder minden olyan cikknél, amelynek magyar tartalma képernyőképpel kezdődik, automatikusan előrészíti ugyanazt a képet a DE / RO / SK tartalomba is — duplikáció nélkül.',
'en' => 'Image sync across all languages: The HelpSyncImagesAllLangsSeeder automatically prepends the same screenshot to DE / RO / SK content for every article whose Hungarian content starts with a screenshot image — without duplication.', 'de' => 'Bildsynchronisation für alle Sprachen: Der HelpSyncImagesAllLangsSeeder fügt automatisch denselben Screenshot dem DE / RO / SK-Inhalt für jeden Artikel voran, dessen ungarischer Inhalt mit einem Screenshot-Bild beginnt — ohne Duplizierung.', 'ro' => 'Sincronizarea imaginilor pentru toate limbile: HelpSyncImagesAllLangsSeeder adaugă automat același screenshot la conținutul DE / RO / SK pentru fiecare articol al cărui conținut maghiar începe cu o imagine screenshot — fără duplicare.', 'sk' => 'Synchronizácia obrázkov pre všetky jazyky: HelpSyncImagesAllLangsSeeder automaticky pridáva rovnaký screenshot pred obsah DE / RO / SK pre každý článok, ktorého maďarský obsah začína obrázkom screenshotu — bez duplicity.'],
],
],
[
'version' => 'v1.22.0',
'badge' => [
'text' => ['hu' => 'Fejlesztés', 'en' => 'Improvement', 'de' => 'Verbesserung', 'ro' => 'Îmbunătățire', 'sk' => 'Vylepšenie'],
'style' => 'background:rgba(64,81,137,0.1);color:#405189;',
],
'date' => ['hu' => '2026. május 16.', 'en' => 'May 16, 2026', 'de' => '16. Mai 2026', 'ro' => '16 mai 2026', 'sk' => '16. mája 2026'],
'items' => [
['hu' => 'Email megnyitás nyomon követése (tracking pixel): Minden elküldött kampánylevélbe és drip-levélbe egy láthatatlan 1×1 pixeles GIF-kép kerül. Ha a fogadó megnyitja az emailt, a kép lekérése rögzíti a megnyitás tényét. Az email_sends és drip_sends táblákhoz opened_at (nullable timestamp) mező adódott; a kampány összesítő opened_count számlálója automatikusan növekszik.',
'en' => 'Email open tracking (pixel): Every sent campaign email and drip email now contains an invisible 1×1 GIF image. When the recipient opens the email, the image request records the open event. An opened_at (nullable timestamp) column was added to email_sends and drip_sends; the campaign summary opened_count counter increments automatically.', 'de' => 'E-Mail-Öffnungs-Tracking (Pixel): Jede gesendete Kampagnen-E-Mail und Drip-E-Mail enthält nun ein unsichtbares 1×1 GIF-Bild. Wenn der Empfänger die E-Mail öffnet, zeichnet die Bildanfrage das Öffnungsereignis auf. Eine opened_at-Spalte (nullable Timestamp) wurde zu email_sends und drip_sends hinzugefügt; der Kampagnenzusammenfassungs-Zähler opened_count wird automatisch erhöht.', 'ro' => 'Urmărirea deschiderilor de e-mail (pixel): Fiecare e-mail de campanie și e-mail drip trimis conține acum o imagine GIF invizibilă de 1×1. Când destinatarul deschide e-mailul, cererea de imagine înregistrează evenimentul de deschidere. O coloană opened_at (timestamp nullable) a fost adăugată la email_sends și drip_sends; contorul de rezumat al campaniei opened_count se incrementează automat.', 'sk' => 'Sledovanie otvorení e-mailov (pixel): Každý odoslaný e-mail kampane a drip e-mail teraz obsahuje neviditeľný obrázok GIF 1×1. Keď príjemca otvorí e-mail, požiadavka na obrázok zaznamená udalosť otvorenia. Stĺpec opened_at (nullable timestamp) bol pridaný do email_sends a drip_sends; počítadlo súhrnu kampane opened_count sa automaticky zvyšuje.'],
['hu' => 'Link-kattintás nyomon követése: Az emailben lévő összes külső link egy átirányító proxy URL-en keresztül kerül kiszolgálásra (/track/click/{token}?to=...). Kattintáskor a rendszer rögzíti a clicked_at időpontot és növeli a kampány clicked_count számlálóját, majd átirányít az eredeti célra. Az unsubscribe és nyomkövetési linkek kizárva az átírásból.',
'en' => 'Link click tracking: All external links in emails are served through a redirect proxy URL (/track/click/{token}?to=...). On click, the system records the clicked_at timestamp and increments the campaign\'s clicked_count counter, then redirects to the original destination. Unsubscribe and tracking links are excluded from rewriting.', 'de' => 'Link-Klick-Tracking: Alle externen Links in E-Mails werden über eine Umleitungs-Proxy-URL (/track/click/{token}?to=...) bereitgestellt. Beim Klick zeichnet das System den clicked_at-Zeitstempel auf und erhöht den clicked_count-Zähler der Kampagne, dann leitet es zum ursprünglichen Ziel weiter. Abmelde- und Tracking-Links sind vom Umschreiben ausgenommen.', 'ro' => 'Urmărirea clicurilor pe linkuri: Toate linkurile externe din e-mailuri sunt servite printr-un URL proxy de redirecționare (/track/click/{token}?to=...). La clic, sistemul înregistrează timestamp-ul clicked_at și incrementează contorul clicked_count al campaniei, apoi redirecționează către destinația originală. Linkurile de dezabonare și urmărire sunt excluse din rescriere.', 'sk' => 'Sledovanie kliknutí na odkazy: Všetky externé odkazy v e-mailoch sú obsluhované cez URL presmerúvaného proxy (/track/click/{token}?to=...). Pri kliknutí systém zaznamená časovú pečiatku clicked_at a zvýši počítadlo clicked_count kampane, potom presmeruje na pôvodný cieľ. Odkazy na odhlásenie a sledovacie odkazy sú vylúčené z prepisovania.'],
['hu' => 'Megnyitások és kattintások megjelenítése a kampánylistában: Az Email kampányok táblázatában két új oszlop jelent meg: Megnyitások (abszolút szám + százalékos arány) és Kattintások — zöld kiemelő színnel. A statisztikák valós adatbázis-adatokon alapulnak.',
'en' => 'Opens and clicks displayed in campaign list: Two new columns appear in the Email Campaigns table: Opens (absolute count + percentage rate) and Clicks — highlighted in green. Statistics are based on live database data.', 'de' => 'Öffnungen und Klicks in der Kampagnenliste angezeigt: Zwei neue Spalten erscheinen in der E-Mail-Kampagnentabelle: Öffnungen (absolute Anzahl + prozentuale Rate) und Klicks — grün hervorgehoben. Statistiken basieren auf Live-Datenbankdaten.', 'ro' => 'Deschideri și clicuri afișate în lista de campanii: Două coloane noi apar în tabelul Campanii de e-mail: Deschideri (număr absolut + rată procentuală) și Clicuri — evidențiate în verde. Statisticile se bazează pe date live din baza de date.', 'sk' => 'Otvorenia a kliknutia zobrazené v zozname kampaní: V tabuľke E-mailových kampaní sa objavia dva nové stĺpce: Otvorenia (absolútny počet + percentuálna miera) a Kliknutia — zvýraznené zelenou farbou. Štatistiky sú založené na živých databázových dátach.'],
['hu' => 'EmailTrackingService: Új App\\Services\\EmailTrackingService osztály, amely egységesen kezeli a link-csomagolást (wrapLinks()), a pixel-befűzést (injectPixel()) és a teljes folyamatot (process()). A base64-kódolt GIF konstansként tárolódik — sem fájlrendszer, sem HTTP-lekérés nem szükséges a pixelhez.',
'en' => 'EmailTrackingService: New App\\Services\\EmailTrackingService class that uniformly handles link wrapping (wrapLinks()), pixel injection (injectPixel()) and the full pipeline (process()). The base64-encoded GIF is stored as a constant — no filesystem or HTTP request needed for the pixel.', 'de' => 'EmailTrackingService: Neue Klasse App\\Services\\EmailTrackingService, die einheitlich Link-Wrapping (wrapLinks()), Pixel-Injektion (injectPixel()) und die gesamte Pipeline (process()) verarbeitet. Das base64-kodierte GIF wird als Konstante gespeichert — kein Dateisystem oder HTTP-Anfrage für das Pixel erforderlich.', 'ro' => 'EmailTrackingService: Noua clasă App\\Services\\EmailTrackingService care gestionează uniform înfășurarea linkurilor (wrapLinks()), injectarea pixelilor (injectPixel()) și întreaga conductă (process()). GIF-ul codificat base64 este stocat ca o constantă — nu este necesară nicio cerere de sistem de fișiere sau HTTP pentru pixel.', 'sk' => 'EmailTrackingService: Nová trieda App\\Services\\EmailTrackingService, ktorá jednotne spracúva zabalenie odkazov (wrapLinks()), injekciu pixelov (injectPixel()) a celý pipeline (process()). GIF zakódovaný v base64 je uložený ako konštanta — pre pixel nie je potrebný žiadny súborový systém ani HTTP požiadavka.'],
['hu' => 'TrackingController (nyilvános végpontok): GET /track/open/{token} — visszaadja a GIF pixelt és frissíti az opened_at mezőt; GET /track/click/{token}?to=URL — átirányít a célra és frissíti a clicked_at mezőt. Biztonsági ellenőrzés: a to paraméter csak érvényes abszolút URL esetén kerül átirányításra (FILTER_VALIDATE_URL).',
'en' => 'TrackingController (public endpoints): GET /track/open/{token} — returns the GIF pixel and updates the opened_at field; GET /track/click/{token}?to=URL — redirects to the destination and updates the clicked_at field. Security check: the to parameter is only redirected for valid absolute URLs (FILTER_VALIDATE_URL).', 'de' => 'TrackingController (öffentliche Endpunkte): GET /track/open/{token} — gibt den GIF-Pixel zurück und aktualisiert das Feld opened_at; GET /track/click/{token}?to=URL — leitet zum Ziel weiter und aktualisiert das Feld clicked_at. Sicherheitsprüfung: Der Parameter to wird nur für gültige absolute URLs weitergeleitet (FILTER_VALIDATE_URL).', 'ro' => 'TrackingController (puncte finale publice): GET /track/open/{token} — returnează pixelul GIF și actualizează câmpul opened_at; GET /track/click/{token}?to=URL — redirecționează către destinație și actualizează câmpul clicked_at. Verificare de securitate: parametrul to este redirecționat doar pentru URL-uri absolute valide (FILTER_VALIDATE_URL).', 'sk' => 'TrackingController (verejné endpointy): GET /track/open/{token} — vráti GIF pixel a aktualizuje pole opened_at; GET /track/click/{token}?to=URL — presmeruje na cieľ a aktualizuje pole clicked_at. Bezpečnostná kontrola: parameter to je presmerovaný iba pre platné absolútne URL (FILTER_VALIDATE_URL).'],
],
],
[
'version' => 'v1.21.0',
'badge' => [
'text' => ['hu' => 'Fejlesztés', 'en' => 'Improvement', 'de' => 'Verbesserung', 'ro' => 'Îmbunătățire', 'sk' => 'Vylepšenie'],
'style' => 'background:rgba(64,81,137,0.1);color:#405189;',
],
'date' => ['hu' => '2026. május 16.', 'en' => 'May 16, 2026', 'de' => '16. Mai 2026', 'ro' => '16 mai 2026', 'sk' => '16. mája 2026'],
'items' => [
['hu' => 'Egyérintéses leiratkozási oldal (publikus): Minden hírlevél-feliratkozónak egyedi unsubscribe_token kerül generálásra (meglévő rekordokra visszatöltő migráció is fut). Az emailekben megjelenik az Leiratkozás / Unsubscribe hivatkozás, amely az /unsubscribe/{token} oldalra vezet. Az oldal 4 állapotot kezel: aktív feliratkozó / leiratkozott / visszairatkozás opció / ismeretlen token.',
'en' => 'One-click unsubscribe page (public): Every newsletter subscriber receives a unique unsubscribe_token (a backfill migration runs for existing records). Emails now include an Unsubscribe link pointing to /unsubscribe/{token}. The page handles 4 states: active subscriber / unsubscribed / re-subscribe option / unknown token.', 'de' => 'Ein-Klick-Abmeldeseite (öffentlich): Jeder Newsletter-Abonnent erhält ein einzigartiges unsubscribe_token (eine Backfill-Migration läuft für bestehende Datensätze). E-Mails enthalten nun einen Abmelden-Link, der auf /unsubscribe/{token} zeigt. Die Seite verarbeitet 4 Zustände: aktiver Abonnent / abgemeldet / Wiederanmeldeoption / unbekanntes Token.', 'ro' => 'Pagina de dezabonare cu un singur clic (publică): Fiecare abonat la newsletter primește un unsubscribe_token unic (o migrare de completare rulează pentru înregistrările existente). E-mailurile includ acum un link de Dezabonare care indică spre /unsubscribe/{token}. Pagina gestionează 4 stări: abonat activ / dezabonat / opțiune de reabonare / token necunoscut.', 'sk' => 'Stránka odhlásenia jedným kliknutím (verejná): Každý odberateľ newslettera dostane jedinečný unsubscribe_token (pre existujúce záznamy prebehne dopĺňacia migrácia). E-maily teraz obsahujú odkaz Odhlásiť sa smerujúci na /unsubscribe/{token}. Stránka spracúva 4 stavy: aktívny odberateľ / odhlásený / možnosť opätovného prihlásenia / neznámy token.'],
['hu' => 'RFC 8058 List-Unsubscribe fejlécek: Az elküldött emailek tartalmazzák a List-Unsubscribe és List-Unsubscribe-Post: List-Unsubscribe=One-Click fejléceket a Symfony using: callback-en keresztül. Ez lehetővé teszi a modernebb levelezők (Gmail, Outlook) számára, hogy egy kattintással leiratkozási gombot jelenítsenek meg.',
'en' => 'RFC 8058 List-Unsubscribe headers: Sent emails now include List-Unsubscribe and List-Unsubscribe-Post: List-Unsubscribe=One-Click headers via a Symfony using: callback. This allows modern email clients (Gmail, Outlook) to render a one-click unsubscribe button.', 'de' => 'RFC 8058 List-Unsubscribe-Header: Gesendete E-Mails enthalten nun List-Unsubscribe- und List-Unsubscribe-Post: List-Unsubscribe=One-Click-Header über einen Symfony using:-Callback. Dies ermöglicht modernen E-Mail-Clients (Gmail, Outlook) das Rendern einer Ein-Klick-Abmeldetaste.', 'ro' => 'Anteturi RFC 8058 List-Unsubscribe: E-mailurile trimise includ acum anteturi List-Unsubscribe și List-Unsubscribe-Post: List-Unsubscribe=One-Click printr-un callback Symfony using:. Aceasta permite clienților de e-mail moderni (Gmail, Outlook) să afișeze un buton de dezabonare cu un singur clic.', 'sk' => 'RFC 8058 hlavičky List-Unsubscribe: Odoslané e-maily teraz obsahujú hlavičky List-Unsubscribe a List-Unsubscribe-Post: List-Unsubscribe=One-Click cez Symfony callback using:. To umožňuje moderným e-mailovým klientom (Gmail, Outlook) zobraziť tlačidlo odhlásenia jedným kliknutím.'],
['hu' => 'Visszairatkozási lehetőség: A leiratkozott állapotban az oldal egy Visszairatkozás gombot is megjelenít. A visszairatkozás egy külön POST végponton (/unsubscribe/{token}/resubscribe) keresztül valósul meg, és az is_subscribed értéket true-ra állítja.',
'en' => 'Re-subscribe option: On the unsubscribed state, the page also shows a Re-subscribe button. Re-subscribing is handled through a separate POST endpoint (/unsubscribe/{token}/resubscribe) that sets is_subscribed back to true.', 'de' => 'Wiederanmeldeoption: Im abgemeldeten Zustand zeigt die Seite auch eine Erneut anmelden-Schaltfläche. Die Wiederanmeldung wird über einen separaten POST-Endpunkt (/unsubscribe/{token}/resubscribe) verarbeitet, der is_subscribed wieder auf true setzt.', 'ro' => 'Opțiunea de reabonare: În starea dezabonat, pagina afișează și un buton Reabonare. Reabonarea este gestionată printr-un endpoint POST separat (/unsubscribe/{token}/resubscribe) care setează is_subscribed înapoi la true.', 'sk' => 'Možnosť opätovného prihlásenia: V stave odhlásenia stránka zobrazuje aj tlačidlo Opätovne sa prihlásiť. Opätovné prihlásenie sa spracúva cez samostatný POST endpoint (/unsubscribe/{token}/resubscribe), ktorý nastaví is_subscribed späť na true.'],
],
],
[
'version' => 'v1.20.0',
'badge' => [
'text' => ['hu' => 'Új modul', 'en' => 'New module', 'de' => 'Neues Modul', 'ro' => 'Modul nou', 'sk' => 'Nový modul'],
'style' => 'background:rgba(64,81,137,0.1);color:#405189;',
],
'date' => ['hu' => '2026. május 16.', 'en' => 'May 16, 2026', 'de' => '16. Mai 2026', 'ro' => '16 mai 2026', 'sk' => '16. mája 2026'],
'items' => [
['hu' => 'Automatizált csepp (drip) kampány modul: Új /admin/drip-campaigns oldal. Minden drip kampányhoz tetszőleges számú lépés adható meg — tárgy, feladó, HTML tartalom, és az előző lépéstől eltelt napok száma. Indítók: Manuális, Csoporthoz csatlakozás, Tag hozzáadás.',
'en' => 'Automated drip campaign module: New /admin/drip-campaigns page. Each drip campaign supports an unlimited number of steps — subject, sender, HTML content, and delay in days from the previous step. Triggers: Manual, Group join, Tag added.', 'de' => 'Automatisiertes Drip-Kampagnen-Modul: Neue Seite /admin/drip-campaigns. Jede Drip-Kampagne unterstützt eine unbegrenzte Anzahl von Schritten — Betreff, Absender, HTML-Inhalt und Verzögerung in Tagen vom vorherigen Schritt. Auslöser: Manuell, Gruppe beitreten, Tag hinzugefügt.', 'ro' => 'Modul de campanie drip automatizată: Noua pagină /admin/drip-campaigns. Fiecare campanie drip suportă un număr nelimitat de pași — subiect, expeditor, conținut HTML și întârziere în zile față de pasul anterior. Declanșatoare: Manual, Alăturare la grup, Tag adăugat.', 'sk' => 'Modul automatizovanej drip kampane: Nová stránka /admin/drip-campaigns. Každá drip kampaň podporuje neobmedzený počet krokov — predmet, odosielateľ, HTML obsah a oneskorenie v dňoch od predchádzajúceho kroku. Spúšťače: Manuálne, Vstup do skupiny, Pridaný tag.'],
['hu' => 'Drip beiratkozás és feldolgozás: Kontaktok manuálisan (admin gomb) vagy automatikusan (trigger) iratkozhatnak be egy drip kampányba. Az drip:process Artisan parancs 15 percenként fut: megkeresi az esedékes beiratkozásokat, elküldi a következő lépést, és beállítja a következő küldési időpontot. A kampány végeztével a beiratkozás completed státuszt kap.',
'en' => 'Drip enrollment and processing: Contacts can enroll in a drip campaign manually (admin button) or automatically (via trigger). The drip:process Artisan command runs every 15 minutes: it finds due enrollments, sends the next step, and sets the next send time. When the campaign ends, the enrollment receives completed status.', 'de' => 'Drip-Einschreibung und -Verarbeitung: Kontakte können sich manuell (Admin-Schaltfläche) oder automatisch (über Auslöser) in eine Drip-Kampagne einschreiben. Der Artisan-Befehl drip:process läuft alle 15 Minuten: Er findet fällige Einschreibungen, sendet den nächsten Schritt und setzt die nächste Sendezeit. Wenn die Kampagne endet, erhält die Einschreibung den Status abgeschlossen.', 'ro' => 'Înregistrare și procesare drip: Contactele se pot înscrie într-o campanie drip manual (buton de admin) sau automat (prin declanșator). Comanda Artisan drip:process rulează la fiecare 15 minute: găsește înregistrările scadente, trimite pasul următor și setează ora de trimitere următoare. Când campania se termină, înregistrarea primește starea finalizat.', 'sk' => 'Registrácia a spracovanie drip: Kontakty sa môžu zaregistrovať do drip kampane manuálne (tlačidlo admina) alebo automaticky (cez spúšťač). Artisan príkaz drip:process beží každých 15 minút: nájde splatné registrácie, odošle ďalší krok a nastaví nasledujúci čas odoslania. Keď kampaň skončí, registrácia dostane stav dokončené.'],
['hu' => 'Drip kampány admin felület: A részletoldalon 4 statisztikai kártya (aktív / lezárt / lemondott beiratkozások, összes lépés), szerkeszthető lépéslista modal alapon, beiratkozások listája emberenként és lépésenként. Kampány aktiválása / szüneteltetése egy kattintással.',
'en' => 'Drip campaign admin interface: The detail page shows 4 stat cards (active / completed / cancelled enrollments, total steps), editable step list via modals, and enrollments list per person and per step. Campaign activation / pausing with a single click.', 'de' => 'Drip-Kampagnen-Admin-Oberfläche: Die Detailseite zeigt 4 Statistikkarten (aktive / abgeschlossene / stornierte Einschreibungen, Gesamtschritte), bearbeitbare Schrittliste über Modals und Einschreibungsliste pro Person und Schritt. Kampagnenaktivierung / -pause mit einem Klick.', 'ro' => 'Interfața de administrare a campaniei drip: Pagina de detalii afișează 4 carduri de statistici (înregistrări active / finalizate / anulate, total pași), lista de pași editabilă prin modals și lista de înregistrări per persoană și per pas. Activarea / întreruperea campaniei cu un singur clic.', 'sk' => 'Administrátorské rozhranie drip kampane: Stránka s podrobnosťami zobrazuje 4 štatistické karty (aktívne / dokončené / zrušené registrácie, celkový počet krokov), upraviteľný zoznam krokov cez modals a zoznam registrácií na osobu a krok. Aktivácia / pozastavenie kampane jedným kliknutím.'],
['hu' => 'Adatbázis-séma: Három új tábla: drip_campaigns (kampány fejadatok, trigger típus és cél-csoport/tag), drip_steps (lépések pozíció szerint rendezve), drip_enrollments (beiratkozások státusszal, next_send_at indexszel), valamint drip_sends (küldési nyomkövetés, tracking tokennel).',
'en' => 'Database schema: Three new tables: drip_campaigns (campaign header, trigger type and target group/tag), drip_steps (steps ordered by position), drip_enrollments (enrollments with status, next_send_at index), and drip_sends (send tracking with tracking token).', 'de' => 'Datenbankschema: Drei neue Tabellen: drip_campaigns (Kampagnenkopf, Auslösertyp und Zielgruppe/Tag), drip_steps (nach Position geordnete Schritte), drip_enrollments (Einschreibungen mit Status, next_send_at-Index) und drip_sends (Versand-Tracking mit Tracking-Token).', 'ro' => 'Schema bazei de date: Trei tabele noi: drip_campaigns (antetul campaniei, tipul declanșatorului și grupul/tag-ul țintă), drip_steps (pași ordonați după poziție), drip_enrollments (înregistrări cu stare, index next_send_at) și drip_sends (urmărirea trimiterilor cu token de urmărire).', 'sk' => 'Schéma databázy: Tri nové tabuľky: drip_campaigns (hlavička kampane, typ spúšťača a cieľová skupina/tag), drip_steps (kroky zoradené podľa pozície), drip_enrollments (registrácie so stavom, index next_send_at) a drip_sends (sledovanie odosielania so sledovacím tokenom).'],
],
],
[
'version' => 'v1.19.0',
'badge' => [
'text' => ['hu' => 'Fejlesztés', 'en' => 'Improvement', 'de' => 'Verbesserung', 'ro' => 'Îmbunătățire', 'sk' => 'Vylepšenie'],
'style' => 'background:rgba(64,81,137,0.1);color:#405189;',
],
'date' => ['hu' => '2026. május 16.', 'en' => 'May 16, 2026', 'de' => '16. Mai 2026', 'ro' => '16 mai 2026', 'sk' => '16. mája 2026'],
'items' => [
['hu' => 'Kampány célcsoport szegmentálás: A kampány létrehozás és szerkesztés modalban megjelent a Célcsoport szekció. Az admin négy opció közül választhat: Összes hírlevél feliratkozó, Csoport tagjai (több csoport is kijelölhető), Tagelt kontaktok (több tag), Tag státusz szerint (több státusz). A szűrőkombináció JSON formában tárolódik az email_campaigns.segment_filters oszlopban.',
'en' => 'Campaign audience segmentation: A Audience section appeared in the campaign create and edit modal. Admins can choose from four options: All newsletter subscribers, Group members (multiple groups selectable), Tagged contacts (multiple tags), By member status (multiple statuses). The filter combination is stored as JSON in the email_campaigns.segment_filters column.', 'de' => 'Kampagnenzielgruppen-Segmentierung: Ein Abschnitt Zielgruppe erschien im Kampagnenerstellungs- und -bearbeitungsmodal. Admins können aus vier Optionen wählen: Alle Newsletter-Abonnenten, Gruppenmitglieder (mehrere Gruppen auswählbar), Getaggte Kontakte (mehrere Tags), Nach Mitgliedsstatus (mehrere Status). Die Filterkombination wird als JSON in der Spalte email_campaigns.segment_filters gespeichert.', 'ro' => 'Segmentarea publicului campaniei: O secțiune Public a apărut în modalul de creare și editare a campaniei. Administratorii pot alege din patru opțiuni: Toți abonații la newsletter, Membri ai grupului (mai multe grupuri selectabile), Contacte cu tag-uri (mai multe tag-uri), După statutul membrului (mai multe statute). Combinația de filtre este stocată ca JSON în coloana email_campaigns.segment_filters.', 'sk' => 'Segmentácia publika kampane: V modálnom okne vytvorenia a úpravy kampane sa objavila sekcia Publikum. Správcovia si môžu vybrať zo štyroch možností: Všetci odberatelia newslettera, Členovia skupiny (vyberateľné viacero skupín), Kontakty s tagom (viacero tagov), Podľa stavu člena (viacero stavov). Kombinácia filtrov sa ukladá ako JSON do stĺpca email_campaigns.segment_filters.'],
['hu' => 'Élő fogadószám előnézet: Szegmentációs beállítás módosításakor az oldal AJAX-on keresztül (GET /admin/campaigns/recipient-count) valós időben kéri le a becsült fogadók számát, és 500 ms-os debounce-szal jeleníti meg. A kampánylistában megjelent a Szegmens oszlop a típus jelzésével.',
'en' => 'Live recipient count preview: When the segmentation setting changes, the page fetches the estimated recipient count in real time via AJAX (GET /admin/campaigns/recipient-count) with a 500 ms debounce, and displays it immediately. A Segment column appeared in the campaign list indicating the type.', 'de' => 'Live-Empfängeranzahl-Vorschau: Wenn sich die Segmentierungseinstellung ändert, ruft die Seite die geschätzte Empfängeranzahl in Echtzeit über AJAX (GET /admin/campaigns/recipient-count) mit einem 500-ms-Debounce ab und zeigt sie sofort an. In der Kampagnenliste erschien eine Spalte Segment mit Angabe des Typs.', 'ro' => 'Previzualizarea în timp real a numărului de destinatari: Când setarea de segmentare se modifică, pagina preia numărul estimat de destinatari în timp real prin AJAX (GET /admin/campaigns/recipient-count) cu un debounce de 500 ms și îl afișează imediat. O coloană Segment a apărut în lista de campanii indicând tipul.', 'sk' => 'Živý náhľad počtu príjemcov: Keď sa zmení nastavenie segmentácie, stránka načíta odhadovaný počet príjemcov v reálnom čase cez AJAX (GET /admin/campaigns/recipient-count) s 500 ms debouncingom a zobrazí ho okamžite. V zozname kampaní sa objavil stĺpec Segment s uvedením typu.'],
['hu' => 'buildRecipientsQuery() metódus az EmailCampaign modellen: Egységes lekérdezés-építő, amely a segment_filters JSON alapján szűri a feliratkozott, érvényes email-lel rendelkező kontaktokat — csoportszűrő esetén whereHas(\'groups\'), tagszűrőnél whereHas(\'tags\'), státuszszűrőnél whereIn(\'status\').',
'en' => 'buildRecipientsQuery() method on EmailCampaign model: A unified query builder that filters subscribed contacts with valid emails based on the segment_filters JSON — using whereHas(\'groups\') for group filter, whereHas(\'tags\') for tag filter, whereIn(\'status\') for status filter.', 'de' => 'buildRecipientsQuery()-Methode am EmailCampaign-Modell: Ein einheitlicher Query-Builder, der abonnierte Kontakte mit gültigen E-Mails basierend auf dem segment_filters-JSON filtert — mit whereHas(\'groups\') für Gruppenfilter, whereHas(\'tags\') für Tag-Filter, whereIn(\'status\') für Statusfilter.', 'ro' => 'Metoda buildRecipientsQuery() pe modelul EmailCampaign: Un constructor de interogări unificat care filtrează contactele abonate cu e-mailuri valide pe baza JSON-ului segment_filters — folosind whereHas(\'groups\') pentru filtrul de grup, whereHas(\'tags\') pentru filtrul de tag, whereIn(\'status\') pentru filtrul de stare.', 'sk' => 'Metóda buildRecipientsQuery() na modeli EmailCampaign: Unifikovaný tvorca dotazov, ktorý filtruje prihlásených kontaktov s platnými e-mailmi na základe JSON segment_filters — pomocou whereHas(\'groups\') pre filter skupiny, whereHas(\'tags\') pre filter tagov, whereIn(\'status\') pre filter stavu.'],
],
],
[
'version' => 'v1.18.0',
'badge' => [
'text' => ['hu' => 'Fejlesztés', 'en' => 'Improvement', 'de' => 'Verbesserung', 'ro' => 'Îmbunătățire', 'sk' => 'Vylepšenie'],
'style' => 'background:rgba(64,81,137,0.1);color:#405189;',
],
'date' => ['hu' => '2026. május 16.', 'en' => 'May 16, 2026', 'de' => '16. Mai 2026', 'ro' => '16 mai 2026', 'sk' => '16. mája 2026'],
'items' => [
['hu' => 'Email sablonkönyvtár: Új /admin/email-templates oldal, amely kártyás elrendezésben mutatja a beépített (Minimál, Hírlevél, Bejelentés, Promóciós) és az egyéni sablonokat. Minden sablon szerkeszthető, előnézhető (iframe modal) és törlhető (kivéve a beépítetteket).',
'en' => 'Email template library: New /admin/email-templates page displaying built-in (Minimal, Newsletter, Announcement, Promotional) and custom templates in card layout. Every template can be edited, previewed (iframe modal) and deleted (except built-ins).', 'de' => 'E-Mail-Vorlagenbibliothek: Neue Seite /admin/email-templates mit integrierten (Minimal, Newsletter, Ankündigung, Werbung) und benutzerdefinierten Vorlagen im Kartenlayout. Jede Vorlage kann bearbeitet, vorgeschaut (iframe-Modal) und gelöscht werden (außer integrierten).', 'ro' => 'Biblioteca de șabloane de e-mail: Noua pagină /admin/email-templates afișând șabloane integrate (Minimal, Newsletter, Anunț, Promoțional) și personalizate în aspect card. Fiecare șablon poate fi editat, previzualizat (modal iframe) și șters (cu excepția celor integrate).', 'sk' => 'Knižnica e-mailových šablón: Nová stránka /admin/email-templates zobrazujúca vstavané (Minimálna, Newsletter, Oznámenie, Propagačná) a vlastné šablóny v rozložení kariet. Každú šablónu je možné upraviť, zobraziť náhľad (iframe modal) a odstrániť (okrem vstavaných).'],
['hu' => 'Sablon betöltése a kampányszerkesztőbe: A kampány létrehozás és szerkesztés modalban megjelent a „Sablon betöltése" gomb. Megnyit egy sablonválasztó modalt, amelyből egy kattintással a kiválasztott sablon HTML tartalma betöltődik a szerkesztőbe. Az összes elérhető sablon listaszerűen és részletes előnézettel tekinthető meg.',
'en' => 'Loading a template into the campaign editor: A "Use template" button appeared in the campaign create and edit modal. It opens a template picker modal, from which a single click loads the selected template\'s HTML content into the editor. All available templates are listed with a detailed preview.', 'de' => 'Vorlage in den Kampagneneditor laden: Im Kampagnenerstellungs- und -bearbeitungsmodal erschien eine Schaltfläche "Vorlage verwenden". Sie öffnet ein Vorlagenauswahl-Modal, aus dem ein einziger Klick den HTML-Inhalt der ausgewählten Vorlage in den Editor lädt. Alle verfügbaren Vorlagen werden mit einer detaillierten Vorschau aufgelistet.', 'ro' => 'Încărcarea unui șablon în editorul de campanie: Un buton "Folosiți șablonul" a apărut în modalul de creare și editare a campaniei. Acesta deschide un modal de selectare a șablonului, din care un singur clic încarcă conținutul HTML al șablonului selectat în editor. Toate șabloanele disponibile sunt listate cu o previzualizare detaliată.', 'sk' => 'Načítanie šablóny do editora kampane: V modálnom okne vytvorenia a úpravy kampane sa objavilo tlačidlo "Použiť šablónu". Otvára modálny výber šablóny, z ktorého jediné kliknutie načíta HTML obsah vybranej šablóny do editora. Všetky dostupné šablóny sú uvedené s podrobným náhľadom.'],
['hu' => 'Beépített sablonok (seeder): A telepítéskor 4 professzionális beépített sablon kerül az adatbázisba automatikusan, amelyek szervezeti arculathoz testreszabhatók. Az email_templates tábla tartalmazza: name, description, category, body_html, is_system (boolean) mezőket.',
'en' => 'Built-in templates (seeder): At installation, 4 professional built-in templates are automatically inserted into the database and can be customized for organizational branding. The email_templates table contains: name, description, category, body_html, is_system (boolean) columns.', 'de' => 'Integrierte Vorlagen (Seeder): Bei der Installation werden 4 professionelle integrierte Vorlagen automatisch in die Datenbank eingefügt und können für das Organisationsbranding angepasst werden. Die Tabelle email_templates enthält: Spalten name, description, category, body_html, is_system (boolean).', 'ro' => 'Șabloane integrate (seeder): La instalare, 4 șabloane integrate profesionale sunt inserate automat în baza de date și pot fi personalizate pentru identitatea organizației. Tabelul email_templates conține: coloanele name, description, category, body_html, is_system (boolean).', 'sk' => 'Vstavané šablóny (seeder): Pri inštalácii sú 4 profesionálne vstavané šablóny automaticky vložené do databázy a môžu byť prispôsobené pre firemný branding organizácie. Tabuľka email_templates obsahuje: stĺpce name, description, category, body_html, is_system (boolean).'],
],
],
[
'version' => 'v1.17.0',
'badge' => [
'text' => ['hu' => 'Fejlesztés', 'en' => 'Improvement', 'de' => 'Verbesserung', 'ro' => 'Îmbunătățire', 'sk' => 'Vylepšenie'],
'style' => 'background:rgba(64,81,137,0.1);color:#405189;',
],
'date' => ['hu' => '2026. május 16.', 'en' => 'May 16, 2026', 'de' => '16. Mai 2026', 'ro' => '16 mai 2026', 'sk' => '16. mája 2026'],
'items' => [
['hu' => 'Adomány export könyveléshez (CSV, XLSX, PDF): Az Adományok oldalon megjelent az Export gomb. Az exportálás szűrhető: kezdési és befejezési dátum, pénznem. Három formátum érhető el: CSV (UTF-8 BOM, pontosvesszős), Excel (XLSX, félkövér fejléc) és PDF (táblázatos elrendezés). A phpoffice/phpspreadsheet kezeli az XLSX-t, a dompdf/dompdf a PDF-t.',
'en' => 'Donation export for accounting (CSV, XLSX, PDF): An Export button appeared on the Donations page. Export is filterable by start date, end date and currency. Three formats are available: CSV (UTF-8 BOM, semicolon-separated), Excel (XLSX, bold header) and PDF (tabular layout). phpoffice/phpspreadsheet handles XLSX; dompdf/dompdf handles PDF.', 'de' => 'Adomány-Export für die Buchhaltung (CSV, XLSX, PDF): Auf der Spendenpage erschien eine Schaltfläche Exportieren. Der Export ist nach Startdatum, Enddatum und Währung filterbar. Drei Formate sind verfügbar: CSV (UTF-8 BOM, durch Semikolon getrennt), Excel (XLSX, fetter Header) und PDF (tabellarisches Layout). phpoffice/phpspreadsheet verarbeitet XLSX; dompdf/dompdf verarbeitet PDF.', 'ro' => 'Export donații pentru contabilitate (CSV, XLSX, PDF): Un buton Export a apărut pe pagina Donații. Exportul este filtrabil după dată de început, dată de sfârșit și monedă. Trei formate sunt disponibile: CSV (UTF-8 BOM, separate prin punct și virgulă), Excel (XLSX, antet îngroșat) și PDF (aspect tabelar). phpoffice/phpspreadsheet gestionează XLSX; dompdf/dompdf gestionează PDF.', 'sk' => 'Export darov pre účtovníctvo (CSV, XLSX, PDF): Na stránke Dary sa objavilo tlačidlo Exportovať. Export je filtrovateľný podľa dátumu začiatku, dátumu konca a meny. Sú k dispozícii tri formáty: CSV (UTF-8 BOM, oddelené bodkočiarkou), Excel (XLSX, tučná hlavička) a PDF (tabuľkový layout). phpoffice/phpspreadsheet spracúva XLSX; dompdf/dompdf spracúva PDF.'],
['hu' => 'Exportált mezők: Dátum, Kapcsolat neve, Email, Összeg, Pénznem, Fizetési módszer, Státusz, Tranzakció ID, Kampány, Megjegyzés — ezek a könyvelési feldolgozáshoz szükséges legfontosabb adatok kerülnek exportálásra.',
'en' => 'Exported fields: Date, Contact name, Email, Amount, Currency, Payment method, Status, Transaction ID, Campaign, Notes — these essential data points needed for accounting processing are exported.', 'de' => 'Exportierte Felder: Datum, Kontaktname, E-Mail, Betrag, Währung, Zahlungsmethode, Status, Transaktions-ID, Kampagne, Notizen — diese wesentlichen Datenpunkte für die Buchhalterverarbeitung werden exportiert.', 'ro' => 'Câmpuri exportate: Dată, Numele contactului, E-mail, Sumă, Monedă, Metodă de plată, Stare, ID tranzacție, Campanie, Note — aceste puncte de date esențiale necesare pentru procesarea contabilă sunt exportate.', 'sk' => 'Exportované polia: Dátum, Meno kontaktu, E-mail, Suma, Mena, Spôsob platby, Stav, ID transakcie, Kampaň, Poznámky — tieto základné dátové body potrebné pre účtovné spracovanie sú exportované.'],
],
],
[
'version' => 'v1.16.0',
'badge' => [
'text' => ['hu' => 'Fejlesztés', 'en' => 'Improvement', 'de' => 'Verbesserung', 'ro' => 'Îmbunătățire', 'sk' => 'Vylepšenie'],
'style' => 'background:rgba(64,81,137,0.1);color:#405189;',
],
'date' => ['hu' => '2026. május 16.', 'en' => 'May 16, 2026', 'de' => '16. Mai 2026', 'ro' => '16 mai 2026', 'sk' => '16. mája 2026'],
'items' => [
['hu' => 'Nyilvános online adományozási oldal: A /donate URL bejelentkezés nélkül elérhető adományozási űrlapot jelenít meg — adományozó neve, email, összeg, pénznem, megjegyzés mezőkkel. Sikeres küldés után visszaigazoló email megy az adományozónak (DonationReceiptMail), és megjelenik egy köszönő oldal (/donate/thanks/{token}).',
'en' => 'Public online donation form: The /donate URL displays a donation form accessible without login — with donor name, email, amount, currency and notes fields. On successful submission, a receipt email is sent to the donor (DonationReceiptMail), and a thank-you page appears (/donate/thanks/{token}).', 'de' => 'Öffentliches Online-Spendenformular: Die URL /donate zeigt ein Spendenformular an, das ohne Anmeldung zugänglich ist — mit Feldern für Spendername, E-Mail, Betrag, Währung und Notizen. Bei erfolgreicher Einreichung wird eine Quittungs-E-Mail an den Spender gesendet (DonationReceiptMail), und eine Dankesseite erscheint (/donate/thanks/{token}).', 'ro' => 'Formular de donații online public: URL-ul /donate afișează un formular de donații accesibil fără autentificare — cu câmpuri pentru numele donatorului, e-mail, sumă, monedă și note. La depunerea cu succes, un e-mail de chitanță este trimis donatorului (DonationReceiptMail), și apare o pagină de mulțumire (/donate/thanks/{token}).', 'sk' => 'Verejný online formulár darov: URL /donate zobrazuje formulár darov dostupný bez prihlásenia — s poliami pre meno darcu, e-mail, sumu, menu a poznámky. Pri úspešnom odoslaní sa darcovi pošle e-mail s potvrdením (DonationReceiptMail) a zobrazí sa stránka s poďakovaním (/donate/thanks/{token}).'],
['hu' => 'Online fizetés Stripe / Barion integrációval: A nyilvános adományozási oldal támogatja a bankkártyás fizetést. Stripe esetén a rendszer egy Checkout Session-t hoz létre, és a visszatérési URL-en (/payment/donation/stripe/success/{token}) igazolja a fizetést. Barion integráció szintén elérhető (/payment/donation/barion/callback/{token}).',
'en' => 'Online payment with Stripe / Barion integration: The public donation form supports card payments. For Stripe, the system creates a Checkout Session and verifies the payment on the return URL (/payment/donation/stripe/success/{token}). Barion integration is also available (/payment/donation/barion/callback/{token}).', 'de' => 'Online-Zahlung mit Stripe / Barion-Integration: Das öffentliche Spendenformular unterstützt Kartenzahlungen. Für Stripe erstellt das System eine Checkout-Session und überprüft die Zahlung auf der Rückgabe-URL (/payment/donation/stripe/success/{token}). Barion-Integration ist ebenfalls verfügbar (/payment/donation/barion/callback/{token}).', 'ro' => 'Plată online cu integrare Stripe / Barion: Formularul public de donații suportă plăți cu card. Pentru Stripe, sistemul creează o Sesiune de Checkout și verifică plata pe URL-ul de returnare (/payment/donation/stripe/success/{token}). Integrarea Barion este de asemenea disponibilă (/payment/donation/barion/callback/{token}).', 'sk' => 'Online platba s integráciou Stripe / Barion: Verejný formulár darov podporuje platby kartou. Pre Stripe systém vytvorí reláciu Checkout a overí platbu na návratovej URL (/payment/donation/stripe/success/{token}). Integrácia Barion je tiež dostupná (/payment/donation/barion/callback/{token}).'],
],
],
[
'version' => 'v1.15.0',
'badge' => [
'text' => ['hu' => 'Fejlesztés', 'en' => 'Improvement', 'de' => 'Verbesserung', 'ro' => 'Îmbunătățire', 'sk' => 'Vylepšenie'],
'style' => 'background:rgba(64,81,137,0.1);color:#405189;',
],
'date' => ['hu' => '2026. május 16.', 'en' => 'May 16, 2026', 'de' => '16. Mai 2026', 'ro' => '16 mai 2026', 'sk' => '16. mája 2026'],
'items' => [
['hu' => 'Feladat megjegyzések: Minden feladathoz szöveges megjegyzések fűzhetők, megjelenítve az időpontot és a beküldő felhasználót. A megjegyzések szerkeszthetők és törölhetők. Az adatokat a task_comments tábla tárolja.',
'en' => 'Task comments: Text comments can be added to every task, showing the timestamp and the submitting user. Comments can be edited and deleted. Data is stored in the task_comments table.', 'de' => 'Aufgabenkommentare: Zu jeder Aufgabe können Textkommentare hinzugefügt werden, die den Zeitstempel und den einsendenden Benutzer anzeigen. Kommentare können bearbeitet und gelöscht werden. Daten werden in der Tabelle task_comments gespeichert.', 'ro' => 'Comentarii la sarcini: Comentarii text pot fi adăugate la fiecare sarcină, afișând timestamp-ul și utilizatorul care le-a trimis. Comentariile pot fi editate și șterse. Datele sunt stocate în tabelul task_comments.', 'sk' => 'Komentáre k úlohám: K každej úlohe je možné pridať textové komentáre zobrazujúce časovú pečiatku a odosielateľa. Komentáre je možné upravovať a mazať. Dáta sú uložené v tabuľke task_comments.'],
['hu' => 'Feladat fájlmellékletek: Feladatokhoz fájlok csatolhatók (max. 10 MB) — a task_attachments tábla és a Spatie MediaLibrary kezeli a tárolást. A melléklet neve, mérete és feltöltési ideje megjelenik a feladat részletoldalán; letölthető és törölhető.',
'en' => 'Task file attachments: Files can be attached to tasks (max. 10 MB) — the task_attachments table and Spatie MediaLibrary handle storage. The attachment name, size and upload time appear on the task detail page; files are downloadable and deletable.', 'de' => 'Aufgaben-Dateianhänge: Dateien können an Aufgaben angehängt werden (max. 10 MB) — die Tabelle task_attachments und Spatie MediaLibrary verwalten die Speicherung. Name, Größe und Upload-Zeit des Anhangs erscheinen auf der Aufgabendetailseite; Dateien sind herunterladbar und löschbar.', 'ro' => 'Atașamente de fișiere la sarcini: Fișierele pot fi atașate la sarcini (max. 10 MB) — tabelul task_attachments și Spatie MediaLibrary gestionează stocarea. Numele atașamentului, dimensiunea și ora de încărcare apar pe pagina de detalii a sarcinii; fișierele sunt descărcabile și ștergibile.', 'sk' => 'Prílohy súborov k úlohám: K úlohám je možné priložiť súbory (max. 10 MB) — tabuľka task_attachments a Spatie MediaLibrary spravujú úložisko. Názov prílohy, veľkosť a čas nahrávania sa zobrazujú na stránke s podrobnosťami úlohy; súbory sú stiahnuteľné a vymazateľné.'],
['hu' => 'Gantt-stílusú idővonal nézet (Projektek): A projekt részletoldalán megjelent egy Gantt nézet fül. A nézet az összes projekt-feladatot az idővonalán helyezi el — vízszintes sáv mutatja a kezdési és befejezési dátumot, határidőn túl esetén piros kiemelés.',
'en' => 'Gantt-style timeline view (Projects): A Gantt view tab appeared on the project detail page. The view places all project tasks on a timeline — a horizontal bar shows the start and end date, with red highlighting for overdue tasks.', 'de' => 'Gantt-artige Zeitachsenansicht (Projekte): Auf der Projektdetailseite erschien ein Tab Gantt-Ansicht. Die Ansicht platziert alle Projektaufgaben auf einer Zeitachse — ein horizontaler Balken zeigt das Start- und Enddatum, mit roter Hervorhebung für überfällige Aufgaben.', 'ro' => 'Vedere cronologică în stil Gantt (Proiecte): Un tab Vedere Gantt a apărut pe pagina de detalii a proiectului. Vederea plasează toate sarcinile proiectului pe o cronologie — un bar orizontal arată data de început și de sfârșit, cu evidențiere roșie pentru sarcinile întârziate.', 'sk' => 'Zobrazenie časovej osi v štýle Gantt (Projekty): Na stránke s podrobnosťami projektu sa objavila karta Ganttovo zobrazenie. Zobrazenie umiestni všetky úlohy projektu na časovú os — vodorovný pruh zobrazuje dátum začiatku a konca, s červeným zvýraznením pre oneskorené úlohy.'],
],
],
[
'version' => 'v1.14.0',
'badge' => [
'text' => ['hu' => 'Fejlesztés', 'en' => 'Improvement', 'de' => 'Verbesserung', 'ro' => 'Îmbunătățire', 'sk' => 'Vylepšenie'],
'style' => 'background:rgba(64,81,137,0.1);color:#405189;',
],
'date' => ['hu' => '2026. május 16.', 'en' => 'May 16, 2026', 'de' => '16. Mai 2026', 'ro' => '16 mai 2026', 'sk' => '16. mája 2026'],
'items' => [
['hu' => 'Német (DE), Román (RO) és Szlovák (SK) nyelvcsomag: Az admin felület teljes szöveggel bővült három új nyelvvel. A lang/de/, lang/ro/ és lang/sk/ mappákban az összes modul fordítása elérhető (common, nav, people, events, groups, donations, campaigns, projects, tasks, users, settings, help, changelog stb.).',
'en' => 'German (DE), Romanian (RO) and Slovak (SK) language packs: The admin panel was extended with three new languages with full text coverage. All module translations are available in lang/de/, lang/ro/ and lang/sk/ folders (common, nav, people, events, groups, donations, campaigns, projects, tasks, users, settings, help, changelog, etc.).', 'de' => 'Deutsche (DE), rumänische (RO) und slowakische (SK) Sprachpakete: Das Admin-Panel wurde um drei neue Sprachen mit vollständiger Textabdeckung erweitert. Alle Modulübersetzungen sind in den Ordnern lang/de/, lang/ro/ und lang/sk/ verfügbar (common, nav, people, events, groups, donations, campaigns, projects, tasks, users, settings, help, changelog usw.).', 'ro' => 'Pachete de limbă germană (DE), română (RO) și slovacă (SK): Panoul de administrare a fost extins cu trei limbi noi cu acoperire completă a textului. Toate traducerile modulelor sunt disponibile în folderele lang/de/, lang/ro/ și lang/sk/ (common, nav, people, events, groups, donations, campaigns, projects, tasks, users, settings, help, changelog etc.).', 'sk' => 'Jazykové balíky nemčiny (DE), rumunčiny (RO) a slovenčiny (SK): Admin panel bol rozšírený o tri nové jazyky s úplným pokrytím textu. Všetky preklady modulov sú dostupné v priečinkoch lang/de/, lang/ro/ a lang/sk/ (common, nav, people, events, groups, donations, campaigns, projects, tasks, users, settings, help, changelog atď.).'],
['hu' => 'Nyelvváltó frissítése: Az oldalsáv HU/EN kapcsolója kiegészült a DE, RO és SK zászlókkal (fi fi-de, fi fi-ro, fi fi-sk SVG ikonok, flag-icons könyvtár). A locale-váltó végpont változatlan: /locale/{locale}.',
'en' => 'Language switcher updated: The HU/EN sidebar switcher was extended with DE, RO and SK flags (fi fi-de, fi fi-ro, fi fi-sk SVG icons, flag-icons library). The locale-switch endpoint is unchanged: /locale/{locale}.', 'de' => 'Sprachumschalter aktualisiert: Der HU/EN-Sidebar-Umschalter wurde um DE, RO und SK-Flaggen erweitert (fi fi-de, fi fi-ro, fi fi-sk SVG-Symbole, flag-icons-Bibliothek). Der Locale-Wechsel-Endpunkt ist unverändert: /locale/{locale}.', 'ro' => 'Selector de limbă actualizat: Selectorul din bara laterală HU/EN a fost extins cu steagurile DE, RO și SK (fi fi-de, fi fi-ro, fi fi-sk icoane SVG, biblioteca flag-icons). Punctul final de schimbare a locale-ului este neschimbat: /locale/{locale}.', 'sk' => 'Prepínač jazykov aktualizovaný: Prepínač HU/EN v bočnom paneli bol rozšírený o vlajky DE, RO a SK (fi fi-de, fi fi-ro, fi fi-sk SVG ikony, knižnica flag-icons). Endpoint prepínania locale je nezmenený: /locale/{locale}.'],
],
],
[
'version' => 'v1.13.0',
'badge' => [
'text' => ['hu' => 'Fejlesztés', 'en' => 'Improvement', 'de' => 'Verbesserung', 'ro' => 'Îmbunătățire', 'sk' => 'Vylepšenie'],
'style' => 'background:rgba(64,81,137,0.1);color:#405189;',
],
'date' => ['hu' => '2026. május 12.', 'en' => 'May 12, 2026', 'de' => '12. Mai 2026', 'ro' => '12 mai 2026', 'sk' => '12. mája 2026'],
'items' => [
['hu' => 'Esemény bejelentkezés QR-kóddal: Minden regisztrációhoz egyedi QR-kód generálódik JavaScript alapon (CDN: qrcode.js), amelyet a résztvevő a saját jegy oldalán (/e/ticket/{token}) tekinthet meg. Az admin panel esemény részletoldalán megjelent a Bejelentkezés (ideje) oszlop és egy QR Szkenner gomb. A szkenner oldal (/admin/events/{id}/checkin) kameraalapú QR-beolvasást tesz lehetővé (html5-qrcode CDN, v2.3.8), valós idejű visszajelzéssel (sikeres / már bejelentkezett / ismeretlen token). Manuális token-beviteli mező is elérhető. Az event_registrations táblához checked_in_at (nullable timestamp) oszlop adódott. Statisztikai összesítő sor: összesen / bejelentkezett / még nem érkezett meg.',
'en' => 'Event check-in via QR code: Every registration now has a unique JavaScript-generated QR code (CDN: qrcode.js) accessible on the attendee\'s personal ticket page (/e/ticket/{token}). The admin event detail page now shows a Check-in (time) column and a QR Scanner button. The scanner page (/admin/events/{id}/checkin) supports camera-based QR scanning (html5-qrcode CDN v2.3.8) with real-time feedback (success / already checked in / unknown token). A manual token input field is also available. A checked_in_at (nullable timestamp) column was added to event_registrations. Summary row shows: total / checked in / not yet arrived.', 'de' => 'Veranstaltungs-Check-in per QR-Code: Jede Registrierung hat nun einen eindeutigen JavaScript-generierten QR-Code (CDN: qrcode.js), der auf der persönlichen Ticket-Seite des Teilnehmers zugänglich ist (/e/ticket/{token}). Die Admin-Ereignisdetailseite zeigt nun eine Spalte Check-in (Zeit) und eine Schaltfläche QR-Scanner. Die Scannerseite (/admin/events/{id}/checkin) unterstützt kamerabasiertes QR-Scannen (html5-qrcode CDN v2.3.8) mit Echtzeit-Feedback (Erfolg / bereits eingecheckt / unbekanntes Token). Ein manuelles Token-Eingabefeld ist ebenfalls verfügbar. Eine Spalte checked_in_at (nullable Timestamp) wurde zu event_registrations hinzugefügt. Zusammenfassungszeile: gesamt / eingecheckt / noch nicht angekommen.', 'ro' => 'Check-in la eveniment prin cod QR: Fiecare înregistrare are acum un cod QR generat de JavaScript unic (CDN: qrcode.js) accesibil pe pagina de bilet personală a participantului (/e/ticket/{token}). Pagina de detalii a evenimentului din admin afișează acum o coloană Check-in (ora) și un buton Scanner QR. Pagina scanerului (/admin/events/{id}/checkin) suportă scanarea QR bazată pe cameră (html5-qrcode CDN v2.3.8) cu feedback în timp real (succes / deja înregistrat / token necunoscut). Un câmp de introducere manuală a tokenului este de asemenea disponibil. O coloană checked_in_at (timestamp nullable) a fost adăugată la event_registrations. Rândul de rezumat arată: total / înregistrați / nu au sosit încă.', 'sk' => 'Check-in na podujatie cez QR kód: Každá registrácia má teraz jedinečný JavaScript-generovaný QR kód (CDN: qrcode.js) dostupný na osobnej stránke vstupenky účastníka (/e/ticket/{token}). Stránka s podrobnosťami o podujatí v administrácii teraz zobrazuje stĺpec Check-in (čas) a tlačidlo QR skener. Stránka skenera (/admin/events/{id}/checkin) podporuje skenovanie QR kamerou (html5-qrcode CDN v2.3.8) s real-time spätnou väzbou (úspech / už prihlásený / neznámy token). K dispozícii je aj pole manuálneho zadania tokenu. Stĺpec checked_in_at (nullable timestamp) bol pridaný do event_registrations. Súhrnný riadok zobrazuje: celkom / prihlásení / ešte neprišli.'],
['hu' => 'Belépőjegy oldal (publikus): Sikeres regisztráció után a megerősítő oldalon megjelenik a „Jegyem megtekintése" gomb (token session flash alapján). A jegy oldala tartalmazza az esemény adatait, a résztvevő nevét, kísérők számát, és a QR-kódot, amely a token értékét kódolja. Ha a résztvevő már be van jelentkezve, zöld sáv jelzi a bejelentkezés időpontját. Az oldal nyomtatásra optimalizált.',
'en' => 'Personal ticket page (public): After a successful registration, a "View my ticket" button appears on the confirmation page (using a session flash of the token). The ticket page displays the event details, attendee name, number of guests, and the QR code encoding the token value. If the attendee is already checked in, a green banner shows the check-in timestamp. The page is print-optimised.', 'de' => 'Persönliche Ticket-Seite (öffentlich): Nach einer erfolgreichen Registrierung erscheint ein Button „Mein Ticket ansehen" auf der Bestätigungsseite (mit einem Session-Flash des Tokens). Die Ticketseite zeigt die Veranstaltungsdetails, den Namen des Teilnehmers, die Anzahl der Gäste und den QR-Code, der den token-Wert kodiert. Wenn der Teilnehmer bereits eingecheckt ist, zeigt ein grünes Banner den Check-in-Zeitstempel. Die Seite ist druckoptimiert.', 'ro' => 'Pagina de bilet personală (publică): După o înregistrare reușită, un buton „Vizualizați biletul meu" apare pe pagina de confirmare (folosind un flash de sesiune al tokenului). Pagina de bilet afișează detaliile evenimentului, numele participantului, numărul de oaspeți și codul QR care codifică valoarea token. Dacă participantul este deja înregistrat, un banner verde arată timestamp-ul de check-in. Pagina este optimizată pentru tipărire.', 'sk' => 'Osobná stránka vstupenky (verejná): Po úspešnej registrácii sa na stránke potvrdenia zobrazí tlačidlo „Zobraziť moju vstupenku" (pomocou session flash tokenu). Stránka vstupenky zobrazuje podrobnosti o podujatí, meno účastníka, počet hostí a QR kód kódujúci hodnotu token. Ak je účastník už prihlásený, zelený banner zobrazuje časovú pečiatku check-inu. Stránka je optimalizovaná pre tlač.'],
['hu' => 'Várólistakezelés: Az admin esemény szerkesztő formján megjelent a Várólista engedélyezve kapcsoló. Ha az esemény betelt és a várólista aktív, a publikus regisztrációs oldalon sárga „Feliratkozás a várólistára" űrlap jelenik meg a várakozók aktuális számával. A várólistán szereplők pozíció szerint sorrendben jelennek meg az admin részletoldalon, ahol Előléptet és Töröl gombok is elérhetők. Ha egy adminisztrátor töröl egy megerősített regisztrációt, az első várólistás automatikusan előlép és emailes értesítést kap. Az event_registrations táblához waitlisted (boolean) és waitlist_position (smallint) oszlopok, az events táblához waitlist_enabled (boolean) oszlop adódott.',
'en' => 'Waitlist management: A Waitlist enabled toggle was added to the admin event edit form. When the event is full and the waitlist is active, the public registration page displays a yellow "Join the waiting list" form showing the current number of waiting people. Waitlisted entries appear sorted by position on the admin detail page, with Promote and Remove buttons. When an admin deletes a confirmed registration, the first waitlisted person is automatically promoted and receives a notification email. The event_registrations table gained waitlisted (boolean) and waitlist_position (smallint) columns; the events table gained waitlist_enabled (boolean).'],
['hu' => 'Várólistás email értesítők (2 db): WaitlistConfirmation – sárga stílusú visszaigazoló email, amelyet a várólistára kerülő személy kap, a pozíciószámával. WaitlistPromotion – zöld stílusú „hely felszabadult" értesítő, amelyet az előléptetett személy kap, belépőjegy linkkel. Mindkét email HU/EN kétnyelvű (a küldéskori alkalmazáslocale alapján).',
'en' => 'Waitlist email notifications (×2): WaitlistConfirmation — a yellow-styled confirmation email sent to the person who joined the waitlist, including their position number. WaitlistPromotion — a green-styled "spot available" notification sent to the promoted person, with a ticket link. Both emails are bilingual HU/EN (driven by the application locale at send time).', 'de' => 'Wartelisten-E-Mail-Benachrichtigungen (×2): WaitlistConfirmation — eine gelb gestaltete Bestätigungs-E-Mail, die an die Person gesendet wird, die sich auf die Warteliste gesetzt hat, einschließlich ihrer Positionsnummer. WaitlistPromotion — eine grün gestaltete „Platz verfügbar"-Benachrichtigung, die an die hochgestufte Person mit einem Ticket-Link gesendet wird. Beide E-Mails sind zweisprachig HU/EN (gesteuert durch das Anwendungslocale zum Sendezeitpunkt).', 'ro' => 'Notificări e-mail pentru lista de așteptare (×2): WaitlistConfirmation — un e-mail de confirmare cu stil galben trimis persoanei care s-a alăturat listei de așteptare, incluzând numărul poziției sale. WaitlistPromotion — o notificare „loc disponibil" cu stil verde trimisă persoanei promovate, cu un link de bilet. Ambele e-mailuri sunt bilingve HU/EN (determinate de locale-ul aplicației la momentul trimiterii).', 'sk' => 'E-mailové notifikácie pre zoznam čakajúcich (×2): WaitlistConfirmation — žlto štylizovaný potvrdzovací e-mail zaslaný osobe, ktorá sa pridala do zoznamu čakajúcich, vrátane čísla jej pozície. WaitlistPromotion — zeleno štylizovaná notifikácia „miesto k dispozícii" zaslaná povýšenej osobe s odkazom na vstupenku. Oba e-maily sú dvojjazyčné HU/EN (určené locale aplikácie v čase odoslania).'],
['hu' => 'Regisztráció törlése adminból: Az admin esemény részletoldalon minden regisztrációs sor kapott egy × törlés gombot. Törléskor a rendszer automatikusan ellenőrzi a várólistát, és ha van, az első pozíción lévő várólistás előléptetésre kerül és emailt kap. A várólistán lévők pozíciói automatikusan átrendeződnek.',
'en' => 'Registration deletion from admin: Each registration row on the admin event detail page now has a × delete button. On deletion, the system automatically checks the waitlist and, if present, promotes the first waitlisted entry and sends them a notification email. Waitlist positions are automatically reordered after removal.', 'de' => 'Wartelistenverwaltung: Ein Umschalter Warteliste aktiviert wurde dem Admin-Veranstaltungsbearbeitungsformular hinzugefügt. Wenn die Veranstaltung voll ist und die Warteliste aktiv ist, zeigt die öffentliche Registrierungsseite ein gelbes „Auf die Warteliste" Formular mit der aktuellen Anzahl wartender Personen. Wartelisteneinträge erscheinen nach Position sortiert auf der Admin-Detailseite mit den Schaltflächen Hochstufen und Entfernen. Wenn ein Admin eine bestätigte Registrierung löscht, wird die erste wartende Person automatisch hochgestuft und erhält eine Benachrichtigungs-E-Mail. Wartelistenpositionen werden nach der Entfernung automatisch neu geordnet.', 'ro' => 'Gestionarea listei de așteptare: Un comutator Listă de așteptare activată a fost adăugat la formularul de editare a evenimentului din admin. Când evenimentul este plin și lista de așteptare este activă, pagina publică de înregistrare afișează un formular galben „Alăturați-vă listei de așteptare" care arată numărul actual de persoane care așteaptă. Intrările din lista de așteptare apar sortate după poziție pe pagina de detalii admin, cu butoanele Promovare și Eliminare. Când un admin șterge o înregistrare confirmată, prima persoană din lista de așteptare este promovată automat și primește un e-mail de notificare. Pozițiile din lista de așteptare sunt reordonate automat după eliminare.', 'sk' => 'Správa zoznamu čakajúcich: Do formulára úpravy podujatia v administrácii bol pridaný prepínač Zoznam čakajúcich povolený. Keď je podujatie plné a zoznam čakajúcich je aktívny, verejná stránka registrácie zobrazuje žltý formulár „Pridajte sa do zoznamu čakajúcich" zobrazujúci aktuálny počet čakajúcich. Záznamy v zozname čakajúcich sa zobrazujú zoradené podľa pozície na stránke s podrobnosťami admina s tlačidlami Povýšiť a Odstrániť. Keď admin vymaže potvrdenú registráciu, prvá čakajúca osoba je automaticky povýšená a dostane notifikačný e-mail. Pozície v zozname čakajúcich sú po odstránení automaticky preusporiadané.'],
],
],
[
'version' => 'v1.12.0',
'badge' => [
'text' => ['hu' => 'Fejlesztés', 'en' => 'Improvement', 'de' => 'Verbesserung', 'ro' => 'Îmbunătățire', 'sk' => 'Vylepšenie'],
'style' => 'background:rgba(64,81,137,0.1);color:#405189;',
],
'date' => ['hu' => '2026. május 10.', 'en' => 'May 10, 2026', 'de' => '10. Mai 2026', 'ro' => '10 mai 2026', 'sk' => '10. mája 2026'],
'items' => [
['hu' => 'Zászló ikonok a nyelvváltóban (sidebar): A HU / EN nyelvváltó gombok melletti zászlók korábban emoji karakterekként (🇭🇺, 🇬🇧) voltak megadva, amelyek Windows rendszeren nem jelennek meg (Chrome / Edge sem rendereli a regionális jelző emoji-kat). Javítás: a flag-icons SVG könyvtár (CDN, v7.2.3) betöltésre kerül, és az emoji helyett <span class="fi fi-hu"> / <span class="fi fi-gb"> elemek kerülnek használatba. Az ikonok most minden platformon és böngészőben egységesen jelennek meg.',
'en' => 'Flag icons in the language switcher (sidebar): The flags next to the HU / EN language switcher buttons were previously emoji characters (🇭🇺, 🇬🇧), which do not render on Windows (Chrome / Edge does not support regional indicator emoji sequences). Fix: the flag-icons SVG library (CDN, v7.2.3) is now loaded and <span class="fi fi-hu"> / <span class="fi fi-gb"> elements replace the emoji. Flags now render consistently across all platforms and browsers.', 'de' => 'Flaggen-Icons im Sprachumschalter (Seitenleiste): Die Flaggen neben den HU/EN-Sprachumschalter-Schaltflächen waren zuvor Emoji-Zeichen (🇭🇺, 🇬🇧), die unter Windows nicht gerendert werden (Chrome/Edge unterstützt keine regionalen Indikator-Emoji-Sequenzen). Lösung: Die SVG-Bibliothek flag-icons (CDN, v7.2.3) wird nun geladen und <span class="fi fi-hu"> / <span class="fi fi-gb">-Elemente ersetzen die Emoji. Flaggen werden nun auf allen Plattformen und Browsern einheitlich gerendert.', 'ro' => 'Icoane de steag în selectorul de limbă (bara laterală): Steagurile de lângă butoanele selectoare de limbă HU/EN erau anterior caractere emoji (🇭🇺, 🇬🇧), care nu se randează pe Windows (Chrome/Edge nu suportă secvențele de emoji indicator regional). Soluție: biblioteca SVG flag-icons (CDN, v7.2.3) este acum încărcată și elementele <span class="fi fi-hu"> / <span class="fi fi-gb"> înlocuiesc emoji-urile. Steagurile se randează acum consistent pe toate platformele și browserele.', 'sk' => 'Ikony vlajok v prepínači jazykov (bočný panel): Vlajky vedľa tlačidiel prepínača jazykov HU/EN boli predtým znaky emoji (🇭🇺, 🇬🇧), ktoré sa na Windows nevykresľujú (Chrome/Edge nepodporuje sekvencie emoji regionálneho indikátora). Oprava: SVG knižnica flag-icons (CDN, v7.2.3) je teraz načítaná a elementy <span class="fi fi-hu"> / <span class="fi fi-gb"> nahrádzajú emoji. Vlajky sa teraz vykresľujú konzistentne na všetkých platformách a prehliadačoch.'],
['hu' => 'README — teljes funkciólista ✅ / 🔲 jelölésekkel: A projekt README-je gyökeresen átdolgozásra került. Az összes meglévő funkció ✅ jelöléssel, az összes tervezett fejlesztés 🔲 jelöléssel szerepel, modulonként csoportosítva: Kapcsolatok (CRM), Csoportok, Események, Email kampányok, Adományok, Projektek & Feladatok, Dashboard, Felhasználók & Szerepkörök, Link gyűjtemény, Beállítások, Súgó, Többnyelvűség, Integrációk & API, Advanced / Enterprise. Így GitHub-on bármely érdeklődő egyetlen pillantással átláthatja, mi elérhető és mi van tervezőasztalon.',
'en' => 'README — comprehensive feature list with ✅ / 🔲 markers: The project README was comprehensively rewritten. All implemented features are marked ✅ and all planned features are marked 🔲, grouped by module: Contacts (CRM), Groups, Events, Email Campaigns, Donations, Projects & Tasks, Dashboard, Users & Roles, Link Collection, Settings, Help & Documentation, Multi-language, Integrations & API, Advanced / Enterprise. This gives anyone visiting the GitHub repo an instant overview of what is available and what is on the roadmap.', 'de' => 'README — umfassende Funktionsliste mit ✅ / 🔲 Markierungen: Das Projekt-README wurde umfassend neu geschrieben. Alle implementierten Funktionen sind mit ✅ markiert und alle geplanten Funktionen mit 🔲, gruppiert nach Modul: Kontakte (CRM), Gruppen, Veranstaltungen, E-Mail-Kampagnen, Spenden, Projekte & Aufgaben, Dashboard, Benutzer & Rollen, Link-Sammlung, Einstellungen, Hilfe & Dokumentation, Mehrsprachigkeit, Integrationen & API, Erweitert / Enterprise. Dies gibt jedem, der das GitHub-Repo besucht, einen sofortigen Überblick über das Verfügbare und die Roadmap.', 'ro' => 'README — lista completă de funcționalități cu marcaje ✅ / 🔲: README-ul proiectului a fost rescris complet. Toate funcționalitățile implementate sunt marcate ✅ și toate funcționalitățile planificate sunt marcate 🔲, grupate pe module: Contacte (CRM), Grupuri, Evenimente, Campanii de e-mail, Donații, Proiecte & Sarcini, Dashboard, Utilizatori & Roluri, Colecție de linkuri, Setări, Ajutor & Documentație, Multilingv, Integrări & API, Avansat / Enterprise. Aceasta oferă oricui vizitează repo-ul GitHub o prezentare instantanee a ceea ce este disponibil și ce este pe foaia de parcurs.', 'sk' => 'README — komplexný zoznam funkcií s označeniami ✅ / 🔲: README projektu bolo komplexne prepísané. Všetky implementované funkcie sú označené ✅ a všetky plánované funkcie sú označené 🔲, zoskupené podľa modulu: Kontakty (CRM), Skupiny, Udalosti, E-mailové kampane, Dary, Projekty a úlohy, Dashboard, Používatelia a roly, Zbierka odkazov, Nastavenia, Pomoc a dokumentácia, Viacjazyčnosť, Integrácie a API, Pokročilé / Enterprise. To dáva každému, kto navštívi GitHub repo, okamžitý prehľad o tom, čo je k dispozícii a čo je na pláne.'],
['hu' => 'Open Core tábla és Advanced / Enterprise szekció szinkronizálása: A README Open Core összehasonlító táblája és a Features lista Advanced / Enterprise szekciója összhangba hozásra került. A Kétfaktoros hitelesítés (TOTP) és a REST API for mobile clients tételek kizárólag az Enterprise szekcióba kerültek (korábban a Felhasználók & Szerepkörök, ill. Integrációk & API szekciókban is szerepeltek). Az Open Core tábla bővült: Dokumentumtároló, Kérdőív & űrlapkészítő, Petíció / aláírásgyűjtés, Önkéntes órakövetés sorokkal.',
'en' => 'Open Core table and Advanced / Enterprise section synchronised: The README Open Core comparison table and the Advanced / Enterprise section in the Features list have been brought into full alignment. Two-factor authentication (TOTP) and REST API for mobile clients are now exclusively listed under the Enterprise section (previously they also appeared under Users & Roles and Integrations & API). The Open Core table was expanded with new rows: Document storage, Survey & form builder, Petition / signature collection, Volunteer hours tracking.', 'de' => 'Open Core-Tabelle und Abschnitt Erweitert / Enterprise synchronisiert: Die Open Core-Vergleichstabelle und der Abschnitt Erweitert / Enterprise in der Funktionsliste wurden vollständig angeglichen. Zwei-Faktor-Authentifizierung (TOTP) und REST API für mobile Clients sind nun ausschließlich im Enterprise-Abschnitt aufgeführt. Die Open Core-Tabelle wurde mit neuen Zeilen erweitert: Dokumentenspeicher, Umfrage- & Formular-Builder, Petition / Unterschriftensammlung, Ehrenamtliche Zeiterfassung.', 'ro' => 'Tabelul Open Core și secțiunea Avansat / Enterprise sincronizate: Tabelul de comparație Open Core și secțiunea Avansat / Enterprise din lista de funcționalități au fost aduse în deplină aliniere. Autentificarea cu doi factori (TOTP) și REST API pentru clienți mobili sunt acum enumerate exclusiv în secțiunea Enterprise. Tabelul Open Core a fost extins cu rânduri noi: Stocare documente, Constructor de sondaje & formulare, Petiție / colectare de semnături, Urmărirea orelor de voluntariat.', 'sk' => 'Tabuľka Open Core a sekcia Pokročilé / Enterprise synchronizované: Porovnávacia tabuľka Open Core a sekcia Pokročilé / Enterprise v zozname funkcií boli uvedené do úplného súladu. Dvojfaktorová autentifikácia (TOTP) a REST API pre mobilných klientov sú teraz uvedené výhradne v sekcii Enterprise. Tabuľka Open Core bola rozšírená o nové riadky: Úložisko dokumentov, Tvorca prieskumov & formulárov, Petícia / zbierka podpisov, Sledovanie dobrovoľníckych hodín.'],
['hu' => 'Súgó gomb áthelyezése a gyorslinkek sávba: A Főoldal jobb felső sarkából eltávolításra került a Súgó gomb. A gyorslinkek sávba (kék topbar) kerülve az Infografikonok mellé, most bármely oldalról elérhetővé vált anélkül, hogy el kellene navigálni a Főoldalra. A bal oldali menüben a „Súgó kezelése" felirat „Súgó"-ra egyszerűsödött.',
'en' => 'Help button moved to quick links bar: The Help button was removed from the top-right corner of the Dashboard and placed in the quick links bar (blue topbar) next to Infographics — now accessible from any page without navigating back to the Dashboard. The left sidebar label "Manage Help" was simplified to "Help".', 'de' => 'Hilfe-Schaltfläche in die Schnelllinks-Leiste verschoben: Die Hilfe-Schaltfläche wurde aus der oberen rechten Ecke des Dashboards entfernt und in der Schnelllinks-Leiste (blauer Topbar) neben Infografiken platziert — nun von jeder Seite aus zugänglich, ohne zum Dashboard zurückzunavigieren. Der linke Seitenleistenname „Hilfe verwalten" wurde zu „Hilfe" vereinfacht.', 'ro' => 'Butonul Ajutor mutat în bara de linkuri rapide: Butonul Ajutor a fost eliminat din colțul din dreapta sus al Dashboard-ului și plasat în bara de linkuri rapide (bara albastră topbar) lângă Infografice — acum accesibil de pe orice pagină fără a naviga înapoi la Dashboard. Eticheta barei laterale stângi „Gestionare Ajutor" a fost simplificată la „Ajutor".', 'sk' => 'Tlačidlo Pomocník presunuté do lišty rýchlych odkazov: Tlačidlo Pomocník bolo odstránené z pravého horného rohu dashboardu a umiestnené do lišty rýchlych odkazov (modrý topbar) vedľa Infografík — teraz dostupné z ľubovoľnej stránky bez navigácie späť na Dashboard. Označenie ľavého bočného panela „Správa pomocníka" bolo zjednodušené na „Pomocník".'],
['hu' => 'CSV / Excel import & export (Kapcsolatok): A /admin/people oldalon az összes kapcsolat exportálható CSV (UTF-8 BOM, pontosvesszős elválasztó) vagy Excel (XLSX, félkövér fejléc) formátumban. Import: CSV és XLSX fájlból, oszlopnév-alapú leképzéssel, meglévő emailcímek kihagyásával. A phpoffice/phpspreadsheet könyvtár kezeli az XLSX fájlokat.',
'en' => 'CSV / Excel import & export (Contacts): On the /admin/people page, all contacts can be exported as CSV (UTF-8 BOM, semicolon separator) or Excel (XLSX, bold header). Import: from CSV or XLSX file with column-name-based mapping, skipping existing email addresses. The phpoffice/phpspreadsheet library handles XLSX files.', 'de' => 'CSV / Excel Import & Export (Kontakte): Auf der Seite /admin/people können alle Kontakte als CSV (UTF-8 BOM, durch Semikolon getrennt) oder Excel (XLSX, fetter Header) exportiert werden. Import: aus CSV- oder XLSX-Dateien mit spaltennamensbasierter Zuordnung, Überspringen vorhandener E-Mail-Adressen. Die Bibliothek phpoffice/phpspreadsheet verarbeitet XLSX-Dateien.', 'ro' => 'Import & Export CSV / Excel (Contacte): Pe pagina /admin/people, toate contactele pot fi exportate ca CSV (UTF-8 BOM, separator punct și virgulă) sau Excel (XLSX, antet îngroșat). Import: din fișier CSV sau XLSX cu mapare bazată pe numele coloanei, sărindu-se adresele de e-mail existente. Biblioteca phpoffice/phpspreadsheet gestionează fișierele XLSX.', 'sk' => 'Import & export CSV / Excel (Kontakty): Na stránke /admin/people je možné exportovať všetky kontakty ako CSV (UTF-8 BOM, oddelené bodkočiarkou) alebo Excel (XLSX, tučná hlavička). Import: zo súboru CSV alebo XLSX s mapovaním na základe názvov stĺpcov, preskakovaním existujúcich e-mailových adries. Knižnica phpoffice/phpspreadsheet spracúva súbory XLSX.'],
['hu' => 'Speciális szűrők és mentett keresések (Kapcsolatok): Kibővített szűrőpanel: keresés, státusz (több is), város, forrás, hírlevél, csoport, regisztrációs dátumtartomány, lead fázis és minimum pontszám. A szűrőkombinációk névvel elmenthetők és egy kattintással visszatölthetők — felhasználónkénti szűrő-előbeállítások, people_saved_filters tábla.',
'en' => 'Advanced filters and saved searches (Contacts): Expanded filter panel: text search, status (multi-select chips), city, source, newsletter subscription, group, registration date range, lead stage and minimum score. Filter combinations can be saved by name and reloaded in one click — per-user filter presets stored in the people_saved_filters table.', 'de' => 'Erweiterte Filter und gespeicherte Suchen (Kontakte): Erweitertes Filterpanel: Textsuche, Status (Mehrfachauswahl-Chips), Stadt, Quelle, Newsletter-Abonnement, Gruppe, Registrierungsdatumsbereich, Lead-Phase und Mindestpunktzahl. Filterkombinationen können mit Namen gespeichert und mit einem Klick neu geladen werden — benutzerspezifische Filter-Voreinstellungen in der Tabelle people_saved_filters.', 'ro' => 'Filtre avansate și căutări salvate (Contacte): Panel de filtre extins: căutare text, status (chips cu selecție multiplă), oraș, sursă, abonament la newsletter, grup, interval de date de înregistrare, etapă de lead și scor minim. Combinațiile de filtre pot fi salvate după nume și reîncărcate cu un singur clic — presetări de filtre per utilizator stocate în tabelul people_saved_filters.', 'sk' => 'Pokročilé filtre a uložené vyhľadávania (Kontakty): Rozšírený panel filtrov: textové vyhľadávanie, stav (multi-výberové čipy), mesto, zdroj, odber newslettera, skupina, rozsah dátumov registrácie, fáza leadu a minimálne skóre. Kombinácie filtrov je možné uložiť podľa názvu a jedným kliknutím ich znova načítať — predvoľby filtrov pre každého používateľa uložené v tabuľke people_saved_filters.'],
['hu' => 'Duplikátum-keresés és kapcsolat-összevonás: Új /admin/people/duplicates oldal, amely email, telefonszám és teljes név (kis-/nagybetű-független) alapján azonosítja a valószínű duplikátumokat. A párokat kártyán jeleníti meg az egyezés okával (email/telefon/név badge). Összevonáskor az üres mezők automatikusan töltődnek fel a másik profilból, az adományok, esemény RSVP-k és csoporttagságok átkerülnek, a duplikátum soft-delete-elve lesz.',
'en' => 'Duplicate detection and contact merge: New /admin/people/duplicates page that identifies probable duplicates by email, phone and full name (case-insensitive). Pairs are shown on cards with the match reason (email / phone / name badge). On merge, empty fields are auto-filled from the other profile, donations, event RSVPs and group memberships are transferred, and the duplicate is soft-deleted.', 'de' => 'Duplikatserkennung und Kontaktzusammenführung: Neue Seite /admin/people/duplicates, die wahrscheinliche Duplikate nach E-Mail, Telefon und vollständigem Namen (Groß-/Kleinschreibung unempfindlich) identifiziert. Paare werden auf Karten mit dem Übereinstimmungsgrund (E-Mail / Telefon / Name-Badge) angezeigt. Bei der Zusammenführung werden leere Felder automatisch aus dem anderen Profil ausgefüllt, Spenden, Veranstaltungs-RSVPs und Gruppenmitgliedschaften werden übertragen, und das Duplikat wird soft-gelöscht.', 'ro' => 'Detectarea duplicatelor și fuzionarea contactelor: Noua pagină /admin/people/duplicates care identifică duplicatele probabile după e-mail, telefon și numele complet (insensibil la majuscule/minuscule). Perechile sunt afișate pe carduri cu motivul potrivirii (badge e-mail / telefon / nume). La fuzionare, câmpurile goale sunt completate automat din celălalt profil, donațiile, RSVP-urile la evenimente și apartenența la grupuri sunt transferate, iar duplicatul este șters soft.', 'sk' => 'Detekcia duplikátov a zlučovanie kontaktov: Nová stránka /admin/people/duplicates, ktorá identifikuje pravdepodobné duplikáty podľa e-mailu, telefónu a celého mena (bez rozlišovania veľkých/malých písmen). Páry sú zobrazené na kartách s dôvodom zhody (badge e-mail / telefón / meno). Pri zlučovaní sa prázdne polia automaticky vyplnia z druhého profilu, dary, RSVP udalostí a členstvá v skupinách sú prenesené a duplikát je soft-vymazaný.'],
['hu' => 'Kapcsolatonkénti aktivitás napló: Minden kapcsolathoz interakciótörténet rögzíthető: Telefonhívás, Email, Megbeszélés, Feljegyzés, Feladat, SMS, Egyéb — időponttal, megjegyzéssel és rögzítő felhasználóval. A contact_activities tábla tárolja az adatokat. A kapcsolat részletoldalán szín-kódolt, ikonos vertikális timeline formában jelenik meg.',
'en' => 'Per-contact activity log: Interaction history can be recorded for every contact: Phone call, Email, Meeting, Note, Task, SMS, Other — with timestamp, notes and the recording user. Stored in the contact_activities table. Displayed as a colour-coded, icon-based vertical timeline on the contact detail page.', 'de' => 'Kontaktbezogenes Aktivitätsprotokoll: Interaktionshistorie kann für jeden Kontakt aufgezeichnet werden: Telefonanruf, E-Mail, Besprechung, Notiz, Aufgabe, SMS, Sonstiges — mit Zeitstempel, Notizen und dem aufzeichnenden Benutzer. Gespeichert in der Tabelle contact_activities. Wird als farbcodierte, ikonenbasierte vertikale Zeitleiste auf der Kontaktdetailseite angezeigt.', 'ro' => 'Jurnal de activitate per contact: Istoricul interacțiunilor poate fi înregistrat pentru fiecare contact: Apel telefonic, E-mail, Întâlnire, Notă, Sarcină, SMS, Altele — cu timestamp, note și utilizatorul care le-a înregistrat. Stocat în tabelul contact_activities. Afișat ca o cronologie verticală codificată prin culori, bazată pe icoane, pe pagina de detalii a contactului.', 'sk' => 'Denník aktivity na kontakt: Pre každý kontakt je možné zaznamenať históriu interakcií: Telefonický hovor, E-mail, Stretnutie, Poznámka, Úloha, SMS, Iné — s časovou pečiatkou, poznámkami a zaznamenávajúcim používateľom. Uložené v tabuľke contact_activities. Zobrazené ako farebne kódovaná, ikona-založená vertikálna časová os na stránke s podrobnosťami kontaktu.'],
['hu' => 'Kapcsolatfelvétel / érdeklődőértékelés (Lead scoring): Minden kapcsolathoz beállítható 6 fázisú értékesítési pipeline (Új érdeklődő → Kapcsolatba lépve → Minősített → Ajánlat küldve → Megnyert → Elveszett) és 1–5 csillagos érdeklődési pontszám. A people tábla bővül lead_stage és lead_score oszlopokkal. A listában Értékelés oszlop jelenik meg; fázis és minimum pontszám alapján szűrhető.',
'en' => 'Contact intake / lead scoring: Each contact can be assigned a 6-stage sales pipeline (New Lead → Contacted → Qualified → Proposal Sent → Converted → Lost) and a 1–5 star interest score. The people table gains lead_stage and lead_score columns. An Evaluation column appears in the contacts list; filterable by stage and minimum score.', 'de' => 'Kontaktaufnahme / Lead-Scoring: Jedem Kontakt kann eine 6-stufige Vertriebspipeline zugewiesen werden (Neuer Lead → Kontaktiert → Qualifiziert → Angebot gesendet → Konvertiert → Verloren) und ein 1–5-Sterne-Interessenpunktzahl. Die Tabelle people erhält die Spalten lead_stage und lead_score. In der Kontaktliste erscheint eine Bewertungsspalte; filterbar nach Phase und Mindestpunktzahl.', 'ro' => 'Captare contacte / Lead scoring: Fiecărui contact i se poate atribui un pipeline de vânzări cu 6 etape (Lead nou → Contactat → Calificat → Propunere trimisă → Convertit → Pierdut) și un scor de interes de 1–5 stele. Tabelul people câștigă coloanele lead_stage și lead_score. O coloană de Evaluare apare în lista de contacte; filtrabilă după etapă și scor minim.', 'sk' => 'Príjem kontaktov / Lead scoring: Každému kontaktu je možné priradiť 6-fázový predajný pipeline (Nový lead → Kontaktovaný → Kvalifikovaný → Zaslaný návrh → Konvertovaný → Stratený) a skóre záujmu 1–5 hviezdičiek. Tabuľka people získa stĺpce lead_stage a lead_score. V zozname kontaktov sa zobrazí stĺpec Hodnotenie; filtrovateľný podľa fázy a minimálneho skóre.'],
],
],
[
'version' => 'v1.11.0',
'badge' => [
'text' => ['hu' => 'Hibajavítás', 'en' => 'Bug Fix', 'de' => 'Fehlerbehebung', 'ro' => 'Remediere erori', 'sk' => 'Oprava chyby'],
'style' => 'background:rgba(240,101,72,0.1);color:#f06548;',
],
'date' => ['hu' => '2026. május 8.', 'en' => 'May 8, 2026', 'de' => '8. Mai 2026', 'ro' => '8 mai 2026', 'sk' => '8. mája 2026'],
'items' => [
['hu' => 'Email kampány modul — hibajavítás csomag (Pro): Az email kampány küldési funkció több kritikus hibája javításra került: a is_subscribed mező helyes használata (volt: newsletter), a full_name accessor használata (nem létező name oszlop helyett), az üres \$e catch változó elhárítása, valamint az utolsó $campaign->update() hívás köré helyezett try/catch védelem failed státusz esetére.',
'en' => 'Email campaign module — bug fix bundle (Pro): Several critical bugs in the email campaign send flow were fixed: correct use of the is_subscribed field (was: newsletter), use of the full_name accessor (instead of non-existent name column), removal of unused $e catch variable, and a try/catch wrapper around the final $campaign->update() call for the failed status case.', 'de' => 'E-Mail-Kampagnenmodul — Fehlerbehebungspaket (Pro): Mehrere kritische Fehler im E-Mail-Kampagnen-Sendeablauf wurden behoben: korrekte Verwendung des Feldes is_subscribed (war: newsletter), Verwendung des full_name-Accessors (statt der nicht existierenden name-Spalte), Entfernung der ungenutzten $e-catch-Variable und ein try/catch-Wrapper um den abschließenden $campaign->update()-Aufruf für den failed-Status.', 'ro' => 'Modul campanii e-mail — pachet de remediere erori (Pro): Mai multe erori critice în fluxul de trimitere a campaniei de e-mail au fost remediate: utilizarea corectă a câmpului is_subscribed (era: newsletter), utilizarea accessorului full_name (în locul coloanei inexistente name), eliminarea variabilei catch neutilizate $e și un wrapper try/catch în jurul apelului final $campaign->update() pentru cazul de stare failed.', 'sk' => 'Modul e-mailových kampaní — balík opráv chýb (Pro): Niekoľko kritických chýb v toku odosielania e-mailových kampaní bolo opravených: správne použitie poľa is_subscribed (bolo: newsletter), použitie accessora full_name (namiesto neexistujúceho stĺpca name), odstránenie nepoužívanej catch premennej $e a wrapper try/catch okolo záverečného volania $campaign->update() pre prípad stavu failed.'],
['hu' => 'Kampány modal javítás: A kampány létrehozás és szerkesztés modaljain helytelen CSS osztály (nf-modal-backdrop) volt megadva, ami miatt a modalisablonok nem nyíltak meg. Javítva: nf-overlay.',
'en' => 'Campaign modal fix: The campaign create and edit modals had an incorrect CSS class (nf-modal-backdrop) that prevented them from opening. Fixed to nf-overlay.', 'de' => 'Kampagnen-Modal-Korrektur: Die Kampagnenerstellungs- und -bearbeitungsmodals hatten eine falsche CSS-Klasse (nf-modal-backdrop), die das Öffnen verhinderte. Korrigiert zu nf-overlay.', 'ro' => 'Remediere modal campanie: Modalele de creare și editare a campaniei aveau o clasă CSS incorectă (nf-modal-backdrop) care împiedica deschiderea lor. Corectat la nf-overlay.', 'sk' => 'Oprava modálneho okna kampane: Modálne okná vytvorenia a úpravy kampane mali nesprávnu CSS triedu (nf-modal-backdrop), ktorá bránila ich otvoreniu. Opravené na nf-overlay.'],
['hu' => 'Feliratkozók száma piszkozat kampányoknál: A kampány lista Fogadók oszlopa piszkozat állapotú kampányoknál korábban „—” jelet mutatott. Mostantól a valós hírlevél feliratkozók száma jelenik meg.',
'en' => 'Subscriber count for draft campaigns: The Recipients column in the campaign list previously showed "—" for draft campaigns. It now correctly displays the actual newsletter subscriber count.', 'de' => 'Abonnentenanzahl für Entwurfskampagnen: Die Spalte Empfänger in der Kampagnenliste zeigte für Entwurfskampagnen zuvor „—". Sie zeigt nun korrekt die tatsächliche Anzahl der Newsletter-Abonnenten an.', 'ro' => 'Numărul de abonați pentru campaniile schiță: Coloana Destinatari din lista de campanii afișa anterior „—" pentru campaniile schiță. Acum afișează corect numărul real de abonați la newsletter.', 'sk' => 'Počet odberateľov pre konceptové kampane: Stĺpec Príjemcovia v zozname kampaní predtým zobrazoval „—" pre konceptové kampane. Teraz správne zobrazuje skutočný počet odberateľov newslettera.'],
['hu' => 'Feladó cím javítása (CampaignMail): Az emailek küldésékor a feladó cím helytelenül, csonkítva jelent meg (pl. admin@ domain nélkül). A CampaignMail::envelope() most explicitén a kampányban tárolt from_email és from_name értékeket használja (Illuminate\\Mail\\Mailables\\Address segítségével), config fallbackkel.',
'en' => 'Sender address fix (CampaignMail): When sending emails, the sender address appeared incorrectly truncated (e.g. admin@ without domain). CampaignMail::envelope() now explicitly uses the campaign\'s stored from_email and from_name values (via Illuminate\\Mail\\Mailables\\Address), with config fallback.', 'de' => 'Absenderadressen-Korrektur (CampaignMail): Beim Senden von E-Mails erschien die Absenderadresse falsch abgeschnitten (z.B. admin@ ohne Domain). CampaignMail::envelope() verwendet nun explizit die in der Kampagne gespeicherten Werte from_email und from_name (über Illuminate\\Mail\\Mailables\\Address), mit Konfigurations-Fallback.', 'ro' => 'Remediere adresă expeditor (CampaignMail): La trimiterea e-mailurilor, adresa expeditorului apărea incorect trunchiată (de ex. admin@ fără domeniu). CampaignMail::envelope() utilizează acum explicit valorile from_email și from_name stocate în campanie (prin Illuminate\\Mail\\Mailables\\Address), cu fallback din configurație.', 'sk' => 'Oprava adresy odosielateľa (CampaignMail): Pri odosielaní e-mailov sa adresa odosielateľa zobrazovala nesprávne skrátená (napr. admin@ bez domény). CampaignMail::envelope() teraz explicitne používa hodnoty from_email a from_name uložené v kampani (cez Illuminate\\Mail\\Mailables\\Address), s fallbackom z konfigurácie.'],
['hu' => 'failed_count oszlop és ENUM bővítés (migráció): Két új migráció: az email_campaigns táblához hozzáadásra kerültek a failed_count (unsignedInteger, default 0) oszlop, valamint a failed státusz értéke az ENUM mezőhöz — raw ALTER TABLE SQL-lel, mivel a MySQL ENUM módosítás nem lehetséges Laravelblueprint-tel.',
'en' => 'failed_count column and ENUM extension (migration): Two new migrations: the failed_count (unsignedInteger, default 0) column and the failed status value were added to the email_campaigns table — using raw ALTER TABLE SQL, as MySQL ENUM modification is not possible with Laravel Blueprint.', 'de' => 'failed_count-Spalte und ENUM-Erweiterung (Migration): Zwei neue Migrationen: die Spalte failed_count (unsignedInteger, Standard 0) und der Statuswert failed wurden zur Tabelle email_campaigns hinzugefügt — mit rohem ALTER TABLE-SQL, da die MySQL-ENUM-Modifikation mit Laravel Blueprint nicht möglich ist.', 'ro' => 'Coloana failed_count și extensia ENUM (migrare): Două noi migrări: coloana failed_count (unsignedInteger, implicit 0) și valoarea de stare failed au fost adăugate la tabelul email_campaigns — folosind SQL ALTER TABLE brut, deoarece modificarea MySQL ENUM nu este posibilă cu Laravel Blueprint.', 'sk' => 'Stĺpec failed_count a rozšírenie ENUM (migrácia): Dve nové migrácie: stĺpec failed_count (unsignedInteger, predvolene 0) a hodnota stavu failed boli pridané do tabuľky email_campaigns — pomocou surového SQL ALTER TABLE, keďže modifikácia MySQL ENUM nie je možná s Laravel Blueprint.'],
['hu' => 'Duplikált migráció eltávolítása (Forge deployment fix): A 2026_05_08_190846_create_email_campaigns_table.php migráció — amely lokálisan manuálisan volt hozzáadva az adatbázishoz — eltávolításra került a git repóból. A Forge szerveren ez a duplikált migráció „table already exists" hibával akadályozta a deployment-et.',
'en' => 'Duplicate migration removed (Forge deployment fix): The 2026_05_08_190846_create_email_campaigns_table.php migration — which was manually added to the database locally — was removed from the git repository. On the Forge server, this duplicate migration was blocking deployment with a "table already exists" error.', 'de' => 'Doppelte Migration entfernt (Forge-Deployment-Fix): Die Migration 2026_05_08_190846_create_email_campaigns_table.php — die lokal manuell zur Datenbank hinzugefügt wurde — wurde aus dem Git-Repository entfernt. Auf dem Forge-Server blockierte diese doppelte Migration das Deployment mit einem „Tabelle existiert bereits"-Fehler.', 'ro' => 'Migrare duplicată eliminată (remediere deployment Forge): Migrarea 2026_05_08_190846_create_email_campaigns_table.php — care a fost adăugată manual la baza de date local — a fost eliminată din repository-ul git. Pe serverul Forge, această migrare duplicată bloca deployment-ul cu o eroare „tabelul există deja".', 'sk' => 'Odstránená duplicitná migrácia (oprava nasadenia Forge): Migrácia 2026_05_08_190846_create_email_campaigns_table.php — ktorá bola lokálne manuálne pridaná do databázy — bola odstránená z git repozitára. Na serveri Forge táto duplicitná migrácia blokovala nasadenie s chybou „tabuľka už existuje".'],
['hu' => 'Dashboard TypeError javítás (Windows / HU locale): A /dashboard oldal TypeError: htmlspecialchars() array given hibával omlott össze. Gyökérok: Windows fájlrendszer nem különbözteti meg a kis- és nagybetűket, ezért az __("Dashboard") hívás a lang/hu/dashboard.php fájlt (tömbként) adta vissza a várt szöveg helyett. Javítás: __("nav.dashboard") — mind a dashboard.blade.php, mind a livewire/layout/navigation.blade.php nézetekben.',
'en' => 'Dashboard TypeError fix (Windows / HU locale): The /dashboard page was crashing with TypeError: htmlspecialchars() array given. Root cause: the Windows filesystem is case-insensitive, so __("Dashboard") matched lang/hu/dashboard.php and returned the entire array instead of a string. Fix: __("nav.dashboard") — in both dashboard.blade.php and livewire/layout/navigation.blade.php.', 'de' => 'Dashboard-TypeError-Korrektur (Windows / HU-Locale): Die Seite /dashboard stürzte mit TypeError: htmlspecialchars() array given ab. Ursache: Das Windows-Dateisystem unterscheidet nicht zwischen Groß- und Kleinschreibung, daher traf __("Dashboard") auf lang/hu/dashboard.php und gab das gesamte Array statt eines Strings zurück. Korrektur: __("nav.dashboard") — in beiden Dateien dashboard.blade.php und livewire/layout/navigation.blade.php.', 'ro' => 'Remediere TypeError Dashboard (Windows / locale HU): Pagina /dashboard se prăbușea cu TypeError: htmlspecialchars() array given. Cauza principală: sistemul de fișiere Windows nu face distincție între majuscule și minuscule, deci __("Dashboard") se potrivea cu lang/hu/dashboard.php și returna întregul array în loc de un șir. Remediere: __("nav.dashboard") — în ambele fișiere dashboard.blade.php și livewire/layout/navigation.blade.php.', 'sk' => 'Oprava TypeError Dashboardu (Windows / locale HU): Stránka /dashboard padala s chybou TypeError: htmlspecialchars() array given. Príčina: Súborový systém Windows nerozlišuje veľké a malé písmená, takže __("Dashboard") sa zhodoval s lang/hu/dashboard.php a vrátil celé pole namiesto reťazca. Oprava: __("nav.dashboard") — v oboch súboroch dashboard.blade.php aj livewire/layout/navigation.blade.php.'],
['hu' => 'Resend email integráció: A config/services.php-ben a RESEND_API_KEY env változó neve RESEND_KEY-re javítva a .env fájl tényleges változójának megfelelően. A Resend Laravel csomag mindkét config kulcsot ellenőrzi fallback-ként, így a javítás után az API kulcs helyesen töltődik be.',
'en' => 'Resend email integration: In config/services.php, the env variable name was corrected from RESEND_API_KEY to RESEND_KEY to match the actual .env file variable. The Resend Laravel package checks both config keys as fallback, so after the fix the API key loads correctly.', 'de' => 'Resend-E-Mail-Integration: In config/services.php wurde der Name der Umgebungsvariable von RESEND_API_KEY auf RESEND_KEY korrigiert, um der tatsächlichen .env-Dateivariable zu entsprechen. Das Resend-Laravel-Paket prüft beide Konfigurationsschlüssel als Fallback, sodass der API-Schlüssel nach der Korrektur korrekt geladen wird.', 'ro' => 'Integrare e-mail Resend: În config/services.php, numele variabilei de mediu a fost corectat din RESEND_API_KEY în RESEND_KEY pentru a corespunde variabilei reale din fișierul .env. Pachetul Resend Laravel verifică ambele chei de configurare ca fallback, astfel după remediere cheia API se încarcă corect.', 'sk' => 'Integrácia e-mailu Resend: V config/services.php bol názov premennej prostredia opravený z RESEND_API_KEY na RESEND_KEY, aby zodpovedal skutočnej premennej v súbore .env. Balík Resend Laravel kontroluje oba konfiguračné kľúče ako fallback, takže po oprave sa API kľúč načíta správne.'],
],
],
[
'version' => 'v1.10.0',
'badge' => [
'text' => ['hu' => 'Fejlesztés', 'en' => 'Improvement', 'de' => 'Verbesserung', 'ro' => 'Îmbunătățire', 'sk' => 'Vylepšenie'],
'style' => 'background:rgba(64,81,137,0.1);color:#405189;',
],
'date' => ['hu' => '2026. május 6.', 'en' => 'May 6, 2026', 'de' => '6. Mai 2026', 'ro' => '6 mai 2026', 'sk' => '6. mája 2026'],
'items' => [
['hu' => 'Többnyelvűség (HU/EN) — infrastruktúra: Bevezetve a SetLocale middleware (session-alapú locale beállítás), LocaleController és a /language/{locale} route. A felső navigációban megjelent a HU / EN nyelvváltó gomb, amely azonnal átkapcsolja az admin felület teljes szövegét.',
'en' => 'Multi-language support (HU/EN) — infrastructure: Introduced SetLocale middleware (session-based locale), LocaleController and the /language/{locale} route. A HU / EN language switcher button appeared in the top navigation, instantly switching all admin interface text.', 'de' => 'Mehrsprachige Unterstützung (HU/EN) — Infrastruktur: SetLocale-Middleware (sitzungsbasierte Locale), LocaleController und die Route /language/{locale} wurden eingeführt. Ein HU/EN-Sprachumschalter erschien in der oberen Navigation und schaltet sofort den gesamten Admin-Schnittstellentext um.', 'ro' => 'Suport multilingv (HU/EN) — infrastructură: S-a introdus middleware-ul SetLocale (locale bazat pe sesiune), LocaleController și ruta /language/{locale}. Un buton de schimbare a limbii HU/EN a apărut în navigarea superioară, comutând instantaneu tot textul interfeței de administrare.', 'sk' => 'Viacjazyčná podpora (HU/EN) — infraštruktúra: Bol zavedený middleware SetLocale (locale na základe relácie), LocaleController a routa /language/{locale}. V hornej navigácii sa objavilo tlačidlo prepínača jazykov HU/EN, ktoré okamžite prepína všetok text administrátorského rozhrania.'],
['hu' => 'Fordítási fájlok — teljes lefedés: Létrehozásra és feltöltésre kerültek a lang/hu/ és lang/en/ PHP nyelvi fájlok minden modulhoz: common, people, events, groups, donations, projects, tasks, users, settings, links, cal (naptár hónap- és napnevek), changelog.',
'en' => 'Translation files — full coverage: lang/hu/ and lang/en/ PHP language files created and populated for every module: common, people, events, groups, donations, projects, tasks, users, settings, links, cal (calendar month and day names), changelog.'],
['hu' => 'Admin listaoldalak fordítása: Minden admin index nézet átírva __() helperekkel — Kapcsolatok, Események, Csoportok, Adományok, Projektek, Feladatok, Felhasználók, Beállítások. A státusz/típus/prioritás badge-ek és a dropdown opciók mostantól a kiválasztott nyelvnek megfelelően jelennek meg.',
'en' => 'Admin list pages translated: All admin index views rewritten with __() helpers — Contacts, Events, Groups, Donations, Projects, Tasks, Users, Settings. Status/type/priority badges and dropdown options now display according to the selected language.'],
['hu' => 'Admin részletoldalak fordítása: A Projekt, Esemény, Adomány, Kapcsolat és Csoport részletoldalak (show nézetek) teljes szövege lefordítva. A dinamikus PHP értéktérképek (státusz, prioritás, típus, szerepkör) szintén __() hívásokat használnak.',
'en' => 'Admin detail pages translated: Full translation of the Project, Event, Donation, Contact and Group detail (show) views. Dynamic PHP value maps (status, priority, type, role) also use __() calls.'],
['hu' => 'Admin űrlapok fordítása: Minden szerkesztő és létrehozó oldal (form nézetek) átírva — Projektek, Események (teljes oldal + modal partial), Kapcsolatok, Csoportok. A legördülő opciók értéktérképek alapján töltődnek be a megfelelő nyelven.',
'en' => 'Admin forms translated: All edit and create pages (form views) rewritten — Projects, Events (full page + modal partial), Contacts, Groups. Dropdown options populate from value maps in the correct language.'],
['hu' => 'Naptár és Gantt JS-fordítás: A Projekt részletoldalon a Naptár és Gantt nézetekhez szükséges hónap/nap neveket PHP __() tömbök tárolják, amelyek @json() direktívával kerülnek a JavaScript kontextusba — így az oldal renderidejében a helyes lokalizált értékek jelennek meg.',
'en' => 'Calendar and Gantt JS translation: On the Project detail page, month/day names needed by the Calendar and Gantt views are stored in PHP __() arrays passed into JavaScript context via the @json() directive — rendering correctly localized values at page load time.'],
['hu' => 'Nyilvános eseményoldalak fordítása: A bejelentkezés nélkül elérhető nyilvános regisztrációs oldal (/e/{slug}) és a visszaigazoló oldal is teljes HU/EN fordítást kapott. A <html lang> attribútum mostantól dinamikusan tükrözi az aktuális locale-t.',
'en' => 'Public event pages translated: The login-free public registration page (/e/{slug}) and the confirmation page received full HU/EN translation. The <html lang> attribute now dynamically reflects the current locale.'],
['hu' => 'Verziókövetés oldal fordítása: A Changelog oldal data-driven szerkezetre váltott — a verziók bejegyzései PHP tömbökben tárolódnak hu/en kulcsokkal, a sablon locale alapján rendereli a megfelelő szöveget. Badge-ek és dátumok szintén kétnyelvűek.',
'en' => 'Changelog page translated: The Changelog page switched to a data-driven structure — version entries are stored in PHP arrays with hu/en keys, the template renders the correct text based on locale. Badges and dates are also bilingual.'],
['hu' => 'Súgó szekció teljes kétnyelvűsítése: Létrehozásra kerültek a lang/hu/help.php és lang/en/help.php fordítási fájlok. Az admin Súgó kezelése oldal és a nyilvános Súgó megtekintő (sugo.blade.php) minden szövege __() helperekkel lett átírva. A <html lang> attribútum dinamikus, az oldal fejléce és gombok is az aktív locale-t tükrözik.',
'en' => 'Full bilingual support for Help section: lang/hu/help.php and lang/en/help.php translation files created. All text in the admin Manage Help page and the public Help viewer (sugo.blade.php) rewritten with __() helpers. The <html lang> attribute is now dynamic; the page header and buttons reflect the active locale.'],
['hu' => 'Súgó cikkek kétnyelvű adatbázis-sémája: A help_articles tábla bővítésre került title_en és content_en (nullable) oszlopokkal. Három új súgó cikk jött létre teljes HU+EN tartalommal: Projektek, Verziókövetés, Súgó kezelése. A megjelenítő a locale alapján automatikusan vált a megfelelő nyelvre, hiányzó EN tartalom esetén a magyar verzióra esik vissza.',
'en' => 'Bilingual database schema for Help articles: The help_articles table was extended with nullable title_en and content_en columns. Three new help articles were created with full HU+EN content: Projects, Changelog, Manage Help. The viewer automatically switches to the correct language based on locale, falling back to Hungarian if EN content is missing.'],
['hu' => 'Súgó admin szerkesztő — kétnyelvű tabos modal: A Súgó kezelése oldalon az edit modal HU és EN fülekkel bővült, így az adminisztrátor mindkét nyelv tartalmát (cím + szöveg) egymástól függetlenül szerkesztheti és mentheti egyetlen felületen.',
'en' => 'Help admin editor — bilingual tabbed modal: The edit modal on the Manage Help page gained HU and EN language tabs, allowing the administrator to edit and save both language versions (title + content) independently from a single interface.'],
['hu' => 'Súgó cikkekhez képernyőképek: Minden súgó cikkhez (Főoldal, Kapcsolatok, Események, Csoportok, Adományok, Felhasználók, Beállítások, Projektek, Verziókövetés, Súgó kezelése) a leírás végére bekerült egy-egy jellemző képernyőkép (/public/img/sugo/ mappa). A képek kattintásra teljes képernyős lightbox nézetben nyílnak meg.',
'en' => 'Screenshots added to Help articles: A representative screenshot was appended to every help article (Dashboard, Contacts, Events, Groups, Donations, Users, Settings, Projects, Changelog, Manage Help) from the /public/img/sugo/ folder. Images open in a full-screen lightbox on click.'],
['hu' => 'Súgó megtekintő görgethetőség javítása: A sugo.blade.php elrendezésében a main elem explicit height: calc(100vh - 60px) és overflow-y: auto stílust kapott, így hosszabb cikkeknél és beillesztett képeknél az oldal megfelelően görgethetővé vált.',
'en' => 'Help viewer scrolling fix: In the sugo.blade.php layout the main element received an explicit height: calc(100vh - 60px) and overflow-y: auto style, making the page properly scrollable for longer articles and embedded screenshots.'],
],
],
[
'version' => 'v1.9.0',
'badge' => [
'text' => ['hu' => 'Fejlesztés', 'en' => 'Improvement', 'de' => 'Verbesserung', 'ro' => 'Îmbunătățire', 'sk' => 'Vylepšenie'],
'style' => 'background:rgba(64,81,137,0.1);color:#405189;',
],
'date' => ['hu' => '2026. május 6.', 'en' => 'May 6, 2026', 'de' => '6. Mai 2026', 'ro' => '6 mai 2026', 'sk' => '6. mája 2026'],
'items' => [
['hu' => 'Open Core GitHub stratégia — repó szétválasztás: A projekt nyilvános (nationforge-community) és privát (nationforge-pro) repóra vált szét. A Community MIT licenc alatt elérhető, a Pro fejlesztések külön privát repóban folynak.',
'en' => 'Open Core GitHub strategy — repo split: The project was split into a public (nationforge-community) and a private (nationforge-pro) repo. The Community edition is available under MIT license; Pro developments continue in a separate private repo.'],
['hu' => 'MIT LICENSE fájl hozzáadása: A Community kiadáshoz hivatalos LICENSE fájl került (MIT, Programozás Kft. 2026) — enélkül jogilag „minden jog fenntartva" lett volna érvényes.',
'en' => 'MIT LICENSE file added: An official LICENSE file (MIT, Programozás Kft. 2026) was added to the Community edition — without it, "all rights reserved" would have applied legally.'],
['hu' => 'GitHub README — angol hero kép: A főoldalon megjelenő marketing kép angol szövegű verzióra cserélve (Stronger communities. More action. Real change.), a GitHub globális fejlesztői közönsége számára.',
'en' => 'GitHub README — English hero image: The marketing image on the main page replaced with an English-text version (Stronger communities. More action. Real change.) for GitHub\'s global developer audience.'],
['hu' => 'README Pro-szekció linkelése: Az Open Core táblázatban a Pro oszlop és a call-to-action sor mostantól közvetlenül a nationforge-pro GitHub repóra hivatkozik.',
'en' => 'README Pro section linked: In the Open Core table, the Pro column and call-to-action row now link directly to the nationforge-pro GitHub repo.'],
['hu' => 'Repó tisztítás — érzékeny fájlok eltávolítása: A publikus repóból eltávolításra kerültek a helyi fejlesztői eszközök: .claude/ config, gitupdate.bat, get_help.php, run_help_fix.php, help_dump.json, help_fix.json. Mindegyik bekerült a .gitignore-ba.',
'en' => 'Repo cleanup — sensitive files removed: Local developer tools removed from the public repo: .claude/ config, gitupdate.bat, get_help.php, run_help_fix.php, help_dump.json, help_fix.json. All added to .gitignore.'],
['hu' => 'Pro repó automatikus Community-szinkron: A nationforge-pro repóhoz gitupdate.bat szkript készült, amely minden futtatáskor automatikusan behúzza a Community újításait (git fetch community && git merge), majd feltölti a Pro változásokat.',
'en' => 'Pro repo automatic Community sync: A gitupdate.bat script was created for the nationforge-pro repo that automatically pulls Community updates (git fetch community && git merge) on every run, then pushes Pro changes.'],
['hu' => 'Többnyelvűség a Roadmap-ben: A tervezett fejlesztések közé bekerült a többnyelvű támogatás (angol / magyar) mint közelgő funkció.',
'en' => 'Multi-language support in Roadmap: Multi-language support (English / Hungarian) was added to the planned features as an upcoming item.'],
['hu' => 'Nyilvános esemény-regisztráció (új funkció): Minden published státuszú eseményhez egyedi nyilvános regisztrációs oldal érhető el (/e/{slug}), bejelentkezés nélkül. A látogató megadja nevét, e-mail címét, telefonszámát, kísérők számát és megjegyzését. Kapacitáskorlát esetén vizuális töltöttségsáv jelenik meg, és ha az esemény betelt, a form helyett hibaüzenet látható. Sikeres regisztráció után visszaigazoló oldal fogadja a résztvevőt. Az admin Esemény részletoldalán megjelenik a regisztráltak listája (név, e-mail, telefon, kísérők, időpont), valamint egy „Publikus oldal" gomb.',
'en' => 'Public event registration (new feature): Every published event gets a unique public registration page (/e/{slug}), accessible without login. Visitors enter their name, email, phone, number of guests and a note. A visual capacity bar appears when a capacity limit is set; if the event is full, a notice replaces the form. A confirmation page greets the attendee after successful registration. The admin Event detail page displays the registrant list (name, email, phone, guests, time) and a "Public page" button.'],
],
],
[
'version' => 'v1.8.0',
'date' => ['hu' => '2026. május 5.', 'en' => 'May 5, 2026', 'de' => '5. Mai 2026', 'ro' => '5 mai 2026', 'sk' => '5. mája 2026'],
'items' => [
['hu' => 'Esemény 500-as hiba javítása (EventRsvp model): Az esemény részletoldal és a szerkesztés utáni átirányítás 500-as szerverhibával végződött, mert a App\Models\EventRsvp osztály hiányzott, noha az event_rsvps tábla az adatbázisban már létezett. A modell létrehozása megszüntette a hibát.',
'en' => 'Event 500 error fix (EventRsvp model): The event detail page and the redirect after editing ended with a 500 server error because the App\Models\EventRsvp class was missing, even though the event_rsvps table already existed in the database. Creating the model resolved the error.'],
['hu' => 'Esemény létrehozás/módosítás 500-as hiba javítása (ticket_price): Production MySQL strict módban az üres jegyár mező NULL értékként jutott a NOT NULL oszlopba, ami szerverhibát okozott. A vezérlőben bevezetett ?? 0 visszavezető érték megoldja a problémát.',
'en' => 'Event create/update 500 error fix (ticket_price): In production MySQL strict mode, an empty ticket price field reached the NOT NULL column as NULL, causing a server error. A ?? 0 fallback introduced in the controller\'s store() and update() methods resolves the issue.'],
['hu' => 'Közelgő események helyes számlálása: A főoldal „Közelgő esemény" számlálója korábban csak a published státuszú eseményeket vette figyelembe, holott az újonnan létrehozott események alapértelmezetten draft státusszal jönnek létre. Mostantól a cancelled és completed kivételével minden jövőbeli esemény beleszámít.',
'en' => 'Correct counting of upcoming events: The homepage "Upcoming events" counter previously only counted published events, while newly created events default to draft. Now all future events except cancelled and completed are counted.'],
['hu' => 'Főoldal görgetés javítása: A layout főoszlopa explicit height: calc(100vh - 38px) magasságot kapott, a <main> elem pedig flex:1; min-height:0 kombinációval tölti ki a maradék területet.',
'en' => 'Homepage scroll fix: The layout\'s main column received an explicit height: calc(100vh - 38px), and the <main> element fills the remaining area with flex:1; min-height:0 — so longer content scrolls correctly.'],
['hu' => 'Panel padding egységesítés: Az Esemény részletoldal Részletek panelén és a főoldal Közelgő események listáján a Tailwind px-5 osztályok helyett garantáltan érvényesülő inline padding: 20px stílusok kerültek be.',
'en' => 'Panel padding standardization: On the Event detail page\'s Details panel and the homepage Upcoming events list, Tailwind px-5 classes were replaced with guaranteed inline padding: 20px styles.'],
['hu' => 'Linkgyűjtemény modul (új oldal): Új /admin/links oldal, amely a mentett hivatkozásokat kategóriánként csoportosítva, kártyás elrendezésben jeleníti meg. Minden kártya tartalmaz színes ikont, leírást és domain-chip feliratot; kattintásra új lapon nyílik meg.',
'en' => 'Link collection module (new page): New /admin/links page displaying saved links grouped by category in a card layout. Each card contains a colored icon, description and domain chip label; clicking opens in a new tab.'],
['hu' => 'Linkgyűjtemény konfigurálása a Beállításokban: A Beállítások oldal alján új szekció teszi lehetővé a linkek kezelését (hozzáadás, szerkesztés, törlés) — modal alapú felülettel, cím, URL, kategória, szín, leírás, sorrend és aktív/inaktív mezőkkel.',
'en' => 'Link collection configuration in Settings: A new section at the bottom of the Settings page enables link management (add, edit, delete) — with a modal-based interface for title, URL, category, color, description, order and active/inactive fields.'],
['hu' => 'Gyorslinkek sáv — valódi URL-ek: A felső kék sávban lévő gyorslinkek megkapták a tényleges hivatkozásaikat: YouTube, Google Drive, Instagram, Hírek, Infografikonok. Minden link új lapon nyílik meg. A „Linkgyűjtemény" gomb az új /admin/links oldalra navigál.',
'en' => 'Quick links bar — real URLs: The quick links in the top blue bar received their actual links: YouTube, Google Drive, Instagram, News, Infographics. All links open in a new tab. The "Link Collection" button navigates to the new /admin/links page.'],
['hu' => 'Beállítások oldal teljes szélességű elrendezése: A korábban középre igazított, korlátozott szélességű Beállítások felület mostantól a teljes rendelkezésre álló területet kitölti. Az Általános és Email szekciók kétoszlopos rácsban helyezkednek el egymás mellett.',
'en' => 'Settings page full-width layout: The previously centered, limited-width Settings interface now fills all available space. The General and Email sections are arranged side by side in a two-column grid, with info cards (PHP, Laravel, Environment) below.'],
],
],
[
'version' => 'v1.7.0',
'date' => ['hu' => '2026. május 3.', 'en' => 'May 3, 2026', 'de' => '3. Mai 2026', 'ro' => '3 mai 2026', 'sk' => '3. mája 2026'],
'items' => [
['hu' => 'Oldalsáv menü egyszerűsítése: A CRM és Adminisztráció legördülő almenük megszűntek. A Kapcsolatok, Csoportok, Felhasználók, Beállítások, Verziókövetés és Súgó kezelése mostantól közvetlen, önálló menüpontokként érhetők el.',
'en' => 'Sidebar menu simplification: The CRM and Administration dropdown submenus were removed. Contacts, Groups, Users, Settings, Changelog and Help are now directly accessible as standalone menu items — reachable in a single click.'],
['hu' => 'Csoport részletoldal átrendezése: Az oldal bal oszlopába kerültek az Adatok és a Tagok panel egymás alatt, míg a Chat ablak a jobb oldali (kétharmados) oszlopot tölti ki — áttekinthetőbb, kétpaneles elrendezés.',
'en' => 'Group detail page rearrangement: The Data and Members panels were moved to the left column stacked vertically, while the Chat window fills the right (two-thirds) column — a clearer, two-panel layout.'],
['hu' => 'Chat ablak viewport-kitöltés: A csoport chat ablaka mostantól a böngészőablak teljes magasságát kitölti (topbartól az aljáig), és a jobb szélre van igazítva. JavaScript alapú position: fixed elhelyezés gondoskodik arról, hogy a Livewire poll-frissítés sem állítja vissza a pozíciót.',
'en' => 'Chat window viewport fill: The group chat window now fills the full height of the browser window (from topbar to bottom), aligned to the right edge. JavaScript-based position: fixed placement ensures Livewire poll updates don\'t reset the position.'],
['hu' => 'Szerepkörök magyar megnevezése: A Felhasználók létrehozás/szerkesztés modalban és a Csoport részletoldalon a szerepkör nevek angolról magyarra váltottak: super-admin → Főadmin, admin → Admin, editor → Szerkesztő, member → Tag.',
'en' => 'Localized role names: In the Users create/edit modal and the Group detail page, role names were updated to match the display locale: super-admin → Főadmin, admin → Admin, editor → Szerkesztő, member → Tag.'],
['hu' => 'Dashboard grafikonok (Chart.js): A főoldalra három látványos grafikon került: Havi adományok oszlopdiagram (utolsó 12 hónap), Kapcsolatok növekedése kettős-tengelyes vonaldiagram, és Kapcsolatok megoszlása fánkdiagram státusz szerint. A grafikonok valós adatbázis-adatokat jelenítenek meg.',
'en' => 'Dashboard charts (Chart.js): Three charts added to the homepage: Monthly donations bar chart (last 12 months), Contact growth dual-axis line chart (contacts + donations), and Contact distribution donut chart by status with custom percentage legend. Charts display live database data.'],
],
],
[
'version' => 'v1.6.0',
'date' => ['hu' => '2026. május 2.', 'en' => 'May 2, 2026', 'de' => '2. Mai 2026', 'ro' => '2 mai 2026', 'sk' => '2. mája 2026'],
'items' => [
['hu' => 'Felhasználók ↔ Csoportok hozzárendelés: A rendszer felhasználói mostantól csoportokhoz rendelhetők — külön group_user pivot tábla és M:N kapcsolat a User és Group modellek között.',
'en' => 'Users ↔ Groups assignment: System users can now be assigned to groups — separate group_user pivot table and M:N relationship between the User and Group models.'],
['hu' => 'Csoportok részletoldala — Felhasználók megjelenítése: A csoport tagok listájában mostantól a Felhasználók is szerepelnek a Kapcsolatok mellett, megjelölve a típusukat (Kapcsolat / Felhasználó), szerepkörük badge-dzsel ellátva.',
'en' => 'Group detail page — User display: Users now appear alongside Contacts in the group members list, labeled with their type (Contact / User) and a role badge.'],
['hu' => 'Chip/pill csoport-választó: A Kapcsolatok és Felhasználók szerkesztő modaljaiban a nehézkes többválasztós listát letisztult, kattintható chip-gombok váltják fel — egyetlen kattintással aktiválható/deaktiválható minden csoport.',
'en' => 'Chip/pill group selector: In the Contacts and Users edit modals, the cumbersome multi-select list was replaced by clean, clickable chip buttons — each group can be toggled with a single click.'],
['hu' => 'Jelszó szem ikon (Felhasználók): A Felhasználók létrehozás és szerkesztés modalokban a jelszó- és jelszó-megerősítés mezők mellé szem ikon került, amellyel a beírt jelszó láthatóvá tehető.',
'en' => 'Password eye icon (Users): An eye icon was added to the password and password confirmation fields in the Users create and edit modals, allowing the entered password to be shown/hidden.'],
['hu' => 'Jelszó validációs javítás: Felhasználó szerkesztésekor az üres jelszó mezők már nem okoznak validációs hibát — a confirmed szabály csak akkor fut le, ha ténylegesen van megadott jelszó.',
'en' => 'Password validation fix: When editing a user, empty password fields no longer cause validation errors — the confirmed rule only runs if a password is actually entered.'],
['hu' => 'Oldalsáv logo csere: A bal felső sarokbeli ikon lecserélve a NationForge márkaképnek megfelelő sötétkék hatszög alapú „N" logóra, világoskék szegéllyel.',
'en' => 'Sidebar logo replacement: The icon in the top-left corner was replaced with a NationForge-branded dark blue hexagon "N" logo with a light blue border.'],
['hu' => 'Oldalsáv menü egyszerűsítése: A CRM és Adminisztráció legördülő almenük megszűntek — a Kapcsolatok, Csoportok, Felhasználók, Beállítások, Verziókövetés és Súgó mostantól közvetlen menüpontokként érhetők el.',
'en' => 'Sidebar menu simplification: The CRM and Administration dropdown submenus were removed — Contacts, Groups, Users, Settings, Changelog and Help are now directly accessible as standalone menu items.'],
],
],
[
'version' => 'v1.5.2',
'date' => ['hu' => '2026. május 2.', 'en' => 'May 2, 2026', 'de' => '2. Mai 2026', 'ro' => '2 mai 2026', 'sk' => '2. mája 2026'],
'items' => [
['hu' => 'Főoldal (Dashboard) vizuális finomítása: A "Legújabb kapcsolatok" listájának igazítása, a megjelenített tartalmak megfelelő bal oldali belső margót kaptak a szebb elrendezés érdekében.',
'en' => 'Dashboard visual refinement: Alignment of the "Latest contacts" list; displayed items received proper left padding for a cleaner layout.'],
['hu' => 'Súgó — Dinamikus képmegjelenítés: A súgó cikkekhez integrálásra került egy teljes képernyős képnézegető (lightbox) funkció.',
'en' => 'Help — Dynamic image display: A full-screen image viewer (lightbox) function was integrated for help articles.'],
['hu' => 'Képnagyítás élmény javítása: A lightbox finomhangolása, így a feltöltött képek kattintáskor a képernyő 90%-át dinamikusan kitöltve jelennek meg, megtartva az eredeti méretarányokat.',
'en' => 'Image zoom experience improvement: Lightbox fine-tuning so that uploaded images appear dynamically filling 90% of the screen on click, maintaining original aspect ratios.'],
],
],
[
'version' => 'v1.5.1',
'date' => ['hu' => '2026. május 1.', 'en' => 'May 1, 2026', 'de' => '1. Mai 2026', 'ro' => '1 mai 2026', 'sk' => '1. mája 2026'],
'items' => [
['hu' => 'Elrendezés és görgetés javítása: A teljes admin felület layoutjának optimalizálása (CSS calc használata a Flexbox korlátok helyett), így a hosszú tartalmak tökéletesen görgethetők maradnak.',
'en' => 'Layout and scroll fix: Full admin interface layout optimization (using CSS calc instead of Flexbox constraints) so long content scrolls correctly.'],
['hu' => 'Dinamikus számlálók a menüben: A bal oldali menüsáv mostantól valós időben mutatja az adatbázisban lévő rekordok pontos számát a modulok (Kapcsolatok, Projektek stb.) mellett.',
'en' => 'Dynamic counters in menu: The left sidebar now shows the exact count of database records next to each module (Contacts, Projects, etc.) in real time.'],
['hu' => 'Livewire 404 hiba javítása Forge-on: A rendszer automatikusan publikálja a Livewire asseteket telepítéskor (post-autoload-dump), és be lett állítva a pontos statikus fizikai elérési út, kiküszöbölve a Nginx hibás .js fájl kiszolgálását.',
'en' => 'Livewire 404 fix on Forge: The system automatically publishes Livewire assets on deployment (post-autoload-dump), and the exact static physical path was configured, eliminating Nginx\'s incorrect .js file serving on the production server.'],
['hu' => 'Beragadt csomagok takarítása: A Filament végleges eltávolításának utolsó lépéseként a felesleges filament:upgrade parancs kikerült a Composer folyamatból, ami eddig telepítési hibát okozott.',
'en' => 'Stuck package cleanup: As the final step of removing Filament, the unnecessary filament:upgrade command was removed from the Composer process, which was previously causing installation errors.'],
],
],
[
'version' => 'v1.5.0',
'date' => ['hu' => '2026. május 1.', 'en' => 'May 1, 2026', 'de' => '1. Mai 2026', 'ro' => '1 mai 2026', 'sk' => '1. mája 2026'],
'items' => [
['hu' => 'Sor kattintásra szerkesztés — Csoportok: Az egész táblázatsor kattintható, megnyitja a szerkesztő modalt. Új szemikon (👁) navigál a részletoldalra az akciósávban.',
'en' => 'Row click to edit — Groups: The entire table row is clickable, opening the edit modal. A new eye icon (👁) navigates to the detail page from the action bar.'],
['hu' => 'Sor kattintásra szerkesztés — Események: Ugyanez a viselkedés az Események listában, külön Megnyitás gombbal a részletoldalhoz.',
'en' => 'Row click to edit — Events: The same behavior in the Events list, with a separate Open button for the detail page.'],
['hu' => 'Sor kattintásra szerkesztés — Feladatok: A feladatlista sorai kattinthatók; a státusz dropdown és a törlés gomb nem indítja el a szerkesztőt (stopPropagation).',
'en' => 'Row click to edit — Tasks: Task list rows are clickable; the status dropdown and delete button don\'t trigger the editor (stopPropagation).'],
['hu' => 'data-* attribútum alapú megközelítés: Az inline JS argumentumok helyett HTML data-attribútumok tárolják az adatokat — megbízhatóbb, speciális karakterek és ékezetek sem okoznak problémát.',
'en' => 'data-* attribute approach: HTML data attributes store the data instead of inline JS arguments — more reliable, special characters and accented letters cause no issues.'],
['hu' => 'URL generálás javítása (feladatok): A szerkesztő form action URL-je Blade url() helperrel generálódik, így XAMPP al-könyvtárban is helyes az útvonal.',
'en' => 'URL generation fix (tasks): The editor form action URL is generated with the Blade url() helper, so the path is correct even in XAMPP subdirectories.'],
],
],
[
'version' => 'v1.4.0',
'badge' => [
'text' => ['hu' => 'Új modul', 'en' => 'New module', 'de' => 'Neues Modul', 'ro' => 'Modul nou', 'sk' => 'Nový modul'],
'style' => 'background:rgba(64,81,137,0.1);color:#405189;',
],
'date' => ['hu' => '2026. május 1.', 'en' => 'May 1, 2026', 'de' => '1. Mai 2026', 'ro' => '1 mai 2026', 'sk' => '1. mája 2026'],
'items' => [
['hu' => 'Projektkezelő modul: Teljes CRUD — projektek létrehozása, szerkesztése, törlése. Státusz (tervezés / aktív / lezárt / felfüggesztve) és prioritás (alacsony / közepes / magas) kezeléssel.',
'en' => 'Project management module: Full CRUD — create, edit, delete projects. With status (planning / active / completed / on hold) and priority (low / medium / high) management.'],
['hu' => 'Projekt–Feladat kapcsolat: Feladatok projektekhez rendelhetők; a projekt részletoldalán látható az összes kapcsolódó feladat.',
'en' => 'Project–Task relationship: Tasks can be assigned to projects; all related tasks are visible on the project detail page.'],
['hu' => 'Haladásjelző (Progress %): A projekt előrehaladása automatikusan számítódik a kész feladatok aránya alapján, vizuális progress bar-ral.',
'en' => 'Progress indicator (Progress %): Project progress is automatically calculated based on the ratio of completed tasks, with a visual progress bar.'],
['hu' => 'Projekt részletoldal (show): Bal oszlop: metaadatok, haladás, statisztikák (nyitott / folyamatban / kész feladatszámok). Jobb oszlop: feladatlista inline státuszváltóval.',
'en' => 'Project detail page (show): Left column: metadata, progress, statistics (open / in progress / done task counts). Right column: task list with inline status switcher.'],
['hu' => 'Lejárt projekt jelzés: Ha a projekt határideje elmúlt és még nincs lezárva, piros „Lejárt" badge jelenik meg.',
'en' => 'Overdue project indicator: If the project deadline has passed and it\'s not yet closed, a red "Overdue" badge appears.'],
['hu' => 'Projekt szűrő a feladatlistában: A Feladatok oldalon projekt szerint is szűrhető a lista, beleértve a „Projekt nélküli" feladatok szűrőjét.',
'en' => 'Project filter in task list: On the Tasks page, the list can be filtered by project, including a "No project" filter option.'],
],
],
[
'version' => 'v1.3.0',
'badge' => [
'text' => ['hu' => 'Új modul', 'en' => 'New module', 'de' => 'Neues Modul', 'ro' => 'Modul nou', 'sk' => 'Nový modul'],
'style' => 'background:rgba(64,81,137,0.1);color:#405189;',
],
'date' => ['hu' => '2026. május 1.', 'en' => 'May 1, 2026', 'de' => '1. Mai 2026', 'ro' => '1 mai 2026', 'sk' => '1. mája 2026'],
'items' => [
['hu' => 'Feladatkezelő modul: Teljes CRUD — feladatok létrehozása, szerkesztése, törlése. Prioritás (alacsony / közepes / magas / sürgős) és státusz (nyitott / folyamatban / kész) kezeléssel.',
'en' => 'Task management module: Full CRUD — create, edit, delete tasks. With priority (low / medium / high / urgent) and status (open / in progress / done) management.'],
['hu' => 'Inline státuszváltó: A feladatlista táblázatában közvetlenül váltható a státusz legördülő menüből, oldal-újratöltés nélkül.',
'en' => 'Inline status switcher: Status can be changed directly from a dropdown in the task list table, without page reload (form submit).'],
['hu' => 'Felelős hozzárendelés: Minden feladathoz rendelhető felelős felhasználó; az admin panel felhasználói listájából választható.',
'en' => 'Assignee assignment: Every task can be assigned to a responsible user; selectable from the admin panel\'s user list.'],
['hu' => 'Határidő és lejárat jelzés: Lejárt feladatoknál piros dátumszín és „Lejárt" badge figyelmezteti az adminisztrátort.',
'en' => 'Deadline and overdue indicator: For overdue tasks, a red date color and "Overdue" badge warns the administrator.'],
['hu' => 'Statisztikai kártyák: A feladatlista tetején összesítők jelennek meg: összes / nyitott / folyamatban / kész darabszámokkal, amelyek szűrőként is működnek.',
'en' => 'Statistics cards: Summaries appear at the top of the task list: total / open / in progress / done counts, which also work as filters.'],
['hu' => 'Sidebar badge: A navigációs sávban a Feladatok menüpont mellett élő számláló mutatja az aktív (nyitott + folyamatban) feladatok számát.',
'en' => 'Sidebar badge: In the navigation bar, a live counter next to the Tasks menu item shows the number of active (open + in progress) tasks.'],
['hu' => 'GitHub szinkronizáció: gitupdate.bat szkript a projekt automatikus feltöltéséhez a GitHub repóba, XAMPP jogosultsági fix-szel.',
'en' => 'GitHub synchronization: gitupdate.bat script for automatically pushing the project to GitHub, with XAMPP permissions fix.'],
],
],
[
'version' => 'v1.2.0',
'badge' => [
'text' => ['hu' => 'Fejlesztés', 'en' => 'Improvement', 'de' => 'Verbesserung', 'ro' => 'Îmbunătățire', 'sk' => 'Vylepšenie'],
'style' => 'background:rgba(247,184,75,0.12);color:#c9920a;',
],
'date' => ['hu' => '2026. május 1.', 'en' => 'May 1, 2026', 'de' => '1. Mai 2026', 'ro' => '1 mai 2026', 'sk' => '1. mája 2026'],
'items' => [
['hu' => 'Magyar bejelentkezési felület: Az összes login oldal szövege (E-mail, Jelszó, Bejelentkezés, hibaüzenetek) teljes egészében magyarra lett fordítva JSON és PHP nyelvi fájlok segítségével.',
'en' => 'Localized login interface: All login page text (Email, Password, Login, error messages) was fully translated using JSON and PHP language files.'],
['hu' => 'Jelszó megjelenítő szem ikon: A jelszó beviteli mező jobb szélén toggle gomb jelenik meg, amellyel a jelszó láthatóvá / elrejtetté tehető (Alpine.js x-bind:type).',
'en' => 'Password show eye icon: A toggle button appears on the right side of the password field, allowing the password to be shown/hidden (Alpine.js x-bind:type).'],
['hu' => 'Különálló admin bejelentkezés: Az /admin/login route különálló Volt komponenssel rendelkezik; sikeres belépés után az admin dashboardra irányít.',
'en' => 'Separate admin login: The /admin/login route has a dedicated Volt component; after successful login it redirects to the admin dashboard, showing an error for non-admin users.'],
['hu' => 'Admin login háttérkép: Az admin bejelentkezési oldalon teljes képernyős háttérkép látható, a bejelentkezési panel a jobb oldalon félátlátszó, blur-hatású kártyában helyezkedik el.',
'en' => 'Admin login background image: The admin login page features a full-screen background image, with the login panel on the right in a semi-transparent, blur-effect card.'],
['hu' => 'AdminMiddleware javítás: Nem bejelentkezett felhasználó esetén a middleware az admin.login route-ra irányít (korábban 403 hibát dobott).',
'en' => 'AdminMiddleware fix: For non-logged-in users, the middleware now redirects to the admin.login route (previously threw a 403 error).'],
],
],
[
'version' => 'v1.1.0',
'badge' => [
'text' => ['hu' => 'Fejlesztés', 'en' => 'Improvement', 'de' => 'Verbesserung', 'ro' => 'Îmbunătățire', 'sk' => 'Vylepšenie'],
'style' => 'background:rgba(247,184,75,0.12);color:#c9920a;',
],
'date' => ['hu' => '2026. április', 'en' => 'April 2026', 'de' => 'April 2026', 'ro' => 'Aprilie 2026', 'sk' => 'Apríl 2026'],
'items' => [
['hu' => 'Önálló Súgó oldal kialakítása: A súgó popup rendszert leváltotta egy elegáns, teljes oldalas megjelenítés.',
'en' => 'Standalone Help page: The help popup system was replaced by an elegant, full-page display.'],
['hu' => 'Markdown támogatás: A súgó cikkeket mostantól Markdown formátummal is lehet rendszerezni (félkövér, címsorok stb.).',
'en' => 'Markdown support: Help articles can now use Markdown formatting (bold, headings, etc.).'],
['hu' => 'Adatbázis korrekciók: A súgó alapértelmezett cikkei nyelvtanilag tökéletes, magyar ékezetes formában kerültek rögzítésre.',
'en' => 'Database corrections: The default help articles were stored in grammatically correct form.'],
['hu' => 'Verziókövetés (Changelog): Létrehozásra került ez a menüpont a fejlesztések és az eddigi munka áttekintésére.',
'en' => 'Changelog: This menu item was created to track and review all developments.'],
],
],
[
'version' => 'v1.0.0',
'badge' => [
'text' => ['hu' => 'Mérföldkő', 'en' => 'Milestone', 'de' => 'Meilenstein', 'ro' => 'Etapă majoră', 'sk' => 'Míľnik'],
'style' => 'background:rgba(64,81,137,0.1);color:#405189;',
],
'date' => ['hu' => 'Indulás, Alaprendszer', 'en' => 'Launch, Core system', 'de' => 'Start, Kernsystem', 'ro' => 'Lansare, Sistem de bază', 'sk' => 'Štart, Základný systém'],
'items' => [
['hu' => 'Környezet kialakítása: XAMPP kompatibilitás, URL routing fixek, Laravel 12.56 beállítás.',
'en' => 'Environment setup: XAMPP compatibility, URL routing fixes, Laravel 12.56 configuration.'],
['hu' => 'Admin felület újjáépítése: Filament eltávolítása, gyorsabb, modern Velzon-stílusú egyedi Tailwind panellé.',
'en' => 'Admin interface rebuild: Filament removed, replaced with a faster, modern Velzon-style custom Tailwind panel.'],
['hu' => 'Jogosultságkezelés: Spatie Permission alapú szerepkörök (super-admin, admin, editor, member) bevezetése.',
'en' => 'Access control: Spatie Permission-based roles (super-admin, admin, editor, member) introduced.'],
['hu' => 'Kapcsolatok (CRM): Emberek, státuszok, előfizetések, és részletes profiladatok nyilvántartása fejlesztve.',
'en' => 'Contacts (CRM): People, statuses, subscriptions, and detailed profile data tracking developed.'],
['hu' => 'Csoportok modul: Kapcsolatok tematikus elrendezése csoportokba M:N kapcsolatokon keresztül.',
'en' => 'Groups module: Thematic arrangement of contacts into groups through M:N relationships.'],
['hu' => 'Események kezelése: Események CRUD felülete naptári validációval, RSVP előkészítéssel.',
'en' => 'Events management: Events CRUD interface with calendar validation and RSVP preparation.'],
['hu' => 'Adományok megtekintése: Tranzakciólista a pénzügyi transzferek könnyű nyomonkövetéséhez.',
'en' => 'Donations view: Transaction list for easy tracking of financial transfers.'],
],
],
];
@endphp