Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

CreateUserFromProvider.php 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace App\Actions\FilamentCompanies;
  3. use App\Models\{Company, User};
  4. use Illuminate\Support\Facades\DB;
  5. use Laravel\Socialite\Contracts\User as ProviderUserContract;
  6. use Wallo\FilamentCompanies\Contracts\{CreatesConnectedAccounts, CreatesUserFromProvider};
  7. use Wallo\FilamentCompanies\{Features, Socialite};
  8. class CreateUserFromProvider implements CreatesUserFromProvider
  9. {
  10. /**
  11. * The creates connected accounts instance.
  12. */
  13. public CreatesConnectedAccounts $createsConnectedAccounts;
  14. /**
  15. * Create a new action instance.
  16. */
  17. public function __construct(CreatesConnectedAccounts $createsConnectedAccounts)
  18. {
  19. $this->createsConnectedAccounts = $createsConnectedAccounts;
  20. }
  21. /**
  22. * Create a new user from a social provider user.
  23. */
  24. public function create(string $provider, ProviderUserContract $providerUser): User
  25. {
  26. return DB::transaction(function () use ($providerUser, $provider) {
  27. return tap(User::create([
  28. 'name' => $providerUser->getName(),
  29. 'email' => $providerUser->getEmail(),
  30. ]), function (User $user) use ($providerUser, $provider) {
  31. $user->markEmailAsVerified();
  32. if ($this->shouldSetProfilePhoto($providerUser)) {
  33. $user->setProfilePhotoFromUrl($providerUser->getAvatar());
  34. }
  35. $user->switchConnectedAccount(
  36. $this->createsConnectedAccounts->create($user, $provider, $providerUser)
  37. );
  38. // $this->createCompany($user); // Commented out to prevent creating a company for a Socialite user
  39. });
  40. });
  41. }
  42. private function shouldSetProfilePhoto(ProviderUserContract $providerUser): bool
  43. {
  44. return Socialite::hasProviderAvatarsFeature() &&
  45. Features::managesProfilePhotos() &&
  46. $providerUser->getAvatar();
  47. }
  48. /**
  49. * Create a personal company for the user.
  50. */
  51. protected function createCompany(User $user): void
  52. {
  53. $user->ownedCompanies()->save(Company::forceCreate([
  54. 'user_id' => $user->id,
  55. 'name' => explode(' ', $user->name, 2)[0] . "'s Company",
  56. 'personal_company' => true,
  57. ]));
  58. }
  59. }