summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2008-11-22 15:33:50 +0100
committerYorhel <git@yorhel.nl>2008-11-22 15:33:50 +0100
commit8eaf34dbfdc12a919f79377e7d9c3b1490bc13cb (patch)
tree8eef488bd598c5fa64cf55b01e615340a4094b53 /lib
parent323f8d2b48ed76e9bfe0912ec0d78bbb3cfdf7f3 (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.pm76
-rw-r--r--lib/VNDB/Handler/VNEdit.pm21
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');
}
}