wip 3d
This commit is contained in:
69
app/Http/Controllers/Admin/Shop/MerchandiseController.php
Normal file
69
app/Http/Controllers/Admin/Shop/MerchandiseController.php
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Admin\Shop;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
use App\Repositories\Shop\Merchandises;
|
||||||
|
use App\Repositories\Shop\TagGroups;
|
||||||
|
use App\Datatables\Shop\MerchandisesDataTable;
|
||||||
|
|
||||||
|
use App\Models\Shop\Merchandise;
|
||||||
|
|
||||||
|
class MerchandiseController extends Controller
|
||||||
|
{
|
||||||
|
public function index(MerchandisesDataTable $dataTable)
|
||||||
|
{
|
||||||
|
return $dataTable->render('Admin.Shop.Merchandises.list');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
$data['tags_list'] = TagGroups::getTreeTags();
|
||||||
|
return view('Admin.Shop.Merchandises.create', $data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function store(Request $request)
|
||||||
|
{
|
||||||
|
$data = $request->all();
|
||||||
|
Merchandises::storeFull($data);
|
||||||
|
return redirect()->route('Admin.Shop.Merchandises.index');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function show($id)
|
||||||
|
{
|
||||||
|
return view('Admin.Shop.Merchandises.view', Merchandises::get($id));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
$data['merchandise'] = Merchandises::getFull($id);
|
||||||
|
$data['tags_list'] = TagGroups::getTreeTags();
|
||||||
|
return view('Admin.Shop.Merchandises.edit', $data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function destroy($id)
|
||||||
|
{
|
||||||
|
return Merchandises::destroy($id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getImages(Request $request, $id = false, $can_edit = true)
|
||||||
|
{
|
||||||
|
$id = $id ? $id : $request->input('id');
|
||||||
|
$data['images'] = Merchandises::getImages($id);
|
||||||
|
$data['can_edit'] = $can_edit;
|
||||||
|
return view('components.uploader.mini-gallery-items', $data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteImage(Request $request)
|
||||||
|
{
|
||||||
|
$id = $request->input('id');
|
||||||
|
$index = $request->input('index');
|
||||||
|
return Merchandises::deleteImage($id, $index);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function exportExcel()
|
||||||
|
{
|
||||||
|
return Merchandises::exportExcel();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,8 +6,6 @@ use App\Http\Controllers\Controller;
|
|||||||
use Illuminate\Foundation\Auth\AuthenticatesUsers;
|
use Illuminate\Foundation\Auth\AuthenticatesUsers;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use App\Repositories\Layout;
|
|
||||||
use Carbon\Carbon;
|
|
||||||
|
|
||||||
class LoginController extends Controller
|
class LoginController extends Controller
|
||||||
{
|
{
|
||||||
@@ -22,25 +20,11 @@ class LoginController extends Controller
|
|||||||
|
|
||||||
public function showLoginForm()
|
public function showLoginForm()
|
||||||
{
|
{
|
||||||
$data = \App\Repositories\Config::init();
|
return view('Shop.auth.login', $data);
|
||||||
return view('auth.login', $data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function authenticated(Request $request, $user)
|
public function authenticated(Request $request, $user)
|
||||||
{
|
{
|
||||||
$request->session()->forget('password_expired_id');
|
|
||||||
|
|
||||||
if ($user->passwordSecurity->password_expiry_days > 0) {
|
|
||||||
$password_updated_at = $user->passwordSecurity->password_updated_at;
|
|
||||||
$password_expiry_days = $user->passwordSecurity->password_expiry_days;
|
|
||||||
$password_expiry_at = Carbon::parse($password_updated_at)->addDays($password_expiry_days);
|
|
||||||
if ($password_expiry_at->lessThan(Carbon::now())) {
|
|
||||||
$request->session()->put('password_expired_id', $user->id);
|
|
||||||
auth()->logout();
|
|
||||||
return redirect('/reset-password')->with('message', "Your password is expired. You need to change your password.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return redirect()->intended($this->redirectPath());
|
return redirect()->intended($this->redirectPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
24
app/Http/Controllers/Shop/Auth/ForgotPasswordController.php
Normal file
24
app/Http/Controllers/Shop/Auth/ForgotPasswordController.php
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Shop\Auth;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Contracts\Foundation\Application;
|
||||||
|
use Illuminate\Contracts\View\Factory;
|
||||||
|
use Illuminate\Contracts\View\View;
|
||||||
|
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
|
||||||
|
|
||||||
|
class ForgotPasswordController extends Controller
|
||||||
|
{
|
||||||
|
use SendsPasswordResetEmails;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get password request form view.
|
||||||
|
*
|
||||||
|
* @return Application|Factory|View
|
||||||
|
*/
|
||||||
|
public function showLinkRequestForm()
|
||||||
|
{
|
||||||
|
return view('boilerplate::auth.passwords.email');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -40,49 +40,43 @@ class LoginController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->middleware('customer')->except('logout');
|
// $this->middleware('guest')->except('logout');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function showLoginForm()
|
public function showLoginForm()
|
||||||
{
|
{
|
||||||
$data['url'] = route('Shop.Auth.login.post');
|
$data['url'] = route('Shop.login.post');
|
||||||
return view('Shop.Auth.login', $data);
|
return view('Shop.auth.login', $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function guard()
|
protected function guard()
|
||||||
{
|
{
|
||||||
return Auth::guard('customer');
|
return Auth::guard('guest');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function login(Request $request)
|
public function login(Request $request)
|
||||||
{
|
{
|
||||||
$this->validate($request, [
|
$this->validate($request, [
|
||||||
'username' => 'required|email',
|
'username' => 'required|email',
|
||||||
'password' => 'required|min:6'
|
'password' => 'required|min:8'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if (Auth::guard('customer')->attempt(['username' => $request->username, 'password' => $request->password], $request->get('remember'))) {
|
if (Auth::guard('guest')->attempt(['username' => $request->username, 'password' => $request->password], $request->get('remember'))) {
|
||||||
return redirect()->intended(route('Conferencing.event'));
|
return redirect()->intended(route('home'));
|
||||||
}
|
}
|
||||||
return back()->withInput($request->only('username', 'remember'));
|
return back()->withInput($request->only('username', 'remember'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function logout(Request $request)
|
public function logout(Request $request)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Get the session key for this user
|
|
||||||
$sessionKey = $this->guard()->getName();
|
$sessionKey = $this->guard()->getName();
|
||||||
|
|
||||||
$this->guard()->logout();
|
$this->guard()->logout();
|
||||||
|
|
||||||
// Delete single session key (just for this user)
|
|
||||||
$request->session()->forget($sessionKey);
|
$request->session()->forget($sessionKey);
|
||||||
|
|
||||||
return redirect()->route('home');
|
return redirect()->route('home');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function username()
|
public function username()
|
||||||
{
|
{
|
||||||
return 'username';
|
return 'email';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
161
app/Http/Controllers/Shop/Auth/RegisterController.php
Normal file
161
app/Http/Controllers/Shop/Auth/RegisterController.php
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Shop\Auth;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Contracts\Foundation\Application;
|
||||||
|
use Illuminate\Contracts\View\Factory;
|
||||||
|
use Illuminate\Contracts\View\View;
|
||||||
|
use Illuminate\Foundation\Auth\EmailVerificationRequest;
|
||||||
|
use Illuminate\Foundation\Auth\RegistersUsers;
|
||||||
|
use Illuminate\Http\RedirectResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Routing\Redirector;
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use Sebastienheyd\Boilerplate\Rules\Password;
|
||||||
|
|
||||||
|
class RegisterController extends Controller
|
||||||
|
{
|
||||||
|
use RegistersUsers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Where to redirect users after registration.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $redirectTo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is registering the first user ?
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
protected $firstUser;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new controller instance.
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$userModel = config('auth.providers.users.model');
|
||||||
|
$this->firstUser = $userModel::whereRoleIs('admin')->count() === 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return route where to redirect after login success.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function redirectTo()
|
||||||
|
{
|
||||||
|
return route(config('boilerplate.app.redirectTo', 'boilerplate.dashboard'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a validator for an incoming registration request.
|
||||||
|
*
|
||||||
|
* @param array $data
|
||||||
|
* @return \Illuminate\Contracts\Validation\Validator
|
||||||
|
*/
|
||||||
|
protected function validator(array $data)
|
||||||
|
{
|
||||||
|
return Validator::make($data, [
|
||||||
|
'last_name' => 'required|max:255',
|
||||||
|
'first_name' => 'required|max:255',
|
||||||
|
'email' => 'required|email|max:255|unique:users,email,NULL,id,deleted_at,NULL',
|
||||||
|
'password' => ['required', 'confirmed', new Password()],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the application registration form.
|
||||||
|
*
|
||||||
|
* @return Application|Factory|View
|
||||||
|
*/
|
||||||
|
public function showRegistrationForm()
|
||||||
|
{
|
||||||
|
if (! $this->firstUser && ! config('boilerplate.auth.register')) {
|
||||||
|
abort('404');
|
||||||
|
}
|
||||||
|
|
||||||
|
return view('boilerplate::auth.register', ['firstUser' => $this->firstUser]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new user instance after a valid registration.
|
||||||
|
*
|
||||||
|
* @param array $data
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
protected function create(array $data)
|
||||||
|
{
|
||||||
|
if (! $this->firstUser && ! config('boilerplate.auth.register')) {
|
||||||
|
abort('404');
|
||||||
|
}
|
||||||
|
|
||||||
|
$userModel = config('auth.providers.users.model');
|
||||||
|
$roleModel = config('laratrust.models.role');
|
||||||
|
|
||||||
|
$user = $userModel::withTrashed()->updateOrCreate(['email' => $data['email']], [
|
||||||
|
'active' => true,
|
||||||
|
'first_name' => $data['first_name'],
|
||||||
|
'last_name' => $data['last_name'],
|
||||||
|
'email' => $data['email'],
|
||||||
|
'password' => bcrypt($data['password']),
|
||||||
|
'last_login' => Carbon::now()->toDateTimeString(),
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($this->firstUser) {
|
||||||
|
$admin = $roleModel::whereName('admin')->first();
|
||||||
|
$user->attachRole($admin);
|
||||||
|
} else {
|
||||||
|
$user->restore();
|
||||||
|
$role = $roleModel::whereName(config('boilerplate.auth.register_role'))->first();
|
||||||
|
$user->roles()->sync([$role->id]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $user;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show message to verify e-mail.
|
||||||
|
*
|
||||||
|
* @return Application|Factory|View
|
||||||
|
*/
|
||||||
|
public function emailVerify()
|
||||||
|
{
|
||||||
|
if (Auth::user()->hasVerifiedEmail()) {
|
||||||
|
return redirect(route(config('boilerplate.app.redirectTo', 'boilerplate.dashboard')));
|
||||||
|
}
|
||||||
|
|
||||||
|
return view('boilerplate::auth.verify-email');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If e-mail has been verified, redirect to the given route.
|
||||||
|
*
|
||||||
|
* @param EmailVerificationRequest $request
|
||||||
|
* @return Application|RedirectResponse|Redirector
|
||||||
|
*/
|
||||||
|
public function emailVerifyRequest(EmailVerificationRequest $request)
|
||||||
|
{
|
||||||
|
$request->fulfill();
|
||||||
|
|
||||||
|
return redirect(route(config('boilerplate.app.redirectTo', 'boilerplate.dashboard')));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send verification e-mail.
|
||||||
|
*
|
||||||
|
* @param Request $request
|
||||||
|
* @return RedirectResponse
|
||||||
|
*/
|
||||||
|
public function emailSendVerification(Request $request)
|
||||||
|
{
|
||||||
|
$request->user()->sendEmailVerificationNotification();
|
||||||
|
|
||||||
|
return back()->with('message', 'Verification link sent!');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,6 +7,8 @@ use App\Http\Controllers\Controller;
|
|||||||
|
|
||||||
use App\Repositories\Core\User\ShopCart;
|
use App\Repositories\Core\User\ShopCart;
|
||||||
use App\Repositories\Shop\Offers;
|
use App\Repositories\Shop\Offers;
|
||||||
|
use App\Repositories\Shop\Orders;
|
||||||
|
|
||||||
|
|
||||||
class BasketController extends Controller
|
class BasketController extends Controller
|
||||||
{
|
{
|
||||||
@@ -52,6 +54,12 @@ class BasketController extends Controller
|
|||||||
return ShopCart::count();
|
return ShopCart::count();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getSummary()
|
||||||
|
{
|
||||||
|
$data = ShopCart::getSummary();
|
||||||
|
return response()->json(['data' => $data, 'code' => '200']);
|
||||||
|
}
|
||||||
|
|
||||||
public function order(Request $request)
|
public function order(Request $request)
|
||||||
{
|
{
|
||||||
ShopCart::clear();
|
ShopCart::clear();
|
||||||
@@ -60,8 +68,6 @@ class BasketController extends Controller
|
|||||||
$data['user_id'] = Users::getId();
|
$data['user_id'] = Users::getId();
|
||||||
Orders::newOrder($data);
|
Orders::newOrder($data);
|
||||||
return response()->json(['code' => '200']);
|
return response()->json(['code' => '200']);
|
||||||
|
|
||||||
// return redirect()->route('ThirdParty.select');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function clearBasket()
|
public function clearBasket()
|
||||||
|
|||||||
13
app/Http/Controllers/Shop/Controller.php
Normal file
13
app/Http/Controllers/Shop/Controller.php
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Commercial;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller as ParentController;
|
||||||
|
|
||||||
|
class Controller extends ParentController
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
// $this->middleware('auth:guest');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,19 +6,11 @@ use Illuminate\Http\Request;
|
|||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
|
|
||||||
use App\Repositories\Shop\Articles;
|
use App\Repositories\Shop\Articles;
|
||||||
use App\Repositories\Shop\Categories;
|
|
||||||
use App\Repositories\Shop\Offers;
|
|
||||||
use App\Repositories\Shop\Tags;
|
|
||||||
use App\Repositories\Shop\TagGroups;
|
use App\Repositories\Shop\TagGroups;
|
||||||
use App\Repositories\Shop\Homepages;
|
use App\Repositories\Shop\Homepages;
|
||||||
|
|
||||||
class HomeController extends Controller
|
class HomeController extends Controller
|
||||||
{
|
{
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
// $this->middleware('auth');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function index(Request $request)
|
public function index(Request $request)
|
||||||
{
|
{
|
||||||
$input = $request->input();
|
$input = $request->input();
|
||||||
|
|||||||
@@ -9,18 +9,24 @@ class Botanic
|
|||||||
{
|
{
|
||||||
public function make(Builder $menu)
|
public function make(Builder $menu)
|
||||||
{
|
{
|
||||||
$menu->add('Botanique', [ 'permission' => 'backend_access', 'icon' => 'leaf' ])
|
$menu->add('Botanique', ['icon' => 'leaf' ])
|
||||||
->id('botanic')
|
->id('botanic')
|
||||||
->activeIfRoute('botanic')
|
|
||||||
->order(5);
|
->order(5);
|
||||||
|
|
||||||
$menu->addTo('botanic', 'Familles', [ 'route' => 'Admin.Botanic.Families.index', 'permission' => 'backend_access' ])
|
$menu->addTo('botanic', 'Familles', [
|
||||||
->activeIfRoute(['Admin.Botanic.Families.*'])->order(1);
|
'route' => 'Admin.Botanic.Families.index',
|
||||||
$menu->addTo('botanic', 'Genres', [ 'route' => 'Admin.Botanic.Genres.index', 'permission' => 'backend_access' ])
|
])->activeIfRoute(['Admin.Botanic.Families.*'])->order(1);
|
||||||
->activeIfRoute(['Admin.Botanic.Genres.*'])->order(2);
|
|
||||||
$menu->addTo('botanic', 'Espèces', [ 'route' => 'Admin.Botanic.Species.index', 'permission' => 'backend_access' ])
|
$menu->addTo('botanic', 'Genres', [
|
||||||
->activeIfRoute(['Admin.Botanic.Species.*'])->order(3);
|
'route' => 'Admin.Botanic.Genres.index',
|
||||||
$menu->addTo('botanic', 'Variétés', [ 'route' => 'Admin.Botanic.Varieties.index', 'permission' => 'backend_access' ])
|
])->activeIfRoute(['Admin.Botanic.Genres.*'])->order(2);
|
||||||
->activeIfRoute(['Admin.Botanic.Varieties.*'])->order(4);
|
|
||||||
|
$menu->addTo('botanic', 'Espèces', [
|
||||||
|
'route' => 'Admin.Botanic.Species.index',
|
||||||
|
])->activeIfRoute(['Admin.Botanic.Species.*'])->order(3);
|
||||||
|
|
||||||
|
$menu->addTo('botanic', 'Variétés', [
|
||||||
|
'route' => 'Admin.Botanic.Varieties.index',
|
||||||
|
])->activeIfRoute(['Admin.Botanic.Varieties.*'])->order(4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,15 +8,12 @@ class Customers
|
|||||||
{
|
{
|
||||||
public function make(Builder $menu)
|
public function make(Builder $menu)
|
||||||
{
|
{
|
||||||
$menu->add('Clients finaux', [ 'permission' => 'backend_access', 'icon' => 'address-card' ])
|
$menu->add('Clients finaux', ['icon' => 'address-card' ])
|
||||||
->id('customers')
|
->id('customers')
|
||||||
->activeIfRoute('customers')
|
|
||||||
->order(4);
|
->order(4);
|
||||||
|
|
||||||
$menu->addTo('customers', __('customer.customers.name'), [
|
$menu->addTo('customers', __('customer.customers.name'), [
|
||||||
'route' => 'Admin.Shop.Customers.index',
|
'route' => 'Admin.Shop.Customers.index',
|
||||||
'permission' => 'backend_access',
|
])->activeIfRoute(['Admin.Shop.Customers.*'])->order(1);
|
||||||
])
|
|
||||||
->activeIfRoute(['Admin.Shop.Customers.*'])->order(1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,24 +8,16 @@ class Deliveries
|
|||||||
{
|
{
|
||||||
public function make(Builder $menu)
|
public function make(Builder $menu)
|
||||||
{
|
{
|
||||||
$menu->add('Modes de vente', [
|
$menu->add('Modes de vente', ['icon' => 'store'])
|
||||||
'permission' => 'backend_access',
|
|
||||||
'icon' => 'address-card'
|
|
||||||
])
|
|
||||||
->id('sales_mode')
|
->id('sales_mode')
|
||||||
->activeIfRoute('sales_mode')
|
|
||||||
->order(3);
|
->order(3);
|
||||||
|
|
||||||
$menu->addTo('sales_mode', __('shop.sale_channels.name'), [
|
$menu->addTo('sales_mode', __('shop.sale_channels.name'), [
|
||||||
'route' => 'Admin.Shop.SaleChannels.index',
|
'route' => 'Admin.Shop.SaleChannels.index',
|
||||||
'permission' => 'backend_access',
|
])->activeIfRoute(['Admin.Shop.SaleChannels.*'])->order(1);
|
||||||
])
|
|
||||||
->activeIfRoute(['Admin.Shop.SaleChannels.*'])->order(1);
|
|
||||||
|
|
||||||
$menu->addTo('sales_mode', __('shop.deliveries.title'), [
|
$menu->addTo('sales_mode', __('shop.deliveries.title'), [
|
||||||
'route' => 'Admin.Shop.Deliveries.index',
|
'route' => 'Admin.Shop.Deliveries.index',
|
||||||
'permission' => 'backend_access',
|
])->activeIfRoute(['Admin.Shop.Deliveries.*'])->order(1);
|
||||||
])
|
|
||||||
->activeIfRoute(['Admin.Shop.Deliveries.*'])->order(1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,18 +8,24 @@ class Orders
|
|||||||
{
|
{
|
||||||
public function make(Builder $menu)
|
public function make(Builder $menu)
|
||||||
{
|
{
|
||||||
$menu->add('Commandes', [ 'permission' => 'backend_access', 'icon' => 'shopping-basket' ])
|
$menu->add('Commandes', ['icon' => 'shopping-basket'])
|
||||||
->id('orders')
|
->id('orders')
|
||||||
->activeIfRoute('orders')
|
|
||||||
->order(1);
|
->order(1);
|
||||||
|
|
||||||
$menu->addTo('orders', 'Commandes', [ 'route' => 'Admin.Shop.Orders.index', 'permission' => 'backend_access' ])
|
$menu->addTo('orders', 'Commandes', [
|
||||||
->activeIfRoute(['Admin.Shop.Orders.*'])->order(1);
|
'route' => 'Admin.Shop.Orders.index',
|
||||||
$menu->addTo('orders', 'Factures', [ 'route' => 'Admin.Shop.Invoices.index', 'permission' => 'backend_access' ])
|
])->activeIfRoute(['Admin.Shop.Orders.*'])->order(1);
|
||||||
->activeIfRoute(['Admin.Shop.Invoices.*'])->order(2);
|
|
||||||
$menu->addTo('orders', 'Avoirs', [ 'route' => 'Admin.Shop.Invoices.index', 'permission' => 'backend_access' ])
|
$menu->addTo('orders', 'Factures', [
|
||||||
->activeIfRoute(['Admin.Shop.Invoices.*'])->order(3);
|
'route' => 'Admin.Shop.Invoices.index',
|
||||||
$menu->addTo('orders', 'Bons de livraison', [ 'route' => 'Admin.Shop.Invoices.index', 'permission' => 'backend_access' ])
|
])->activeIfRoute(['Admin.Shop.Invoices.*'])->order(2);
|
||||||
->activeIfRoute(['Admin.Shop.Invoices.*'])->order(4);
|
|
||||||
|
$menu->addTo('orders', 'Avoirs', [
|
||||||
|
'route' => 'Admin.Shop.Invoices.index',
|
||||||
|
])->activeIfRoute(['Admin.Shop.Invoices.*'])->order(3);
|
||||||
|
|
||||||
|
$menu->addTo('orders', 'Bons de livraison', [
|
||||||
|
'route' => 'Admin.Shop.Invoices.index',
|
||||||
|
])->activeIfRoute(['Admin.Shop.Invoices.*'])->order(4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,43 +8,57 @@ class Shop
|
|||||||
{
|
{
|
||||||
public function make(Builder $menu)
|
public function make(Builder $menu)
|
||||||
{
|
{
|
||||||
$menu->add('En vente', [ 'permission' => 'backend_access', 'icon' => 'store' ])
|
$menu->add('En vente', ['icon' => 'shopping-cart' ])
|
||||||
->id('shop')
|
->id('shop')
|
||||||
->activeIfRoute('shop')
|
->activeIfRoute('shop')
|
||||||
->order(2);
|
->order(2);
|
||||||
|
|
||||||
$menu->addTo('shop', 'Articles', [ 'route' => 'Admin.Shop.Articles.index', 'permission' => 'backend_access' ])
|
$menu->addTo('shop', 'Articles', [
|
||||||
->activeIfRoute(['Admin.Shop.Articles.*'])->order(1);
|
'route' => 'Admin.Shop.Articles.index',
|
||||||
$menu->addTo('shop', 'Déclinaisons', [ 'route' => 'Admin.Shop.Variations.index', 'permission' => 'backend_access' ])
|
])->activeIfRoute(['Admin.Shop.Articles.*'])->order(1);
|
||||||
->activeIfRoute(['Admin.Shop.Variations.*'])->order(2);
|
|
||||||
$menu->addTo('shop', 'Tarifs', [ 'route' => 'Admin.Shop.Tariffs.index', 'permission' => 'backend_access' ])
|
|
||||||
->activeIfRoute(['Admin.Shop.Tariffs.*'])->order(3);
|
|
||||||
$menu->addTo('shop', 'Offres', [ 'route' => 'Admin.Shop.Offers.index', 'permission' => 'backend_access' ])
|
|
||||||
->activeIfRoute(['Admin.Shop.Offers.*'])->order(4);
|
|
||||||
|
|
||||||
$menu->addTo('shop', 'Rayons', [ 'route' => 'Admin.Shop.Categories.index', 'permission' => 'backend_access' ])
|
$menu->addTo('shop', 'Déclinaisons', [
|
||||||
->activeIfRoute(['Admin.Shop.Categories.*'])->order(6);
|
'route' => 'Admin.Shop.Variations.index',
|
||||||
|
])->activeIfRoute(['Admin.Shop.Variations.*'])->order(2);
|
||||||
|
|
||||||
$menu->addTo('shop', 'Tags', [ 'route' => 'Admin.Shop.Tags.index', 'permission' => 'backend_access' ])
|
$menu->addTo('shop', 'Tarifs', [
|
||||||
->activeIfRoute(['Admin.Shop.Tags.*'])->order(8);
|
'route' => 'Admin.Shop.Tariffs.index',
|
||||||
|
])->activeIfRoute(['Admin.Shop.Tariffs.*'])->order(3);
|
||||||
|
|
||||||
$menu->addTo('shop', 'Groupes de tags', [ 'route' => 'Admin.Shop.TagGroups.index', 'permission' => 'backend_access' ])
|
$menu->addTo('shop', 'Offres', [
|
||||||
->activeIfRoute(['Admin.Shop.TagGroups.*'])->order(8);
|
'route' => 'Admin.Shop.Offers.index',
|
||||||
|
])->activeIfRoute(['Admin.Shop.Offers.*'])->order(4);
|
||||||
|
|
||||||
$menu->addTo('shop', 'Natures d\'articles', [ 'route' => 'Admin.Shop.ArticleNatures.index', 'permission' => 'backend_access' ])
|
$menu->addTo('shop', 'Rayons', [
|
||||||
->activeIfRoute(['Admin.Shop.ArticleNatures.*'])->order(9);
|
'route' => 'Admin.Shop.Categories.index',
|
||||||
|
])->activeIfRoute(['Admin.Shop.Categories.*'])->order(6);
|
||||||
|
|
||||||
$menu->addTo('shop', 'Packages', [ 'route' => 'Admin.Shop.Packages.index', 'permission' => 'backend_access' ])
|
$menu->addTo('shop', 'Tags', [
|
||||||
->activeIfRoute(['Admin.Shop.Packages.*'])->order(12);
|
'route' => 'Admin.Shop.Tags.index',
|
||||||
|
])->activeIfRoute(['Admin.Shop.Tags.*'])->order(8);
|
||||||
|
|
||||||
$menu->addTo('shop', 'Unités de tarifs', [ 'route' => 'Admin.Shop.TariffUnities.index', 'permission' => 'backend_access' ])
|
$menu->addTo('shop', 'Groupes de tags', [
|
||||||
->activeIfRoute(['Admin.Shop.TariffUnities.*'])->order(13);
|
'route' => 'Admin.Shop.TagGroups.index',
|
||||||
|
])->activeIfRoute(['Admin.Shop.TagGroups.*'])->order(8);
|
||||||
|
|
||||||
$menu->addTo('shop', 'Unités', [ 'route' => 'Admin.Shop.Unities.index', 'permission' => 'backend_access' ])
|
$menu->addTo('shop', 'Natures d\'articles', [
|
||||||
->activeIfRoute(['Admin.Shop.Unities.*'])->order(14);
|
'route' => 'Admin.Shop.ArticleNatures.index',
|
||||||
|
])->activeIfRoute(['Admin.Shop.ArticleNatures.*'])->order(9);
|
||||||
|
|
||||||
$menu->addTo('shop', 'Accueil', [ 'route' => 'Admin.Shop.Homepages.index', 'permission' => 'backend_access' ])
|
$menu->addTo('shop', 'Packages', [
|
||||||
->activeIfRoute(['Admin.Shop.Homepages.*'])->order(14);
|
'route' => 'Admin.Shop.Packages.index',
|
||||||
|
])->activeIfRoute(['Admin.Shop.Packages.*'])->order(12);
|
||||||
|
|
||||||
|
$menu->addTo('shop', 'Unités de tarifs', [
|
||||||
|
'route' => 'Admin.Shop.TariffUnities.index',
|
||||||
|
])->activeIfRoute(['Admin.Shop.TariffUnities.*'])->order(13);
|
||||||
|
|
||||||
|
$menu->addTo('shop', 'Unités', [
|
||||||
|
'route' => 'Admin.Shop.Unities.index',
|
||||||
|
])->activeIfRoute(['Admin.Shop.Unities.*'])->order(14);
|
||||||
|
|
||||||
|
$menu->addTo('shop', 'Accueil', [
|
||||||
|
'route' => 'Admin.Shop.Homepages.index',
|
||||||
|
])->activeIfRoute(['Admin.Shop.Homepages.*'])->order(14);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,22 +2,15 @@
|
|||||||
|
|
||||||
namespace App\Models\Shop;
|
namespace App\Models\Shop;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
|
||||||
|
|
||||||
use Spatie\MediaLibrary\HasMedia;
|
|
||||||
use Spatie\MediaLibrary\InteractsWithMedia;
|
|
||||||
use Spatie\MediaLibrary\MediaCollections\Models\Media;
|
|
||||||
|
|
||||||
// use Rinvex\Categories\Traits\Categorizable;
|
|
||||||
use Cesargb\Database\Support\CascadeDelete;
|
use Cesargb\Database\Support\CascadeDelete;
|
||||||
use Rinvex\Tags\Traits\Taggable;
|
use Rinvex\Tags\Traits\Taggable;
|
||||||
use Wildside\Userstamps\Userstamps;
|
use Wildside\Userstamps\Userstamps;
|
||||||
|
|
||||||
// use Kalnoy\Nestedset\NodeTrait;
|
|
||||||
|
|
||||||
use Rinvex\Categories\Models\Category as parentCategory;
|
use Rinvex\Categories\Models\Category as parentCategory;
|
||||||
use Kalnoy\Nestedset\NestedSet;
|
use Kalnoy\Nestedset\NestedSet;
|
||||||
|
|
||||||
|
use App\Repositories\Shop\SaleChannels;
|
||||||
|
|
||||||
class Category extends parentCategory
|
class Category extends parentCategory
|
||||||
{
|
{
|
||||||
use CascadeDelete, Taggable, Userstamps;
|
use CascadeDelete, Taggable, Userstamps;
|
||||||
@@ -72,4 +65,12 @@ class Category extends parentCategory
|
|||||||
{
|
{
|
||||||
return $query->where('id', '<>', 1);
|
return $query->where('id', '<>', 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function scopeHasAvailableOffers($query, $sale_channel_id = false)
|
||||||
|
{
|
||||||
|
$sale_channel_id = $sale_channel_id ? $sale_channel_id : SaleChannels::getDefaultID();
|
||||||
|
return $query->whereHas('articles', function ($query) use ($sale_channel_id) {
|
||||||
|
$query->WithAvailableOffers($sale_channel_id);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,4 +7,6 @@ use Illuminate\Database\Eloquent\Model;
|
|||||||
class Homepage extends Model
|
class Homepage extends Model
|
||||||
{
|
{
|
||||||
protected $guarded = ['id'];
|
protected $guarded = ['id'];
|
||||||
|
protected $table = 'shop_homepages';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,9 +33,10 @@ class Categories
|
|||||||
return self::getModel()->defaultOrder()->get()->toTree();
|
return self::getModel()->defaultOrder()->get()->toTree();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getCategoryTreeVisibles()
|
public static function getCategoryTreeVisibles($sale_channel_id = false)
|
||||||
{
|
{
|
||||||
return self::getModel()->defaultOrder()->where('visible', 1)->get()->toTree();
|
// return self::getModel()->defaultOrder()->visible()->hasAvailableOffers($sale_channel_id)->get()->toTree();
|
||||||
|
return self::getModel()->defaultOrder()->visible()->get()->toTree();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getChildren($data, $withFolder = false)
|
public static function getChildren($data, $withFolder = false)
|
||||||
|
|||||||
@@ -19,6 +19,15 @@ class ShopCart
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function getSummary()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'count' => self::count(),
|
||||||
|
'quantity' => self::getTotalQuantity(),
|
||||||
|
'total' => self::getTotal(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
public static function remove($id)
|
public static function remove($id)
|
||||||
{
|
{
|
||||||
return self::get()->remove($id);
|
return self::get()->remove($id);
|
||||||
|
|||||||
@@ -486,5 +486,4 @@ class Articles
|
|||||||
{
|
{
|
||||||
return self::update(['homepage' => $homepage], $id);
|
return self::update(['homepage' => $homepage], $id);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ trait Imageable
|
|||||||
|
|
||||||
public static function getPreviewSrc($image)
|
public static function getPreviewSrc($image)
|
||||||
{
|
{
|
||||||
return $image ? Medias::getPreviewSrc($image) : null;
|
return $image ? Medias::getPreviewSrc($image) : '/img/visuel-non-disponible.jpg';
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getImage($image)
|
public static function getImage($image)
|
||||||
@@ -43,7 +43,7 @@ trait Imageable
|
|||||||
|
|
||||||
public static function getImageSrc($image)
|
public static function getImageSrc($image)
|
||||||
{
|
{
|
||||||
return $image ? Medias::getImageSrc($image) : null;
|
return $image ? Medias::getImageSrc($image) : '/img/visuel-non-disponible.jpg';
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function deleteImage($id, $index)
|
public static function deleteImage($id, $index)
|
||||||
|
|||||||
@@ -1,18 +1,17 @@
|
|||||||
// Prevent closing from click inside dropdown
|
// Prevent closing from click inside dropdown
|
||||||
$(document).on('click', '.dropdown-menu', function (e) {
|
$(document).on('click', '.dropdown-menu', function (e) {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
});
|
});
|
||||||
|
|
||||||
// make it as accordion for smaller screens
|
// make it as accordion for smaller screens
|
||||||
if ($(window).width() < 992) {
|
if ($(window).width() < 992) {
|
||||||
$('.dropdown-menu a').click(function(e){
|
$('.dropdown-menu a').click(function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
if($(this).next('.submenu').length){
|
if ($(this).next('.submenu').length) {
|
||||||
$(this).next('.submenu').toggle();
|
$(this).next('.submenu').toggle();
|
||||||
}
|
}
|
||||||
$('.dropdown').on('hide.bs.dropdown', function () {
|
$('.dropdown').on('hide.bs.dropdown', function () {
|
||||||
$(this).find('.submenu').hide();
|
$(this).find('.submenu').hide();
|
||||||
})
|
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
|
}
|
||||||
|
|||||||
@@ -62,7 +62,6 @@
|
|||||||
"mpdf/mpdf": "^8.0",
|
"mpdf/mpdf": "^8.0",
|
||||||
"mpociot/teamwork": "^6.1",
|
"mpociot/teamwork": "^6.1",
|
||||||
"nicmart/tree": "^0.3",
|
"nicmart/tree": "^0.3",
|
||||||
"olssonm/laravel-backup-shield": "^3.1",
|
|
||||||
"orangehill/iseed": "^3.0",
|
"orangehill/iseed": "^3.0",
|
||||||
"php-console/php-console": "^3.1",
|
"php-console/php-console": "^3.1",
|
||||||
"proengsoft/laravel-jsvalidation": "^4.5",
|
"proengsoft/laravel-jsvalidation": "^4.5",
|
||||||
@@ -79,7 +78,7 @@
|
|||||||
"spatie/eloquent-sortable": "^4.0",
|
"spatie/eloquent-sortable": "^4.0",
|
||||||
"spatie/image-optimizer": "^1.4",
|
"spatie/image-optimizer": "^1.4",
|
||||||
"spatie/laravel-activitylog": "^3.6",
|
"spatie/laravel-activitylog": "^3.6",
|
||||||
"spatie/laravel-backup": "^6.16",
|
"spatie/laravel-backup": "^7.0",
|
||||||
"spatie/laravel-mail-preview": "^4.0",
|
"spatie/laravel-mail-preview": "^4.0",
|
||||||
"spatie/laravel-medialibrary": "^9.6",
|
"spatie/laravel-medialibrary": "^9.6",
|
||||||
"spatie/laravel-stats": "^1.0",
|
"spatie/laravel-stats": "^1.0",
|
||||||
|
|||||||
@@ -41,6 +41,11 @@ return [
|
|||||||
'provider' => 'users',
|
'provider' => 'users',
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'guest' => [
|
||||||
|
'driver' => 'session',
|
||||||
|
'provider' => 'guests',
|
||||||
|
],
|
||||||
|
|
||||||
'api' => [
|
'api' => [
|
||||||
'driver' => 'token',
|
'driver' => 'token',
|
||||||
'provider' => 'users',
|
'provider' => 'users',
|
||||||
@@ -71,6 +76,11 @@ return [
|
|||||||
'model' => App\User::class,
|
'model' => App\User::class,
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'guests' => [
|
||||||
|
'driver' => 'eloquent',
|
||||||
|
'model' => App\Models\Shop\Customer::class,
|
||||||
|
],
|
||||||
|
|
||||||
// 'users' => [
|
// 'users' => [
|
||||||
// 'driver' => 'database',
|
// 'driver' => 'database',
|
||||||
// 'table' => 'users',
|
// 'table' => 'users',
|
||||||
@@ -99,6 +109,12 @@ return [
|
|||||||
'expire' => 60,
|
'expire' => 60,
|
||||||
'throttle' => 60,
|
'throttle' => 60,
|
||||||
],
|
],
|
||||||
|
'guests' => [
|
||||||
|
'provider' => 'guests',
|
||||||
|
'table' => 'shop_customer_password_resets',
|
||||||
|
'expire' => 60,
|
||||||
|
'throttle' => 60,
|
||||||
|
],
|
||||||
],
|
],
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
'password' => env('APP_KEY'),
|
|
||||||
'encryption' => \Olssonm\BackupShield\Encryption::ENCRYPTION_DEFAULT
|
|
||||||
|
|
||||||
// Available encryption methods:
|
|
||||||
// \Olssonm\BackupShield\Encryption::ENCRYPTION_DEFAULT (AES 128)
|
|
||||||
// \Olssonm\BackupShield\Encryption::ENCRYPTION_WINZIP_AES_128 (AES 128)
|
|
||||||
// \Olssonm\BackupShield\Encryption::ENCRYPTION_WINZIP_AES_192 (AES 192)
|
|
||||||
// \Olssonm\BackupShield\Encryption::ENCRYPTION_WINZIP_AES_256 (AES 256)
|
|
||||||
];
|
|
||||||
@@ -13,5 +13,5 @@ return [
|
|||||||
// Backend locale
|
// Backend locale
|
||||||
'locale' => config('app.locale'),
|
'locale' => config('app.locale'),
|
||||||
|
|
||||||
'logs' => false,
|
'logs' => true,
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -15,13 +15,14 @@ class CreateShopCustomersTable extends Migration {
|
|||||||
Schema::create('shop_customers', function(Blueprint $table)
|
Schema::create('shop_customers', function(Blueprint $table)
|
||||||
{
|
{
|
||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->string('name', 50)->default('0');
|
$table->string('first_name')->nullable();
|
||||||
$table->string('address1', 50)->default('0');
|
$table->string('last_name')->nullable();
|
||||||
$table->string('address2', 50)->default('0');
|
$table->string('email')->unique();
|
||||||
$table->string('zipcode', 50)->default('0');
|
$table->dateTime('email_verified_at')->nullable();
|
||||||
$table->string('city', 50)->default('0');
|
$table->string('password');
|
||||||
$table->string('country', 50)->default('0');
|
$table->string('remember_token', 100)->nullable();
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
|
$table->softDeletes();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,83 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
|
||||||
|
|
||||||
class TeamworkSetupTables extends Migration
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Run the migrations.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function up()
|
|
||||||
{
|
|
||||||
Schema::table(\Config::get('teamwork.users_table'), function (Blueprint $table) {
|
|
||||||
$table->integer('current_team_id')->unsigned()->nullable();
|
|
||||||
});
|
|
||||||
|
|
||||||
Schema::create(\Config::get('teamwork.teams_table'), function (Blueprint $table) {
|
|
||||||
$table->increments('id')->unsigned();
|
|
||||||
$table->integer('owner_id')->unsigned()->nullable();
|
|
||||||
$table->string('name');
|
|
||||||
$table->timestamps();
|
|
||||||
});
|
|
||||||
|
|
||||||
Schema::create(\Config::get('teamwork.team_user_table'), function (Blueprint $table) {
|
|
||||||
$table->bigInteger('user_id')->unsigned();
|
|
||||||
$table->integer('team_id')->unsigned();
|
|
||||||
$table->timestamps();
|
|
||||||
|
|
||||||
$table->foreign('user_id')
|
|
||||||
->references(\Config::get('teamwork.user_foreign_key'))
|
|
||||||
->on(\Config::get('teamwork.users_table'))
|
|
||||||
->onUpdate('cascade')
|
|
||||||
->onDelete('cascade');
|
|
||||||
|
|
||||||
$table->foreign('team_id')
|
|
||||||
->references('id')
|
|
||||||
->on(\Config::get('teamwork.teams_table'))
|
|
||||||
->onDelete('cascade');
|
|
||||||
});
|
|
||||||
|
|
||||||
Schema::create(\Config::get('teamwork.team_invites_table'), function (Blueprint $table) {
|
|
||||||
$table->increments('id');
|
|
||||||
$table->bigInteger('user_id')->unsigned();
|
|
||||||
$table->integer('team_id')->unsigned();
|
|
||||||
$table->enum('type', ['invite', 'request']);
|
|
||||||
$table->string('email');
|
|
||||||
$table->string('accept_token');
|
|
||||||
$table->string('deny_token');
|
|
||||||
$table->timestamps();
|
|
||||||
$table->foreign('team_id')
|
|
||||||
->references('id')
|
|
||||||
->on(\Config::get('teamwork.teams_table'))
|
|
||||||
->onDelete('cascade');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reverse the migrations.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function down()
|
|
||||||
{
|
|
||||||
Schema::table(\Config::get('teamwork.users_table'), function (Blueprint $table) {
|
|
||||||
$table->dropColumn('current_team_id');
|
|
||||||
});
|
|
||||||
|
|
||||||
Schema::table(\Config::get('teamwork.team_user_table'), function (Blueprint $table) {
|
|
||||||
if (DB::getDriverName() !== 'sqlite') {
|
|
||||||
$table->dropForeign(\Config::get('teamwork.team_user_table').'_user_id_foreign');
|
|
||||||
}
|
|
||||||
if (DB::getDriverName() !== 'sqlite') {
|
|
||||||
$table->dropForeign(\Config::get('teamwork.team_user_table').'_team_id_foreign');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Schema::drop(\Config::get('teamwork.team_user_table'));
|
|
||||||
Schema::drop(\Config::get('teamwork.team_invites_table'));
|
|
||||||
Schema::drop(\Config::get('teamwork.teams_table'));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -86,6 +86,7 @@
|
|||||||
"handlebars-layouts": "^3.1.4",
|
"handlebars-layouts": "^3.1.4",
|
||||||
"highcharts": "^9.1.2",
|
"highcharts": "^9.1.2",
|
||||||
"highcharts-export-server": "^2.1.0",
|
"highcharts-export-server": "^2.1.0",
|
||||||
|
"html-number-spinner": "^1.1.2",
|
||||||
"icheck": "^1.0.2",
|
"icheck": "^1.0.2",
|
||||||
"icheck-bootstrap": "^3.0.1",
|
"icheck-bootstrap": "^3.0.1",
|
||||||
"input-switch": "^1.1.0",
|
"input-switch": "^1.1.0",
|
||||||
|
|||||||
11
resources/views/Admin/Shop/Merchandises/create.blade.php
Normal file
11
resources/views/Admin/Shop/Merchandises/create.blade.php
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
@extends('layout.index', [
|
||||||
|
'title' => __('shop.merchandises.title'),
|
||||||
|
'subtitle' => __('shop.merchandises.add'),
|
||||||
|
'breadcrumb' => [__('shop.merchandises.title'), __('shop.merchandises.add')]
|
||||||
|
])
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
{{ Form::open(['route' => 'Admin.Shop.Merchandises.store', 'id' => 'form', 'autocomplete' => 'off', 'files' => true]) }}
|
||||||
|
@include('Admin.Shop.Merchandises.form')
|
||||||
|
</form>
|
||||||
|
@endsection
|
||||||
12
resources/views/Admin/Shop/Merchandises/edit.blade.php
Normal file
12
resources/views/Admin/Shop/Merchandises/edit.blade.php
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
@extends('layout.index', [
|
||||||
|
'title' => __('Shop.merchandises.title'),
|
||||||
|
'subtitle' => __('Shop.merchandises.edit'),
|
||||||
|
'breadcrumb' => [__('Shop.merchandises.title'), __('Shop.merchandises.edit')]
|
||||||
|
])
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
{{ Form::open(['route' => 'Admin.Shop.Merchandises.store', 'id' => 'form', 'autocomplete' => 'off', 'files' => true]) }}
|
||||||
|
<input type="hidden" name="id" id="id" value="{{ $variety['id'] }}">
|
||||||
|
@include('Admin.Shop.Merchandises.form')
|
||||||
|
</form>
|
||||||
|
@endsection
|
||||||
62
resources/views/Admin/Shop/Merchandises/form.blade.php
Normal file
62
resources/views/Admin/Shop/Merchandises/form.blade.php
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
<div class="row">
|
||||||
|
<div class="col-md-8">
|
||||||
|
<div class="row mb-3">
|
||||||
|
<div class="col-6">
|
||||||
|
{{ Form::label('name', 'Nom') }}
|
||||||
|
@include('components.form.input', ['name' => 'name', 'value' => $variety['name'] ?? null, 'required' => true])
|
||||||
|
</div>
|
||||||
|
<div class="col-6">
|
||||||
|
{{ Form::label('genre', 'Espèce') }}
|
||||||
|
@include('components.form.select', ['name' => 'specie_id', 'list' => $species, 'value' => $variety['specie_id'] ?? null, 'class' => 'select2 form-control', 'with_empty' => '', 'required' => false])
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<div class="col-12">
|
||||||
|
{{ Form::label('tags', 'Tags') }}
|
||||||
|
@include('components.form.selects.select-tree', ['name' => 'tags[]', 'list' => $tags_list, 'values' => $variety['tags'] ?? null, 'class' => 'select2 form-control', 'multiple' => true])
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<div class="col-12">
|
||||||
|
{{ Form::label('description', 'Description') }}
|
||||||
|
@include('components.form.textarea', ['name' => 'description', 'value' => $variety['description'] ?? null, 'class' => 'editor', 'rows' => 5, 'required' => false])
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<div class="col-12">
|
||||||
|
{{ Form::label('memo', 'Descriptif sachet') }}
|
||||||
|
@include('components.form.textarea', ['name' => 'memo', 'value' => $variety['memo'] ?? null, 'class' => 'editor', 'rows' => 5, 'required' => false])
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-4">
|
||||||
|
@include('components.uploader.widget', ['load_url' => route('Admin.Botanic.Varieties.getImages', ['id' => $variety['id'] ?? false]), 'delete_url' => route('Admin.Botanic.Varieties.deleteImage'), 'name' => 'images'])
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@include('components.save')
|
||||||
|
|
||||||
|
@include('load.form.appender')
|
||||||
|
@include('load.form.editor')
|
||||||
|
@include('load.form.save')
|
||||||
|
@include('load.form.select2')
|
||||||
|
@include('load.layout.chevron')
|
||||||
|
@include('boilerplate::load.fileinput')
|
||||||
|
@include('boilerplate::load.tinymce')
|
||||||
|
|
||||||
|
@push('js')
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
initSelect2();
|
||||||
|
initChevron();
|
||||||
|
initEditor();
|
||||||
|
initSaveForm();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
@endpush
|
||||||
12
resources/views/Admin/Shop/Merchandises/list.blade.php
Normal file
12
resources/views/Admin/Shop/Merchandises/list.blade.php
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
@extends('layout.index', [
|
||||||
|
'title' => __('Botanic.varieties.title'),
|
||||||
|
'subtitle' => __('Botanic.varieties.list'),
|
||||||
|
'breadcrumb' => [__('Botanic.varieties.title')]
|
||||||
|
])
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
@component('components.card')
|
||||||
|
@include('components.datatable', ['route' => route('Admin.Botanic.Varieties.index'), 'model' => 'varieties'])
|
||||||
|
@endcomponent
|
||||||
|
@endsection
|
||||||
|
|
||||||
30
resources/views/Admin/Shop/Merchandises/show.blade.php
Normal file
30
resources/views/Admin/Shop/Merchandises/show.blade.php
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
@extends('layout.index', [
|
||||||
|
'title' => __('products.title'),
|
||||||
|
'subtitle' => __('products.title'),
|
||||||
|
'breadcrumb' => [__('products.title')]
|
||||||
|
])
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-md-offset-2 col-md-8">
|
||||||
|
|
||||||
|
<div class="box box-info">
|
||||||
|
<div class="box-body">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<h3>{{ name }}</h3>
|
||||||
|
<h4>
|
||||||
|
{{ $product.section.name }}<br>
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-12">
|
||||||
|
@include('components.carousel')
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@endsection
|
||||||
@@ -52,7 +52,7 @@
|
|||||||
'basket-form',
|
'basket-form',
|
||||||
"{{ route('Shop.Basket.modalBasket') }}/" + offer_id + '/' + quantity,
|
"{{ route('Shop.Basket.modalBasket') }}/" + offer_id + '/' + quantity,
|
||||||
"{{ route('Shop.Basket.addBasket') }}",
|
"{{ route('Shop.Basket.addBasket') }}",
|
||||||
false,
|
refreshBasketTop(),
|
||||||
false,
|
false,
|
||||||
true,
|
true,
|
||||||
buttons
|
buttons
|
||||||
|
|||||||
@@ -1,14 +1,10 @@
|
|||||||
<a href="{{ route('Shop.Articles.show', ['id' => $article['semences']['article_id'] ?? false ]) }}">
|
<a href="{{ route('Shop.Articles.show', ['id' => $article['semences']['article_id'] ?? false ]) }}" class="green-dark">
|
||||||
<div class="card">
|
<div class="card bg-green-light">
|
||||||
@if ($article['image'] !== null)
|
|
||||||
<img src="{{ App\Repositories\Shop\Articles::getPreviewSrc($article['image'] ?? false) }}" class="card-img-top" alt="{{ $product_name }}">
|
<img src="{{ App\Repositories\Shop\Articles::getPreviewSrc($article['image'] ?? false) }}" class="card-img-top" alt="{{ $product_name }}">
|
||||||
@else
|
|
||||||
<img src="img/visuel-non-disponible.jpg" class="card-img-top">
|
|
||||||
@endif
|
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="row card-title">
|
<div class="row card-title">
|
||||||
<div class="col-10" style="font-weight: bold; color: green;">
|
<div class="col-10">
|
||||||
<h2 style="font-size: 1.3em;">{{ $article['parent_name'] }}</h2>
|
<div class="mb-0" style="font-size: 1.3em;">{{ $article['parent_name'] }}</div>
|
||||||
{{ $article['product_name'] }}
|
{{ $article['product_name'] }}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-2 p-0 text-right" style="font-size: 2em; color: red;">
|
<div class="col-2 p-0 text-right" style="font-size: 2em; color: red;">
|
||||||
@@ -16,22 +12,22 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row" style="color: green;">
|
<div class="row">
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
|
<strong>Semence</strong>
|
||||||
@if ($article['semences'] ?? false)
|
@if ($article['semences'] ?? false)
|
||||||
<span style="font-size: 1.4em; font-weight: bold;">{{ $article['semences']['price'] ?? null }}</span> €<br>
|
<span style="font-size: 1.4em">{{ $article['semences']['price'] ?? null }}</span> €<br>
|
||||||
@else
|
@else
|
||||||
Indisponible<br>
|
Indisponible<br>
|
||||||
@endif
|
@endif
|
||||||
Semence
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
|
<strong>Plant</strong>
|
||||||
@if ($article['plants'] ?? false)
|
@if ($article['plants'] ?? false)
|
||||||
<span style="font-size: 1.4em; font-weight: bold;">{{ $article['plants']['price'] }}</span> €<br>
|
<span style="font-size: 1.4em">{{ $article['plants']['price'] }}</span> €<br>
|
||||||
@else
|
@else
|
||||||
Indisponible<br>
|
Indisponible<br>
|
||||||
@endif
|
@endif
|
||||||
Plant
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -9,10 +9,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-5">
|
<div class="col-4">
|
||||||
{!! $article['image_big'] !!}
|
{!! $article['image_big'] !!}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-4">
|
<div class="col-5">
|
||||||
{!! $article['description'] !!}
|
{!! $article['description'] !!}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-3">
|
<div class="col-3">
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
@if ($basket)
|
@if ($basket)
|
||||||
<div class="row">
|
<div class="row m-0">
|
||||||
<div class="col-8">
|
<div class="col-8">
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<div class="col-4">
|
<div class="col-4">
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@foreach ($basket as $nature => $items)
|
@foreach ($basket as $nature => $items)
|
||||||
<div class="row mb-3 p-2" style="background-color: #ccc;">
|
<div class="row mb-3 p-2 bg-green-light">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<h2 style="font-size: 1.6em;">{{ ucfirst($nature) }}</h2>
|
<h2 style="font-size: 1.6em;">{{ ucfirst($nature) }}</h2>
|
||||||
@foreach ($items as $item)
|
@foreach ($items as $item)
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
@endforeach
|
@endforeach
|
||||||
</div>
|
</div>
|
||||||
<div class="col-4">
|
<div class="col-4">
|
||||||
@component('components.card')
|
@component('components.card', ['class' => 'shadow'])
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<div class="col-6 text-uppercase">
|
<div class="col-6 text-uppercase">
|
||||||
Tarif appliqué
|
Tarif appliqué
|
||||||
|
|||||||
@@ -16,10 +16,10 @@
|
|||||||
'class' => 'basket-quantity',
|
'class' => 'basket-quantity',
|
||||||
])
|
])
|
||||||
</div>
|
</div>
|
||||||
<div class="col-2 text-right" style="font-size: 2em;" id="basket_total-{{ $item['id'] }}">
|
<div class="col-3 text-right" style="font-size: 2em;" id="basket_total-{{ $item['id'] }}">
|
||||||
<span class="basket-total-row">{{ $item['quantity'] * $item['price'] }}</span> €
|
<span class="basket-total-row">{{ $item['quantity'] * $item['price'] }}</span> €
|
||||||
</div>
|
</div>
|
||||||
<div class="col-2">
|
<div class="col-1 text-center">
|
||||||
<i class="btn fa fa-fw fa-trash basket-delete" style="font-size: 1.6em;" data-id={{ $item['id'] }}></i>
|
<i class="btn fa fa-fw fa-trash basket-delete" style="font-size: 1.6em;" data-id={{ $item['id'] }}></i>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
30
resources/views/Shop/auth/firstlogin.blade.php
Normal file
30
resources/views/Shop/auth/firstlogin.blade.php
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
@extends('boilerplate::auth.layout', [
|
||||||
|
'title' => __('boilerplate::auth.firstlogin.title'),
|
||||||
|
'bodyClass' => 'hold-transition login-page'
|
||||||
|
])
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
@component('boilerplate::auth.loginbox')
|
||||||
|
{{ Form::open(['route' => 'boilerplate.users.firstlogin', 'autocomplete' => 'off']) }}
|
||||||
|
<input type="hidden" name="token" value="{{ $token }}">
|
||||||
|
<div class="alert alert-info">
|
||||||
|
<p>{{ __('boilerplate::auth.firstlogin.intro') }}</p>
|
||||||
|
</div>
|
||||||
|
<div class="form-group {{ $errors->has('password') ? 'has-error' : '' }}">
|
||||||
|
{{ Form::label('password', __('boilerplate::auth.fields.password')) }}
|
||||||
|
{{ Form::input('password', 'password', Request::old('password'), ['class' => 'form-control', 'autofocus']) }}
|
||||||
|
{!! $errors->first('password','<p class="text-danger">:message</p>') !!}
|
||||||
|
</div>
|
||||||
|
<div class="form-group {{ $errors->has('password_confirmation') ? 'has-error' : '' }}">
|
||||||
|
{{ Form::label('password_confirmation', __('boilerplate::auth.fields.password_confirm')) }}
|
||||||
|
{{ Form::input('password', 'password_confirmation', Request::old('password_confirmation'), ['class' => 'form-control']) }}
|
||||||
|
{!! $errors->first('password_confirmation','<p class="text-danger">:message</p>') !!}
|
||||||
|
</div>
|
||||||
|
<div class="form-group text-center">
|
||||||
|
<button type="submit" class="btn btn-primary">
|
||||||
|
{{ __('boilerplate::auth.firstlogin.button') }}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
@endcomponent
|
||||||
|
@endsection
|
||||||
18
resources/views/Shop/auth/layout.blade.php
Normal file
18
resources/views/Shop/auth/layout.blade.php
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="{{ App::getLocale() }}">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||||
|
<title>{{ $title }} | {{ config('app.name') }}</title>
|
||||||
|
<link rel="stylesheet" href="{{ mix('/adminlte.min.css', '/assets/vendor/boilerplate') }}">
|
||||||
|
@stack('css')
|
||||||
|
</head>
|
||||||
|
<body class="{{ $bodyClass ?? 'login-page'}}">
|
||||||
|
@yield('content')
|
||||||
|
<script src="{{ mix('/boilerplate.min.js', '/assets/vendor/boilerplate') }}"></script>
|
||||||
|
@stack('js')
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
46
resources/views/Shop/auth/login.blade.php
Normal file
46
resources/views/Shop/auth/login.blade.php
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
@extends('auth.layout', [
|
||||||
|
'title' => __('boilerplate::auth.login.title'),
|
||||||
|
'bodyClass' => 'hold-transition login-page'
|
||||||
|
])
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
{!! Form::open(['route' => 'boilerplate.login', 'method' => 'post', 'autocomplete'=> 'off']) !!}
|
||||||
|
<div class="row" style="width: 380px;">
|
||||||
|
<div class="col-12 text-center">
|
||||||
|
<img src="/img/logo.png" height="128">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group has-feedback">
|
||||||
|
<div class="form-group {{ $errors->has('email') ? 'has-error' : '' }}">
|
||||||
|
{{ Form::email('email', old('email'), ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.email'), 'required', 'autofocus']) }}
|
||||||
|
<span class="glyphicon glyphicon-envelope form-control-feedback"></span>
|
||||||
|
{!! $errors->first('email','<p class="text-danger"><strong>:message</strong></p>') !!}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group has-feedback">
|
||||||
|
<div class="form-group {{ $errors->has('password') ? 'has-error' : '' }}">
|
||||||
|
{{ Form::password('password', ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.password')]) }}
|
||||||
|
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
|
||||||
|
{!! $errors->first('password','<p class="text-danger"><strong>:message</strong></p>') !!}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12 col-lg-8">
|
||||||
|
<div class="checkbox icheck">
|
||||||
|
<label style="padding-left: 0">
|
||||||
|
<input type="checkbox" name="remember" class="icheck" {{ old('remember') ? 'checked' : '' }}>
|
||||||
|
{{ __('boilerplate::auth.login.rememberme') }}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-12 col-lg-4 mbs">
|
||||||
|
<button type="submit" class="btn btn-primary btn-block btn-flat">{{ __('boilerplate::auth.login.signin') }}</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{!! Form::close() !!}
|
||||||
|
<a href="{{ route('boilerplate.password.request') }}">{{ __('boilerplate::auth.login.forgotpassword') }}</a><br>
|
||||||
|
@if(config('boilerplate.auth.register'))
|
||||||
|
<a href="{{ route('boilerplate.register') }}" class="text-center">{{ __('boilerplate::auth.login.register') }}</a>
|
||||||
|
@endif
|
||||||
|
@endsection
|
||||||
8
resources/views/Shop/auth/loginbox.blade.php
Normal file
8
resources/views/Shop/auth/loginbox.blade.php
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
@if (config('app.name') == 'CRM')
|
||||||
|
@include('auth.crm')
|
||||||
|
|
||||||
|
@endif
|
||||||
|
|
||||||
|
@if (config('app.name') == 'HestImmo')
|
||||||
|
@include('auth.hestimmo')
|
||||||
|
@endif
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
<div class="modal fade" id="changepasswordModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
|
||||||
|
<div class="modal-dialog" role="document">
|
||||||
|
<div class="modal-content">
|
||||||
|
<form role="form" id="password-form-data" method="post" autocomplete="off">
|
||||||
|
{{ csrf_field() }}
|
||||||
|
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title" id="exampleModalLabel">{{ __('change_your_password') }}</h5>
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal-body">
|
||||||
|
<div class="row" style="padding: 10px 20px;">
|
||||||
|
<div class="col-xs-12 text-center" id="changePasswordMessage"></div>
|
||||||
|
</div>
|
||||||
|
<div class="row" style="padding: 10px 20px;">
|
||||||
|
<label for="new-password" class="col-md-6 control-label text-right">{{ __('current_password') }}</label>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<input id="current-password" type="password" class="form-control" name="current-password" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row" style="padding: 10px 20px;">
|
||||||
|
<label for="new-password" class="col-md-6 control-label text-right">{{ __('new_password') }}</label>
|
||||||
|
|
||||||
|
<div class="col-md-6">
|
||||||
|
<input id="new-password" type="password" class="form-control" name="new-password" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row" style="padding: 10px 20px;">
|
||||||
|
<label for="new-password-confirm" class="col-md-6 control-label text-right">{{ __('confirm_new_password') }}</label>
|
||||||
|
|
||||||
|
<div class="col-md-6">
|
||||||
|
<input id="new-password-confirm" type="password" class="form-control" name="new-password_confirmation" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-primary" id="changePassword-submit">
|
||||||
|
{{ __('save') }}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
28
resources/views/Shop/auth/passwords/email.blade.php
Normal file
28
resources/views/Shop/auth/passwords/email.blade.php
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
@extends('boilerplate::auth.layout', ['title' => __('boilerplate::auth.password.title'), 'bodyClass' => 'hold-transition login-page'])
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
@component('boilerplate::auth.loginbox')
|
||||||
|
<p class="login-box-msg">{{ __('boilerplate::auth.password.intro') }}</p>
|
||||||
|
@if (session('status'))
|
||||||
|
<div class="alert alert-success">
|
||||||
|
{{ session('status') }}
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
{!! Form::open(['route' => 'boilerplate.password.email', 'method' => 'post', 'autocomplete'=> 'off']) !!}
|
||||||
|
<div class="form-group {{ $errors->has('email') ? 'has-error' : '' }}">
|
||||||
|
{{ Form::email('email', old('email'), ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.email'), 'required', 'autofocus']) }}
|
||||||
|
{!! $errors->first('email','<p class="text-danger"><strong>:message</strong></p>') !!}
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 text-center">
|
||||||
|
<button type="submit" class="btn btn-primary">
|
||||||
|
{{ __('boilerplate::auth.password.submit') }}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{!! Form::close() !!}
|
||||||
|
<a href="{{ route('boilerplate.login') }}">{{ __('boilerplate::auth.password.login_link') }}</a><br>
|
||||||
|
@endcomponent
|
||||||
|
@endsection
|
||||||
27
resources/views/Shop/auth/passwords/reset.blade.php
Normal file
27
resources/views/Shop/auth/passwords/reset.blade.php
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
@extends('boilerplate::auth.layout', ['title' => __('boilerplate::auth.password_reset.title')])
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
@component('boilerplate::auth.loginbox')
|
||||||
|
<p class="login-box-msg">{{ __('boilerplate::auth.password_reset.intro') }}</p>
|
||||||
|
{!! Form::open(['route' => 'boilerplate.password.reset.post', 'method' => 'post', 'autocomplete'=> 'off']) !!}
|
||||||
|
{!! Form::hidden('token', $token) !!}
|
||||||
|
<div class="form-group {{ $errors->has('email') ? 'has-error' : '' }}">
|
||||||
|
{{ Form::email('email', old('email', $email), ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.email'), 'required', 'autofocus']) }}
|
||||||
|
{!! $errors->first('email','<p class="text-danger"><strong>:message</strong></p>') !!}
|
||||||
|
</div>
|
||||||
|
<div class="form-group {{ $errors->has('password') ? 'has-error' : '' }}">
|
||||||
|
{{ Form::password('password', ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.password'), 'required']) }}
|
||||||
|
{!! $errors->first('password','<p class="text-danger"><strong>:message</strong></p>') !!}
|
||||||
|
</div>
|
||||||
|
<div class="form-group {{ $errors->has('password_confirmation') ? 'has-error' : '' }}">
|
||||||
|
{{ Form::password('password_confirmation', ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.password_confirm'), 'required']) }}
|
||||||
|
{!! $errors->first('password_confirmation','<p class="text-danger"><strong>:message</strong></p>') !!}
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 text-center">
|
||||||
|
<button class="btn btn-primary" type="submit">{{ __('boilerplate::auth.password_reset.submit') }}</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{!! Form::close() !!}
|
||||||
|
@endcomponent
|
||||||
|
@endsection
|
||||||
39
resources/views/Shop/auth/register.blade.php
Normal file
39
resources/views/Shop/auth/register.blade.php
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
@extends('boilerplate::auth.layout', ['title' => __('boilerplate::auth.register.title'), 'bodyClass' => 'hold-transition login-page'])
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
@component('boilerplate::auth.loginbox')
|
||||||
|
<p class="login-box-msg">{{ __('boilerplate::auth.register.intro') }}</p>
|
||||||
|
{!! Form::open(['route' => 'boilerplate.register', 'method' => 'post', 'autocomplete'=> 'off']) !!}
|
||||||
|
<div class="form-group {{ $errors->has('first_name') ? 'has-error' : '' }}">
|
||||||
|
{{ Form::text('first_name', old('first_name'), ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.first_name'), 'required', 'autofocus']) }}
|
||||||
|
{!! $errors->first('first_name','<p class="text-danger"><strong>:message</strong></p>') !!}
|
||||||
|
</div>
|
||||||
|
<div class="form-group {{ $errors->has('last_name') ? 'has-error' : '' }}">
|
||||||
|
{{ Form::text('last_name', old('last_name'), ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.last_name'), 'required']) }}
|
||||||
|
{!! $errors->first('last_name','<p class="text-danger"><strong>:message</strong></p>') !!}
|
||||||
|
</div>
|
||||||
|
<div class="form-group {{ $errors->has('email') ? 'has-error' : '' }}">
|
||||||
|
{{ Form::email('email', old('email'), ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.email'), 'required']) }}
|
||||||
|
{!! $errors->first('email','<p class="text-danger"><strong>:message</strong></p>') !!}
|
||||||
|
</div>
|
||||||
|
<div class="form-group {{ $errors->has('password') ? 'has-error' : '' }}">
|
||||||
|
{{ Form::password('password', ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.password'), 'required']) }}
|
||||||
|
{!! $errors->first('password','<p class="text-danger"><strong>:message</strong></p>') !!}
|
||||||
|
</div>
|
||||||
|
<div class="form-group {{ $errors->has('password_confirmation') ? 'has-error' : '' }}">
|
||||||
|
{{ Form::password('password_confirmation', ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.password_confirm'), 'required']) }}
|
||||||
|
{!! $errors->first('password_confirmation','<p class="text-danger"><strong>:message</strong></p>') !!}
|
||||||
|
</div>
|
||||||
|
<div class="row mbm">
|
||||||
|
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 text-center">
|
||||||
|
<button type="submit" class="btn btn-primary">
|
||||||
|
{{ __('boilerplate::auth.register.register_button') }}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{!! Form::close() !!}
|
||||||
|
@if(!$firstUser)
|
||||||
|
<a href="{{ route('boilerplate.login') }}">{{ __('boilerplate::auth.register.login_link') }}</a><br>
|
||||||
|
@endif
|
||||||
|
@endcomponent
|
||||||
|
@endsection
|
||||||
24
resources/views/Shop/auth/verify.blade.php
Normal file
24
resources/views/Shop/auth/verify.blade.php
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
@extends('layouts.app')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="container">
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
<div class="col-md-8">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header">{{ __('Verify Your Email Address') }}</div>
|
||||||
|
|
||||||
|
<div class="card-body">
|
||||||
|
@if (session('resent'))
|
||||||
|
<div class="alert alert-success" role="alert">
|
||||||
|
{{ __('A fresh verification link has been sent to your email address.') }}
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
{{ __('Before proceeding, please check your email for a verification link.') }}
|
||||||
|
{{ __('If you did not receive the email') }}, <a href="{{ route('verification.resend') }}">{{ __('click here to request another') }}</a>.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endsection
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
@if (!empty($text))
|
@if (!empty($text))
|
||||||
<div class="row m-0 mb-3">
|
<div class="row m-0 mb-3">
|
||||||
<div class="col-12 p-3 green-dark bg-yellow rounded drop-shadow" style="font-size: 1.4em;">{!! $text !!}</div>
|
<div class="col-12 p-3 green-dark bg-yellow rounded drop-shadow" style="font-size: 1.2em;">{!! $text !!}</div>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
|
|||||||
@@ -21,9 +21,9 @@
|
|||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body id="index">
|
<body class="bg-green-dark">
|
||||||
|
|
||||||
<div class="wrapper">
|
<div class="container bg-white" style="min-height: 100vh;">
|
||||||
<main>
|
<main>
|
||||||
@include("Shop.layout.partials.header")
|
@include("Shop.layout.partials.header")
|
||||||
<div class="content-wrapper">
|
<div class="content-wrapper">
|
||||||
@@ -58,6 +58,16 @@
|
|||||||
|
|
||||||
@stack('js')
|
@stack('js')
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function refreshBasketTop() {
|
||||||
|
$.get("{{ route('Shop.Basket.getSummary') }}", function(response) {
|
||||||
|
console.log(response);
|
||||||
|
$('#count-basket').html(response.data.quantity);
|
||||||
|
$('#total-basket').html(response.data.total);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
@if ($articles)
|
@if ($articles)
|
||||||
@foreach ($articles as $product_name => $article)
|
@foreach ($articles as $product_name => $article)
|
||||||
<div class="col-sm-3 col-lg-2">
|
<div class="col-3 mb-3">
|
||||||
@include('Shop.Articles.partials.article')
|
@include('Shop.Articles.partials.article')
|
||||||
</div>
|
</div>
|
||||||
@endforeach
|
@endforeach
|
||||||
|
|||||||
@@ -1,15 +1,17 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-6 d-none">
|
<div class="col-12 text-right p-2">
|
||||||
<div id="header-favorite" class="text-light" data-refresh-url="/favorite">
|
|
||||||
<i class="fa fa-3x fa-heart"></i>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-6 text-center">
|
|
||||||
<div id="header-basket" class="text-light mr-3" data-refresh-url="/basket">
|
|
||||||
<a href="{{ route('Shop.Basket.basket') }}" style="color: white;">
|
<a href="{{ route('Shop.Basket.basket') }}" style="color: white;">
|
||||||
<i class="fa fa-3x fa-shopping-basket"></i>
|
<button type="button" class="btn bg-green-dark basket light">
|
||||||
|
<i class="fa fa-2x fa-fw fa-shopping-basket mr-2"></i>
|
||||||
|
<span class="ml-2 badge bg-yellow green-dark">
|
||||||
|
<span id="count-basket">{{ \App\Repositories\Core\User\ShopCart::getTotalQuantity() }}</span>
|
||||||
|
Articles
|
||||||
|
</span>
|
||||||
|
<span class="ml-2 badge bg-yellow green-dark">
|
||||||
|
<span id="total-basket">{{ \App\Repositories\Core\User\ShopCart::getTotal() }}</span>
|
||||||
|
€ TTC
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
@@ -1,19 +1,19 @@
|
|||||||
<div class="row bg-green mr-0">
|
<div class="row bg-green">
|
||||||
|
|
||||||
<div class="col-4 col-md-2 form-inline pl-4">
|
<div class="col-3 form-inline pl-4">
|
||||||
<a href="/"><img src="/img/logo.jpg" class="img-responvive"></a>
|
<a href="/"><img src="/img/logo.jpg" class="img-responvive"></a>
|
||||||
<a id="filters" href="#" class="text-white pl-3"><i class="fa fa-2x fa-bars"></i></a>
|
<a id="filters" href="#" class="text-white pl-3"><i class="fa fa-2x fa-bars"></i></a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-8 col-md-6 form-inline">
|
<div class="col-5 form-inline">
|
||||||
@include("Shop.layout.partials.search")
|
@include("Shop.layout.partials.search")
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-6 col-md-2">
|
<div class="col-1">
|
||||||
@include("Shop.layout.partials.header-profile")
|
@include("Shop.layout.partials.header-profile")
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-6 col-md-2 text-right">
|
<div class="col-3 text-right">
|
||||||
@include("Shop.layout.partials.header-basket")
|
@include("Shop.layout.partials.header-basket")
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
<div class="user-info dropdown js-dropdown">
|
<div class="row">
|
||||||
<span class="account-logo expand-more" data-toggle="dropdown" role="button">Compte client
|
<div class="col-12 text-right p-2">
|
||||||
<i class="material-icons expand-more"></i>
|
<button type="button" class="btn bg-green-dark light" data-toggle="dropdown">
|
||||||
</span>
|
<i class="fa fa-2x fa-fw fa-user mr-2"></i>
|
||||||
|
<span id="username" class="ml-2 badge bg-yellow green-dark"></span>
|
||||||
|
</button>
|
||||||
|
|
||||||
<ul class="dropdown-menu" aria-labelledby="dLabel">
|
<ul class="dropdown-menu" aria-labelledby="dLabel">
|
||||||
<li>
|
<li>
|
||||||
@@ -10,4 +12,6 @@
|
|||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
<div class="row shadow mb-3">
|
||||||
|
<div class="col-8 pl-0">
|
||||||
|
<nav class="navbar navbar-expand-lg navbar-light bg-light ">
|
||||||
<div class="collapse navbar-collapse" id="navbarContent">
|
<div class="collapse navbar-collapse" id="navbarContent">
|
||||||
<ul class="navbar-nav mx-auto">
|
<ul class="navbar-nav">
|
||||||
@foreach ($categories as $category)
|
@foreach ($categories as $category)
|
||||||
<li class="nav-item dropdown megamenu">
|
<li class="nav-item dropdown megamenu">
|
||||||
<a id="megamenu_{{ $category['id'] }}" href="{{ route('Shop.Categories.show', ['id' => $category['id']]) }}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="nav-link dropdown-toggle font-weight-bold text-uppercase">
|
<a id="megamenu_{{ $category['id'] }}" href="{{ route('Shop.Categories.show', ['id' => $category['id']]) }}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="nav-link dropdown-toggle font-weight-bold text-uppercase">
|
||||||
@@ -14,10 +16,12 @@
|
|||||||
</li>
|
</li>
|
||||||
@endforeach
|
@endforeach
|
||||||
</ul>
|
</ul>
|
||||||
|
</div>
|
||||||
<span style="font-family: Arial Narrow; font-size: 1.1em; font-weight: 900;">
|
</nav>
|
||||||
|
</div>
|
||||||
|
<div class="col-4 text-right p-3">
|
||||||
|
<span style="font-size: 1.2em; font-weight: 600;">
|
||||||
Variétés Paysannes de la Semence à l'Assiette
|
Variétés Paysannes de la Semence à l'Assiette
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</div>
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
@section('content')
|
@section('content')
|
||||||
@include('Shop.Tags.partials.filter')
|
@include('Shop.Tags.partials.filter')
|
||||||
|
|
||||||
<div class="row">
|
<div class="row mb-3">
|
||||||
<div class="col-8">
|
<div class="col-8">
|
||||||
<h1 style="font-size: 2em;">{{ $category['name'] }}</h1>
|
<h1 style="font-size: 2em;">{{ $category['name'] }}</h1>
|
||||||
<h3 style="font-size: 1.2em;">{!! $category['description'] !!}</h3>
|
<h3 style="font-size: 1.2em;">{!! $category['description'] !!}</h3>
|
||||||
@@ -14,6 +14,7 @@
|
|||||||
@include('Shop.layout.partials.category_add')
|
@include('Shop.layout.partials.category_add')
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@if ($display_by_rows ?? false)
|
@if ($display_by_rows ?? false)
|
||||||
@include('Shop.layout.partials.category_articles_rows')
|
@include('Shop.layout.partials.category_articles_rows')
|
||||||
@else
|
@else
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ Route::prefix('Basket')->name('Basket.')->group(function () {
|
|||||||
Route::post('addBasket', 'BasketController@addBasket')->name('addBasket');
|
Route::post('addBasket', 'BasketController@addBasket')->name('addBasket');
|
||||||
Route::get('modalBasket/{offer_id?}/{quantity?}', 'BasketController@modalBasket')->name('modalBasket');
|
Route::get('modalBasket/{offer_id?}/{quantity?}', 'BasketController@modalBasket')->name('modalBasket');
|
||||||
Route::get('getBasket', 'BasketController@getBasket')->name('getBasket');
|
Route::get('getBasket', 'BasketController@getBasket')->name('getBasket');
|
||||||
|
Route::get('getSummary', 'BasketController@getSummary')->name('getSummary');
|
||||||
Route::get('countBasket', 'BasketController@countBasket')->name('countBasket');
|
Route::get('countBasket', 'BasketController@countBasket')->name('countBasket');
|
||||||
Route::get('clearBasket', 'BasketController@clearBasket')->name('clearBasket');
|
Route::get('clearBasket', 'BasketController@clearBasket')->name('clearBasket');
|
||||||
Route::get('basket', 'BasketController@basket')->name('basket');
|
Route::get('basket', 'BasketController@basket')->name('basket');
|
||||||
|
|||||||
@@ -1,5 +1,14 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
Route::prefix('Shop')->namespace('Shop')->name('Shop.')->group(function () {
|
||||||
|
Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
|
||||||
|
Route::post('login', 'Auth\LoginController@login')->name('login.post');
|
||||||
|
Route::post('logout', 'Auth\LoginController@logout')->name('logout');
|
||||||
|
Route::get('invite/{token?}/{event_id?}', 'Auth\LoginController@invite')->name('invite');
|
||||||
|
Route::get('password/reset/{token?}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
|
||||||
|
Route::post('password/reset', 'Auth\ResetPasswordController@reset')->name('password.update');
|
||||||
|
});
|
||||||
|
|
||||||
Route::prefix('Shop')->namespace('Shop')->name('Shop.')->group(function () {
|
Route::prefix('Shop')->namespace('Shop')->name('Shop.')->group(function () {
|
||||||
include( __DIR__ . '/Articles.php');
|
include( __DIR__ . '/Articles.php');
|
||||||
include( __DIR__ . '/Baskets.php');
|
include( __DIR__ . '/Baskets.php');
|
||||||
|
|||||||
Reference in New Issue
Block a user