This program 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.
MODULE: PMWikiListBlock
USAGE: (:listblocks pg=group.page1[#section] fmt=group.page2[#section] /
if="equal {=$variable} value":)
*/
$RecipeInfo['ListBlocks']['Version'] = '2007-12-03';
Markup('listblocksection', 'directives',"/\(:listblocks\s+(.*):\)/e",
"ListBlock_Get(PSS('$1'))");
SDV($ListBlockName,"entry");
SDV($ListBlockForm,"List.Template");
/* ParseBlock */
function ListBlock_Get($args){
// Create SectionLists of a page
global $ListBlockName, $ListBlockForm;
// Parse options passed in markup
$options = ParseArgs($args);//DEBUG echo "Options
";print_r ($options);
$data = $options['pg'];$form = $options['fmt'];
if ((! CondAuth($data, 'read')) || (! CondAuth($template, 'read'))) return 'no access';
// Read section template $form
list($formpage,$formsection) = explode("#",$form,2);
//DEBUG echo "Form Page=".$formpage." Form Section=".$formsection."
";
$formpage = ($formpage) ? $formpage : $ListBlockForm;
$form = ReadPage($formpage);
// Find the template by $formsection
if (!empty($formsection)){
if (!@preg_match(ListBlock_SetAnchor($formsection),$form['text'],$match)) return 'no template';
$form['text'] = $match[0];
}
// Read page data $data
list($datapage,$datasection) = explode("#",$data,2);
//DEBUG echo "Data Page=".$datapage." Data Section=".$datasection."
";
$data = ReadPage($datapage);
// Set the reg exp for the data rows
$datasection = ($datasection) ? $datasection : $ListBlockName;
// Fetch data rows and parse
if (@preg_match_all(ListBlock_SetAnchor($datasection),$data['text'],$dataset)){
//print_r ($dataset);
foreach ($dataset[0] as $datarow) {
$section = $form['text'];
// Apply format template to $datarow
if ($datarow) {
ListBlock_SetVar($datarow,$section);
if (ListBlock_CheckRow($options,$datarow)) $newpage .= $section;
} }
// Rewind the page process and return
return PRR($newpage);
} else { return 'no section'; }
}
function ListBlock_SetVar ($text_in,&$text_out){
// Replace PTV names from template with PTV values from section
global $PageTextVarPatterns;
foreach((array)$PageTextVarPatterns as $pat) {
if (preg_match_all($pat,$text_in,$match,PREG_SET_ORDER)){
// DEBUG print_r ($match);
foreach($match as $m) $text_out=str_replace("{=\$".$m[2]."}",$m[3],$text_out);
} } }
function ListBlock_CheckRow ($options,$section){
global $Conditions;
$condspec = $options['if'];
if (array_key_exists( "if",$options)) {
ListBlock_SetVar ($section,$condspec);
if (!preg_match("/^\\s*(!?)\\s*(\\S*)\\s*(.*?)\\s*$/",$condspec,$match))
return 0;
list($x, $not, $condname, $condparm) = $match;
if (!isset($Conditions[$condname]))
return 1;
$tf = (int)@eval("return ({$Conditions[$condname]});");
return (boolean)($tf xor $not);
} else {return 1;}
}
function ListBlock_SetAnchor ($anchor){
// Set reg exp pattern to return specified section
return "/\[\[#".$anchor."\]\](.*?)(?=\[\[#".$anchor.")/esi";
}