/** * Constructor * * @param Request $request * @return TicketsController */ function __construct($request) { parent::__construct($request); if ($this->logged_user->getProjectPermission('ticket', $this->active_project) < PROJECT_PERMISSION_ACCESS) { $this->httpError(HTTP_ERR_FORBIDDEN); } // if $tickets_url = tickets_module_url($this->active_project); $archive_url = assemble_url('project_tickets_archive', array('project_id' => $this->active_project->getId())); $this->wireframe->addBreadCrumb(lang('Tickets'), $tickets_url); /*$_options = new NamedList(); $_options->add('_category', array('url' => $tickets_url, 'text' => lang('Category'))); $_options->add('_star', array('url' => $tickets_url, 'text' => lang('Star'))); $_options->add('_priority', array('url' => $tickets_url, 'text' => lang('Priority'))); $_options->add('_name', array('url' => $tickets_url, 'text' => lang('Name'))); $_options->add('_owner', array('url' => $tickets_url, 'text' => lang('Owner'))); $this->wireframe->addPageAction(lang('Sort by'), $tickets_url, $_options, null, '0');*/ $add_ticket_url = false; if (Ticket::canAdd($this->logged_user, $this->active_project)) { $params = null; if ($this->active_category->isLoaded()) { $params = array('category_id' => $this->active_category->getId()); } // if $add_ticket_url = tickets_module_add_ticket_url($this->active_project, $params); $this->wireframe->addPageAction(lang('New Ticket'), $add_ticket_url, null, '1'); //$this->wireframe->addPageAction(lang('New Ticket'), $add_ticket_url); } // if $ticket_id = $this->request->getId('ticket_id'); if ($ticket_id) { $this->active_ticket = Tickets::findByTicketId($this->active_project, $ticket_id); } // if if (instance_of($this->active_category, 'Category') && $this->active_category->isLoaded()) { $this->wireframe->addBreadCrumb($this->active_category->getName(), $this->active_category->getViewUrl()); } // if if (instance_of($this->active_ticket, 'Ticket')) { if ($this->active_ticket->isCompleted()) { $this->wireframe->addBreadCrumb(lang('Archive'), $archive_url); } // if $this->wireframe->addBreadCrumb($this->active_ticket->getName(), $this->active_ticket->getViewUrl()); } else { $this->active_ticket = new Ticket(); } // if $this->smarty->assign(array('tickets_url' => $tickets_url, 'tickets_archive_url' => $archive_url, 'add_ticket_url' => $add_ticket_url, 'active_ticket' => $this->active_ticket, 'page_tab' => 'tickets', 'mass_edit_tickets_url' => assemble_url('project_tickets_mass_edit', array('project_id' => $this->active_project->getId())))); }
function set_responsible_status() { $project_id = $this->request->getId('project_id'); if ($project_id) { $project = Projects::findById($project_id); } $ticket_id = $this->request->getId('ticket_id'); if ($ticket_id) { $ticket = Tickets::findByTicketId($project, $ticket_id); } $owner = Assignments::findOwnerByObject($ticket); $users = Assignments::findAssigneesByObject($ticket); $this->smarty->assign(array('project' => $project, 'ticket' => $ticket, 'users' => $users, 'owner' => $owner, 'ticket_url' => assemble_url('project_ticket', array('project_id' => $project_id, 'ticket_id' => $ticket_id)))); }
/** * Find project objects in commit message, make them links and * save the relations to database * * @param string $commit_message * @param string $commit_author * @param integer $revision * @param Repository $repository * @param Project $project * @return string */ function analyze_message($commit_message, $commit_author, $revision, $repository, $project) { if (define('PURIFY_HTML') && PURIFY_HTML) { $commit_message = purify_html($commit_message); // Clean! } // if $pattern = '/((complete[d]*)[\\s]+)?(ticket|milestone|discussion|task)[s]*[\\s]+[#]*\\d+/i'; if (preg_match_all($pattern, $commit_message, $matches)) { $i = 0; $search = array(); $replace = array(); $matches_unique = array_unique($matches['0']); foreach ($matches_unique as $key => $match) { $match_data = preg_split('/[\\s,]+/', $match, null, PREG_SPLIT_NO_EMPTY); // check if the object got completed by this commit $object_completed = false; if (strpos(strtolower($match_data['0']), 'complete') !== false) { $object_completed = true; unset($match_data['0']); $match_data = array_values($match_data); } // if $object_class_name = $match_data['0']; $module_name = Inflector::pluralize($object_class_name); $object_id = trim($match_data['1'], '#'); $search[$i] = $match; if (class_exists($module_name) && class_exists($object_class_name)) { $object = null; switch (strtolower($module_name)) { case 'tickets': $object = Tickets::findByTicketId($project, $object_id); break; case 'discussions': $object = Discussions::findById($object_id); break; case 'milestones': $object = Milestones::findById($object_id); break; case 'tasks': $object = Tasks::findById($object_id); break; } // switch if (instance_of($object, $object_class_name)) { $link_already_created = CommitProjectObjects::count("object_id = '" . $object->getId() . "' AND revision = '{$revision}'") > 0; if (!$link_already_created) { $comit_project_object = new CommitProjectObject(); $comit_project_object->setProjectId($object->getProjectId()); $comit_project_object->setObjectId($object->getId()); $comit_project_object->setObjectType(ucfirst($object_class_name)); $comit_project_object->setRepositoryId($repository->getId()); $comit_project_object->setRevision($revision); db_begin_work(); $save = $comit_project_object->save(); if ($save && !is_error($save)) { db_commit(); } else { db_rollback(); } // if save } // if $replace[$i] = ($object_completed ? 'Completed ' : '') . '<a href="' . $object->getViewUrl() . '">' . $match_data['0'] . ' ' . $match_data['1'] . '</a>'; // set the object as completed if ($object_completed && !instance_of($object, 'Discussion')) { $completed_by = $repository->getMappedUser($commit_author); $object->complete($completed_by); } // if } else { $replace[$i] = ($object_completed ? 'Completed ' : '') . '<a href="#" class="project_object_missing" title="' . lang('Project object does not exist in this project') . '">' . $match_data['0'] . ' ' . $match_data['1'] . '</a>'; } // if instance_of $i++; } // if module loaded } // foreach return str_ireplace($search, $replace, htmlspecialchars($commit_message)); // linkify } // if preg_match return $commit_message; }
/** * Add AC object links to commit messages * * @param string * @return string **/ private function analyzeCommitMessage($commit_message) { $pattern = '/(ticket|milestone|discussion|task)[s]*[\\s]+[#]*(\\d+)/i'; if (preg_match_all($pattern, $commit_message, $matches)) { $i = 0; $search = array(); $replace = array(); $matches_unique = array_unique($matches['0']); foreach ($matches_unique as $key => $match) { $match_data = preg_split('/[\\s,]+/', $match, null, PREG_SPLIT_NO_EMPTY); $object_class_name = $match_data['0']; $module_name = Inflector::pluralize($object_class_name); $object_id = trim($match_data['1'], '#'); $search[$i] = $match; if (class_exists($module_name) && class_exists($object_class_name)) { $object = null; switch (strtolower($module_name)) { case 'tickets': $object = Tickets::findByTicketId($this->active_project, $object_id); break; case 'discussions': $object = Discussions::findById($object_id); break; case 'milestones': $object = Milestones::findById($object_id); break; case 'tasks': $object = Tasks::findById($object_id); break; } // switch if (instance_of($object, $object_class_name)) { $replace[$i] = '<a href="' . $object->getViewUrl() . '">' . $match_data['0'] . ' ' . $match_data['1'] . '</a>'; } else { $replace[$i] = '<a href="#" class="project_object_missing" title="' . lang('Project object does not exist in this project') . '">' . $match_data['0'] . ' ' . $match_data['1'] . '</a>'; } // if instance_of $i++; } // if module loaded } // foreach return str_ireplace($search, $replace, htmlspecialchars($commit_message)); // linkify } // if preg_match return $commit_message; }