+ $userId = CRM_Core_Session::getLoggedInContactID();
+ $domainId = CRM_Core_Config::domainID();
+ if (!isset(Civi::$statics[__CLASS__]['viewPermissionedGroups_' . $domainId . '_' . $userId])) {
+ Civi::$statics[__CLASS__]['viewPermissionedGroups_' . $domainId . '_' . $userId] = Civi::$statics[__CLASS__]['editPermissionedGroups_' . $domainId . '_' . $userId] = [];
+ }
+
+ $groupKey = $groupType ? $groupType : 'all';
+
+ if (!isset(Civi::$statics[__CLASS__]['viewPermissionedGroups_' . $domainId . '_' . $userId][$groupKey])) {
+ Civi::$statics[__CLASS__]['viewPermissionedGroups_' . $domainId . '_' . $userId][$groupKey] = Civi::$statics[__CLASS__]['editPermissionedGroups_' . $domainId . '_' . $userId][$groupKey] = [];
+
+ $groups = CRM_Core_PseudoConstant::allGroup($groupType, $excludeHidden);
+
+ if ($this->check('edit all contacts')) {
+ // this is the most powerful permission, so we return
+ // immediately rather than dilute it further
+ $this->_editAdminUser = $this->_viewAdminUser = TRUE;
+ $this->_editPermission = $this->_viewPermission = TRUE;
+ Civi::$statics[__CLASS__]['editPermissionedGroups_' . $domainId . '_' . $userId][$groupKey] = $groups;
+ Civi::$statics[__CLASS__]['viewPermissionedGroups_' . $domainId . '_' . $userId][$groupKey] = $groups;
+ return Civi::$statics[__CLASS__]['viewPermissionedGroups_' . $domainId . '_' . $userId][$groupKey];
+ }
+ elseif ($this->check('view all contacts')) {
+ $this->_viewAdminUser = TRUE;
+ $this->_viewPermission = TRUE;
+ Civi::$statics[__CLASS__]['viewPermissionedGroups_' . $domainId . '_' . $userId][$groupKey] = $groups;
+ }
+
+ $ids = CRM_ACL_API::group(CRM_Core_Permission::VIEW, NULL, 'civicrm_saved_search', $groups);
+ if (!empty($ids)) {
+ foreach (array_values($ids) as $id) {
+ $title = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Group', $id, 'title');
+ Civi::$statics[__CLASS__]['viewPermissionedGroups_' . $domainId . '_' . $userId][$groupKey][$id] = $title;
+ $this->_viewPermission = TRUE;
+ }
+ }
+
+ $ids = CRM_ACL_API::group(CRM_Core_Permission::EDIT, NULL, 'civicrm_saved_search', $groups);
+ if (!empty($ids)) {
+ foreach (array_values($ids) as $id) {
+ $title = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Group', $id, 'title');
+ Civi::$statics[__CLASS__]['editPermissionedGroups_' . $domainId . '_' . $userId][$groupKey][$id] = $title;
+ Civi::$statics[__CLASS__]['viewPermissionedGroups_' . $domainId . '_' . $userId][$groupKey][$id] = $title;
+ $this->_editPermission = TRUE;
+ $this->_viewPermission = TRUE;
+ }
+ }
+ }
+
+ return Civi::$statics[__CLASS__]['viewPermissionedGroups_' . $domainId . '_' . $userId][$groupKey];