* @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";
foreach ($_POST as $field => $value) {
switch ($field) {
case "NextPage" :
$nextpage=FmtPageName($value, $pagename);
break;
case "DataPage" :
if (substr($value, 0, 4) == "Data") {
$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" :
$data = '';
$d = explode(",", $value);
foreach ($d as $f => $v) {
$data .= "$v=\"$_POST[$v]\" %0a%0a";
}
$data = "version=pmwiki-2.1.11 ordered=1 urlencoded=1
text=(:comment data:) %0a%0a" . $data . "(:comment data:) %0a%0a
";
if ($ds = fopen("$WorkDir/$datapage", "wb")){
fwrite($ds,"$data");
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) {
$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, -1, 1) == "*") {
$name = explode(".", $pagename);
$datapage = substr($datapage,0,strlen($datapage)-1) . $name[1];
}
if (substr($datapage, 0, 4) != "Data") {
return "invalid data parameter";
}
clearstatcache();
if ($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 (.*?):\\)/', '');
Markup('option', 'inline',
'/\\(:option (.*?):\\)/e',
"Keep(PSS(\"\"))");
Markup('selectend', 'inline', '/\(:selectend:\\)/', ' ');