<?php
//die("Wiki maintenance. Please wait.");
$currev = (int)$_POST["currev"];
$title = stripslashes($_POST["title"]);
$editrows = (int)$_POST["editrows"];
$editcols = (int)$_POST["editcols"];
$text = stripslashes($_POST["text"]);
$minor = $_POST["minor"];
$text = strtr($text, array("\r\n"=>"\n","\r"=>"\n"));
$oldeditrows = (int)$_COOKIE["editrows"];
$oldeditcols = (int)$_COOKIE["editcols"];
if ($editrows != $oldeditrows || $editcols != $oldeditcols) {
setcookie("editrows",$editrows,time()+100000000,"/");
setcookie("editcols",$editcols,time()+100000000,"/");
}
if ($npage == "brokenlink")
die("Broken Link is a page that should not exist, since it is an example of a broken link. Page not created.");
if (strlen(normalize($title)) == 0)
$title = $page;
if (!($wikiname && $wikisig)) {
header("Location: http://" . $_SERVER['HTTP_HOST']."/$npage");
return;
}
if ($currev) {
$result = mysql_query("select id from changes where page='$npage' and revision=$currev");
if (!mysql_num_rows($result) && $currev != 1)
die("Error: currev not found");
$oldtitle = get_revision_title($page,$currev);
$oldtext = get_revision_text($page,$currev);
if (trim($text) == "") {
$len = strlen($oldtext);
$changetype = "d";
$changecontent = $oldtext;
$changeoldtitle = $oldtitle;
} else {
if ($oldtext == $text && $oldtitle == $title) {
header("Location: http://" . $_SERVER['HTTP_HOST']."/$npage");
return;
}
if ($oldtext == $text) {
$changetype = "t";
$changecontent = "";
} else {
$diffarray = stringdiff($oldtext, $text);
$changecontent = difftotext($diffarray);
if (strlen($changecontent) < 20)
$minor = true;
if ($minor)
$changetype = "m";
else
$changetype = "e";
if ($oldtitle != $title) {
$changeoldtitle = $oldtitle;
$changenewtitle = $title;
}
$len = strlen($oldtitle);
$changestring .= "t $len\n$oldtitle\n";
}
}
$newrev = $currev + 1;
} else {
$result = mysql_query("select revision,changetype from changes where page='$npage' order by revision desc");
if (!mysql_num_rows($result))
$newrev = 1;
else {
$row = mysql_fetch_row($result);
if ($row[1] == "d")
$newrev = $row[0] + 1;
else
$newrev = -1;
}
$changetype = "c";
$changecontent = $text;
$changenewtitle = $title;
}
if ($newrev > 0) {
$ipaddr = $_SERVER["REMOTE_ADDR"];
$querystring = "insert into changes (page,revision,ip,wikiname,wikisig,changetype,content,oldtitle,newtitle) values ('$npage',$newrev,inet_aton('$ipaddr'),'".
mysql_real_escape_string($wikiname) . "','" .
mysql_real_escape_string($wikisig) . "','$changetype','" .
mysql_real_escape_string($changecontent) . "'," .
(isset($changeoldtitle) ? "'" . mysql_real_escape_string($changeoldtitle) . "'" :
"NULL") . "," .
(isset($changenewtitle) ? "'" . mysql_real_escape_string($changenewtitle) . "'" :
"NULL") .
")";
$result = mysql_query($querystring);
if ($result === false) {
$newrev = -1;
echo("<!-- query string:$querystring-->\n");
echo("<!-- mysql error:".mysql_error()."-->\n");
}
else {
$maxc = mysql_insert_id();
setcookie("lastcomment",$maxc,time()+100000000,"/");
};
}
if ($newrev == -1) {
if ($changetype == "c")
echo("The page was created by another user before you.");
elseif ($changetype == "d")
echo("The page was edited by another user before you deleted it.");
else
echo("The page was edited by another user before you, and the changes could not be reconciled. You should view the new page and make any additional changes to it.");
}
if ($newrev > 0) {
if ($changetype == "c")
$result = mysql_query("insert into pages (name,content,title,revision) values ('" .
implode("','",array_map("mysql_real_escape_string",array(
$npage,
$text,
$title,
$newrev
))) . "')");
elseif ($changetype == "d")
$result = mysql_query("delete from pages where name='$npage' and revision=$currev");
else
$result = mysql_query("update pages set content='" .
mysql_real_escape_string($text) . "', title='" .
mysql_real_escape_string($title) . "', revision=$newrev where name='$npage' and revision=$currev");
if ($result === false || mysql_affected_rows() == 0) {
echo("Unexpected database error. Your changes were NOT saved.");
mysql_query("update changes set time=time,revoked=$newrev where id=$maxc and page='$npage' and revision=$newrev");
$newrev = -1;
}
}
if ($newrev == -1)
die(" Click <A HREF=\"/$npage\">here</A> to view the page.");
if ($changestring{0} == "d")
die("Page deleted. Click <A HREF=\"/wikihome\">here</A> to return to the Wiki Home.");
header("Location: http://{$_SERVER["HTTP_HOST"]}/$npage");
?>
Notes: