PHP Classes
Icontem

File: example_elements.class.php


  Search   All class groups All class groups   Latest entries Latest entries   Top 10 charts Top 10 charts   Newsletter Newsletter   Blog Blog   Forums Forums   Help FAQ Help FAQ  
  Login   Register  
Recommend this page to a friend! ReTweet ReTweet Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Thiemo Mättig  >  TM::Apeform  >  example_elements.class.php  
File: example_elements.class.php
Role: Class source
Content type: text/plain
Description: Extended class with special form elements
Class: TM::Apeform
A very abstract web form builder and processor
 

Contents

Class file image Download
<?php

// Include the original TM::Apeform class to be extended.
require_once("Apeform.class.php");

/**
 * Extended TM::Apeform class providing some special form elements with build in
 * error checking.
 */
class ExtendedApeform extends Apeform
{
    
/**
     * Creates an ISO-date input field, e.g. "2003-12-31".
     *
     * @param label string
     * @param help string
     * @param defaultValue string
     * @return string
     */
    
function &date($label "<u>D</u>ate"$help "Year-Month-Day",
        
$defaultValue "")
    {
        
// Use the actual date as defaultValue.
        
if (empty($defaultValue)) $defaultValue date("Y-m-d");
        
// Calculate default element maxLength (and size too).
        
$maxLength strlen($defaultValue);
        
// Call the parent method.
        
$date = &$this->text($label$help$defaultValue$maxLength);
        
// Try to fetch three numbers from the string, the year first.
        
if (! preg_match('/(\d+)\D+(\d+)\D+(\d+)/s'$date$m))
        {
            
$this->error("Please enter a date");
        }
        else
        {
            
// Extend years with missing century.
            
if ($m[1] <= 38$m[1] += 2000;
            elseif (
$m[1] <= 99$m[1] += 1900;
            
// Check validity, e.g. 2003-02-29 is forbidden.
            
if (! checkdate($m[2], $m[3], $m[1]))
            {
                
$this->error("Please enter a valid <u>d</u>ate");
            }
            else
            {
                
// Well-form the value.
                
$date sprintf("%04s-%02s-%02s"$m[1], $m[2], $m[3]);
            }
        }
        return 
$date;
    }

    
/**
     * Creates an ISO-date input field, e.g. "2003-12-31".
     *
     * @param label string
     * @param help string
     * @param defaultValue string
     * @return string
     */
    
function &dateSelector($label "<u>D</u>ate"$help "Year-Month-Day",
        
$defaultValue "")
    {
        static 
$count 0;
        
$count++;
        
$name "element" count($this->_rows);
        
$help .= <<<CALENDAR
\t
 <a href="#" onclick="return calendar$count()">Calendar...</a>
<script type="text/javascript">
function calendar$count()
{
  var c = '<html><head><title>Calendar</title></head><body>This is just an example<br><code>';
  for (i = 1; i <= 31; i++)
  
{
    v = i <= 9 ? '0' + i : i;
    c += '<a href="#" onclick="e=opener.document.forms
[\'form\'].elements[\'$name\'];';
    c += 'e.value=e.value.substr(0,8)+\'' + v + '\';self.close();return false">' + v + '</a> ';
    if (i % 7 == 0) c += '<br>';
  
}
  c += '</code></body></html>';
  var w = 250;
  var h = 130;
  var p = "";
  if (typeof event == "object" && typeof event.screenX == "number")
  
{
    p = ",left=" + event.screenX + ",top=" + event.screenY;
  
}
  var f = window.open("", "Calendar", "width=" + w + ",height=" + h + p + ",location=no,menubar=no,status=no,toolbar=no");
  f.document.open("text/html", "replace");
  f.document.write(c);
  f.document.close();
  f.focus();
  return false;
}
</script>
CALENDAR;
        
// Call the parent method.
        
return $this->date($label$help$defaultValue);
    }

    
/**
     * Creates an email input field, e.g. "name@domain.tld".
     *
     * @param label string
     * @param help string
     * @param defaultValue string
     * @param isRequired bool
     * @return string
     */
    
function &email($label "<u>E</u>mail"$help ""$defaultValue "",
        
$isRequired true)
    {
        
// Call the parent method.
        
$email = &$this->text($label$help$defaultValue);
        if (
$isRequired && ! $email)
        {
            
$this->error("Please enter your <u>e</u>mail adress");
        }
        
// Check for a single At sign, no spaces, top level domain and so on.
        
elseif ($email && ! preg_match(
            
'/^[^\s"\'<>()@,;:]+@[^\s"\'<>()@,;:]+\.[a-z]{2,6}$/is'$email))
        {
            
$this->error("Please enter a valid <u>e</u>mail adress");
        }
        return 
$email;
    }

    
/**
     * Creates a price input field, e.g. "99.95".
     *
     * @param label string
     * @param help string
     * @param defaultValue float
     * @param min float
     * @param max float
     * @return string
     */
    
function &price($label "<u>P</u>rice"$help "\t Euro",
        
$defaultValue "0.00"$min 0.01$max 999999.99)
    {
        
// Calculate maximum string length.
        
$maxLength max(strlen(sprintf("%.2f"$min)),
            
strlen(sprintf("%.2f"$max)));
        
// Call the parent method.
        
$price = &$this->text($label$help$defaultValue$maxLength,
            
$maxLength);
        
// Remove any special character.
        
$price preg_replace('/[^\d.-]+/s'''$price);
        
// Check boundaries.
        
if ($price $min)
        {
            
$this->error("Please enter a larger <u>p</u>rice");
        }
        elseif (
$price $max)
        {
            
$this->error("Please enter a lower <u>p</u>rice");
        }
        else
        {
            
// Well-form the value.
            
$price sprintf("%.2f"$price);
        }
        return 
$price;
    }

    
/**
     * Creates an extended file upload field.
     *
     * @param label string
     * @param help string
     * @param allowedType string
     * @param maxKB int
     * @param isRequired bool
     * @return array
     */
    
function &filetype($label "<u>F</u>ile"$help ""$allowedType "*/*",
        
$maxKB 2048$isRequired false)
    {
        
// Call the parent method.
        
$file = &$this->file($label$help);
        
$pattern '{^' str_replace("*"".*"$allowedType) . '$}is';
        if (
$isRequired && ! $file)
        {
            
$this->error("Please select a file");
        }
        elseif (
$file && $allowedType && ! preg_match($pattern$file['type']))
        {
            
$this->error("Please select a file of another type");
        }
        elseif (
$file && $maxKB && $file['size'] > $maxKB 1024)
        {
            
$this->error("Please select a smaller file (max. " .
                
number_format($maxKB) . "KB)");
        }
        return 
$file;
    }
}

?>

 
  Advertise on this site Advertise on this site   Site map Site map   Statistics Statistics   Site tips Site tips   Privacy policy Privacy policy   Contact Contact  

For more information send a message to :
info at phpclasses dot org.
Copyright (c) Icontem 1999-2009 PHP Classes - PHP Class Scripts
  PHP Book Reviews - Reviews of books and other products