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;
|
namespace App\Http;
|
||||||
|
|
||||||
use App\Http\Middleware\CustomEnsureEmailVerified;
|
use App\Http\Middleware\CustomEnsureEmailVerified;
|
||||||
|
use App\Http\Middleware\NeedMeetupMiddleware;
|
||||||
use App\Http\Middleware\SetTimezoneForNovaMiddleware;
|
use App\Http\Middleware\SetTimezoneForNovaMiddleware;
|
||||||
use App\Http\Middleware\SetTimezoneMiddleware;
|
use App\Http\Middleware\SetTimezoneMiddleware;
|
||||||
use Illuminate\Foundation\Http\Kernel as HttpKernel;
|
use Illuminate\Foundation\Http\Kernel as HttpKernel;
|
||||||
@@ -84,5 +85,6 @@ class Kernel extends HttpKernel
|
|||||||
'signed' => \App\Http\Middleware\ValidateSignature::class,
|
'signed' => \App\Http\Middleware\ValidateSignature::class,
|
||||||
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
|
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
|
||||||
'verified' => CustomEnsureEmailVerified::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);
|
return $this->hasMany(OrangePill::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function meetups()
|
||||||
|
{
|
||||||
|
return $this->belongsToMany(Meetup::class);
|
||||||
|
}
|
||||||
|
|
||||||
public function reputations()
|
public function reputations()
|
||||||
{
|
{
|
||||||
return $this->morphMany('QCod\Gamify\Reputation', 'subject');
|
return $this->morphMany('QCod\Gamify\Reputation', 'subject');
|
||||||
|
|||||||
@@ -37,6 +37,10 @@ class Meetup extends Resource
|
|||||||
|
|
||||||
public static function afterCreate(NovaRequest $request, Model $model)
|
public static function afterCreate(NovaRequest $request, Model $model)
|
||||||
{
|
{
|
||||||
|
auth()
|
||||||
|
->user()
|
||||||
|
->meetups()
|
||||||
|
->attach($model);
|
||||||
\App\Models\User::find(1)
|
\App\Models\User::find(1)
|
||||||
->notify(new ModelCreatedNotification($model, str($request->getRequestUri())
|
->notify(new ModelCreatedNotification($model, str($request->getRequestUri())
|
||||||
->after('/nova-api/')
|
->after('/nova-api/')
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ use Illuminate\Database\Eloquent\Model;
|
|||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Laravel\Nova\Fields\BelongsTo;
|
use Laravel\Nova\Fields\BelongsTo;
|
||||||
use Laravel\Nova\Fields\DateTime;
|
use Laravel\Nova\Fields\DateTime;
|
||||||
|
use Laravel\Nova\Fields\Field;
|
||||||
use Laravel\Nova\Fields\ID;
|
use Laravel\Nova\Fields\ID;
|
||||||
use Laravel\Nova\Fields\Text;
|
use Laravel\Nova\Fields\Text;
|
||||||
use Laravel\Nova\Http\Requests\NovaRequest;
|
use Laravel\Nova\Http\Requests\NovaRequest;
|
||||||
@@ -47,6 +48,18 @@ class MeetupEvent extends Resource
|
|||||||
->toString()));
|
->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()
|
public function subtitle()
|
||||||
{
|
{
|
||||||
return __('Created by: :name', ['name' => $this->createdBy->name]);
|
return __('Created by: :name', ['name' => $this->createdBy->name]);
|
||||||
@@ -79,14 +92,16 @@ class MeetupEvent extends Resource
|
|||||||
->rules('required', 'string'),
|
->rules('required', 'string'),
|
||||||
|
|
||||||
BelongsTo::make('Meetup')
|
BelongsTo::make('Meetup')
|
||||||
->searchable()->withSubtitles(),
|
->searchable()
|
||||||
|
->withSubtitles(),
|
||||||
|
|
||||||
BelongsTo::make(__('Created By'), 'createdBy', User::class)
|
BelongsTo::make(__('Created By'), 'createdBy', User::class)
|
||||||
->canSee(function ($request) {
|
->canSee(function ($request) {
|
||||||
return $request->user()
|
return $request->user()
|
||||||
->hasRole('super-admin');
|
->hasRole('super-admin');
|
||||||
})
|
})
|
||||||
->searchable()->withSubtitles(),
|
->searchable()
|
||||||
|
->withSubtitles(),
|
||||||
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ class MeetupEventPolicy extends BasePolicy
|
|||||||
*/
|
*/
|
||||||
public function update(User $user, MeetupEvent $meetupEvent)
|
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)
|
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)
|
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)
|
public function delete(User $user, Meetup $meetup)
|
||||||
{
|
{
|
||||||
return false;
|
return $meetup->created_by === $user->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -109,7 +109,8 @@ return [
|
|||||||
DispatchServingNovaEvent::class,
|
DispatchServingNovaEvent::class,
|
||||||
BootTools::class,
|
BootTools::class,
|
||||||
\Itsmejoshua\Novaspatiepermissions\ForgetCachedPermissions::class,
|
\Itsmejoshua\Novaspatiepermissions\ForgetCachedPermissions::class,
|
||||||
'verified'
|
'verified',
|
||||||
|
'needMeetup',
|
||||||
],
|
],
|
||||||
|
|
||||||
'api_middleware' => [
|
'api_middleware' => [
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class CreateMeetupUserTable extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::disableForeignKeyConstraints();
|
||||||
|
|
||||||
|
Schema::create('meetup_user', function (Blueprint $table) {
|
||||||
|
$table->foreignId('meetup_id')
|
||||||
|
->constrained()
|
||||||
|
->cascadeOnDelete()
|
||||||
|
->cascadeOnUpdate();
|
||||||
|
$table->foreignId('user_id')
|
||||||
|
->constrained()
|
||||||
|
->cascadeOnDelete()
|
||||||
|
->cascadeOnUpdate();
|
||||||
|
$table->boolean('is_leader')
|
||||||
|
->default(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
Schema::enableForeignKeyConstraints();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('meetup_user');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -27,7 +27,6 @@ use Illuminate\Support\Carbon;
|
|||||||
use Illuminate\Support\Facades\Artisan;
|
use Illuminate\Support\Facades\Artisan;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use JoeDixon\Translation\Console\Commands\SynchroniseMissingTranslationKeys;
|
use JoeDixon\Translation\Console\Commands\SynchroniseMissingTranslationKeys;
|
||||||
use JoeDixon\Translation\Console\Commands\SynchroniseTranslationsCommand;
|
|
||||||
use Spatie\Permission\Models\Permission;
|
use Spatie\Permission\Models\Permission;
|
||||||
use Spatie\Permission\Models\Role;
|
use Spatie\Permission\Models\Role;
|
||||||
|
|
||||||
@@ -378,8 +377,8 @@ Deshalb werden Sie von mir in diesem Kurs leicht verständlich an das Thema hera
|
|||||||
Artisan::call(SyncOpenBooks::class);
|
Artisan::call(SyncOpenBooks::class);
|
||||||
Meetup::create([
|
Meetup::create([
|
||||||
'city_id' => 1,
|
'city_id' => 1,
|
||||||
'name' => 'Einundzwanzig Kempten',
|
'name' => 'Einundzwanzig ' . str()->random(5),
|
||||||
'link' => 'https://t.me/EinundzwanzigKempten',
|
'telegram_link' => 'https://t.me/EinundzwanzigKempten',
|
||||||
'created_by' => 1,
|
'created_by' => 1,
|
||||||
]);
|
]);
|
||||||
MeetupEvent::create([
|
MeetupEvent::create([
|
||||||
@@ -404,6 +403,60 @@ Deshalb werden Sie von mir in diesem Kurs leicht verständlich an das Thema hera
|
|||||||
'link' => 'https://t.me/EinundzwanzigKempten',
|
'link' => 'https://t.me/EinundzwanzigKempten',
|
||||||
'created_by' => 1,
|
'created_by' => 1,
|
||||||
]);
|
]);
|
||||||
|
Meetup::create([
|
||||||
|
'city_id' => 2,
|
||||||
|
'name' => 'Einundzwanzig ' . str()->random(5),
|
||||||
|
'telegram_link' => 'https://t.me/EinundzwanzigKempten',
|
||||||
|
'created_by' => 1,
|
||||||
|
]);
|
||||||
|
Meetup::create([
|
||||||
|
'city_id' => 3,
|
||||||
|
'name' => 'Einundzwanzig ' . str()->random(5),
|
||||||
|
'telegram_link' => 'https://t.me/EinundzwanzigKempten',
|
||||||
|
'created_by' => 1,
|
||||||
|
]);
|
||||||
|
Meetup::create([
|
||||||
|
'city_id' => 1,
|
||||||
|
'name' => 'Einundzwanzig ' . str()->random(5),
|
||||||
|
'telegram_link' => 'https://t.me/EinundzwanzigKempten',
|
||||||
|
'created_by' => 1,
|
||||||
|
]);
|
||||||
|
Meetup::create([
|
||||||
|
'city_id' => 1,
|
||||||
|
'name' => 'Einundzwanzig ' . str()->random(5),
|
||||||
|
'telegram_link' => 'https://t.me/EinundzwanzigKempten',
|
||||||
|
'created_by' => 1,
|
||||||
|
]);
|
||||||
|
Meetup::create([
|
||||||
|
'city_id' => 1,
|
||||||
|
'name' => 'Einundzwanzig ' . str()->random(5),
|
||||||
|
'telegram_link' => 'https://t.me/EinundzwanzigKempten',
|
||||||
|
'created_by' => 1,
|
||||||
|
]);
|
||||||
|
Meetup::create([
|
||||||
|
'city_id' => 1,
|
||||||
|
'name' => 'Einundzwanzig ' . str()->random(5),
|
||||||
|
'telegram_link' => 'https://t.me/EinundzwanzigKempten',
|
||||||
|
'created_by' => 1,
|
||||||
|
]);
|
||||||
|
Meetup::create([
|
||||||
|
'city_id' => 1,
|
||||||
|
'name' => 'Einundzwanzig ' . str()->random(5),
|
||||||
|
'telegram_link' => 'https://t.me/EinundzwanzigKempten',
|
||||||
|
'created_by' => 1,
|
||||||
|
]);
|
||||||
|
Meetup::create([
|
||||||
|
'city_id' => 1,
|
||||||
|
'name' => 'Einundzwanzig ' . str()->random(5),
|
||||||
|
'telegram_link' => 'https://t.me/EinundzwanzigKempten',
|
||||||
|
'created_by' => 1,
|
||||||
|
]);
|
||||||
|
Meetup::create([
|
||||||
|
'city_id' => 1,
|
||||||
|
'name' => 'Einundzwanzig ' . str()->random(5),
|
||||||
|
'telegram_link' => 'https://t.me/EinundzwanzigKempten',
|
||||||
|
'created_by' => 1,
|
||||||
|
]);
|
||||||
BitcoinEvent::create([
|
BitcoinEvent::create([
|
||||||
'venue_id' => 4,
|
'venue_id' => 4,
|
||||||
'from' => Carbon::parse('2023-09-12')
|
'from' => Carbon::parse('2023-09-12')
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
models:
|
|
||||||
Item:
|
|
||||||
name: string:unique
|
|
||||||
link: string
|
|
||||||
|
|||||||
@@ -644,5 +644,18 @@
|
|||||||
"points": "Punkte",
|
"points": "Punkte",
|
||||||
"Submit new book case": "Bücherschrank einreichen",
|
"Submit new book case": "Bücherschrank einreichen",
|
||||||
"Share url copied!": "Link kopiert!",
|
"Share url copied!": "Link kopiert!",
|
||||||
"Share link": "Link zum Teilen"
|
"Share link": "Link zum Teilen",
|
||||||
|
"Telegram-Link": "",
|
||||||
|
"Website": "",
|
||||||
|
"Twitter Username": "",
|
||||||
|
"Select one or more meetup groups so that you can get access to these groups in the backend.": "Suche dir eine oder mehrere Meetup-Gruppen aus, um Zugriff auf diese Gruppen im Backend zu erhalten.",
|
||||||
|
"choice": "Auswahl",
|
||||||
|
"By id": "nach ID",
|
||||||
|
"Twitter": "",
|
||||||
|
"New City": "Neue Stadt",
|
||||||
|
"My meetups": "Meine Meetups",
|
||||||
|
"please limit your search here": "bitte begrenze deine Suche hier",
|
||||||
|
"Deselect": "Abwählen",
|
||||||
|
"Your current Meetup groups": "Deine aktuellen Meetup-Gruppen",
|
||||||
|
"Thanks, continue here": "Danke, weiter geht es hier"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -640,5 +640,15 @@
|
|||||||
"Website": "",
|
"Website": "",
|
||||||
"Twitter Username": "",
|
"Twitter Username": "",
|
||||||
"Share url copied!": "",
|
"Share url copied!": "",
|
||||||
"Share link": ""
|
"Share link": "",
|
||||||
|
"Select one or more meetup groups so that you can get access to these groups in the backend.": "",
|
||||||
|
"choice": "",
|
||||||
|
"By id": "",
|
||||||
|
"Twitter": "",
|
||||||
|
"New City": "",
|
||||||
|
"My meetups": "",
|
||||||
|
"please limit your search here": "",
|
||||||
|
"Deselect": "",
|
||||||
|
"Your current Meetup groups": "",
|
||||||
|
"Thanks, continue here": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -634,5 +634,17 @@
|
|||||||
"You get a point when you log in.": "",
|
"You get a point when you log in.": "",
|
||||||
"points": "",
|
"points": "",
|
||||||
"All courses of :name": "",
|
"All courses of :name": "",
|
||||||
"Here you can see all events of :name.": ""
|
"Here you can see all events of :name.": "",
|
||||||
|
"By id": "",
|
||||||
|
"Telegram-Link": "",
|
||||||
|
"Website": "",
|
||||||
|
"Twitter Username": "",
|
||||||
|
"Share url copied!": "",
|
||||||
|
"Share link": "",
|
||||||
|
"Twitter": "",
|
||||||
|
"Submit new book case": "",
|
||||||
|
"choice": "",
|
||||||
|
"Select one or more meetup groups so that you can get access to these groups in the backend.": "",
|
||||||
|
"New City": "",
|
||||||
|
"My meetups": ""
|
||||||
}
|
}
|
||||||
@@ -634,5 +634,17 @@
|
|||||||
"You get a point when you log in.": "",
|
"You get a point when you log in.": "",
|
||||||
"points": "",
|
"points": "",
|
||||||
"All courses of :name": "",
|
"All courses of :name": "",
|
||||||
"Here you can see all events of :name.": ""
|
"Here you can see all events of :name.": "",
|
||||||
|
"By id": "",
|
||||||
|
"Telegram-Link": "",
|
||||||
|
"Website": "",
|
||||||
|
"Twitter Username": "",
|
||||||
|
"Share url copied!": "",
|
||||||
|
"Share link": "",
|
||||||
|
"Twitter": "",
|
||||||
|
"Submit new book case": "",
|
||||||
|
"choice": "",
|
||||||
|
"Select one or more meetup groups so that you can get access to these groups in the backend.": "",
|
||||||
|
"New City": "",
|
||||||
|
"My meetups": ""
|
||||||
}
|
}
|
||||||
@@ -634,5 +634,17 @@
|
|||||||
"You get a point when you log in.": "",
|
"You get a point when you log in.": "",
|
||||||
"points": "",
|
"points": "",
|
||||||
"All courses of :name": "",
|
"All courses of :name": "",
|
||||||
"Here you can see all events of :name.": ""
|
"Here you can see all events of :name.": "",
|
||||||
|
"By id": "",
|
||||||
|
"Telegram-Link": "",
|
||||||
|
"Website": "",
|
||||||
|
"Twitter Username": "",
|
||||||
|
"Share url copied!": "",
|
||||||
|
"Share link": "",
|
||||||
|
"Twitter": "",
|
||||||
|
"Submit new book case": "",
|
||||||
|
"choice": "",
|
||||||
|
"Select one or more meetup groups so that you can get access to these groups in the backend.": "",
|
||||||
|
"New City": "",
|
||||||
|
"My meetups": ""
|
||||||
}
|
}
|
||||||
@@ -634,5 +634,17 @@
|
|||||||
"You get a point when you log in.": "",
|
"You get a point when you log in.": "",
|
||||||
"points": "",
|
"points": "",
|
||||||
"All courses of :name": "",
|
"All courses of :name": "",
|
||||||
"Here you can see all events of :name.": ""
|
"Here you can see all events of :name.": "",
|
||||||
|
"By id": "",
|
||||||
|
"Telegram-Link": "",
|
||||||
|
"Website": "",
|
||||||
|
"Twitter Username": "",
|
||||||
|
"Share url copied!": "",
|
||||||
|
"Share link": "",
|
||||||
|
"Twitter": "",
|
||||||
|
"Submit new book case": "",
|
||||||
|
"choice": "",
|
||||||
|
"Select one or more meetup groups so that you can get access to these groups in the backend.": "",
|
||||||
|
"New City": "",
|
||||||
|
"My meetups": ""
|
||||||
}
|
}
|
||||||
@@ -634,5 +634,17 @@
|
|||||||
"You get a point when you log in.": "",
|
"You get a point when you log in.": "",
|
||||||
"points": "",
|
"points": "",
|
||||||
"All courses of :name": "",
|
"All courses of :name": "",
|
||||||
"Here you can see all events of :name.": ""
|
"Here you can see all events of :name.": "",
|
||||||
|
"By id": "",
|
||||||
|
"Telegram-Link": "",
|
||||||
|
"Website": "",
|
||||||
|
"Twitter Username": "",
|
||||||
|
"Share url copied!": "",
|
||||||
|
"Share link": "",
|
||||||
|
"Twitter": "",
|
||||||
|
"Submit new book case": "",
|
||||||
|
"choice": "",
|
||||||
|
"Select one or more meetup groups so that you can get access to these groups in the backend.": "",
|
||||||
|
"New City": "",
|
||||||
|
"My meetups": ""
|
||||||
}
|
}
|
||||||
@@ -634,5 +634,17 @@
|
|||||||
"You get a point when you log in.": "",
|
"You get a point when you log in.": "",
|
||||||
"points": "",
|
"points": "",
|
||||||
"All courses of :name": "",
|
"All courses of :name": "",
|
||||||
"Here you can see all events of :name.": ""
|
"Here you can see all events of :name.": "",
|
||||||
|
"By id": "",
|
||||||
|
"Telegram-Link": "",
|
||||||
|
"Website": "",
|
||||||
|
"Twitter Username": "",
|
||||||
|
"Share url copied!": "",
|
||||||
|
"Share link": "",
|
||||||
|
"Twitter": "",
|
||||||
|
"Submit new book case": "",
|
||||||
|
"choice": "",
|
||||||
|
"Select one or more meetup groups so that you can get access to these groups in the backend.": "",
|
||||||
|
"New City": "",
|
||||||
|
"My meetups": ""
|
||||||
}
|
}
|
||||||
@@ -634,5 +634,17 @@
|
|||||||
"You get a point when you log in.": "",
|
"You get a point when you log in.": "",
|
||||||
"points": "",
|
"points": "",
|
||||||
"All courses of :name": "",
|
"All courses of :name": "",
|
||||||
"Here you can see all events of :name.": ""
|
"Here you can see all events of :name.": "",
|
||||||
|
"By id": "",
|
||||||
|
"Telegram-Link": "",
|
||||||
|
"Website": "",
|
||||||
|
"Twitter Username": "",
|
||||||
|
"Share url copied!": "",
|
||||||
|
"Share link": "",
|
||||||
|
"Twitter": "",
|
||||||
|
"Submit new book case": "",
|
||||||
|
"choice": "",
|
||||||
|
"Select one or more meetup groups so that you can get access to these groups in the backend.": "",
|
||||||
|
"New City": "",
|
||||||
|
"My meetups": ""
|
||||||
}
|
}
|
||||||
@@ -608,5 +608,17 @@
|
|||||||
"You get a point when you log in.": "",
|
"You get a point when you log in.": "",
|
||||||
"points": "",
|
"points": "",
|
||||||
"All courses of :name": "",
|
"All courses of :name": "",
|
||||||
"Here you can see all events of :name.": ""
|
"Here you can see all events of :name.": "",
|
||||||
|
"By id": "",
|
||||||
|
"Telegram-Link": "",
|
||||||
|
"Website": "",
|
||||||
|
"Twitter Username": "",
|
||||||
|
"Share url copied!": "",
|
||||||
|
"Share link": "",
|
||||||
|
"Twitter": "",
|
||||||
|
"Submit new book case": "",
|
||||||
|
"choice": "",
|
||||||
|
"Select one or more meetup groups so that you can get access to these groups in the backend.": "",
|
||||||
|
"New City": "",
|
||||||
|
"My meetups": ""
|
||||||
}
|
}
|
||||||
@@ -11,6 +11,7 @@
|
|||||||
"Remove sort option": "Entferne Sortierauswahl",
|
"Remove sort option": "Entferne Sortierauswahl",
|
||||||
"Search": "Suche",
|
"Search": "Suche",
|
||||||
"Select All": "Alle auswählen",
|
"Select All": "Alle auswählen",
|
||||||
|
"Select": "Auswählen",
|
||||||
"Showing": "Anzeigen",
|
"Showing": "Anzeigen",
|
||||||
"Deselect All": "Alle abwählen",
|
"Deselect All": "Alle abwählen",
|
||||||
"You are currently selecting all": "Es sind schon alle ausgewählt",
|
"You are currently selecting all": "Es sind schon alle ausgewählt",
|
||||||
|
|||||||
109
resources/views/livewire/profile/meetups.blade.php
Normal file
109
resources/views/livewire/profile/meetups.blade.php
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
<div class="flex flex-col">
|
||||||
|
<section class="">
|
||||||
|
<div class="px-10 pt-6 mx-auto max-w-7xl">
|
||||||
|
<div class="w-full mx-auto text-left md:text-center">
|
||||||
|
<h1 class="mb-6 text-5xl font-extrabold leading-none max-w-5xl mx-auto tracking-normal text-gray-900 sm:text-6xl md:text-6xl lg:text-7xl md:tracking-tight">
|
||||||
|
<span
|
||||||
|
class="w-full text-transparent bg-clip-text bg-gradient-to-r from-amber-400 via-amber-500 to-amber-500 lg:inline">{{ __('Meetup') }}</span>
|
||||||
|
<br class="lg:block hidden"> {{ __('choice') }}
|
||||||
|
</h1>
|
||||||
|
<p class="px-0 mb-6 text-lg text-gray-200 md:text-xl lg:px-24">
|
||||||
|
{{ __('Select one or more meetup groups so that you can get access to these groups in the backend.') }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section x-data="{ open: @entangle('hasMeetups') }"
|
||||||
|
x-show="open"
|
||||||
|
x-transition:enter="transition ease-out duration-300"
|
||||||
|
x-transition:enter-start="opacity-0 scale-90"
|
||||||
|
x-transition:enter-end="opacity-100 scale-100"
|
||||||
|
x-transition:leave="transition ease-in duration-300"
|
||||||
|
x-transition:leave-start="opacity-100 scale-100"
|
||||||
|
x-transition:leave-end="opacity-0 scale-90"
|
||||||
|
>
|
||||||
|
<div class="px-10 pt-6 mx-auto max-w-7xl">
|
||||||
|
<div class="w-full mx-auto text-left md:text-center">
|
||||||
|
<p class="px-0 mb-6 text-lg text-gray-200 md:text-xl lg:px-24">
|
||||||
|
<x-button href="/" primary lg>
|
||||||
|
{{ __('Thanks, continue here') }}
|
||||||
|
</x-button>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div class="grid grid-cols-2">
|
||||||
|
<div class="">
|
||||||
|
<div class="px-10 pt-6 mx-auto max-w-7xl">
|
||||||
|
<div class="bg-21gray p-6 rounded">
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<x-input wire:model="search" placeholder="{{ __('Search') }}"
|
||||||
|
hint="{{ __('please limit your search here') }}"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mt-6 flow-root">
|
||||||
|
|
||||||
|
<ul role="list" class="-my-5 divide-y divide-gray-200">
|
||||||
|
|
||||||
|
@foreach($meetups as $meetup)
|
||||||
|
|
||||||
|
@php
|
||||||
|
$activeClass = in_array($meetup->id, $myMeetups, true) ? 'font-bold text-amber-500' : 'text-gray-200';
|
||||||
|
@endphp
|
||||||
|
|
||||||
|
<li class="py-4" wire:key="meetup_id_{{ $meetup->id }}">
|
||||||
|
<div class="flex items-center space-x-4">
|
||||||
|
<div class="flex-shrink-0">
|
||||||
|
<img class="h-12 w-12 rounded object-cover"
|
||||||
|
src="{{ $meetup->getFirstMediaUrl('logo') }}"
|
||||||
|
alt="{{ $meetup->name }}">
|
||||||
|
</div>
|
||||||
|
<div class="min-w-0 flex-1">
|
||||||
|
<p class="truncate text-sm font-medium {{ $activeClass }}">{{ $meetup->name }}</p>
|
||||||
|
<p class="truncate text-sm {{ $activeClass }}">{{ $meetup->city->name }}</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
@if(in_array($meetup->id, $myMeetups, true))
|
||||||
|
<x-button
|
||||||
|
primary
|
||||||
|
wire:click="signUpForMeetup({{ $meetup->id }})"
|
||||||
|
>
|
||||||
|
<i class="fa-thin fa-xmark"></i>
|
||||||
|
{{ __('Deselect') }}
|
||||||
|
</x-button>
|
||||||
|
@else
|
||||||
|
<x-button
|
||||||
|
black
|
||||||
|
wire:click="signUpForMeetup({{ $meetup->id }})"
|
||||||
|
>
|
||||||
|
<i class="fa-thin fa-check"></i>
|
||||||
|
{{ __('Select') }}
|
||||||
|
</x-button>
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
@endforeach
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="p-4">
|
||||||
|
<p class="px-0 mb-6 text-lg text-gray-200 md:text-xl">
|
||||||
|
{{ __('Your current Meetup groups') }}
|
||||||
|
</p>
|
||||||
|
<div class="grid grid-cols-4 gap-2">
|
||||||
|
@foreach($myMeetupNames as $id => $myMeetupName)
|
||||||
|
<x-badge class="cursor-pointer" wire:click="signUpForMeetup({{ $id }})" lg outline white
|
||||||
|
label="{{ $myMeetupName }}"/>
|
||||||
|
@endforeach
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -83,6 +83,14 @@
|
|||||||
{{ __('My profile') }}
|
{{ __('My profile') }}
|
||||||
</x-button>
|
</x-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<x-button xs amber href="{{ route('profile.meetups') }}"
|
||||||
|
:active="request()->routeIs('profile.meetups')">
|
||||||
|
<i class="fa fa-thin fa-users"></i>
|
||||||
|
{{ __('My meetups') }}
|
||||||
|
</x-button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -3,9 +3,16 @@
|
|||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
use Laravel\Socialite\Facades\Socialite;
|
use Laravel\Socialite\Facades\Socialite;
|
||||||
|
|
||||||
Route::get('/', \App\Http\Livewire\Frontend\Welcome::class)
|
Route::middleware([
|
||||||
|
'needMeetup',
|
||||||
|
])
|
||||||
|
->get('/', \App\Http\Livewire\Frontend\Welcome::class)
|
||||||
->name('welcome');
|
->name('welcome');
|
||||||
|
|
||||||
|
Route::middleware([])
|
||||||
|
->get('/my-meetups', \App\Http\Livewire\Profile\Meetups::class)
|
||||||
|
->name('profile.meetups');
|
||||||
|
|
||||||
Route::get('/auth/ln', \App\Http\Livewire\Auth\LNUrlAuth::class)
|
Route::get('/auth/ln', \App\Http\Livewire\Auth\LNUrlAuth::class)
|
||||||
->name('auth.ln')
|
->name('auth.ln')
|
||||||
->middleware('guest');
|
->middleware('guest');
|
||||||
@@ -42,7 +49,9 @@ Route::get('/auth/twitter/callback', function () {
|
|||||||
/*
|
/*
|
||||||
* School
|
* School
|
||||||
* */
|
* */
|
||||||
Route::middleware([])
|
Route::middleware([
|
||||||
|
'needMeetup',
|
||||||
|
])
|
||||||
->as('school.')
|
->as('school.')
|
||||||
->prefix('/{country:code}/school')
|
->prefix('/{country:code}/school')
|
||||||
->group(function () {
|
->group(function () {
|
||||||
@@ -68,7 +77,9 @@ Route::middleware([])
|
|||||||
/*
|
/*
|
||||||
* Library
|
* Library
|
||||||
* */
|
* */
|
||||||
Route::middleware([])
|
Route::middleware([
|
||||||
|
'needMeetup',
|
||||||
|
])
|
||||||
->as('library.')
|
->as('library.')
|
||||||
->prefix('/{country:code}/library')
|
->prefix('/{country:code}/library')
|
||||||
->group(function () {
|
->group(function () {
|
||||||
@@ -82,7 +93,9 @@ Route::middleware([])
|
|||||||
/*
|
/*
|
||||||
* Books
|
* Books
|
||||||
* */
|
* */
|
||||||
Route::middleware([])
|
Route::middleware([
|
||||||
|
'needMeetup',
|
||||||
|
])
|
||||||
->as('bookCases.')
|
->as('bookCases.')
|
||||||
->prefix('/{country:code}/book-cases')
|
->prefix('/{country:code}/book-cases')
|
||||||
->group(function () {
|
->group(function () {
|
||||||
@@ -102,7 +115,9 @@ Route::middleware([])
|
|||||||
/*
|
/*
|
||||||
* Events
|
* Events
|
||||||
* */
|
* */
|
||||||
Route::middleware([])
|
Route::middleware([
|
||||||
|
'needMeetup',
|
||||||
|
])
|
||||||
->as('bitcoinEvent.')
|
->as('bitcoinEvent.')
|
||||||
->prefix('/{country:code}/event')
|
->prefix('/{country:code}/event')
|
||||||
->group(function () {
|
->group(function () {
|
||||||
@@ -116,7 +131,9 @@ Route::middleware([])
|
|||||||
/*
|
/*
|
||||||
* Meetups
|
* Meetups
|
||||||
* */
|
* */
|
||||||
Route::middleware([])
|
Route::middleware([
|
||||||
|
'needMeetup',
|
||||||
|
])
|
||||||
->as('meetup.')
|
->as('meetup.')
|
||||||
->prefix('/{country:code}/meetup')
|
->prefix('/{country:code}/meetup')
|
||||||
->group(function () {
|
->group(function () {
|
||||||
@@ -138,7 +155,8 @@ Route::middleware([])
|
|||||||
Route::middleware([
|
Route::middleware([
|
||||||
'auth:sanctum',
|
'auth:sanctum',
|
||||||
config('jetstream.auth_session'),
|
config('jetstream.auth_session'),
|
||||||
'verified'
|
'verified',
|
||||||
|
'needMeetup',
|
||||||
])
|
])
|
||||||
->group(function () {
|
->group(function () {
|
||||||
Route::get('/dashboard', function () {
|
Route::get('/dashboard', function () {
|
||||||
|
|||||||
Reference in New Issue
Block a user