Anons79 Mini Shell

Directory : /home/aplikasiposinfo/www/talent.gosepakat.id/app/Http/Controllers/Admin/
Upload File :
Current File : /home/aplikasiposinfo/www/talent.gosepakat.id/app/Http/Controllers/Admin/PendaftaranController.php

<?php

namespace App\Http\Controllers\Admin;

use App\Facades\DataTable;
use App\Helpers\NotifWa;
use App\Http\Controllers\Controller;
use App\Models\PelatihanPeserta;
use Barryvdh\DomPDF\Facade\Pdf;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Inertia\Inertia;
use setasign\Fpdi\Fpdi;

class PendaftaranController extends Controller
{
    public function index()
    {
        $sort = str_replace(
            ['created_at'],
            ['created_at'],
            request()->query('col')
        );
        $query = PelatihanPeserta::has('user')->has('pelatihan');
        if (auth()->user()->role == "instruktur") {
            $query = $query->whereHas('pelatihan', function ($w) {
                $w->where('user_id', auth()->user()->id);
            });
        }
        $result = DataTable::query($query)
            ->with(['user.peserta', 'pelatihan'])
            ->searchable(['user.nama', 'user.email', 'user.peserta.nik'])
            ->applySort($sort)
            ->allowedSorts(['created_at'])
            ->make()->toArray();


        return Inertia::render('Admin/Pendaftaran/Index', [
            'datatable' => $result,
        ]);
    }

    public function reject($id)
    {
        $pelatihan_peserta = PelatihanPeserta::with('user.peserta', 'pelatihan')->findOrFail($id);
        $pelatihan_peserta->status = 'reject';
        $pelatihan_peserta->save();
        if ($pelatihan_peserta->user->peserta->no_hp) {
            NotifWa::send($pelatihan_peserta->user->peserta->no_hp, 'Pendaftaran untuk pelatihan : *' . $pelatihan_peserta->pelatihan->title . "* DITOLAK");
        }
        return redirect(route('admin.pendaftaran.index'))->with('success', 'Berhasil menolak peserta ' . $pelatihan_peserta->user->nama);
    }

    public function approve($id)
    {
        $pelatihan_peserta = PelatihanPeserta::with('user.peserta', 'pelatihan')->findOrFail($id);
        $pelatihan_peserta->status = 'approve';
        $pelatihan_peserta->save();
        if ($pelatihan_peserta->user->peserta->no_hp) {
            NotifWa::send($pelatihan_peserta->user->peserta->no_hp, 'Pendaftaran untuk pelatihan : *' . $pelatihan_peserta->pelatihan->title . "* DITERIMA");
        }
        return redirect(route('admin.pendaftaran.index'))->with('success', 'Berhasil menyetujui peserta ' . $pelatihan_peserta->user->nama);
    }

    public function show($id)
    {
        $pelatihan_peserta = PelatihanPeserta::with('user.peserta.kabupaten', 'user.peserta.provinsi', 'peserta.kabupaten', 'peserta.provinsi', 'pelatihan', 'jawaban_syarat_pelatihans.syarat_pelatihan', 'user.peserta.provinsi', 'user.peserta.kabupaten')->findOrFail($id);
        return Inertia::render('Admin/Pendaftaran/Show', [
            'pelatihan_peserta' => $pelatihan_peserta,
            'pelatihan' => $pelatihan_peserta->pelatihan
        ]);
    }

    public function printSertifikat($id)
    {
        $pelatihanPeserta = PelatihanPeserta::has('user.peserta')->with('user.peserta', 'pelatihan.pelatihan_materis', 'jawaban_syarat_pelatihans.syarat_pelatihan', 'user.peserta.provinsi', 'user.peserta.kabupaten')->findOrFail($id);
        $noSertifikat = ($pelatihanPeserta->id + 170) . 'GN-' . date("m/Y", strtotime($pelatihanPeserta->pelatihan->end_date));
        // return view('sertifikat',compact('pelatihanPeserta','noSertifikat'));
        $pdf = Pdf::loadView('sertifikat', compact('pelatihanPeserta', 'noSertifikat'));
        $pdf->setPaper('A4', 'landscape');
        // $pdf->setOption(['isRemoteEnabled' => true]);
        return $pdf->stream('sertifikat.pdf');
    }

    public function printDetail($id)
    {
        $pelatihan_peserta = PelatihanPeserta::with([
            'user.peserta.kabupaten',
            'user.peserta.provinsi',
            'peserta.kabupaten',
            'peserta.provinsi',
            'pelatihan',
            'jawaban_syarat_pelatihans.syarat_pelatihan'
        ])->findOrFail($id);

        $peserta = $pelatihan_peserta->peserta;
        $data = [
            'pelatihan_peserta' => $pelatihan_peserta,
            'pelatihan' => $pelatihan_peserta->pelatihan,
            'peserta' => $peserta
        ];

        // Handle KTP photo
        if ($peserta->foto_ktp) {
            $data['foto_ktp'] = 'data:image/png;base64,' . base64_encode(
                Storage::get($peserta->foto_ktp)
            );
        }

        // Handle KK photo
        if ($peserta->foto_kk) {
            $data['foto_kk'] = 'data:image/png;base64,' . base64_encode(
                Storage::get($peserta->foto_kk)
            );
        }

        // Handle Bukti Usaha
        if ($peserta->file_bukti_usaha) {
            $mime = Storage::mimeType($peserta->file_bukti_usaha);
            if (strpos($mime, 'image') !== false) {
                $data['file_bukti_usaha'] = 'data:' . $mime . ';base64,' . base64_encode(
                    Storage::get($peserta->file_bukti_usaha)
                );
                $data['is_bukti_usaha_image'] = true;
            }
        }

        // Handle Profil Usaha
        if ($peserta->file_profil_usaha) {
            $mime = Storage::mimeType($peserta->file_profil_usaha);
            if (strpos($mime, 'image') !== false) {
                $data['file_profil_usaha'] = 'data:' . $mime . ';base64,' . base64_encode(
                    Storage::get($peserta->file_profil_usaha)
                );
                $data['is_profil_usaha_image'] = true;
            }
        }

        // Handle Ijin Usaha
        if ($peserta->file_ijin_usaha) {
            $mime = Storage::mimeType($peserta->file_ijin_usaha);
            if (strpos($mime, 'image') !== false) {
                $data['file_ijin_usaha'] = 'data:' . $mime . ';base64,' . base64_encode(
                    Storage::get($peserta->file_ijin_usaha)
                );
                $data['is_ijin_usaha_image'] = true;
            }
        }


        // Process file attachments for the requirements
        foreach ($pelatihan_peserta->jawaban_syarat_pelatihans as $syarat) {
            if ($syarat->syarat_pelatihan->type == 'file' && !empty($syarat->jawaban) && $syarat->jawaban != '-') {
                try {
                    $mime = Storage::mimeType($syarat->jawaban);
                    if (strpos($mime, 'image') !== false) {
                        $syarat->file_type = 'image';
                        $syarat->file_content = 'data:' . $mime . ';base64,' . base64_encode(
                            Storage::get($syarat->jawaban)
                        );
                    } else {
                        $syarat->file_type = 'pdf';
                    }
                } catch (\Exception $e) {
                    $syarat->file_type = null;
                    $syarat->file_content = null;
                }
            }
        }

        // Generate the main PDF
        $pdf = Pdf::loadView('pdf.pendaftaran-detail', $data);

        

        // Collect PDF attachments
        // Get file attachments
        $attachments = [];
        foreach (['file_bukti_usaha', 'file_profil_usaha', 'file_ijin_usaha'] as $field) {
            if ($peserta->$field) {
                $mime = Storage::mimeType($peserta->$field);
                if (strpos($mime, 'pdf') !== false) {
                    $attachments[] = [
                        'content' => Storage::get($peserta->$field),
                        'filename' => basename($peserta->$field),
                        'description' => str_replace("_"," ",$field)
                    ];
                }
            }
        }


        foreach ($pelatihan_peserta->jawaban_syarat_pelatihans as $syarat) {
            if (
                $syarat->syarat_pelatihan->type == 'file' &&
                !empty($syarat->jawaban) &&
                $syarat->jawaban != '-' &&
                $syarat->file_type == 'pdf'
            ) {
                try {
                    $attachments[] = [
                        'content' => Storage::get($syarat->jawaban),
                        'filename' => basename($syarat->jawaban),
                        'description' => $syarat->syarat_pelatihan->description
                    ];
                } catch (\Exception $e) {
                    continue;
                }
            }
        }

        // If there are PDF attachments, merge them with the main PDF
        if (!empty($attachments)) {
            $mainPdf = $pdf->output();
            $merger = new \setasign\Fpdi\Tcpdf\Fpdi();
            
            // Create temporary files
            $mainTempFile = tempnam(sys_get_temp_dir(), 'main_');
            file_put_contents($mainTempFile, $mainPdf);

            // Add main PDF
            $pageCount = $merger->setSourceFile($mainTempFile);
            for ($i = 1; $i <= $pageCount; $i++) {
                $merger->addPage();
                $merger->useTemplate($merger->importPage($i));
            }
            unlink($mainTempFile);

            // Add attachments
            foreach ($attachments as $attachment) {
                try {
                    $tempFile = tempnam(sys_get_temp_dir(), 'attachment_');
                    file_put_contents($tempFile, $attachment['content']);
                    
                    // Get PDF info from the attachment
                    $pageCount = $merger->setSourceFile($tempFile);
                    
                    // Add title page for the attachment
                    $merger->AddPage();
                    $merger->SetFont('Helvetica', 'B', 14);
                    $merger->MultiCell(0, 10, 'Lampiran: ' . $attachment['description'], 0, 'C');
                    
                    try {
                        // Add the attachment pages with original size and orientation
                        for ($i = 1; $i <= $pageCount; $i++) {
                            $tpl = $merger->importPage($i);
                            $specs = $merger->getTemplateSize($tpl);
                            
                            // Add page with original orientation
                            $merger->AddPage($specs['orientation'], [$specs['width'], $specs['height']]);
                            $merger->useTemplate($tpl);
                        }
                    } catch (\Throwable $th) {
                        //throw $th;
                    }
                    unlink($tempFile);
                } catch (\Throwable $th) {
                    //throw $th;
                }
            }

            return response($merger->Output('S'))
                ->header('Content-Type', 'application/pdf')
                ->header('Content-Disposition', 'inline; filename="pendaftaran-' . $pelatihan_peserta->id . '.pdf"');
        }

        return $pdf->stream('pendaftaran-' . $pelatihan_peserta->id . '.pdf');
    }
}

Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]