diff options
author | Yorhel <git@yorhel.nl> | 2008-11-22 15:33:50 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2008-11-22 15:33:50 +0100 |
commit | 8eaf34dbfdc12a919f79377e7d9c3b1490bc13cb (patch) | |
tree | 8eef488bd598c5fa64cf55b01e615340a4094b53 /lib | |
parent | 323f8d2b48ed76e9bfe0912ec0d78bbb3cfdf7f3 (diff) |
Stole dbVNAdd and dbVNEdit from 1.x and made editing a VN work
Diffstat (limited to 'lib')
-rw-r--r-- | lib/VNDB/DB/VN.pm | 76 | ||||
-rw-r--r-- | lib/VNDB/Handler/VNEdit.pm | 21 |
2 files changed, 95 insertions, 2 deletions
diff --git a/lib/VNDB/DB/VN.pm b/lib/VNDB/DB/VN.pm index eea0da8d..b12086e5 100644 --- a/lib/VNDB/DB/VN.pm +++ b/lib/VNDB/DB/VN.pm @@ -5,7 +5,7 @@ use strict; use warnings; use Exporter 'import'; -our @EXPORT = qw|dbVNGet|; +our @EXPORT = qw|dbVNGet dbVNAdd dbVNEdit|; # Options: id, rev, results, page, order, what @@ -117,5 +117,79 @@ sub dbVNGet { } +# arguments: id, %options ->( editsum + insert_rev ) +# returns: ( local revision, global revision ) +sub dbVNEdit { + my($self, $id, %o) = @_; + my($rev, $cid) = $self->dbRevisionInsert(0, $id, $o{editsum}); + insert_rev($self, $cid, $id, \%o); + return ($rev, $cid); +} + + +# arguments: %options ->( editsum + insert_rev ) +# returns: ( item id, global revision ) +sub dbVNAdd { + my($self, %o) = @_; + my($id, $cid) = $self->dbItemInsert(0, $o{editsum}); + insert_rev($self, $cid, $id, \%o); + return ($id, $cid); +} + + +# helper function, inserts a producer revision +# Arguments: global revision, item id, { columns in producers_rev + categories + anime + relations + screenshots } +# categories = [ [ catid, level ], .. ] +# screenshots = [ [ scrid, nsfw, rid ], .. ] +# relations = [ [ rel, vid ], .. ] +# anime = [ aid, .. ] +sub insert_rev { + my($self, $cid, $vid, $o) = @_; + + $o->{img_nsfw} = $o->{img_nsfw}?1:0; + $self->dbExec(q| + INSERT INTO vn_rev (id, vid, title, original, "desc", alias, image, img_nsfw, length, l_wp, l_encubed, l_renai, l_vnn) + VALUES (!l)|, + [ $cid, $vid, @$o{qw|title original desc alias image img_nsfw length l_wp l_encubed l_renai l_vnn|} ]); + + $self->dbExec(q| + INSERT INTO vn_categories (vid, cat, lvl) + VALUES (?, ?, ?)|, + $cid, $_->[0], $_->[1] + ) for (@{$o->{categories}}); + + $self->dbExec(q| + INSERT INTO vn_screenshots (vid, scr, nsfw, rid) + VALUES (?, ?, ?, ?)|, + $cid, $_->[0], $_->[1]?1:0, $_->[2] + ) for (@{$o->{screenshots}}); + + $self->dbExec(q| + INSERT INTO vn_relations (vid1, vid2, relation) + VALUES (?, ?, ?)|, + $cid, $_->[1], $_->[0] + ) for (@{$o->{relations}}); + + if(@{$o->{anime}}) { + $self->dbExec(q| + INSERT INTO vn_anime (vid, aid) + VALUES (?, ?)|, + $cid, $_ + ) for (@{$o->{anime}}); + + # insert unknown anime + my $a = $self->dbAll(q| + SELECT id FROM anime WHERE id IN(!l)|, + $o->{anime}); + $self->dbExec(q| + INSERT INTO anime (id) VALUES (?)|, $_ + ) for (grep { + my $ia = $_; + !(scalar grep $ia == $_->{id}, @$a) + } @{$o->{anime}}); + } +} + + 1; diff --git a/lib/VNDB/Handler/VNEdit.pm b/lib/VNDB/Handler/VNEdit.pm index fcfc2c36..7bbb5f37 100644 --- a/lib/VNDB/Handler/VNEdit.pm +++ b/lib/VNDB/Handler/VNEdit.pm @@ -31,7 +31,7 @@ sub edit { { name => 'title', maxlength => 250 }, { name => 'original', required => 0, maxlength => 250, default => '' }, { name => 'alias', required => 0, maxlength => 500, default => '' }, - { name => 'desc', maxlength => 10240, whitespace => 1 }, + { name => 'desc', maxlength => 10240 }, { name => 'length', required => 0, default => 0, enum => [ 0..$#{$self->{vn_lengths}} ] }, { name => 'l_wp', required => 0, default => '', maxlength => 150 }, { name => 'l_encubed', required => 0, default => '', maxlength => 100 }, @@ -49,6 +49,25 @@ sub edit { # nothing changed? just redirect return $self->resRedirect("/v$vid", 'post') if !grep $frm->{$_} ne $b4{$_}, keys %b4; + + my %args = ( + (map { $_ => $frm->{$_} } qw|title original alias desc length l_wp l_encubed l_renai l_vnn editsum|), + anime => $anime, + + # copy these from $v, as we don't have a form interface for them yet + categories => $v->{categories}, + image => $v->{image}, + img_nsfw => $v->{img_nsfw}, + screenshots => [ map [ $_->{id}, $_->{nsfw}, $_->{rid} ], @{$v->{screenshots}} ], + relations => [ map [ $_->{relation}, $_->{id} ], @{$v->{relations}} ], + ); + + my($rev) = $self->dbVNEdit($vid, %args); + + $self->multiCmd("ircnotify v$vid.$rev"); + $self->multiCmd('anime') if $frm->{anime} ne $b4{anime}; + + return $self->resRedirect("/v$vid.$rev", 'post'); } } |