<?php
/**
* @author Dick Munroe <munroe@csworks.com>
* @copyright copyright @ Dick Munroe, 2004-2006, All rights reserved
* @license http://www.csworks.com/publications/ModifiedNetBSD.html
* @version 2.0.0
*/
//
// Construct a processor of an "edit" form using the class interface to a
// mySQL table generated by buildClass
//
// Build a processor of an HTML form from a mySQL table description that uses
// a SQLData derived class to access the data for the form.
// The processor program generated will require tweaking in order
// to be complete. Experience shows that the generated processor form is
// about 80% of the work.
//
// $Author: dickmunroe $
// $Date: 2007/12/26 15:41:56 $
//
// Edit History:
//
// Dick Munroe munroe@csworks.com 06-Nov-2004
// Initial Version Created
//
// Dick Munroe munroe@csworks.com 04-May-2005
// Clean up for publication.
//
// 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.
//
// Dick Munroe (munroe@csworks.com) 02-Nov-2006
// Minor tweak for better php5 compatibility.
//
include_once('SQLData/options.php') ;
$theOptions = getopt("h:p:u:d:") ;
if (count($_SERVER['argv']) < 3)
{
print("
buildProcessForm [-h hostname] [-u username] [-p password] [-d DBType] tableName databaseName
Write a file named \"process.tableName.php\" and renames any existing file of
the same name to process.tableName.php.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.
//
$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) ;
$theValidResults = array() ;
$theDB =
FactoryDB::factory(
$theOptions['u'], // Username
$theOptions['p'], // Password
$theDatabaseName, // Database
$theOptions['h'], // Host
$theOptions['d']) ; // Database Type
//
// Save the old output file.
//
$theFileName = sprintf("process.%s.php", 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) ;
}
//
// Emit the rough draft of the form processor.
//
fwrite($theStream, sprintf('<?php
//
// Edit form processor for:
//
// Class: %s
// Table: %s
// Database: %s
//
// Generated by buildProcessForm.php, written by Dick Munroe (munroe@csworks.com)
//
include_once("class.%s.php") ;
include_once("config.%s.php") ;
include_once("requestUtils/requestUtils.class.php") ;
session_start() ;
$the%s = new %s($the%sDatabase, $the%sHost, $the%sUser, $the%sPassword) ;
', ucfirst($theTableName),
$theTableName,
$theDatabaseName,
ucfirst($theTableName),
$theDatabaseName,
ucfirst($theTableName),
ucfirst($theTableName),
$theDatabaseName,
$theDatabaseName,
$theDatabaseName,
$theDatabaseName)) ;
fwrite(
$theStream,
'$theQuery = (empty($_SESSION["query"]) ? NULL : $_SESSION["query"]) ;
') ;
$thePrimaryKey = "" ;
$thePrimaryKeyIsAutoIncrement = false ;
$theResult = $theDB->describeTable($theTableName) ;
foreach ($theResult as $theRow)
{
if (!preg_match("/auto_increment/", $theRow['Extra']))
{
fwrite($theStream, sprintf('$the%s->set%s(stripslashes(requestUtils::getRequestObject("%s"))) ;
', ucfirst($theTableName),
ucfirst($theRow['Field']),
$theRow['Field'])) ;
} ;
if ($theRow['Key'] == 'PRI')
{
$thePrimaryKey = $theRow['Field'] ;
$thePrimaryKeyIsAutoIncrement = preg_match("/auto_increment/", $theRow['Extra']) ;
}
}
fwrite($theStream, '
if (empty($theQuery))
{
') ;
fwrite($theStream, sprintf(' if (!$the%s->insert())
{
$the%s->showErrors() ;
die() ;
}
', ucfirst($theTableName),
ucfirst($theTableName))) ;
if (empty($thePrimaryKey))
{
fwrite($theStream, ' $theQuery = "where theField = theValue" ;
die("You must specify a unique selector and store it in $theQuery") ;
') ;
}
else
{
fwrite($theStream, sprintf(' $theQuery = "where %s = \'" . $the%s->escape_string($the%s->get("%s")) . "\'" ;
', addcslashes($theDB->quoteIdentifier($thePrimaryKey), '"'),
ucfirst($theTableName),
ucfirst($theTableName),
$thePrimaryKey)) ;
}
fwrite($theStream, sprintf('}
else
{
if (!$the%s->update($theQuery))
{
$the%s->showErrors() ;
die() ;
}
}
', ucfirst($theTableName),
ucfirst($theTableName))) ;
fwrite($theStream, '
$_SESSION["query"] = $theQuery ;
$theUrl = explode("?", $_SERVER["HTTP_REFERER"]) ;
header("Location: " . $theUrl[0]) ;
?>
') ;
?>
|