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.
*/
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);
$others = array()
) {
self::initialize();
+
+ if (!self::isProviderEnabled($type))
+ return;
+
$session = CRM_Core_Session::singleton();
// make sure item is not already present in list
'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);
}
$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;
+ }
}
'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'
+ ),
+ ),
);
<td>{$form.max_attachments.html}<br />
<span class="description">{ts}Maximum number of files (documents, images, etc.) which can attached to emails or activities.{/ts}</span></td>
</tr>
- <tr class="crm-miscellaneous-form-block-maxFileSize">
- <td class="label">{$form.maxFileSize.label}</td>
+ <tr class="crm-miscellaneous-form-block-maxFileSize">
+ <td class="label">{$form.maxFileSize.label}</td>
<td>{$form.maxFileSize.html}<br />
<span class="description">{$maxFileSize_description}</span></td>
</tr>
<p class="description">{ts}If enabled, contacts with the permission to edit a related contact will inherit that contact's permission to edit other related contacts.{/ts}</p>
</td>
</tr>
+ <tr class="crm-miscellaneous-form-block-recentItemsMaxCount">
+ <td class="label">{$form.recentItemsMaxCount.label}</td>
+ <td>{$form.recentItemsMaxCount.html}<br />
+ <span class="description">{$recentItemsMaxCount_description}</span></td>
+ </tr>
+ <tr class="crm-miscellaneous-form-block-recentItemsProviders">
+ <td class="label">{$form.recentItemsProviders.label}</td>
+ <td>{$form.recentItemsProviders.html}<br />
+ <span class="description">{$recentItemsProviders_description}</span></td>
+ </tr>
</table>
<h3>{ts}reCAPTCHA Keys{/ts}</h3>