/** * * The generateFunction generates an Controller in srcFolder * * @return void */ public static function generate() { //get the Name of the SourceFolder echo "First you need to give the name of the SourceFolder you want to generate.\n"; echo "The SourceFolder name: "; $line = trim(fgets(STDIN)); $dir = 'src/' . $line; //controll when the Folder already exist while (is_dir($dir)) { echo "This SourceFolder already exist! Do you want to overwrite this File?\npress y for yes and another for no:"; $answer = trim(fgets(STDIN)); if ($answer === 'y') { Folder::delete($dir); break; } else { echo "The SourceFolder name: "; $line = trim(fgets(STDIN)); $dir = 'src/' . $line; } } //create dirs mkdir($dir); mkdir($dir . '/Controller'); mkdir($dir . '/Entity'); mkdir($dir . '/Resources'); mkdir($dir . '/Resources/views'); //set controllerValue $controllerValue = "<?php \n\n"; $controllerValue .= 'namespace ' . $line . "\\Controller;\n\n"; $controllerValue .= 'use Kernel\\Controller;' . "\n\n"; $controllerValue .= 'class ' . $line . "Controller extends Controller\n{\n"; $controllerValue .= ' public function ' . $line . '()' . "\n"; $controllerValue .= "\t{\n"; $controllerValue .= ' return $this->render("' . $line . ':default.html");' . "\n"; $controllerValue .= "\t}\n"; $controllerValue .= "}\n"; //generate Controller $controller = fopen($dir . '/Controller/' . $line . 'Controller.php', "w") or die("Unable to open file!\n"); fwrite($controller, ''); fwrite($controller, trim($controllerValue)); fclose($controller); //generate template $templateValue = "<div>hello</div>"; $template = fopen($dir . '/Resources/views/default.html', "w") or die("Unable to open file!\n"); fwrite($template, ''); fwrite($template, trim($templateValue)); fclose($template); //amend srcInit if (!array_key_exists($line, Config::srcInit())) { $content = $line . ': ' . $line; file_put_contents('Config/SrcInit.yml', "\n" . $content, FILE_APPEND); } }
/** * * The syncMethod syncs the DatabaseTables with the Entitys in srcFolder * * @return void */ public static function sync() { //init db $db = new db(); $affected = 0; //init variables $entityFieldsData = array(); $dbFieldsData = array(); $changes = array(); $new = array(); $mysqlDataTypeHash = array(1 => 'tinyint', 2 => 'smallint', 3 => 'int', 4 => 'float', 5 => 'double', 7 => 'timestamp', 8 => 'bigint', 9 => 'mediumint', 10 => 'date', 11 => 'time', 12 => 'datetime', 13 => 'year', 16 => 'bit', 252 => 'varchar', 253 => 'varchar', 254 => 'char', 246 => 'decimal'); //read entitys from initialized srcFolders foreach (Config::srcInit() as $srcFolder) { //check if there an entityFolder exists in the srcFolder if (file_exists('src/' . $srcFolder . '/Entity')) { //read all files $handle = opendir('src/' . $srcFolder . '/Entity'); while (false !== ($entityFileName = readdir($handle))) { if ($entityFileName != "." && $entityFileName != "..") { //call entity Object $entityName = rtrim($entityFileName, '.php'); $entityObjectNS = '\\src\\' . $srcFolder . '\\Entity\\' . $entityName; $entityObject = new $entityObjectNS(); $entityObjectClean = self::getEntityObjectArray($entityObject); //check the validity self::checkEntityValidity($entityObjectClean, $entityObject); //get DatabaseFields Data $entityFieldsData[$entityName] = self::getEntityFieldsData($entityObjectClean, $entityObjectNS); if (self::tableExist($db, $entityName)) { //get EntityFields Data $dbFieldsData[$entityName] = self::getDbFieldsData($db, $entityName, $mysqlDataTypeHash); //add changes $changes[$entityName] = self::getChanges($entityFieldsData[$entityName], $dbFieldsData[$entityName]); } else { $new[$entityName] = $entityFieldsData[$entityName]; } } } closedir($handle); } } $newFields = 0; $probertys = 0; $deleteFields = 0; $newTable = count($new); foreach ($changes as $entity) { foreach ($entity as $type => $fields) { switch ($type) { case 'new': $newFields = $newFields + count($fields); break; case 'proberty': $probertys = $probertys + count($fields); break; case 'delete': $deleteFields = $deleteFields + count($fields); break; } } } $affected = $newFields + $probertys + $deleteFields + $newTable; self::takeChanges($changes, $new, $db); //echo the endMessage if ($affected !== 0) { echo "The Database was updated successfull with {$affected} affected!\n"; echo "{$newFields} new Columns!\n"; echo "{$probertys} changed probertys in Columns!\n"; echo "{$deleteFields} Columns delete!\n"; echo "{$newTable} new Tables!\n"; } else { echo "The Database is already up to date!\n"; } }