NeedMeetupMiddleware added

This commit is contained in:
Benjamin Takats
2023-01-17 18:59:10 +01:00
parent 3a32d1ebe5
commit 8e0d23a296
26 changed files with 524 additions and 36 deletions

View File

@@ -3,6 +3,7 @@
namespace App\Http;
use App\Http\Middleware\CustomEnsureEmailVerified;
use App\Http\Middleware\NeedMeetupMiddleware;
use App\Http\Middleware\SetTimezoneForNovaMiddleware;
use App\Http\Middleware\SetTimezoneMiddleware;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
@@ -84,5 +85,6 @@ class Kernel extends HttpKernel
'signed' => \App\Http\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => CustomEnsureEmailVerified::class,
'needMeetup' => NeedMeetupMiddleware::class,
];
}

View File

@@ -0,0 +1,85 @@
<?php
namespace App\Http\Livewire\Profile;
use App\Models\Meetup;
use Livewire\Component;
use WireUi\Traits\Actions;
class Meetups extends Component
{
use Actions;
public $search = '';
public $meetups;
public $myMeetups = [];
public $myMeetupNames = [];
public $hasMeetups = false;
public function rules()
{
return [
'search' => 'string',
];
}
public function mount()
{
$this->meetups = Meetup::query()
->where('name', 'ilike', '%'.$this->search.'%')
->orderBy('name')
->limit(10)
->get();
$this->myMeetups = auth()
->user()
->meetups()
->pluck('meetup_id')
->toArray();
$this->myMeetupNames = auth()
->user()
->meetups()
->pluck('meetups.name', 'meetups.id')
->toArray();
if (count($this->myMeetups) > 0) {
$this->hasMeetups = true;
}
}
public function updatedSearch($value)
{
$this->meetups = Meetup::query()
->where('name', 'ilike', '%'.$value.'%')
->orderBy('name')
->limit(10)
->get();
}
public function render()
{
return view('livewire.profile.meetups');
}
public function signUpForMeetup($id)
{
$user = auth()->user();
$user->meetups()
->toggle($id);
$this->myMeetups = auth()
->user()
->meetups()
->pluck('meetup_id')
->toArray();
if (count($this->myMeetups) > 0) {
$this->hasMeetups = true;
} else {
$this->hasMeetups = false;
}
$this->myMeetupNames = auth()
->user()
->meetups()
->pluck('meetups.name', 'meetups.id')
->toArray();
$this->notification()
->success(__('Saved.'));
}
}

View File

@@ -0,0 +1,31 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Cookie;
class NeedMeetupMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
*
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next)
{
if ($request->user()) {
$request->user()->load('meetups');
if ($request->user()->meetups->count() < 1) {
return redirect()->route('profile.meetups')->with('redirectToThis', $request->route()?->getName());
}
}
return $next($request);
}
}

View File

@@ -61,6 +61,11 @@ class User extends Authenticatable implements MustVerifyEmail, CanComment
return $this->hasMany(OrangePill::class);
}
public function meetups()
{
return $this->belongsToMany(Meetup::class);
}
public function reputations()
{
return $this->morphMany('QCod\Gamify\Reputation', 'subject');

View File

@@ -37,6 +37,10 @@ class Meetup extends Resource
public static function afterCreate(NovaRequest $request, Model $model)
{
auth()
->user()
->meetups()
->attach($model);
\App\Models\User::find(1)
->notify(new ModelCreatedNotification($model, str($request->getRequestUri())
->after('/nova-api/')

View File

@@ -8,6 +8,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Laravel\Nova\Fields\BelongsTo;
use Laravel\Nova\Fields\DateTime;
use Laravel\Nova\Fields\Field;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Http\Requests\NovaRequest;
@@ -47,6 +48,18 @@ class MeetupEvent extends Resource
->toString()));
}
public static function relatableMeetups(NovaRequest $request, $query, Field $field)
{
if ($field instanceof BelongsTo) {
$query->whereIn('meetups.id', $request->user()
->meetups()
->pluck('id')
->toArray());
}
return $query;
}
public function subtitle()
{
return __('Created by: :name', ['name' => $this->createdBy->name]);
@@ -79,14 +92,16 @@ class MeetupEvent extends Resource
->rules('required', 'string'),
BelongsTo::make('Meetup')
->searchable()->withSubtitles(),
->searchable()
->withSubtitles(),
BelongsTo::make(__('Created By'), 'createdBy', User::class)
->canSee(function ($request) {
return $request->user()
->hasRole('super-admin');
})
->searchable()->withSubtitles(),
->searchable()
->withSubtitles(),
];
}

View File

@@ -53,7 +53,7 @@ class MeetupEventPolicy extends BasePolicy
*/
public function update(User $user, MeetupEvent $meetupEvent)
{
return $meetupEvent->created_by === $user->id || $user->can((new \ReflectionClass($this))->getShortName().'.'.__FUNCTION__);
return $user->meetups->contains($meetupEvent->meetup) || $user->can((new \ReflectionClass($this))->getShortName().'.'.__FUNCTION__);
}
/**
@@ -65,7 +65,7 @@ class MeetupEventPolicy extends BasePolicy
*/
public function delete(User $user, MeetupEvent $meetupEvent)
{
return false;
return false && $meetupEvent->created_by === $user->id;
}
/**

View File

@@ -57,7 +57,7 @@ class MeetupPolicy extends BasePolicy
*/
public function update(User $user, Meetup $meetup)
{
return true || $meetup->created_by === $user->id || $user->can((new \ReflectionClass($this))->getShortName().'.'.__FUNCTION__);
return $user->meetups->contains($meetup) || $user->can((new \ReflectionClass($this))->getShortName().'.'.__FUNCTION__);
}
/**
@@ -70,7 +70,7 @@ class MeetupPolicy extends BasePolicy
*/
public function delete(User $user, Meetup $meetup)
{
return false;
return $meetup->created_by === $user->id;
}
/**