Hummel-riegel
Joined 12 September 2010
GraphViz-Version by Bytesmiths
edit- Date
- 2011-01-18
Hi, you left a note on my talk page about the GraphVis extension.
Here is the version I modified and use. Hope this is helpful to you!
<?php # CoffMan (http://www.wickle.com) code adapted from timeline extension. # JWS_050315: added support for other Graphviz layout engines. class GraphVizSettings { var $execPath; }; $wgGraphVizSettings = new GraphVizSettings; $wgGraphVizSettings->execPath = '/sw/bin/'; $wgExtensionFunctions[] = 'wfGraphVizExtension'; function wfGraphVizExtension() { global $wgParser; $wgParser->setHook('graphviz', 'renderGraphviz'); $wgParser->setHook('graphvizl', 'renderGraphvizLeft'); $wgParser->setHook('graphvizr', 'renderGraphvizRight'); } function renderGraphvizLeft($dotsrc) { return renderGraphviz($dotsrc, 'style="float:left"'); } function renderGraphvizRight($dotsrc) { return renderGraphviz($dotsrc, 'style="float:right"'); } function renderGraphviz($dotsrc, $style='') { $cmd = ''; global $wgUploadDirectory, $wgUploadPath, $IP, $wgGraphVizSettings, $wgArticlePath, $wgTmpDirectory; $hash = md5($dotsrc); $dest = $wgUploadDirectory . '/graphviz/'; if(!is_dir($dest)) mkdir($dest, 0777); if(!is_dir($wgTmpDirectory)) mkdir($wgTmpDirectory, 0777); if(!strncmp($dotsrc, '#!/', 3)) $cmd = substr($dotsrc, 2, strpos($dotsrc, ' ') -2); switch($cmd) { case $wgGraphVizSettings->execPath . 'circo': case $wgGraphVizSettings->execPath . 'dot': case $wgGraphVizSettings->execPath . 'fdp': case $wgGraphVizSettings->execPath . 'neato': case $wgGraphVizSettings->execPath . 'twopi': break; default: $cmd = $wgGraphVizSettings->execPath . 'dot'; } $fname = $dest . $hash; if(!(file_exists($fname . '.png') || file_exists($fname . '.err'))) { $handle = fopen($fname, 'w'); fwrite($handle, $dotsrc); fclose($handle); $cmdline = wfEscapeShellArg($cmd) . ' -Tpng -o ' . wfEscapeShellArg($fname . '.png') . ' ' . wfEscapeShellArg($fname); $cmdlinemap = wfEscapeShellArg($cmd) . ' -Tcmapx -o ' . wfEscapeShellArg($fname. '.map') . ' ' . wfEscapeShellArg($fname); $ret = shell_exec($cmdline); $ret = `{$cmdlinemap}`; unlink($fname); } @$err=file_get_contents($fname . '.err'); if($err != '') { $txt = "<div id=\"toc\"><tt>$err</tt></div>"; } else { @$map = file_get_contents($fname . '.map'); $map = preg_replace('#<ma(.*)>#', ' ', $map); if(substr(php_uname(), 0, 7) == 'Windows') { $ext = 'gif'; } else { $ext = 'png'; } $txt = "<map id=\"$hash\" name=\"$hash\">{$map}" . "<img usemap=\"#{$hash}\" src=\"{$wgUploadPath}/graphviz/{$hash}.{$ext}\" {$style}>"; } return $txt; } ?>