From ba7d04aeb91cbf9286d620ad5da03ad435f76185 Mon Sep 17 00:00:00 2001 From: syuilo Date: Wed, 9 Aug 2023 18:54:04 +0900 Subject: [PATCH] wip --- locales/ja-JP.yml | 2 ++ packages/backend/src/core/AnnouncementService.ts | 1 + packages/backend/src/models/entities/Announcement.ts | 5 +++++ packages/backend/src/models/json-schema/announcement.ts | 4 ++++ .../src/server/api/endpoints/admin/announcements/create.ts | 2 ++ .../src/server/api/endpoints/admin/announcements/update.ts | 4 +++- packages/frontend/src/pages/admin/announcements.vue | 7 +++++++ 7 files changed, 24 insertions(+), 1 deletion(-) diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 58b61cf445..ad53f97e7a 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1099,6 +1099,8 @@ iHaveReadXCarefullyAndAgree: "「{x}」の内容をよく読み、同意しま _announcement: forExistingUsers: "既存ユーザーのみ" forExistingUsersDescription: "有効にすると、このお知らせ作成時点で存在するユーザーにのみお知らせが表示されます。無効にすると、このお知らせ作成後にアカウントを作成したユーザーにもお知らせが表示されます。" + needConfirmationToRead: "既読にするのに確認が必要" + needConfirmationToReadDescription: "有効にすると、このお知らせを既読にする際に確認ダイアログが表示されます。また、一括既読操作の対象になりません。" deactivate: "お知らせを終了" _initialAccountSetting: diff --git a/packages/backend/src/core/AnnouncementService.ts b/packages/backend/src/core/AnnouncementService.ts index 07bfdd3bd5..c2eb3d596f 100644 --- a/packages/backend/src/core/AnnouncementService.ts +++ b/packages/backend/src/core/AnnouncementService.ts @@ -92,6 +92,7 @@ export class AnnouncementService { title: announcement.title, imageUrl: announcement.imageUrl, display: announcement.display, + needConfirmationToRead: announcement.needConfirmationToRead, isRead: reads.some(read => read.announcementId === announcement.id), })); } diff --git a/packages/backend/src/models/entities/Announcement.ts b/packages/backend/src/models/entities/Announcement.ts index 86484f7770..ee5d1da7ea 100644 --- a/packages/backend/src/models/entities/Announcement.ts +++ b/packages/backend/src/models/entities/Announcement.ts @@ -48,6 +48,11 @@ export class Announcement { }) public display: string; + @Column('boolean', { + default: false, + }) + public needConfirmationToRead: boolean; + @Index() @Column('boolean', { default: true, diff --git a/packages/backend/src/models/json-schema/announcement.ts b/packages/backend/src/models/json-schema/announcement.ts index 7dc9c05c34..625bc057a0 100644 --- a/packages/backend/src/models/json-schema/announcement.ts +++ b/packages/backend/src/models/json-schema/announcement.ts @@ -42,5 +42,9 @@ export const packedAnnouncementSchema = { type: 'boolean', optional: true, nullable: false, }, + needConfirmationToRead: { + type: 'boolean', + optional: false, nullable: false, + }, }, } as const; diff --git a/packages/backend/src/server/api/endpoints/admin/announcements/create.ts b/packages/backend/src/server/api/endpoints/admin/announcements/create.ts index 31da1b9fa6..63d68c2e96 100644 --- a/packages/backend/src/server/api/endpoints/admin/announcements/create.ts +++ b/packages/backend/src/server/api/endpoints/admin/announcements/create.ts @@ -59,6 +59,7 @@ export const paramDef = { imageUrl: { type: 'string', nullable: true, minLength: 1 }, display: { type: 'string', enum: ['normal', 'banner', 'dialog'], default: 'normal' }, forExistingUsers: { type: 'boolean', default: false }, + needConfirmationToRead: { type: 'boolean', default: false }, userId: { type: 'string', format: 'misskey:id', nullable: true, default: null }, }, required: ['title', 'text', 'imageUrl'], @@ -83,6 +84,7 @@ export default class extends Endpoint { imageUrl: ps.imageUrl, display: ps.display, forExistingUsers: ps.forExistingUsers, + needConfirmationToRead: ps.needConfirmationToRead, userId: ps.userId, }).then(x => this.announcementsRepository.findOneByOrFail(x.identifiers[0])); diff --git a/packages/backend/src/server/api/endpoints/admin/announcements/update.ts b/packages/backend/src/server/api/endpoints/admin/announcements/update.ts index 8a88ea91b5..e97004c343 100644 --- a/packages/backend/src/server/api/endpoints/admin/announcements/update.ts +++ b/packages/backend/src/server/api/endpoints/admin/announcements/update.ts @@ -33,9 +33,10 @@ export const paramDef = { imageUrl: { type: 'string', nullable: true, minLength: 0 }, display: { type: 'string', enum: ['normal', 'banner', 'dialog'] }, forExistingUsers: { type: 'boolean' }, + needConfirmationToRead: { type: 'boolean' }, isActive: { type: 'boolean' }, }, - required: ['id', 'title', 'text', 'imageUrl', 'display', 'forExistingUsers', 'isActive'], + required: ['id', 'title', 'text', 'imageUrl', 'display', 'forExistingUsers', 'needConfirmationToRead', 'isActive'], } as const; // eslint-disable-next-line import/no-default-export @@ -58,6 +59,7 @@ export default class extends Endpoint { imageUrl: ps.imageUrl || null, display: ps.display, forExistingUsers: ps.forExistingUsers, + needConfirmationToRead: ps.needConfirmationToRead, isActive: ps.isActive, }); }); diff --git a/packages/frontend/src/pages/admin/announcements.vue b/packages/frontend/src/pages/admin/announcements.vue index d62f572279..5863b237fa 100644 --- a/packages/frontend/src/pages/admin/announcements.vue +++ b/packages/frontend/src/pages/admin/announcements.vue @@ -23,6 +23,10 @@ SPDX-License-Identifier: AGPL-3.0-only {{ i18n.ts._announcement.forExistingUsers }} + + {{ i18n.ts._announcement.needConfirmationToRead }} + +

{{ i18n.t('nUsersRead', { n: announcement.reads }) }}

{{ i18n.ts.save }} @@ -58,6 +62,9 @@ function add() { title: '', text: '', imageUrl: null, + display: 'normal', + forExistingUsers: false, + needConfirmationToRead: false, }); }