taskFinder->exists($task_id)) { return false; } $this->file->removeAll($task_id); return $this->db->table(self::TABLE)->eq('id', $task_id)->remove(); } /** * Get a the task id from a text * * Example: "Fix bug #1234" will return 1234 * * @access public * @param string $message Text * @return integer */ public function getTaskIdFromText($message) { if (preg_match('!#(\d+)!i', $message, $matches) && isset($matches[1])) { return $matches[1]; } return 0; } /** * Return the list user selectable recurrence status * * @access public * @return array */ public function getRecurrenceStatusList() { return array( Task::RECURRING_STATUS_NONE => t('No'), Task::RECURRING_STATUS_PENDING => t('Yes'), ); } /** * Return the list recurrence triggers * * @access public * @return array */ public function getRecurrenceTriggerList() { return array( Task::RECURRING_TRIGGER_FIRST_COLUMN => t('When task is moved from first column'), Task::RECURRING_TRIGGER_LAST_COLUMN => t('When task is moved to last column'), Task::RECURRING_TRIGGER_CLOSE => t('When task is closed'), ); } /** * Return the list options to calculate recurrence due date * * @access public * @return array */ public function getRecurrenceBasedateList() { return array( Task::RECURRING_BASEDATE_DUEDATE => t('Existing due date'), Task::RECURRING_BASEDATE_TRIGGERDATE => t('Action date'), ); } /** * Return the list recurrence timeframes * * @access public * @return array */ public function getRecurrenceTimeframeList() { return array( Task::RECURRING_TIMEFRAME_DAYS => t('Day(s)'), Task::RECURRING_TIMEFRAME_MONTHS => t('Month(s)'), Task::RECURRING_TIMEFRAME_YEARS => t('Year(s)'), ); } /** * Get task progress based on the column position * * @access public * @param array $task * @param array $columns * @return integer */ public function getProgress(array $task, array $columns) { if ($task['is_active'] == self::STATUS_CLOSED) { return 100; } $position = 0; foreach ($columns as $column_id => $column_title) { if ($column_id == $task['column_id']) { break; } $position++; } return round(($position * 100) / count($columns), 1); } /** * Helper method to duplicate all tasks to another project * * @access public * @param integer $src_project_id * @param integer $dst_project_id * @return boolean */ public function duplicate($src_project_id, $dst_project_id) { $task_ids = $this->taskFinder->getAllIds($src_project_id, array(Task::STATUS_OPEN, Task::STATUS_CLOSED)); foreach ($task_ids as $task_id) { if (! $this->taskDuplication->duplicateToProject($task_id, $dst_project_id)) { return false; } } return true; } }