Design Refresh
This commit is contained in:
parent
1dee7ae516
commit
e7202174f7
44 changed files with 593 additions and 228 deletions
40
app/Http/Controllers/Auth/LoginController.php
Normal file
40
app/Http/Controllers/Auth/LoginController.php
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class LoginController extends Controller {
|
||||
public function showLoginForm() {
|
||||
return view('auth.login');
|
||||
}
|
||||
|
||||
public function login(Request $request) {
|
||||
$credentials = $request->validate([
|
||||
'username' => 'required|string|max:50',
|
||||
'password' => 'required|string',
|
||||
]);
|
||||
|
||||
if (Auth::attempt($credentials)) {
|
||||
$request->session()->regenerate();
|
||||
|
||||
return redirect()->intended('/');
|
||||
}
|
||||
|
||||
return back()->withErrors([
|
||||
'username' => 'Invalid credentials',
|
||||
])->withInput();
|
||||
}
|
||||
|
||||
public function logout(Request $request) {
|
||||
Auth::logout();
|
||||
|
||||
$request->session()->invalidate();
|
||||
$request->session()->regenerateToken();
|
||||
|
||||
return redirect('/');
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -4,6 +4,9 @@
|
|||
|
||||
use App\Models\BookmarkSite;
|
||||
use App\Models\BookmarkCategory;
|
||||
use App\Models\GuestbookEntry;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class BookmarksController extends Controller
|
||||
|
|
@ -12,4 +15,40 @@ public function show() : View {
|
|||
$categories = BookmarkCategory::with('sites')->get();
|
||||
return view('bookmarks', compact('categories'));
|
||||
}
|
||||
|
||||
public function createBookmark() {
|
||||
$categories = BookmarkCategory::all();
|
||||
return view('admin.create-bookmark', [
|
||||
'categories' => $categories
|
||||
]);
|
||||
}
|
||||
|
||||
public function addBookmark(Request $request): RedirectResponse {
|
||||
$newEntry = BookmarkSite::create($request);
|
||||
return redirect()->route('bookmarks');
|
||||
}
|
||||
|
||||
public function destroyBookmark($id): RedirectResponse {
|
||||
$site = BookmarkSite::findOrFail($id);
|
||||
$site->delete();
|
||||
return redirect()->route('bookmarks');
|
||||
}
|
||||
|
||||
|
||||
public function createCategory() {
|
||||
return view('admin.create-category');
|
||||
}
|
||||
|
||||
public function addCategory(Request $request): RedirectResponse {
|
||||
$newEntry = BookmarkCategory::create($request);
|
||||
return redirect()->route('bookmarks');
|
||||
}
|
||||
|
||||
public function destroyCategory($id): RedirectResponse {
|
||||
if (BookmarkSite::where('category', $id)->count() <= 0) {
|
||||
$category = BookmarkCategory::findOrFail($id);
|
||||
$category->delete();
|
||||
}
|
||||
return redirect()->route('bookmarks');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,12 +6,13 @@
|
|||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use UAParser\Parser;
|
||||
|
||||
class GuestbookController extends Controller {
|
||||
public function show(): View {
|
||||
$entries = GuestbookEntry::selectEntries();
|
||||
$entries = GuestbookEntry::get();
|
||||
$parser = Parser::create();
|
||||
|
||||
return view('guestbook')
|
||||
|
|
@ -27,7 +28,46 @@ public function show(): View {
|
|||
* @throws ValidationException
|
||||
*/
|
||||
public function addEntry(Request $request): RedirectResponse {
|
||||
GuestbookEntry::insertGuestbookEntry($request);
|
||||
$newEntry = GuestbookEntry::create($request);
|
||||
$response = Http::withBasicAuth(config('services.mailjet.key'), config('services.mailjet.secret'))->post('https://api.mailjet.com/v3.1/send', [
|
||||
'Messages' => [
|
||||
[
|
||||
'From' => [
|
||||
'Email' => 'wah@wah.moe',
|
||||
'Name' => 'wah dot moe'
|
||||
],
|
||||
'To' => [
|
||||
[
|
||||
'Email' => 'roscoe@wah.moe',
|
||||
'Name' => 'Roscoe D. Wah'
|
||||
]
|
||||
],
|
||||
'Subject' => 'New Guestbook Entry!',
|
||||
'HtmlPart' => '
|
||||
<style> td { padding: 5px } </style>
|
||||
<table border="1">
|
||||
<tr><td><b>Name:</b></td><td>'.htmlentities($newEntry->name).'</td></tr>
|
||||
<tr><td><b>IP:</b></td><td>'.$newEntry->ip.'</td></tr>
|
||||
<tr><td><b>Agent:</b></td><td>'.htmlentities($newEntry->agent).'</td></tr>
|
||||
<tr><td><b>Message:</b></td><td>'.htmlentities($newEntry->message).'</td></tr>
|
||||
</table>'
|
||||
]
|
||||
]
|
||||
]);
|
||||
return back()->with('success', 'Entry submitted successfully!');
|
||||
}
|
||||
|
||||
public function destroy($id): RedirectResponse {
|
||||
$entry = GuestbookEntry::findOrFail($id);
|
||||
$entry->delete();
|
||||
return redirect()->route('guestbook');
|
||||
}
|
||||
|
||||
public function flag($id): RedirectResponse {
|
||||
$entry = GuestbookEntry::where("id", $id)->get()->first;
|
||||
$entry->update([
|
||||
"flagged" => !$entry->flagged,
|
||||
]);
|
||||
return redirect()->route('guestbook');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,18 +4,29 @@
|
|||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class BookmarkCategory extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
protected $table = "bookmark__categories";
|
||||
protected $fillable = ['name'];
|
||||
protected $fillable = ['name', 'shuffled'];
|
||||
protected $casts = ['shuffled' => 'boolean'];
|
||||
|
||||
public function sites() {
|
||||
return $this->hasMany(BookmarkSite::class, 'category');
|
||||
}
|
||||
|
||||
public static function insertBookmarkCategory(string $name) {
|
||||
public static function create(Request $request): BookmarkCategory {
|
||||
$newCategory = new BookmarkCategory();
|
||||
$newCategory->name = $request->get('name');
|
||||
$newCategory->shuffled = $request->has('shuffled');
|
||||
$newCategory->save();
|
||||
return $newCategory;
|
||||
}
|
||||
|
||||
|
||||
public static function insertBookmarkCategory(string $name): void {
|
||||
$newBookmarkCategory = new BookmarkCategory;
|
||||
$newBookmarkCategory->name = $name;
|
||||
$newBookmarkCategory->save();
|
||||
|
|
@ -24,13 +35,4 @@ public static function selectBookmarks(int $id) {
|
|||
$bookmarks = BookmarkSite::where('category', '=', $id)->firstOrFail();
|
||||
return $bookmarks;
|
||||
}
|
||||
|
||||
public static function importBookmarkCategory(array $data) {
|
||||
foreach ($data as $category) {
|
||||
$newBookmarkCategory = new BookmarkCategory;
|
||||
$newBookmarkCategory->name = $category['name'];
|
||||
$newBookmarkCategory->priority = intval($category['priority']);
|
||||
$newBookmarkCategory->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,16 +4,31 @@
|
|||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class BookmarkSite extends Model {
|
||||
use HasFactory;
|
||||
protected $table = "bookmark__sites";
|
||||
protected $fillable = ['name', 'description', 'url', 'category'];
|
||||
|
||||
public function category() {
|
||||
public function category(): BelongsTo {
|
||||
return $this->belongsTo(BookmarkCategory::class, 'category');
|
||||
}
|
||||
public static function insertBookmark(string $name, string $url, int $category) {
|
||||
|
||||
public static function create(Request $request): BookmarkSite {
|
||||
$category = BookmarkCategory::where('id', $request->get('category'))->firstOrFail();
|
||||
$newSite = new BookmarkSite;
|
||||
$newSite->name = $request->get('name');
|
||||
$newSite->url = $request->get('url');
|
||||
$newSite->description = $request->get('description');
|
||||
$newSite->category = $category->id;
|
||||
$newSite->save();
|
||||
return $newSite;
|
||||
}
|
||||
|
||||
public static function insertBookmark(string $name, string $url, int $category): void {
|
||||
$category = BookmarkCategory::where('id', $category)->firstOrFail();
|
||||
$newBookmark = new BookmarkSite;
|
||||
$newBookmark->name = $name;
|
||||
|
|
@ -21,15 +36,4 @@ public static function insertBookmark(string $name, string $url, int $category)
|
|||
$newBookmark->category = $category->id;
|
||||
$newBookmark->save();
|
||||
}
|
||||
|
||||
public static function importBookmark(array $data) {
|
||||
foreach ($data as $site) {
|
||||
$newBookmark = new BookmarkSite;
|
||||
$newBookmark->name = $site['name'];
|
||||
$newBookmark->description = $site['description'];
|
||||
$newBookmark->url = $site['url'];
|
||||
$newBookmark->category = $site['category_id'];
|
||||
$newBookmark->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,46 +5,37 @@
|
|||
use Illuminate\Http\Request;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class GuestbookEntry extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
protected $table = "guestbook__entries";
|
||||
protected $fillable = ['name', 'message'];
|
||||
protected $fillable = ['name', 'message',
|
||||
'flagged'
|
||||
];
|
||||
|
||||
/**
|
||||
* Creates a new guestbook entry.
|
||||
*
|
||||
* @param Request $request The HTTP POST request
|
||||
* @return void
|
||||
* @return GuestbookEntry
|
||||
*/
|
||||
public static function insertGuestbookEntry(Request $request) {
|
||||
public static function create(Request $request): GuestbookEntry {
|
||||
$newEntry = new GuestbookEntry;
|
||||
$newEntry->name = $request->get('name');
|
||||
$newEntry->message = $request->get('message');
|
||||
$newEntry->ip = $request->ip();
|
||||
$newEntry->agent = $request->userAgent();
|
||||
$newEntry->legacy_flagged = isLegacy();
|
||||
$newEntry->flagged = true;
|
||||
$newEntry->save();
|
||||
return $newEntry;
|
||||
}
|
||||
|
||||
public static function selectEntries() {
|
||||
$entries = GuestbookEntry::where("legacy_flagged", false)->orderBy('created_at', 'desc')->get();
|
||||
return $entries;
|
||||
}
|
||||
|
||||
public static function importGuestbookEntry(array $data) {
|
||||
foreach ($data as $entry) {
|
||||
$dt = new \DateTime('@' . $entry['timestamp']);
|
||||
$newEntry = new GuestbookEntry;
|
||||
$newEntry->name = $entry['name'];
|
||||
$newEntry->ip = $entry['ip_address'];
|
||||
$newEntry->agent = $entry['agent'];
|
||||
$newEntry->admin = $entry['site_owner'];
|
||||
$newEntry->message = $entry['message'];
|
||||
$newEntry->created_at = $dt;
|
||||
$newEntry->updated_at = $dt;
|
||||
$newEntry->save();
|
||||
public static function get() {
|
||||
if (Auth::check()) {
|
||||
return GuestbookEntry::select()->orderBy('created_at', 'desc')->get();
|
||||
}
|
||||
return GuestbookEntry::where("flagged", false)->orderBy('created_at', 'desc')->get();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
42
app/Models/User.php
Normal file
42
app/Models/User.php
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
|
||||
class User extends Authenticatable {
|
||||
use HasFactory, Notifiable;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $fillable = [
|
||||
'username',
|
||||
'email',
|
||||
'password',
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for serialization.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $hidden = [
|
||||
'password',
|
||||
'remember_token',
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be cast.
|
||||
*
|
||||
* @var array<string, string>
|
||||
*/
|
||||
protected $casts = [
|
||||
'email_verified_at' => 'datetime',
|
||||
'password' => 'hashed',
|
||||
];
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue