From a663e2bd56a42fd3a23444ae30dc4a980032e9a7 Mon Sep 17 00:00:00 2001 From: James Collins Date: Sat, 22 Apr 2023 21:18:07 +1000 Subject: [PATCH] updates --- app/Http/Controllers/Api/MediaController.php | 30 +++- app/Jobs/StoreUploadedFileJob.php | 16 +-- app/Models/Media.php | 68 ++++++--- composer.lock | 14 +- config/filesystems.php | 5 +- package-lock.json | 40 +++--- public/uploadabiwAz | Bin 0 -> 52419 bytes resources/css/utils.scss | 2 +- resources/js/components/SMButton.vue | 7 +- resources/js/components/SMImage.vue | 58 ++++++++ resources/js/components/SMLoading.vue | 49 ++++++- resources/js/components/SMTable.vue | 39 ++++-- resources/js/components/SMToast.vue | 4 +- .../js/components/dialogs/SMDialogConfirm.vue | 2 +- resources/js/helpers/api.ts | 11 +- resources/js/helpers/form.ts | 2 +- resources/js/helpers/utils.ts | 22 +-- resources/js/helpers/validate.ts | 12 +- resources/js/views/Workshops.vue | 6 +- resources/js/views/dashboard/MediaEdit.vue | 129 ++++++++++++------ resources/js/views/dashboard/MediaList.vue | 10 +- resources/js/views/dashboard/PostEdit.vue | 1 - 22 files changed, 384 insertions(+), 143 deletions(-) create mode 100644 public/uploadabiwAz create mode 100644 resources/js/components/SMImage.vue diff --git a/app/Http/Controllers/Api/MediaController.php b/app/Http/Controllers/Api/MediaController.php index 992e3de..5d9580d 100644 --- a/app/Http/Controllers/Api/MediaController.php +++ b/app/Http/Controllers/Api/MediaController.php @@ -8,6 +8,7 @@ use App\Http\Requests\MediaRequest; use App\Models\Media; use Illuminate\Http\Request; use Illuminate\Support\Carbon; +use Illuminate\Support\Facades\Log; use Laravel\Sanctum\PersonalAccessToken; class MediaController extends ApiController @@ -119,19 +120,36 @@ class MediaController extends ApiController if (MediaConductor::updatable($medium) === true) { $file = $request->file('file'); if ($file !== null) { - if ($file->getSize() > Media::maxUploadSize()) { - return $this->respondTooLarge(); + if ($file->isValid() !== true) { + switch ($file->getError()) { + case UPLOAD_ERR_INI_SIZE: + case UPLOAD_ERR_FORM_SIZE: + return $this->respondTooLarge(); + case UPLOAD_ERR_PARTIAL: + return $this->respondWithErrors(['file' => 'The file upload was interrupted.']); + default: + return $this->respondWithErrors(['file' => 'An error occurred uploading the file to the server.']); + } } - if ($medium->updateFile($file) === false) { + if ($file->getSize() > Media::getMaxUploadSize()) { + return $this->respondTooLarge(); + } + } + + $medium->update($request->all()); + + if ($file !== null) { + try { + $medium->updateWithUploadedFile($file); + } catch (\Exception $e) { return $this->respondWithErrors( - ['file' => 'The file could not be stored on the server'], + ['file' => $e->getMessage()], HttpResponseCodes::HTTP_INTERNAL_SERVER_ERROR ); } - }//end if + } - $medium->update($request->all()); return $this->respondAsResource(MediaConductor::model($request, $medium)); }//end if diff --git a/app/Jobs/StoreUploadedFileJob.php b/app/Jobs/StoreUploadedFileJob.php index 6f9f724..10591f4 100644 --- a/app/Jobs/StoreUploadedFileJob.php +++ b/app/Jobs/StoreUploadedFileJob.php @@ -44,11 +44,12 @@ class StoreUploadedFileJob implements ShouldQueue */ protected $replaceExisting; + /** * Create a new job instance. * - * @param Media $media The media model. - * @param string $filePath The uploaded file. + * @param Media $media The media model. + * @param string $filePath The uploaded file. * @param boolean $replaceExisting Replace existing files. * @return void */ @@ -74,31 +75,30 @@ class StoreUploadedFileJob implements ShouldQueue $this->media->save(); if (strlen($this->uploadedFilePath) > 0) { - if (Storage::disk($storageDisk)->exists($fileName) == false || $this->replaceExisting == true) { + if (Storage::disk($storageDisk)->exists($fileName) === false || $this->replaceExisting === true) { Storage::disk($storageDisk)->putFileAs('/', new SplFileInfo($this->uploadedFilePath), $fileName); Log::info("uploading file {$storageDisk} / {$fileName} / {$this->uploadedFilePath}"); } else { Log::info("file {$fileName} already exists in {$storageDisk} / {$this->uploadedFilePath}. Not replacing file and using local {$fileName} for variants."); } } else { - if (Storage::disk($storageDisk)->exists($fileName) == true) { + if (Storage::disk($storageDisk)->exists($fileName) === true) { Log::info("file {$fileName} already exists in {$storageDisk} / {$this->uploadedFilePath}. No local {$fileName} for variants, downloading from CDN."); $readStream = Storage::disk($storageDisk)->readStream($fileName); $tempFilePath = tempnam(sys_get_temp_dir(), 'download-'); $writeStream = fopen($tempFilePath, 'w'); - while (!feof($readStream)) { + while (feof($readStream) !== true) { fwrite($writeStream, fread($readStream, 8192)); } fclose($readStream); fclose($writeStream); $this->uploadedFilePath = $tempFilePath; - } else { $errorStr = "cannot upload file {$storageDisk} / {$fileName} / {$this->uploadedFilePath} as temp file is empty"; Log::info($errorStr); throw new \Exception($errorStr); } - } + }//end if if (strpos($this->media->mime_type, 'image/') === 0) { $this->media->status = "Optimizing image"; @@ -160,7 +160,7 @@ class StoreUploadedFileJob implements ShouldQueue }//end if } else { Log::info("variant {$variantName} already exists for file {$fileName}"); - } + }//end if }//end foreach // Set missing variants to the largest available variant diff --git a/app/Models/Media.php b/app/Models/Media.php index 57f3e6d..3840b02 100644 --- a/app/Models/Media.php +++ b/app/Models/Media.php @@ -206,7 +206,7 @@ class Media extends Model */ public function getUrlAttribute() { - if(isset($this->attributes['name'])) { + if (isset($this->attributes['name']) === true) { $url = config("filesystems.disks.$this->storage.url"); return "$url/$this->name"; } @@ -247,6 +247,28 @@ class Media extends Model * @return null|Media The result or null if not successful. */ public static function createFromUploadedFile(Request $request, UploadedFile $file) + { + $request->merge([ + 'title' => $request->get('title', ''), + 'name' => '', + 'size' => 0, + 'mime_type' => '', + 'status' => '', + ]); + + $mediaItem = $request->user()->media()->create($request->all()); + $mediaItem->updateWithUploadedFile($file); + + return $mediaItem; + } + + /** + * Update Media with UploadedFile data. + * + * @param Illuminate\Http\UploadedFile $file The file. + * @return null|Media The media item. + */ + public function updateWithUploadedFile(UploadedFile $file) { if ($file === null || $file->isValid() !== true) { throw new \Exception('The file is invalid.', self::INVALID_FILE_ERROR); @@ -261,34 +283,40 @@ class Media extends Model throw new \Exception('The file name already exists in storage.', self::FILE_NAME_EXISTS_ERROR); } - $request->merge([ - 'title' => $request->get('title', $name), - 'name' => $name, - 'size' => $file->getSize(), - 'mime_type' => $file->getMimeType(), - 'status' => 'Processing media', - ]); + // remove file if there is an existing entry in this medium item + if (strlen($this->name) > 0 && strlen($this->storage) > 0) { + Storage::disk($this->storage)->delete($this->name); + foreach ($this->variants as $variantName => $fileName) { + Storage::disk($this->storage)->delete($fileName); + } - $mediaItem = $request->user()->media()->create($request->all()); - - try { - $temporaryFilePath = tempnam(sys_get_temp_dir(), 'upload'); - $temporaryDirectoryPath = dirname($temporaryFilePath); - $file->move($temporaryDirectoryPath, basename($temporaryFilePath)); - } catch (\Exception $e) { - throw new \Exception('Could not temporarily store file. ' . $e->getMessage(), self::TEMP_FILE_ERROR); + $this->name = ''; + $this->variants = []; } + if (strlen($this->title) === 0) { + $this->title = $name; + } + + $this->name = $name; + $this->size = $file->getSize(); + $this->mime_type = $file->getMimeType(); + $this->status = 'Processing media'; + $this->save(); + + $temporaryFilePath = tempnam(sys_get_temp_dir(), 'upload'); + copy($file->path(), $temporaryFilePath); + try { - StoreUploadedFileJob::dispatch($mediaItem, $temporaryFilePath)->onQueue('media'); + StoreUploadedFileJob::dispatch($this, $temporaryFilePath)->onQueue('media'); } catch (\Exception $e) { - $mediaItem->delete(); - $mediaItem = null; + $this->status = 'Error'; + $this->save(); throw $e; }//end try - return $mediaItem; + return $this; } /** diff --git a/composer.lock b/composer.lock index 0dc22dd..883e296 100644 --- a/composer.lock +++ b/composer.lock @@ -62,16 +62,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.263.14", + "version": "3.268.16", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "7a6a43fad8899e3be3c46471fa3802331620e36b" + "reference": "b59134c9ca64dcb9de6f7dbbcb9d5a75ed665a98" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/7a6a43fad8899e3be3c46471fa3802331620e36b", - "reference": "7a6a43fad8899e3be3c46471fa3802331620e36b", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/b59134c9ca64dcb9de6f7dbbcb9d5a75ed665a98", + "reference": "b59134c9ca64dcb9de6f7dbbcb9d5a75ed665a98", "shasum": "" }, "require": { @@ -151,9 +151,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.263.14" + "source": "https://github.com/aws/aws-sdk-php/tree/3.268.16" }, - "time": "2023-04-20T18:21:44+00:00" + "time": "2023-04-21T21:37:05+00:00" }, { "name": "brick/math", @@ -9508,5 +9508,5 @@ "php": "^8.0.2" }, "platform-dev": [], - "plugin-api-version": "2.1.0" + "plugin-api-version": "2.3.0" } diff --git a/config/filesystems.php b/config/filesystems.php index 4b8e02e..5f66356 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -31,10 +31,7 @@ return [ 'disks' => [ 'local' => [ 'driver' => 'local', - 'root' => storage_path('app/uploads'), - 'throw' => false, - 'url' => env('STORAGE_LOCAL_URL'), - 'public' => true, + 'root' => storage_path('app'), ], 'cdn' => [ diff --git a/package-lock.json b/package-lock.json index 5cf87f7..f6909f2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -475,9 +475,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.38.0.tgz", - "integrity": "sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==", + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.39.0.tgz", + "integrity": "sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -729,9 +729,9 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, "node_modules/@types/node": { - "version": "18.15.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.12.tgz", - "integrity": "sha512-Wha1UwsB3CYdqUm2PPzh/1gujGCNtWVUYF0mB00fJFoR4gTyWTDPjSm+zBF787Ahw8vSGgBja90MkgFwvB86Dg==" + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" }, "node_modules/@types/semver": { "version": "7.3.13", @@ -1607,9 +1607,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001480", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001480.tgz", - "integrity": "sha512-q7cpoPPvZYgtyC4VaBSN0Bt+PJ4c4EYRf0DrduInOz2SkFpHD5p3LnvEpqBp7UnJn+8x1Ogl1s38saUxe+ihQQ==", + "version": "1.0.30001481", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz", + "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==", "funding": [ { "type": "opencollective", @@ -1936,9 +1936,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.368", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.368.tgz", - "integrity": "sha512-e2aeCAixCj9M7nJxdB/wDjO6mbYX+lJJxSJCXDzlr5YPGYVofuJwGN9nKg2o6wWInjX6XmxRinn3AeJMK81ltw==", + "version": "1.4.369", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.369.tgz", + "integrity": "sha512-LfxbHXdA/S+qyoTEA4EbhxGjrxx7WK2h6yb5K2v0UCOufUKX+VZaHbl3svlzZfv9sGseym/g3Ne4DpsgRULmqg==", "peer": true }, "node_modules/emoji-regex": { @@ -2032,15 +2032,15 @@ } }, "node_modules/eslint": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz", - "integrity": "sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==", + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.39.0.tgz", + "integrity": "sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", "@eslint/eslintrc": "^2.0.2", - "@eslint/js": "8.38.0", + "@eslint/js": "8.39.0", "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -2050,7 +2050,7 @@ "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", + "eslint-scope": "^7.2.0", "eslint-visitor-keys": "^3.4.0", "espree": "^9.5.1", "esquery": "^1.4.2", @@ -3473,9 +3473,9 @@ } }, "node_modules/rollup": { - "version": "3.20.6", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.6.tgz", - "integrity": "sha512-2yEB3nQXp/tBQDN0hJScJQheXdvU2wFhh6ld7K/aiZ1vYcak6N/BKjY1QrU6BvO2JWYS8bEs14FRaxXosxy2zw==", + "version": "3.20.7", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.7.tgz", + "integrity": "sha512-P7E2zezKSLhWnTz46XxjSmInrbOCiul1yf+kJccMxT56vxjHwCbDfoLbiqFgu+WQoo9ij2PkraYaBstgB2prBA==", "bin": { "rollup": "dist/bin/rollup" }, diff --git a/public/uploadabiwAz b/public/uploadabiwAz new file mode 100644 index 0000000000000000000000000000000000000000..00313cc129e8a98b13e232924a7e60f0cdb71510 GIT binary patch literal 52419 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∨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 J$>p2({|{(<-}wLl literal 0 HcmV?d00001 diff --git a/resources/css/utils.scss b/resources/css/utils.scss index 1c796ce..dda1119 100644 --- a/resources/css/utils.scss +++ b/resources/css/utils.scss @@ -114,7 +114,7 @@ } .flex-row-reverse { - flex-direction: row-reverse; + flex-direction: row-reverse !important; } .flex-column { diff --git a/resources/js/components/SMButton.vue b/resources/js/components/SMButton.vue index 69ac127..4b6bbf7 100644 --- a/resources/js/components/SMButton.vue +++ b/resources/js/components/SMButton.vue @@ -8,6 +8,7 @@ props.size, { 'button-block': block }, { 'button-dropdown': dropdown }, + { 'button-loading': loading }, ]" ref="buttonRef" :style="{ minWidth: minWidth }" @@ -146,8 +147,10 @@ if (props.form !== undefined) { watch( () => props.form.loading(), (newValue) => { - loading.value = newValue; disabled.value = newValue; + if (buttonType === "submit") { + loading.value = newValue; + } } ); } @@ -265,7 +268,7 @@ const handleClickItem = (item: string) => { &:disabled, &.primary:disabled { - background-color: var(--base-color-dark); + background-color: var(--base-color-dark) !important; box-shadow: none; } diff --git a/resources/js/components/SMImage.vue b/resources/js/components/SMImage.vue new file mode 100644 index 0000000..b0327c0 --- /dev/null +++ b/resources/js/components/SMImage.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/resources/js/components/SMLoading.vue b/resources/js/components/SMLoading.vue index 791e0d7..0967e99 100644 --- a/resources/js/components/SMLoading.vue +++ b/resources/js/components/SMLoading.vue @@ -1,6 +1,9 @@ @@ -13,14 +16,54 @@ const props = defineProps({ default: false, required: false, }, + text: { + type: String, + default: "", + required: false, + }, + overlay: { + type: Boolean, + default: false, + required: false, + }, }); diff --git a/resources/js/components/SMTable.vue b/resources/js/components/SMTable.vue index e9e746a..3cb075a 100644 --- a/resources/js/components/SMTable.vue +++ b/resources/js/components/SMTable.vue @@ -17,17 +17,11 @@ :data-title="header['text']" :key="`item-row-${index}-${header['value']}`"> @@ -57,6 +51,22 @@ const slots = useSlots(); const handleRowClick = (item) => { emits("rowClick", item); }; + +const getItemValue = (data: unknown, key: string): string => { + if (typeof data === "object" && data !== null) { + return key.split(".").reduce((item, key) => item[key], data); + } + + return ""; +}; + +const hasClassLong = (text: unknown): boolean => { + if (typeof text == "string") { + return text.length >= 35; + } + + return false; +}; diff --git a/resources/js/views/dashboard/MediaList.vue b/resources/js/views/dashboard/MediaList.vue index 008d0cc..2c27278 100644 --- a/resources/js/views/dashboard/MediaList.vue +++ b/resources/js/views/dashboard/MediaList.vue @@ -39,6 +39,11 @@ +