From 0fb7e7821a834a6d5d9b78d430fd23e110948747 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sat, 8 Jun 2019 23:49:40 +0200 Subject: [PATCH] dummy org chart / horrible logic and html --- Controller/BackendController.php | 47 +++++++++++ Theme/Backend/organigram.tpl.php | 132 ++++++++++++++++++++++++++++++- 2 files changed, 178 insertions(+), 1 deletion(-) 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 ?> -
asdf +
+ +
+ getParent()->getId()]['index'] = $unitTree[null][$unitEle['obj']->getParent()->getId()]['index'] + 1; + ?> + getId(); ?> +
+
getName(); ?>
+ + + +
+ +
+ getParent()->getId()]['index'] = $depTree[$unitId][$depEle['obj']->getParent()->getId()]['index'] + 1; + ?> + +
+
getName(); ?>
+ + +
    + getId(); + $posRoot = !isset($posTree[$depId]) ? [] : $posTree[$depId]; + + foreach ($posRoot as $posEle) : ?> +
    • + getParent()->getId()])) { + // here is a bug or somewhere else... the index is not moved correctly $c is always 0 + $posTree[$depId][$posEle['obj']->getParent()->getId()]['index'] = $posTree[$depId][$posEle['obj']->getParent()->getId()]['index'] + $c + 1; + } + + ?> + +
      • +
      • getName(); ?> +
        • + getParent(); + $parentPosId = $parentPos->getId(); + } while ($parentPosId !== \array_keys($posTree[$depId])[0] + && $parentPosId !== $depId + && $parentPosId !== 0 + && !isset($posTree[$depId][$parentPosId]['children'][($posTree[$depId][$parentPosId]['index'] ?? 0) + $c + 1]) + ); + } + + $posEle = []; + } // if no more children go back to parrent?> + ', $toClosePos); ?> + +
        + +
      + +
      + getParent(); + $parentDepId = $parentDep->getId(); + } while ($parentDepId !== 0 + && !isset($depTree[$unitId][$parentDepId]['children'][($depTree[$unitId][$parentDepId]['index'] ?? 0) + 1]) + ); + } + + $depEle = $depEle['children'][0] ?? []; + } // if no more children go back to parrent?> + ', $toCloseDep*2); ?> + +
      + +
+ + +
+ getParent(); + $parentUnitId = $parentUnit->getId(); + } while ($parentUnitId !== 0 + && !isset($unitTree[null][$parentUnitId]['children'][($unitTree[null][$parentUnitId]['index'] ?? 0) + 1]) + ); + } + + $unitEle = $unitEle['children'][0] ?? []; + } // if no more children go back to parrent?> + ', $toCloseUnit*2); ?> + +
+
\ No newline at end of file