diff --git a/application/controllers/NodeController.php b/application/controllers/NodeController.php index 1d8fe0a..d557050 100644 --- a/application/controllers/NodeController.php +++ b/application/controllers/NodeController.php @@ -25,15 +25,6 @@ class NodeController extends Controller foreach ($this->storage()->listProcessNames() as $configName) { $config = $this->storage()->loadProcess($configName); - // TODO: Fix issues with children, they do not exist unless resolved :-/ - // This is a workaround: - foreach ($config->getRootNodes() as $node) { - $node->getState(); - } - foreach ($config->getRootNodes() as $node) { - $node->clearState(); - } - if (! $config->hasNode($name)) { continue; } diff --git a/library/Businessprocess/Node.php b/library/Businessprocess/Node.php index 856def7..0247382 100644 --- a/library/Businessprocess/Node.php +++ b/library/Businessprocess/Node.php @@ -50,7 +50,7 @@ abstract class Node * * @var array */ - protected $parents = array(); + protected $parents; /** * Node identifier @@ -286,7 +286,7 @@ abstract class Node public function hasParents() { - return count($this->parents) > 0; + return count($this->getParents()) > 0; } public function hasParentName($name) @@ -303,7 +303,7 @@ abstract class Node public function removeParent($name) { $this->parents = array_filter( - $this->parents, + $this->getParents(), function (BpNode $parent) use ($name) { return $parent->getName() !== $name; } @@ -317,6 +317,15 @@ abstract class Node */ public function getParents() { + if ($this->parents === null) { + $this->parents = []; + foreach ($this->bp->getBpNodes() as $name => $node) { + if ($node->hasChild($this->getName())) { + $this->parents[] = $node; + } + } + } + return $this->parents; } @@ -330,7 +339,7 @@ abstract class Node } $paths = array(); - foreach ($this->parents as $parent) { + foreach ($this->getParents() as $parent) { foreach ($parent->getPaths() as $path) { $path[] = $this->getName(); $paths[] = $path;