function getMilestone()
 {
     if ($this->getMilestoneId() > 0 && !$this->milestone) {
         $this->milestone = TemplateMilestones::findById($this->getMilestoneId());
     }
     return $this->milestone;
 }
Пример #2
0
 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;
 }
 private function deleteOldTemporalyTemplateObj()
 {
     //delete Dependencies
     $temp_tasks = TemplateTasks::getAllTaskTemplatesBySessionId(logged_user()->getId());
     foreach ($temp_tasks as $tmp) {
         $id = $tmp->getId();
         $dep = ProjectTaskDependencies::findOne(array('conditions' => "(`previous_task_id` = {$id} OR `task_id` = {$id} )"));
         if ($dep instanceof ProjectTaskDependency) {
             $dep->delete();
         }
     }
     //delete obj
     $conditions = array('conditions' => '`session_id` =  ' . logged_user()->getId());
     if (logged_user()->getId() > 0) {
         TemplateTasks::delete($conditions);
         TemplateMilestones::delete($conditions);
     }
 }
 /**
  * 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
 }
 static function getMilestonesInfo($mid)
 {
     if (self::$info_cache == null) {
         self::$info_cache = array();
         // completed
         $rows = DB::executeAll("select count(object_id) as row_count, milestone_id from " . TABLE_PREFIX . "template_tasks use index (completed_on) where completed_on > '0000-00-00' group by milestone_id;");
         if (is_array($rows)) {
             foreach ($rows as $row) {
                 if (array_var($row, 'milestone_id') > 0) {
                     if (!isset(self::$info_cache[$row['milestone_id']])) {
                         self::$info_cache[$row['milestone_id']] = array();
                     }
                     self::$info_cache[$row['milestone_id']]['tc'] = array_var($row, 'row_count');
                 }
             }
         }
         // all milestone tasks
         $rows = DB::executeAll("select count(object_id) as row_count, milestone_id from " . TABLE_PREFIX . "template_tasks use index (milestone_id) group by milestone_id;");
         if (is_array($rows)) {
             foreach ($rows as $row) {
                 if (array_var($row, 'milestone_id') > 0) {
                     if (!isset(self::$info_cache[$row['milestone_id']])) {
                         self::$info_cache[$row['milestone_id']] = array();
                     }
                     self::$info_cache[$row['milestone_id']]['tnum'] = array_var($row, 'row_count');
                 }
             }
         }
     }
     return array_var(self::$info_cache, $mid);
 }
Пример #7
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;
}
 /**
  * Show and process edit milestone form
  *
  * @access public
  * @param void
  * @return null
  */
 function edit()
 {
     if (logged_user()->isGuest()) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     $this->setTemplate('add_milestone');
     if (array_var($_REQUEST, "template_milestone")) {
         $milestone = TemplateMilestones::findById(get_id());
         $this->setTemplate(get_template_path('add_template_milestone', 'template_milestone'));
         if (!$milestone instanceof TemplateMilestone) {
             flash_error(lang('milestone dnx'));
             ajx_current("empty");
             return;
         }
         // if
     } else {
         $milestone = ProjectMilestones::findById(get_id());
         if (!$milestone instanceof ProjectMilestone) {
             flash_error(lang('milestone dnx'));
             ajx_current("empty");
             return;
         }
         // if
     }
     if (!$milestone->canEdit(logged_user())) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     $milestone_data = array_var($_POST, 'milestone');
     if (!is_array($milestone_data)) {
         // set layout for modal form
         if (array_var($_REQUEST, 'modal')) {
             $this->setLayout("json");
             tpl_assign('modal', true);
         }
         $milestone_data = array('name' => $milestone->getObjectName(), 'due_date' => $milestone->getDueDate(), 'description' => $milestone->getDescription(), 'is_urgent' => $milestone->getIsUrgent());
         // array
     }
     // if
     tpl_assign('milestone_data', $milestone_data);
     tpl_assign('milestone', $milestone);
     if (is_array(array_var($_POST, 'milestone'))) {
         if (array_var($milestone_data, 'due_date_value') != '') {
             $milestone_data['due_date'] = getDateValue(array_var($milestone_data, 'due_date_value'));
         } else {
             $now = DateTimeValueLib::now();
             $milestone_data['due_date'] = DateTimeValueLib::make(0, 0, 0, $now->getMonth(), $now->getDay(), $now->getYear());
         }
         $milestone->setFromAttributes($milestone_data);
         $urgent = array_var($milestone_data, 'is_urgent');
         $milestone->setIsUrgent($urgent);
         try {
             $member_ids = json_decode(array_var($_POST, 'members'));
             DB::beginWork();
             $milestone->save();
             $object_controller = new ObjectController();
             $object_controller->add_to_members($milestone, $member_ids);
             $object_controller->add_subscribers($milestone);
             $object_controller->link_to_new_object($milestone);
             $object_controller->add_custom_properties($milestone);
             $object_controller->add_reminders($milestone);
             DB::commit();
             ApplicationLogs::createLog($milestone, ApplicationLogs::ACTION_EDIT);
             //Send Template milestone to view
             if ($milestone instanceof TemplateMilestone) {
                 $object = array("action" => "edit", "object_id" => $milestone->getObjectId(), "type" => $milestone->getObjectTypeName(), "id" => $milestone->getId(), "name" => $milestone->getObjectName(), "ico" => "ico-milestone", "manager" => get_class($milestone->manager()));
                 evt_add("template object added", array('object' => $object));
             }
             $is_template = $milestone instanceof TemplateMilestone;
             if (array_var($_REQUEST, 'modal')) {
                 ajx_current("empty");
                 $this->setLayout("json");
                 $this->setTemplate(get_template_path("empty"));
                 // reload milestone info because plugins may have updated some task info (for example: name prefix)
                 if ($is_template) {
                     $milestone = TemplateMilestones::findById($milestone->getId());
                     $params = array('msg' => lang('success edit milestone', $milestone->getObjectName()), 'milestone' => $milestone->getArrayInfo(), 'reload' => array_var($_REQUEST, 'reload'));
                     if ($milestone instanceof TemplateMilestone) {
                         $params = $object;
                     }
                     print_modal_json_response($params, true, array_var($_REQUEST, 'use_ajx'));
                 } else {
                     $milestone = ProjectMilestones::findById($milestone->getId());
                     flash_success(lang('success edit milestone', $milestone->getObjectName()));
                     evt_add("reload current panel");
                 }
             } else {
                 if ($milestone instanceof TemplateMilestone) {
                     flash_success(lang('success edit template', $milestone->getObjectName()));
                 } else {
                     flash_success(lang('success edit milestone', $milestone->getObjectName()));
                 }
                 if (array_var($task_data, 'inputtype') != 'taskview') {
                     ajx_current("back");
                 } else {
                     ajx_current("reload");
                 }
             }
             /*
             				flash_success(lang('success edit milestone', $milestone->getObjectName()));
             				if (array_var($_REQUEST, 'modal')) {
             					evt_add("reload current panel");
             				}
             				ajx_current("back");*/
         } catch (Exception $e) {
             DB::rollback();
             if (array_var($_REQUEST, 'modal')) {
                 $this->setLayout("json");
                 $this->setTemplate(get_template_path("empty"));
                 print_modal_json_response(array('errorCode' => 1, 'errorMessage' => $e->getMessage()));
             } else {
                 flash_error($e->getMessage());
             }
             ajx_current("empty");
         }
         // try
     }
     // if
 }
Пример #9
0
/**
 * Renders select milestone box
 *
 * @param string $name
 * @param Project $project
 * @param integer $selected ID of selected milestone
 * @param array $attributes Array of additional attributes
 * @return string
 * @throws InvalidInstanceError
 */
function select_milestone($name, $context = null, $selected = null, $attributes = null)
{
    if (!isset($attributes['template_milestone'])) {
        $milestones = ProjectMilestones::getActiveMilestonesByUser(logged_user(), $context);
    } else {
        //add conditions
        if (isset($attributes['template_id']) && $attributes['template_id'] != 0) {
            $tmp_id = $attributes['template_id'];
            $conditions = '(`session_id` =  0 AND `template_id` = ' . $tmp_id . ' OR `session_id` =  ' . logged_user()->getId() . ')';
        } else {
            $conditions = '`session_id` =  ' . logged_user()->getId();
        }
        $milestones = TemplateMilestones::findAll(array('conditions' => $conditions));
    }
    if (is_array($attributes)) {
        if (!isset($attributes['class'])) {
            $attributes['class'] = 'select_milestone';
        }
    } else {
        $attributes = array('class' => 'select_milestone');
    }
    $options = array(option_tag(lang('none'), 0));
    if (is_array($milestones)) {
        foreach ($milestones as $milestone) {
            $option_attributes = $milestone->getId() == $selected ? array('selected' => 'selected') : null;
            $options[] = option_tag($milestone->getObjectName(), $milestone->getId(), $option_attributes);
        }
    }
    return select_box($name, $options, $attributes);
}