ldc-portsalaries/app/Models/Sondage.php

118 lines
3.4 KiB
PHP

<?php
namespace App\Models;
use App\Enums\TypeSondage;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Kwaadpepper\CrudPolicies\Enums\CrudAction;
use Kwaadpepper\CrudPolicies\Enums\CrudType;
use Kwaadpepper\CrudPolicies\Traits\IsCrudModel;
use Kwaadpepper\Enum\Traits\CastsEnums;
class Sondage extends Model
{
use HasFactory;
use CastsEnums;
use IsCrudModel;
protected $crudLabelColumn = 'question';
protected $crudValueColumn = 'id';
protected $enumCasts = [
'type' => TypeSondage::class
];
protected $fillable = [
'type',
'question',
'status'
];
public function __construct($attributes = [])
{
self::$editableProperties = [
'question' => [
'label' => trans('Question'),
'type' => CrudType::string(),
'validate' => [
'max:255'
],
'required' => true,
'nullable' => false,
'actions' => [
CrudAction::viewAny(),
CrudAction::view(),
CrudAction::create(),
CrudAction::update()
]
],
'type' => [
'label' => trans('Type'),
'type' => CrudType::enum(),
'enum' => TypeSondage::class,
'validate' => [
'required',
// phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed
function ($attribute, $value, $fail) {
if (!in_array($value, TypeSondage::toValues())) {
$fail(trans('Veuillez choisir entre :values', [
'value' => implode(',', TypeSondage::toLabels())
]));
}
}
],
'required' => true,
'nullable' => false,
'actions' => [
CrudAction::viewAny(),
CrudAction::view(),
CrudAction::create(),
CrudAction::update()
]
],
'reponses' => [
'label' => trans('Nombre de Réponses'),
'type' => CrudType::string(),
'actions' => [
CrudAction::viewAny()
],
'getAttribute' => function () {
return $this->reponseSondages()->count();
},
],
'status' => [
'label' => trans('Publié'),
'type' => CrudType::boolean(),
'actions' => [
CrudAction::viewAny(),
CrudAction::view(),
CrudAction::create(),
CrudAction::update()
]
]
];
parent::__construct($attributes);
}
/**
* Has one Site
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function site()
{
return $this->belongsTo(Site::class);
}
/**
* Has many ReponseSondage
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function reponseSondages()
{
return $this->hasMany(ReponseSondage::class);
}
}