1
0
mirror of https://koodu.h-i.works/projects/thebadspace synced 2025-05-06 14:41:02 -05:00

Source creation and editing

A UI has been added for entering new sources and editing pre-existing
ones. No more having to edit the DB directly when wanting to add or
remove a source.
This commit is contained in:
ro 2025-04-18 15:16:32 -06:00
parent b7e2bbb334
commit 3e937c5083
5 changed files with 266 additions and 1 deletions

View File

@ -0,0 +1,102 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Repositories\SourceRepository;
class SourceController extends Controller
{
protected $sources;
public function __construct(
SourceRepository $sourceRepo
) {
$this->sources = $sourceRepo;
}
public function index(Request $request)
{
$member = Auth::user();
return view('back.sources', [
'mode' => 'index',
'handle' => $member->handle,
'sources' => $this->sources->getAll(),
'title' => "Manage Sources"]);
}
public function editSource(Request $request, $id = 0)
{
$source = $this->sources->get($id);
return view('back.sources', [
'mode' => 'source-edit',
'source' => $source,
'title' => "Edit Source Info"]);
}
public function createSource(Request $Request)
{
return view('back.sources', [
'mode' => 'source-create',
'title' => "Enter a new Source"]);
}
//actions
public function sourceEdit(Request $request)
{
$token = csrf_token();
//role check
$member = Auth::user();
if ($member->role == 0) {
$valid = $request->validate([
'url' => ['required'],
'type' => ['required'],
'status' => ['required'],
'format' => ['required'],
]);
if ($valid) {
$response = $this->sources->edit($request);
if ($response['status'] == true) {
return back()->with('message', $response['message']);
} else {
return back()->withErrors([$response['message']]);
}
} else {
return back()->withErrors(['Misssing some required info, homie.']);
}
} else {
return back()->withErrors(['Nah, you can\'t do this. Wrong permissions.']);
}
}
public function sourceCreate(Request $request)
{
$token = csrf_token();
$member = Auth::user();
if ($member->role == 0) {
$valid = $request->validate([
'url' => ['required'],
'type' => ['required'],
'status' => ['required'],
'format' => ['required'],
]);
if ($valid) {
$response = $this->sources->add($request);
if ($response['status'] == true) {
return redirect('/den/sources')->with('message', $response['message']);
} else {
return back()->withErrors([$response['message']]);
}
} else {
return back()->withErrors(['Misssing some required info, homie.']);
}
} else {
return back()->withErrors(['Nah, you can\'t do this. Wrong permissions.']);
}
}
}

View File

@ -21,11 +21,61 @@ class SourceRepository
$this->sources = $source::where("active", true)->get(); $this->sources = $source::where("active", true)->get();
} }
public function getAll()
{
return $this->source::all();
}
public function get($id)
{
return $this->source::where("id", $id)->first();
}
public function getActive() public function getActive()
{ {
return $this->source::where("active", true)->get(); return $this->source::where("active", true)->get();
} }
public function edit($request)
{
$source = $this->get($request->id);
$source->url = $request->url;
$source->type = $request->type;
$source->format = $request->format;
$source->active = $request->status;
$source->last_updated = Carbon::now();
//token check
if ($request->token != '' && $request->token != 'none') {
$source->token = $request->token;
} else {
$source->token = '';
}
if ($source->save()) {
return ['status' => true, 'message' => "Source Editited"];
} else {
return ['status' => false, 'message' => "Source Not Editited"];
}
}
public function add($request)
{
$newSource = $this->source::create([
'url' => $request->url,
'type' => $request->type,
'format' => $request->format,
'active' => $request->status,
'token' => $request->token,
'last_udated' => Carbon::now(),
]);
if ($newSource) {
return ['status' => true, 'message' => "New Source Created!"];
} else {
return ['status' => false, 'message' => "Uh oh, New Source Not Created!"];
}
}
public function updateSourceData($index = 0) public function updateSourceData($index = 0)
{ {
//checks all the sources to refresh data //checks all the sources to refresh data

View File

@ -0,0 +1,42 @@
@extends('frame')
@section('title', 'Den | Sources Admin')
@php
switch($mode)
{
case 'source-create':
$action_url = '/den/source/create';
break;
case 'source-edit':
$action_url = '/den/source/edit';
break;
}
@endphp
@section('main-content')
<section>
<article>
@switch($mode)
@case('source-edit')
<h2>Edit Info for {{$source->url}}</h2>
@include('forms.source-edit')
<br />
@break
@case('source-create')
<h2>New Source Info</h2>
@include('forms.source-edit')
<br />
@break
@default
<h2>Current Sources </h2>
@foreach($sources as $source)
<a href="/den/source/{{$source->id}}">{{$source->url}}</a><br />
@endforeach
<h2>Add Source </h2>
<a href="/den/source/edit/create">Add a new Source</a><br />
@endswitch
</article>
</section>
@endsection

View File

@ -0,0 +1,66 @@
<form action="{{$action_url}}" method="post" enctype="multipart/form-data">
<div>
@php
isset($source->url) ? $url = $source->url : $url = '';
@endphp
<label>URL</label><br />
<input type="text" name="url" value="{{$url}}" />
<br />
@php
isset($source->type) ? $type = $source->type : $type = '';
@endphp
<label>Type</label><br />
<select name="type">
@if($type == 'mastodon')
<option value="mastodon" selected>Mastodon</option>
<option value="gotosocial">GoToSocial</option>
@else
<option value="mastodon">Mastodon</option>
<option value="gotosocial" selected>GoToSocial</option>
@endif
</select>
<br />
@php
isset($source->format) ? $format = $source->format : $format = '';
@endphp
<label>Format</label><br />
<select name="format">
@if($format == 'json')
<option value="json" selected>JSON</option>
<option value="csv">CSV</option>
@else
<option value="json">JSON</option>
<option value="csv" selected>CSV</option>
@endif
</select>
<br />
@php
isset($source->active) ? $status = $source->active : $status = false;
@endphp
<label>Active?</label><br />
<select name="status">
@if($status)
<option value="true" selected>Active</option>
<option value="false">Not Active</option>
@else
<option value="true">Active</option>
<option value="false" selected>Not Active</option>
@endif
</select>
<br />
@php
isset($source->token) ? $token = $source->token : $token = '';
@endphp
<label>Access Token (enter 'none' to clear)</label><br />
<input type="text" name="token" value="{{$token}}" />
<br />
</div>
@csrf
@php
isset($source->id) ? $id = $source->id : $id = 0;
@endphp
<input type="hidden" name="id" value="{{$id}}" />
<input type="submit" value="Edit Source" name="submit_button">
</form>

View File

@ -8,6 +8,7 @@ use App\Http\Controllers\LocationController;
use App\Http\Controllers\MemberController; use App\Http\Controllers\MemberController;
use App\Http\Controllers\ExportController; use App\Http\Controllers\ExportController;
use App\Http\Controllers\AppealController; use App\Http\Controllers\AppealController;
use App\Http\Controllers\SourceController;
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -55,9 +56,13 @@ Route::group(['prefix' => 'den', 'middleware' => 'member.check'], function () {
Route::get("/member/{uuid}", [MemberController::class, 'editMember']); Route::get("/member/{uuid}", [MemberController::class, 'editMember']);
Route::get("/member/edit/create", [MemberController::class, 'createMember']); Route::get("/member/edit/create", [MemberController::class, 'createMember']);
//source stuff //source stuff
Route::get("/sources", [MemberController::class, 'index']); Route::get("/sources", [SourceController::class, 'index']);
Route::get("/source/{id}", [SourceController::class, 'editSource']);
Route::get("/source/edit/create", [SourceController::class, 'createSource']);
//actions //actions
Route::post("/profile/edit", [MemberController::class, 'profileEdit']); Route::post("/profile/edit", [MemberController::class, 'profileEdit']);
Route::post("/member/edit", [MemberController::class, 'memberEdit']); Route::post("/member/edit", [MemberController::class, 'memberEdit']);
Route::post("/member/create", [MemberController::class, 'memberCreate']); Route::post("/member/create", [MemberController::class, 'memberCreate']);
Route::post("/source/edit", [SourceController::class, 'sourceEdit']);
Route::post("/source/create", [SourceController::class, 'sourceCreate']);
}); });