<?php
function normalize($name) {
// $norm=strtr($name,'/\$+&%:;<>{}[]','______________');
$norm=$name;
$norm=strtolower($norm);
$norm=ereg_replace('\|.*',"",$norm);
$norm=ereg_replace("[^a-z0-9_/-]","",$norm);
return($norm);
}
function check_page($name) {
$name = normalize($name);
$result = mysql_query("select revision from pages where name='$name'");
if ($result === false || mysql_num_rows($result) == 0)
return(0);
$row = mysql_fetch_row($result);
return($row[0]);
}
function check_files($name) {
$name=normalize($name);
if(strpos($name,"/") === FALSE)
return(false);
$user=substr($name,0,strpos($name,"/"));
$query="select path from users where name='$user' and path is not null";
$result=mysql_query($query);
if($result === false || mysql_num_rows($result) == 0)
return(false);
$row=mysql_fetch_row($result);
$udir=$row[0];
$upage=substr($name,strpos($name,"/")+1);
if(file_exists("$udir/$upage.jpg") ||
file_exists("$udir/$upage.gif") ||
file_exists("$udir/$upage.png") ||
file_exists("$udir/$upage.txt") ||
file_exists("$udir/$upage.php"))
return(true);
return(false);
}
function get_image($name) {
$name=normalize($name);
if(strpos($name,"/") === FALSE)
return(false);
$user=substr($name,0,strpos($name,"/"));
$query="select path,uri from users where name='$user' and path is not null";
$result=mysql_query($query);
if($result === false || mysql_num_rows($result) == 0)
return(false);
$row=mysql_fetch_row($result);
$udir=$row[0];
$uuri=$row[1];
$upage=substr($name,strpos($name,"/")+1);
if(file_exists("$udir/$upage.jpg"))
return("$uuri/$upage.jpg");
if(file_exists("$udir/$upage.gif"))
return("$uuri/$upage.gif");
if(file_exists("$udir/$upage.png"))
return("$uuri/$upage.png");
return(false);
}
function get_text($name) {
$name=normalize($name);
if(strpos($name,"/") === FALSE)
return(false);
$user=substr($name,0,strpos($name,"/"));
$query="select path from users where name='$user' and path is not null";
$result=mysql_query($query);
if($result === false || mysql_num_rows($result) == 0)
return(false);
$row=mysql_fetch_row($result);
$udir=$row[0];
$upage=substr($name,strpos($name,"/")+1);
if(file_exists("$udir/$upage.txt"))
return("$udir/$upage.txt");
return(false);
}
function get_php_source($name) {
$name=normalize($name);
if(strpos($name,"/") === FALSE)
return(false);
$user=substr($name,0,strpos($name,"/"));
$query="select path from users where name='$user' and path is not null";
$result=mysql_query($query);
if($result === false || mysql_num_rows($result) == 0)
return(false);
$row=mysql_fetch_row($result);
$udir=$row[0];
$upage=substr($name,strpos($name,"/")+1);
if(file_exists("$udir/$upage.php"))
return("$udir/$upage.php");
return(false);
}
function get_small($name) {
$name=normalize($name);
if(strpos($name,"/") === FALSE)
return(false);
$user=substr($name,0,strpos($name,"/"));
$query="select path,uri from users where name='$user' and path is not null";
$result=mysql_query($query);
if($result === false || mysql_num_rows($result) == 0)
return(false);
$row=mysql_fetch_row($result);
$udir=$row[0];
$uuri=$row[1];
$upage=substr($name,strpos($name,"/")+1);
if(file_exists("$udir/small/$upage.jpg"))
return("$uuri/small/$upage.jpg");
if(file_exists("$udir/small/$upage.gif"))
return("$uuri/small/$upage.gif");
if(file_exists("$udir/small/$upage.png"))
return("$uuri/small/$upage.png");
return(get_image($name));
}
function get_thumb($name) {
$name=normalize($name);
if(strpos($name,"/") === FALSE)
return(false);
$user=substr($name,0,strpos($name,"/"));
$query="select path,uri from users where name='$user' and path is not null";
$result=mysql_query($query);
if($result === false || mysql_num_rows($result) == 0)
return(false);
$row=mysql_fetch_row($result);
$udir=$row[0];
$uuri=$row[1];
$upage=substr($name,strpos($name,"/")+1);
if(file_exists("$udir/thumb/$upage.jpg"))
return("$uuri/thumb/$upage.jpg");
if(file_exists("$udir/thumb/$upage.gif"))
return("$uuri/thumb/$upage.gif");
if(file_exists("$udir/thumb/$upage.png"))
return("$uuri/thumb/$upage.png");
return(get_small($name));
}
function get_title($name) {
$nname=normalize($name);
$result=mysql_query("select title from pages where name='$nname'");
if($result !== false && mysql_num_rows($result) > 0) {
$row = mysql_fetch_row($result);
return($row[0]);
}
return(ereg_replace(".*/","",$name));
}
function get_page_text($name) {
$name = normalize($name);
$result = mysql_query("select content from pages where name='$name'");
if($result === false || mysql_num_rows($result) == 0)
return(false);
$row = mysql_fetch_row($result);
return($row[0]);
}
function get_revision_title($name, $rev) {
$nname = normalize($name);
$result = mysql_query("select oldtitle from changes where page='$nname' and revision > $rev and oldtitle is not null order by revision");
if ($result === false || mysql_num_rows($result) == 0)
return(get_title($name));
$row = mysql_fetch_row($result);
return $row[0];
}
function get_revision_text($name, $rev) {
$name = normalize($name);
$result = mysql_query("select changetype,content from changes where page='$name' and revision>$rev and revoked=0 order by revision desc");
$text = get_page_text($name);
if ($result === false)
return $text;
while (($row = mysql_fetch_row($result)) !== false) {
$revtype = $row[0];
$revcontent = $row[1];
if ($revtype == 'c')
$text = "";
elseif ($revtype == 'd')
$text = $revtext;
elseif ($revtype == 'e' || $revtype == 'm')
$text = getoldrev(texttodiff($revcontent,$text));
}
return $text;
}
function encode_html_chars($text) {
$etext=htmlspecialchars($text, ENT_COMPAT, "UTF-8");
$etext=preg_replace(array("/([^ ])"([ \n])/", "/([ \n])"([^ ])/"),
array("\\1”\\2", "\\1“\\2"),
$etext);
return($etext);
}
function strip_bold($text) {
$stext=strtr($text,array("'''"=>""));
return($stext);
}
function strip_italics($text) {
$stext=strtr($text,array("''"=>""));
return($stext);
}
function strip_control($text) {
$stext=encode_html_chars($text);
$stext=strip_bold($stext);
$stext=strip_italics($stext);
$stext=ereg_replace('[]{}[]','',$stext);
return($stext);
}
function title_encode($text) {
$etext=encode_html_chars($text);
$etext=strip_bold($etext);
// $etext=htmlentities($etext);
$etext=encode_italics($etext);
// $etext=ereg_replace('[]{}[]','',$etext);
return($etext);
}
function td($end,$begin) {
return($end["sec"]-$begin["sec"]+($end["usec"]-$begin["usec"])/1000000.0);
}
function text_encode($text, $curpage = "") {
// $begin=gettimeofday();
$etext=encode_html_chars($text);
// $html=gettimeofday();
$etext=encode_list($etext);
// $list=gettimeofday();
$etext=encode_hr($etext);
// $hr=gettimeofday();
$etext=encode_para($etext);
// $para=gettimeofday();
$etext=encode_br($etext);
// $br=gettimeofday();
$etext=encode_links($etext, $curpage);
// $links=gettimeofday();
$etext=encode_bold($etext);
// $bold=gettimeofday();
$etext=encode_italics($etext);
// $italics=gettimeofday();
$etext=beautify($etext);
// $beau=gettimeofday();
// $etext="<!--\nencode_html_chars: ".td($html,$begin).
// "\nencode_list: ".td($list,$html).
// "\nencode_hr: ".td($hr,$list).
// "\nencode_para: ".td($para,$list).
// "\nencode_br: ".td($br,$para).
// "\nencode_links: ".td($links,$br).
// "\nencode_bold: ".td($bold,$links).
// "\nencode_italics: ".td($italics,$bold).
// "\nbeautify: ".td($beau,$italics).
// "\n-->".$etext;
return($etext);
}
function encode_bold($text) {
$etext=$text;
while(strstr($etext,"'''")) {
$etext=preg_replace("/'''/",'<B>',$etext,1);
if(strstr($etext,"'''"))
$etext=preg_replace("/'''/",'</B>',$etext,1);
else
$etext.="</B>";
}
return($etext);
}
function encode_italics($text) {
$etext=$text;
while(strstr($etext,"''")) {
$etext=preg_replace("/''/",'<I>',$etext,1);
if(strstr($etext,"''"))
$etext=preg_replace("/''/",'</I>',$etext,1);
else
$etext.="</I>";
}
return($etext);
}
function encode_list($text) {
$rtext="\n$text"; // Add a newline at the beginning to catch first-line lists, we'll remove it later
$levels=0;
while(strchr($rtext,"\n")) {
$etext.=substr($rtext,0,strpos($rtext,"\n"));
$rtext=substr($rtext,strpos($rtext,"\n"));
$fl=0;
if($rtext[0]=="\n" && ($rtext[1]=="*" || $rtext[1]=="#")) {
$fl=1;
$i=2;
while(true) {
if($rtext[$i]=="*"||$rtext[$i]=="#")
;
elseif($rtext[$i]==" ")
break;
else {
// $etext.="<!--here-->";
$fl=0;
break;
}
$i++;
}
}
// if(ereg("^\n[*#]+ ",$rtext)) {
if($fl) { // This is a list element line
$etext.="\001"; // Mark that there was once a newline here
$newlev=strpos($rtext," ")-1;
for($l=1;$l<=$newlev;$l++) { // First, iterate through characters on new line
if($l>$levels) {
if($rtext[$l]=="*")
$etext.="<UL>";
else
$etext.="<OL>";
} else {
if($rtext[$l]!=$levtype[$l]) { // If one does not match, close all descendants
while($levels>=$l) {
if($levtype[$levels]=="*")
$etext.="</UL>";
else
$etext.="</OL>";
$levels--;
}
if($rtext[$l]=="*")
$etext.="<UL>";
else
$etext.="<OL>";
}
}
$levtype[$l]=$rtext[$l];
}
while($levels>$newlev) {
if($levtype[$levels]=="*")
$etext.="</UL>";
else
$etext.="</OL>";
$levels--;
}
$etext.="<LI>";
$levels=$newlev;
$rtext=substr($rtext,$levels+2);
} elseif(ereg("^\n=+ ",$rtext)) { // This is a non-list-element line
$newlev=strpos($rtext," ")-1;
if($levels==$newlev)
$etext.="\n"; // If indention does not change, keep the line break
else
$etext.="\001"; // Otherwise drop and mark the position
while($levels<$newlev) {
$etext.="<UL>";
$levels++;
$levtype[$levels]="*";
}
while($levels>$newlev) {
if($levtype[$levels]=="*")
$etext.="</UL>";
else
$etext.="</OL>";
$levels--;
}
$rtext=substr($rtext,$levels+2);
} elseif($levels>0 && $rtext[1]!="\n") { // This is a drop to null list
while($levels>0) {
if($levtype[$levels]=="*")
$etext.="</UL>";
else
$etext.="</OL>";
$levels--;
}
$etext.="\001";
$rtext=substr($rtext,1); // Drop newline, mark, and move on
} else { // This is a flat newline, keep and move on
$etext.="\n";
$rtext=substr($rtext,1);
}
}
$etext.=$rtext;
while($levels>0) { // Drop down to null list before ending text
if($levtype[$levels]=="*")
$etext.="</UL>";
else
$etext.="</OL>";
$levels--;
}
$etext=substr($etext,1); // Remove the first artificial newline
return($etext);
}
function encode_hr($text) {
$etext="\n$text"; // Add a newline to catch any first-line rules
/* $etext=strtr($etext,array("\n---\n"=>"<HR>",
"\n--\n"=>"<HR WIDTH=\"67%\" ALIGN=CENTER>",
"\n-\n"=>"<HR WIDTH=\"33%\" ALIGN=CENTER>"));
*/
$etext=preg_replace(array("/[\n\001]---[\n\001]/",
"/[\n\001]--[\n\001]/",
"/[\n\001]-[\n\001]/"),
array("\001<HR>\001",
"\001<HR WIDTH=\"67%\" ALIGN=CENTER>\001",
"\001<HR WIDTH=\"33%\" ALIGN=CENTER>\001"),
$etext);
$etext=substr($etext,1); // Remove artificial newline
return($etext);
}
function encode_para($text) {
$etext=ereg_replace("\n\n+","<P>",$text);
return($etext);
}
function encode_br($text) {
$etext=strtr($text,array("\n"=>"<BR>"));
return($etext);
}
function encode_links($text,$curpage) {
$rtext=$text;
$curpage = normalize($curpage);
while(strchr($rtext,'{')) {
$etext.=substr($rtext,0,strpos($rtext,'{'));
$rtext=substr($rtext,strpos($rtext,'{')+1);
$link=strtr(substr($rtext,0,strpos($rtext,'}')),array_flip(get_html_translation_table(HTML_SPECIALCHARS)));
$rtext=substr($rtext,strpos($rtext,'}')+1);
if ($link[0] == "-")
$link = "$curpage/" . substr($link,1);
elseif ($link{0} == "=") {
$curdir = $curpage;
while($link{0} == "=" && strrpos($curdir,"/") !== false) {
$curdir = substr($curdir,0,strrpos($curdir,"/"));
$link = substr($link,1);
}
if ($link{0} != "=")
$link = "$curdir/$link";
}
$nlink=normalize($link);
if($nlink=="")
$addlink=false;
else
$addlink=true;
if(check_page("$nlink")||check_files("$nlink"))
$exists=true;
else
$exists=false;
if($addlink)
$etext.="<A HREF=\"/".($exists?$nlink:strtr(rawurlencode($link),array("%2F"=>"/"))."?edit").
"\" CLASS=".($exists?"int>":"broken>");
$etext.=title_encode(get_title($link));
if($addlink)
$etext.="</A>";
}
$rtext=$etext.$rtext;
$etext="";
while(strchr($rtext,'[')) {
$etext.=substr($rtext,0,strpos($rtext,'['));
$rtext=substr($rtext,strpos($rtext,'[')+1);
$link=substr($rtext,0,strpos($rtext,']'));
$rtext=substr($rtext,strpos($rtext,']')+1);
if($link=="[")
$etext.="[";
else {
if(!strstr($link,"://"))
$link="http://".$link;
$etext.="<A HREF=\"".$link."\" CLASS=ext>".$link."</A>";
}
}
$etext.=$rtext;
return($etext);
}
function beautify($text) {
$btext=strtr($text,array("\001"=>"",
"<BR>"=>"<BR>\n",
"<BR CLEAR=LEFT>"=>"<BR CLEAR=LEFT>\n",
"<P>"=>"\n<P>\n",
"<HR>"=>"\n<HR>\n",
"<HR WIDTH=\"67%\" ALIGN=CENTER>"=>"\n<HR WIDTH=\"67%\" ALIGN=CENTER>\n",
"<HR WIDTH=\"33%\" ALIGN=CENTER>"=>"\n<HR WIDTH=\"33%\" ALIGN=CENTER>\n",
"<UL>"=>"\n<UL>",
"<OL>"=>"\n<OL>",
"</UL>"=>"\n</UL>\n",
"</OL>"=>"\n</OL>\n",
"<LI>"=>"\n<LI>"));
$btext=strtr($btext,array("\n\n"=>"\n"));
return($btext);
}
Notes: