/** * Returns milestones from active context and parent members of the active context * * @param User $user * @return array */ static function getActiveMilestonesByUser(Contact $user, $context = null) { if (is_null($context)) { $context = active_context(); } $members = array(); $parents = array(); foreach ($context as $k => $member) { if ($member instanceof Member) { if ($member->getDimension()->getCode() == 'tags') { continue; } $members[] = $member->getId(); $tmp = $member->getParentMember(); while ($tmp != null) { $parents[] = $tmp->getId(); $tmp = $tmp->getParentMember(); } } } $result = TemplateMilestones::instance()->listing(array("ignore_context" => true, "member_ids" => $members, "extra_member_ids" => $parents)); $milestones = $result->objects; return $milestones; }
static function getOverdueAndUpcomingObjects($limit = null) { $conditions_tasks = " AND is_template = 0 AND `e`.`completed_by_id` = 0 AND `e`.`due_date` > 0"; $conditions_milestones = " AND is_template = 0 AND `e`.`completed_by_id` = 0 AND `e`.`due_date` > 0"; if (!SystemPermissions::userHasSystemPermission(logged_user(), 'can_see_assigned_to_other_tasks')) { $conditions_tasks .= " AND assigned_to_contact_id = " . logged_user()->getId(); } $tasks_result = self::instance()->listing(array("limit" => $limit, "extra_conditions" => $conditions_tasks, "order" => array('due_date', 'priority'), "order_dir" => "ASC")); $tasks = $tasks_result->objects; $milestones_result = TemplateMilestones::instance()->listing(array("limit" => $limit, "extra_conditions" => $conditions_milestones, "order" => array('due_date'), "order_dir" => "ASC")); $milestones = $milestones_result->objects; $ordered = array(); foreach ($tasks as $task) { /* @var $task ProjectTask */ if (!$task->isCompleted() && $task->getDueDate() instanceof DateTimeValue) { if (!isset($ordered[$task->getDueDate()->getTimestamp()])) { $ordered[$task->getDueDate()->getTimestamp()] = array(); } $ordered[$task->getDueDate()->getTimestamp()][] = $task; } } foreach ($milestones as $milestone) { if (!isset($ordered[$milestone->getDueDate()->getTimestamp()])) { $ordered[$milestone->getDueDate()->getTimestamp()] = array(); } $ordered[$milestone->getDueDate()->getTimestamp()][] = $milestone; } ksort($ordered, SORT_NUMERIC); $ordered_flat = array(); foreach ($ordered as $k => $values) { foreach ($values as $v) { $ordered_flat[] = $v; } } return $ordered_flat; }
/** * Return manager instance * * @access protected * @param void * @return ProjectMilestones */ function manager() { if (!$this->manager instanceof TemplateMilestones) { $this->manager = TemplateMilestones::instance(); } return $this->manager; }
/** * This function will return paginated result. Result is an array where first element is * array of returned object and second populated pagination object that can be used for * obtaining and rendering pagination data using various helpers. * * Items and pagination array vars are indexed with 0 for items and 1 for pagination * because you can't use associative indexing with list() construct * * @access public * @param array $arguments Query argumens (@see find()) Limit and offset are ignored! * @param integer $items_per_page Number of items per page * @param integer $current_page Current page number * @return array */ function paginate($arguments = null, $items_per_page = 10, $current_page = 1) { if (isset($this) && instance_of($this, 'TemplateMilestones')) { return parent::paginate($arguments, $items_per_page, $current_page); } else { return TemplateMilestones::instance()->paginate($arguments, $items_per_page, $current_page); //$instance =& TemplateMilestones::instance(); //return $instance->paginate($arguments, $items_per_page, $current_page); } // if }
/** * Return true if $user can add an object of type $object_type_id in $member. False otherwise. * * @param Contact $user * @param Member $member * @param array $context_members * @param $object_type_id * @return boolean */ function can_add_to_member(Contact $user, $member, $context_members, $object_type_id, $check_dimension = true) { if (TemplateTasks::instance()->getObjectTypeId() == $object_type_id) { $object_type_id = ProjectTasks::instance()->getObjectTypeId(); } if (TemplateMilestones::instance()->getObjectTypeId() == $object_type_id) { $object_type_id = ProjectMilestones::instance()->getObjectTypeId(); } if (!$member instanceof Member && is_array($member) && isset($member['id'])) { $member = Members::findById($member['id']); } if ($user->isGuest() || !$member || !$member->canContainObject($object_type_id)) { return false; } try { $contact_pg_ids = ContactPermissionGroups::getPermissionGroupIdsByContactCSV($user->getId(), false); if ($check_dimension) { $dimension = $member->getDimension(); } //dimension does not define permissions - user can freely add in all members if ($check_dimension && !$dimension->getDefinesPermissions()) { return true; } //dimension defines permissions and user has maximum level of permissions so can freely in all members if ($check_dimension && $dimension->hasAllowAllForContact($contact_pg_ids)) { return true; } //check if (ContactMemberPermissions::contactCanReadObjectTypeinMember($contact_pg_ids, $member->getId(), $object_type_id, true, false, $user)) { $max_role_ot_perm = MaxRoleObjectTypePermissions::instance()->findOne(array('conditions' => "object_type_id='{$object_type_id}' AND role_id = '" . $user->getUserType() . "'")); // if user max permission cannot write this object type then return false if ($max_role_ot_perm && $max_role_ot_perm->getCanWrite()) { return true; } else { return false; } } //check for context permissions that allow user to add in this member if ($context_members) { $member_ids = array(); foreach ($context_members as $member_obj) { $member_ids[] = $member_obj->getId(); } $allowed_members = ContactMemberPermissions::getActiveContextPermissions($user, $object_type_id, $context_members, $member_ids, true); if (in_array($member, $allowed_members)) { return true; } } } catch (Exception $e) { tpl_assign('error', $e); return false; } return false; }