1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
<?php
/**
* 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_ProgressBar
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id$
*/
/**
* @see Zend_Json
*/
/**
* @see Zend_ProgressBar_Adapter
*/
/**
* Zend_ProgressBar_Adapter_JsPush offers a simple method for updating a
* progressbar in a browser.
*
* @category Zend
* @package Zend_ProgressBar
* @uses Zend_ProgressBar_Adapter_Interface
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_ProgressBar_Adapter_JsPush extends Zend_ProgressBar_Adapter
{
/**
* Name of the JavaScript method to call on update
*
* @var string
*/
protected $_updateMethodName = 'Zend_ProgressBar_Update';
/**
* Name of the JavaScript method to call on finish
*
* @var string
*/
protected $_finishMethodName;
/**
* Set the update method name
*
* @param string $methodName
* @return Zend_ProgressBar_Adapter_JsPush
*/
public function setUpdateMethodName($methodName)
{
$this->_updateMethodName = $methodName;
return $this;
}
/**
* Set the finish method name
*
* @param string $methodName
* @return Zend_ProgressBar_Adapter_JsPush
*/
public function setFinishMethodName($methodName)
{
$this->_finishMethodName = $methodName;
return $this;
}
/**
* Defined by Zend_ProgressBar_Adapter_Interface
*
* @param float $current Current progress value
* @param float $max Max progress value
* @param float $percent Current percent value
* @param integer $timeTaken Taken time in seconds
* @param integer $timeRemaining Remaining time in seconds
* @param string $text Status text
* @return void
*/
public function notify($current, $max, $percent, $timeTaken, $timeRemaining, $text)
{
$arguments = array(
'current' => $current,
'max' => $max,
'percent' => ($percent * 100),
'timeTaken' => $timeTaken,
'timeRemaining' => $timeRemaining,
'text' => $text
);
$data = '<script type="text/javascript">'
. 'parent.' . $this->_updateMethodName . '(' . Zend_Json::encode($arguments) . ');'
. '</script>';
// Output the data
$this->_outputData($data);
}
/**
* Defined by Zend_ProgressBar_Adapter_Interface
*
* @return void
*/
public function finish()
{
if ($this->_finishMethodName === null) {
return;
}
$data = '<script type="text/javascript">'
. 'parent.' . $this->_finishMethodName . '();'
. '</script>';
$this->_outputData($data);
}
/**
* Outputs given data the user agent.
*
* This split-off is required for unit-testing.
*
* @param string $data
* @return void
*/
protected function _outputData($data)
{
// 1024 padding is required for Safari, while 256 padding is required
// for Internet Explorer. The <br /> is required so Safari actually
// executes the <script />
echo str_pad($data . '<br />', 1024, ' ', STR_PAD_RIGHT) . "\n";
flush();
ob_flush();
}
}
|