|
Server : Apache/2.4.41 (Ubuntu) System : Linux vmi1525618.contaboserver.net 5.4.0-105-generic #119-Ubuntu SMP Mon Mar 7 18:49:24 UTC 2022 x86_64 User : www-data ( 33) PHP Version : 8.2.12 Disable Function : NONE Directory : /var/www/lecturebazaar.com/app/Models/Api/ |
Upload File : |
<?php
namespace App\Models\Api;
use App\Http\Resources\ProductResource;
use App\Models\Comment as Model;
use App\Models\Api\Product;
class Comment extends Model
{
public function getDetailsAttribute()
{
return [
'id' => $this->id,
'status' => $this->status,
'comment_user_type' => $this->comment_user_type,
'create_at' => $this->created_at,
'comment' => $this->comment,
'blog' => $this->blog->brief ?? null,
'user' => $this->user->brief ?? null,
'webinar' => $this->webinar->brief ?? null,
'product' => $this->product ? new ProductResource($this->product) : null,
'replies' => $this->replies->where('status', 'active')->map(function ($reply) {
return [
'id' => $reply->id,
'comment_user_type' => $reply->comment_user_type,
'user' => $reply->user->brief,
'create_at' => $reply->created_at,
'comment' => $reply->comment,
];
})
];
}
public function scopeHandleFilters($query)
{
$request = request();
$from = $request->get('from', null);
$to = $request->get('to', null);
$user = $request->get('user_id', null);
$webinar = $request->get('webinar_id', null);
$product = $request->get('product_id', null);
$blogId = $request->get('blog_id', null);
$filter_new_comments = request()->get('new_comments', null);
if (!empty($from) and !empty($to)) {
$from = strtotime($from);
$to = strtotime($to);
$query->whereBetween('created_at', [$from, $to]);
} else {
if (!empty($from)) {
$from = strtotime($from);
$query->where('created_at', '>=', $from);
}
if (!empty($to)) {
$to = strtotime($to);
$query->where('created_at', '<', $to);
}
}
if (!empty($user)) {
$usersIds = User::where('full_name', 'like', "%$user%")->pluck('id')->toArray();
$query->whereIn('user_id', $usersIds);
}
if (!empty($webinar)) {
$webinarsIds = Webinar::where('title', 'like', "%$webinar%")->pluck('id')->toArray();
$query->whereIn('webinar_id', $webinarsIds);
}
if (!empty($filter_new_comments) and $filter_new_comments == 'on') {
}
if (!empty($product)) {
$productsIds = Product::whereTranslationLike('title', "%$product%")->pluck('id')->toArray();
$query->whereIn('product_id', $productsIds);
}
if (!empty($blogId) and is_numeric($blogId)) {
$query->where('blog_id', $blogId);
}
return $query;
}
public function getCommentUserTypeAttribute()
{
if ($this->user->isUser() or
!empty($this->webinar) and
$this->webinar->checkUserHasBought($this->user)) {
$type = 'student';
} elseif (
!$this->user->isUser()
and !empty($this->webinar)
and ($this->webinar->creator_id == $this->user->id or
$this->webinar->teacher_id == $this->user->id)
) {
$type = 'teacher';
} elseif ($this->user->isAdmin()) {
$type = 'staff';
} else {
$type = 'user';
}
return $type;
}
public function replies()
{
return $this->hasMany($this, 'reply_id', 'id');
}
public function webinar()
{
return $this->belongsTo('App\Models\Api\Webinar', 'webinar_id', 'id');
}
public function user()
{
return $this->belongsTo('App\Models\Api\User', 'user_id', 'id');
}
public function review()
{
return $this->belongsTo('App\Models\Api\WebinarReview', 'review_id', 'id');
}
public function blog()
{
return $this->belongsTo('App\Models\Api\Blog', 'blog_id', 'id');
}
}
?>