inc/commit.php

<?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:


Edit this page!
View the most recent revision to this page.
If you haven't yet, read the Wiki Introduction.
Up one level to inc/.
Return to user's home page: Flouri
Return to the Wiki Home.
Hosted by Shyou.org Webservices.