From: Dobrica Pavlinusic Date: Sat, 15 May 2010 15:12:59 +0000 (+0200) Subject: store filters on server X-Git-Url: http://git.rot13.org/?a=commitdiff_plain;h=ae6feddd161a9bf80edcad62e12899c3d8f06514;p=MojoFacets.git store filters on server This allows us to have huge faceted filters. We stored filters in cookie and that works until whole session (including all filtered values) is smaller than 4K which is limit of cookie size (session in stored in cookie) --- diff --git a/lib/MojoFacets/Data.pm b/lib/MojoFacets/Data.pm index d40676a..4ed5237 100644 --- a/lib/MojoFacets/Data.pm +++ b/lib/MojoFacets/Data.pm @@ -238,15 +238,16 @@ sub filter { warn "# filter $name vals ",dump(@vals); - my $filters = $self->session('filters'); + my $path = $self->session('path'); + my $filters = $loaded->{$path}->{filters}; if ( @vals ) { $filters->{$name} = [ @vals ]; } else { delete $filters->{$name}; } - $self->session( 'filters' => $filters ); + $loaded->{$path}->{filters} = $filters; - warn "# filters ",dump($self->session('filters')); + warn "# filters ",dump($filters); $self->session( 'offset' => 0 ); @@ -283,7 +284,8 @@ sub _filter_item { sub _data_items { my $self = shift; - my $all_filters = $self->session('filters'); + my $path = $self->session('path') || $self->redirect_to( '/data/index' ); + my $all_filters = $loaded->{$path}->{filters}; warn "# all_filters ",dump($all_filters); my $filters; $filters->{ $_ } = $all_filters->{ $_ } @@ -362,10 +364,10 @@ sub _is_numeric { sub facet { my $self = shift; + my $path = $self->session('path') || $self->redirect_to( '/data/index' ); + if ( my $remove = $self->param('remove') ) { - my $f = $self->session('filters'); - delete $f->{$remove}; - $self->session( 'filters' => $f ); + delete $loaded->{$path}->{filters}->{$remove}; $self->redirect_to( '/data/items' ); } @@ -385,7 +387,7 @@ sub facet { # warn "# facet $name ",dump $facet; my $checked; - if ( my $f = $self->session('filters') ) { + if ( my $f = $loaded->{$path}->{filters} ) { if ( defined $f->{$name} ) { $checked = $self->_checked( @{ $f->{$name} } ); }