From 02391b766a8211ce5346b7ece48eb67a51668d1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denis=20Duli=C3=A7i?= Date: Sat, 8 May 2021 18:18:00 +0300 Subject: [PATCH 1/2] changed media folder structure --- app/Http/Controllers/Common/Uploads.php | 48 +++---------- app/Listeners/Update/V21/Version2111.php | 86 ++++++++++++++++++++++++ app/Providers/Event.php | 1 + app/Traits/Uploads.php | 81 +++++++++++++--------- 4 files changed, 144 insertions(+), 72 deletions(-) create mode 100644 app/Listeners/Update/V21/Version2111.php diff --git a/app/Http/Controllers/Common/Uploads.php b/app/Http/Controllers/Common/Uploads.php index 71eefcd39..e49a3465b 100644 --- a/app/Http/Controllers/Common/Uploads.php +++ b/app/Http/Controllers/Common/Uploads.php @@ -3,13 +3,15 @@ namespace App\Http\Controllers\Common; use App\Abstracts\Http\Controller; -use Illuminate\Http\Request; use App\Models\Common\Media; +use App\Traits\Uploads as Helper; +use Illuminate\Http\Request; use File; -use Storage; class Uploads extends Controller { + use Helper; + /** * Get the specified resource. * @@ -25,7 +27,7 @@ class Uploads extends Controller } // Get file path - if (!$path = $this->getPath($media)) { + if (!$path = $this->getMediaPathOnStorage($media)) { return response(null, 204); } @@ -68,7 +70,7 @@ class Uploads extends Controller } // Get file path - if (!$path = $this->getPath($media)) { + if (!$path = $this->getMediaPathOnStorage($media)) { return response()->json([ 'success' => false, 'error' => true, @@ -106,7 +108,7 @@ class Uploads extends Controller } // Get file path - if (!$path = $this->getPath($media)) { + if (!$path = $this->getMediaPathOnStorage($media)) { return false; } @@ -139,7 +141,7 @@ class Uploads extends Controller } // Get file path - if (!$path = $this->getPath($media)) { + if (!$path = $this->getMediaPathOnStorage($media)) { $message = trans('messages.warning.deleted', ['name' => $media->basename, 'text' => $media->basename]); flash($message)->warning()->important(); @@ -163,38 +165,4 @@ class Uploads extends Controller return $return; } - - /** - * Get the full path of resource. - * - * @param $media - * @return boolean|string - */ - protected function getPath($media) - { - if (!is_object($media)) { - return false; - } - - $path = $media->basename; - - if (!empty($media->directory)) { - $folders = explode('/', $media->directory); - - // Check if company can access media - if ($folders[0] != company_id()) { - return false; - } - - $path = $media->directory . '/' . $media->basename; - } - - if (!Storage::exists($path)) { - return false; - } - - $full_path = Storage::path($path); - - return $full_path; - } } diff --git a/app/Listeners/Update/V21/Version2111.php b/app/Listeners/Update/V21/Version2111.php new file mode 100644 index 000000000..7f63f5d80 --- /dev/null +++ b/app/Listeners/Update/V21/Version2111.php @@ -0,0 +1,86 @@ +skipThisUpdate($event)) { + return; + } + + $this->updateCompanies(); + } + + public function updateCompanies() + { + $companies = Company::cursor(); + + foreach ($companies as $company) { + $this->moveMedia($company); + } + } + + public function moveMedia($company) + { + $medias = Media::inDirectory('uploads', $company->id . '/', true)->cursor(); + + foreach ($medias as $media) { + // Bizarre record + if (empty($media->directory) || empty($media->basename)) { + $media->delete(); + + continue; + } + + // Delete media from db if file not exists + if (!Storage::exists($media->directory . '/' . $media->basename)) { + $media->delete(); + + continue; + } + + // Delete completely if soft deleted + if (!empty($media->deleted_at)) { + $media->delete(); + + Storage::delete($media->directory . '/' . $media->basename); + + continue; + } + + $date = Date::parse($media->created_at)->format('Y/m/d'); + + $new_folder = $date . '/'. $media->directory; + + // Check if already exists and delete + if (Storage::exists($new_folder . '/' . $media->basename)) { + Storage::delete($new_folder . '/' . $media->basename); + } + + $media->move($new_folder); + } + + // Delete old company folder + File::deleteDirectory(Storage::path($company->id)); + } +} diff --git a/app/Providers/Event.php b/app/Providers/Event.php index 5de8fabe6..e9b62792c 100644 --- a/app/Providers/Event.php +++ b/app/Providers/Event.php @@ -30,6 +30,7 @@ class Event extends Provider 'App\Listeners\Update\V21\Version213', 'App\Listeners\Update\V21\Version218', 'App\Listeners\Update\V21\Version219', + 'App\Listeners\Update\V21\Version2111', ], 'Illuminate\Auth\Events\Login' => [ 'App\Listeners\Auth\Login', diff --git a/app/Traits/Uploads.php b/app/Traits/Uploads.php index aafd2dba4..ef59ce307 100644 --- a/app/Traits/Uploads.php +++ b/app/Traits/Uploads.php @@ -3,32 +3,13 @@ namespace App\Traits; use App\Models\Common\Media as MediaModel; +use App\Utilities\Date; +use Illuminate\Support\Facades\Storage; use MediaUploader; trait Uploads { - public function getUploadedFilePath($file, $folder = 'settings', $company_id = null) - { - $path = ''; - - if (!$file || !$file->isValid()) { - return $path; - } - - if (!$company_id) { - $company_id = company_id(); - } - - $file_name = $file->getClientOriginalName(); - - // Upload file - $file->storeAs($company_id . '/' . $folder, $file_name); - - // Prepare db path - $path = $folder . '/' . $file_name; - - return $path; - } + public $company_id_index = 3; public function getMedia($file, $folder = 'settings', $company_id = null) { @@ -38,11 +19,7 @@ trait Uploads return $path; } - if (!$company_id) { - $company_id = company_id(); - } - - $path = $company_id . '/' . $folder; + $path = $this->getMediaFolder($folder, $company_id); return MediaUploader::fromSource($file)->toDirectory($path)->upload(); } @@ -55,11 +32,7 @@ trait Uploads $disk = config('mediable.default_disk'); } - if (!$company_id) { - $company_id = company_id(); - } - - $path = $company_id . '/' . $folder . '/' . basename($file); + $path = $this->getMediaFolder($folder, $company_id) . '/' . basename($file); return MediaUploader::importPath($disk, $path); } @@ -94,4 +67,48 @@ trait Uploads MediaModel::where('id', $media->id)->delete(); } } + + public function getMediaFolder($folder, $company_id = null) + { + if (!$company_id) { + $company_id = company_id(); + } + + $date = Date::now()->format('Y/m/d'); + + // 2021/04/09/34235/invoices + return $date . '/' . $company_id . '/' . $folder; + } + + public function getMediaPathOnStorage($media) + { + if (!is_object($media)) { + return false; + } + + $path = $media->basename; + + if (!empty($media->directory)) { + // 2021/04/09/34235/invoices + $folders = explode('/', $media->directory); + + // No company_id in folder path + if (empty($folders[$this->company_id_index])) { + return false; + } + + // Check if company can access media + if ($folders[$this->company_id_index] != company_id()) { + return false; + } + + $path = $media->directory . '/' . $media->basename; + } + + if (!Storage::exists($path)) { + return false; + } + + return Storage::path($path); + } } From 87581bf276b295d3ac1e13e6ba743d17e98f6039 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denis=20Duli=C3=A7i?= Date: Sat, 8 May 2021 18:19:50 +0300 Subject: [PATCH 2/2] fixed listener version --- app/Listeners/Update/V21/{Version2111.php => Version2112.php} | 4 ++-- app/Providers/Event.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename app/Listeners/Update/V21/{Version2111.php => Version2112.php} (96%) diff --git a/app/Listeners/Update/V21/Version2111.php b/app/Listeners/Update/V21/Version2112.php similarity index 96% rename from app/Listeners/Update/V21/Version2111.php rename to app/Listeners/Update/V21/Version2112.php index 7f63f5d80..51f1346eb 100644 --- a/app/Listeners/Update/V21/Version2111.php +++ b/app/Listeners/Update/V21/Version2112.php @@ -10,11 +10,11 @@ use App\Utilities\Date; use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\Storage; -class Version2111 extends Listener +class Version2112 extends Listener { const ALIAS = 'core'; - const VERSION = '2.1.11'; + const VERSION = '2.1.12'; /** * Handle the event. diff --git a/app/Providers/Event.php b/app/Providers/Event.php index e9b62792c..b02015516 100644 --- a/app/Providers/Event.php +++ b/app/Providers/Event.php @@ -30,7 +30,7 @@ class Event extends Provider 'App\Listeners\Update\V21\Version213', 'App\Listeners\Update\V21\Version218', 'App\Listeners\Update\V21\Version219', - 'App\Listeners\Update\V21\Version2111', + 'App\Listeners\Update\V21\Version2112', ], 'Illuminate\Auth\Events\Login' => [ 'App\Listeners\Auth\Login',