예제 #1
0
 /**
  * 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;
 }
예제 #2
0
 /**
  * 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;
 }