<?php
/**
* Progress meter is running in indeterminate mode while a file upload operation.
* This example may work with HTML_Progress 1.1
* but version 1.2.0 or better allows more easy facilities.
*
* @version $Id: hbar.php,v 1.2 2005/07/25 11:43:56 farell Exp $
* @author Laurent Laville <pear@laurent-laville.org>
* @package HTML_Progress
* @subpackage Examples
*/
require_once 'HTML/Progress.php';
require_once 'HTML/Progress/observer.php';
class logsUpload extends HTML_Progress_Observer
{
var $_console;
function logsUpload()
{
$isodate = date('Y-m-d');
$this->_console = './uploads/http4_' . $isodate . '.log';
$this->HTML_Progress_Observer();
}
function notify($event)
{
$semaphore = './uploads/'.$_GET['ID'];
if (file_exists($semaphore) && $event['value'] < 100) {
$stop = file_get_contents($semaphore);
$date = date('H:i:s');
$ip = $_SERVER['REMOTE_ADDR'];
$msg = "$date - $ip - file upload: $stop";
error_log("$msg \n", 3, $this->_console);
}
}
}
function _methodExists($name)
{
if (substr(PHP_VERSION,0,1) < '5') {
$n = strtolower($name);
} else {
$n = $name;
}
if (in_array($n, get_class_methods('HTML_Progress'))) {
return true;
}
return false;
}
/*
User callback called pending progress meter is running, comes with version 1.2.0RC3
*/
function myFunctionHandler($progressValue, &$obj)
{
global $version;
global $stop;
$semaphore = './uploads/'.$_GET['ID'];
if (file_exists($semaphore)) {
$stop = file_get_contents($semaphore);
$obj->setValue(100);
$obj->setIndeterminate(false);
$obj->display();
unlink($semaphore);
}
// sleep a bit ...
if ($version > 1.1) {
$obj->sleep();
} else {
for ($i=0; $i<($obj->_anim_speed*1000); $i++) { }
}
}
/*
Which version of html_progress: (stable)1.1 or (beta)1.2.0 RC1, RC2 or RC3
*/
$version = _methodExists('run') ? 1.2 : 1.1;
$progress = new HTML_Progress();
$observer = new logsUpload(); // prepare the progress meter to logs all upload operations
$progress->addListener($observer);
$progress->setIncrement(10);
$progress->setAnimSpeed(100);
$progress->setIndeterminate(true); // progress bar run in indeterminate mode
$progress->setStringPainted(true); // get space for the string
$progress->setBorderPainted(true);
$progress->setString(""); // but don't paint it
if ($version > 1.1) {
// set a progress handler required at least version 1.2.0RC3
$progress->setProgressHandler('myFunctionHandler');
}
$ui = & $progress->getUI();
$ui->setBorderAttributes('width=1 style=inset color=white');
$ui->setCellAttributes(array(
'active-color' => '#000084',
'inactive-color' => '#3A6EA5',
'width' => 25,
'spacing' => 0,
'background-image' => 'download.gif'
));
$ui->setStringAttributes(array(
'width' => 60,
'font-size' => 10,
'background-color' => '#C3C6C3'
));
?>
<!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>
<style type="text/css">
<!--
body {
background-color: #C3C6C3;
color: #000000;
font-family: Verdana, Arial;
}
<?php echo $progress->getStyle(); ?>
// -->
</style>
<script type="text/javascript">
<!--
<?php echo $progress->getScript(); ?>
//-->
</script>
</head>
<body>
<?php
echo $progress->toHtml();
if (isset($_GET['ID'])) {
if ($version > 1.1) {
$progress->run(); // run method is born on version 1.2.0RC3
} else {
// do the same as run() method
do {
$progress->display();
myFunctionHandler($progress->getValue(), $progress);
if ($progress->getPercentComplete() == 1) {
if ($progress->isIndeterminate()) {
$progress->setValue(0);
} else {
break;
}
}
$progress->incValue();
} while(1);
}
if ($stop == 'error') {
echo '<b>File was not uploaded !</b>';
} else {
echo '<b>Upload Complete...</b>';
}
}
?>
</body>
</html>