Feature-Toggles, Administration, wiederkehrende Events und Event-Serien
- Administration & Rollenmanagement: Neuer Admin-Bereich mit Feature-Toggles und Sichtbarkeitseinstellungen pro Rolle (11 Toggles, 24 Visibility-Settings) - AdministrationController mit eigenem Settings-Tab, aus SettingsController extrahiert - Feature-Toggle-Guards in Controllers (Invitation, File, ListGenerator, Comment) und Views (events/show, events/edit, events/create) - Setting::isFeatureEnabled() und isFeatureVisibleFor() Hilfsmethoden - Wiederkehrende Trainings: Täglich/Wöchentlich/2-Wöchentlich mit Ende per Datum oder Anzahl (max. 52), Vorschau im Formular - Event-Serien: Verknüpfung über event_series_id (UUID), Modal-Dialog beim Speichern und Löschen mit Optionen "nur dieses" / "alle folgenden" - Löschen-Button direkt in der Event-Bearbeitung mit Serien-Dialog - DemoDataSeeder: 4 Trainings als Serie mit gemeinsamer event_series_id - Übersetzungen in allen 6 Sprachen (de, en, pl, ru, ar, tr) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -627,4 +627,57 @@ return [
|
||||
|
||||
// الرؤية
|
||||
'visibility_feature_finances' => 'المالية',
|
||||
|
||||
// Administration
|
||||
'nav_administration' => 'الإدارة',
|
||||
'admin_title' => 'الإدارة',
|
||||
'admin_tab_features' => 'إدارة الأدوار',
|
||||
'admin_tab_mail' => 'البريد الإلكتروني',
|
||||
'admin_tab_license' => 'الترخيص والدعم',
|
||||
'admin_tab_maintenance' => 'الصيانة',
|
||||
'admin_tab_activity' => 'سجل النشاط',
|
||||
'features_description' => 'تفعيل أو تعطيل الميزات بشكل عام والتحكم في الرؤية لكل دور. الوظائف الأساسية (الأحداث، الفرق، اللاعبون، المستخدمون) نشطة دائمًا.',
|
||||
'feature_enabled' => 'مفعّل',
|
||||
'feature_disabled' => 'معطّل',
|
||||
'feature_statistics' => 'الإحصائيات',
|
||||
'feature_finances' => 'المالية',
|
||||
'feature_catering' => 'التموين',
|
||||
'feature_timekeepers' => 'ضبط الوقت',
|
||||
'feature_carpools' => 'مشاركة السيارات',
|
||||
'feature_comments' => 'التعليقات',
|
||||
'feature_files' => 'الملفات',
|
||||
'feature_faqs' => 'الأسئلة الشائعة',
|
||||
'feature_list_generator' => 'مولد القوائم',
|
||||
'feature_invitations' => 'الدعوات',
|
||||
'feature_player_stats' => 'إحصائيات اللاعبين',
|
||||
'features_saved' => 'تم حفظ إدارة الأدوار.',
|
||||
'activity_recent' => 'الأنشطة الأخيرة',
|
||||
|
||||
// التكرار
|
||||
'recurrence' => 'التكرار',
|
||||
'recurrence_none' => 'بدون تكرار',
|
||||
'recurrence_daily' => 'يومياً',
|
||||
'recurrence_weekly' => 'أسبوعياً',
|
||||
'recurrence_biweekly' => 'كل أسبوعين',
|
||||
'recurrence_end_type' => 'نهاية التكرار',
|
||||
'recurrence_end_date' => 'حتى تاريخ',
|
||||
'recurrence_end_count' => 'عدد التكرارات',
|
||||
'recurrence_count_label' => 'العدد (بدون الحدث الأول)',
|
||||
'recurrence_preview' => 'سيتم إنشاء :count أحداث إضافية',
|
||||
'recurrence_max_warning' => 'الحد الأقصى :max حدث',
|
||||
'recurrence_created' => 'تم إنشاء :count أحداث تدريبية.',
|
||||
|
||||
// سلسلة الأحداث
|
||||
'save_following' => 'تحديث جميع الأحداث التالية',
|
||||
'series_hint' => 'هذا الحدث جزء من سلسلة. هناك :count أحداث قادمة أخرى.',
|
||||
'save_series_title' => 'حفظ التغييرات',
|
||||
'save_series_description' => 'هذا الحدث جزء من سلسلة تحتوي على :count مواعيد قادمة أخرى. هل تريد تطبيق التغييرات على الأحداث التالية أيضًا؟',
|
||||
'save_only_this' => 'حفظ هذا الحدث فقط',
|
||||
'save_this_and_following' => 'تحديث هذا وجميع الأحداث التالية',
|
||||
'delete_series_title' => 'حذف سلسلة الأحداث',
|
||||
'delete_series_description' => 'هذا الحدث ينتمي إلى سلسلة متكررة. ماذا تريد حذفه؟',
|
||||
'delete_only_this' => 'حذف هذا الحدث فقط',
|
||||
'delete_this_and_following' => 'حذف هذا وجميع الأحداث التالية',
|
||||
'series_events_deleted' => 'تم حذف :count أحداث.',
|
||||
'series_events_updated' => 'تم تحديث هذا الحدث و :count أحداث تالية.',
|
||||
];
|
||||
|
||||
@@ -663,4 +663,57 @@ return [
|
||||
|
||||
// Sichtbarkeit
|
||||
'visibility_feature_finances' => 'Finanzen',
|
||||
|
||||
// Administration
|
||||
'nav_administration' => 'Administration',
|
||||
'admin_title' => 'Administration',
|
||||
'admin_tab_features' => 'Rollenmanagement',
|
||||
'admin_tab_mail' => 'E-Mail',
|
||||
'admin_tab_license' => 'Lizenz & Support',
|
||||
'admin_tab_maintenance' => 'Wartung',
|
||||
'admin_tab_activity' => 'Aktivitätslog',
|
||||
'features_description' => 'Aktiviere oder deaktiviere Funktionen global und steuere die Sichtbarkeit pro Rolle. Basis-Funktionen (Events, Teams, Spieler, Benutzer) sind immer aktiv.',
|
||||
'feature_enabled' => 'Aktiviert',
|
||||
'feature_disabled' => 'Deaktiviert',
|
||||
'feature_statistics' => 'Statistiken',
|
||||
'feature_finances' => 'Finanzen',
|
||||
'feature_catering' => 'Catering',
|
||||
'feature_timekeepers' => 'Zeitnehmer',
|
||||
'feature_carpools' => 'Fahrgemeinschaften',
|
||||
'feature_comments' => 'Kommentare',
|
||||
'feature_files' => 'Dateien',
|
||||
'feature_faqs' => 'FAQs',
|
||||
'feature_list_generator' => 'Listenerstellung',
|
||||
'feature_invitations' => 'Einladungen',
|
||||
'feature_player_stats' => 'Spielerstatistiken',
|
||||
'features_saved' => 'Rollenmanagement gespeichert.',
|
||||
'activity_recent' => 'Letzte Aktivitäten',
|
||||
|
||||
// Wiederholung
|
||||
'recurrence' => 'Wiederholung',
|
||||
'recurrence_none' => 'Keine Wiederholung',
|
||||
'recurrence_daily' => 'Täglich',
|
||||
'recurrence_weekly' => 'Wöchentlich',
|
||||
'recurrence_biweekly' => 'Alle 2 Wochen',
|
||||
'recurrence_end_type' => 'Ende der Wiederholung',
|
||||
'recurrence_end_date' => 'Bis Datum',
|
||||
'recurrence_end_count' => 'Anzahl Wiederholungen',
|
||||
'recurrence_count_label' => 'Anzahl (ohne erstes Event)',
|
||||
'recurrence_preview' => ':count weitere Events werden erstellt',
|
||||
'recurrence_max_warning' => 'Maximal :max Events möglich',
|
||||
'recurrence_created' => ':count Trainings-Events erstellt.',
|
||||
|
||||
// Event-Serien
|
||||
'save_following' => 'Alle folgenden aktualisieren',
|
||||
'series_hint' => 'Dieses Event ist Teil einer Serie. Es gibt :count weitere Folgetermine.',
|
||||
'save_series_title' => 'Änderungen speichern',
|
||||
'save_series_description' => 'Dieses Event gehört zu einer Serie mit :count weiteren Folgeterminen. Sollen die Änderungen auch auf die Folgetermine angewendet werden?',
|
||||
'save_only_this' => 'Nur dieses Event speichern',
|
||||
'save_this_and_following' => 'Dieses und alle folgenden Events aktualisieren',
|
||||
'delete_series_title' => 'Event-Serie löschen',
|
||||
'delete_series_description' => 'Dieses Event gehört zu einer wiederkehrenden Serie. Was möchten Sie löschen?',
|
||||
'delete_only_this' => 'Nur dieses Event löschen',
|
||||
'delete_this_and_following' => 'Dieses und alle folgenden Events löschen',
|
||||
'series_events_deleted' => ':count Events gelöscht.',
|
||||
'series_events_updated' => 'Dieses Event und :count Folgetermine aktualisiert.',
|
||||
];
|
||||
|
||||
@@ -626,4 +626,57 @@ return [
|
||||
|
||||
// Visibility
|
||||
'visibility_feature_finances' => 'Finances',
|
||||
|
||||
// Administration
|
||||
'nav_administration' => 'Administration',
|
||||
'admin_title' => 'Administration',
|
||||
'admin_tab_features' => 'Role Management',
|
||||
'admin_tab_mail' => 'Email',
|
||||
'admin_tab_license' => 'License & Support',
|
||||
'admin_tab_maintenance' => 'Maintenance',
|
||||
'admin_tab_activity' => 'Activity Log',
|
||||
'features_description' => 'Enable or disable features globally and control visibility per role. Base features (Events, Teams, Players, Users) are always active.',
|
||||
'feature_enabled' => 'Enabled',
|
||||
'feature_disabled' => 'Disabled',
|
||||
'feature_statistics' => 'Statistics',
|
||||
'feature_finances' => 'Finances',
|
||||
'feature_catering' => 'Catering',
|
||||
'feature_timekeepers' => 'Timekeepers',
|
||||
'feature_carpools' => 'Carpools',
|
||||
'feature_comments' => 'Comments',
|
||||
'feature_files' => 'Files',
|
||||
'feature_faqs' => 'FAQs',
|
||||
'feature_list_generator' => 'List Generator',
|
||||
'feature_invitations' => 'Invitations',
|
||||
'feature_player_stats' => 'Player Statistics',
|
||||
'features_saved' => 'Role management saved.',
|
||||
'activity_recent' => 'Recent Activities',
|
||||
|
||||
// Recurrence
|
||||
'recurrence' => 'Recurrence',
|
||||
'recurrence_none' => 'No recurrence',
|
||||
'recurrence_daily' => 'Daily',
|
||||
'recurrence_weekly' => 'Weekly',
|
||||
'recurrence_biweekly' => 'Every 2 weeks',
|
||||
'recurrence_end_type' => 'End of recurrence',
|
||||
'recurrence_end_date' => 'Until date',
|
||||
'recurrence_end_count' => 'Number of repetitions',
|
||||
'recurrence_count_label' => 'Count (excluding first event)',
|
||||
'recurrence_preview' => ':count additional events will be created',
|
||||
'recurrence_max_warning' => 'Maximum :max events possible',
|
||||
'recurrence_created' => ':count training events created.',
|
||||
|
||||
// Event Series
|
||||
'save_following' => 'Update all following',
|
||||
'series_hint' => 'This event is part of a series. There are :count more upcoming events.',
|
||||
'save_series_title' => 'Save changes',
|
||||
'save_series_description' => 'This event is part of a series with :count more upcoming events. Should the changes also be applied to the following events?',
|
||||
'save_only_this' => 'Save only this event',
|
||||
'save_this_and_following' => 'Update this and all following events',
|
||||
'delete_series_title' => 'Delete event series',
|
||||
'delete_series_description' => 'This event belongs to a recurring series. What would you like to delete?',
|
||||
'delete_only_this' => 'Delete only this event',
|
||||
'delete_this_and_following' => 'Delete this and all following events',
|
||||
'series_events_deleted' => ':count events deleted.',
|
||||
'series_events_updated' => 'This event and :count following events updated.',
|
||||
];
|
||||
|
||||
@@ -627,4 +627,57 @@ return [
|
||||
|
||||
// Widoczność
|
||||
'visibility_feature_finances' => 'Finanse',
|
||||
|
||||
// Administration
|
||||
'nav_administration' => 'Administracja',
|
||||
'admin_title' => 'Administracja',
|
||||
'admin_tab_features' => 'Zarządzanie rolami',
|
||||
'admin_tab_mail' => 'E-mail',
|
||||
'admin_tab_license' => 'Licencja i wsparcie',
|
||||
'admin_tab_maintenance' => 'Konserwacja',
|
||||
'admin_tab_activity' => 'Dziennik aktywności',
|
||||
'features_description' => 'Włącz lub wyłącz funkcje globalnie i kontroluj widoczność dla poszczególnych ról. Funkcje podstawowe (wydarzenia, zespoły, zawodnicy, użytkownicy) są zawsze aktywne.',
|
||||
'feature_enabled' => 'Włączony',
|
||||
'feature_disabled' => 'Wyłączony',
|
||||
'feature_statistics' => 'Statystyki',
|
||||
'feature_finances' => 'Finanse',
|
||||
'feature_catering' => 'Catering',
|
||||
'feature_timekeepers' => 'Chronometrażyści',
|
||||
'feature_carpools' => 'Wspólne przejazdy',
|
||||
'feature_comments' => 'Komentarze',
|
||||
'feature_files' => 'Pliki',
|
||||
'feature_faqs' => 'FAQ',
|
||||
'feature_list_generator' => 'Generator list',
|
||||
'feature_invitations' => 'Zaproszenia',
|
||||
'feature_player_stats' => 'Statystyki zawodników',
|
||||
'features_saved' => 'Zarządzanie rolami zapisane.',
|
||||
'activity_recent' => 'Ostatnie aktywności',
|
||||
|
||||
// Powtarzalność
|
||||
'recurrence' => 'Powtarzalność',
|
||||
'recurrence_none' => 'Bez powtarzania',
|
||||
'recurrence_daily' => 'Codziennie',
|
||||
'recurrence_weekly' => 'Co tydzień',
|
||||
'recurrence_biweekly' => 'Co 2 tygodnie',
|
||||
'recurrence_end_type' => 'Koniec powtarzania',
|
||||
'recurrence_end_date' => 'Do daty',
|
||||
'recurrence_end_count' => 'Liczba powtórzeń',
|
||||
'recurrence_count_label' => 'Ilość (bez pierwszego wydarzenia)',
|
||||
'recurrence_preview' => 'Zostanie utworzonych :count dodatkowych wydarzeń',
|
||||
'recurrence_max_warning' => 'Maksymalnie :max wydarzeń',
|
||||
'recurrence_created' => 'Utworzono :count wydarzeń treningowych.',
|
||||
|
||||
// Serie wydarzeń
|
||||
'save_following' => 'Zaktualizuj wszystkie następne',
|
||||
'series_hint' => 'To wydarzenie jest częścią serii. Istnieje :count kolejnych terminów.',
|
||||
'save_series_title' => 'Zapisz zmiany',
|
||||
'save_series_description' => 'To wydarzenie jest częścią serii z :count kolejnymi terminami. Czy zmiany mają być zastosowane również do następnych wydarzeń?',
|
||||
'save_only_this' => 'Zapisz tylko to wydarzenie',
|
||||
'save_this_and_following' => 'Zaktualizuj to i wszystkie następne wydarzenia',
|
||||
'delete_series_title' => 'Usuń serię wydarzeń',
|
||||
'delete_series_description' => 'To wydarzenie należy do powtarzającej się serii. Co chcesz usunąć?',
|
||||
'delete_only_this' => 'Usuń tylko to wydarzenie',
|
||||
'delete_this_and_following' => 'Usuń to i wszystkie następne wydarzenia',
|
||||
'series_events_deleted' => ':count wydarzeń usunięto.',
|
||||
'series_events_updated' => 'To wydarzenie i :count następnych zaktualizowano.',
|
||||
];
|
||||
|
||||
@@ -645,4 +645,57 @@ return [
|
||||
|
||||
// Видимость
|
||||
'visibility_feature_finances' => 'Финансы',
|
||||
|
||||
// Administration
|
||||
'nav_administration' => 'Администрирование',
|
||||
'admin_title' => 'Администрирование',
|
||||
'admin_tab_features' => 'Управление ролями',
|
||||
'admin_tab_mail' => 'Эл. почта',
|
||||
'admin_tab_license' => 'Лицензия и поддержка',
|
||||
'admin_tab_maintenance' => 'Обслуживание',
|
||||
'admin_tab_activity' => 'Журнал активности',
|
||||
'features_description' => 'Включайте или отключайте функции глобально и управляйте видимостью по ролям. Базовые функции (события, команды, игроки, пользователи) всегда активны.',
|
||||
'feature_enabled' => 'Включено',
|
||||
'feature_disabled' => 'Отключено',
|
||||
'feature_statistics' => 'Статистика',
|
||||
'feature_finances' => 'Финансы',
|
||||
'feature_catering' => 'Кейтеринг',
|
||||
'feature_timekeepers' => 'Хронометристы',
|
||||
'feature_carpools' => 'Совместные поездки',
|
||||
'feature_comments' => 'Комментарии',
|
||||
'feature_files' => 'Файлы',
|
||||
'feature_faqs' => 'FAQ',
|
||||
'feature_list_generator' => 'Генератор списков',
|
||||
'feature_invitations' => 'Приглашения',
|
||||
'feature_player_stats' => 'Статистика игроков',
|
||||
'features_saved' => 'Управление ролями сохранено.',
|
||||
'activity_recent' => 'Последние действия',
|
||||
|
||||
// Повторение
|
||||
'recurrence' => 'Повторение',
|
||||
'recurrence_none' => 'Без повторения',
|
||||
'recurrence_daily' => 'Ежедневно',
|
||||
'recurrence_weekly' => 'Еженедельно',
|
||||
'recurrence_biweekly' => 'Каждые 2 недели',
|
||||
'recurrence_end_type' => 'Конец повторения',
|
||||
'recurrence_end_date' => 'До даты',
|
||||
'recurrence_end_count' => 'Количество повторений',
|
||||
'recurrence_count_label' => 'Количество (без первого события)',
|
||||
'recurrence_preview' => 'Будет создано :count дополнительных событий',
|
||||
'recurrence_max_warning' => 'Максимум :max событий',
|
||||
'recurrence_created' => 'Создано :count тренировочных событий.',
|
||||
|
||||
// Серии событий
|
||||
'save_following' => 'Обновить все последующие',
|
||||
'series_hint' => 'Это событие является частью серии. Есть ещё :count предстоящих событий.',
|
||||
'save_series_title' => 'Сохранить изменения',
|
||||
'save_series_description' => 'Это событие является частью серии с ещё :count предстоящими событиями. Применить изменения также к следующим событиям?',
|
||||
'save_only_this' => 'Сохранить только это событие',
|
||||
'save_this_and_following' => 'Обновить это и все следующие события',
|
||||
'delete_series_title' => 'Удалить серию событий',
|
||||
'delete_series_description' => 'Это событие принадлежит повторяющейся серии. Что вы хотите удалить?',
|
||||
'delete_only_this' => 'Удалить только это событие',
|
||||
'delete_this_and_following' => 'Удалить это и все последующие события',
|
||||
'series_events_deleted' => ':count событий удалено.',
|
||||
'series_events_updated' => 'Это событие и :count последующих обновлены.',
|
||||
];
|
||||
|
||||
@@ -645,4 +645,57 @@ return [
|
||||
|
||||
// Görünürlük
|
||||
'visibility_feature_finances' => 'Finans',
|
||||
|
||||
// Administration
|
||||
'nav_administration' => 'Yönetim',
|
||||
'admin_title' => 'Yönetim',
|
||||
'admin_tab_features' => 'Rol Yönetimi',
|
||||
'admin_tab_mail' => 'E-posta',
|
||||
'admin_tab_license' => 'Lisans ve Destek',
|
||||
'admin_tab_maintenance' => 'Bakım',
|
||||
'admin_tab_activity' => 'Etkinlik Günlüğü',
|
||||
'features_description' => 'Özellikleri genel olarak etkinleştirin veya devre dışı bırakın ve rol bazında görünürlüğü kontrol edin. Temel özellikler (etkinlikler, takımlar, oyuncular, kullanıcılar) her zaman aktiftir.',
|
||||
'feature_enabled' => 'Etkin',
|
||||
'feature_disabled' => 'Devre dışı',
|
||||
'feature_statistics' => 'İstatistikler',
|
||||
'feature_finances' => 'Finans',
|
||||
'feature_catering' => 'İkram',
|
||||
'feature_timekeepers' => 'Zaman Tutucular',
|
||||
'feature_carpools' => 'Araç Paylaşımı',
|
||||
'feature_comments' => 'Yorumlar',
|
||||
'feature_files' => 'Dosyalar',
|
||||
'feature_faqs' => 'SSS',
|
||||
'feature_list_generator' => 'Liste Oluşturucu',
|
||||
'feature_invitations' => 'Davetler',
|
||||
'feature_player_stats' => 'Oyuncu İstatistikleri',
|
||||
'features_saved' => 'Rol yönetimi kaydedildi.',
|
||||
'activity_recent' => 'Son Etkinlikler',
|
||||
|
||||
// Tekrarlama
|
||||
'recurrence' => 'Tekrarlama',
|
||||
'recurrence_none' => 'Tekrarlama yok',
|
||||
'recurrence_daily' => 'Günlük',
|
||||
'recurrence_weekly' => 'Haftalık',
|
||||
'recurrence_biweekly' => 'Her 2 haftada bir',
|
||||
'recurrence_end_type' => 'Tekrarlama sonu',
|
||||
'recurrence_end_date' => 'Tarihe kadar',
|
||||
'recurrence_end_count' => 'Tekrar sayısı',
|
||||
'recurrence_count_label' => 'Sayı (ilk etkinlik hariç)',
|
||||
'recurrence_preview' => ':count ek etkinlik oluşturulacak',
|
||||
'recurrence_max_warning' => 'Maksimum :max etkinlik',
|
||||
'recurrence_created' => ':count antrenman etkinliği oluşturuldu.',
|
||||
|
||||
// Etkinlik Serileri
|
||||
'save_following' => 'Tüm sonrakileri güncelle',
|
||||
'series_hint' => 'Bu etkinlik bir serinin parçası. :count adet daha gelecek etkinlik var.',
|
||||
'save_series_title' => 'Değişiklikleri kaydet',
|
||||
'save_series_description' => 'Bu etkinlik, :count gelecek etkinliği olan bir serinin parçasıdır. Değişiklikler sonraki etkinliklere de uygulanmalı mı?',
|
||||
'save_only_this' => 'Yalnızca bu etkinliği kaydet',
|
||||
'save_this_and_following' => 'Bu ve sonraki tüm etkinlikleri güncelle',
|
||||
'delete_series_title' => 'Etkinlik serisini sil',
|
||||
'delete_series_description' => 'Bu etkinlik tekrarlayan bir seriye ait. Ne silmek istiyorsunuz?',
|
||||
'delete_only_this' => 'Sadece bu etkinliği sil',
|
||||
'delete_this_and_following' => 'Bu ve sonraki tüm etkinlikleri sil',
|
||||
'series_events_deleted' => ':count etkinlik silindi.',
|
||||
'series_events_updated' => 'Bu etkinlik ve :count sonraki etkinlik güncellendi.',
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user