From 5873b30d78f2883ba8aa7fcc9e5ce3e10b9605ae Mon Sep 17 00:00:00 2001 From: Yorhel Date: Sun, 25 Oct 2015 10:15:14 +0100 Subject: Staff: Add error msg when removing used alias + fix bug in alias editing The new database schema doesn't allow an alias to be removed when it is still linked to a VN. --- data/lang.txt | 12 ++++++++++++ lib/VNDB/DB/Staff.pm | 4 ++-- lib/VNDB/Handler/Staff.pm | 8 +++++++- util/sql/schema.sql | 4 ++-- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/data/lang.txt b/data/lang.txt index ccfee14c..7d61a012 100644 --- a/data/lang.txt +++ b/data/lang.txt @@ -16226,6 +16226,18 @@ tr : Geçersiz ana karakter. ID'nin doğruluğundan, ana karakterin bir başka k uk : Неправильний головний герой. Переконайтеся у правильності ID, головний персонаж — це не втілення іншого персонажа, і що цей запис не використовується в якості головного персонажа десь ще. it : Personaggio principale non valido. Assicurati che ID sia corretto, che il personaggio non sia un'instanza di un altro personaggio, e che questa pagina non è utilizzata come personaggio principale da un'altra parte. +:_formerr_e_usedalias +en : Can't remove an alias that is still linked to a VN. +ru*: +cs*: +hu*: +nl*: +de*: +es*: +tr*: +uk*: +it*: + :_formerr_title en : Error ru : Ошибка diff --git a/lib/VNDB/DB/Staff.pm b/lib/VNDB/DB/Staff.pm index c8178aae..69f4d6b3 100644 --- a/lib/VNDB/DB/Staff.pm +++ b/lib/VNDB/DB/Staff.pm @@ -109,7 +109,7 @@ sub _enrich { } @$r; push @{$r{ delete $_->{id} }{roles}}, $_ for (@{$self->dbAll(q| - SELECT sa.id, v.id AS vid, sa.name, sa.original, v.c_released, v.title, v.original AS t_original, vs.role, vs.note + SELECT sa.id, sa.aid, v.id AS vid, sa.name, sa.original, v.c_released, v.title, v.original AS t_original, vs.role, vs.note FROM vn_staff vs JOIN vn v ON v.id = vs.id JOIN staff_alias sa ON vs.aid = sa.aid @@ -117,7 +117,7 @@ sub _enrich { ORDER BY v.c_released ASC, v.title ASC, vs.role ASC|, [ keys %r ] )}); push @{$r{ delete $_->{id} }{cast}}, $_ for (@{$self->dbAll(q| - SELECT sa.id, v.id AS vid, sa.name, sa.original, v.c_released, v.title, v.original AS t_original, c.id AS cid, c.name AS c_name, c.original AS c_original, vs.note + SELECT sa.id, sa.aid, v.id AS vid, sa.name, sa.original, v.c_released, v.title, v.original AS t_original, c.id AS cid, c.name AS c_name, c.original AS c_original, vs.note FROM vn_seiyuu vs JOIN vn v ON v.id = vs.id JOIN chars c ON c.id = vs.cid diff --git a/lib/VNDB/Handler/Staff.pm b/lib/VNDB/Handler/Staff.pm index 4bf6e63a..09d74930 100644 --- a/lib/VNDB/Handler/Staff.pm +++ b/lib/VNDB/Handler/Staff.pm @@ -180,7 +180,7 @@ sub _cast { sub edit { my($self, $sid, $rev) = @_; - my $s = $sid && $self->dbStaffGetRev(id => $sid, what => 'extended aliases', $rev ? (rev => $rev) : ())->[0]; + my $s = $sid && $self->dbStaffGetRev(id => $sid, what => 'extended aliases roles', $rev ? (rev => $rev) : ())->[0]; return $self->resNotFound if $sid && !$s->{id}; $rev = undef if !$s || $s->{lastrev}; @@ -227,6 +227,12 @@ sub edit { # reset aid to zero for newly added aliases. $_->{aid} *= $old_aliases{$_->{aid}} ? 1 : 0 for(@{$frm->{aliases}}); + # Make sure no aliases that have been linked to a VN are removed. + my %new_aliases = map +($_, 1), grep $_, $frm->{primary}, map $_->{aid}, @{$frm->{aliases}}; + $frm->{_err} = [ 'usedalias' ] if grep !$new_aliases{$_->{aid}}, @{$s->{roles}}, @{$self->{cast}}; + } + + if(!$frm->{_err}) { $frm->{ihid} = $frm->{ihid} ?1:0; $frm->{ilock} = $frm->{ilock}?1:0; $frm->{aid} = $frm->{primary} if $sid; diff --git a/util/sql/schema.sql b/util/sql/schema.sql index 960b1978..9f78cf51 100644 --- a/util/sql/schema.sql +++ b/util/sql/schema.sql @@ -387,7 +387,7 @@ CREATE TABLE staff ( -- dbentry_type=s id SERIAL PRIMARY KEY, locked boolean NOT NULL DEFAULT FALSE, hidden boolean NOT NULL DEFAULT FALSE, - aid integer NOT NULL, -- staff_alias.aid + aid integer NOT NULL DEFAULT 0, -- staff_alias.aid gender gender NOT NULL DEFAULT 'unknown', lang language NOT NULL DEFAULT 'ja', "desc" text NOT NULL DEFAULT '', @@ -400,7 +400,7 @@ CREATE TABLE staff ( -- dbentry_type=s -- staff_hist CREATE TABLE staff_hist ( chid integer NOT NULL PRIMARY KEY, - aid integer NOT NULL, -- Can't refer to staff_alias.id, because the alias might have been deleted + aid integer NOT NULL DEFAULT 0, -- Can't refer to staff_alias.id, because the alias might have been deleted gender gender NOT NULL DEFAULT 'unknown', lang language NOT NULL DEFAULT 'ja', "desc" text NOT NULL DEFAULT '', -- cgit v1.2.3