2013-10-05 19:24:08 +02:00
|
|
|
<?php
|
2013-10-05 21:24:20 +02:00
|
|
|
class CommentController
|
2013-10-05 19:24:08 +02:00
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @route /comments
|
2013-10-17 22:57:32 +02:00
|
|
|
* @route /comments/{page}
|
|
|
|
* @validate page [0-9]+
|
2013-10-05 19:24:08 +02:00
|
|
|
*/
|
2013-10-17 22:57:32 +02:00
|
|
|
public function listAction($page)
|
2013-10-05 19:24:08 +02:00
|
|
|
{
|
2013-10-17 22:57:32 +02:00
|
|
|
$this->context->stylesheets []= 'post-small.css';
|
|
|
|
$this->context->stylesheets []= 'comment-list.css';
|
|
|
|
$this->context->stylesheets []= 'comment-small.css';
|
2013-10-22 23:41:33 +02:00
|
|
|
$this->context->stylesheets []= 'paginator.css';
|
2013-10-05 21:22:28 +02:00
|
|
|
$this->context->subTitle = 'comments';
|
2013-10-22 00:18:41 +02:00
|
|
|
if ($this->context->user->hasEnabledEndlessScrolling())
|
2013-10-17 22:57:32 +02:00
|
|
|
$this->context->scripts []= 'paginator-endless.js';
|
|
|
|
|
|
|
|
$page = intval($page);
|
|
|
|
$commentsPerPage = intval($this->config->comments->commentsPerPage);
|
2013-10-18 00:09:50 +02:00
|
|
|
PrivilegesHelper::confirmWithException(Privilege::ListComments);
|
2013-10-17 22:57:32 +02:00
|
|
|
|
|
|
|
$buildDbQuery = function($dbQuery)
|
|
|
|
{
|
|
|
|
$dbQuery->from('comment');
|
|
|
|
$dbQuery->orderBy('comment_date')->desc();
|
|
|
|
};
|
|
|
|
|
|
|
|
$countDbQuery = R::$f->begin();
|
|
|
|
$countDbQuery->select('COUNT(1)')->as('count');
|
|
|
|
$buildDbQuery($countDbQuery);
|
|
|
|
$commentCount = intval($countDbQuery->get('row')['count']);
|
|
|
|
$pageCount = ceil($commentCount / $commentsPerPage);
|
|
|
|
$page = max(1, min($pageCount, $page));
|
|
|
|
|
|
|
|
$searchDbQuery = R::$f->begin();
|
|
|
|
$searchDbQuery->select('comment.*');
|
|
|
|
$buildDbQuery($searchDbQuery);
|
|
|
|
$searchDbQuery->limit('?')->put($commentsPerPage);
|
|
|
|
$searchDbQuery->offset('?')->put(($page - 1) * $commentsPerPage);
|
|
|
|
|
|
|
|
$comments = $searchDbQuery->get();
|
|
|
|
$comments = R::convertToBeans('comment', $comments);
|
2013-10-19 18:14:19 +02:00
|
|
|
R::preload($comments, ['commenter' => 'user', 'post', 'post.uploader' => 'user']);
|
2013-10-17 22:57:32 +02:00
|
|
|
$this->context->postGroups = true;
|
|
|
|
$this->context->transport->paginator = new StdClass;
|
|
|
|
$this->context->transport->paginator->page = $page;
|
|
|
|
$this->context->transport->paginator->pageCount = $pageCount;
|
|
|
|
$this->context->transport->paginator->entityCount = $commentCount;
|
|
|
|
$this->context->transport->paginator->entities = $comments;
|
|
|
|
$this->context->transport->paginator->params = func_get_args();
|
|
|
|
$this->context->transport->comments = $comments;
|
|
|
|
}
|
|
|
|
|
2013-10-17 23:37:41 +02:00
|
|
|
|
|
|
|
|
2013-10-17 22:57:32 +02:00
|
|
|
/**
|
|
|
|
* @route /post/{postId}/add-comment
|
|
|
|
* @valdiate postId [0-9]+
|
|
|
|
*/
|
|
|
|
public function addAction($postId)
|
|
|
|
{
|
2013-10-18 00:09:50 +02:00
|
|
|
PrivilegesHelper::confirmWithException(Privilege::AddComment);
|
2013-10-17 22:57:32 +02:00
|
|
|
if ($this->config->registration->needEmailForCommenting)
|
|
|
|
PrivilegesHelper::confirmEmail($this->context->user);
|
|
|
|
|
|
|
|
$post = Model_Post::locate($postId);
|
|
|
|
|
|
|
|
$text = InputHelper::get('text');
|
|
|
|
if (!empty($text))
|
|
|
|
{
|
|
|
|
$text = Model_Comment::validateText($text);
|
|
|
|
$comment = R::dispense('comment');
|
|
|
|
$comment->post = $post;
|
2013-10-27 20:39:32 +01:00
|
|
|
if ($this->context->loggedIn)
|
|
|
|
$comment->commenter = $this->context->user;
|
2013-10-17 22:57:32 +02:00
|
|
|
$comment->comment_date = time();
|
|
|
|
$comment->text = $text;
|
|
|
|
if (InputHelper::get('sender') != 'preview')
|
|
|
|
R::store($comment);
|
|
|
|
$this->context->transport->textPreview = $comment->getText();
|
|
|
|
$this->context->transport->success = true;
|
|
|
|
}
|
2013-10-05 19:24:08 +02:00
|
|
|
}
|
2013-10-17 23:37:41 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @route /comment/{id}/delete
|
|
|
|
* @validate id [0-9]+
|
|
|
|
*/
|
|
|
|
public function deleteAction($id)
|
|
|
|
{
|
|
|
|
$comment = Model_Comment::locate($id);
|
2013-10-19 20:13:46 +02:00
|
|
|
R::preload($comment, ['commenter' => 'user']);
|
2013-10-18 00:09:50 +02:00
|
|
|
PrivilegesHelper::confirmWithException(Privilege::DeleteComment, PrivilegesHelper::getIdentitySubPrivilege($comment->commenter));
|
2013-10-17 23:37:41 +02:00
|
|
|
R::trash($comment);
|
|
|
|
$this->context->transport->success = true;
|
|
|
|
}
|
2013-10-05 19:24:08 +02:00
|
|
|
}
|