From 2fc19326bbad49f41e2492a25edbf6fb9a148c8b Mon Sep 17 00:00:00 2001 From: Christian Beeznest Date: Fri, 3 Jan 2025 18:47:00 -0500 Subject: [PATCH] Documents: Improve file variation - refs #5956 --- assets/vue/views/documents/AddVariation.vue | 40 +++++++++++++++++-- assets/vue/views/documents/DocumentsList.vue | 2 +- .../Controller/ResourceController.php | 14 +++++++ 3 files changed, 52 insertions(+), 4 deletions(-) diff --git a/assets/vue/views/documents/AddVariation.vue b/assets/vue/views/documents/AddVariation.vue index bd784fcaf2..585c9f2944 100644 --- a/assets/vue/views/documents/AddVariation.vue +++ b/assets/vue/views/documents/AddVariation.vue @@ -74,6 +74,24 @@ + + + + + + + @@ -90,10 +108,10 @@ import SectionHeader from "../../components/layout/SectionHeader.vue" import BaseButton from "../../components/basecomponents/BaseButton.vue" import BaseFileUpload from "../../components/basecomponents/BaseFileUpload.vue" import prettyBytes from 'pretty-bytes' -import { useStore } from "vuex" import { useCidReq } from "../../composables/cidReq" +import { useSecurityStore } from "../../store/securityStore" -const store = useStore() +const securityStore = useSecurityStore() const route = useRoute() const router = useRouter() const { t } = useI18n() @@ -101,11 +119,17 @@ const { cid, sid, gid } = useCidReq() const file = ref(null) const variations = ref([]) const originalFile = ref(null) -const resourceFileId = route.params.resourceFileId; +const resourceFileId = route.params.resourceFileId const selectedAccessUrl = ref(null) const accessUrls = ref([]) +const isAdmin = computed(() => securityStore.isAdmin) onMounted(async () => { + if (!isAdmin.value) { + await router.push({ name: 'DocumentsList' }) + return + } + await fetchOriginalFile() await fetchVariations() await fetchAccessUrls() @@ -178,6 +202,16 @@ async function uploadVariant(file, resourceNodeId, accessUrlId) { } } +async function deleteVariant(variantId) { + try { + await axios.delete(`/r/resource_files/${variantId}/delete_variant`) + console.log('Variant deleted successfully.') + await fetchVariations() + } catch (error) { + console.error('Error deleting variant:', error) + } +} + function onFileSelected(selectedFile) { file.value = selectedFile } diff --git a/assets/vue/views/documents/DocumentsList.vue b/assets/vue/views/documents/DocumentsList.vue index ebfe60ab1d..cd1543f327 100644 --- a/assets/vue/views/documents/DocumentsList.vue +++ b/assets/vue/views/documents/DocumentsList.vue @@ -206,7 +206,7 @@ /> json($data); } + #[Route('/resource_files/{id}/delete_variant', methods: ['DELETE'], name: 'chamilo_core_resource_files_delete_variant')] + public function deleteVariant(int $id, EntityManagerInterface $em): JsonResponse + { + $variant = $em->getRepository(ResourceFile::class)->find($id); + if (!$variant) { + return $this->json(['error' => 'Variant not found'], Response::HTTP_NOT_FOUND); + } + + $em->remove($variant); + $em->flush(); + + return $this->json(['success' => true]); + } + private function processFile(Request $request, ResourceNode $resourceNode, string $mode = 'show', string $filter = '', ?array $allUserInfo = null, ?ResourceFile $resourceFile = null): mixed { $this->denyAccessUnlessGranted(