* Create a MyPitsGroup.MyPitsForm page and put in it:
(:pitsform:)
* Create a MyPitsGroup.MyPitsList page and put in it:
(:pitslist[ somefield=somevalue,othervalue otherfield=!excludevalue ...]:)
where "somefield" is the name of a field and "somevalue,othervalue"
are the values you want to list. On the opposite "otherfield=!excludevalue"
will exclude the records where "otherfield" correspond to "excludevalue".
But you can just put (:pitslist:) to display the full list.
* ... That's it !
----
Notes:
* All vars in the templates MUST be escaped (ex: \$SomeVar)
* Vars can be "local" ones or "global" ones
* Local vars correspond to field names:
(ex: $summary = content of the 'summary' field)
* Global vars are those given by PmWiki, like $Author and $Now.
Currently, $Author and $Now are the only ones supported, but you
can add others in function PitsEvalTemplate(). You must avoid
$...Url vars like $PageUrl and such, since the http://... link in
them would be interpretated twice. But you can use [[...]] type of
links anyway.
* You can even use PHP functions in templates:
ex: ".strftime('%Y-%m-%d %H:%M',$Now)." (see $PitsFormTemplateFmt)
----
History:
0.10 - Initial version released by Pm with the disclaimers above
0.20 - Modifications by Didier Lebrun
:
* De-specialized the original code (hardcoded -> config vars)
* Stripped $PageUrl vars in template
* Allowed space after label ("Label : content")
* Limited parsing to the PITS header (leave out the comments below)
* Allowed links in any table fields (ex: [[~Author]])
* Stripped LF and other spaces between HTML lines (avoid vspace)
* Added HTML entities charset for some systems (mainly NTFS ?)
0.21 - Modifications by Didier Lebrun :
* Fixed label parsing for i18n charsets
* Fixed description entry in edit template (LF problem)
* Transfered default values from edit template to form template
* Suppressed unuseful $PitsGroup global var
* Added (:pitstrail[ PageName|Label]:) markup and assorted function
*/
define(PITS_VERSION, '0.21');
# ---- Config vars ---- #
## These vars can be overriden in the PITS group configuration file
## (local/YourPITSGroupName.php). Whenever you see something like:
## SDV($SomeVar, "default setup");
## you must put in your config something like:
## $SomeVar = "custom setup";
## SDV() is a just PmWiki function allowing to set a default value
## when none has been setup in the config.
## Number of chars for page names
SDV($PitsIDLenght,5);
## Label to field name mapping. Labels and names can be whatever you like,
## as long as they are consistent through all configuration vars.
SDV($PitsLabels, array(
'Summary' => 'summary',
'Created' => 'created',
'Status' => 'status',
'Category' => 'category',
'From' => 'author',
'Assigned' => 'assigned',
'Priority' => 'priority',
'Version' => 'version',
'OS' => 'os',
'Description' => 'description'
));
## Template for the input form
SDV($PitsFormTemplateFmt, "
");
## Template for filling the edit box with input data
## "----" MUST be present at the end to separate the entries from the
## eventual comments that could be added afterwards.
SDV($PitsEditTemplateFmt, "
Summary: \$summary
Created: \$created
Status: \$status
Category: \$category
From: [[~\$author]]
Assigned: \$assigned
Priority: \$priority
Version: \$version
OS: \$os
Description:[[<<]]\$description
----
!!!Comments
----
(:pitstrail:)
");
## Template for list table.
## The "(/)PitsListItemFmt" tags MUST be present as delimiters of the entry part.
SDV($PitsListTemplateFmt, "
");
## HTML styles
SDV($PitsStylesFmt, "
.pitsform {}
.pitsform td.label { text-align:right; font-weight:bold; }
.pitsform td.input {}
.pitspage {}
.pitspage span.label {}
.pitspage span.data {}
.pitslist {}
.pitslist th { background-color:#eeeeee; }
.pitslist th a { text-decoration:none; }
");
## Edit form top message
SDV($PitsEditMessageFmt,"Please review and make any edits
to your issue below, then press 'Save'.
");
## Fields that can be filtered by name=criteria args
SDV($PitsListFilters,array('summary','created','status','category','priority','version'));
## Criteria used for default and complementary sorting after explicit criteria
SDV($PitsListDefaultSort,array('-priority','status','category','name'));
## Charset for HTML entities conversion ('ISO-8859-1' usually, 'UTF-8' on NTFS systems)
SDV($PitsHtmlEntitiesCharset, 'ISO-8859-1');
# ---- end of Config vars ---- #
$HTMLStylesFmt[] = $PitsStylesFmt;
markup('pitsform','inline','/\\(:pitsform:\\)/e',"Keep(PitsForm(\$pagename))");
markup('pitslist','directive','/\\(:pitslist\\s*(.*?):\\)/e',
"FmtPitsList('',\$pagename,array('q'=>PSS('$1')))");
markup('pitsread','directive','/^('.implode('|',array_keys($PitsLabels)).')\s*:(.*)/',
"<:block>$1:\
$2
");
markup('pitstrail',']#',$tmpl);
if(count($sect)!=3) Abort("\$PitsListTemplateFmt MUST have 3 sections !");
$out[] = FmtPageName(array_shift($sect),$pagename);
$terms = preg_split('/((?=@$min;$i--) {
$prev = sprintf("%0".$PitsIDLenght."d",@$i);
if(PageExists("$group.$prev")) { $prev = '[['.$prev.']]'; break; }
$prev = '';
}
$i = @$name+1;
list(,$max) = explode('.',array_pop($pitslist));
for($i;$i<=@$max;$i++) {
$next = sprintf("%0".$PitsIDLenght."d",@$i);
if(PageExists("$group.$next")) { $next = '[['.$next.']]'; break; }
$next = '';
}
return "<< $prev | $trailindex | $next >>";
}
## 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);
}
## This function is used to evaluate the templates while insulating their
## vars from potential name conflicts
function PitsEvalTemplate($hash,$tmpl) {
global $Author,$Now;
foreach($hash as $k=>$v) $$k = $v;
return(@eval("return(\"$tmpl\");"));
}
?>