From 9b1d3655716a7fe1a0e5465b081316c61bb1b94f Mon Sep 17 00:00:00 2001 From: "Arjay Q. Angeles" Date: Tue, 10 Sep 2019 11:37:43 +0800 Subject: [PATCH 1/5] Add support for handling field type upload and uploadMany. Fix #17. --- src/DataTablesEditor.php | 88 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 87 insertions(+), 1 deletion(-) diff --git a/src/DataTablesEditor.php b/src/DataTablesEditor.php index 203ac75..7ced8ae 100644 --- a/src/DataTablesEditor.php +++ b/src/DataTablesEditor.php @@ -6,7 +6,9 @@ use Illuminate\Http\JsonResponse; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\QueryException; +use Illuminate\Support\Facades\Storage; use Illuminate\Contracts\Validation\Validator; +use Illuminate\Validation\ValidationException; use Illuminate\Foundation\Validation\ValidatesRequests; abstract class DataTablesEditor @@ -18,7 +20,7 @@ abstract class DataTablesEditor * * @var array */ - protected $actions = ['create', 'edit', 'remove']; + protected $actions = ['create', 'edit', 'remove', 'upload']; /** * @var \Illuminate\Database\Eloquent\Model @@ -32,6 +34,20 @@ abstract class DataTablesEditor */ protected $unguarded = false; + /** + * Upload directory relative to storage path. + * + * @var string + */ + protected $uploadDir = 'editor'; + + /** + * Filesystem disk config to use for upload. + * + * @var string + */ + protected $disk = 'public'; + /** * Process dataTables editor action request. * @@ -401,6 +417,76 @@ public function unguard($state = true) return $this; } + /** + * Handle uploading of file. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\JsonResponse + */ + public function upload(Request $request) + { + try { + $type = $request->input('uploadField'); + $filesystem = Storage::disk($this->disk); + $rules = $this->uploadRules(); + $fieldRules = ['upload' => data_get($rules, $type, [])]; + + $this->validate($request, $fieldRules, $this->uploadMessages(), $this->attributes()); + + $id = $filesystem->putFile($this->uploadDir, $request->file('upload')); + + if (method_exists($this, 'uploaded')) { + $id = $this->uploaded($id); + } + + return response()->json([ + 'data' => [], + 'file' => [ + 'filename' => $id, + 'size' => $request->file('upload')->getSize(), + 'directory' => $this->uploadDir, + 'disk' => $this->disk, + 'url' => $filesystem->url($id), + ], + 'upload' => [ + 'id' => $id, + ], + ]); + } catch (ValidationException $exception) { + $field = $request->get('uploadField'); + + return response()->json([ + 'data' => [], + 'fieldErrors' => [ + [ + 'name' => $field, + 'status' => str_replace('upload', $field, $exception->errors()['upload'][0]), + ], + ], + ]); + } + } + + /** + * Upload validation rules. + * + * @return array + */ + public function uploadRules() + { + return []; + } + + /** + * Upload validation messages. + * + * @return array + */ + protected function uploadMessages() + { + return []; + } + /** * Display dataTables editor validation errors. * From 290aa1486c05735dac4dd7955d33c36bfa1cbc05 Mon Sep 17 00:00:00 2001 From: "Arjay Q. Angeles" Date: Tue, 10 Sep 2019 11:43:57 +0800 Subject: [PATCH 2/5] Refactor variables. --- src/DataTablesEditor.php | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/DataTablesEditor.php b/src/DataTablesEditor.php index 7ced8ae..e40dcca 100644 --- a/src/DataTablesEditor.php +++ b/src/DataTablesEditor.php @@ -425,15 +425,16 @@ public function unguard($state = true) */ public function upload(Request $request) { + $field = $request->input('uploadField'); + $storage = Storage::disk($this->disk); + try { - $type = $request->input('uploadField'); - $filesystem = Storage::disk($this->disk); $rules = $this->uploadRules(); - $fieldRules = ['upload' => data_get($rules, $type, [])]; + $fieldRules = ['upload' => data_get($rules, $field, [])]; $this->validate($request, $fieldRules, $this->uploadMessages(), $this->attributes()); - $id = $filesystem->putFile($this->uploadDir, $request->file('upload')); + $id = $storage->putFile($this->uploadDir, $request->file('upload')); if (method_exists($this, 'uploaded')) { $id = $this->uploaded($id); @@ -446,15 +447,13 @@ public function upload(Request $request) 'size' => $request->file('upload')->getSize(), 'directory' => $this->uploadDir, 'disk' => $this->disk, - 'url' => $filesystem->url($id), + 'url' => $storage->url($id), ], 'upload' => [ 'id' => $id, ], ]); } catch (ValidationException $exception) { - $field = $request->get('uploadField'); - return response()->json([ 'data' => [], 'fieldErrors' => [ From 7361b0347c97ebabe8f3fe87224bafaf3ae86be8 Mon Sep 17 00:00:00 2001 From: "Arjay Q. Angeles" Date: Tue, 10 Sep 2019 12:12:48 +0800 Subject: [PATCH 3/5] Refactor editor messages into one method. --- src/DataTablesEditor.php | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/DataTablesEditor.php b/src/DataTablesEditor.php index e40dcca..9dfc1b4 100644 --- a/src/DataTablesEditor.php +++ b/src/DataTablesEditor.php @@ -82,7 +82,7 @@ public function create(Request $request) $connection->beginTransaction(); foreach ($request->get('data') as $data) { $validator = $this->getValidationFactory() - ->make($data, $this->createRules(), $this->createMessages(), $this->attributes()); + ->make($data, $this->createRules(), $this->createMessages() + $this->messages(), $this->attributes()); if ($validator->fails()) { foreach ($this->formatErrors($validator) as $error) { $errors[] = $error; @@ -148,6 +148,7 @@ abstract public function createRules(); /** * Get create validation messages. * + * @deprecated deprecated since v1.12.0, please use messages() instead. * @return array */ protected function createMessages() @@ -216,7 +217,7 @@ public function edit(Request $request) foreach ($request->get('data') as $key => $data) { $model = $this->getBuilder()->findOrFail($key); $validator = $this->getValidationFactory() - ->make($data, $this->editRules($model), $this->editMessages(), $this->attributes()); + ->make($data, $this->editRules($model), $this->editMessages() + $this->messages(), $this->attributes()); if ($validator->fails()) { foreach ($this->formatErrors($validator) as $error) { $errors[] = $error; @@ -283,6 +284,7 @@ abstract public function editRules(Model $model); /** * Get edit validation messages. * + * @deprecated deprecated since v1.12.0, please use messages() instead. * @return array */ protected function editMessages() @@ -306,7 +308,7 @@ public function remove(Request $request) foreach ($request->get('data') as $key => $data) { $model = $this->getBuilder()->findOrFail($key); $validator = $this->getValidationFactory() - ->make($data, $this->removeRules($model), $this->removeMessages(), $this->attributes()); + ->make($data, $this->removeRules($model), $this->removeMessages() + $this->messages(), $this->attributes()); if ($validator->fails()) { foreach ($this->formatErrors($validator) as $error) { $errors[] = $error['status']; @@ -362,6 +364,7 @@ abstract public function removeRules(Model $model); /** * Get remove validation messages. * + * @deprecated deprecated since v1.12.0, please use messages() instead. * @return array */ protected function removeMessages() @@ -477,11 +480,11 @@ public function uploadRules() } /** - * Upload validation messages. + * Get validation messages. * * @return array */ - protected function uploadMessages() + protected function messages() { return []; } From 0fbdef6515118deaab58510e02c4c75bba76a351 Mon Sep 17 00:00:00 2001 From: "Arjay Q. Angeles" Date: Tue, 10 Sep 2019 12:16:16 +0800 Subject: [PATCH 4/5] Put priority on messages. --- src/DataTablesEditor.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/DataTablesEditor.php b/src/DataTablesEditor.php index 9dfc1b4..b50e203 100644 --- a/src/DataTablesEditor.php +++ b/src/DataTablesEditor.php @@ -82,7 +82,7 @@ public function create(Request $request) $connection->beginTransaction(); foreach ($request->get('data') as $data) { $validator = $this->getValidationFactory() - ->make($data, $this->createRules(), $this->createMessages() + $this->messages(), $this->attributes()); + ->make($data, $this->createRules(), $this->messages() + $this->createMessages(), $this->attributes()); if ($validator->fails()) { foreach ($this->formatErrors($validator) as $error) { $errors[] = $error; @@ -217,7 +217,7 @@ public function edit(Request $request) foreach ($request->get('data') as $key => $data) { $model = $this->getBuilder()->findOrFail($key); $validator = $this->getValidationFactory() - ->make($data, $this->editRules($model), $this->editMessages() + $this->messages(), $this->attributes()); + ->make($data, $this->editRules($model), $this->messages() + $this->editMessages(), $this->attributes()); if ($validator->fails()) { foreach ($this->formatErrors($validator) as $error) { $errors[] = $error; @@ -308,7 +308,7 @@ public function remove(Request $request) foreach ($request->get('data') as $key => $data) { $model = $this->getBuilder()->findOrFail($key); $validator = $this->getValidationFactory() - ->make($data, $this->removeRules($model), $this->removeMessages() + $this->messages(), $this->attributes()); + ->make($data, $this->removeRules($model), $this->messages() + $this->removeMessages(), $this->attributes()); if ($validator->fails()) { foreach ($this->formatErrors($validator) as $error) { $errors[] = $error['status']; From 833e70789d0e0acbe4335a96f61b08204a573775 Mon Sep 17 00:00:00 2001 From: Arjay Angeles Date: Tue, 10 Sep 2019 04:36:42 +0000 Subject: [PATCH 5/5] Apply fixes from StyleCI --- src/DataTablesEditor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DataTablesEditor.php b/src/DataTablesEditor.php index b50e203..fc04f68 100644 --- a/src/DataTablesEditor.php +++ b/src/DataTablesEditor.php @@ -82,7 +82,7 @@ public function create(Request $request) $connection->beginTransaction(); foreach ($request->get('data') as $data) { $validator = $this->getValidationFactory() - ->make($data, $this->createRules(), $this->messages() + $this->createMessages(), $this->attributes()); + ->make($data, $this->createRules(), $this->messages() + $this->createMessages(), $this->attributes()); if ($validator->fails()) { foreach ($this->formatErrors($validator) as $error) { $errors[] = $error;