Exemplo n.º 1
0
 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;
 }