diff --git a/src/app/components/creator/_dialogs/room-edit/room-edit.component.ts b/src/app/components/creator/_dialogs/room-edit/room-edit.component.ts index c6959bf60c674437407e2283dbe51360094ed8a8..5369030217bc7d46709569c95f1c9bcf66a71247 100644 --- a/src/app/components/creator/_dialogs/room-edit/room-edit.component.ts +++ b/src/app/components/creator/_dialogs/room-edit/room-edit.component.ts @@ -1,6 +1,6 @@ import { Component, Inject, OnInit } from '@angular/core'; import { FormControl, Validators } from '@angular/forms'; -import { Room } from '../../../../models/room'; +import { ProfanityFilter, Room } from '../../../../models/room'; import { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog'; import { RoomDeleteComponent } from '../room-delete/room-delete.component'; import { NotificationService } from '../../../../services/util/notification.service'; @@ -19,7 +19,7 @@ import { RoomDeleted } from '../../../../models/events/room-deleted'; }) export class RoomEditComponent implements OnInit { editRoom: Room; - check: boolean = false; + check = false; profanityCheck: boolean; censorPartialWordsCheck: boolean; censorLanguageSpecificCheck: boolean; @@ -38,9 +38,13 @@ export class RoomEditComponent implements OnInit { ngOnInit() { this.check = this.editRoom.questionsBlocked; - this.profanityCheck = this.editRoom.profanityFilter; - this.censorLanguageSpecificCheck = this.editRoom.censorLanguageSpecific; - this.censorPartialWordsCheck = this.editRoom.censorPartialWords; + this.profanityCheck = this.editRoom.profanityFilter !== ProfanityFilter.deactived; + if (this.editRoom.profanityFilter === ProfanityFilter.all){ + this.censorLanguageSpecificCheck = this.censorPartialWordsCheck = true; + } else if (this.profanityCheck){ + this.censorLanguageSpecificCheck = this.editRoom.profanityFilter === ProfanityFilter.languageSpecific; + this.censorPartialWordsCheck = this.editRoom.profanityFilter === ProfanityFilter.partialWords; + } } openDeleteRoomDialog(): void { @@ -77,9 +81,13 @@ export class RoomEditComponent implements OnInit { save(): void { this.editRoom.questionsBlocked = this.check; - this.editRoom.profanityFilter = this.profanityCheck; - this.editRoom.censorLanguageSpecific = this.censorLanguageSpecificCheck; - this.editRoom.censorPartialWords = this.censorPartialWordsCheck; + this.editRoom.profanityFilter = this.profanityCheck ? ProfanityFilter.none : ProfanityFilter.deactived; + if (this.censorLanguageSpecificCheck && this.censorPartialWordsCheck) { + this.editRoom.profanityFilter = ProfanityFilter.all; + } else if (this.profanityCheck){ + this.editRoom.profanityFilter = this.censorLanguageSpecificCheck ? ProfanityFilter.languageSpecific : ProfanityFilter.none; + this.editRoom.profanityFilter = this.censorPartialWordsCheck ? ProfanityFilter.partialWords : this.editRoom.profanityFilter; + } this.roomService.updateRoom(this.editRoom).subscribe(r => this.editRoom = r); if (!this.roomNameFormControl.hasError('required') && !this.roomNameFormControl.hasError('minlength') diff --git a/src/app/components/shared/_dialogs/room-create/room-create.component.ts b/src/app/components/shared/_dialogs/room-create/room-create.component.ts index 191ce27da1750415a4ee897360169d3f11e6f2c0..1bd5cb42a962b96f96837c4a9f11b3be0ee4d9dd 100644 --- a/src/app/components/shared/_dialogs/room-create/room-create.component.ts +++ b/src/app/components/shared/_dialogs/room-create/room-create.component.ts @@ -1,6 +1,6 @@ import { Component, Inject, OnInit } from '@angular/core'; import { RoomService } from '../../../../services/http/room.service'; -import { Room } from '../../../../models/room'; +import { ProfanityFilter, Room } from '../../../../models/room'; import { UserRole } from '../../../../models/user-roles.enum'; import { Router } from '@angular/router'; import { NotificationService } from '../../../../services/util/notification.service'; @@ -76,7 +76,7 @@ export class RoomCreateComponent implements OnInit { newRoom.description = ''; newRoom.blacklist = '[]'; newRoom.questionsBlocked = false; - newRoom.profanityFilter = true; + newRoom.profanityFilter = ProfanityFilter.none; if (this.hasCustomShortId && this.customShortIdName && this.customShortIdName.length > 0) { if (!new RegExp('[1-9a-z,A-Z,\s,\-,\.,\_,\~]+').test(this.customShortIdName) || this.customShortIdName.startsWith(' ') || this.customShortIdName.endsWith(' ')) { diff --git a/src/app/models/room.ts b/src/app/models/room.ts index d8215049c87442fcacf83f10b99c4a5569979e97..925f4390f061b2507565c1a22a644d3a302c61cb 100644 --- a/src/app/models/room.ts +++ b/src/app/models/room.ts @@ -15,9 +15,7 @@ export class Room { threshold: number; tags: string[]; questionsBlocked: boolean; - profanityFilter: boolean; - censorPartialWords: boolean; - censorLanguageSpecific: boolean; + profanityFilter: ProfanityFilter; constructor( @@ -33,9 +31,7 @@ export class Room { threshold: number = null, tags: string[] = [], questionsBlocked: boolean = false, - profanityFilter: boolean = true, - censorPartialWords: boolean = false, - censorLanguageSpecific: boolean = false + profanityFilter: ProfanityFilter = ProfanityFilter.none ) { this.id = ''; this.ownerId = ownerId; @@ -51,7 +47,13 @@ export class Room { this.tags = tags; this.questionsBlocked = questionsBlocked; this.profanityFilter = profanityFilter; - this.censorPartialWords = censorPartialWords; - this.censorLanguageSpecific = censorLanguageSpecific; } } + +export enum ProfanityFilter{ + all = 0, + languageSpecific = 1, + partialWords = 2, + none = 3, + deactived = 4 +} diff --git a/src/app/services/http/room.service.ts b/src/app/services/http/room.service.ts index 17a710ff083ec956d55c51bfdffcd22b5a5e4f7d..fab200a216f1002d549c507efd42cc74c6b85201 100644 --- a/src/app/services/http/room.service.ts +++ b/src/app/services/http/room.service.ts @@ -138,9 +138,6 @@ export class RoomService extends BaseHttpService { } setRoomId(room: Room): void { - // temp - room.censorLanguageSpecific = true; - room.censorPartialWords = true; localStorage.setItem('roomId', room.id); } } diff --git a/src/app/services/util/room-data.service.ts b/src/app/services/util/room-data.service.ts index e7a5205fbce8c094966807f8459d51c010fb8cbd..98854e0ac18855e551ead7e015b5d8124669b2a4 100644 --- a/src/app/services/util/room-data.service.ts +++ b/src/app/services/util/room-data.service.ts @@ -7,6 +7,7 @@ import { CommentService } from '../http/comment.service'; import { CorrectWrong } from '../../models/correct-wrong.enum'; import { RoomService } from '../http/room.service'; import { TopicCloudAdminService } from './topic-cloud-admin.service'; +import { ProfanityFilter, Room } from '../../models/room'; export interface UpdateInformation { type: 'CommentCreated' | 'CommentPatched' | 'CommentHighlighted' | 'CommentDeleted'; @@ -127,13 +128,12 @@ export class RoomDataService { } getComment(id: string): Observable<Comment> { - if (!this._fastCommentAccess) { + if (!this._fastCommentAccess[id]) { const comment = new Subject<Comment>(); this.commentService.getComment(id).subscribe(c => { this.roomService.getRoom(localStorage.getItem('roomId')).subscribe(room => { if (room.profanityFilter) { - c.body = this.topicCloudAdminService.filterProfanityWords(c.body, - room.censorPartialWords, room.censorLanguageSpecific, ['comment.langs']); + c.body = this.filterCommentOfProfanity(room, c); } comment.next(c); }); @@ -147,7 +147,7 @@ export class RoomDataService { public checkProfanity(comment: Comment) { this.roomService.getRoom(localStorage.getItem('roomId')).subscribe(room => { - if (room.profanityFilter) { + if (room.profanityFilter !== ProfanityFilter.deactived) { comment.body = this._savedCommentsAfterFilter.get(comment.id); } else { comment.body = this._savedCommentsBeforeFilter.get(comment.id); @@ -158,12 +158,16 @@ export class RoomDataService { private setCommentBodies(comment: Comment) { this.roomService.getRoom(localStorage.getItem('roomId')).subscribe(room => { this._savedCommentsBeforeFilter.set(comment.id, comment.body); - this._savedCommentsAfterFilter.set(comment.id, this.topicCloudAdminService - .filterProfanityWords(comment.body, room.censorPartialWords, room.censorLanguageSpecific, ['comment.langs']) // comment.langs - ); + this._savedCommentsAfterFilter.set(comment.id, this.filterCommentOfProfanity(room, comment)); }); } + private filterCommentOfProfanity(room: Room, comment: Comment): string { + const partialWords = room.profanityFilter === ProfanityFilter.all || room.profanityFilter === ProfanityFilter.partialWords; + const languageSpecific = room.profanityFilter === ProfanityFilter.all || room.profanityFilter === ProfanityFilter.languageSpecific; + return this.topicCloudAdminService.filterProfanityWords(comment.body, partialWords, languageSpecific, ['de']); + } + private removeCommentBodies(key: string) { this._savedCommentsBeforeFilter.delete(key); this._savedCommentsAfterFilter.delete(key);