]> BookStack Code Mirror - bookstack/blobdiff - app/Exports/Import.php
Customization: Added parent tag classes
[bookstack] / app / Exports / Import.php
index 8400382fd0d757a0974064e1b36e2cee9272fa0e..9c1771c468f27e27d94d48c75bc8de67386490b8 100644 (file)
@@ -3,6 +3,9 @@
 namespace BookStack\Exports;
 
 use BookStack\Activity\Models\Loggable;
+use BookStack\Exports\ZipExports\Models\ZipExportBook;
+use BookStack\Exports\ZipExports\Models\ZipExportChapter;
+use BookStack\Exports\ZipExports\Models\ZipExportPage;
 use BookStack\Users\Models\User;
 use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Factories\HasFactory;
@@ -14,9 +17,8 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
  * @property string $path
  * @property string $name
  * @property int $size - ZIP size in bytes
- * @property int $book_count
- * @property int $chapter_count
- * @property int $page_count
+ * @property string $type
+ * @property string $metadata
  * @property int $created_by
  * @property Carbon $created_at
  * @property Carbon $updated_at
@@ -26,24 +28,6 @@ class Import extends Model implements Loggable
 {
     use HasFactory;
 
-    public const TYPE_BOOK = 'book';
-    public const TYPE_CHAPTER = 'chapter';
-    public const TYPE_PAGE = 'page';
-
-    /**
-     * Get the type (model) that this import is intended to be.
-     */
-    public function getType(): string
-    {
-        if ($this->book_count === 1) {
-            return self::TYPE_BOOK;
-        } elseif ($this->chapter_count === 1) {
-            return self::TYPE_CHAPTER;
-        }
-
-        return self::TYPE_PAGE;
-    }
-
     public function getSizeString(): string
     {
         $mb = round($this->size / 1000000, 2);
@@ -68,4 +52,15 @@ class Import extends Model implements Loggable
     {
         return $this->belongsTo(User::class, 'created_by');
     }
+
+    public function decodeMetadata(): ZipExportBook|ZipExportChapter|ZipExportPage|null
+    {
+        $metadataArray = json_decode($this->metadata, true);
+        return match ($this->type) {
+            'book' => ZipExportBook::fromArray($metadataArray),
+            'chapter' => ZipExportChapter::fromArray($metadataArray),
+            'page' => ZipExportPage::fromArray($metadataArray),
+            default => null,
+        };
+    }
 }