From 9979eba5d9cd00628926e9e11a4e08a4c0e0e053 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Thu, 28 Apr 2016 15:16:33 +0300 Subject: [PATCH] Working on custom route model binding --- app/Http/Controllers/BaseController.php | 15 ++++++++--- app/Http/Controllers/ClientController.php | 20 +++++--------- app/Http/Controllers/CreditController.php | 2 +- app/Http/Controllers/DocumentController.php | 2 +- app/Http/Controllers/ExpenseController.php | 2 +- app/Http/Controllers/InvoiceController.php | 2 +- app/Http/Controllers/PaymentController.php | 2 +- app/Http/Controllers/QuoteController.php | 2 +- app/Http/Controllers/TaskController.php | 2 +- app/Http/Controllers/VendorController.php | 4 +-- app/Http/Requests/BaseRequest.php | 30 +++++++++++++++++++++ app/Http/Requests/ClientRequest.php | 21 +++++++++++++++ app/Http/Requests/CreateClientRequest.php | 9 +++---- app/Http/Requests/CreateCreditRequest.php | 9 +++---- app/Http/Requests/UpdateClientRequest.php | 9 +++---- app/Libraries/Utils.php | 5 ++++ app/Ninja/Repositories/ClientRepository.php | 6 +++-- app/Services/ClientService.php | 4 +-- 18 files changed, 98 insertions(+), 48 deletions(-) create mode 100644 app/Http/Requests/BaseRequest.php create mode 100644 app/Http/Requests/ClientRequest.php diff --git a/app/Http/Controllers/BaseController.php b/app/Http/Controllers/BaseController.php index 66abc53e2459..4a33946c7631 100644 --- a/app/Http/Controllers/BaseController.php +++ b/app/Http/Controllers/BaseController.php @@ -3,6 +3,7 @@ use App\Http\Middleware\PermissionsRequired; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; +use Input; use Auth; use Utils; @@ -10,7 +11,7 @@ class BaseController extends Controller { use DispatchesJobs, AuthorizesRequests; - protected $entity; + protected $entityType; /** * Setup the layout used by the controller. @@ -25,17 +26,23 @@ class BaseController extends Controller } protected function authorizeCreate() { - $this->authorize('create', $this->entity); + $this->authorize('create', $this->entityType); } + /* + protected function authorizeUpdate($entity) { + $this->authorize('edit', $entity); + } + */ + protected function authorizeUpdate($input){ $creating = empty($input['public_id']) || $input['public_id'] == '-1'; if($creating){ - $this->authorize('create', $this->entity); + $this->authorize('create', $this->entityType); } else{ - $className = Utils::getEntityName($this->entity); + $className = Utils::getEntityName($this->entityType); $object = call_user_func(array("App\\Models\\{$className}", 'scope'), $input['public_id'])->firstOrFail(); $this->authorize('edit', $object); diff --git a/app/Http/Controllers/ClientController.php b/app/Http/Controllers/ClientController.php index 49988ab78b79..c66c775947c8 100644 --- a/app/Http/Controllers/ClientController.php +++ b/app/Http/Controllers/ClientController.php @@ -28,6 +28,7 @@ use App\Models\Task; use App\Ninja\Repositories\ClientRepository; use App\Services\ClientService; +use App\Http\Requests\ClientRequest; use App\Http\Requests\CreateClientRequest; use App\Http\Requests\UpdateClientRequest; @@ -35,7 +36,7 @@ class ClientController extends BaseController { protected $clientService; protected $clientRepo; - protected $entity = ENTITY_CLIENT; + protected $entityType = ENTITY_CLIENT; public function __construct(ClientRepository $clientRepo, ClientService $clientService) { @@ -81,11 +82,7 @@ class ClientController extends BaseController */ public function store(CreateClientRequest $request) { - $data = $request->input(); - - $this->authorizeUpdate($data); - - $client = $this->clientService->save($data); + $client = $this->clientService->save($request->input()); Session::flash('message', trans('texts.created_client')); @@ -100,6 +97,7 @@ class ClientController extends BaseController */ public function show($publicId) { + //$client = $request->entity()->load('conacts'); $client = Client::withTrashed()->scope($publicId)->with('contacts', 'size', 'industry')->firstOrFail(); $this->authorize('view', $client); @@ -177,9 +175,9 @@ class ClientController extends BaseController * @param int $id * @return Response */ - public function edit($publicId) + public function edit(ClientRequest $request) { - $client = Client::scope($publicId)->with('contacts')->firstOrFail(); + $client = $request->entity(); $this->authorize('edit', $client); @@ -225,11 +223,7 @@ class ClientController extends BaseController */ public function update(UpdateClientRequest $request) { - $data = $request->input(); - - $this->authorizeUpdate($data); - - $client = $this->clientService->save($data); + $client = $this->clientService->save($request->input(), $request->entity()); Session::flash('message', trans('texts.updated_client')); diff --git a/app/Http/Controllers/CreditController.php b/app/Http/Controllers/CreditController.php index 23577f951389..1e3586af1922 100644 --- a/app/Http/Controllers/CreditController.php +++ b/app/Http/Controllers/CreditController.php @@ -17,7 +17,7 @@ class CreditController extends BaseController { protected $creditRepo; protected $creditService; - protected $entity = ENTITY_CREDIT; + protected $entityType = ENTITY_CREDIT; public function __construct(CreditRepository $creditRepo, CreditService $creditService) { diff --git a/app/Http/Controllers/DocumentController.php b/app/Http/Controllers/DocumentController.php index c0e25e773d11..0720e1a5babf 100644 --- a/app/Http/Controllers/DocumentController.php +++ b/app/Http/Controllers/DocumentController.php @@ -15,7 +15,7 @@ use App\Ninja\Repositories\DocumentRepository; class DocumentController extends BaseController { protected $documentRepo; - protected $entity = ENTITY_DOCUMENT; + protected $entityType = ENTITY_DOCUMENT; public function __construct(DocumentRepository $documentRepo) { diff --git a/app/Http/Controllers/ExpenseController.php b/app/Http/Controllers/ExpenseController.php index e65a485fa2f0..88a493d3ea21 100644 --- a/app/Http/Controllers/ExpenseController.php +++ b/app/Http/Controllers/ExpenseController.php @@ -25,7 +25,7 @@ class ExpenseController extends BaseController // Expenses protected $expenseRepo; protected $expenseService; - protected $entity = ENTITY_EXPENSE; + protected $entityType = ENTITY_EXPENSE; public function __construct(ExpenseRepository $expenseRepo, ExpenseService $expenseService) { diff --git a/app/Http/Controllers/InvoiceController.php b/app/Http/Controllers/InvoiceController.php index 7aa9ca2d4d14..c3627a01c301 100644 --- a/app/Http/Controllers/InvoiceController.php +++ b/app/Http/Controllers/InvoiceController.php @@ -37,7 +37,7 @@ class InvoiceController extends BaseController protected $documentRepo; protected $invoiceService; protected $recurringInvoiceService; - protected $entity = ENTITY_INVOICE; + protected $entityType = ENTITY_INVOICE; public function __construct(Mailer $mailer, InvoiceRepository $invoiceRepo, ClientRepository $clientRepo, InvoiceService $invoiceService, DocumentRepository $documentRepo, RecurringInvoiceService $recurringInvoiceService) { diff --git a/app/Http/Controllers/PaymentController.php b/app/Http/Controllers/PaymentController.php index 0a0fe1485676..bd5fb85199cf 100644 --- a/app/Http/Controllers/PaymentController.php +++ b/app/Http/Controllers/PaymentController.php @@ -30,7 +30,7 @@ use App\Http\Requests\UpdatePaymentRequest; class PaymentController extends BaseController { - protected $entity = ENTITY_PAYMENT; + protected $entityType = ENTITY_PAYMENT; public function __construct(PaymentRepository $paymentRepo, InvoiceRepository $invoiceRepo, AccountRepository $accountRepo, ContactMailer $contactMailer, PaymentService $paymentService) { diff --git a/app/Http/Controllers/QuoteController.php b/app/Http/Controllers/QuoteController.php index e2228ab2a0c0..3a0062296098 100644 --- a/app/Http/Controllers/QuoteController.php +++ b/app/Http/Controllers/QuoteController.php @@ -33,7 +33,7 @@ class QuoteController extends BaseController protected $invoiceRepo; protected $clientRepo; protected $invoiceService; - protected $entity = ENTITY_INVOICE; + protected $entityType = ENTITY_INVOICE; public function __construct(Mailer $mailer, InvoiceRepository $invoiceRepo, ClientRepository $clientRepo, InvoiceService $invoiceService) { diff --git a/app/Http/Controllers/TaskController.php b/app/Http/Controllers/TaskController.php index 7ff19436ead2..a1118269ac51 100644 --- a/app/Http/Controllers/TaskController.php +++ b/app/Http/Controllers/TaskController.php @@ -22,7 +22,7 @@ class TaskController extends BaseController { protected $taskRepo; protected $taskService; - protected $entity = ENTITY_TASK; + protected $entityType = ENTITY_TASK; public function __construct(TaskRepository $taskRepo, InvoiceRepository $invoiceRepo, TaskService $taskService) { diff --git a/app/Http/Controllers/VendorController.php b/app/Http/Controllers/VendorController.php index d53d6041fb18..9340b926d4eb 100644 --- a/app/Http/Controllers/VendorController.php +++ b/app/Http/Controllers/VendorController.php @@ -25,12 +25,12 @@ use App\Services\VendorService; use App\Http\Requests\CreateVendorRequest; use App\Http\Requests\UpdateVendorRequest; -// vendor + class VendorController extends BaseController { protected $vendorService; protected $vendorRepo; - protected $entity = ENTITY_VENDOR; + protected $entityType = ENTITY_VENDOR; public function __construct(VendorRepository $vendorRepo, VendorService $vendorService) { diff --git a/app/Http/Requests/BaseRequest.php b/app/Http/Requests/BaseRequest.php new file mode 100644 index 000000000000..f7be7a8de3cb --- /dev/null +++ b/app/Http/Requests/BaseRequest.php @@ -0,0 +1,30 @@ +entity) { + return $this->entity; + } + + //dd($this->clients); + $publicId = Input::get('public_id') ?: Input::get('id'); + + if ( ! $publicId) { + return null; + } + + $class = Utils::getEntityClass($this->entityType); + $this->entity = $class::scope($publicId)->withTrashed()->firstOrFail(); + + return $this->entity; + } +} diff --git a/app/Http/Requests/ClientRequest.php b/app/Http/Requests/ClientRequest.php new file mode 100644 index 000000000000..2b491c46c7e4 --- /dev/null +++ b/app/Http/Requests/ClientRequest.php @@ -0,0 +1,21 @@ +user()->can('create', ENTITY_CLIENT); } /** diff --git a/app/Http/Requests/CreateCreditRequest.php b/app/Http/Requests/CreateCreditRequest.php index f2dc44d31aa0..46d40972c8dc 100644 --- a/app/Http/Requests/CreateCreditRequest.php +++ b/app/Http/Requests/CreateCreditRequest.php @@ -1,9 +1,6 @@ -user()->can('create', ENTITY_CREDIT); } /** diff --git a/app/Http/Requests/UpdateClientRequest.php b/app/Http/Requests/UpdateClientRequest.php index b73e019c4964..c1cdebe1891e 100644 --- a/app/Http/Requests/UpdateClientRequest.php +++ b/app/Http/Requests/UpdateClientRequest.php @@ -1,9 +1,6 @@ -user()->can('edit', $this->entity()); } /** diff --git a/app/Libraries/Utils.php b/app/Libraries/Utils.php index e4ad99c6ce45..86107acfcd59 100644 --- a/app/Libraries/Utils.php +++ b/app/Libraries/Utils.php @@ -669,6 +669,11 @@ class Utils return $year + $offset; } + public static function getEntityClass($entityType) + { + return 'App\\Models\\' . static::getEntityName($entityType); + } + public static function getEntityName($entityType) { return ucwords(str_replace('_', ' ', $entityType)); diff --git a/app/Ninja/Repositories/ClientRepository.php b/app/Ninja/Repositories/ClientRepository.php index d3f943a07001..77ebcb7fd736 100644 --- a/app/Ninja/Repositories/ClientRepository.php +++ b/app/Ninja/Repositories/ClientRepository.php @@ -66,11 +66,13 @@ class ClientRepository extends BaseRepository return $query; } - public function save($data) + public function save($data, $client = null) { $publicId = isset($data['public_id']) ? $data['public_id'] : false; - if (!$publicId || $publicId == '-1') { + if ($client) { + // do nothing + } if (!$publicId || $publicId == '-1') { $client = Client::createNew(); } else { $client = Client::scope($publicId)->with('contacts')->firstOrFail(); diff --git a/app/Services/ClientService.php b/app/Services/ClientService.php index 6f7383b0fced..96357991c519 100644 --- a/app/Services/ClientService.php +++ b/app/Services/ClientService.php @@ -30,13 +30,13 @@ class ClientService extends BaseService return $this->clientRepo; } - public function save($data) + public function save($data, $client = null) { if (Auth::user()->account->isNinjaAccount() && isset($data['plan'])) { $this->ninjaRepo->updatePlanDetails($data['public_id'], $data); } - return $this->clientRepo->save($data); + return $this->clientRepo->save($data, $client); } public function getDatatable($search)