<?php if (!defined('PmWiki')) exit();

$RecipeInfo['ZAPMarkups']['Version'] = '2007-04-11';

## DESCRIPTION:  Several ZAP Markup Expression extensions available for use without ZAP.  Do not use if you have ZAP toolbox enabled on your system!  For info, see docs at http://www.pmwiki.org/wiki/Cookbook/ZAPMarkups, or visit the ZAP demo site at WWW.ZAPSITE.ORG.  Author: Dan Vis  <editor àt fast döt st>, Copyright 2006.  

## LICENSE:  You can redistribute this software 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.

Markup('textarea', 'inline', '/\\(:textarea (.*?):\\)/e', "Keep('<textarea '.PQA(PSS('$1')).' class=inputbox>')");
Markup('textareaend', 'inline', '/\(:textareaend:\\)/', '</textarea>');
$MarkupExpr['source'] = 'ZAPMsource($args[0])';
function ZAPMsource($p) {
	global $pagename;
	if (substr($p, 0, 1) != "+") $t = "</textarea>";
	else $p = substr($p, 1);
	if ($p == '') $p = $pagename;
	if (strpos($p, "#ID")) {
		$a = "[[" . substr($p, strpos($p, "#ID")) . "]]";
		$p = substr($p, 0, strpos($p, "#ID"));
		}
	if (!CondAuth($pagename, $HandleAuth['source'])) return;
	$page = ReadPage($p);
	$source = $page['text'];
	if ($a != '') {
		$source = substr($source, strpos(" $source", $a) - 1);
		if (strpos(substr($source,5), "[[#ID")) $source = substr($source, 0, strpos(substr($source,5), "[[#ID") + 5);
		}
	if ($t != "</textarea>") return Keep(substr($source, strlen($a)));
	return Keep(substr("$source$t", strlen($a)));
	}

$MarkupExpr['attr'] = 'ZAPMattr($args[0], $args[1])';
function ZAPMattr($attr, $page) {
	global $pagename;
	if ((!CondAuth($pagename, "admin")) && (substr($attr, 0, 6) == "passwd")) break;
	if (($attr == 'title') || ($attr == 'keywords') || ($attr == 'description') || (substr($attr, 0, 6) == "passwd") ) {
		if ($page == '') $page = $pagename;
		$page = ReadPage($page);
		return $page[$attr];
		}			
	return false;
	}

$MarkupExpr['random'] = 'rand($args[0], $args[1])';

$MarkupExpr['server'] = 'ZAPMserver($args[0])';
function ZAPMserver($p) {
	if ($p == "return") return substr($_SERVER[HTTP_REFERER], strpos($_SERVER[HTTP_REFERER], "?n=") + 3);
	if ($p == "browser") return $_SERVER[HTTP_USER_AGENT];
	if ($p == "secure") return $_SERVER[HTTPS];
	if ($p == "ip") return $_SERVER[REMOTE_ADDR];
	if ($p == "host") return $_SERVER[SERVER_NAME];
	if ($p == "software") return $_SERVER[SERVER_SOFTWARE];
	if ($p == "query") return $_SERVER[QUERY_STRING];
	return false;
	}

$MarkupExpr['math'] = 'ZAPMmath($args[0])';
function ZAPMmath($p) {
	global $ZAPmath;
	if ($p == '') break;
	if (!preg_match($ZAPmath, $p)) break;
	eval("\$r = $p;");
	return $r;
	}

$MarkupExpr['wiki'] = 'ZAPMwiki($params)';
SDV($ZAPdirectives, 'table,tableend,cell,cellnr,include,if,pagelist,input,messages,redirect,title');
SDV($ZAPformdirectives, false);
function ZAPMwiki($p) {
	global $ZAPdirectives, $ZAPformdirectives;
	$c = substr($p, 0, strpos($p, " "));
	$p = substr($p, strpos($p, " "));
	$pmlist = explode(",", $ZAPdirectives);
	if (in_array($c, $pmlist)) return stripslashes("(:$c $p:)");
	if ((substr($c, 0, 3) == 'zap') && ($ZAPformdirectives == true)) return stripslashes("(:$c $p:)");
	return false;
	}
	
$MarkupExpr['count'] = 'ZAPMcount($args[0], $args[1])';
SDV($ZAPexclude, 'RecentChanges,GroupHeader,GroupFooter,GroupAttributes,SideBar,SideMenu');
function ZAPMcount($g, $x) {
	global $ZAPexclude, $pagename;
	if ($g == '') $g = substr($pagename, 0, strpos($pagename, "."));;
	if ($x != '') $ZAPexclude .= "," . $x;
	$count = count(ListPages("/^$g\./"));
	if (substr($ZAPexclude, -3) == "all") return $count;
	$ex = explode(",", $ZAPexclude);
	foreach($ex as $exx) {
		if (PageExists("$g.$exx")) $count = $count - 1;
		}
	return $count;
	}

$MarkupExpr['thread'] = 'ZAPMthread($args[0])';
SDV($ZAPthreadstart,'1000');
function ZAPMthread($p) {
	global $ZAPthreadstart;
	if ($p == '') $p = $g;
	$e = $ZAPthreadstart - 1;
	$gg = explode(",", $p);
	foreach($gg as $ggg) {
	foreach(ListPages("/^$ggg\\.\\d/") as $n) {
		$n = substr($n,strlen($ggg)+1);
		if (! ereg("^[0-9]+$", $n)) continue;
		$e = max($e,$n);
		}
	}
	$e = $e + 1;
	return $e;
	}

$MarkupExpr['captcha'] = 'ZAPMcaptcha($args[0])';
SDV($ZAPcaptcha, '');
function ZAPMcaptcha($p) {
	global $ZAPcaptcha;
	if ($ZAPcaptcha != '') return $ZAPcaptcha;
	if ($p == '') {
		$rr[0] = 10000;
		$rr[1] = 99999;
		}
	else $rr = explode("|", $p);
	$rrr = rand($rr[0], $rr[1]);
	$ZAPcaptcha = $rrr;
	return $ZAPcaptcha;
	}

$MarkupExpr['list'] = 'ZAPMlist($args[0], $args[1])';
function ZAPMlist($l, $x) {
	if ($l == '') return;
	$ll = explode(",", $l);
	$xx = explode("^", $x);
	foreach($ll as $lll) $list .= str_replace('{item}', $lll, $xx[0]) . $xx[1];
	$list = substr($list, 0, - strlen($xx[1]));
	return $list;
	}