1
0
mirror of https://github.com/brunofontes/shareit.git synced 2025-04-14 08:00:53 +00:00

Compare commits

...

No commits in common. "master" and "v0.4" have entirely different histories.
master ... v0.4

94 changed files with 7647 additions and 64372 deletions
.gitignore
app
check.shcomposer.jsoncomposer.lock
config
database
deploy.sh
lang/en
package.jsonphpstan.neon
public
resources
routes
ssh_homestead.shstart_vagrant.sh
tests
updateCompserNPM.shvite.config.jswebpack.mix.jsyarn.lock

8
.gitignore vendored
View File

@ -5,8 +5,14 @@
/vendor
/.idea
/.vscode
/.vagrant
Homestead.json
Homestead.yaml
npm-debug.log
yarn-error.log
.env
.phpunit.result.cache
tags
mergeAndDeploy.sh
start_vagrant.sh
stop_vagrant.sh
ssh_homestead.sh

View File

@ -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';
}
}

View File

@ -3,29 +3,22 @@
namespace App\Events;
use \App\Item;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\Channel;
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
{
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* Item
*
* @var Item
*/
public $item;
/**
* Create a new event instance.
*
* @param Item $item The returned item.
*
* @return void
*/
public function __construct(Item $item)
@ -40,11 +33,6 @@ class ReturnItem
*/
public function broadcastOn()
{
return new PrivateChannel('touchedItem');
}
public function broadcastAs()
{
return 'ReturnItem';
return new PrivateChannel('channel-name');
}
}

View File

@ -4,7 +4,6 @@ namespace App\Exceptions;
use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Throwable;
class Handler extends ExceptionHandler
{
@ -33,7 +32,7 @@ class Handler extends ExceptionHandler
* @param \Exception $exception
* @return void
*/
public function report(Throwable $exception)
public function report(Exception $exception)
{
parent::report($exception);
}
@ -45,7 +44,7 @@ class Handler extends ExceptionHandler
* @param \Exception $exception
* @return \Illuminate\Http\Response
*/
public function render($request, Throwable $exception)
public function render($request, Exception $exception)
{
return parent::render($request, $exception);
}

View File

@ -2,44 +2,23 @@
namespace App\Http\Controllers;
use \App\Mail\UserWaiting;
use \App\User;
use App\FlashMessage;
use Auth;
use \App\User;
use \App\Mail\UserWaiting;
use Illuminate\Http\Request;
use Mail;
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)
{
$item = User::loggedIn()->items()->find(request('item'));
if (!$item->used_by) {
session()->flash(
FlashMessage::PRIMARY,
__('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();
$item->waiting_user_id = Auth::id();
$item->timestamps = false;
$item->save();
$loggedUser = Auth::user()->name;
$userWithItem = User::find($item->used_by);
Mail::to($userWithItem)
\Mail::to($userWithItem)
->locale($userWithItem->language)
->send(new UserWaiting($loggedUser, $userWithItem->name, $item));
@ -49,12 +28,10 @@ class AlertController extends Controller
public function delete(Request $request)
{
$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');
}
}

View File

@ -2,14 +2,13 @@
namespace App\Http\Controllers\Auth;
use App\FlashMessage;
use App\Http\Controllers\Controller;
use App\Mail\Welcome;
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\Validator;
use Mail;
use Illuminate\Foundation\Auth\RegistersUsers;
use App\FlashMessage;
class RegisterController extends Controller
{
@ -72,13 +71,7 @@ class RegisterController extends Controller
'password' => Hash::make($data['password']),
]);
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);
});
\Mail::to($user)->send(new Welcome($user));
session()->flash(FlashMessage::PRIMARY, __('Thanks for registering. Please, do not forget to validate your e-mail address.'));

View File

@ -2,10 +2,10 @@
namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
class Controller extends BaseController
{

View File

@ -6,8 +6,6 @@ use \App\User;
class HomeController extends Controller
{
protected $activeUsers = [];
/**
* Create a new controller instance.
*
@ -18,50 +16,6 @@ class HomeController extends Controller
$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
*
@ -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'));
}
}

View File

@ -4,8 +4,8 @@ namespace App\Http\Controllers;
use \App\Item;
use \App\User;
use App\FlashMessage as flash;
use Illuminate\Http\Request;
use App\FlashMessage as flash;
class ItemController extends Controller
{
@ -13,8 +13,7 @@ class ItemController extends Controller
{
$item = Item::find($id);
if (!$item || $item->product->user_id != \Auth::id()) {
session()->flash(
flash::DANGER,
session()->flash(flash::DANGER,
\Lang::getFromJson(
"The item doesn't exist."
)

View File

@ -3,6 +3,7 @@
namespace App\Http\Controllers;
use App;
use Lang;
use App\User;
use Illuminate\Http\Request;

View File

@ -3,10 +3,10 @@
namespace App\Http\Controllers;
use \App\Item;
use \App\Product;
use \App\User;
use App\FlashMessage as flash;
use \App\Product;
use Illuminate\Http\Request;
use App\FlashMessage as flash;
class ProductController extends Controller
{
@ -72,7 +72,7 @@ class ProductController extends Controller
if (!$product) {
session()->flash(
flash::DANGER,
flash::DANGER,
\Lang::getFromJson(
"The product doesn't exist or doesn't belongs to you."
)

View File

@ -2,63 +2,33 @@
namespace App\Http\Controllers;
use App\Events\RefreshPage;
use App\Events\ReturnItem;
use App\Item;
use App\User;
use \App\Item;
use \App\User;
use Illuminate\Http\Request;
use Lang;
use App\Events\ReturnItem;
/**
* Responsible to Take and Return an Item.
*/
class TakeController extends Controller
{
/**
* The user take an item
*
* @param Request $request The form data
*
* @return home view
*/
public function store(Request $request)
{
$item = User::loggedIn()->items()->find(request('item'));
try {
$item->takeItem();
} catch (\Exception $e) {
if ($item->used_by) {
return back()->withErrors(
Lang::getFromJson('This item is already taken')
\Lang::getFromJson(
"This item is already taken"
)
);
}
RefreshPage::dispatch($item);
$item->used_by = \Auth::id();
$item->save();
return redirect('home');
}
/**
* User return an item
* Trigger an event: ReturnItem
*
* @param Request $request Form data
*
* @return View home
*/
public function delete(Request $request)
{
$item = User::loggedIn()->items()->find(request('item'));
try {
$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);
event(new ReturnItem($item));
$item->returnItem();
return redirect('home');
}
}

View File

@ -2,9 +2,9 @@
namespace App\Http\Controllers;
use \App\Item;
use \App\User;
use \Lang;
use \App\Item;
use \App\Product;
use Illuminate\Http\Request;
class UserController extends Controller
@ -43,7 +43,7 @@ class UserController extends Controller
if (count($userArray) == 0) {
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')]);
} else {
return back()->withErrors(
Lang::getFromJson(
\Lang::getFromJson(
"You cannot add a user to a product that is not yourse."
)
);
@ -85,7 +85,7 @@ class UserController extends Controller
->detach([request('item_id')]);
} else {
return back()->withErrors(
Lang::getFromJson(
\Lang::getFromJson(
"You cannot remove a user from a product that is not yourse."
)
);

View File

@ -51,7 +51,7 @@ class Kernel extends HttpKernel
*
* @var array
*/
protected $middlewareAliases = [
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,

View File

@ -2,8 +2,8 @@
namespace App\Http\Middleware;
use Illuminate\Http\Middleware\TrustProxies as Middleware;
use Illuminate\Http\Request;
use Fideloper\Proxy\TrustProxies as Middleware;
class TrustProxies extends Middleware
{
@ -19,10 +19,5 @@ class TrustProxies extends Middleware
*
* @var int
*/
protected $headers =
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;
protected $headers = Request::HEADER_X_FORWARDED_ALL;
}

View File

@ -2,8 +2,6 @@
namespace App;
use Auth;
use Exception;
use Illuminate\Database\Eloquent\Model;
class Item extends Model
@ -33,66 +31,23 @@ class Item extends Model
/**
* Return the items from logged in user
*
*
* @return \App\Item
*/
public static function fromAuthUser()
{
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();
return (new static)->where('user_id', \Auth::id());
}
/**
* Return a specified item
*
*
* @return void
*/
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->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->timestamps = false;
$this->save();
}
}

View File

@ -2,10 +2,12 @@
namespace App\Listeners;
use Mail;
use App\User;
use App\Events\ReturnItem;
use App\Mail\ItemAvailable;
use App\User;
use Mail;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class AlertReturnedItem
{
@ -23,8 +25,7 @@ class AlertReturnedItem
* Send an email to the user that
* is waiting for the item
*
* @param ReturnItem $event The return event that contains an item
*
* @param ReturnItem $item
* @return void
*/
public function handle(ReturnItem $event)

View File

@ -3,8 +3,10 @@
namespace App\Listeners;
use App\User;
use Illuminate\Auth\Events\Login;
use IlluminateAuthEventsLogin;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Auth\Events\Login;
class SetLanguage
{

View File

@ -6,6 +6,7 @@ use \App\Item;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class ItemAvailable extends Mailable
{
@ -32,8 +33,8 @@ class ItemAvailable extends Mailable
public function build()
{
return $this->subject(
\Lang::get(
':itemname is available!',
\Lang::getFromJson(
':itemname is available!',
['itemname' => $this->item->name]
)
)->markdown('emails.itemAvailable');

View File

@ -2,17 +2,18 @@
namespace App\Mail;
use Lang;
use \App\Item;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Lang;
use Illuminate\Contracts\Queue\ShouldQueue;
class UserWaiting extends Mailable
{
public $item;
public $waitingUser;
public $userWithItem;
public $userWithItem;
use Queueable, SerializesModels;
/**
@ -35,10 +36,10 @@ class UserWaiting extends Mailable
public function build()
{
return $this->subject(
Lang::get(
':waitinguser wants to use :itemname',
Lang::getFromJson(
':waitinguser wants to use :itemname',
[
'waitinguser' => $this->waitingUser,
'waitinguser' => $this->waitingUser,
'itemname' => $this->item->name
]
)

View File

@ -2,11 +2,12 @@
namespace App\Mail;
use \App\User;
use \Lang;
use \App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class Welcome extends Mailable
{
@ -30,6 +31,6 @@ class Welcome extends Mailable
*/
public function build()
{
return $this->subject(Lang::get('Welcome'))->markdown('emails.welcome');
return $this->subject(Lang::getFromJson('Welcome'))->markdown('emails.welcome');
}
}

View File

@ -20,7 +20,7 @@ class Product extends Model
/**
* Return the products from logged in user
*
*
* @return \App\Product
*/
public static function fromAuthUser()

View File

@ -2,8 +2,8 @@
namespace App\Providers;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
class AppServiceProvider extends ServiceProvider
{
@ -14,7 +14,7 @@ class AppServiceProvider extends ServiceProvider
*/
public function boot()
{
Schema::defaultStringLength(191); //Solved by increasing StringLength
Schema::defaultStringLength(191); //Solved by increasing StringLength
//
}

View File

@ -2,6 +2,7 @@
namespace App\Providers;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
@ -22,6 +23,7 @@ class AuthServiceProvider extends ServiceProvider
*/
public function boot()
{
$this->registerPolicies();
//
}

View File

@ -2,8 +2,8 @@
namespace App\Providers;
use Illuminate\Support\Facades\Broadcast;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Broadcast;
class BroadcastServiceProvider extends ServiceProvider
{

View File

@ -3,12 +3,12 @@
namespace App\Providers;
use App\Events\ReturnItem;
use App\Listeners\AlertReturnedItem;
use App\Listeners\SetLanguage;
use App\Listeners\AlertReturnedItem;
use Illuminate\Support\Facades\Event;
use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Event;
class EventServiceProvider extends ServiceProvider
{

View File

@ -2,8 +2,8 @@
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Route;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
class RouteServiceProvider extends ServiceProvider
{

View File

@ -3,9 +3,10 @@
namespace App;
use Auth;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Support\Facades\Request;
class User extends Authenticatable implements MustVerifyEmail
{
@ -41,7 +42,7 @@ class User extends Authenticatable implements MustVerifyEmail
/**
* Return the logged in user
*
*
* @return \App\User
*/
public static function loggedIn()
@ -52,7 +53,7 @@ class User extends Authenticatable implements MustVerifyEmail
/**
* Set the default website language
* for the acual user
*
*
* @param string $language The language code
*
* @return void

View File

@ -1,2 +0,0 @@
./vendor/bin/phpstan analyse --memory-limit=2G
php artisan insights

View File

@ -5,24 +5,18 @@
"license": "MIT",
"type": "project",
"require": {
"php": "^8.0.2",
"inertiajs/inertia-laravel": "^0.6.11",
"laravel/framework": "^10.0",
"laravel/ui": "^4.0",
"laravel/helpers": "^1.4",
"laravel/tinker": "^2.4.1",
"pusher/pusher-php-server": "^7.2"
"php": "^7.1.3",
"fideloper/proxy": "^4.0",
"laravel/framework": "5.7.*",
"laravel/tinker": "^1.0"
},
"require-dev": {
"beyondcode/laravel-dump-server": "^1.0",
"filp/whoops": "^2.0",
"fzaninotto/faker": "^1.4",
"mockery/mockery": "^1.0",
"nunomaduro/collision": "^7.0",
"nunomaduro/larastan": "^2.9.5",
"nunomaduro/phpinsights": "*",
"phpstan/phpstan": "^1.10.66",
"phpunit/phpunit": "^10.0"
"nunomaduro/collision": "^2.0",
"phpunit/phpunit": "^7.0"
},
"autoload": {
"classmap": [
@ -59,11 +53,8 @@
"config": {
"preferred-install": "dist",
"sort-packages": true,
"optimize-autoloader": true,
"allow-plugins": {
"dealerdirect/phpcodesniffer-composer-installer": true
}
"optimize-autoloader": true
},
"minimum-stability": "stable",
"minimum-stability": "dev",
"prefer-stable": true
}

9490
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -156,7 +156,7 @@ return [
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
App\Providers\BroadcastServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,

View File

@ -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,
],
];

View File

@ -164,7 +164,7 @@ return [
|
*/
'secure' => env('SESSION_SECURE_COOKIE', null),
'secure' => env('SESSION_SECURE_COOKIE', false),
/*
|--------------------------------------------------------------------------

View File

@ -30,4 +30,4 @@ $factory->define(App\Product::class, function (Faker $faker) {
return factory(App\User::class)->create()->id;
},
];
});
});

View File

@ -1,8 +1,8 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{

View File

@ -1,8 +1,8 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePasswordResetsTable extends Migration
{

View File

@ -1,8 +1,8 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateProductsTable extends Migration
{

View File

@ -1,8 +1,8 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateItemsTable extends Migration
{

View File

@ -1,8 +1,8 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddLocationToUsers extends Migration
{

View File

@ -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');
}
};

View File

@ -1,7 +1,5 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder

View File

@ -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"

View File

@ -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.',
];

View File

@ -1,26 +1,22 @@
{
"private": true,
"scripts": {
"dev": "vite",
"build": "vite build"
"dev": "npm run development",
"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": {
"axios": "^1.1.3",
"bootstrap": "^4.6.0",
"cross-env": "^5.2.1",
"jquery": "^3.5.1",
"laravel-echo": "^1.14.1",
"laravel-vite-plugin": "^0.7.0",
"lodash": "^4.17.21",
"popper.js": "^1.16.1",
"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"
"axios": "^0.18",
"bootstrap": "^4.0.0",
"cross-env": "^5.1",
"jquery": "^3.2",
"laravel-mix": "^2.0",
"lodash": "^4.17.5",
"popper.js": "^1.12",
"vue": "^2.5.7"
}
}

View File

@ -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

File diff suppressed because one or more lines are too long

View File

@ -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))});

View File

@ -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

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

(image error) Size: 2.2 KiB

46233
public/js/app.js vendored

File diff suppressed because one or more lines are too long

View File

@ -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.
*/

View File

@ -1 +0,0 @@
{}

62
resources/js/app.js vendored
View File

@ -5,10 +5,9 @@
* building robust, powerful web applications using Vue and Laravel.
*/
import './bootstrap';
import moment from "moment";
require('./bootstrap');
// window.Vue = require('vue');
window.Vue = require('vue');
/**
* 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.
*/
// Vue.component('example-component', require('./components/ExampleComponent.vue'));
Vue.component('example-component', require('./components/ExampleComponent.vue'));
// const app = new Vue({
// 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();
}
const app = new Vue({
el: '#app'
});

View File

@ -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
@ -7,28 +20,37 @@ window._ = _;
* CSRF token as a header based on the value of the "XSRF" token cookie.
*/
import axios from 'axios';
window.axios = axios;
window.axios = require('axios');
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
* for events that are broadcast by Laravel. Echo and event broadcasting
* 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 = Pusher;
// window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key: import.meta.env.VITE_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`,
wsPort: import.meta.env.VITE_PUSHER_PORT ?? 80,
wssPort: import.meta.env.VITE_PUSHER_PORT ?? 443,
forceTLS: (import.meta.env.VITE_PUSHER_SCHEME ?? 'https') === 'https',
enabledTransports: ['ws', 'wss'],
});
// window.Echo = new Echo({
// broadcaster: 'pusher',
// key: process.env.MIX_PUSHER_APP_KEY,
// cluster: process.env.MIX_PUSHER_APP_CLUSTER,
// encrypted: true
// });

View 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>

View File

@ -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));
});

View File

@ -70,4 +70,4 @@ return [
To be able to do that you just need to select the item.</p>
<p class="mb-4">When adding a Product, you can specify a webpage (this is optional).</p>',
];
];

View File

@ -9,4 +9,4 @@ return [
'cancel_alert' => 'Cancel Alert',
'alert_me' => 'Alert me',
'take' => 'Take It'
];
];

View File

@ -37,4 +37,4 @@ return [
*/
'back' => 'BACK',
];
];

View File

@ -2,7 +2,7 @@
/**
* Strings from the product pages
* They are separeted by the file that calls them.
* Sometimes, a string is used on another file,
* Sometimes, a string is used on another file,
* so it will stay at the common segment.
*/
@ -22,7 +22,7 @@ return [
'100yearsSolitude' => 'One Hundred Years of Solitude',
/**
* addProductForm.blade.php
* addProductForm.blade.php
*/
'name' => 'Name:',
'book' => 'Book',
@ -60,4 +60,4 @@ return [
'noItemsYet' => 'There are no items yet. Include one with the form above.',
'addItem' => 'Add item',
'back' => 'BACK',
];
];

View File

@ -7,4 +7,4 @@ return [
'Help' => 'Help',
'copyright' => '© 2018 Bruno Fontes All Rights Reserved',
'byAuthor' => 'By Bruno Fontes',
];
];

View File

@ -32,7 +32,7 @@
":itemname is available!": ":itemname está disponível!",
"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&nbsp;It**.": "O item <em>:itemname (:productname)</em> já está disponível no **Share&nbsp;It**.",
"**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 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.",
"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!"
"This item is already taken": "Esse item já está sendo usado"
}

View File

@ -71,4 +71,4 @@ return [
Para fazer isso, você precisa clicar no item que deseja compartilhar e incluir outras pessoas.</p>
<p class="mb-4">Ao adicionar um produto, você pode especificar um site (opcional).</p>',
];
];

View File

@ -9,4 +9,4 @@ return [
'cancel_alert' => 'Cancelar alerta',
'alert_me' => 'Alertar',
'take' => 'Usar'
];
];

View File

@ -36,4 +36,4 @@ return [
* String from item.blade.php
*/
'back' => 'VOLTAR',
];
];

View File

@ -2,7 +2,7 @@
/**
* Strings from the product pages
* They are separeted by the file that calls them.
* Sometimes, a string is used on another file,
* Sometimes, a string is used on another file,
* so it will stay at the common segment.
*/
@ -20,7 +20,7 @@ return [
'100yearsSolitude' => 'Cem anos de solidão',
/**
* addProductForm.blade.php
* addProductForm.blade.php
*/
'name' => 'Nome:',
'book' => 'Livro',
@ -58,4 +58,4 @@ return [
'noItemsYet' => 'Ainda não há itens cadastrados. Inclua um no formulário acima.',
'addItem' => 'Incluir item',
'back' => 'VOLTAR',
];
];

View File

@ -7,4 +7,4 @@ return [
'Help' => 'Ajuda',
'copyright' => '© 2018 Bruno Fontes Todos os direitos reservados',
'byAuthor' => 'Por Bruno Fontes',
];
];

View File

@ -14,10 +14,8 @@
</div>
@endif
<form class="d-inline" method="POST" action="{{ route('verification.resend') }}">
@csrf
{{ __('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>

View File

@ -1,9 +1,6 @@
@extends('layouts.app')
@section('content')
@vite('resources/js/pusher.js')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
@ -45,4 +42,4 @@
</div>
</div>
</div>
@endsection
@endsection

View File

@ -1,7 +1,6 @@
@if ($item->used_by == \Auth::id())
<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>
<div hidden class="takenItemDate" id="{{$item->id}}">{{\Carbon\Carbon::parse($item->updated_at)->format('Y-m-d\TH:i:s.uP')}}</div>
<em class="pr-sm-2 ml-auto">{{\Carbon\Carbon::parse($item->updated_at)->diffForHumans()}}</em>
<div class="w-100 d-xm-block d-sm-none"></div>
{{ csrf_field() }}
@method('DELETE')
@ -17,9 +16,8 @@
@if ($item->waiting_user_id && $item->waiting_user_id != \Auth::id())
<strong>> {{str_limit($users[$item->waiting_user_id], 15, '...')}}</strong>
@endif
<small id="itemPassedTime_{{$item->id}}">({{$item->updated_at->diffForHumans()}})</small>
<small>({{$item->updated_at->diffForHumans()}})</small>
</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>
{{ csrf_field() }}
<input type="hidden" name="item" value="{{$item->id}}">
@ -30,4 +28,4 @@
<button type="submit" class="btn btn-sm btn-outline-secondary ml-auto">@lang('home.alert_me')</button>
@endif
</form>
@endif
@endif

View File

@ -8,10 +8,10 @@
<!-- 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 -->
@vite('resources/js/app.js')
<script src="{{ asset('js/app.js') }}" defer></script>
<!-- Fonts -->
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
@ -19,12 +19,9 @@
<!-- Styles -->
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
<link id="favicon" rel="icon" type="image/png" href="favicon.png" />
</head>
<body>
<div hidden id="usedItems">{{ isset($usedItems) && $usedItems > 0 ? $usedItems : '' }}</div>
<div id="app">
<nav class="navbar navbar-expand-md navbar-light navbar-laravel">
<div class="container">
@ -91,4 +88,4 @@
</div>
</body>
</html>
</html>

View File

@ -16,5 +16,4 @@
</div>
<!-- Copyright -->
</div>
</footer>
@include('layouts.tracker')
</footer>

View File

@ -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>

View File

@ -5,7 +5,6 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Share It</title>
<link id="favicon" rel="icon" type="image/png" href="favicon.png" />
<!-- Fonts -->
<link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet" type="text/css">
@ -115,6 +114,5 @@
</div>
</div>
</div>
@include('layouts.tracker')
</body>
</html>

View File

@ -14,8 +14,3 @@
Broadcast::channel('App.User.{id}', function ($user, $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; */
});

View File

@ -1,2 +0,0 @@
echo "Homestead password is: vagrant"
ssh homestead -t "cd shareit; bash --login"

View File

@ -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 \
&

View File

@ -3,8 +3,8 @@
namespace Tests\Feature;
use \App\Product;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ExampleTest extends TestCase
{

View File

@ -3,6 +3,7 @@
namespace Tests\Unit;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ExampleTest extends TestCase
{

View File

@ -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
View File

@ -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
View 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');

5923
yarn.lock Normal file

File diff suppressed because it is too large Load Diff