diff --git a/application/forms/AddNodeForm.php b/application/forms/AddNodeForm.php index bda7d4d..b44cfcc 100644 --- a/application/forms/AddNodeForm.php +++ b/application/forms/AddNodeForm.php @@ -327,9 +327,15 @@ class AddNodeForm extends QuickForm { $list = array(); + $parents = array(); + + if ($this->hasParentNode()) { + $this->collectAllParents($this->parent, $parents); + $parents[$this->parent->getName()] = $this->parent; + } + foreach ($this->bp->getNodes() as $node) { - if ($node instanceof BpNode) { - // TODO: Blacklist parents + if ($node instanceof BpNode && ! isset($parents[$node->getName()])) { $list[(string) $node] = (string) $node; // display name? } } @@ -338,6 +344,20 @@ class AddNodeForm extends QuickForm return $list; } + /** + * Collect the given node's parents recursively into the given array by their names + * + * @param BpNode $node + * @param BpNode[] $parents + */ + protected function collectAllParents(BpNode $node, array & $parents) + { + foreach ($node->getParents() as $parent) { + $parents[$parent->getName()] = $parent; + $this->collectAllParents($parent, $parents); + } + } + protected function fetchObjectList() { $this->objectList = array();