Sophie

Sophie

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

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

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>
      How to observe events ?
    </title>
    <link rel="stylesheet" href="book.css" type="text/css" />
    <meta name="generator" content="DocBook XSL Stylesheets V1.69.1" />
    <link rel="start" href="index.html" title="HTML_Progress2 Manual" />
    <link rel="up" href="ch07.html" title="Chapter&nbsp;7.&nbsp;Listener" />
    <link rel="prev" href="ch07.html" title="Chapter&nbsp;7.&nbsp;Listener" />
    <link rel="next" href="ch08.html" title=
    "Chapter&nbsp;8.&nbsp;Quick Start with HTML_Progress2_Monitor" />
    <style type="text/css">
/*<![CDATA[*/
    body {
    background-color: white;
    color: black;
    }
    :link { color: #0000FF }
    :visited { color: #840084 }
    :active { color: #0000FF }
    div.c3 {margin-left: 0.5in; margin-right: 0.5in;}
    div.c2 {font-family: monospace;}
    h2.c1 {clear: both}
    /*]]>*/
    </style>
  </head>
  <body>
    <table class="progress2Header">
      <tr>
        <td>
          <img src="img/pear_progress2.gif" align="left" alt=
          "PEAR Progress2 logo" />
          <h1>
            HTML_Progress2 : The Definitive Guide
          </h1>
          <div class="navheader">
            <table width="100%" summary="Navigation header">
              <tr>
                <th colspan="3" align="center">
                  How to observe events ?
                </th>
              </tr>
              <tr>
                <td width="20%" align="left">
                  <a accesskey="p" href="ch07.html">Prev</a>&nbsp;
                </td>
                <th width="60%" align="center">
                  Chapter&nbsp;7.&nbsp;Listener
                </th>
                <td width="20%" align="right">
                  &nbsp;<a accesskey="n" href="ch08.html">Next</a>
                </td>
              </tr>
            </table>
          </div>
        </td>
      </tr>
    </table>
    <div class="sect1" lang="en" xml:lang="en">
      <div class="titlepage">
        <h2 class="title c1">
          <a name="listener.observe" id="listener.observe"></a>How to observe
          events ?
        </h2>
      </div>
      <p>
        Suppose we decide to send a mail after a process is over (progress
        meter reach 100%) and keep aware some users. We will see how to do this
        now.
      </p>
      <p>
        <span class="bold"><strong>First step</strong></span> is to declare a
        function (user callback) that will observe all progress meter events.
      </p>
      <p>
        Interface of such function (callback) is pretty easy. It requires only
        one argument passed by reference (<code class=
        "varname">$notification</code>) and that should contains a <span class=
        "emphasis"><em>PEAR::Event_Dispatcher</em></span> instance.
      </p>
      <p>
        Here are, in purpose of our tutorial, a function that will observe
        events and send a mail, at end of process, to webmaster@site.com with a
        short message that gave time elapsed.
      </p>
      <p>
        <span class="bold"><strong>Second step</strong></span> is to attach
        this function (user callback) to the progress meter with the
        <code class="methodname">addListener()</code> method.
      </p>
      <div class="php c2">
        <ol>
          <li class="li1">
            <div class="de1">
              <span class="kw2">&lt;?php</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="kw1">require_once</span> <span class=
              "st0">'HTML/Progress2.php'</span><span class="sy0">;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              &nbsp;
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="kw2">function</span> getmicrotime<span class=
              "br0">(</span><span class="re1">$time</span><span class=
              "br0">)</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="br0">{</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              &nbsp; &nbsp; <span class="kw3">list</span><span class=
              "br0">(</span><span class="re1">$usec</span><span class=
              "sy0">,</span> <span class="re1">$sec</span><span class=
              "br0">)</span> <span class="sy0">=</span> <span class=
              "kw3">explode</span><span class="br0">(</span><span class="st0">'
              '</span><span class="sy0">,</span> <span class=
              "re1">$time</span><span class="br0">)</span><span class=
              "sy0">;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              &nbsp; &nbsp; <span class="kw1">return</span> <span class=
              "br0">(</span><span class="br0">(</span>float<span class=
              "br0">)</span><span class="re1">$usec</span> <span class=
              "sy0">+</span> <span class="br0">(</span>float<span class=
              "br0">)</span><span class="re1">$sec</span><span class=
              "br0">)</span><span class="sy0">;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              &nbsp;
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="br0">}</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              &nbsp;
            </div>
          </li>
          <li class="li1 ln-xtra">
            <div class="de1">
              <span class="kw2">function</span> myObserver<span class=
              "br0">(</span><span class="sy0">&amp;</span><span class=
              "re1">$notification</span><span class="br0">)</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="br0">{</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              &nbsp; &nbsp; <span class="kw3">static</span> <span class=
              "re1">$time_start</span><span class="sy0">;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              &nbsp;
            </div>
          </li>
          <li class="li1 ln-xtra">
            <div class="de1">
              &nbsp; &nbsp; <span class="re1">$notifyName</span> <span class=
              "sy0">=</span> <span class="re1">$notification</span><span class=
              "sy0">-&gt;</span><span class=
              "me1">getNotificationName</span><span class=
              "br0">(</span><span class="br0">)</span><span class=
              "sy0">;</span>
            </div>
          </li>
          <li class="li1 ln-xtra">
            <div class="de1">
              &nbsp; &nbsp; <span class="re1">$notifyInfo</span> <span class=
              "sy0">=</span> <span class="re1">$notification</span><span class=
              "sy0">-&gt;</span><span class=
              "me1">getNotificationInfo</span><span class=
              "br0">(</span><span class="br0">)</span><span class=
              "sy0">;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              &nbsp;
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              &nbsp; &nbsp; <span class="kw1">switch</span> <span class=
              "br0">(</span><span class="re1">$notifyName</span><span class=
              "br0">)</span> <span class="br0">{</span>
            </div>
          </li>
          <li class="li1 ln-xtra">
            <div class="de1">
              &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span>
              <span class="st0">'onSubmit'</span><span class="sy0">:</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=
              "re1">$time_start</span> <span class="sy0">=</span>
              getmicrotime<span class="br0">(</span><span class=
              "re1">$notifyInfo</span><span class="br0">[</span><span class=
              "st0">'time'</span><span class="br0">]</span><span class=
              "br0">)</span><span class="sy0">;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=
              "kw1">break</span><span class="sy0">;</span>
            </div>
          </li>
          <li class="li1 ln-xtra">
            <div class="de1">
              &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span>
              <span class="st0">'onLoad'</span><span class="sy0">:</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=
              "re1">$time_elapse</span> <span class="sy0">=</span>
              getmicrotime<span class="br0">(</span><span class=
              "re1">$notifyInfo</span><span class="br0">[</span><span class=
              "st0">'time'</span><span class="br0">]</span><span class=
              "br0">)</span> <span class="sy0">-</span> <span class=
              "re1">$time_start</span><span class="sy0">;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=
              "kw3">error_log</span> <span class="br0">(</span><span class=
              "st0">'process ID=5 is over (elapse time = '</span><span class=
              "sy0">.</span> <span class="re1">$time_elapse</span> <span class=
              "sy0">.</span> <span class="st0">' sec.)'</span><span class=
              "sy0">,</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
              &nbsp; &nbsp; &nbsp;<span class="nu0">3</span><span class=
              "sy0">,</span> <span class=
              "st0">'progress_observer.log'</span><span class=
              "br0">)</span><span class="sy0">;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=
              "kw1">break</span><span class="sy0">;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              &nbsp; &nbsp; <span class="br0">}</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="br0">}</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              &nbsp;
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="re1">$pb</span> <span class="sy0">=</span>
              <span class="kw2">new</span> HTML_Progress2<span class=
              "br0">(</span><span class="br0">)</span><span class=
              "sy0">;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="re1">$pb</span><span class=
              "sy0">-&gt;</span><span class=
              "me1">setAnimSpeed</span><span class="br0">(</span><span class=
              "nu0">200</span><span class="br0">)</span><span class=
              "sy0">;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="re1">$pb</span><span class=
              "sy0">-&gt;</span><span class=
              "me1">setIncrement</span><span class="br0">(</span><span class=
              "nu0">10</span><span class="br0">)</span><span class=
              "sy0">;</span>
            </div>
          </li>
          <li class="li1 ln-xtra">
            <div class="de1">
              <span class="re1">$pb</span><span class=
              "sy0">-&gt;</span><span class=
              "me1">addListener</span><span class="br0">(</span><span class=
              "st0">'myObserver'</span><span class="br0">)</span><span class=
              "sy0">;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="kw2">?&gt;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="sy0">&lt;!</span>DOCTYPE html <span class=
              "kw2">PUBLIC</span> <span class="st0">"-//W3C//DTD XHTML 1.0
              Strict//EN"</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              &nbsp; &nbsp; <span class=
              "st0">"http://www.w3c.org/TR/xhtml1/DTD/xhtml1-strict.dtd"</span><span class="sy0">&gt;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="sy0">&lt;</span>html xmlns<span class=
              "sy0">=</span><span class=
              "st0">"http://www.w3.org/1999/xhtml"</span> xml<span class=
              "sy0">:</span>lang<span class="sy0">=</span><span class=
              "st0">"en"</span><span class="sy0">&gt;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="sy0">&lt;</span>head<span class="sy0">&gt;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="sy0">&lt;</span>title<span class=
              "sy0">&gt;</span>Observer Pattern<span class=
              "sy0">&lt;/</span>title<span class="sy0">&gt;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              &nbsp;
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="kw2">&lt;?php</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="kw3">echo</span> <span class=
              "re1">$pb</span><span class="sy0">-&gt;</span><span class=
              "me1">getStyle</span><span class="br0">(</span><span class=
              "kw2">false</span><span class="br0">)</span><span class=
              "sy0">;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="kw3">echo</span> <span class=
              "re1">$pb</span><span class="sy0">-&gt;</span><span class=
              "me1">getScript</span><span class="br0">(</span><span class=
              "kw2">false</span><span class="br0">)</span><span class=
              "sy0">;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="kw2">?&gt;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="sy0">&lt;/</span>head<span class="sy0">&gt;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="sy0">&lt;</span>body<span class="sy0">&gt;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="kw2">&lt;?php</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="re1">$pb</span><span class=
              "sy0">-&gt;</span><span class="me1">display</span><span class=
              "br0">(</span><span class="br0">)</span><span class=
              "sy0">;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="re1">$pb</span><span class=
              "sy0">-&gt;</span><span class="me1">run</span><span class=
              "br0">(</span><span class="br0">)</span><span class=
              "sy0">;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="kw2">?&gt;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="sy0">&lt;/</span>body<span class="sy0">&gt;</span>
            </div>
          </li>
          <li class="li1">
            <div class="de1">
              <span class="sy0">&lt;/</span>html<span class="sy0">&gt;</span>
            </div>
          </li>
        </ol>
      </div>
      <div class="variablelist">
        <dl>
          <dt>
            <span class="term">Line 15 :</span>
          </dt>
          <dd>
            <p>
              <code class="varname">$notifyName</code> contains event name
              triggered. Three issues : <span class=
              "emphasis"><em>onSubmit</em></span>, <span class=
              "emphasis"><em>onLoad</em></span>, <span class=
              "emphasis"><em>onChange</em></span>.
            </p>
            <div class="caution c3">
              <table border="0" summary="Caution">
                <tr>
                  <td rowspan="2" align="center" valign="top" width="48">
                    <img alt="[Caution]" src="img/admons/caution.png" />
                  </td>
                  <th align="left">
                    Caution
                  </th>
                </tr>
                <tr>
                  <td align="left" valign="top">
                    Event name is case sensitive: <span class=
                    "emphasis"><em>onsubmit</em></span> does not match
                    <span class="emphasis"><em>onSubmit</em></span>.
                  </td>
                </tr>
              </table>
            </div>
          </dd>
          <dt>
            <span class="term">Line 16 :</span>
          </dt>
          <dd>
            <p>
              <code class="varname">$notifyInfo</code> contains array of
              additional informations.
            </p>
            <p>
              For example :
            </p>
            <pre class="programlisting">
Array
(
    [handler] =&gt; run
    [value] =&gt; 100
    [sender] =&gt; html_progress2
    [time] =&gt; 0.26838700 1127382686
)
       
</pre>
          </dd>
          <dt>
            <span class="term">Line 19 :</span>
          </dt>
          <dd>
            <p>
              When progress meter start, it trigger a <span class=
              "emphasis"><em>onSubmit</em></span> event through the
              <code class="methodname">run()</code> method. This event is
              catched into user callback and with help of additionnal info we
              compute and store start time.
            </p>
          </dd>
          <dt>
            <span class="term">Line 22 :</span>
          </dt>
          <dd>
            <p>
              When progress meter reach 100%, it trigger a <span class=
              "emphasis"><em>onLoad</em></span> event through the <code class=
              "methodname">run()</code> method. This event is catched into user
              callback. We compute elapse time and send final result by mail to
              the webmaster of site.com
            </p>
          </dd>
          <dt>
            <span class="term">Lines 11-28, 33 :</span>
          </dt>
          <dd>
            <p>
              All observers attached, are notified by each event. It's up to
              you to decide if you have to process an event or not. Here we
              will proceed only two events: <span class=
              "emphasis"><em>onSubmit</em></span>, <span class=
              "emphasis"><em>onLoad</em></span>.
            </p>
          </dd>
        </dl>
      </div>
      <p>
        <span class="bold"><strong>Third step</strong></span> (optional) is
        stop listen events and then detach user function (callback) to the
        progress meter with the <code class=
        "methodname">removeListener()</code> method.
      </p>
      <div class="note c3">
        <table border="0" summary="Note">
          <tr>
            <td rowspan="2" align="center" valign="top" width="48">
              <img alt="[Note]" src="img/admons/note.png" />
            </td>
            <th align="left">
              Note
            </th>
          </tr>
          <tr>
            <td align="left" valign="top">
              While there are any observers attached, progress meter will
              continue to notify them of each event when they occured.
            </td>
          </tr>
        </table>
      </div>
    </div>
    <table class="progress2Footer">
      <tr>
        <td align="left">
          HTML_Progress2 : The Definitive Guide
        </td>
        <td align="right">
          v 2.4.0 : April 20, 2007
        </td>
      </tr>
    </table>
    <div class="navfooter">
      <hr />
      <table width="100%" summary="Navigation footer">
        <tr>
          <td width="40%" align="left">
            <a accesskey="p" href="ch07.html">Prev</a>&nbsp;
          </td>
          <td width="20%" align="center">
            <a accesskey="u" href="ch07.html">Up</a>
          </td>
          <td width="40%" align="right">
            &nbsp;<a accesskey="n" href="ch08.html">Next</a>
          </td>
        </tr>
        <tr>
          <td width="40%" align="left" valign="top">
            Chapter&nbsp;7.&nbsp;Listener&nbsp;
          </td>
          <td width="20%" align="center">
            <a accesskey="h" href="index.html">Home</a>
          </td>
          <td width="40%" align="right" valign="top">
            &nbsp;Chapter&nbsp;8.&nbsp;Quick Start with HTML_Progress2_Monitor
          </td>
        </tr>
      </table>
    </div>
  </body>
</html>