'.Keep(EntryForm(\$pagename,'posteform','post',\$GLOBALS['WikiFormPageFmt'],ParseArgs(PSS('$1'))))"); Markup('wsubmit','directives','/^\(:submit\s+(post|preview):\)/', "On submit: ''$1''"); Markup('wlist','directives','/^\(:wikilist\s*(.*?):\)/e', "'<:block>'.FmtEntryList('',\$pagename,array('q'=>PSS('$1')))"); Markup('includef','{$fmt}',"/(($GroupPattern)(?:[.\/]))?{\\\$Newest}/e", "'$1'.NewestEntry(\$pagename,'$2')"); SDV($FormsGroup,'Forms'); SDV($FormTemplatePage,'FormTemplate'); SDV($DefaultWikiFormPageFmt,"\$Group.$FormTemplatePage"); SDVA($WikiFormPageFmt,array($DefaultWikiFormPageFmt, "$FormsGroup.\$Group", "\$Suffix.$FormTemplatePage", "$FormsGroup.\$Suffix")); SDVA($WikiFormGroupFmt,array('$Group','$Name','$Prefix-$Group','$Prefix-$Name')); $FmtP['/\\$Suffix/e'] = 'preg_replace("/^(.+-)?/","",@$match[1])'; // Form elements in chosen language SDV($language,'en'); SDV($scriptlocation,'scripts'); SDV($wikiformi18n,"wikiform-i18n-$language.php"); if (file_exists("$FarmD/cookbook/$wikiformi18n")) include_once("$FarmD/cookbook/$wikiformi18n"); elseif (file_exists("$FarmD/cookbook/$scriptlocation/$wikiformi18n")) include_once("$FarmD/cookbook/$scriptlocation/$wikiformi18n"); elseif (file_exists("$FarmD/local/$wikiformi18n")) include_once("$FarmD/local/$wikiformi18n"); elseif (file_exists("$FarmD/local/$scriptlocation/$wikiformi18n")) include_once("$FarmD/local/$scriptlocation/$wikiformi18n"); elseif (file_exists("$FarmD/local/$scriptlocation/wikiform-i18n-en.php")) include_once("$FarmD/local/$scriptlocation/wikiform-i18n-en.php"); else include_once("$FarmD/cookbook/$scriptlocation/wikiform-i18n-en.php"); // Publish button format SDV($PublishForm,false); if ($PublishForm) SDV($PublishWikiFormFmt,(($action=='print'||$action=='publish') ? '' : "
$PDFCheckboxFmt$PDFTypesetFmt$PDFOptionsFmt
")); else $PublishWikiFormFmt = ''; // String comparison function SDV($CollateFunction, 'str' . ((@$EnableCollate) ? 'coll' : 'casecmp')); if ($action=='posteform' || $action=='saveeform') { Lock(2); if ($action=='posteform') { $g = SetFormGroup($_REQUEST['n'],$WikiFormPageFmt,$WikiFormGroupFmt); SDV($RecordStartingNumber,0); $record = $RecordStartingNumber; foreach(ListPages("/^$g\\.\\d/") as $i) $record = max(@$record,substr($i,strlen($g)+1)); $pagename = sprintf("$g.%05d",@$record+1); } $action = 'edit'; if (isset($_REQUEST['onsubmit'])) $WikiFormSubmit = $_REQUEST['onsubmit']; else SDV($WikiFormSubmit,'preview'); $_POST[$WikiFormSubmit] = 1; $EditMessageFmt = "

$wikiform_editmessage

"; $_POST['text'] = FormData($pagename,$WikiFormPageFmt); } elseif ($action=='vieweform') { $FmtP['/\\$LastModified/e'] = '$GLOBALS[\'CurrentTime\']'; $action = 'editeform'; $EformAction = 'neweform'; } elseif ($action=='browse') { SDV($FormNavFooter,true); if (preg_match('/[.\\/]\\d{5}$/',$pagename)) { $HandleActions['browse'] = 'HandleBrowseEform'; if ($FormNavFooter) $GroupFooterFmt.= '(:nl:)=>'.FormNavigation($pagename); else $GroupHeaderFmt = '=>'.FormNavigation($pagename).'(:nl:)'. $GroupHeaderFmt; } elseif (str_replace('/','.',$pagename)==FmtPageName($DefaultWikiFormPageFmt,$pagename)) if ($FormNavFooter) $GroupFooterFmt.= "(:nl:)=>[[$pagename?action=vieweform | $wikiform_viewform]]"; else $GroupHeaderFmt = "=>[[$pagename?action=vieweform | $wikiform_viewform]]". "(:nl:)$GroupHeaderFmt"; } SDV($HandleActions['editeform'],'HandleUseEform'); function HandleUseEform($pagename) { global $HandleEformFmt,$EformAction,$PageStartFmt,$PageEformFmt,$PageEndFmt, $WikiFormPageFmt; SDV($HandleEformFmt,array(&$PageStartFmt, &$PageEformFmt, &$PageEndFmt)); SDV($EformAction,'saveeform'); $PageEformFmt = MarkupToHTML($pagename,'(:groupheader:)') . EntryForm($pagename,$EformAction,'post',$WikiFormPageFmt) . MarkupToHTML($pagename,'(:groupfooter:)'); PrintFmt($pagename,$HandleEformFmt); } function FormNavigation($pagename) { global $wikiform_editform; $r = array(); preg_match('/^([^.\\/]+)[.\\/](\\d+)$/',$pagename,$m); $g = $m[1]; $prev = sprintf("%05d",$m[2]-1); if (PageExists("$g.$prev")) $r[] = "« [[($g.)$prev]]"; $r[] = "[[$pagename?action=editeform | $wikiform_editform]]"; $next = sprintf("%05d",$m[2]+1); if (PageExists("$g.$next")) $r[] = "[[($g.)$next]] »"; return implode(' · ',$r); } function SetFormGroup($pagename,$FormPageFmt,$FormGroupFmt) { $i = 0; $prefix = preg_replace("/-.+$/",'',FmtPageName('$Group',$pagename)); foreach ($FormPageFmt as $p) { $pg = FmtPageName($p,$pagename); if (PageExists($pg)) return str_replace('$Prefix',$prefix,FmtPageName($FormGroupFmt[$i],$pg)); $i++; } return ''; } function SetFormTemplate($pagename,$FormPageFmt) { foreach ($FormPageFmt as $p) { $pg = FmtPageName($p,$pagename); if (PageExists($pg)) return $pg; } return ''; } function FormFields($pagename,$FormPageFmt) { global $FormTitleFmt; $formname = SetFormTemplate($pagename,$FormPageFmt); if (!$formname) Abort("cannot associate a form with '$pagename'"); $formpage = ReadPage($formname); $f = array(); $FormTitleFmt = array(); $n = 0; foreach(explode("\n",@$formpage['text']) as $x) { if (preg_match("/^:+([^:]+?):(\\*)?([[:alnum:]]*?)(?:\\s+([^-+\\(]+?))?(?:\\s*\\(([^\\)]*?)\\))?(?:\\s*([-+]\\*?)?)(?:\\s+(\\d[-+]))?$/", $x,$match)) { $f[$n]['eprompt'] = $match[1]; $f[$n]['element'] = ($match[3]) ? $match[3] : preg_replace('/[^[:alnum:]]/','',strtolower($match[1])); if ($match[2]=='*') SDV($FormTitleFmt['csum'], $f[$n]['element']); $f[$n]['etitle'] = str_replace(array('"',"'"),array('"','''),$match[4]); $f[$n]['etype'] = $match[5]; $f[$n]['elist'] = $match[6]; $f[$n]['esum'] = $match[7]; $n++; } elseif (preg_match("/^!+\\s*(.*?)$/",$x,$match)) SDV($FormTitleFmt['title'], $match[1]); elseif (preg_match("/^\\(:submit\\s+(post|preview):\\)/",$x,$match)) SDV($FormTitleFmt['submit'], $match[1]); } return $f; } function FormValues($pagename,$fields,$auth='read') { $fvals = array(); $ferrs = array(); $n = 0; $page = RetrieveAuthPage($pagename, $auth, true, READPAGE_CURRENT); foreach (explode("\n\n:",substr($page['text'],1)) as $p) { preg_match('/^([^:]+):/',$p,$m); $fvals[$fields[$n]['element']] = str_replace('$','$', htmlspecialchars(preg_replace('/^[^:]+:\s*/','',$p),ENT_QUOTES)); $ferrs[$fields[$n]['element']] = ($fields[$n]['eprompt']==$m[1]) ? '' : $m[1]; $n++; } $GLOBALS['PCache'][$pagename]['time'] = $page['time']; return array('fv' => $fvals, 'fe' => $ferrs); } function EntryForm($pagename,$action,$method,$FormPageFmt,$opt=NULL) { global $FormTitleFmt, $FmtP, $Now; $f = FormFields($pagename,$FormPageFmt); if (@$FormTitleFmt['title']) $out[] = MarkupToHTML($pagename, '!%block class=wikiaction%' . $FormTitleFmt['title']); $pageaction = "action='\$ScriptUrl'"; if ($action=='posteform') $pageaction = ''; elseif ($action=='saveeform') { $pageaction = "action='\$PageUrl'"; if (PageExists($pagename)) { $editing = true; $fve = FormValues($pagename,$f); foreach ($fve as $k => $v) $$k = $v; } else $FmtP['/\\$LastModified/e'] = '$GLOBALS[\'CurrentTime\']'; } elseif ($action=='neweform') $action = 'posteform'; $out[] = "
".(($editing) ? "" : '').""; for($i=0;$i$p"; if (@$fe[$f[$i]['element']]) $p.= ' ('.$fe[$f[$i]['element']].')'; $out[] = ""; } $out[] = "
$p:"; if ($f[$i]['etype']=='' || preg_match('/^".*?"$/',$f[$i]['etype'])) $f[$i]['etype'] .= '=54'; if (@$opt[$f[$i]['element']]) { $v = $opt[$f[$i]['element']]; if (preg_match('/^([^\\|]+)\\|(.*?)$/',$v,$m)) { $vv = $m[1]; $vp = $m[2]; } else { $vp = $v; $vv = $v; } $vv = str_replace("'",''',$vv); $out[] = "$vp"; } elseif (preg_match('/^(?:"(.*?)")?=(\\d+)$/',$f[$i]['etype'],$m)) { $default = str_replace("'",''',$m[1]); $col = $m[2]; $out[] = ""; } elseif (preg_match('/^title(?:=(\\d+))?$/', $f[$i]['etype'], $m)) { $default = (isset($_REQUEST['title'])) ? str_replace("'",''',$_REQUEST['title']) : ''; $col = ($m[1]) ? $m[1] : 54; $out[] = ""; } elseif (preg_match('/^text(?:=(\\d+)(?:\\*(\\d+))?)?$/', $f[$i]['etype'], $m)) { $row = ($m[1]) ? $m[1] : 10; $col = ($m[2]) ? $m[2] : 54; $out[] = ""; } elseif (preg_match('/^(\\d+)(?:\\*(\\d+))?$/',$f[$i]['etype'],$m)) { $col = ($m[2]) ? $m[2] : 40; if ($editing) $rows = explode("\\\\\n",$fv[$f[$i]['element']]); for($j=0;$j<$m[1];$j++) { $rows[$j] = (isset($rows[$j])) ? " value='".$rows[$j]."'" : ''; $out[] = ""; } } elseif (preg_match('/^group(?:=(\\d+))?(?:\\s+`?(.*?))$/',$f[$i]['etype'],$m)) { $col = ($m[1]) ? $m[1] : 32; $out[] = "$m[2] "; } elseif (preg_match('/^email(?:=(\\d+)(?:\\s+(\\d+))?)?$/',$f[$i]['etype'],$m)) { $col = ($m[1]) ? $m[1] : 40; $col2= ($m[2]) ? $m[2] : 16; $em = ($editing) ? DeMail($fv[$f[$i]['element']]) : array('','',''); $out[] = "
". "@". ""; } elseif (preg_match('/^(\\*)?author(?:=(\\d+))?$/',$f[$i]['etype'],$m)) { $col = ($m[2]) ? $m[2] : 32; if ($editing) $author = DeLink($fv[$f[$i]['element']]); elseif ($m[1]=='*') $author = FmtPageName('$Author',$pagename); else $author = ''; $out[] = ""; } elseif (preg_match('/^(\\*)?date$/',$f[$i]['etype'],$m)) { if ($editing) $date = ($fv[$f[$i]['element']]) ? $fv[$f[$i]['element']] : 'yyyy-mm-dd'; elseif ($m[1]=='*') $date = strftime('%Y-%m-%d',time()); else $date = 'yyyy-mm-dd'; $y = substr($date,0,4); $m = substr($date,5,2); $d = substr($date,8,2); $out[] = " - ". " - ". ""; } elseif (preg_match('/^category(?:=(\\d+))?$/',$f[$i]['etype'],$m)) { $col = ($m[1]) ? $m[1] : 54; if ($editing) $category = DeLink($fv[$f[$i]['element']]); else $category = ''; $out[] = ""; } elseif (preg_match('/^(\\*)?check\\s*(.*?)$/',$f[$i]['etype'],$m)) { $v = ($m[2]=='') ? 'Yes' : $m[2]; $s = ($m[1]=='*') ? " checked='checked'" : ''; if ($editing) $s = ($v==$fv[$f[$i]['element']]) ? " checked='checked'" : ''; $out[] = ""; } elseif (preg_match('/^hide\\s*(.*?)$/',$f[$i]['etype'],$m)) { $v = ($m[1]=='') ? $f[$i]['element'] : $m[1]; if (preg_match('/\\$[[:upper:]]/',$m[1])) $v = ($action=='posteform') ? str_replace('$Name','{$Name}',$m[1]) : FmtPageName($m[1],$pagename); $v = preg_replace('/(:f?para\s[^:]+:)/', '($1)', $v); if (preg_match('/^([^\\|]+)\\|(.*?)$/',$v,$m)) { $vv = $m[1]; $vp = $m[2]; } else { $vp = $v; $vv = $v; } $out[] = ($v) ? "$vp" : 'none'; } elseif (strstr($f[$i]['etype'],',')) { $out[] = ""; } elseif (strstr($f[$i]['etype'],';')) { $checked = false; foreach(explode(';',$f[$i]['etype']) as $c) { $s=''; $c = htmlspecialchars(trim($c),ENT_QUOTES); if ($c[0]=='*') { $c = substr($c,1); if (!$checked) $s = " checked='checked'"; $checked = true; } if (preg_match('/^([^\\|]*)\\|(.*?)$/',$c,$m)) { $cv = trim($m[1]); $cp = trim($m[2]); } else { $cv = trim($c); $cp = $cv; } if ($editing) $s = ($cv==$fv[$f[$i]['element']]) ? " checked='checked'" : ''; $out[] = "$cp "; } } elseif (strstr($f[$i]['etype'],':')) { if ($f[$i]['etype'][0]=='!') { $f[$i]['etype'] = substr($f[$i]['etype'],1); if ($editing) $fv[$f[$i]['element']] = DeLink($fv[$f[$i]['element']]); } foreach(explode(':',$f[$i]['etype']) as $c) { $s=''; $c = htmlspecialchars(trim($c),ENT_QUOTES); if ($c[0]=='*') { $c = substr($c,1); $s = " checked='checked'"; } if ($editing) $s = (strstr($fv[$f[$i]['element']],$c))?" checked='checked'":''; $out[] = "$c "; } } $out[] = "
 "; if (@$FormTitleFmt['submit']) $out[] = ""; $out[] = FmtPageName("", $pagename); if ($action!='posteform') $out[] = ""; $out[] = "
"; return implode("\n",$out); } function DeTitle($text) { return preg_replace("/\\n\\(:title.*?:\\)/",'',$text); } function DeLink($text) { return preg_replace('/\\[\\[([!~]|.*?\\/)/','',str_replace(']]','',$text)); } function DeMail($text) { if ($text[0]=='[') preg_match('/^\\[\\[(.*?)\\s->\\smailto:([^@]+)@([^\\]]+)\\]\\]$/', $text, $m); else preg_match('/^(.*?)\\s\\(([^@]*)@([^\\)]*)\\)$/',$text,$m); for ($j=1;$j<4;$j++) $r[] = " value='".$m[$j]."'"; return $r; } function FormData($pagename,$FormPageFmt) { global $UrlExcludeChars, $FormTitleFmt, $ChangeSummary; $f = FormFields($pagename,$FormPageFmt); for($i=0;$i mailto:$em]]" : $_REQUEST[$f[$i]['element'].'name']." ($em)"; } elseif (preg_match('/^hide/',$f[$i]['etype'])) { $v = $_REQUEST[$f[$i]['element']]; } elseif (strstr($f[$i]['etype'],':')) @$v = ($f[$i]['etype'][0]=='!') ? str_replace('[[!]]','', '[[!'.implode(']], [[!',$_REQUEST[$f[$i]['element']]).']]') : implode(', ',$_REQUEST[$f[$i]['element']]); else $v = $_REQUEST[$f[$i]['element']]; $text[] = ':'.$f[$i]['eprompt'].':'.$v; } if (isset($FormTitleFmt['csum'])) { $_POST['csum'] = $_REQUEST[$FormTitleFmt['csum']]; $ChangeSummary = stripmagic($_REQUEST[$FormTitleFmt['csum']]); } return implode("\n\n",$text); } function WikiformPrompt($f,$element) { for($i=0;$i" . (($pagenumber) ? "". "$wikiform_page" : '')); for($i=0;$i".$f[$i]['eprompt'].''); } } if (@$elist['lastmodified']) { $lastmodified = true; if (preg_match('/^([-+])(\\*)$/',$elist['lastmodified'],$m)) $elist['lastmodified'] = $m[1]; $o = ($elist['lastmodified']=='-') ? '-' : ''; if ($oelement=='lastmodified') { $o = $otoggle; $oeprompt = $wikiform_lastmod; } if ($m[2]) $order .= ','.$o.'lastmodified'; $out[] = Keep("$wikiform_lastmod"); } if ($score) { $o = ($oelement=='score') ? $otoggle : '-'; if ($oelement=='score') $oeprompt = $wikiform_score; $out[] = Keep("$wikiform_score"); } $order.= ',name'; $out[] = ''; if ($caption=='') $caption = $wikiform_allitems; $out[1] = str_replace('$Caption',"$wikiform_select $caption",$out[1]); $n = 0; $elist = array(); foreach($entrylist as $e) { $page = ReadPage($e); preg_match_all("/\n:([^:]+):([^\n\\\\]*)/","\n".$page['text'],$match); $fields = array(); $sum = 0; for($i=0;$i 'edit', 'form' => 'editeform'); $a = (@$opt['page']) ? '(?action='.$PageActions[$opt['page']].')' : ''; foreach($elist as $e) { $out[] = ''.(($pagenumber) ? '[['.$e['name']."$a]]" : ''); foreach($cols as $c) { $cell = (@$e[$c]) ? $e[$c] : ' '; if ($c==$tcol) $cell = "[[{$e['name']} | $cell]]"; $out[] = "$cell"; } if ($lastmodified) $out[] = ''.$e['lastmodfmt'].''; if ($score) $out[] = ''.$e['score'].''; $out[] = ''; $matches[] = $e['name']; } $out[] = ''; if (count($matches)) $out[]='

'.count($matches)." $wikiform_matches

"; $FmtV['$Pages'] = implode('+',$matches); $FmtV['$PSort'] = $oeprompt; $pbutton = Keep(FmtPageName($PublishWikiFormFmt,$pagename)); if ($PublishForm==2) array_unshift($out,$pbutton); elseif ($PublishForm) $out[] = "$HTMLVSpace\n$pbutton"; return $search . ((count($matches)) ? implode("\n",$out) : "

$wikiform_nomatches

"); } function FirstDigit($value,$shift) { return (preg_match('/^(\\d)/',$value,$m)) ? $m[1] - $shift : 0; } # this is a piece of incomprehensible Pm code for more efficient sorting function CreateOrderFunction($order) { global $CollateFunction; $code = ''; foreach(preg_split('/[\\s,|]+/',$order,-1,PREG_SPLIT_NO_EMPTY) as $o) { $r = ''; if ($o[0]=='-') { $r = '-'; $o = substr($o,1); } if (preg_match('/\\W/',$o)) continue; $code .= "\$c=$CollateFunction(@\$x['$o'],@\$y['$o']); if (\$c!=0) return $r\$c;\n"; } $code .= "return 0;\n"; return create_function('$x,$y',$code); } function FormParaText($prompts, $values, $prompt) { for($i=0;$i $v) $$k = $v; $template = RetrieveAuthPage($ViewTemplate, $auth, true, READPAGE_CURRENT); $text = $template['text']; for($i=0;$i', $fv[$f[$i]['element']], $text); $text = '(:groupheader:)'.@$text.'(:groupfooter:)'; $FmtV['$PageText'] = MarkupToHTML($pagename,$text); SDV($HandleBrowseFmt,array(&$PageStartFmt,'$PageText',&$PageEndFmt)); PrintFmt($pagename,$HandleBrowseFmt); } else HandleBrowse($pagename, $auth); } ?>