use constant PRIV => '__paginatedhelper_priv';
+use List::Util qw(min);
+
my %controller_paginate_spec;
sub make_paginated {
- my ($class, %specs) = @_;
+ my ($class, %specs) = @_;
- $specs{MODEL} ||= $class->controller_name;
- $specs{MODEL} =~ s{ ^ SL::DB:: (?: .* :: )? }{}x;
- $specs{PER_PAGE} ||= "SL::DB::Manager::$specs{MODEL}"->default_objects_per_page;
- $specs{FORM_PARAMS} ||= [ qw(page per_page) ];
- $specs{ONLY} ||= [];
- $specs{ONLY} = [ $specs{ONLY} ] if !ref $specs{ONLY};
- $specs{ONLY_MAP} = @{ $specs{ONLY} } ? { map { ($_ => 1) } @{ $specs{ONLY} } } : { '__ALL__' => 1 };
+ $specs{MODEL} ||= $class->controller_name;
+ $specs{MODEL} =~ s{ ^ SL::DB:: (?: .* :: )? }{}x;
+ $specs{PER_PAGE} ||= "SL::DB::Manager::$specs{MODEL}"->default_objects_per_page;
+ $specs{FORM_PARAMS} ||= [ qw(page per_page) ];
+ $specs{PAGINATE_ARGS} ||= '__FILTER__';
+ $specs{ONLY} ||= [];
+ $specs{ONLY} = [ $specs{ONLY} ] if !ref $specs{ONLY};
+ $specs{ONLY_MAP} = @{ $specs{ONLY} } ? { map { ($_ => 1) } @{ $specs{ONLY} } } : { '__ALL__' => 1 };
$controller_paginate_spec{$class} = \%specs;
- my %hook_params = @{ $specs{ONLY} } ? ( only => $specs{ONLY} ) : ();
+ my %hook_params = @{ $specs{ONLY} } ? ( only => $specs{ONLY} ) : ();
$class->run_before('_save_current_paginate_params', %hook_params);
SL::Controller::Helper::GetModels::register_get_models_handlers(
per_page => ($params{per_page} * 1) || $spec->{PER_PAGE},
);
- my %paginate_args = ref($spec->{PAGINATE_ARGS}) eq 'CODE' ? %{ $spec->{PAGINATE_ARGS}->($self) }
- : $spec->{PAGINATE_ARGS} ? do { my $sub = $spec->{PAGINATE_ARGS}; %{ $self->$sub() } }
- : ();
+ # try to use Filtered if available and nothing else is configured, but don't
+ # blow up if the controller does not use Filtered
+ my %paginate_args = ref($spec->{PAGINATE_ARGS}) eq 'CODE' ? %{ $spec->{PAGINATE_ARGS}->($self) }
+ : $spec->{PAGINATE_ARGS} eq '__FILTER__'
+ && $self->can('get_current_filter_params') ? $self->get_current_filter_params
+ : $spec->{PAGINATE_ARGS} ne '__FILTER__' ? do { my $sub = $spec->{PAGINATE_ARGS}; %{ $self->$sub() } }
+ : ();
my $calculated_params = "SL::DB::Manager::$spec->{MODEL}"->paginate(%paginate_params, args => \%paginate_args);
- %paginate_params = (
- %paginate_params,
- num_pages => $calculated_params->{max},
- common_pages => $calculated_params->{common},
- );
- # $::lxdebug->dump(0, "get_current_paginate_params: ", \%paginate_params);
+ # $::lxdebug->dump(0, "get_current_paginate_params: ", $calculated_params);
- return %paginate_params;
+ return %{ $calculated_params };
}
sub disable_pagination {