From cef141fae412f0beb864df58a6ab6c5c40c827b1 Mon Sep 17 00:00:00 2001 From: Steve Boyd Date: Thu, 9 Oct 2025 14:14:37 +1300 Subject: [PATCH] ENH Add aria attrs to site tree --- src/ORM/Hierarchy/MarkedSet.php | 1 + tests/php/ORM/MarkedSetTest.php | 42 +++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/ORM/Hierarchy/MarkedSet.php b/src/ORM/Hierarchy/MarkedSet.php index c82a22aac4f..7c6042111dd 100644 --- a/src/ORM/Hierarchy/MarkedSet.php +++ b/src/ORM/Hierarchy/MarkedSet.php @@ -420,6 +420,7 @@ protected function getSubtree($node, $depth = 0) 'expanded' => $expanded, 'opened' => $opened, 'depth' => $depth, + 'level' => $depth, 'count' => $count, // Count of DB children 'limited' => $limited, // Flag whether 'items' has been limited 'children' => [], // Children to return in this request diff --git a/tests/php/ORM/MarkedSetTest.php b/tests/php/ORM/MarkedSetTest.php index 42a5936db9b..302e86ed802 100644 --- a/tests/php/ORM/MarkedSetTest.php +++ b/tests/php/ORM/MarkedSetTest.php @@ -382,6 +382,32 @@ public function testGetChildrenAsULNodeDeletedOnStage() $this->assertEquals('unexpanded jstree-closed closed', $nodeClass, 'obj2 should have children in the sitetree'); } + public function testGetChildrenAsArrayIncludesLevel(): void + { + $obj3 = $this->objFromFixture(HierarchyTest\TestObject::class, 'obj3'); + $obj3a = $this->objFromFixture(HierarchyTest\TestObject::class, 'obj3a'); + $obj3aa = $this->objFromFixture(HierarchyTest\TestObject::class, 'obj3aa'); + + $set = new MarkedSet(HierarchyTest\TestObject::singleton(), 'AllChildrenIncludingDeleted', 'numChildren'); + $set->markPartialTree(); + $set->markToExpose($obj3aa); + + $tree = $set->getChildrenAsArray(function ($node) { + return [ + 'id' => $node->ID, + 'title' => $node->Title, + ]; + }); + $node3 = $this->findTreeNodeById($tree, $obj3->ID); + $node3a = $this->findTreeNodeById($tree, $obj3a->ID); + $node3aa = $this->findTreeNodeById($tree, $obj3aa->ID); + + $this->assertSame(0, $tree['level']); + $this->assertSame(1, $node3['level']); + $this->assertSame(2, $node3a['level']); + $this->assertSame(3, $node3aa['level']); + } + /** * @param string $html [description] @@ -436,6 +462,22 @@ protected function getNodeClassFromTree($html, $node) return ''; } + protected function findTreeNodeById(array $tree, int $id): array + { + if (($tree['id'] ?? null) === $id) { + return $tree; + } + + foreach ($tree['children'] ?? [] as $child) { + $result = $this->findTreeNodeById($child, $id); + if ($result) { + return $result; + } + } + + return []; + } + protected function assertHTMLSame($expected, $actual, $message = '') { // Trim each line, strip empty lines