PHP 8.2.30
Preview: TicketRepository.php Size: 2.63 KB
/home/byroehnu/cnggold.com.ng/app/Repositories/Admin/TicketRepository.php

<?php

namespace App\Repositories\Admin;

use App\Models\Ticket;
use App\Repositories\Traits\ModelRepositoryTraits;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Facades\Auth;

class TicketRepository
{
    use ModelRepositoryTraits;

    /**
     * Object model will be used to modify tickets table
     */
    protected Ticket $model;

    /**
     * Constructor for Ticket repository
     */
    public function __construct(Ticket $ticket)
    {
        $this->model = $ticket;
    }

    /**
     * Get search result with pagination
     *
     * @param  string|null  $search
     */
    public function paginateSearchResult($search, array $sort = []): LengthAwarePaginator
    {
        $query = $this->model->with(['replies.user', 'user'])->newQuery();

        if (isset($search)) {
            $query->where('subject', 'like', '%'.$search.'%');
        }

        return $query->paginate(30)
            ->appends(array_filter([
                'search' => $search,
                'sort' => $sort,
            ]));
    }

    public function generateFileName($originalFileName)
    {
        /** check if the file with the same name already exist **/
        if ($this->model->where('original_file_name', $originalFileName)->exists()) {
            $maxSerial = $this->model->where('original_file_name', $originalFileName)->count() + 1;
            $fileName = pathinfo($originalFileName, PATHINFO_FILENAME).'-'.$maxSerial.'.'.pathinfo($originalFileName, PATHINFO_EXTENSION);
        } else {
            $fileName = $originalFileName;
        }

        return $fileName;
    }

    /**
     * Create a reply for a ticket with file attachment
     */
    public function createReply(Request $request, Ticket $ticket): void
    {
        $filePaths = [];

        if ($request->hasFile('documents')) {
            foreach ($request->file('documents') as $file) {
                $originalFileName = $file->getClientOriginalName();
                $fileName = $this->generateFileName($originalFileName);
                $filePath = $file->storeAs('tickets', $fileName);
                $filePaths[] = $filePath;
            }
        }

        $ticket->replies()->create([
            'user_id' => Auth::id(),
            'reply' => $request->input('message'),
            'documents' => json_encode($filePaths),
        ]);

        // update ticket status
        $ticket->update(['status' => $request->input('status')]);
    }

    /**
     * Bulk delete tickets
     */
    public function bulkDelete(Request $request): void
    {
        $ids = explode(',', $request->ids);
        Ticket::whereIn('id', $ids)->delete();
    }
}

Directory Contents

Dirs: 0 × Files: 38

Name Size Perms Modified Actions
713 B lrw-r--r-- 2025-04-08 04:12:56
Edit Download
3.94 KB lrw-r--r-- 2025-07-19 07:29:54
Edit Download
3.67 KB lrw-r--r-- 2025-05-22 03:36:31
Edit Download
8.83 KB lrw-r--r-- 2025-07-08 07:16:36
Edit Download
4.28 KB lrw-r--r-- 2025-05-15 11:40:33
Edit Download
1.27 KB lrw-r--r-- 2025-04-19 04:22:16
Edit Download
3.81 KB lrw-r--r-- 2025-04-08 04:12:56
Edit Download
2.42 KB lrw-r--r-- 2025-04-08 04:12:56
Edit Download
1.11 KB lrw-r--r-- 2025-04-08 04:12:56
Edit Download
1.58 KB lrw-r--r-- 2025-04-22 07:44:34
Edit Download
1.18 KB lrw-r--r-- 2025-05-05 10:37:43
Edit Download
11.35 KB lrw-r--r-- 2025-04-19 04:42:55
Edit Download
5.59 KB lrw-r--r-- 2025-05-15 11:24:11
Edit Download
982 B lrw-r--r-- 2025-04-19 04:22:17
Edit Download
5.26 KB lrw-r--r-- 2025-04-19 04:22:16
Edit Download
8.24 KB lrw-r--r-- 2025-07-08 07:16:36
Edit Download
1.40 KB lrw-r--r-- 2025-04-19 04:22:16
Edit Download
3.67 KB lrw-r--r-- 2025-05-22 03:36:31
Edit Download
9.08 KB lrw-r--r-- 2025-07-08 07:16:36
Edit Download
7.70 KB lrw-r--r-- 2025-04-19 04:22:16
Edit Download
5.04 KB lrw-r--r-- 2025-05-15 11:24:11
Edit Download
4.14 KB lrw-r--r-- 2025-07-19 07:29:54
Edit Download
8.30 KB lrw-r--r-- 2025-07-19 07:29:54
Edit Download
1.34 KB lrw-r--r-- 2025-05-22 13:45:40
Edit Download
653 B lrw-r--r-- 2025-04-19 04:22:17
Edit Download
3.79 KB lrw-r--r-- 2025-05-04 10:44:46
Edit Download
2.27 KB lrw-r--r-- 2025-04-26 10:16:33
Edit Download
3.63 KB lrw-r--r-- 2025-05-22 03:36:31
Edit Download
8.73 KB lrw-r--r-- 2025-07-08 07:16:36
Edit Download
723 B lrw-r--r-- 2025-04-19 04:22:16
Edit Download
2.42 KB lrw-r--r-- 2025-04-08 04:12:56
Edit Download
1.21 KB lrw-r--r-- 2025-05-22 13:45:40
Edit Download
7.49 KB lrw-r--r-- 2025-07-08 07:16:36
Edit Download
4.42 KB lrw-r--r-- 2025-05-01 06:16:57
Edit Download
1017 B lrw-r--r-- 2025-04-08 04:12:56
Edit Download
2.63 KB lrw-r--r-- 2025-04-13 07:02:31
Edit Download
3.51 KB lrw-r--r-- 2025-04-19 04:22:16
Edit Download
2.51 KB lrw-r--r-- 2025-04-08 04:12:56
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).