Allow memory caching to work for both sql and file backends
authorMichael M Slusarz <slusarz@curecanti.org>
Tue, 18 May 2010 20:01:52 +0000 (14:01 -0600)
committerMichael M Slusarz <slusarz@curecanti.org>
Tue, 18 May 2010 20:01:52 +0000 (14:01 -0600)
framework/Core/lib/Horde/Core/Binder/Cache.php
horde/config/conf.xml

index ed6d1a8..a7e3850 100644 (file)
@@ -20,38 +20,38 @@ class Horde_Core_Binder_Cache implements Horde_Injector_Binder
         }
 
         $logger = $injector->getInstance('Horde_Log_Logger');
+        $params['logger'] = $logger;
+
+        $base_params = $params;
 
         if (strcasecmp($driver, 'Memcache') === 0) {
             $params['memcache'] = $injector->getInstance('Horde_Memcache');
-        } else {
-            if (strcasecmp($driver, 'Sql') === 0) {
-                $params['db'] = $injector->getInstance('Horde_Db_Adapter_Base');
+        } elseif (strcasecmp($driver, 'Sql') === 0) {
+            $params['db'] = $injector->getInstance('Horde_Db_Adapter_Base');
+        }
+
+        if (!empty($GLOBALS['conf']['cache']['use_memorycache']) &&
+            ((strcasecmp($driver, 'Sql') === 0) ||
+             (strcasecmp($driver, 'File') === 0))) {
+            if (strcasecmp($GLOBALS['conf']['cache']['use_memorycache'], 'Memcache') === 0) {
+                $base_params['memcache'] = $injector->getInstance('Horde_Memcache');
             }
 
-            if (!empty($params['use_memorycache'])) {
-                $params = array(
-                    'stack' => array(
-                        array(
-                            'driver' => 'Memcache',
-                            'params' => array_merge($params, array(
-                                'logger' => $logger,
-                                'memcache' => $injector->getInstance('Horde_Memcache')
-                            ))
-                        ),
-                        array(
-                            'driver' => $driver,
-                            'params' => array_merge($params, array(
-                                'logger' => $logger
-                             ))
-                         )
+            $params = array(
+                'stack' => array(
+                    array(
+                        'driver' => $GLOBALS['conf']['cache']['use_memorycache'],
+                        'params' => $base_params
+                    ),
+                    array(
+                        'driver' => $driver,
+                        'params' => $params
                     )
-                );
-                $driver = 'Stack';
-            }
+                )
+            );
+            $driver = 'Stack';
         }
 
-        $params['logger'] = $injector->getInstance('Horde_Log_Logger');
-
         return Horde_Cache::factory($driver, $params);
     }
 
@@ -59,4 +59,5 @@ class Horde_Core_Binder_Cache implements Horde_Injector_Binder
     {
         return false;
     }
+
 }
index 0a17a14..0bbe5b9 100644 (file)
    <configswitch name="driver" desc="If you want to enable the Horde Cache,
    select a driver here. This is used to speed up portions of Horde by storing
    commonly processed objects.">file
-    <case name="none" desc="Don't cache any objects"/>
-    <case name="apc" desc="Use the APC cache"/>
-    <case name="eaccelerator" desc="Use the eAccelerator cache (up to version
+    <case name="Null" desc="Don't cache any objects"/>
+    <case name="Apc" desc="Use the APC cache"/>
+    <case name="Eaccelerator" desc="Use the eAccelerator cache (up to version
     0.9.5)">
      <configdescription>
      eAccelerator must be built with --with-eaccelerator-shared-memory at
      lower.
      </configdescription>
     </case>
-    <case name="memcache" desc="Use a Memcache server"/>
-    <case name="xcache" desc="Use the xCache cache"/>
-    <case name="file" desc="Store objects in filesystem">
+    <case name="File" desc="Store objects in filesystem">
      <configsection name="params">
       <configstring name="dir" required="false" desc="The location to store the
       cached files"/>
       use for the cache files."/>
      </configsection>
     </case>
-    <case name="sql" desc="SQL-based cache storage">
+    <case name="Memcache" desc="Use a Memcache server"/>
+    <case name="Sql" desc="SQL-based cache storage">
      <configsection name="params">
       <configsql switchname="driverconfig">
        <configstring name="table" required="false" desc="The name of the
        cache table in the database [horde_cache]"/>
       </configsql>
-      <configswitch name="use_memorycache" required="false" desc="Use a
-      separate Horde_Cache memory cache driver to store data in memory? If
-      data is not found in memory, we will fall back to accessing the
-      SQL database. This is useful if you want the performance of an in-memory
-      cache with the more persistent storage an SQL server provides.">
-       <case name="" desc="None"/>
-       <case name="apc" desc="APC"/>
-       <case name="eaccelerator" desc="eAccelerator"/>
-       <case name="memcache" desc="Memcache"/>
-      </configswitch>
      </configsection>
     </case>
-    <case name="zps4" desc="Use the Zend Performance Suite output cache"/>
+    <case name="Xcache" desc="Use the xCache cache"/>
+    <case name="Zps4" desc="Use the Zend Performance Suite output cache"/>
+   </configswitch>
+   <configswitch name="use_memorycache" required="false" desc="Use a
+   separate memory cache driver to store data in memory? If data is not found
+   in this driver, we will fall back to accessing the persistent backend.">
+    <case name="" desc="None"/>
+    <case name="Apc" desc="APC"/>
+    <case name="Eaccelerator" desc="eAccelerator"/>
+    <case name="Memcache" desc="Memcache"/>
+    <case name="Xcache" desc="xCache"/>
+    <case name="Zps4" desc="Zend Performance Suite"/>
    </configswitch>
   </configsection>