116 lines
3.8 KiB
PHP
116 lines
3.8 KiB
PHP
<?php
|
|
/**
|
|
* Copyright (c) 2006, Gaudenz Alder
|
|
*/
|
|
include_once("../src/mxServer.php");
|
|
|
|
/**
|
|
* Function: main
|
|
*
|
|
* Demonstrates the deployment of a graph which is created on the server side
|
|
* and then deployed with the client library in a single response. This is done
|
|
* by replacing the %graph% placeholder in the javascript/example/template.html
|
|
* file with the XML representation of the graph that was created on the server.
|
|
*
|
|
* Point your browser to http://localhost/graph to fetch the HTML file. Make sure
|
|
* to deploy the mxgraph distribution directory to the webroot for this example
|
|
* to work, or replace the mxBasePath and URL for the mxClient.js in the
|
|
* template to match your environment.
|
|
*
|
|
* This example returns an HTML page when the client issues a get request. The
|
|
* readme in the php directory explains how to run this example.
|
|
*
|
|
* The template.html file is used by this example. In main a graph is created
|
|
* and the XML of the graph obtained by:
|
|
*
|
|
* $enc = new mxCodec();
|
|
* $xmlNode = $enc->encode($model);
|
|
* $xml = $xmlNode->ownerDocument->saveXML($xmlNode);
|
|
*
|
|
* The template.html is then loaded as a string and instances of %graph% are
|
|
* replaced with the XML of the graph. In the template.html the following line
|
|
* defines the page body:
|
|
*
|
|
* <body onload="main(document.getElementById('graphContainer'), '%graph%');">
|
|
*
|
|
* So the XML string of the graph becomes the second parameter of the main
|
|
* function. When the template.html page is loaded in the browser, the main
|
|
* function is called and within that function these lines:
|
|
*
|
|
* var doc = mxUtils.parseXml(xml);
|
|
* var codec = new mxCodec(doc);
|
|
* codec.decode(doc.documentElement, graph.getModel());
|
|
*
|
|
* insert the XML into the graph model and that graph will then display.
|
|
*/
|
|
function main()
|
|
{
|
|
// True-type fonts not needed in this example
|
|
mxConstants::$TTF_ENABLED = false;
|
|
|
|
// Creates the graph on the server-side
|
|
$graph = new mxGraph();
|
|
$model = $graph->getModel();
|
|
$parent = $graph->getDefaultParent();
|
|
|
|
$model->beginUpdate();
|
|
try
|
|
{
|
|
$v1 = $graph->insertVertex($parent, null, "Hello", 20, 20, 80, 30);
|
|
$v2 = $graph->insertVertex($parent, null, "World", 200, 150, 80, 30);
|
|
$graph->insertEdge($parent, null, "", $v1, $v2);
|
|
}
|
|
catch (Exception $e)
|
|
{
|
|
$model->endUpdate();
|
|
throw($e);
|
|
}
|
|
$model->endUpdate();
|
|
|
|
// Turns the graph into XML data
|
|
$enc = new mxCodec();
|
|
$xmlNode = $enc->encode($model);
|
|
$xml = addslashes(htmlentities(str_replace("\n", "
",
|
|
$xmlNode->ownerDocument->saveXML($xmlNode))));
|
|
|
|
// Loads the template into a single string
|
|
$template = mxUtils::readFile("template.html");
|
|
|
|
// Replaces the placeholder in the template with the XML data
|
|
// which is then parsed into the graph model. Note: In a production
|
|
// environment you should use a template engine instead.
|
|
$page = str_replace("%graph%", $xml, $template);
|
|
|
|
// Makes sure there is no caching on the client side
|
|
header("Pragma: no-cache"); // HTTP 1.0
|
|
header("Cache-control: private, no-cache, no-store");
|
|
header("Expires: 0");
|
|
|
|
echo $page;
|
|
}
|
|
|
|
// Uses a local font so that all examples work on all platforms. This can be
|
|
// changed to vera on Mac or arial on Windows systems.
|
|
mxConstants::$DEFAULT_FONTFAMILY = "ttf/verah.ttf";
|
|
|
|
// If you can't get the fonts to render try using one of the following:
|
|
//mxConstants::$DEFAULT_FONTFAMILY = "C:\WINDOWS\Fonts\arial.ttf";
|
|
//mxConstants::$DEFAULT_FONTFAMILY = "verah"; putenv("GDFONTPATH=".realpath("./ttf"));
|
|
//mxConstants::$TTF_ENABLED = false;
|
|
|
|
// Handles save image request
|
|
if ($_SERVER["REQUEST_METHOD"] == "POST")
|
|
{
|
|
$xml = urldecode($_POST["xml"]);
|
|
|
|
// Creates a PNG representation of the file
|
|
$image = mxGraphViewImageReader::convert($xml, "#FFFFFF");
|
|
header("Content-Type: image/png");
|
|
echo mxUtils::encodeImage($image);
|
|
}
|
|
else
|
|
{
|
|
main();
|
|
}
|
|
?>
|