From 7634588465449299495f3d6484e53d58ae17ec22 Mon Sep 17 00:00:00 2001 From: Bastian Rihm Date: Wed, 9 Oct 2024 14:04:04 +0200 Subject: [PATCH] Add public access orga setting (#4229) --- client/src/app/domain/models/meetings/meeting.ts | 2 +- .../domain/models/organizations/organization.ts | 2 ++ client/src/app/domain/models/users/group.ts | 2 +- .../repositories/meeting-repository.service.ts | 6 +++++- .../organization-repository.service.ts | 3 ++- .../login-mask/login-mask.component.ts | 16 +++++++++------- .../pages/meetings/view-models/view-meeting.ts | 2 ++ .../committee-meeting-preview.component.html | 2 +- .../dashboard/dashboard.component.html | 2 +- .../components/dashboard/dashboard.component.ts | 2 +- .../meeting-list/meeting-list.component.html | 2 +- .../organization-settings.component.html | 8 +++++++- .../organization-settings.component.ts | 3 ++- 13 files changed, 35 insertions(+), 17 deletions(-) diff --git a/client/src/app/domain/models/meetings/meeting.ts b/client/src/app/domain/models/meetings/meeting.ts index c42c3e7f92..31f25ebb2c 100644 --- a/client/src/app/domain/models/meetings/meeting.ts +++ b/client/src/app/domain/models/meetings/meeting.ts @@ -372,9 +372,9 @@ export class Meeting extends BaseModel { `motions_enable_reason_on_projector`, `motions_enable_sidebox_on_projector`, `motions_enable_recommendation_on_projector`, + `motions_hide_metadata_background`, `motions_show_referring_motions`, `motions_show_sequential_number`, - `motions_hide_metadata_background`, `motions_recommendations_by`, `motions_block_slide_columns`, `motions_recommendation_text_mode`, diff --git a/client/src/app/domain/models/organizations/organization.ts b/client/src/app/domain/models/organizations/organization.ts index 94ad79f30c..781575fb3c 100644 --- a/client/src/app/domain/models/organizations/organization.ts +++ b/client/src/app/domain/models/organizations/organization.ts @@ -22,6 +22,7 @@ export class OrganizationSetting { public limit_of_users!: number; public default_language!: string; public require_duplicate_from!: boolean; + public enable_anonymous!: boolean; public users_email_sender!: string; // default: OpenSlides public users_email_subject!: string; // default: OpenSlides access data @@ -73,6 +74,7 @@ export class Organization extends BaseModel { `limit_of_users`, `default_language`, `require_duplicate_from`, + `enable_anonymous`, `saml_enabled`, `saml_login_button_text`, `saml_attr_mapping`, diff --git a/client/src/app/domain/models/users/group.ts b/client/src/app/domain/models/users/group.ts index f23b0f058b..17493e015e 100644 --- a/client/src/app/domain/models/users/group.ts +++ b/client/src/app/domain/models/users/group.ts @@ -55,8 +55,8 @@ export class Group extends BaseModel { `weight`, `meeting_user_ids`, `default_group_for_meeting_id`, - `anonymous_group_for_meeting_id`, `admin_group_for_meeting_id`, + `anonymous_group_for_meeting_id`, `meeting_mediafile_access_group_ids`, `meeting_mediafile_inherited_access_group_ids`, `read_comment_section_ids`, diff --git a/client/src/app/gateways/repositories/meeting-repository.service.ts b/client/src/app/gateways/repositories/meeting-repository.service.ts index 0b04cf6021..00dd33ced5 100644 --- a/client/src/app/gateways/repositories/meeting-repository.service.ts +++ b/client/src/app/gateways/repositories/meeting-repository.service.ts @@ -1,6 +1,7 @@ import { Injectable } from '@angular/core'; import { getUnixTime } from 'date-fns'; import { Action } from 'src/app/gateways/actions'; +import { OrganizationSettingsService } from 'src/app/site/pages/organization/services/organization-settings.service'; import { Id } from '../../domain/definitions/key-types'; import { Identifiable } from '../../domain/interfaces/identifiable'; @@ -42,7 +43,8 @@ export interface MeetingUserModifiedFields { export class MeetingRepositoryService extends BaseRepository { public constructor( repositoryServiceCollector: RepositoryServiceCollectorService, - private meetingSettingsDefinitionProvider: MeetingSettingsDefinitionService + private meetingSettingsDefinitionProvider: MeetingSettingsDefinitionService, + private orgaSettingsService: OrganizationSettingsService ) { super(repositoryServiceCollector, Meeting); } @@ -257,6 +259,8 @@ export class MeetingRepositoryService extends BaseRepository this.getProjectorTitle(viewModel, projection); + viewModel.publicAccessPossible = (): boolean => + model.enable_anonymous && this.orgaSettingsService.instant(`enable_anonymous`); return viewModel; } diff --git a/client/src/app/gateways/repositories/organization-repository.service.ts b/client/src/app/gateways/repositories/organization-repository.service.ts index 894cb0cece..1b5a41606f 100644 --- a/client/src/app/gateways/repositories/organization-repository.service.ts +++ b/client/src/app/gateways/repositories/organization-repository.service.ts @@ -44,7 +44,8 @@ export class OrganizationRepositoryService extends BaseRepository params[`checkBrowser`])).subscribe(params => { this.checkBrowser = params[`checkBrowser`] === `true`; }); - this.route.params.subscribe(params => { - if (params[`meetingId`]) { - this.loadMeeting(params[`meetingId`]); - } else { - this.loadActiveMeetings(); - } - }); + if (this.orgaSettings.instant(`enable_anonymous`)) { + this.route.params.subscribe(params => { + if (params[`meetingId`]) { + this.loadMeeting(params[`meetingId`]); + } else { + this.loadActiveMeetings(); + } + }); + } if (this.checkBrowser) { this.checkDevice(); diff --git a/client/src/app/site/pages/meetings/view-models/view-meeting.ts b/client/src/app/site/pages/meetings/view-models/view-meeting.ts index 0220338204..d3cd1a5c41 100644 --- a/client/src/app/site/pages/meetings/view-models/view-meeting.ts +++ b/client/src/app/site/pages/meetings/view-models/view-meeting.ts @@ -110,6 +110,8 @@ export class ViewMeeting extends BaseHasMeetingUsersViewModel { protected _collection = Meeting.COLLECTION; + public publicAccessPossible!: () => boolean; + public getUrl(): string { return `/${this.id}/`; } diff --git a/client/src/app/site/pages/organization/pages/committees/modules/committee-meeting-preview/committee-meeting-preview.component.html b/client/src/app/site/pages/organization/pages/committees/modules/committee-meeting-preview/committee-meeting-preview.component.html index 227326b7c8..e2adcf484c 100644 --- a/client/src/app/site/pages/organization/pages/committees/modules/committee-meeting-preview/committee-meeting-preview.component.html +++ b/client/src/app/site/pages/organization/pages/committees/modules/committee-meeting-preview/committee-meeting-preview.component.html @@ -4,7 +4,7 @@ [ngClass]="{ 'background-accent': meeting.isActive, 'background-dark-brighter': meeting.isArchived }" > - @if (meeting.enable_anonymous) { + @if (meeting.publicAccessPossible()) {
public
diff --git a/client/src/app/site/pages/organization/pages/dashboard/pages/dashboard-detail/components/dashboard/dashboard.component.html b/client/src/app/site/pages/organization/pages/dashboard/pages/dashboard-detail/components/dashboard/dashboard.component.html index 1a6e6321d8..090201c3e2 100644 --- a/client/src/app/site/pages/organization/pages/dashboard/pages/dashboard-detail/components/dashboard/dashboard.component.html +++ b/client/src/app/site/pages/organization/pages/dashboard/pages/dashboard-detail/components/dashboard/dashboard.component.html @@ -176,7 +176,7 @@

{{ 'Calendar' | translate }}

@if (meeting.isArchived) { archive } - @if (meeting.enable_anonymous && !operator.isAnonymous) { + @if (meeting.publicAccessPossible() && !operator.isAnonymous) { public } @if (meeting.committee_id) { diff --git a/client/src/app/site/pages/organization/pages/dashboard/pages/dashboard-detail/components/dashboard/dashboard.component.ts b/client/src/app/site/pages/organization/pages/dashboard/pages/dashboard-detail/components/dashboard/dashboard.component.ts index 072f3101b9..73fac9dcf4 100644 --- a/client/src/app/site/pages/organization/pages/dashboard/pages/dashboard-detail/components/dashboard/dashboard.component.ts +++ b/client/src/app/site/pages/organization/pages/dashboard/pages/dashboard-detail/components/dashboard/dashboard.component.ts @@ -86,7 +86,7 @@ export class DashboardComponent extends BaseComponent { meeting => this.operator.isInMeeting(meeting.id) || this.operator.isSuperAdmin || - (meeting.enable_anonymous && this.operator.isAnonymous) + (meeting.publicAccessPossible() && this.operator.isAnonymous) ); const currentDate = new Date(); currentDate.setHours(0, 0, 0, 0); diff --git a/client/src/app/site/pages/organization/pages/orga-meetings/pages/meeting-list/components/meeting-list/meeting-list.component.html b/client/src/app/site/pages/organization/pages/orga-meetings/pages/meeting-list/components/meeting-list/meeting-list.component.html index 8bb89ad4f5..1e67afe742 100644 --- a/client/src/app/site/pages/organization/pages/orga-meetings/pages/meeting-list/components/meeting-list/meeting-list.component.html +++ b/client/src/app/site/pages/organization/pages/orga-meetings/pages/meeting-list/components/meeting-list/meeting-list.component.html @@ -55,7 +55,7 @@

{{ 'Meetings' | translate }}

} - @if (meeting.enable_anonymous) { + @if (meeting.publicAccessPossible()) { public diff --git a/client/src/app/site/pages/organization/pages/settings/modules/settings-detail/components/organization-settings/organization-settings.component.html b/client/src/app/site/pages/organization/pages/settings/modules/settings-detail/components/organization-settings/organization-settings.component.html index cc8834822f..bd7a6f81ba 100644 --- a/client/src/app/site/pages/organization/pages/settings/modules/settings-detail/components/organization-settings/organization-settings.component.html +++ b/client/src/app/site/pages/organization/pages/settings/modules/settings-detail/components/organization-settings/organization-settings.component.html @@ -38,7 +38,6 @@

{{ 'General' | translate }}

} -
{{ 'Public template required for creating new meeting' | translate }} @@ -105,6 +104,13 @@

{{ 'Superadmin settings' | translate }}

{{ 'Enable chat globally' | translate }}
+ +
+ + {{ 'Meetings can be public' | translate }} + +
+
{{ 'Limit of active meetings' | translate }} diff --git a/client/src/app/site/pages/organization/pages/settings/modules/settings-detail/components/organization-settings/organization-settings.component.ts b/client/src/app/site/pages/organization/pages/settings/modules/settings-detail/components/organization-settings/organization-settings.component.ts index 4dd909ce44..02331241a9 100644 --- a/client/src/app/site/pages/organization/pages/settings/modules/settings-detail/components/organization-settings/organization-settings.component.ts +++ b/client/src/app/site/pages/organization/pages/settings/modules/settings-detail/components/organization-settings/organization-settings.component.ts @@ -73,7 +73,8 @@ export class OrganizationSettingsComponent extends BaseComponent { users_email_sender: [this._currentOrgaSettings.users_email_sender], users_email_subject: [this._currentOrgaSettings.users_email_subject], default_language: [this._currentOrgaSettings.default_language], - require_duplicate_from: [this._currentOrgaSettings.require_duplicate_from ?? false] + require_duplicate_from: [this._currentOrgaSettings.require_duplicate_from ?? false], + enable_anonymous: [this._currentOrgaSettings.enable_anonymous ?? false] }; if (this.operator.isSuperAdmin) { rawSettingsForm = {