RE: [PEAR] Re: [PEAR-DEV] Re: Image_Graph Help Please

From: Date: Thu, 15 Sep 2005 20:10:30 +0000
Subject: RE: [PEAR] Re: [PEAR-DEV] Re: Image_Graph Help Please
Groups: php.pear.general 
Request: Send a blank email to pear-general+get-20993@lists.php.net to get a copy of this message
http://pear.php.net/package/Image_Graph/docs/0.6.0/Image_Graph/Image_Gra ph.html#methodImage_Graph Same thing though. Bug with Pear understanding Latest? > -----Original Message----- > From: Jesper Veggerby Hansen [mailto:pear.nosey@veggerby.dk] > Sent: Thursday, September 15, 2005 4:07 PM > To: Kilbride, James > Cc: Steve Brown; pear-general@lists.php.net > Subject: Re: [PEAR] Re: [PEAR-DEV] Re: Image_Graph Help Please > > Hi James, > > I don't know why but the web seems to misunderstand what > Latest version is... if you choose Latest version > documentation you seem to end up with documentation for > Image_Graph 0.3.0!!! > > /Jesper > > Kilbride, James wrote: > > $Graph =& Image_Graph::factory('graph', array(array('width' > => $width, > > 'height' => $height, 'driver' => 'gd'))); > > > > I got the same errors when I used your original file but htis one > > change gets rid of those errors. > > > > I sent you another fix Steve that doesn't handle the > driver, but this > > one does. This is out of the help file: > > > > > > http://pear.php.net/package/Image_Graph/docs/latest/Image_Graph/Image_ > > Gr > > aph.html#methodImage_Graph > > > > James Kilbride > > > > > > > >>-----Original Message----- > >>From: Steve Brown [mailto:Steve.Brown@ddpky.com] > >>Sent: Thursday, September 15, 2005 2:45 PM > >>To: Jesper Veggerby Hansen > >>Cc: pear-general@lists.php.net > >>Subject: RE: [PEAR] Re: [PEAR-DEV] Re: Image_Graph Help Please > >> > >>I am using it for BASE (Snort). > >> > >>Again, all the code is default. The only requirement for > pear was to > >>add a statement such as include_path "c:\php5\pear"; to > your php.ini > >>file. > >> > >><?php > >>/************************************************************* > >>********** > >>******** > >>** Basic Analysis and Security Engine (BASE) > >>** Copyright (C) 2004 BASE Project Team > >>** Copyright (C) 2000 Carnegie Mellon University > >>** > >>** (see the file 'base_main.php' for license details) > >>** > >>** Project Leads: Kevin Johnson <kjohnson@secureideas.net>, > Joel Esler > >><joelesler@users.sourceforge.net> > >>** Built upon work by Roman Danyliw <rdd@cert.org>, > >><roman@danyliw.com> > >>** > >>** Purpose: Purpose: Displays the actual .GIF/.PNG/.TIFF image > >>** of the chart > >>** > >>** Input GET/POST variables > >>** - width: chart width > >>** - height: chart width > >>** - pmargin0-3: plot margins > >>** - title: chart title > >>** - xaxis_label: x-axis label > >>** - yaxis_label: y-axis label > >>** - xdata[][]: data and label array for the y-axis > >>** - yaxis_scale: (boolean) 0: linear; 1: logarithmic > >>** - rotate_xaxis_lbl: (boolean) rotate X-axis labels 90 degrees > >>** - style: [bar|line] chooses the style of the chart > >>************************************************************** > >>********** > >>******** > >>** Authors: > >>************************************************************** > >>********** > >>******** > >>** Kevin Johnson <kjohnson@secureideas.net > >>** > >>************************************************************** > >>********** > >>******** > >>*/ > >> > >> include ("base_conf.php"); > >> include ("$BASE_path/includes/base_state_common.inc.php"); > >> include ("$BASE_path/base_graph_common.php"); > >> require_once ('Image/Graph.php'); > >> > >> session_start(); > >> > >> $xdata = $_SESSION['xdata']; > >> $width = ImportHTTPVar("width"); > >> $height = ImportHTTPVar("height"); > >> $pmargin0 = ImportHTTPVar("pmargin0"); > >> $pmargin1 = ImportHTTPVar("pmargin1"); > >> $pmargin2 = ImportHTTPVar("pmargin2"); > >> $pmargin3 = ImportHTTPVar("pmargin3"); $title = > >> ImportHTTPVar("title"); $xaxis_label = > ImportHTTPVar("xaxis_label"); > >> $yaxis_label = ImportHTTPVar("yaxis_label"); $yaxis_scale = > >> ImportHTTPVar("yaxis_scale"); $xaxis_grid = > >> ImportHTTPVar("xaxis_grid"); $yaxis_grid = > >> ImportHTTPVar("yaxis_grid"); $rotate_xaxis_lbl = > >> ImportHTTPVar("rotate_xaxis_lbl"); > >> $style = ImportHTTPVar("style"); > >> $chart_type = ImportHTTPVar("chart_type"); > >> > >> // Create the graph area, legends on bottom -- Alejandro > >> $Graph =& new Image_Graph(array('driver'=>'gd', > >>'width'=>$width,'height'=>$height)); > >> $Graph->add( > >> Image_Graph::vertical( > >> Image_Graph::factory('title', array($title, 16)), > >> Image_Graph::vertical( > >> $Plotarea = Image_Graph::factory('plotarea'), > >> $Legend = Image_Graph::factory('legend'), > >> 85 > >> ), > >> 10 > >> ) > >> ); > >> > >> if($style == "pie") { > >> $Legend->setPlotarea($Plotarea); > >> } > >> $AxisX =& $Plotarea->getAxis(IMAGE_GRAPH_AXIS_X); > >> > >> // Create the dataset -- Alejandro > >> $Dataset =& Image_Graph::factory('dataset'); > >> for ($i = 0; $i < count($xdata); $i++) { > >> $Dataset->addPoint($xdata[$i][0], $xdata[$i][1]); > >> /** > >> * I'm limiting the number of elements by 15. Can't > get nice > >>graphs with > >> * more than this. -- Alejandro > >> */ > >> if($chart_type > 4) { > >> if($i == 14) { > >> break; > >> } > >> } > >> } > >> $Plot =& $Plotarea->addNew($style, $Dataset); > >> if ( $style == "pie" ) { > >> $Plotarea->hideAxis(); > >> $Plot->explode(10); > >> } else { > >> $ArrayData =& > >>Image_Graph::factory('Image_Graph_DataPreprocessor_Array',$Dataset); > >> $AxisX->setDataPreprocessor($ArrayData); > >> $AxisX->setFontAngle('vertical'); > >> } > >> > >>$Marker =& $Plot->addNew('Image_Graph_Marker_Value', > >>IMAGE_GRAPH_PCT_Y_TOTAL); $PointingMarker =& > >>$Plot->addNew('Image_Graph_Marker_Pointing_Angular', > >>array(20, &$Marker)); > >>$Plot->setMarker($PointingMarker); > >>$Marker->setDataPreprocessor(Image_Graph::factory('Image_Graph > >>_DataPrepr > >>ocessor_Formatted', '%0.1f%%')); $fill =& > >>Image_Graph::factory('Image_Graph_Fill_Array'); > >>if($style == "pie") { > >> for($ff = 0; $ff < $i; $ff++) { > >> // Need to be revisited. Thinking on getting a random color > >>from the array. -- Alejandro > >> $fill->addColor($named_colors[$ff]); > >> } > >>} else { > >> // Need to be revisited. If bar or line graphs, > there's only one > >>color. -- Alejandro > >> $fill->addColor("cyan"); > >>} > >> > >>// Default 'cosmetic' -- Alejandro > >>$Graph->setBackgroundColor('gray@0.2'); > >>$Graph->setBorderColor('black'); > >>$Graph->setPadding(10); > >>$Plotarea->setBackgroundColor('white'); > >>$Plotarea->setBorderColor('black'); > >>$Plotarea->setPadding(10); > >>$Plot->setFillStyle($fill); > >>$Plot->Radius = 2; > >> > >>// Show time! -- Alejandro > >>$Graph->done(); > >> > >>?> > >> > >>Steve Brown > >>Systems Analyst > >>Delta Dental Plan of Kentucky > >>(502) 736-4646 > >>Steve.Brown@ddpky.com > >> > >>-----Original Message----- > >>From: Jesper Veggerby Hansen [mailto:pear.nosey@veggerby.dk] > >>Sent: Thursday, September 15, 2005 2:27 PM > >>To: Steve Brown > >>Cc: pear-general@lists.php.net > >>Subject: Re: [PEAR] Re: [PEAR-DEV] Re: Image_Graph Help Please > >> > >>Hi, > >> > >>What I meant was YOUR code, how are YOU using Image_Graph? > >> > >>/Jesper > >> > >>Steve Brown wrote: > >> > >>>Jesper, > >>> > >>> This is my graph.php document. I haven't changed > >> > >>anything. It is > >> > >>>the original code from the download. I uninstalled > >> > >>everything earlier > >> > >>>and reloaded the pear files. I had Image_Graph-0.6.0 on > >> > >>there and now > >> > >>>I have Image_Graph-0.5.0. I don't believe this matters. I > >> > >>will > >> > >>>change it back to 0.6.0 later. > >>> > >>>The base_graph_display.php file has a require_once > >> > >>('Image/Graph.php'); > >> > >>>statement. > >>> > >>>Thanks, > >>>Steve > >>> > >>><?php > >>> > >>>/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ > >>> > >>>/** > >>> * Image_Graph - Main class for the graph creation. > >>> * > >>> * PHP versions 4 and 5 > >>> * > >>> * LICENSE: This library is free software; you can redistribute it > >>>and/or modify > >>> * it under the terms of the GNU Lesser General Public License as > >>>published by > >>> * the Free Software Foundation; either version 2.1 of the > >> > >>License, or > >> > >>>(at your > >>> * option) any later version. This library 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 > >> > >>>Lesser > >>> * General Public License for more details. You should have > >> > >>received a > >> > >>>copy of > >>> * the GNU Lesser General Public License along with this > >> > >>library; if > >> > >>>not, write > >>> * to the Free Software Foundation, Inc., 59 Temple Place, > >> > >>Suite 330, > >> > >>>Boston, MA > >>> * 02111-1307 USA > >>> * > >>> * @category Images > >>> * @package Image_Graph > >>> * @author Jesper Veggerby <pear.nosey@veggerby.dk> > >>> * @copyright Copyright (C) 2003, 2004 Jesper Veggerby Hansen > >>> * @license > >>> http://www.gnu.org/copyleft/lesser.html > LGPL License > >> > >>2.1 > >> > >>> * @version CVS: $Id: Graph.php,v 1.52 2005/08/08 19:09:19 nosey > >> > >>Exp > >> > >>>$ > >>> * @link > >>> http://pear.php.net/package/Image_Graph > >>> */ > >>> > >>>/** > >>> * Include file PEAR/ErrorStack.php - for error handling */ > >>>require_once 'PEAR/ErrorStack.php'; > >>> > >>>/** > >>> * Include file Image/Graph/Element.php */ require_once > >>>'Image/Graph/Element.php'; > >>> > >>>/** > >>> * Include file Image/Graph/Constants.php */ require_once > >>>'Image/Graph/Constants.php'; > >>> > >>>/** > >>> * Main class for the graph creation. > >>> * > >>> * This is the main class, it manages the canvas and performs the > >> > >>final > >> > >>>output > >>> * by sequentialy making the elements output their results. > >> > >>The final > >> > >>>output is > >>> * handled using the {@link Image_Canvas} classes which makes it > >>>possible > >>> * to use different engines (fx GD, PDFlib, libswf, etc) > >> > >>for output to > >> > >>>several > >>> * formats with a non-intersecting API. > >>> * > >>> * This class also handles coordinates and the correct > managment of > >>>setting the > >>> * correct coordinates on child elements. > >>> * > >>> * @category Images > >>> * @package Image_Graph > >>> * @author Jesper Veggerby <pear.nosey@veggerby.dk> > >>> * @copyright Copyright (C) 2003, 2004 Jesper Veggerby Hansen > >>> * @license http://www.gnu.org/copyleft/lesser.html‰_OðÑ3 > >>> 1¸{ÂB¡} > LGPL License > >> > >>2.1 > >> > >>> * @version Release: 0.5.0 > >>> * @link > >>> http://pear.php.net/package/Image_Graph > >>> */ > >>>class Image_Graph extends Image_Graph_Element { > >>> > >>> /** > >>> * Show generation time on graph > >>> * @var bool > >>> * @access private > >>> */ > >>> var $_showTime = false; > >>> > >>> /** > >>> * Display errors on the canvas > >>> * @var boolean > >>> * @access private > >>> */ > >>> var $_displayErrors = false; > >>> > >>> /** > >>> * Image_Graph [Constructor]. > >>> * > >>> * If passing the 3 parameters they are defined as follows:' > >>> * > >>> * Fx.: > >>> * > >>> * $Graph =& new Image_Graph(400, 300); > >>> * > >>> * or using the factory method: > >>> * > >>> * $Graph =& Image_Graph::factory('graph', array(400, 300)); > >>> * > >>> * This causes a 'png' canvas to be created by default. > >>> * > >>> * Otherwise use a single parameter either as an > >> > >>associated array > >>or > >> > >>>passing > >>> * the canvas along to the constructor: > >>> * > >>> * 1) Create a new canvas with the following parameters: > >>> * > >>> * 'canvas' - The canvas type, can be any of 'gd', > >> > >>'jpg', 'png' or > >> > >>>'svg' > >>> * (more to come) - if omitted the default is 'gd' > >>> * > >>> * 'width' - The width of the graph > >>> * > >>> * 'height' - The height of the graph > >>> * > >>> * An example of this usage: > >>> * > >>> * $Graph =& Image_Graph::factory('graph', > >> > >>arrray(array('width' => > >> > >>>400, > >>> * 'height' => 300, 'canvas' => 'jpg'))); > >>> * > >>> * NB! In ths case remember the "double" array (see {@link > >>>Image_Graph:: > >>> * factory()}) > >>> * > >>> * 2) Use the canvas specified, pass a valid Image_Canvas as > >>> * parameter. Remember to pass by reference, i. e. > &amp;$canvas, > >>>fx.: > >>> * > >>> * $Graph =& new Image_Graph($Canvas); > >>> * > >>> * or using the factory method: > >>> * > >>> * $Graph =& Image_Graph::factory('graph', $Canvas)); > >>> * > >>> * @param mixed $params The width of the graph, an > indexed array > >>> * describing a new canvas or a valid {@link > >> > >>Image_Canvas} object > >> > >>> * @param int $height The height of the graph in pixels > >>> * @param bool $createTransparent Specifies whether the graph > >> > >>should > >> > >>>be > >>> * created with a transparent background (fx for > PNG's - note: > >>>transparent > >>> * PNG's is not supported by Internet Explorer!) > >>> */ > >>> > >>> //$Graph =& Image_Graph::factory('graph', > >> > >>arrray(array('width' => > >> > >>>400, > >>> //'height' => 300, 'canvas' => 'jpg'))); > >>> > >>> //$Graph =& Image_Graph::factory('graph', $Canvas)); > >>> > >>> function &Image_Graph($params, $height = false, > >> > >>$createTransparent > >>= > >> > >>>false) > >>> { > >>> parent::Image_Graph_Element(); > >>> > >>> $this->setFont(Image_Graph::factory('Image_Graph_Font')); > >>> > >>> if (defined('IMAGE_GRAPH_DEFAULT_CANVAS_TYPE')) { > >>> $canvasType = IMAGE_GRAPH_DEFAULT_CANVAS_TYPE; > >>> } else { > >>> $canvasType = 'png'; // use GD as default, if > >> > >>nothing else > >> > >>>is specified > >>> } > >>> > >>> if (is_array($params)) { > >>> if (isset($params['canvas'])) { > >>> $canvasType = $params['canvas']; > >>> } > >>> > >>> $width = 0; > >>> $height = 0; > >>> > >>> if (isset($params['width'])) { > >>> $width = $params['width']; > >>> } > >>> > >>> if (isset($params['height'])) { > >>> $height = $params['height']; > >>> } > >>> } elseif (is_a($params, 'Image_Canvas')) { > >>> $this->_canvas =& $params; > >>> $width = $this->_canvas->getWidth(); > >>> $height = $this->_canvas->getHeight(); > >>> } > >>> > >>> if (is_int($params)) { > >>> $width = $params; > >>> } > >>> > >>> if ($this->_canvas == null) { > >>> include_once 'Image/Canvas.php'; > >>> $this->_canvas =& > >>> Image_Canvas::factory( > >>> $canvasType, > >>> array('width' => $width, 'height' => > >>> $height) > >>> ); > >>> } > >>> > >>> $this->_setCoords(0, 0, $width - 1, $height - 1); > >>> } > >>> > >>> /** > >>> * Gets the canvas for this graph. > >>> * > >>> * The canvas is set by either passing it to the constructor > >> > >>{@link > >> > >>> * Image_Graph::ImageGraph()} or using the {@link > >>>Image_Graph::setCanvas()} > >>> * method. > >>> * > >>> * @return Image_Canvas The canvas used by this graph > >>> * @access private > >>> * @since 0.3.0dev2 > >>> */ > >>> function &_getCanvas() > >>> { > >>> return $this->_canvas; > >>> } > >>> > >>> /** > >>> * Sets the canvas for this graph. > >>> * > >>> * Calling this method makes this graph use the newly > specified > >>>canvas for > >>> * handling output. This method should be called > >> > >>whenever multiple > >> > >>> * 'outputs' are required. Invoke this method after calls to > >> > >>{@link > >> > >>> * Image_Graph:: done()} has been performed, to switch canvass. > >>> * > >>> * @param Image_Canvas $canvas The new canvas > >>> * @return Image_Canvas The new canvas > >>> * @since 0.3.0dev2 > >>> */ > >>> function &setCanvas(&$canvas) > >>> { > >>> $this->_canvas =& $canvas; > >>> $this->_setCoords( > >>> 0, > >>> 0, > >>> $this->_canvas->getWidth() - 1, > >>> $this->_canvas->getHeight() - 1 > >>> ); > >>> return $this->_canvas; > >>> } > >>> > >>> /** > >>> * Gets a very precise timestamp > >>> * > >>> * @return The number of seconds to a lot of decimals > >>> * @access private > >>> */ > >>> function _getMicroTime() > >>> { > >>> list($usec, $sec) = explode(' ', microtime()); > >>> return ((float)$usec + (float)$sec); > >>> } > >>> > >>> /** > >>> * Gets the width of this graph. > >>> * > >>> * The width is returned as 'defined' by the canvas. > >>> * > >>> * @return int the width of this graph > >>> */ > >>> function width() > >>> { > >>> return $this->_canvas->getWidth(); > >>> } > >>> > >>> /** > >>> * Gets the height of this graph. > >>> * > >>> * The height is returned as 'defined' by the canvas. > >>> * > >>> * @return int the height of this graph > >>> */ > >>> function height() > >>> { > >>> return $this->_canvas->getHeight(); > >>> } > >>> > >>> /** > >>> * Enables displaying of errors on the output. > >>> * > >>> * Use this method to enforce errors to be displayed on the > >> > >>output. > >> > >>>Calling > >>> * this method makes PHP uses this graphs error handler > >> > >>as default > >> > >>>{@link > >>> * Image_Graph::_default_error_handler()}. > >>> */ > >>> function displayErrors() > >>> { > >>> $this->_displayErrors = true; > >>> set_error_handler(array(&$this, '_default_error_handler')); > >>> } > >>> > >>> /** > >>> * Sets the log method for this graph. > >>> * > >>> * Use this method to enable logging. This causes any errors > >> > >>caught > >> > >>> * by either the error handler {@see > >> > >>Image_Graph::displayErrors()} > >> > >>> * or explicitly by calling {@link > Image_Graph_Common::_error()} > >> > >>be > >> > >>> * logged using the specified logging method. > >>> * > >>> * If a filename is specified as log method, a Log object is > >> > >>created > >> > >>>(using > >>> * the 'file' handler), with a handle of 'Image_Graph > >> > >>Error Log'. > >> > >>> * > >>> * Logging requires {@link Log}. > >>> * > >>> * @param mixed $log The log method, either a Log object or > >> > >>filename > >> > >>>to log > >>> * to > >>> * @since 0.3.0dev2 > >>> */ > >>> function setLog($log) > >>> { > >>> $stack =& $this->_getErrorStack(); > >>> if (is_string($log)) { > >>> include_once 'Log.php'; > >>> $log =& Log::factory('file', $log, 'Image_Graph > >>> Error > >> > >>Log'); > >> > >>> } > >>> $stack->setLogger($log); > >>> } > >>> > >>> /** > >>> * Factory method to create Image_Graph objects. > >>> * > >>> * Used for 'lazy including', i.e. loading only what is > >> > >>necessary, > >> > >>>when it > >>> * is necessary. If only one parameter is required for the > >>>constructor of > >>> * the class simply pass this parameter as the $params > >> > >>parameter, > >> > >>>unless the > >>> * parameter is an array or a reference to a value, in > that case > >> > >>you > >> > >>>must > >>> * 'enclose' the parameter in an array. Similar if the > >> > >>constructor > >> > >>>takes > >>> * more than one parameter specify the parameters in an > >> > >>array, i.e > >> > >>> * > >>> * Image_Graph::factory('MyClass', array($param1, $param2, > >>>&$param3)); > >>> * > >>> * Variables that need to be passed by reference *must* > >> > >>have the > >> > >>>&amp; > >>> * before the variable, i.e: > >>> * > >>> * Image_Graph::factory('line', &$Dataset); > >>> * > >>> * or > >>> * > >>> * Image_graph::factory('bar', array(array(&$Dataset1, > >> > >>&$Dataset2), > >> > >>> * 'stacked')); > >>> * > >>> * Class name can be either of the following: > >>> * > >>> * 1 The 'real' Image_Graph class name, i.e. > >> > >>Image_Graph_Plotarea > >>or > >> > >>> * Image_Graph_Plot_Line > >>> * > >>> * 2 Short class name (leave out Image_Graph) and retain case, > >> > >>i.e. > >> > >>> * Plotarea, Plot_Line *not* plot_line > >>> * > >>> * 3 Class name 'alias', the following are supported: > >>> * > >>> * 'graph' = Image_Graph > >>> * > >>> * 'plotarea' = Image_Graph_Plotarea > >>> * > >>> * 'line' = Image_Graph_Plot_Line > >>> * > >>> * 'area' = Image_Graph_Plot_Area > >>> * > >>> * 'bar' = Image_Graph_Plot_Bar > >>> * > >>> * 'pie' = Image_Graph_Plot_Pie > >>> * > >>> * 'radar' = Image_Graph_Plot_Radar > >>> * > >>> * 'step' = Image_Graph_Plot_Step > >>> * > >>> * 'impulse' = Image_Graph_Plot_Impulse > >>> * > >>> * 'dot' or 'scatter' = Image_Graph_Plot_Dot > >>> * > >>> * 'smooth_line' = Image_Graph_Plot_Smoothed_Line > >>> * > >>> * 'smooth_area' = Image_Graph_Plot_Smoothed_Area > >>> > >>> * 'dataset' = Image_Graph_Dataset_Trivial > >>> * > >>> * 'random' = Image_Graph_Dataset_Random > >>> * > >>> * 'function' = Image_Graph_Dataset_Function > >>> * > >>> * 'vector' = Image_Graph_Dataset_VectorFunction > >>> * > >>> * 'axis' = Image_Graph_Axis > >>> * > >>> * 'axis_log' = Image_Graph_Axis_Logarithmic > >>> * > >>> * 'title' = Image_Graph_Title > >>> * > >>> * 'line_grid' = Image_Graph_Grid_Lines > >>> * > >>> * 'bar_grid' = Image_Graph_Grid_Bars > >>> * > >>> * 'polar_grid' = Image_Graph_Grid_Polar > >>> * > >>> * 'legend' = Image_Graph_Legend > >>> * > >>> * 'font' = Image_Graph_Font > >>> * > >>> * 'ttf_font' = Image_Graph_Font > >>> * > >>> * 'Image_Graph_Font_TTF' = Image_Graph_Font (to > >> > >>maintain BC with > >> > >>>Image_Graph_Font_TTF) > >>> * > >>> * 'gradient' = Image_Graph_Fill_Gradient > >>> * > >>> * 'icon_marker' = Image_Graph_Marker_Icon > >>> * > >>> * 'value_marker' = Image_Graph_Marker_Value > >>> * > >>> * @param string $class The class for the new object > >>> * @param mixed $params The paramaters to pass to the > >> > >>constructor > >> > >>> * @return object A new object for the class > >>> * @static > >>> */ > >>> function &factory($class, $params = null) > >>> { > >>> static $Image_Graph_classAliases = array( > >>> 'graph' => 'Image_Graph', > >>> 'plotarea' => 'Image_Graph_Plotarea', > >>> > >>> > >>> 'line' => 'Image_Graph_Plot_Line', > >>> 'area' => 'Image_Graph_Plot_Area', > >>> 'bar' => 'Image_Graph_Plot_Bar', > >>> 'smooth_line' => > >>>'Image_Graph_Plot_Smoothed_Line', > >>> 'smooth_area' => > >>>'Image_Graph_Plot_Smoothed_Area', > >>> 'pie' => 'Image_Graph_Plot_Pie', > >>> 'radar' => 'Image_Graph_Plot_Radar', > >>> 'step' => 'Image_Graph_Plot_Step', > >>> 'impulse' => 'Image_Graph_Plot_Impulse', > >>> 'dot' => 'Image_Graph_Plot_Dot', > >>> 'scatter' => 'Image_Graph_Plot_Dot', > >>> > >>> 'dataset' => > >>>'Image_Graph_Dataset_Trivial', > >>> 'random' => > >>>'Image_Graph_Dataset_Random', > >>> 'function' => > >>>'Image_Graph_Dataset_Function', > >>> 'vector' => > >>>'Image_Graph_Dataset_VectorFunction', > >>> > >>> 'axis' => 'Image_Graph_Axis', > >>> 'axis_log' => > >>>'Image_Graph_Axis_Logarithmic', > >>> > >>> 'title' => 'Image_Graph_Title', > >>> > >>> 'line_grid' => 'Image_Graph_Grid_Lines', > >>> 'bar_grid' => 'Image_Graph_Grid_Bars', > >>> 'polar_grid' => 'Image_Graph_Grid_Polar', > >>> > >>> 'legend' => 'Image_Graph_Legend', > >>> 'font' => 'Image_Graph_Font', > >>> 'ttf_font' => 'Image_Graph_Font', > >>> 'Image_Graph_Font_TTF' => > >> > >>'Image_Graph_Font', // BC with > >> > >>>Image_Graph_Font_TTF > >>> 'gradient' => 'Image_Graph_Fill_Gradient', > >>> > >>> 'icon_marker' => 'Image_Graph_Marker_Icon', > >>> 'value_marker' => 'Image_Graph_Marker_Value' > >>> ); > >>> > >>> if (substr($class, 0, 11) != 'Image_Graph') { > >>> if (isset($Image_Graph_classAliases[$class])) { > >>> $class = $Image_Graph_classAliases[$class]; > >>> } else { > >>> $class = 'Image_Graph_' . $class; > >>> } > >>> } > >>> > >>> include_once str_replace('_', '/', $class) . > >>> '.php'; > >>> > >>> if (is_array($params)) { > >>> switch (count($params)) { > >>> case 1: > >>> return new $class( > >>> $params[0] > >>> ); > >>> break; > >>> > >>> case 2: > >>> return new $class( > >>> $params[0], > >>> $params[1] > >>> ); > >>> break; > >>> > >>> case 3: > >>> return new $class( > >>> $params[0], > >>> $params[1], > >>> $params[2] > >>> ); > >>> break; > >>> > >>> case 4: > >>> return new $class( > >>> $params[0], > >>> $params[1], > >>> $params[2], > >>> $params[3] > >>> ); > >>> break; > >>> > >>> case 5: > >>> return new $class( > >>> $params[0], > >>> $params[1], > >>> $params[2], > >>> $params[3], > >>> $params[4] > >>> ); > >>> break; > >>> > >>> case 6: > >>> return new $class( > >>> $params[0], > >>> $params[1], > >>> $params[2], > >>> $params[3], > >>> $params[4], > >>> $params[5] > >>> ); > >>> break; > >>> > >>> case 7: > >>> return new $class( > >>> $params[0], > >>> $params[1], > >>> $params[2], > >>> $params[3], > >>> $params[4], > >>> $params[5], > >>> $params[6] > >>> ); > >>> break; > >>> > >>> case 8: > >>> return new $class( > >>> $params[0], > >>> $params[1], > >>> $params[2], > >>> $params[3], > >>> $params[4], > >>> $params[5], > >>> $params[6], > >>> $params[7] > >>> ); > >>> break; > >>> > >>> case 9: > >>> return new $class( > >>> $params[0], > >>> $params[1], > >>> $params[2], > >>> $params[3], > >>> $params[4], > >>> $params[5], > >>> $params[6], > >>> $params[7], > >>> $params[8] > >>> ); > >>> break; > >>> > >>> case 10: > >>> return new $class( > >>> $params[0], > >>> $params[1], > >>> $params[2], > >>> $params[3], > >>> $params[4], > >>> $params[5], > >>> $params[6], > >>> $params[7], > >>> $params[8], > >>> $params[9] > >>> ); > >>> break; > >>> > >>> default: > >>> return new $class(); > >>> break; > >>> > >>> } > >>> } else { > >>> if ($params == null) { > >>> return new $class(); > >>> } else { > >>> return new $class($params); > >>> } > >>> } > >>> } > >>> > >>> /** > >>> * Factory method to create layouts. > >>> * > >>> * This method is used for easy creation, since using {@link > >>>Image_Graph:: > >>> * factory()} does not work with passing newly created objects > >> > >>from > >> > >>> * Image_Graph::factory() as reference, this is > >> > >>something that is > >> > >>> * fortunately fixed in PHP5. Also used for 'lazy > >> > >>including', i.e. > >> > >>>loading > >>> * only what is necessary, when it is necessary. > >>> * > >>> * Use {@link Image_Graph::horizontal()} or {@link > >>>Image_Graph::vertical()} > >>> * instead for easier access. > >>> * > >>> * @param mixed $layout The type of layout, can be either > >> > >>'Vertical' > >> > >>> * or 'Horizontal' (case sensitive) > >>> * @param Image_Graph_Element $part1 The 1st part of the layout > >>> * @param Image_Graph_Element $part2 The 2nd part of the layout > >>> * @param int $percentage The percentage of the layout > >> > >>to split at > >> > >>> * @return Image_Graph_Layout The newly created layout object > >>> * @static > >>> */ > >>> function &layoutFactory($layout, &$part1, &$part2, > $percentage = > >> > >>50) > >> > >>> { > >>> include_once "Image/Graph/Layout/$layout.php"; > >>> $class = "Image_Graph_Layout_$layout"; > >>> return new $class($part1, $part2, $percentage); > >>> } > >>> > >>> /** > >>> * Factory method to create horizontal layout. > >>> * > >>> * See {@link Image_Graph::layoutFactory()} > >>> * > >>> * @param Image_Graph_Element $part1 The 1st (left) > part of the > >>>layout > >>> * @param Image_Graph_Element $part2 The 2nd (right) > >> > >>part of the > >> > >>>layout > >>> * @param int $percentage The percentage of the layout > >> > >>to split at > >> > >>> * (percentage of total height from the left side) > >>> * @return Image_Graph_Layout The newly created layout object > >>> * @static > >>> */ > >>> function &horizontal(&$part1, &$part2, $percentage = 50) > >>> { > >>> return Image_Graph::layoutFactory('Horizontal', $part1, > >> > >>$part2, > >> > >>>$percentage); > >>> } > >>> > >>> /** > >>> * Factory method to create vertical layout. > >>> * > >>> * See {@link Image_Graph::layoutFactory()} > >>> * > >>> * @param Image_Graph_Element $part1 The 1st (top) part of the > >>>layout > >>> * @param Image_Graph_Element $part2 The 2nd (bottom) > >> > >>part of the > >> > >>>layout > >>> * @param int $percentage The percentage of the layout > >> > >>to split at > >> > >>> * (percentage of total width from the top edge) > >>> * @return Image_Graph_Layout The newly created layout object > >>> * @static > >>> */ > >>> function &vertical(&$part1, &$part2, $percentage = 50) > >>> { > >>> return Image_Graph::layoutFactory('Vertical', > >> > >>$part1, $part2, > >> > >>>$percentage); > >>> } > >>> > >>> /** > >>> * The error handling routine set by set_error_handler(). > >>> * > >>> * This method is used internaly by Image_Graph and PHP > >> > >>as a proxy > >> > >>>for {@link > >>> * Image_Graph::_error()}. > >>> * > >>> * @param string $error_type The type of error being handled. > >>> * @param string $error_msg The error message being handled. > >>> * @param string $error_file The file in which the > >> > >>error occurred. > >> > >>> * @param integer $error_line The line in which the error > >> > >>occurred. > >> > >>> * @param string $error_context The context in which the error > >>>occurred. > >>> * @access private > >>> */ > >>> function _default_error_handler($error_type, $error_msg, > >>>$error_file, $error_line, $error_context) > >>> { > >>> switch( $error_type ) { > >>> case E_ERROR: > >>> $level = 'error'; > >>> break; > >>> > >>> case E_USER_ERROR: > >>> $level = 'user error'; > >>> break; > >>> > >>> case E_WARNING: > >>> $level = 'warning'; > >>> break; > >>> > >>> case E_USER_WARNING: > >>> $level = 'user warning'; > >>> break; > >>> > >>> case E_NOTICE: > >>> $level = 'notice'; > >>> break; > >>> > >>> case E_USER_NOTICE: > >>> $level = 'user notice'; > >>> break; > >>> > >>> default: > >>> $level = '(unknown)'; > >>> break; > >>> > >>> } > >>> > >>> $this->_error("PHP $level: $error_msg", > >>> array( > >>> 'type' => $error_type, > >>> 'file' => $error_file, > >>> 'line' => $error_line, > >>> 'context' => $error_context > >>> ) > >>> ); > >>> } > >>> > >>> /** > >>> * Displays the errors on the error stack. > >>> * > >>> * Invoking this method cause all errors on the error > >> > >>stack to be > >> > >>>displayed > >>> * on the graph-output, by calling the {@link > >>>Image_Graph::_displayError()} > >>> * method. > >>> * > >>> * @access private > >>> */ > >>> function _displayErrors() > >>> { > >>> $stack =& $this->_getErrorStack(); > >>> if ($stack->hasErrors()) { > >>> $errors = $stack->getErrors(); > >>> if (is_array($errors)) { > >>> $y = 0; > >>> foreach ($errors as $error) { > >>> $this->_displayError(0, $y, $error); > >>> $y += 20; > >>> } > >>> } > >>> } > >>> } > >>> > >>> /** > >>> * Display an error from the error stack. > >>> * > >>> * This method writes error messages caught from the {@link > >>>Image_Graph:: > >>> * _default_error_handler()} if {@Image_Graph::displayErrors()} > >> > >>was > >> > >>>invoked, > >>> * and the error explicitly set by the system using {@link > >>> * Image_Graph_Common::_error()}. > >>> * > >>> * @param int $x The horizontal position of the error message > >>> * @param int $y The vertical position of the error message > >>> * @param array $error The error context > >>> * > >>> * @access private > >>> */ > >>> function _displayError($x, $y, $error) > >>> { > >>> $canvas =& $error['params']['canvas']; > >>> if (is_a($canvas, 'Image_Canvas')) { > >>> $canvas->setFont(array('font' => 1, 'color' > >>> => > >> > >>'black')); > >> > >>> $canvas->write($x, $y, $error['message']); > >>> } > >>> } > >>> > >>> /** > >>> * Enable caching of the output. > >>> * > >>> * Any change at all to any part of the graph makes it output > >> > >>again. > >> > >>>Do > >>> * *NOT* use caching with plots using {@link > >>>Image_Graph_Dataset_Random}, > >>> * since the graph will (always) change. The specified cache > >>>directory must > >>> * exist prior to caching. > >>> * > >>> * Requires {@link Cache}. > >>> * > >>> * @param string $cacheDir The directory where cached files are > >> > >>put. > >> > >>>If > >>> * false caching is disabled. > >>> */ > >>> function cache($cacheDir = 'cache/') > >>> { > >>> $this->_cache = $cacheDir; > >>> } > >>> > >>> /** > >>> * Outputs this graph using the canvas. > >>> * > >>> * This causes the graph to make all elements perform their > >> > >>output. > >> > >>>Their > >>> * result is 'written' to the output using the canvas, > >> > >>which also > >> > >>>performs > >>> * the actual output, fx. it being to a file or > directly to the > >>>browser > >>> * (in the latter case, the canvas will also make sure > >> > >>the correct > >> > >>>HTTP > >>> * headers are sent, making the browser handle the output > >> > >>correctly, > >> > >>>if > >>> * supported by it). > >>> * > >>> * Parameters are the ones supported by the canvas, common ones > >> > >>are: > >> > >>> * > >>> * 'filename' To output to a file instead of browser > >>> * > >>> * 'tohtml' Return a HTML string that encompasses the current > >>>graph/canvas - this > >>> * implies an implicit save using the following parameters: > >>>'filename' The "temporary" > >>> * filename of the graph, 'filepath' A path in the file system > >> > >>where > >> > >>>Image_Graph can > >>> * store the output (this file must be in > DOCUMENT_ROOT scope), > >>>'urlpath' The URL that the > >>> * 'filepath' corresponds to (i.e. filepath + filename must be > >>>reachable from a browser using > >>> * urlpath + filename) > >>> * > >>> * @param mixed $param The output parameters to pass to > >> > >>the canvas > >> > >>> * @return bool Was the output 'good' (true) or 'bad' > >>> (false). > >>> */ > >>> function done($param = false) > >>> { > >>> $this->_reset(); > >>> return $this->_done($param); > >>> } > >>> > >>> /** > >>> * Outputs this graph using the canvas. > >>> * > >>> * This causes the graph to make all elements perform their > >> > >>output. > >> > >>>Their > >>> * result is 'written' to the output using the canvas, > >> > >>which also > >> > >>>performs > >>> * the actual output, fx. it being to a file or > directly to the > >>>browser > >>> * (in the latter case, the canvas will also make sure > >> > >>the correct > >> > >>>HTTP > >>> * headers are sent, making the browser handle the output > >> > >>correctly, > >> > >>>if > >>> * supported by it). > >>> * > >>> * @param mixed $param The output parameters to pass to > >> > >>the canvas > >> > >>> * @return bool Was the output 'good' (true) or 'bad' > >>> (false). > >>> * @access private > >>> */ > >>> function _done($param = false) > >>> { > >>> $useCached = false; > >>> $timeStart = $this->_getMicroTime(); > >>> > >>> if ($useCached === false) { > >>> if ($this->_shadow) { > >>> $this->setPadding(20); > >>> $this->_setCoords( > >>> $this->_left, > >>> $this->_top, > >>> $this->_right - 10, > >>> $this->_bottom - 10); > >>> } > >>> > >>> $this->_updateCoords(); > >>> > >>> > >>> if ($this->_getBackground()) { > >>> $this->_canvas->rectangle( > >>> array( > >>> 'x0' => $this->_left, > >>> 'y0' => $this->_top, > >>> 'x1' => $this->_right, > >>> 'y1' => $this->_bottom > >>> ) > >>> ); > >>> } > >>> > >>> $result = parent::_done(); > >>> > >>> if ($this->_displayErrors) { > >>> $this->_displayErrors(); > >>> } > >>> > >>> $timeEnd = $this->_getMicroTime(); > >>> > >>> if (($this->_showTime) || > >>> ((isset($param['showtime'])) && > >>> ($param['showtime'] > >> > >>=== > >> > >>>true)) > >>> ) { > >>> $text = 'Generated in ' . > >>> sprintf('%0.3f', $timeEnd - $timeStart) > >> > >>. ' sec'; > >> > >>> $this->write( > >>> $this->_right, > >>> $this->_bottom, > >>> $text, > >>> IMAGE_GRAPH_ALIGN_RIGHT + > >> > >>IMAGE_GRAPH_ALIGN_BOTTOM, > >> > >>> array('color' => 'red') > >>> ); > >>> } > >>> > >>> } > >>> > >>> if (isset($param['filename'])) { > >>> if ($param['tohtml']) { > >>> return $this->_canvas->toHtml($param); > >>> } > >>> else { > >>> return $this->_canvas->save($param); > >>> } > >>> } else { > >>> return $this->_canvas->show($param); > >>> } > >>> } > >>>} > >>> > >>>?> > >>> > >>>Steve Brown > >>>Systems Analyst > >>>Delta Dental Plan of Kentucky > >>>(502) 736-4646 > >>>Steve.Brown@ddpky.com > >>> > >>>-----Original Message----- > >>>From: Jesper Veggerby Hansen [mailto:pear.nosey@veggerby.dk] > >>>Sent: Thursday, September 15, 2005 2:10 PM > >>>To: Steve Brown > >>>Subject: Re: [PEAR] Re: [PEAR-DEV] Re: Image_Graph Help Please > >>> > >>>Hi Steve, > >>> > >>>Could you please provide some code of what you are actually > >> > >>doing, I'm > >> > >> > >>>shooting in blind here! > >>> > >>>What I mean by "class id" is the name of the class or the > >> > >>alias. The > >> > >>>factory method simply instantiates the class and does the > >> > >>include for > >> > >>>you in at the same time, so you need to write something like > >>> > >>>$Plotarea =& Image_Graph::factory('plotarea'); > >>> > >>>What it looks like is that you have done something like: > >>> > >>>$Plotarea =& Image_Graph::factory(''); > >>> > >>>Although that might not be the case which is why some could > >> > >>would help > >> > >>>alot! > >>> > >>>And for the future please: > >>>1) Write only to one mailing list > >>>2) Reply-all so the mailing list will also receive the > >> > >>answer (so that > >> > >> > >>>others may use the information) > >>> > >>>/Jesper > >>> > >>>Steve Brown wrote: > >>> > >>> > >>>>What should the class id be defined as in graph.php? I > thought the > >>>>default package settings would work. Is the class id > defined under > >>>>class Image_Graph extends Image_Graph_Element within graph.php? > >>>> > >>>>Steve Brown > >>>>Systems Analyst > >>>>Delta Dental Plan of Kentucky > >>>>(502) 736-4646 > >>>>Steve.Brown@ddpky.com > >>>> > >>>>-----Original Message----- > >>>>From: Jesper Veggerby Hansen [mailto:pear.nosey@veggerby.dk] > >>>>Sent: Thursday, September 15, 2005 1:51 PM > >>>>To: Steve Brown > >>>>Cc: pear-general@lists.php.net > >>>>Subject: [PEAR] Re: [PEAR-DEV] Re: Image_Graph Help Please > >>>> > >>>>Hi Steve, > >>>> > >>>>If seems like you are calling Image_Graph::factory() with > a "blank" > >>>>class id(?) > >>>> > >>>>/Jesper > >>>> > >>>>BTW. Please only send package questions to 1 mailing list: > >>>>pear-general@lists.php.net > >>>> > >>>>Steve Brown wrote: > >>>> > >>>> > >>>> > >>>>>Why do I keep getting the following errors on > >> > >>base_graph_display.php? > >> > >>>>I > >>>> > >>>> > >>>> > >>>>>haven't changed any of the default settings and all the > dependency > >>>>>packages are included. There was no need for a include > >>>>>'Image/Graph.php'; statement because the base_graph_display.php > >>>> > >>>>document > >>>> > >>>> > >>>> > >>>>>already includes require_once ('Image_Graph.php');. > >>>>> > >>>>> > >>>>> > >>>>>Warning: imagealphablending(): supplied argument is not a > >> > >>valid Image > >> > >>>>>resource in c:\php5\PEAR\Image\Canvas\GD.php on line 161 > >>>>> > >>>>> > >>>>> > >>>>>Warning: imagecolorallocate(): supplied argument is not a > >> > >>valid Image > >> > >>>>>resource in c:\php5\PEAR\Image\Canvas\Color.php on line 65 > >>>>> > >>>>> > >>>>> > >>>>>Warning: imagesetthickness(): supplied argument is not a > >> > >>valid Image > >> > >>>>>resource in c:\php5\PEAR\Image\Canvas\GD.php on line 233 > >>>>> > >>>>> > >>>>> > >>>>>Warning: imagesetthickness(): supplied argument is not a > >> > >>valid Image > >> > >>>>>resource in c:\php5\PEAR\Image\Canvas\GD.php on line 1518 > >>>>> > >>>>> > >>>>> > >>>>>Warning: Image_Graph::factory(Image/Graph/.php): failed to open > >>>> > >>>>stream: > >>>> > >>>> > >>>> > >>>>>No such file or directory in c:\php5\PEAR\Image\Graph.php > >> > >>on line 443 > >> > >>>>> > >>>>> > >>>>>Warning: Image_Graph::factory(): Failed opening > 'Image/Graph/.php' > >> > >>for > >> > >>>>>inclusion (include_path='c:\php5\PEAR') in > >>>> > >>>>c:\php5\PEAR\Image\Graph.php > >>>> > >>>> > >>>> > >>>>>on line 443 > >>>>> > >>>>> > >>>>> > >>>>>Fatal error: Class 'Image_Graph_' not found in > >>>>>c:\php5\PEAR\Image\Graph.php on line 561 > >>>>> > >>>>> > >>>>> > >>>>>Steve Brown > >>>>> > >>>>>Systems Analyst > >>>>> > >>>>>Delta Dental Plan of Kentucky > >>>>> > >>>>>(502) 736-4646 > >>>>> > >>>>>Steve.Brown@ddpky.com > >>>>> > >>>>> > >>>>> > >>>>> > >>>> > >>>> > >>-- > >>PEAR General Mailing List (http://pear.php.net/) To unsubscribe, > >>visit: http://www.php.net/unsub.php > >> > >>-- > >>PEAR General Mailing List (http://pear.php.net/) To unsubscribe, > >>visit: http://www.php.net/unsub.php > >> > >> > > > > >

« previous php.pear.general (#20993) next »