diff --git a/src/Controllers/CommentController.php b/src/Controllers/CommentController.php
index 4cf688b9..f1ab6267 100644
--- a/src/Controllers/CommentController.php
+++ b/src/Controllers/CommentController.php
@@ -40,7 +40,7 @@ class CommentController
$comments = $searchDbQuery->get();
$comments = R::convertToBeans('comment', $comments);
- R::preload($comments, ['commenter' => 'user']);
+ R::preload($comments, ['commenter' => 'user', 'post', 'post.uploader' => 'user']);
$this->context->postGroups = true;
$this->context->transport->paginator = new StdClass;
$this->context->transport->paginator->page = $page;
diff --git a/src/Controllers/PostController.php b/src/Controllers/PostController.php
index c66465c6..1e20021d 100644
--- a/src/Controllers/PostController.php
+++ b/src/Controllers/PostController.php
@@ -84,8 +84,34 @@ class PostController
$buildDbQuery = function($dbQuery, $query)
{
- $dbQuery->from('post');
+ $dbQuery
+ ->addSql(', ')
+ ->open()
+ ->select('COUNT(1)')
+ ->from('comment')
+ ->where('comment.post_id = post.id')
+ ->close()
+ ->as('comment_count');
+ $dbQuery
+ ->addSql(', ')
+ ->open()
+ ->select('COUNT(1)')
+ ->from('favoritee')
+ ->where('favoritee.post_id = post.id')
+ ->close()
+ ->as('fav_count');
+
+ $dbQuery
+ ->addSql(', ')
+ ->open()
+ ->select('COUNT(1)')
+ ->from('post_tag')
+ ->where('post_tag.post_id = post.id')
+ ->close()
+ ->as('tag_count');
+
+ $dbQuery->from('post');
/* safety */
$allowedSafety = array_filter(PostSafety::getAll(), function($safety)
@@ -121,12 +147,14 @@ class PostController
$page = max(1, min($pageCount, $page));
$searchDbQuery = R::$f->begin();
- $searchDbQuery->select('*');
+ $searchDbQuery->select('post.*');
$buildDbQuery($searchDbQuery, $query);
$searchDbQuery->limit('?')->put($postsPerPage);
$searchDbQuery->offset('?')->put(($page - 1) * $postsPerPage);
$posts = $searchDbQuery->get();
+ $posts = R::convertToBeans('post', $posts);
+ R::preload($posts, ['uploader' => 'user']);
$this->context->transport->paginator = new StdClass;
$this->context->transport->paginator->page = $page;
$this->context->transport->paginator->pageCount = $pageCount;
@@ -593,7 +621,7 @@ class PostController
private function decorateSearchQuery($dbQuery, $tokens)
{
- $orderColumn = 'id';
+ $orderColumn = 'post.id';
$orderDir = 1;
$randomReset = true;
@@ -601,13 +629,13 @@ class PostController
{
if ($token{0} == '-')
{
- $dbQuery->andNot();
+ $andFunc = 'andNot';
$token = substr($token, 1);
$neg = true;
}
else
{
- $dbQuery->and();
+ $andFunc = 'and';
$neg = false;
}
@@ -616,6 +644,7 @@ class PostController
{
$val = $token;
$dbQuery
+ ->$andFunc()
->exists()
->open()
->select('1')
@@ -637,12 +666,7 @@ class PostController
case 'favmax':
$operator = $key == 'favmin' ? '>=' : '<=';
$dbQuery
- ->open()
- ->select('COUNT(1)')
- ->from('favoritee')
- ->where('post_id = post.id')
- ->close()
- ->addSql($operator . ' ?')->put(intval($val));
+ ->$andFunc('fav_count ' . $operator . ' ?')->put(intval($val));
break;
case 'type':
@@ -658,7 +682,7 @@ class PostController
throw new SimpleException('Unknown type "' . $val . '"');
}
$dbQuery
- ->addSql('type = ?')
+ ->$andFunc('type = ?')
->put($type);
break;
@@ -679,7 +703,7 @@ class PostController
if ($key == 'date')
{
$dbQuery
- ->addSql('upload_date >= ?')
+ ->$andFunc('upload_date >= ?')
->and('upload_date <= ?')
->put($timeMin)
->put($timeMax);
@@ -687,13 +711,13 @@ class PostController
elseif ($key == 'datemin')
{
$dbQuery
- ->addSql('upload_date >= ?')
+ ->$andFunc('upload_date >= ?')
->put($timeMin);
}
elseif ($key == 'datemax')
{
$dbQuery
- ->addSql('upload_date <= ?')
+ ->$andFunc('upload_date <= ?')
->put($timeMax);
}
else
@@ -708,6 +732,7 @@ class PostController
case 'favoritee':
case 'favoriter':
$dbQuery
+ ->$andFunc()
->exists()
->open()
->select('1')
@@ -724,7 +749,7 @@ class PostController
case 'uploader':
case 'uploaded':
$dbQuery
- ->addSql('uploader_id = ')
+ ->$andFunc('uploader_id = ')
->open()
->select('user.id')
->from('user')
@@ -751,35 +776,30 @@ class PostController
if ($neg)
{
$orderDir *= -1;
- $dbQuery->addSql('0');
- }
- else
- {
- $dbQuery->addSql('1');
}
switch ($val)
{
case 'id':
- $orderColumn = 'id';
+ $orderColumn = 'post.id';
break;
case 'date':
- $orderColumn = 'upload_date';
+ $orderColumn = 'post.upload_date';
break;
case 'comment':
case 'comments':
case 'commentcount':
- $orderColumn = '(SELECT COUNT(1) FROM comment WHERE post_id = post.id)';
+ $orderColumn = 'comment_count';
break;
case 'fav':
case 'favs':
case 'favcount':
- $orderColumn = '(SELECT COUNT(1) FROM favoritee WHERE post_id = post.id)';
+ $orderColumn = 'fav_count';
break;
case 'tag':
case 'tags':
case 'tagcount':
- $orderColumn = '(SELECT COUNT(1) FROM post_tag WHERE post_id = post.id)';
+ $orderColumn = 'tag_count';
break;
case 'random':
//seeding works like this: if you visit anything
@@ -805,6 +825,11 @@ class PostController
if ($randomReset)
unset($_SESSION['browsing-seed']);
- $dbQuery->orderBy($orderColumn . ' ' . ($orderDir == 1? 'DESC' : 'ASC'));
+
+ $dbQuery->orderBy($orderColumn);
+ if ($orderDir == 1)
+ $dbQuery->desc();
+ else
+ $dbQuery->asc();
}
}
diff --git a/src/Controllers/UserController.php b/src/Controllers/UserController.php
index 397260ed..461cd361 100644
--- a/src/Controllers/UserController.php
+++ b/src/Controllers/UserController.php
@@ -189,6 +189,16 @@ class UserController
if ($suppliedPasswordHash != $user->pass_hash)
throw new SimpleException('Must supply valid password');
}
+ foreach ($user->alias('commenter')->ownComment as $comment)
+ {
+ $comment->commenter = null;
+ R::store($comment);
+ }
+ foreach ($user->alias('uploader')->ownPost as $post)
+ {
+ $post->uploader = null;
+ R::store($post);
+ }
$user->ownFavoritee = [];
R::store($user);
R::trash($user);
@@ -375,6 +385,8 @@ class UserController
->put(($page - 1) * $postsPerPage);
$posts = $searchDbQuery->get();
+ $posts = R::convertToBeans('post', $posts);
+ R::preload($posts, ['uploader' => 'user']);
$this->context->transport->user = $user;
$this->context->transport->tab = $tab;
$this->context->transport->paginator = new StdClass;
diff --git a/src/Helpers/PrivilegesHelper.php b/src/Helpers/PrivilegesHelper.php
index 5c1a9e1e..33e15cf0 100644
--- a/src/Helpers/PrivilegesHelper.php
+++ b/src/Helpers/PrivilegesHelper.php
@@ -52,6 +52,8 @@ class PrivilegesHelper
public static function getIdentitySubPrivilege($user)
{
+ if (!$user)
+ return false;
$userFromContext = \Chibi\Registry::getContext()->user;
return $user->id == $userFromContext->id ? 'own' : 'all';
}
diff --git a/src/Views/post-small.phtml b/src/Views/post-small.phtml
index ed75bec1..62947279 100644
--- a/src/Views/post-small.phtml
+++ b/src/Views/post-small.phtml
@@ -1,3 +1,3 @@
-
-
+
+
diff --git a/src/Views/post-view.phtml b/src/Views/post-view.phtml
index f04c866a..c028d210 100644
--- a/src/Views/post-view.phtml
+++ b/src/Views/post-view.phtml
@@ -53,7 +53,7 @@