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); }
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); }