forked from metabrainz/musicbrainz-server
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Create.pm
99 lines (85 loc) · 2.9 KB
/
Create.pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package MusicBrainz::Server::Edit::Work::Create;
use Moose;
use MooseX::Types::Moose qw( ArrayRef Int Maybe Str );
use MooseX::Types::Structured qw( Dict Optional );
use MusicBrainz::Server::Constants qw( $EDIT_WORK_CREATE );
use MusicBrainz::Server::Edit::Types qw( Nullable );
use MusicBrainz::Server::Translation qw( l N_l );
extends 'MusicBrainz::Server::Edit::Generic::Create';
with 'MusicBrainz::Server::Edit::Work::RelatedEntities';
with 'MusicBrainz::Server::Edit::Work';
with 'MusicBrainz::Server::Edit::Role::AlwaysAutoEdit';
use aliased 'MusicBrainz::Server::Entity::Work';
sub edit_name { N_l('Add work') }
sub edit_type { $EDIT_WORK_CREATE }
sub _create_model { 'Work' }
sub work_id { shift->entity_id }
has '+data' => (
isa => Dict[
name => Str,
comment => Nullable[Str],
type_id => Nullable[Int],
language_id => Nullable[Int],
languages => Optional[ArrayRef[Int]],
iswc => Nullable[Str],
attributes => Optional[ArrayRef[Dict[
attribute_text => Maybe[Str],
attribute_value_id => Maybe[Int],
attribute_type_id => Int
]]]
]
);
sub foreign_keys
{
my $self = shift;
return {
Work => [ $self->entity_id ],
WorkType => [ $self->data->{type_id} ],
Language => [
$self->data->{language_id},
@{ $self->data->{languages} // [] },
],
};
}
sub build_display_data
{
my ($self, $loaded) = @_;
my $data = $self->data;
my $display = {
name => $data->{name},
comment => $data->{comment},
type => $data->{type_id} && $loaded->{WorkType}->{ $data->{type_id} },
iswc => $data->{iswc},
work => $loaded->{Work}{ $self->entity_id } || Work->new( name => $data->{name} ),
($data->{attributes} && @{ $data->{attributes} } ?
( attributes => { $self->grouped_attributes_by_type($data->{attributes}) } ) : ()
),
};
if (defined $data->{language_id}) {
$display->{language} = $loaded->{Language}->{$data->{language_id}};
}
if (defined $data->{languages}) {
$display->{languages} = [
map {
my $language = $loaded->{Language}{$_};
if ($language && $language->iso_code_3 eq "zxx") {
$language->name(l("[No lyrics]"));
}
$language ? $language->name : l('[removed]')
} @{ $data->{languages} }
];
}
return $display;
}
after insert => sub {
my $self = shift;
if (my $attributes = $self->data->{attributes}) {
$self->c->model('Work')->set_attributes($self->entity_id, @$attributes);
}
if (my $languages = $self->data->{languages}) {
$self->c->model('Work')->language->set($self->entity_id, @$languages);
}
};
__PACKAGE__->meta->make_immutable;
no Moose;
1;