diff options
Diffstat (limited to 'lib/prado/framework/Wsat/TWsatScaffoldingGenerator.php')
-rw-r--r-- | lib/prado/framework/Wsat/TWsatScaffoldingGenerator.php | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/lib/prado/framework/Wsat/TWsatScaffoldingGenerator.php b/lib/prado/framework/Wsat/TWsatScaffoldingGenerator.php new file mode 100644 index 0000000..1490f23 --- /dev/null +++ b/lib/prado/framework/Wsat/TWsatScaffoldingGenerator.php @@ -0,0 +1,162 @@ +<?php + +/** + * @author Daniel Sampedro Bello <darthdaniel85@gmail.com> + * @link https://github.com/pradosoft/prado + * @copyright Copyright © 2005-2015 The PRADO Group + * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT + * @version $Id$ + * @since 4.0 + * @package System.Wsat + */ +Prado::using("System.Wsat.TWsatBaseGenerator"); + +class TWsatScaffoldingGenerator extends TWsatBaseGenerator +{ + + /** + * Const View Types for generation + */ + const LIST_TYPE = 0; + const ADD_TYPE = 1; + const SHOW_TYPE = 2; + + /** + * Bootstrap option + */ + private $_bootstrap; + + function __construct() + { + parent::__construct(); + } + + /** + * Generates CRUD Operations for a single DB table + * @param type $tableName + */ + public function generateCRUD($tableName) + { + $this->generate($tableName, self::ADD_TYPE); + $this->generate($tableName, self::LIST_TYPE); + $this->generate($tableName, self::SHOW_TYPE); + } + + //--------------------------------------------------------------------- + // <editor-fold defaultstate="collapsed" desc="Page Generation"> + public function generate($tableName, $viewType) + { + switch ($viewType) + { + default: + case self::LIST_TYPE: + $unitName = "list" . ucfirst($tableName); + break; + + case self::ADD_TYPE: + $unitName = "add" . ucfirst($tableName); + break; + + case self::SHOW_TYPE: + $unitName = "show" . ucfirst($tableName); + break; + } + + $class = $this->generateClass($unitName); + $outputClass = $this->_opFile . DIRECTORY_SEPARATOR . $unitName . ".php"; + file_put_contents($outputClass, $class); + + $outputPage = $this->_opFile . DIRECTORY_SEPARATOR . $unitName . ".page"; + $page = $this->generatePage($tableName, $viewType); + file_put_contents($outputPage, $page); + } + + private function generatePage($tableName, $type, $tContentId = "Content") + { + $pageContent = $this->getPageContent($tableName, $type); + return <<<EOD +<com:TContent ID="$tContentId"> + + $pageContent + +</com:TContent> +EOD; + } + + private function getPageContent($tableName, $type) + { + $code = ""; + $tableInfo = $this->_dbMetaData->getTableInfo($tableName); + switch ($type) + { + case self::LIST_TYPE: + break; + case self::ADD_TYPE: + foreach ($tableInfo->getColumns() as $colField => $colMetadata) + { + if (!$colMetadata->IsPrimaryKey && !$colMetadata->IsForeignKey) + { + $code .= $this->generateControl($colMetadata); + $code .= $this->generateValidators($colMetadata); + $code .= "\n"; + } + } + foreach ($tableInfo->getForeignKeys() as $colField => $colMetadata) + { + $colField = $this->eq($colMetadata["table"]); + $code .= "\t<com:TTextBox ID=$colField />\n"; + $code .= "\n"; + // TWsatBaseGenerator::pr($tableInfo); + } + $code .= "\t<com:TButton Text=\"Accept\" />\n"; + + case self::SHOW_TYPE: + break; + } + return $code; + } + + private function generateControl($colMetadata) + { + $controlType = "TTextBox"; + switch ($colMetadata->DbType) + { + + } + $controlId = $colMetadata->ColumnId; + return "\t<com:$controlType ID=\"$controlId\" />\n"; + } + + private function generateValidators($colMetadata) + { + $controlId = $colMetadata->ColumnId; + $code = ""; + if (!$colMetadata->AllowNull) + { + $code .= "\t<com:TRequiredFieldValidator ControlToValidate=$controlId ValidationGroup=\"addGroup\" Text=\"Field $controlId is required.\" Display=\"Dynamic\" />\n"; + } + return $code; + } + +// </editor-fold> + //--------------------------------------------------------------------- + // <editor-fold defaultstate="collapsed" desc="Code Behind Generation"> + private function generateClass($classname) + { + $date = date('Y-m-d h:i:s'); + $env_user = getenv("username"); + return <<<EOD +<?php +/** + * Auto generated by PRADO - WSAT on $date. + * @author $env_user + */ +class $classname extends TPage +{ + +} +EOD; + } + +// </editor-fold> +} |