85 lines
2.0 KiB
PHP
85 lines
2.0 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Support\Facades\Crypt;
|
|
|
|
class StorageRepository extends Model
|
|
{
|
|
protected $table = 'storage_repositories';
|
|
|
|
protected $fillable = [
|
|
'nome',
|
|
'tipo',
|
|
'config',
|
|
'is_active',
|
|
'ordine',
|
|
];
|
|
|
|
protected $casts = [
|
|
'config' => 'array',
|
|
'is_active' => 'boolean',
|
|
'ordine' => 'integer',
|
|
];
|
|
|
|
public function documenti()
|
|
{
|
|
return $this->hasMany(Documento::class, 'repository_id');
|
|
}
|
|
|
|
public function getDecryptedConfig(): array
|
|
{
|
|
$config = $this->config;
|
|
if (isset($config['password'])) {
|
|
try {
|
|
$config['password'] = Crypt::decryptString($config['password']);
|
|
} catch (\Exception) {
|
|
}
|
|
}
|
|
if (isset($config['refresh_token'])) {
|
|
try {
|
|
$config['refresh_token'] = Crypt::decryptString($config['refresh_token']);
|
|
} catch (\Exception) {
|
|
}
|
|
}
|
|
if (isset($config['client_secret'])) {
|
|
try {
|
|
$config['client_secret'] = Crypt::decryptString($config['client_secret']);
|
|
} catch (\Exception) {
|
|
}
|
|
}
|
|
return $config;
|
|
}
|
|
|
|
public function scopeAttivi($query)
|
|
{
|
|
return $query->where('is_active', true)->orderBy('ordine');
|
|
}
|
|
|
|
public static function opzioniTipo(): array
|
|
{
|
|
return ['webdav', 'google_drive'];
|
|
}
|
|
|
|
public static function etichettaTipo(string $tipo): string
|
|
{
|
|
return match ($tipo) {
|
|
'webdav' => 'WebDAV',
|
|
'google_drive' => 'Google Drive',
|
|
default => ucfirst($tipo),
|
|
};
|
|
}
|
|
|
|
public static function iconaTipo(string $tipo): string
|
|
{
|
|
return match ($tipo) {
|
|
'webdav' => 'fa-server',
|
|
'google_drive' => 'fa-google-drive',
|
|
default => 'fa-database',
|
|
};
|
|
}
|
|
}
|