diff options
Diffstat (limited to 'resources/vue/components/forum/topics')
4 files changed, 96 insertions, 8 deletions
diff --git a/resources/vue/components/forum/topics/CreateTopic.vue b/resources/vue/components/forum/topics/CreateTopic.vue index 03b7542..88a9ad9 100644 --- a/resources/vue/components/forum/topics/CreateTopic.vue +++ b/resources/vue/components/forum/topics/CreateTopic.vue @@ -2,7 +2,9 @@ <script setup> import StudipIcon from "@/vue/components/StudipIcon.vue"; import {computed} from "vue"; +import {useForumConfig} from "../../../store/pinia/forum/ForumConfig"; +const forumConfig = useForumConfig(); const props = defineProps({ category_id: { type: String, @@ -24,6 +26,7 @@ const topicCreateURL = computed(() => { <template> <a + v-if="forumConfig.isModerator" :href="topicCreateURL" data-dialog="width=700" :title="$gettext('Neues Thema anlegen')" diff --git a/resources/vue/components/forum/topics/SelectTopicInput.vue b/resources/vue/components/forum/topics/SelectTopicInput.vue index 24c0e00..0b4d0c1 100644 --- a/resources/vue/components/forum/topics/SelectTopicInput.vue +++ b/resources/vue/components/forum/topics/SelectTopicInput.vue @@ -2,7 +2,6 @@ import StudipIcon from "@/vue/components/StudipIcon.vue"; import {$gettext} from "@/assets/javascripts/lib/gettext"; import StudipSelect from "@/vue/components/StudipSelect.vue"; - const selectedTopics = defineModel(); </script> diff --git a/resources/vue/components/forum/topics/ShowTopic.vue b/resources/vue/components/forum/topics/ShowTopic.vue new file mode 100644 index 0000000..0682fba --- /dev/null +++ b/resources/vue/components/forum/topics/ShowTopic.vue @@ -0,0 +1,71 @@ +<script setup> +import StudipDialog from "../../StudipDialog.vue"; +import {$gettext} from "../../../../assets/javascripts/lib/gettext"; +import StudipDateTime from "../../StudipDateTime.vue"; + +defineEmits(['close']); + +defineProps({ + topic: { + type: Object, + required: true, + } +}); + +const isOpen = defineModel('isOpen'); +</script> + +<template> + <StudipDialog + v-if="isOpen" + :title="$gettext('Informationen')" + :closeText="$gettext('Schließen')" + closeClass="cancel" + height="700" + width="600" + @close="isOpen = false" + > + <template #dialogContent> + <div class="forum"> + <dl class="use-utility-classes"> + <dt>{{ $gettext('Title') }}</dt> + <dd>{{ topic.name }}</dd> + + <dt>{{ $gettext('Beschreibung') }}</dt> + <dd class="break-word"> + <p>{{ topic.description }}</p> + </dd> + + <template v-if="topic.category"> + <dt>{{ $gettext('Kategorie') }}</dt> + <dd>{{ topic.category.name }}</dd> + </template> + + <dt>{{ $gettext('Anzahl der Diskussionen') }}</dt> + <dd>{{ topic.meta.discussions_count }}</dd> + + <dt>{{ $gettext('Anzahl der Beiträge') }}</dt> + <dd>{{ topic.meta.postings_count }}</dd> + + <dt>{{ $gettext('Anzahl der Teilnehmenden am Thema') }}</dt> + <dd>{{ topic.meta.users_count }}</dd> + + <dt>{{ $gettext('Letzte Aktivität') }}</dt> + <dd> + <template v-if="topic.meta.recent_activity"> + <StudipDateTime :iso="topic.meta.recent_activity" /> + </template> + <template v-else> + {{ $gettext('Keine Aktivität') }} + </template> + </dd> + + <dt>{{ $gettext('Erstellt am') }}</dt> + <dd> + <StudipDateTime :iso="topic.mkdate" /> + </dd> + </dl> + </div> + </template> + </StudipDialog> +</template> diff --git a/resources/vue/components/forum/topics/TopicItem.vue b/resources/vue/components/forum/topics/TopicItem.vue index 82f573d..544c49d 100644 --- a/resources/vue/components/forum/topics/TopicItem.vue +++ b/resources/vue/components/forum/topics/TopicItem.vue @@ -5,7 +5,8 @@ import {useForumConfig} from "../../../store/pinia/forum/ForumConfig"; import StudipActionMenu from "@/vue/components/StudipActionMenu.vue"; import StudipIcon from "@/vue/components/StudipIcon.vue"; import StudipDateTime from "@/vue/components/StudipDateTime.vue"; -import {computed} from "vue"; +import {computed, ref} from "vue"; +import ShowTopic from "./ShowTopic.vue"; const emit = defineEmits(['swapTopic']); const forumConfig = useForumConfig(); @@ -22,16 +23,26 @@ const props = defineProps({ }); const topicActionMenus = computed(() => { + let menu = [ + { label: $gettext('Informationen'), icon: 'info', emit: 'show'}, + ]; + if (forumConfig.isModerator) { - return [ + menu.push( { label: $gettext('Thema bearbeiten'), icon: 'edit', emit: 'edit'}, { label: $gettext('Thema löschen'), icon: 'trash', emit: 'delete'} - ]; + ); } - return []; + return menu; }); +const isTopicDialogOpen = ref(false); + +const displayTopic = () => { + isTopicDialogOpen.value = true; +} + const editTopic = () => STUDIP.Dialog.fromURL(getTopicEditURL(props.topic.id),{ width: '700' }); const deleteTopic = () => STUDIP.Dialog.confirm( @@ -66,13 +77,13 @@ const swapTopic = event => { </a> </div> <div class="content"> - <div> + <div class="flex-1"> <div class="title-with-actions"> <div class="title-with-actions__content"> <a class="title-with-actions__link" :href="getTopicURL(topic.id)" :title="$gettext('Zum Thema')"> <span class="topic-title line-clamp-2">{{ topic.name }}</span> <span - v-if="topic.meta.postings_count > topic.meta.user_read_index" + v-if="!forumConfig.allowGuestAccess && topic.meta.postings_count > topic.meta.user_read_index" class="unread-items-badge" role="status" aria-live="polite" @@ -87,6 +98,7 @@ const swapTopic = event => { <div class="title-with-actions__actions-xs"> <StudipActionMenu :items="topicActionMenus" + @show="displayTopic" @edit="editTopic" @delete="deleteTopic" /> @@ -157,6 +169,7 @@ const swapTopic = event => { <td class="actions"> <StudipActionMenu :items="topicActionMenus" + @show="displayTopic" @edit="editTopic" @delete="deleteTopic" /> @@ -178,7 +191,7 @@ const swapTopic = event => { </span> <span - v-if="topic.meta.postings_count > topic.meta.user_read_index" + v-if="!forumConfig.allowGuestAccess && topic.meta.postings_count > topic.meta.user_read_index" class="unread-items-badge" role="status" aria-live="polite" @@ -192,6 +205,7 @@ const swapTopic = event => { <div class="actions"> <StudipActionMenu :items="topicActionMenus" + @show="displayTopic" @edit="editTopic" @delete="deleteTopic" /> @@ -235,4 +249,5 @@ const swapTopic = event => { </div> </div> </a> + <ShowTopic :topic="topic" v-model:isOpen="isTopicDialogOpen" /> </template> |
