From 3d947d4ceaa4ca46442fa8e4796b57876aa7ca12 Mon Sep 17 00:00:00 2001 From: Chris Hall Date: Mon, 21 Nov 2011 11:38:23 +1300 Subject: [PATCH] Bug 7248 Added caching support and syspref and moved Caching into Koha namespace --- C4/Cache.pm | 83 -------------------- C4/Cache/Memcached.pm | 76 ------------------ C4/Cache/Memoize/Memcached.pm | 57 ------------- Koha/Cache.pm | 82 +++++++++++++++++++ Koha/Cache/Memcached.pm | 75 ++++++++++++++++++ installer/data/mysql/updatedatabase.pl | 8 ++ .../prog/en/modules/admin/preferences/admin.pref | 10 ++- t/Cache.t | 2 +- t/Cache_Memcached.t | 2 +- t/Cache_Memoize_Memcached.t | 14 ---- 10 files changed, 176 insertions(+), 233 deletions(-) delete mode 100644 C4/Cache.pm delete mode 100644 C4/Cache/Memcached.pm delete mode 100644 C4/Cache/Memoize/Memcached.pm create mode 100644 Koha/Cache.pm create mode 100644 Koha/Cache/Memcached.pm delete mode 100755 t/Cache_Memoize_Memcached.t diff --git a/C4/Cache.pm b/C4/Cache.pm deleted file mode 100644 index 151a3fa..0000000 --- a/C4/Cache.pm +++ /dev/null @@ -1,83 +0,0 @@ -package C4::Cache; - -# Copyright 2009 Chris Cormack and The Koha Dev Team -# -# This file is part of Koha. -# -# Koha is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any later -# version. -# -# Koha is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with Koha; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -=head1 NAME - -C4::Cache - Handling caching of html and Objects for Koha - -=head1 SYNOPSIS - - use C4::Cache (cache_type => $cache_type, %params ); - -=head1 DESCRIPTION - -Base class for C4::Cache::X. Subclasses need to provide the following methods - -B<_cache_handle ($params_hr)> - cache handle creator - -B - -B - -B - -B - -=head1 FUNCTIONS - -=cut - -use strict; -use warnings; -use Carp; - -use base qw(Class::Accessor); - -use C4::Cache::Memcached; - -__PACKAGE__->mk_ro_accessors( qw( cache ) ); - -sub new { - my $class = shift; - my %param = @_; - - my $cache_type = $param{cache_type} || 'memcached'; - my $subclass = __PACKAGE__."::".ucfirst($cache_type); - my $cache = $subclass->_cache_handle(\%param) - or croak "Cannot create cache handle for '$cache_type'"; - return bless $class->SUPER::new({cache => $cache}), $subclass; -} - -=head2 EXPORT - -None by default. - -=head1 SEE ALSO - -C4::Cache::Memcached - -=head1 AUTHOR - -Chris Cormack, Echris@bigballofwax.co.nzE - -=cut - -1; - -__END__ diff --git a/C4/Cache/Memcached.pm b/C4/Cache/Memcached.pm deleted file mode 100644 index 1233d41..0000000 --- a/C4/Cache/Memcached.pm +++ /dev/null @@ -1,76 +0,0 @@ -package C4::Cache::Memcached; - -# Copyright 2009 Chris Cormack and The Koha Dev Team -# -# This file is part of Koha. -# -# Koha is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any later -# version. -# -# Koha is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with Koha; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -use strict; -use warnings; -use Carp; - -use Cache::Memcached; - -use base qw(C4::Cache); - -sub _cache_handle { - my $class = shift; - my $params = shift; - - my @servers = split /,/, $params->{'cache_servers'}; - - return Cache::Memcached->new( - servers => \@servers, - namespace => $params->{'namespace'} || 'KOHA', - ); -} - -sub set_in_cache { - my ( $self, $key, $value, $expiry ) = @_; - croak "No key" unless $key; - - if ( defined $expiry ) { - return $self->cache->set( $key, $value, $expiry ); - } - else { - return $self->cache->set( $key, $value ); - } -} - -sub get_from_cache { - my ( $self, $key ) = @_; - croak "No key" unless $key; - return $self->cache->get($key); -} - -sub clear_from_cache { - my ( $self, $key ) = @_; - croak "No key" unless $key; - return $self->cache->delete($key); -} - -sub flush_all { - my $self = shift; - return $self->cache->flush_all; -} - -1; -__END__ - -=head1 NAME - -C4::Cache::Memcached - memcached subclass of C4::Cache - -=cut diff --git a/C4/Cache/Memoize/Memcached.pm b/C4/Cache/Memoize/Memcached.pm deleted file mode 100644 index c65e8a6..0000000 --- a/C4/Cache/Memoize/Memcached.pm +++ /dev/null @@ -1,57 +0,0 @@ -package Koha::Cache::Memoize::Memcached; - -# Copyright 2009 Chris Cormack and The Koha Dev Team -# -# This file is part of Koha. -# -# Koha is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any later -# version. -# -# Koha is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with Koha; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -use strict; -use warnings; -use Carp; - -use Memoize::Memcached; - -use base qw(C4::Cache); - -sub _cache_handle { - my $class = shift; - my $params = shift; - - my @servers = split /,/, $params->{'cache_servers'}; - - my $memcached = { - servers => \@servers, - key_prefix => $params->{'namespace'} || 'koha', - }; - my $cache = {}; - $cache->{memcache}=$memcached; - return $cache; -} - -sub memcached_memoize { - my $self = shift; - my $function = shift; - my $ttl = shift; - memoize_memcached($function, memcached => $self->{memcached}, expire_time => $ttl); -} - -1; -__END__ - -=head1 NAME - -C4::Cache::Memoize::Memcached - subclass of C4::Cache - -=cut diff --git a/Koha/Cache.pm b/Koha/Cache.pm new file mode 100644 index 0000000..91e622a --- /dev/null +++ b/Koha/Cache.pm @@ -0,0 +1,82 @@ +package Koha::Cache; + +# Copyright 2009 Chris Cormack and The Koha Dev Team +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# +# Koha is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with Koha; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +=head1 NAME + +Koha::Cache - Handling caching of html and Objects for Koha + +=head1 SYNOPSIS + + use Koha::Cache (cache_type => $cache_type, %params ); + +=head1 DESCRIPTION + +Base class for Koha::Cache::X. Subclasses need to provide the following methods + +B<_cache_handle ($params_hr)> - cache handle creator + +B + +B + +B + +B + +=head1 FUNCTIONS + +=cut + +use strict; +use warnings; +use Carp; + +use base qw(Class::Accessor); + +use Koha::Cache::Memcached; + +__PACKAGE__->mk_ro_accessors( qw( cache ) ); + +sub new { + my $class = shift; + my $param = shift; + my $cache_type = $param->{cache_type} || 'memcached'; + my $subclass = __PACKAGE__."::".ucfirst($cache_type); + my $cache = $subclass->_cache_handle($param) + or croak "Cannot create cache handle for '$cache_type'"; + return bless $class->SUPER::new({cache => $cache}), $subclass; +} + +=head2 EXPORT + +None by default. + +=head1 SEE ALSO + +Koha::Cache::Memcached + +=head1 AUTHOR + +Chris Cormack, Echris@bigballofwax.co.nzE + +=cut + +1; + +__END__ diff --git a/Koha/Cache/Memcached.pm b/Koha/Cache/Memcached.pm new file mode 100644 index 0000000..c77737e --- /dev/null +++ b/Koha/Cache/Memcached.pm @@ -0,0 +1,75 @@ +package Koha::Cache::Memcached; + +# Copyright 2009 Chris Cormack and The Koha Dev Team +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# +# Koha is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with Koha; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +use strict; +use warnings; +use Carp; + +use Cache::Memcached; + +use base qw(Koha::Cache); + +sub _cache_handle { + my $class = shift; + my $params = shift; + my @servers = split /,/, $params->{'cache_servers'}; + return Cache::Memcached->new( + servers => \@servers, + namespace => $params->{'namespace'} || 'KOHA', + ); +} + +sub set_in_cache { + my ( $self, $key, $value, $expiry ) = @_; + croak "No key" unless $key; + $self->cache->set_debug; + + if ( defined $expiry ) { + return $self->cache->set( $key, $value, $expiry ); + } + else { + return $self->cache->set( $key, $value ); + } +} + +sub get_from_cache { + my ( $self, $key ) = @_; + croak "No key" unless $key; + return $self->cache->get($key); +} + +sub clear_from_cache { + my ( $self, $key ) = @_; + croak "No key" unless $key; + return $self->cache->delete($key); +} + +sub flush_all { + my $self = shift; + return $self->cache->flush_all; +} + +1; +__END__ + +=head1 NAME + +Koha::Cache::Memcached - memcached subclass of Koha::Cache + +=cut diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 0982282..205d8d4 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -4654,6 +4654,14 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { print "Upgrade done (Added support for local cover images)\n"; SetVersion($DBversion); } + +$DBversion = "3.06.00.xxx"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('usecache',0,'If on pages with caching enabled will use caching',NULL,'YesNo')"); + print "Upgradet to $DBversion done (Added syspref usecache, When this preference is turned on pages with with caching support will use caching) \n"; + SetVersion ($DBversion); +} + =head1 FUNCTIONS =head2 DropAllForeignKeys($table) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/admin.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/admin.pref index f026c7e..e44af8d 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/admin.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/admin.pref @@ -94,4 +94,12 @@ Administration: - of CAS when logging out of Koha. - - The CAS Authentication Server can be found at - - pref: casServerUrl + - pref: casServerUrl + Caching options: + - + - pref: usecache + default: 0 + choices: + yes: Use + no: "Don't use" + - memcached caching diff --git a/t/Cache.t b/t/Cache.t index 75f5acf..dca575b 100644 --- a/t/Cache.t +++ b/t/Cache.t @@ -9,6 +9,6 @@ use warnings; use Test::More tests => 1; BEGIN { - use_ok('C4::Cache'); + use_ok('Koha::Cache'); } diff --git a/t/Cache_Memcached.t b/t/Cache_Memcached.t index 80dfc7f..a9366cc 100755 --- a/t/Cache_Memcached.t +++ b/t/Cache_Memcached.t @@ -9,6 +9,6 @@ use warnings; use Test::More tests => 1; BEGIN { - use_ok('C4::Cache::Memcached'); + use_ok('Koha::Cache::Memcached'); } diff --git a/t/Cache_Memoize_Memcached.t b/t/Cache_Memoize_Memcached.t deleted file mode 100755 index 13e26e5..0000000 --- a/t/Cache_Memoize_Memcached.t +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/perl -# -# This Koha test module is a stub! -# Add more tests here!!! - -use strict; -use warnings; - -use Test::More tests => 1; - -BEGIN { - use_ok('C4::Cache::Memoize::Memcached'); -} - -- 1.7.4.1