function getMilestone() { if ($this->getMilestoneId() > 0 && !$this->milestone) { $this->milestone = TemplateMilestones::findById($this->getMilestoneId()); } return $this->milestone; }
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); }
/** * 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 }
/** * 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); }