From 9909834979269b136c4a65be9af9dfdc158ccfee Mon Sep 17 00:00:00 2001 From: Tim Otten Date: Sun, 8 Jul 2018 17:54:07 -0700 Subject: [PATCH] (dev/core#217) PrevNext - Probe for best available implementation (memory-backed or SQL-backed) Before ------ The `prevnext` service is always an instance of `CRM_Core_PrevNextCache_Sql`. After ----- If you define `CIVICRM_DB_CACHE_CLASS`, and if there's a corresponding service `prevnext.driver.{mydriver}`, then it will use that service. Otherwise, it will use `prevnext.driver.sql` (`CRM_Core_PrevNextCache_Sql`). --- Civi/Core/Container.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Civi/Core/Container.php b/Civi/Core/Container.php index 30107af67b..6eb4a4d66a 100644 --- a/Civi/Core/Container.php +++ b/Civi/Core/Container.php @@ -215,6 +215,11 @@ class Container { } $container->setDefinition('prevnext', new Definition( + 'CRM_Core_PrevNextCache_Interface', + [new Reference('service_container')] + ))->setFactory(array(new Reference(self::SELF), 'createPrevNextCache')); + + $container->setDefinition('prevnext.driver.sql', new Definition( 'CRM_Core_PrevNextCache_Sql', [] )); @@ -404,6 +409,18 @@ class Container { return $kernel; } + /** + * @param ContainerInterface $container + * @return \CRM_Core_PrevNextCache_Interface + */ + public static function createPrevNextCache($container) { + $cacheDriver = \CRM_Utils_Cache::getCacheDriver(); + $service = 'prevnext.driver.' . strtolower($cacheDriver); + return $container->has($service) + ? $container->get($service) + : $container->get('prevnext.driver.sql'); + } + /** * Get a list of boot services. * -- 2.25.1