Moved post retrieval to API
This commit is contained in:
parent
cebff0ef4e
commit
9f4d97aa23
8 changed files with 62 additions and 21 deletions
|
@ -87,6 +87,9 @@ $postValidation =
|
||||||
\Chibi\Router::register(['PostController', 'favoritesView'], 'GET', '/favorites/{page}', $postValidation);
|
\Chibi\Router::register(['PostController', 'favoritesView'], 'GET', '/favorites/{page}', $postValidation);
|
||||||
\Chibi\Router::register(['PostController', 'upvotedView'], 'GET', '/upvoted', $postValidation);
|
\Chibi\Router::register(['PostController', 'upvotedView'], 'GET', '/upvoted', $postValidation);
|
||||||
\Chibi\Router::register(['PostController', 'upvotedView'], 'GET', '/upvoted/{page}', $postValidation);
|
\Chibi\Router::register(['PostController', 'upvotedView'], 'GET', '/upvoted/{page}', $postValidation);
|
||||||
|
|
||||||
|
\Chibi\Router::register(['PostController', 'genericView'], 'GET', '/post/{id}', $postValidation);
|
||||||
|
|
||||||
\Chibi\Router::register(['PostController', 'toggleTagAction'], 'POST', '/post/{id}/toggle-tag/{tag}/{enable}', $postValidation);
|
\Chibi\Router::register(['PostController', 'toggleTagAction'], 'POST', '/post/{id}/toggle-tag/{tag}/{enable}', $postValidation);
|
||||||
\Chibi\Router::register(['PostController', 'flagAction'], 'POST', '/post/{id}/flag', $postValidation);
|
\Chibi\Router::register(['PostController', 'flagAction'], 'POST', '/post/{id}/flag', $postValidation);
|
||||||
\Chibi\Router::register(['PostController', 'hideAction'], 'POST', '/post/{id}/hide', $postValidation);
|
\Chibi\Router::register(['PostController', 'hideAction'], 'POST', '/post/{id}/hide', $postValidation);
|
||||||
|
@ -96,16 +99,21 @@ $postValidation =
|
||||||
\Chibi\Router::register(['PostController', 'scoreAction'], 'POST', '/post/{id}/score/{score}', $postValidation);
|
\Chibi\Router::register(['PostController', 'scoreAction'], 'POST', '/post/{id}/score/{score}', $postValidation);
|
||||||
\Chibi\Router::register(['PostController', 'featureAction'], 'POST', '/post/{id}/feature', $postValidation);
|
\Chibi\Router::register(['PostController', 'featureAction'], 'POST', '/post/{id}/feature', $postValidation);
|
||||||
|
|
||||||
\Chibi\Router::register(['CommentController', 'listView'], 'GET', '/comments');
|
$commentValidation =
|
||||||
\Chibi\Router::register(['CommentController', 'listView'], 'GET', '/comments/{page}', ['page' => '\d+']);
|
[
|
||||||
\Chibi\Router::register(['CommentController', 'addAction'], 'POST', '/comment/add');
|
'id' => '\d+',
|
||||||
\Chibi\Router::register(['CommentController', 'deleteAction'], 'POST', '/comment/{id}/delete', ['id' => '\d+']);
|
'page' => '\d+',
|
||||||
\Chibi\Router::register(['CommentController', 'editView'], 'GET', '/comment/{id}/edit', ['id' => '\d+']);
|
];
|
||||||
\Chibi\Router::register(['CommentController', 'editAction'], 'POST', '/comment/{id}/edit', ['id' => '\d+']);
|
|
||||||
|
\Chibi\Router::register(['CommentController', 'listView'], 'GET', '/comments', $commentValidation);
|
||||||
|
\Chibi\Router::register(['CommentController', 'listView'], 'GET', '/comments/{page}', $commentValidation);
|
||||||
|
\Chibi\Router::register(['CommentController', 'addAction'], 'POST', '/comment/add', $commentValidation);
|
||||||
|
\Chibi\Router::register(['CommentController', 'deleteAction'], 'POST', '/comment/{id}/delete', $commentValidation);
|
||||||
|
\Chibi\Router::register(['CommentController', 'editView'], 'GET', '/comment/{id}/edit', $commentValidation);
|
||||||
|
\Chibi\Router::register(['CommentController', 'editAction'], 'POST', '/comment/{id}/edit', $commentValidation);
|
||||||
|
|
||||||
foreach (['GET', 'POST'] as $method)
|
foreach (['GET', 'POST'] as $method)
|
||||||
{
|
{
|
||||||
\Chibi\Router::register(['PostController', 'viewAction'], $method, '/post/{id}', $postValidation);
|
|
||||||
\Chibi\Router::register(['PostController', 'retrieveAction'], $method, '/post/{name}/retrieve', $postValidation);
|
\Chibi\Router::register(['PostController', 'retrieveAction'], $method, '/post/{name}/retrieve', $postValidation);
|
||||||
\Chibi\Router::register(['PostController', 'thumbAction'], $method, '/post/{name}/thumb', $postValidation);
|
\Chibi\Router::register(['PostController', 'thumbAction'], $method, '/post/{name}/thumb', $postValidation);
|
||||||
|
|
||||||
|
|
|
@ -218,16 +218,13 @@ class PostController
|
||||||
FeaturePostJob::POST_ID => $id]);
|
FeaturePostJob::POST_ID => $id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function viewAction($id)
|
public function genericView($id)
|
||||||
{
|
{
|
||||||
$context = getContext();
|
$context = getContext();
|
||||||
$post = PostModel::findByIdOrName($id);
|
$context->viewName = 'post-view';
|
||||||
CommentModel::preloadCommenters($post->getComments());
|
|
||||||
|
|
||||||
if ($post->hidden)
|
$post = Api::run(new GetPostJob(), [
|
||||||
Access::assert(Privilege::ViewPost, 'hidden');
|
GetPostJob::POST_ID => $id]);
|
||||||
Access::assert(Privilege::ViewPost);
|
|
||||||
Access::assert(Privilege::ViewPost, PostSafety::toString($post->safety));
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -245,6 +242,8 @@ class PostController
|
||||||
$context->transport->lastSearchQuery, $id);
|
$context->transport->lastSearchQuery, $id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//todo:
|
||||||
|
//move these to PostEntity when implementing ApiController
|
||||||
$favorite = Auth::getCurrentUser()->hasFavorited($post);
|
$favorite = Auth::getCurrentUser()->hasFavorited($post);
|
||||||
$score = Auth::getCurrentUser()->getScore($post);
|
$score = Auth::getCurrentUser()->getScore($post);
|
||||||
$flagged = in_array(TextHelper::reprPost($post), SessionHelper::get('flagged', []));
|
$flagged = in_array(TextHelper::reprPost($post), SessionHelper::get('flagged', []));
|
||||||
|
|
|
@ -127,7 +127,7 @@ class CustomMarkdown extends \Michelf\MarkdownExtra
|
||||||
|
|
||||||
protected function doPosts($text)
|
protected function doPosts($text)
|
||||||
{
|
{
|
||||||
$link = \Chibi\Router::linkTo(['PostController', 'viewAction'], ['id' => '_post_']);
|
$link = \Chibi\Router::linkTo(['PostController', 'genericView'], ['id' => '_post_']);
|
||||||
return preg_replace_callback('/(?:(?<![^\s\(\)\[\]]))@(\d+)/', function($x) use ($link)
|
return preg_replace_callback('/(?:(?<![^\s\(\)\[\]]))@(\d+)/', function($x) use ($link)
|
||||||
{
|
{
|
||||||
return $this->hashPart('<a href="' . str_replace('_post_', $x[1], $link) . '"><code>' . $x[0] . '</code></a>');
|
return $this->hashPart('<a href="' . str_replace('_post_', $x[1], $link) . '"><code>' . $x[0] . '</code></a>');
|
||||||
|
|
34
src/Jobs/GetPostJob.php
Normal file
34
src/Jobs/GetPostJob.php
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
<?php
|
||||||
|
class GetPostJob extends AbstractPostEditJob
|
||||||
|
{
|
||||||
|
public function execute()
|
||||||
|
{
|
||||||
|
$post = $this->post;
|
||||||
|
|
||||||
|
//todo: refactor this so that requiresPrivilege can accept multiple privileges
|
||||||
|
if ($this->post->hidden)
|
||||||
|
Access::assert(Privilege::ViewPost, 'hidden');
|
||||||
|
Access::assert(Privilege::ViewPost);
|
||||||
|
Access::assert(Privilege::ViewPost, PostSafety::toString($this->post->safety));
|
||||||
|
|
||||||
|
CommentModel::preloadCommenters($post->getComments());
|
||||||
|
|
||||||
|
return $post;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function requiresPrivilege()
|
||||||
|
{
|
||||||
|
//temporarily enforced in execute
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function requiresAuthentication()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function requiresConfirmedEmail()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
|
@ -32,7 +32,7 @@ Assets::setSubTitle('comments');
|
||||||
|
|
||||||
<?php if (count($comments) > count($commentsToDisplay)): ?>
|
<?php if (count($comments) > count($commentsToDisplay)): ?>
|
||||||
<a href="<?= \Chibi\Router::linkTo(
|
<a href="<?= \Chibi\Router::linkTo(
|
||||||
['PostController', 'viewAction'],
|
['PostController', 'genericView'],
|
||||||
['id' => $this->context->post->id]) ?>">
|
['id' => $this->context->post->id]) ?>">
|
||||||
<span class="hellip">(more…)</span>
|
<span class="hellip">(more…)</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -44,7 +44,7 @@ if ($masstag)
|
||||||
<?php if (Auth::getCurrentUser()->hasEnabledPostTagTitles()): ?>
|
<?php if (Auth::getCurrentUser()->hasEnabledPostTagTitles()): ?>
|
||||||
title="<?= TextHelper::reprTags($this->context->post->getTags()) ?>"
|
title="<?= TextHelper::reprTags($this->context->post->getTags()) ?>"
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
href="<?= \Chibi\Router::linkTo(['PostController', 'viewAction'], ['id' => $this->context->post->id]) ?>">
|
href="<?= \Chibi\Router::linkTo(['PostController', 'genericView'], ['id' => $this->context->post->id]) ?>">
|
||||||
|
|
||||||
<img
|
<img
|
||||||
class="thumb"
|
class="thumb"
|
||||||
|
|
|
@ -31,7 +31,7 @@ $canEditAnything = count(array_filter($editPostPrivileges)) > 0;
|
||||||
<div class="left">
|
<div class="left">
|
||||||
<?php if ($this->context->transport->nextPostId): ?>
|
<?php if ($this->context->transport->nextPostId): ?>
|
||||||
<a href="<?= \Chibi\Router::linkTo(
|
<a href="<?= \Chibi\Router::linkTo(
|
||||||
['PostController', 'viewAction'],
|
['PostController', 'genericView'],
|
||||||
['id' => $this->context->transport->nextPostId]) ?>">
|
['id' => $this->context->transport->nextPostId]) ?>">
|
||||||
<?php else: ?>
|
<?php else: ?>
|
||||||
<a class="disabled">
|
<a class="disabled">
|
||||||
|
@ -44,7 +44,7 @@ $canEditAnything = count(array_filter($editPostPrivileges)) > 0;
|
||||||
<div class="right">
|
<div class="right">
|
||||||
<?php if ($this->context->transport->prevPostId): ?>
|
<?php if ($this->context->transport->prevPostId): ?>
|
||||||
<a href="<?= \Chibi\Router::linkTo(
|
<a href="<?= \Chibi\Router::linkTo(
|
||||||
['PostController', 'viewAction'],
|
['PostController', 'genericView'],
|
||||||
['id' => $this->context->transport->prevPostId]) ?>">
|
['id' => $this->context->transport->prevPostId]) ?>">
|
||||||
<?php else: ?>
|
<?php else: ?>
|
||||||
<a class="disabled">
|
<a class="disabled">
|
||||||
|
@ -259,7 +259,7 @@ $canEditAnything = count(array_filter($editPostPrivileges)) > 0;
|
||||||
<ul>
|
<ul>
|
||||||
<?php foreach ($this->context->transport->post->getRelations() as $relatedPost): ?>
|
<?php foreach ($this->context->transport->post->getRelations() as $relatedPost): ?>
|
||||||
<li>
|
<li>
|
||||||
<a href="<?= \Chibi\Router::linkTo(['PostController', 'viewAction'], ['id' => $relatedPost->id]) ?>">
|
<a href="<?= \Chibi\Router::linkTo(['PostController', 'genericView'], ['id' => $relatedPost->id]) ?>">
|
||||||
@<?= $relatedPost->id ?>
|
@<?= $relatedPost->id ?>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -14,7 +14,7 @@ Assets::addStylesheet('static-main.css');
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<?php
|
<?php
|
||||||
$this->context->transport->post = $this->context->featuredPost;
|
$this->context->transport->post = $this->context->featuredPost;
|
||||||
$this->context->imageLink = \Chibi\Router::linkTo(['PostController', 'viewAction'], [
|
$this->context->imageLink = \Chibi\Router::linkTo(['PostController', 'genericView'], [
|
||||||
'id' => $this->context->featuredPost->id]);
|
'id' => $this->context->featuredPost->id]);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue