* @license http://www.gnu.org/licenses/gpl.html GNU General Public License */ SDV($DataKey, "Data-"); ## DATA FORM ENGINE $HandleActions['data'] = 'Data'; function Data() { global $WorkDir, $WikiDir, $pagename, $DataKey, $ScriptUrl, $data, $log, $ts, $MessagesFmt, $m; $m = ""; // holds system messages. $data = ""; $log = ""; $ts = time(); $nocode = array('"', "'", '%0D'); $encode = array('"', ''', '%0a'); if (!isset($_POST[nextpage]) || $_POST[nextpage] = "") $_POST[nextpage] = $pagename; if (!isset($_POST[datapage]) || $_POST[datapage] = "") $_POST[datapage] = $pagename; foreach ($_POST as $field => $value) { ## PAGE FIELDS if (substr($field, -4, 4) == "page") { if ($value != "") $_POST[$field] = FixPage($_POST[$field]); if ($field == "linkpage") $_POST[linkpage] = "$ScriptUrl?n=$_POST[linkpage]"; } if (substr($field, 0, 7) == "datakey") $DataKey = $field; if (substr($field, 0, 8) == "makepage") { $contents = ""; $s = explode("|", $_POST[$field]); if (isset($s[1])) $contents = GetTemplate("page",$s[1]); if (! PageExists($s[0])) { $page['text'] = $contents; $page['title'] = $_POST[title]; Lock(2); WritePage($s[0], $page); Lock(0); PageIndexUpdate($s[0]); $m .= "Page $s[0] created."; } else "Page $s[0] already exists. Could not be created"; } ## MISC FIELDS if (substr($field, 0, 5) == "count") { if (substr($_POST[$field], 0, 1) == "=") $_POST[$field] = substr($_POST[$field], 1); else $_POST[$field] = $_POST[$field] + 1; } if (substr($field, 0, 6) == "random") { $n = explode("|", $value); $_POST[$field] = rand($n[0],$n[1]); } if ($field == "timestamp") $_POST[$field] = $ts; if (substr($field, -3, 3) == "fmt") { switch ($value) { case "date" : $_POST[$field] = strftime("%B %d, %Y", $_POST[substr($field, 0, -3)]); break; case "time" : $_POST[$field] = strftime("%c", $_POST[substr($field, 0, -3)]); break; } } if (substr($field, 0, 8) == "messages") $m = $_POST[$field]; ## DATA FUNCTIONS if (substr($field, 0, 8) == "passdata") { $d = explode(",", $value); foreach ($d as $f => $v) { $_POST[nextpage] .= "?$v=$_POST[$v]"; } } if (substr($field, 0, 7) == "getdata") { $g = explode(",", $value); foreach ($g as $f => $v) { $_POST[$v] = GetData("$DataKey$_POST[datapage]",$v); } } if (substr($field, 0, 8) == "savedata") { if ((PageExists("$DataKey$_POST[datapage]")) or ($pagecreated == "true")) GetPage("$DataKey$_POST[datapage]"); else $pagecreated = "true"; $data = ""; $d = explode(",", $value); foreach ($d as $f => $v) { $vv = urldecode(str_replace($nocode, $encode, urlencode($_POST[$v]))); $data .= "$v=\"$vv\" \n\n"; } SetPage("$DataKey$_POST[datapage]"); $m .= "Data has been successfully saved. "; } ## LOG FUNCTIONS if (substr($field, 0, 7) == "savelog") { if (PageExists("$DataKey$_POST[datapage]")) GetPage("$DataKey$_POST[datapage]"); $newlog = ""; $prepend = substr($value, 0, 1); if ($prepend == "<") $_POST[$field] = substr($value, 1); if (!isset($_POST[logpage])) $_POST[logpage] = $nextpage; if (isset($_POST[logtemplate])) $newlog = GetTemplate("log",$field); else { $rb1 = array(':','.','{log}','{delete}','{author}','{admin}'); $rb2 = array('[==]','[[<<]] \n','{log}','{delete}','{author}','{admin}'); $d = explode(",", $value); foreach ($d as $f => $v) { if (in_array($v, $rb1)) $newlog .= str_replace($rb1, $rb2, $v); else $newlog .= "$_POST[$v] \n"; } } $re1 = array('{log}','{delete}','{author}','{admin}'); $re2 = array('[[#Log$ts]]','(:input form:)(:input hidden action data:)(:input hidden datapage "$DataKey$_POST[datapage]":)(:input hidden id "$ts":)(:input hidden update log:)(:input submit value="Delete":)(:input end:)','(:if authid $GLOBALS[AuthId]:)[[$logpage?update=author&id=$ts|Update]](:if:)','(:if auth admin:)[[$logpage?update=admin&id=$ts|Update]](:if:)'); $newlog .= str_replace($re1, $re2, $newlog); if ($prepend == "<") $log = $newlog . "\n" . $log; else $log = $log . $newlog . "\n"; SetPage("$DataKey$_POST[datapage]",$contents); $m .= "Log has been successfully saved. "; } if (substr($field, 0, 9) == "updatelog") { GetPage("$DataKey$_POST[datapage]"); $entry = explode("[[#Log", $log); foreach ($entry as $e => $ee) { if (substr($value, 0, 4) != "trim") { if (substr($entry[$e], 0, 10) == $_POST['id']) { if ($value == "remove") unset($entry[$e]); if ($value == "update") { $t = explode("[==]", $entry[$e]); $t[1] = $_POST[newlog]; $entry[$e] = implode("[==]", $t); } } } elseif (($ts - substr($entry[$e], 0, 10)) > (substr($value, 4) * 86400)) unset($entry[$e]); } $log = "[[#Log" . implode("[[#Log", $entry); SetPage("$DataKey$_POST[datapage]"); } ## EMAIL FUNCTIONS if ($field == "emailto") { $list = explode(",", $value); foreach ($list as $l => $ll) { if ($list[$l] == "self") $list[$l] = $_POST[emailfrom]; if (substr($list[$l], 0, 5) == "list:") { $m .= "hi: " . GetList(substr($list[$l], 5)); $list[$l]= GetList(substr($list[$l], 5)); } } $_POST[emailto] = implode(",", $list); } if (substr($field, 0, 9) == "emailer") { $emailbody = ''; if ($_POST[emailto] == "") Warning("No recipient designated. Email not sent."); if ($_POST[emailfrom] == "") Warning("No return address entered. Email not sent."); if ($_POST[emailsubject] == "") Warning("No email subject entered. Email not sent."); if (isset($_POST[emailtemplate])) $emailbody = GetTemplate("email",$field); else { $d = explode(",", $value); foreach ($d as $f => $v) { if (substr($v,0,1) == '-' ) { $v = substr($v,1); $emailbody .= "$_POST[$v] \n\n"; } else { $emailbody .= "$v = $_POST[$v] \n\n"; } } } if ($emailbody == "") Warning("No contents in message. Email not sent."); $list = explode(",", $_POST[emailto]); foreach ($list as $to) { if (ereg("^.+@.+\..+$", $to)) mail($to, $_POST[emailsubject], $emailbody, "From: $_POST[emailfrom]"); } $m .= "Mail successfully sent. "; } ## SPECIAL FUNCTIONS if (substr($field, 0, 6) == "delete") { if (PageExists("$DataKey$_POST[datapage]")) { if (substr($_POST[delete], 0, 4) == "page") { if (substr($_POST[delete], 4, 1) == ":") $WikiDir->delete(substr($_POST[delete],5)); else $WikiDir->delete("$DataKey$_POST[datapage]"); $m .= "Page has been deleted. "; } if ($_POST[delete] == "data") { GetPage("$DataKey$_POST[datapage]"); $data = ""; SetPage("$DataKey$_POST[datapage]",$contents); $m .= "Data has been deleted. "; } if ($_POST[delete] == "log") { GetPage("$DataKey$_POST[datapage]"); $log = ""; SetPage("$DataKey$_POST[datapage]",$contents); $m .= "Log has been deleted. "; } } if (! PageExists("$DataKey$_POST[datapage]")) $m .= "Page not found. Info not deleted."; } if ($field == "required") { $required = true; $r = explode(",", $value); // $r = required fields foreach ($r as $f => $v) { switch ($v) { case "newmember" : if ($_POST[$v] == "") Warning("Please enter a member name."); if (PageExists("$dataprofiles.$_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("$dataprofiles.$_POST[$v]")) Warning("Member name does not exist. Please try again."); break; case "newpage" : if (PageExists("$_POST[$v]")) Warning("Page already exists. Please try again."); break; case "newgroup" : if (PageExists("$_POST[$v].RecentChanges")) Warning("Group already exists. Please try again."); break; case "Email" : if (!ereg("^.+@.+\..+$", $_POST[$v])) Warning("Invalid email address entered."); break; default : if ($_POST[$v] == "") Warning("Field \"$v\" required. Please try again."); break; } } } if (substr($field, 0, 6) == "upload") { if (($_POST['uploadfile'] != "") && ($_POST['upname'] != "")) HandlePostUpload($pagename); else $m .= "Missing fields required for upload feature."; } if ($field == "login") { $dp = $dataprofiles . "." . $_POST[member]; if (($value == "auto") and (! PageExists($dp))) { AuthUserId($pagename, $_POST['member']); $m .= "You have been successfully logged in. "; } $pass1 = GetData($dp,"Password"); $pass2 = $_POST['passwd']; if ($pass1 == $pass2) { AuthUserId($pagename, $_POST['member']); $m .= "You have been successfully logged in. "; } else Warning("Incorrect member name or password."); } ## CONDITIONAL FUNCTIONS if (substr($field, 0, 2) == "if") { $f = explode(",", $value); foreach ($f as $stuff) { $ff = explode("|", $stuff); if ($_POST[substr($field, 2)] == $ff[0]) $_POST[$ff[1]] = $ff[2]; } } if (substr($field, 0, 7) == "replace") { $d = explode(",", $value); foreach ($d as $f => $v) { $c = explode("|", $v); if ($c[2] == "") $_POST[$c[1]] = $_POST[$c[0]]; else $_POST[$c[1]] = str_replace($c[2], $_POST[$c[0]], $_POST[$c[1]]); } } } $MessagesFmt[] = "