diff --git a/client/src/app/+admin/moderation/video-abuse-list/video-abuse-list.component.html b/client/src/app/+admin/moderation/video-abuse-list/video-abuse-list.component.html
index 4afa2850b..2f6e12d1c 100644
--- a/client/src/app/+admin/moderation/video-abuse-list/video-abuse-list.component.html
+++ b/client/src/app/+admin/moderation/video-abuse-list/video-abuse-list.component.html
@@ -149,7 +149,7 @@
{{ videoAbuse.video.channel.ownerAccount ? createByString(videoAbuse.video.channel.ownerAccount) : '' }}
-
+
{videoAbuse.countReportsForReportee, plural, =1 {1 report} other {{{ videoAbuse.countReportsForReportee }} reports}}
diff --git a/server/models/video/video-abuse.ts b/server/models/video/video-abuse.ts
index 71b519cd9..285fb1fbc 100644
--- a/server/models/video/video-abuse.ts
+++ b/server/models/video/video-abuse.ts
@@ -15,7 +15,7 @@ import { VideoAbuseState, VideoDetails } from '../../../shared'
import { CONSTRAINTS_FIELDS, VIDEO_ABUSE_STATES } from '../../initializers/constants'
import { MUserAccountId, MVideoAbuse, MVideoAbuseFormattable, MVideoAbuseVideo } from '../../typings/models'
import * as Bluebird from 'bluebird'
-import { literal, Op, Sequelize } from 'sequelize'
+import { literal, Op } from 'sequelize'
import { ThumbnailModel } from './thumbnail'
import { VideoBlacklistModel } from './video-blacklist'
import { ScopeNames as VideoChannelScopeNames, SummaryOptions, VideoChannelModel } from './video-channel'
@@ -75,6 +75,7 @@ export enum ScopeNames {
attributes: {
include: [
[
+ // we don't care about this count for deleted videos, so there are not included
literal(
'(' +
'SELECT count(*) ' +
@@ -85,6 +86,7 @@ export enum ScopeNames {
'countReportsForVideo'
],
[
+ // we don't care about this count for deleted videos, so there are not included
literal(
'(' +
'SELECT t.nth ' +
@@ -109,7 +111,17 @@ export enum ScopeNames {
'WHERE "account"."id" = "VideoAbuseModel"."reporterAccountId" ' +
')'
),
- 'countReportsForReporter'
+ 'countReportsForReporter__video'
+ ],
+ [
+ literal(
+ '(' +
+ 'SELECT count(DISTINCT "videoAbuse"."id") ' +
+ 'FROM "videoAbuse" ' +
+ `WHERE CAST("deletedVideo"->'channel'->'ownerAccount'->>'id' AS INTEGER) = "VideoAbuseModel"."reporterAccountId" ` +
+ ')'
+ ),
+ 'countReportsForReporter__deletedVideo'
],
[
literal(
@@ -118,10 +130,23 @@ export enum ScopeNames {
'FROM "videoAbuse" ' +
'INNER JOIN "video" ON "video"."id" = "videoAbuse"."videoId" ' +
'INNER JOIN "videoChannel" ON "videoChannel"."id" = "video"."channelId" ' +
- 'INNER JOIN "account" ON "videoChannel"."accountId" = "Video->VideoChannel"."accountId" ' +
+ 'INNER JOIN "account" ON ' +
+ '"videoChannel"."accountId" = "Video->VideoChannel"."accountId" ' +
+ `OR "videoChannel"."accountId" = CAST("VideoAbuseModel"."deletedVideo"->'channel'->'ownerAccount'->>'id' AS INTEGER) ` +
')'
),
- 'countReportsForReportee'
+ 'countReportsForReportee__video'
+ ],
+ [
+ literal(
+ '(' +
+ 'SELECT count(DISTINCT "videoAbuse"."id") ' +
+ 'FROM "videoAbuse" ' +
+ `WHERE CAST("deletedVideo"->'channel'->'ownerAccount'->>'id' AS INTEGER) = "Video->VideoChannel"."accountId" ` +
+ `OR CAST("deletedVideo"->'channel'->'ownerAccount'->>'id' AS INTEGER) = CAST("VideoAbuseModel"."deletedVideo"->'channel'->'ownerAccount'->>'id' AS INTEGER) ` +
+ ')'
+ ),
+ 'countReportsForReportee__deletedVideo'
]
]
},
@@ -270,8 +295,10 @@ export class VideoAbuseModel extends Model {
toFormattedJSON (this: MVideoAbuseFormattable): VideoAbuse {
const countReportsForVideo = this.get('countReportsForVideo') as number
const nthReportForVideo = this.get('nthReportForVideo') as number
- const countReportsForReporter = this.get('countReportsForReporter') as number
- const countReportsForReportee = this.get('countReportsForReportee') as number
+ const countReportsForReporterVideo = this.get('countReportsForReporter__video') as number
+ const countReportsForReporterDeletedVideo = this.get('countReportsForReporter__deletedVideo') as number
+ const countReportsForReporteeVideo = this.get('countReportsForReportee__video') as number
+ const countReportsForReporteeDeletedVideo = this.get('countReportsForReportee__deletedVideo') as number
const video = this.Video
? this.Video
@@ -300,8 +327,8 @@ export class VideoAbuseModel extends Model {
updatedAt: this.updatedAt,
count: countReportsForVideo || 0,
nth: nthReportForVideo || 0,
- countReportsForReporter: countReportsForReporter || 0,
- countReportsForReportee: countReportsForReportee || 0
+ countReportsForReporter: (countReportsForReporterVideo || 0) + (countReportsForReporterDeletedVideo || 0),
+ countReportsForReportee: (countReportsForReporteeVideo || 0) + (countReportsForReporteeDeletedVideo || 0)
}
}