コード例 #1
0
ファイル: Installer.php プロジェクト: Bouhnosaure/Typesetter
 /**
  * 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;
 }