<?php
 
/**
 
 * An example of Listener usage with HTTP_Request and HTML_Progress2.
 
 * Will download and save the file[1] displaying the progress bar in the process.
 
 * [1] qarbon shockwave flash presentation of SW4P (411 Kb)
 
 *
 
 * Credit:     Alexey Borzov <avb@php.net>
 
 *             for his download-progress.php pattern in HTTP_Request package
 
 *
 
 * @version    $Id: swf.php,v 1.1 2005/06/12 21:07:53 farell Exp $
 
 * @author     Laurent Laville <pear@laurent-laville.org>
 
 * @package    HTML_Progress2
 
 * @subpackage Examples
 
 * @link       http://www.qarbon.com
 
 * @access     public
 
 */
 
require_once 'HTTP/Request.php';
 
require_once 'HTTP/Request/Listener.php';
 
require_once 'HTML/Progress2.php';
 
 
 
PEAR::setErrorHandling(PEAR_ERROR_DIE);
 
 
 
class HTTP_Request_DownloadListener extends HTTP_Request_Listener
 
{
 
   /**
 
    * Handle for the target file
 
    * @var int
 
    */
 
    var $_fp;
 
 
 
   /**
 
    * ProgressBar intance used to display the indicator
 
    * @var object
 
    */
 
    var $_bar;
 
 
 
   /**
 
    * Name of the target file
 
    * @var string
 
    */
 
    var $_target;
 
 
 
   /**
 
    * Number of bytes received so far
 
    * @var int
 
    */
 
    var $_size = 0;
 
 
 
    function HTTP_Request_DownloadListener()
 
    {
 
        $this->HTTP_Request_Listener();
 
    }
 
 
 
   /**
 
    * Opens the target file
 
    * @param string Target file name
 
    * @throws PEAR_Error
 
    */
 
    function setTarget($target)
 
    {
 
        $this->_target = $target;
 
        $this->_fp = @fopen($target, 'wb');
 
        if (!$this->_fp) {
 
            PEAR::raiseError("Cannot open ''");
 
        }
 
    }
 
 
 
    function update(&$subject, $event, $data = null)
 
    {
 
        switch ($event) {
 
            case 'sentRequest':
 
                $this->_target = basename($subject->_url->path);
 
                break;
 
 
 
            case 'gotHeaders':
 
                if (isset($data['content-disposition']) &&
 
                    preg_match('/filename="([^"]+)"/',
 
                               $data['content-disposition'],
 
                               $matches))
 
                {
 
                    $this->setTarget(basename($matches[1]));
 
                } else {
 
                    $this->setTarget($this->_target);
 
                }
 
                $this->_bar =& new HTML_Progress2();
 
                if (isset($data['content-length'])) {
 
                    $inc = round($data['content-length'] / 100);
 
                } else {
 
                    $inc = 1;
 
                }
 
                $this->_bar->setIncrement(intval($inc));
 
                echo '<style type="text/css">'
 
                     . $this->_bar->getStyle()
 
                     . '</style>';
 
                echo '<script type="text/javascript">'
 
                     . $this->_bar->getScript()
 
                     . '</script>';
 
                $this->_bar->display();
 
                $this->_size = 0;
 
                break;
 
 
 
            case 'tick':
 
                $this->_size += strlen($data);
 
                $val = round($this->_size / $this->_bar->getIncrement());
 
                $this->_bar->moveStep(intval($val));
 
                fwrite($this->_fp, $data);
 
                break;
 
 
 
            case 'gotBody':
 
                $this->_bar->hide();
 
                fclose($this->_fp);
 
                break;
 
 
 
            default:
 
                PEAR::raiseError("Unhandled event ''");
 
        }
 
    }
 
}
 
 
 
$movie = 'sw4p.swf';
 
$url   = 'http://pear.laurent-laville.org/HTML_Progress/examples/viewlet/'
 
       . $movie;
 
 
 
$req =& new HTTP_Request($url);
 
 
 
$download =& new HTTP_Request_DownloadListener();
 
$req->attach($download);
 
$req->sendRequest(false);
 
 
 
 
 
$codeBase = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab'
 
          . '#version=5,0,0,0';
 
$pluginsPage = 'http://www.macromedia.com/shockwave/download/index.cgi'
 
             . '?P1_Prod_Version=ShockwaveFlash';
 
?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 
    "http://www.w3c.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 
<head>
 
<title>Setup Wizard for PHP</title>
 
<meta name="Keywords" content="viewlet, qarbon, sw4p, HTML_SetupWizard">
 
<meta name="Description" content="a presentation to SW4P (Setup Wizard for PHP)">
 
</head>
 
 
 
<body bgcolor="#ffffff">
 
 
 
<div align="center">
 
<object
 
  classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
 
  codebase="<?php echo $codeBase; ?>"
 
  width="530"
 
  height="416">
 
  <param name="movie" value="<?php echo $movie; ?>">
 
  <param name="quality" value="high">
 
  <param name="bgcolor" value="#ffffff">
 
  <embed src="<?php echo $movie; ?>"
 
      quality="high"
 
      bgcolor="#ffffff"
 
      width="530"
 
      height="416"
 
      type="application/x-shockwave-flash"
 
      pluginspage="<?php echo $pluginsPage; ?>">
 
</object>
 
</div>
 
 
 
</body>
 
</html>