From 3d947d4ceaa4ca46442fa8e4796b57876aa7ca12 Mon Sep 17 00:00:00 2001
From: Chris Hall <chrish@catalyst.net.nz>
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<set_in_cache ($key, $value, $expiry)>
-
-B<get_from_cache ($key)>
-
-B<clear_from_cache ($key)>
-
-B<flush_all ()>
-
-=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, E<lt>chris@bigballofwax.co.nzE<gt>
-
-=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<set_in_cache ($key, $value, $expiry)>
+
+B<get_from_cache ($key)>
+
+B<clear_from_cache ($key)>
+
+B<flush_all ()>
+
+=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, E<lt>chris@bigballofwax.co.nzE<gt>
+
+=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