Implement academy analytics, billing, and web stories updates
This commit is contained in:
@@ -18,8 +18,13 @@ use App\Models\ConversationParticipant;
|
||||
use App\Models\AcademyBadge;
|
||||
use App\Models\AcademyCourseEnrollment;
|
||||
use App\Models\AcademyChallengeSubmission;
|
||||
use App\Models\AcademyEvent;
|
||||
use App\Models\AcademyLike;
|
||||
use App\Models\AcademyLessonProgress;
|
||||
use App\Models\AcademySave;
|
||||
use App\Models\AcademySavedPrompt;
|
||||
use App\Models\AcademySearchLog;
|
||||
use App\Models\AcademyUserProgress;
|
||||
use App\Models\Message;
|
||||
use App\Models\Notification;
|
||||
use App\Models\Achievement;
|
||||
@@ -30,6 +35,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Laravel\Cashier\Billable;
|
||||
use Laravel\Scout\Searchable;
|
||||
|
||||
class User extends Authenticatable
|
||||
@@ -40,7 +46,7 @@ class User extends Authenticatable
|
||||
];
|
||||
|
||||
/** @use HasFactory<\Database\Factories\UserFactory> */
|
||||
use HasFactory, Notifiable, SoftDeletes;
|
||||
use Billable, HasFactory, Notifiable, SoftDeletes;
|
||||
use Searchable {
|
||||
Searchable::bootSearchable as private bootScoutSearchable;
|
||||
}
|
||||
@@ -218,6 +224,31 @@ class User extends Authenticatable
|
||||
return $this->hasMany(AcademySavedPrompt::class, 'user_id');
|
||||
}
|
||||
|
||||
public function academyEvents(): HasMany
|
||||
{
|
||||
return $this->hasMany(AcademyEvent::class, 'user_id');
|
||||
}
|
||||
|
||||
public function academyLikes(): HasMany
|
||||
{
|
||||
return $this->hasMany(AcademyLike::class, 'user_id');
|
||||
}
|
||||
|
||||
public function academySaves(): HasMany
|
||||
{
|
||||
return $this->hasMany(AcademySave::class, 'user_id');
|
||||
}
|
||||
|
||||
public function academyUserProgress(): HasMany
|
||||
{
|
||||
return $this->hasMany(AcademyUserProgress::class, 'user_id');
|
||||
}
|
||||
|
||||
public function academySearchLogs(): HasMany
|
||||
{
|
||||
return $this->hasMany(AcademySearchLog::class, 'user_id');
|
||||
}
|
||||
|
||||
public function academyChallengeSubmissions(): HasMany
|
||||
{
|
||||
return $this->hasMany(AcademyChallengeSubmission::class, 'user_id');
|
||||
@@ -448,12 +479,12 @@ class User extends Authenticatable
|
||||
|
||||
public function hasAcademyCreatorAccess(): bool
|
||||
{
|
||||
return $this->hasAcademyProAccess() || strtolower(trim((string) ($this->role ?? ''))) === 'academy_creator';
|
||||
return in_array(app(\App\Services\Academy\AcademyAccessService::class)->currentTier($this), ['creator', 'pro', 'admin'], true);
|
||||
}
|
||||
|
||||
public function hasAcademyProAccess(): bool
|
||||
{
|
||||
return strtolower(trim((string) ($this->role ?? ''))) === 'academy_pro';
|
||||
return in_array(app(\App\Services\Academy\AcademyAccessService::class)->currentTier($this), ['pro', 'admin'], true);
|
||||
}
|
||||
|
||||
public function canAccessAcademyContent(object|array $content): bool
|
||||
|
||||
Reference in New Issue
Block a user