<?php namespace App\Console\Commands; use App\Models\Frame; use Illuminate\Console\Command; use Illuminate\Database\Eloquent\ModelNotFoundException; class FrameImport extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'frame:import {frame} {index} {file} '. '{--cost=0 : Frame Cost }'. '{--mode=1 : Frame Emulation Mode }'. '{--replace : Replace existing frame}'. '{--type=i : Frame Type}'. '{--trim : Trim off header (first 40 chars)}'; /** * The console command description. * * @var string */ protected $description = 'Import frames into the database. The frames should be in binary format.'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed * @throws \Exception */ public function handle() { if (! is_numeric($this->argument('frame'))) throw new \Exception('Frame is not numeric: '.$this->argument('frame')); if (strlen($this->argument('index')) != 1 OR ! preg_match('/^[a-z]$/',$this->argument('index'))) throw new \Exception('Subframe failed validation'); if (! file_exists($this->argument('file'))) throw new \Exception('File not found: '.$this->argument('file')); $o = new Frame; if ($this->option('replace')) { try { $o = $o->where('frame',$this->argument('frame')) ->where('index',$this->argument('index')) ->firstOrFail(); } catch (ModelNotFoundException $e) { $this->error('Page not found to replace: '.$this->argument('frame').$this->argument('index')); die(1); } } else { $o->frame = $this->argument('frame'); $o->index = $this->argument('index'); } $o->content = ($this->option('trim')) ? substr(file_get_contents($this->argument('file')),40) : file_get_contents($this->argument('file')); $o->cost = $this->option('cost'); $o->mode_id = $this->option('mode'); $o->type = $this->option('type'); $o->save(); } }