From 675aec669b7a2a115c9f2f004c3f875e15cae3e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Wed, 23 Nov 2016 01:30:28 +0100 Subject: [PATCH] REFACTORING #1880 @40m: move creating new directory into interaction --- .../SubdirectoryExistsInDirectory.php | 6 ++ app/CMS/Handlers/Interaction.php | 2 +- .../Admin/FileManager/CreateDirectory.php | 65 +++++++++++++++++ .../Repositories/FileManager/Directory.php | 14 ++++ .../Admin/FileManager/CreateNewDirectory.php | 72 +++++++++---------- .../Requests/CreateNewDirectoryRequest.php | 9 +-- 6 files changed, 123 insertions(+), 45 deletions(-) create mode 100644 app/CMS/Exceptions/FileManager/SubdirectoryExistsInDirectory.php create mode 100644 app/CMS/Repositories/FileManager/Directory.php diff --git a/app/CMS/Exceptions/FileManager/SubdirectoryExistsInDirectory.php b/app/CMS/Exceptions/FileManager/SubdirectoryExistsInDirectory.php new file mode 100644 index 00000000..c66527da --- /dev/null +++ b/app/CMS/Exceptions/FileManager/SubdirectoryExistsInDirectory.php @@ -0,0 +1,6 @@ +getValidationRules($extraParameters)); diff --git a/app/CMS/Interactions/Admin/FileManager/CreateDirectory.php b/app/CMS/Interactions/Admin/FileManager/CreateDirectory.php index e69de29b..db6069cc 100644 --- a/app/CMS/Interactions/Admin/FileManager/CreateDirectory.php +++ b/app/CMS/Interactions/Admin/FileManager/CreateDirectory.php @@ -0,0 +1,65 @@ +repository = $repository; + } + + /** + * Perform given action + * + * @param $data array input data + * @param $parameters array parameters + * + * @return Directory + * @throws SubdirectoryExistsInDirectory + */ + public function handle($data, $parameters) + { + $data['parentDirectory'] = isset($data['parentDirectory']) ? $data['parentDirectory'] : null; + + // todo this should probably go into validation, but we are not able to get $data in getValidationRules + // check if created folder does not exist in current directory + if ($this->repository->checkIfNameExists($data['name'], $data['parentDirectory'])) { + throw new SubdirectoryExistsInDirectory(); + } + + // todo use Directory::create() and rename columns/fields in request + // create new database entry + $directory = new Directory(); + $directory->name = $data['name']; + $directory->parent_id = $data['parentDirectory']; + $directory->user_id = \Auth::user()->id; + $directory->description = $data['description']; + $directory->save(); + + return $directory; + } + + /** + * @param $data array input data + * + * @return array + * @throws SubdirectoryExistsInDirectory + */ + public function getValidationRules($data = []) + { + return [ + 'name' => 'required|max:255', + 'parentDirectory' => 'exists:directories,id' + ]; + } +} \ No newline at end of file diff --git a/app/CMS/Repositories/FileManager/Directory.php b/app/CMS/Repositories/FileManager/Directory.php new file mode 100644 index 00000000..0a262fdd --- /dev/null +++ b/app/CMS/Repositories/FileManager/Directory.php @@ -0,0 +1,14 @@ +where('parent_id', $directoryId) + ->exists(); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Admin/FileManager/CreateNewDirectory.php b/app/Http/Controllers/Admin/FileManager/CreateNewDirectory.php index 6341e58d..8fb67771 100644 --- a/app/Http/Controllers/Admin/FileManager/CreateNewDirectory.php +++ b/app/Http/Controllers/Admin/FileManager/CreateNewDirectory.php @@ -2,12 +2,31 @@ namespace App\Http\Controllers\Admin\FileManager; +use App\CMS\Exceptions\FileManager\SubdirectoryExistsInDirectory; +use App\Cms\Handlers\Interactions\Interaction; +use App\CMS\Interactions\Admin\FileManager\CreateDirectory; +use App\CMS\Repositories\FileManager\Directory as DirectoryRepository; use App\Http\Controllers\Admin\Controller; use App\Http\Requests; -use App\Models\FileManager\Directory; +use Illuminate\Http\Request; class CreateNewDirectory extends Controller { + /** + * @var DirectoryRepository + */ + private $repository; + + /** + * CreateNewDirectory constructor. + * + * @param DirectoryRepository $repository + */ + public function __construct(DirectoryRepository $repository) + { + $this->repository = $repository; + } + /** * Create new directory * @@ -15,48 +34,21 @@ class CreateNewDirectory extends Controller * * @return $this|\Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse */ - public function postNew(Requests\CreateNewDirectoryRequest $request) + public function postNew(Request $request) { - // check if created folder does not exist in current directory - $exists = Directory::where('name', $request->name) - ->where('parent_id', $request->parentDirectory) - ->exists(); - if ($exists) { - if ($request->ajax()) { - return response()->json([ - 'status' => 'failed', - 'message' => trans('admin/fileManager.subdirectoryExists') - ]); - } else { - return redirect() - ->route('upload.overview', ['id' => $request->parentDirectory]) - ->withInput() - ->with('error', trans('admin/fileManager.subdirectoryExists')); - } + // create new directory + try { + Interaction::handle(CreateDirectory::class, $request->all()); + } catch (SubdirectoryExistsInDirectory $e) { + return redirect() + ->back() + ->withInput() + ->with('error', trans('admin/fileManager.subdirectoryExists')); } - // create new database entry - $directory = new Directory(); - $directory->name = $request->name; - $directory->parent_id = $request->parentDirectory; - $directory->user_id = \Auth::user()->id; - $directory->description = $request->description; - - $directory->save(); - $message = trans('admin/fileManager.newDirectorySuccess'); - if (!$request->ajax()) { - return redirect() - ->route('upload.overview', ['id' => $request->parentDirectory]) - ->with('success', $message); - } else { - $payload = [ - 'status' => 'success', - 'message' => $message, - 'parentDirectory' => $request->parentDirectory - ]; - - return response()->json($payload); - } + return redirect() + ->route('upload.overview', ['id' => $request->parentDirectory]) + ->with('success', $message); } } diff --git a/app/Http/Requests/CreateNewDirectoryRequest.php b/app/Http/Requests/CreateNewDirectoryRequest.php index a35650d9..7fda8d5b 100644 --- a/app/Http/Requests/CreateNewDirectoryRequest.php +++ b/app/Http/Requests/CreateNewDirectoryRequest.php @@ -2,6 +2,8 @@ namespace App\Http\Requests; +use App\CMS\Interactions\Admin\FileManager\CreateDirectory; + class CreateNewDirectoryRequest extends Request { /** @@ -11,9 +13,8 @@ class CreateNewDirectoryRequest extends Request */ public function rules() { - return [ - 'name' => 'required|max:255', - 'parentDirectory' => 'exists:directories,id' - ]; + $interaction = app(CreateDirectory::class); + + return $interaction->getValidationRules(); } }