inc/utils.php

<?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($textENT_COMPAT"UTF-8");
  
$etext=preg_replace(array("/([^ ])&quot;([ \n])/",  "/([ \n])&quot;([^ ])/"),
                      array(
"\\1&rdquo;\\2",  "\\1&ldquo;\\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>&& $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:


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.