From e28bf654ec76cfc205e0ef5a7a5093959893361c Mon Sep 17 00:00:00 2001 From: Tim Otten <totten@civicrm.org> Date: Tue, 14 Aug 2018 16:08:16 -0700 Subject: [PATCH] (dev/core#217) PrevNext - Add settings for admin to choose backend The auto-detection is a good default policy. However, this is new functionality. If some bug gets through the review/RC cycles, then this option provides an escape path. --- CRM/Admin/Form/Setting/Miscellaneous.php | 2 ++ CRM/Core/BAO/PrevNextCache.php | 14 ++++++++++++++ Civi/Core/Container.php | 16 +++++++++++----- settings/Search.setting.php | 21 +++++++++++++++++++++ 4 files changed, 48 insertions(+), 5 deletions(-) diff --git a/CRM/Admin/Form/Setting/Miscellaneous.php b/CRM/Admin/Form/Setting/Miscellaneous.php index 31ef53a873..f741af3802 100644 --- a/CRM/Admin/Form/Setting/Miscellaneous.php +++ b/CRM/Admin/Form/Setting/Miscellaneous.php @@ -56,6 +56,7 @@ class CRM_Admin_Form_Setting_Miscellaneous extends CRM_Admin_Form_Setting { 'dedupe_default_limit' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'remote_profile_submissions' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'allow_alert_autodismissal' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, + 'prevNextBackend' => CRM_Core_BAO_Setting::SEARCH_PREFERENCES_NAME, ); public $_uploadMaxSize; @@ -77,6 +78,7 @@ class CRM_Admin_Form_Setting_Miscellaneous extends CRM_Admin_Form_Setting { 'recentItemsMaxCount', 'recentItemsProviders', 'dedupe_default_limit', + 'prevNextBackend', )); } diff --git a/CRM/Core/BAO/PrevNextCache.php b/CRM/Core/BAO/PrevNextCache.php index c3078140ac..8a902d01c9 100644 --- a/CRM/Core/BAO/PrevNextCache.php +++ b/CRM/Core/BAO/PrevNextCache.php @@ -483,4 +483,18 @@ AND c.created_date < date_sub( NOW( ), INTERVAL %2 day ) } } + /** + * Get a list of available backend services. + * + * @return array + * Array(string $id => string $label). + */ + public static function getPrevNextBackends() { + return [ + 'default' => ts('Default (Auto-detect)'), + 'sql' => ts('SQL'), + 'redis' => ts('Redis'), + ]; + } + } diff --git a/Civi/Core/Container.php b/Civi/Core/Container.php index 059be408b6..d75a9a13dd 100644 --- a/Civi/Core/Container.php +++ b/Civi/Core/Container.php @@ -441,11 +441,17 @@ class 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'); + $setting = \Civi::settings()->get('prevNextBackend'); + if ($setting === 'default') { + $cacheDriver = \CRM_Utils_Cache::getCacheDriver(); + $service = 'prevnext.driver.' . strtolower($cacheDriver); + return $container->has($service) + ? $container->get($service) + : $container->get('prevnext.driver.sql'); + } + else { + return $container->get('prevnext.driver.' . $setting); + } } public static function createCacheConfig() { diff --git a/settings/Search.setting.php b/settings/Search.setting.php index ab784705b9..6ab72238ca 100644 --- a/settings/Search.setting.php +++ b/settings/Search.setting.php @@ -197,6 +197,27 @@ return array( 'description' => 'If set, this will be the default profile used for contact search.', 'help_text' => NULL, ), + 'prevNextBackend' => array( + 'group_name' => 'Search Preferences', + 'group' => 'Search Preferences', + 'name' => 'prevNextBackend', + 'type' => 'String', + 'quick_form_type' => 'Select', + 'html_type' => 'Select', + 'html_attributes' => array( + //'class' => 'crm-select2', + ), + 'default' => 'default', + 'add' => '5.6', + 'title' => 'PrevNext Cache', + 'is_domain' => 1, + 'is_contact' => 0, + 'pseudoconstant' => array( + 'callback' => 'CRM_Core_BAO_PrevNextCache::getPrevNextBackends', + ), + 'description' => 'When performing a search, how should the search-results be cached?', + 'help_text' => '', + ), 'searchPrimaryDetailsOnly' => array( 'group_name' => 'Search Preferences', 'group' => 'Search Preferences', -- 2.25.1