First Commit
This commit is contained in:
Executable
+152
@@ -0,0 +1,152 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Contact\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Contact extends Model
|
||||
{
|
||||
/**
|
||||
* The table associated with model.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $table = 'contacts';
|
||||
|
||||
/**
|
||||
* The primary key associated with table.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $primaryKey = 'contacts_id';
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $fillable = [
|
||||
'contacts_name',
|
||||
'contacts_email',
|
||||
'contacts_phone',
|
||||
'contacts_subject',
|
||||
'contacts_message',
|
||||
'contacts_response',
|
||||
'contacts_status',
|
||||
'contacts_ip_address',
|
||||
'contacts_user_agent',
|
||||
'contacts_read_at'
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be cast.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $casts = [
|
||||
'contacts_read_at' => 'datetime',
|
||||
'created_at' => 'datetime',
|
||||
'updated_at' => 'datetime'
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be mutated to dates.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $dates = [
|
||||
'contacts_read_at',
|
||||
'created_at',
|
||||
'updated_at'
|
||||
];
|
||||
|
||||
/**
|
||||
* Get unread contacts only.
|
||||
*
|
||||
* @param \Illuminate\Database\Eloquent\Builder $query
|
||||
* @return \Illuminate\Database\Eloquent\Builder
|
||||
*/
|
||||
public function scopeUnread($query)
|
||||
{
|
||||
return $query->whereNull('contacts_read_at');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get read contacts only.
|
||||
*
|
||||
* @param \Illuminate\Database\Eloquent\Builder $query
|
||||
* @return \Illuminate\Database\Eloquent\Builder
|
||||
*/
|
||||
public function scopeRead($query)
|
||||
{
|
||||
return $query->whereNotNull('contacts_read_at');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get contacts by status.
|
||||
*
|
||||
* @param \Illuminate\Database\Eloquent\Builder $query
|
||||
* @param string $status
|
||||
* @return \Illuminate\Database\Eloquent\Builder
|
||||
*/
|
||||
public function scopeStatus($query, string $status)
|
||||
{
|
||||
return $query->where('contacts_status', $status);
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark contact as read.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function markAsRead(): bool
|
||||
{
|
||||
if ($this->contacts_read_at) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return $this->update(['contacts_read_at' => \Carbon\Carbon::now()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark contact as unread.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function markAsUnread(): bool
|
||||
{
|
||||
return $this->update(['contacts_read_at' => null]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if contact is read.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isRead(): bool
|
||||
{
|
||||
return !is_null($this->contacts_read_at);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get formatted created date.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getFormattedCreatedAtAttribute(): string
|
||||
{
|
||||
return $this->created_at->format('d/m/Y H:i');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get short message (100 characters).
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getShortMessageAttribute(): string
|
||||
{
|
||||
return strlen($this->contacts_message) > 100
|
||||
? substr($this->contacts_message, 0, 100) . '...'
|
||||
: $this->contacts_message;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user