From: Vincent Vanwaelscappel Date: Thu, 20 May 2021 19:04:14 +0000 (+0200) Subject: wip #4216 @2 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=1289fbcb22d0e5d4a7635f4947ce7c54bdd03b3d;p=fluidbook-toolbox.git wip #4216 @2 --- diff --git a/app/Http/Controllers/API/FluidbookThemeAPIController.php b/app/Http/Controllers/API/FluidbookThemeAPIController.php index 1b0bee72a..18e65cae5 100644 --- a/app/Http/Controllers/API/FluidbookThemeAPIController.php +++ b/app/Http/Controllers/API/FluidbookThemeAPIController.php @@ -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(); } } diff --git a/app/Models/FluidbookTheme.php b/app/Models/FluidbookTheme.php index bea13de01..69e08085d 100644 --- a/app/Models/FluidbookTheme.php +++ b/app/Models/FluidbookTheme.php @@ -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() diff --git a/routes/api.php b/routes/api.php index 427b95ab6..4f318d536 100644 --- a/routes/api.php +++ b/routes/api.php @@ -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']); });