From f39eca4b1ce2b60ffbe8168574923c8f28a3192a Mon Sep 17 00:00:00 2001 From: Saufi Date: Mon, 18 May 2026 22:18:18 +0800 Subject: [PATCH] feat: input field saiz font No IC dalam konfigurasi template MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Tambah fields[name][ic_font_size] dalam form — baris: Warna | Saiz Font No IC | Align - Default: 70% daripada saiz font nama (sebelum ini hardcode 50%) - loadPreview() hantar ic_font_size terkini ke endpoint pratonton - writeIcBelow() baca ic_font_size dari config, fallback 70% jika tiada - Validasi updateConfig: ic_font_size nullable|integer|min:8|max:200 Co-Authored-By: Claude Sonnet 4.6 --- .../Admin/CertificateTemplateController.php | 1 + app/Services/CertificateService.php | 7 ++++--- .../admin/programs/template/show.blade.php | 17 ++++++++++++----- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/Admin/CertificateTemplateController.php b/app/Http/Controllers/Admin/CertificateTemplateController.php index 8e78c00..05d9f32 100644 --- a/app/Http/Controllers/Admin/CertificateTemplateController.php +++ b/app/Http/Controllers/Admin/CertificateTemplateController.php @@ -55,6 +55,7 @@ class CertificateTemplateController extends Controller 'fields.*.x' => 'required|integer|min:0', 'fields.*.y' => 'required|integer|min:0', 'fields.*.font_size' => 'required|integer|min:8|max:200', + 'fields.*.ic_font_size' => 'nullable|integer|min:8|max:200', 'fields.*.font_color' => 'required|string|max:20', 'fields.*.align' => 'required|in:left,center,right', ]); diff --git a/app/Services/CertificateService.php b/app/Services/CertificateService.php index 55172f6..fd07c4a 100644 --- a/app/Services/CertificateService.php +++ b/app/Services/CertificateService.php @@ -90,13 +90,14 @@ class CertificateService return $image->encode(new JpegEncoder(85))->toString(); } - // Tulis IC di bawah nama — auto-posisi, font 50% nama + // Tulis IC di bawah nama — auto-posisi Y, saiz font dari config atau fallback 70% private function writeIcBelow(\Intervention\Image\Interfaces\ImageInterface $image, string $ic, array $nameCfg): void { $nameFontSize = (int) ($nameCfg['font_size'] ?? 48); - $icFontSize = (int) round($nameFontSize * 0.5); + $icFontSize = isset($nameCfg['ic_font_size']) && (int) $nameCfg['ic_font_size'] > 0 + ? (int) $nameCfg['ic_font_size'] + : (int) round($nameFontSize * 0.7); - // Y offset: line height nama (1.4×) + sedikit jarak $icY = (int) ($nameCfg['y'] ?? 0) + (int) round($nameFontSize * 1.5); $this->writeText($image, $ic, array_merge($nameCfg, [ diff --git a/resources/views/admin/programs/template/show.blade.php b/resources/views/admin/programs/template/show.blade.php index 79fe93b..41f4f5f 100644 --- a/resources/views/admin/programs/template/show.blade.php +++ b/resources/views/admin/programs/template/show.blade.php @@ -175,6 +175,12 @@ class="form-control form-control-color form-control-sm" value="{{ $fields['name']['font_color'] ?? '#1a3a6b' }}"> +
+ + +