| Foorum documentation | Contained in the Foorum distribution. |
| Foorum documentation | Contained in the Foorum distribution. |
package Foorum::Controller::TopicAction; use strict; use warnings; our $VERSION = '1.001000'; use parent 'Catalyst::Controller'; sub lock_or_sticky_or_elite : Regex('^forum/(\w+)/topic/(\d+)/(un)?(sticky|elite|lock)$') { my ( $self, $c ) = @_; my $forum_code = $c->req->snippets->[0]; my $forum = $c->controller('Get')->forum( $c, $forum_code ); my $forum_id = $forum->{forum_id}; $forum_code = $forum->{forum_code}; my $topic_id = $c->req->snippets->[1]; my $is_un = $c->req->snippets->[2]; my $action = $c->req->snippets->[3]; my $topic = $c->controller('Get') ->topic( $c, $topic_id, { forum_id => $forum_id } ); # check policy unless ( $c->model('Policy')->is_moderator( $c, $forum_id ) or ( 'lock' eq $action and $topic->{author_id} == $c->user->user_id ) ) { $c->detach( '/print_error', ['ERROR_PERMISSION_DENIED'] ); } my $status = ($is_un) ? '0' : '1'; my $update_col; if ( 'sticky' eq $action ) { $update_col = 'sticky'; } elsif ( 'lock' eq $action ) { $update_col = 'closed'; } elsif ( 'elite' eq $action ) { $update_col = 'elite'; } $c->model('DBIC::Topic') ->update_topic( $topic_id, { $update_col => $status, } ); $c->model('Log')->log_action( $c, { action => "$is_un$action", object_type => 'topic', object_id => $topic_id, forum_id => $forum_id, text => $topic->{title} } ); if ( 'elite' eq $action ) { # for point my $plus_point = ($is_un) ? '- 4' : '+ 4'; my $user = $c->model('DBIC')->resultset('User') ->get( { user_id => $topic->{author_id} } ); $c->model('DBIC')->resultset('User')->update_user( $user, { point => \"point $plus_point", #" } ); } my $url = $c->req->referer || $forum->{forum_url}; $c->res->redirect("$url?st=1"); } sub ban_or_unban_topic : Regex('^forum/(\w+)/topic/(\d+)/(un)?ban$') { my ( $self, $c ) = @_; my $forum_code = $c->req->snippets->[0]; my $forum = $c->controller('Get')->forum( $c, $forum_code ); my $forum_id = $forum->{forum_id}; $forum_code = $forum->{forum_code}; my $topic_id = $c->req->snippets->[1]; my $is_un = $c->req->snippets->[2]; my $topic = $c->controller('Get') ->topic( $c, $topic_id, { forum_id => $forum_id } ); # check policy unless ( $c->model('Policy')->is_moderator( $c, $forum_id ) ) { $c->detach( '/print_error', ['ERROR_PERMISSION_DENIED'] ); } if ($is_un) { $c->model('DBIC::Topic') ->update_topic( $topic_id, { status => 'healthy' } ); } else { $c->model('DBIC::Topic') ->update_topic( $topic_id, { status => 'banned' } ); } my $url = $c->req->referer || $forum->{forum_url}; $c->res->redirect("$url?st=1"); } 1; __END__