89 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace App\Http\Controllers;
 | 
						|
 | 
						|
use App\Models\Book;
 | 
						|
use App\Models\BookMeta;
 | 
						|
use Illuminate\Http\Request;
 | 
						|
use Illuminate\Support\Facades\Auth;
 | 
						|
use Illuminate\Support\Str;
 | 
						|
 | 
						|
class BookController extends Controller
 | 
						|
{
 | 
						|
    public function index()
 | 
						|
    {
 | 
						|
        $principal = 'principals/' . Auth::user()->email;
 | 
						|
 | 
						|
        $books = Book::query()
 | 
						|
            ->join('addressbook_meta as meta', 'meta.addressbook_id', '=', 'addressbooks.id')
 | 
						|
            ->where('principaluri', $principal)
 | 
						|
            ->select('addressbooks.*', 'meta.color', 'meta.is_default')
 | 
						|
            ->get();
 | 
						|
 | 
						|
        return view('book.index', compact('books'));
 | 
						|
    }
 | 
						|
 | 
						|
    public function create()
 | 
						|
    {
 | 
						|
        return view('book.create');
 | 
						|
    }
 | 
						|
 | 
						|
    public function store(Request $request)
 | 
						|
    {
 | 
						|
        $data = $request->validate([
 | 
						|
            'displayname' => 'required|string|max:100',
 | 
						|
            'color' => 'nullable|regex:/^#[0-9A-Fa-f]{6}$/',
 | 
						|
        ]);
 | 
						|
 | 
						|
        $principal = 'principals/' . Auth::user()->email;
 | 
						|
 | 
						|
        $id = Book::insertGetId([
 | 
						|
            'principaluri' => $principal,
 | 
						|
            'uri' => (string) Str::uuid(),
 | 
						|
            'displayname' => $data['displayname'],
 | 
						|
        ]);
 | 
						|
 | 
						|
        BookMeta::create([
 | 
						|
            'book_id' => $id,
 | 
						|
            'color' => $data['color'] ?? '#cccccc',
 | 
						|
            'is_default' => false,
 | 
						|
        ]);
 | 
						|
 | 
						|
        return redirect()->route('book.index');
 | 
						|
    }
 | 
						|
 | 
						|
    public function show(Book $book)
 | 
						|
    {
 | 
						|
        $this->authorize('view', $book);
 | 
						|
 | 
						|
        $book->load('meta', 'cards');
 | 
						|
 | 
						|
        return view('book.show', compact('book'));
 | 
						|
    }
 | 
						|
 | 
						|
    public function edit(Book $book)
 | 
						|
    {
 | 
						|
        $book->load('meta');
 | 
						|
 | 
						|
        return view('book.edit', compact('book'));
 | 
						|
    }
 | 
						|
 | 
						|
    public function update(Request $request, Book $book)
 | 
						|
    {
 | 
						|
        $data = $request->validate([
 | 
						|
            'displayname' => 'required|string|max:100',
 | 
						|
            'color' => 'nullable|regex:/^#[0-9A-Fa-f]{6}$/',
 | 
						|
        ]);
 | 
						|
 | 
						|
        $book->update([
 | 
						|
            'displayname' => $data['displayname'],
 | 
						|
        ]);
 | 
						|
 | 
						|
        $book->meta()->updateOrCreate([], [
 | 
						|
            'color' => $data['color'] ?? '#cccccc',
 | 
						|
        ]);
 | 
						|
 | 
						|
        return redirect()->route('book.index')->with('toast', 'Address Book updated.');
 | 
						|
    }
 | 
						|
}
 |