Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions app/Http/Controllers/api/v1/UserController.php
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down
3 changes: 3 additions & 0 deletions app/Http/Requests/UserRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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)],
Expand Down
4 changes: 3 additions & 1 deletion app/Http/Resources/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -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,
];
Expand Down
7 changes: 6 additions & 1 deletion app/Models/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -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',
];

Expand All @@ -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',
];

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
/**
* Run the migrations.
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->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');
});
}
};
3 changes: 3 additions & 0 deletions lang/de/admin.php
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
3 changes: 3 additions & 0 deletions lang/de/validation.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@
'bbb_logo_dark_file' => 'Logodatei der dunklen Version',
'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',
Expand Down
3 changes: 3 additions & 0 deletions lang/en/admin.php
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
3 changes: 3 additions & 0 deletions lang/en/validation.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@
'bbb_logo_dark_file' => 'Dark version logo file',
'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',
Expand Down
24 changes: 20 additions & 4 deletions resources/js/components/RoomJoinButton.vue
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,14 @@
<FormError
:errors="formErrors.fieldError('consent_record_attendance')"
/>
<div class="text-sm text-center mt-2">
<router-link
:to="{ name: 'profile' }"
class="text-primary hover:underline"
>
{{ $t("app.profile") }}
</router-link>
</div>
</div>

<div
Expand Down Expand Up @@ -117,6 +125,14 @@
}}</label>
</div>
<FormError :errors="formErrors.fieldError('consent_record_video')" />
<div class="text-sm text-center mt-2">
<router-link
:to="{ name: 'profile' }"
class="text-primary hover:underline"
>
{{ $t("app.profile") }}
</router-link>
</div>
</div>
</div>
</OverlayComponent>
Expand Down Expand Up @@ -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();
Expand Down
84 changes: 83 additions & 1 deletion resources/js/components/UserTabOtherSettings.vue
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,76 @@
</div>
</div>

<div
class="field grid grid-cols-12 gap-4"
data-test="record-agreement-field"
>
<label
for="record_agreement"
class="col-span-12 mb-2 md:col-span-3 md:mb-0"
>{{ $t("admin.users.record_agreement") }}</label
>
<div class="col-span-12 md:col-span-9">
<ToggleSwitch
v-model="model.record_agreement"
input-id="record_agreement"
required
:disabled="isBusy || viewOnly"
:invalid="formErrors.fieldInvalid('record_agreement')"
/>
<FormError
:errors="formErrors.fieldError('record_agreement')"
/>
</div>
</div>


<div
class="field grid grid-cols-12 gap-4"
data-test="record-video-agreement-field"
>
<label
for="record_video_agreement"
class="col-span-12 mb-2 md:col-span-3 md:mb-0"
>{{ $t("admin.users.record_video_agreement") }}</label
>
<div class="col-span-12 md:col-span-9">
<ToggleSwitch
v-model="model.record_video_agreement"
input-id="record_video_agreement"
required
:disabled="isBusy || viewOnly"
:invalid="formErrors.fieldInvalid('record_video_agreement')"
/>
<FormError
:errors="formErrors.fieldError('record_video_agreement')"
/>
</div>
</div>

<div
class="field grid grid-cols-12 gap-4"
data-test="record-attendance-agreement-field"
>
<label
for="record_attendance_agreement"
class="col-span-12 mb-2 md:col-span-3 md:mb-0"
>{{ $t("admin.users.record_attendance_agreement") }}</label
>
<div class="col-span-12 md:col-span-9">
<ToggleSwitch
v-model="model.record_attendance_agreement"
input-id="record_attendance_agreement"
required
:disabled="isBusy || viewOnly"
:invalid="formErrors.fieldInvalid('record_attendance_agreement')"
/>
<FormError
:errors="formErrors.fieldError('record_attendance_agreement')"
/>
</div>
</div>

<div class="flex justify-end">
<Button
v-if="!viewOnly"
Expand All @@ -44,6 +114,7 @@
<script setup>
import env from "../env";
import _ from "lodash";
import { useAuthStore } from "../stores/auth";
import { useApi } from "../composables/useApi.js";
import { useFormErrors } from "../composables/useFormErrors.js";
import { onBeforeMount, ref, watch } from "vue";
Expand All @@ -67,6 +138,8 @@ const isBusy = ref(false);
const api = useApi();
const formErrors = useFormErrors();

const authStore = useAuthStore();

watch(
() => props.user,
(user) => {
Expand Down Expand Up @@ -98,9 +171,18 @@ function save(event) {
_method: "PUT",
updated_at: model.value.updated_at,
bbb_skip_check_audio: model.value.bbb_skip_check_audio,
record_agreement: model.value.record_agreement,
record_video_agreement: model.value.record_video_agreement,
record_attendance_agreement: model.value.record_attendance_agreement,
},
})
.then((response) => {
.then(async (response) => {
if (
authStore.currentUser &&
model.value.id === authStore.currentUser.id
) {
await authStore.getCurrentUser();
}
emit("updateUser", response.data.data);
})
.catch((error) => {
Expand Down