private function generateScaffoldRoutes()
 {
     $routeContents = $this->commandData->fileHelper->getFileContents($this->path);
     $templateData = $this->commandData->templatesHelper->getTemplate('scaffold_routes', 'routes');
     $templateData = GeneratorUtils::fillTemplate($this->commandData->dynamicVars, $templateData);
     $routeContents .= "\n\n" . $templateData;
     $this->commandData->fileHelper->writeFile($this->path, $routeContents);
     $this->commandData->commandObj->comment("\nroutes.php modified:");
     $this->commandData->commandObj->info('"' . $this->commandData->modelNamePluralCamel . '" route added.');
 }
 public function generate()
 {
     $templateData = $this->commandData->templatesHelper->getTemplate('Migration', 'common');
     $templateData = GeneratorUtils::fillTemplate($this->commandData->dynamicVars, $templateData);
     $templateData = str_replace('$FIELDS$', $this->generateFieldsStr(), $templateData);
     $fileName = date('Y_m_d_His') . '_' . 'create_' . $this->commandData->modelNamePluralCamel . '_table.php';
     $path = $this->path . $fileName;
     $this->commandData->fileHelper->writeFile($path, $templateData);
     $this->commandData->commandObj->comment("\nMigration created: ");
     $this->commandData->commandObj->info($fileName);
 }
 public function generate()
 {
     $templateData = $this->commandData->templatesHelper->getTemplate('Controller', 'api');
     $templateData = GeneratorUtils::fillTemplate($this->commandData->dynamicVars, $templateData);
     $fileName = $this->commandData->modelName . 'ApiController.php';
     if (!file_exists($this->path)) {
         mkdir($this->path, 0755, true);
     }
     $path = $this->path . $fileName;
     $this->commandData->fileHelper->writeFile($path, $templateData);
     $this->commandData->commandObj->comment("\nAPI Controller created: ");
     $this->commandData->commandObj->info($fileName);
 }
 public function generate()
 {
     $templateData = $this->commandData->templatesHelper->getTemplate('Controller', 'scaffold');
     $templateData = GeneratorUtils::fillTemplate($this->commandData->dynamicVars, $templateData);
     if ($this->commandData->paginate) {
         $templateData = str_replace('$RENDER_TYPE$', 'paginate(' . $this->commandData->paginate . ')', $templateData);
     } else {
         $templateData = str_replace('$RENDER_TYPE$', 'all()', $templateData);
     }
     $fileName = $this->commandData->modelName . 'Controller.php';
     $path = $this->path . $fileName;
     $this->commandData->fileHelper->writeFile($path, $templateData);
     $this->commandData->commandObj->comment("\nController created: ");
     $this->commandData->commandObj->info($fileName);
 }
 public function handle()
 {
     $this->commandData->modelName = $this->argument('model');
     $this->commandData->useSoftDelete = $this->option('softDelete');
     $this->commandData->fieldsFile = $this->option('fieldsFile');
     $this->commandData->paginate = $this->option('paginate');
     $this->commandData->tableName = $this->option('tableName');
     $this->commandData->skipMigration = $this->option('skipMigration');
     $this->commandData->fromTable = $this->option('fromTable');
     $this->commandData->rememberToken = $this->option('rememberToken');
     if ($this->commandData->fromTable) {
         if (!$this->commandData->tableName) {
             $this->error('tableName required with fromTable option.');
             exit;
         }
     }
     if ($this->commandData->paginate <= 0) {
         $this->commandData->paginate = 10;
     }
     $this->commandData->initVariables();
     $this->commandData->addDynamicVariable('$NAMESPACE_APP$', $this->getLaravel()->getNamespace());
     if ($this->commandData->fieldsFile) {
         $fileHelper = new FileHelper();
         try {
             if (file_exists($this->commandData->fieldsFile)) {
                 $filePath = $this->commandData->fieldsFile;
             } else {
                 $filePath = base_path($this->commandData->fieldsFile);
             }
             if (!file_exists($filePath)) {
                 $this->commandData->commandObj->error('Fields file not found');
                 exit;
             }
             $fileContents = $fileHelper->getFileContents($filePath);
             $fields = json_decode($fileContents, true);
             $this->commandData->inputFields = GeneratorUtils::validateFieldsFile($fields);
         } catch (Exception $e) {
             $this->commandData->commandObj->error($e->getMessage());
             exit;
         }
     } elseif ($this->commandData->fromTable) {
         $tableFieldsGenerator = new TableFieldsGenerator($this->commandData->tableName);
         $this->commandData->inputFields = $tableFieldsGenerator->generateFieldsFromTable();
     } else {
         $this->commandData->inputFields = $this->commandData->getInputFields();
     }
 }
 private function fillTemplate($templateData)
 {
     if (!$this->commandData->useSoftDelete) {
         $templateData = str_replace('$SOFT_DELETE_IMPORT$', '', $templateData);
         $templateData = str_replace('$SOFT_DELETE$', '', $templateData);
         $templateData = str_replace('$SOFT_DELETE_DATES$', '', $templateData);
     }
     $templateData = GeneratorUtils::fillTemplate($this->commandData->dynamicVars, $templateData);
     $fillables = [];
     foreach ($this->commandData->inputFields as $field) {
         $fillables[] = '"' . $field['fieldName'] . '"';
     }
     $templateData = str_replace('$FIELDS$', implode(",\n\t\t", $fillables), $templateData);
     $templateData = str_replace('$RULES$', implode(",\n\t\t", $this->generateRules()), $templateData);
     $templateData = str_replace('$CAST$', implode(",\n\t\t", $this->generateCasts()), $templateData);
     return $templateData;
 }
 public function getInputFields()
 {
     $fields = [];
     $this->commandObj->info('Specify fields for the model (skip id & timestamp fields, will be added automatically)');
     $this->commandObj->info('Enter exit to finish');
     while (true) {
         $fieldInputStr = $this->commandObj->ask('Field: (field_name:field_database_type)', '');
         if (empty($fieldInputStr) || $fieldInputStr == false || $fieldInputStr == 'exit') {
             break;
         }
         if (!GeneratorUtils::validateFieldInput($fieldInputStr)) {
             $this->commandObj->error('Invalid Input. Try again');
             continue;
         }
         $type = $this->commandObj->ask('Enter field html input type (text): ', 'text');
         $validations = $this->commandObj->ask('Enter validations: ', false);
         $validations = $validations == false ? '' : $validations;
         $fields[] = GeneratorUtils::processFieldInput($fieldInputStr, $type, $validations);
     }
     return $fields;
 }
 public function generateFieldsFromTable()
 {
     $this->schema->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');
     $columns = $this->schema->listTableColumns($this->tableName);
     $fields = [];
     foreach ($columns as $column) {
         switch ($column->getType()->getName()) {
             case 'integer':
                 $fieldInput = $this->generateIntFieldInput($column->getName(), 'integer', $column);
                 $type = 'number';
                 break;
             case 'smallint':
                 $fieldInput = $this->generateIntFieldInput($column->getName(), 'smallInteger', $column);
                 $type = 'number';
                 break;
             case 'bigint':
                 $fieldInput = $this->generateIntFieldInput($column->getName(), 'bigInteger', $column);
                 $type = 'number';
                 break;
             case 'boolean':
                 $fieldInput = $this->generateSingleFieldInput($column->getName(), 'boolean');
                 $type = 'text';
                 break;
             case 'datetime':
                 $fieldInput = $this->generateSingleFieldInput($column->getName(), 'dateTime');
                 $type = 'date';
                 break;
             case 'datetimetz':
                 $fieldInput = $this->generateSingleFieldInput($column->getName(), 'dateTimeTz');
                 $type = 'date';
                 break;
             case 'date':
                 $fieldInput = $this->generateSingleFieldInput($column->getName(), 'date');
                 $type = 'date';
                 break;
             case 'time':
                 $fieldInput = $this->generateSingleFieldInput($column->getName(), 'time');
                 $type = 'text';
                 break;
             case 'decimal':
                 $fieldInput = $this->generateDecimalInput($column, 'decimal');
                 $type = 'number';
                 break;
             case 'float':
                 $fieldInput = $this->generateFloatInput($column);
                 $type = 'number';
                 break;
             case 'string':
                 $fieldInput = $this->generateStringInput($column);
                 $type = 'text';
                 break;
             case 'text':
                 $fieldInput = $this->generateTextInput($column);
                 $type = 'textarea';
                 break;
             default:
                 $fieldInput = $this->generateTextInput($column);
                 $type = 'text';
         }
         if (strtolower($column->getName()) == 'password') {
             $type = 'password';
         } elseif (strtolower($column->getName()) == 'email') {
             $type = 'email';
         }
         if (!empty($fieldInput)) {
             //				$fieldInput .= $this->checkForDefault($column);
             //				$fieldInput .= $this->checkForNullable($column);
             //				$fieldInput .= $this->checkForUnique($column);
             $fields[] = GeneratorUtils::processFieldInput($fieldInput, $type, '');
         }
     }
     return $fields;
 }
 private function generateEdit()
 {
     $templateData = $this->commandData->templatesHelper->getTemplate('edit.blade', $this->viewsPath);
     $templateData = GeneratorUtils::fillTemplate($this->commandData->dynamicVars, $templateData);
     $fileName = 'edit.blade.php';
     $path = $this->path . $fileName;
     $this->commandData->fileHelper->writeFile($path, $templateData);
     $this->commandData->commandObj->info('edit.blade.php created');
 }