Source of file AbstractUploadHandler.php
Size: 4,972 Bytes - Last Modified: 2014-03-12T23:21:18+01:00
/home/theseer/Downloads/ZendFramework-2.3.0/library/Zend/ProgressBar/Upload/AbstractUploadHandler.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 | <?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/zf2 for the canonical source repository * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ namespace Zend\ProgressBar\Upload; use Traversable; use Zend\ProgressBar\Adapter\AbstractAdapter as AbstractProgressAdapter; use Zend\ProgressBar\Exception; use Zend\ProgressBar\ProgressBar; use Zend\Stdlib\ArrayUtils; /** * Abstract class for Upload Progress Handlers */ abstract class AbstractUploadHandler implements UploadHandlerInterface { /** * @var string */ protected $sessionNamespace = 'Zend\ProgressBar\Upload\AbstractUploadHandler'; /** * @var AbstractProgressAdapter|ProgressBar */ protected $progressAdapter; /** * @param array|Traversable $options Optional options * @throws Exception\InvalidArgumentException */ public function __construct($options = array()) { if (!empty($options)) { $this->setOptions($options); } } /** * Set options for a upload handler. Accepted options are: * - session_namespace: session namespace for upload progress * - progress_adapter: progressbar adapter to use for updating progress * * @param array|Traversable $options * @return AbstractUploadHandler * @throws Exception\InvalidArgumentException */ public function setOptions($options) { if ($options instanceof Traversable) { $options = ArrayUtils::iteratorToArray($options); } elseif (!is_array($options)) { throw new Exception\InvalidArgumentException( 'The options parameter must be an array or a Traversable' ); } if (isset($options['session_namespace'])) { $this->setSessionNamespace($options['session_namespace']); } if (isset($options['progress_adapter'])) { $this->setProgressAdapter($options['progress_adapter']); } return $this; } /** * @param string $sessionNamespace * @return AbstractUploadHandler|UploadHandlerInterface */ public function setSessionNamespace($sessionNamespace) { $this->sessionNamespace = $sessionNamespace; return $this; } /** * @return string */ public function getSessionNamespace() { return $this->sessionNamespace; } /** * @param AbstractProgressAdapter|ProgressBar $progressAdapter * @return AbstractUploadHandler|UploadHandlerInterface */ public function setProgressAdapter($progressAdapter) { $this->progressAdapter = $progressAdapter; return $this; } /** * @return AbstractProgressAdapter|ProgressBar */ public function getProgressAdapter() { return $this->progressAdapter; } /** * @param string $id * @return array */ public function getProgress($id) { $status = array( 'total' => 0, 'current' => 0, 'rate' => 0, 'message' => 'No upload in progress', 'done' => true ); if (empty($id)) { return $status; } $newStatus = $this->getUploadProgress($id); if (false === $newStatus) { return $status; } $status = $newStatus; if ('' === $status['message']) { $status['message'] = $this->toByteString($status['current']) . " - " . $this->toByteString($status['total']); } $status['id'] = $id; $adapter = $this->getProgressAdapter(); if (isset($adapter)) { if ($adapter instanceof AbstractProgressAdapter) { $adapter = new ProgressBar( $adapter, 0, $status['total'], $this->getSessionNamespace() ); $this->setProgressAdapter($adapter); } if (!$adapter instanceof ProgressBar) { throw new Exception\RuntimeException('Unknown Adapter type given'); } if ($status['done']) { $adapter->finish(); } else { $adapter->update($status['current'], $status['message']); } } return $status; } /** * @param string $id * @return array|bool */ abstract protected function getUploadProgress($id); /** * Returns the formatted size * * @param int $size * @return string */ protected function toByteString($size) { $sizes = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'); for ($i=0; $size >= 1024 && $i < 9; $i++) { $size /= 1024; } return round($size, 2) . $sizes[$i]; } } |