<?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>';␊ |
}␊ |
}␊ |