Skip to content

Commit

Permalink
wip on verifeid (#282)
Browse files Browse the repository at this point in the history
* wip on verifeid

* add TernaryFilter in Resource Organization.

* wip on events

* Add events for user deleting, refactoring events structure

* Add events for user deleting, refactoring events structure
  • Loading branch information
gheorghelupu17 committed Sep 5, 2023
1 parent b39e60c commit 95b8f6e
Show file tree
Hide file tree
Showing 28 changed files with 214 additions and 46 deletions.
4 changes: 3 additions & 1 deletion app/Console/Kernel.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ class Kernel extends ConsoleKernel
*/
protected function schedule(Schedule $schedule): void
{
// $schedule->command('inspire')->hourly();
// $schedule->command('inspire')->hourly();
$schedule->command('model:prune')->daily();

}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace App\Events;
namespace App\Events\Ticket;

use App\Models\Ticket;
use Illuminate\Broadcasting\InteractsWithSockets;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace App\Events;
namespace App\Events\Ticket;

use App\Models\TicketMessage;
use Illuminate\Broadcasting\InteractsWithSockets;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace App\Events;
namespace App\Events\Ticket;

use App\Models\Ticket;
use Illuminate\Broadcasting\InteractsWithSockets;
Expand Down
27 changes: 27 additions & 0 deletions app/Events/User/UserDeleting.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

namespace App\Events\User;

use App\Models\User;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class UserDeleting
{
use Dispatchable;
use InteractsWithSockets;
use SerializesModels;

public User $user;

/**
* Create a new event instance.
*/
public function __construct(User $user)
{
$this->user = $user;
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
use Filament\Tables\Filters\Filter;
use Filament\Tables\Filters\Layout;
use Filament\Tables\Filters\SelectFilter;
use Filament\Tables\Filters\TernaryFilter;
use Filament\Widgets\TableWidget as BaseWidget;
use Illuminate\Contracts\Pagination\Paginator;
use Illuminate\Database\Eloquent\Builder;
Expand Down Expand Up @@ -116,35 +117,53 @@ protected function getTableFilters(): array
->placeholder(__('organization.filters.activity_domains_placeholder'))
->multiple(),

Filter::make('accepts_volunteers')
->toggle()
TernaryFilter::make('accepts_volunteers')
->label(__('organization.filters.accepts_volunteers'))
->query(fn (Builder $query) => $query->whereAcceptsVolunteers()),
->queries(
true: fn (Builder $query) => $query->whereAcceptsVolunteers(),
false: fn (Builder $query) => $query->whereDoesntAcceptsVolunteers(),
blank: fn (Builder $query) => $query,
),

Filter::make('has_volunteers')
->toggle()
TernaryFilter::make('has_volunteers')
->label(__('organization.filters.has_volunteers'))
->query(fn (Builder $query) => $query->whereHasVolunteers()),
->queries(
true: fn (Builder $query) => $query->whereHasVolunteers(),
false: fn (Builder $query) => $query->whereDoesntHaveVolunteers(),
blank: fn (Builder $query) => $query,
),

Filter::make('has_projects')
->toggle()
TernaryFilter::make('has_projects')
->label(__('organization.filters.has_projects'))
->query(fn (Builder $query) => $query->whereHasProjects()),
->queries(
true: fn (Builder $query) => $query->whereHasProjects(),
false: fn (Builder $query) => $query->whereDoesntHaveProjects(),
blank: fn (Builder $query) => $query,
),

Filter::make('has_active_projects')
->toggle()
TernaryFilter::make('has_active_projects')
->label(__('organization.filters.has_active_projects'))
->query(fn (Builder $query) => $query->whereHasActiveProjects()),
->queries(
true: fn (Builder $query) => $query->whereHasActiveProjects(),
false: fn (Builder $query) => $query->whereDoesntHaveActiveProjects(),
blank: fn (Builder $query) => $query,
),

Filter::make('has_eu_platesc')
->toggle()
TernaryFilter::make('has_eu_platesc')
->label(__('organization.filters.has_eu_platesc'))
->query(fn (Builder $query) => $query->whereHasEuPlatesc()),
->queries(
true: fn (Builder $query) => $query->whereHasEuPlatesc(),
false: fn (Builder $query) => $query->whereDoesntHaveEuPlatesc(),
blank: fn (Builder $query) => $query,
),

Filter::make('has_donations')
->toggle()
TernaryFilter::make('has_donations')
->label(__('organization.filters.has_donations'))
->query(fn (Builder $query) => $query->whereHasDonations()),
->queries(
true: fn (Builder $query) => $query->whereHasDonations(),
false: fn (Builder $query) => $query->whereDoesntHaveDonations(),
blank: fn (Builder $query) => $query,
)

];
}
Expand Down
2 changes: 2 additions & 0 deletions app/Http/Controllers/Auth/RegisteredUserController.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
use Illuminate\Auth\Events\Registered;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Notification;
Expand Down Expand Up @@ -78,6 +79,7 @@ public function store(RegistrationRequest $request): RedirectResponse
$user->organization_id = $organization->id;
$user->save();
}
Auth::login($user);

return redirect()->route('register')->with('success_message', ['message' => 'Contul a fost creat', 'usrid' => $user['id']]);
} catch(\Throwable $th) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

declare(strict_types=1);

namespace App\Listeners;
namespace App\Listeners\Ticket;

use App\Events\TicketCreated;
use App\Events\Ticket\TicketCreated;
use App\Models\User;
use App\Notifications\Admin;
use App\Notifications\Ngo;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

declare(strict_types=1);

namespace App\Listeners;
namespace App\Listeners\Ticket;

use App\Events\TicketReplyReceived;
use App\Events\Ticket\TicketReplyReceived;
use App\Models\User;
use App\Notifications\Admin;
use App\Notifications\Ngo;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

declare(strict_types=1);

namespace App\Listeners;
namespace App\Listeners\Ticket;

use App\Events\TicketUpdated;
use App\Events\Ticket\TicketUpdated;
use App\Models\User;
use App\Notifications\Admin;
use App\Notifications\Ngo;
Expand Down
24 changes: 24 additions & 0 deletions app/Listeners/User/UserDeletingListener.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

namespace App\Listeners\User;

use App\Events\User\UserDeleting;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Log;

class UserDeletingListener
{
/**
* Handle the event.
*/
public function handle(UserDeleting $event): void
{
$user = $event->user->loadMissing('organization');
Log::info('UserDeletingListener', [
'user' => $user->id,
'organization' => $event->user->organization->id,
]);
$user->organization->delete();
}
}
32 changes: 32 additions & 0 deletions app/Models/Organization.php
Original file line number Diff line number Diff line change
Expand Up @@ -143,32 +143,64 @@ public function scopeWhereAcceptsVolunteers(Builder $query): Builder
return $query->where('accepts_volunteers', true);
}

public function scopeWhereDoesntAcceptsVolunteers(Builder $query): Builder
{
return $query->where('accepts_volunteers', false);
}

public function scopeWhereHasVolunteers(Builder $query): Builder
{
return $query->whereHas('volunteers');
}

public function scopeWhereDoesntHaveVolunteers(Builder $query): Builder
{
return $query->whereDoesntHave('volunteers');
}

public function scopeWhereHasProjects(Builder $query): Builder
{
return $query->whereHas('projects');
}

public function scopeWhereDoesntHaveProjects(Builder $query): Builder
{
return $query->whereDoesntHave('projects');
}


public function scopeWhereHasActiveProjects(Builder $query): Builder
{
return $query->whereRelation('projects', 'status', ProjectStatus::active);
}

public function scopeWhereDoesntHaveActiveProjects(Builder $query): Builder
{
return $query->whereRelation('projects', 'status', '!=', ProjectStatus::active);
}


public function scopeWhereHasEuPlatesc(Builder $query): Builder
{
return $query->whereNotNull('eu_platesc_merchant_id')
->whereNotNull('eu_platesc_private_key');
}
public function scopeWhereDoesntHaveEuPlatesc(Builder $query): Builder
{
return $query->whereNull('eu_platesc_merchant_id')
->orWhereNull('eu_platesc_private_key');
}

public function scopeWhereHasDonations(Builder $query): Builder
{
return $query->whereHas('projects.donations');
}

public function scopeWhereDoesntHaveDonations(Builder $query): Builder
{
return $query->whereDoesntHave('projects.donations');
}

public function getAdministrators(): Collection
{
return $this->users()
Expand Down
4 changes: 2 additions & 2 deletions app/Models/Ticket.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

namespace App\Models;

use App\Events\TicketCreated;
use App\Events\TicketUpdated;
use App\Events\Ticket\TicketCreated;
use App\Events\Ticket\TicketUpdated;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
Expand Down
2 changes: 1 addition & 1 deletion app/Models/TicketMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

namespace App\Models;

use App\Events\TicketReplyReceived;
use App\Events\Ticket\TicketReplyReceived;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
Expand Down
20 changes: 17 additions & 3 deletions app/Models/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,28 @@

namespace App\Models;

// use Illuminate\Contracts\Auth\MustVerifyEmail;
use App\Concerns\MustSetInitialPassword;
use App\Events\User\UserDeleting;
use App\Traits\HasRole;
use Filament\Models\Contracts\FilamentUser;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Prunable;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable implements FilamentUser
class User extends Authenticatable implements FilamentUser, MustVerifyEmail
{
use HasApiTokens;
use HasFactory;
use Notifiable;
use HasRole;
use MustSetInitialPassword;
use Prunable;

/**
* The attributes that are mass assignable.
Expand Down Expand Up @@ -58,6 +62,10 @@ class User extends Authenticatable implements FilamentUser
'email_verified_at' => 'datetime',
];

protected $dispatchesEvents = [
'deleting' => UserDeleting::class,
];

public function badges(): BelongsToMany
{
return $this->belongsToMany(Badge::class)
Expand All @@ -77,11 +85,17 @@ public function currentOrganization(): Organization

public function canAccessFilament(): bool
{
return $this->isBBAdmin() || $this->isBBManager();
return $this->isBBAdmin() || $this->isBBManager();
}

public function getFilamentName(): string
{
return "{$this->name}";
}

public function prunable(): Builder
{
return static::whereNull('email_verified_at')->where('created_at', '<=', now()->subHours(48));
}

}
8 changes: 8 additions & 0 deletions app/Providers/AuthServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@
use App\Models\Project;
use App\Policies\OrganizationPolicy;
use App\Policies\ProjectPolicy;
use Illuminate\Auth\Notifications\VerifyEmail;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Support\Facades\Gate;

class AuthServiceProvider extends ServiceProvider
Expand All @@ -32,5 +34,11 @@ public function boot(): void
Gate::define('view-project', function ($user) {
return $user->isAdmin();
});
VerifyEmail::toMailUsing(function ($notifiable, $url) {
return (new MailMessage)
->subject(__('auth.mail.verify_email.subject'))
->line(__('auth.mail.verify_email.line_1'))
->action(__('auth.mail.verify_email.action'), $url);
});
}
}
2 changes: 1 addition & 1 deletion database/migrations/2023_05_05_142245_update_users.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public function up(): void
$table->string('phone')->nullable();
$table->string('source_of_information')->nullable();
$table->timestamp('password_set_at')->nullable();
$table->foreignIdFor(Organization::class)->nullable()->constrained();
$table->foreignIdFor(Organization::class)->nullable()->constrained()->onDelete('cascade');
});
}

Expand Down
Loading

0 comments on commit 95b8f6e

Please sign in to comment.