ForRo/app/Repositories/LocationRepository.php
ro 2bcb887d19 simplified pagination, cleaned up front controller
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.
2024-02-10 11:48:09 -06:00

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];
}
}