/** * This function will return application data object that matches action and in object ID * * @param void * @return ApplicationDataObject */ function getInObject() { if (is_null($this->in_object)) { if ($this->getAction() == self::ADD_COMMENT_ACTION) { $this->in_object = ProjectMessages::findById($this->getInObjectId()); } elseif ($this->getAction() == self::ADD_TASK_ACTION) { $this->in_object = ProjectTaskLists::findById($this->getInObjectId()); } // if } // if return $this->in_object; }
/** * Call back function for task list link * * @param mixed $matches * @return */ function replace_task_list_link_callback($matches) { if (count($matches) < 2) { return null; } // if if (!logged_user()->isMemberOfOwnerCompany()) { $object = ProjectTaskLists::findOne(array('conditions' => array('`id` = ? AND `project_id` = ? AND `is_private` = 0 ', $matches[1], active_project()->getId()))); } else { $object = ProjectTaskLists::findOne(array('conditions' => array('`id` = ? AND `project_id` = ?', $matches[1], active_project()->getId()))); } // if if (!$object instanceof ProjectTaskList) { return '<del>' . lang('invalid reference') . '</del>'; } else { return '<a href="' . $object->getViewUrl() . '">' . $object->getName() . '</a>'; } // if }
/** * Delete this object and reset all relationship. This function will not delete any of related objec * * @access public * @param void * @return boolean */ function delete() { try { DB::execute("UPDATE " . ProjectMessages::instance()->getTableName(true) . " SET `milestone_id` = '0' WHERE `milestone_id` = " . DB::escape($this->getId())); DB::execute("UPDATE " . ProjectTaskLists::instance()->getTableName(true) . " SET `milestone_id` = '0' WHERE `milestone_id` = " . DB::escape($this->getId())); return parent::delete(); } catch (Exception $e) { throw $e; } // try }
/** * Edit existing project form * * @param void * @return null */ function edit() { $this->setTemplate('add_project_form'); $project_form = ProjectForms::findById(get_id()); if (!$project_form instanceof ProjectForm) { flash_error(lang('project form dnx')); if (ProjectForm::canAdd(logged_user(), active_project())) { $this->redirectTo('form'); } else { $this->redirectToUrl(active_project()->getOverviewUrl()); } // if } // if if (!$project_form->canEdit(logged_user())) { flash_error(lang('no access permissions')); if (ProjectForm::canAdd(logged_user(), active_project())) { $this->redirectTo('form'); } else { $this->redirectToUrl(active_project()->getOverviewUrl()); } // if } // if $project_form_data = array_var($_POST, 'project_form'); if (!is_array($project_form_data)) { $project_form_data = array('name' => $project_form->getName(), 'description' => $project_form->getDescription(), 'success_message' => $project_form->getSuccessMessage(), 'action' => $project_form->getAction(), 'is_enabled' => $project_form->getIsEnabled(), 'is_visible' => $project_form->getIsVisible()); // array if ($project_form->getAction() == ProjectForm::ADD_COMMENT_ACTION) { $project_form_data['message_id'] = $project_form->getInObjectId(); } else { $project_form_data['task_list_id'] = $project_form->getInObjectId(); } // if } // if tpl_assign('project_form', $project_form); tpl_assign('project_form_data', $project_form_data); if (is_array(array_var($_POST, 'project_form'))) { $project_form->setFromAttributes($project_form_data); if ($project_form->getAction() == ProjectForm::ADD_COMMENT_ACTION) { $in_object = ProjectMessages::findById(get_id('message_id', $project_form_data)); $relation_error_message = lang('project form select message'); } else { $in_object = ProjectTaskLists::findById(get_id('task_list_id', $project_form_data)); $relation_error_message = lang('project form select task lists'); } // if if (!$in_object instanceof ProjectDataObject) { tpl_assign('error', new Error($relation_error_message)); $this->render(); } // if $project_form->setInObjectId($in_object->getObjectId()); // set related object ID try { DB::beginWork(); $project_form->save(); ApplicationLogs::createLog($project_form, active_project(), ApplicationLogs::ACTION_EDIT, true); DB::commit(); flash_success(lang('success edit project form', $project_form->getName())); $this->redirectTo('form'); } catch (Exception $e) { DB::rollback(); tpl_assign('error', $e); } // try } // if }
/** * Return completed task lists * * @access public * @param void * @return array */ function getCompletedTaskLists() { if (logged_user()->isMemberOfOwnerCompany()) { return $this->getAllCompletedTaskLists(); } if (is_null($this->completed_task_lists)) { $this->completed_task_lists = ProjectTaskLists::findAll(array('conditions' => array('`project_id` = ? AND `completed_on` > ? AND `is_private` = ?', $this->getId(), EMPTY_DATETIME, 0), 'order' => '`order`')); // findAll } // if return $this->completed_task_lists; }
/** * 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 arguments (@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, 'ProjectTaskLists')) { return parent::paginate($arguments, $items_per_page, $current_page); } else { return ProjectTaskLists::instance()->paginate($arguments, $items_per_page, $current_page); //$instance =& ProjectTaskLists::instance(); //return $instance->paginate($arguments, $items_per_page, $current_page); } // if }
/** * Return array of milestones for the month specified that the user has * access to. * * @access public * @param int $year * @param int $month * @return array */ function getTaskListsByMonth($year, $month) { $from_date = DateTimeValueLib::make(0, 0, 0, $month, 1, $year); $to_date = new DateTimeValue(strtotime('+1 month -1 day', $from_date->getTimestamp())); if (logged_user()->isMemberOfOwnerCompany()) { $conditions = array('`project_id` = ? AND (`due_date` >= ? AND `due_date` < ?)', $this->getId(), $from_date, $to_date); } else { $conditions = array('`project_id` = ? AND (`due_date` >= ? AND `due_date` < ?) AND `is_private` = ?', $this->getId(), $from_date, $to_date, 0); } return ProjectTaskLists::findAll(array( 'conditions' => $conditions, 'order' => 'due_date' )); // findAll } // getMilestonesByMonth
/** * Return manager instance * * @access protected * @param void * @return ProjectTaskLists */ function manager() { if (!$this->manager instanceof ProjectTaskLists) { $this->manager = ProjectTaskLists::instance(); } return $this->manager; }
/** * Edit task * * @access public * @param void * @return null */ function edit_task() { $this->setTemplate('add_task'); $task = ProjectTasks::findById(get_id()); if (!$task instanceof ProjectTask) { flash_error(lang('task dnx')); $this->redirectTo('task'); } // if $task_list = $task->getTaskList(); if (!$task_list instanceof ProjectTaskList) { flash_error('task list dnx'); $this->redirectTo('task'); } // if if (!$task->canEdit(logged_user())) { flash_error(lang('no access permissions')); $this->redirectTo('task'); } // if $task_data = array_var($_POST, 'task'); if (!is_array($task_data)) { $task_data = array('text' => $task->getText(), 'start_date' => $task->getStartDate(), 'due_date' => $task->getDueDate(), 'task_list_id' => $task->getTaskListId(), 'assigned_to' => $task->getAssignedToCompanyId() . ':' . $task->getAssignedToUserId(), 'send_notification' => config_option('send_notification_default', '0')); // array } // if tpl_assign('task', $task); tpl_assign('task_list', $task_list); tpl_assign('task_data', $task_data); if (is_array(array_var($_POST, 'task'))) { $old_owner = $task->getAssignedTo(); //$task_data['due_date'] = DateTimeValueLib::make(0, 0, 0, array_var($_POST, 'task_due_date_month', 1), array_var($_POST, 'task_due_date_day', 1), array_var($_POST, 'task_due_date_year', 1970)); if (isset($_POST['task_start_date'])) { $task_data['start_date'] = DateTimeValueLib::makeFromString($_POST['task_start_date']); } else { $task_data['start_date'] = DateTimeValueLib::make(0, 0, 0, array_var($_POST, 'task_start_date_month', 1), array_var($_POST, 'task_start_date_day', 1), array_var($_POST, 'task_start_date_year', 1970)); } if (isset($_POST['task_due_date'])) { $task_data['due_date'] = DateTimeValueLib::makeFromString($_POST['task_due_date']); } else { $task_data['due_date'] = DateTimeValueLib::make(0, 0, 0, array_var($_POST, 'task_due_date_month', 1), array_var($_POST, 'task_due_date_day', 1), array_var($_POST, 'task_due_date_year', 1970)); } $task->setFromAttributes($task_data); $task->setTaskListId($task_list->getId()); // keep old task list id $assigned_to = explode(':', array_var($task_data, 'assigned_to', '')); $task->setAssignedToCompanyId(array_var($assigned_to, 0, 0)); $task->setAssignedToUserId(array_var($assigned_to, 1, 0)); try { DB::beginWork(); $task->save(); // Move? $new_task_list_id = (int) array_var($task_data, 'task_list_id'); if ($new_task_list_id && $task->getTaskListId() != $new_task_list_id) { // Move! $new_task_list = ProjectTaskLists::findById($new_task_list_id); if ($new_task_list instanceof ProjectTaskList) { $task_list->detachTask($task, $new_task_list); // detach from old and attach to new list } // if } // if ApplicationLogs::createLog($task, active_project(), ApplicationLogs::ACTION_EDIT); DB::commit(); trace(__FILE__, 'edit_task: notify user'); // notify user if (array_var($task_data, 'send_notification') == 'checked') { try { if (Notifier::notifyNeeded($task->getAssignedTo(), $old_owner)) { Notifier::taskAssigned($task); } } catch (Exception $e) { Logger::log("Error: Notification failed, " . $e->getMessage(), Logger::ERROR); } // try } // if flash_success(lang('success edit task')); // Redirect to task list. Check if we have updated task list ID first if (isset($new_task_list) && $new_task_list instanceof ProjectTaskList) { $this->redirectToUrl($new_task_list->getViewUrl()); } else { $this->redirectToUrl($task_list->getViewUrl()); } // if } catch (Exception $e) { DB::rollback(); tpl_assign('error', $e); } // try } // if }
/** * Edit task * * @access public * @param void * @return null */ function edit_task() { $this->setTemplate('add_task'); $task = ProjectTasks::findById(get_id()); if (!$task instanceof ProjectTask) { flash_error(lang('task dnx')); $this->redirectTo('task'); } // if $task_list = $task->getTaskList(); if (!$task_list instanceof ProjectTaskList) { flash_error('task list dnx'); $this->redirectTo('task'); } // if if (!$task->canEdit(logged_user())) { flash_error(lang('no access permissions')); $this->redirectTo('task'); } // if $task_data = array_var($_POST, 'task'); if (!is_array($task_data)) { $task_data = array('text' => $task->getText(), 'task_list_id' => $task->getTaskListId(), 'assigned_to' => $task->getAssignedToCompanyId() . ':' . $task->getAssignedToUserId()); // array } // if tpl_assign('task', $task); tpl_assign('task_list', $task_list); tpl_assign('task_data', $task_data); if (is_array(array_var($_POST, 'task'))) { $task->setFromAttributes($task_data); $task->setTaskListId($task_list->getId()); // keep old task list id $assigned_to = explode(':', array_var($task_data, 'assigned_to', '')); $task->setAssignedToCompanyId(array_var($assigned_to, 0, 0)); $task->setAssignedToUserId(array_var($assigned_to, 1, 0)); try { DB::beginWork(); $task->save(); // Move? $new_task_list_id = (int) array_var($task_data, 'task_list_id'); if ($new_task_list_id && $task->getTaskListId() != $new_task_list_id) { // Move! $new_task_list = ProjectTaskLists::findById($new_task_list_id); if ($new_task_list instanceof ProjectTaskList) { $task_list->detachTask($task, $new_task_list); // detach from old and attach to new list } // if } // if ApplicationLogs::createLog($task, active_project(), ApplicationLogs::ACTION_EDIT); DB::commit(); flash_success(lang('success edit task')); // Redirect to task list. Check if we have updated task list ID first if (isset($new_task_list) && $new_task_list instanceof ProjectTaskList) { $this->redirectToUrl($new_task_list->getViewUrl()); } else { $this->redirectToUrl($task_list->getViewUrl()); } // if } catch (Exception $e) { DB::rollback(); tpl_assign('error', $e); } // try } // if }
/** * Return parent task lists * * @access public * @param void * @return ProjectTaskList */ function getTaskList() { return ProjectTaskLists::findById($this->getTaskListId()); }
/** * Add user * * @access public * @param void * @return null */ function add() { $this->setTemplate('add_user'); $company = Companies::findById(get_id('company_id')); if (!$company instanceof Company) { flash_error(lang('company dnx')); $this->redirectTo('administration'); } // if if (!User::canAdd(logged_user(), $company)) { flash_error(lang('no access permissions')); $this->redirectToReferer(get_url('dashboard')); } // if $user = new User(); $user_data = array_var($_POST, 'user'); if (!is_array($user_data)) { $user_data = array('password_generator' => 'random', 'company_id' => $company->getId(), 'timezone' => $company->getTimezone()); // array } // if $projects = $company->getProjects(); $permissions = PermissionManager::getPermissionsText(); tpl_assign('user', $user); tpl_assign('company', $company); tpl_assign('projects', $projects); tpl_assign('permissions', $permissions); tpl_assign('user_data', $user_data); if (is_array(array_var($_POST, 'user'))) { $user->setFromAttributes($user_data); $user->setCompanyId($company->getId()); try { // Generate random password if (array_var($user_data, 'password_generator') == 'random') { $password = substr(sha1(uniqid(rand(), true)), rand(0, 25), 13); // Validate user input } else { $password = array_var($user_data, 'password'); if (trim($password) == '') { throw new Error(lang('password value required')); } // if if ($password != array_var($user_data, 'password_a')) { throw new Error(lang('passwords dont match')); } // if } // if $user->setPassword($password); if (config_option('check_email_unique', '1') == '1') { if (!$user->validateUniquenessOf('email')) { throw new Error(lang('email address is already used')); } } DB::beginWork(); $user->save(); ApplicationLogs::createLog($user, null, ApplicationLogs::ACTION_ADD); if (is_array($projects)) { foreach ($projects as $project) { if (array_var($user_data, 'project_permissions_' . $project->getId()) == 'checked') { $relation = new ProjectUser(); $relation->setProjectId($project->getId()); $relation->setUserId($user->getId()); foreach ($permissions as $permission => $permission_text) { $permission_value = array_var($user_data, 'project_permission_' . $project->getId() . '_' . $permission) == 'checked'; $user->setProjectPermission($project, $permission, $permission_value); } // foreach $relation->save(); } // if } // foreach } // if DB::commit(); // Send notification... try { if (array_var($user_data, 'send_email_notification')) { Notifier::newUserAccount($user, $password); } // if } catch (Exception $e) { } // try // Add task to Welcome project... try { if (array_var($user_data, 'add welcome task')) { $task_data = array('text' => lang('welcome task text', $user->getName(), get_url('account', 'edit')), 'due date' => DateTimeValueLib::now() + 7 * 24 * 60 * 60, 'assigned_to_company_id' => $user->getCompanyId(), 'assigned_to_user_id' => $user->getId()); $task_list = ProjectTaskLists::instance()->findById(2, true); DB::beginWork(); $task = new ProjectTask(); $task->setFromAttributes($task_data); $task_list->attachTask($task); $task->save(); DB::commit(); } // if } catch (Exception $e) { DB::rollback(); } // try flash_success(lang('success add user', $user->getDisplayName())); $projects = $company->getProjects(); if (is_array($projects) || count($projects)) { $this->redirectToUrl(get_url('account', 'update_permissions', $user->getId())); // Continue to permissions page } // if $this->redirectToUrl($company->getViewUrl()); } catch (Exception $e) { DB::rollback(); tpl_assign('error', $e); } // try } // if }