This commit is contained in:
Sebastian Davaris 2020-06-30 12:22:44 +02:00
commit 52735bc569
34 changed files with 356 additions and 82 deletions

View File

@ -1,19 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="DataSourceManagerImpl" format="xml" multifile-model="true"> <component name="DataSourceManagerImpl" format="xml" multifile-model="true">
<data-source source="LOCAL" name="laravel" uuid="666d3dad-499f-4d99-8988-fd376e6db9e6"> <data-source source="LOCAL" name="laravel.sqlite" uuid="bf392a85-1584-4a27-a552-e491a55b9410">
<driver-ref>sqlite.xerial</driver-ref> <driver-ref>sqlite.xerial</driver-ref>
<synchronize>true</synchronize> <synchronize>true</synchronize>
<jdbc-driver>org.sqlite.JDBC</jdbc-driver> <jdbc-driver>org.sqlite.JDBC</jdbc-driver>
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/skolehjem/database/laravel.sqlite</jdbc-url> <jdbc-url>jdbc:sqlite:$PROJECT_DIR$/skolehjem/database/laravel.sqlite</jdbc-url>
<libraries>
<library>
<url>file://$APPLICATION_CONFIG_DIR$/jdbc-drivers/Xerial SQLiteJDBC/3.31.1/license.txt</url>
</library>
<library>
<url>file://$APPLICATION_CONFIG_DIR$/jdbc-drivers/Xerial SQLiteJDBC/3.31.1/sqlite-jdbc-3.31.1.jar</url>
</library>
</libraries>
</data-source> </data-source>
</component> </component>
</project> </project>

View File

@ -113,9 +113,10 @@ class ContactController extends Controller
* @return \Illuminate\Http\RedirectResponse * @return \Illuminate\Http\RedirectResponse
* @throws \Exception * @throws \Exception
*/ */
public function destroy(Contact $id) public function destroy($id)
{ {
$id->delete(); $contact = Contact::find($id);
$contact->delete();
return redirect()->route("contacts.index"); return redirect()->route("contacts.index");
} }
} }

View File

@ -114,8 +114,8 @@ class EventController extends Controller
*/ */
public function destroy($id) public function destroy($id)
{ {
$link = Event::find($id); $event = Event::find($id);
$link->delete(); $event->delete();
return redirect()->route("events.index"); return redirect()->route("events.index");
} }
} }

View File

@ -2,6 +2,7 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\ResourceExtension;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response; use Illuminate\Http\Response;
@ -23,9 +24,11 @@ class ResourceExtensionController extends Controller
* *
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function index() public function index(Request $request)
{ {
// $extensions = ResourceExtension::query()->paginate($request->input("limit", 20));
return Response::detect("resource-extensions.index", ["extension" => $extensions]);
} }
/** /**
@ -35,7 +38,7 @@ class ResourceExtensionController extends Controller
*/ */
public function create() public function create()
{ {
// return Response::detect("resource-extensions.create");
} }
/** /**
@ -46,7 +49,16 @@ class ResourceExtensionController extends Controller
*/ */
public function store(Request $request) public function store(Request $request)
{ {
// $requestBody = $request->validate([
"extension" => "unique|required|max:255",
"description" => "required|max:255"
]);
$event = new ResourceExtension($requestBody);
$event->save();
return Response::detect("events.store");
} }
/** /**
@ -55,9 +67,9 @@ class ResourceExtensionController extends Controller
* @param int $id * @param int $id
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function show($id) public function show(ResourceExtension $id)
{ {
// return Response::detect("resource-extensions.show", ["extension" => $id]);
} }
/** /**
@ -68,7 +80,8 @@ class ResourceExtensionController extends Controller
*/ */
public function edit($id) public function edit($id)
{ {
// $extension = ResourceExtension::find($id);
return Response::detect("resource-extensions.edit", ["extension" => $extension]);
} }
/** /**
@ -80,7 +93,14 @@ class ResourceExtensionController extends Controller
*/ */
public function update(Request $request, $id) public function update(Request $request, $id)
{ {
// $data = $request->all();
$extension = ResourceExtension::find($id);
$extension->update($data);
$extension->save();
return Response::detect("resource-extensions.update", [ "extension" => $extension]);
} }
/** /**
@ -91,6 +111,8 @@ class ResourceExtensionController extends Controller
*/ */
public function destroy($id) public function destroy($id)
{ {
// $extension = ResourceExtension::find($id);
$extension->delete();
return redirect()->route("resource-extensions.index");
} }
} }

View File

@ -0,0 +1,105 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Spatie\Permission\Models\Role;
class rolesController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
$roles = Role::query()->paginate($request->input("limit", 20));
return Response::detect("roles.index", [ "roles" => $roles]);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return Response::detect("roles.create");
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$requestRole = $request->validate([
"name" => "required|max:255",
"description" => "required|max:255"
]);
$role = new Role($requestRole);
$role->save();
return Response::detect("roles.store");
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
return Response::detect("roles.show", [ "role" => $id]);
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$role = Role::find($id);
return Response::detect("roles.edit", ["role" => $role]);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$data = $request->all();
$role = Role::find($id);
$role->update($data);
$role->save();
return Response::detect("roles.update", [ "role" => $role ]);
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$role = Role::find($id);
$role->delete();
return redirect()->route("roles.index");
}
}

View File

@ -8,6 +8,7 @@ use Illuminate\Http\Response;
use App\User; use App\User;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use Spatie\Permission\Models\Role;
class UserController extends Controller class UserController extends Controller
@ -44,7 +45,9 @@ class UserController extends Controller
*/ */
public function create() public function create()
{ {
return Response::detect("users.create"); $roles = Role::all();
return Response::detect("users.create", ['roles' => $roles]);
} }
/** /**
@ -63,6 +66,7 @@ class UserController extends Controller
"email" => "required|email|unique:users", "email" => "required|email|unique:users",
"password" => "required|max:60", "password" => "required|max:60",
"phone" => "required|unique:users", "phone" => "required|unique:users",
"roles" => "max:255"
]); ]);
@ -102,10 +106,12 @@ class UserController extends Controller
*/ */
public function edit($id) public function edit($id)
{ {
$roles = Role::all();
$user = User::find($id); $user = User::find($id);
return Response::detect("users.edit", [ return Response::detect("users.edit", [
"user" => $user "user" => $user,
"roles" => $roles,
]); ]);
} }

View File

@ -1,45 +0,0 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
use Illuminate\Support\Facades\Hash;
use Spatie\Permission\Traits\HasRoles;
class Staff extends Model
{
use Notifiable;
use HasRoles;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name_first', "name_last", 'email', 'password', "phone"
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function setPasswordAttribute($password) {
$this->attributes["password"] = Hash::make($password);
}
}

View File

@ -21,7 +21,7 @@ class User extends Authenticatable
* @var array * @var array
*/ */
protected $fillable = [ protected $fillable = [
'name_first', "name_last", 'email', 'password', "phone" 'name_first', "name_last", 'email', 'password', "phone", "roles"
]; ];
/** /**

View File

@ -16,6 +16,7 @@ class CreateAlbumsTable extends Migration
Schema::create('albums', function (Blueprint $table) { Schema::create('albums', function (Blueprint $table) {
$table->id(); $table->id();
$table->timestamps(); $table->timestamps();
$table->foreignId('user_id')->constrained();
}); });
} }

View File

@ -0,0 +1,33 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateResourceExtensions extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('resource_extensions', function (Blueprint $table) {
$table->id();
$table->string("extension")->unique();
$table->text("description");
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('resource_extensions');
}
}

View File

@ -21,11 +21,13 @@ class UserSeeder extends Seeder
Log::debug("YEET"); Log::debug("YEET");
if(User::where("name_first", "admin")) if(User::where("name_first", "admin"))
{ {
return; return;
} }
Log::debug("OPRET"); Log::debug("OPRET");
$user = new \App\User(); $user = new \App\User();

View File

@ -6,7 +6,7 @@
@endsection @endsection
@section("path") @section("path")
<a href="" class="text-white">Opret Kontakt</a> / <a href="{{ route('contacts.create') }}" class="text-white">Opret Kontakt</a> /
@endsection @endsection
@section("content") @section("content")

View File

@ -6,7 +6,7 @@
@endsection @endsection
@section("path") @section("path")
<a href="" class="text-white">Slet Kontakt</a> / <a href="{{ route('contacts.destroy') }}" class="text-white">Slet Kontakt</a> /
@endsection @endsection
@section("content") @section("content")

View File

@ -6,7 +6,7 @@
@endsection @endsection
@section("path") @section("path")
<a href="" class="text-white">Vis Kontakter</a> / <a href="{{ route('contacts.index', [ 'contacts' => $contacts ]) }}" class="text-white">Vis Kontakter</a> /
@endsection @endsection
@section("content") @section("content")

View File

@ -6,7 +6,7 @@
@endsection @endsection
@section("path") @section("path")
<a href="" class="text-white">Slet Kontakt</a> / <a href="{{ route('contacts.destroy') }}" class="text-white">Slet Kontakt</a> /
@endsection @endsection
@section("content") @section("content")

View File

@ -6,7 +6,7 @@
@endsection @endsection
@section("path") @section("path")
<a href="" class="text-white">Opbevar Kontakt</a> / <a href="{{ route('contacts.store') }}" class="text-white">Opbevar Kontakt</a> /
@endsection @endsection
@section("content") @section("content")

View File

@ -19,6 +19,15 @@
<a href="{{ route('users.create') }}" class="text-white"><img src="{{ asset('/images/icons/plus.svg') }}" alt="Create">Opret Bruger</a> <a href="{{ route('users.create') }}" class="text-white"><img src="{{ asset('/images/icons/plus.svg') }}" alt="Create">Opret Bruger</a>
</div> </div>
</div> </div>
<div class="segment">
<h3 class="text-white">Roller</h3>
<div class="row">
<a href="{{ route("roles.index") }}" class="text-white"><img src="{{ asset('/images/icons/eye.svg') }}" alt="Read">Vis Roller</a>
</div>
<div class="row">
<a href="{{ route('roles.create') }}" class="text-white"><img src="{{ asset('/images/icons/plus.svg') }}" alt="Create">Opret Rolle</a>
</div>
</div>
<div class="segment"> <div class="segment">
<h3 class="text-white">Menuplan</h3> <h3 class="text-white">Menuplan</h3>
<div class="row"> <div class="row">
@ -67,6 +76,15 @@
{{-- <a href="{{ route('staff.create') }}" class="text-white"><img src="{{ asset('/images/icons/plus.svg') }}" alt="Create">Opret Personal</a>--}} {{-- <a href="{{ route('staff.create') }}" class="text-white"><img src="{{ asset('/images/icons/plus.svg') }}" alt="Create">Opret Personal</a>--}}
{{-- </div>--}} {{-- </div>--}}
{{-- </div>--}} {{-- </div>--}}
<div class="segment">
<h3 class="text-white">Kontakter</h3>
<div class="row">
<a href="{{ route("contacts.index") }}" class="text-white"><img src="{{ asset('/images/icons/eye.svg') }}" alt="Read">Vis Kontakter</a>
</div>
<div class="row">
<a href="{{ route('contacts.create') }}" class="text-white"><img src="{{ asset('/images/icons/plus.svg') }}" alt="Create">Opret Kontakt</a>
</div>
</div>
<div class="segment"> <div class="segment">
<h3 class="text-white">Feedback</h3> <h3 class="text-white">Feedback</h3>
<div class="row"> <div class="row">

View File

@ -0,0 +1,22 @@
@extends("admin.layout.base")
@extends("admin.layout.header")
@section("title")
Rolle - Opret
@endsection
@section("path")
<a href="{{ route('roles.create') }}" class="text-white">Opret Rolle</a> /
@endsection
@section("content")
<h1>Opret Rolle:</h1>
<form method="post" action="{{ route("roles.store") }}">
@csrf
<label for="name">Navn:</label>
<input type="text" name="name" id="name" placeholder="Admin" required>
<label for="name">Beskrivelse:</label>
<input type="text" name="description" id="description" placeholder="Admin rollen bruges til administratorene" required>
<input type="submit" class="btn btn-dark text-white" value="Opret">
</form>
@endsection

View File

@ -0,0 +1,13 @@
@extends("admin.layout.base")
@extends("admin.layout.header")
@section("title")
Rolle - Fjern
@endsection
@section("path")
<a href="{{ route('roles.delete') }}" class="text-white">Fjern Rolle</a> /
@endsection
@section("content")
@endsection

View File

@ -0,0 +1,23 @@
@extends("admin.layout.base")
@extends("admin.layout.header")
@section("title")
Rolle - Rediger
@endsection
@section("path")
<a href="{{ route('roles.edit', ['role' => $role]) }}" class="text-white">Rediger Rolle</a> /
@endsection
@section("content")
<h1>Rediger Rolle:</h1>
<form method="post" action="{{ route("roles.update", ['role' => $role]) }}">
@csrf
@method("put")
<label for="name">Navn:</label>
<input type="text" name="name" id="name" placeholder="Admin" value="{{ $role->name }}" required>
<label for="name">Beskrivelse:</label>
<input type="text" name="description" id="description" placeholder="Admin rollen bruges til administratorene" value="{{ $role->description }}" required>
<input type="submit" class="btn btn-dark text-white" value="Rediger">
</form>
@endsection

View File

@ -0,0 +1,35 @@
@extends("admin.layout.base")
@extends("admin.layout.header")
@section("title")
Rolle - Vis
@endsection
@section("path")
<a href="{{ route('roles.index') }}" class="text-white">Vis Roller</a> /
@endsection
@section("content")
<table class="tbl">
<tr>
<th>Navn</th>
<th>Beskrivelse</th>
<th style="width: 1em;"><img class="w-100" src="{{ asset('/images/icons/pencil.svg') }}" alt="Update"></th>
<th style="width: 1em;"><img class="w-100" src="{{ asset('/images/icons/trashcan.svg') }}" alt="Delete"></th>
</tr>
@foreach($roles as $role)
<tr>
<td>{{ $role->name }}</td>
<td>{{ $role->description }}</td>
<td><a href="{{ route("roles.edit", [ "role" => $role->id ]) }}"><img class="w-100" src="{{ asset('/images/icons/pencil-dark.svg') }}" alt="Update"></a></td>
<td><form method="post" action="{{ route("roles.destroy", [ "role" => $role ]) }}" class="w-100 nostyle">
@csrf
@method("delete")
<button class="w-100 nostyle" type="submit"><img class="w-100 cursor-pointer" src="{{ asset('/images/icons/trashcan-dark.svg') }}" alt="Delete"></button>
</form>
</td>
</tr>
@endforeach
</table>
@endsection

View File

@ -0,0 +1,14 @@
@extends("admin.layout.base")
@extends("admin.layout.header")
@section("title")
Rolle - Vis
@endsection
@section("path")
<a href="{{ route('rolle.index') }}" class="text-white">Vis Brugere</a> /
@endsection
@section("content")
show.blade.php
@endsection

View File

@ -0,0 +1,14 @@
@extends("admin.layout.base")
@extends("admin.layout.header")
@section("title")
Rolle - Opret
@endsection
@section("path")
<a href="{{ route('roles.create') }}" class="text-white">Opret Roller</a> /
@endsection
@section("content")
Rollen blev (ikke) oprettet.
@endsection

View File

@ -0,0 +1,14 @@
@extends("admin.layout.base")
@extends("admin.layout.header")
@section("title")
Rolle - Rediger
@endsection
@section("path")
<a href="{{ route('roles.edit', ['role' => $role]) }}" class="text-white">Rediger Rolle</a> /
@endsection
@section("content")
Din rolle blev (ikke) redigeret.
@endsection

View File

@ -27,9 +27,10 @@
<input type="tel" name="phone" id="tel" placeholder="12345678" pattern="[0-9]{2}[0-9]{2}[0-9]{2}[0-9]{2}" required> <input type="tel" name="phone" id="tel" placeholder="12345678" pattern="[0-9]{2}[0-9]{2}[0-9]{2}[0-9]{2}" required>
<label for="role">Rolle:</label> <label for="role">Rolle:</label>
<select name="role" id="role" class="mb-2" required> <select name="role" id="role" class="mb-2" required>
<option value="admin">Admin</option> <option disabled selected value> -- Vælg en Rolle -- </option>
<option value="staff">Personale</option> @foreach($roles as $role)
<option value="resident">Beboer</option> <option value="{{ $role->name }}">{{ $role->name }}</option>
@endforeach
</select> </select>
<input type="submit" class="btn btn-dark text-white" value="Opret"> <input type="submit" class="btn btn-dark text-white" value="Opret">
</form> </form>

View File

@ -28,9 +28,10 @@
<input type="tel" name="phone" id="tel" value="{{ $user->phone }}" required> <input type="tel" name="phone" id="tel" value="{{ $user->phone }}" required>
<label for="role">Rolle:</label> <label for="role">Rolle:</label>
<select name="role" id="role" class="mb-2" required> <select name="role" id="role" class="mb-2" required>
<option value="admin">Admin</option> <option disabled selected value> -- Vælg en Rolle -- </option>
<option value="staff">Personale</option> @foreach($roles as $role)
<option value="resident">Beboer</option> <option value="{{ $role->name }}">{{ $role->name }}</option>
@endforeach
</select> </select>
<input type="submit" class="btn btn-dark text-white" value="Rediger"> <input type="submit" class="btn btn-dark text-white" value="Rediger">
</form> </form>

View File

@ -18,7 +18,7 @@ use Illuminate\Support\Facades\Route;
//}); //});
Route::get("/", "RootController@index")->name("root.index"); Route::get("/", "RootController@index")->name("root.index");
Route::get("/home", "RootController@index")->name("root.index");
Route::get("/login", "UserController@showLogin")->name("users.show-login"); Route::get("/login", "UserController@showLogin")->name("users.show-login");
Route::post("/login", "UserController@login")->name("users.login"); Route::post("/login", "UserController@login")->name("users.login");
@ -38,3 +38,5 @@ Route::resource("washing-machines", "WashingMachineController");
Route::resource("washing-reservations", "WashingReservationController"); Route::resource("washing-reservations", "WashingReservationController");
Route::resource("feedbacks", "FeedbackController"); Route::resource("feedbacks", "FeedbackController");
Route::resource("external-links", "ExternalLinkController"); Route::resource("external-links", "ExternalLinkController");
Route::resource("resource-extensions", "ResourceExtensionController");
Route::resource("roles", "RolesController");