Files
opnform-host-nginx/app/Models/Template.php
Favour Olayinka bec8e86b59 2f3fd laravel 11 upgrade (#436)
* fix password reset bug

* upgrade to  laravel 11

* composer.lock

* fix migration issues

* use ValidationRule Contract

* rename password_resets table

* implemented casts as protected function

* update env variables

* fix optional property

* fix validation issues

* use <env> on php unit xml

* fix pint

* cmposer.lock

* composer json fixes

* fix composer dependencies, remove  faker

* remove unused class

* remove test class

* fix default value for mysql migration

* linting

* expression syntax fix

---------

Co-authored-by: Julien Nahum <julien@nahum.net>
2024-06-10 16:10:14 +02:00

118 lines
2.7 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;
use Spatie\Sluggable\HasSlug;
use Spatie\Sluggable\SlugOptions;
use Stevebauman\Purify\Facades\Purify;
class Template extends Model
{
use HasFactory;
use HasSlug;
protected $fillable = [
'creator_id',
'name',
'slug',
'description',
'short_description',
'image_url',
'structure',
'questions',
'publicly_listed',
'industries',
'types',
'related_templates',
];
protected function casts()
{
return [
'structure' => 'array',
'questions' => 'array',
'industries' => 'array',
'types' => 'array',
'related_templates' => 'array',
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}
protected $attributes = [
'publicly_listed' => false,
];
protected $appends = [
'share_url',
];
public function getShareUrlAttribute()
{
return front_url('/form-templates/' . $this->slug);
}
public function setDescriptionAttribute($value)
{
// Strip out unwanted html
$this->attributes['description'] = Purify::clean($value);
}
public function scopePubliclyListed($query)
{
return $this->where('publicly_listed', true);
}
/**
* Config/options
*/
public function getSlugOptions(): SlugOptions
{
return SlugOptions::create()
->doNotGenerateSlugsOnUpdate()
->generateSlugsFrom('name')
->saveSlugsTo('slug');
}
public function getTypes(): Collection
{
return self::getAllTypes()->filter(function ($type) {
return in_array($type['slug'], $this->types);
});
}
public function getIndustries(): Collection
{
return self::getAllIndustries()->filter(function ($type) {
return in_array($type['slug'], $this->industries);
});
}
public static function getAllTypes(): Collection
{
return collect(
array_values(
json_decode(
file_get_contents(resource_path('data/forms/templates/types.json')),
true
)
)
)->values();
}
public static function getAllIndustries(): Collection
{
return collect(
array_values(
json_decode(
file_get_contents(resource_path('data/forms/templates/industries.json')),
true
)
)
)->values();
}
}