コード例 #1
0
 /**
  * Get all of the ACLs for a contact through ACL groups owned by Contact
  * groups.
  *
  * @param int $contact_id   -   ID of a contact to search for
  *
  * @return array            -   Array of assoc. arrays of ACL rules
  * @access public
  * @static
  */
 public static function &getGroupACLRoles($contact_id)
 {
     $contact_id = CRM_Utils_Type::escape($contact_id, 'Integer');
     $rule = new CRM_ACL_BAO_ACL();
     $acl = self::getTableName();
     $aclRole = 'civicrm_acl_role';
     $aclER = CRM_ACL_DAO_EntityRole::getTableName();
     $c2g = CRM_Contact_BAO_GroupContact::getTableName();
     $group = CRM_Contact_BAO_Group::getTableName();
     $query = "   SELECT          {$acl}.*\n                        FROM            {$acl}\n                        INNER JOIN      civicrm_option_group og\n                                ON      og.name = 'acl_role'\n                        INNER JOIN      civicrm_option_value ov\n                                ON      {$acl}.entity_table   = '{$aclRole}'\n                                AND     ov.option_group_id  = og.id\n                                AND     {$acl}.entity_id      = ov.value\n                                AND     ov.is_active        = 1\n                        INNER JOIN      {$aclER}\n                                ON      {$aclER}.acl_role_id = {$acl}.entity_id\n                                AND     {$aclER}.is_active    = 1\n                        INNER JOIN  {$c2g}\n                                ON      {$aclER}.entity_id      = {$c2g}.group_id\n                                AND     {$aclER}.entity_table   = 'civicrm_group'\n                        WHERE       {$acl}.entity_table       = '{$aclRole}'\n                            AND     {$acl}.is_active          = 1\n                            AND     {$c2g}.contact_id         = {$contact_id}\n                            AND     {$c2g}.status             = 'Added'";
     $results = array();
     $rule->query($query);
     while ($rule->fetch()) {
         $results[$rule->id] =& $rule->toArray();
     }
     // also get all acls for "Any Role" case
     // and authenticated User Role if present
     $roles = "0";
     $session = CRM_Core_Session::singleton();
     if ($session->get('ufID') > 0) {
         $roles .= ",2";
     }
     $query = "\nSELECT {$acl}.*\n  FROM {$acl}\n WHERE {$acl}.entity_id      IN ( {$roles} )\n   AND {$acl}.entity_table   = 'civicrm_acl_role'\n";
     $rule->query($query);
     while ($rule->fetch()) {
         $results[$rule->id] =& $rule->toArray();
     }
     return $results;
 }