/[SVNBrowser]/trunk/lib/SVNBrowser/Action/Filter.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/lib/SVNBrowser/Action/Filter.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 75 - (hide annotations)
Thu Jan 31 22:41:30 2008 UTC (16 years, 2 months ago) by dpavlin
File size: 4027 byte(s)
added search over path
1 dpavlin 5 use strict;
2     use warnings;
3    
4     =head1 NAME
5    
6     SVNBrowser::Action::Filter
7    
8     =cut
9    
10     package SVNBrowser::Action::Filter;
11     use base qw/SVNBrowser::Action Jifty::Action/;
12    
13     use Data::Dump qw/dump/;
14    
15     use Jifty::Param::Schema;
16     use Jifty::Action schema {
17     param author =>
18 dpavlin 75 label is _('Developer login'),
19 dpavlin 5 render as 'combobox',
20     available are defer {
21     my $authors = SVNBrowser::Model::RevisionCollection->new;
22     $authors->column(
23     column => 'author',
24     function => 'distinct',
25     );
26     $authors->unlimit;
27 dpavlin 27 $authors->order_by({ column => 'author', order => 'ASC' });
28     warn "authors ", $authors->build_select_query;
29 dpavlin 5 [{
30     display_from => 'author',
31     value_from => 'author',
32     collection => $authors,
33     }];
34     };
35    
36 dpavlin 26 param branch =>
37 dpavlin 75 label is _('In branch'),
38 dpavlin 26 render as 'combobox',
39     available are defer {
40     my $branches = SVNBrowser::Model::BranchCollection->new;
41     $branches->column(
42     column => 'path',
43     function => 'distinct',
44     );
45     $branches->unlimit;
46 dpavlin 27 $branches->order_by({ column => 'path', order => 'ASC' });
47     warn "branches ", $branches->build_select_query;
48 dpavlin 26 [{
49     display_from => 'path',
50     value_from => 'path',
51     collection => $branches,
52     }];
53     };
54    
55 dpavlin 47 param rel_path =>
56 dpavlin 75 label is _('Path begins with');
57 dpavlin 47
58 dpavlin 75 param path =>
59     label is _('Path contains');
60    
61 dpavlin 10 param show_actions =>
62 dpavlin 75 label is _('Show file actions'),
63 dpavlin 49 render as 'checkbox',
64     default is 1;
65 dpavlin 10
66 dpavlin 13 param page =>
67 dpavlin 75 label is _('Current page');
68 dpavlin 13
69     param per_page =>
70 dpavlin 75 label is _('Commits on page'),
71 dpavlin 13 render as 'Select',
72 dpavlin 49 available are qw( 10 20 30 50 100 ),
73     default is 10;
74 dpavlin 13
75 dpavlin 14 param from_date =>
76 dpavlin 75 label is _('From date'),
77 dpavlin 14 render as 'Date';
78    
79     param to_date =>
80 dpavlin 75 label is _('To date'),
81 dpavlin 14 render as 'Date';
82    
83 dpavlin 19 param search =>
84 dpavlin 75 label is _('Search in messages');
85 dpavlin 14
86 dpavlin 5 };
87    
88     sub sticky_on_success { 1; }
89    
90     =head2 take_action
91    
92     =cut
93    
94     sub take_action {
95     my $self = shift;
96    
97 dpavlin 32 my $revisions = SVNBrowser::Model::RevisionCollection->new();
98     $revisions->unlimit();
99    
100     if ( my $author = $self->argument_value('author') ) {
101     $revisions->limit( column => 'author', value => $author, entry_aggregator => 'AND' );
102     }
103    
104     if ( my $from_date = $self->argument_value('from_date') ) {
105 dpavlin 41 $revisions->limit( column => 'commit_date', operator => '>=', value => $from_date, entry_aggregator => 'AND', case_sensitive => 1 );
106 dpavlin 32 }
107    
108     if ( my $to_date = $self->argument_value('to_date') ) {
109 dpavlin 41 $revisions->limit( column => 'commit_date', operator => '<=', value => $to_date, entry_aggregator => 'AND', case_sensitive => 1 );
110 dpavlin 32 }
111    
112     if ( my $search = $self->argument_value('search') ) {
113     $revisions->limit( column => 'message', operator => 'LIKE', value => '%' . $search . '%' );
114     }
115    
116     if ( my $branch = $self->argument_value('branch') ) {
117     my $b = SVNBrowser::Model::Branch->new();
118     $b->load_by_cols( path => $branch );
119    
120     my $rev_branches = $revisions->join(
121     alias1 => 'main', column1 => 'revision',
122     table2 => 'revision_branches', column2 => 'revision'
123     );
124     $revisions->limit( alias => $rev_branches, column => 'branch', value => $b->id );
125     }
126    
127 dpavlin 75 my $rev_actions = $revisions->join(
128     alias1 => 'main', column1 => 'revision',
129     table2 => 'actions', column2 => 'revision'
130     );
131    
132 dpavlin 47 if ( my $rel_path = $self->argument_value('rel_path') ) {
133     $revisions->limit( alias => $rev_actions, column => 'rel_path', value => $rel_path, operator => 'STARTSWITH' );
134     }
135    
136 dpavlin 75 if ( my $path = $self->argument_value('path') ) {
137     $revisions->limit( alias => $rev_actions, column => 'rel_path', value => $path, operator => 'MATCHES' );
138     }
139    
140 dpavlin 32 $revisions->order_by({ column => 'commit_date', order => 'desc' });
141     $revisions->set_page_info(
142     current_page => $self->argument_value('page'),
143 dpavlin 49 per_page => $self->argument_value('per_page') || 10,
144 dpavlin 32 );
145    
146     warn "take_action SQL: ", $revisions->build_select_query;
147    
148     $revisions->goto_first_item;
149    
150 dpavlin 10 my $msg = '';
151 dpavlin 32 if (my $nr = $revisions->pager->total_entries) {
152     $msg .= "Found $nr revisions";
153     } else {
154     $msg .= "No revisions found";
155     }
156    
157     $self->result->message($msg);
158    
159     $self->result->content( revisions => $revisions );
160    
161 dpavlin 5 return 1;
162     }
163    
164    
165     1;
166    

  ViewVC Help
Powered by ViewVC 1.1.26