--- trunk/lib/SVNBrowser/Action/Filter.pm 2006/12/05 15:08:46 5 +++ trunk/lib/SVNBrowser/Action/Filter.pm 2006/12/10 19:00:32 32 @@ -24,6 +24,8 @@ function => 'distinct', ); $authors->unlimit; + $authors->order_by({ column => 'author', order => 'ASC' }); + warn "authors ", $authors->build_select_query; [{ display_from => 'author', value_from => 'author', @@ -31,6 +33,48 @@ }]; }; + param branch => + label is 'In branch', + render as 'combobox', + available are defer { + my $branches = SVNBrowser::Model::BranchCollection->new; + $branches->column( + column => 'path', + function => 'distinct', + ); + $branches->unlimit; + $branches->order_by({ column => 'path', order => 'ASC' }); + warn "branches ", $branches->build_select_query; + [{ + display_from => 'path', + value_from => 'path', + collection => $branches, + }]; + }; + + param show_actions => + label is 'Show file actions', + render as 'checkbox'; + + param page => + label is 'Current page'; + + param per_page => + label is 'Commits on page', + render as 'Select', + available are qw( 10 20 30 50 100 ); + + param from_date => + label is 'From date', + render as 'Date'; + + param to_date => + label is 'To date', + render as 'Date'; + + param search => + label is 'Search in messages'; + }; sub sticky_on_success { 1; } @@ -42,11 +86,60 @@ sub take_action { my $self = shift; - my $author = $self->argument_value('author'); - warn "author: $author\n"; - - $self->result->message('Success'); + my $revisions = SVNBrowser::Model::RevisionCollection->new(); + $revisions->unlimit(); + + if ( my $author = $self->argument_value('author') ) { + $revisions->limit( column => 'author', value => $author, entry_aggregator => 'AND' ); + } + + if ( my $from_date = $self->argument_value('from_date') ) { + $revisions->limit( column => 'commit_date', operator => '>=', value => $from_date, entry_aggregator => 'AND' ); + } + + if ( my $to_date = $self->argument_value('to_date') ) { + $revisions->limit( column => 'commit_date', operator => '>=', value => $to_date, entry_aggregator => 'AND' ); + } + + if ( my $search = $self->argument_value('search') ) { + $revisions->limit( column => 'message', operator => 'LIKE', value => '%' . $search . '%' ); + } + + if ( my $branch = $self->argument_value('branch') ) { + my $b = SVNBrowser::Model::Branch->new(); + $b->load_by_cols( path => $branch ); + + my $rev_branches = $revisions->join( + alias1 => 'main', column1 => 'revision', + table2 => 'revision_branches', column2 => 'revision' + ); + $revisions->limit( alias => $rev_branches, column => 'branch', value => $b->id ); + } + + $revisions->order_by({ column => 'commit_date', order => 'desc' }); + $revisions->set_page_info( + current_page => $self->argument_value('page'), + per_page => $self->argument_value('per_page'), + ); + + warn "take_action SQL: ", $revisions->build_select_query; + + $revisions->goto_first_item; + + my $msg = ''; + if (my $nr = $revisions->pager->total_entries) { + $msg .= "Found $nr revisions"; + } else { + $msg .= "No revisions found"; + } + + $self->result->message($msg); + + $self->result->content( revisions => $revisions ); + use Data::Dump qw/dump/; + warn "take_action revisions = ",dump($revisions); + return 1; }