--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/Zend/Barcode/Renderer/RendererAbstract.php Mon Dec 13 18:29:26 2010 +0100
@@ -0,0 +1,540 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Barcode
+ * @subpackage Renderer
+ * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: RendererAbstract.php 22999 2010-09-23 19:43:14Z mikaelkael $
+ */
+
+/**
+ * Class for rendering the barcode
+ *
+ * @category Zend
+ * @package Zend_Barcode
+ * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+abstract class Zend_Barcode_Renderer_RendererAbstract
+{
+ /**
+ * Namespace of the renderer for autoloading
+ * @var string
+ */
+ protected $_rendererNamespace = 'Zend_Barcode_Renderer';
+
+ /**
+ * Renderer type
+ * @var string
+ */
+ protected $_type = null;
+
+ /**
+ * Activate/Deactivate the automatic rendering of exception
+ * @var boolean
+ */
+ protected $_automaticRenderError = false;
+
+ /**
+ * Offset of the barcode from the top of the rendering resource
+ * @var integer
+ */
+ protected $_topOffset = 0;
+
+ /**
+ * Offset of the barcode from the left of the rendering resource
+ * @var integer
+ */
+ protected $_leftOffset = 0;
+
+ /**
+ * Horizontal position of the barcode in the rendering resource
+ * @var integer
+ */
+ protected $_horizontalPosition = 'left';
+
+ /**
+ * Vertical position of the barcode in the rendering resource
+ * @var integer
+ */
+ protected $_verticalPosition = 'top';
+
+ /**
+ * Module size rendering
+ * @var float
+ */
+ protected $_moduleSize = 1;
+
+ /**
+ * Barcode object
+ * @var Zend_Barcode_Object_ObjectAbstract
+ */
+ protected $_barcode;
+
+ /**
+ * Drawing resource
+ */
+ protected $_resource;
+
+ /**
+ * Constructor
+ * @param array|Zend_Config $options
+ * @return void
+ */
+ public function __construct($options = null)
+ {
+ if ($options instanceof Zend_Config) {
+ $options = $options->toArray();
+ }
+ if (is_array($options)) {
+ $this->setOptions($options);
+ }
+ $this->_type = strtolower(substr(
+ get_class($this),
+ strlen($this->_rendererNamespace) + 1
+ ));
+ }
+
+ /**
+ * Set renderer state from options array
+ * @param array $options
+ * @return Zend_Renderer_Object
+ */
+ public function setOptions($options)
+ {
+ foreach ($options as $key => $value) {
+ $method = 'set' . $key;
+ if (method_exists($this, $method)) {
+ $this->$method($value);
+ }
+ }
+ return $this;
+ }
+
+ /**
+ * Set renderer state from config object
+ * @param Zend_Config $config
+ * @return Zend_Renderer_Object
+ */
+ public function setConfig(Zend_Config $config)
+ {
+ return $this->setOptions($config->toArray());
+ }
+
+ /**
+ * Set renderer namespace for autoloading
+ *
+ * @param string $namespace
+ * @return Zend_Renderer_Object
+ */
+ public function setRendererNamespace($namespace)
+ {
+ $this->_rendererNamespace = $namespace;
+ return $this;
+ }
+
+ /**
+ * Retrieve renderer namespace
+ *
+ * @return string
+ */
+ public function getRendererNamespace()
+ {
+ return $this->_rendererNamespace;
+ }
+
+ /**
+ * Retrieve renderer type
+ * @return string
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /**
+ * Manually adjust top position
+ * @param integer $value
+ * @return Zend_Barcode_Renderer
+ * @throw Zend_Barcode_Renderer_Exception
+ */
+ public function setTopOffset($value)
+ {
+ if (!is_numeric($value) || intval($value) < 0) {
+ require_once 'Zend/Barcode/Renderer/Exception.php';
+ throw new Zend_Barcode_Renderer_Exception(
+ 'Vertical position must be greater than or equals 0'
+ );
+ }
+ $this->_topOffset = intval($value);
+ return $this;
+ }
+
+ /**
+ * Retrieve vertical adjustment
+ * @return integer
+ */
+ public function getTopOffset()
+ {
+ return $this->_topOffset;
+ }
+
+ /**
+ * Manually adjust left position
+ * @param integer $value
+ * @return Zend_Barcode_Renderer
+ * @throw Zend_Barcode_Renderer_Exception
+ */
+ public function setLeftOffset($value)
+ {
+ if (!is_numeric($value) || intval($value) < 0) {
+ require_once 'Zend/Barcode/Renderer/Exception.php';
+ throw new Zend_Barcode_Renderer_Exception(
+ 'Horizontal position must be greater than or equals 0'
+ );
+ }
+ $this->_leftOffset = intval($value);
+ return $this;
+ }
+
+ /**
+ * Retrieve vertical adjustment
+ * @return integer
+ */
+ public function getLeftOffset()
+ {
+ return $this->_leftOffset;
+ }
+
+ /**
+ * Activate/Deactivate the automatic rendering of exception
+ * @param boolean $value
+ */
+ public function setAutomaticRenderError($value)
+ {
+ $this->_automaticRenderError = (bool) $value;
+ return $this;
+ }
+
+ /**
+ * Horizontal position of the barcode in the rendering resource
+ * @param string $value
+ * @return Zend_Barcode_Renderer
+ * @throw Zend_Barcode_Renderer_Exception
+ */
+ public function setHorizontalPosition($value)
+ {
+ if (!in_array($value, array('left' , 'center' , 'right'))) {
+ require_once 'Zend/Barcode/Renderer/Exception.php';
+ throw new Zend_Barcode_Renderer_Exception(
+ "Invalid barcode position provided must be 'left', 'center' or 'right'"
+ );
+ }
+ $this->_horizontalPosition = $value;
+ return $this;
+ }
+
+ /**
+ * Horizontal position of the barcode in the rendering resource
+ * @return string
+ */
+ public function getHorizontalPosition()
+ {
+ return $this->_horizontalPosition;
+ }
+
+ /**
+ * Vertical position of the barcode in the rendering resource
+ * @param string $value
+ * @return Zend_Barcode_Renderer
+ * @throw Zend_Barcode_Renderer_Exception
+ */
+ public function setVerticalPosition($value)
+ {
+ if (!in_array($value, array('top' , 'middle' , 'bottom'))) {
+ require_once 'Zend/Barcode/Renderer/Exception.php';
+ throw new Zend_Barcode_Renderer_Exception(
+ "Invalid barcode position provided must be 'top', 'middle' or 'bottom'"
+ );
+ }
+ $this->_verticalPosition = $value;
+ return $this;
+ }
+
+ /**
+ * Vertical position of the barcode in the rendering resource
+ * @return string
+ */
+ public function getVerticalPosition()
+ {
+ return $this->_verticalPosition;
+ }
+
+ /**
+ * Set the size of a module
+ * @param float $value
+ * @return Zend_Barcode_Renderer
+ * @throw Zend_Barcode_Renderer_Exception
+ */
+ public function setModuleSize($value)
+ {
+ if (!is_numeric($value) || floatval($value) <= 0) {
+ require_once 'Zend/Barcode/Renderer/Exception.php';
+ throw new Zend_Barcode_Renderer_Exception(
+ 'Float size must be greater than 0'
+ );
+ }
+ $this->_moduleSize = floatval($value);
+ return $this;
+ }
+
+
+ /**
+ * Set the size of a module
+ * @return float
+ */
+ public function getModuleSize()
+ {
+ return $this->_moduleSize;
+ }
+
+ /**
+ * Retrieve the automatic rendering of exception
+ * @return boolean
+ */
+ public function getAutomaticRenderError()
+ {
+ return $this->_automaticRenderError;
+ }
+
+ /**
+ * Set the barcode object
+ * @param Zend_Barcode_Object $barcode
+ * @return Zend_Barcode_Renderer
+ */
+ public function setBarcode($barcode)
+ {
+ if (!$barcode instanceof Zend_Barcode_Object_ObjectAbstract) {
+ require_once 'Zend/Barcode/Renderer/Exception.php';
+ throw new Zend_Barcode_Renderer_Exception(
+ 'Invalid barcode object provided to setBarcode()'
+ );
+ }
+ $this->_barcode = $barcode;
+ return $this;
+ }
+
+ /**
+ * Retrieve the barcode object
+ * @return Zend_Barcode_Object
+ */
+ public function getBarcode()
+ {
+ return $this->_barcode;
+ }
+
+ /**
+ * Checking of parameters after all settings
+ * @return boolean
+ */
+ public function checkParams()
+ {
+ $this->_checkBarcodeObject();
+ $this->_checkParams();
+ return true;
+ }
+
+ /**
+ * Check if a barcode object is correctly provided
+ * @return void
+ * @throw Zend_Barcode_Renderer_Exception
+ */
+ protected function _checkBarcodeObject()
+ {
+ if ($this->_barcode === null) {
+ /**
+ * @see Zend_Barcode_Renderer_Exception
+ */
+ require_once 'Zend/Barcode/Renderer/Exception.php';
+ throw new Zend_Barcode_Renderer_Exception(
+ 'No barcode object provided'
+ );
+ }
+ }
+
+ /**
+ * Calculate the left and top offset of the barcode in the
+ * rendering support
+ *
+ * @param float $supportHeight
+ * @param float $supportWidth
+ * @return void
+ */
+ protected function _adjustPosition($supportHeight, $supportWidth)
+ {
+ $barcodeHeight = $this->_barcode->getHeight(true) * $this->_moduleSize;
+ if ($barcodeHeight != $supportHeight && $this->_topOffset == 0) {
+ switch ($this->_verticalPosition) {
+ case 'middle':
+ $this->_topOffset = floor(
+ ($supportHeight - $barcodeHeight) / 2);
+ break;
+ case 'bottom':
+ $this->_topOffset = $supportHeight - $barcodeHeight;
+ break;
+ case 'top':
+ default:
+ $this->_topOffset = 0;
+ break;
+ }
+ }
+ $barcodeWidth = $this->_barcode->getWidth(true) * $this->_moduleSize;
+ if ($barcodeWidth != $supportWidth && $this->_leftOffset == 0) {
+ switch ($this->_horizontalPosition) {
+ case 'center':
+ $this->_leftOffset = floor(
+ ($supportWidth - $barcodeWidth) / 2);
+ break;
+ case 'right':
+ $this->_leftOffset = $supportWidth - $barcodeWidth;
+ break;
+ case 'left':
+ default:
+ $this->_leftOffset = 0;
+ break;
+ }
+ }
+ }
+
+ /**
+ * Draw the barcode in the rendering resource
+ * @return mixed
+ */
+ public function draw()
+ {
+ try {
+ $this->checkParams();
+ $this->_initRenderer();
+ $this->_drawInstructionList();
+ } catch (Zend_Exception $e) {
+ $renderable = false;
+ if ($e instanceof Zend_Barcode_Exception) {
+ $renderable = $e->isRenderable();
+ }
+ if ($this->_automaticRenderError && $renderable) {
+ $barcode = Zend_Barcode::makeBarcode(
+ 'error',
+ array('text' => $e->getMessage())
+ );
+ $this->setBarcode($barcode);
+ $this->_resource = null;
+ $this->_initRenderer();
+ $this->_drawInstructionList();
+ } else {
+ if ($e instanceof Zend_Barcode_Exception) {
+ $e->setIsRenderable(false);
+ }
+ throw $e;
+ }
+ }
+ return $this->_resource;
+ }
+
+ /**
+ * Sub process to draw the barcode instructions
+ * Needed by the automatic error rendering
+ */
+ private function _drawInstructionList()
+ {
+ $instructionList = $this->_barcode->draw();
+ foreach ($instructionList as $instruction) {
+ switch ($instruction['type']) {
+ case 'polygon':
+ $this->_drawPolygon(
+ $instruction['points'],
+ $instruction['color'],
+ $instruction['filled']
+ );
+ break;
+ case 'text': //$text, $size, $position, $font, $color, $alignment = 'center', $orientation = 0)
+ $this->_drawText(
+ $instruction['text'],
+ $instruction['size'],
+ $instruction['position'],
+ $instruction['font'],
+ $instruction['color'],
+ $instruction['alignment'],
+ $instruction['orientation']
+ );
+ break;
+ default:
+ /**
+ * @see Zend_Barcode_Renderer_Exception
+ */
+ require_once 'Zend/Barcode/Renderer/Exception.php';
+ throw new Zend_Barcode_Renderer_Exception(
+ 'Unkown drawing command'
+ );
+ }
+ }
+ }
+
+ /**
+ * Checking of parameters after all settings
+ * @return void
+ */
+ abstract protected function _checkParams();
+
+ /**
+ * Render the resource by sending headers and drawed resource
+ * @return mixed
+ */
+ abstract public function render();
+
+ /**
+ * Initialize the rendering resource
+ * @return void
+ */
+ abstract protected function _initRenderer();
+
+ /**
+ * Draw a polygon in the rendering resource
+ * @param array $points
+ * @param integer $color
+ * @param boolean $filled
+ */
+ abstract protected function _drawPolygon($points, $color, $filled = true);
+
+ /**
+ * Draw a polygon in the rendering resource
+ * @param string $text
+ * @param float $size
+ * @param array $position
+ * @param string $font
+ * @param integer $color
+ * @param string $alignment
+ * @param float $orientation
+ */
+ abstract protected function _drawText(
+ $text,
+ $size,
+ $position,
+ $font,
+ $color,
+ $alignment = 'center',
+ $orientation = 0
+ );
+}