| <?php␊ | 
| /* -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */␊ | 
| /*␊ | 
| # ***** BEGIN LICENSE BLOCK *****␊ | 
| # This file is part of InDefero, an open source project management application.␊ | 
| # Copyright (C) 2008 CĂ©ondo Ltd and contributors.␊ | 
| #␊ | 
| # InDefero is free software; you can redistribute it and/or modify␊ | 
| # it under the terms of the GNU General Public License as published by␊ | 
| # the Free Software Foundation; either version 2 of the License, or␊ | 
| # (at your option) any later version.␊ | 
| #␊ | 
| # InDefero is distributed in the hope that it will be useful,␊ | 
| # but WITHOUT ANY WARRANTY; without even the implied warranty of␊ | 
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the␊ | 
| # GNU General Public License for more details.␊ | 
| #␊ | 
| # You should have received a copy of the GNU General Public License␊ | 
| # along with this program; if not, write to the Free Software␊ | 
| # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA␊ | 
| #␊ | 
| # ***** END LICENSE BLOCK ***** */␊ | 
| ␊ | 
| Pluf::loadFunction('Pluf_HTTP_URL_urlForView');␊ | 
| ␊ | 
| /**␊ | 
| * Make the links to issues and commits.␊ | 
| */␊ | 
| class IDF_Template_IssueComment extends Pluf_Template_Tag␊ | 
| {␊ | 
| private $project = null;␊ | 
| private $git = null;␊ | 
| ␊ | 
| function start($text, $project)␊ | 
| {␊ | 
| $this->project = $project;␊ | 
| $this->git = new IDF_Git(Pluf::f('git_repository'));␊ | 
| $text = wordwrap($text, 80, "\n", true);␊ | 
| $text = Pluf_esc($text);␊ | 
| $text = ereg_replace('[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]', ␊ | 
| '<a href="\\0" rel="nofollow">\\0</a>', ␊ | 
| $text); ␊ | 
| $text = preg_replace_callback('#(issues?|bugs?|tickets?)\s+(\d+)((\s+and|\s+or|,)\s+(\d+)){0,}#im',␊ | 
| array($this, 'callbackIssues'), $text);␊ | 
| $text = preg_replace_callback('#(commit\s+)([0-9a-f]{5,40})#im',␊ | 
| array($this, 'callbackCommit'), $text);␊ | 
| echo $text;␊ | 
| }␊ | 
| ␊ | 
| /**␊ | 
| * General call back for the issues.␊ | 
| */␊ | 
| function callbackIssues($m)␊ | 
| {␊ | 
| if (count($m) == 3) {␊ | 
| $issue = new IDF_Issue($m[2]);␊ | 
| if ($issue->id > 0 and $issue->project == $this->project->id) {␊ | 
| return $this->linkIssue($issue, $m[1].' '.$m[2]);␊ | 
| } else {␊ | 
| return $m[0]; // not existing issue.␊ | 
| }␊ | 
| } else {␊ | 
| return preg_replace_callback('/(\d+)/', ␊ | 
| array($this, 'callbackIssue'), ␊ | 
| $m[0]); ␊ | 
| }␊ | 
| }␊ | 
| ␊ | 
| /**␊ | 
| * Call back for the case of multiple issues like 'issues 1, 2 and 3'.␊ | 
| *␊ | 
| * Called from callbackIssues, it is linking only the number of␊ | 
| * the issues.␊ | 
| */␊ | 
| function callbackIssue($m)␊ | 
| {␊ | 
| $issue = new IDF_Issue($m[1]);␊ | 
| if ($issue->id > 0 and $issue->project == $this->project->id) {␊ | 
| return $this->linkIssue($issue, $m[1]);␊ | 
| } else {␊ | 
| return $m[0]; // not existing issue.␊ | 
| }␊ | 
| }␊ | 
| ␊ | 
| function callbackCommit($m)␊ | 
| {␊ | 
| if ($this->git->testHash($m[2]) != 'commit') {␊ | 
| return $m[0];␊ | 
| }␊ | 
| $co = $this->git->getCommit($m[2]);␊ | 
| return '<a href="'.Pluf_HTTP_URL_urlForView('IDF_Views_Source::treeBase', array($this->project->shortname, $co->commit)).'">'.$m[1].$m[2].'</a>';␊ | 
| }␊ | 
| ␊ | 
| /**␊ | 
| * Generate the link to an issue.␊ | 
| *␊ | 
| * @param IDF_Issue Issue.␊ | 
| * @param string Name of the link.␊ | 
| * @return string Linked issue.␊ | 
| */␊ | 
| public function linkIssue($issue, $title)␊ | 
| {␊ | 
| $ic = (in_array($issue->status, $this->project->getTagIdsByStatus('closed'))) ? 'issue-c' : 'issue-o';␊ | 
| return '<a href="'.Pluf_HTTP_URL_urlForView('IDF_Views_Issue::view', ␊ | 
| array($this->project->shortname, $issue->id)).'" class="'.$ic.'" title="'.Pluf_esc($issue->summary).'">'.Pluf_esc($title).'</a>';␊ | 
| }␊ | 
| }␊ |