PluginProbe
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler / 1.6.1
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler v1.6.1
1.6.5 1.6.4 1.6.3 1.6.2 1.6.1 1.6.0 1.5.4 1.5.5 1.5.3 1.5.2 1.5.1 1.5.0 1.4.2 1.4.1 1.4.0 1.3.28 1.3.27 1.3.26 1.3.25 1.3.23 1.3.22 1.3.21 1.3.20 1.3.19 trunk All 48 releases
fluent-cart / app / Http / Controllers / FileUploadController.php

FileUploadController.php in FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler 1.6.1, at app/Http/Controllers/FileUploadController.php

156 lines 4.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentCart\App\Http\Controllers;
4
5 use FluentCart\Api\Resource\UserResource;
6 use FluentCart\Api\StorageDrivers;
7 use FluentCart\App\Hooks\Handlers\GlobalStorageHandler;
8 use FluentCart\App\Http\Requests\UserRequest;
9 use FluentCart\App\Services\FileSystem\FileManager;
10 use FluentCart\Framework\Http\Request\File;
11 use FluentCart\Framework\Http\Request\Request;
12 use FluentCart\Framework\Support\Arr;
13 use FluentCart\Framework\Support\Str;
14
15 class FileUploadController extends Controller
16 {
17
18 public function index(Request $request)
19 {
20 $driver = sanitize_text_field($request->get('driver', 'local')) ?: 'local';
21
22 if ($error = $this->invalidDriverResponse($driver)) {
23 return $error;
24 }
25
26 return [
27 'files' => (new FileManager($driver))->listFiles($request->all())
28 ];
29 }
30
31 public function getBucketList(Request $request)
32 {
33 $driver = sanitize_text_field($request->get('driver', 'local')) ?: 'local';
34
35 if ($error = $this->invalidDriverResponse($driver)) {
36 return $error;
37 }
38
39 $bucketList = (new FileManager($driver))->bucketLists();
40 $buckets = [];
41 foreach ($bucketList as $bucket) {
42 $buckets[] = array(
43 "label" => $bucket,
44 "value" => $bucket,
45 );
46 }
47 $driverSettings = (new GlobalStorageHandler)->getSettings($driver);
48
49 return [
50 // "default_bucket" => Arr::get($driverSettings, 'settings.bucket'),
51 "default_bucket" => Arr::get($buckets, '0.value', ''),
52 "buckets" => $buckets
53 ];
54 }
55
56 private function invalidDriverResponse($driver)
57 {
58 $availableDrivers = array_keys((new StorageDrivers())->getActive());
59
60 if (in_array($driver, $availableDrivers, true)) {
61 return null;
62 }
63
64 if (empty($availableDrivers)) {
65 $message = __('No storage drivers are enabled. Please enable a storage driver from the storage settings.', 'fluent-cart');
66 } else {
67 /* translators: %1$s: comma separated list of available storage drivers */
68 $message = sprintf(__('Invalid driver. Available drivers: %1$s', 'fluent-cart'), implode(', ', $availableDrivers));
69 }
70
71 return $this->sendError([
72 'message' => $message,
73 'available_drivers' => $availableDrivers
74 ], 422);
75 }
76
77 public function upload(Request $request)
78 {
79 /**
80 * @var $file File
81 */
82
83
84 $request->validate([
85 'name' => 'required|sanitizeText|maxLength:160',
86 ]);
87
88 $file = Arr::get($request->files(), 'file');
89
90 if (empty($file)) {
91 return $this->sendError([
92 'message' => __('Failed To Upload File', 'fluent-cart'),
93 'additional' => 'File is empty'
94 ]);
95 }
96
97 $fileName = sanitize_file_name($file->getClientOriginalName());
98 $driver = sanitize_text_field($request->get('driver', 'local'));
99
100 if ($name = sanitize_file_name($request->get('name'))) {
101 $fileName = $name.'.' . $file->getClientOriginalExtension();
102 }
103
104
105 return (new FileManager($driver))->uploadFile(
106 $file->getRealPath(),
107 $fileName,
108 $file,
109 $request->all(),
110 );
111 }
112
113 public function uploadEditorFile(Request $request)
114 {
115 $file = Arr::get($request->files(), 'file');
116 if ($file instanceof File) {
117 $fileArray = $file->toArray();
118
119 $wp_filetype = wp_check_filetype_and_ext($fileArray['tmp_name'], $fileArray['name']);
120
121 if (wp_match_mime_types('image', $wp_filetype['type'])) {
122 require_once(ABSPATH . 'wp-admin/includes/image.php');
123 require_once(ABSPATH . 'wp-admin/includes/file.php');
124 require_once(ABSPATH . 'wp-admin/includes/media.php');
125 $attachment_id = media_handle_upload('file', 0, []);
126 return wp_prepare_attachment_for_js($attachment_id);
127 }
128 return $this->sendError(__('Error Uploading File', 'fluent-cart'));
129 }
130
131 return $this->sendError(__('No File Attached', 'fluent-cart'));
132 }
133
134 public function deleteFile(Request $request)
135 {
136 $request->validate([
137 'file_path' => 'required|string',
138 'driver' => 'required|string'
139 ]);
140
141 $filePath = sanitize_text_field($request->get('file_path'));
142 $driver = sanitize_text_field($request->get('driver'));
143 $bucket = sanitize_text_field($request->get('bucket'));
144
145 $result = (new FileManager($driver))->deleteFile($filePath, $bucket);
146
147 if (is_wp_error($result)) {
148 return $this->sendError([
149 'message' => $result->get_error_message()
150 ]);
151 }
152
153 return $this->sendSuccess($result);
154 }
155
156 }