summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/lang.txt12
-rw-r--r--lib/VNDB/DB/Staff.pm4
-rw-r--r--lib/VNDB/Handler/Staff.pm8
-rw-r--r--util/sql/schema.sql4
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 '',