public static function install($data, &$fail, &$errno, &$error) { $fail = false; $url = $data['PL']['init']; $components = array(); // inits all components $result = Request::get($data['PL']['url'] . '/' . $url . '/definition/send', array(), ''); //echo $result['content']; if (isset($result['content']) && isset($result['status'])) { // component routers $router = array(); $results = Component::decodeComponent($result['content']); $results = Installation::orderBy(json_decode(Component::encodeComponent($results), true), 'name', SORT_ASC); $results = Component::decodeComponent(json_encode($results)); if (!is_array($results)) { $results = array($results); } if (count($results) == 0) { $fail = true; $error = Language::Get('components', 'noComponents'); } foreach ($results as $res) { $components[$res->getName()] = array(); $components[$res->getName()]['init'] = $res; } // get component definitions from database $result4 = Request::get($data['PL']['url'] . '/' . $url . '/definition', array(), ''); if (isset($result4['content']) && isset($result4['status']) && $result4['status'] === 200) { $definitions = Component::decodeComponent($result4['content']); if (!is_array($definitions)) { $definitions = array($definitions); } if (count($definitions) == 0) { $fail = true; $error = Language::Get('components', 'noDefinitions'); } $result2 = new Request_MultiRequest(); $result3 = new Request_MultiRequest(); $tempDef = array(); foreach ($definitions as $definition) { if (strpos($definition->getAddress() . '/', $data['PL']['urlExtern'] . '/') === false) { continue; } $components[$definition->getName()]['definition'] = $definition; $tempDef[] = $definition; $request = Request_CreateRequest::createGet($definition->getAddress() . '/info/commands', array(), ''); $result2->addRequest($request); $request = Request_CreateRequest::createGet($definition->getAddress() . '/info/links', array(), ''); $result3->addRequest($request); } $definitions = $tempDef; $result2 = $result2->run(); $result3 = $result3->run(); foreach ($results as $res) { if ($res === null) { $fail = true; continue; } $countLinks = 0; $resultCounter = -1; foreach ($definitions as $definition) { //if (strpos($definition->getAddress().'/', $data['PL']['urlExtern'].'/')===false) continue; $resultCounter++; if ($definition->getId() === $res->getId()) { $links = $definition->getLinks(); $links = Installation::orderBy(json_decode(Link::encodeLink($links), true), 'name', SORT_ASC); $links = Link::decodeLink(json_encode($links)); if (!is_array($links)) { $links = array($links); } $components[$definition->getName()]['links'] = $links; if (isset($result2[$resultCounter]['content']) && isset($result2[$resultCounter]['status']) && $result2[$resultCounter]['status'] === 200) { $commands = json_decode($result2[$resultCounter]['content'], true); if ($commands !== null) { $components[$definition->getName()]['commands'] = $commands; } } if (isset($result3[$resultCounter]['content']) && isset($result3[$resultCounter]['status']) && $result3[$resultCounter]['status'] === 200) { $calls = json_decode($result3[$resultCounter]['content'], true); $components[$definition->getName()]['call'] = $calls; } break; } } if ($res->getStatus() !== 201) { $fail = true; } } } else { $fail = true; $error = Language::Get('components', 'noDefinitions'); } } else { $fail = true; $error = Language::Get('components', 'operationFailed'); } if (isset($result['status']) && $result['status'] !== 200) { $fail = true; $error = Language::Get('components', 'operationFailed'); $errno = $result['status']; } return $components; }