<?php 
 
/** 
 * @author Dick Munroe <[email protected]> 
 * @copyright copyright (c) Dick Munroe, 2004-2006, All rights reserved. 
 * @license http://www.csworks.com/publications/ModifiedNetBSD.html 
 * @version 2.0.0 
 */ 
 
// 
// Generate the syntatic validation for interfaces built by buildForm. 
// 
// This was written as part of the writing of an article for the 
// OpenVMS Technical Journal. 
// 
// This program should be run BEFORE buildForm is run as buildForm checks 
// for the existance of a validation file.  This allows you to build forms 
// without any validation if desired. 
// 
// My thanks to Chris Sands, the Director of IT at the Florida Democratic 
// Party, for permission to submit this program for general use. 
// 
//    $Author: munroe $ 
//    $Date: 2006/11/02 16:42:24 $ 
// 
// Edit History: 
// 
//  Dick Munroe [email protected] 03-May-2005 
//      Initial Version Created 
// 
//  Dick Munroe [email protected] 14-Mar-2006 
//    Change licensing, reorganize includes. 
// 
//  Dick Munroe ([email protected]) 15-Oct-2006 
//      Switch to database independent interfaces. 
// 
 
$theOptions = getopt("h:p:u:d:") ; 
 
if (count($_SERVER['argv']) < 3) 
{ 
    print(" 
buildSyntacticValidation [-h hostname] [-u username] [-p password] [-d DBType] tableName databaseName 
 
    Writes a file named \"form.tableName.js\" and renames any existing file of the same 
    name to form.tableName.js.old. 
") ; 
    return 0 ; 
} 
 
// 
// Unfortunately PHP doesn't do the argv reduction common to all 
// other implementations of getopt, so I'm requiring that the 
// table and database names be the first two arguments. 
// 
 
include_once('SQLData/options.php') ; 
 
$theTableName = $_SERVER['argv'][count($_SERVER['argv']) - 2] ; 
$theDatabaseName = $_SERVER['argv'][count($_SERVER['argv']) - 1] ; 
 
if (empty($theTableName)) 
{ 
    die('A table name is needed') ; 
} 
 
if (empty($theDatabaseName)) 
{ 
    die('A database name is needed') ; 
} 
 
options($theOptions) ; 
 
$theDB = 
    FactoryDB::factory( 
        $theOptions['u'],                               // Username 
        $theOptions['p'],                               // Password 
        $theDatabaseName,                               // Database 
        $theOptions['h'],                               // Host 
        $theOptions['d']) ;                             // Database Type 
 
// 
// Preserve the outfile, if one already exists. 
// 
 
$theFileName = sprintf("form.%s.js", ucfirst($theTableName)) ; 
$theOldFileName = $theFileName . ".old" ; 
 
if (file_exists($theFileName)) 
{ 
  if (is_file($theFileName)) 
    { 
      if (!rename($theFileName, $theOldFileName)) 
    { 
      exit(1) ; 
    } 
    } 
  else 
    { 
      exit(2) ; 
    } 
} 
 
if (!($theStream = @fopen($theFileName, 'w'))) 
{ 
  exit(3) ; 
} 
 
$theValidResults = array() ; 
 
$theResult = $theDB->describeTable($theTableName) ; 
 
$theEncodeType = "" ; 
 
foreach ($theResult as $theResultArray) 
{ 
    if (!preg_match('/auto_increment/', $theResultArray['Extra'])) 
    { 
        if (preg_match('/blob/', $theResultArray['Type'])) 
        { 
            $theEncodeType = 'enctype="multipart/form-data"' ; 
        } 
 
        array_push($theValidResults, $theResultArray) ; 
    } 
} 
 
// 
// Build the javascript validation functions 
// 
 
foreach ($theValidResults as $theResultArray) 
{ 
    $theForm[] = sprintf('function validate%s(what) 
{ 
    // 
    // Validate %s field value 
    // 
 
    if (!isRequired(what)) 
    { 
        return false ; 
    } 
 
    return true ; 
} 
 
',         ucfirst($theResultArray['Field']), 
           $theResultArray['Field']) ; 
} 
 
if (fwrite($theStream,implode("", $theForm)) === FALSE) 
{ 
  exit(4) ; 
} 
 
exit(0) ; 
?> 
 
 |