Preview: Presentation.php
Size: 4.01 KB
/var/www/multi-event-cfp.bitkit.dk/httpdocs/app/Models/Presentation.php
<?php
namespace App\Models;
use App\Repositories\AbstractsRepository;
use App\Traits\HasFiles;
use Illuminate\Database\Eloquent\Casts\AsArrayObject;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Facades\DB;
/**
* @property mixed $id
* @property mixed $event_id
* @property Event $event
* @property mixed $written_paper_status
* @property mixed|string $submission_status
* @property false|mixed $edit_request
* @property mixed $data
*/
class Presentation extends Model
{
use HasFactory, HasFiles;
const FILE_SAVE_PATH = 'private/media/presentations/';
const FILE_PUBLIC_PATH = null;
const PRIVATE_FILE_SAVE_PATH = 'private/media/presentations/';
protected $fillable = [
'data',
'written_paper_data',
'written_paper_status',
'user_id',
'event_id',
'abstract_id',
'type',
'submission_status',
'submission_date',
'selection_status',
'presentation_type'
];
protected $casts = [
'data' => AsArrayObject::class,
'written_paper_data' => AsArrayObject::class,
'user' => AsArrayObject::class,
'abstract' => AsArrayObject::class,
'reviewers' => AsArrayObject::class,
'presentersArray' => AsArrayObject::class,
'slotsArray' => AsArrayObject::class,
'submission_date' => 'date:Y-m-d H:i:s',
'created_at' => 'date:Y-m-d H:i:s',
'updated_at' => 'date:Y-m-d H:i:s'
];
//===========================================//
//relations
public function abstract(): BelongsTo
{
return $this->belongsTo(Abstracts::class, 'abstract_id');
}
public function event(): BelongsTo
{
return $this->belongsTo(Event::class);
}
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
public function presenters(): BelongsToMany
{
return $this->belongsToMany(User::class, 'presenters')
->using(Presenter::class)
->join('event_user as eu', function ($query) {
$query->on('presenters.user_id', '=', 'eu.user_id')
->whereRaw(DB::raw('`eu`.`event_id` = `presenters`.event_id'));
})->addSelect(['users.*', 'presenters.user_id', 'presenters.event_id', 'presenters.presentation_id', 'eu.agreement_status', 'eu.id as eu_id'])
->groupBy('users.id')
->withPivot(['id'])
->withTimestamps();
}
public function presentersArray(): BelongsToMany
{
return $this->belongsToMany(User::class, 'presenters')
->using(Presenter::class)
->join('event_user as eu', function ($query) {
$query->on('presenters.user_id', '=', 'eu.user_id')
->whereRaw(DB::raw('`eu`.`event_id` = `presenters`.event_id'));
})->addSelect(['users.*', 'presenters.user_id', 'presenters.event_id', 'presenters.presentation_id', 'eu.agreement_status', 'eu.id as eu_id'])
->groupBy('users.id')
->withPivot(['id'])
->withTimestamps();
}
public function reviews(): HasMany
{
return $this->hasMany(PresentationReview::class);
}
public function reviewers($userId = null): BelongsToMany
{
$query = $this->belongsToMany(User::class, 'presentation_reviews', 'presentation_id', 'reviewer_id')
->using(PresentationReview::class)
->withPivot(['status', 'approved_date', 'comment'])
->withTimestamps();
if ($userId) {
$query->where('users.id', '=', $userId);
}
return $query;
}
// End of relations
//===========================================//
public function useRepository($event = null): AbstractsRepository
{
return new AbstractsRepository($event);
}
}
Directory Contents
Dirs: 0 × Files: 26