diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 4a4d248..8c1ded1 100644 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -27,16 +27,9 @@ use Modules\Organization\Models\UnitMapper; use phpOMS\Message\RequestAbstract; use phpOMS\Message\ResponseAbstract; use phpOMS\Message\NotificationLevel; -use phpOMS\Module\ModuleAbstract; -use phpOMS\Module\WebInterface; -use phpOMS\Views\View; -use phpOMS\Message\Http\RequestStatusCode; use phpOMS\Utils\Parser\Markdown\Markdown; use phpOMS\System\MimeType; -use phpOMS\Account\PermissionType; -use Modules\Organization\Models\PermissionState; - /** * Organization Controller class. * diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 52261b5..b75bf4f 100644 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -14,28 +14,16 @@ declare(strict_types=1); namespace Modules\Organization\Controller; -use phpOMS\Model\Message\FormValidation; - use Modules\Organization\Models\Department; use Modules\Organization\Models\DepartmentMapper; use Modules\Organization\Models\Position; use Modules\Organization\Models\PositionMapper; -use Modules\Organization\Models\Status; use Modules\Organization\Models\Unit; use Modules\Organization\Models\UnitMapper; use phpOMS\Message\RequestAbstract; use phpOMS\Message\ResponseAbstract; -use phpOMS\Message\NotificationLevel; -use phpOMS\Module\ModuleAbstract; -use phpOMS\Module\WebInterface; use phpOMS\Views\View; -use phpOMS\Message\Http\RequestStatusCode; -use phpOMS\Utils\Parser\Markdown\Markdown; -use phpOMS\System\MimeType; - -use phpOMS\Account\PermissionType; -use Modules\Organization\Models\PermissionState; /** * Organization Controller class. diff --git a/Controller/Controller.php b/Controller/Controller.php index 9c86f0a..b841cbe 100644 --- a/Controller/Controller.php +++ b/Controller/Controller.php @@ -14,28 +14,8 @@ declare(strict_types=1); namespace Modules\Organization\Controller; -use phpOMS\Model\Message\FormValidation; - -use Modules\Organization\Models\Department; -use Modules\Organization\Models\DepartmentMapper; -use Modules\Organization\Models\Position; -use Modules\Organization\Models\PositionMapper; -use Modules\Organization\Models\Status; -use Modules\Organization\Models\Unit; -use Modules\Organization\Models\UnitMapper; - -use phpOMS\Message\RequestAbstract; -use phpOMS\Message\ResponseAbstract; -use phpOMS\Message\NotificationLevel; use phpOMS\Module\ModuleAbstract; use phpOMS\Module\WebInterface; -use phpOMS\Views\View; -use phpOMS\Message\Http\RequestStatusCode; -use phpOMS\Utils\Parser\Markdown\Markdown; -use phpOMS\System\MimeType; - -use phpOMS\Account\PermissionType; -use Modules\Organization\Models\PermissionState; /** * Organization Controller class. @@ -95,877 +75,4 @@ class Controller extends ModuleAbstract implements WebInterface * @since 1.0.0 */ protected static $dependencies = []; - - /** - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return \Serializable - * - * @since 1.0.0 - * @codeCoverageIgnore - */ - public function viewUnitList(RequestAbstract $request, ResponseAbstract $response, $data = null) : \Serializable - { - $view = new View($this->app, $request, $response); - - $view->setTemplate('/Modules/Organization/Theme/Backend/unit-list'); - $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004702001, $request, $response)); - - $view->addData('list:elements', UnitMapper::getAll()); - - return $view; - } - - /** - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return \Serializable - * - * @since 1.0.0 - * @codeCoverageIgnore - */ - public function viewUnitProfile(RequestAbstract $request, ResponseAbstract $response, $data = null) : \Serializable - { - $view = new View($this->app, $request, $response); - - $view->setTemplate('/Modules/Organization/Theme/Backend/unit-profile'); - $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004702001, $request, $response)); - - $selectorView = new \Modules\Organization\Theme\Backend\Components\UnitTagSelector\UnitTagSelectorView($this->app, $request, $response); - $view->addData('unit-selector', $selectorView); - - $view->addData('unit', UnitMapper::get((int) $request->getData('id'))); - - $editor = new \Modules\Editor\Theme\Backend\Components\Editor\BaseView($this->app, $request, $response); - $view->addData('editor', $editor); - - return $view; - } - - /** - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return \Serializable - * - * @since 1.0.0 - * @codeCoverageIgnore - */ - public function viewUnitCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : \Serializable - { - $view = new View($this->app, $request, $response); - - $view->setTemplate('/Modules/Organization/Theme/Backend/unit-create'); - $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004702001, $request, $response)); - - $selectorView = new \Modules\Organization\Theme\Backend\Components\UnitTagSelector\UnitTagSelectorView($this->app, $request, $response); - $view->addData('unit-selector', $selectorView); - - $editor = new \Modules\Editor\Theme\Backend\Components\Editor\BaseView($this->app, $request, $response); - $view->addData('editor', $editor); - - return $view; - } - - /** - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return \Serializable - * - * @since 1.0.0 - * @codeCoverageIgnore - */ - public function viewDepartmentList(RequestAbstract $request, ResponseAbstract $response, $data = null) : \Serializable - { - $view = new View($this->app, $request, $response); - - $view->setTemplate('/Modules/Organization/Theme/Backend/department-list'); - $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004703001, $request, $response)); - - $view->addData('list:elements', DepartmentMapper::getAll()); - - return $view; - } - - /** - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return \Serializable - * - * @since 1.0.0 - * @codeCoverageIgnore - */ - public function viewDepartmentProfile(RequestAbstract $request, ResponseAbstract $response, $data = null) : \Serializable - { - $view = new View($this->app, $request, $response); - - $view->setTemplate('/Modules/Organization/Theme/Backend/department-profile'); - $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004703001, $request, $response)); - - $selectorView = new \Modules\Organization\Theme\Backend\Components\DepartmentTagSelector\DepartmentTagSelectorView($this->app, $request, $response); - $view->addData('department-selector', $selectorView); - - $unitSelectorView = new \Modules\Organization\Theme\Backend\Components\UnitTagSelector\UnitTagSelectorView($this->app, $request, $response); - $view->addData('unit-selector', $unitSelectorView); - - $view->addData('department', DepartmentMapper::get((int) $request->getData('id'))); - - $editor = new \Modules\Editor\Theme\Backend\Components\Editor\BaseView($this->app, $request, $response); - $view->addData('editor', $editor); - - return $view; - } - - /** - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return \Serializable - * - * @since 1.0.0 - * @codeCoverageIgnore - */ - public function viewDepartmentCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : \Serializable - { - $view = new View($this->app, $request, $response); - - $view->setTemplate('/Modules/Organization/Theme/Backend/department-create'); - $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004703001, $request, $response)); - - $selectorView = new \Modules\Organization\Theme\Backend\Components\DepartmentTagSelector\DepartmentTagSelectorView($this->app, $request, $response); - $view->addData('department-selector', $selectorView); - - $unitSelectorView = new \Modules\Organization\Theme\Backend\Components\UnitTagSelector\UnitTagSelectorView($this->app, $request, $response); - $view->addData('unit-selector', $unitSelectorView); - - $editor = new \Modules\Editor\Theme\Backend\Components\Editor\BaseView($this->app, $request, $response); - $view->addData('editor', $editor); - - return $view; - } - - /** - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return \Serializable - * - * @since 1.0.0 - * @codeCoverageIgnore - */ - public function viewPositionList(RequestAbstract $request, ResponseAbstract $response, $data = null) : \Serializable - { - $view = new View($this->app, $request, $response); - - $view->setTemplate('/Modules/Organization/Theme/Backend/position-list'); - $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004704001, $request, $response)); - - $view->addData('list:elements', PositionMapper::getAll()); - - return $view; - } - - /** - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return \Serializable - * - * @since 1.0.0 - * @codeCoverageIgnore - */ - public function viewPositionProfile(RequestAbstract $request, ResponseAbstract $response, $data = null) : \Serializable - { - $view = new View($this->app, $request, $response); - - $view->setTemplate('/Modules/Organization/Theme/Backend/position-profile'); - $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004704001, $request, $response)); - - $selectorView = new \Modules\Organization\Theme\Backend\Components\PositionTagSelector\PositionTagSelectorView($this->app, $request, $response); - $view->addData('position-selector', $selectorView); - - $departmentSelectorView = new \Modules\Organization\Theme\Backend\Components\DepartmentTagSelector\DepartmentTagSelectorView($this->app, $request, $response); - $view->addData('department-selector', $departmentSelectorView); - - $view->addData('position', PositionMapper::get((int) $request->getData('id'))); - - $editor = new \Modules\Editor\Theme\Backend\Components\Editor\BaseView($this->app, $request, $response); - $view->addData('editor', $editor); - - return $view; - } - - /** - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return \Serializable - * - * @since 1.0.0 - * @codeCoverageIgnore - */ - public function viewPositionCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : \Serializable - { - $view = new View($this->app, $request, $response); - - $view->setTemplate('/Modules/Organization/Theme/Backend/position-create'); - $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004704001, $request, $response)); - - $selectorView = new \Modules\Organization\Theme\Backend\Components\PositionTagSelector\PositionTagSelectorView($this->app, $request, $response); - $view->addData('position-selector', $selectorView); - - $departmentSelectorView = new \Modules\Organization\Theme\Backend\Components\DepartmentTagSelector\DepartmentTagSelectorView($this->app, $request, $response); - $view->addData('department-selector', $departmentSelectorView); - - $editor = new \Modules\Editor\Theme\Backend\Components\Editor\BaseView($this->app, $request, $response); - $view->addData('editor', $editor); - - return $view; - } - - /** - * Validate unit create request - * - * @param RequestAbstract $request Request - * - * @return array - * - * @since 1.0.0 - */ - private function validateUnitCreate(RequestAbstract $request) : array - { - $val = []; - if (($val['name'] = empty($request->getData('name'))) - || ($val['parent'] = ( - !empty($request->getData('parent')) - && !\is_numeric($request->getData('parent')) - )) - || ($val['status'] = ( - $request->getData('status') === null - || !Status::isValidValue((int) $request->getData('status')) - )) - ) { - return $val; - } - - return []; - } - - /** - * Api method to get a unit - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiUnitGet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void - { - $unit = UnitMapper::get((int) $request->getData('id')); - - $response->getHeader()->set('Content-Type', MimeType::M_JSON, true); - $response->set($request->getUri()->__toString(), [ - 'status' => NotificationLevel::OK, - 'title' => 'Unit', - 'message' => 'Unit successfully returned.', - 'response' => $unit->jsonSerialize() - ]); - } - - /** - * Api method to update a unit - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiUnitSet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void - { - $unit = $this->updateUnitFromRequest($request); - - UnitMapper::update($unit); - - $response->getHeader()->set('Content-Type', MimeType::M_JSON, true); - $response->set($request->getUri()->__toString(), [ - 'status' => NotificationLevel::OK, - 'title' => 'Unit', - 'message' => 'Unit successfully updated.', - 'response' => $unit->jsonSerialize() - ]); - } - - /** - * Method to update unit from request. - * - * @param RequestAbstract $request Request - * - * @return Unit - * - * @since 1.0.0 - */ - private function updateUnitFromRequest(RequestAbstract $request) : Unit - { - $unit = UnitMapper::get((int) $request->getData('id')); - $unit->setName((string) ($request->getData('name') ?? $unit->getName())); - $unit->setDescriptionRaw((string) ($request->getData('description') ?? $unit->getDescriptionRaw())); - $unit->setDescription(Markdown::parse((string) ($request->getData('description') ?? $unit->getDescriptionRaw()))); - - $parent = (int) $request->getData('parent'); - $unit->setParent(!empty($parent) ? $parent : $unit->getParent()); - $unit->setStatus((int) ($request->getData('status') ?? $unit->getStatus())); - - return $unit; - } - - /** - * Api method to delete a unit - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiUnitDelete(RequestAbstract $request, ResponseAbstract $response, $data = null) : void - { - $unit = UnitMapper::get((int) $request->getData('id')); - $status = UnitMapper::delete($unit); - - $response->getHeader()->set('Content-Type', MimeType::M_JSON, true); - $response->set($request->getUri()->__toString(), [ - 'status' => NotificationLevel::OK, - 'title' => 'Unit', - 'message' => 'Unit successfully deleted.', - 'response' => $status - ]); - } - - /** - * Api method to create a unit - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiUnitCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void - { - if (!empty($val = $this->validateUnitCreate($request))) { - $response->set('unit_create', new FormValidation($val)); - - return; - } - - $unit = $this->createUnitFromRequest($request); - - UnitMapper::create($unit); - - $response->getHeader()->set('Content-Type', MimeType::M_JSON, true); - $response->set($request->getUri()->__toString(), [ - 'status' => NotificationLevel::OK, - 'title' => 'Unit', - 'message' => 'Unit successfully created.', - 'response' => $unit->jsonSerialize() - ]); - } - - /** - * Method to create unit from request. - * - * @param RequestAbstract $request Request - * - * @return Unit - * - * @since 1.0.0 - */ - private function createUnitFromRequest(RequestAbstract $request) : Unit - { - $unit = new Unit(); - $unit->setName((string) $request->getData('name')); - $unit->setDescriptionRaw((string) ($request->getData('description') ?? '')); - $unit->setDescription(Markdown::parse((string) ($request->getData('description') ?? ''))); - - $parent = (int) $request->getData('parent'); - $unit->setParent(!empty($parent) ? $parent : null); - $unit->setStatus((int) $request->getData('status')); - - return $unit; - } - - /** - * Validate position create request - * - * @param RequestAbstract $request Request - * - * @return array - * - * @since 1.0.0 - */ - private function validatePositionCreate(RequestAbstract $request) : array - { - $val = []; - if (($val['name'] = empty($request->getData('name'))) - || ($val['parent'] = ( - !empty($request->getData('parent')) - && !\is_numeric($request->getData('parent')) - )) - || ($val['status'] = ( - $request->getData('status') === null - || !Status::isValidValue((int) $request->getData('status')) - )) - ) { - return $val; - } - - return []; - } - - /** - * Api method to get a position - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiPositionGet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void - { - $position = PositionMapper::get((int) $request->getData('id')); - - $response->getHeader()->set('Content-Type', MimeType::M_JSON, true); - $response->set($request->getUri()->__toString(), [ - 'status' => NotificationLevel::OK, - 'title' => 'Position', - 'message' => 'Position successfully returned.', - 'response' => $position->jsonSerialize() - ]); - } - - /** - * Api method to delete a position - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiPositionDelete(RequestAbstract $request, ResponseAbstract $response, $data = null) : void - { - $position = PositionMapper::get((int) $request->getData('id')); - $status = PositionMapper::delete($position); - - $response->getHeader()->set('Content-Type', MimeType::M_JSON, true); - $response->set($request->getUri()->__toString(), [ - 'status' => NotificationLevel::OK, - 'title' => 'Position', - 'message' => 'Position successfully deleted.', - 'response' => $status - ]); - } - - /** - * Api method to update a position - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiPositionSet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void - { - $position = $this->updatePositionFromRequest($request); - - PositionMapper::update($position); - - $response->getHeader()->set('Content-Type', MimeType::M_JSON, true); - $response->set($request->getUri()->__toString(), [ - 'status' => NotificationLevel::OK, - 'title' => 'Position', - 'message' => 'Position successfully updated.', - 'response' => $position->jsonSerialize() - ]); - } - - /** - * Method to update position from request. - * - * @param RequestAbstract $request Request - * - * @return Position - * - * @since 1.0.0 - */ - private function updatePositionFromRequest(RequestAbstract $request) : Position - { - $position = PositionMapper::get((int) $request->getData('id')); - $position->setName((string) ($request->getData('name') ?? $position->getName())); - $position->setDescriptionRaw((string) ($request->getData('description') ?? $position->getDescriptionRaw())); - $position->setDescription(Markdown::parse((string) ($request->getData('description') ?? $position->getDescriptionRaw()))); - - $parent = (int) $request->getData('parent'); - $position->setParent(!empty($parent) ? $parent : $position->getParent()); - - $department = (int) $request->getData('department'); - $position->setDepartment(!empty($department) ? $department : $position->getDepartment()); - $position->setStatus((int) ($request->getData('status') ?? $position->getStatus())); - - return $position; - } - - /** - * Api method to create a position - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiPositionCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void - { - if (!empty($val = $this->validatePositionCreate($request))) { - $response->set('position_create', new FormValidation($val)); - - return; - } - - $position = $this->createPositionFromRequest($request); - - PositionMapper::create($position); - - $response->getHeader()->set('Content-Type', MimeType::M_JSON, true); - $response->set($request->getUri()->__toString(), [ - 'status' => NotificationLevel::OK, - 'title' => 'Position', - 'message' => 'Position successfully created.', - 'response' => $position->jsonSerialize() - ]); - } - - /** - * Method to create position from request. - * - * @param RequestAbstract $request Request - * - * @return Position - * - * @since 1.0.0 - */ - private function createPositionFromRequest(RequestAbstract $request) : Position - { - $position = new Position(); - $position->setName((string) ($request->getData('name'))); - $position->setStatus((int) $request->getData('status')); - $position->setDescriptionRaw((string) ($request->getData('description') ?? '')); - $position->setDescription(Markdown::parse((string) ($request->getData('description') ?? ''))); - - $parent = (int) $request->getData('parent'); - $position->setParent(!empty($parent) ? $parent : null); - - $department = (int) $request->getData('department'); - $position->setDepartment(!empty($department) ? $department : null); - - return $position; - } - - /** - * Method to validate department creation from request - * - * @param RequestAbstract $request Request - * - * @return array - * - * @since 1.0.0 - */ - private function validateDepartmentCreate(RequestAbstract $request) : array - { - $val = []; - if (($val['name'] = empty($request->getData('name'))) - || ($val['parent'] = ( - !empty($request->getData('parent')) - && !\is_numeric($request->getData('parent')) - )) - || ($val['unit'] = ( - !\is_numeric($request->getData('unit')) - )) - ) { - return $val; - } - - return []; - } - - /** - * Api method to get a department - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiDepartmentGet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void - { - $department = DepartmentMapper::get((int) $request->getData('id')); - - $response->getHeader()->set('Content-Type', MimeType::M_JSON, true); - $response->set($request->getUri()->__toString(), [ - 'status' => NotificationLevel::OK, - 'title' => 'Department', - 'message' => 'Department successfully returned.', - 'response' => $department->jsonSerialize() - ]); - } - - /** - * Api method to update a department - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiDepartmentSet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void - { - $department = $this->updateDepartmentFromRequest($request); - - DepartmentMapper::update($department); - - $response->getHeader()->set('Content-Type', MimeType::M_JSON, true); - $response->set($request->getUri()->__toString(), [ - 'status' => NotificationLevel::OK, - 'title' => 'Department', - 'message' => 'Department successfully updated.', - 'response' => $department->jsonSerialize() - ]); - } - - /** - * Method to update department from request. - * - * @param RequestAbstract $request Request - * - * @return Department - * - * @since 1.0.0 - */ - private function updateDepartmentFromRequest(RequestAbstract $request) : Department - { - $department = DepartmentMapper::get((int) $request->getData('id')); - $department->setName((string) ($request->getData('name') ?? $department->getName())); - $department->setDescriptionRaw((string) ($request->getData('description') ?? $department->getDescriptionRaw())); - $department->setDescription(Markdown::parse((string) ($request->getData('description') ?? $department->getDescriptionRaw()))); - - $parent = (int) $request->getData('parent'); - $department->setParent(!empty($parent) ? $parent : $department->getParent()); - $department->setStatus((int) ($request->getData('status') ?? $department->getStatus())); - - $unit = (int) $request->getData('unit'); - $department->setUnit(!empty($unit) ? $unit : $department->getUnit()); - - return $department; - } - - /** - * Api method to delete a department - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiDepartmentDelete(RequestAbstract $request, ResponseAbstract $response, $data = null) : void - { - $department = DepartmentMapper::get((int) $request->getData('id')); - $status = DepartmentMapper::delete($department); - - $response->getHeader()->set('Content-Type', MimeType::M_JSON, true); - $response->set($request->getUri()->__toString(), [ - 'status' => NotificationLevel::OK, - 'title' => 'Department', - 'message' => 'Department successfully deleted.', - 'response' => $status - ]); - } - - /** - * Api method to create a department - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiDepartmentCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void - { - if (!empty($val = $this->validateDepartmentCreate($request))) { - $response->set('department_create', new FormValidation($val)); - - return; - } - - $department = $this->createDepartmentFromRequest($request); - - DepartmentMapper::create($department); - - $response->getHeader()->set('Content-Type', MimeType::M_JSON, true); - $response->set($request->getUri()->__toString(), [ - 'status' => NotificationLevel::OK, - 'title' => 'Department', - 'message' => 'Department successfully created.', - 'response' => $department->jsonSerialize() - ]); - } - - /** - * Method to create a department from a request - * - * @param RequestAbstract $request Request - * - * @return Department - * - * @since 1.0.0 - */ - private function createDepartmentFromRequest(RequestAbstract $request) : Department - { - $department = new Department(); - $department->setName((string) $request->getData('name')); - $department->setStatus((int) $request->getData('status')); - - $parent = (int) $request->getData('parent'); - $department->setParent(!empty($parent) ? $parent : null); - $department->setUnit((int) ($request->getData('unit') ?? 1)); - $department->setDescriptionRaw((string) ($request->getData('description') ?? '')); - $department->setDescription(Markdown::parse((string) ($request->getData('description') ?? ''))); - - return $department; - } - - /** - * Api method to find units - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiUnitFind(RequestAbstract $request, ResponseAbstract $response, $data = null) : void - { - $response->getHeader()->set('Content-Type', MimeType::M_JSON . '; charset=utf-8', true); - $response->set($request->getUri()->__toString(), array_values(UnitMapper::find((string) ($request->getData('search') ?? '')))); - } - - /** - * Api method to find departments - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiDepartmentFind(RequestAbstract $request, ResponseAbstract $response, $data = null) : void - { - $response->getHeader()->set('Content-Type', MimeType::M_JSON . '; charset=utf-8', true); - $response->set($request->getUri()->__toString(), array_values(DepartmentMapper::find((string) ($request->getData('search') ?? '')))); - } - - /** - * Api method to find positions - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiPositionFind(RequestAbstract $request, ResponseAbstract $response, $data = null) : void - { - $response->getHeader()->set('Content-Type', MimeType::M_JSON . '; charset=utf-8', true); - $response->set($request->getUri()->__toString(), array_values(PositionMapper::find((string) ($request->getData('search') ?? '')))); - } }