Merge pull request #2030 from denisdulici/master

Added date prefix to media folders
This commit is contained in:
Denis Duliçi 2021-05-08 18:22:50 +03:00 committed by GitHub
commit 8c96b61e28
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 144 additions and 72 deletions

View File

@ -3,13 +3,15 @@
namespace App\Http\Controllers\Common; namespace App\Http\Controllers\Common;
use App\Abstracts\Http\Controller; use App\Abstracts\Http\Controller;
use Illuminate\Http\Request;
use App\Models\Common\Media; use App\Models\Common\Media;
use App\Traits\Uploads as Helper;
use Illuminate\Http\Request;
use File; use File;
use Storage;
class Uploads extends Controller class Uploads extends Controller
{ {
use Helper;
/** /**
* Get the specified resource. * Get the specified resource.
* *
@ -25,7 +27,7 @@ class Uploads extends Controller
} }
// Get file path // Get file path
if (!$path = $this->getPath($media)) { if (!$path = $this->getMediaPathOnStorage($media)) {
return response(null, 204); return response(null, 204);
} }
@ -68,7 +70,7 @@ class Uploads extends Controller
} }
// Get file path // Get file path
if (!$path = $this->getPath($media)) { if (!$path = $this->getMediaPathOnStorage($media)) {
return response()->json([ return response()->json([
'success' => false, 'success' => false,
'error' => true, 'error' => true,
@ -106,7 +108,7 @@ class Uploads extends Controller
} }
// Get file path // Get file path
if (!$path = $this->getPath($media)) { if (!$path = $this->getMediaPathOnStorage($media)) {
return false; return false;
} }
@ -139,7 +141,7 @@ class Uploads extends Controller
} }
// Get file path // Get file path
if (!$path = $this->getPath($media)) { if (!$path = $this->getMediaPathOnStorage($media)) {
$message = trans('messages.warning.deleted', ['name' => $media->basename, 'text' => $media->basename]); $message = trans('messages.warning.deleted', ['name' => $media->basename, 'text' => $media->basename]);
flash($message)->warning()->important(); flash($message)->warning()->important();
@ -163,38 +165,4 @@ class Uploads extends Controller
return $return; 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;
}
} }

View File

@ -0,0 +1,86 @@
<?php
namespace App\Listeners\Update\V21;
use App\Abstracts\Listeners\Update as Listener;
use App\Events\Install\UpdateFinished as Event;
use App\Models\Common\Company;
use App\Models\Common\Media;
use App\Utilities\Date;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Storage;
class Version2112 extends Listener
{
const ALIAS = 'core';
const VERSION = '2.1.12';
/**
* Handle the event.
*
* @param $event
* @return void
*/
public function handle(Event $event)
{
if ($this->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));
}
}

View File

@ -30,6 +30,7 @@ class Event extends Provider
'App\Listeners\Update\V21\Version213', 'App\Listeners\Update\V21\Version213',
'App\Listeners\Update\V21\Version218', 'App\Listeners\Update\V21\Version218',
'App\Listeners\Update\V21\Version219', 'App\Listeners\Update\V21\Version219',
'App\Listeners\Update\V21\Version2112',
], ],
'Illuminate\Auth\Events\Login' => [ 'Illuminate\Auth\Events\Login' => [
'App\Listeners\Auth\Login', 'App\Listeners\Auth\Login',

View File

@ -3,32 +3,13 @@
namespace App\Traits; namespace App\Traits;
use App\Models\Common\Media as MediaModel; use App\Models\Common\Media as MediaModel;
use App\Utilities\Date;
use Illuminate\Support\Facades\Storage;
use MediaUploader; use MediaUploader;
trait Uploads trait Uploads
{ {
public function getUploadedFilePath($file, $folder = 'settings', $company_id = null) public $company_id_index = 3;
{
$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 function getMedia($file, $folder = 'settings', $company_id = null) public function getMedia($file, $folder = 'settings', $company_id = null)
{ {
@ -38,11 +19,7 @@ trait Uploads
return $path; return $path;
} }
if (!$company_id) { $path = $this->getMediaFolder($folder, $company_id);
$company_id = company_id();
}
$path = $company_id . '/' . $folder;
return MediaUploader::fromSource($file)->toDirectory($path)->upload(); return MediaUploader::fromSource($file)->toDirectory($path)->upload();
} }
@ -55,11 +32,7 @@ trait Uploads
$disk = config('mediable.default_disk'); $disk = config('mediable.default_disk');
} }
if (!$company_id) { $path = $this->getMediaFolder($folder, $company_id) . '/' . basename($file);
$company_id = company_id();
}
$path = $company_id . '/' . $folder . '/' . basename($file);
return MediaUploader::importPath($disk, $path); return MediaUploader::importPath($disk, $path);
} }
@ -94,4 +67,48 @@ trait Uploads
MediaModel::where('id', $media->id)->delete(); 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);
}
} }