forked from projects/thebadspace
ro
0eeab6355e
changed the the way files are uploaded to go into their own directory called 'references' organized by location, identified by uuid. the 'references' directory was added to git ignore to those images are not saved in the repo, since every install will have their own set of images also updated reference links to be shown on the front end if they have been added to a location unnecessary links where moved from the admin member template since they have been incorporated into the appropriate area. a template for editing member account information has also been added.
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->description = $request->description;
|
|
$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',
|
|
]);
|
|
}
|
|
}
|
|
}
|