summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2011-03-14 16:44:03 +0100
committerYorhel <git@yorhel.nl>2011-03-15 11:23:33 +0100
commitbf16424bf5173830e2c162dc7dc06e961d5aa0a3 (patch)
tree9493e99c4b6947c2b90b2bca3043db924aaf6cad
parent11a7102282f05cd015abdbd8235952b7233f8c09 (diff)
chardb: Added main char field + editing
The field isn't used yet.
-rw-r--r--data/lang.txt42
-rw-r--r--lib/VNDB/DB/Chars.pm7
-rw-r--r--lib/VNDB/Handler/Chars.pm24
-rw-r--r--util/sql/func.sql4
-rw-r--r--util/updates/update_2.19.sql2
5 files changed, 70 insertions, 9 deletions
diff --git a/data/lang.txt b/data/lang.txt
index 16714c7b..132957c8 100644
--- a/data/lang.txt
+++ b/data/lang.txt
@@ -4930,6 +4930,20 @@ cs*:
hu*:
nl : Bloedgroep
+:_revfield_c_main
+en : Main character
+ru*:
+cs*:
+hu*:
+nl : Hoofdkarakter
+
+:_revfield_c_main_spoil
+en : Spoiler
+ru*:
+cs*:
+hu*:
+nl :
+
:_revfield_c_image
en : Image
ru*:
@@ -5183,6 +5197,27 @@ cs*:
hu*:
nl : Bloedgroep
+:_chare_form_main
+en : Instance of
+ru*:
+cs*:
+hu*:
+nl : Instantie van
+
+:_chare_form_main_note
+en : ID of the main character - the character of which this is an instance of.
+ru*:
+cs*:
+hu*:
+nl : ID van het hoofdkarakter - het karakter waar dit een instantie van is.
+
+:_chare_form_main_spoil
+en : Spoiler
+ru*:
+cs*:
+hu*:
+nl :
+
:_chare_image
en : Image
ru : Изображение
@@ -8500,6 +8535,13 @@ cs*:
hu : Légyszíves olvasdd el a szerkesztési összegzés [url,/d5.4, útmutatóját].
nl : Lees a.u.b. [url,/d5.4,de richtlijnen] over het gebruik van de samenvatting.
+:_formerr_e_mainchar
+en : Invalid main character. Make sure the ID is correct, that the main character itself is not an instance of an other character, and that this entry is not used as a main character elsewhere.
+ru*:
+cs*:
+hu*:
+nl : Ongeldig hoofdkaracter. Zorg ervoor dat het ID correct is, dat het hoofdkarakter zelf geen instantie is van een ander karakter, en dat dit karakter zelf ook niet ergens gebruikt wordt als hoofdkarakter.
+
:_formerr_title
en : Error
ru : Ошибка
diff --git a/lib/VNDB/DB/Chars.pm b/lib/VNDB/DB/Chars.pm
index a1ceb13b..aa0eedfb 100644
--- a/lib/VNDB/DB/Chars.pm
+++ b/lib/VNDB/DB/Chars.pm
@@ -8,7 +8,7 @@ use Exporter 'import';
our @EXPORT = qw|dbCharGet dbCharRevisionInsert dbCharImageId|;
-# options: id rev traitspoil trait_inc trait_exc what results page
+# options: id rev instance traitspoil trait_inc trait_exc what results page
# what: extended traits vns changes
sub dbCharGet {
my $self = shift;
@@ -24,6 +24,7 @@ sub dbCharGet {
!$o{id} && !$o{rev} ? ( 'c.hidden = FALSE' => 1 ) : (),
$o{id} ? ( 'c.id = ?' => $o{id} ) : (),
$o{rev} ? ( 'h.rev = ?' => $o{rev} ) : (),
+ $o{instance} ? ( 'cr.main = ?' => $o{instance} ) : (),
$o{trait_inc} ? (
'c.id IN(SELECT cid FROM traits_chars WHERE tid IN(!l) AND spoil <= ? GROUP BY cid HAVING COUNT(tid) = ?)',
[ ref $o{trait_inc} ? $o{trait_inc} : [$o{trait_inc}], $o{traitspoil}, ref $o{trait_inc} ? $#{$o{trait_inc}}+1 : 1 ]) : (),
@@ -32,7 +33,7 @@ sub dbCharGet {
);
my @select = (qw|c.id cr.name cr.original|, 'cr.id AS cid');
- push @select, qw|c.hidden c.locked cr.alias cr.desc cr.image cr.b_month cr.b_day cr.s_bust cr.s_waist cr.s_hip cr.height cr.weight cr.bloodt cr.gender| if $o{what} =~ /extended/;
+ push @select, qw|c.hidden c.locked cr.alias cr.desc cr.image cr.b_month cr.b_day cr.s_bust cr.s_waist cr.s_hip cr.height cr.weight cr.bloodt cr.gender cr.main cr.main_spoil| if $o{what} =~ /extended/;
push @select, qw|h.requester h.comments c.latest u.username h.rev h.ihid h.ilock|, "extract('epoch' from h.added) as added" if $o{what} =~ /changes/;
my @join;
@@ -88,7 +89,7 @@ sub dbCharRevisionInsert {
my($self, $o) = @_;
my %set = map exists($o->{$_}) ? (qq|"$_" = ?|, $o->{$_}) : (),
- qw|name original alias desc image b_month b_day s_bust s_waist s_hip height weight bloodt gender|;
+ qw|name original alias desc image b_month b_day s_bust s_waist s_hip height weight bloodt gender main main_spoil|;
$self->dbExec('UPDATE edit_char !H', \%set) if keys %set;
if($o->{traits}) {
diff --git a/lib/VNDB/Handler/Chars.pm b/lib/VNDB/Handler/Chars.pm
index 572a62e7..42b1706c 100644
--- a/lib/VNDB/Handler/Chars.pm
+++ b/lib/VNDB/Handler/Chars.pm
@@ -44,6 +44,8 @@ sub page {
[ height => serialize => sub { $_[0]||mt '_revision_empty' } ],
[ weight => serialize => sub { $_[0]||mt '_revision_empty' } ],
[ bloodt => serialize => sub { mt "_bloodt_$_[0]" } ],
+ [ main => htmlize => sub { $_[0] ? sprintf '<a href="/c%d">c%d</a>', $_[0], $_[0] : mt '_revision_empty' } ],
+ [ main_spoil=> serialize => sub { mt "_spoil_$_[0]" } ],
[ image => htmlize => sub {
return $_[0] > 0 ? sprintf '<img src="%s/ch/%02d/%d.jpg" />', $self->{url_static}, $_[0]%100, $_[0]
: mt $_[0] < 0 ? '_chdiff_image_proc' : '_chdiff_image_none';
@@ -209,7 +211,8 @@ sub edit {
|| $id && ($r->{locked} && !$self->authCan('lock') || $r->{hidden} && !$self->authCan('del'));
my %b4 = !$id ? () : (
- (map +($_ => $r->{$_}), qw|name original alias desc image ihid ilock s_bust s_waist s_hip height weight bloodt gender|),
+ (map +($_ => $r->{$_}), qw|name original alias desc image ihid ilock s_bust s_waist s_hip height weight bloodt gender main_spoil|),
+ main => $r->{main}||0,
bday => $r->{b_month} ? sprintf('%02d-%02d', $r->{b_month}, $r->{b_day}) : '',
traits => join(' ', map sprintf('%d-%d', $_->{tid}, $_->{spoil}), sort { $a->{tid} <=> $b->{tid} } @{$r->{traits}}),
vns => join(' ', map sprintf('%d-%d-%d-%s', $_->{vid}, $_->{rid}||0, $_->{spoil}, $_->{role}),
@@ -233,6 +236,8 @@ sub edit {
{ post => 'height', required => 0, default => 0, template => 'int' },
{ post => 'weight', required => 0, default => 0, template => 'int' },
{ post => 'bloodt', required => 0, default => 'unknown', enum => $self->{blood_types} },
+ { post => 'main', required => 0, default => 0, template => 'int' },
+ { post => 'main_spoil', required => 0, default => 0, enum => [ 0..2 ] },
{ post => 'traits', required => 0, default => '', regex => [ qr/^(?:[1-9]\d*-[0-2])(?: +[1-9]\d*-[0-2])*$/, 'Incorrect trait format.' ] },
{ post => 'vns', required => 0, default => '', regex => [ qr/^(?:[1-9]\d*-\d+-[0-2]-[a-z]+)(?: +[1-9]\d*-\d+-[0-2]-[a-z]+)*$/, 'Incorrect VN format.' ] },
{ post => 'editsum', required => 0, maxlength => 5000 },
@@ -244,6 +249,13 @@ sub edit {
# handle image upload
$frm->{image} = _uploadimage($self, $r, $frm);
+ # validate main character
+ if(!$frm->{_err} && $frm->{main}) {
+ my $m = $self->dbCharGet(id => $frm->{main}, what => 'extended')->[0];
+ push @{$frm->{_err}}, 'mainchar' if !$m || $m->{id} == $r->{id} || $m->{main}
+ || $self->dbCharGet(instance => $r->{id})->[0];
+ }
+
if(!$frm->{_err}) {
# parse and normalize
my @traits = sort { $a->[0] <=> $b->[0] } map /^(\d+)-(\d+)$/&&[$1,$2], split / /, $frm->{traits};
@@ -252,6 +264,7 @@ sub edit {
$frm->{vns} = join(' ', map sprintf('%d-%d-%d-%s', @$_), @vns);
$frm->{ihid} = $frm->{ihid} ?1:0;
$frm->{ilock} = $frm->{ilock}?1:0;
+ $frm->{main_spoil} = 0 if !$frm->{main};
# check for changes
return $self->resRedirect("/c$id", 'post')
@@ -259,6 +272,7 @@ sub edit {
# modify for dbCharRevisionInsert
($frm->{b_month}, $frm->{b_day}) = delete($frm->{bday}) =~ /^(\d{2})-(\d{2})$/ ? ($1, $2) : (0, 0);
+ $frm->{main} ||= undef;
$frm->{traits} = \@traits;
$_->[1]||=undef for (@vns);
$frm->{vns} = \@vns;
@@ -291,12 +305,16 @@ sub edit {
map [ $_, mt("_gender_$_") ], @{$self->{genders}} ] ],
[ input => name => mt('_chare_form_bday'), short => 'bday', width => 100, post => ' '.mt('_chare_form_bday_fmt') ],
[ input => name => mt('_chare_form_bust'), short => 's_bust', width => 50, post => ' cm' ],
- [ input => name => mt('_chare_form_waist'), short => 's_waist',width => 50, post => ' cm' ],
- [ input => name => mt('_chare_form_hip'), short => 's_hip', width => 50, post => ' cm' ],
+ [ input => name => mt('_chare_form_waist'), short => 's_waist',width => 50, post => ' cm' ],
+ [ input => name => mt('_chare_form_hip'), short => 's_hip', width => 50, post => ' cm' ],
[ input => name => mt('_chare_form_height'),short => 'height', width => 50, post => ' cm' ],
[ input => name => mt('_chare_form_weight'),short => 'weight', width => 50, post => ' kg' ],
[ select => name => mt('_chare_form_bloodt'),short => 'bloodt', options => [
map [ $_, mt("_bloodt_$_") ], @{$self->{blood_types}} ] ],
+ [ static => contents => '<br />' ],
+ [ input => name => mt('_chare_form_main'), short => 'main', width => 50, post => ' '.mt('_chare_form_main_note') ],
+ [ select => name => mt('_chare_form_main_spoil'), short => 'main_spoil', options => [
+ map [$_, mt("_spoil_$_")], 0..2 ] ],
],
chare_img => [ mt('_chare_image'), [ static => nolabel => 1, content => sub {
diff --git a/util/sql/func.sql b/util/sql/func.sql
index 5a43ae0f..75e5ecad 100644
--- a/util/sql/func.sql
+++ b/util/sql/func.sql
@@ -426,7 +426,7 @@ BEGIN
INSERT INTO edit_char DEFAULT VALUES;
-- load revision
ELSE
- INSERT INTO edit_char SELECT name, original, alias, image, "desc", gender, s_bust, s_waist, s_hip, b_month, b_day, height, weight, bloodt FROM chars_rev WHERE id = hid;
+ INSERT INTO edit_char SELECT name, original, alias, image, "desc", gender, s_bust, s_waist, s_hip, b_month, b_day, height, weight, bloodt, main, main_spoil FROM chars_rev WHERE id = hid;
INSERT INTO edit_char_traits SELECT tid, spoil FROM chars_traits WHERE cid = hid;
INSERT INTO edit_char_vns SELECT vid, rid, spoil, role FROM chars_vns WHERE cid = hid;
END IF;
@@ -443,7 +443,7 @@ BEGIN
RAISE 'edit_char must have exactly one row!';
END IF;
SELECT INTO r * FROM edit_commit();
- INSERT INTO chars_rev SELECT r.cid, r.iid, name, original, alias, image, "desc", gender, s_bust, s_waist, s_hip, b_month, b_day, height, weight, bloodt FROM edit_char;
+ INSERT INTO chars_rev SELECT r.cid, r.iid, name, original, alias, image, "desc", gender, s_bust, s_waist, s_hip, b_month, b_day, height, weight, bloodt, main, main_spoil FROM edit_char;
INSERT INTO chars_traits SELECT r.cid, tid, spoil FROM edit_char_traits;
INSERT INTO chars_vns SELECT r.cid, vid, rid, spoil, role FROM edit_char_vns;
UPDATE chars SET latest = r.cid WHERE id = r.iid;
diff --git a/util/updates/update_2.19.sql b/util/updates/update_2.19.sql
index 76379e96..313fa567 100644
--- a/util/updates/update_2.19.sql
+++ b/util/updates/update_2.19.sql
@@ -61,7 +61,7 @@ CREATE TABLE chars_rev (
weight smallint NOT NULL DEFAULT 0,
bloodt blood_type NOT NULL DEFAULT 'unknown',
main integer REFERENCES chars (id),
- main_spoil boolean NOT NULL DEFAULT false
+ main_spoil smallint NOT NULL DEFAULT 0
);
ALTER TABLE chars ADD FOREIGN KEY (latest) REFERENCES chars_rev (id) DEFERRABLE INITIALLY DEFERRED;