Source for file ThumbBase.inc.php

Documentation is available at ThumbBase.inc.php

  1. <?php
  2. /**
  3.  * PhpThumb Base Class Definition File
  4.  * 
  5.  * This file contains the definition for the ThumbBase object
  6.  * 
  7.  * PHP Version 5 with GD 2.0+
  8.  * PhpThumb : PHP Thumb Library <http://phpthumb.gxdlabs.com>
  9.  * Copyright (c) 2009, Ian Selby/Gen X Design
  10.  * 
  11.  * Author(s): Ian Selby <ian@gen-x-design.com>
  12.  * 
  13.  * Licensed under the MIT License
  14.  * Redistributions of files must retain the above copyright notice.
  15.  * 
  16.  * @author Ian Selby <ian@gen-x-design.com>
  17.  * @copyright Copyright (c) 2009 Gen X Design
  18.  * @link http://phpthumb.gxdlabs.com
  19.  * @license http://www.opensource.org/licenses/mit-license.php The MIT License
  20.  * @version 3.0
  21.  * @package PhpThumb
  22.  * @filesource
  23.  */
  24.  
  25. /**
  26.  * ThumbBase Class Definition
  27.  * 
  28.  * This is the base class that all implementations must extend.  It contains the
  29.  * core variables and functionality common to all implementations, as well as the functions that
  30.  * allow plugins to augment those classes.
  31.  * 
  32.  * @package PhpThumb
  33.  * @subpackage Core
  34.  */
  35. abstract class ThumbBase 
  36. {
  37.     /**
  38.      * All imported objects
  39.      * 
  40.      * An array of imported plugin objects
  41.      * 
  42.      * @var array 
  43.      */
  44.     protected $imported;
  45.     /**
  46.      * All imported object functions
  47.      * 
  48.      * An array of all methods added to this class by imported plugin objects
  49.      * 
  50.      * @var array 
  51.      */
  52.     protected $importedFunctions;
  53.     /**
  54.      * The last error message raised
  55.      * 
  56.      * @var string 
  57.      */
  58.     protected $errorMessage;
  59.     /**
  60.      * Whether or not the current instance has any errors
  61.      * 
  62.      * @var bool 
  63.      */
  64.     protected $hasError;
  65.     /**
  66.      * The name of the file we're manipulating
  67.      * 
  68.      * This must include the path to the file (absolute paths recommended)
  69.      * 
  70.      * @var string 
  71.      */
  72.     protected $fileName;
  73.     /**
  74.      * What the file format is (mime-type)
  75.      * 
  76.      * @var string 
  77.      */
  78.     protected $format;
  79.     /**
  80.      * Whether or not the image is hosted remotely
  81.      * 
  82.      * @var bool 
  83.      */
  84.     protected $remoteImage;
  85.     /**
  86.      * Whether or not the current image is an actual file, or the raw file data
  87.      *
  88.      * By "raw file data" it's meant that we're actually passing the result of something
  89.      * like file_get_contents() or perhaps from a database blob
  90.      * 
  91.      * @var bool 
  92.      */
  93.     protected $isDataStream;
  94.     
  95.     /**
  96.      * Class constructor
  97.      * 
  98.      * @return ThumbBase 
  99.      */
  100.     public function __construct ($fileName$isDataStream false)
  101.     {
  102.         $this->imported                = array();
  103.         $this->importedFunctions    = array();
  104.         $this->errorMessage            = null;
  105.         $this->hasError                = false;
  106.         $this->fileName                = $fileName;
  107.         $this->remoteImage            = false;
  108.         $this->isDataStream            = $isDataStream;
  109.         
  110.         $this->fileExistsAndReadable();
  111.     }
  112.     
  113.     /**
  114.      * Imports plugins in $registry to the class
  115.      * 
  116.      * @param array $registry 
  117.      */
  118.     public function importPlugins ($registry)
  119.     {
  120.         foreach ($registry as $plugin => $meta)
  121.         {
  122.             $this->imports($plugin);
  123.         }
  124.     }
  125.     
  126.     /**
  127.      * Imports a plugin
  128.      * 
  129.      * This is where all the plugins magic happens!  This function "loads" the plugin functions, making them available as
  130.      * methods on the class.
  131.      * 
  132.      * @param string $object The name of the object to import / "load"
  133.      */
  134.     protected function imports ($object)
  135.     {
  136.         // the new object to import
  137.         $newImport             new $object();
  138.         // the name of the new object (class name)
  139.         $importName            get_class($newImport);
  140.         // the new functions to import
  141.         $importFunctions     get_class_methods($newImport);
  142.         
  143.         // add the object to the registry
  144.         array_push($this->importedarray($importName$newImport));
  145.         
  146.         // add the methods to the registry
  147.         foreach ($importFunctions as $key => $functionName)
  148.         {
  149.             $this->importedFunctions[$functionName&$newImport;
  150.         }
  151.     }
  152.     
  153.     /**
  154.      * Checks to see if $this->fileName exists and is readable
  155.      * 
  156.      */
  157.     protected function fileExistsAndReadable ()
  158.     {
  159.         if ($this->isDataStream === true)
  160.         {
  161.             return;
  162.         }
  163.         
  164.         if (stristr($this->fileName'http://'!== false)
  165.         {
  166.             $this->remoteImage = true;
  167.             return;
  168.         }
  169.         
  170.         if (!file_exists($this->fileName))
  171.         {
  172.             $this->triggerError('Image file not found: ' $this->fileName);
  173.         }
  174.         elseif (!is_readable($this->fileName))
  175.         {
  176.             $this->triggerError('Image file not readable: ' $this->fileName);
  177.         }
  178.     }
  179.     
  180.     /**
  181.      * Sets $this->errorMessage to $errorMessage and throws an exception
  182.      * 
  183.      * Also sets $this->hasError to true, so even if the exceptions are caught, we don't
  184.      * attempt to proceed with any other functions
  185.      * 
  186.      * @param string $errorMessage 
  187.      */
  188.     protected function triggerError ($errorMessage)
  189.     {
  190.         $this->hasError     = true;
  191.         $this->errorMessage    = $errorMessage;
  192.         
  193.         throw new Exception ($errorMessage);
  194.     }
  195.     
  196.     /**
  197.      * Calls plugin / imported functions
  198.      * 
  199.      * This is also where a fair amount of plugins magaic happens.  This magic method is called whenever an "undefined" class
  200.      * method is called in code, and we use that to call an imported function.
  201.      * 
  202.      * You should NEVER EVER EVER invoke this function manually.  The universe will implode if you do... seriously ;)
  203.      * 
  204.      * @param string $method 
  205.      * @param array $args 
  206.      */
  207.     public function __call ($method$args)
  208.     {
  209.         ifarray_key_exists($method$this->importedFunctions))
  210.         {
  211.             $args[$this;
  212.             return call_user_func_array(array($this->importedFunctions[$method]$method)$args);
  213.         }
  214.         
  215.         throw new BadMethodCallException ('Call to undefined method/class function: ' $method);
  216.     }
  217.  
  218.     /**
  219.      * Returns $imported.
  220.      * @see ThumbBase::$imported
  221.      * @return array 
  222.      */
  223.     public function getImported ()
  224.     {
  225.         return $this->imported;
  226.     }
  227.     
  228.     /**
  229.      * Returns $importedFunctions.
  230.      * @see ThumbBase::$importedFunctions
  231.      * @return array 
  232.      */
  233.     public function getImportedFunctions ()
  234.     {
  235.         return $this->importedFunctions;
  236.     }
  237.     
  238.     /**
  239.      * Returns $errorMessage.
  240.      *
  241.      * @see ThumbBase::$errorMessage
  242.      */
  243.     public function getErrorMessage ()
  244.     {
  245.         return $this->errorMessage;
  246.     }
  247.     
  248.     /**
  249.      * Sets $errorMessage.
  250.      *
  251.      * @param object $errorMessage 
  252.      * @see ThumbBase::$errorMessage
  253.      */
  254.     public function setErrorMessage ($errorMessage)
  255.     {
  256.         $this->errorMessage = $errorMessage;
  257.     }
  258.     
  259.     /**
  260.      * Returns $fileName.
  261.      *
  262.      * @see ThumbBase::$fileName
  263.      */
  264.     public function getFileName ()
  265.     {
  266.         return $this->fileName;
  267.     }
  268.     
  269.     /**
  270.      * Sets $fileName.
  271.      *
  272.      * @param object $fileName 
  273.      * @see ThumbBase::$fileName
  274.      */
  275.     public function setFileName ($fileName)
  276.     {
  277.         $this->fileName = $fileName;
  278.     }
  279.     
  280.     /**
  281.      * Returns $format.
  282.      *
  283.      * @see ThumbBase::$format
  284.      */
  285.     public function getFormat ()
  286.     {
  287.         return $this->format;
  288.     }
  289.     
  290.     /**
  291.      * Sets $format.
  292.      *
  293.      * @param object $format 
  294.      * @see ThumbBase::$format
  295.      */
  296.     public function setFormat ($format)
  297.     {
  298.         $this->format = $format;
  299.     }
  300.     
  301.     /**
  302.      * Returns $hasError.
  303.      *
  304.      * @see ThumbBase::$hasError
  305.      */
  306.     public function getHasError ()
  307.     {
  308.         return $this->hasError;
  309.     }
  310.     
  311.     /**
  312.      * Sets $hasError.
  313.      *
  314.      * @param object $hasError 
  315.      * @see ThumbBase::$hasError
  316.      */
  317.     public function setHasError ($hasError)
  318.     {
  319.         $this->hasError = $hasError;
  320.     
  321.     
  322.  
  323. }

Documentation generated on Thu, 05 Nov 2009 00:33:00 -0800 by phpDocumentor 1.4.3