PHP 7.4.33
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
Name Size Perms Modified Actions
2.71 KB lrw-r--r-- 2024-02-09 12:37:30
Edit Download
386 B lrw-r--r-- 2024-02-09 12:37:30
Edit Download
784 B lrw-rw-r-- 2025-04-21 06:11:52
Edit Download
737 B lrw-rw-r-- 2024-02-22 08:11:18
Edit Download
944 B lrw-r--r-- 2024-02-09 12:37:30
Edit Download
2.66 KB lrw-rw-r-- 2025-12-10 09:24:27
Edit Download
3.99 KB lrw-rw-r-- 2025-07-30 10:06:01
Edit Download
2.36 KB lrw-rw-r-- 2026-04-07 05:00:19
Edit Download
1.66 KB lrw-rw-r-- 2024-10-23 04:50:49
Edit Download
496 B lrw-r--r-- 2024-02-09 12:37:30
Edit Download
4.01 KB lrw-r--r-- 2024-02-09 12:37:30
Edit Download
881 B lrw-r--r-- 2024-02-09 12:37:30
Edit Download
1.13 KB lrw-r--r-- 2024-02-09 12:37:30
Edit Download
909 B lrw-r--r-- 2024-02-09 12:37:30
Edit Download
941 B lrw-r--r-- 2024-02-09 12:37:30
Edit Download
1.03 KB lrw-r--r-- 2025-07-28 09:14:47
Edit Download
835 B lrw-r--r-- 2024-02-09 12:37:30
Edit Download
889 B lrw-r--r-- 2024-02-09 12:37:30
Edit Download
2.78 KB lrw-rw-r-- 2026-04-22 04:31:30
Edit Download
945 B lrw-rw-r-- 2024-09-20 05:02:14
Edit Download
2.21 KB lrw-rw-r-- 2024-09-20 05:02:14
Edit Download
972 B lrw-rw-r-- 2024-09-20 05:02:14
Edit Download
893 B lrw-rw-r-- 2026-03-31 07:15:50
Edit Download
659 B lrw-r--r-- 2024-02-09 12:37:30
Edit Download
10.40 KB lrw-rw-r-- 2026-04-30 09:24:18
Edit Download
574 B lrw-rw-r-- 2024-12-03 04:36:57
Edit Download
If ZipArchive is unavailable, a .tar will be created (no compression).