aboutsummaryrefslogtreecommitdiff
path: root/resources/vue/apps
diff options
context:
space:
mode:
Diffstat (limited to 'resources/vue/apps')
-rw-r--r--resources/vue/apps/forum/categories/Index.vue3
-rw-r--r--resources/vue/apps/forum/discussions/Show.vue114
-rw-r--r--resources/vue/apps/forum/topics/Index.vue6
-rw-r--r--resources/vue/apps/forum/topics/Show.vue7
4 files changed, 34 insertions, 96 deletions
diff --git a/resources/vue/apps/forum/categories/Index.vue b/resources/vue/apps/forum/categories/Index.vue
index 93977cf..647a6a5 100644
--- a/resources/vue/apps/forum/categories/Index.vue
+++ b/resources/vue/apps/forum/categories/Index.vue
@@ -122,7 +122,7 @@ const swapCategory = (categoryId, step) => {
</div>
<div class="actions">
- <CreateCategory v-if="forumConfig.isModerator" />
+ <CreateCategory />
<button
v-if="forumConfig.tileLayout"
@click="forumConfig.toggleForumLayout()"
@@ -176,7 +176,6 @@ const swapCategory = (categoryId, step) => {
<div v-else-if="forumConfig.isModerator" class="topic-cards-container">
<div class="topic-card --new-topic">
<CreateCategory
- v-if="forumConfig.isModerator"
class="--with-label"
:label="$gettext('Neue Kategorie anlegen')"
/>
diff --git a/resources/vue/apps/forum/discussions/Show.vue b/resources/vue/apps/forum/discussions/Show.vue
index 1b09a7b..b0a6f66 100644
--- a/resources/vue/apps/forum/discussions/Show.vue
+++ b/resources/vue/apps/forum/discussions/Show.vue
@@ -1,8 +1,6 @@
<script setup>
import {onMounted, computed, ref} from "vue";
import ForumApp from "@/vue/components/forum/ForumApp.vue";
-import ForumMembers from "@/vue/components/forum/ForumMembers.vue";
-import {numberFormatter} from "../../../../assets/javascripts/lib/number_formatter";
import {useForumPost} from "../../../store/pinia/forum/ForumPost";
import {$gettext} from "../../../../assets/javascripts/lib/gettext";
import Post from "@/vue/components/forum/posts/Post.vue";
@@ -15,6 +13,7 @@ import SubscriptionDropdown from "@/vue/components/forum/SubscriptionDropdown.vu
import {highlightText, removeHighlight} from "@/vue/components/forum/helpers";
import {getSearchURL, getTopicURL, getDiscussionIndexURL} from "@/vue/components/forum/helpers/urls";
import {deserializeJSONAPIResponse} from "../../../../assets/javascripts/lib/jsonapiUtils";
+import DiscussionFooter from "../../../components/forum/discussions/DiscussionFooter.vue";
const forumConfig = useForumConfig();
const forumPostStore = useForumPost();
@@ -115,7 +114,6 @@ const fetchPostings = async () => {
};
-
onMounted(async () => {
isLoading.value = true;
@@ -194,17 +192,19 @@ onMounted(async () => {
</em>
<StudipIcon shape="lock-locked2" :size="20" role="inactive" />
</div>
- <button v-if="canEditDiscussion" @click="editDiscussion(discussion.discussion_id)" type="button" :title="$gettext('Diskussion bearbeiten')" class="button button--icon-only">
- <StudipIcon shape="edit" :size="20" />
- </button>
- <SubscriptionDropdown
- v-if="!discussion.closed_at"
- :subject="{
- id: discussion.discussion_id,
- type: 'forum-discussions'
- }"
- :user_subscription="auth_user.subscription"
- />
+ <template v-if="!forumConfig.allowGuestAccess">
+ <button v-if="canEditDiscussion" @click="editDiscussion(discussion.discussion_id)" type="button" :title="$gettext('Diskussion bearbeiten')" class="button button--icon-only">
+ <StudipIcon shape="edit" :size="20" />
+ </button>
+ <SubscriptionDropdown
+ v-if="!discussion.closed_at"
+ :subject="{
+ id: discussion.discussion_id,
+ type: 'forum-discussions'
+ }"
+ :user_subscription="auth_user.subscription"
+ />
+ </template>
</div>
</div>
</header>
@@ -219,43 +219,12 @@ onMounted(async () => {
</p>
</div>
<hr />
- <div class="discussion__status">
- <div class="flex items-start gap-20">
- <div class="text-center">
- <p>{{ $gettext('Erstellt') }}</p>
- <StudipDateTime :iso="discussion.mkdate" :date_only="true"/>
- </div>
- <div class="text-center">
- <p>{{ $gettext('Beiträge') }}</p>
- <p>{{ posts.length }}</p>
- </div>
- <div class="text-center">
- <p>{{ $gettext('Aufrufe') }}</p>
- <p>{{ numberFormatter(discussion.view_count, 1) }}</p>
- </div>
- <div class="text-center">
- <p>{{ $gettext('Aktivität') }}</p>
- <StudipDateTime v-if="posts[posts.length -1]" :iso="posts[posts.length -1].mkdate" :relative="true" />
- <StudipDateTime v-else :iso="discussion.mkdate" :relative="true"/>
- </div>
- </div>
- <ForumMembers :members="discussion.members" :limit="5" size="35px" />
- <a
- v-if="!discussion.closed_at"
- href="#new-post"
- class="button button--icon-label"
- role="button"
- :title="$gettext('Antworten')"
- :aria-label="$gettext('Antworten')"
- :class="{
- 'disabled': postCreateForm
- }"
- @click="postCreateForm = true"
- >
- <StudipIcon shape="reply" :size="20" aria-hidden="true" />
- {{ $gettext('Antworten') }}
- </a>
- </div>
+ <DiscussionFooter
+ :discussion="discussion"
+ :posts_count="posts.length"
+ :recent_activity="posts[posts.length - 1] ? posts[posts.length - 1].mkdate : null"
+ v-model:postCreateForm="postCreateForm"
+ />
<hr />
</div>
<div class="posts-container">
@@ -271,43 +240,12 @@ onMounted(async () => {
</div>
<div v-if="posts.length > 3" class="discussion">
- <div class="discussion__status">
- <div class="flex items-start gap-20">
- <div class="text-center">
- <p>{{ $gettext('Erstellt') }}</p>
- <StudipDateTime :iso="discussion.mkdate" :date_only="true"/>
- </div>
- <div class="text-center">
- <p>{{ $gettext('Beiträge') }}</p>
- <p>{{ posts.length }}</p>
- </div>
- <div class="text-center">
- <p>{{ $gettext('Aufrufe') }}</p>
- <p>{{ numberFormatter(discussion.view_count, 1) }}</p>
- </div>
- <div class="text-center">
- <p>{{ $gettext('Aktivität') }}</p>
- <StudipDateTime v-if="posts[posts.length -1]" :iso="posts[posts.length -1].mkdate" :relative="true" />
- <StudipDateTime v-else :iso="discussion.mkdate" :relative="true"/>
- </div>
- </div>
- <ForumMembers :members="discussion.members" :limit="5" size="35px" />
- <a
- v-if="!discussion.closed_at"
- href="#new-post"
- class="button button--icon-label"
- role="button"
- :title="$gettext('Antworten')"
- :aria-label="$gettext('Antworten')"
- :class="{
- 'disabled': postCreateForm
- }"
- @click="postCreateForm = true"
- >
- <StudipIcon shape="reply" :size="20" aria-hidden="true" />
- {{ $gettext('Antworten') }}
- </a>
- </div>
+ <DiscussionFooter
+ :discussion="discussion"
+ :posts_count="posts.length"
+ :recent_activity="posts[posts.length - 1].mkdate"
+ v-model:postCreateForm="postCreateForm"
+ />
</div>
<div id="new-post" class="post-form-container">
diff --git a/resources/vue/apps/forum/topics/Index.vue b/resources/vue/apps/forum/topics/Index.vue
index 9df0a78..75c5267 100644
--- a/resources/vue/apps/forum/topics/Index.vue
+++ b/resources/vue/apps/forum/topics/Index.vue
@@ -49,8 +49,8 @@ const fetchTopics = async (_, offset = 0) => {
}
onMounted(async () => {
- await fetchTopics()
-})
+ await fetchTopics();
+});
</script>
<template>
@@ -63,7 +63,7 @@ onMounted(async () => {
{{ $gettext('Themen') }}
</h2>
<div class="actions">
- <CreateTopic v-if="forumConfig.isModerator" />
+ <CreateTopic />
<button
v-if="forumConfig.tileLayout"
@click="forumConfig.toggleForumLayout();"
diff --git a/resources/vue/apps/forum/topics/Show.vue b/resources/vue/apps/forum/topics/Show.vue
index 619df47..58319fa 100644
--- a/resources/vue/apps/forum/topics/Show.vue
+++ b/resources/vue/apps/forum/topics/Show.vue
@@ -10,7 +10,9 @@ import StudipDateTime from "../../../components/StudipDateTime.vue";
import SubscriptionDropdown from "@/vue/components/forum/SubscriptionDropdown.vue";
import {deserializeJSONAPIResponse} from "../../../../assets/javascripts/lib/jsonapiUtils";
import StudipPagination from "../../../components/StudipPagination.vue";
+import {useForumConfig} from "../../../store/pinia/forum/ForumConfig";
+const forumConfig = useForumConfig();
const props = defineProps({
topic: {
type: Object,
@@ -25,8 +27,7 @@ const props = defineProps({
required: true,
},
user_subscription: {
- type: Object,
- required: true
+ type: Object
},
});
@@ -96,7 +97,7 @@ onMounted(async () => {
</div>
</div>
- <div class="actions">
+ <div v-if="!forumConfig.allowGuestAccess" class="actions">
<CreateDiscussion :topic_id="topic.topic_id" />
<SubscriptionDropdown
:title="$gettext('Thema abonnieren')"