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; }