/** * Run setup * * @author mkozlov * */ public function parseFields($table, \Illuminate\Support\Collection $sourceFields) { $table = strtolower($table); $usedFieldNames = []; // $labelMetadata = []; // data for config file with links to $metadata $metadata = []; // array of IDs we need to look for in metadata call foreach ($sourceFields as $i => $sourceField) { // working with array is simple $sourceField = (array) $sourceField; // set default name $field = [(string) $sourceField['DBName']]; // make sure we have DB name from the system, in case it is missing we're going to use system name if (array_key_exists(0, $field) && empty($field[0]) || in_array($field[0], $usedFieldNames)) { $field[0] = strtolower((string) $sourceField['SystemName']); } // make sure we do not have dupes $usedFieldNames[] = $field[0]; $sourceField['MaximumLength'] = intval($sourceField['MaximumLength']); switch ($sourceField['DataType']) { case 'Int': $field[] = 'integer'; break; case 'DateTime': $field[] = 'dateTime'; break; case 'Date': $field[] = 'date'; break; case 'Decimal': $field[] = 'decimal(10,4)'; break; case 'Character': default: if ($sourceField['MaximumLength'] < 250) { $field[] = 'string(' . $sourceField['MaximumLength'] . ')'; } else { $field[] = 'text'; } break; } if (intval($sourceField['Required']) == 0) { $field[] = 'nullable'; } if (intval($sourceField['Unique']) == 1) { $field[] = 'unique'; } // meta $labelMetadata[$field[0]] = ['long' => (string) $sourceField['LongName'], 'type' => (string) $sourceField['DataType'], 'searchable' => intval($sourceField['Searchable']), 'name' => $sourceField['SystemName'], 'dbname' => $field[0], 'matadata_id' => null, 'multiple' => false]; // push metadata to array if (array_key_exists('Interpretation', $sourceField) && strtolower($sourceField['Interpretation']) == 'lookup') { $sourceField['LookupName'] = trim($sourceField['LookupName']); $metadata[$sourceField['LookupName']] = $sourceField['LookupName']; $labelMetadata[$field[0]]['matadata_id'] = $sourceField['LookupName']; } // push metadata to array if (array_key_exists('Interpretation', $sourceField) && strtolower($sourceField['Interpretation']) == 'lookupmulti') { $sourceField['LookupName'] = trim($sourceField['LookupName']); $metadata[$sourceField['LookupName']] = $sourceField['LookupName']; $labelMetadata[$field[0]]['matadata_id'] = $sourceField['LookupName']; $labelMetadata[$field[0]]['multiple'] = true; } } // this probably needs to move to DB too $updateConfig = $this->ask('Would you like to update config? (y/n)', 'y'); if (in_array($updateConfig, array('y', 'yes'))) { // we need to write metadata to config $l = new FileLoader(new Filesystem(), app_path() . '/config'); // get current config $config = \Config::get('rets', []); // add new values $config['rets_' . $table] = $labelMetadata; // out $this->line('Going to write rets_' . $table . ' to config'); // save combined config $l->save($config, '', 'rets'); // set current config as file will not be reloaded \Config::set('rets', $config); } return $metadata; }
/** * Run setup * * @author mkozlov * */ public function parseFields($table, \Illuminate\Support\Collection $sourceFields) { $fields = []; // fields used in schema generator $usedFieldNames = []; // $labelMetadata = []; // data for config file with links to $metadata $metadata = []; // array of IDs we need to look for in metadata call foreach ($sourceFields as $i => $sourceField) { // working with array is simple $sourceField = (array) $sourceField; // set default name $field = [(string) $sourceField['DBName']]; // make sure we have DB name from the system, in case it is missing we're going to use system name if (array_key_exists(0, $field) && empty($field[0]) || in_array($field[0], $usedFieldNames)) { $field[0] = strtolower((string) $sourceField['SystemName']); } // make sure we do not have dupes $usedFieldNames[] = $field[0]; $sourceField['MaximumLength'] = intval($sourceField['MaximumLength']); switch ($sourceField['DataType']) { case 'Int': $field[] = 'integer'; break; case 'DateTime': $field[] = 'dateTime'; break; case 'Date': $field[] = 'date'; break; case 'Decimal': $field[] = 'decimal(10,4)'; break; case 'Character': default: if ($sourceField['MaximumLength'] < 250) { $field[] = 'string(' . $sourceField['MaximumLength'] . ')'; } else { $field[] = 'text'; } break; } if (intval($sourceField['Required']) == 0) { $field[] = 'nullable'; } if (intval($sourceField['Unique']) == 1) { $field[] = 'unique'; } // meta $labelMetadata[$field[0]] = ['long' => (string) $sourceField['LongName'], 'type' => (string) $sourceField['DataType'], 'searchable' => intval($sourceField['Searchable']), 'name' => $sourceField['SystemName'], 'dbname' => $field[0], 'matadata_id' => null, 'multiple' => false]; // push metadata to array if (array_key_exists('Interpretation', $sourceField) && strtolower($sourceField['Interpretation']) == 'lookup') { $sourceField['LookupName'] = trim($sourceField['LookupName']); $metadata[$sourceField['LookupName']] = $sourceField['LookupName']; $labelMetadata[$field[0]]['matadata_id'] = $sourceField['LookupName']; } // push metadata to array if (array_key_exists('Interpretation', $sourceField) && strtolower($sourceField['Interpretation']) == 'lookupmulti') { $sourceField['LookupName'] = trim($sourceField['LookupName']); $metadata[$sourceField['LookupName']] = $sourceField['LookupName']; $labelMetadata[$field[0]]['matadata_id'] = $sourceField['LookupName']; $labelMetadata[$field[0]]['multiple'] = true; } // store $fields[] = implode(':', $field); } // we need to write metadata to config $l = new FileLoader(new Filesystem(), app_path() . '/config'); $l->save(['rets_' . strtolower($table) => $labelMetadata], '', 'rets'); // create migration $this->call('generate:migration', array('migrationName' => 'create_rets_' . Str::plural(strtolower($table)) . '_table', '--fields' => implode(', ', $fields))); return $metadata; }