X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FHelper%2FPaginated.pm;h=0db285f1e0106ee04eaf8529a17e1fef3c25c7f9;hb=0ca85e095eb0729d30e2d370f0931983b60eeeab;hp=1683aada09013c28344a12ccd7b50e0df904dc73;hpb=d2799b104f9541f9ef47445f07c3bfadca7b5b7e;p=kivitendo-erp.git diff --git a/SL/Controller/Helper/Paginated.pm b/SL/Controller/Helper/Paginated.pm index 1683aada0..0db285f1e 100644 --- a/SL/Controller/Helper/Paginated.pm +++ b/SL/Controller/Helper/Paginated.pm @@ -12,19 +12,20 @@ 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( @@ -57,20 +58,18 @@ sub get_current_paginate_params { 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 = ( - page => min($paginate_params{page}, $calculated_params->{max}), - per_page => $paginate_params{per_page}, - 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 {