diff options
author | Yorhel <git@yorhel.nl> | 2021-07-25 15:55:15 +0200 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2021-07-25 15:55:15 +0200 |
commit | 5ae9955a6016759355e1928372d1adff49c395ac (patch) | |
tree | dce4ac4165f1840933f10d9607fef50125603e5b /lib/VNWeb | |
parent | 3fbc474ccc0f8c773e817397bb377961315929cb (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.pm | 43 | ||||
-rw-r--r-- | lib/VNWeb/ULists/Lib.pm | 31 | ||||
-rw-r--r-- | lib/VNWeb/VN/Page.pm | 44 |
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 { |