From 481aa5b5b00a6f0ecad0617c52c3c6148b69a49b Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sun, 1 Oct 2017 11:24:13 +0100 Subject: [PATCH] Added 'last_commented' sort option to search Closes #440 --- app/Services/SearchService.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/app/Services/SearchService.php b/app/Services/SearchService.php index aebeace1e..3eeaf32aa 100644 --- a/app/Services/SearchService.php +++ b/app/Services/SearchService.php @@ -481,4 +481,23 @@ class SearchService }); } + protected function filterSortBy(\Illuminate\Database\Eloquent\Builder $query, Entity $model, $input) + { + $functionName = camel_case('sort_by_' . $input); + if (method_exists($this, $functionName)) $this->$functionName($query, $model); + } + + + /** + * Sorting filter options + */ + + protected function sortByLastCommented(\Illuminate\Database\Eloquent\Builder $query, Entity $model) + { + $commentsTable = $this->db->getTablePrefix() . 'comments'; + $morphClass = str_replace('\\', '\\\\', $model->getMorphClass()); + $commentQuery = $this->db->raw('(SELECT c1.entity_id, c1.entity_type, c1.created_at as last_commented FROM '.$commentsTable.' c1 LEFT JOIN '.$commentsTable.' c2 ON (c1.entity_id = c2.entity_id AND c1.entity_type = c2.entity_type AND c1.created_at < c2.created_at) WHERE c1.entity_type = \''. $morphClass .'\' AND c2.created_at IS NULL) as comments'); + + $query->join($commentQuery, $model->getTable() . '.id', '=', 'comments.entity_id')->orderBy('last_commented', 'desc'); + } } \ No newline at end of file