From 9854508668f1cc9d6a0f8a88cc70d961ebb9d556 Mon Sep 17 00:00:00 2001 From: Yorhel Date: Sun, 27 Sep 2020 09:52:02 +0200 Subject: v2rw: Delete old tag edit form --- lib/VNDB/DB/Tags.pm | 55 +--------------- lib/VNDB/Handler/Tags.pm | 167 ----------------------------------------------- 2 files changed, 1 insertion(+), 221 deletions(-) diff --git a/lib/VNDB/DB/Tags.pm b/lib/VNDB/DB/Tags.pm index e412e10f..1104bad8 100644 --- a/lib/VNDB/DB/Tags.pm +++ b/lib/VNDB/DB/Tags.pm @@ -5,7 +5,7 @@ use strict; use warnings; use Exporter 'import'; -our @EXPORT = qw|dbTagGet dbTTTree dbTagEdit dbTagAdd dbTagMerge dbTagStats dbTagWipeVotes|; +our @EXPORT = qw|dbTagGet dbTTTree dbTagStats|; # %options->{ id noid name search state searchable applicable page results what sort reverse } @@ -123,53 +123,6 @@ sub dbTTTree { } -# args: tag id, %options->{ columns in the tags table + parents + aliases } -sub dbTagEdit { - my($self, $id, %o) = @_; - - $self->dbExec('UPDATE tags !H WHERE id = ?', { - $o{upddate} ? ('added = NOW()' => 1) : (), - map exists($o{$_}) ? ("$_ = ?" => $o{$_}) : (), qw|name searchable applicable description state cat defaultspoil| - }, $id); - if($o{aliases}) { - $self->dbExec('DELETE FROM tags_aliases WHERE tag = ?', $id); - $self->dbExec('INSERT INTO tags_aliases (tag, alias) VALUES (?, ?)', $id, $_) for (@{$o{aliases}}); - } - if($o{parents}) { - $self->dbExec('DELETE FROM tags_parents WHERE tag = ?', $id); - $self->dbExec('INSERT INTO tags_parents (tag, parent) VALUES (?, ?)', $id, $_) for(@{$o{parents}}); - } -} - - -# same args as dbTagEdit, without the first tag id -# returns the id of the new tag -sub dbTagAdd { - my($self, %o) = @_; - my $id = $self->dbRow('INSERT INTO tags (name, searchable, applicable, description, state, cat, defaultspoil, addedby) VALUES (!l, ?) RETURNING id', - [ map $o{$_}, qw|name searchable applicable description state cat defaultspoil| ], $o{addedby}||$self->authInfo->{id} - )->{id}; - $self->dbExec('INSERT INTO tags_parents (tag, parent) VALUES (?, ?)', $id, $_) for(@{$o{parents}}); - $self->dbExec('INSERT INTO tags_aliases (tag, alias) VALUES (?, ?)', $id, $_) for (@{$o{aliases}}); - return $id; -} - - -sub dbTagMerge { - my($self, $id, @merge) = @_; - $self->dbExec(q| - DELETE FROM tags_vn tv - WHERE tag IN(!l) - AND EXISTS(SELECT 1 FROM tags_vn ti WHERE ti.tag = ? AND ti.uid = tv.uid AND ti.vid = tv.vid)|, \@merge, $id); - $self->dbExec('UPDATE tags_vn SET tag = ? WHERE tag IN(!l)', $id, \@merge); - $self->dbExec('UPDATE tags_aliases SET tag = ? WHERE tag IN(!l)', $id, \@merge); - $self->dbExec('INSERT INTO tags_aliases (tag, alias) VALUES (?, ?)', $id, $_->{name}) - for (@{$self->dbAll('SELECT name FROM tags WHERE id IN(!l)', \@merge)}); - $self->dbExec('DELETE FROM tags_parents WHERE tag IN(!l)', \@merge); - $self->dbExec('DELETE FROM tags WHERE id IN(!l)', \@merge); -} - - # Fetch all tags related to a VN # Argument: %options->{ vid minrating state results what page sort reverse } # sort: name, rating @@ -205,11 +158,5 @@ sub dbTagStats { return wantarray ? ($r, $np) : $r; } - -# Deletes all votes on a tag. -sub dbTagWipeVotes { - $_[0]->dbExec('DELETE FROM tags_vn WHERE tag = ?', $_[1]) -} - 1; diff --git a/lib/VNDB/Handler/Tags.pm b/lib/VNDB/Handler/Tags.pm index 9db1667f..2796a38d 100644 --- a/lib/VNDB/Handler/Tags.pm +++ b/lib/VNDB/Handler/Tags.pm @@ -11,9 +11,6 @@ use VNDB::Types; TUWF::register( qr{g([1-9]\d*)}, \&tagpage, - qr{old/g([1-9]\d*)/(edit)}, \&tagedit, - qr{old/g([1-9]\d*)/(add)}, \&tagedit, - qr{old/g/new}, \&tagedit, qr{g/list}, \&taglist, qr{u([1-9]\d*)/tags}, \&usertags, qr{g}, \&tagindex, @@ -146,170 +143,6 @@ sub tagpage { } -sub tagedit { - my($self, $tag, $act) = @_; - - my($frm, $par); - if($act && $act eq 'add') { - $par = $self->dbTagGet(id => $tag)->[0]; - return $self->resNotFound if !$par; - $frm->{parents} = $par->{name}; - $frm->{cat} = $par->{cat}; - $tag = undef; - } - - return $self->htmlDenied if !$self->authCan('tag') || $tag && !$self->authCan('tagmod'); - - my $t = $tag && $self->dbTagGet(id => $tag, what => 'parents(1) aliases addedby')->[0]; - return $self->resNotFound if $tag && !$t; - - if($self->reqMethod eq 'POST') { - return if !$self->authCheckCode; - $frm = $self->formValidate( - { post => 'name', required => 1, maxlength => 250, regex => [ qr/^[^,]+$/, 'A comma is not allowed in tag names' ] }, - { post => 'state', required => 0, default => 0, enum => [ 0..2 ] }, - { post => 'cat', required => 1, enum => [ keys %TAG_CATEGORY ] }, - { post => 'catrec', required => 0 }, - { post => 'searchable', required => 0, default => 0 }, - { post => 'applicable', required => 0, default => 0 }, - { post => 'alias', required => 0, maxlength => 1024, default => '', regex => [ qr/^[^,]+$/s, 'No comma allowed in aliases' ] }, - { post => 'description', required => 0, maxlength => 10240, default => '' }, - { post => 'defaultspoil',required => 0, default => 0, enum => [ 0..2 ] }, - { post => 'parents', required => !$self->authCan('tagmod'), default => '' }, - { post => 'merge', required => 0, default => '' }, - { post => 'wipevotes', required => 0, default => 0 }, - ); - my @aliases = split /[\t\s]*\n[\t\s]*/, $frm->{alias}; - my @parents = split /[\t\s]*,[\t\s]*/, $frm->{parents}; - my @merge = split /[\t\s]*,[\t\s]*/, $frm->{merge}; - if(!$frm->{_err}) { - my @dups = @{$self->dbTagGet(name => $frm->{name}, noid => $tag)}; - push @dups, @{$self->dbTagGet(name => $_, noid => $tag)} for @aliases; - push @{$frm->{_err}}, \sprintf 'Tag %s already exists!', $_->{id}, xml_escape $_->{name} for @dups; - for(@parents, @merge) { - my $c = $self->dbTagGet(name => $_, noid => $tag); - push @{$frm->{_err}}, "Tag '$_' not found" if !@$c; - $_ = $c->[0]{id}; - } - } - - if(!$frm->{_err}) { - if(!$self->authCan('tagmod')) { - $frm->{state} = 0; - $frm->{searchable} = $frm->{applicable} = 1; - } - my %opts = ( - name => $frm->{name}, - state => $frm->{state}, - cat => $frm->{cat}, - description => $frm->{description}, - searchable => $frm->{searchable}?1:0, - applicable => $frm->{applicable}?1:0, - defaultspoil => $frm->{defaultspoil}, - aliases => \@aliases, - parents => \@parents, - ); - if(!$tag) { - $tag = $self->dbTagAdd(%opts); - } else { - $self->dbTagEdit($tag, %opts, upddate => $frm->{state} == 2 && $t->{state} != 2); - _set_childs_cat($self, $tag, $frm->{cat}) if $frm->{catrec}; - } - $self->dbTagWipeVotes($tag) if $self->authCan('tagmod') && $frm->{wipevotes}; - $self->dbTagMerge($tag, @merge) if $self->authCan('tagmod') && @merge; - $self->resRedirect("/g$tag", 'post'); - return; - } - } - - if($tag) { - $frm->{$_} ||= $t->{$_} for (qw|name searchable applicable description state cat defaultspoil|); - $frm->{alias} ||= join "\n", @{$t->{aliases}}; - $frm->{parents} ||= join ', ', map $_->{name}, @{$t->{parents}}; - } - - my $title = $par ? "Add child tag to $par->{name}" : $tag ? "Edit tag: $t->{name}" : 'Add new tag'; - $self->htmlHeader(title => $title, noindex => 1); - $self->htmlMainTabs('g', $par || $t, 'edit') if $t || $par; - - if(!$self->authCan('tagmod')) { - div class => 'mainbox'; - h1 'Requesting new tag'; - div class => 'notice'; - h2 'Your tag must be approved'; - p; - txt 'Because all tags have to be approved by moderators, it can take a while before it will show up in the tag list' - .' or on visual novel pages. You can still vote on tag even if it has not been approved yet, though.'; - br; br; - txt 'Also, make sure you\'ve read the '; - a href => '/d10', 'guidelines'; - txt ' so you can predict whether your tag will be accepted or not.'; - end; - end; - end; - } - - $self->htmlForm({ frm => $frm, action => $par ? "/old/g$par->{id}/add" : $tag ? "/old/g$tag/edit" : '/old/g/new' }, 'tagedit' => [ $title, - [ input => short => 'name', name => 'Primary name' ], - $self->authCan('tagmod') ? ( - $tag ? - [ static => label => 'Added by', content => sub { VNWeb::HTML::user_($t); '' } ] : (), - [ select => short => 'state', name => 'State', options => [ - [0, 'Awaiting moderation'], [1, 'Deleted/hidden'], [2, 'Approved'] ] ], - [ checkbox => short => 'searchable', name => 'Searchable (people can use this tag to filter VNs)' ], - [ checkbox => short => 'applicable', name => 'Applicable (people can apply this tag to VNs)' ], - ) : (), - [ select => short => 'cat', name => 'Category', options => [ - map [$_, $TAG_CATEGORY{$_}], keys %TAG_CATEGORY ] ], - $self->authCan('tagmod') && $tag ? ( - [ checkbox => short => 'catrec', name => 'Also edit all child tags to have this category' ], - [ static => content => 'WARNING: This will overwrite the category field for all child tags, this action can not be reverted!' ], - ) : (), - [ textarea => short => 'alias', name => "Aliases\n(separated by newlines)", cols => 30, rows => 4 ], - [ textarea => short => 'description', name => 'Description' ], - [ static => content => 'What should the tag be used for? Having a good description helps users choose which tags to link to a VN.' ], - [ select => short => 'defaultspoil', name => 'Default spoiler level', options => [ map [$_, fmtspoil $_], 0..2 ] ], - [ static => content => 'This is the spoiler level that will be used by default when everyone has voted "neutral".' ], - [ input => short => 'parents', name => 'Parent tags' ], - [ static => content => 'Comma separated list of tag names to be used as parent for this tag.' ], - $self->authCan('tagmod') ? ( - [ part => title => 'DANGER: Merge tags' ], - [ input => short => 'merge', name => 'Tags to merge' ], - [ static => content => - 'Comma separated list of tag names to merge into this one.' - .' All votes and aliases/names will be moved over to this tag, and the old tags will be deleted.' - .' Just leave this field empty if you don\'t intend to do a merge.' - .'
WARNING: this action cannot be undone!' ], - - [ part => title => 'DANGER: Delete tag votes' ], - [ checkbox => short => 'wipevotes', name => 'Remove all votes on this tag. WARNING: cannot be undone!' ], - ) : (), - ]); - $self->htmlFooter; -} - -# recursively edit all child tags and set the category field -# Note: this can be done more efficiently by doing everything in one UPDATE -# query, but that takes more code and this feature isn't used very often -# anyway. -sub _set_childs_cat { - my($self, $tag, $cat) = @_; - my %done; - - my $e; - $e = sub { - my $l = shift; - for (@$l) { - $self->dbTagEdit($_->{id}, cat => $cat) if !$done{$_->{id}}++; - $e->($_->{sub}) if $_->{sub}; - } - }; - - my $childs = $self->dbTTTree(tag => $tag, 25); - $e->($childs); -} - - sub taglist { my $self = shift; -- cgit v1.2.3