]> _ Git - fluidbook-toolbox.git/commitdiff
wip #6091 @0:20
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 28 Jun 2023 17:09:55 +0000 (19:09 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 28 Jun 2023 17:09:55 +0000 (19:09 +0200)
app/Fluidbook/Packager/Download.php
app/Fluidbook/Packager/WorkshopPackager.php [new file with mode: 0644]
app/Services/WorkshopV2.php

index 9633db361441f2f9284021050c25874765bccfaf..ba67cfc9b40c2f4a59a79206319f00e4db889595 100644 (file)
@@ -139,7 +139,14 @@ class Download extends DownloadBase
 
     protected function _compileandpackage($zip = true)
     {
-        $packager = Packager::package($this->entry->id, $this->version, $zip, true, $this->_params);
+        if ($this->entry->version == 3) {
+            $packager = Packager::package($this->entry->id, $this->version, $zip, true, $this->_params);
+        } else {
+            $packager = new WorkshopPackager($this->entry->id, $this->version, null, $this->_params);
+            $packager->zipPackage = $zip;
+            $packager->cleanOnDestruct = true;
+            $packager->setUser($this->getUser());
+        }
         $packager->makePackage($zip);
         $url = $packager->getFinalURL();
         if ($url) {
diff --git a/app/Fluidbook/Packager/WorkshopPackager.php b/app/Fluidbook/Packager/WorkshopPackager.php
new file mode 100644 (file)
index 0000000..bec9ac7
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+
+namespace App\Fluidbook\Packager;
+
+use App\Services\WorkshopV2;
+
+class WorkshopPackager extends Packager
+{
+    protected $version;
+
+    protected static $_versionMap = [
+        'online' => 'html',
+    ];
+
+    public function __construct($book_id, $version, $vdir = null, $options = [])
+    {
+        parent::__construct($book_id, $vdir, $options);
+        $this->version = $version;
+    }
+
+    public function makePackage($zip)
+    {
+
+        $ws = new WorkshopV2();
+        $ws->login($this->getUser()->email, $this->getUser()->api_token);
+        $version = self::$_versionMap[$this->version] ?? $this->version;
+        $this->setFinalURL($ws->getDownloadBookURL($this->book_id, $version));
+    }
+}
index 5fe8ea55c8aedf5bee6a0194c710a49cb6ffef9f..d927c1e4d11198b25c66a3bd632611668e6ce94a 100644 (file)
@@ -11,6 +11,7 @@ use GuzzleHttp\Client;
 use GuzzleHttp\Cookie\FileCookieJar;
 use GuzzleHttp\Psr7\Request;
 use GuzzleHttp\Psr7\Utils;
+use Illuminate\Support\Facades\Log;
 use SplFileInfo;
 use stdClass;
 
@@ -21,12 +22,12 @@ class WorkshopV2
     protected $_http;
 
     /** @var string */
-    protected $_domain = 'https://workshop.fluidbook.com/';
+    const BASE_URL = 'https://workshop.fluidbook.com/';
 
     public function __construct()
     {
         $this->_cookies = new FileCookieJar(Files::mkdir(protected_path('ws2cookies/')) . Str::random(5), true);
-        $this->_http = new Client(['base_uri' => $this->_domain, 'timeout' => 60000, 'read_timeout' => 60000, 'cookies' => $this->_cookies]);
+        $this->_http = new Client(['base_uri' => self::BASE_URL, 'timeout' => 60000, 'read_timeout' => 60000, 'cookies' => $this->_cookies]);
     }
 
     public function login($username, $api_key)
@@ -102,28 +103,13 @@ class WorkshopV2
 
     public function installBook($id, $dir, $options = [], $version = 'online', $tries = 3, $beforeInstallCallback = null, $function = 'downloadBookAndInstall')
     {
-        $url = 'ajax/exportbookExe';
-
         $action = 'download';
         if (isset($options['action'])) {
             $action = $options['action'];
             unset($options['action']);
         }
 
-        $reqData = ['version' => $version, 'book_id' => $id, 'action' => $action, 'options' => $options];
-        if ($action === 'install_hosting') {
-            $destination = [];
-            if (isset($options['dir'])) {
-                $destination['dir'] = $options['dir'];
-                unset($options['dir']);
-            }
-            $reqData['destination'] = $destination;
-        }
-
-        $response = $this->_request($url, 'POST', $reqData);
-
-
-        $xml = $this->_getXMLFromResponse($response);
+        $xml = $this->_actionDownloadBook($id, $version, $action, $options);
 
         if ($action === 'install_hosting') {
             return (string)$xml->truepopup->url;
@@ -143,6 +129,33 @@ class WorkshopV2
         }
     }
 
+    protected function _actionDownloadBook($id, $version, $action, $options = [])
+    {
+        $url = 'ajax/exportbookExe';
+        $reqData = ['version' => $version, 'book_id' => $id, 'action' => $action, 'options' => $options];
+        if ($action === 'install_hosting') {
+            $destination = [];
+            if (isset($options['dir'])) {
+                $destination['dir'] = $options['dir'];
+                unset($options['dir']);
+            }
+            $reqData['destination'] = $destination;
+        }
+
+        $response = $this->_request($url, 'POST', $reqData);
+        return $this->_getXMLFromResponse($response);
+    }
+
+    public function getDownloadBookURL($id, $version)
+    {
+        $xml = $this->_actionDownloadBook($id, $version, 'download');
+
+        if ($xml !== false && isset($xml->redirection) && !is_null($xml->redirection)) {
+            return self::BASE_URL . ltrim((string)$xml->redirection, '/');
+        }
+        return null;
+    }
+
     public function downloadBookExport($id, $dir, $options = [], $version = 'online', $tries = 3, $beforeInstallCallback = null)
     {
         return $this->installBook($id, $dir, $options, $version, $tries, $beforeInstallCallback, 'downloadBook');
@@ -187,6 +200,7 @@ class WorkshopV2
         Files::rmdir($tdir);
     }
 
+
     public function createBook($title, $from = null)
     {
         $params = ['title' => $title];
@@ -269,7 +283,7 @@ class WorkshopV2
         $options['timeout'] = $options['read_timeout'] = 60000;
         $options['cookies'] = $this->_cookies;
 
-        $uri = $this->_domain . ltrim($uri, '/');
+        $uri = self::BASE_URL . ltrim($uri, '/');
         $request = new Request($method, $uri);
         try {
             return $this->_http->send($request, $options);