Commit 737bfea 1 parent 31ac3aa commit 737bfea Copy full SHA for 737bfea
File tree 10 files changed +206
-0
lines changed
10 files changed +206
-0
lines changed Original file line number Diff line number Diff line change
1
+ package MusicBrainz::Server::Report::ArtistCreditReport ;
2
+ use Moose::Role;
3
+ use MusicBrainz::Server::Entity::Util::JSON qw( to_json_object ) ;
4
+
5
+ with ' MusicBrainz::Server::Report::QueryReport' ;
6
+
7
+ around inflate_rows => sub {
8
+ my $orig = shift ;
9
+ my $self = shift ;
10
+
11
+ my $items = $self -> $orig (@_ );
12
+
13
+ my $artist_credits = $self -> c-> model(' ArtistCredit' )-> get_by_ids(
14
+ map { $_ -> {artist_credit_id } } @$items
15
+ );
16
+
17
+ return [
18
+ map +{
19
+ %$_ ,
20
+ artist_credit => to_json_object($artist_credits -> { $_ -> {artist_credit_id } }),
21
+ }, @$items
22
+ ];
23
+ };
24
+
25
+ 1;
26
+
27
+ =head1 COPYRIGHT AND LICENSE
28
+
29
+ Copyright (C) 2021 MetaBrainz Foundation
30
+
31
+ This file is part of MusicBrainz, the open internet music database,
32
+ and is licensed under the GPL version 2, or (at your option) any
33
+ later version: http://www.gnu.org/licenses/gpl-2.0.txt
34
+
35
+ =cut
Original file line number Diff line number Diff line change
1
+ package MusicBrainz::Server::Report::ArtistCreditsWithDubiousTrailingPhrases ;
2
+ use Moose;
3
+
4
+ with ' MusicBrainz::Server::Report::ArtistCreditReport' ,
5
+ ' MusicBrainz::Server::Report::FilterForEditor::ArtistCreditID' ;
6
+
7
+ sub query {<<~'EOSQL' }
8
+ SELECT ac.id AS artist_credit_id, ac.name,
9
+ row_number() OVER (ORDER BY ac.id)
10
+ FROM artist_credit ac
11
+ JOIN artist_credit_name acn ON acn.artist_credit = ac.id
12
+ WHERE acn.position = (ac.artist_count - 1)
13
+ AND acn.join_phrase ~* '(?:ft\.?|feat\.?|[;:,])\s*$'
14
+ EOSQL
15
+
16
+ __PACKAGE__ -> meta-> make_immutable;
17
+ no Moose;
18
+ 1;
19
+
20
+ =head1 COPYRIGHT AND LICENSE
21
+
22
+ Copyright (C) 2021 MetaBrainz Foundation
23
+
24
+ This file is part of MusicBrainz, the open internet music database,
25
+ and is licensed under the GPL version 2, or (at your option) any
26
+ later version: http://www.gnu.org/licenses/gpl-2.0.txt
27
+
28
+ =cut
Original file line number Diff line number Diff line change
1
+ package MusicBrainz::Server::Report::FilterForEditor::ArtistCreditID ;
2
+ use Moose::Role;
3
+
4
+ with ' MusicBrainz::Server::Report::FilterForEditor' ;
5
+
6
+ sub filter_sql {
7
+ my ($self , $editor_id ) = @_ ;
8
+
9
+ my $filter_query = <<~'EOSQL' ;
10
+ JOIN artist_credit_name ON artist_credit_id = artist_credit_name.artist_credit
11
+ JOIN editor_subscribe_artist esa ON esa.artist = artist_credit_name.artist
12
+ WHERE esa.editor = ?
13
+ EOSQL
14
+
15
+ return ($filter_query , $editor_id );
16
+ }
17
+
18
+ 1;
19
+
20
+ =head1 COPYRIGHT AND LICENSE
21
+
22
+ Copyright (C) 2021 MetaBrainz Foundation
23
+
24
+ This file is part of MusicBrainz, the open internet music database,
25
+ and is licensed under the GPL version 2, or (at your option) any
26
+ later version: http://www.gnu.org/licenses/gpl-2.0.txt
27
+
28
+ =cut
Original file line number Diff line number Diff line change @@ -13,6 +13,7 @@ use MusicBrainz::Server::PagedReport;
13
13
AnnotationsReleaseGroups
14
14
AnnotationsSeries
15
15
AnnotationsWorks
16
+ ArtistCreditsWithDubiousTrailingPhrases
16
17
ArtistsContainingDisambiguationComments
17
18
ArtistsDisambiguationSameName
18
19
ArtistsWithMultipleOccurrencesInArtistCredits
@@ -100,6 +101,7 @@ use MusicBrainz::Server::PagedReport;
100
101
101
102
use MusicBrainz::Server::Report::ASINsWithMultipleReleases;
102
103
use MusicBrainz::Server::Report::AnnotationReports;
104
+ use MusicBrainz::Server::Report::ArtistCreditsWithDubiousTrailingPhrases;
103
105
use MusicBrainz::Server::Report::ArtistsContainingDisambiguationComments;
104
106
use MusicBrainz::Server::Report::ArtistsDisambiguationSameName;
105
107
use MusicBrainz::Server::Report::ArtistsThatMayBeGroups;
Original file line number Diff line number Diff line change
1
+ /*
2
+ * @flow strict-local
3
+ * Copyright (C) 2021 MetaBrainz Foundation
4
+ *
5
+ * This file is part of MusicBrainz, the open internet music database,
6
+ * and is licensed under the GPL version 2, or (at your option) any
7
+ * later version: http://www.gnu.org/licenses/gpl-2.0.txt
8
+ */
9
+
10
+ import * as React from 'react' ;
11
+
12
+ import ArtistCreditList from './components/ArtistCreditList' ;
13
+ import ReportLayout from './components/ReportLayout' ;
14
+ import type { ReportArtistCreditT , ReportDataT } from './types' ;
15
+
16
+ const ArtistCreditsWithDubiousTrailingPhrases = ( {
17
+ canBeFiltered,
18
+ filtered,
19
+ generated,
20
+ items,
21
+ pager,
22
+ } : ReportDataT < ReportArtistCreditT > ): React.Element< typeof ReportLayout > => (
23
+ < ReportLayout
24
+ canBeFiltered = { canBeFiltered }
25
+ description = { l (
26
+ `This report lists artist credits that have a trailing join phrase
27
+ that looks like it might have been left behind in error, such as
28
+ a trailing comma or “feat.”.` ,
29
+ ) }
30
+ entityType = "artist_credit"
31
+ filtered = { filtered }
32
+ generated = { generated }
33
+ title = { l ( 'Artist credits with dubious trailing join phrases' ) }
34
+ totalEntries = { pager . total_entries }
35
+ >
36
+ < ArtistCreditList items = { items } pager = { pager } />
37
+ </ ReportLayout >
38
+ ) ;
39
+
40
+ export default ArtistCreditsWithDubiousTrailingPhrases ;
Original file line number Diff line number Diff line change @@ -113,6 +113,15 @@ const ReportsIndex = ({$c}: Props): React.Element<typeof Layout> => (
113
113
/>
114
114
</ ul >
115
115
116
+ < h2 > { l ( 'Artist credits' ) } </ h2 >
117
+
118
+ < ul >
119
+ < ReportsIndexEntry
120
+ content = { l ( 'Artist credits with dubious trailing join phrases' ) }
121
+ reportName = "ArtistCreditsWithDubiousTrailingPhrases"
122
+ />
123
+ </ ul >
124
+
116
125
{ isAccountAdmin ( $c . user ) ? (
117
126
< >
118
127
< h2 > { l ( 'Editors' ) } </ h2 >
Original file line number Diff line number Diff line change
1
+ /*
2
+ * @flow strict-local
3
+ * Copyright (C) 2021 MetaBrainz Foundation
4
+ *
5
+ * This file is part of MusicBrainz, the open internet music database,
6
+ * and is licensed under the GPL version 2, or (at your option) any
7
+ * later version: http://www.gnu.org/licenses/gpl-2.0.txt
8
+ */
9
+
10
+ import * as React from 'react' ;
11
+
12
+ import PaginatedResults from '../../components/PaginatedResults' ;
13
+ import ArtistCreditUsageLink
14
+ from '../../static/scripts/common/components/ArtistCreditUsageLink' ;
15
+ import loopParity from '../../utility/loopParity' ;
16
+ import type { ReportArtistCreditT } from '../types' ;
17
+
18
+ type Props = {
19
+ + items : $ReadOnlyArray < ReportArtistCreditT > ,
20
+ + pager : PagerT ,
21
+ } ;
22
+
23
+ const ArtistCreditList = ( {
24
+ items,
25
+ pager,
26
+ } : Props ) : React . Element < typeof PaginatedResults > => (
27
+ < PaginatedResults pager = { pager } >
28
+ < table className = "tbl" >
29
+ < thead >
30
+ < tr >
31
+ < th > { l ( 'Artist Credit' ) } </ th >
32
+ </ tr >
33
+ </ thead >
34
+ < tbody >
35
+ { items . map ( ( item , index ) => (
36
+ < tr className = { loopParity ( index ) } key = { item . artist_credit_id } >
37
+ { item . artist_credit ? (
38
+ < >
39
+ < td >
40
+ < ArtistCreditUsageLink artistCredit = { item . artist_credit } />
41
+ </ td >
42
+ </ >
43
+ ) : (
44
+ < td >
45
+ { l ( 'This artist credit no longer exists.' ) }
46
+ </ td >
47
+ ) }
48
+ </ tr >
49
+ ) ) }
50
+ </ tbody >
51
+ </ table >
52
+ </ PaginatedResults >
53
+ ) ;
54
+
55
+ export default ArtistCreditList ;
Original file line number Diff line number Diff line change @@ -17,6 +17,7 @@ import FilterLink from '../FilterLink';
17
17
18
18
const countTextPicker = {
19
19
artist : N_l ( 'Total artists found: {count}' ) ,
20
+ artist_credit : N_l ( 'Total artist credits found: {count}' ) ,
20
21
discId : N_l ( 'Total discIDs found: {count}' ) ,
21
22
editor : N_l ( 'Total editors found: {count}' ) ,
22
23
event : N_l ( 'Total events found: {count}' ) ,
Original file line number Diff line number Diff line change @@ -16,6 +16,13 @@ export type ReportArtistAnnotationT = {
16
16
+ text : string ,
17
17
} ;
18
18
19
+ export type ReportArtistCreditT = {
20
+ + artist_credit : ?ArtistCreditT ,
21
+ + artist_credit_id : number ,
22
+ + key ? : string ,
23
+ + row_number : number ,
24
+ } ;
25
+
19
26
export type ReportArtistRelationshipT = {
20
27
+ artist : ?ArtistT ,
21
28
+ artist_id : number ,
Original file line number Diff line number Diff line change @@ -149,6 +149,7 @@ module.exports = {
149
149
'report/AnnotationsReleases' : require ( '../report/AnnotationsReleases' ) ,
150
150
'report/AnnotationsSeries' : require ( '../report/AnnotationsSeries' ) ,
151
151
'report/AnnotationsWorks' : require ( '../report/AnnotationsWorks' ) ,
152
+ 'report/ArtistCreditsWithDubiousTrailingPhrases' : require ( '../report/ArtistCreditsWithDubiousTrailingPhrases' ) ,
152
153
'report/ArtistsContainingDisambiguationComments' : require ( '../report/ArtistsContainingDisambiguationComments' ) ,
153
154
'report/ArtistsDisambiguationSameName' : require ( '../report/ArtistsDisambiguationSameName' ) ,
154
155
'report/ArtistsThatMayBeGroups' : require ( '../report/ArtistsThatMayBeGroups' ) ,
You can’t perform that action at this time.
0 commit comments