Re: Re: Image_Graph Help Please

From: Date: Thu, 15 Sep 2005 20:16:57 +0000
Subject: Re: Re: Image_Graph Help Please
References: 1  Groups: php.pear.general 
Request: Send a blank email to pear-general+get-20995@lists.php.net to get a copy of this message
Hi James, Yes, it's already reported a couple of times (http://pear.php.net/bugs/4786, http://pear.php.net/bugs/4509, http://pear.php.net/bugs/5164, etc? :p), hopefully it will be fixed soon. With regards to my documentation, I will have a look at it... Thanks /Jesper Kilbride, James wrote:
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  
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 (#20995) next »