private function generateFields()
 {
     $fields = [];
     foreach ($this->commandData->inputFields as $field) {
         $fieldData = "'" . $field['fieldName'] . "' => " . '$fake->';
         switch ($field['fieldType']) {
             case 'integer':
             case 'float':
                 $fakerData = "randomDigitNotNull";
                 break;
             case 'string':
                 $fakerData = "word";
                 break;
             case 'text':
                 $fakerData = "text";
                 break;
             case 'datetime':
                 $fakerData = "date('Y-m-d H:i:s')";
                 break;
             case 'enum':
                 $fakerData = "randomElement(" . GeneratorFieldsInputUtil::prepareValuesArrayStr(explode(",", $field['htmlTypeInputs'])) . ")";
                 break;
             default:
                 $fakerData = "word";
         }
         $fieldData .= $fakerData;
         $fields[] = $fieldData;
     }
     return $fields;
 }
 private function generateFields()
 {
     $this->htmlFields = [];
     foreach ($this->commandData->inputFields as $field) {
         if (!$field['inForm']) {
             continue;
         }
         switch ($field['htmlType']) {
             case 'text':
             case 'textarea':
             case 'date':
             case 'file':
             case 'email':
             case 'password':
             case 'number':
                 $fieldTemplate = TemplateUtil::getTemplate('scaffold.fields.' . $field['htmlType'], $this->templateType);
                 break;
             case 'select':
             case 'enum':
                 $fieldTemplate = TemplateUtil::getTemplate('scaffold.fields.select', $this->templateType);
                 $inputsArr = explode(',', $field['htmlTypeInputs']);
                 $fieldTemplate = str_replace('$INPUT_ARR$', GeneratorFieldsInputUtil::prepareKeyValueArrayStr($inputsArr), $fieldTemplate);
                 break;
             case 'radio':
                 $fieldTemplate = TemplateUtil::getTemplate('scaffold.fields.radio_group', $this->templateType);
                 $radioTemplate = TemplateUtil::getTemplate('scaffold.fields.radio', $this->templateType);
                 $inputsArr = explode(',', $field['htmlTypeInputs']);
                 $radioButtons = [];
                 foreach ($inputsArr as $item) {
                     $radioButtonsTemplate = TemplateUtil::fillFieldTemplate($this->commandData->fieldNamesMapping, $radioTemplate, $field);
                     $radioButtonsTemplate = str_replace('$VALUE$', $item, $radioButtonsTemplate);
                     $radioButtons[] = $radioButtonsTemplate;
                 }
                 $fieldTemplate = str_replace('$RADIO_BUTTONS$', implode("\n", $radioButtons), $fieldTemplate);
                 break;
                 //                case 'checkbox-group':
                 //                    $fieldTemplate = TemplateUtil::getTemplate('scaffold.fields.checkbox_group', $this->templateType);
                 //                      $radioTemplate = TemplateUtil::getTemplate('scaffold.fields.checks', $this->templateType);
                 //                      $inputsArr = explode(',', $field['htmlTypeInputs']);
                 //                      $radioButtons = [];
                 //                      foreach ($inputsArr as $item) {
                 //                          $radioButtonsTemplate = TemplateUtil::fillFieldTemplate(
                 //                              $this->commandData->fieldNamesMapping,
                 //                              $radioTemplate,
                 //                              $field
                 //                          );
                 //                          $radioButtonsTemplate = str_replace('$VALUE$', $item, $radioButtonsTemplate);
                 //                          $radioButtons[] = $radioButtonsTemplate;
                 //                      }
                 //                    $fieldTemplate = str_replace('$CHECKBOXES$', implode("\n", $radioButtons), $fieldTemplate);
                 //                    break;
             //                case 'checkbox-group':
             //                    $fieldTemplate = TemplateUtil::getTemplate('scaffold.fields.checkbox_group', $this->templateType);
             //                      $radioTemplate = TemplateUtil::getTemplate('scaffold.fields.checks', $this->templateType);
             //                      $inputsArr = explode(',', $field['htmlTypeInputs']);
             //                      $radioButtons = [];
             //                      foreach ($inputsArr as $item) {
             //                          $radioButtonsTemplate = TemplateUtil::fillFieldTemplate(
             //                              $this->commandData->fieldNamesMapping,
             //                              $radioTemplate,
             //                              $field
             //                          );
             //                          $radioButtonsTemplate = str_replace('$VALUE$', $item, $radioButtonsTemplate);
             //                          $radioButtons[] = $radioButtonsTemplate;
             //                      }
             //                    $fieldTemplate = str_replace('$CHECKBOXES$', implode("\n", $radioButtons), $fieldTemplate);
             //                    break;
             case 'bool-checkbox':
                 $fieldTemplate = TemplateUtil::getTemplate('scaffold.fields.bool-checkbox', $this->templateType);
                 $checkboxValue = $value = $field['htmlTypeInputs'];
                 if ($field['fieldType'] === 'boolean') {
                     if ($checkboxValue === 'checked') {
                         $checkboxValue = '1, true';
                     } elseif ($checkboxValue === 'unchecked') {
                         $checkboxValue = '0';
                     }
                 }
                 $fieldTemplate = str_replace('$CHECKBOX_VALUE$', $checkboxValue, $fieldTemplate);
                 $fieldTemplate = str_replace('$VALUE$', $value, $fieldTemplate);
                 break;
             case 'toggle-switch':
                 $fieldTemplate = TemplateUtil::getTemplate('scaffold.fields.toggle-switch', $this->templateType);
                 $checkboxValue = $value = $field['htmlTypeInputs'];
                 if ($field['fieldType'] === 'boolean') {
                     $checkboxValue = "[ 'On' => '1' , 'Off' => '0']";
                 }
                 $fieldTemplate = str_replace('$CHECKBOX_VALUE$', $checkboxValue, $fieldTemplate);
                 //$fieldTemplate = str_replace('$VALUE$', $value, $fieldTemplate);
                 break;
             case 'checkbox':
                 $fieldTemplate = TemplateUtil::getTemplate('scaffold.fields.checkbox', $this->templateType);
                 $checkboxValue = $value = $field['htmlTypeInputs'];
                 if ($field['fieldType'] != 'boolean') {
                     $checkboxValue = "'" . $value . "'";
                 }
                 $fieldTemplate = str_replace('$CHECKBOX_VALUE$', $checkboxValue, $fieldTemplate);
                 $fieldTemplate = str_replace('$VALUE$', $value, $fieldTemplate);
                 break;
             case 'boolean':
                 $fieldTemplate = TemplateUtil::getTemplate('scaffold.fields.boolean', $this->templateType);
                 $checkboxValue = $value = $field['htmlTypeInputs'];
                 if ($field['fieldType'] == 'boolean') {
                     $checkboxValue = true;
                 }
                 $fieldTemplate = str_replace('$CHECKBOX_VALUE$', $checkboxValue, $fieldTemplate);
                 // $fieldTemplate = str_replace('$VALUE$', $value, $fieldTemplate);
                 break;
             default:
                 $fieldTemplate = '';
                 break;
         }
         if (!empty($fieldTemplate)) {
             $fieldTemplate = TemplateUtil::fillTemplateWithFieldData($this->commandData->dynamicVars, $this->commandData->fieldNamesMapping, $fieldTemplate, $field);
             $this->htmlFields[] = $fieldTemplate;
         }
     }
     $templateData = TemplateUtil::getTemplate('scaffold.views.fields', $this->templateType);
     $templateData = TemplateUtil::fillTemplate($this->commandData->dynamicVars, $templateData);
     $templateData = str_replace('$FIELDS$', implode("\n\n", $this->htmlFields), $templateData);
     FileUtil::createFile($this->path, 'fields.blade.php', $templateData);
     $this->commandData->commandInfo('field.blade.php created');
 }
 private function getInputFromFileOrJson()
 {
     // fieldsFile option will get high priority than json option if both options are passed
     try {
         if ($this->getOption('fieldsFile')) {
             if (file_exists($this->getOption('fieldsFile'))) {
                 $filePath = $this->getOption('fieldsFile');
             } else {
                 $filePath = base_path($this->getOption('fieldsFile'));
             }
             if (!file_exists($filePath)) {
                 $this->commandError('Fields file not found');
                 exit;
             }
             $fileContents = file_get_contents($filePath);
             $jsonData = json_decode($fileContents, true);
             $this->inputFields = array_merge($this->inputFields, GeneratorFieldsInputUtil::validateFieldsFile($jsonData));
         } else {
             $fileContents = $this->getOption('jsonFromGUI');
             $jsonData = json_decode($fileContents, true);
             $this->inputFields = array_merge($this->inputFields, GeneratorFieldsInputUtil::validateFieldsFile($jsonData['fields']));
             $this->config->overrideOptionsFromJsonFile($jsonData);
             if (isset($jsonData['migrate'])) {
                 $this->config->forceMigrate = $jsonData['migrate'];
             }
         }
         $this->checkForDiffPrimaryKey();
     } catch (Exception $e) {
         $this->commandError($e->getMessage());
         exit;
     }
 }
 private function getInputFromFile()
 {
     try {
         if (file_exists($this->options['fieldsFile'])) {
             $filePath = $this->options['fieldsFile'];
         } else {
             $filePath = base_path($this->options['fieldsFile']);
         }
         if (!file_exists($filePath)) {
             $this->commandError('Fields file not found');
             exit;
         }
         $fileContents = file_get_contents($filePath);
         $fields = json_decode($fileContents, true);
         $this->inputFields = array_merge($this->inputFields, GeneratorFieldsInputUtil::validateFieldsFile($fields));
     } catch (Exception $e) {
         $this->commandError($e->getMessage());
         exit;
     }
 }
 private function generateFields()
 {
     $this->htmlFields = [];
     foreach ($this->commandData->inputFields as $field) {
         switch ($field['htmlType']) {
             case 'text':
             case 'textarea':
             case 'date':
             case 'file':
             case 'email':
             case 'password':
             case 'number':
                 $fieldTemplate = TemplateUtil::getTemplate('scaffold.fields.' . $field['htmlType'], $this->templateType);
                 break;
             case 'select':
             case 'enum':
                 $fieldTemplate = TemplateUtil::getTemplate('scaffold.fields.select', $this->templateType);
                 $inputsArr = explode(",", $field['htmlTypeInputs']);
                 $fieldTemplate = str_replace('$INPUT_ARR$', GeneratorFieldsInputUtil::prepareKeyValueArrayStr($inputsArr), $fieldTemplate);
                 break;
             case 'radio':
                 $fieldTemplate = TemplateUtil::getTemplate('scaffold.fields.radio_group', $this->templateType);
                 $radioTemplate = TemplateUtil::getTemplate('scaffold.fields.radio', $this->templateType);
                 $inputsArr = explode(",", $field['htmlTypeInputs']);
                 $radioButtons = [];
                 foreach ($inputsArr as $item) {
                     $radioButtonsTemplate = TemplateUtil::fillFieldTemplate($this->commandData->fieldNamesMapping, $radioTemplate, $field);
                     $radioButtonsTemplate = str_replace('$VALUE$', $item, $radioButtonsTemplate);
                     $radioButtons[] = $radioButtonsTemplate;
                 }
                 $fieldTemplate = str_replace('$RADIO_BUTTONS$', implode("\n", $radioButtons), $fieldTemplate);
                 break;
             case 'checkbox':
                 $fieldTemplate = TemplateUtil::getTemplate('scaffold.fields.checkbox_group', $this->templateType);
                 $radioTemplate = TemplateUtil::getTemplate('scaffold.fields.checkbox', $this->templateType);
                 $inputsArr = explode(",", $field['htmlTypeInputs']);
                 $radioButtons = [];
                 foreach ($inputsArr as $item) {
                     $radioButtonsTemplate = TemplateUtil::fillFieldTemplate($this->commandData->fieldNamesMapping, $radioTemplate, $field);
                     $radioButtonsTemplate = str_replace('$VALUE$', $item, $radioButtonsTemplate);
                     $radioButtons[] = $radioButtonsTemplate;
                 }
                 $fieldTemplate = str_replace('$CHECKBOXES$', implode("\n", $radioButtons), $fieldTemplate);
                 break;
             default:
                 $fieldTemplate = '';
                 break;
         }
         if (!empty($fieldTemplate)) {
             $fieldTemplate = TemplateUtil::fillFieldTemplate($this->commandData->fieldNamesMapping, $fieldTemplate, $field);
             $this->htmlFields[] = $fieldTemplate;
         }
     }
     $templateData = TemplateUtil::getTemplate('scaffold.views.fields', $this->templateType);
     $templateData = TemplateUtil::fillTemplate($this->commandData->dynamicVars, $templateData);
     $templateData = str_replace('$FIELDS$', implode("\n\n", $this->htmlFields), $templateData);
     FileUtil::createFile($this->path, 'fields.blade.php', $templateData);
     $this->commandData->commandInfo('field.blade.php created');
 }
 public static function generateFieldsFromTable($tableName)
 {
     $schema = DB::getDoctrineSchemaManager();
     $platform = $schema->getDatabasePlatform();
     $platform->registerDoctrineTypeMapping('enum', 'string');
     $columns = $schema->listTableColumns($tableName);
     $primaryKey = static::getPrimaryKeyFromTable($tableName);
     $timestamps = static::getTimestampFieldNames();
     $defaultSearchable = config('infyom.laravel_generator.options.tables_searchable_default', false);
     $fields = [];
     foreach ($columns as $column) {
         switch ($column->getType()->getName()) {
             case 'integer':
                 $fieldInput = self::generateIntFieldInput($column->getName(), 'integer', $column);
                 $type = 'number';
                 break;
             case 'smallint':
                 $fieldInput = self::generateIntFieldInput($column->getName(), 'smallInteger', $column);
                 $type = 'number';
                 break;
             case 'bigint':
                 $fieldInput = self::generateIntFieldInput($column->getName(), 'bigInteger', $column);
                 $type = 'number';
                 break;
             case 'boolean':
                 $fieldInput = self::generateSingleFieldInput($column->getName(), 'boolean');
                 $type = 'text';
                 break;
             case 'datetime':
                 $fieldInput = self::generateSingleFieldInput($column->getName(), 'dateTime');
                 $type = 'date';
                 break;
             case 'datetimetz':
                 $fieldInput = self::generateSingleFieldInput($column->getName(), 'dateTimeTz');
                 $type = 'date';
                 break;
             case 'date':
                 $fieldInput = self::generateSingleFieldInput($column->getName(), 'date');
                 $type = 'date';
                 break;
             case 'time':
                 $fieldInput = self::generateSingleFieldInput($column->getName(), 'time');
                 $type = 'text';
                 break;
             case 'decimal':
                 $fieldInput = self::generateDecimalInput($column);
                 $type = 'number';
                 break;
             case 'float':
                 $fieldInput = self::generateFloatInput($column);
                 $type = 'number';
                 break;
             case 'string':
                 $fieldInput = self::generateStringInput($column);
                 $type = 'text';
                 break;
             case 'text':
                 $fieldInput = self::generateTextInput($column);
                 $type = 'textarea';
                 break;
             default:
                 $fieldInput = self::generateTextInput($column);
                 $type = 'text';
         }
         if (strtolower($column->getName()) == 'password') {
             $type = 'password';
         } elseif (strtolower($column->getName()) == 'email') {
             $type = 'email';
         }
         if (!empty($fieldInput)) {
             $field = GeneratorFieldsInputUtil::processFieldInput($fieldInput, $type, '', ['searchable' => $defaultSearchable]);
             $columnName = $column->getName();
             if ($columnName === $primaryKey) {
                 $field['primary'] = true;
                 $field['inFrom'] = false;
                 $field['inIndex'] = false;
                 $field['fillable'] = false;
                 $field['searchable'] = false;
             } elseif (in_array($columnName, $timestamps)) {
                 $field['fillable'] = false;
                 $field['searchable'] = false;
                 $field['inFrom'] = true;
                 $field['inIndex'] = true;
             }
             $fields[] = $field;
         }
     }
     return $fields;
 }
 public static function generateFieldsFromTable($tableName)
 {
     $schema = DB::getDoctrineSchemaManager();
     $platform = $schema->getDatabasePlatform();
     $platform->registerDoctrineTypeMapping('enum', 'string');
     $columns = $schema->listTableColumns($tableName);
     $fields = [];
     foreach ($columns as $column) {
         switch ($column->getType()->getName()) {
             case 'integer':
                 $fieldInput = self::generateIntFieldInput($column->getName(), 'integer', $column);
                 $type = 'number';
                 break;
             case 'smallint':
                 $fieldInput = self::generateIntFieldInput($column->getName(), 'smallInteger', $column);
                 $type = 'number';
                 break;
             case 'bigint':
                 $fieldInput = self::generateIntFieldInput($column->getName(), 'bigInteger', $column);
                 $type = 'number';
                 break;
             case 'boolean':
                 $fieldInput = self::generateSingleFieldInput($column->getName(), 'boolean');
                 $type = 'text';
                 break;
             case 'datetime':
                 $fieldInput = self::generateSingleFieldInput($column->getName(), 'dateTime');
                 $type = 'date';
                 break;
             case 'datetimetz':
                 $fieldInput = self::generateSingleFieldInput($column->getName(), 'dateTimeTz');
                 $type = 'date';
                 break;
             case 'date':
                 $fieldInput = self::generateSingleFieldInput($column->getName(), 'date');
                 $type = 'date';
                 break;
             case 'time':
                 $fieldInput = self::generateSingleFieldInput($column->getName(), 'time');
                 $type = 'text';
                 break;
             case 'decimal':
                 $fieldInput = self::generateDecimalInput($column);
                 $type = 'number';
                 break;
             case 'float':
                 $fieldInput = self::generateFloatInput($column);
                 $type = 'number';
                 break;
             case 'string':
                 $fieldInput = self::generateStringInput($column);
                 $type = 'text';
                 break;
             case 'text':
                 $fieldInput = self::generateTextInput($column);
                 $type = 'textarea';
                 break;
             default:
                 $fieldInput = self::generateTextInput($column);
                 $type = 'text';
         }
         if (strtolower($column->getName()) == 'password') {
             $type = 'password';
         } elseif (strtolower($column->getName()) == 'email') {
             $type = 'email';
         }
         if (!empty($fieldInput)) {
             $fields[] = GeneratorFieldsInputUtil::processFieldInput($fieldInput, $type, '', false);
         }
     }
     return $fields;
 }