'array', 'database_fields_update' => 'array', 'closes_at' => 'datetime', 'tags' => 'array', 'removed_properties' => 'array' ]; protected $appends = [ 'share_url', ]; protected $hidden = [ 'workspace_id', 'notifies', 'slack_webhook_url', 'webhook_url', 'send_submission_confirmation', 'redirect_url', 'database_fields_update', 'notification_sender', 'notification_subject', 'notification_body', 'notifications_include_submission', 'password', 'tags', 'notification_emails', 'removed_properties' ]; /** * The event map for the model. * * @var array */ protected $dispatchesEvents = [ 'created' => FormCreated::class, ]; public function getIsProAttribute() { return optional($this->workspace)->is_pro; } public function getShareUrlAttribute() { return url('/forms/'.$this->slug); } public function getSubmissionsCountAttribute() { return $this->submissions()->count(); } public function getViewsCountAttribute() { return $this->views()->count() + $this->statistics()->sum(DB::raw("cast(data->>'views' as integer)")); } public function setDescriptionAttribute($value) { // Strip out unwanted html $this->attributes['description'] = Purify::clean($value); } public function setSubmittedTextAttribute($value) { // Strip out unwanted html $this->attributes['submitted_text'] = Purify::clean($value); } public function setTagsAttribute($value) { if ($value == '') { $value = null; } $this->attributes['tags'] = json_encode($value); } public function getIsClosedAttribute() { return ($this->closes_at && now()->gt($this->closes_at)); } public function getMaxNumberOfSubmissionsReachedAttribute() { return ($this->max_submissions_count && $this->max_submissions_count <= $this->submissions_count); } public function setClosedTextAttribute($value) { $this->attributes['closed_text'] = Purify::clean($value); } public function setMaxSubmissionsReachedTextAttribute($value) { $this->attributes['max_submissions_reached_text'] = Purify::clean($value); } public function getHasPasswordAttribute() { return !empty($this->password); } /** * Relationships */ public function workspace() { return $this->belongsTo(Workspace::class); } public function creator() { return $this->belongsTo(User::class, 'creator_id'); } public function submissions() { return $this->hasMany(FormSubmission::class); } public function views() { return $this->hasMany(FormView::class); } public function statistics() { return $this->hasMany(FormStatistic::class); } public function zappierHooks() { return $this->hasMany(FormZapierWebhook::class); } /** * Config/options */ public function getSlugOptions(): SlugOptions { return SlugOptions::create() ->doNotGenerateSlugsOnUpdate() ->generateSlugsFrom('title') ->saveSlugsTo('slug'); } public static function newFactory() { return FormFactory::new(); } public function getNotifiesSlackAttribute() { return !empty($this->slack_webhook_url); } }