summaryrefslogtreecommitdiff
path: root/lib/VNWeb
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2021-07-25 15:55:15 +0200
committerYorhel <git@yorhel.nl>2021-07-25 15:55:15 +0200
commit5ae9955a6016759355e1928372d1adff49c395ac (patch)
treedce4ac4165f1840933f10d9607fef50125603e5b /lib/VNWeb
parent3fbc474ccc0f8c773e817397bb377961315929cb (diff)
Merge UList.VNPage into Widget + add start/finish date to VN pages
Diffstat (limited to 'lib/VNWeb')
-rw-r--r--lib/VNWeb/ULists/Elm.pm43
-rw-r--r--lib/VNWeb/ULists/Lib.pm31
-rw-r--r--lib/VNWeb/VN/Page.pm44
3 files changed, 43 insertions, 75 deletions
diff --git a/lib/VNWeb/ULists/Elm.pm b/lib/VNWeb/ULists/Elm.pm
index 0d9eeb06..c88156df 100644
--- a/lib/VNWeb/ULists/Elm.pm
+++ b/lib/VNWeb/ULists/Elm.pm
@@ -2,7 +2,6 @@ package VNWeb::ULists::Elm;
use VNWeb::Prelude;
use VNWeb::ULists::Lib;
-use VNWeb::Releases::Lib 'releases_by_vn';
# Should be called after any change to the ulist_* tables.
@@ -167,21 +166,7 @@ our $VNOPT = form_compile any => {
};
-our $VNPAGE = form_compile any => {
- uid => { vndbid => 'u' },
- vid => { vndbid => 'v' },
- onlist => { anybool => 1 },
- canvote => { anybool => 1 },
- vote => { vnvote => 1 },
- notes => { required => 0, default => '' },
- review => { required => 0, vndbid => 'w' },
- canreview=> { anybool => 1 },
- labels => { aoh => { id => { int => 1 }, label => {}, private => { anybool => 1 } } },
- selected => { type => 'array', values => { id => 1 } },
-};
-
-
-# UListVNNotes module is abused for the UList.Opts and UList.VNPage flag definition
+# UListVNNotes module is abused for the UList.Opts flag definition
elm_api UListVNNotes => $VNOPT, {
uid => { vndbid => 'u' },
vid => { vndbid => 'v' },
@@ -194,7 +179,7 @@ elm_api UListVNNotes => $VNOPT, {
);
# Doesn't need `updcache()`
elm_Success
-}, VNPage => $VNPAGE;
+};
@@ -241,29 +226,9 @@ our $WIDGET = form_compile out => $VNWeb::Elm::apis{UListWidget}[0]{keys};
elm_api UListWidget => $WIDGET, { uid => { vndbid => 'u' }, vid => { vndbid => 'v' } }, sub {
my($data) = @_;
return elm_Unauth if !ulists_own $data->{uid};
- my $v = tuwf->dbRowi('SELECT title, c_released FROM vn WHERE id =', \$data->{vid});
+ my $v = tuwf->dbRowi('SELECT id, title, c_released FROM vn WHERE id =', \$data->{vid});
return elm_Invalid if !defined $v->{title};
- my $lst = tuwf->dbRowi('SELECT vid, vote, notes, started, finished FROM ulist_vns WHERE uid =', \$data->{uid}, 'AND vid =', \$data->{vid});
- my $review = tuwf->dbVali('SELECT id FROM reviews WHERE uid =', \$data->{uid}, 'AND vid =', \$data->{vid});
- my $canvote = sprintf('%08d', $v->{c_released}||0) < strftime '%Y%m%d', gmtime;
- elm_UListWidget {
- uid => $data->{uid},
- vid => $data->{vid},
- labels => !$lst->{vid} ? undef : tuwf->dbAlli('SELECT lbl AS id, \'\' AS label FROM ulist_vns_labels WHERE uid =', \$data->{uid}, 'AND vid =', \$data->{vid}),
- full => {
- title => $v->{title},
- labels => tuwf->dbAlli('SELECT id, label, private FROM ulist_labels WHERE uid =', \$data->{uid}, 'ORDER BY CASE WHEN id < 10 THEN id ELSE 10 END, label'),
- canvote => $lst->{vote} || $canvote || 0,
- canreview => $review || ($canvote && can_edit(w => {})) || 0,
- vote => fmtvote($lst->{vote}),
- review => $review,
- notes => $lst->{notes}||'',
- started => $lst->{started}||'',
- finished => $lst->{finished}||'',
- releases => releases_by_vn($data->{vid}),
- rlist => tuwf->dbAlli('SELECT rid AS id, status FROM rlists WHERE uid =', \$data->{uid}, 'AND rid IN(SELECT id FROM releases_vn WHERE vid =', \$data->{vid}, ')'),
- },
- };
+ elm_UListWidget ulists_widget_full_data $v, $data->{uid};
};
diff --git a/lib/VNWeb/ULists/Lib.pm b/lib/VNWeb/ULists/Lib.pm
index b983a13c..766378c0 100644
--- a/lib/VNWeb/ULists/Lib.pm
+++ b/lib/VNWeb/ULists/Lib.pm
@@ -1,9 +1,10 @@
package VNWeb::ULists::Lib;
use VNWeb::Prelude;
+use VNWeb::Releases::Lib 'releases_by_vn';
use Exporter 'import';
-our @EXPORT = qw/ulists_own enrich_ulists_widget ulists_widget_/;
+our @EXPORT = qw/ulists_own enrich_ulists_widget ulists_widget_ ulists_widget_full_data/;
# Do we have "ownership" access to this users' list (i.e. can we edit and see private stuff)?
sub ulists_own {
@@ -38,4 +39,32 @@ sub ulists_widget_ {
} if auth;
}
+
+# Returns the data structure for the elm_UListWidget API response for the given VN.
+sub ulists_widget_full_data {
+ my($v, $uid, $vnpage) = @_;
+ my $lst = tuwf->dbRowi('SELECT vid, vote, notes, started, finished FROM ulist_vns WHERE uid =', \$uid, 'AND vid =', \$v->{id});
+ my $review = tuwf->dbVali('SELECT id FROM reviews WHERE uid =', \$uid, 'AND vid =', \$v->{id});
+ my $canvote = sprintf('%08d', $v->{c_released}||0) < strftime '%Y%m%d', gmtime;
+ +{
+ uid => $uid,
+ vid => $v->{id},
+ labels => !$lst->{vid} ? undef : tuwf->dbAlli('SELECT lbl AS id, \'\' AS label FROM ulist_vns_labels WHERE uid =', \$uid, 'AND vid =', \$v->{id}),
+ full => {
+ title => $vnpage ? '' : $v->{title},
+ labels => tuwf->dbAlli('SELECT id, label, private FROM ulist_labels WHERE uid =', \$uid, 'ORDER BY CASE WHEN id < 10 THEN id ELSE 10 END, label'),
+ canvote => $lst->{vote} || $canvote || 0,
+ canreview => $review || ($canvote && can_edit(w => {})) || 0,
+ vote => fmtvote($lst->{vote}),
+ review => $review,
+ notes => $lst->{notes}||'',
+ started => $lst->{started}||'',
+ finished => $lst->{finished}||'',
+ releases => $vnpage ? [] : releases_by_vn($v->{id}),
+ rlist => $vnpage ? [] : tuwf->dbAlli('SELECT rid AS id, status FROM rlists WHERE uid =', \$uid, 'AND rid IN(SELECT id FROM releases_vn WHERE vid =', \$v->{id}, ')'),
+ },
+ };
+
+}
+
1;
diff --git a/lib/VNWeb/VN/Page.pm b/lib/VNWeb/VN/Page.pm
index 7c4e3529..72187b4f 100644
--- a/lib/VNWeb/VN/Page.pm
+++ b/lib/VNWeb/VN/Page.pm
@@ -3,6 +3,7 @@ package VNWeb::VN::Page;
use VNWeb::Prelude;
use VNWeb::Releases::Lib;
use VNWeb::Images::Lib qw/image_flagging_display image_ enrich_image_obj/;
+use VNWeb::ULists::Lib 'ulists_widget_full_data';
use VNDB::Func 'fmtrating';
@@ -10,7 +11,7 @@ use VNDB::Func 'fmtrating';
# Also used by Chars::VNTab & Reviews::VNTab
sub enrich_vn {
my($v, $revonly) = @_;
- enrich_merge id => 'SELECT id, c_votecount FROM vn WHERE id IN', $v;
+ enrich_merge id => 'SELECT id, c_votecount, c_released FROM vn WHERE id IN', $v;
enrich_merge vid => 'SELECT id AS vid, title, original FROM vn WHERE id IN', $v->{relations};
enrich_merge aid => 'SELECT id AS aid, title_romaji, title_kanji, year, type, ann_id, lastfetch FROM anime WHERE id IN', $v->{anime};
enrich_extlinks v => $v;
@@ -319,39 +320,6 @@ sub infobox_tags_ {
}
-sub infobox_useroptions_ {
- my($v) = @_;
- return if !auth;
-
- my $labels = tuwf->dbAlli('
- SELECT l.id, l.label, l.private, uvl.vid IS NOT NULL as assigned
- FROM ulist_labels l
- LEFT JOIN ulist_vns_labels uvl ON uvl.uid = l.uid AND uvl.lbl = l.id AND uvl.vid =', \$v->{id}, '
- WHERE l.uid =', \auth->uid, '
- ORDER BY CASE WHEN l.id < 10 THEN l.id ELSE 10 END, l.label'
- );
- my $lst = tuwf->dbRowi('SELECT vid, vote, notes FROM ulist_vns WHERE uid =', \auth->uid, 'AND vid =', \$v->{id});
- my $review = tuwf->dbVali('SELECT id FROM reviews WHERE uid =', \auth->uid, 'AND vid =', \$v->{id});
-
- tr_ class => 'nostripe', sub {
- td_ colspan => 2, sub {
- elm_ 'UList.VNPage', $VNWeb::ULists::Elm::VNPAGE, {
- uid => auth->uid,
- vid => $v->{id},
- onlist => $lst->{vid}||0,
- canvote => canvote($v)||0,
- vote => fmtvote($lst->{vote}),
- notes => $lst->{notes}||'',
- review => $review,
- canreview=> $review || (canvote($v) && can_edit(w => {})) || 0,
- labels => $labels,
- selected => [ map $_->{id}, grep $_->{assigned}, @$labels ],
- };
- }
- }
-}
-
-
# Also used by Chars::VNTab & Reviews::VNTab
sub infobox_ {
my($v, $notags) = @_;
@@ -398,7 +366,13 @@ sub infobox_ {
infobox_affiliates_ $v;
infobox_anime_ $v;
- infobox_useroptions_ $v;
+
+ tr_ class => 'nostripe', sub {
+ td_ colspan => 2, sub {
+ elm_ 'UList.VNPage', $VNWeb::ULists::Elm::WIDGET,
+ ulists_widget_full_data $v, auth->uid, 1;
+ }
+ } if auth;
tr_ class => 'nostripe', sub {
td_ class => 'vndesc', colspan => 2, sub {