/**
  * Execute the console command.
  *
  * @return mixed
  */
 public function fire()
 {
     $this->info('Starting import from MCF Modlist...');
     $this->info('');
     $versions = MinecraftVersion::all();
     foreach ($versions as $version) {
         $this->info('Starting import of ' . $version->name . ' mods...');
         $mods = $this->getModJson($version->name);
         foreach ($mods as $mod) {
             $this->info('Processing ' . $mod->name);
             $database_mod = ImportMCFModlist::where('name', '=', $mod->name)->first();
             if (!$database_mod) {
                 $database_mod = new ImportMCFModlist();
             }
             $database_mod->name = $mod->name;
             $database_mod->description = $mod->desc;
             $database_mod->raw_authors = serialize($mod->author);
             if (isset($mod->source)) {
                 $database_mod->source = $mod->source;
             }
             $database_mod->url = $mod->link;
             $database_mod->raw_type = serialize($mod->type);
             $database_mod->raw_dependencies = serialize($mod->dependencies);
             $database_mod->raw_minecraft_versions = serialize($mod->versions);
             $database_mod->save();
         }
     }
 }
 public function postStartImport()
 {
     if (!$this->checkRoute()) {
         return Redirect::route('index');
     }
     $mod_info_array = [];
     $input = Input::only('import_nem', 'import_mcf', 'url', 'json');
     if ($input['import_nem']) {
         $import_type = 'nem';
         $nem_mod = ImportNEM::find($input['import_nem']);
         $mod_info = true;
     } elseif ($input['import_mcf']) {
         $import_type = 'mcf';
         $mcf_mod = ImportMCFModlist::find($input['import_mcf']);
         $mod_info = true;
     } elseif (Input::hasFile('import_file')) {
         $import_type = 'mcmodinfo';
         $import_file = Input::file('import_file');
         $mod_info = $this->processUpload($import_file);
         if (!$mod_info) {
             return Redirect::action('ImportController@getStartImport')->withErrors(['message' => 'Unable to process uploaded file.'])->withInput();
         }
     } else {
         $import_type = 'mcmodinfo';
         if ($input['url']) {
             $import = new Import();
             $mod_info = $import->downloadModInfo($input['url']);
             if (!$mod_info) {
                 return Redirect::action('ImportController@getStartImport')->withErrors(['message' => 'Cannot parse URL contents.'])->withInput();
             }
         } elseif ($input['json']) {
             $mod_info = json_decode($input['json']);
             if (!$mod_info) {
                 return Redirect::action('ImportController@getStartImport')->withErrors(['message' => 'Cannot parse JSON.'])->withInput();
             }
         }
     }
     if ($import_type == 'mcmodinfo') {
         $mod_info_array['name'] = $mod_info[0]->name;
         $mod_info_array['description'] = isset($mod_info[0]->description) ? $mod_info[0]->description : '';
         $mod_info_array['minecraft_version'] = isset($mod_info[0]->mcversion) ? serialize([$mod_info[0]->mcversion]) : serialize(['']);
         $mod_info_array['url'] = isset($mod_info[0]->url) ? $mod_info[0]->url : '';
         if (isset($mod_info[0]->authorList)) {
             $mod_info_array['authors'] = serialize($mod_info[0]->authorList);
         }
         if (isset($mod_info[0]->authors)) {
             $mod_info_array['authors'] = serialize($mod_info[0]->authors);
         }
     } elseif ($import_type == 'nem') {
         $mod_info_array['description'] = '';
         //NEM doesn't include any spaces in the name. So we are going to check MFC to see if they list it with a space.
         $name_with_spaces = preg_replace('/(?<!\\ )[A-Z0-9]/', ' $0', $nem_mod->name);
         $mcf_result = ImportMCFModlist::where('name', ltrim($name_with_spaces))->first();
         if (isset($mcf_result->name)) {
             $mod_info_array['name'] = $mcf_result->name;
             $mod_info_array['description'] = $mcf_result->description;
         } else {
             $mod_info_array['name'] = $nem_mod->name;
             $mcf_result = ImportMCFModlist::where('name', $nem_mod->name)->first();
             if (isset($mcf_result->description)) {
                 $mod_info_array['description'] = $mcf_result->description;
             }
         }
         $mod_info_array['minecraft_version'] = $nem_mod->raw_minecraft_versions;
         $mod_info_array['authors'] = $nem_mod->raw_authors;
         $mod_info_array['url'] = $nem_mod->url;
     } elseif ($import_type == 'mcf') {
         $mod_info_array['name'] = $mcf_mod->name;
         $mod_info_array['description'] = $mcf_mod->description;
         $mod_info_array['minecraft_version'] = $mcf_mod->raw_minecraft_versions;
         $mod_info_array['authors'] = $mcf_mod->raw_authors;
         if (preg_match('/j\\.mp/', $mcf_mod->url)) {
             $mod_info_array['url'] = $this->getBitlyFullURL($mcf_mod->url);
         } else {
             $mod_info_array['url'] = $mcf_mod->url;
         }
     }
     if ($mod_info) {
         $import_index = new Import();
         $import_index->name = $mod_info_array['name'];
         $import_index->description = $mod_info_array['description'];
         $import_index->minecraft_version = $mod_info_array['minecraft_version'];
         $import_index->url = $mod_info_array['url'];
         $import_index->raw_authors = $mod_info_array['authors'];
         $import_index->type = 1;
         $success = $import_index->save();
         if (!$success) {
             return Redirect::action('ImportController@getStartImport')->withErrors(['message' => 'Unable to save to database.'])->withInput();
         }
         $import_id = $import_index->id;
         $authors_to_process = $this->processAuthors($import_id, unserialize($mod_info_array['authors']));
         if ($authors_to_process > 0) {
             return Redirect::action('ImportController@getImportAuthor', [$import_id]);
         }
         return Redirect::action('ImportController@getImportMod', [$import_id]);
     }
     return Redirect::action('ImportController@getStartImport')->withErrors(['message' => 'Something went wrong.'])->withInput();
 }