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
{
$theme = new FluidbookTheme();
self::_prepareData($theme, $request->get('theme'));
$theme->save();
+ self::_handleFiles($theme, $request->get('theme'));
}
/**
$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.
$theme = FluidbookTheme::find($id);
self::_prepareData($theme, $request->get('theme'));
$theme->save();
+ self::_handleFiles($theme, $request->get('theme'));
}
public function deletefromws2(Request $request, $id)
$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();
}
}
], 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']);
});