/**
* get_source_permissions
*
* returns ALL PERMISSIONS array FOR given type (ACL/ADMIN/..) and for currently selected
* users/groups/roles (in selectboxes)
* Executes SQL QUERY function.
*
* usage (use always pointer to array, because return result is huuge):
*	$source_permissions = &get_source_permissions(array("perm_type" => 'ACL'));
*/
function get_source_permissions()
{
    global $site;
    global $selected_parents;
    $args = func_get_arg(0);
    $perm_type = $args['perm_type'];
    if ($perm_type) {
        # if sane parameters
        ########### 1. get ALL PERMISSIONS (Bug #2640)
        $level = 1;
        $source_permissions = array();
        ########### 1.1 for given ROLE
        if ($site->fdat['role_id']) {
            ###### get all permissions for given role
            $permissions = get_all_permissions(array("type" => $perm_type, "role_id" => $site->fdat['role_id'], "with_inheriting" => 0));
            ###### RE-STRUCTURE data to "source_permissions[$source_id]['user'][$user_id]"
            foreach ($permissions as $perm) {
                if ($perm['user_id']) {
                    $source_permissions[$perm['source_id']]['user'][$perm['user_id']] = $perm;
                } elseif ($perm['group_id']) {
                    $source_permissions[$perm['source_id']]['group'][$perm['group_id']] = $perm;
                } elseif ($perm['role_id']) {
                    $source_permissions[$perm['source_id']]['role'][$perm['role_id']] = $perm;
                }
            }
        }
        # if role is set
        ########### 1.2 for given GROUPS
        foreach ($selected_parents as $group) {
            ###### get all permissions for given group
            $permissions = get_all_permissions(array("type" => $perm_type, "group_id" => $group, "with_inheriting" => 0));
            #printr($permissions);
            #		echo "<hr>";
            ###### RE-STRUCTURE data to "source_permissions[$source_id]['user'][$user_id]"
            foreach ($permissions as $perm) {
                if ($perm['user_id']) {
                    $source_permissions[$perm['source_id']]['user'][$perm['user_id']] = $perm;
                } elseif ($perm['group_id']) {
                    $source_permissions[$perm['source_id']]['group'][$perm['group_id']] = $perm;
                } elseif ($perm['role_id']) {
                    $source_permissions[$perm['source_id']]['role'][$perm['role_id']] = $perm;
                }
            }
            #		print("<br>".$perm_type."(".$perm['source_id'].") r:".$site->fdat['role_id']." g:".(!$site->fdat['role_id']?$group:'')." u:".(!$site->fdat['role_id'] && $group==$site->fdat['group_id']?$site->fdat['user_id']:'')." (count=".sizeof($permissions).")<br>");
            $level++;
        }
        ########### 1.3 for given USER
        if ($site->fdat['user_id']) {
            ###### get all permissions for given user
            $permissions = get_all_permissions(array("type" => $perm_type, "user_id" => $site->fdat['user_id'], "with_inheriting" => 0));
            ###### RE-STRUCTURE data to "source_permissions[$source_id]['user'][$user_id]"
            foreach ($permissions as $perm) {
                if ($perm['user_id']) {
                    $source_permissions[$perm['source_id']]['user'][$perm['user_id']] = $perm;
                } elseif ($perm['group_id']) {
                    $source_permissions[$perm['source_id']]['group'][$perm['group_id']] = $perm;
                } elseif ($perm['role_id']) {
                    $source_permissions[$perm['source_id']]['role'][$perm['role_id']] = $perm;
                }
            }
        }
        # if user is set
    }
    # if perm_type provided
    return $source_permissions;
}
 /**
 * load_aclpermissions 
 * 
 * returns all acl (group) permissions for user;
 * returns 0 if failed;
 * function is not called by default in site class but
 * in edit-group-window and edit-user-window, 
 * also in all templates where any group or user info is used/printed/etc
 * 
 * 
 * @package CMS
 * 
 * @param -
 */
 function load_aclpermissions()
 {
     $args = $this->args;
     $perm = array();
     $user_id = $this->user_id;
     $timer = new Timer();
     # alustame m??????tmine
     if ($user_id) {
         # 1. if SUPERUSER dont waste time for loading permissions, ALL is allowed by default
         # if superuser then return almighty 11111 array
         if ($this->is_superuser) {
             $cemented_perm = array(id => '', type => 'ACL', source_id => 'ALL', group_id => '', user_id => $site->user->user_id, C => 1, R => 1, U => 1, P => 1, D => 1);
         } else {
             $cemented_perm = get_all_permissions(array(type => 'ACL', user => $this, site => $this->site, with_inheriting => 1));
         }
         #	printr($cemented_perm);
         ####### debug
         if ($this->is_superuser) {
             $this->debug->msg("Hey, we have superuser here: ALL ACL is allowed. Load time: " . $timer->get_aeg());
         } else {
             $this->debug->msg("ACL permissions loaded:  " . sizeof(array_keys($cemented_perm)) . " permissions found. Load time: " . $timer->get_aeg());
         }
         ########### RETURN PERMISSIONS
         return $cemented_perm;
     } else {
         $this->debug->msg("Error: ACL permissions not loaded: no USER ID");
     }
     # if !user id
 }