/** * Get all of the ACLs through ACL groups * * @param int $contact_id - ID of a contact to search for * @param int $group_id - ID of a group to search for * @return array - Array of assoc. arrays of ACL rules * @access public * @static */ function &getACLGroups($contact_id = null, $group_id = null) { $contact_id = CRM_Utils_Type::escape($contact_id, 'Integer'); $group_id = CRM_Utils_Type::escape($group_id, 'Integer'); $rule =& new CRM_Core_BAO_ACL(); $acl = CRM_Core_BAO_ACL::getTableName(); $aclGroup = CRM_Core_BAO_ACLGroup::getTableName(); $contact = CRM_Contact_BAO_Contact::getTableName(); $domain = CRM_Core_DAO_Domain::getTableName(); $c2g = CRM_Contact_BAO_GroupContact::getTableName(); $group = CRM_Contact_BAO_Group::getTableName(); $session =& CRM_Core_Session::singleton(); $domainId = $session->get('domainID'); $query = " SELECT {$acl}.* \n FROM {$acl}\n INNER JOIN {$aclGroup}\n ON {$acl}.entity_table = '{$aclGroup}'\n AND {$acl}.entity_id = {$aclGroup}.id"; if (!empty($group_id)) { $query .= " INNER JOIN {$c2g}\n ON {$aclGroup}.entity_id = {$c2g}.group_id\n WHERE {$aclGroup}.entity_table = '{$group}'\n AND {$aclGroup}.is_active = 1\n AND {$c2g}.group_id = {$group_id}"; if (!empty($contact_id)) { $query .= " AND {$c2g}.contact_id = {$contact_id}\n AND {$c2g}.status = 'Added'"; } } else { if (!empty($contact_id)) { $query .= " WHERE {$aclGroup}.entity_table = '{$contact}'\n AND {$aclGroup}.is_active = 1\n AND {$aclGroup}.entity_id = {$contact_id}"; } else { $query .= " WHERE {$aclGroup}.entity_table = '{$domain}'\n AND {$aclGroup}.is_active = 1\n AND {$aclGroup}.entity_id = {$domain_id}"; } } $results = array(); $rule->query($query); while ($rule->fetch()) { $results[] =& $rule->toArray(); } return $results; }