]> BookStack Code Mirror - bookstack/blobdiff - app/Exports/Import.php
Customization: Added parent tag classes
[bookstack] / app / Exports / Import.php
index 520d8ea6cc8445635460b1a2709dcf307ca6e40a..9c1771c468f27e27d94d48c75bc8de67386490b8 100644 (file)
@@ -3,43 +3,31 @@
 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;
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
 
 /**
+ * @property int $id
  * @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
+ * @property User $createdBy
  */
 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);
@@ -59,4 +47,20 @@ class Import extends Model implements Loggable
     {
         return "({$this->id}) {$this->name}";
     }
+
+    public function createdBy(): BelongsTo
+    {
+        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,
+        };
+    }
 }