/** * Get the remote package * */ public function GetRemote() { global $langmessage, $dataDir; // check values if (empty($this->type) || empty($this->id) || !is_numeric($this->id)) { $this->message($langmessage['OOPS'] . ' (Invalid Request)'); return false; } // download url $download_url = \gp\admin\Tools::RemoteUrl($this->type); // allowed to remote install? if ($download_url === false) { $this->message($langmessage['OOPS'] . ' (Can\'t remote install ' . $this->type . ')'); return false; } $download_url .= '?cmd=install&id=' . rawurlencode($this->id); // purchase order id if (is_null($this->order)) { $this->order = $this->GetOrder($this->id); } if (!is_null($this->order)) { $download_url .= '&order=' . rawurlencode($this->order); } // able to remote install? if (!\gp\admin\Tools::CanRemoteInstall()) { $this->message($langmessage['OOPS'] . ' (Can\'t remote install)'); return false; } // get package from remote $full_result = \gp\tool\RemoteGet::Get($download_url); if ((int) $full_result['response']['code'] < 200 && (int) $full_result['response']['code'] >= 300) { $this->message($langmessage['download_failed'] . ' (1)'); return false; } // download failed and a message was sent if (isset($full_result['headers']['x-error'])) { $this->message(htmlspecialchars($full_result['headers']['x-error'])); $this->message(sprintf($langmessage['download_failed_xerror'], 'href="' . self::DetailUrl($_POST['type'], $_POST['id']) . '" data-cmd="remote"')); return false; } $result = $full_result['body']; $md5 =& $full_result['headers']['x-md5']; //check md5 $package_md5 = md5($result); if ($package_md5 != $md5) { $this->message($langmessage['download_failed_md5'] . ' <br/> (Package Checksum ' . $package_md5 . ' != Expected Checksum ' . $md5 . ')'); return false; } //save contents $tempfile = $dataDir . \gp\tool\FileSystem::TempFile('/data/_temp/addon', '.zip'); if (!\gp\tool\Files::Save($tempfile, $result)) { $this->message($langmessage['download_failed'] . ' (Package not saved)'); return false; } $this->source = $this->TempFile(); $success = $this->ExtractArchive($tempfile); unlink($tempfile); return $success; }