331 lines
10 KiB
PHP
331 lines
10 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* @copyright 2006-2009 City of Bloomington, Indiana
|
||
|
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.txt
|
||
|
* @author Cliff Ingham <inghamn@bloomington.in.gov>
|
||
|
*/
|
||
|
include '../configuration.inc';
|
||
|
$zend_db = Database::getConnection();
|
||
|
|
||
|
foreach ($zend_db->listTables() as $tableName) {
|
||
|
$fields = array();
|
||
|
$primary_keys = array();
|
||
|
foreach ($zend_db->describeTable($tableName) as $row) {
|
||
|
$type = preg_replace("/[^a-z]/","",strtolower($row['DATA_TYPE']));
|
||
|
|
||
|
// Translate database datatypes into PHP datatypes
|
||
|
if (preg_match('/int/',$type)) {
|
||
|
$type = 'int';
|
||
|
}
|
||
|
if (preg_match('/enum/',$type) || preg_match('/varchar/',$type)) {
|
||
|
$type = 'string';
|
||
|
}
|
||
|
|
||
|
$fields[] = array('field'=>$row['COLUMN_NAME'],'type'=>$type);
|
||
|
|
||
|
if ($row['PRIMARY']) {
|
||
|
$primary_keys[] = $row['COLUMN_NAME'];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Only generate code for tables that have a single-column primary key
|
||
|
// Code for other tables will need to be created by hand
|
||
|
if (count($primary_keys) != 1) {
|
||
|
continue;
|
||
|
}
|
||
|
$key = $primary_keys[0];
|
||
|
|
||
|
$tableName = strtolower($tableName);
|
||
|
$className = Inflector::classify($tableName);
|
||
|
$variableName = Inflector::singularize($tableName);
|
||
|
$acl_resource = ucfirst($tableName);
|
||
|
|
||
|
/**
|
||
|
* Generate the list block
|
||
|
*/
|
||
|
$getId = "get".ucwords($key);
|
||
|
$HTML = "<div class=\"interfaceBox\">
|
||
|
<h1>
|
||
|
<?php
|
||
|
if (userIsAllowed('$acl_resource')) {
|
||
|
echo \"
|
||
|
<button type=\\\"button\\\" class=\\\"add\\\" onclick=\\\"document.location.href='\".BASE_URL.\"/$tableName/add$className.php';\\\">
|
||
|
Add
|
||
|
</button>
|
||
|
\";
|
||
|
}
|
||
|
?>
|
||
|
{$className}s
|
||
|
</h1>
|
||
|
<ul><?php
|
||
|
foreach (\$this->{$variableName}List as \${$variableName}) {
|
||
|
\$editButton = '';
|
||
|
if (userIsAllowed('$acl_resource')) {
|
||
|
\$url = new URL(BASE_URL.'/$tableName/update$className.php');
|
||
|
\$url->$key = \${$variableName}->{$getId}();
|
||
|
\$editButton = \"
|
||
|
<button type=\\\"button\\\" class=\\\"edit\\\" onclick=\\\"document.location.href='\$url';\\\">
|
||
|
Edit
|
||
|
</button>
|
||
|
\";
|
||
|
}
|
||
|
echo \"<li>\$editButton \$$variableName</li>\";
|
||
|
}
|
||
|
?>
|
||
|
</ul>
|
||
|
</div>";
|
||
|
|
||
|
$contents = "<?php\n";
|
||
|
$contents.= COPYRIGHT;
|
||
|
$contents.="
|
||
|
?>
|
||
|
$HTML";
|
||
|
|
||
|
$dir = APPLICATION_HOME."/scripts/stubs/blocks/$tableName";
|
||
|
if (!is_dir($dir)) {
|
||
|
mkdir($dir,0770,true);
|
||
|
}
|
||
|
file_put_contents("$dir/{$variableName}List.inc",$contents);
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Generate the addForm
|
||
|
*/
|
||
|
$HTML = "<h1>Add $className</h1>
|
||
|
<form method=\"post\" action=\"<?php echo \$_SERVER['SCRIPT_NAME']; ?>\">
|
||
|
<fieldset><legend>$className Info</legend>
|
||
|
<table>
|
||
|
";
|
||
|
foreach ($fields as $field) {
|
||
|
if ($field['field'] != $key) {
|
||
|
$fieldFunctionName = ucwords($field['field']);
|
||
|
switch ($field['type']) {
|
||
|
case 'date':
|
||
|
$HTML.="
|
||
|
<tr><td><label for=\"{$variableName}-$field[field]-mon\">$field[field]</label></td>
|
||
|
<td><select name=\"{$variableName}[$field[field]][mon]\" id=\"{$variableName}-$field[field]-mon\">
|
||
|
<option></option>
|
||
|
<?php
|
||
|
\$now = getdate();
|
||
|
for (\$i=1; \$i<=12; \$i++) {
|
||
|
\$selected = (\$i==\$now['mon']) ? 'selected=\"selected\"' : '';
|
||
|
echo \"<option \$selected>\$i</option>\";
|
||
|
}
|
||
|
?>
|
||
|
</select>
|
||
|
<select name=\"{$variableName}[$field[field]][mday]\">
|
||
|
<option></option>
|
||
|
<?php
|
||
|
for (\$i=1; \$i<=31; \$i++) {
|
||
|
\$selected = (\$i==\$now['mday']) ? 'selected=\"selected\"' : '';
|
||
|
echo \"<option \$selected>\$i</option>\";
|
||
|
}
|
||
|
?>
|
||
|
</select>
|
||
|
<input name=\"{$variableName}[$field[field]][year]\" id=\"{$variableName}-$field[field]-year\" size=\"4\" maxlength=\"4\" value=\"<?php echo \$now['year']; ?>\" />
|
||
|
</td>
|
||
|
</tr>";
|
||
|
break;
|
||
|
|
||
|
case 'datetime':
|
||
|
case 'timestamp':
|
||
|
$HTML.="
|
||
|
<tr><td><label for=\"{$variableName}-$field[field]-mon\">$field[field]</label></td>
|
||
|
<td><select name=\"{$variableName}[$field[field]][mon]\" id=\"{$variableName}-$field[field]-mon\">
|
||
|
<option></option>
|
||
|
<?php
|
||
|
\$now = getdate();
|
||
|
for (\$i=1; \$i<=12; \$i++) {
|
||
|
\$selected = (\$i==\$now['mon']) ? 'selected=\"selected\"' : '';
|
||
|
echo \"<option \$selected>\$i</option>\";
|
||
|
}
|
||
|
?>
|
||
|
</select>
|
||
|
<select name=\"{$variableName}[$field[field]][mday]\">
|
||
|
<option></option>
|
||
|
<?php
|
||
|
for (\$i=1; \$i<=31; \$i++) {
|
||
|
\$selected = (\$i==\$now['mday']) ? 'selected=\"selected\"' : '';
|
||
|
echo \"<option \$selected>\$i</option>\";
|
||
|
}
|
||
|
?>
|
||
|
</select>
|
||
|
<input name=\"{$variableName}[$field[field]][year]\" id=\"{$variableName}-$field[field]-year\" size=\"4\" maxlength=\"4\" value=\"<?php echo \$now['year']; ?>\" />
|
||
|
<select name=\"{$variableName}[$field[field]][hours]\" id=\"{$variableName}-$field[field]-hours\">
|
||
|
<?php
|
||
|
for (\$i=0; \$i<=23; \$i++) {
|
||
|
\$selected = (\$i==\$now['hours']) ? 'selected=\"selected\"' : '';
|
||
|
echo \"<option \$selected>\$i</option>\";
|
||
|
}
|
||
|
?>
|
||
|
</select>
|
||
|
<select name=\"{$variableName}[$field[field]][minutes]\" id=\"{$variableName}-$field[field]-minutes\">
|
||
|
<?php
|
||
|
for (\$i=0; \$i<=59; \$i+=15) {
|
||
|
\$selected = (\$i==\$now['minutes']) ? 'selected=\"selected\"' : '';
|
||
|
echo \"<option \$selected>\$i</option>\";
|
||
|
}
|
||
|
?>
|
||
|
</select>
|
||
|
</td>
|
||
|
</tr>";
|
||
|
break;
|
||
|
|
||
|
case 'text':
|
||
|
$HTML.= "
|
||
|
<tr><td><label for=\"{$variableName}-$field[field]\">$field[field]</label></td>
|
||
|
<td><textarea name=\"{$variableName}[$field[field]]\" id=\"{$variableName}-$field[field]\" rows=\"3\" cols=\"60\"></textarea>
|
||
|
</td>
|
||
|
</tr>
|
||
|
";
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
$HTML.= "
|
||
|
<tr><td><label for=\"{$variableName}-$field[field]\">$field[field]</label></td>
|
||
|
<td><input name=\"{$variableName}[$field[field]]\" id=\"{$variableName}-$field[field]\" />
|
||
|
</td>
|
||
|
</tr>
|
||
|
";
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
$HTML.= "
|
||
|
</table>
|
||
|
|
||
|
<button type=\"submit\" class=\"submit\">Submit</button>
|
||
|
<button type=\"button\" class=\"cancel\" onclick=\"document.location.href='<?php echo BASE_URL; ?>/{$variableName}s';\">
|
||
|
Cancel
|
||
|
</button>
|
||
|
</fieldset>
|
||
|
</form>";
|
||
|
|
||
|
$contents = "<?php\n";
|
||
|
$contents.= COPYRIGHT;
|
||
|
$contents.="
|
||
|
?>
|
||
|
$HTML";
|
||
|
file_put_contents("$dir/add{$className}Form.inc",$contents);
|
||
|
|
||
|
/**
|
||
|
* Generate the Update Form
|
||
|
*/
|
||
|
$HTML = "<h1>Update $className</h1>
|
||
|
<form method=\"post\" action=\"<?php echo \$_SERVER['SCRIPT_NAME']; ?>\">
|
||
|
<fieldset><legend>$className Info</legend>
|
||
|
<input name=\"$key\" type=\"hidden\" value=\"<?php echo \$this->{$variableName}->{$getId}(); ?>\" />
|
||
|
<table>
|
||
|
";
|
||
|
foreach ($fields as $field) {
|
||
|
if ($field['field'] != $key) {
|
||
|
$fieldFunctionName = ucwords($field['field']);
|
||
|
switch ($field['type']) {
|
||
|
case 'date':
|
||
|
$HTML.="
|
||
|
<tr><td><label for=\"{$variableName}-$field[field]-mon\">$field[field]</label></td>
|
||
|
<td><select name=\"{$variableName}[$field[field]][mon]\" id=\"{$variableName}-$field[field]-mon\">
|
||
|
<option></option>
|
||
|
<?php
|
||
|
\$$field[field] = \$this->{$variableName}->dateStringToArray(\$this->{$variableName}->get$fieldFunctionName());
|
||
|
for (\$i=1; \$i<=12; \$i++) {
|
||
|
\$selected = (\$i==\$$field[field]['mon']) ? 'selected=\"selected\"' : '';
|
||
|
echo \"<option \$selected>\$i</option>\";
|
||
|
}
|
||
|
?>
|
||
|
</select>
|
||
|
<select name=\"{$variableName}[$field[field]][mday]\">
|
||
|
<option></option>
|
||
|
<?php
|
||
|
for (\$i=1; \$i<=31; \$i++) {
|
||
|
\$selected = (\$i==\$$field[field]['mday']) ? 'selected=\"selected\"' : '';
|
||
|
echo \"<option \$selected>\$i</option>\";
|
||
|
}
|
||
|
?>
|
||
|
</select>
|
||
|
<input name=\"{$variableName}[$field[field]][year]\" id=\"{$variableName}-$field[field]-year\" size=\"4\" maxlength=\"4\" value=\"<?php echo \$$field[field]['year']; ?>\" />
|
||
|
</td>
|
||
|
</tr>";
|
||
|
break;
|
||
|
|
||
|
case 'datetime':
|
||
|
case 'timestamp':
|
||
|
$HTML.="
|
||
|
<tr><td><label for=\"{$variableName}-$field[field]-mon\">$field[field]</label></td>
|
||
|
<td><select name=\"{$variableName}[$field[field]][mon]\" id=\"{$variableName}-$field[field]-mon\">
|
||
|
<option></option>
|
||
|
<?php
|
||
|
\$$field[field] = \$this->{$variableName}->dateStringToArray(\$this->{$variableName}->get$fieldFunctionName());
|
||
|
for (\$i=1; \$i<=12; \$i++) {
|
||
|
\$selected = (\$i==\$$field[field]['mon']) ? 'selected=\"selected\"' : '';
|
||
|
echo \"<option \$selected>\$i</option>\";
|
||
|
}
|
||
|
?>
|
||
|
</select>
|
||
|
<select name=\"{$variableName}[$field[field]][mday]\">
|
||
|
<option></option>
|
||
|
<?php
|
||
|
for (\$i=1; \$i<=31; \$i++) {
|
||
|
\$selected = (\$i==\$$field[field]['mday']) ? 'selected=\"selected\"' : '';
|
||
|
echo \"<option \$selected>\$i</option>\";
|
||
|
}
|
||
|
?>
|
||
|
</select>
|
||
|
<input name=\"{$variableName}[$field[field]][year]\" id=\"{$variableName}-$field[field]-year\" size=\"4\" maxlength=\"4\" value=\"<?php echo \$$field[field]['year']; ?>\" />
|
||
|
<select name=\"{$variableName}[$field[field]][hours]\" id=\"{$variableName}-$field[field]-hours\">
|
||
|
<?php
|
||
|
for (\$i=0; \$i<=23; \$i++) {
|
||
|
\$selected = (\$i==\$$field[field]['hours']) ? 'selected=\"selected\"' : '';
|
||
|
echo \"<option \$selected>\$i</option>\";
|
||
|
}
|
||
|
?>
|
||
|
</select>
|
||
|
<select name=\"{$variableName}[$field[field]][minutes]\" id=\"{$variableName}-$field[field]-minutes\">
|
||
|
<?php
|
||
|
for (\$i=0; \$i<=59; \$i+=15) {
|
||
|
\$selected = (\$i==\$$field[field]['minutes']) ? 'selected=\"selected\"' : '';
|
||
|
echo \"<option \$selected>\$i</option>\";
|
||
|
}
|
||
|
?>
|
||
|
</select>
|
||
|
</td>
|
||
|
</tr>";
|
||
|
break;
|
||
|
|
||
|
case 'text':
|
||
|
$HTML.= "
|
||
|
<tr><td><label for=\"{$variableName}-$field[field]\">$field[field]</label></td>
|
||
|
<td><textarea name=\"{$variableName}[$field[field]]\" id=\"{$variableName}-$field[field]\" rows=\"3\" cols=\"60\"><?php echo \$this->{$variableName}->get$fieldFunctionName(); ?></textarea>
|
||
|
</td>
|
||
|
</tr>
|
||
|
";
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
$HTML.= "
|
||
|
<tr><td><label for=\"{$variableName}-$field[field]\">$field[field]</label></td>
|
||
|
<td><input name=\"{$variableName}[$field[field]]\" id=\"{$variableName}-$field[field]\" value=\"<?php echo \$this->{$variableName}->get$fieldFunctionName(); ?>\" />
|
||
|
</td>
|
||
|
</tr>
|
||
|
";
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
$HTML.= "
|
||
|
</table>
|
||
|
|
||
|
<button type=\"submit\" class=\"submit\">Submit</button>
|
||
|
<button type=\"button\" class=\"cancel\" onclick=\"document.location.href='<?php echo BASE_URL; ?>/{$variableName}s';\">
|
||
|
Cancel
|
||
|
</button>
|
||
|
</fieldset>
|
||
|
</form>";
|
||
|
$contents = "<?php\n";
|
||
|
$contents.= COPYRIGHT;
|
||
|
$contents.="
|
||
|
?>
|
||
|
$HTML";
|
||
|
file_put_contents("$dir/update{$className}Form.inc",$contents);
|
||
|
|
||
|
echo "$className\n";
|
||
|
}
|