Пример #1
0
 /**
  *
  * 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);
     }
 }
Пример #2
0
 /**
  *
  * 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";
     }
 }