diff options
Diffstat (limited to 'app/controllers/course/forum')
| -rw-r--r-- | app/controllers/course/forum/BaseController.php | 64 | ||||
| -rw-r--r-- | app/controllers/course/forum/categories.php | 1 | ||||
| -rw-r--r-- | app/controllers/course/forum/configs.php | 5 | ||||
| -rw-r--r-- | app/controllers/course/forum/discussions.php | 62 | ||||
| -rw-r--r-- | app/controllers/course/forum/recent.php | 1 | ||||
| -rw-r--r-- | app/controllers/course/forum/search.php | 1 | ||||
| -rw-r--r-- | app/controllers/course/forum/subscriptions.php | 5 | ||||
| -rw-r--r-- | app/controllers/course/forum/topics.php | 20 |
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') |
