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

$FmtPV['$ZAPfilesversion'] = "'November 20, 2006'";

## DESCRIPTION:  ZAPplus extends the ZAPdata recipe, by adding the ability to create/destroy pages (templated), upload files using PmWiki's internal functions, and send emails to a list of email addresses, or a list of member names. For more info, see http://www.pmwiki.org/wiki/Cookbook/ZAPdata, or visit the ZAP demo site at WWW.ZAPSITE.ORG.  Author: Dan Vis aka Caveman <editor àt fast döt st>, Copyright 2006.  License http://www.gnu.org/licenses/gpl.html GNU General Public License

SDV($ZAPmodule[files], " create destroy upload log ");

function ZAPfiles($field, $value) {
	global $WorkDir, $WikiDir, $pagename, $MessagesFmt, $m, $lock;

	if($lock != "nolock") {

		if (($field == "create") and ($value != "")) {
			$pagetext = ZAPtemplate("page")  . " \n\n";
			if ($pagetext == false) $pagetext = "";
			if ((isset($_POST[createdata])) && ($_POST[createdata] != "")) {
				$pagedata = ZAPsetdata($_POST[createdata]);
				}
			else $pagedata = "";
			$p = explode(",", $value);
			foreach($p as $pp) {
				$pp = ZAPfixpage($pp);
				if (! PageExists($pp)) {
					ZAPsavepage($pp, $pagetext, $pagedata);
					$m .= "Page $pp has been created. ";
					}	
				else $m .= "Page $pp already exists.  Could not be created. ";
				}
			}

		if (($field == "destroy") && ($value != "")) {
			$p = explode(",", $value);
			foreach($p as $pp) {
				$pp = ZAPfixpage($pp);
				if (($pp != $pagename) && (PageExists($pp))) {
					$oldpage = ReadPage($pp);
					$newpage = $oldpage;
					$newpage['text'] = "delete";
					UpdatePage($pp, $oldpage, $newpage);
					$m .= "Page $pp has been deleted. ";
					}
				else $m .= "Page $pp does not exist or could not be deleted. ";
				}
			}

		if ($field == "log") ZAPlog($field, $value);

		if ($field == "upload") {
			if (($_POST['uploadfile'] != "") && ($_POST['upname'] != "")) HandlePostUpload($pagename);
			else $m .= "Missing fields required for upload feature.";
			}
	}

	return;
	}
	

function ZAPlog($field, $value) {
	global $m, $_POST;
	$entry = $_POST[$field . "entry"];
	$v = explode(",", $value);
	foreach ($v as $logpage) {
		if (strpos($logpage, "|")) {
			$logflags = substr($logpage, strpos($logpage, "|"));
			$logpage = substr($logpage, 0, strpos($logpage, "|"));
			}
		else $logflags = "";
		$oldlogpage = ReadPage($logpage);
		$newlogpage = $oldlogpage;
		$newlogpage[text] = substr($newlogpage[text], 3, -3);
		if (strpos($logflags, "prepend")) {
			$m .= "test";
			$newlogpage[text] = $entry . "\n" . $newlogpage[text];
			}
		else $newlogpage[text] = $newlogpage[text] . "\n" . $entry;
		if ($logflags != "") {
			$log = explode("\n", $newlogpage[text]);
			if (strpos($logflags, "sort")) {
				natcasesort($log);
				$log = array_unique($log);
				}
			if (strpos($logflags, "delete")) {
				foreach ($log as $x => $xx) {
					if ($xx == $entry) unset($log[$x]);
					}
				}
			if ((strpos($logflags, "trim")) && (isset($_POST[$field . "trim"])) && (count($log) > $_POST[$field . "trim"])) {
				$log = array_slice($log, 0, $_POST[$field . "trim"]);	
				$_POST[$field . "trim"] = "True";						
				}
			$newlogpage[text] = implode("\n", $log);
			}
		$newlogpage[text] = "[@\n" . $newlogpage[text] . "\n@]";
		UpdatePage($logpage, $oldlogpage, $newlogpage);
		}
	$m .= "Entry has been successfully saved. ";
	}