'Feature/Change Request',
'Documentation', 'Cookbook', 'CoreCandidate','PHP Compatibility', 'Other');
Markup('pitsform','inline','/\\(:pitsform:\\)/e',"Keep(PitsForm(\$pagename))");
Markup('pitslist','directives','/\\(:pitslist\\s*(.*?):\\)/e',
"FmtPitsList('',\$pagename,array('q'=>PSS('$1')))");
Markup('pits2list','directives','/\\(:pits2list\\s*(.*?):\\)/e',
"FmtPitsList2('',\$pagename,array('q'=>PSS('$1')))");
Markup('pits','directives',
'/^(Summary|Created|Status|Category|From|Assigned|Version|OS|Priority):.*/',
"<:block>
$0
");
## PitsForm() generates the form for entering a new issue. Note that
## once an issue has been created, it's a normal wikipage and is edited
## according to the normal editing code (i.e., there's no form-based
## editing yet).
function PitsForm($pagename) {
global $PitsCategories;
$out[] = "";
return FmtPageName(implode('',$out),$pagename);
}
$HTMLStylesFmt[] = "
.pitsfield { text-align:right; font-weight:bold; }
table.pits th a { text-decoration:none; }
table.pits th { background-color:#eeeeee; }
dl.pits2 { font-size: 85%; color: #888888; clear:both;border-top: 1px solid #dddddd; }
dl.pits2 dt { float:left; padding-right:0.5em; }
dl.pits2 dd { margin-left: 8.5em; }
dl.pits2 dd b { color: black; font-weight: normal; }
dl.pits2 dd i { float: right; }
";
include_once("$FarmD/scripts/author.php");
if ($action=='postpits') {
Lock(2);
foreach(ListPages('/^PITS\\.\\d/') as $i)
$issue = max(@$issue,substr($i,5));
$pagename = sprintf("PITS.%05d",@$issue+1);
$action = 'edit';
$_REQUEST['post'] = 1;
$CreateTime = strftime('%Y-%m-%d %H:%M',$Now);
$EditMessageFmt = "Please review and make any edits
to your issue below, then press 'Save'.
";
$_POST['csum'] = $_REQUEST['summary'];
$vers = str_replace('pmwiki-', '', $_REQUEST['version']);
$_POST['text'] = "
Summary: {$_REQUEST['summary']}
Created: $CreateTime
Status: Open
Category: ".implode(' ',(array)@$_REQUEST['category'])."
From: [[~{$_REQUEST['author']}]]
Assigned:
Priority: {$_REQUEST['priority']}
Version: {$vers}
OS: {$_REQUEST['os']}
Description:
{$_REQUEST['description']}";
}
## FmtPitsList creates a table of PITS issues according to various
## criteria.
function FmtPitsList($fmt,$pagename,$opt) {
$opt = array_merge($opt,@$_REQUEST);
$pitslist = ListPages('/^PITS\\.\\d+$/');
$out[] = FmtPageName("";
return implode('',$out);
}
## This function creates specialized ordering functions needed to
## (more efficiently) perform sorts on arbitrary sets of criteria.
function CreateOrderFunction($order) {
$code = '';
foreach(preg_split('/[\\s,|]+/',strtolower($order),-1,PREG_SPLIT_NO_EMPTY)
as $o) {
if (substr($o,0,1)=='-') { $r='-'; $o=substr($o,1); }
else $r='';
if (preg_match('/\\W/',$o)) continue;
$code .= "\$c=strcasecmp(@\$x['$o'],@\$y['$o']); if (\$c!=0) return $r\$c;\n";
}
$code .= "return 0;\n";
return create_function('$x,$y',$code);
}
## FmtPitsList2 creates a table of PITS issues according to various
## criteria.
function FmtPitsList2($fmt,$pagename,$opt) {
global $AutoSuspendDaysInactive, $Now, $PITSCache;
SDV($AutoSuspendDaysInactive, 180);
$opt = array_merge($opt,@$_REQUEST);
$pitslist = ListPages('/^PITS\\.\\d+$/');
$terms = preg_split('/((?\$Name : {$p['category']}",$p['name'])
."{$p['status']} "
."{$p['priority2']} "
." {$p['summary']}");
if(@$opt['count'] && $cnt>$opt['count']) break;
}
return implode('',$out);
}
function Priority2($x){
if(trim($x)=='') return '0.0 (0)';
// echo "$x";
preg_match_all("/([0-5x])/i", $x, $m, PREG_PATTERN_ORDER);
$count = count($m[1]);
$sum = array_sum($m[1]);
if($count==0) return '0.0 (0)';
$avg = number_format(round($sum/$count, 1), 1);
// $p100 = round($sum/$count*20).'%';
$pcount = '('.$count.')';
$xavg = $count<4 ? '0.0': $avg;
// $xp100 = $count<4 ? '?%': $p100;
return "$xavg $pcount";
}