131 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			131 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Console\Commands;
 | |
| 
 | |
| use App\Jobs\Install\CopyFiles;
 | |
| use App\Jobs\Install\DownloadFile;
 | |
| use App\Jobs\Install\UnzipFile;
 | |
| use App\Traits\Jobs;
 | |
| use App\Utilities\Versions;
 | |
| use Illuminate\Console\Command;
 | |
| 
 | |
| class DownloadModule extends Command
 | |
| {
 | |
|     use Jobs;
 | |
| 
 | |
|     const CMD_SUCCESS = 0;
 | |
| 
 | |
|     const CMD_ERROR = 1;
 | |
| 
 | |
|     public $alias;
 | |
| 
 | |
|     public $company;
 | |
| 
 | |
|     /**
 | |
|      * The name and signature of the console command.
 | |
|      *
 | |
|      * @var string
 | |
|      */
 | |
|     protected $signature = 'module:download {alias} {company}';
 | |
| 
 | |
|     /**
 | |
|      * The console command description.
 | |
|      *
 | |
|      * @var string
 | |
|      */
 | |
|     protected $description = 'Download the specified module.';
 | |
| 
 | |
|     /**
 | |
|      * Execute the console command.
 | |
|      *
 | |
|      * @return mixed
 | |
|      */
 | |
|     public function handle()
 | |
|     {
 | |
|         set_time_limit(3600); // 1 hour
 | |
| 
 | |
|         $this->alias = $this->argument('alias');
 | |
|         $this->company = $this->argument('company');
 | |
| 
 | |
|         company($this->company)->makeCurrent();
 | |
| 
 | |
|         if (!$path = $this->download()) {
 | |
|             return self::CMD_ERROR;
 | |
|         }
 | |
| 
 | |
|         if (!$this->unzip($path)) {
 | |
|             return self::CMD_ERROR;
 | |
|         }
 | |
| 
 | |
|         if (!$this->copyFiles($path)) {
 | |
|             return self::CMD_ERROR;
 | |
|         }
 | |
| 
 | |
|         $this->info("Module [{$this->alias}] downloaded!");
 | |
| 
 | |
|         return self::CMD_SUCCESS;
 | |
|     }
 | |
| 
 | |
|     public function download()
 | |
|     {
 | |
|         $this->info('Downloading module...');
 | |
| 
 | |
|         try {
 | |
|             $path = $this->dispatch(new DownloadFile($this->alias, $this->getVersion()));
 | |
|         } catch (\Exception $e) {
 | |
|             $this->error($e->getMessage());
 | |
| 
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         return $path;
 | |
|     }
 | |
| 
 | |
|     public function unzip($path)
 | |
|     {
 | |
|         $this->info('Unzipping module...');
 | |
| 
 | |
|         try {
 | |
|             $this->dispatch(new UnzipFile($this->alias, $path));
 | |
|         } catch (\Exception $e) {
 | |
|             $this->error($e->getMessage());
 | |
| 
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     public function copyFiles($path)
 | |
|     {
 | |
|         $this->info('Copying module files...');
 | |
| 
 | |
|         try {
 | |
|             $this->dispatch(new CopyFiles($this->alias, $path));
 | |
| 
 | |
|             event(new \App\Events\Module\Copied($this->alias, $this->company));
 | |
|         } catch (\Exception $e) {
 | |
|             $this->error($e->getMessage());
 | |
| 
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     protected function getVersion()
 | |
|     {
 | |
|         $version = Versions::latest($this->alias);
 | |
| 
 | |
|         if (empty($version)) {
 | |
|             $current = '1.0.0';
 | |
| 
 | |
|             $url = 'apps/' . $this->alias . '/version/' . $current . '/' . version('short');
 | |
| 
 | |
|             $version = Versions::getLatestVersion($url, $current);
 | |
|         }
 | |
| 
 | |
|         return $version;
 | |
|     }
 | |
| }
 |