<?php if (!defined('PmWiki')) exit();
/*
This file is SetPageTextVariable.php; you
can redistribute it and/or modify it under the
terms of the GNU General Public License as
published by the Free Software Foundation
http://www.fsf.org either version 2 of the 
License, or (at your option) any later version.

Copyright 2006 GNUZoo (guru@gnuzoo.org)

	http://www.pmwiki.org/wiki/Profiles/GNUZoo

Please donate to the author:

	http://gnuzoo.org/GNUZooPayPal/

*/

$RecipeInfo['SetPageTextVariable']['Version'] = '1.1';

function SetPageTextVariable($pagename, $ptv, $val) {
	Lock(2);
	# read pagetextvariable to see if it exists or is already set
	$d = PageTextVar($pagename, $ptv);

	# already set
	if ($d === $val) { Lock(0); return; }

	$originalpage = ReadPage($pagename);
	$newpage = $originalpage;
	$originaltext = $originalpage['text'];
	$text = $originaltext;

	if ($d === "" | $d === NULL) {
		# not set
		$text .= "\n(:$ptv:$val:)";
	} else {
		# form (:Name:Value:)
		$text = preg_replace("/\\(: *$ptv *:(?!\\))\\s?(.*?):\\)/s","(:$ptv:$val:)", $text, 1);
		# form :Name: Value
		if ($text === $originaltext) {
		# form :Name: Value
			$text = preg_replace("/^:+$ptv:[ \\t]?(.*)$/m",":$ptv: $val", $text, 1);
			if ($text === $originaltext) {
				# form Name: Value
				$text = preg_replace("/^$ptv:[ \\t]?(.*)$/m", "$ptv: $val", $text, 1);
				if ($text === $originaltext) {
					# no value changed
					Lock(0);
					return;
				}
			}
		}
	}

	# save page
	$newpage['text'] = $text;
	UpdatePage($pagename, $originalpage, $newpage);
	Lock(0);
}