Altax\Module\Task\Process\Executor::loadNodes PHP Method

loadNodes() protected method

Load nods from variable length argument lists same 'on' and 'for' method.
protected loadNodes ( array $args ) : array
$args array
return array Array of Altax\Module\Server\Resource\Node
    protected function loadNodes(array $args)
    {
        $candidateNodeNames = array();
        $concreteNodes = array();
        if (Arr::isVector($args)) {
            foreach ($args as $arg) {
                if (is_string($arg)) {
                    $candidateNodeNames[] = array("type" => null, "name" => $arg);
                }
            }
        } else {
            foreach ($args as $key => $value) {
                if ($key == "nodes" || $key == "node") {
                    $nodes = array();
                    if (is_string($value)) {
                        $nodes[] = $value;
                    } elseif (is_array($value)) {
                        $nodes = $value;
                    }
                    foreach ($nodes as $node) {
                        $candidateNodeNames[] = array("type" => "node", "name" => $node);
                    }
                }
                if ($key == "roles" || $key == "role") {
                    $roles = array();
                    if (is_string($value)) {
                        $roles[] = $value;
                    } elseif (is_array($value)) {
                        $roles = $value;
                    }
                    foreach ($roles as $role) {
                        $candidateNodeNames[] = array("type" => "role", "name" => $role);
                    }
                }
            }
        }
        foreach ($candidateNodeNames as $candidateNodeName) {
            $node = null;
            $role = null;
            if ($candidateNodeName["type"] === null || $candidateNodeName["type"] == "node") {
                $node = Server::getNode($candidateNodeName["name"]);
            }
            if ($candidateNodeName["type"] === null || $candidateNodeName["type"] == "role") {
                $role = Server::getRole($candidateNodeName["name"]);
            }
            if ($node && $role) {
                throw new \RuntimeException("The key '" . $candidateNodeName["name"] . "' was found in both nodes and roles. So It couldn't identify to unique node.");
            }
            if (!$node && !$role && ($candidateNodeName["type"] === null || $candidateNodeName["type"] == "node")) {
                // Passed unregistered node name. Create node instance.
                $node = new Node();
                $node->setName($candidateNodeName["name"]);
            }
            if ($node) {
                $concreteNodes[$node->getName()] = $node;
            }
            if ($role) {
                foreach ($role as $nodeName) {
                    $concreteNodes[$nodeName] = Server::getNode($nodeName);
                }
            }
        }
        return $concreteNodes;
    }