diff --git a/app/Http/Controllers/Forms/FormController.php b/app/Http/Controllers/Forms/FormController.php index 8b29d6e0..9c268c5f 100644 --- a/app/Http/Controllers/Forms/FormController.php +++ b/app/Http/Controllers/Forms/FormController.php @@ -218,4 +218,24 @@ class FormController extends Controller return redirect()->to(Storage::temporaryUrl($path, now()->addMinutes(5))); } + + /** + * Updates a form's workspace + */ + public function updateWorkspace($id, $workspace_id) + { + $form = Form::findOrFail($id); + $workspace = Workspace::findOrFail($workspace_id); + + $this->authorize('update', $form); + $this->authorize('view', $workspace); + + $form->workspace_id = $workspace_id; + $form->creator_id = auth()->user()->id; + $form->save(); + + return $this->success([ + 'message' => 'Form workspace updated successfully.', + ]); + } } diff --git a/client/components/open/forms/components/FormWorkspaceModal.vue b/client/components/open/forms/components/FormWorkspaceModal.vue new file mode 100644 index 00000000..d4528530 --- /dev/null +++ b/client/components/open/forms/components/FormWorkspaceModal.vue @@ -0,0 +1,103 @@ + + + + + + + + + Change form workspace + + + + Current workspace: + + + + + + + {{ workspace.name }} + + + + + + + + + + Change workspace + + + Close + + + + + + + + \ No newline at end of file diff --git a/client/components/pages/forms/show/ExtraMenu.vue b/client/components/pages/forms/show/ExtraMenu.vue index f6aca7fc..9e6b10c3 100644 --- a/client/components/pages/forms/show/ExtraMenu.vue +++ b/client/components/pages/forms/show/ExtraMenu.vue @@ -107,6 +107,17 @@ Create Template + + + + + + + Change workspace + + + @@ -159,6 +172,7 @@ import { ref, defineProps, computed } from 'vue' import Dropdown from '~/components/global/Dropdown.vue' import FormTemplateModal from '../../../open/forms/components/templates/FormTemplateModal.vue' +import FormWorkspaceModal from '../../../open/forms/components/FormWorkspaceModal.vue' const { copy } = useClipboard() const router = useRouter() @@ -177,6 +191,7 @@ let loadingDuplicate = ref(false) let loadingDelete = ref(false) let showDeleteFormModal = ref(false) let showFormTemplateModal = ref(false) +let showFormWorkspaceModal = ref(false) const copyLink = () => { copy(props.form.share_url) diff --git a/routes/api.php b/routes/api.php index bb27a16c..33885bb6 100644 --- a/routes/api.php +++ b/routes/api.php @@ -89,6 +89,7 @@ Route::group(['middleware' => 'auth:api'], function () { Route::prefix('forms')->name('forms.')->group(function () { Route::post('/', [FormController::class, 'store'])->name('store'); + Route::post('/{id}/workspace/{workspace_id}', [FormController::class, 'updateWorkspace'])->name('workspace.update'); Route::put('/{id}', [FormController::class, 'update'])->name('update'); Route::delete('/{id}', [FormController::class, 'destroy'])->name('destroy');
Current workspace:
+ {{ workspace.name }} +