4 Commits
v0.1 ... v0.2

6 changed files with 67 additions and 37 deletions

11
app/FlashMessage.php Normal file
View File

@@ -0,0 +1,11 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class FlashMessage extends Model
{
const PRIMARY = 'primary';
const DANGER = 'danger';
}

View File

@@ -8,6 +8,7 @@ use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use App\FlashMessage;
class RegisterController extends Controller
{
@@ -72,6 +73,8 @@ class RegisterController extends Controller
\Mail::to($user)->send(new Welcome($user));
session()->flash(FlashMessage::PRIMARY, 'Thanks for registering. Please, do not forget to validate your e-mail address.');
return $user;
}
}

View File

@@ -5,13 +5,17 @@ namespace App\Http\Controllers;
use \App\Item;
use \App\User;
use Illuminate\Http\Request;
use App\FlashMessage as flash;
class ItemController extends Controller
{
public function show($id)
{
$item = Item::find($id);
if (!$item || $item->product->user_id != \Auth::id()) return back();
if (!$item || $item->product->user_id != \Auth::id()) {
session()->flash(flash::DANGER, "The item doesn't exist.");
return back();
}
$users = $item->users()->get();
$otherItems = Item::where([['product_id', $item->product_id], ['id', '!=', $id]])->get();
@@ -28,7 +32,7 @@ class ItemController extends Controller
* Stores the included item into database
* As the items are included on the Product view,
* it must return to there after inclusion
*
*
* @return (view) The product view
*/
public function store(Request $request)
@@ -43,7 +47,7 @@ class ItemController extends Controller
$authUser = User::loggedIn();
$authUser->items()->create(['name' => request('item'), 'product_id' => request('product_id')]);
return redirect('product/'.request('product_id'));
return redirect('product/' . request('product_id'));
}
public function patch(Request $request)
@@ -52,7 +56,7 @@ class ItemController extends Controller
$item = User::loggedIn()->items()->find(request('item'));
$item->name = request('name');
$item->save();
return redirect('item/'.request('item'));
return redirect('item/' . request('item'));
}
public function delete(Request $request)
@@ -65,4 +69,4 @@ class ItemController extends Controller
Item::deleteAndDetach($item);
return redirect('product/' . $product);
}
}
}

View File

@@ -6,6 +6,7 @@ use \App\Item;
use \App\User;
use \App\Product;
use Illuminate\Http\Request;
use App\FlashMessage as flash;
class ProductController extends Controller
{
@@ -17,7 +18,7 @@ class ProductController extends Controller
/**
* Stores the included product into database
*
*
* @return (view) The product view
*/
public function store(Request $request)
@@ -29,7 +30,7 @@ class ProductController extends Controller
/**
* Delete a specified Product
*
*
* @param (int) $id The product id
*/
public function delete(Request $request)
@@ -55,14 +56,14 @@ class ProductController extends Controller
$product->name = request('name');
$product->url = request('url');
$product->save();
return redirect('product/'.request('product'));
return redirect('product/' . request('product'));
}
/**
* Show a specified Product
*
*
* @param (int) $id The product id
*
*
* @return \Illuminate\Http\Response
*/
public function show($id)
@@ -70,8 +71,8 @@ class ProductController extends Controller
$product = Product::fromAuthUser()->find($id);
if (!$product) {
return back();
session()->flash(flash::DANGER, "The product doesn't exist or doesn't belongs to you.");
return redirect('/product');
}
return view('product.show', compact('product'));
}

View File

@@ -1,5 +1,6 @@
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
@@ -19,6 +20,7 @@
<!-- Styles -->
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
</head>
<body>
<div id="app">
<nav class="navbar navbar-expand-md navbar-light navbar-laravel">
@@ -26,7 +28,8 @@
<a class="navbar-brand" href="{{ url('/') }}">
{{ config('app.name', 'Laravel') }}
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
<span class="navbar-toggler-icon"></span>
</button>
@@ -40,39 +43,47 @@
<ul class="navbar-nav ml-auto">
<!-- Authentication Links -->
@guest
<li class="nav-item">
<a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a>
</li>
@else
<li class="nav-item dropdown">
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
{{ Auth::user()->name }} <span class="caret"></span>
<li class="nav-item dropdown">
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false" v-pre>
{{ Auth::user()->name }} <span class="caret"></span>
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="{{ route('logout') }}" onclick="event.preventDefault();
document.getElementById('logout-form').submit();">
{{ __('Logout') }}
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="{{ route('logout') }}"
onclick="event.preventDefault();
document.getElementById('logout-form').submit();">
{{ __('Logout') }}
</a>
<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
@csrf
</form>
</div>
</li>
<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
@csrf
</form>
</div>
</li>
@endguest
</ul>
</div>
</div>
</nav>
@if ($flashMsg = session('primary'))
<div class="alert alert-primary text-center" role="alert">{{ $flashMsg }}</div>
@endif
@if ($flashMsg = session('danger'))
<div class="alert alert-danger text-center" role="alert">{{ $flashMsg }}</div>
@endif
<main class="py-4">
@yield('content')
</main>
</div>
</body>
</html>
</html>

View File

@@ -15,7 +15,7 @@ Route::get('/', function () {
return view('welcome');
});
Route::get('/product', 'ProductController@index')->middleware('auth');
Route::get('/product', 'ProductController@index')->middleware('verified');
Route::get('/product/{product}', 'ProductController@show')->middleware('verified');
Route::post('/product', 'ProductController@store')->middleware('verified');
Route::patch('/product', 'ProductController@patch')->middleware('verified');
@@ -41,4 +41,4 @@ Auth::routes(['verify' => true]);
Route::get('/home', 'HomeController@index')->name('home')->middleware('auth');
Route::get('/help', function () {
return view('help');
});
});