openstamanager/app/Models/User.php

254 lines
5.8 KiB
PHP
Raw Normal View History

<?php
namespace App\Models;
use Common\SimpleModelTrait;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Intervention\Image\ImageManagerStatic;
use Models\Group;
use Models\Log;
use Models\Note;
use Models\Upload;
2019-07-19 15:23:00 +02:00
use Modules\Anagrafiche\Anagrafica;
class User extends Authenticatable
{
use HasFactory;
use Notifiable;
use SimpleModelTrait;
protected $table = 'zz_users';
protected $is_admin;
protected $gruppo;
protected $appends = [
'is_admin',
'gruppo',
'id_anagrafica',
];
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
/**
* Crea un nuovo utente.
*
* @param string $username
* @param string $email
* @param string $password
*
* @return User
*/
public static function build(Group $gruppo, $username, $email, $password)
{
$model = new static();
$model->group()->associate($gruppo);
$model->username = $username;
$model->email = $email;
$model->password = $password;
2019-07-26 11:57:59 +02:00
$model->enabled = 1;
$model->save();
return $model;
}
public function isAdmin()
{
return $this->is_admin;
}
public function getIsAdminAttribute()
{
if (!isset($this->is_admin)) {
$this->is_admin = $this->getGruppoAttribute() == 'Amministratori';
}
return $this->is_admin;
}
public function getIdAnagraficaAttribute()
{
return $this->attributes['idanagrafica'];
}
public function setIdAnagraficaAttribute($value)
{
$this->attributes['idanagrafica'] = $value;
}
public function getGruppoAttribute()
{
if (!isset($this->gruppo)) {
$this->gruppo = $this->group->nome;
}
return $this->gruppo;
}
public function getSediAttribute()
{
$database = database();
// Estraggo le sedi dell'utente loggato
$sedi = $database->fetchArray('SELECT idsede FROM zz_user_sedi WHERE id_user='.prepare($this->id));
// Se l'utente non ha sedi, è come se ce le avesse tutte disponibili per retrocompatibilità
if (empty($sedi)) {
$sedi = $database->fetchArray('SELECT "0" AS idsede UNION SELECT id AS idsede FROM an_sedi WHERE idanagrafica='.prepare($this->idanagrafica));
}
return array_column($sedi, 'idsede');
}
2019-07-16 15:43:15 +02:00
public function setPasswordAttribute($value)
{
$this->attributes['password'] = \auth()->hashPassword($value);
2019-07-16 15:43:15 +02:00
}
public function getPhotoAttribute()
{
if (empty($this->image_file_id)) {
return null;
}
$image = Upload::find($this->image_file_id);
return base_url().'/'.$image->filepath;
}
public function setPhotoAttribute($value)
{
$module = \Modules::get('Utenti e permessi');
$data = [
'id_module' => $module->id,
'id_record' => $this->id,
];
// Foto precedenti
$old_photo = Upload::where($data)->get();
// Informazioni sull'immagine
$filepath = is_array($value) ? $value['tmp_name'] : $value;
$info = Upload::getInfo(is_array($value) ? $value['name'] : $value);
$file = base_dir().'/files/temp_photo.'.$info['extension'];
// Ridimensionamento
$driver = extension_loaded('gd') ? 'gd' : 'imagick';
ImageManagerStatic::configure(['driver' => $driver]);
$img = ImageManagerStatic::make($filepath)->resize(100, 100, function ($constraint) {
$constraint->aspectRatio();
});
$img->save(slashes($file));
// Aggiunta nuova foto
$upload = Upload::build($file, $data);
// Rimozione foto precedenti
delete($file);
if (!empty($upload)) {
foreach ($old_photo as $old) {
$old->delete();
}
}
$this->image_file_id = $upload->id;
}
2019-07-29 17:42:24 +02:00
public function getNomeCompletoAttribute()
{
$anagrafica = $this->anagrafica;
if (empty($anagrafica)) {
return $this->username;
}
return $anagrafica->ragione_sociale.' ('.$this->username.')';
}
public function getApiTokens()
{
2020-02-23 14:21:49 +01:00
$query = 'SELECT * FROM `zz_tokens` WHERE `enabled` = 1 AND `id_utente` = '.prepare($this->id);
$database = database();
// Generazione del token per l'utente
$tokens = $database->fetchArray($query);
if (empty($tokens)) {
$token = secure_random_string();
$database->insert('zz_tokens', [
'id_utente' => $this->id,
'token' => $token,
]);
}
return $database->fetchArray($query);
}
/* Relazioni Eloquent */
public function group()
{
return $this->belongsTo(Group::class, 'idgruppo');
}
public function logs()
{
return $this->hasMany(Log::class, 'id_utente');
}
2019-07-26 11:57:59 +02:00
public function notes()
{
return $this->hasMany(Note::class, 'id_utente');
}
2019-07-19 15:23:00 +02:00
public function anagrafica()
{
return $this->belongsTo(Anagrafica::class, 'idanagrafica');
}
public function image()
{
return $this->belongsTo(Upload::class, 'image_file_id');
}
public function modules()
{
return $this->group->modules();
}
}