Use ob_implicit_flush() rather than ob_end_flush() in install-utils.
[lhc/web/wiklou.git] / texvc.phtml
index 7467f81..108dcbd 100644 (file)
-<?
-gobal $IP;
+<?php
 include( "./LocalSettings.php" );
-include( "$IP/Setup.php" );
+include( "Setup.php" );
 header( "Content-type: text/xml; charset={$wgInputEncoding}" );
 print "<";
 print "?xml version=\"1.0\" encoding=\"utf-8\"?";
 print ">";
 ?>
 <!DOCTYPE html
-    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+       PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml"><head><title>texvc</title></head><body>
-<?
+<?php
 print "<form method=\"post\" action=\"{$wgServer}{$wgScriptPath}/texvc_cgi.phtml\">"
 ?>
-<textarea name='math' rows='10' cols='80'><?
-    global $math;
-    $math = preg_replace ("/\\\\\\\\/", '\\', $math);
-    print $math;
+<textarea name='math' rows='10' cols='80'><?php
+       global $math;
+       $math = preg_replace ("/\\\\\\\\/", '\\', $math);
+       print $math;
 ?></textarea><br /><input type="submit" value="Preview" name="preview" /></form>
-<?
+<?php
 function xlinkToMathImage ( $tex, $outputhash )
 {
-    global $wgMathPath;
-    return "<img src=\"".$wgMathPath."/".$outputhash.".png\" alt=\"".wfEscapeHTML($tex)."\" />";
+       global $wgMathPath;
+       return "<img src=\"".$wgMathPath."/".$outputhash.".png\" alt=\"".wfEscapeHTML($tex)."\" />";
 }
 
 function texvc_cgi_renderMath( $tex )
 {
-    global $wgMathDirectory, $wgTmpDirectory, $wgInputEncoding;
-    $mf   = wfMsg( "math_failure" );
-    $munk = wfMsg( "math_unknown_error" );
-
-    $image = "";
-    $outhtml = "";
-    $outtex = "";
-
-    $fname = "texvc_cgi_renderMath";
-
-    $md5 = md5($tex);
-    $md5_sql = mysql_escape_string(pack("H32", $md5));
-    $sql = "SELECT math_outputhash,math_html_conservativeness,math_html,math_mathml FROM math WHERE math_inputhash = '".$md5_sql."'";
-
-    $res = wfQuery( $sql, $fname );
-    if ( wfNumRows( $res ) == 0 )
-    {
-       $cmd = "./math/texvc ".escapeshellarg($wgTmpDirectory)." ".
-                     escapeshellarg($wgMathDirectory)." ".escapeshellarg($tex)." ".escapeshellarg($wgInputEncoding);
-       $contents = `$cmd`;
-
-       if (strlen($contents) == 0)
-           return "<h3>".$mf." (".$munk."): ".wfEscapeHTML($tex)."</h3>";
-       $retval = substr ($contents, 0, 1);
-
-       if (($retval == "C") || ($retval == "M") || ($retval == "L")) {
-           if ($retval == "C")
-               $conservativeness = 2;
-           else if ($retval == "M")
-               $conservativeness = 1;
-           else
-               $conservativeness = 0;
-           $outdata = substr ($contents, 33);
-
-           $i = strpos($outdata, "\000");
-
-           $outhtml = substr($outdata, 0, $i);
-           $mathml = substr($outdata, $i+1);
-
-           $sql_html = "'".mysql_escape_string($outhtml)."'";
-           $sql_mathml = "'".mysql_escape_string($mathml)."'";
-       } else if (($retval == "c") || ($retval == "m") || ($retval == "l"))  {
-           $outhtml = substr ($contents, 33);
-           if ($retval == "c")
-               $conservativeness = 2;
-           else if ($retval == "m")
-               $conservativeness = 1;
-           else
-               $conservativeness = 0;
-           $sql_html = "'".mysql_escape_string($outhtml)."'";
-           $mathml = '';
-           $sql_mathml = 'NULL';
-       } else if ($retval == "X") {
-           $outhtml = '';
-           $mathml = substr ($contents, 33);
-           $sql_html = 'NULL';
-           $sql_mathml = "'".mysql_escape_string($mathml)."'";
-           $conservativeness = 0;
-       } else if ($retval == "+") {
-           $outhtml = '';
-           $mathml = '';
-           $sql_html = 'NULL';
-           $sql_mathml = 'NULL';
-           $conservativeness = 0;
+       global $wgMathDirectory, $wgTmpDirectory, $wgInputEncoding;
+       $dbr =& wfGetDB( DB_SLAVE );
+       $mf   = wfMsg( "math_failure" );
+       $munk = wfMsg( "math_unknown_error" );
+
+       $image = "";
+       $outhtml = "";
+       $outtex = "";
+
+       $fname = "texvc_cgi_renderMath";
+
+       $md5 = md5($tex);
+       $md5_sql = pack("H32", $md5);
+
+       $mathTable = $dbr->tableName( 'math' );
+       $rpage = $dbr->getArray( 'math', array('math_outputhash','math_html_conservativeness','math_html','math_mathml'),
+         array( 'math_inputhash' => $md5_sql ) );
+       
+       if ( $rpage === false )
+       {
+               $cmd = "./math/texvc ".wfEscapeShellArg($wgTmpDirectory)." ".
+                                         wfEscapeShellArg($wgMathDirectory)." ".wfEscapeShellArg($tex)." ".wfEscapeShellArg($wgInputEncoding);
+               $contents = `$cmd`;
+
+               if (strlen($contents) == 0)
+                       return "<h3>".$mf." (".$munk."): ".wfEscapeHTML($tex)."</h3>";
+               $retval = substr ($contents, 0, 1);
+
+               if (($retval == "C") || ($retval == "M") || ($retval == "L")) {
+                       if ($retval == "C")
+                               $conservativeness = 2;
+                       else if ($retval == "M")
+                               $conservativeness = 1;
+                       else
+                               $conservativeness = 0;
+                       $outdata = substr ($contents, 33);
+
+                       $i = strpos($outdata, "\000");
+
+                       $outhtml = substr($outdata, 0, $i);
+                       $mathml = substr($outdata, $i+1);
+
+                       #$sql_html = "'".mysql_escape_string($outhtml)."'";
+                       #$sql_mathml = "'".mysql_escape_string($mathml)."'";
+               } else if (($retval == "c") || ($retval == "m") || ($retval == "l"))  {
+                       $outhtml = substr ($contents, 33);
+                       if ($retval == "c")
+                               $conservativeness = 2;
+                       else if ($retval == "m")
+                               $conservativeness = 1;
+                       else
+                               $conservativeness = 0;
+                       #$sql_html = "'".mysql_escape_string($outhtml)."'";
+                       $mathml = NULL;
+                       #$sql_mathml = 'NULL';
+               } else if ($retval == "X") {
+                       $outhtml = NULL;
+                       $mathml = substr ($contents, 33);
+                       #$sql_html = 'NULL';
+                       #$sql_mathml = "'".mysql_escape_string($mathml)."'";
+                       $conservativeness = 0;
+               } else if ($retval == "+") {
+                       $outhtml = NULL;
+                       $mathml = NULL;
+                       #$sql_html = 'NULL';
+                       #$sql_mathml = 'NULL';
+                       $conservativeness = 0;
+               } else {
+                       if ($retval == "E")
+                               $errmsg = wfMsg( "math_lexing_error" );
+                       else if ($retval == "S")
+                               $errmsg = wfMsg( "math_syntax_error" );
+                       else if ($retval == "F")
+                               $errmsg = wfMsg( "math_unknown_function" );
+                       else
+                               $errmsg = $munk;
+                       return "<h3>".$mf." (".$errmsg.substr($contents, 1)."): ".wfEscapeHTML($tex)."</h3>";
+               }
+
+               $outmd5 = substr ($contents, 1, 32);
+               if (!preg_match("/^[a-f0-9]{32}$/", $outmd5))
+                       return "<h3>".$mf." (".$munk."): ".wfEscapeHTML($tex)."</h3>";
+
+               $outmd5_sql = pack("H32", $outmd5);
+               
+               # Someone may have inserted the same hash since the SELECT, but that's no big deal, just ignore errors
+               $dbw =& wfGetDB( DB_MASTER );
+               $dbw->insertArray( 'math', 
+                 array( 
+                   'math_inputhash' => $md5_sql, 
+                       'math_outputhash' => $outmd5_sql,
+                       'math_html_conservativeness' => $conservativeness,
+                       'math_html' => $outhtml,
+                       'math_mathml' => $mathml,
+                 ), $fname, array( 'IGNORE' ) 
+               );
+               
+// we don't really care if it fails
        } else {
-           if ($retval == "E")
-               $errmsg = wfMsg( "math_lexing_error" );
-           else if ($retval == "S")
-               $errmsg = wfMsg( "math_syntax_error" );
-           else if ($retval == "F")
-               $errmsg = wfMsg( "math_unknown_function" );
-           else
-               $errmsg = $munk;
-           return "<h3>".$mf." (".$errmsg.substr($contents, 1)."): ".wfEscapeHTML($tex)."</h3>";
+               $rpage = $dbr->fetchObject ( $res );
+               $outmd5 = unpack ("H32md5", $rpage->math_outputhash);
+               $outmd5 = $outmd5 ['md5'];
+               $outhtml = $rpage->math_html;
+               $conservativeness = $rpage->math_html_conservativeness;
+               $mathml = $rpage->math_mathml;
        }
-
-       $outmd5 = substr ($contents, 1, 32);
-       if (!preg_match("/^[a-f0-9]{32}$/", $outmd5))
-           return "<h3>".$mf." (".$munk."): ".wfEscapeHTML($tex)."</h3>";
-
-       $outmd5_sql = mysql_escape_string(pack("H32", $outmd5));
-
-       $sql = "INSERT INTO math VALUES ('".$md5_sql."', '".$outmd5_sql."', ".$conservativeness.", ".$sql_html.", ".$sql_mathml.")";
-
-       $res = wfQuery( $sql, $fname );
-// we don't really care if it fails
-    } else {
-       $rpage = wfFetchObject ( $res );
-       $outmd5 = unpack ("H32md5", $rpage->math_outputhash);
-       $outmd5 = $outmd5 ['md5'];
-       $outhtml = $rpage->math_html;
-       $conservativeness = $rpage->math_html_conservativeness;
-       $mathml = $rpage->math_mathml;
-    }
-    if ($mathml == '')
-       $mathml = "<h3>Failed to generate MathML</h3>";
-    else
-       $mathml = "<h3>MathML</h3><math xmlns=\"http://www.w3.org/1998/Math/MathML\">$mathml</math>";
-    $image = "<h3>Image</h3>" . xlinkToMathImage ( $tex, $outmd5 );
-    $cmd = "./math/texvc_tex ".escapeshellarg($tex)." ".escapeshellarg($wgInputEncoding);
-    $outtex = `$cmd`;
-
-    if ( $outhtml == '' )
-        $outhtml = "<h3>Failed to generate HTML</h3>";
-    else
-       if ( $conservativeness == 2)
-           $outhtml = "<h3>HTML (conservative)</h3>" . $outhtml;
-       else if ( $conservativeness == 1)
-           $outhtml = "<h3>HTML (moderate)</h3>" . $outhtml;
+       if ( is_null( $mathml ) || $mathml === '' )
+               $mathml = "<h3>Failed to generate MathML</h3>";
        else
-           $outhtml = "<h3>HTML (liberal)</h3>" . $outhtml;
+               $mathml = "<h3>MathML</h3><math xmlns=\"http://www.w3.org/1998/Math/MathML\">$mathml</math>";
+       $image = "<h3>Image</h3>" . xlinkToMathImage ( $tex, $outmd5 );
+       $cmd = "./math/texvc_tex ".escapeshellarg($tex)." ".escapeshellarg($wgInputEncoding);
+       $outtex = `$cmd`;
 
-    if ( $outtex == '' )
-       $outtex = "<h3>Failed to generate TeX</h3>";
-    else
-       $outtex = "<h3>TeX</h3>" . wfEscapeHTML($outtex);
+       if ( is_null( $outhtml ) || $outhtml === '' )
+               $outhtml = "<h3>Failed to generate HTML</h3>";
+       else
+               if ( $conservativeness == 2)
+                       $outhtml = "<h3>HTML (conservative)</h3>" . $outhtml;
+               else if ( $conservativeness == 1)
+                       $outhtml = "<h3>HTML (moderate)</h3>" . $outhtml;
+               else
+                       $outhtml = "<h3>HTML (liberal)</h3>" . $outhtml;
+
+       if ( $outtex == '' )
+               $outtex = "<h3>Failed to generate TeX</h3>";
+       else
+               $outtex = "<h3>TeX</h3>" . wfEscapeHTML($outtex);
 
-    return $outtex . $outhtml . $mathml . $image;
+       return $outtex . $outhtml . $mathml . $image;
 }
 
 global $math;
 if ($math != '')
-    print texvc_cgi_renderMath($math);
+       print texvc_cgi_renderMath($math);
 ?>
 </body></html>