示例#1
0
function update_all_childs_depths($member, $old_parent_id)
{
    //CHILDS
    //Get all member childs recursive
    $childs = get_all_children_sorted($member->getArrayInfo());
    if (count($childs) == 0) {
        return;
    }
    $childs_ids = array();
    foreach ($childs as $child) {
        $childs_ids[] = $child['id'];
    }
    $m_depth = $member->getDepth();
    if ($old_parent_id > 0) {
        $old_parent_member = Members::findById($old_parent_id);
        $old_member_depth = $old_parent_member->getDepth() + 1;
    } else {
        $old_member_depth = 1;
    }
    $depth_diff = $m_depth - $old_member_depth;
    $childs_ids_string = implode(',', $childs_ids);
    $update_depth_sql = "UPDATE " . TABLE_PREFIX . "members SET `depth` = `depth` + {$depth_diff} WHERE id IN({$childs_ids_string});";
    DB::execute($update_depth_sql);
}
示例#2
0
function permission_form_parameters($pg_id)
{
    set_time_limit(0);
    ini_set('memory_limit', '512M');
    $member_permissions = array();
    $dimensions = array();
    $dims = Dimensions::findAll(array('order' => 'default_order'));
    $members = array();
    $member_types = array();
    $allowed_object_types = array();
    $allowed_object_types_by_member_type[] = array();
    $root_permissions = array();
    $enabled_dimensions = config_option("enabled_dimensions");
    foreach ($dims as $dim) {
        if ($dim->getDefinesPermissions() && in_array($dim->getId(), $enabled_dimensions)) {
            $dimensions[] = $dim;
            $root_members = DB::executeAll("SELECT * FROM " . TABLE_PREFIX . "members WHERE dimension_id=" . $dim->getId() . " AND parent_member_id=0 ORDER BY name ASC");
            $tmp_mem_ids = array();
            foreach ($root_members as $mem) {
                if (!isset($members[$dim->getId()])) {
                    $members[$dim->getId()] = array();
                }
                $members[$dim->getId()][] = $mem;
                $members[$dim->getId()] = array_merge($members[$dim->getId()], get_all_children_sorted($mem));
            }
            $allowed_object_types[$dim->getId()] = array();
            $dim_obj_types = $dim->getAllowedObjectTypeContents();
            foreach ($dim_obj_types as $dim_obj_type) {
                // To draw a row for each object type of the dimension
                if (!in_array($dim_obj_type->getContentObjectTypeId(), $allowed_object_types[$dim->getId()])) {
                    $allowed_object_types[$dim->getId()][] = $dim_obj_type->getContentObjectTypeId();
                }
                // To enable or disable object types depending on the selected member
                if (!is_array(array_var($allowed_object_types_by_member_type, $dim_obj_type->getDimensionObjectTypeId()))) {
                    $allowed_object_types_by_member_type[$dim_obj_type->getDimensionObjectTypeId()] = array();
                }
                $allowed_object_types_by_member_type[$dim_obj_type->getDimensionObjectTypeId()][] = $dim_obj_type->getContentObjectTypeId();
            }
            if ($dim->deniesAllForContact($pg_id)) {
                $cmp_count = ContactMemberPermissions::count("`permission_group_id` = {$pg_id} and member_id in (select m.id from " . TABLE_PREFIX . "members m where m.dimension_id=" . $dim->getId() . ")");
                if ($cmp_count > 0) {
                    $dim->setContactDimensionPermission($pg_id, 'check');
                }
            }
            if ($dim->hasAllowAllForContact($pg_id)) {
                if (isset($members[$dim->getId()])) {
                    foreach ($members[$dim->getId()] as $mem) {
                        $member_permissions[$mem['id']] = array();
                        foreach ($dim_obj_types as $dim_obj_type) {
                            if ($dim_obj_type->getDimensionObjectTypeId() == $mem['object_type_id']) {
                                $member_permissions[$mem['id']][] = array('o' => $dim_obj_type->getContentObjectTypeId(), 'w' => 1, 'd' => 1, 'r' => 1);
                            }
                        }
                    }
                }
            } else {
                if (!$dim->deniesAllForContact($pg_id)) {
                    if (isset($members[$dim->getId()])) {
                        $tmp_ids = array();
                        foreach ($members[$dim->getId()] as $mem) {
                            $tmp_ids[] = $mem['id'];
                        }
                        $mem_pgs = array();
                        if (is_array($tmp_ids) && count($tmp_ids)) {
                            $pgs = DB::executeAll("SELECT * FROM " . TABLE_PREFIX . "contact_member_permissions WHERE permission_group_id={$pg_id} AND member_id IN (" . implode(',', $tmp_ids) . ")\r\n\t\t\t\t\t\t\t\t\tAND object_type_id IN (SELECT ot.id FROM " . TABLE_PREFIX . "object_types ot WHERE ot.type IN ('content_object','located'))");
                            if (is_array($pgs)) {
                                foreach ($pgs as $p) {
                                    if (!isset($mem_pgs[$p['member_id']])) {
                                        $mem_pgs[$p['member_id']] = array();
                                    }
                                    $mem_pgs[$p['member_id']][] = $p;
                                }
                            }
                        }
                        foreach ($members[$dim->getId()] as $mem) {
                            $member_permissions[$mem['id']] = array();
                            if (isset($mem_pgs[$mem['id']]) && is_array($mem_pgs[$mem['id']])) {
                                foreach ($mem_pgs[$mem['id']] as $pg) {
                                    $member_permissions[$mem['id']][] = array('o' => $pg['object_type_id'], 'w' => $pg['can_write'], 'd' => $pg['can_delete'], 'r' => 1);
                                }
                            }
                        }
                    }
                }
            }
            if (isset($members[$dim->getId()])) {
                foreach ($members[$dim->getId()] as $member) {
                    $member_types[$member['id']] = $member['object_type_id'];
                }
            }
        }
    }
    if (config_option('let_users_create_objects_in_root')) {
        $root_cmps = ContactMemberPermissions::findAll(array('conditions' => 'permission_group_id = ' . $pg_id . ' AND member_id = 0'));
        foreach ($root_cmps as $root_cmp) {
            $root_permissions[$root_cmp->getObjectTypeId()] = array('w' => $root_cmp->getCanWrite(), 'd' => $root_cmp->getCanDelete(), 'r' => 1);
        }
    }
    $all_object_types = ObjectTypes::findAll(array("conditions" => "`type` IN ('content_object', 'located') AND name <> 'template_task' AND name <> 'template_milestone' AND `name` <> 'template' AND `name` <> 'file revision'"));
    return array('member_types' => $member_types, 'allowed_object_types_by_member_type' => $allowed_object_types_by_member_type, 'allowed_object_types' => $allowed_object_types, 'all_object_types' => $all_object_types, 'member_permissions' => $member_permissions, 'dimensions' => $dimensions, 'root_permissions' => $root_permissions);
}