From 1185785dbd5fcb67e50d11333144900ad49d3b09 Mon Sep 17 00:00:00 2001 From: Mike Koch Date: Fri, 18 Aug 2017 08:15:50 -0400 Subject: [PATCH] Should be able to create categories now... --- .../Categories/CategoryHandler.php | 15 +++++++-- .../Categories/CategoryController.php | 33 ++++++++++++++++++- api/RequestMethod.php | 10 ++++++ api/index.php | 12 +++++-- 4 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 api/RequestMethod.php diff --git a/api/BusinessLogic/Categories/CategoryHandler.php b/api/BusinessLogic/Categories/CategoryHandler.php index 4d1111a6..0cca431d 100644 --- a/api/BusinessLogic/Categories/CategoryHandler.php +++ b/api/BusinessLogic/Categories/CategoryHandler.php @@ -3,6 +3,7 @@ namespace BusinessLogic\Categories; +use BusinessLogic\Exceptions\ValidationException; use BusinessLogic\ValidationModel; use DataAccess\Categories\CategoryGateway; @@ -17,11 +18,20 @@ class CategoryHandler { /** * @param $category Category * @param $heskSettings array + * @return Category The newly created category with ID + * @throws ValidationException When validation fails */ + //TODO Test function createCategory($category, $heskSettings) { + $validationModel = $this->validate($category, $heskSettings); + if (count($validationModel->errorKeys) > 0) { + throw new ValidationException($validationModel); + } - $this->categoryGateway->createCategory($category, $heskSettings); + $category->id = $this->categoryGateway->createCategory($category, $heskSettings); + + return $category; } /** @@ -30,7 +40,8 @@ class CategoryHandler { * @param $creating bool * @return ValidationModel */ - function validate($category, $heskSettings, $creating = true) { + //TODO Test + private function validate($category, $heskSettings, $creating = true) { $validationModel = new ValidationModel(); if (!$creating && $category->id < 1) { $validationModel->errorKeys[] = 'ID_MISSING'; diff --git a/api/Controllers/Categories/CategoryController.php b/api/Controllers/Categories/CategoryController.php index bb729ca7..a739ab45 100644 --- a/api/Controllers/Categories/CategoryController.php +++ b/api/Controllers/Categories/CategoryController.php @@ -2,8 +2,11 @@ namespace Controllers\Categories; +use BusinessLogic\Categories\Category; +use BusinessLogic\Categories\CategoryHandler; use BusinessLogic\Categories\CategoryRetriever; use BusinessLogic\Exceptions\ApiFriendlyException; +use BusinessLogic\Helpers; use Controllers\JsonRetriever; class CategoryController { @@ -31,9 +34,37 @@ class CategoryController { } function post() { - //-- TODO: Create Category + global $hesk_settings, $applicationContext; + $data = JsonRetriever::getJsonData(); + $category = $this->buildCategoryFromJson($data); + + /* @var $categoryHandler CategoryHandler */ + $categoryHandler = $applicationContext->get[CategoryHandler::class]; + + $category = $categoryHandler->createCategory($category, $hesk_settings); + + return output($category); + } + + private function buildCategoryFromJson($json) { + $category = new Category(); + + $category->id = Helpers::safeArrayGet($json, 'id'); + $category->autoAssign = Helpers::safeArrayGet($json, 'autoassign'); + $category->backgroundColor = Helpers::safeArrayGet($json, 'backgroundColor'); + $category->catOrder = Helpers::safeArrayGet($json, 'order'); + $category->description = Helpers::safeArrayGet($json, 'description'); + $category->displayBorder = Helpers::safeArrayGet($json, 'displayBorder'); + $category->foregroundColor = Helpers::safeArrayGet($json, 'foregroundColor'); + $category->manager = Helpers::safeArrayGet($json, 'manager'); + $category->name = Helpers::safeArrayGet($json, 'name'); + $category->priority = Helpers::safeArrayGet($json, 'priority'); + $category->type = Helpers::safeArrayGet($json, 'type'); + $category->usage = Helpers::safeArrayGet($json, 'usage'); + + return $category; } function put($id) { diff --git a/api/RequestMethod.php b/api/RequestMethod.php new file mode 100644 index 00000000..e692c03d --- /dev/null +++ b/api/RequestMethod.php @@ -0,0 +1,10 @@ + action(\Controllers\Categories\CategoryController::class . '::printAllCategories'), + '/v1/categories' => action(\Controllers\Categories\CategoryController::class . '::printAllCategories', [RequestMethod::GET]), '/v1/categories/{i}' => action(\Controllers\Categories\CategoryController::class), // Tickets '/v1/tickets' => action(\Controllers\Tickets\CustomerTicketController::class), @@ -225,8 +225,14 @@ Link::all(array( '404' => 'handle404' )); -function action($class, $securityHandler = SecurityHandler::AUTH_TOKEN) { - return [$class, $class, $securityHandler]; +/** + * @param $class object|string The class name (and optional static method) + * @param $requestMethods array The accepted request methods for this endpoint + * @param $securityHandler string The proper security handler + * @return array The configured path + */ +function action($class, $requestMethods = RequestMethod::ALL, $securityHandler = SecurityHandler::AUTH_TOKEN) { + return [$class, $class, $securityHandler, $requestMethods]; } class SecurityHandler {