diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 3d619e8..b353197 100644 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -15,8 +15,11 @@ declare(strict_types=1); namespace Modules\Organization\Controller; use Modules\Organization\Models\DepartmentMapper; +use Modules\Organization\Models\Department; use Modules\Organization\Models\PositionMapper; +use Modules\Organization\Models\Position; use Modules\Organization\Models\UnitMapper; +use Modules\Organization\Models\Unit; use phpOMS\Contract\RenderableInterface; use phpOMS\Message\RequestAbstract; @@ -99,9 +102,53 @@ final class BackendController extends Controller $view->setTemplate('/Modules/Organization/Theme/Backend/organigram'); + $units = UnitMapper::getAll(); + $unitTree = $this->createOrgTree($units); + $view->setData('unitTree', $unitTree); + + $departments = DepartmentMapper::getAll(); + $depTree = $this->createOrgTree($departments); + $view->setData('departmentTree', $depTree); + + $positions = PositionMapper::getAll(); + $posTree = $this->createOrgTree($positions); + $view->setData('positionTree', $posTree); + return $view; } + private function createOrgTree($components) : array + { + $tree = []; + foreach ($components as $component) { + $ref = null; + if ($component instanceof Department) { + $ref = $component->getUnit()->getId(); + } elseif ($component instanceof Position) { + $ref = $component->getDepartment()->getId(); + } + + if (!isset($tree[$ref][$component->getId()])) { + $tree[$ref][$component->getId()] = ['obj' => null, 'children' => [], 'index' => 0]; + } + + $tree[$ref][$component->getId()]['obj'] = $component; + + $parent = $component->getParent()->getId(); + if (!($component instanceof Position) // parent could be in different department then ignore + || $component->getParent()->getDepartment()->getId() === $component->getDepartment()->getId() + ) { + if (!isset($tree[$ref][$parent])) { + $tree[$ref][$parent] = ['obj' => null, 'children' => [], 'index' => 0]; + } + + $tree[$ref][$parent]['children'][] = &$tree[$ref][$component->getId()]; + } + } + + return $tree; + } + /** * @param RequestAbstract $request Request * @param ResponseAbstract $response Response diff --git a/Theme/Backend/organigram.tpl.php b/Theme/Backend/organigram.tpl.php index 74fa83b..3250ab9 100644 --- a/Theme/Backend/organigram.tpl.php +++ b/Theme/Backend/organigram.tpl.php @@ -13,7 +13,137 @@ /** * @var \phpOMS\Views\View $this */ +$unitTree = $this->getData('unitTree'); +$depTree = $this->getData('departmentTree'); +$posTree = $this->getData('positionTree'); +$unitRoot = $unitTree[null][0]['children']; +// units +// departments +// positions ?> -