|
From: Chris W. <la...@us...> - 2005-02-25 05:15:36
|
Update of /cvsroot/openinteract/OpenInteract2/pkg/base_error/OpenInteract2/Action In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19267/OpenInteract2/Action Modified Files: Error.pm Log Message: OIN-35: completely rewrite action to provide browse-by-date capabilities Index: Error.pm =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/pkg/base_error/OpenInteract2/Action/Error.pm,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** Error.pm 18 Feb 2004 05:25:23 -0000 1.10 --- Error.pm 25 Feb 2005 05:15:28 -0000 1.11 *************** *** 4,13 **** use strict; ! use base qw( OpenInteract2::Action::CommonSearch ! OpenInteract2::Action::CommonDisplay ); ! use Log::Log4perl qw( get_logger ); ! use OpenInteract2::Constants qw( :log ); ! use OpenInteract2::Context qw( CTX ); ! use Text::Wrap qw(); $OpenInteract2::Action::Error::VERSION = sprintf("%d.%02d", q$Revision$ =~ /(\d+)\.(\d+)/); --- 4,12 ---- use strict; ! use base qw( OpenInteract2::Action ); ! use Log::Log4perl qw( get_logger ); ! use OpenInteract2::Constants qw( :log ); ! use OpenInteract2::Context qw( CTX ); ! use OpenInteract2::ErrorStorage; $OpenInteract2::Action::Error::VERSION = sprintf("%d.%02d", q$Revision$ =~ /(\d+)\.(\d+)/); *************** *** 15,123 **** my ( $log ); ! sub _search_query_customize { ! my ( $self ) = @_; ! my $request = CTX->request; ! ! # First, set the order ! ! my $order = $request->param( 'sort' ) || 'error_time'; ! $order = ( $order eq 'error_time' ) ? 'error_time DESC' : $order; ! $self->param( c_search_results_order => $order ); ! # Next, set the date_from and/or date_to ! my $where = $self->param( 'c_search_query_where' ) || []; ! my $value = $self->param( 'c_search_query_values' ) || []; ! if ( my $from_date = $request->param_date( 'filter_date_from' ) ) { ! push @{ $where }, 'error_time >= ?'; ! push @{ $value }, $from_date->strftime( '%Y-%m-%d' ); ! } ! if ( my $to_date = $request->param_date( 'filter_date_to' ) ) { ! push @{ $where }, 'error_time <= ?'; ! push @{ $value }, $to_date->strftime( '%Y-%m-%d' ); } ! $self->param( c_search_query_where => $where ); ! $self->param( c_search_query_values => $value ); ! return undef; } ! ! sub _search_customize { ! my ( $self, $template_params ) = @_; ! my $request = CTX->request; ! $template_params->{filterby} = { ! sort => $request->param( 'filter_sort' ), ! message => $request->param( 'filter_message' ), ! category => $request->param( 'filter_category' ), ! date_from => $request->param_date( 'filter_date_from' ), ! date_to => $request->param_date( 'filter_date_to' ), ! }; ! return undef; } ! ! ! # Grab the user here since sometimes the user might be 'superuser' ! # who cannot be seen by mere mortals. This throws an error if you ! # do in the template [% error_user = err.user %] and rather than a ! # TRY/CATCH block we'll just do it here. ! ! sub _display_customize { ! my ( $self, $params ) = @_; ! $params->{error_user} = eval { $params->{error}->user }; ! eval { ! my $error_class = CTX->lookup_object( 'error_object' ); ! $params->{category_list} = ! $error_class->db_select({ ! select => [ 'category' ], ! select_modifier => 'DISTINCT', ! from => [ $error_class->table_name ], ! order => 'category', ! return => 'single-list', }); ! }; } ! ! # Implement 'remove()' ourselves so we can delete multiple objects at ! # once ! ! sub remove { my ( $self ) = @_; ! $log ||= get_logger( LOG_APP ); ! my $request = CTX->request; ! my @error_id = $request->param( 'error_id' ); ! my ( @error_results ); ! my $success = 0; ! foreach my $eid ( @error_id ) { ! $log->is_info && ! $log->info( "Removing error: $eid" ); ! my $error = eval { ! CTX->lookup_object( 'error_object' )->fetch( $eid ) ! }; ! if ( $@ or ! $error ) { ! my $msg = ( $@ ) ! ? "Could not retrieve error [$eid] to remove: $@" ! : "Error [$eid] does not exist, not removed."; ! $log->warn( "Failed to fetch error for removal: $msg" ); ! $self->param_add( error_msg => $msg ); ! push @error_results, $msg; ! next; ! } ! eval { $error->remove }; ! if ( $@ ) { ! $log->error( "Failed to delete error [$eid]: $@" ); ! $self->param_add( error_msg => "Failed to remove [$eid]: $@" ); ! } ! else { ! $success++; ! $log->is_info && ! $log->info( "Removed error ok" ); ! } ! } ! $self->param_add( ! status_msg => "$success objects removed successfully" ); ! return $self->execute( task=> 'search_form' ); } ! 1; \ No newline at end of file --- 14,129 ---- my ( $log ); ! sub _get_store { ! return OpenInteract2::ErrorStorage->new(); ! } ! sub home { ! my ( $self ) = @_; ! $log ||= get_logger( LOG_ACTION ); ! $self->param_from_request( 'num_errors', 'num_days', 'num_months' ); ! $log->fatal( "This is a test fatal message" ); ! my $num_errors = $self->param( 'num_errors' ) || 10; ! my $num_days = $self->param( 'num_days' ) || 14; ! my $num_months = $self->param( 'num_months' ) || 2; ! $log->info( "Error browse home with [errors: $num_errors] ", ! "[days: $num_days] [months: $num_months]" ); ! my $store = _get_store(); ! my @errors = $store->get_most_recent( $num_errors, $num_days ); ! $log->info( "Got ", scalar( @errors ), " recent errors" ); ! my %breakdown = $store->get_breakdown_by_month( months => $num_months ); ! return $self->generate_content({ ! error_list => \@errors, ! num_errors => $num_errors, ! num_days => $num_days, ! num_months => $num_months, ! by_month_sorted => [ sort { $b cmp $a } keys %breakdown ], ! by_month => \%breakdown, ! }); ! } ! sub by_month { ! my ( $self ) = @_; ! $log ||= get_logger( LOG_ACTION ); ! my $req = CTX->request; ! my $date_spec = $req->param( 'date_spec' ); ! my ( $year, $month ) = split /\D+/, $date_spec, 2; ! unless ( $month and $year ) { ! $self->add_error_key( 'base_error.monthly.invalid_date', $date_spec ); ! return $self->execute({ task => 'home' }); } ! $log->info( "finding breakdown for $year/$month" ); ! my %breakdown = _get_store()->get_breakdown_by_day( ! month => $month, year => $year ! ); ! $log->info( "Got breakdown with ", scalar( keys %breakdown ), " days" ); ! return $self->generate_content({ ! year => $year, ! month => $month, ! breakdown => \%breakdown, ! days_sorted => [ sort { $b <=> $a } keys %breakdown ], ! }); } ! sub by_day { ! my ( $self ) = @_; ! $log ||= get_logger( LOG_ACTION ); ! my $req = CTX->request; ! my $date_spec = $req->param( 'date_spec' ); ! my ( $year, $month, $day ) = split /\D+/, $date_spec, 3; ! unless ( $month and $year and $day ) { ! $self->add_error_key( 'base_error.daily.invalid_date', $date_spec ); ! return $self->execute({ task => 'home' }); ! } ! my @errors = _get_store()->get_by_date( date => "$year-$month-$day" ); ! return $self->generate_content({ ! error_list => \@errors, ! year => $year, ! month => $month, ! day => $day, ! }); } ! sub display { ! my ( $self ) = @_; ! $log ||= get_logger( LOG_ACTION ); ! my $req = CTX->request; ! my $date_id = $req->param( 'date_id' ); ! unless ( $date_id ) { ! $self->add_error_key( 'base_error.display_no_date' ); ! return $self->execute({ task => 'home' }); ! } ! my ( $error ) = _get_store()->get_by_date( date_id => $date_id ); ! unless ( $error ) { ! $self->add_error_key( 'base_error.display_no_error', $date_id ); ! return $self->execute({ task => 'home' }); ! } ! return $self->generate_content({ an_error => $error }); } ! sub remove_by_month { my ( $self ) = @_; ! $log ||= get_logger( LOG_ACTION ); ! my $req = CTX->request; ! my $year = $req->param( 'year' ); ! my $month = $req->param( 'month' ); ! my $start = DateTime->new( year => $year, month => $month, day => 1 ); ! my $end = DateTime->last_day_of_month( year => $year, month => $month ); ! my @removed = _get_store()->remove_by_date( $start, $end ); ! $self->add_status_key( 'base_error.removed_files_ok', scalar @removed ); ! return $self->execute({ task => 'home' }); ! } ! sub remove_by_day { ! my ( $self ) = @_; ! $log ||= get_logger( LOG_ACTION ); ! my $req = CTX->request; ! my $year = $req->param( 'year' ); ! my $month = $req->param( 'month' ); ! my $day = $req->param( 'day' ); ! my $date = DateTime->new( year => $year, month => $month, day => $day ); ! my @removed = _get_store()->remove_by_date( $date ); ! $self->add_status_key( 'base_error.removed_files_ok', scalar @removed ); ! return $self->execute({ task => 'home' }); } ! 1; |