Files
glastree/app/Models/Documento.php
T
2026-06-23 11:12:28 +02:00

81 lines
2.3 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Models;
use App\Traits\HasTagsLight;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
class Documento extends Model
{
use HasTagsLight;
protected $table = 'documenti';
protected $fillable = [
'tenant_id', 'user_id', 'cartella_id', 'repository_id', 'storage_disk',
'nome_file', 'file_path', 'tipo', 'tipologia',
'visibilita', 'visibilita_target_id', 'visibilita_target_type',
'mime_type', 'dimensione', 'note', 'url'
];
public function isLink(): bool
{
return $this->tipo === 'link';
}
public function tenant(): BelongsTo
{
return $this->belongsTo(Tenant::class);
}
public function cartella(): BelongsTo
{
return $this->belongsTo(DocumentoCartella::class, 'cartella_id');
}
public function repository(): BelongsTo
{
return $this->belongsTo(StorageRepository::class, 'repository_id');
}
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
public function target(): MorphTo
{
return $this->morphTo('target', 'visibilita_target_type', 'visibilita_target_id');
}
public function eventi(): BelongsToMany
{
return $this->belongsToMany(Evento::class, 'eventi_documenti')->withTimestamps();
}
public function gruppi(): BelongsToMany
{
return $this->belongsToMany(Gruppo::class, 'gruppi_documenti')->withTimestamps();
}
public function individui(): BelongsToMany
{
return $this->belongsToMany(Individuo::class, 'individui_documenti')->withTimestamps();
}
public function isVisibilePerIndividuo(Individuo $individuo): bool
{
if ($this->visibilita === 'pubblico') return true;
if ($this->visibilita === 'individuo' && $this->visibilita_target_id === $individuo->id) return true;
if ($this->visibilita === 'gruppo' && $this->visibilita_target_type === Gruppo::class) {
return $individuo->gruppi()->where('gruppi.id', $this->visibilita_target_id)->exists();
}
return false;
}
}