diff --git a/src/app/components/shared/_dialogs/topic-cloud-administration/topic-cloud-administration.component.html b/src/app/components/shared/_dialogs/topic-cloud-administration/topic-cloud-administration.component.html index bbe0a62689038296696bb76882a93adcf9ede9dd..2ec268af255733107e331cd4729d4b621277b8e2 100644 --- a/src/app/components/shared/_dialogs/topic-cloud-administration/topic-cloud-administration.component.html +++ b/src/app/components/shared/_dialogs/topic-cloud-administration/topic-cloud-administration.component.html @@ -138,7 +138,7 @@ </mat-card> <mat-card style="background: none; margin-bottom: 10px;"> - <mat-slide-toggle [(ngModel)]="blacklistIsActive"> + <mat-slide-toggle [(ngModel)]="blacklistIsActive" (change)="changeblacklist()"> {{'topic-cloud-dialog.hide-blacklist-words' | translate}} </mat-slide-toggle> </mat-card> diff --git a/src/app/components/shared/_dialogs/topic-cloud-administration/topic-cloud-administration.component.ts b/src/app/components/shared/_dialogs/topic-cloud-administration/topic-cloud-administration.component.ts index fa75063138a5de59e70d1797a6c1040a74fbeee0..6b595c926aaef352da3d89dfbd3ad80c3218adb3 100644 --- a/src/app/components/shared/_dialogs/topic-cloud-administration/topic-cloud-administration.component.ts +++ b/src/app/components/shared/_dialogs/topic-cloud-administration/topic-cloud-administration.component.ts @@ -85,6 +85,7 @@ export class TopicCloudAdministrationComponent implements OnInit, OnDestroy { } ngOnInit(): void { + this.topicCloudAdminService.getBlacklistIsActive().subscribe(isActive => this.blacklistIsActive = isActive); this.deviceType = localStorage.getItem('deviceType'); this.blacklistSubscription = this.topicCloudAdminService.getBlacklist().subscribe(list => this.blacklist = list); this.profanitywordlist = this.profanityFilterService.getProfanityListFromStorage(); @@ -100,6 +101,13 @@ export class TopicCloudAdministrationComponent implements OnInit, OnDestroy { this.initializeKeywords(); } + changeblacklist() { + this.topicCloudAdminService.getRoom().subscribe(room => { + room.blacklistIsActive = this.blacklistIsActive; + this.topicCloudAdminService.updateRoom(room); + }); + } + removeFromKeywords(comment: Comment) { for (const keyword of this.keywords) { keyword.comments.forEach(_comment => { @@ -218,7 +226,7 @@ export class TopicCloudAdministrationComponent implements OnInit, OnDestroy { } blacklistIncludesKeyword(keyword: string) { - return this.blacklist.includes(keyword.toLowerCase()); + return this.blacklistIsActive && this.blacklist.includes(keyword.toLowerCase()); } checkIfCommentExists(comments: Comment[], id: string): boolean { diff --git a/src/app/models/room.ts b/src/app/models/room.ts index abd4a42965183ac5dcf0adc0381067e857996cd1..d90e5be0ea0b2dd4d22898bbba8c2ce21da12e61 100644 --- a/src/app/models/room.ts +++ b/src/app/models/room.ts @@ -14,6 +14,7 @@ export class Room { tags: string[]; questionsBlocked: boolean; profanityFilter: ProfanityFilter; + blacklistIsActive: boolean; constructor( ownerId: string = '', @@ -28,7 +29,8 @@ export class Room { threshold: number = null, tags: string[] = [], questionsBlocked: boolean = false, - profanityFilter: ProfanityFilter = ProfanityFilter.none + profanityFilter: ProfanityFilter = ProfanityFilter.none, + blacklistIsActive: boolean = true ) { this.id = ''; this.ownerId = ownerId; @@ -44,6 +46,7 @@ export class Room { this.tags = tags; this.questionsBlocked = questionsBlocked; this.profanityFilter = profanityFilter; + this.blacklistIsActive = blacklistIsActive; } } diff --git a/src/app/services/util/topic-cloud-admin.service.ts b/src/app/services/util/topic-cloud-admin.service.ts index 97a2df7b8b01578f3b610ffaa185671baa076b5c..465bd54fa9ec5299fab8c5d45d13968c53bfba44 100644 --- a/src/app/services/util/topic-cloud-admin.service.ts +++ b/src/app/services/util/topic-cloud-admin.service.ts @@ -20,6 +20,7 @@ export class TopicCloudAdminService { private static readonly adminKey = 'Topic-Cloud-Admin-Data'; private adminData: BehaviorSubject<TopicCloudAdminData>; private blacklist: Subject<string[]>; + private blacklistIsActive: Subject<boolean>; constructor(private roomService: RoomService, private translateService: TranslateService, @@ -27,11 +28,13 @@ export class TopicCloudAdminService { private profanityFilterService: ProfanityFilterService, private notificationService: NotificationService) { this.blacklist = new Subject<string[]>(); + this.blacklistIsActive = new Subject<boolean>(); this.wsRoomService.getRoomStream(localStorage.getItem('roomId')).subscribe(msg => { const message = JSON.parse(msg.body); const room = message.payload.changes; if (message.type === 'RoomPatched') { this.blacklist.next(room.blacklist ? JSON.parse(room.blacklist) : []); + this.blacklistIsActive.next(room.blacklistIsActive); } }); this.adminData = new BehaviorSubject<TopicCloudAdminData>(TopicCloudAdminService.getDefaultAdminData); @@ -125,16 +128,18 @@ export class TopicCloudAdminService { setAdminData(_adminData: TopicCloudAdminData) { localStorage.setItem(TopicCloudAdminService.adminKey, JSON.stringify(_adminData)); - this.getBlacklist().subscribe(list => { - _adminData.blacklist = []; - if (_adminData.blacklistIsActive) { - _adminData.blacklist = list; - } - if (_adminData.profanityFilter !== ProfanityFilter.deactivated) { - _adminData.blacklist = _adminData.blacklist.concat(this.profanityFilterService.getProfanityList); - } - localStorage.setItem(TopicCloudAdminService.adminKey, JSON.stringify(_adminData)); - this.adminData.next(_adminData); + this.getBlacklistIsActive().subscribe(isActive => { + this.getBlacklist().subscribe(list => { + _adminData.blacklist = []; + if (isActive) { + _adminData.blacklist = list; + } + if (_adminData.profanityFilter !== ProfanityFilter.deactivated) { + _adminData.blacklist = _adminData.blacklist.concat(this.profanityFilterService.getProfanityList); + } + localStorage.setItem(TopicCloudAdminService.adminKey, JSON.stringify(_adminData)); + this.adminData.next(_adminData); + }); }); } @@ -142,10 +147,15 @@ export class TopicCloudAdminService { this.getRoom().subscribe(room => { const list = room.blacklist ? JSON.parse(room.blacklist) : []; this.blacklist.next(list); + this.blacklistIsActive.next(room.blacklistIsActive); }); return this.blacklist.asObservable(); } + getBlacklistIsActive() { + return this.blacklistIsActive.asObservable(); + } + getRoom(): Observable<Room> { return this.roomService.getRoom(localStorage.getItem('roomId')); }