From: Niels Heinemann Date: Tue, 12 Jan 2016 15:22:39 +0000 (+0100) Subject: Add configuration options to adjust the behavior of recent items stack: 1.) Define... X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=ac5f7c7fdcb6b146a0546ea9fcfd9714e8eb1396;p=civicrm-core.git Add configuration options to adjust the behavior of recent items stack: 1.) Define stack size, 2.) Decide which components may store items in stack --- diff --git a/CRM/Admin/Form/Setting/Miscellaneous.php b/CRM/Admin/Form/Setting/Miscellaneous.php index 897ccef971..9f8b189d84 100644 --- a/CRM/Admin/Form/Setting/Miscellaneous.php +++ b/CRM/Admin/Form/Setting/Miscellaneous.php @@ -50,6 +50,8 @@ class CRM_Admin_Form_Setting_Miscellaneous extends CRM_Admin_Form_Setting { 'recaptchaPublicKey' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'recaptchaPrivateKey' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'wkhtmltopdfPath' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, + 'recentItemsMaxCount' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, + 'recentItemsProviders' => CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, ); public $_uploadMaxSize; diff --git a/CRM/Utils/Recent.php b/CRM/Utils/Recent.php index 25de25889d..0206a2fa0a 100644 --- a/CRM/Utils/Recent.php +++ b/CRM/Utils/Recent.php @@ -36,11 +36,11 @@ class CRM_Utils_Recent { /** - * Max number of items in queue. + * Store name * - * @var int + * @var string */ - const MAX_ITEMS = 10, STORE_NAME = 'CRM_Utils_Recent'; + const STORE_NAME = 'CRM_Utils_Recent'; /** * The list of recently viewed items. @@ -49,10 +49,20 @@ class CRM_Utils_Recent { */ static private $_recent = NULL; + /** + * Maximum stack size + * @var int + */ + static private $_maxItems = 20; + /** * Initialize this class and set the static variables. */ public static function initialize() { + $maxItemsSetting = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'recentItemsMaxCount'); + if (isset($maxItemsSetting) && $maxItemsSetting > 0 && $maxItemsSetting < 100) + self::$_maxItems = $maxItemsSetting; + if (!self::$_recent) { $session = CRM_Core_Session::singleton(); self::$_recent = $session->get(self::STORE_NAME); @@ -97,6 +107,10 @@ class CRM_Utils_Recent { $others = array() ) { self::initialize(); + + if (!self::isProviderEnabled($type)) + return; + $session = CRM_Core_Session::singleton(); // make sure item is not already present in list @@ -127,7 +141,8 @@ class CRM_Utils_Recent { 'delete_url' => CRM_Utils_Array::value('deleteUrl', $others), ) ); - if (count(self::$_recent) > self::MAX_ITEMS) { + error_log("FOOOO: " . self::$_maxItems); + if (count(self::$_recent) > self::$_maxItems) { array_pop(self::$_recent); } @@ -188,4 +203,70 @@ class CRM_Utils_Recent { $session->set(self::STORE_NAME, self::$_recent); } + /** + * Check if a provider is allowed to add stuff. + * If correspondig setting is empty, all are allowed + * + * @param string $providerName + */ + public static function isProviderEnabled($providerName) { + + // Join contact types to providerName 'Contact' + $contactTypes = CRM_Contact_BAO_ContactType::contactTypes(TRUE); + if (in_array($providerName, $contactTypes)) + $providerName = 'Contact'; + + $allowed = true; + + // Use core setting recentItemsProviders if configured + $providersPermitted = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'recentItemsProviders'); + if ($providersPermitted) + $allowed = in_array($providerName, $providersPermitted); + + // Else allow + return $allowed; + } + + /** + * Gets the list of available providers to civi's recent items stack + */ + public static function getProviders() { + $providers = array( + 'Contact' => ts('Contacts'), + 'Relationship' => ts('Relationships'), + 'Activity' => ts('Activities'), + 'Note' => ts('Notes'), + 'Group' => ts('Groups'), + 'Case' => ts('Cases'), + 'Contribution' => ts('Contributions'), + 'Participant' => ts('Participants'), + 'Grant' => ts('Grants'), + 'Membership' => ts('Memberships'), + 'Pledge' => ts('Pledges'), + 'Event' => ts('Events'), + 'Campaign' => ts('Campaigns'), + ); + + /** We may strip off disabled components **/ +// $enabledComponents = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, 'enable_components', NULL, array()); +// if (!$enabledComponents) +// return $providers; +// +// foreach ($enabledComponents as $component) { +// switch ($component) { +// case 'CiviEvent': => ts('CiviEvent'), +// 'Participants' => ts('Participants'), +// 'CiviContribute' => ts('CiviContribute'), +// 'CiviMember' => ts('CiviMember'), +// 'CiviMail' => ts('CiviMail'), +// 'CiviReport' => ts('CiviReport'), +// 'CiviPledge' => ts('CiviPledge'), +// 'CiviCase' => ts('CiviCase'), +// 'CiviCampaign' => ts('CiviCampaign'), +// 'CiviGrant' => ts('CiviGrant') +// } +// } + + return $providers; + } } diff --git a/settings/Core.setting.php b/settings/Core.setting.php index ce2c88fa9b..77bc4975e2 100644 --- a/settings/Core.setting.php +++ b/settings/Core.setting.php @@ -823,4 +823,45 @@ return array( 'description' => NULL, 'help_text' => NULL, ), + 'recentItemsMaxCount' => array( + 'group_name' => 'CiviCRM Preferences', + 'group' => 'core', + 'name' => 'recentItemsMaxCount', + 'type' => 'Integer', + 'quick_form_type' => 'Element', + 'html_type' => 'text', + 'html_attributes' => array( + 'size' => 2, + 'maxlength' => 3 + ), + 'default' => 20, + 'add' => '4.7', + 'title' => 'Size of "Recent Items" stack', + 'is_domain' => 1, + 'is_contact' => 0, + 'description' => 'How many items should CiviCRM store in it\'s "Recently viewed" list.', + 'help_text' => NULL, + ), + 'recentItemsProviders' => array( + 'group_name' => 'CiviCRM Preferences', + 'group' => 'core', + 'name' => 'recentItemsProviders', + 'type' => 'Array', + 'html_type' => 'Select', + 'quick_form_type' => 'Select', + 'html_attributes' => array( + 'multiple' => 1, + 'class' => 'crm-select2', + ), + 'default' => '', + 'add' => '4.7', + 'title' => 'Recent Items Providers', + 'is_domain' => 1, + 'is_contact' => 0, + 'description' => 'What providers may save views in CiviCRM\'s "Recently viewed" list. If empty, all are in.', + 'help_text' => NULL, + 'pseudoconstant' => array( + 'callback' => 'CRM_Utils_Recent::getProviders' + ), + ), ); diff --git a/templates/CRM/Admin/Form/Setting/Miscellaneous.tpl b/templates/CRM/Admin/Form/Setting/Miscellaneous.tpl index e42d69b130..04db77c290 100644 --- a/templates/CRM/Admin/Form/Setting/Miscellaneous.tpl +++ b/templates/CRM/Admin/Form/Setting/Miscellaneous.tpl @@ -82,8 +82,8 @@ {$form.max_attachments.html}
{ts}Maximum number of files (documents, images, etc.) which can attached to emails or activities.{/ts} - - {$form.maxFileSize.label} + + {$form.maxFileSize.label} {$form.maxFileSize.html}
{$maxFileSize_description} @@ -93,6 +93,16 @@

{ts}If enabled, contacts with the permission to edit a related contact will inherit that contact's permission to edit other related contacts.{/ts}

+ + {$form.recentItemsMaxCount.label} + {$form.recentItemsMaxCount.html}
+ {$recentItemsMaxCount_description} + + + {$form.recentItemsProviders.label} + {$form.recentItemsProviders.html}
+ {$recentItemsProviders_description} +

{ts}reCAPTCHA Keys{/ts}