| 
<?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) ;
 ?>
 
 |