PHP 7.4.33
Preview: EmailLogRepository.php Size: 4.14 KB
/var/www/multi-event-cfp.bitkit.dk/httpdocs/app/Repositories/EmailLogRepository.php
<?php

namespace App\Repositories;

use App\Models\EmailLog;
use Illuminate\Database\Eloquent\Builder;
use App\Support\Query;
use Illuminate\Support\Facades\DB;

class EmailLogRepository extends Repository
{
    public function __construct($event = null)
    {
        $this->for($event);
    }

    public function model(): ?EmailLog
    {
        return new EmailLog;
    }

    public function query($as = null)
    {
        $model = $this->model();
        return $model->newQuery();
    }

    public function selectColumns(): array
    {
        return [
            'email_logs.id',
            'email_logs.email_type',
            'email_logs.recipient',
            'email_logs.subject',
            'email_logs.status',
            'email_logs.sent_at',
            'email_logs.failed_at',
            'email_logs.failure_reason',
            'email_logs.retry_count',
            'email_logs.max_retries',
            'email_logs.created_at',
        ];
    }

    public function scope($arguments, $callback = null)
    {
        $query = $this->query()->select($this->selectColumns());
        $this->applyScope($query, $arguments);
        return $this->resolve($query, $arguments, $callback);
    }

    public function applyScope(Builder $query, $arguments): Builder
    {
        $this->applyEventScope($query, $arguments);
        $this->applyStatusScope($query, $arguments);
        $this->applyOrder($query, $arguments);
        $this->applySearch($query, $arguments);
        return $query;
    }

    public function applyEventScope(Builder $query, $arguments): Builder
    {
        if ($arguments->event) {
            $query->where('email_logs.event_id', '=', $arguments->event->id);
        }
        return $query;
    }

    public function applyStatusScope(Builder $query, $arguments): Builder
    {
        if ($arguments->status) {
            $query->where('email_logs.status', $arguments->status);
        }
        return $query;
    }

    public function applyOrder(Builder $query, Query $arguments): Builder
    {
        $columns = [
            'id' => 'email_logs.id',
            'email_type' => 'email_logs.email_type',
            'subject' => 'email_logs.subject',
            'status' => 'email_logs.status',
            'created_at' => 'email_logs.created_at',
            'failed_at' => 'email_logs.failed_at',
        ];

        $sorts = json_decode($arguments->sort, true) ?? [];
        foreach ($sorts as $sort => $method) {
            if (array_key_exists($sort, $columns)) {
                $query->orderBy($columns[$sort], $method);
            }
        }

        // Default order
        if (empty($sorts)) {
            $query->orderBy('email_logs.created_at', 'desc');
        }

        return $query;
    }

    public function applySearch(Builder $query, $arguments): Builder
    {
        if ($arguments->search) {
            $search = strtolower($arguments->search);
            $query->where(function ($query) use ($search) {
                $query->orWhere(DB::raw("lower(email_logs.recipient)"), 'like', "%{$search}%")
                      ->orWhere(DB::raw("lower(email_logs.subject)"), 'like', "%{$search}%")
                      ->orWhere(DB::raw("lower(email_logs.email_type)"), 'like', "%{$search}%")
                      ->orWhere(DB::raw("lower(email_logs.failure_reason)"), 'like', "%{$search}%");
            });
        }
        return $query;
    }

    public function listing($request, $paginate = true)
    {
        $arguments = $this->arguments($request);
        $query = $this->scope($arguments);
        
        return ($paginate && $arguments->paging != 'All') 
            ? $query->paginate($arguments->paging, ['*'], 'page', $arguments->page) 
            : $query->get();
    }

    public function fetchSingleEmailLog($id)
    {
        return EmailLog::with('event')->find($id);
    }

    public function getRetryableEmails($eventId)
    {
        return EmailLog::where('event_id', $eventId)
                      ->failed()
                      ->canRetry()
                      ->get();
    }
}

Directory Contents

Dirs: 0 × Files: 17
Name Size Perms Modified Actions
75.27 KB lrw-rw-r-- 2026-04-30 09:24:04
Edit Download
1.21 KB lrw-rw-r-- 2025-04-21 06:11:52
Edit Download
65 B lrw-r--r-- 2024-02-09 12:37:30
Edit Download
8.53 KB lrw-rw-r-- 2025-03-03 05:39:26
Edit Download
4.14 KB lrw-rw-r-- 2025-10-28 05:24:52
Edit Download
8.53 KB lrw-rw-r-- 2025-10-28 05:24:35
Edit Download
37.58 KB lrw-rw-r-- 2026-04-07 05:00:51
Edit Download
8.71 KB lrw-r--r-- 2024-02-09 12:37:30
Edit Download
59.48 KB lrwxrwxr-x 2026-04-30 09:24:03
Edit Download
4.78 KB lrw-r--r-- 2024-02-09 12:37:30
Edit Download
10.79 KB lrw-rw-r-- 2025-04-21 06:11:52
Edit Download
11.37 KB lrw-rw-r-- 2024-07-24 04:42:48
Edit Download
72.51 KB lrw-rw-r-- 2026-04-22 04:31:21
Edit Download
11.43 KB lrw-rw-r-- 2024-09-20 05:02:14
Edit Download
6.57 KB lrw-rw-r-- 2026-03-31 07:16:20
Edit Download
4.26 KB lrw-r--r-- 2024-02-09 12:37:30
Edit Download
128.96 KB lrw-rw-r-- 2026-05-07 09:06:13
Edit Download
If ZipArchive is unavailable, a .tar will be created (no compression).