home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / php / PEAR / Image / Graph / Common.php < prev    next >
Encoding:
PHP Script  |  2008-07-02  |  9.5 KB  |  313 lines

  1. <?php
  2.  
  3. /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
  4.  
  5. /**
  6.  * Image_Graph - Main class for the graph creation.
  7.  *
  8.  * PHP versions 4 and 5
  9.  *
  10.  * LICENSE: This library is free software; you can redistribute it and/or modify
  11.  * it under the terms of the GNU Lesser General Public License as published by
  12.  * the Free Software Foundation; either version 2.1 of the License, or (at your
  13.  * option) any later version. This library is distributed in the hope that it
  14.  * will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  15.  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
  16.  * General Public License for more details. You should have received a copy of
  17.  * the GNU Lesser General Public License along with this library; if not, write
  18.  * to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  19.  * 02111-1307 USA
  20.  *
  21.  * @category   Images
  22.  * @package    Image_Graph
  23.  * @author     Jesper Veggerby <pear.nosey@veggerby.dk>
  24.  * @copyright  Copyright (C) 2003, 2004 Jesper Veggerby Hansen
  25.  * @license    http://www.gnu.org/copyleft/lesser.html  LGPL License 2.1
  26.  * @version    CVS: $Id: Common.php,v 1.16 2006/02/28 22:48:07 nosey Exp $
  27.  * @link       http://pear.php.net/package/Image_Graph
  28.  */
  29.  
  30. if (!function_exists('is_a')) {
  31.  
  32.     /**
  33.      * Check if an object is of a given class, this function is available as of PHP 4.2.0, so if it exist it will not be declared
  34.      *
  35.      * @link http://www.php.net/manual/en/function.is-a.php PHP.net Online Manual for function is_a()
  36.      * @param object $object The object to check class for
  37.      * @param string $class_name The name of the class to check the object for
  38.      * @return bool Returns TRUE if the object is of this class or has this class as one of its parents
  39.      */
  40.     function is_a($object, $class_name)
  41.     {
  42.         if (empty ($object)) {
  43.             return false;
  44.         }
  45.         $object = is_object($object) ? get_class($object) : $object;
  46.         if (strtolower($object) == strtolower($class_name)) {
  47.             return true;
  48.         }
  49.         return is_a(get_parent_class($object), $class_name);
  50.     }
  51. }
  52.  
  53. /**
  54.  * Include file Image/Canvas.php
  55.  */
  56. require_once 'Image/Canvas.php';
  57.  
  58. /**
  59.  * The ultimate ancestor of all Image_Graph classes.
  60.  *
  61.  * This class contains common functionality needed by all Image_Graph classes.
  62.  *
  63.  * @category   Images
  64.  * @package    Image_Graph
  65.  * @author     Jesper Veggerby <pear.nosey@veggerby.dk>
  66.  * @copyright  Copyright (C) 2003, 2004 Jesper Veggerby Hansen
  67.  * @license    http://www.gnu.org/copyleft/lesser.html  LGPL License 2.1
  68.  * @version    Release: 0.7.2
  69.  * @link       http://pear.php.net/package/Image_Graph
  70.  * @abstract
  71.  */
  72. class Image_Graph_Common
  73. {
  74.  
  75.     /**
  76.      * The parent container of the current Image_Graph object
  77.      *
  78.      * @var Image_Graph_Common
  79.      * @access private
  80.      */
  81.     var $_parent = null;
  82.  
  83.     /**
  84.      * The sub-elements of the current Image_Graph container object
  85.      *
  86.      * @var array
  87.      * @access private
  88.      */
  89.     var $_elements;
  90.  
  91.     /**
  92.      * The canvas for output.
  93.      *
  94.      * Enables support for multiple output formats.
  95.      *
  96.      * @var Image_Canvas
  97.      * @access private
  98.      */
  99.     var $_canvas = null;
  100.     
  101.     /**
  102.      * Is the object visible?
  103.      * 
  104.      * @var bool
  105.      * @access private
  106.      */
  107.     var $_visible = true;
  108.  
  109.     /**
  110.      * Constructor [Image_Graph_Common]
  111.      */
  112.     function Image_Graph_Common()
  113.     {
  114.     }
  115.  
  116.     /**
  117.      * Resets the elements
  118.      *
  119.      * @access private
  120.      */
  121.     function _reset()
  122.     {
  123.         if (is_array($this->_elements)) {
  124.             $keys = array_keys($this->_elements);
  125.             foreach ($keys as $key) {
  126.                 if (is_object($this->_elements[$key])) {
  127.                     $this->_elements[$key]->_setParent($this);
  128.                     $result =& $this->_elements[$key]->_reset();
  129.                     if (PEAR::isError($result)) {
  130.                         return $result;
  131.                     }
  132.                 }
  133.             }
  134.             unset($keys);
  135.         }
  136.         return true;
  137.     }
  138.  
  139.     /**
  140.      * Sets the parent. The parent chain should ultimately be a GraPHP object
  141.      *
  142.      * @see Image_Graph_Common
  143.      * @param Image_Graph_Common $parent The parent
  144.      * @access private
  145.      */
  146.     function _setParent(& $parent)
  147.     {
  148.         $this->_parent =& $parent;
  149.         $this->_canvas =& $this->_parent->_getCanvas();
  150.  
  151.         if (is_array($this->_elements)) {
  152.             $keys = array_keys($this->_elements);
  153.             foreach ($keys as $key) {
  154.                 if (is_object($this->_elements[$key])) {
  155.                     $this->_elements[$key]->_setParent($this);
  156.                 }
  157.             }
  158.             unset($keys);
  159.         }
  160.     }
  161.  
  162.     /**
  163.      * Hide the element
  164.      */
  165.     function hide()
  166.     {
  167.         $this->_visible = false;
  168.     }        
  169.  
  170.     /**
  171.      * Get the canvas
  172.      *
  173.      * @return Image_Canvas The canvas
  174.      * @access private
  175.      */
  176.     function &_getCanvas()
  177.     { 
  178.         if (($this->_canvas !== null) || ($this->_canvas !== false)) {
  179.             return $this->_canvas;
  180.         } elseif (is_a($this->_parent, 'Image_Graph_Common')) {
  181.             $this->_canvas =& $this->_parent->_getCanvas();
  182.             return $this->_canvas;
  183.         } else {
  184.             $this->_error('Invalid canvas');
  185.             $result = null;
  186.             return $result;
  187.         }
  188.     }
  189.  
  190.     /**
  191.      * Adds an element to the objects element list.
  192.      *
  193.      * The new Image_Graph_elements parent is automatically set.
  194.      *
  195.      * @param Image_Graph_Common $element The new Image_Graph_element
  196.      * @return Image_Graph_Common The new Image_Graph_element
  197.      */
  198.     function &add(& $element)
  199.     {
  200.         if (!is_a($element, 'Image_Graph_Font')) {
  201.             $this->_elements[] = &$element;
  202.         }
  203.         $element->_setParent($this);
  204.         return $element;
  205.     }
  206.  
  207.     /**
  208.      * Creates an object from the class and adds it to the objects element list.
  209.      *
  210.      * Creates an object from the class specified and adds it to the objects
  211.      * element list. If only one parameter is required for the constructor of
  212.      * the class simply pass this parameter as the $params parameter, unless the
  213.      * parameter is an array or a reference to a value, in that case you must
  214.      * 'enclose' the parameter in an array. Similar if the constructor takes
  215.      * more than one parameter specify the parameters in an array.
  216.      *
  217.      * @see Image_Graph::factory()
  218.      * @param string $class The class for the object
  219.      * @param mixed $params The paramaters to pass to the constructor
  220.      * @return Image_Graph_Common The new Image_Graph_element
  221.      */
  222.     function &addNew($class, $params = null, $additional = false)
  223.     {
  224.         include_once 'Image/Graph.php';
  225.         $element =& Image_Graph::factory($class, $params);
  226.         if ($additional === false) {
  227.             $obj =& $this->add($element);
  228.         } else {
  229.             $obj =& $this->add($element, $additional);
  230.         }
  231.         return $obj;
  232.     }
  233.  
  234.     /**
  235.      * Shows an error message box on the canvas
  236.      *
  237.      * @param string $text The error text
  238.      * @param array $params An array containing error specific details
  239.      * @param int $error_code Error code
  240.      * @access private
  241.      */
  242.     function _error($text, $params = false, $error_code = IMAGE_GRAPH_ERROR_GENERIC)
  243.     {       
  244.         if ((is_array($params)) && (count($params) > 0)) {
  245.             foreach ($params as $name => $key) {
  246.                 if (isset($parameters)) {
  247.                     $parameters .= ' ';
  248.                 } 
  249.                 else {
  250.                     $parameters = '';
  251.                 }
  252.                 $parameters .= $name . '=' . $key;
  253.             }
  254.         }        
  255.         $error =& PEAR::raiseError(
  256.             $text .
  257.             ($error_code != IMAGE_GRAPH_ERROR_GENERIC ? ' error:' . IMAGE_GRAPH_ERROR_GENERIC : '') .
  258.             (isset($parameters) ? ' parameters:[' . $parameters . ']' : '')            
  259.         );         
  260.     }
  261.  
  262.     /**
  263.      * Causes the object to update all sub elements coordinates
  264.      *
  265.      * (Image_Graph_Common, does not itself have coordinates, this is basically
  266.      * an abstract method)
  267.      *
  268.      * @access private
  269.      */
  270.     function _updateCoords()
  271.     {
  272.         if (is_array($this->_elements)) {
  273.             $keys = array_keys($this->_elements);
  274.             foreach ($keys as $key) {
  275.                 if (is_object($this->_elements[$key])) {
  276.                     $this->_elements[$key]->_updateCoords();
  277.                 }
  278.             }
  279.             unset($keys);
  280.         }
  281.         return true;
  282.     }
  283.  
  284.     /**
  285.      * Causes output to canvas
  286.      *
  287.      * The last method to call. Calling Done causes output to the canvas. All
  288.      * sub elements done() method will be invoked
  289.      *
  290.      * @return bool Was the output 'good' (true) or 'bad' (false).
  291.      * @access private
  292.      */
  293.     function _done()
  294.     {
  295.         if (($this->_canvas == null) || (!is_a($this->_canvas, 'Image_Canvas'))) {
  296.             return false;
  297.         }
  298.  
  299.         if (is_array($this->_elements)) {
  300.             $keys = array_keys($this->_elements);
  301.             foreach ($keys as $key) {
  302.                 if (($this->_elements[$key]->_visible) && ($this->_elements[$key]->_done() === false)) {
  303.                     return false;
  304.                 }
  305.             }
  306.             unset($keys);
  307.         }
  308.         return true;
  309.     }
  310.  
  311. }
  312.  
  313. ?>