'array', ]; protected $cachableAttributes = [ 'is_pro', 'is_enterprise', 'is_risky', 'submissions_count', 'max_file_size', 'custom_domain_count' ]; public function getMaxFileSizeAttribute() { if(is_null(config('cashier.key'))){ return self::MAX_FILE_SIZE_PRO; } return $this->remember('max_file_size', 15 * 60, function(): int { // Return max file size depending on subscription foreach ($this->owners as $owner) { if ($owner->is_subscribed) { if ($license = $owner->activeLicense()) { // In case of special License return $license->max_file_size; } } return self::MAX_FILE_SIZE_PRO; } return self::MAX_FILE_SIZE_FREE; }); } public function getCustomDomainCountLimitAttribute() { if(is_null(config('cashier.key'))){ return null; } return $this->remember('custom_domain_count', 15 * 60, function(): int { foreach ($this->owners as $owner) { if ($owner->is_subscribed) { if ($license = $owner->activeLicense()) { // In case of special License return $license->custom_domain_limit_count; } return self::MAX_DOMAIN_PRO; } } return 0; }); } public function getIsProAttribute() { if(is_null(config('cashier.key'))){ return true; // If no paid plan so TRUE for ALL } return $this->remember('is_pro', 15 * 60, function(): bool { // Make sure at least one owner is pro foreach ($this->owners as $owner) { if ($owner->is_subscribed) { return true; } } return false; }); } public function getIsEnterpriseAttribute() { if(is_null(config('cashier.key'))){ return true; // If no paid plan so TRUE for ALL } return $this->remember('is_enterprise', 15 * 60, function(): bool { // Make sure at least one owner is pro foreach ($this->owners as $owner) { if ($owner->has_enterprise_subscription) { return true; } } return false; }); } public function getIsRiskyAttribute() { return $this->remember('is_risky', 15 * 60, function(): bool { // A workspace is risky if all of his users are risky foreach ($this->owners as $owner) { if (!$owner->is_risky) { return false; } } return true; }); } public function getSubmissionsCountAttribute() { return $this->remember('submissions_count', 15 * 60, function(): int { $total = 0; foreach ($this->forms as $form) { $total += $form->submissions_count; } return $total; }); } /** * Relationships */ public function users() { return $this->belongsToMany(User::class); } public function owners() { return $this->users()->wherePivot('role', 'admin'); } public function forms() { return $this->hasMany(Form::class); } }