BrowzOS/sprdsht/graphs.php

257 lines
8.8 KiB
PHP

<?php
/**************************************************************************\
* Simple Groupware 0.632 *
* http://www.simple-groupware.de *
* Copyright (C) 2002-2010 by Thomas Bley *
* ------------------------------------------------------------------------ *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License Version 2 *
* as published by the Free Software Foundation; only version 2 *
* of the License, no later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* Version 2 along with this program; if not, write to the Free Software *
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, *
* MA 02111-1307, USA. *
\**************************************************************************/
error_reporting(E_ALL);
if (is_dir("artichow")) {
define("INCLUDE_PATH","artichow");
} else define("INCLUDE_PATH","../../../lib/artichow");
$cid = sha1(serialize($_GET).filemtime(__FILE__)).".png";
$cache_dir = "cache/";
if (is_dir("../../../../simple_cache/artichow/")) $cache_dir = "../../../../simple_cache/artichow/";
if (file_exists($cache_dir.$cid) and filesize($cache_dir.$cid)>0) {
if ($cache_dir=="cache/") {
header("Location: ".$cache_dir.$cid);
} else {
header("Content-Type: image/png; charset=utf-8");
readfile($cache_dir.$cid);
}
exit;
}
if (get_magic_quotes_gpc()) modify::stripslashes($_REQUEST);
$data = array(0);
if (!empty($_REQUEST["data"])) $data = explode(",",$_REQUEST["data"]);
$data2 = array();
if (!empty($_REQUEST["data2"])) $data2 = explode(",",$_REQUEST["data2"]);
$data3 = array();
if (!empty($_REQUEST["data3"])) $data3 = explode(",",$_REQUEST["data3"]);
$keys = array(0);
if (!empty($_REQUEST["keys"])) $keys = explode(",",$_REQUEST["keys"]);
foreach ($keys as $key=>$val) $keys[$key] = strip_tags(str_replace("<br>","\n",$val));
$height = 125;
if (!empty($_REQUEST["height"]) and is_numeric($_REQUEST["height"])) $height = $_REQUEST["height"];
$width = 300;
if (!empty($_REQUEST["width"]) and is_numeric($_REQUEST["width"])) $width = $_REQUEST["width"];
$title = "";
if (isset($_REQUEST["title"])) $title = $_REQUEST["title"];
$type = "bar";
if (!empty($_REQUEST["type"])) $type = $_REQUEST["type"];
if ($type=="bar" or $type=="baraccumulate") {
require(INCLUDE_PATH."/BarPlot.class.php");
$graph = new Graph($width, $height);
$graph->title->set($title);
$graph->title->setFont(new Tuffy(11));
$group = new PlotGroup;
$group->setSpace(2, 2);
$group->setPadding(25, 15, 27, 20);
$group->grid->setType(LINE_DASHED);
$group->grid->hideVertical(TRUE);
if (count($data2)>0) {
if ($type=="baraccumulate") {
$data3 = array();
foreach ($data2 as $key=>$val) $data3[$key] = $data2[$key] + (isset($data[$key])?$data[$key]:0);
$plot = new BarPlot($data3, 1, 1);
$plot->setBarColor(new Color(255,187,0,20));
$plot->setBarPadding(0.15, 0.15);
$plot->label->set($data2);
$plot->label->move(0, -5);
$group->add($plot);
}
}
if (count($data2)>0) {
if ($type=="baraccumulate") {
$plot = new BarPlot($data, 1, 1);
$plot->setBarColor(new Color(173,216,230));
} else {
$plot = new BarPlot($data, 1, 2);
$plot->setBarColor(new Color(173,216,230,30));
}
} else {
$plot = new BarPlot($data, 1, 1,0);
$plot->setBarColor(new Color(173,216,230,30));
}
$plot->setBarPadding(0.15, 0.15);
$plot->label->set($data);
$plot->label->move(0, -5);
if (!empty($_REQUEST["xtitle"]) or !empty($_REQUEST["ytitle"])) {
$group->setPadding(35, 15, 27, 27);
if (!empty($_REQUEST["xtitle"])) $group->axis->bottom->title->set($_REQUEST["xtitle"]);
if (!empty($_REQUEST["ytitle"])) $group->axis->left->title->set($_REQUEST["ytitle"]);
$group->axis->bottom->title->move(6, -6);
$group->axis->bottom->setTitleAlignment(LABEL_RIGHT);
$group->axis->left->title->move(-2, -4);
$group->axis->left->setTitleAlignment(LABEL_TOP);
}
$group->add($plot);
$group->axis->bottom->setLabelText($keys);
$group->axis->bottom->hideTicks(TRUE);
if (count($data2)>0 and $type!="baraccumulate") {
$plot = new BarPlot($data2, 2, 2);
$plot->setBarColor(new Color(255,187,0,20));
$plot->setBarPadding(0.15, 0.15);
$plot->label->set($data2);
$plot->label->move(0, -5);
$group->add($plot);
}
$graph->add($group);
} else if ($type=="pie") {
require(INCLUDE_PATH."/Pie.class.php");
$graph = new Graph($width, $height);
$graph->title->set($title);
$graph->title->setFont(new Tuffy(11));
$colors = array(new Color(102,205,0), new Color(122,197,205), new Color(238,197,145), new Color(238,180,34), new LightOrange, new LightPurple, new LightBlue, new LightRed, new LightPink);
$plot = new Pie($data,$colors);
$plot->setCenter(0.40, 0.55);
$plot->setSize(0.65, 0.7);
$plot->set3D(10);
$plot->setLabelPosition(10);
$plot->setLegend($keys);
$plot->legend->setPosition(1.37);
$plot->legend->shadow->setSize(0);
$plot->legend->setBackgroundColor(new Color(235,235,235));
$graph->add($plot);
} else if ($type=="line" or $type=="linesteps") {
require(INCLUDE_PATH."/LinePlot.class.php");
$graph = new Graph($width,$height);
$graph->title->set($title);
$graph->title->setFont(new Tuffy(11));
$group = new PlotGroup;
$group->setSpace(1, 0);
$group->setPadding(25, 15, 27, 20);
$group->grid->setType(LINE_DASHED);
$group->grid->hideVertical(TRUE);
if ($type=="linesteps") {
list($data_new,$data_label,$keys_new) = build_line_steps($width,$data,$keys);
} else {
$data_new = $data;
$data_label = $data;
$keys_new = $keys;
}
$plot = new LinePlot($data_new);
$plot->setColor(new Color(0,0,255));
$plot->setFillColor(new LightBlue(40));
$plot->label->set($data_label);
$plot->label->move(5,-7);
if (!empty($_REQUEST["xtitle"]) or !empty($_REQUEST["ytitle"])) {
$group->setPadding(35, 15, 27, 27);
if (!empty($_REQUEST["xtitle"])) $group->axis->bottom->title->set($_REQUEST["xtitle"]);
if (!empty($_REQUEST["ytitle"])) $group->axis->left->title->set($_REQUEST["ytitle"]);
$group->axis->bottom->title->move(4, -6);
$group->axis->bottom->setTitleAlignment(LABEL_RIGHT);
$group->axis->left->title->move(-2, -4);
$group->axis->left->setTitleAlignment(LABEL_TOP);
}
$plot->setSpace(4, 4, 10, 0);
$plot->setPadding(40, 15, 10, 40);
$plot->yAxis->title->move(-4, 0);
$plot->yAxis->setTitleAlignment(LABEL_TOP);
$group->add($plot);
$group->axis->bottom->setLabelText($keys_new);
$group->axis->bottom->hideTicks(TRUE);
if (count($data2)>0) {
if ($type=="linesteps") {
list($data_new,$data_label,$keys_new) = build_line_steps($width,$data2,$keys);
} else {
$data_new = $data2;
$data_label = $data2;
}
$plot = new LinePlot($data_new);
$plot->label->set($data_label);
$plot->label->move(5,-7);
$plot->setColor(new Color(255,165,0));
$plot->setFillColor(new LightOrange(80));
$group->add($plot);
}
$graph->add($group);
} else if ($type=="scatter") {
require(INCLUDE_PATH."/ScatterPlot.class.php");
$graph = new Graph($width,$height);
$graph->title->set($title);
$graph->title->setFont(new Tuffy(11));
$plot = new ScatterPlot($data, $keys);
$plot->grid->setType(LINE_DASHED);
$plot->grid->hideVertical(TRUE);
$plot->setSpace(6, 6, 6, 0);
$plot->setPadding(25, 15, 27, 20);
$graph->add($plot);
}
$graph->draw(str_replace("\\","/",realpath($cache_dir))."/".$cid);
if ($cache_dir=="cache/") {
header("Location: ".$cache_dir.$cid);
} else {
header("Content-Type: image/png; charset=utf-8");
readfile($cache_dir.$cid);
}
function build_line_steps($width,$data,$keys) {
$width /= 2;
$data_new = $data;
$data_label = $data;
$keys_new = $keys;
$last = -1;
for ($i=0; $i < $width; $i++) {
$curr = floor((count($data)-1)*(($i+1)/$width));
$data_label[$i] = "";
$keys_new[$i] = "";
if ($curr != $last) {
$keys_new[$i] = $keys[$curr];
$data_label[$i] = $data[$curr];
}
$data_new[$i] = $data[$curr];
$last = $curr;
}
return array($data_new,$data_label,$keys_new);
}
function modify_stripslashes(&$val) {
if (is_array($val)) array_walk($val,array("modify","stripslashes")); else $val = stripslashes($val);
}
?>