Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 89346381d9fb64d9ee8827de5f073355 > files > 263

php-pear-HTML_Progress2-2.4.1-3mdv2010.0.noarch.rpm

<?php
/**
 * Complex observer pattern for progress meter.
 * Uses a custom observer to log second progress bar process.
 *
 * @version    $Id: observer2.php,v 1.5 2006/05/24 08:41:45 farell Exp $
 * @author     Laurent Laville <pear@laurent-laville.org>
 * @package    HTML_Progress2
 * @subpackage Examples
 * @access     public
 * @example    examples/observer/observer2.php
 *             observer2 source code
 * @link       http://www.laurent-laville.org/img/progress/screenshot/observer2.png
 *             screenshot (Image PNG, 438x216 pixels) 1.36 Kb
 */
require_once 'HTML/Progress2.php';

function getmicrotime($time)
{
    list($usec, $sec) = explode(' ', $time);
    return ((float)$usec + (float)$sec);

}

// 1. Defines custom observer pattern
function myProgressObserver(&$notification)
{
    static $fileCount = 0;

    $notifyName = $notification->getNotificationName();
    $notifyInfo = $notification->getNotificationInfo();

    if (strcasecmp($notifyName, 'onChange') == 0) {
        if (strcasecmp($notifyInfo['handler'], 'moveNext') == 0) {
            if ($notifyInfo['value'] < 100) {
                $fileCount++;
                $timestamp = getmicrotime($notifyInfo['time']);
                $msg = sprintf('file #%s was proceed on %s', $fileCount, date('r', $timestamp));
                error_log ($msg . PHP_EOL, 3, 'observer2.log');
            }
        }
    }
}

// 2. Creates progress bars
$pb1 = new HTML_Progress2();
$pb1->setIdent('PB1');
$pb1->setComment('Complex Observer Progress2 example');
$pb1->setTabOffset(1);
$pb1->setOrientation(HTML_PROGRESS2_BAR_VERTICAL);
$pb1->setAnimSpeed(100);
$pb1->setIncrement(10);
$pb1->setProgressAttributes('position=absolute top=5 left=100');

$pb2 = new HTML_Progress2();
$pb2->setIdent('PB2');
$pb2->setTabOffset(1);
$pb2->setOrientation(HTML_PROGRESS2_BAR_VERTICAL);
$pb2->setAnimSpeed(100);
$pb2->setIncrement(25);
$pb2->setProgressAttributes('position=absolute top=5 left=250');

// 3. Attach an observer
$pb2->addListener('myProgressObserver');

// 4. Changes look-and-feel of progress bars
$pb1->setProgressAttributes('background-color=#E0E0E0');
$pb1->setLabelAttributes('pct1', array(
    'top' => 85,
    'left' => -50,
    'color'  => 'red'
));

$pb2->setBorderPainted(true);
$pb2->setBorderAttributes(array(
    'width' => 1,
    'color' => 'navy'
));
$pb2->setCellAttributes(array(
    'active-color' => '#3874B4',
    'inactive-color' => '#EEEECC'
));
$pb2->setLabelAttributes('pct1', array(
    'top' => 85,
    'left' => 15,
    'width'  => 100,
    'align'  => 'center',
    'color'  => 'yellow'
));
?>
<!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>Complex Observer Progress2 example</title>
<style type="text/css">
<!--
<?php
echo $pb1->getStyle();
echo $pb2->getStyle();
?>
div.container {
    position: absolute;
    left: 40px;
    top: 80px;
    width: 400px;
    height: 190px;
    background-color: lightblue;
    border: 2px;
    border-color: navy;
    border-style: dashed;
}
 -->
</style>
<?php echo $pb1->getScript(false); ?>
</head>
<body>

<div class="container">
<?php
$pb1->display();
$pb2->display();
?>
</div>

<?php
do {
    $pb1->process();    // warning: don't forget it (even for a demo)
    if ($pb1->getPercentComplete() == 1) {
        // the 1st progress bar has reached 100%, do a new loop
        $pb1->moveStep(0);
        // updates $pb2 because $pb1 has completed a full loop
        $pb2->moveNext();
    } else {
        $pb1->moveNext();   // updates 1st progress bar
    }
} while($pb2->getPercentComplete() < 1);
?>

</body>
</html>