<?php
/**
* example3.php
*
* C.McKinnon 4 Feb 2011
*
* generate a clientside mage map as well as the graph
* the writer needs to provided a callback fn which takes
* the filename and function name as arguments
* and returns a URL
* The example below should return a link to the phpxref documentation
*/
require_once("dotwriter.inc.php");
$basepath="http://example.com/phpxref/output/nav.html?my_project";
// above will change depending on how phpxref is installed
// have a look at the URLs for your current phpxref for more details
$project_basepath=$_SERVER["DOCUMENT_ROOT"];
// this gets stripped from the file path - NB your document root might not
// match the base path for your phpxref project!
$repdirs=parse_truncations();
// this deals with 'include' files declared for phpxref
print "<html>\n<body>\n";
if (count($_POST)) {
if (file_exists($_POST['file'])) {
show_graph();
} else {
print "file not found (" . $_POST['file'] . ")\n";
}
}
show_form();
print "\n</body>\n</html>\n";
register_shutdown_function('deltemps');
flush();
exit;
/**
* this is the callback sent to the dotwriter
*
*/
function callback($filename, $fn)
{
global $basepath, $repdirs, $project_basepath;
if (substr($filename, 0, strlen($project_basepath))==$project_basepath) {
$filename=substr($filename,strlen($project_basepath));
} else {
foreach ($repdirs as $r) {
if (substr($filename, 0, strlen($r))==$r) {
$filename=substr($filename, strlen($r));
break;
}
}
}
if (substr($fn, 0, 2)=='::') $fn=substr($fn,2);
// in phpxref, everythings a function!
return $basepath . $filename . '.html#' . $fn;
}
function parse_truncations()
{
// normally phpxref strips leading paths off files
// found on the include path...
$paths=explode(':', ini_get('include_path'));
foreach ($paths as $key=>$val) {
if ($val=='.') unset($paths[$key]);
}
return $paths;
}
function show_form()
{
print "<h2>Enter the path to a file to parse</h2>\n";
print '
<form method="post"
enctype="multipart/form-data">
Filename:
<input type="text" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>';
}
function show_graph()
{
global $imgname;
$c = new dotrunner();
$tmpname=tempnam('./graphs','graph');
$c->outputFileName=$tmpname . '.jpg';
$imgname='graphs/' . basename($c->outputFileName);
$c->genGraph(
file_get_contents($_POST['file']),
$_POST['file'],
'callback'); // final (optional) param is callback fn
// its possible to specify an object + method too
// see the PHP manual for call_user_function
if (file_exists($c->outputFileName)) {
print "<img src='" . $imgname . "' usemap='#" . $_POST['file'] . "'>\n";
// the image map name is the same as the title sent to the dotrunner
print file_get_contents($imgname . '.cmapx');
// and the image map is stored in a file with the same name
// as the output img - but with an extra suffix
@unlink($imgname . '.cmapx');
} else {
print "erm.....something went wrong?";
}
// tempnam creates a file without a suffix - that needs rm'd
@unlink($tmpname);
$c->cleanUp();
}
function deltemps()
{
global $imgname;
sleep(5); // wait for browser to load image
if (file_exists($imgname)) {
$msg="trying to unlink $imgname";
@unlink($imgname);
} else {
$msg="Not deleting anything";
}
$o=fopen($imgname.'.log', 'w');
if ($o) {
fputs($o, $msg);
fclose($o);
}
}
|