forked from projects/thebadspace
ro
ccd0a7a3a9
locations needed another data point for notes to additional information about instances that aren't covered by public comments, i.e. if the site is still live, additional concerns, etc, so that's been added and the appropriate template files added also, public comments where not being included in the CSV exports, so that's been patched as well
130 lines
4.3 KiB
PHP
130 lines
4.3 KiB
PHP
<?php
|
|
|
|
namespace App\Repositories;
|
|
|
|
use App\Models\Location;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
class LocationRepository
|
|
{
|
|
protected $model;
|
|
|
|
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($type)
|
|
{
|
|
if (!is_string($type) || (preg_match('/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/', $type) !== 1)) {
|
|
return $this->model::where("url", $type)->first();
|
|
} else {
|
|
return $this->model::where("uuid", $type)->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 editLocation($request)
|
|
{
|
|
$location = $this->getLocation($request->id);
|
|
$publicPath = '../public/';
|
|
$refPath = 'assets/images/references/' . $location->uuid;
|
|
$images = [];
|
|
if ($request->hasfile("references")) {
|
|
foreach ($request->references as $file) {
|
|
if (!is_dir($publicPath . $refPath)) {
|
|
mkdir($publicPath . $refPath, 0755, true);
|
|
}
|
|
$filename = urlencode($file->getClientOriginalName());
|
|
$file->move($publicPath . $refPath, $filename);
|
|
//$path = $file->store('reference');
|
|
array_push($images, ["path" => '/' . $refPath . '/' . $filename]);
|
|
}
|
|
}
|
|
if (!empty($images)) {
|
|
$request->merge(['images' => json_encode($images)]);
|
|
$location->images = json_encode($images);
|
|
}
|
|
|
|
$location->name = $request->name;
|
|
$location->notes = $request->notes;
|
|
$location->archive_links = $request->archive_links;
|
|
|
|
$result = [];
|
|
|
|
if ($location->save()) {
|
|
return ['status' => true, 'message' => "Location Editited" . $request->hasfile("references")];
|
|
} else {
|
|
return ['status' => false, 'message' => "Location Not Editited"];
|
|
}
|
|
}
|
|
|
|
public function addLocation(Request $request)
|
|
{
|
|
$fields = $request->validate([
|
|
'name' => ['required'],
|
|
'url' => ['required'],
|
|
'description' => ['required'],
|
|
'tags' => ['required'],
|
|
]);
|
|
|
|
if ($fields) {
|
|
$examples = [];
|
|
$files = $request->files->get("loc_examples");
|
|
if ($request->hasfile('loc_examples')) {
|
|
foreach ($request->file('loc_examples') as $file) {
|
|
$path = $file->store('reference');
|
|
array_push($examples, ["path" => $path]);
|
|
}
|
|
}
|
|
$request->merge(['active' => true]);
|
|
$request->merge(['uuid' => Uuid::uuid4()]);
|
|
$request->merge(['images' => json_encode($examples)]);
|
|
$request->merge(['added_by' => Auth::user()->id]);
|
|
//NOTE: Laravel gets funky if sequencing isn't explicitly set
|
|
$new = Location::create($request->all());
|
|
if ($new) {
|
|
return back()->with('message', 'New Location Added. Take a break!');
|
|
} else {
|
|
return back()->withErrors([
|
|
'error' => 'Uh oh. There was an inssue',
|
|
]);
|
|
}
|
|
} else {
|
|
return back()->withErrors([
|
|
'error' => 'All fields are required',
|
|
]);
|
|
}
|
|
}
|
|
}
|