]> _ Git - fluidbook-toolbox.git/commitdiff
wip #4216 @2
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 20 May 2021 19:04:14 +0000 (21:04 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 20 May 2021 19:04:14 +0000 (21:04 +0200)
app/Http/Controllers/API/FluidbookThemeAPIController.php
app/Models/FluidbookTheme.php
routes/api.php

index 1b0bee72a5495c898966078d8db2a48edb31cfc8..18e65cae57406fca4bfc77d31fc9adca1c148479 100644 (file)
@@ -6,7 +6,10 @@ namespace App\Http\Controllers\API;
 
 use App\Http\Controllers\Controller;
 use App\Models\FluidbookTheme;
+use Cubist\Backpack\Magic\Fields\Color;
+use Cubist\Backpack\Magic\Fields\Files;
 use Illuminate\Http\Request;
+use Spatie\MediaLibrary\MediaCollections\Models\Media;
 
 class FluidbookThemeAPIController extends Controller
 {
@@ -21,6 +24,7 @@ class FluidbookThemeAPIController extends Controller
         $theme = new FluidbookTheme();
         self::_prepareData($theme, $request->get('theme'));
         $theme->save();
+        self::_handleFiles($theme, $request->get('theme'));
     }
 
     /**
@@ -38,11 +42,56 @@ class FluidbookThemeAPIController extends Controller
             $theme->setAttribute($new, $data[$former]);
         }
         foreach ($data['parametres'] as $k => $v) {
+            $field = $theme->getField($k);
+            if ($field instanceof Color) {
+                $v = FluidbookTheme::_colorToWS3($v);
+            } else if ($field instanceof Files) {
+                continue;
+            }
             $theme->setAttribute($k, $v);
         }
         return $theme;
     }
 
+    /**
+     * @param $theme FluidbookTheme
+     * @param $data array
+     * @return FluidbookTheme
+     */
+    public static function _handleFiles($theme, $data)
+    {
+        $oldRoot = '/home/extranet/www/fluidbook/themes/' . $theme->getAttribute('id') . '/';
+        foreach ($data['parametres'] as $k => $v) {
+            $field = $theme->getField($k);
+            if ($field instanceof Files) {
+                $path = $oldRoot . $v;
+                $media = $theme->getMediaInField($k);
+                $upload = false;
+
+                if ($media->count() === 0) {
+                    $upload = true;
+                } else {
+                    /** @var Media $m */
+                    $m = $media->get(0);
+
+                    if ($media->getAttribute('file_name') !== $k) {
+                        $upload = true;
+                    } else {
+                        $mpath = $m->getPath();
+                        if (filesize($path) !== filesize($mpath)) {
+                            $upload = true;
+                        }
+                    }
+                }
+
+                if (!$upload) {
+                    continue;
+                }
+                $theme->addMediaToField($k, $path);
+            }
+        }
+    }
+
 
     /**
      * Update the specified resource in storage.
@@ -56,6 +105,7 @@ class FluidbookThemeAPIController extends Controller
         $theme = FluidbookTheme::find($id);
         self::_prepareData($theme, $request->get('theme'));
         $theme->save();
+        self::_handleFiles($theme, $request->get('theme'));
     }
 
     public function deletefromws2(Request $request, $id)
@@ -65,9 +115,11 @@ class FluidbookThemeAPIController extends Controller
         $theme->delete();
     }
 
-    public function uploadfile(Request $request,$id){
+    public function uploadfile(Request $request, $id, $fieldname)
+    {
+        /** @var FluidbookTheme $theme */
         $theme = FluidbookTheme::find($id);
-        $theme->addFile($request->get('theme'),$request->get('path'));
+        $theme->addMediaToField($fieldname, $request->get('path'), true);
         $theme->save();
     }
 }
index bea13de01c23d77c9e86ecf2f623e64eb66e923f..69e08085d1947c39ab59dcc9aed7f25d5da636c6 100644 (file)
@@ -858,9 +858,9 @@ class FluidbookTheme extends CubistMagicAbstractModel
 
     }
 
-    public function addFile($field, $path)
+    public function addFile($fieldname, $path)
     {
-        $this->_handleWS2File($this->getField($field), $path);
+        $this->addMediaToField($fieldname, $path, true);
     }
 
     public function updateWS2Table()
index 427b95ab65b5d02333a6503d4158d5f13f1df31a..4f318d536f66c54f77be8942e55bfc9cd483053a 100644 (file)
@@ -19,6 +19,7 @@ Route::group([
 ], function () {
     Route::post('fluidbook-theme', [\App\Http\Controllers\API\FluidbookThemeAPIController::class, 'createfromws2']);
     Route::put('fluidbook-theme/{id}', [\App\Http\Controllers\API\FluidbookThemeAPIController::class, 'updatefromws2']);
+    Route::put('fluidbook-theme/{id}/uploadfile/{fieldname}', [\App\Http\Controllers\API\FluidbookThemeAPIController::class, 'uploadfile']);
     Route::delete('fluidbook-theme/{id}', [\App\Http\Controllers\API\FluidbookThemeAPIController::class, 'deletefromws2']);
 });