Documents: Improve file variation - refs #5956

pull/5976/head
Christian Beeznest 8 months ago
parent 37d6e9318d
commit 2fc19326bb
  1. 40
      assets/vue/views/documents/AddVariation.vue
  2. 2
      assets/vue/views/documents/DocumentsList.vue
  3. 14
      src/CoreBundle/Controller/ResourceController.php

@ -74,6 +74,24 @@
</template>
</Column>
<Column field="creator" :header="t('Creator')" />
<Column field="accessUrl" :header="t('Associated URL')">
<template #body="slotProps">
<span>
{{ slotProps.data.url ? slotProps.data.url : t('Default (No URL)') }}
</span>
</template>
</Column>
<Column>
<template #header>{{ t('Actions') }}</template>
<template #body="slotProps">
<BaseButton
:label="t('Delete')"
icon="delete"
type="danger"
@click="deleteVariant(slotProps.data.id)"
/>
</template>
</Column>
</DataTable>
</div>
</div>
@ -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
}

@ -206,7 +206,7 @@
/>
<BaseButton
v-if="canEdit(slotProps.data) && allowAccessUrlFiles && isFile(slotProps.data)"
v-if="canEdit(slotProps.data) && allowAccessUrlFiles && isFile(slotProps.data) && securityStore.isAdmin"
icon="file-replace"
size="small"
type="secondary"

@ -551,6 +551,20 @@ class ResourceController extends AbstractResourceController implements CourseCon
return $this->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(

Loading…
Cancel
Save