*/ use HasFactory, HasUniqueSlug, SoftDeletes; /** * @return list */ protected function slugScopeAttributes(): array { return ['portal']; } protected function slugFallback(): string { return 'company'; } protected static function booted(): void { static::addGlobalScope(new PortalScope); } protected $fillable = [ 'portal', 'owner_user_id', 'type', 'name', 'slug', 'address', 'country_code', 'phone', 'fax', 'email', 'website', 'logo_path', 'logo_variants', 'boilerplate', 'is_active', 'disable_footer_code', 'legacy_portal', 'legacy_id', ]; protected function casts(): array { return [ 'portal' => Portal::class, 'type' => CompanyType::class, 'logo_variants' => 'array', 'is_active' => 'boolean', 'disable_footer_code' => 'boolean', 'deleted_at' => 'datetime', ]; } public function owner(): BelongsTo { return $this->belongsTo(User::class, 'owner_user_id'); } public function users(): BelongsToMany { return $this->belongsToMany(User::class) ->withPivot('role') ->withTimestamps(); } public function contacts(): HasMany { return $this->hasMany(Contact::class); } public function pressReleases(): HasMany { return $this->hasMany(PressRelease::class); } public function userPaymentOptions(): BelongsToMany { return $this->belongsToMany(UserPaymentOption::class, 'user_payment_option_company') ->withPivot('is_active') ->withTimestamps(); } public function logoUrl(): ?string { if (blank($this->logo_path)) { return null; } $logoPath = trim((string) $this->logo_path); $legacyPortal = $this->legacy_portal ?: $this->portal?->value; $logoFilename = basename((string) (parse_url($logoPath, PHP_URL_PATH) ?: $logoPath)); $candidates = []; if (Str::startsWith($logoPath, '/storage/')) { $candidates[] = Str::after($logoPath, '/storage/'); } elseif (! Str::startsWith($logoPath, ['http://', 'https://'])) { $candidates[] = ltrim($logoPath, '/'); } if ($legacyPortal && filled($logoFilename)) { $candidates[] = "company-logos/{$legacyPortal}/{$this->id}/{$logoFilename}"; $candidates[] = "{$legacyPortal}/company/{$logoFilename}"; } foreach (array_unique($candidates) as $candidate) { if (Storage::disk('public')->exists($candidate)) { return asset('storage/'.$candidate); } } if (Str::startsWith($logoPath, ['http://', 'https://']) && blank($this->legacy_portal)) { return $logoPath; } return null; } }