Changeset 57

Show
Ignore:
Timestamp:
02/24/05 16:54:06
Author:
brad
Message:

Fixes to the list filtering code.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/plugins/spamlookup/mt-spamlookup.cgi

    r54 r57  
    3636 
    3737use MT::App; 
    38 use MT::Util qw(format_ts offset_time mark_odd_rows); 
     38use MT::Util qw(format_ts offset_time mark_odd_rows encode_url); 
    3939use MT::Author qw(APPROVED BLOCKED); 
    4040use vars qw(@ISA); 
     
    9191 
    9292    my @ids = $query->param('is_spam'); 
    93     if ($query->param('action') =~ m/Delete/) { 
    94         $app->delete_these($type, \@ids); 
    95     } elsif ($query->param('action') =~ m/Approve/) { 
    96         $app->approve_these($type, \@ids); 
    97     } elsif ($query->param('action') =~ m/Moderate/) { 
    98         $app->moderate_these($type, \@ids); 
     93    if (my $action = $query->param('action')) { 
     94        if ($action =~ m/Delete/) { 
     95            $app->delete_these($type, \@ids); 
     96        } elsif ($action =~ m/Approve/) { 
     97            $app->approve_these($type, \@ids); 
     98        } elsif ($action =~ m/Moderate/) { 
     99            $app->moderate_these($type, \@ids); 
     100        } 
    99101    } 
    100102 
    101103    $app->select_objects(\%param); 
    102104 
    103     $param{prev_offset_val} = $param{offset} - $param{limit}; 
     105    $param{prev_offset_val} = $param{offset_val} - $param{limit}; 
    104106    $param{prev_offset} = 1 if $param{prev_offset_val} >= 0; 
    105107    $param{next_offset} = 1 if $param{more}; 
    106     $param{next_offset_val} = $param{offset} + $param{limit}; 
    107108    $param{"limit_".$param{limit}} = 1; 
    108109    $param{type} = $type; 
     
    140141    } 
    141142 
    142  
    143143    $app->build_page('despam.tmpl', \%param); 
    144144} 
    145145 
     146sub approve_these { 
     147    my $self = shift; 
     148    $self->operate_these('approve', @_); 
     149} 
     150sub moderate_these { 
     151    my $self = shift; 
     152    $self->operate_these('moderate', @_); 
     153} 
    146154sub delete_these { 
    147     my $app = shift; 
    148     my ($type, $action, $ids) = @_; 
     155    my $self = shift; 
     156    $self->operate_these('delete', @_); 
     157
     158 
     159sub operate_these { 
     160    my $app = shift; 
     161    my ($action, $type, $ids) = @_; 
    149162 
    150163    return unless @$ids; 
     
    234247 
    235248    my $offset = $query->param('offset') || 0; 
     249    $param->{offset_val} = $offset; 
    236250    my $limit = $query->param('limit') || 20; 
    237     my $filter = $app->{mode} eq 'despam'; 
     251    my $filter = $query->param('filter') || ''; 
     252    $filter = 'spam' if $app->{mode} eq 'despam'; 
     253    my $filter_val = $query->param('filter_val') || ''; 
     254    my $filter_status = $query->param('filter_status') || ''; 
     255    my $filter_args = ''; 
     256    $filter_args .= '&filter='.$filter if $filter ne 'spam'; 
     257    $filter_args .= '&filter_status='.encode_url($filter_status) if $filter eq 'status'; 
     258    $filter_args .= '&filter_val='.encode_url($filter_val) if $filter eq 'message'; 
     259    $param->{filter_args} = $filter_args; 
     260    $param->{filter} = $filter; 
     261    if ($filter eq 'message') { 
     262        $param->{filter_val} = $filter_val; 
     263    } elsif ($filter eq 'status') { 
     264        $param->{filter_status} = $filter_status; 
     265    } 
    238266 
    239267    my $iter; 
     
    241269        require MT::Comment; 
    242270        my $terms = {}; 
    243         $terms->{visible} = 1 if $filter
     271        $terms->{visible} = 1 if $filter eq 'spam'
    244272        my $args = { offset => $offset, limit => ($limit*10)+1, 'sort' => 'created_on', direction => 'descend' }; 
    245273        $iter = MT::Comment->load_iter($terms, $args); 
     
    251279        $iter = MT::TBPing->load_iter($terms, $args); 
    252280    } 
     281    my $re; 
     282    if ($filter eq 'message') { 
     283        my $patt = $filter_val; 
     284        if ($patt =~ m!^/!) { 
     285            $re = $patt; 
     286            my ($opt) = $re =~ m!/([^/]*)$!; 
     287            $re =~ s!^/!!; 
     288            $re =~ s!/[^/]*$!!; 
     289            $re = '(?'.$opt.':'.$re.')' if $opt; 
     290            $re = eval { qr/$re/ }; 
     291        } 
     292        $re ||= '(?i:' . quotemeta($patt) . ')'; 
     293    } 
    253294 
    254295    my @loop; 
    255296    require MT::Callback; 
    256297    my $cb = new MT::Callback(method => 'Despam'); 
    257     my (%blogs, $obj, $start_date, $end_date); 
     298    my (%blogs, $obj, $start_date, $end_date, $text, $approved); 
    258299    my $count = 0; 
    259300    while ($obj = $iter->()) { 
     301        if ($type eq 'comments') { 
     302            $text = join "\n", 
     303                ($obj->email || ''), 
     304                ($obj->author || ''), 
     305                ($obj->url || ''), 
     306                ($obj->text || ''); 
     307            $approved = $obj->visible ? 1 : 0; 
     308        } else { 
     309            $text = join "\n", 
     310                ($obj->blog_name || ''), 
     311                ($obj->title || ''), 
     312                ($obj->source_url || ''), 
     313                ($obj->excerpt || ''); 
     314            $approved = defined $obj->created_by ? ($obj->created_by == 1 ? 0 : 1) : 1; 
     315        } 
     316        $offset++; 
     317        if ($filter eq 'message') { 
     318            next if $text !~ m/$re/; 
     319        } elsif ($filter eq 'status') { 
     320            if ($filter_status eq 'approved') { 
     321                next unless $approved; 
     322            } elsif ($filter_status eq 'moderated') { 
     323                next if $approved; 
     324            } 
     325        } 
    260326        $start_date = $obj->created_on unless defined $start_date; 
    261327        $end_date = $obj->created_on; 
    262         $offset++; $count++; 
     328        $count++; 
    263329        last if $count == ($limit * 10); 
    264         next if ($type ne 'comments') && (($obj->created_by || 0) == 1) && $filter; 
    265         next unless $obj->ip || $filter;  # objects without an ip address aren't very despammable 
     330        next if ($type ne 'comments') && (($obj->created_by || 0) == 1) && ($filter eq 'spam'); 
    266331        my $data = $obj->column_values; 
    267332        my $blog_id = $obj->blog_id; 
     
    273338            $blogs{$blog_id} = $blog; 
    274339        } 
    275         if ($filter) { 
     340        if ($filter eq 'spam') { 
    276341            $cb->error(''); 
    277342            my $result = MT::Plugin::SpamLookup::filter($cb, $app, $obj); 
     
    341406        $data->{blog_name} = $blog->name; 
    342407        $data->{created_on_relative_date} = relative_date(ts2epoch($blog->id, $obj->created_on()), offset_time(time, $blog), $obj->created_on, "%Y-%m-%d"); 
    343         if ($filter) { 
     408        if ($filter eq 'spam') { 
    344409            my @urls = MT::Plugin::SpamLookup::extract_urls($text, 2); 
    345410            my @domain_loop; 
     
    362427    } 
    363428    $param->{object_loop} = \@loop; 
    364     $param->{offset} = $offset; 
     429    $param->{next_offset_val} = $offset; 
    365430    $param->{limit} = $limit; 
    366431} 
  • trunk/plugins/spamlookup/tmpl/comments.tmpl

    r54 r57  
    5050<div id="filters"> 
    5151<form method="get" action="<TMPL_VAR NAME=SCRIPT_URL>" id="filterform"> 
    52 <input type="hidden" name="__mode" value="list_comments" /> 
    53 <input type="hidden" name="blog_id" value="<TMPL_VAR NAME=BLOG_ID>" /> 
     52<input type="hidden" name="__mode" value="view" /> 
     53<input type="hidden" name="_type" value="comments" /> 
    5454 
    5555<MT_TRANS phrase="Show comments where">&nbsp; 
     
    6464<span id="filter_status_prefs" style="display: none"> 
    6565<MT_TRANS phrase="is">&nbsp; 
    66 <select name="filter_val"> 
     66<select name="filter_status"> 
    6767<option value="approved">Approved</option> 
    6868<option value="moderated">Moderated</option> 
     
    7474<hr /> 
    7575<MT_TRANS phrase="Currently showing comments where"> 
     76<TMPL_IF NAME=FILTER_VAL> 
    7677'<MT_TRANS phrase="<TMPL_VAR NAME=FILTER>">' 
     78<MT_TRANS phrase="contains"> 
     79'<TMPL_VAR NAME=FILTER_VAL ESCAPE=HTML>'.&nbsp; 
     80</TMPL_IF> 
     81<TMPL_IF NAME=FILTER_STATUS> 
     82<MT_TRANS phrase="Status"> 
    7783<MT_TRANS phrase="is"> 
    78 '<TMPL_VAR NAME=FILTER_VAL ESCAPE=HTML>'.&nbsp; 
    79 <input type="button" name="reset_filter" value="<MT_TRANS phrase="Reset Filter">" onclick="window.location='<TMPL_VAR NAME=SCRIPT_URL>?__mode=list_comments&amp;blog_id=<TMPL_VAR NAME=BLOG_ID>'" /> 
     84'<TMPL_VAR NAME=FILTER_STATUS ESCAPE=HTML>'.&nbsp; 
     85</TMPL_IF> 
     86<input type="button" name="reset_filter" value="<MT_TRANS phrase="Reset Filter">" onclick="window.location='<TMPL_VAR NAME=SCRIPT_URL>?__mode=view&amp;_type=comments'" /> 
    8087</TMPL_IF> 
    8188 
     
    148155    <input type="button" onclick="checkAll('is_spam',true)" name="check_all" value="<MT_TRANS phrase="Check All">" /> 
    149156    <input type="button" onclick="checkAll('is_spam',false)" name="uncheck_all" value="<MT_TRANS phrase="Uncheck All">" /> 
    150     <input type="button" onclick="doRemoveItems('is_spam', 'comment', 'comments')" name="delete_comments" value="<MT_TRANS phrase="Delete">" /> 
     157    <input type="button" onclick="doRemoveItems(this.form, 'comment', 'comments', 'is_spam')" name="delete_comments" value="<MT_TRANS phrase="Delete">" /> 
    151158    <input type="submit" name="action" value="Approve" /> 
    152159    <input type="submit" name="action" value="Moderate" /> 
  • trunk/plugins/spamlookup/tmpl/pings.tmpl

    r53 r57  
    4848<div id="filters"> 
    4949<form method="get" action="<TMPL_VAR NAME=SCRIPT_URL>" id="filterform"> 
    50 <input type="hidden" name="__mode" value="list_comments" /> 
    51 <input type="hidden" name="blog_id" value="<TMPL_VAR NAME=BLOG_ID>" /> 
     50<input type="hidden" name="__mode" value="view" /> 
     51<input type="hidden" name="_type" value="pings" /> 
    5252 
    5353<MT_TRANS phrase="Show pings where">&nbsp; 
    54 <select name="filter" onchange="selectPrefs(this)"> 
    55 <option value="message"><MT_TRANS phrase="Message"></option> 
     54<select name="filter" onchange="selectPrefs(this)"><option value="message"><MT_TRANS phrase="Message"></option> 
    5655<option value="status"><MT_TRANS phrase="Status"></option> 
    5756</select>&nbsp; 
    5857<span id="filter_message_prefs"> 
    59 <MT_TRANS phrase="contains">&nbsp; 
    60 <input name="filter_val" value="" />&nbsp; 
     58<MT_TRANS phrase="contains">&nbsp;<input name="filter_val" value="" />&nbsp; 
    6159</span> 
    6260<span id="filter_status_prefs" style="display: none"> 
    6361<MT_TRANS phrase="is">&nbsp; 
    64 <select name="filter_val"> 
     62<select name="filter_status"> 
    6563<option value="approved">Approved</option> 
    6664<option value="moderated">Moderated</option> 
     
    7169<TMPL_IF NAME=FILTER> 
    7270<hr /> 
    73 <MT_TRANS phrase="Currently showing comments where"> 
     71<MT_TRANS phrase="Currently showing pings where"> 
     72<TMPL_IF NAME=FILTER_VAL> 
    7473'<MT_TRANS phrase="<TMPL_VAR NAME=FILTER>">' 
     74<MT_TRANS phrase="contains"> 
     75'<TMPL_VAR NAME=FILTER_VAL ESCAPE=HTML>'.&nbsp; 
     76</TMPL_IF> 
     77<TMPL_IF NAME=FILTER_STATUS> 
     78<MT_TRANS phrase="Status"> 
    7579<MT_TRANS phrase="is"> 
    76 '<TMPL_VAR NAME=FILTER_VAL ESCAPE=HTML>'.&nbsp; 
    77 <input type="button" name="reset_filter" value="<MT_TRANS phrase="Reset Filter">" onclick="window.location='<TMPL_VAR NAME=SCRIPT_URL>?__mode=list_comments&amp;blog_id=<TMPL_VAR NAME=BLOG_ID>'" /> 
     80'<TMPL_VAR NAME=FILTER_STATUS ESCAPE=HTML>'.&nbsp; 
     81</TMPL_IF> 
     82<input type="button" name="reset_filter" value="<MT_TRANS phrase="Reset Filter">" onclick="window.location='<TMPL_VAR NAME=SCRIPT_URL>?__mode=view&amp;_type=pings'" /> 
    7883</TMPL_IF> 
    7984 
    8085</form> 
    8186</div> 
    82  
    8387 
    8488<form method="post" action="<TMPL_VAR NAME=SCRIPT_URL>">