static function getDimensionById($id) { $dim = array_var(self::$dimensions_by_id, $id); if (!$dim instanceof Dimension) { $dim = Dimensions::findById($id); if ($dim instanceof Dimension) self::$dimensions_by_id[$id] = $dim; } return $dim; }
function list_members() { if (!logged_user()->isAdminGroup()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } ajx_set_no_toolbar(); $dim_id = array_var($_REQUEST, 'dim', 0); $dimension = Dimensions::findById($dim_id); if (!$dimension instanceof Dimension) { flash_error(lang('dimension snx')); ajx_current("empty"); return; } if (isset($_REQUEST['page'])) { ajx_replace(true); } // parameters $page = array_var($_REQUEST, 'page'); $order_by = array_var($_REQUEST, 'order'); $order_by_dir = array_var($_REQUEST, 'order_dir'); // pagination params $items_x_page = array_var($_REQUEST, 'items_x_page', 20); if (!$page) { $page = 1; } $offset = $items_x_page * ($page - 1); // order defaults if (!$order_by) { $order_by = 'name'; } if (!in_array($order_by_dir, array('ASC', 'DESC'))) { $order_by_dir = 'ASC'; } // this function already checks dimension options $dim_name = $dimension->getName(); // permissions sql $perm_sql = ""; if ($dimension->getDefinesPermissions() && !logged_user()->isAdministrator()) { $pg_ids = logged_user()->getPermissionGroupIds(); $perm_sql = " AND EXISTS (SELECT cmp.member_id FROM " . TABLE_PREFIX . "contact_member_permissions cmp WHERE cmp.member_id=m.id AND cmp.permission_group_id IN (" . implode(',', $pg_ids) . "))"; } $main_sql = "SELECT m.id, l.created_on, l.created_by_id, l.member_id FROM " . TABLE_PREFIX . "members m LEFT JOIN " . TABLE_PREFIX . "application_logs l ON l.member_id=m.id AND l.action='add' WHERE m.dimension_id='{$dim_id}' {$perm_sql}"; $sql = "{$main_sql}\r\n\t\t\t\tORDER BY {$order_by} {$order_by_dir} \r\n\t\t\t\tLIMIT {$offset}, {$items_x_page}"; $rows = DB::executeAll($sql); $count_sql = str_replace("SELECT m.id, l.created_on, l.created_by_id, l.member_id FROM", "SELECT count(*) as total FROM", $main_sql); $count_row = DB::executeAll($count_sql); $members = array(); $ids = array(); $log_data = array(); foreach ($rows as $row) { $members[] = Members::findById($row['id']); $log_data[$row['id']] = array('created_on' => $row['created_on'], 'created_by_id' => $row['created_by_id']); } $member_type_ids = array_flat(DB::executeAll("SELECT object_type_id FROM " . TABLE_PREFIX . "dimension_object_types WHERE dimension_id={$dim_id} AND is_root=1")); $member_types = ObjectTypes::findAll(array('conditions' => 'id IN (' . implode(',', $member_type_ids) . ')')); tpl_assign('members', $members); tpl_assign('log_data', $log_data); tpl_assign('dimension', $dimension); tpl_assign('dimension_name', $dim_name); tpl_assign('member_types', $member_types); tpl_assign('page', $page); tpl_assign('total_items', $count_row[0]['total']); tpl_assign('items_x_page', $items_x_page); tpl_assign('order_by', $order_by); tpl_assign('order_by_dir', $order_by_dir); }
function list_all($parameters = null) { $return_the_list = true; // if parameters not specified => use the request if (is_null($parameters)) { ajx_current("empty"); $parameters = $_REQUEST; $return_the_list = false; } // Get all variables from request $start = array_var($parameters, 'start', '0'); $limit = array_var($parameters, 'limit', config_option('files_per_page')); $order = array_var($parameters, 'sort'); $order_dir = array_var($parameters, 'dir'); $dimension_id = array_var($parameters, 'dim_id'); $member_type_id = array_var($parameters, 'type_id'); $parent_id = array_var($parameters, 'parent_id'); $dimension = Dimensions::findById($dimension_id); $join_sql = ""; switch ($order) { /*case 'task_completion_p': $order = "d.task_completion_p"; break; case 'time_worked_p': $order = "d.time_worked_p"; break; case 'total_tasks': $order = "d.total_tasks"; break; case 'completed_tasks': $order = "d.completed_tasks"; break; case 'total_estimated_time': $order = "d.total_estimated_time"; break; case 'total_worked_time': $order = "d.total_worked_time"; break;*/ case 'name': case 'description': $order = "mem." . $order; break; default: if (str_starts_with($order, "cp_")) { $cp_id = str_replace("cp_", "", $order); $join_sql = "LEFT JOIN " . TABLE_PREFIX . "member_custom_property_values cpv ON cpv.member_id=mem.id AND cpv.custom_property_id={$cp_id}"; $order = "LPAD(cpv.`value`, 25, ' ')"; } else { $order = 'mem.`name`'; } break; } if (!$order_dir) { $order_dir = 'ASC'; } $associated_dimension_ids = array(); $dimension_associations = DimensionMemberAssociations::findAll(array("conditions" => array("(`dimension_id` = ? AND `object_type_id` = ?) OR (`associated_dimension_id` = ? AND `associated_object_type_id` = ?)", $dimension->getId(), $member_type_id, $dimension->getId(), $member_type_id))); foreach ($dimension_associations as $da) { /* @var $da DimensionMemberAssociation */ if ($da->getDimensionId() == $dimension->getId()) { $associated_dimension_ids[] = $da->getAssociatedDimensionMemberAssociationId(); } else { $associated_dimension_ids[] = $da->getDimensionId(); } } $parent = null; if ($parent_id > 0) { $parent = Members::findById($parent_id); } $associated_member_ids = array(); $extra_conds = ""; $context = active_context(); if (is_array($context)) { foreach ($context as $sel) { if ($sel instanceof Member) { if ($sel->getDimensionId() == $dimension->getId()) { $parent = $sel; } else { if (in_array($sel->getDimensionId(), $associated_dimension_ids)) { $associated_member_ids[] = $sel->getId(); } } } } } $member_association_cond = ""; // associated member conditions foreach ($associated_member_ids as $amid) { if (is_numeric($amid) && $amid > 0) { $member_association_cond .= " AND EXISTS (SELECT mpm.id FROM " . TABLE_PREFIX . "member_property_members mpm \r\n\t\t\t\t\tWHERE mpm.member_id=" . TABLE_PREFIX . "members.id AND mpm.property_member_id={$amid} ) "; } } $ids = array(); $pg_array = logged_user()->getPermissionGroupIds(); $current_member_cond = $parent instanceof Member ? "AND parent_member_id=" . $parent->getId() : ""; if ($parent instanceof Member) { $extra_conds = " AND archived_by_id=0 AND EXISTS (\r\n\t\t\t\tSELECT cmp.member_id FROM " . TABLE_PREFIX . "contact_member_permissions cmp \r\n\t\t\t\tWHERE cmp.member_id=" . TABLE_PREFIX . "members.id AND cmp.permission_group_id IN (" . implode(',', $pg_array) . "))"; $members = $parent->getAllChildren(true, 'name', $extra_conds); $member_ids = array(); foreach ($members as $member) { if ($member->getObjectTypeId() == $member_type_id) { $member_ids[] = $member->getId(); } } if (count($associated_member_ids) > 0 && count($member_ids) > 0) { $mpm_sql = "SELECT m.object_id FROM " . TABLE_PREFIX . "members m \r\n\t\t\t\t\t\tINNER JOIN " . TABLE_PREFIX . "member_property_members mpm ON mpm.member_id=m.id \r\n\t\t\t\t\t\tWHERE m.id IN (" . implode(',', $member_ids) . ") \r\n\t\t\t\t\t\tAND mpm.property_member_id IN (" . implode(',', $associated_member_ids) . ")"; $ids = array_flat(DB::executeAll($mpm_sql)); } $ids = $member_ids; } else { $dim_controller = new DimensionController(); $members = $dim_controller->initial_list_dimension_members($dimension->getId(), null, array($member_type_id), false, $extra_conds . $member_association_cond); foreach ($members as $m) { $ids[] = $m['id']; } } if (count($ids) == 0) { $ids[] = 0; } $sql = "SELECT *, mem.id as member_id FROM " . TABLE_PREFIX . "members mem\r\n\t\t--\tLEFT JOIN " . TABLE_PREFIX . "member_additional_data d ON c.object_id=d.customer_id\r\n\t\t\t{$join_sql}\r\n\t\t\tWHERE mem.id IN (" . implode(',', $ids) . ") AND mem.dimension_id=" . $dimension->getId() . "\r\n\t\t\tORDER BY {$order} {$order_dir}\r\n\t\t\tLIMIT {$start}, {$limit}"; $rows = DB::executeAll($sql); if (!is_array($rows)) { $rows = array(); } $object = $this->prepareObject($rows, $start, $limit, $dimension, $member_type_id, count($ids)); if ($return_the_list) { return $object; } else { ajx_extra_data($object); tpl_assign("listing", $object); } }
function enable_disable_dimensions() { ajx_current("empty"); if (!can_manage_configuration(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $dims = json_decode(array_var($_REQUEST, 'dims'), true); //check active dims $at_least_one_dim_enabled = false; foreach ($dims as $dim_id => $enabled) { if ($enabled == true) { $at_least_one_dim_enabled = true; break; } } if (!$at_least_one_dim_enabled) { flash_error(lang('at least one dimension must be selected')); ajx_current("empty"); return; } $root_dids = explode(",", user_config_option('root_dimensions', null, logged_user()->getId())); $update_root_dimensions = false; $enabled_dim_vals = array(); foreach ($dims as $dim_id => $enabled) { if ($enabled) { $enabled_dim_vals[] = $dim_id; if (!in_array($dim_id, $root_dids)) { $root_dids[] = $dim_id; $update_root_dimensions = true; } $dim = Dimensions::findById($dim_id); if (($dim->getCode() == 'workspaces' || $dim->getCode() == 'tags') && !Plugins::instance()->isActivePlugin('workspaces')) { $plugin = Plugins::instance()->findOne(array('conditions' => "name='workspaces'")); if ($plugin instanceof Plugin) { $plugin->activate(); } } else { if ($dim->getCode() == 'customer_project' && !Plugins::instance()->isActivePlugin('crpm')) { $plugin = Plugins::instance()->findOne(array('conditions' => "name='crpm'")); if ($plugin instanceof Plugin) { $plugin->activate(); } } } } } set_config_option('enabled_dimensions', implode(',', $enabled_dim_vals)); if ($update_root_dimensions) { set_user_config_option('root_dimensions', implode(',', $root_dids), logged_user()->getId()); } ajx_extra_data(array('ok' => '1')); }