AJAX
[ class tree: AJAX ] [ index: AJAX ] [ all elements ]

Source for file guestbook.class.php

Documentation is available at guestbook.class.php

  1. <?php
  2. /**
  3.  * Guestbook uses HTML_AJAX_Action class to interact with the page - the
  4.  * javascript is all written from here
  5.  *
  6.  * @category   HTML
  7.  * @package    AJAX
  8.  * @author     Elizabeth Smith <auroraeosrose@gmail.com>
  9.  * @license    http://www.opensource.org/licenses/lgpl-license.php  LGPL
  10.  * @version    Release: @package_version@
  11.  * @link       http://pear.php.net/package/HTML_AJAX
  12.  */
  13.  
  14. /**
  15.  * Require the action class
  16.  */
  17. require_once 'HTML/AJAX/Action.php';
  18.  
  19. class guestbook {
  20.  
  21.     // constructor won't be exported
  22.         function guestbook({
  23.         if (!isset($_SESSION['entries'])) {
  24.             $_SESSION['entries'= array();
  25.         }
  26.     }
  27.  
  28.     // data is an array of objects
  29.         function newEntry($data{
  30.         //validation code is identical
  31.         $response = new HTML_AJAX_Action();
  32.         //remove any error nodes present
  33.         $response->removeNode('nameError');
  34.         $response->removeNode('emailError');
  35.         $response->removeNode('emailError2');
  36.         $response->removeNode('commentError');
  37.         //checking data
  38.         if(!isset($data['name']or empty($data['name']))
  39.         {
  40.             //create error div after bad name node
  41.             $response->createNode('name''div'array('class' => 'error''innerHTML' => 'Name is a required field''id' => 'nameError')'insertAfter');
  42.             $error = TRUE;
  43.         }
  44.         if(!isset($data['email']or empty($data['email']))
  45.         {
  46.             //create error div after bad name node
  47.             $response->createNode('email''div'array('class' => 'error''innerHTML' => 'Email is a required field''id' => 'emailError')'insertAfter');
  48.             $error = TRUE;
  49.         }
  50.         if($this->_checkEmail($data['email']!= TRUE)
  51.         {
  52.             //create error div after bad name node
  53.             $response->createNode('email''div'array('class' => 'error''innerHTML' => 'That email address is incorrect''id' => 'emailError2')'insertAfter');
  54.             $error = TRUE;
  55.         }
  56.         if(!isset($data['comments']or empty($data['comments']))
  57.         {
  58.             //create error div after bad name node
  59.             $response->createNode('comments''div'array('class' => 'error''innerHTML' => 'Comment is a required field''id' => 'commentError')'insertAfter');
  60.             $error = TRUE;
  61.         }
  62.         if(!isset($error))
  63.         {
  64.             //clean name - strip tags and html_entity it :)
  65.             $data['name'htmlentities(strip_tags($data['name']));
  66.             //clean email - strip tags it
  67.             $data['email'strip_tags($data['email']);
  68.             //clean website - strip http://if needed
  69.             $data['website'strip_tags($data['website']);
  70.             if(strpos($data['website']'http://'=== 0)
  71.             {
  72.                 $data['website'str_replace('http://'''$data['website']);
  73.             }
  74.             //clean like name
  75.             $data['comments'htmlentities(strip_tags($data['comments']));
  76.             //branch here depending on if form is new
  77.             if($data['submit'== 'Edit Entry')
  78.             {
  79.                 $old $_SESSION['entries'][$data['key']];
  80.                 //merge new data over old
  81.                 foreach($data as $key => $value)
  82.                 {
  83.                     $old[$key$value;
  84.                 }
  85.                 $_SESSION['entries'][$data['key']] $old;
  86.                 //replace div innerHTML, fun fun
  87.                 $response->assignAttr('entry'.$data['key']'innerHTML'$this->_makeDiv($data['key']$_SESSION['entries'][$data['key']]TRUE));
  88.                 //remove hidden input
  89.                 $response->removeNode('key');
  90.             }
  91.             else
  92.             {
  93.                 $data['date'date('j/n/Y, h:i');
  94.                 $_SESSION['entries'][$data;
  95.                 end($_SESSION['entries']);
  96.                 $key key($_SESSION['entries']);
  97.                 $response->prependAttr('guestbookList''innerHTML'$this->_makeDiv($key$data));
  98.             }
  99.             //reset the form
  100.             $response->assignAttr('name''value''');
  101.             $response->assignAttr('email''value''');
  102.             $response->assignAttr('website''value''');
  103.             $response->assignAttr('comments''value''');
  104.             $response->assignAttr('submit''value''Add Comments');
  105.         }
  106.         return $response;
  107.     }
  108.  
  109.     // empty the guestbook
  110.         function clearGuestbook($data{
  111.         $_SESSION['entries'= array();
  112.         $response = new HTML_AJAX_Action();
  113.         $response->insertAlert('You will clear all entries, this cannot be undone!');
  114.         $response->assignAttr('guestbookList''innerHTML''');
  115.         return $response;
  116.     }
  117.  
  118.     // delete an entry from the guestbook
  119.         function deleteEntry($id{
  120.         unset($_SESSION[$id]);
  121.         $response = new HTML_AJAX_Action();
  122.         $response->removeNode('entry'.$id);
  123.         return $response;
  124.     }
  125.  
  126.     // puts a guestbook entry back in
  127.         function editEntry($id{
  128.         $data $_SESSION['entries'][$id];
  129.         $response = new HTML_AJAX_Action();
  130.         //send to the form
  131.         $response->assignAttr('name''value'$data['name']);
  132.         $response->assignAttr('email''value'$data['email']);
  133.         $response->assignAttr('website''value'$data['website']);
  134.         $response->assignAttr('comments''value'$data['comments']);
  135.         $response->assignAttr('submit''value''Edit Entry');
  136.         $response->createNode('submit''input'array('id' => 'key''name' => 'key''type' => 'hidden''value' => $id)'insertBefore');
  137.         return $response;
  138.     }
  139.  
  140.     function updateSelect($id)
  141.     {
  142.         $response = new HTML_AJAX_Action();
  143.         $attr = array('id' => $id'name' => $id);
  144.         $response->replaceNode($id'select'$attr);
  145.         for ($i=1;$i<=10;$i++)
  146.         {
  147.             $attr = array('value' => $i'innerHTML' => 'Option ' $i);
  148.             $response->createNode($id'option'$attr'append');
  149.         }
  150.         return $response;
  151.     }
  152.  
  153.     function _makeDiv($key$data$replace = FALSE{
  154.         $div '';
  155.         if($replace == FALSE)
  156.         {
  157.             $div .= '<div class="entry" id="entry'.$key.'">';
  158.         }
  159.         $div .= '<h3><a href="mailto:'.$data['email'].'">'.$data['name'].'</a></h3>';
  160.         if(!empty($data['website']))
  161.         {
  162.             $div .= '<a href="http://'.$data['website'].'">'.$data['website'].'</a><br />';
  163.         }
  164.         $div .= '<p>'.$data['comments'].'</p>'
  165.             .'<div class="small">Posted: '.$data['date'].' | '
  166.             .'<a href="#" onclick="editentry('.$key.');">Edit</a> | '
  167.             .'<a href="#" onclick="deleteentry('.$key.');">Delete</a></div>';
  168.         if($replace == FALSE)
  169.         {
  170.             $div .= '</div>';
  171.         }
  172.         return $div;
  173.     }
  174.  
  175.     function _checkEmail($email)
  176.     {
  177.         //checks proper syntax
  178.         if(preg_match'/^[A-Z0-9._-]+@[A-Z0-9][A-Z0-9.-]{0,61}[A-Z0-9]\.[A-Z.]{2,6}$/i' $email))
  179.         {
  180.             return true;
  181.         }
  182.         return false;
  183.     }
  184. }
  185. ?>

Documentation generated on Sat, 05 May 2007 18:00:13 -0400 by phpDocumentor 1.3.0. PEAR Logo Copyright © PHP Group 2004.