<?php
/**
* @author Dick Munroe <munroe@csworks.com>
* @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 munroe@csworks.com 03-May-2005
// Initial Version Created
//
// Dick Munroe munroe@csworks.com 14-Mar-2006
// Change licensing, reorganize includes.
//
// Dick Munroe (munroe@csworks.com) 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) ;
?>
|