* @license http://www.gnu.org/licenses/gpl.html GNU General Public License */ # Action for activating this recipe $HandleActions['data'] = 'Data'; # Function called by action = data function Data() { global $WorkDir, $WikiDir, $pagename, $Version; $nextpage = $pagename; $datapage = "Data-$pagename"; // default value for data page. $datamembers = "Data-Member"; // default group for user accounts. $pagecreated = "false"; $count = "1000"; // start value for enumerator function. $r1 = array('%',"\n", '<'); $r2 = array('%25','%0a','%3c'); $m = ""; // holds system messages. foreach ($_POST as $field => $value) { switch ($field) { case "NextPage" : if (substr($value, 0, 1) == "*") { $n = explode(".", substr($value, 1)); $value = $n[0] . "." . $_POST[$n[1]]; } $nextpage=FmtPageName($value, $pagename); break; case "DataPage" : if (substr($value, -2, 2) == ".#") { $g = substr($value, 0, strlen($value)-2); // $g = group foreach(ListPages("/^$g\\.\\d/") as $n) { $n = substr($n,strlen($g)+1); $count = max($count,$n+1); } $value = $g . "." . $count; } $datapage=FmtPageName($value, $pagename); break; case "Required" : $required = true; $r = explode(",", $value); // $r = required fields foreach ($r as $f => $v) { switch ($v) { case "NewMember" : if ($_POST[$v] == "") Warning("No member name entered. Please try again."); if (PageExists("$datamembers.$_POST[$v]")) Warning("Member name already taken. Please try again."); if ($_POST[$v] != PageVar(MakePageName($pagename, $_POST[$v]), '$Name')) Warning("Invalid member name. Please try again."); break; case "Member" : if (! PageExists("$datamembers.$_POST[$v]")) Warning("Member name does not exist. Please try again."); break; case "Email" : if (!ereg("^.+@.+\..+$", $_POST[$v])) Warning("Invalid email address entered."); $_POST[Email] = str_replace("@", " (at) ", $_POST[Email]); break; default : if ($_POST[$v] == "") Warning("Field \"$v\" required. Please try again."); break; } } break; case "Count" : $_POST[$field] = $_POST[$field] + 1; break; case "LogCount" : $_POST[$field] = "[[#Data$_POST[Count]]]"; break; case "FormLink" : $_POST[$field] = "[[$pagename]]"; break; case "DataNotes" : $d = explode(",", $value); foreach ($d as $f => $v) { $nextpage .= "?$v=$_POST[$v]"; } break; case "SaveData" : if (substr($datapage, 0, 4) != "Data") { Warning("Invalid Data page."); break; } $data = ''; $d = explode(",", $value); foreach ($d as $f => $v) { $vv = str_replace($r1, $r2, $_POST[$v]); $data .= "$v=\"$vv\" %0a%0a"; } if ((PageExists("$datapage")) or ($pagecreated == "true")) { $dr = fopen("$WorkDir/$datapage", "rb"); $pc = fread($dr, filesize("$WorkDir/$datapage")); fclose($dr); $dc = explode("(:comment data:) %0a%0a", $pc); } else { $dc[1] = ""; $dc[2] = "[[#Data]] %0a%0a"; $pagecreated = "true"; } $time = time(); $dc[0] ="version=$Version ordered=1 urlencoded=1 author=$_POST[Author] text=(:Title $_POST[DataTitle]:)"; $dc[1] = $data; $pc = "$dc[0](:comment data:) %0a%0a$dc[1](:comment data:) %0a%0a$dc[2](:comment data:) %0a%0a time=$time title=$_POST[DataTitle]"; if ($ds = fopen("$WorkDir/$datapage", "wb")){ fwrite($ds,"$pc"); fclose($ds); PageIndexUpdate("$datapage"); $m .= "Data has been successfully saved. "; } break; case "LogData" : if (substr($datapage, 0, 4) != "Data") { Warning("Invalid Data page."); break; } $data = ''; $prepend = substr($value, 0, 1); if ($prepend == "<") $value = substr($value, 1); $d = explode(",", $value); foreach ($d as $f => $v) { $vv = str_replace($r1, $r2, "$_POST[$v]"); $data .= "$vv %0a"; } if ((PageExists("$datapage")) or ($pagecreated == "true")) { $dr = fopen("$WorkDir/$datapage", "rb"); $pc = fread($dr, filesize("$WorkDir/$datapage")); fclose($dr); $dc = explode("(:comment data:) %0a%0a", $pc); } else { $dc[1] = ""; $dc[2] = "[[#Data]] %0a%0a"; $pagecreated = "true"; } $time = time(); $dc[0] ="version=$Version ordered=1 urlencoded=1 author=$_POST[Author] text=(:Title $_POST[DataTitle]:)"; if ($prepend == "<") $dc[2] = "[[#Data]] %0a%0a" . $data . substr($dc[2], 16); else $dc[2] .= $data; $pc = "$dc[0](:comment data:) %0a%0a$dc[1](:comment data:) %0a%0a$dc[2]%0a(:comment data:) %0a%0a time=$time title=$_POST[DataTitle]"; if ($ds = fopen("$WorkDir/$datapage", "wb")){ fwrite($ds,"$pc"); fclose($ds); PageIndexUpdate("$datapage"); $m .= "Data log successfully updated. "; } break; case "EmailData" : $data = ''; if ($_POST[EmailTo] == "") Warning("No email \"to\" value entered. Email not sent."); if ($_POST[EmailFrom] == "") Warning("No email \"from\" value entered. Email not sent."); if ($_POST[Subject] == "") Warning("No email subject entered. Email not sent."); $d = explode(",", $value); foreach ($d as $f => $v) { if (substr($v,0,1) == '-' ) { $v = substr($v,1); $data .= "$_POST[$v] "; } else { $data .= "$v = $_POST[$v] "; } } if ($data == "") Warning("No contents in message. Email not sent."); $EmailTo = str_replace(" (at) ", "@", $_POST[EmailTo]); $EmailFrom = str_replace(" (at) ", "@", $_POST[EmailFrom]); mail($EmailTo, $_POST[Subject], $data, "From: $EmailFrom"); $m .= "Mail successfully sent to \"$_POST[EmailTo]\". "; break; case "Delete" : if (substr($datapage, 0, 4) != "Data") { Warning("Invalid Data page."); break; } if ($_POST[Delete] == "Page") { if (PageExists("$datapage")) { $WikiDir->delete($datapage); $m .= "Data page has been successfully deleted. "; break; } else Warning("Data not found. Page not deleted."); } if ($_POST[Delete] == "Data") { if (PageExists("$datapage")) { $dr = fopen("$WorkDir/$datapage", "rb"); $pc = fread($dr, filesize("$WorkDir/$datapage")); fclose($dr); $dc = explode("(:comment data:) %0a%0a", $pc); $dc[1] = ""; $pc = "$dc[0](:comment data:) %0a%0a$dc[1](:comment data:) %0a%0a$dc[2](:comment data:) %0a%0a"; $ds = fopen("$WorkDir/$datapage", "wb"); fwrite($ds,"$pc"); fclose($ds); PageIndexUpdate("$datapage"); $m .= "Data fields have been successfully deleted. "; break; } else Warning("Data not found. Data values not deleted."); } if ($_POST[Delete] == "Log") { if (PageExists("$datapage")) { $dr = fopen("$WorkDir/$datapage", "rb"); $pc = fread($dr, filesize("$WorkDir/$datapage")); fclose($dr); $dc = explode("(:comment data:) %0a%0a", $pc); $dc[2] = "[[#Data]] %0a%0a"; $pc = "$dc[0](:comment data:) %0a%0a$dc[1](:comment data:) %0a%0a$dc[2](:comment data:) %0a%0a"; $ds = fopen("$WorkDir/$datapage", "wb"); fwrite($ds,"$pc"); fclose($ds); PageIndexUpdate("$datapage"); $m .= "Data log has been successfully deleted. "; break; } else Warning("Data not found. Log not deleted."); } break; case "Check" : break; case "Login" : if (($value == "auto") and (! PageExists("$datamembers.$_POST[Member]"))) { AuthUserId($pagename, $_POST['Member']); $m .= "You have been successfully logged in. "; break; } if ($dr = fopen("$WorkDir/$datamembers.$_POST[Member]", "rb")){ $pc = fread($dr, filesize("$WorkDir/$datamembers.$_POST[Member]")); fclose($dr); $dc = explode("(:comment data:) %0a%0a", $pc); $db = explode(" %0a%0a", $dc[1]); $dv = explode ("=", $db[1]); $pass1 = substr(urlencode(stripslashes($dv[1])),3,-3); $pass2 = $_POST['Password']; if ($pass1 == $pass2) { AuthUserId($pagename, $_POST['Member']); $m .= "You have been successfully logged in. "; break; } Warning("Incorrect member name or password."); } break; } } $MessagesFmt[] = "
$[$m]
"; if ($nextpage == $pagename) { HandleBrowse($pagename); } else Redirect(FmtPageName($nextpage, $pagename)); } # Function to return error messages function Warning($m) { global $pagename, $MessagesFmt; $MessagesFmt[] = "
$[$m]
"; HandleBrowse($pagename); die(); } # Markups for pulldown menu's and textarea's Markup('select', 'inline', '/\(:select (.*?):\\)/', ''); Markup('textarea', 'inline', '/\(:textarea (.*?):\\)/', ''); # To make a separate data-read recipe, move this section out. # * @license http://www.gnu.org/licenses/gpl.html GNU General Public License */ # Directive to retrieve data from another page Markup('fastdata', '<{$var}', '/\(:data(.*?):\)/ei', "ReadData('$1')"); # Function called by directive to retrieve form data function ReadData($l) { $passcode = ""; // set this to require passcode to read data if (($passcode != "") and (substr($l, strlen($l)-strlen($passcode)-1)) != "|$passcode") return "data access denied"; if ($passcode != "") $l = substr($l, 0, strlen($l)-strlen($passcode)-1); global $WorkDir, $FmtPV, $pagename; $r1 = array('%',"\n"); $r2 = array('%25','%0a'); $datapage = substr($l, 1); if (substr($datapage, -2, 2) == ".*") { $name = explode(".", $pagename); $datapage = substr($datapage,0,strlen($datapage)-1) . $name[1]; } if (substr($datapage, 0, 4) != "Data") { return "invalid data parameter"; } if (PageExists("$datapage")) { $dr = fopen("$WorkDir/$datapage", "rb"); $pc = fread($dr, filesize("$WorkDir/$datapage")); fclose($dr); $dc = explode("(:comment data:) %0a%0a", $pc); $db = explode(" %0a%0a", $dc[1]); $i = 0; while ($i < count($db)-1) { $dv = explode ("=", $db[$i]); $value = stripslashes("$dv[1]"); $value = str_replace($r2, $r1, $value); $FmtPV["$$dv[0]"] = $value; $i = $i + 1; } return; } return "data not found"; }