Data-ResultsHelper
view release on metacpan or search on metacpan
ResultsHelper.pm view on Meta::CPAN
use vars qw($AUTOLOAD $VERSION);
use strict;
$VERSION = '1.04';
sub new {
my $type = shift;
my @PASSED_ARGS = (ref $_[0] eq 'HASH') ? %{$_[0]} : @_;
my @DEFAULT_ARGS = (
prefs => {},
prefix => 'rh',
back_text => 'back',
next_text => 'next',
set_cookie => 1,
cookie_ttl => '1 hour',
base_dir => "/tmp/results_helper",
cookie_filename => time . "." . $$,
ResultsHelper.pm view on Meta::CPAN
my %ARGS = (@DEFAULT_ARGS, @PASSED_ARGS);
unless($ARGS{cookie_name}) {
if($0 && $0 =~ m@.+/(.+)$@) {
$ARGS{cookie_name} = "rh_$1";
} else {
$ARGS{cookie_name} = "results_helper";
}
}
my $self = bless \%ARGS, $type;
my $prefs_defaults = {
at_a_time => 25,
start_number => 1,
sort_column => 0,
};
foreach my $key (qw(at_a_time start_number sort_column)) {
if(exists $self->{prefs}{$key}) {
next;
} elsif(exists $self->form->{$key}) {
$self->{prefs}{$key} = $self->form->{$key};
} elsif(exists $prefs_defaults->{$key}) {
$self->{prefs}{$key} = $prefs_defaults->{$key};
}
}
return $self;
}
sub form {
my $self = shift;
unless($self->{form}) {
$self->{form} = {};
ResultsHelper.pm view on Meta::CPAN
$ref->{$self->{prefix} . "_toc_page_text"} = [];
$ref->{$self->{prefix} . "_toc_page_href"} = [];
my $more_form_tack_on_string = $self->more_form_tack_on_string;
my $script_name = $self->script_name;
my $href = "$script_name?start_number=-start-$more_form_tack_on_string";
my $start;
for(my $i=1;$i<=$self->get_pages($self->rows);$i++) {
last if($self->toc_limit && $i > $self->toc_limit);
$start = 1 + $self->{prefs}{at_a_time} * ($i - 1);
my $tmp_href = $href;
$tmp_href =~ s/-start-/$start/;
push @{$ref->{$self->{prefix} . "_toc_page_text"}}, $i;
push @{$ref->{$self->{prefix} . "_toc_page_href"}}, $tmp_href;
}
$ref->{$self->{prefix} . "_toc_back_text"} = $self->back_text;
$ref->{$self->{prefix} . "_toc_next_text"} = $self->next_text;
$self->link_current_page;
$self->link_back_button($href);
$self->link_next_button($href);
}
sub link_current_page {
my $self = shift;
my $ref = $self->{results_ref};
my $temp_page = int($self->{prefs}{start_number}/$self->{prefs}{at_a_time}) + 1;
my $temp_start_number = ($temp_page - 1) * $self->{prefs}{at_a_time} + 1;
$ref->{$self->{prefix} . "_toc_page_href"}[$temp_page - 1] = '';
}
sub link_back_button {
my $self = shift;
my $href = shift;
my $ref = $self->{results_ref};
my $start = $self->{prefs}{start_number} - $self->{prefs}{at_a_time};
### if this is the first page, don't link the back button
if($start < 1) {
$ref->{$self->{prefix} . "_toc_back_href"} = '';
} else {
my $tmp_href = $href;
$tmp_href =~ s/-start-/$start/;
$ref->{$self->{prefix} . "_toc_back_href"} = $tmp_href;
}
}
sub link_next_button {
my $self = shift;
my $href = shift;
my $ref = $self->{results_ref};
my $start = $self->{prefs}{start_number} + $self->{prefs}{at_a_time};
### if this is the last page, don't link the next button
if($start > $self->rows) {
$ref->{$self->{prefix} . "_toc_next_href"} = '';
} else {
my $tmp_href = $href;
$tmp_href =~ s/-start-/$start/;
$ref->{$self->{prefix} . "_toc_next_href"} = $tmp_href;
}
}
ResultsHelper.pm view on Meta::CPAN
my $ref = $self->{results_ref};
$ref->{$self->{prefix} . "_header_text"} = [];
$ref->{$self->{prefix} . "_header_href"} = [];
### set up the passed along query_string
my $form_tack_on_string = $self->get_form_tack_on_string;
### do the table header row
unless ($self->{no_header}){
my $add_sort_column = ($self->{prefs}->{sort_column} =~ /^-?\d+(,[,\-\d]+)/) ? $1 : "";
foreach my $i (@{$ref->{"$self->{prefix}_show_cols"}}) {
next unless length($self->{results}[0][$i]);
# doing the toggle for the links
my $link = $self->script_name . "?";
if(!exists $self->{prefs}{sort_column}) {
$link .= "sort_column=$i$add_sort_column$form_tack_on_string";
} elsif($self->{prefs}->{sort_column} =~ /^\-$i\b/) {
$link .= "sort_column=$i$add_sort_column$form_tack_on_string";
} elsif($self->{prefs}->{sort_column} =~ /^\b$i\b/) {
$link .= "sort_column=-$i$add_sort_column$form_tack_on_string";
} else {
$link .= "sort_column=$i$add_sort_column$form_tack_on_string";
}
push @{$ref->{$self->{prefix} . "_header_text"}}, $self->{results}[0][$i];
push @{$ref->{$self->{prefix} . "_header_href"}}, $link;
}
}
ResultsHelper.pm view on Meta::CPAN
### want to change sort_code to an array ref
if(ref $self->{sort_code} eq 'HASH') {
my $tmp = [];
foreach(sort keys %{$self->{sort_code}}) {
$tmp->[$_] = $self->{sort_code}->{$_};
}
$self->{sort_code} = $tmp;
}
my $rows = $self->rows;
if(( exists $self->{prefs}{sort_column}) && $self->{prefs}{sort_column} =~ /^[0-9,\-]+$/) {
# the 1 signifies there is a header row
require Sort::ArrayOfArrays;
$self->{results} = Sort::ArrayOfArrays::sort_it($self->{results}, $self->{prefs}->{sort_column}, $self->{sort_code}, 1);
}
}
sub retrieve_results {
my $self = shift;
return $self->{results} if defined($self->{results}) && ref($self->{results}) && $#{ $self->{results} } > -1;
require CGI;
my $cookie_name = $self->cookie_name;
ResultsHelper.pm view on Meta::CPAN
sub rows {
my $self = shift;
### need to subtract 1 since the zeroth row is the header information
return @{$self->{results}} - 1;
}
sub get_pages {
my $self = shift;
my $rows = shift || $self->rows;
my $pages = int($rows / $self->{prefs}->{at_a_time}) + 1;
$pages-- unless($rows % $self->{prefs}->{at_a_time});
return $pages;
}
sub low {
my $self = shift;
return $self->{prefs}{start_number};
}
sub high {
my $self = shift;
my $rows = shift || $self->rows;
return ($self->{prefs}->{start_number} + $self->{prefs}->{at_a_time} - 1 > $rows)
? $rows : $self->{prefs}->{start_number} + $self->{prefs}->{at_a_time} - 1;
}
sub get_values {
my $values=shift;
return () unless defined $values;
if (ref $values eq "ARRAY") {
return @$values;
}
return ($values);
}
sub get_form_tack_on_string {
my $self = shift;
my $form_tack_on_string = '';
my %hash = (%{$self->form}, %{$self->{prefs}});
while(my ($key, $value) = each %hash) {
next if(!$value || $key eq 'sort_column' || $key eq 'start_number');
foreach(get_values($value)) {
$form_tack_on_string .= "&" . URLEncode($key) . "=" . URLEncode($_);
}
}
return $form_tack_on_string;
}
sub more_form_tack_on_string {
my $self = shift;
my $more_form_tack_on_string = $self->get_form_tack_on_string || "";
foreach (qw(sort_column) ){
$more_form_tack_on_string .= "&$_=$self->{prefs}->{$_}" if(exists $self->{prefs}{$_});
}
return $more_form_tack_on_string;
}
sub URLEncode {
my $arg = shift;
my ($ref,$return) = ref($arg) ? ($arg,0) : (\$arg,1) ;
if (defined $$ref) {
$$ref =~ s/([^\w\.\-\ \@\/\:])/sprintf("%%%02X",ord($1))/eg;
ResultsHelper/HTML.pm view on Meta::CPAN
return $self->{uber_row};
}
sub results_chunk {
my $self = shift;
my $return = '';
my $uber_row = $self->uber_row;
my $color_array = $self->color_array;
my $overall_row = 0;
for(my $i=$self->{prefs}{start_number};$i<=$self->{prefs}{start_number}+$self->{prefs}{at_a_time}-1;$i++) {
my $row = $self->{results}[$i];
last unless ref $row;
if($self->{munge_result_row_code_ref} && ref $self->{munge_result_row_code_ref} eq 'CODE') {
&{$self->{munge_result_row_code_ref}}($self, $row);
} elsif($self->can('munge_result_row')) {
$self->munge_result_row($row);
}
$overall_row++;
for(my $j=0;$j<@{$row};$j++) {
( run in 0.588 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )