aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/controllers/course/forum/BaseController.php64
-rw-r--r--app/controllers/course/forum/categories.php1
-rw-r--r--app/controllers/course/forum/configs.php5
-rw-r--r--app/controllers/course/forum/discussions.php62
-rw-r--r--app/controllers/course/forum/recent.php1
-rw-r--r--app/controllers/course/forum/search.php1
-rw-r--r--app/controllers/course/forum/subscriptions.php5
-rw-r--r--app/controllers/course/forum/topics.php20
8 files changed, 52 insertions, 107 deletions
diff --git a/app/controllers/course/forum/BaseController.php b/app/controllers/course/forum/BaseController.php
deleted file mode 100644
index 6525250..0000000
--- a/app/controllers/course/forum/BaseController.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-namespace Forum;
-
-use ActionsWidget;
-use Context;
-use CoreForum;
-use Icon;
-use Request;
-use SearchWidget;
-use Sidebar;
-use StudipController;
-
-abstract class BaseController extends StudipController
-{
- protected $with_session = true;
-
- public function before_filter(&$action, &$args)
- {
- object_set_visit_module('forum');
-
- $this->range_id = Context::getId();
- $this->is_moderator = CoreForum::isModerator($this->range_id);
- $this->is_admin = CoreForum::isAdmin($this->range_id);
-
- $this->buildSidebar();
-
- parent::before_filter($action, $args);
- }
-
- protected function buildSidebar(): void
- {
- $actions = new ActionsWidget();
-
- $actions->addLink(
- _('Neue Diskussion starten'),
- $this->url_for('course/forum/discussions/edit'),
- Icon::create('add', Icon::ROLE_CLICKABLE, ['title' => _('Neue Diskussion starten')])
- )->asDialog('width=900;height=750');
-
- if ($this->is_admin) {
- $actions->addLink(
- _('Forum verwalten'),
- $this->url_for('course/forum/configs/edit'),
- Icon::create('admin', Icon::ROLE_CLICKABLE, ['title' => _('Forum verwalten')]),
- ['data-dialog' => 'width=500;height=300']
- );
- }
-
- Sidebar::Get()->addWidget($actions);
-
- $search = new SearchWidget($this->url_for('course/forum/search', [
- 'begin' => Request::int('begin'),
- 'end' => Request::int('end')
- ]));
-
- $search->addNeedle(
- _('Suche nach Diskussionen oder Beiträge'),
- 'q',
- true
- );
-
- Sidebar::Get()->addWidget($search, 'forum_search');
- }
-}
diff --git a/app/controllers/course/forum/categories.php b/app/controllers/course/forum/categories.php
index 8ed7950..df86089 100644
--- a/app/controllers/course/forum/categories.php
+++ b/app/controllers/course/forum/categories.php
@@ -1,5 +1,4 @@
<?php
-require_once 'BaseController.php';
use Forum\Category;
diff --git a/app/controllers/course/forum/configs.php b/app/controllers/course/forum/configs.php
index 209799f..c99f718 100644
--- a/app/controllers/course/forum/configs.php
+++ b/app/controllers/course/forum/configs.php
@@ -1,5 +1,4 @@
<?php
-require_once 'BaseController.php';
class Course_Forum_ConfigsController extends Forum\BaseController
{
@@ -7,6 +6,10 @@ class Course_Forum_ConfigsController extends Forum\BaseController
{
parent::before_filter($action, $args);
+ if (!$this->user_id) {
+ throw new LoginException();
+ }
+
if (! $this->is_admin) {
throw new AccessDeniedException();
}
diff --git a/app/controllers/course/forum/discussions.php b/app/controllers/course/forum/discussions.php
index ee6e1d1..e6cec64 100644
--- a/app/controllers/course/forum/discussions.php
+++ b/app/controllers/course/forum/discussions.php
@@ -1,5 +1,4 @@
<?php
-require_once 'BaseController.php';
use Studip\Markup;
use Forum\Discussion;
@@ -59,27 +58,38 @@ class Course_Forum_DiscussionsController extends Forum\BaseController
PageLayout::setTitle($discussion->title);
- $auth_user = User::findCurrent();
-
$discussion->view_count += 1;
$discussion->store();
- $posting_read = PostingRead::findOneBySQL(
- "discussion_id = :discussion_id AND user_id = :user_id",
- [
- 'discussion_id' => $discussion->getId(),
- 'user_id' => User::findCurrent()->user_id
- ]
- );
-
- $user_subscription = Subscription::findOneBySQL(
- "subject = :subject AND subject_id = :subject_id AND user_id = :user_id",
- [
- 'subject' => 'discussion',
- 'subject_id' => $discussion->getId(),
- 'user_id' => $auth_user->user_id
- ]
- );
+ $auth = User::findCurrent();
+ $posting_read = null;
+ $auth_user = [];
+ if ($auth) {
+ $posting_read = PostingRead::findOneBySQL(
+ "discussion_id = :discussion_id AND user_id = :user_id",
+ [
+ 'discussion_id' => $discussion->getId(),
+ 'user_id' => $auth->user_id
+ ]
+ );
+
+ $user_subscription = Subscription::findOneBySQL(
+ "subject = :subject AND subject_id = :subject_id AND user_id = :user_id",
+ [
+ 'subject' => 'discussion',
+ 'subject_id' => $discussion->getId(),
+ 'user_id' => $auth->user_id
+ ]
+ );
+
+ $auth_user = [
+ 'id' => $auth->id,
+ 'username' => $auth->username,
+ 'name' => $auth->getFullName(),
+ 'avatar_url' => Avatar::getAvatar($auth->user_id)->getURL(Avatar::NORMAL),
+ 'subscription' => $user_subscription ? $user_subscription->toRawArray() : []
+ ];
+ }
$category = $discussion->getCategory();
$tags = array_map(fn(TagDTO $tag) => $tag->toRawArray(), $discussion->tags);
@@ -88,13 +98,7 @@ class Course_Forum_DiscussionsController extends Forum\BaseController
$this->render_vue_app(
Studip\VueApp::create('forum/discussions/Show')
->withProps([
- 'auth_user' => [
- 'id' => $auth_user->id,
- 'username' => $auth_user->username,
- 'name' => $auth_user->getFullName(),
- 'avatar_url' => Avatar::getAvatar($auth_user->user_id)->getURL(Avatar::NORMAL),
- 'subscription' => $user_subscription ? $user_subscription->toRawArray() : []
- ],
+ 'auth_user' => $auth_user,
'discussion' => [
...$discussion->transformData(),
'topic' => $discussion->topic->toRawArray(),
@@ -157,7 +161,7 @@ class Course_Forum_DiscussionsController extends Forum\BaseController
$discussion = Discussion::find($discussion_id);
} else {
$discussion = new Discussion();
- $discussion->user_id = User::findCurrent()->user_id;
+ $discussion->user_id = $this->user_id;
}
$discussion->title = Request::get('title');
@@ -189,7 +193,7 @@ class Course_Forum_DiscussionsController extends Forum\BaseController
'range_id' => $this->range_id,
'discussion_id' => $discussion->discussion_id,
'content' => Markup::purifyHtml(Markup::markAsHtml(Request::get('content'))),
- 'user_id' => User::findCurrent()->user_id
+ 'user_id' => $this->user_id
]);
} else {
TagRelation::deleteBySQL("range_id = ? AND range_type = 'forum'", [$discussion->discussion_id]);
@@ -228,7 +232,7 @@ class Course_Forum_DiscussionsController extends Forum\BaseController
throw new AccessDeniedException();
}
- if (!$this->is_moderator && $discussion->user_id !== User::findCurrent()->user_id) {
+ if (!$this->is_moderator && $discussion->user_id !== $this->user_id) {
throw new AccessDeniedException();
}
diff --git a/app/controllers/course/forum/recent.php b/app/controllers/course/forum/recent.php
index 7a117cd..3585c2c 100644
--- a/app/controllers/course/forum/recent.php
+++ b/app/controllers/course/forum/recent.php
@@ -1,5 +1,4 @@
<?php
-require_once 'BaseController.php';
class Course_Forum_RecentController extends Forum\BaseController
{
diff --git a/app/controllers/course/forum/search.php b/app/controllers/course/forum/search.php
index f6fc223..706674c 100644
--- a/app/controllers/course/forum/search.php
+++ b/app/controllers/course/forum/search.php
@@ -1,5 +1,4 @@
<?php
-require_once 'BaseController.php';
use Forum\DiscussionType;
use Forum\DTO\Tag as TagDTO;
diff --git a/app/controllers/course/forum/subscriptions.php b/app/controllers/course/forum/subscriptions.php
index 1f5582c..13df712 100644
--- a/app/controllers/course/forum/subscriptions.php
+++ b/app/controllers/course/forum/subscriptions.php
@@ -1,5 +1,4 @@
<?php
-require_once 'BaseController.php';
class Course_Forum_SubscriptionsController extends Forum\BaseController
{
@@ -7,6 +6,10 @@ class Course_Forum_SubscriptionsController extends Forum\BaseController
{
parent::before_filter($action, $args);
+ if (!$this->user_id) {
+ throw new LoginException();
+ }
+
Navigation::activateItem('course/forum/subscriptions');
}
diff --git a/app/controllers/course/forum/topics.php b/app/controllers/course/forum/topics.php
index b6a1307..ca22f89 100644
--- a/app/controllers/course/forum/topics.php
+++ b/app/controllers/course/forum/topics.php
@@ -1,5 +1,4 @@
<?php
-require_once 'BaseController.php';
use Forum\Category;
use Forum\Subscription;
@@ -33,14 +32,17 @@ class Course_Forum_TopicsController extends Forum\BaseController
PageLayout::setTitle($topic->name);
- $user_subscription = Subscription::findOneBySQL(
- "subject = :subject AND subject_id = :subject_id AND user_id = :user_id",
- [
- 'subject' => 'topic',
- 'subject_id' => $topic->getId(),
- 'user_id' => User::findCurrent()->user_id
- ]
- );
+ $user_subscription = null;
+ if ($this->user_id) {
+ $user_subscription = Subscription::findOneBySQL(
+ "subject = :subject AND subject_id = :subject_id AND user_id = :user_id",
+ [
+ 'subject' => 'topic',
+ 'subject_id' => $topic->getId(),
+ 'user_id' => $this->user_id
+ ]
+ );
+ }
$this->render_vue_app(
Studip\VueApp::create('forum/topics/Show')