diff options
author | Yorhel <git@yorhel.nl> | 2011-03-14 16:44:03 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2011-03-15 11:23:33 +0100 |
commit | bf16424bf5173830e2c162dc7dc06e961d5aa0a3 (patch) | |
tree | 9493e99c4b6947c2b90b2bca3043db924aaf6cad | |
parent | 11a7102282f05cd015abdbd8235952b7233f8c09 (diff) |
chardb: Added main char field + editing
The field isn't used yet.
-rw-r--r-- | data/lang.txt | 42 | ||||
-rw-r--r-- | lib/VNDB/DB/Chars.pm | 7 | ||||
-rw-r--r-- | lib/VNDB/Handler/Chars.pm | 24 | ||||
-rw-r--r-- | util/sql/func.sql | 4 | ||||
-rw-r--r-- | util/updates/update_2.19.sql | 2 |
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; |