95 lines
2 KiB
PHP
95 lines
2 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
namespace Core\Tenant\Concerns;
|
||
|
|
|
||
|
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Push notification-related relationships for the User model.
|
||
|
|
*
|
||
|
|
* Requires the Push module to be installed. All relationships are
|
||
|
|
* guarded with class_exists() so the tenant package remains functional
|
||
|
|
* even when the Push module is absent.
|
||
|
|
*
|
||
|
|
* @mixin \Core\Tenant\Models\User
|
||
|
|
*/
|
||
|
|
trait HasPushRelationships
|
||
|
|
{
|
||
|
|
/**
|
||
|
|
* Get all push websites owned by this user.
|
||
|
|
*/
|
||
|
|
public function pushWebsites(): ?HasMany
|
||
|
|
{
|
||
|
|
$class = $this->resolvePushModel('PushWebsite');
|
||
|
|
|
||
|
|
if (! $class) {
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
|
||
|
|
return $this->hasMany($class);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Get all push campaigns owned by this user.
|
||
|
|
*/
|
||
|
|
public function pushCampaigns(): ?HasMany
|
||
|
|
{
|
||
|
|
$class = $this->resolvePushModel('PushCampaign');
|
||
|
|
|
||
|
|
if (! $class) {
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
|
||
|
|
return $this->hasMany($class);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Get all push segments owned by this user.
|
||
|
|
*/
|
||
|
|
public function pushSegments(): ?HasMany
|
||
|
|
{
|
||
|
|
$class = $this->resolvePushModel('PushSegment');
|
||
|
|
|
||
|
|
if (! $class) {
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
|
||
|
|
return $this->hasMany($class);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Get all push flows owned by this user.
|
||
|
|
*/
|
||
|
|
public function pushFlows(): ?HasMany
|
||
|
|
{
|
||
|
|
$class = $this->resolvePushModel('PushFlow');
|
||
|
|
|
||
|
|
if (! $class) {
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
|
||
|
|
return $this->hasMany($class);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Resolve a Push model class, checking common namespaces.
|
||
|
|
*/
|
||
|
|
protected function resolvePushModel(string $model): ?string
|
||
|
|
{
|
||
|
|
$candidates = [
|
||
|
|
"Core\\Mod\\Push\\Models\\{$model}",
|
||
|
|
"App\\Models\\{$model}",
|
||
|
|
];
|
||
|
|
|
||
|
|
foreach ($candidates as $candidate) {
|
||
|
|
if (class_exists($candidate)) {
|
||
|
|
return $candidate;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
}
|