From e16cd30a1b29e978d73697d0ccf28714f6f88570 Mon Sep 17 00:00:00 2001 From: q16marvin Date: Sun, 30 Mar 2025 22:35:19 +0200 Subject: [PATCH 1/3] db migration --- ...30_213313_add_default-record-agreement.php | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 database/migrations/2025_03_30_213313_add_default-record-agreement.php diff --git a/database/migrations/2025_03_30_213313_add_default-record-agreement.php b/database/migrations/2025_03_30_213313_add_default-record-agreement.php new file mode 100644 index 000000000..e36ea34a0 --- /dev/null +++ b/database/migrations/2025_03_30_213313_add_default-record-agreement.php @@ -0,0 +1,32 @@ +boolean('record_agreement')->default(false)->after('bbb_skip_check_audio'); + $table->boolean('record_video_agreement')->default(false)->after('bbb_skip_check_audio'); + $table->boolean('record_attendance_agreement')->default(false)->after('bbb_skip_check_audio'); + }); + } + + /** + * Reverse the migrations. + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('record_agreement'); + $table->dropColumn('record_video_agreement'); + $table->dropColumn('record_attendance_agreement'); + }); + } +}; From b97f260cf3797f7dbf5de9aa1eb9498d574e5d81 Mon Sep 17 00:00:00 2001 From: q16marvin Date: Sun, 30 Mar 2025 22:35:57 +0200 Subject: [PATCH 2/3] update locale --- lang/de/admin.php | 3 +++ lang/de/validation.php | 3 +++ lang/en/admin.php | 3 +++ lang/en/validation.php | 3 +++ 4 files changed, 12 insertions(+) diff --git a/lang/de/admin.php b/lang/de/admin.php index 83ca13df5..c9741fdae 100644 --- a/lang/de/admin.php +++ b/lang/de/admin.php @@ -448,6 +448,9 @@ 'roles_and_permissions' => 'Rollen and Berechtigungen', 'show_password' => 'Password anzeigen', 'skip_check_audio' => 'Echo-Test deaktivieren', + 'record_agreement' => 'Zustimmung zur Aufzeichnung', + 'record_video_agreement' => 'Zustimmung zur Videoaufzeichnung', + 'record_attendance_agreement' => 'Zustimmung zur Anwesenheitsaufzeichnung', 'tile_description' => 'Die Benutzer können sich an dem System anmelden und je nach Rolle unterschiedliche Funktionen nutzen.', 'timezone' => 'Zeitzone', 'user_locale' => 'Sprache', diff --git a/lang/de/validation.php b/lang/de/validation.php index dbded5741..ecd7f7815 100644 --- a/lang/de/validation.php +++ b/lang/de/validation.php @@ -37,6 +37,9 @@ 'bbb_logo' => 'Logo', 'bbb_logo_file' => 'Logodatei', 'bbb_skip_check_audio' => 'Echo-Test deaktivieren', + 'record_agreement' => 'Zustimmung zur Aufzeichnung', + 'record_video_agreement' => 'Zustimmung zur Videoaufzeichnung', + 'record_attendance_agreement' => 'Zustimmung zur Anwesenheitsaufzeichnung', 'bbb_style' => 'CSS Style Datei', 'city' => 'Stadt', 'color' => 'Farbe', diff --git a/lang/en/admin.php b/lang/en/admin.php index 44fda8785..0d5245554 100644 --- a/lang/en/admin.php +++ b/lang/en/admin.php @@ -448,6 +448,9 @@ 'roles_and_permissions' => 'Roles and permissions', 'show_password' => 'Show password', 'skip_check_audio' => 'Disable echo audio test', + 'record_agreement' => 'Record Agreement', + 'record_video_agreement' => 'Record Video Agreement', + 'record_attendance_agreement' => 'Record Attendance Agreement', 'tile_description' => 'Users can login to the system and use different features depending on their role.', 'timezone' => 'Timezone', 'user_locale' => 'Language', diff --git a/lang/en/validation.php b/lang/en/validation.php index 7d80ff1ea..e288dc5a5 100644 --- a/lang/en/validation.php +++ b/lang/en/validation.php @@ -37,6 +37,9 @@ 'bbb_logo' => 'Logo', 'bbb_logo_file' => 'Logo file', 'bbb_skip_check_audio' => 'Disable echo audio test', + 'record_agreement' => 'Record Agreement', + 'record_video_agreement' => 'Record Video Agreement', + 'record_attendance_agreement' => 'Record Attendance Agreement', 'bbb_style' => 'CSS style file', 'city' => 'City', 'color' => 'Color', From 1e235b1d42c269a5d24c1ead3da1279bbae80188 Mon Sep 17 00:00:00 2001 From: q16marvin Date: Sun, 30 Mar 2025 22:36:38 +0200 Subject: [PATCH 3/3] add default agreements --- .../Controllers/api/v1/UserController.php | 9 ++ app/Http/Requests/UserRequest.php | 3 + app/Http/Resources/User.php | 4 +- app/Models/User.php | 7 +- resources/js/components/RoomJoinButton.vue | 24 +++++- .../js/components/UserTabOtherSettings.vue | 84 ++++++++++++++++++- 6 files changed, 124 insertions(+), 7 deletions(-) diff --git a/app/Http/Controllers/api/v1/UserController.php b/app/Http/Controllers/api/v1/UserController.php index e5fe639d1..27c970d9e 100644 --- a/app/Http/Controllers/api/v1/UserController.php +++ b/app/Http/Controllers/api/v1/UserController.php @@ -207,6 +207,15 @@ public function update(UserRequest $request, User $user) if ($request->has('bbb_skip_check_audio')) { $user->bbb_skip_check_audio = $request->bbb_skip_check_audio; } + if ($request->has('record_agreement')) { + $user->record_agreement = $request->record_agreement; + } + if ($request->has('record_video_agreement')) { + $user->record_video_agreement = $request->record_video_agreement; + } + if ($request->has('record_attendance_agreement')) { + $user->record_attendance_agreement = $request->record_attendance_agreement; + } $user->save(); diff --git a/app/Http/Requests/UserRequest.php b/app/Http/Requests/UserRequest.php index 03f8b818d..8d6e3f4ff 100644 --- a/app/Http/Requests/UserRequest.php +++ b/app/Http/Requests/UserRequest.php @@ -20,6 +20,9 @@ public function rules() $rules = [ 'user_locale' => ['sometimes', 'required', 'string', Rule::in(array_keys(config('app.enabled_locales')))], 'bbb_skip_check_audio' => ['sometimes', 'required', 'boolean'], + 'record_agreement' => ['sometimes', 'required', 'boolean'], + 'record_video_agreement' => ['sometimes', 'required', 'boolean'], + 'record_attendance_agreement' => ['sometimes', 'required', 'boolean'], 'timezone' => ['sometimes', 'required', 'string', Rule::in(timezone_identifiers_list())], 'roles' => ['sometimes', 'required', 'array'], 'roles.*' => ['sometimes', 'distinct', 'integer', 'exists:App\Models\Role,id', Rule::notIn($prohibitedRoles)], diff --git a/app/Http/Resources/User.php b/app/Http/Resources/User.php index 6e8f52900..a9f8e32bb 100644 --- a/app/Http/Resources/User.php +++ b/app/Http/Resources/User.php @@ -82,7 +82,9 @@ public function toArray($request) return new RoleCollection($this->roles); }), 'bbb_skip_check_audio' => $this->bbb_skip_check_audio, - 'initial_password_set' => $this->initial_password_set, + 'record_agreement' => $this->record_agreement, + 'record_video_agreement' => $this->record_video_agreement, + 'record_attendance_agreement' => $this->record_attendance_agreement, 'timezone' => $this->timezone, 'superuser' => $this->superuser, ]; diff --git a/app/Models/User.php b/app/Models/User.php index 7fe6ecb1f..d6fea0ee8 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -39,7 +39,9 @@ protected static function booted() * @var array */ protected $fillable = [ - 'firstname', 'lastname', 'email', 'password', 'external_id', 'guid', 'domain', 'locale', 'bbb_skip_check_audio', 'authenticator', + 'firstname', 'lastname', 'email', 'password', 'external_id', 'guid', 'domain', 'locale', 'bbb_skip_check_audio', + 'record_agreement', 'record_video_agreement', 'record_attendance_agreement', + 'authenticator', 'initial_password_set', 'timezone', ]; @@ -60,6 +62,9 @@ protected static function booted() protected $casts = [ 'email_verified_at' => 'datetime', 'bbb_skip_check_audio' => 'boolean', + 'record_agreement' => 'boolean', + 'record_video_agreement' => 'boolean', + 'record_attendance_agreement' => 'boolean', 'initial_password_set' => 'boolean', ]; diff --git a/resources/js/components/RoomJoinButton.vue b/resources/js/components/RoomJoinButton.vue index 0f7932281..a18117597 100644 --- a/resources/js/components/RoomJoinButton.vue +++ b/resources/js/components/RoomJoinButton.vue @@ -81,6 +81,14 @@ +
+ + {{ $t("app.profile") }} + +
+
+ + {{ $t("app.profile") }} + +
@@ -190,13 +206,13 @@ const emit = defineEmits([ ]); const authStore = useAuthStore(); - +console.log("authStore", authStore.currentUser); const modalVisible = ref(false); const isLoadingAction = ref(false); -const recordAttendanceAgreement = ref(false); +const recordAttendanceAgreement = ref(authStore.currentUser?.record_attendance_agreement ?? false); const showRunningMessage = ref(false); -const recordAgreement = ref(false); -const recordVideoAgreement = ref(false); +const recordAgreement = ref(authStore.currentUser?.record_agreement ?? false); +const recordVideoAgreement = ref(authStore.currentUser?.record_video_agreement ?? false); const name = ref(""); // Name of guest const api = useApi(); diff --git a/resources/js/components/UserTabOtherSettings.vue b/resources/js/components/UserTabOtherSettings.vue index 8cf5b6b0a..7cad141c1 100644 --- a/resources/js/components/UserTabOtherSettings.vue +++ b/resources/js/components/UserTabOtherSettings.vue @@ -25,6 +25,76 @@ +
+ +
+ + +
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + +
+
+