[mb-commits] branch, data-nes, updated. When creating relationships, don't override existing relationships
MusicBrainz Git Server <[email protected]> Mon, 04 Feb 2013 09:04:40 +0000
| Newsgroups | gmane.comp.audio.musicbrainz.cvs |
|---|---|
| Message-ID | <E1U2Hyi-0005hK-Ml@wiley> |
The branch, data-nes has been updated
via http://git.musicbrainz.org/gitweb/?p=musicbrainz-server/core.git;a=commit;h=22226df9992faefdb58f3684a57cf72c9b1f77b7 (commit)
from http://git.musicbrainz.org/gitweb/?p=musicbrainz-server/core.git;a=commit;h=6a9f4af999e21c5f1866268cf3f25542b123aac9 (commit)
Summary of changes:
.../Server/Controller/Edit/Relationship.pm | 164 ++++++++++---------
1 files changed, 86 insertions(+), 78 deletions(-)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 22226df9992faefdb58f3684a57cf72c9b1f77b7
Author: Oliver Charles <[email protected]>
Date: Mon Feb 4 12:00:03 2013 +0000
When creating relationships, don't override existing relationships
diff --git a/lib/MusicBrainz/Server/Controller/Edit/Relationship.pm b/lib/MusicBrainz/Server/Controller/Edit/Relationship.pm
index 3a256c9..dce1938 100644
--- a/lib/MusicBrainz/Server/Controller/Edit/Relationship.pm
+++ b/lib/MusicBrainz/Server/Controller/Edit/Relationship.pm
@@ -203,82 +203,78 @@ sub create : Local RequireAuth Edit
$c->detach('/error_500');
}
- my ($source, $dest) = $c->model('MB')->with_nes_transaction(sub {
- return ($source_model->get_by_gid($source_gid), $dest_model->get_by_gid($dest_gid));
- });
+ $c->model('MB')->with_nes_transaction(sub {
+ my ($source, $dest) = ($source_model->get_by_gid($source_gid), $dest_model->get_by_gid($dest_gid));
- if ($type0 eq $type1 && $source->gid == $dest->gid) {
- $c->stash( message => l('A relationship requires 2 different entities') );
- $c->detach('/error_500');
- }
+ if ($type0 eq $type1 && $source->gid == $dest->gid) {
+ $c->stash( message => l('A relationship requires 2 different entities') );
+ $c->detach('/error_500');
+ }
- my $tree = $c->model('LinkType')->get_tree($type0, $type1);
- my %type_info = build_type_info($tree);
+ my $tree = $c->model('LinkType')->get_tree($type0, $type1);
+ my %type_info = build_type_info($tree);
+
+ if (!%type_info) {
+ $c->stash(
+ template => 'edit/relationship/cannot_create.tt',
+ type0 => $type0,
+ type1 => $type1
+ );
+ $c->detach;
+ }
- if (!%type_info) {
$c->stash(
- template => 'edit/relationship/cannot_create.tt',
- type0 => $type0,
- type1 => $type1
+ root => $tree,
+ type_info => JSON->new->latin1->encode(\%type_info),
);
- $c->detach;
- }
-
- $c->stash(
- root => $tree,
- type_info => JSON->new->latin1->encode(\%type_info),
- );
- my $attr_tree = $c->model('LinkAttributeType')->get_tree();
- $c->stash( attr_tree => $attr_tree );
- $self->attr_tree($attr_tree);
+ my $attr_tree = $c->model('LinkAttributeType')->get_tree();
+ $c->stash( attr_tree => $attr_tree );
+ $self->attr_tree($attr_tree);
- my $form = $c->form(
- form => 'Relationship',
- attr_tree => $attr_tree,
- root => $tree
- );
- $c->stash(
- source => $source, source_type => $type0,
- dest => $dest, dest_type => $type1
- );
+ my $form = $c->form(
+ form => 'Relationship',
+ attr_tree => $attr_tree,
+ root => $tree
+ );
+ $c->stash(
+ source => $source, source_type => $type0,
+ dest => $dest, dest_type => $type1
+ );
- if ($c->form_posted && $form->submitted_and_valid($c->req->params)) {
- my @attributes = $self->flatten_attributes($form->field('attrs'));
+ if ($c->form_posted && $form->submitted_and_valid($c->req->params)) {
+ my @attributes = $self->flatten_attributes($form->field('attrs'));
- my $entity0 = $source;
- my $entity1 = $dest;
+ my $entity0 = $source;
+ my $entity1 = $dest;
- if ($type0 eq $type1 && $form->field('direction')->value)
- {
- ($entity0, $entity1) = ($entity1, $entity0);
- }
+ if ($type0 eq $type1 && $form->field('direction')->value)
+ {
+ ($entity0, $entity1) = ($entity1, $entity0);
+ }
- $c->model('MB')->with_nes_transaction(sub {
my $edit = $c->model('NES::Edit')->open;
-
- $c->model('NES::Work')->update(
- $edit, $c->user, $entity0,
- MusicBrainz::Server::Entity::Tree::Work->new(
- relationships => [
- MusicBrainz::Server::Entity::NES::Relationship->new(
- link => MusicBrainz::Server::Entity::Link->new(
- type_id => $form->field('link_type_id')->value
- ),
- target => $entity1,
- target_type => 'work'
- )
- ]
- )
- );
- });
-
- delete $c->session->{relationship};
- my $redirect = $c->req->params->{returnto} ||
- $c->uri_for_action($c->controller(type_to_controller($type0))->action_for('show'), [ $source_gid ]);
- $c->response->redirect($redirect);
- $c->detach;
- }
+ run_update($c, $edit, 'NES::Work', $entity0, sub {
+ my $rels = shift;
+ return [
+ @$rels,
+ MusicBrainz::Server::Entity::NES::Relationship->new(
+ link => MusicBrainz::Server::Entity::Link->new(
+ type_id => $form->field('link_type_id')->value
+ ),
+ target => $entity1,
+ target_type => 'work'
+ )
+ ];
+ });
+
+ delete $c->session->{relationship};
+ my $redirect = $c->req->params->{returnto} ||
+ $c->uri_for_action($c->controller(type_to_controller($type0))->action_for('show'), [ $source_gid ]);
+ $c->response->redirect($redirect);
+ $c->detach;
+ }
+ });
}
sub create_url : Local RequireAuth Edit
@@ -347,20 +343,19 @@ sub create_url : Local RequireAuth Edit
my @attributes = $self->flatten_attributes($form->field('attrs'));
my $url = $c->model('NES::URL')->find_or_insert($edit, $c->user, $form->field('url')->value);
- $c->model('NES::Work')->update(
- $edit, $c->user, $entity,
- MusicBrainz::Server::Entity::Tree::Work->new(
- relationships => [
- MusicBrainz::Server::Entity::NES::Relationship->new(
- link => MusicBrainz::Server::Entity::Link->new(
- type_id => $form->field('link_type_id')->value
- ),
- target => $url,
- target_type => 'url'
- )
- ]
- )
- );
+ run_update($c, $edit, 'NES::Work', $entity, sub {
+ my $rels = shift;
+ return [
+ @$rels,
+ MusicBrainz::Server::Entity::NES::Relationship->new(
+ link => MusicBrainz::Server::Entity::Link->new(
+ type_id => $form->field('link_type_id')->value
+ ),
+ target => $url,
+ target_type => 'url'
+ )
+ ]
+ });
my $redirect = $c->controller(type_to_controller($type))->action_for('show');
$c->response->redirect($c->uri_for_action($redirect, [ $gid ]));
@@ -369,6 +364,19 @@ sub create_url : Local RequireAuth Edit
});
}
+sub run_update {
+ my ($c, $edit, $m, $source, $update) = @_;
+
+ my $relationships = $c->model($m)->get_relationships($source);
+
+ $c->model('NES::Work')->update(
+ $edit, $c->user, $source,
+ MusicBrainz::Server::Entity::Tree::Work->new(
+ relationships => $update->($relationships)
+ )
+ );
+}
+
sub delete : Local RequireAuth Edit
{
my ($self, $c) = @_;
-----------------------------------------------------------------------
hooks/post-receive
--
mb_server