Added the zend framework 2 library, the path is specified in line no.26 in zend_modul...
[openemr.git] / interface / modules / zend_modules / library / Zend / ProgressBar / Upload / AbstractUploadHandler.php
blobe182e015cfca47b68ecde08a25ec7cb7e0b5408a
1 <?php
2 /**
3 * Zend Framework (http://framework.zend.com/)
5 * @link http://github.com/zendframework/zf2 for the canonical source repository
6 * @copyright Copyright (c) 2005-2013 Zend Technologies USA Inc. (http://www.zend.com)
7 * @license http://framework.zend.com/license/new-bsd New BSD License
8 */
10 namespace Zend\ProgressBar\Upload;
12 use Traversable;
13 use Zend\ProgressBar\Adapter\AbstractAdapter as AbstractProgressAdapter;
14 use Zend\ProgressBar\Exception;
15 use Zend\ProgressBar\ProgressBar;
16 use Zend\Stdlib\ArrayUtils;
18 /**
19 * Abstract class for Upload Progress Handlers
21 abstract class AbstractUploadHandler implements UploadHandlerInterface
23 /**
24 * @var string
26 protected $sessionNamespace = 'Zend\ProgressBar\Upload\AbstractUploadHandler';
28 /**
29 * @var AbstractProgressAdapter|ProgressBar
31 protected $progressAdapter;
33 /**
34 * @param array|Traversable $options Optional options
35 * @throws Exception\InvalidArgumentException
37 public function __construct($options = array())
39 if (!empty($options)) {
40 $this->setOptions($options);
44 /**
45 * Set options for a upload handler. Accepted options are:
46 * - session_namespace: session namespace for upload progress
47 * - progress_adapter: progressbar adapter to use for updating progress
49 * @param array|Traversable $options
50 * @return AbstractUploadHandler
51 * @throws Exception\InvalidArgumentException
53 public function setOptions($options)
55 if ($options instanceof Traversable) {
56 $options = ArrayUtils::iteratorToArray($options);
57 } elseif (!is_array($options)) {
58 throw new Exception\InvalidArgumentException(
59 'The options parameter must be an array or a Traversable'
63 if (isset($options['session_namespace'])) {
64 $this->setSessionNamespace($options['session_namespace']);
66 if (isset($options['progress_adapter'])) {
67 $this->setProgressAdapter($options['progress_adapter']);
70 return $this;
73 /**
74 * @param string $sessionNamespace
75 * @return AbstractUploadHandler|UploadHandlerInterface
77 public function setSessionNamespace($sessionNamespace)
79 $this->sessionNamespace = $sessionNamespace;
80 return $this;
83 /**
84 * @return string
86 public function getSessionNamespace()
88 return $this->sessionNamespace;
91 /**
92 * @param AbstractProgressAdapter|ProgressBar $progressAdapter
93 * @return AbstractUploadHandler|UploadHandlerInterface
95 public function setProgressAdapter($progressAdapter)
97 $this->progressAdapter = $progressAdapter;
98 return $this;
102 * @return AbstractProgressAdapter|ProgressBar
104 public function getProgressAdapter()
106 return $this->progressAdapter;
110 * @param string $id
111 * @return array
113 public function getProgress($id)
115 $status = array(
116 'total' => 0,
117 'current' => 0,
118 'rate' => 0,
119 'message' => 'No upload in progress',
120 'done' => true
122 if (empty($id)) {
123 return $status;
126 $newStatus = $this->getUploadProgress($id);
127 if (false === $newStatus) {
128 return $status;
130 $status = $newStatus;
131 if ('' === $status['message']) {
132 $status['message'] = $this->toByteString($status['current']) .
133 " - " . $this->toByteString($status['total']);
135 $status['id'] = $id;
137 $adapter = $this->getProgressAdapter();
138 if (isset($adapter)) {
139 if ($adapter instanceof AbstractProgressAdapter) {
140 $adapter = new ProgressBar(
141 $adapter, 0, $status['total'], $this->getSessionNamespace()
143 $this->setProgressAdapter($adapter);
146 if (!$adapter instanceof ProgressBar) {
147 throw new Exception\RuntimeException('Unknown Adapter type given');
150 if ($status['done']) {
151 $adapter->finish();
152 } else {
153 $adapter->update($status['current'], $status['message']);
157 return $status;
161 * @param string $id
162 * @return array|bool
164 abstract protected function getUploadProgress($id);
167 * Returns the formatted size
169 * @param int $size
170 * @return string
172 protected function toByteString($size)
174 $sizes = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
175 for ($i=0; $size >= 1024 && $i < 9; $i++) {
176 $size /= 1024;
179 return round($size, 2) . $sizes[$i];