/**
  * 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
 }
Esempio n. 5
0
/**
 * 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;
}