123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- <?php
-
- namespace App\Actions\FilamentCompanies;
-
- use App\Models\Company;
- use App\Models\User;
- use Illuminate\Support\Facades\DB;
- use Laravel\Socialite\Contracts\User as ProviderUserContract;
- use Wallo\FilamentCompanies\Contracts\CreatesConnectedAccounts;
- use Wallo\FilamentCompanies\Contracts\CreatesUserFromProvider;
- use Wallo\FilamentCompanies\Enums\Feature;
- use Wallo\FilamentCompanies\FilamentCompanies;
-
- class CreateUserFromProvider implements CreatesUserFromProvider
- {
- /**
- * The creates connected accounts instance.
- */
- public CreatesConnectedAccounts $createsConnectedAccounts;
-
- /**
- * Create a new action instance.
- */
- public function __construct(CreatesConnectedAccounts $createsConnectedAccounts)
- {
- $this->createsConnectedAccounts = $createsConnectedAccounts;
- }
-
- /**
- * Create a new user from a social provider user.
- */
- public function create(string $provider, ProviderUserContract $providerUser): User
- {
- return DB::transaction(function () use ($providerUser, $provider) {
- return tap(User::create([
- 'name' => $providerUser->getName(),
- 'email' => $providerUser->getEmail(),
- ]), function (User $user) use ($providerUser, $provider) {
- $user->markEmailAsVerified();
-
- if ($this->shouldSetProfilePhoto($providerUser)) {
- $user->setProfilePhotoFromUrl($providerUser->getAvatar());
- }
-
- $user->switchConnectedAccount(
- $this->createsConnectedAccounts->create($user, $provider, $providerUser)
- );
-
- // $this->createCompany($user); // Commented out to prevent creating a company for a Socialite user
- });
- });
- }
-
- private function shouldSetProfilePhoto(ProviderUserContract $providerUser): bool
- {
- return Feature::ProviderAvatars->isEnabled() &&
- FilamentCompanies::managesProfilePhotos() &&
- $providerUser->getAvatar();
- }
-
- /**
- * Create a personal company for the user.
- */
- protected function createCompany(User $user): void
- {
- $user->ownedCompanies()->save(Company::forceCreate([
- 'user_id' => $user->id,
- 'name' => explode(' ', $user->name, 2)[0] . "'s Company",
- 'personal_company' => true,
- ]));
- }
- }
|