Prepping for launch. Reviewed-on: #1 Co-authored-by: Paul Couture <paul@paulcouture.com> Co-committed-by: Paul Couture <paul@paulcouture.com>
		
			
				
	
	
		
			126 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Console\Commands;
 | |
| 
 | |
| use Illuminate\Console\Command;
 | |
| use Illuminate\Support\Facades\DB;
 | |
| use Illuminate\Support\Str;
 | |
| use Intervention\Image\Facades\Image;
 | |
| use Illuminate\Support\Facades\Storage;
 | |
| use Carbon\Carbon;
 | |
| use App\Models\User;
 | |
| use App\Models\Artist;
 | |
| use App\Models\Podcast;
 | |
| use App\Models\Episode;
 | |
| use App\Models\Artwork;
 | |
| use ImageOptimizer;
 | |
| 
 | |
| class GetMissingArtworkMovedCommand extends Command
 | |
| {
 | |
|     /**
 | |
|      * The name and signature of the console command.
 | |
|      *
 | |
|      * @var string
 | |
|      */
 | |
|     protected $signature = 'naart:wrapup';
 | |
| 
 | |
|     /**
 | |
|      * The console command description.
 | |
|      *
 | |
|      * @var string
 | |
|      */
 | |
|     protected $description = 'Command description';
 | |
| 
 | |
|     /**
 | |
|      * Execute the console command.
 | |
|      */
 | |
|     public function handle()
 | |
|     {
 | |
|         $missingArtworks = DB::connection('legacy')->select('SELECT * FROM artworks WHERE id > 30835 AND approved_by IS NOT NULL');
 | |
|         foreach ($missingArtworks as $missingArtwork) {
 | |
|             $localPath = '/legacypublic' . $missingArtwork->path . '/' . $missingArtwork->filename;
 | |
|             $user = User::where('legacy_id', $missingArtwork->user_id)->with('artists')->first();
 | |
|             $artwork = Artwork::where('legacy_id', $missingArtwork->id)->first();
 | |
|             $episode = Episode::where('legacy_id', $missingArtwork->episode_id)->first();
 | |
|             $approver = User::where('legacy_id', $missingArtwork->approved_by)->with('artists')->first();
 | |
|             if ($artwork) {
 | |
|                 $this->line('Artwork ID: ' . $artwork->id);
 | |
|             }
 | |
|             if ($episode) {
 | |
|                 $this->line('Episode: ' . $episode->episode_number . ' "' . $episode->title . '"');
 | |
|             }
 | |
|             if (!$artwork) {
 | |
|                 $newFilename = $this->uniqueName($episode, $user, $missingArtwork);
 | |
|                 $state = [
 | |
|                     'title' => $missingArtwork->title,
 | |
|                     'description' => '',
 | |
|                     'artist_id' => $user->artists->first()->id,
 | |
|                     'episode_id' => $episode->id,
 | |
|                     'podcast_id' => 1,
 | |
|                     'overlay_id' => null,
 | |
|                     'filename'  => $newFilename . '.jpg',
 | |
|                     'created_at' => Carbon::parse($missingArtwork->created_at),
 | |
|                     'updated_at' => Carbon::parse($missingArtwork->updated_at),
 | |
|                     'legacy_id' => $missingArtwork->id,
 | |
|                     'approved_by' => $approver->artists->first()->id,
 | |
|                 ];
 | |
|                 $artwork = Artwork::factory()->state($state)->create();
 | |
|             }
 | |
|             $this->line('Artist: ' . $user->artists->first()->name);
 | |
|             $this->line($localPath);
 | |
|             $filename = 'artworks/' . $artwork->filename;
 | |
|             $thumbnailName = 'thumbnails/' . $artwork->filename;
 | |
|             if (Storage::disk('static')->exists($filename)) {
 | |
|                 $this->error($filename  . ' already exists. ' . Storage::disk('static')->size($filename));
 | |
|             }
 | |
|             if (Storage::disk('static')->exists($thumbnailName)) {
 | |
|                 $this->error($thumbnailName . ' already exists. ' . Storage::disk('static')->size($thumbnailName));
 | |
|             }
 | |
|             $img = Image::make($localPath)
 | |
|                 ->resize(3000, null, function ($constraint) {
 | |
|                     $constraint->aspectRatio();
 | |
|                 })
 | |
|                 ->encode('jpg', 100);
 | |
|             $thumbImg = Image::make($localPath)
 | |
|                 ->resize(512, null, function ($constraint) {
 | |
|                     $constraint->aspectRatio();
 | |
|                 })
 | |
|                 ->encode('jpg', 100);
 | |
|             $imgLocation = Storage::disk('static')->put($filename, $img);
 | |
|             $thumbLocation = Storage::disk('static')->put($thumbnailName, $thumbImg);
 | |
|             $size_before = Storage::disk('static')->size($filename);
 | |
|             $thumb_size_before = Storage::disk('static')->size($thumbnailName);
 | |
|             ImageOptimizer::optimize(Storage::disk('static')->path($filename));
 | |
|             ImageOptimizer::optimize(Storage::disk('static')->path($thumbnailName));
 | |
|             $size_after = Storage::disk('static')->size($filename);
 | |
|             $thumb_size_after = Storage::disk('static')->size($thumbnailName);
 | |
|             $diff = $size_before - $size_after;
 | |
|             $thumbDiff = $thumb_size_before - $thumb_size_after;
 | |
|             $this->line('Filesize before: ' . $size_before);
 | |
|             $this->line('Filesize after: ' . $size_after);
 | |
|             $this->line('Thumb Filesize before: ' . $thumb_size_before);
 | |
|             $this->line('Thumb Filesize after: ' . $thumb_size_after);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private function checkExistingFilename($name) {
 | |
|         $checkArtwork = Artwork::where('filename', $name . '.jpg')->count();
 | |
|         return $checkArtwork;
 | |
|     }
 | |
| 
 | |
|     private function uniqueName($episode, $user, $missingArtwork) {
 | |
|         $i = 0;
 | |
|         $uniqueFilename = $episode->episode_date->format('Y/m/') . Str::slug($user->artists->first()->name . '-' . $missingArtwork->title) . '_' . $missingArtwork->id;
 | |
|         $exists = $this->checkExistingFilename($uniqueFilename);
 | |
|         if (!$exists) {
 | |
|             return $uniqueFilename;
 | |
|         }
 | |
|         while(!$exists) {
 | |
|             $i++;
 | |
|             $uniqueFilename = $uniqueFilename . '_v' . $i;
 | |
|             $exists = $this->checkExistingFilename($uniqueFilename);
 | |
|         }
 | |
|         return $uniqueFilename;
 | |
|     }
 | |
| }
 |