forked from projects/thebadspace
ro
2bcb887d19
Adding total actions count to location data has made it possible to simplify backend data queries, so the custom pagination was optimized and location repositories have been cleaned up. the front end controller has been cleaned up as well, which has resulted in the appropriate template being polished up as well.
74 lines
2 KiB
PHP
74 lines
2 KiB
PHP
<?php
|
|
|
|
namespace App\Repositories;
|
|
|
|
use App\Models\Location;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class LocationRepository
|
|
{
|
|
protected $model;
|
|
private $limit = 15;
|
|
|
|
public function __construct(Location $model)
|
|
{
|
|
$this->model = $model;
|
|
}
|
|
|
|
public function search($request)
|
|
{
|
|
// this grabs the search results from the db
|
|
$terms = $request->index_search;
|
|
$rawSearch = $terms;
|
|
$terms = str_replace(",", "", $terms);
|
|
$terms = str_replace(" ", "|", $terms);
|
|
$raw = DB::select("SELECT * FROM searchlocations(?)", [$terms]);
|
|
$results = [];
|
|
foreach ($raw as $item) {
|
|
if (($item->block_count + $item->silence_count) >= 2) {
|
|
array_push($results, $item);
|
|
}
|
|
}
|
|
|
|
return $results;
|
|
}
|
|
|
|
public function getLocation($uuid)
|
|
{
|
|
return $this->model::where("uuid", $uuid)->first();
|
|
}
|
|
|
|
public function getActiveLocations()
|
|
{
|
|
return $this->model::where("active", true)->where('actions_count', '>=', 2)->get();
|
|
}
|
|
|
|
public function getRecent()
|
|
{
|
|
return $locations = $this->model::where("active", true)->where('actions_count', '>=', 2)
|
|
->orderByDesc('updated_at')->limit(10)->get();
|
|
}
|
|
|
|
public function getPage($pageNum)
|
|
{
|
|
$range = $pageNum * $this->limit - $this->limit;
|
|
$active = $this->model::where("active", true)->where('actions_count', '>=', 2)->get();
|
|
$locations = $this->model::where("active", true)->where('actions_count', '>=', 2)
|
|
->limit($this->limit)->offset($range)->orderBy('id', 'asc')->get();
|
|
$pageCount = ceil(count($active) / $this->limit);
|
|
|
|
$next = $pageNum + 1;
|
|
if ($next > $pageCount) {
|
|
$next = 1;
|
|
}
|
|
|
|
$prev = $pageNum - 1;
|
|
|
|
if ($prev <= 0) {
|
|
$prev = $pageCount;
|
|
}
|
|
|
|
return $result = [$locations, $pageCount, $prev, $next];
|
|
}
|
|
}
|