* @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, $pagename, $MessagesFmt;
$nextpage = $pagename;
$datapage = "Data-$pagename";
$datamembers = "Data-Member";
$pagecreated = "false";
$count = "1000";
foreach ($_POST as $field => $value) {
switch ($field) {
case "NextPage" :
$nextpage=FmtPageName($value, $pagename);
break;
case "DataPage" :
if (substr($value, -2, 2) == ".#") {
$g = substr($value, 0, strlen($value)-2);
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 "Check" :
if ($value=="") {
$MessagesFmt[] = "
$[No member name entered. Please try again:]
";
HandleBrowse($pagename);
return;
}
if($value!=PageVar(MakePageName($pagename, $value), '$Name')) {
$MessagesFmt[] = "$[Invalid member name. Please try again:]
";
HandleBrowse($pagename);
return;
}
if (PageExists("$datamembers.$value")) {
$MessagesFmt[] = "$[Member name already taken. Please try again:]
";
HandleBrowse($pagename);
return;
}
$nextpage=FmtPageName("$nextpage?myname=$value", $pagename);
break;
case "Login" :
if (($value == "auto") and (! PageExists("$datamembers.$_POST[Member]"))) {
AuthUserId($pagename, $_POST['Member']);
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']);
break;
}
$MessagesFmt[] = "$[Incorrect member name or password:]
";
HandleBrowse($pagename);
return;
}
break;
case "SaveData" :
if (substr($datapage, 0, 4) != "Data") {
break;
}
$data = '';
$d = explode(",", $value);
foreach ($d as $f => $v) {
if (substr($v,0,1) == '-' ) {
$v = substr($v,1);
if ($_POST[$v] != "") $data .= "$_POST[$v] %0a%0a";
}
else {
$data .= "$v=\"$_POST[$v]\" %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";
}
$dc[0] ="version=pmwiki-2.1.11 ordered=1 urlencoded=1
text=";
$dc[1] = $data;
$pc = "$dc[0](:comment data:) %0a%0a$dc[1](:comment data:) %0a%0a$dc[2](:comment data:) %0a%0a";
if ($ds = fopen("$WorkDir/$datapage", "wb")){
fwrite($ds,"$pc");
fclose($ds);
PageIndexUpdate("$datapage");
}
break;
case "AppendData" :
if (substr($datapage, 0, 4) != "Data") {
break;
}
$data = '';
$d = explode(",", $value);
foreach ($d as $f => $v) {
if (substr($v,0,1) == '-' ) {
$v = substr($v,1);
$data .= "$_POST[$v] %0a%0a";
}
else {
$data .= "$v=\"$_POST[$v]\" %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";
}
$dc[0] ="version=pmwiki-2.1.11 ordered=1 urlencoded=1
text=";
$dc[2] .= $data;
$pc = "$dc[0](:comment data:) %0a%0a$dc[1](:comment data:) %0a%0a$dc[2](:comment data:) %0a%0a";
if ($ds = fopen("$WorkDir/$datapage", "wb")){
fwrite($ds,"$pc");
fclose($ds);
PageIndexUpdate("$datapage");
}
break;
case "EmailData" :
$data = '';
if ($_POST[EmailTo] == "") {
$MessagesFmt[] = "$[To email address required. Mail not sent.]
";
HandleBrowse($pagename);
return;
}
if ($_POST[EmailFrom] == "") {
$MessagesFmt[] = "$[From email address required. Mail not sent.]
";
HandleBrowse($pagename);
return;
}
if ($_POST[Subject] == "") {
$MessagesFmt[] = "$[Subject required. Mail not sent:]
";
HandleBrowse($pagename);
return;
}
$d = explode(",", $value);
foreach ($d as $f => $v) {
if (substr($v,0,1) == '-' ) {
$v = substr($v,1);
$data .= "$_POST[$v]
";
}
else {
$data .= "$_POST[$v]
";
}
}
if ($data == "") {
$MessagesFmt[] = "$[The message has no content. Mail not sent:]";
HandleBrowse($pagename);
return;
}
mail($_POST[EmailTo], $_POST[Subject], $data, "From: $_POST[EmailFrom]");
break;
}
}
Redirect(FmtPageName($nextpage, $pagename));
}
# 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) {
global $WorkDir, $FmtPV, $pagename;
$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]);
$FmtPV["$$dv[0]"] = stripslashes("$dv[1]");
$i = $i + 1;
}
return;
}
return "data not found";
}
# Markups for pull down menu's
Markup('select', 'inline', '/\(:select (.*?):\\)/', '');