mirror of
https://github.com/brunofontes/shareit.git
synced 2025-04-15 16:40:54 +00:00
Compare commits
No commits in common. "master" and "v0.4" have entirely different histories.
8
.gitignore
vendored
8
.gitignore
vendored
@ -5,8 +5,14 @@
|
|||||||
/vendor
|
/vendor
|
||||||
/.idea
|
/.idea
|
||||||
/.vscode
|
/.vscode
|
||||||
|
/.vagrant
|
||||||
|
Homestead.json
|
||||||
|
Homestead.yaml
|
||||||
npm-debug.log
|
npm-debug.log
|
||||||
yarn-error.log
|
yarn-error.log
|
||||||
.env
|
.env
|
||||||
.phpunit.result.cache
|
.phpunit.result.cache
|
||||||
tags
|
mergeAndDeploy.sh
|
||||||
|
start_vagrant.sh
|
||||||
|
stop_vagrant.sh
|
||||||
|
ssh_homestead.sh
|
@ -1,53 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Events;
|
|
||||||
|
|
||||||
use \App\Item;
|
|
||||||
|
|
||||||
use Illuminate\Broadcasting\Channel;
|
|
||||||
use Illuminate\Broadcasting\InteractsWithSockets;
|
|
||||||
use Illuminate\Broadcasting\PresenceChannel;
|
|
||||||
use Illuminate\Broadcasting\PrivateChannel;
|
|
||||||
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
|
|
||||||
use Illuminate\Contracts\Broadcasting\ShouldBroadcastNow;
|
|
||||||
use Illuminate\Foundation\Events\Dispatchable;
|
|
||||||
use Illuminate\Queue\SerializesModels;
|
|
||||||
|
|
||||||
class RefreshPage implements ShouldBroadcastNow
|
|
||||||
{
|
|
||||||
use Dispatchable, InteractsWithSockets, SerializesModels;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Item
|
|
||||||
*
|
|
||||||
* @var Item
|
|
||||||
*/
|
|
||||||
public $item;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new event instance.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function __construct(Item $item)
|
|
||||||
{
|
|
||||||
$this->item = $item;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the channels the event should broadcast on.
|
|
||||||
*
|
|
||||||
* @return \Illuminate\Broadcasting\Channel|array
|
|
||||||
*/
|
|
||||||
public function broadcastOn()
|
|
||||||
{
|
|
||||||
return ['touchedItem'];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function broadcastAs()
|
|
||||||
{
|
|
||||||
return 'RefreshPage';
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -3,29 +3,22 @@
|
|||||||
namespace App\Events;
|
namespace App\Events;
|
||||||
|
|
||||||
use \App\Item;
|
use \App\Item;
|
||||||
use Illuminate\Broadcasting\InteractsWithSockets;
|
use Illuminate\Broadcasting\Channel;
|
||||||
use Illuminate\Broadcasting\PrivateChannel;
|
|
||||||
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
|
|
||||||
use Illuminate\Foundation\Events\Dispatchable;
|
|
||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
use Illuminate\Broadcasting\PrivateChannel;
|
||||||
|
use Illuminate\Broadcasting\PresenceChannel;
|
||||||
|
use Illuminate\Foundation\Events\Dispatchable;
|
||||||
|
use Illuminate\Broadcasting\InteractsWithSockets;
|
||||||
|
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
|
||||||
|
|
||||||
class ReturnItem
|
class ReturnItem
|
||||||
{
|
{
|
||||||
use Dispatchable, InteractsWithSockets, SerializesModels;
|
use Dispatchable, InteractsWithSockets, SerializesModels;
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Item
|
|
||||||
*
|
|
||||||
* @var Item
|
|
||||||
*/
|
|
||||||
public $item;
|
public $item;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new event instance.
|
* Create a new event instance.
|
||||||
*
|
*
|
||||||
* @param Item $item The returned item.
|
|
||||||
*
|
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function __construct(Item $item)
|
public function __construct(Item $item)
|
||||||
@ -40,11 +33,6 @@ class ReturnItem
|
|||||||
*/
|
*/
|
||||||
public function broadcastOn()
|
public function broadcastOn()
|
||||||
{
|
{
|
||||||
return new PrivateChannel('touchedItem');
|
return new PrivateChannel('channel-name');
|
||||||
}
|
|
||||||
|
|
||||||
public function broadcastAs()
|
|
||||||
{
|
|
||||||
return 'ReturnItem';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,6 @@ namespace App\Exceptions;
|
|||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
|
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
|
||||||
use Throwable;
|
|
||||||
|
|
||||||
class Handler extends ExceptionHandler
|
class Handler extends ExceptionHandler
|
||||||
{
|
{
|
||||||
@ -33,7 +32,7 @@ class Handler extends ExceptionHandler
|
|||||||
* @param \Exception $exception
|
* @param \Exception $exception
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function report(Throwable $exception)
|
public function report(Exception $exception)
|
||||||
{
|
{
|
||||||
parent::report($exception);
|
parent::report($exception);
|
||||||
}
|
}
|
||||||
@ -45,7 +44,7 @@ class Handler extends ExceptionHandler
|
|||||||
* @param \Exception $exception
|
* @param \Exception $exception
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\Response
|
||||||
*/
|
*/
|
||||||
public function render($request, Throwable $exception)
|
public function render($request, Exception $exception)
|
||||||
{
|
{
|
||||||
return parent::render($request, $exception);
|
return parent::render($request, $exception);
|
||||||
}
|
}
|
||||||
|
@ -2,44 +2,23 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use \App\Mail\UserWaiting;
|
|
||||||
use \App\User;
|
|
||||||
use App\FlashMessage;
|
|
||||||
use Auth;
|
use Auth;
|
||||||
|
use \App\User;
|
||||||
|
use \App\Mail\UserWaiting;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Mail;
|
|
||||||
|
|
||||||
class AlertController extends Controller
|
class AlertController extends Controller
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Store the waiting_user_id on db
|
|
||||||
* so the user can be alerted when
|
|
||||||
* the item is free
|
|
||||||
*
|
|
||||||
* @param Request $request Form data
|
|
||||||
*
|
|
||||||
* @return redirect to home
|
|
||||||
*/
|
|
||||||
public function store(Request $request)
|
public function store(Request $request)
|
||||||
{
|
{
|
||||||
$item = User::loggedIn()->items()->find(request('item'));
|
$item = User::loggedIn()->items()->find(request('item'));
|
||||||
if (!$item->used_by) {
|
$item->waiting_user_id = Auth::id();
|
||||||
session()->flash(
|
$item->timestamps = false;
|
||||||
FlashMessage::PRIMARY,
|
$item->save();
|
||||||
__('Oh! This item has just being returned. Take it before anyone else!')
|
|
||||||
);
|
|
||||||
return redirect('home');
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($item->used_by == Auth::id()) {
|
|
||||||
return redirect('home');
|
|
||||||
}
|
|
||||||
|
|
||||||
$item->storeAlert();
|
|
||||||
|
|
||||||
$loggedUser = Auth::user()->name;
|
$loggedUser = Auth::user()->name;
|
||||||
$userWithItem = User::find($item->used_by);
|
$userWithItem = User::find($item->used_by);
|
||||||
Mail::to($userWithItem)
|
\Mail::to($userWithItem)
|
||||||
->locale($userWithItem->language)
|
->locale($userWithItem->language)
|
||||||
->send(new UserWaiting($loggedUser, $userWithItem->name, $item));
|
->send(new UserWaiting($loggedUser, $userWithItem->name, $item));
|
||||||
|
|
||||||
@ -49,12 +28,10 @@ class AlertController extends Controller
|
|||||||
public function delete(Request $request)
|
public function delete(Request $request)
|
||||||
{
|
{
|
||||||
$item = User::loggedIn()->items()->find(request('item'));
|
$item = User::loggedIn()->items()->find(request('item'));
|
||||||
|
$item->waiting_user_id = null;
|
||||||
|
$item->timestamps = false;
|
||||||
|
$item->save();
|
||||||
|
|
||||||
if ($item->waiting_user_id != Auth::id()) {
|
|
||||||
return redirect('home');
|
|
||||||
}
|
|
||||||
|
|
||||||
$item->removeAlert();
|
|
||||||
return redirect('home');
|
return redirect('home');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,14 +2,13 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers\Auth;
|
namespace App\Http\Controllers\Auth;
|
||||||
|
|
||||||
use App\FlashMessage;
|
|
||||||
use App\Http\Controllers\Controller;
|
|
||||||
use App\Mail\Welcome;
|
|
||||||
use App\User;
|
use App\User;
|
||||||
use Illuminate\Foundation\Auth\RegistersUsers;
|
use App\Mail\Welcome;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
use Illuminate\Support\Facades\Hash;
|
use Illuminate\Support\Facades\Hash;
|
||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
use Mail;
|
use Illuminate\Foundation\Auth\RegistersUsers;
|
||||||
|
use App\FlashMessage;
|
||||||
|
|
||||||
class RegisterController extends Controller
|
class RegisterController extends Controller
|
||||||
{
|
{
|
||||||
@ -72,13 +71,7 @@ class RegisterController extends Controller
|
|||||||
'password' => Hash::make($data['password']),
|
'password' => Hash::make($data['password']),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
Mail::to($user)->send(new Welcome($user));
|
\Mail::to($user)->send(new Welcome($user));
|
||||||
|
|
||||||
$text = "Share it! New user: {$user->name} ($user->email)";
|
|
||||||
Mail::raw($text, function ($message) use ($text) {
|
|
||||||
$message->to('brunofontes.shareit@mailnull.com');
|
|
||||||
$message->subject($text);
|
|
||||||
});
|
|
||||||
|
|
||||||
session()->flash(FlashMessage::PRIMARY, __('Thanks for registering. Please, do not forget to validate your e-mail address.'));
|
session()->flash(FlashMessage::PRIMARY, __('Thanks for registering. Please, do not forget to validate your e-mail address.'));
|
||||||
|
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
|
||||||
use Illuminate\Foundation\Bus\DispatchesJobs;
|
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||||
use Illuminate\Foundation\Validation\ValidatesRequests;
|
|
||||||
use Illuminate\Routing\Controller as BaseController;
|
use Illuminate\Routing\Controller as BaseController;
|
||||||
|
use Illuminate\Foundation\Validation\ValidatesRequests;
|
||||||
|
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||||||
|
|
||||||
class Controller extends BaseController
|
class Controller extends BaseController
|
||||||
{
|
{
|
||||||
|
@ -6,8 +6,6 @@ use \App\User;
|
|||||||
|
|
||||||
class HomeController extends Controller
|
class HomeController extends Controller
|
||||||
{
|
{
|
||||||
protected $activeUsers = [];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new controller instance.
|
* Create a new controller instance.
|
||||||
*
|
*
|
||||||
@ -18,50 +16,6 @@ class HomeController extends Controller
|
|||||||
$this->middleware('auth');
|
$this->middleware('auth');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Show the application dashboard.
|
|
||||||
*
|
|
||||||
* @return \Illuminate\Http\Response
|
|
||||||
*/
|
|
||||||
public function index()
|
|
||||||
{
|
|
||||||
$items = User::loggedIn()->items()->with('users')->get();
|
|
||||||
|
|
||||||
$numberOfUsedItems = 0;
|
|
||||||
foreach ($items as $item) {
|
|
||||||
if (isset($item->used_by)) {
|
|
||||||
$numberOfUsedItems++;
|
|
||||||
}
|
|
||||||
$this->getUsername($item->users, $item->used_by);
|
|
||||||
$this->getUsername($item->users, $item->waiting_user_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
$products = $items
|
|
||||||
->sortBy('product.name', SORT_NATURAL | SORT_FLAG_CASE)
|
|
||||||
->groupBy('product.name');
|
|
||||||
|
|
||||||
return view(
|
|
||||||
'home',
|
|
||||||
['products' => $products, 'users' => $this->activeUsers, 'usedItems' => $numberOfUsedItems]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the username from an specified user id.
|
|
||||||
*
|
|
||||||
* @param object $itemUsers Array with IDs and usernames
|
|
||||||
* @param int $id The user id to search for
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
protected function getUsername(\Illuminate\Database\Eloquent\Collection $itemUsers, ?int $id)
|
|
||||||
{
|
|
||||||
if ($id && !isset($this->activeUsers[$id])) {
|
|
||||||
$this->activeUsers[$id] = $this->findName($itemUsers, $id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a name from a specific id in a array
|
* Get a name from a specific id in a array
|
||||||
*
|
*
|
||||||
@ -78,4 +32,41 @@ class HomeController extends Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the user_id alreay exists on $users array.
|
||||||
|
*
|
||||||
|
* @param array $users The array with users
|
||||||
|
* @param int $user_id The user_id to try to find on array
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public function isNewUser($users, $user_id)
|
||||||
|
{
|
||||||
|
return ($user_id && !isset($users[$user_id]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the application dashboard.
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$users = [];
|
||||||
|
$items = User::loggedIn()->items()->with('users')->get();
|
||||||
|
|
||||||
|
foreach ($items as $item) {
|
||||||
|
if ($this->isNewUser($users, $item->used_by)) {
|
||||||
|
$users[$item->used_by] = $this->findName($item->users, $item->used_by);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->isNewUser($users, $item->waiting_user_id)) {
|
||||||
|
$users[$item->waiting_user_id] = $this->findName($item->users, $item->waiting_user_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$products = $items->sortBy('product.name', SORT_NATURAL | SORT_FLAG_CASE)->groupBy('product.name');
|
||||||
|
return view('home', compact('products', 'users'));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,8 +4,8 @@ namespace App\Http\Controllers;
|
|||||||
|
|
||||||
use \App\Item;
|
use \App\Item;
|
||||||
use \App\User;
|
use \App\User;
|
||||||
use App\FlashMessage as flash;
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use App\FlashMessage as flash;
|
||||||
|
|
||||||
class ItemController extends Controller
|
class ItemController extends Controller
|
||||||
{
|
{
|
||||||
@ -13,8 +13,7 @@ class ItemController extends Controller
|
|||||||
{
|
{
|
||||||
$item = Item::find($id);
|
$item = Item::find($id);
|
||||||
if (!$item || $item->product->user_id != \Auth::id()) {
|
if (!$item || $item->product->user_id != \Auth::id()) {
|
||||||
session()->flash(
|
session()->flash(flash::DANGER,
|
||||||
flash::DANGER,
|
|
||||||
\Lang::getFromJson(
|
\Lang::getFromJson(
|
||||||
"The item doesn't exist."
|
"The item doesn't exist."
|
||||||
)
|
)
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App;
|
use App;
|
||||||
|
use Lang;
|
||||||
use App\User;
|
use App\User;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use \App\Item;
|
use \App\Item;
|
||||||
use \App\Product;
|
|
||||||
use \App\User;
|
use \App\User;
|
||||||
use App\FlashMessage as flash;
|
use \App\Product;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use App\FlashMessage as flash;
|
||||||
|
|
||||||
class ProductController extends Controller
|
class ProductController extends Controller
|
||||||
{
|
{
|
||||||
|
@ -2,63 +2,33 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Events\RefreshPage;
|
use \App\Item;
|
||||||
use App\Events\ReturnItem;
|
use \App\User;
|
||||||
use App\Item;
|
|
||||||
use App\User;
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Lang;
|
use App\Events\ReturnItem;
|
||||||
|
|
||||||
/**
|
|
||||||
* Responsible to Take and Return an Item.
|
|
||||||
*/
|
|
||||||
class TakeController extends Controller
|
class TakeController extends Controller
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* The user take an item
|
|
||||||
*
|
|
||||||
* @param Request $request The form data
|
|
||||||
*
|
|
||||||
* @return home view
|
|
||||||
*/
|
|
||||||
public function store(Request $request)
|
public function store(Request $request)
|
||||||
{
|
{
|
||||||
$item = User::loggedIn()->items()->find(request('item'));
|
$item = User::loggedIn()->items()->find(request('item'));
|
||||||
|
if ($item->used_by) {
|
||||||
try {
|
|
||||||
$item->takeItem();
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
return back()->withErrors(
|
return back()->withErrors(
|
||||||
Lang::getFromJson('This item is already taken')
|
\Lang::getFromJson(
|
||||||
|
"This item is already taken"
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
$item->used_by = \Auth::id();
|
||||||
RefreshPage::dispatch($item);
|
$item->save();
|
||||||
return redirect('home');
|
return redirect('home');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* User return an item
|
|
||||||
* Trigger an event: ReturnItem
|
|
||||||
*
|
|
||||||
* @param Request $request Form data
|
|
||||||
*
|
|
||||||
* @return View home
|
|
||||||
*/
|
|
||||||
public function delete(Request $request)
|
public function delete(Request $request)
|
||||||
{
|
{
|
||||||
$item = User::loggedIn()->items()->find(request('item'));
|
$item = User::loggedIn()->items()->find(request('item'));
|
||||||
|
event(new ReturnItem($item));
|
||||||
try {
|
$item->returnItem();
|
||||||
$item->returnItem();
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
return back()->withErrors(
|
|
||||||
Lang::getFromJson("You cannot return an item that is not with you")
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
RefreshPage::dispatch($item);
|
|
||||||
ReturnItem::dispatch($item);
|
|
||||||
return redirect('home');
|
return redirect('home');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use \App\Item;
|
|
||||||
use \App\User;
|
use \App\User;
|
||||||
use \Lang;
|
use \App\Item;
|
||||||
|
use \App\Product;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
class UserController extends Controller
|
class UserController extends Controller
|
||||||
@ -43,7 +43,7 @@ class UserController extends Controller
|
|||||||
|
|
||||||
if (count($userArray) == 0) {
|
if (count($userArray) == 0) {
|
||||||
return back()->withErrors(
|
return back()->withErrors(
|
||||||
Lang::getFromJson("The e-mail address is not registered yet.")
|
\Lang::getFromJson("The e-mail address is not registered yet.")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ class UserController extends Controller
|
|||||||
->syncWithoutDetaching([request('item_id')]);
|
->syncWithoutDetaching([request('item_id')]);
|
||||||
} else {
|
} else {
|
||||||
return back()->withErrors(
|
return back()->withErrors(
|
||||||
Lang::getFromJson(
|
\Lang::getFromJson(
|
||||||
"You cannot add a user to a product that is not yourse."
|
"You cannot add a user to a product that is not yourse."
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
@ -85,7 +85,7 @@ class UserController extends Controller
|
|||||||
->detach([request('item_id')]);
|
->detach([request('item_id')]);
|
||||||
} else {
|
} else {
|
||||||
return back()->withErrors(
|
return back()->withErrors(
|
||||||
Lang::getFromJson(
|
\Lang::getFromJson(
|
||||||
"You cannot remove a user from a product that is not yourse."
|
"You cannot remove a user from a product that is not yourse."
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -51,7 +51,7 @@ class Kernel extends HttpKernel
|
|||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $middlewareAliases = [
|
protected $routeMiddleware = [
|
||||||
'auth' => \App\Http\Middleware\Authenticate::class,
|
'auth' => \App\Http\Middleware\Authenticate::class,
|
||||||
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
|
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
|
||||||
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
|
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
namespace App\Http\Middleware;
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
use Illuminate\Http\Middleware\TrustProxies as Middleware;
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Fideloper\Proxy\TrustProxies as Middleware;
|
||||||
|
|
||||||
class TrustProxies extends Middleware
|
class TrustProxies extends Middleware
|
||||||
{
|
{
|
||||||
@ -19,10 +19,5 @@ class TrustProxies extends Middleware
|
|||||||
*
|
*
|
||||||
* @var int
|
* @var int
|
||||||
*/
|
*/
|
||||||
protected $headers =
|
protected $headers = Request::HEADER_X_FORWARDED_ALL;
|
||||||
Request::HEADER_X_FORWARDED_FOR |
|
|
||||||
Request::HEADER_X_FORWARDED_HOST |
|
|
||||||
Request::HEADER_X_FORWARDED_PORT |
|
|
||||||
Request::HEADER_X_FORWARDED_PROTO |
|
|
||||||
Request::HEADER_X_FORWARDED_AWS_ELB;
|
|
||||||
}
|
}
|
||||||
|
47
app/Item.php
47
app/Item.php
@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
namespace App;
|
namespace App;
|
||||||
|
|
||||||
use Auth;
|
|
||||||
use Exception;
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class Item extends Model
|
class Item extends Model
|
||||||
@ -38,23 +36,7 @@ class Item extends Model
|
|||||||
*/
|
*/
|
||||||
public static function fromAuthUser()
|
public static function fromAuthUser()
|
||||||
{
|
{
|
||||||
return (new static)->where('user_id', Auth::id());
|
return (new static)->where('user_id', \Auth::id());
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Take a specified item
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function takeItem()
|
|
||||||
{
|
|
||||||
if (isset($this->used_by)) {
|
|
||||||
throw new Exception("Trying to take an Item that is in use", 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->used_by = Auth::id();
|
|
||||||
$this->waiting_user_id = null;
|
|
||||||
$this->save();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -64,35 +46,8 @@ class Item extends Model
|
|||||||
*/
|
*/
|
||||||
public function returnItem()
|
public function returnItem()
|
||||||
{
|
{
|
||||||
if ($this->used_by != Auth::id()) {
|
|
||||||
throw new Exception("Trying to return an empty Item or from other user", 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->used_by = null;
|
$this->used_by = null;
|
||||||
$this->save();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Store a waiting user to the item
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function storeAlert()
|
|
||||||
{
|
|
||||||
$this->waiting_user_id = Auth::id();
|
|
||||||
$this->timestamps = false;
|
|
||||||
$this->save();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove a waiting user to the item
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function removeAlert()
|
|
||||||
{
|
|
||||||
$this->waiting_user_id = null;
|
$this->waiting_user_id = null;
|
||||||
$this->timestamps = false;
|
|
||||||
$this->save();
|
$this->save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,10 +2,12 @@
|
|||||||
|
|
||||||
namespace App\Listeners;
|
namespace App\Listeners;
|
||||||
|
|
||||||
|
use Mail;
|
||||||
|
use App\User;
|
||||||
use App\Events\ReturnItem;
|
use App\Events\ReturnItem;
|
||||||
use App\Mail\ItemAvailable;
|
use App\Mail\ItemAvailable;
|
||||||
use App\User;
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
use Mail;
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
|
||||||
class AlertReturnedItem
|
class AlertReturnedItem
|
||||||
{
|
{
|
||||||
@ -23,8 +25,7 @@ class AlertReturnedItem
|
|||||||
* Send an email to the user that
|
* Send an email to the user that
|
||||||
* is waiting for the item
|
* is waiting for the item
|
||||||
*
|
*
|
||||||
* @param ReturnItem $event The return event that contains an item
|
* @param ReturnItem $item
|
||||||
*
|
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function handle(ReturnItem $event)
|
public function handle(ReturnItem $event)
|
||||||
|
@ -3,8 +3,10 @@
|
|||||||
namespace App\Listeners;
|
namespace App\Listeners;
|
||||||
|
|
||||||
use App\User;
|
use App\User;
|
||||||
use Illuminate\Auth\Events\Login;
|
|
||||||
use IlluminateAuthEventsLogin;
|
use IlluminateAuthEventsLogin;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Auth\Events\Login;
|
||||||
|
|
||||||
class SetLanguage
|
class SetLanguage
|
||||||
{
|
{
|
||||||
|
@ -6,6 +6,7 @@ use \App\Item;
|
|||||||
use Illuminate\Bus\Queueable;
|
use Illuminate\Bus\Queueable;
|
||||||
use Illuminate\Mail\Mailable;
|
use Illuminate\Mail\Mailable;
|
||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
|
||||||
class ItemAvailable extends Mailable
|
class ItemAvailable extends Mailable
|
||||||
{
|
{
|
||||||
@ -32,7 +33,7 @@ class ItemAvailable extends Mailable
|
|||||||
public function build()
|
public function build()
|
||||||
{
|
{
|
||||||
return $this->subject(
|
return $this->subject(
|
||||||
\Lang::get(
|
\Lang::getFromJson(
|
||||||
':itemname is available!',
|
':itemname is available!',
|
||||||
['itemname' => $this->item->name]
|
['itemname' => $this->item->name]
|
||||||
)
|
)
|
||||||
|
@ -2,11 +2,12 @@
|
|||||||
|
|
||||||
namespace App\Mail;
|
namespace App\Mail;
|
||||||
|
|
||||||
|
use Lang;
|
||||||
use \App\Item;
|
use \App\Item;
|
||||||
use Illuminate\Bus\Queueable;
|
use Illuminate\Bus\Queueable;
|
||||||
use Illuminate\Mail\Mailable;
|
use Illuminate\Mail\Mailable;
|
||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
use Lang;
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
|
||||||
class UserWaiting extends Mailable
|
class UserWaiting extends Mailable
|
||||||
{
|
{
|
||||||
@ -35,7 +36,7 @@ class UserWaiting extends Mailable
|
|||||||
public function build()
|
public function build()
|
||||||
{
|
{
|
||||||
return $this->subject(
|
return $this->subject(
|
||||||
Lang::get(
|
Lang::getFromJson(
|
||||||
':waitinguser wants to use :itemname',
|
':waitinguser wants to use :itemname',
|
||||||
[
|
[
|
||||||
'waitinguser' => $this->waitingUser,
|
'waitinguser' => $this->waitingUser,
|
||||||
|
@ -2,11 +2,12 @@
|
|||||||
|
|
||||||
namespace App\Mail;
|
namespace App\Mail;
|
||||||
|
|
||||||
use \App\User;
|
|
||||||
use \Lang;
|
use \Lang;
|
||||||
|
use \App\User;
|
||||||
use Illuminate\Bus\Queueable;
|
use Illuminate\Bus\Queueable;
|
||||||
use Illuminate\Mail\Mailable;
|
use Illuminate\Mail\Mailable;
|
||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
|
||||||
class Welcome extends Mailable
|
class Welcome extends Mailable
|
||||||
{
|
{
|
||||||
@ -30,6 +31,6 @@ class Welcome extends Mailable
|
|||||||
*/
|
*/
|
||||||
public function build()
|
public function build()
|
||||||
{
|
{
|
||||||
return $this->subject(Lang::get('Welcome'))->markdown('emails.welcome');
|
return $this->subject(Lang::getFromJson('Welcome'))->markdown('emails.welcome');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
use Illuminate\Support\Facades\Schema;
|
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
class AppServiceProvider extends ServiceProvider
|
class AppServiceProvider extends ServiceProvider
|
||||||
{
|
{
|
||||||
@ -14,7 +14,7 @@ class AppServiceProvider extends ServiceProvider
|
|||||||
*/
|
*/
|
||||||
public function boot()
|
public function boot()
|
||||||
{
|
{
|
||||||
Schema::defaultStringLength(191); //Solved by increasing StringLength
|
Schema::defaultStringLength(191); //Solved by increasing StringLength
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
|
use Illuminate\Support\Facades\Gate;
|
||||||
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
|
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
|
||||||
|
|
||||||
class AuthServiceProvider extends ServiceProvider
|
class AuthServiceProvider extends ServiceProvider
|
||||||
@ -22,6 +23,7 @@ class AuthServiceProvider extends ServiceProvider
|
|||||||
*/
|
*/
|
||||||
public function boot()
|
public function boot()
|
||||||
{
|
{
|
||||||
|
$this->registerPolicies();
|
||||||
|
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
use Illuminate\Support\Facades\Broadcast;
|
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
use Illuminate\Support\Facades\Broadcast;
|
||||||
|
|
||||||
class BroadcastServiceProvider extends ServiceProvider
|
class BroadcastServiceProvider extends ServiceProvider
|
||||||
{
|
{
|
||||||
|
@ -3,12 +3,12 @@
|
|||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
use App\Events\ReturnItem;
|
use App\Events\ReturnItem;
|
||||||
use App\Listeners\AlertReturnedItem;
|
|
||||||
use App\Listeners\SetLanguage;
|
use App\Listeners\SetLanguage;
|
||||||
|
use App\Listeners\AlertReturnedItem;
|
||||||
|
use Illuminate\Support\Facades\Event;
|
||||||
use Illuminate\Auth\Events\Registered;
|
use Illuminate\Auth\Events\Registered;
|
||||||
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
|
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
|
||||||
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
||||||
use Illuminate\Support\Facades\Event;
|
|
||||||
|
|
||||||
class EventServiceProvider extends ServiceProvider
|
class EventServiceProvider extends ServiceProvider
|
||||||
{
|
{
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
|
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
|
||||||
|
|
||||||
class RouteServiceProvider extends ServiceProvider
|
class RouteServiceProvider extends ServiceProvider
|
||||||
{
|
{
|
||||||
|
@ -3,9 +3,10 @@
|
|||||||
namespace App;
|
namespace App;
|
||||||
|
|
||||||
use Auth;
|
use Auth;
|
||||||
|
use Illuminate\Notifications\Notifiable;
|
||||||
use Illuminate\Contracts\Auth\MustVerifyEmail;
|
use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||||
use Illuminate\Notifications\Notifiable;
|
use Illuminate\Support\Facades\Request;
|
||||||
|
|
||||||
class User extends Authenticatable implements MustVerifyEmail
|
class User extends Authenticatable implements MustVerifyEmail
|
||||||
{
|
{
|
||||||
|
2
check.sh
2
check.sh
@ -1,2 +0,0 @@
|
|||||||
./vendor/bin/phpstan analyse --memory-limit=2G
|
|
||||||
php artisan insights
|
|
@ -5,24 +5,18 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"type": "project",
|
"type": "project",
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^8.0.2",
|
"php": "^7.1.3",
|
||||||
"inertiajs/inertia-laravel": "^0.6.11",
|
"fideloper/proxy": "^4.0",
|
||||||
"laravel/framework": "^10.0",
|
"laravel/framework": "5.7.*",
|
||||||
"laravel/ui": "^4.0",
|
"laravel/tinker": "^1.0"
|
||||||
"laravel/helpers": "^1.4",
|
|
||||||
"laravel/tinker": "^2.4.1",
|
|
||||||
"pusher/pusher-php-server": "^7.2"
|
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"beyondcode/laravel-dump-server": "^1.0",
|
"beyondcode/laravel-dump-server": "^1.0",
|
||||||
"filp/whoops": "^2.0",
|
"filp/whoops": "^2.0",
|
||||||
"fzaninotto/faker": "^1.4",
|
"fzaninotto/faker": "^1.4",
|
||||||
"mockery/mockery": "^1.0",
|
"mockery/mockery": "^1.0",
|
||||||
"nunomaduro/collision": "^7.0",
|
"nunomaduro/collision": "^2.0",
|
||||||
"nunomaduro/larastan": "^2.9.5",
|
"phpunit/phpunit": "^7.0"
|
||||||
"nunomaduro/phpinsights": "*",
|
|
||||||
"phpstan/phpstan": "^1.10.66",
|
|
||||||
"phpunit/phpunit": "^10.0"
|
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"classmap": [
|
"classmap": [
|
||||||
@ -59,11 +53,8 @@
|
|||||||
"config": {
|
"config": {
|
||||||
"preferred-install": "dist",
|
"preferred-install": "dist",
|
||||||
"sort-packages": true,
|
"sort-packages": true,
|
||||||
"optimize-autoloader": true,
|
"optimize-autoloader": true
|
||||||
"allow-plugins": {
|
|
||||||
"dealerdirect/phpcodesniffer-composer-installer": true
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"minimum-stability": "stable",
|
"minimum-stability": "dev",
|
||||||
"prefer-stable": true
|
"prefer-stable": true
|
||||||
}
|
}
|
||||||
|
9490
composer.lock
generated
9490
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@ -156,7 +156,7 @@ return [
|
|||||||
*/
|
*/
|
||||||
App\Providers\AppServiceProvider::class,
|
App\Providers\AppServiceProvider::class,
|
||||||
App\Providers\AuthServiceProvider::class,
|
App\Providers\AuthServiceProvider::class,
|
||||||
App\Providers\BroadcastServiceProvider::class,
|
// App\Providers\BroadcastServiceProvider::class,
|
||||||
App\Providers\EventServiceProvider::class,
|
App\Providers\EventServiceProvider::class,
|
||||||
App\Providers\RouteServiceProvider::class,
|
App\Providers\RouteServiceProvider::class,
|
||||||
|
|
||||||
|
@ -1,113 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
use NunoMaduro\PhpInsights\Domain\Insights\ForbiddenDefineFunctions;
|
|
||||||
use NunoMaduro\PhpInsights\Domain\Insights\ForbiddenFinalClasses;
|
|
||||||
use NunoMaduro\PhpInsights\Domain\Insights\ForbiddenNormalClasses;
|
|
||||||
use NunoMaduro\PhpInsights\Domain\Insights\ForbiddenPrivateMethods;
|
|
||||||
use NunoMaduro\PhpInsights\Domain\Insights\ForbiddenTraits;
|
|
||||||
use NunoMaduro\PhpInsights\Domain\Metrics\Architecture\Classes;
|
|
||||||
use SlevomatCodingStandard\Sniffs\Commenting\UselessFunctionDocCommentSniff;
|
|
||||||
use SlevomatCodingStandard\Sniffs\Namespaces\AlphabeticallySortedUsesSniff;
|
|
||||||
use SlevomatCodingStandard\Sniffs\TypeHints\DeclareStrictTypesSniff;
|
|
||||||
use SlevomatCodingStandard\Sniffs\TypeHints\DisallowMixedTypeHintSniff;
|
|
||||||
use SlevomatCodingStandard\Sniffs\TypeHints\ParameterTypeHintSniff;
|
|
||||||
use SlevomatCodingStandard\Sniffs\TypeHints\PropertyTypeHintSniff;
|
|
||||||
use SlevomatCodingStandard\Sniffs\TypeHints\ReturnTypeHintSniff;
|
|
||||||
|
|
||||||
return [
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Default Preset
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| This option controls the default preset that will be used by PHP Insights
|
|
||||||
| to make your code reliable, simple, and clean. However, you can always
|
|
||||||
| adjust the `Metrics` and `Insights` below in this configuration file.
|
|
||||||
|
|
|
||||||
| Supported: "default", "laravel", "symfony", "magento2", "drupal"
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'preset' => 'laravel',
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| IDE
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| This options allow to add hyperlinks in your terminal to quickly open
|
|
||||||
| files in your favorite IDE while browsing your PhpInsights report.
|
|
||||||
|
|
|
||||||
| Supported: "textmate", "macvim", "emacs", "sublime", "phpstorm",
|
|
||||||
| "atom", "vscode".
|
|
||||||
|
|
|
||||||
| If you have another IDE that is not in this list but which provide an
|
|
||||||
| url-handler, you could fill this config with a pattern like this:
|
|
||||||
|
|
|
||||||
| myide://open?url=file://%f&line=%l
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'ide' => null,
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Configuration
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| Here you may adjust all the various `Insights` that will be used by PHP
|
|
||||||
| Insights. You can either add, remove or configure `Insights`. Keep in
|
|
||||||
| mind that all added `Insights` must belong to a specific `Metric`.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'exclude' => [
|
|
||||||
// 'path/to/directory-or-file'
|
|
||||||
],
|
|
||||||
|
|
||||||
'add' => [
|
|
||||||
Classes::class => [
|
|
||||||
ForbiddenFinalClasses::class,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
|
|
||||||
'remove' => [
|
|
||||||
AlphabeticallySortedUsesSniff::class,
|
|
||||||
DeclareStrictTypesSniff::class,
|
|
||||||
DisallowMixedTypeHintSniff::class,
|
|
||||||
ForbiddenDefineFunctions::class,
|
|
||||||
ForbiddenNormalClasses::class,
|
|
||||||
ForbiddenTraits::class,
|
|
||||||
ParameterTypeHintSniff::class,
|
|
||||||
PropertyTypeHintSniff::class,
|
|
||||||
ReturnTypeHintSniff::class,
|
|
||||||
UselessFunctionDocCommentSniff::class,
|
|
||||||
],
|
|
||||||
|
|
||||||
'config' => [
|
|
||||||
ForbiddenPrivateMethods::class => [
|
|
||||||
'title' => 'The usage of private methods is not idiomatic in Laravel.',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Requirements
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| Here you may define a level you want to reach per `Insights` category.
|
|
||||||
| When a score is lower than the minimum level defined, then an error
|
|
||||||
| code will be returned. This is optional and individually defined.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'requirements' => [
|
|
||||||
// 'min-quality' => 0,
|
|
||||||
// 'min-complexity' => 0,
|
|
||||||
// 'min-architecture' => 0,
|
|
||||||
// 'min-style' => 0,
|
|
||||||
// 'disable-security-check' => false,
|
|
||||||
],
|
|
||||||
|
|
||||||
];
|
|
@ -164,7 +164,7 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'secure' => env('SESSION_SECURE_COOKIE', null),
|
'secure' => env('SESSION_SECURE_COOKIE', false),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
|
||||||
class CreateUsersTable extends Migration
|
class CreateUsersTable extends Migration
|
||||||
{
|
{
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
|
||||||
class CreatePasswordResetsTable extends Migration
|
class CreatePasswordResetsTable extends Migration
|
||||||
{
|
{
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
|
||||||
class CreateProductsTable extends Migration
|
class CreateProductsTable extends Migration
|
||||||
{
|
{
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
|
||||||
class CreateItemsTable extends Migration
|
class CreateItemsTable extends Migration
|
||||||
{
|
{
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
|
||||||
class AddLocationToUsers extends Migration
|
class AddLocationToUsers extends Migration
|
||||||
{
|
{
|
||||||
|
@ -1,36 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
|
||||||
use Illuminate\Support\Facades\Schema;
|
|
||||||
|
|
||||||
return new class extends Migration
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Run the migrations.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function up()
|
|
||||||
{
|
|
||||||
Schema::create('jobs', function (Blueprint $table) {
|
|
||||||
$table->bigIncrements('id');
|
|
||||||
$table->string('queue')->index();
|
|
||||||
$table->longText('payload');
|
|
||||||
$table->unsignedTinyInteger('attempts');
|
|
||||||
$table->unsignedInteger('reserved_at')->nullable();
|
|
||||||
$table->unsignedInteger('available_at');
|
|
||||||
$table->unsignedInteger('created_at');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reverse the migrations.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function down()
|
|
||||||
{
|
|
||||||
Schema::dropIfExists('jobs');
|
|
||||||
}
|
|
||||||
};
|
|
@ -1,7 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Database\Seeders;
|
|
||||||
|
|
||||||
use Illuminate\Database\Seeder;
|
use Illuminate\Database\Seeder;
|
||||||
|
|
||||||
class DatabaseSeeder extends Seeder
|
class DatabaseSeeder extends Seeder
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
git checkout production && git merge master && git checkout - && git push origin production && ssh -A contabo -t "cd /var/www/shareit.brunofontes.net; git fetch --all; git checkout --force production; git pull origin production --force; ~/composer.phar install -n --optimize-autoloader --no-dev; npm install"
|
|
@ -1,15 +0,0 @@
|
|||||||
<?php
|
|
||||||
return [
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Authentication Language Lines
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| The following language lines are used during authentication for various
|
|
||||||
| messages that we need to display to the user. You are free to modify
|
|
||||||
| these language lines according to your application's requirements.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
'failed' => 'These credentials do not match our records.',
|
|
||||||
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
|
|
||||||
];
|
|
34
package.json
34
package.json
@ -1,26 +1,22 @@
|
|||||||
{
|
{
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "npm run development",
|
||||||
"build": "vite build"
|
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
|
||||||
|
"watch": "npm run development -- --watch",
|
||||||
|
"watch-poll": "npm run watch -- --watch-poll",
|
||||||
|
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
|
||||||
|
"prod": "npm run production",
|
||||||
|
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"axios": "^1.1.3",
|
"axios": "^0.18",
|
||||||
"bootstrap": "^4.6.0",
|
"bootstrap": "^4.0.0",
|
||||||
"cross-env": "^5.2.1",
|
"cross-env": "^5.1",
|
||||||
"jquery": "^3.5.1",
|
"jquery": "^3.2",
|
||||||
"laravel-echo": "^1.14.1",
|
"laravel-mix": "^2.0",
|
||||||
"laravel-vite-plugin": "^0.7.0",
|
"lodash": "^4.17.5",
|
||||||
"lodash": "^4.17.21",
|
"popper.js": "^1.12",
|
||||||
"popper.js": "^1.16.1",
|
"vue": "^2.5.7"
|
||||||
"postcss": "^8.4.19",
|
|
||||||
"pusher-js": "^7.4.1",
|
|
||||||
"resolve-url-loader": "^3.1.3",
|
|
||||||
"sass": "^1.56.1",
|
|
||||||
"sass-loader": "^8.0.2",
|
|
||||||
"vite": "^3.2.3"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"moment": "^2.29.4"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
17
phpstan.neon
17
phpstan.neon
@ -1,17 +0,0 @@
|
|||||||
includes:
|
|
||||||
- ./vendor/nunomaduro/larastan/extension.neon
|
|
||||||
|
|
||||||
parameters:
|
|
||||||
paths:
|
|
||||||
- app
|
|
||||||
|
|
||||||
# The level 8 is the highest level
|
|
||||||
level: 5
|
|
||||||
|
|
||||||
ignoreErrors:
|
|
||||||
- '#Unsafe usage of new static#'
|
|
||||||
|
|
||||||
excludePaths:
|
|
||||||
- ./*/*/FileToBeExcluded.php
|
|
||||||
|
|
||||||
checkMissingIterableValueType: false
|
|
48
public/build/assets/app.4993c47e.js
vendored
48
public/build/assets/app.4993c47e.js
vendored
File diff suppressed because one or more lines are too long
1
public/build/assets/pusher.a7756fcc.js
vendored
1
public/build/assets/pusher.a7756fcc.js
vendored
@ -1 +0,0 @@
|
|||||||
import"https://js.pusher.com/7.2/pusher.min.js";var n=new Pusher("93b3e504421787295454",{cluster:"us2"}),o=n.subscribe("touchedItem");o.bind("RefreshPage",function(e){window.location.reload(),console.log(JSON.stringify(e))});
|
|
@ -1,12 +0,0 @@
|
|||||||
{
|
|
||||||
"resources/js/app.js": {
|
|
||||||
"file": "assets/app.4993c47e.js",
|
|
||||||
"src": "resources/js/app.js",
|
|
||||||
"isEntry": true
|
|
||||||
},
|
|
||||||
"resources/js/pusher.js": {
|
|
||||||
"file": "assets/pusher.a7756fcc.js",
|
|
||||||
"src": "resources/js/pusher.js",
|
|
||||||
"isEntry": true
|
|
||||||
}
|
|
||||||
}
|
|
9254
public/css/app.css
vendored
9254
public/css/app.css
vendored
File diff suppressed because one or more lines are too long
Binary file not shown.
Before Width: | Height: | Size: 2.2 KiB |
46233
public/js/app.js
vendored
46233
public/js/app.js
vendored
File diff suppressed because one or more lines are too long
@ -1,77 +0,0 @@
|
|||||||
/*!
|
|
||||||
* Bootstrap v4.5.2 (https://getbootstrap.com/)
|
|
||||||
* Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* Determine if an object is a Buffer
|
|
||||||
*
|
|
||||||
* @author Feross Aboukhadijeh <https://feross.org>
|
|
||||||
* @license MIT
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* Sizzle CSS Selector Engine v2.3.5
|
|
||||||
* https://sizzlejs.com/
|
|
||||||
*
|
|
||||||
* Copyright JS Foundation and other contributors
|
|
||||||
* Released under the MIT license
|
|
||||||
* https://js.foundation/
|
|
||||||
*
|
|
||||||
* Date: 2020-03-14
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* Vue.js v2.6.12
|
|
||||||
* (c) 2014-2020 Evan You
|
|
||||||
* Released under the MIT License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* jQuery JavaScript Library v3.5.1
|
|
||||||
* https://jquery.com/
|
|
||||||
*
|
|
||||||
* Includes Sizzle.js
|
|
||||||
* https://sizzlejs.com/
|
|
||||||
*
|
|
||||||
* Copyright JS Foundation and other contributors
|
|
||||||
* Released under the MIT license
|
|
||||||
* https://jquery.org/license
|
|
||||||
*
|
|
||||||
* Date: 2020-05-04T22:49Z
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @license
|
|
||||||
* Lodash <https://lodash.com/>
|
|
||||||
* Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
|
|
||||||
* Released under MIT license <https://lodash.com/license>
|
|
||||||
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
|
|
||||||
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**!
|
|
||||||
* @fileOverview Kickass library to create and place poppers near their reference elements.
|
|
||||||
* @version 1.16.1
|
|
||||||
* @license
|
|
||||||
* Copyright (c) 2016 Federico Zivolo and contributors
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
* SOFTWARE.
|
|
||||||
*/
|
|
@ -1 +0,0 @@
|
|||||||
{}
|
|
62
resources/js/app.js
vendored
62
resources/js/app.js
vendored
@ -5,10 +5,9 @@
|
|||||||
* building robust, powerful web applications using Vue and Laravel.
|
* building robust, powerful web applications using Vue and Laravel.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import './bootstrap';
|
require('./bootstrap');
|
||||||
import moment from "moment";
|
|
||||||
|
|
||||||
// window.Vue = require('vue');
|
window.Vue = require('vue');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Next, we will create a fresh Vue application instance and attach it to
|
* Next, we will create a fresh Vue application instance and attach it to
|
||||||
@ -16,59 +15,8 @@ import moment from "moment";
|
|||||||
* or customize the JavaScript scaffolding to fit your unique needs.
|
* or customize the JavaScript scaffolding to fit your unique needs.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Vue.component('example-component', require('./components/ExampleComponent.vue'));
|
Vue.component('example-component', require('./components/ExampleComponent.vue'));
|
||||||
|
|
||||||
// const app = new Vue({
|
const app = new Vue({
|
||||||
// el: '#app'
|
el: '#app'
|
||||||
// });
|
|
||||||
|
|
||||||
function updateTime() {
|
|
||||||
var dates = document.getElementsByClassName("takenItemDate");
|
|
||||||
for (let i = 0; i < dates.length; i++) {
|
|
||||||
let time = dates.item(i).innerText;
|
|
||||||
let fromNow = moment(time).fromNow();
|
|
||||||
let id = "itemPassedTime_" + dates.item(i).id;
|
|
||||||
document.getElementById(id).innerText = fromNow;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
updateTime();
|
|
||||||
setInterval(updateTime, 1 * 60 * 1000);
|
|
||||||
|
|
||||||
|
|
||||||
function setFaviconNumber(number) {
|
|
||||||
var canvas = document.createElement('canvas'),
|
|
||||||
ctx,
|
|
||||||
img = document.createElement('img'),
|
|
||||||
link = document.getElementById('favicon').cloneNode(true);
|
|
||||||
|
|
||||||
if (canvas.getContext) {
|
|
||||||
canvas.height = canvas.width = 48; // set the size
|
|
||||||
ctx = canvas.getContext('2d');
|
|
||||||
img.onload = function () { // once the image has loaded
|
|
||||||
ctx.drawImage(this, 0, 0);
|
|
||||||
ctx.font = 'bold 35px "helvetica", sans-serif';
|
|
||||||
ctx.fillStyle = '#ffff66';
|
|
||||||
ctx.fillText(number, 3, 25);
|
|
||||||
link.href = canvas.toDataURL('image/png');
|
|
||||||
document.body.appendChild(link);
|
|
||||||
};
|
|
||||||
img.src = 'favicon.png';
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
usedItems = document.getElementById("usedItems").innerText;
|
|
||||||
setFaviconNumber(usedItems);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Source:
|
|
||||||
* https://www.designcise.com/web/tutorial/how-to-detect-if-the-browser-tab-is-active-or-not-using-javascript
|
|
||||||
*/
|
|
||||||
document.addEventListener('visibilitychange', function (event) {
|
|
||||||
if (document.hidden) {
|
|
||||||
console.log('not visible');
|
|
||||||
} else {
|
|
||||||
updateTime();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
54
resources/js/bootstrap.js
vendored
54
resources/js/bootstrap.js
vendored
@ -1,5 +1,18 @@
|
|||||||
import _ from 'lodash';
|
|
||||||
window._ = _;
|
window._ = require('lodash');
|
||||||
|
window.Popper = require('popper.js').default;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We'll load jQuery and the Bootstrap jQuery plugin which provides support
|
||||||
|
* for JavaScript based Bootstrap features such as modals and tabs. This
|
||||||
|
* code may be modified to fit the specific needs of your application.
|
||||||
|
*/
|
||||||
|
|
||||||
|
try {
|
||||||
|
window.$ = window.jQuery = require('jquery');
|
||||||
|
|
||||||
|
require('bootstrap');
|
||||||
|
} catch (e) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* We'll load the axios HTTP library which allows us to easily issue requests
|
* We'll load the axios HTTP library which allows us to easily issue requests
|
||||||
@ -7,28 +20,37 @@ window._ = _;
|
|||||||
* CSRF token as a header based on the value of the "XSRF" token cookie.
|
* CSRF token as a header based on the value of the "XSRF" token cookie.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import axios from 'axios';
|
window.axios = require('axios');
|
||||||
window.axios = axios;
|
|
||||||
|
|
||||||
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
|
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Next we will register the CSRF Token as a common header with Axios so that
|
||||||
|
* all outgoing HTTP requests automatically have it attached. This is just
|
||||||
|
* a simple convenience so we don't have to attach every token manually.
|
||||||
|
*/
|
||||||
|
|
||||||
|
let token = document.head.querySelector('meta[name="csrf-token"]');
|
||||||
|
|
||||||
|
if (token) {
|
||||||
|
window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
|
||||||
|
} else {
|
||||||
|
console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Echo exposes an expressive API for subscribing to channels and listening
|
* Echo exposes an expressive API for subscribing to channels and listening
|
||||||
* for events that are broadcast by Laravel. Echo and event broadcasting
|
* for events that are broadcast by Laravel. Echo and event broadcasting
|
||||||
* allows your team to easily build robust real-time web applications.
|
* allows your team to easily build robust real-time web applications.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Echo from 'laravel-echo';
|
// import Echo from 'laravel-echo'
|
||||||
|
|
||||||
import Pusher from 'pusher-js';
|
// window.Pusher = require('pusher-js');
|
||||||
window.Pusher = Pusher;
|
|
||||||
|
|
||||||
window.Echo = new Echo({
|
// window.Echo = new Echo({
|
||||||
broadcaster: 'pusher',
|
// broadcaster: 'pusher',
|
||||||
key: import.meta.env.VITE_PUSHER_APP_KEY,
|
// key: process.env.MIX_PUSHER_APP_KEY,
|
||||||
wsHost: import.meta.env.VITE_PUSHER_HOST ? import.meta.env.VITE_PUSHER_HOST : `ws-${import.meta.env.VITE_PUSHER_APP_CLUSTER}.pusher.com`,
|
// cluster: process.env.MIX_PUSHER_APP_CLUSTER,
|
||||||
wsPort: import.meta.env.VITE_PUSHER_PORT ?? 80,
|
// encrypted: true
|
||||||
wssPort: import.meta.env.VITE_PUSHER_PORT ?? 443,
|
// });
|
||||||
forceTLS: (import.meta.env.VITE_PUSHER_SCHEME ?? 'https') === 'https',
|
|
||||||
enabledTransports: ['ws', 'wss'],
|
|
||||||
});
|
|
||||||
|
23
resources/js/components/ExampleComponent.vue
Normal file
23
resources/js/components/ExampleComponent.vue
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<template>
|
||||||
|
<div class="container">
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
<div class="col-md-8">
|
||||||
|
<div class="card card-default">
|
||||||
|
<div class="card-header">Example Component</div>
|
||||||
|
|
||||||
|
<div class="card-body">
|
||||||
|
I'm an example component.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
mounted() {
|
||||||
|
console.log('Component mounted.')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
10
resources/js/pusher.js
vendored
10
resources/js/pusher.js
vendored
@ -1,10 +0,0 @@
|
|||||||
import 'https://js.pusher.com/7.2/pusher.min.js';
|
|
||||||
var pusher = new Pusher('93b3e504421787295454', {
|
|
||||||
cluster: 'us2'
|
|
||||||
});
|
|
||||||
|
|
||||||
var channel = pusher.subscribe('touchedItem');
|
|
||||||
channel.bind('RefreshPage', function(data) {
|
|
||||||
window.location.reload();
|
|
||||||
console.log(JSON.stringify(data));
|
|
||||||
});
|
|
@ -32,7 +32,7 @@
|
|||||||
|
|
||||||
":itemname is available!": ":itemname está disponível!",
|
":itemname is available!": ":itemname está disponível!",
|
||||||
"Hi, :username,": "Olá, :username,",
|
"Hi, :username,": "Olá, :username,",
|
||||||
"Good news: :itemname is available!": "Boa notícia: :itemname está disponível!",
|
"Good news: :itemname is available!": "Uma boa notícia: :itemname está disponível!",
|
||||||
"The item <em>:itemname (:productname)</em> is now available on **Share It**.": "O item <em>:itemname (:productname)</em> já está disponível no **Share It**.",
|
"The item <em>:itemname (:productname)</em> is now available on **Share It**.": "O item <em>:itemname (:productname)</em> já está disponível no **Share It**.",
|
||||||
"**Take It** before anyone else at the website:": "Entre no nosso site para usar o item antes de todo mundo.",
|
"**Take It** before anyone else at the website:": "Entre no nosso site para usar o item antes de todo mundo.",
|
||||||
|
|
||||||
@ -46,7 +46,5 @@
|
|||||||
|
|
||||||
"The item doesn't exist.": "O item não existe.",
|
"The item doesn't exist.": "O item não existe.",
|
||||||
"The product doesn't exist or doesn't belongs to you.": "O produto não existe ou não é seu.",
|
"The product doesn't exist or doesn't belongs to you.": "O produto não existe ou não é seu.",
|
||||||
"This item is already taken": "Esse item já está sendo usado.",
|
"This item is already taken": "Esse item já está sendo usado"
|
||||||
"You cannot return an item that is not with you": "Você não pode devolver um item que não está com você.",
|
|
||||||
"Oh! This item has just being returned. Take it before anyone else!": "Opa! Esse item acabou de ser devolvido. Aproveite!"
|
|
||||||
}
|
}
|
@ -14,10 +14,8 @@
|
|||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<form class="d-inline" method="POST" action="{{ route('verification.resend') }}">
|
|
||||||
@csrf
|
|
||||||
{{ __('Before proceeding, please check your email for a verification link.') }}
|
{{ __('Before proceeding, please check your email for a verification link.') }}
|
||||||
{{ __('If you did not receive the email') }}, <button type="submit" class="btn btn-link p-0 m-0 align-baseline">{{ __('click here to request another') }}</button>.
|
{{ __('If you did not receive the email') }}, <a href="{{ route('verification.resend') }}">{{ __('click here to request another') }}</a>.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
@extends('layouts.app')
|
@extends('layouts.app')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
|
|
||||||
@vite('resources/js/pusher.js')
|
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
@if ($item->used_by == \Auth::id())
|
@if ($item->used_by == \Auth::id())
|
||||||
<form action="/take" method="POST" class="form-inline">
|
<form action="/take" method="POST" class="form-inline">
|
||||||
<em id="itemPassedTime_{{$item->id}}" class="pr-sm-2 ml-auto">{{\Carbon\Carbon::parse($item->updated_at)->diffForHumans()}}</em>
|
<em class="pr-sm-2 ml-auto">{{\Carbon\Carbon::parse($item->updated_at)->diffForHumans()}}</em>
|
||||||
<div hidden class="takenItemDate" id="{{$item->id}}">{{\Carbon\Carbon::parse($item->updated_at)->format('Y-m-d\TH:i:s.uP')}}</div>
|
|
||||||
<div class="w-100 d-xm-block d-sm-none"></div>
|
<div class="w-100 d-xm-block d-sm-none"></div>
|
||||||
{{ csrf_field() }}
|
{{ csrf_field() }}
|
||||||
@method('DELETE')
|
@method('DELETE')
|
||||||
@ -17,9 +16,8 @@
|
|||||||
@if ($item->waiting_user_id && $item->waiting_user_id != \Auth::id())
|
@if ($item->waiting_user_id && $item->waiting_user_id != \Auth::id())
|
||||||
<strong>> {{str_limit($users[$item->waiting_user_id], 15, '...')}}</strong>
|
<strong>> {{str_limit($users[$item->waiting_user_id], 15, '...')}}</strong>
|
||||||
@endif
|
@endif
|
||||||
<small id="itemPassedTime_{{$item->id}}">({{$item->updated_at->diffForHumans()}})</small>
|
<small>({{$item->updated_at->diffForHumans()}})</small>
|
||||||
</em>
|
</em>
|
||||||
<div hidden class="takenItemDate" id="{{$item->id}}">{{$item->updated_at->format('Y-m-d\TH:i:s.uP')}}</div>
|
|
||||||
<div class="w-100 d-xm-block d-sm-none"></div>
|
<div class="w-100 d-xm-block d-sm-none"></div>
|
||||||
{{ csrf_field() }}
|
{{ csrf_field() }}
|
||||||
<input type="hidden" name="item" value="{{$item->id}}">
|
<input type="hidden" name="item" value="{{$item->id}}">
|
||||||
|
@ -8,10 +8,10 @@
|
|||||||
<!-- CSRF Token -->
|
<!-- CSRF Token -->
|
||||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||||
|
|
||||||
<title>{{ config('app.name', 'Laravel') }} {{ isset($usedItems) && $usedItems > 0 ? "(${usedItems})" : '' }}</title>
|
<title>{{ config('app.name', 'Laravel') }}</title>
|
||||||
|
|
||||||
<!-- Scripts -->
|
<!-- Scripts -->
|
||||||
@vite('resources/js/app.js')
|
<script src="{{ asset('js/app.js') }}" defer></script>
|
||||||
|
|
||||||
<!-- Fonts -->
|
<!-- Fonts -->
|
||||||
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
|
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
|
||||||
@ -19,12 +19,9 @@
|
|||||||
|
|
||||||
<!-- Styles -->
|
<!-- Styles -->
|
||||||
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
|
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
|
||||||
|
|
||||||
<link id="favicon" rel="icon" type="image/png" href="favicon.png" />
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div hidden id="usedItems">{{ isset($usedItems) && $usedItems > 0 ? $usedItems : '' }}</div>
|
|
||||||
<div id="app">
|
<div id="app">
|
||||||
<nav class="navbar navbar-expand-md navbar-light navbar-laravel">
|
<nav class="navbar navbar-expand-md navbar-light navbar-laravel">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
@ -17,4 +17,3 @@
|
|||||||
<!-- Copyright -->
|
<!-- Copyright -->
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
@include('layouts.tracker')
|
|
@ -1,3 +0,0 @@
|
|||||||
<script type="text/javascript">
|
|
||||||
var owa_baseUrl='https://brunofontes.net/owa/';var owa_cmds=owa_cmds||[];owa_cmds.push(['setSiteId','15a38975230dfe7528d647a1419be7f7']);owa_cmds.push(['trackPageView']);owa_cmds.push(['trackClicks']);owa_cmds.push(['trackDomStream']);(function(){var _owa=document.createElement('script');_owa.type='text/javascript';_owa.async=true;owa_baseUrl=('https:'==document.location.protocol?window.owa_baseSecUrl||owa_baseUrl.replace(/http:/,'https:'):owa_baseUrl);_owa.src=owa_baseUrl+'modules/base/js/owa.tracker-combined-min.js';var _owa_s=document.getElementsByTagName('script')[0];_owa_s.parentNode.insertBefore(_owa,_owa_s)}());
|
|
||||||
</script>
|
|
@ -5,7 +5,6 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
|
||||||
<title>Share It</title>
|
<title>Share It</title>
|
||||||
<link id="favicon" rel="icon" type="image/png" href="favicon.png" />
|
|
||||||
|
|
||||||
<!-- Fonts -->
|
<!-- Fonts -->
|
||||||
<link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet" type="text/css">
|
<link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet" type="text/css">
|
||||||
@ -115,6 +114,5 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@include('layouts.tracker')
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -14,8 +14,3 @@
|
|||||||
Broadcast::channel('App.User.{id}', function ($user, $id) {
|
Broadcast::channel('App.User.{id}', function ($user, $id) {
|
||||||
return (int) $user->id === (int) $id;
|
return (int) $user->id === (int) $id;
|
||||||
});
|
});
|
||||||
|
|
||||||
Broadcast::channel('touchedItem', function ($user) {
|
|
||||||
return true;
|
|
||||||
/* return $user->id === Item::findOrNew($itemId)->users->find($user->id)->id; */
|
|
||||||
});
|
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
echo "Homestead password is: vagrant"
|
|
||||||
ssh homestead -t "cd shareit; bash --login"
|
|
@ -1,7 +0,0 @@
|
|||||||
#!/bin/zsh
|
|
||||||
export VAGRANT_CWD=/home/bruno/development/Homestead/
|
|
||||||
vagrant up
|
|
||||||
eval $DEV_BROWSER http://shareit.test \
|
|
||||||
https://mailtrap.io/inboxes/455614/messages \
|
|
||||||
https://dashboard.pusher.com/apps/1505830/console \
|
|
||||||
&
|
|
@ -3,8 +3,8 @@
|
|||||||
namespace Tests\Feature;
|
namespace Tests\Feature;
|
||||||
|
|
||||||
use \App\Product;
|
use \App\Product;
|
||||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
||||||
use Tests\TestCase;
|
use Tests\TestCase;
|
||||||
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||||
|
|
||||||
class ExampleTest extends TestCase
|
class ExampleTest extends TestCase
|
||||||
{
|
{
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
namespace Tests\Unit;
|
namespace Tests\Unit;
|
||||||
|
|
||||||
use Tests\TestCase;
|
use Tests\TestCase;
|
||||||
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||||
|
|
||||||
class ExampleTest extends TestCase
|
class ExampleTest extends TestCase
|
||||||
{
|
{
|
||||||
|
@ -1 +0,0 @@
|
|||||||
ssh homestead -t 'cd shareit; /usr/local/bin/composer update; npm update; echo; echo -n "Press enter to exit..."; read'
|
|
28
vite.config.js
vendored
28
vite.config.js
vendored
@ -1,28 +0,0 @@
|
|||||||
import { defineConfig } from 'vite';
|
|
||||||
import laravel from 'laravel-vite-plugin';
|
|
||||||
// import react from '@vitejs/plugin-react';
|
|
||||||
// import vue from '@vitejs/plugin-vue';
|
|
||||||
|
|
||||||
export default defineConfig({
|
|
||||||
plugins: [
|
|
||||||
laravel([
|
|
||||||
// 'resources/css/app.css',
|
|
||||||
'resources/js/app.js',
|
|
||||||
'resources/js/pusher.js',
|
|
||||||
]),
|
|
||||||
// react(),
|
|
||||||
// vue({
|
|
||||||
// template: {
|
|
||||||
// transformAssetUrls: {
|
|
||||||
// base: null,
|
|
||||||
// includeAbsolute: false,
|
|
||||||
// },
|
|
||||||
// },
|
|
||||||
// }),
|
|
||||||
],
|
|
||||||
resolve: {
|
|
||||||
alias: {
|
|
||||||
'@': '/resources/js'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
15
webpack.mix.js
vendored
Normal file
15
webpack.mix.js
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
const mix = require('laravel-mix');
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Mix Asset Management
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Mix provides a clean, fluent API for defining some Webpack build steps
|
||||||
|
| for your Laravel application. By default, we are compiling the Sass
|
||||||
|
| file for the application as well as bundling up all the JS files.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
mix.js('resources/js/app.js', 'public/js')
|
||||||
|
.sass('resources/sass/app.scss', 'public/css');
|
Loading…
Reference in New Issue
Block a user