PATH:
home
/
lab2454c
/
costbloc.com
/
app
/
Traits
/
ModelTraits
<?php /** * @package hasFiles * @author TechVillage <support@techvill.org> * @contributor Millat <[millat.techvill@gmail.com]> * @created 18-09-2021 */ namespace App\Traits\ModelTraits; use App\Models\File; use Illuminate\Http\UploadedFile; use Modules\MediaManager\Http\Models\MediaManager; use Modules\MediaManager\Http\Models\ObjectFile; trait hasFiles { /** * object type of file * @return string */ protected function objectType() { return self::getTable(); } protected function checkDirectory() { return date("Ymd"); } /** * object id of file * @return string */ protected function objectId() { return !is_null($this->id) ? $this->id : static::max('id'); } /** * upload folder of object file * @return string */ protected function uploadPath() { return createDirectory(join(DIRECTORY_SEPARATOR, ['public', 'uploads', $this->checkDirectory()])); } /** * Upload thumbnail path * * @param string $size * @return string */ protected function thumbnailPath($size = 'small') { return createDirectory(join(DIRECTORY_SEPARATOR, ['public', 'uploads', config('martvill.thumbnail_dir'), $size, $this->checkDirectory()])); } protected function uploadPathNew() { return createDirectory(join(DIRECTORY_SEPARATOR, ['public', 'uploads'])); } /** * file path of a give file * @param string $fileName * @return string */ protected function filePath($fileName) { return join(DIRECTORY_SEPARATOR, [$this->uploadPathNew(), $fileName]); } //remove it later start protected function filePathOld($fileName) { return join(DIRECTORY_SEPARATOR, [$this->uploadPathOld(), $fileName]); } protected function uploadPathOld() { return createDirectory(join(DIRECTORY_SEPARATOR, ['public', 'uploads', $this->objectType()])); } //remove it later end protected function filePathNew($fileName) { return join(DIRECTORY_SEPARATOR, [$this->uploadPathNew(), $fileName]); } /** * default file * @param string $fileName * @return string */ protected function defaultFileUrl(string $type) { return url(defaultImage($type)); } /** * difine relationship of a model * @return collection */ public function file() { return $this->hasOne('App\Models\File', 'object_id')->where('object_type', $this->objectType()); } public function objectFile() { return $this->hasOne('Modules\MediaManager\Http\Models\ObjectFile', 'object_id')->where(['object_type' => $this->objectType()]); } public function fileNew($id) { return File::where([ 'id' => $id]); } /** * upload file(s) * @param array $options * @return none */ public function uploadFiles(array $options = []) { foreach (request()->all() as $key => $value) { $file = []; if (request()->hasFile($key)) { if (isset($options['pagebuilder'])) { $file = request()->file($key); } else if (is_array($value)) { $file = [request()->$key]; if (is_multidimensional([request()->$key])) { $file = request()->$key; } } else if (pathinfo($value->getClientOriginalName(), PATHINFO_EXTENSION) != 'csv') { $file = [request()->$key]; if (is_multidimensional([request()->$key])) { $file = request()->$key; } } else if (pathinfo($value->getClientOriginalName(), PATHINFO_EXTENSION) == 'csv') { $file = [request()->$key]; if (is_multidimensional([request()->$key])) { $file = request()->$key; } } } if (isset(request()->attachments) && !empty(request()->attachments)) { $file = request()->attachments; if (is_multidimensional(request()->attachments)) { foreach (request()->attachments as $key => $value) { $file = $value; } } } if (count($file) > 0) { if (isset(request()->deleted_files) && !empty(request()->deleted_files)) { $deleted = explode(',', request()->deleted_files); foreach ($file as $k => $val) { if (in_array($val->getClientOriginalName(), $deleted)) { unset($file[$k]); } } if (empty($file)) { return false; } } $fileIds = (new File)->store($file, $this->uploadPath(), $options); if (isset($options['pagebuilder'])) { return $fileIds; } if (isset($options['isSavedInObjectFiles']) && $options['isSavedInObjectFiles'] == true) { ObjectFile::storeInObjectFiles($this->objectType(), $this->objectId(), $fileIds); } if (!empty($fileIds) && isset($options['thumbnail']) && $options['thumbnail'] == true && checkFileValidation($value->getClientOriginalExtension(), 3) == true) { $this->createThumbnail($fileIds); } } } } /** * Get files from request * @param string $key * @param mixed $value * @return array */ private function getTheseFiles($key, $value) { $output = []; if (request()->hasFile($key)) { if (is_array($value)) { $output = [request()->file($key)]; if (is_multidimensional([request()->file($key)])) { $output = request()->file($key); } } else if (pathinfo($value->getClientOriginalName(), PATHINFO_EXTENSION) != 'csv') { $output = [request()->$key]; if (is_multidimensional([request()->file($key)])) { $output = request()->file($key); } } } if (isset(request()->attachments) && !empty(request()->attachments)) { $output = request()->attachments; if (is_multidimensional(request()->attachments)) { foreach (request()->attachments as $key => $value) { $output = $value; } } } return $output; } /** * Checks if input has deleted files then process them * @param array $files * @return boolean|array */ private function ifHasDeletedFiles($files) { if (isset(request()->deleted_files) && !empty(request()->deleted_files)) { $deleted = explode(',', request()->deleted_files); foreach ($files as $k => $val) { if (in_array($val->getClientOriginalName(), $deleted)) { unset($files[$k]); } } if (empty($files)) { return false; } } return $files; } /** * upload file(s) from url * @param array $options * @return none */ public function uploadFilesFromUrl($url, array $options = []) { if (!empty($url)) { $fileIds = (new File)->storeFromUrl($url, $this->uploadPath(), $options); if (isset($options['isSavedInObjectFiles']) && $options['isSavedInObjectFiles'] == true) { ObjectFile::storeInObjectFiles($this->objectType(), $this->objectId(), $fileIds); } if (!empty($fileIds) && isset($options['thumbnail']) && $options['thumbnail'] == true) { $this->createThumbnail($fileIds); } } } /** * upload file(s) * @param array $options * @return none */ public function updateFiles(array $options = []) { if (!empty(request()->file_id)) { foreach (request()->file_id as $data) { if (is_null($data)) { continue; } $mediaManager = MediaManager::select('id')->where(['object_type' => $this->objectType(), 'object_id' => $this->objectId()])->first(); if ($mediaManager) { $mediaManager->file_id = $data; return $mediaManager->save(); } else { (new ObjectFile)->storeInObjectFiles($this->objectType(), $this->objectId(), [$data]); } } } else { foreach (request()->all() as $key => $value) { if (request()->hasFile($key)) { $file = [request()->$key]; if (is_multidimensional([request()->$key])) { $file = request()->$key; } $this->deleteFiles(isset($options['thumbnail']) && $options['thumbnail'] == true ? ['thumbnail' => true] : ['thumbnail' => false]); if (!empty($file)) { $fileIds = (new File)->store($file, $this->uploadPath(), $options); if (isset($options['isSavedInObjectFiles']) && $options['isSavedInObjectFiles'] == true) { ObjectFile::storeInObjectFiles($this->objectType(), $this->objectId(), $fileIds); } if (!empty($fileIds) && isset($options['thumbnail']) && $options['thumbnail'] == true) { $this->createThumbnail($fileIds); } } } } } } public function fileName(array $options = []) { $options = array_merge([ 'default' => true, 'type' => $this->objectType() ], $options); return $file = $this->file()->get(); } /** * get file url from model instance * @param array $options * @return string */ public function fileUrl(array $options = []): string { $options = array_merge([ 'default' => true, 'type' => $this->objectType() ], $options); if (cache()->has(config('cache.prefix') . '.loadItem.' . $this->id )) { return url($this->filePath(cache()->get(config('cache.prefix') . '.loadItem.' . $this->id))); } else { $files = $this->objectFile()->first(); // remove it later start if (is_null($files)) { $file = $this->file()->first(); if (is_null($file)) { return $this->defaultFileUrl($options['type']); } if (!file_exists($this->filePathOld($file->file_name))) { return $this->defaultFileUrl($options['type']); } return url($this->filePathOld($file->file_name)); } // remove it later end $file = $this->fileNew($files->file_id)->first(); $fileName = substr($file->file_name, strrpos($file->file_name, '\\') + 1); if (is_null($file)) { return $this->defaultFileUrl($options['type']); } if (!file_exists($this->filePath($file->file_name))) { if (isset($options['defaultImage'])) { return ''; } return $this->defaultFileUrl($options['type']); } if ($this->table == 'items' && isset($options['home'])) { cache()->put([config('cache.prefix') . '.loadItem.' . $this->id => $file->file_name], now()->addDays(1)); } return url($this->filePath($file->file_name)); } } public function fileUrlNew(array $options = []): string { $file = $this->fileNew($options['id'])->first(); $fileName = substr($file->file_name, strrpos($file->file_name, '\\') + 1); if (isset($options['isMediamanager']) && (is_null($file) || (!file_exists($this->filePath($file->file_name))))) { return ''; } if (is_null($file)) { return $this->defaultFileUrl('media_managers'); } if (!file_exists($this->filePath($file->file_name))) { return $this->defaultFileUrl($options['type']); } return url($this->filePathNew($file->file_name)); } /** * get files url * @param array $options * @return array */ public function filesUrl(array $options = []): array { $options = array_merge([ 'default' => true, 'type' => $this->objectType() ], $options); $files = $this->file()->get(); if ($files->count() <= 0 ) { return [$this->defaultFileUrl($options['type'])]; } $filesUrl = []; foreach ($files as $key => $file) { if (!file_exists($this->filePathOld($file->file_name))) { $filesUrl[$key] = $this->defaultFileUrl($options['type']); } else { $filesUrl[$key] = url($this->filePathOld($file->file_name)); } } return $filesUrl; } public function filesUrlNew(array $options = []): array { $options = array_merge([ 'default' => true, 'type' => $this->objectType() ], $options); if (cache()->has(config('cache.prefix') . '.loadItem.' . $this->id )) { return url($this->filePath(cache()->get(config('cache.prefix') . '.loadItem.' . $this->id))); } else { $files = $this->objectFile()->get(); if ($files->count() <= 0 ) { return []; } $filesUrlNew = []; $filesPath = []; foreach ($files as $key => $file) { $file = $this->fileNew($file->file_id)->first(); if (!file_exists($this->filePath($file->file_name))) { $filesUrlNew[$key] = ''; $filesPath[$key] = $this->defaultFileUrl($options['type']); } else { $filesUrlNew[$key] = $file; $filesPath[$key] = url($this->filePath($file->file_name)); } } return !empty($options['imageUrl']) ? $filesPath : $filesUrlNew; } } // remove it later start public function filesUrlold(array $options = []): array { $options = array_merge([ 'default' => true, 'type' => $this->objectType() ], $options); $files = $this->objectFile()->get(); if ($files->count() <= 0 ) { return [$this->defaultFileUrl($options['type'])]; } $filesUrl = []; foreach ($files as $key => $file) { $file = $this->fileNew($file->file_id)->first(); if (!file_exists($this->filePath($file->file_name))) { $filesUrl[$key] = $this->defaultFileUrl($options['type']); } else { $filesUrl[$key] = url($this->filePath($file->file_name)); } } return $filesUrl; } //remove it later end /** * delete from media manger * @return boolean */ public function deleteFromMediaManager($options = []) { $objectFile = $this->objectFile(); if (!$objectFile->exists()) { return true; } return $objectFile->delete() ? true : false; } /** * delete of object file(s) * @return json */ public function deleteFiles(array $options = []) { $fileIDs = ObjectFile::where(['object_type' => $this->objectType(), 'object_id' => $this->objectId()]) ->get() ->pluck('file_id') ->toArray(); if (empty($fileIDs)) { return false; } $IDs = [$fileIDs]; if (is_multidimensional([$fileIDs])) { $IDs = $fileIDs; } $option = ['ids' => $IDs, 'isExceptId' => false]; if (isset($options['thumbnail']) && $options['thumbnail'] == true) { $option = array_merge(['thumbnail' => true, 'thumbnailPath' => $this->uploadPath() . "/thumbnail"], $option); } return (new File)->deleteFiles( null, null, $option, $this->uploadPathNew() ); } public function deleteFileObjects(array $options = []) { $fileIDs = ObjectFile::where(['object_type' => $this->objectType(), 'object_id' => $this->objectId()]) ->get() ->pluck('id') ->toArray(); if (empty($fileIDs)) { return false; } $IDs = [$fileIDs]; if (is_multidimensional([$fileIDs])) { $IDs = $fileIDs; } $option = ['ids' => $IDs, 'isExceptId' => false]; if (isset($options['thumbnail']) && $options['thumbnail'] == true) { $option = array_merge(['thumbnail' => true, 'thumbnailPath' => $this->uploadPath() . "/thumbnail"], $option); } return (new ObjectFile)->deleteFiles( $this->objectType(), $this->objectId(), $option, $this->uploadPath() ); } /** * create thumbnail(s) * @param array $fileIds * @return none */ public function createThumbnail(array $fileIds = []) { foreach ($fileIds as $key => $fileId) { $this->makeThumbnail($fileId); } } /** * make thumbnail * @param int $id * @return boolean */ public function makeThumbnail($id) { $uploadedFileName = File::find($id)->file_name; $uploadedFilePath = asset($this->uploadPath()); $thumbnailPath = createDirectory($this->uploadPath()); (new File)->resizeImageThumbnail($uploadedFilePath, $uploadedFileName, $thumbnailPath); return true; } /** * check if valid image * @param mixed $file * @return boolean */ private function checkIfValidImage($file) { try { if (! $file instanceof UploadedFile) { return false; } return checkFileValidation($file->getClientOriginalExtension(), 3); } catch (\Throwable $th) { return false; } } }
[-] FormatDateTime.php
[edit]
[+]
..
[-] Filterable.php
[edit]
[-] Cachable.php
[edit]
[-] hasFiles.php
[edit]
[-] Metable.php
[edit]
[-] EloquentHelper.php
[edit]