summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2011-03-19 16:27:18 +0100
committerYorhel <git@yorhel.nl>2011-03-19 16:27:18 +0100
commit4bd3c0ed6a2b5cd7803a27af2c84d2b7354fca32 (patch)
treef942f1f2950670208b67972c7bccb102e088c445
parentefca07848644ef44e44c1b7956677422fd99aafe (diff)
chardb: Implemented char entry copying
-rw-r--r--data/lang.txt35
-rw-r--r--lib/VNDB/Handler/Chars.pm32
-rw-r--r--lib/VNDB/Util/CommonHTML.pm4
3 files changed, 43 insertions, 28 deletions
diff --git a/data/lang.txt b/data/lang.txt
index bc94f687..17d926d4 100644
--- a/data/lang.txt
+++ b/data/lang.txt
@@ -5099,6 +5099,13 @@ cs : Editovat [_1]
hu : [_1] szerkesztése
nl : Wijzig [_1]
+:_chare_title_copy
+en : Copy [_1]
+ru : Копирование [_1]
+cs : Kopírovat [_1]
+hu : [_1] másolása
+nl : Kopieer [_1]
+
:_chare_title_add
en : Add new character
ru*:
@@ -8360,23 +8367,23 @@ nl : Dit item is uit de database verwijderd. Als je het hier niet mee eens bent
# The warning/notice messages on edit pages
:_editmsg_copy_title
-en : You're not editing a release!
-ru : Вы не редактируете выпуск, а копируете его!
-cs : Needitujete vydání!
-hu : Te most nem szerkesztesz egy kiadást!
-nl : Je bent geen uitgave aan het wijzigen!
+en : You're not editing a entry!
+ru*:
+cs*:
+hu*:
+nl : Je bent geen item aan het wijzigen!
:_editmsg_copy_msg
-en : You're about to insert a new release into the database with information based on [_1].[br]
- Hit the 'edit' tab on the right-top if you intended to edit the release instead of creating a new one.
-ru : Вы собираетесь создать новый выпуск, основанный на информации из [_1].[br]
+en : You're about to insert a new entry into the database with information based on [_1].[br]
+ Hit the 'edit' tab on the right-top if you intended to edit the entry instead of creating a new one.
+ru*: Вы собираетесь создать новый выпуск, основанный на информации из [_1].[br]
Щёлкните вкладку 'правка' в правом верхнем углу, если собирались редактировать выпуск, а не создавать новый.
-cs : Chystáte se vložit nové vydání do databáze s informacemi založenými na vydání [_1].[br]
+cs*: Chystáte se vložit nové vydání do databáze s informacemi založenými na vydání [_1].[br]
Pokud chcete editovat vydání místo toho, abyste vložili další vydání, přejděte na záložku 'editovat' v pravém horním rohu.
-hu : Te most ép arra készülsz, hogy egy új kiadást hozzál létre az adatbázisban, [_1]-ra alapozva az információkat.[br]
+hu*: Te most ép arra készülsz, hogy egy új kiadást hozzál létre az adatbázisban, [_1]-ra alapozva az információkat.[br]
Klikkelj a 'szerkesztés' fülre a jobb felső sarokba ha egy új kiadás helyet, csak szerkeszteni akartad a meglévőt.
-nl : Je staat op het punt om een nieuwe uitgave toe te voegen aan de database, met informatie gebasseerd op [_1].[br]
- Klik op de 'wijzig' tab rechtsboven als je bedoeling is om deze uitgave te wijzigen in plaats van een nieuwe aan te maken.
+nl : Je staat op het punt om een nieuw item toe te voegen aan de database, met informatie gebasseerd op [_1].[br]
+ Klik op de 'wijzig' tab rechtsboven als je bedoeling is om dit item te wijzigen in plaats van een nieuwe aan te maken.
:_editmsg_msg_title
en : Before editing:
@@ -8411,7 +8418,7 @@ en : [url,_1,Search the database] to see if we already have information about th
ru*: [url,_1,Воспользуйтесь поиском], ведь вполне возможно, что у нас уже есть информация об [index,_2,этой новелле,этом выпуске,этой компании].
cs*: [url,_1,Prohledejte databázi], zda již nemáme informaci o [index,_2,této vizuální novele,tomto vydání,tomto producentovi].
hu*: [url,_1,Nézd át az adatbázist], hogy van-e már információ erről a [index,_2,visual novelről, kiadásról, készítőről].
-nl : [url,_1,Doorzoek de database] om te kijken of we al informatie hebben over [index,_2,deze visual novel,deze uitgave,deze producent,dit kenmerk].
+nl : [url,_1,Doorzoek de database] om te kijken of we al informatie hebben over [index,_2,deze visual novel,deze uitgave,deze producent,dit karakter].
:_editmsg_revert_title
en : Reverting
@@ -8429,7 +8436,7 @@ cs*: Editujete starší verzi [index,_1,této vizuální novely,tohoto vydání,
Pokud ji uložíte, všechny změny provedené po této revizi budou vráceny!
hu*: Te egy régi átjavítását szerkeszted ennek a [index,_1,visual novelnek, kiadásnak, készítőnek].
Ha lemented, akkor minden szerkesztés amit ezután a javítás után végeztek megsemmisül!
-nl : Je wijzigd een verouderde versie van [index,_1,deze visual novel,deze uitgave,deze producent,dit kenmerk].
+nl : Je wijzigd een verouderde versie van [index,_1,deze visual novel,deze uitgave,deze producent,dit karakter].
Als je dit opslaat, zullen alle wijzigingen na deze revisie teruggedraait worden.
diff --git a/lib/VNDB/Handler/Chars.pm b/lib/VNDB/Handler/Chars.pm
index 04114ffe..f8c5a4e7 100644
--- a/lib/VNDB/Handler/Chars.pm
+++ b/lib/VNDB/Handler/Chars.pm
@@ -11,7 +11,7 @@ our @EXPORT = ('charTable');
TUWF::register(
qr{c([1-9]\d*)(?:\.([1-9]\d*))?} => \&page,
- qr{c(?:([1-9]\d*)(?:\.([1-9]\d*))?/edit|/new)}
+ qr{c(?:([1-9]\d*)(?:\.([1-9]\d*))?/(edit|copy)|/new)}
=> \&edit,
);
@@ -228,7 +228,10 @@ sub charTable {
sub edit {
- my($self, $id, $rev) = @_;
+ my($self, $id, $rev, $copy) = @_;
+
+ my $copy = $rev && $rev eq 'copy' || $copy && $copy eq 'copy';
+ $rev = undef if defined $rev && $rev !~ /^\d+$/;
my $r = $id && $self->dbCharGet(id => $id, what => 'changes extended vns traits', $rev ? (rev => $rev) : ())->[0];
return $self->resNotFound if $id && !$r->{id};
@@ -283,10 +286,11 @@ sub edit {
|| $self->dbCharGet(instance => $r->{id})->[0];
}
+ my(@traits, @vns);
if(!$frm->{_err}) {
# parse and normalize
- my @traits = sort { $a->[0] <=> $b->[0] } map /^(\d+)-(\d+)$/&&[$1,$2], split / /, $frm->{traits};
- my @vns = sort { $a->[0] <=> $b->[0] || $a->[1] <=> $b->[1] } map [split /-/], split / /, $frm->{vns};
+ @traits = sort { $a->[0] <=> $b->[0] } map /^(\d+)-(\d+)$/&&[$1,$2], split / /, $frm->{traits};
+ @vns = sort { $a->[0] <=> $b->[0] || $a->[1] <=> $b->[1] } map [split /-/], split / /, $frm->{vns};
$frm->{traits} = join(' ', map sprintf('%d-%d', @$_), @traits);
$frm->{vns} = join(' ', map sprintf('%d-%d-%d-%s', @$_), @vns);
$frm->{ihid} = $frm->{ihid} ?1:0;
@@ -294,9 +298,12 @@ sub edit {
$frm->{main_spoil} = 0 if !$frm->{main};
# check for changes
- return $self->resRedirect("/c$id", 'post')
- if $id && !grep $frm->{$_} ne $b4{$_}, keys %b4;
+ my $same = $id && !grep $frm->{$_} ne $b4{$_}, keys %b4;
+ $self->resRedirect("/c$id", 'post') if !$copy && $same;
+ $frm->{_err} = ['nochanges'] if $copy && $same;
+ }
+ if(!$frm->{_err}) {
# modify for dbCharRevisionInsert
($frm->{b_month}, $frm->{b_day}) = delete($frm->{bday}) =~ /^(\d{2})-(\d{2})$/ ? ($1, $2) : (0, 0);
$frm->{main} ||= undef;
@@ -304,7 +311,7 @@ sub edit {
$_->[1]||=undef for (@vns);
$frm->{vns} = \@vns;
- my $nrev = $self->dbItemEdit(c => $id ? $r->{cid} : undef, %$frm);
+ my $nrev = $self->dbItemEdit(c => !$copy && $id ? $r->{cid} : undef, %$frm);
# TEMPORARY SOLUTION! I'll investigate more efficient solutions and incremental updates whenever I have more data
$self->dbExec('SELECT traits_chars_calc()');
@@ -314,13 +321,14 @@ sub edit {
}
$frm->{$_} //= $b4{$_} for keys %b4;
- $frm->{editsum} //= sprintf 'Reverted to revision c%d.%d', $id, $rev if $rev;
+ $frm->{editsum} //= sprintf 'Reverted to revision c%d.%d', $id, $rev if !$copy && $rev;
+ $frm->{editsum} = sprintf 'New character based on c%d.%d', $id, $r->{rev} if $copy;
- my $title = mt $r ? ('_chare_title_edit', $r->{name}) : '_chare_title_add';
+ my $title = mt $r ? ($copy ? '_chare_title_copy' : '_chare_title_edit', $r->{name}) : '_chare_title_add';
$self->htmlHeader(title => $title, noindex => 1);
- $self->htmlMainTabs('c', $r, 'edit') if $r;
- $self->htmlEditMessage('c', $r, $title);
- $self->htmlForm({ frm => $frm, action => $r ? "/c$id/edit" : '/c/new', editsum => 1, upload => 1 },
+ $self->htmlMainTabs('c', $r, $copy ? 'copy' : 'edit') if $r;
+ $self->htmlEditMessage('c', $r, $title, $copy);
+ $self->htmlForm({ frm => $frm, action => $r ? "/c$id/".($copy ? 'copy' : 'edit') : '/c/new', editsum => 1, upload => 1 },
chare_geninfo => [ mt('_chare_form_generalinfo'),
[ input => name => mt('_chare_form_name'), short => 'name' ],
[ input => name => mt('_chare_form_original'), short => 'original' ],
diff --git a/lib/VNDB/Util/CommonHTML.pm b/lib/VNDB/Util/CommonHTML.pm
index 22e8f13d..a146a098 100644
--- a/lib/VNDB/Util/CommonHTML.pm
+++ b/lib/VNDB/Util/CommonHTML.pm
@@ -65,7 +65,7 @@ sub htmlMainTabs {
end;
}
- if($type eq 'r' && $self->authCan('edit')) {
+ if($type =~ /[rc]/ && $self->authCan('edit')) {
li $sel eq 'copy' ? (class => 'tabselected') : ();
a href => "/$id/copy", mt '_mtabs_copy';
end;
@@ -277,7 +277,7 @@ sub htmlEditMessage {
div class => 'warning';
h2 mt '_editmsg_copy_title';
p;
- lit mt '_editmsg_copy_msg', sprintf '<a href="/%s%d">%s</a>', $type, $obj->{id}, xml_escape $obj->{title};
+ lit mt '_editmsg_copy_msg', sprintf '<a href="/%s%d">%s</a>', $type, $obj->{id}, xml_escape $obj->{title}||$obj->{name};
end;
end;
}