mirror of
https://github.com/Einundzwanzig-Podcast/einundzwanzig-portal.git
synced 2025-12-11 06:46:47 +00:00
NeedMeetupMiddleware added
This commit is contained in:
@@ -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,
|
||||
];
|
||||
}
|
||||
|
||||
85
app/Http/Livewire/Profile/Meetups.php
Normal file
85
app/Http/Livewire/Profile/Meetups.php
Normal 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.'));
|
||||
}
|
||||
}
|
||||
31
app/Http/Middleware/NeedMeetupMiddleware.php
Normal file
31
app/Http/Middleware/NeedMeetupMiddleware.php
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
|
||||
@@ -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/')
|
||||
|
||||
@@ -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(),
|
||||
|
||||
];
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user