diff --git a/app/Http/Controllers/FrontIndexController.php b/app/Http/Controllers/FrontIndexController.php index 0a94782..f61943a 100644 --- a/app/Http/Controllers/FrontIndexController.php +++ b/app/Http/Controllers/FrontIndexController.php @@ -6,39 +6,49 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use App\Repositories\LocationRepository; use App\Repositories\SourceRepository; +use App\Repositories\MemberRepository; use App\Services\PaginationService; class FrontIndexController extends Controller { protected $location; protected $source; + protected $member; protected $pagination; public function __construct( LocationRepository $locationRepository, SourceRepository $sourceRepository, + MemberRepository $memberRepository, PaginationService $paginationService ) { $this->location = $locationRepository; $this->source = $sourceRepository; + $this->member = $memberRepository; $this->pagination = $paginationService; } public function start() { - //for fresh installs that dont have any source data yet - $latest_update = 'Never Run'; - if(count($this->location->getRecent()) != 0) - { - $latest_update = $this->location->getRecent()[0]->updated_at->format('Y M d'); + //check to see if there are any accounts + if (count($this->member->getAll()) == 0) { + return view('back.member', [ + 'mode' => 'admin-create', + 'title' => "Welcome, welcome"]); + } else { + //for fresh installs that dont have any source data yet + $latest_update = 'Never Run'; + if (count($this->location->getRecent()) != 0) { + $latest_update = $this->location->getRecent()[0]->updated_at->format('Y M d'); + } + return view('front.index', [ + 'count' => count($this->location->getActiveLocations()), + 'sources' => count($this->source->getActive()), + 'recent' => $this->location->getRecent(), + 'latest_date' => $latest_update, + 'title' => "The Bad Space" + ]); } - return view('front.index', [ - 'count' => count($this->location->getActiveLocations()), - 'sources' => count($this->source->getActive()), - 'recent' => $this->location->getRecent(), - 'latest_date' => $latest_update, - 'title' => "The Bad Space" - ]); } public function indexSearch(Request $request) diff --git a/app/Http/Controllers/MemberController.php b/app/Http/Controllers/MemberController.php index 9458ba9..2000dfb 100644 --- a/app/Http/Controllers/MemberController.php +++ b/app/Http/Controllers/MemberController.php @@ -151,4 +151,32 @@ class MemberController extends Controller return back()->withErrors(['Nah, you can\'t do this. Wrong permissions.']); } } + + public function adminCreate(Request $request) + { + //should only be run of no members exist + if (count($this->member->getAll()) == 0) { + $token = csrf_token(); + $valid = $request->validate([ + 'handle' => ['required'], + 'email' => ['required'], + 'pronouns' => ['required'], + 'fresh_pass' => ['required'], + 'fresh_pass_confirm' => ['required'], + ]); + + if ($valid) { + $response = $this->member->add($request); + if ($response['status'] == true) { + return redirect('/den/member')->with('message', $response['message']); + } else { + return back()->withErrors([$response['message']]); + } + } else { + return back()->withErrors(['Misssing some required info, homie.']); + } + } else { + return back()->withErrors(['Shame on you for even trying that.']); + } + } } diff --git a/app/Repositories/MemberRepository.php b/app/Repositories/MemberRepository.php index bbb7305..2c0a1ab 100644 --- a/app/Repositories/MemberRepository.php +++ b/app/Repositories/MemberRepository.php @@ -60,25 +60,43 @@ class MemberRepository public function add($request) { - $password = []; + $password = []; + $newFriend = []; if ($request->fresh_pass === $request->fresh_pass_confirm) { $password = Hash::make($request->fresh_pass); } else { return ['status' => false, 'message' => "Passwords Do Not Match"]; } - $newFriend = $this->model::create([ - 'uuid' => Uuid::uuid4(), - 'avatar' => 'default-member-avatar', - 'handle' => $request->handle, - 'email' => $request->email, - 'pronoun' => $request->pronouns, - 'role' => $request->role, - 'active' => $request->status, - 'password' => $password, - 'created_at' => Carbon::now(), - 'last_login' => Carbon::now(), - ]); + //if role paramter is set, not an admin add + if (isset($request->role)) { + $newFriend = $this->model::create([ + 'uuid' => Uuid::uuid4(), + 'avatar' => 'default-member-avatar', + 'handle' => $request->handle, + 'email' => $request->email, + 'pronoun' => $request->pronouns, + 'role' => $request->role, + 'active' => $request->status, + 'password' => $password, + 'created_at' => Carbon::now(), + 'last_login' => Carbon::now(), + ]); + } else { + //set up admin + $newFriend = $this->model::create([ + 'uuid' => Uuid::uuid4(), + 'avatar' => 'default-member-avatar', + 'handle' => $request->handle, + 'email' => $request->email, + 'pronoun' => $request->pronouns, + 'role' => 0, + 'active' => true, + 'password' => $password, + 'created_at' => Carbon::now(), + 'last_login' => Carbon::now(), + ]); + } if ($newFriend) { return ['status' => true, 'message' => "New Friend Made!"]; diff --git a/resources/views/back/member.blade.php b/resources/views/back/member.blade.php index 1f3b1de..44803de 100644 --- a/resources/views/back/member.blade.php +++ b/resources/views/back/member.blade.php @@ -2,38 +2,51 @@ @section('title', 'Den | Member Admin') - @php - if($mode == 'member-create') - { - $action_url = '/den/member/create'; - }else{ - $action_url = '/den/member/edit'; - } - @endphp - @section('main-content') -
-
- @switch($mode) - @case('member-edit') -

Edit Info for {{$member->handle}}

- @include('forms.member-edit') -
- @break + @php + switch($mode) + { + case 'member-create': + $action_url = '/den/member/create'; + break; + case 'member-edit': + $action_url = '/den/member/edit'; + break; + case 'admin-create': + $action_url = '/den/member/admin-create'; + break; + } + @endphp + @section('main-content') +
+
+ @switch($mode) + @case('member-edit') +

Edit Info for {{$member->handle}}

+ @include('forms.member-edit') +
+ @break - @case('member-create') -

New Member Info

- @include('forms.member-edit') -
- @break + @case('member-create') +

New Member Info

+ @include('forms.member-edit') +
+ @break - @default -

Member Listing

- @foreach($members as $member) - {{$member->handle}}
- @endforeach -

Add Member

- Make a new friend
- @endswitch -
-
- @endsection \ No newline at end of file + @case('admin-create') +

Make your first account

+ *This will be your administrator account. + @include('forms.member-edit') +
+ @break + + @default +

Member Listing

+ @foreach($members as $member) + {{$member->handle}}
+ @endforeach +

Add Member

+ Make a new friend
+ @endswitch +
+
+ @endsection \ No newline at end of file diff --git a/resources/views/forms/member-edit.blade.php b/resources/views/forms/member-edit.blade.php index 3d8c7c2..5d1942b 100644 --- a/resources/views/forms/member-edit.blade.php +++ b/resources/views/forms/member-edit.blade.php @@ -1,61 +1,74 @@
-
- @php +
+ @php isset($avatar) ? $avi = $avatar : $avi = ''; - @endphp - -
-
- @php + @endphp + +
+
+ @php isset($member->handle) ? $handle = $member->handle : $handle = ''; - @endphp - -
- @php + @endphp + +
+ @php isset($member->email) ? $email = $member->email : $email = ''; - @endphp -
- -
- @php + @endphp +
+ +
+ @php isset($member->pronoun) ? $pronoun = $member->pronoun : $pronoun = ''; - @endphp -
- -
- @php - isset($member->role) ? $role = $member->role : $role = 2; - @endphp -
- -
- @if($mode == 'member-create') -
- -
-
- -
- @endif - @php + @endphp +
+ +
+ @php + isset($member->role) ? $role = $member->role : $role = 2; + //for creation of initial admin account + if($mode == 'admin-create') + { + $role = 0; + } + @endphp + + @if($mode != 'admin-create') +
+ +
+ @endif + + @if($mode == 'member-create' || $mode == 'admin-create') +
+ +
+
+ +
+ @endif + @php isset($member->active) ? $status = $member->active : $status = false; - @endphp -
- -
-
- @csrf - @php + @endphp + + @if($mode != 'admin-create') +
+ +
+ @endif + +
+ @csrf + @php isset($member->uuid) ? $uuid = $member->uuid : $uuid = 0; - @endphp - - + @endphp + +
\ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 9c65116..74a4b84 100644 --- a/routes/web.php +++ b/routes/web.php @@ -28,6 +28,7 @@ Route::get("/location/{uuid}", [FrontIndexController::class, 'location']); Route::get("/appeals", [FrontIndexController::class, 'appeals']); Route::post("/search", [FrontIndexController::class, 'indexSearch']); Route::post("/appeal", [AppealController::class, 'sendAppeal']); +Route::post("/den/member/admin-create", [MemberController::class, 'adminCreate']); //exports Route::get("/exports", [ExportController::class, 'exportIndex']);