app->l11nManager, $request, $response); $view->setTemplate('/Modules/Organization/Theme/Backend/unit-list'); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004703001, $request, $response)); if ($request->getData('ptype') === 'p') { $view->setData('units', UnitMapper::getAll()->with('parent')->with('image')->where('id', (int) ($request->getData('id') ?? 0), '<')->limit(25)->execute()); } elseif ($request->getData('ptype') === 'n') { $view->setData('units', UnitMapper::getAll()->with('parent')->with('image')->where('id', (int) ($request->getData('id') ?? 0), '>')->limit(25)->execute()); } else { $view->setData('units', UnitMapper::getAll()->with('parent')->with('image')->where('id', 0, '>')->limit(25)->execute()); } return $view; } /** * Routing end-point for application behaviour. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param mixed $data Generic data * * @return RenderableInterface * * @since 1.0.0 * @codeCoverageIgnore */ public function viewUnitProfile(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface { $view = new View($this->app->l11nManager, $request, $response); $view->setTemplate('/Modules/Organization/Theme/Backend/unit-profile'); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004703001, $request, $response)); $selectorView = new \Modules\Organization\Theme\Backend\Components\UnitTagSelector\UnitTagSelectorView($this->app->l11nManager, $request, $response); $view->addData('unit-selector', $selectorView); $view->addData('unit', UnitMapper::get()->with('parent')->with('image')->where('id', (int) $request->getData('id'))->execute()); $editor = new \Modules\Editor\Theme\Backend\Components\Editor\BaseView($this->app->l11nManager, $request, $response); $view->addData('editor', $editor); return $view; } /** * Routing end-point for application behaviour. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param mixed $data Generic data * * @return RenderableInterface * * @since 1.0.0 * @codeCoverageIgnore */ public function viewOrganigram(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface { $response->get('Content') ->getData('head') ->addAsset(AssetType::CSS, 'Modules/Organization/Theme/Backend/css/styles.css'); $view = new View($this->app->l11nManager, $request, $response); $view->setTemplate('/Modules/Organization/Theme/Backend/organigram'); /** @var Unit[] $units */ $units = UnitMapper::getAll()->with('parent')->execute(); $unitTree = $this->createOrgTree($units); $view->setData('unitTree', $unitTree); /** @var Department[] $departments */ $departments = DepartmentMapper::getAll()->with('parent')->with('unit')->execute(); $depTree = $this->createOrgTree($departments); $view->setData('departmentTree', $depTree); /** @var Position[] $positions */ $positions = PositionMapper::getAll()->with('parent')->with('unit')->with('department')->execute(); $posTree = $this->createOrgTree($positions); $view->setData('positionTree', $posTree); return $view; } /** * Create organization tree * * @param array $components Componants to form tree for * * @return array * * @since 1.0.0 * @codeCoverageIgnore */ private function createOrgTree(array $components) : array { $tree = []; foreach ($components as $component) { $ref = null; if ($component instanceof Department) { $ref = $component->unit->getId(); } elseif ($component instanceof Position) { $ref = $component->department->getId(); } if (!isset($tree[$ref])) { $tree[$ref] = []; } if (!isset($tree[$ref][$component->getId()])) { $tree[$ref][$component->getId()] = ['obj' => null, 'children' => [], 'index' => 0]; } $tree[$ref][$component->getId()]['obj'] = $component; $parent = $component->parent->getId(); if (!($component instanceof Position) // parent could be in different department then ignore || (!($component->parent instanceof NullPosition) && $component->parent->department->getId() === $component->department->getId()) ) { if (!isset($tree[$ref][$parent])) { $tree[$ref][$parent] = ['obj' => null, 'children' => [], 'index' => 0]; } // For some stupid reason the next line is too complicated for phpstan and the error it creates is insane/wrong! /** @phpstan-ignore-next-line */ $tree[$ref][$parent]['children'][] = &$tree[$ref][$component->getId()]; } } return $tree; } /** * Routing end-point for application behaviour. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param mixed $data Generic data * * @return RenderableInterface * * @since 1.0.0 * @codeCoverageIgnore */ public function viewUnitCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface { $view = new View($this->app->l11nManager, $request, $response); $view->setTemplate('/Modules/Organization/Theme/Backend/unit-create'); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004703001, $request, $response)); $uploadView = new \Modules\Media\Theme\Backend\Components\InlinePreview\BaseView($this->app->l11nManager, $request, $response); $view->addData('media-preview-upload', $uploadView); $selectorView = new \Modules\Organization\Theme\Backend\Components\UnitTagSelector\UnitTagSelectorView($this->app->l11nManager, $request, $response); $view->addData('unit-selector', $selectorView); $editor = new \Modules\Editor\Theme\Backend\Components\Editor\BaseView($this->app->l11nManager, $request, $response); $view->addData('editor', $editor); return $view; } /** * Routing end-point for application behaviour. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param mixed $data Generic data * * @return RenderableInterface * * @since 1.0.0 * @codeCoverageIgnore */ public function viewDepartmentList(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface { $view = new View($this->app->l11nManager, $request, $response); $view->setTemplate('/Modules/Organization/Theme/Backend/department-list'); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004704001, $request, $response)); if ($request->getData('ptype') === 'p') { $view->setData('departments', DepartmentMapper::getAll()->with('parent')->with('unit')->where('id', (int) ($request->getData('id') ?? 0), '<')->limit(25)->execute()); } elseif ($request->getData('ptype') === 'n') { $view->setData('departments', DepartmentMapper::getAll()->with('parent')->with('unit')->where('id', (int) ($request->getData('id') ?? 0), '>')->limit(25)->execute()); } else { $view->setData('departments', DepartmentMapper::getAll()->with('parent')->with('unit')->where('id', 0, '>')->limit(25)->execute()); } return $view; } /** * Routing end-point for application behaviour. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param mixed $data Generic data * * @return RenderableInterface * * @since 1.0.0 * @codeCoverageIgnore */ public function viewDepartmentProfile(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface { $view = new View($this->app->l11nManager, $request, $response); $view->setTemplate('/Modules/Organization/Theme/Backend/department-profile'); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004704001, $request, $response)); $selectorView = new \Modules\Organization\Theme\Backend\Components\DepartmentTagSelector\DepartmentTagSelectorView($this->app->l11nManager, $request, $response); $view->addData('department-selector', $selectorView); $unitSelectorView = new \Modules\Organization\Theme\Backend\Components\UnitTagSelector\UnitTagSelectorView($this->app->l11nManager, $request, $response); $view->addData('unit-selector', $unitSelectorView); $view->addData('department', DepartmentMapper::get()->with('parent')->with('unit')->where('id', (int) $request->getData('id'))->execute()); $editor = new \Modules\Editor\Theme\Backend\Components\Editor\BaseView($this->app->l11nManager, $request, $response); $view->addData('editor', $editor); return $view; } /** * Routing end-point for application behaviour. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param mixed $data Generic data * * @return RenderableInterface * * @since 1.0.0 * @codeCoverageIgnore */ public function viewDepartmentCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface { $view = new View($this->app->l11nManager, $request, $response); $view->setTemplate('/Modules/Organization/Theme/Backend/department-create'); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004704001, $request, $response)); $selectorView = new \Modules\Organization\Theme\Backend\Components\DepartmentTagSelector\DepartmentTagSelectorView($this->app->l11nManager, $request, $response); $view->addData('department-selector', $selectorView); $unitSelectorView = new \Modules\Organization\Theme\Backend\Components\UnitTagSelector\UnitTagSelectorView($this->app->l11nManager, $request, $response); $view->addData('unit-selector', $unitSelectorView); $editor = new \Modules\Editor\Theme\Backend\Components\Editor\BaseView($this->app->l11nManager, $request, $response); $view->addData('editor', $editor); return $view; } /** * Routing end-point for application behaviour. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param mixed $data Generic data * * @return RenderableInterface * * @since 1.0.0 * @codeCoverageIgnore */ public function viewPositionList(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface { $view = new View($this->app->l11nManager, $request, $response); $view->setTemplate('/Modules/Organization/Theme/Backend/position-list'); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004705001, $request, $response)); if ($request->getData('ptype') === 'p') { $view->setData('positions', PositionMapper::getAll()->with('parent')->with('department')->where('id', (int) ($request->getData('id') ?? 0), '<')->limit(25)->execute()); } elseif ($request->getData('ptype') === 'n') { $view->setData('positions', PositionMapper::getAll()->with('parent')->with('department')->where('id', (int) ($request->getData('id') ?? 0), '>')->limit(25)->execute()); } else { $view->setData('positions', PositionMapper::getAll()->with('parent')->with('department')->where('id', 0, '>')->limit(25)->execute()); } return $view; } /** * Routing end-point for application behaviour. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param mixed $data Generic data * * @return RenderableInterface * * @since 1.0.0 * @codeCoverageIgnore */ public function viewPositionProfile(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface { $view = new View($this->app->l11nManager, $request, $response); $view->setTemplate('/Modules/Organization/Theme/Backend/position-profile'); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004705001, $request, $response)); $selectorView = new \Modules\Organization\Theme\Backend\Components\PositionTagSelector\PositionTagSelectorView($this->app->l11nManager, $request, $response); $view->addData('position-selector', $selectorView); $departmentSelectorView = new \Modules\Organization\Theme\Backend\Components\DepartmentTagSelector\DepartmentTagSelectorView($this->app->l11nManager, $request, $response); $view->addData('department-selector', $departmentSelectorView); $view->addData('position', PositionMapper::get()->with('parent')->with('department')->where('id', (int) $request->getData('id'))->execute()); $editor = new \Modules\Editor\Theme\Backend\Components\Editor\BaseView($this->app->l11nManager, $request, $response); $view->addData('editor', $editor); return $view; } /** * Routing end-point for application behaviour. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param mixed $data Generic data * * @return RenderableInterface * * @since 1.0.0 * @codeCoverageIgnore */ public function viewPositionCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface { $view = new View($this->app->l11nManager, $request, $response); $view->setTemplate('/Modules/Organization/Theme/Backend/position-create'); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1004705001, $request, $response)); $selectorView = new \Modules\Organization\Theme\Backend\Components\PositionTagSelector\PositionTagSelectorView($this->app->l11nManager, $request, $response); $view->addData('position-selector', $selectorView); $departmentSelectorView = new \Modules\Organization\Theme\Backend\Components\DepartmentTagSelector\DepartmentTagSelectorView($this->app->l11nManager, $request, $response); $view->addData('department-selector', $departmentSelectorView); $editor = new \Modules\Editor\Theme\Backend\Components\Editor\BaseView($this->app->l11nManager, $request, $response); $view->addData('editor', $editor); return $view; } }