rosehill/scripts/generateBlocks.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";
}