rosehill/scripts/generateControllers.php

136 lines
3.5 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 home.php
*/
$PHP = "
\${$variableName}List = new {$className}List();
\${$variableName}List->find();
\$template = new Template();
\$template->blocks[] = new Block('{$variableName}s/{$variableName}List.inc',array('{$variableName}List'=>\${$variableName}List));
echo \$template->render();";
$contents = "<?php\n";
$contents.= COPYRIGHT."\n";
$contents.= $PHP;
$dir = APPLICATION_HOME."/scripts/stubs/html/$tableName";
if (!is_dir($dir)) {
mkdir($dir,0770,true);
}
file_put_contents("$dir/home.php",$contents);
/**
* Generate the Add controller
*/
$PHP = "
if (!userIsAllowed('$acl_resource')) {
\$_SESSION['errorMessages'][] = new Exception('noAccessAllowed');
header('Location: '.BASE_URL.'/$tableName');
exit();
}
if (isset(\$_POST['{$variableName}'])) {
\${$variableName} = new {$className}();
foreach (\$_POST['{$variableName}'] as \$field=>\$value) {
\$set = 'set'.ucfirst(\$field);
\${$variableName}->\$set(\$value);
}
try {
\${$variableName}->save();
header('Location: '.BASE_URL.'/$tableName');
exit();
}
catch(Exception \$e) {
\$_SESSION['errorMessages'][] = \$e;
}
}
\$template = new Template();
\$template->blocks[] = new Block('{$variableName}s/add{$className}Form.inc');
echo \$template->render();";
$contents = "<?php\n";
$contents.= COPYRIGHT."\n";
$contents.= $PHP;
file_put_contents("$dir/add{$className}.php",$contents);
/**
* Generate the Update controller
*/
$PHP = "
if (!userIsAllowed('$acl_resource')) {
\$_SESSION['errorMessages'][] = new Exception('noAccessAllowed');
header('Location: '.BASE_URL.'/$tableName');
exit();
}
\${$variableName} = new {$className}(\$_REQUEST['$key']);
if (isset(\$_POST['$variableName'])) {
foreach (\$_POST['$variableName'] as \$field=>\$value) {
\$set = 'set'.ucfirst(\$field);
\${$variableName}->\$set(\$value);
}
try {
\${$variableName}->save();
header('Location: '.BASE_URL.'/$tableName');
exit();
}
catch (Exception \$e) {
\$_SESSION['errorMessages'][] = \$e;
}
}
\$template = new Template();
\$template->blocks[] = new Block('{$variableName}s/update{$className}Form.inc',array('{$variableName}'=>\${$variableName}));
echo \$template->render();";
$contents = "<?php\n";
$contents.= COPYRIGHT."\n";
$contents.= $PHP;
file_put_contents("$dir/update{$className}.php",$contents);
echo "$className\n";
}