Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 757cd1ca9e | |||
| 820f8e46d9 | |||
| db3ac37042 | |||
| 605ccf5a7b |
@@ -38,6 +38,14 @@ class VerifyEmailNotification extends Notification
|
|||||||
protected function verificationUrl(User $notifiable): string
|
protected function verificationUrl(User $notifiable): string
|
||||||
{
|
{
|
||||||
$expireMinutes = (int) config('auth.verification.expire_minutes', 60);
|
$expireMinutes = (int) config('auth.verification.expire_minutes', 60);
|
||||||
|
$root = rtrim((string) config('app.url'), '/');
|
||||||
|
|
||||||
|
// Prefer APP_URL over the current request host so queued/local proxy
|
||||||
|
// contexts do not embed http://localhost in production emails.
|
||||||
|
URL::forceRootUrl($root);
|
||||||
|
if ($scheme = parse_url($root, PHP_URL_SCHEME)) {
|
||||||
|
URL::forceScheme($scheme);
|
||||||
|
}
|
||||||
|
|
||||||
return URL::temporarySignedRoute(
|
return URL::temporarySignedRoute(
|
||||||
'verification.verify',
|
'verification.verify',
|
||||||
|
|||||||
@@ -2,7 +2,9 @@
|
|||||||
|
|
||||||
namespace Modules\Auth\Providers;
|
namespace Modules\Auth\Providers;
|
||||||
|
|
||||||
|
use Illuminate\Auth\Events\Registered;
|
||||||
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
||||||
|
use Illuminate\Support\Facades\Event;
|
||||||
|
|
||||||
class EventServiceProvider extends ServiceProvider
|
class EventServiceProvider extends ServiceProvider
|
||||||
{
|
{
|
||||||
@@ -24,4 +26,13 @@ class EventServiceProvider extends ServiceProvider
|
|||||||
* Configure the proper event listeners for email verification.
|
* Configure the proper event listeners for email verification.
|
||||||
*/
|
*/
|
||||||
protected function configureEmailVerification(): void {}
|
protected function configureEmailVerification(): void {}
|
||||||
|
|
||||||
|
public function boot(): void
|
||||||
|
{
|
||||||
|
// Framework auto-registers SendEmailVerificationNotification on Registered.
|
||||||
|
// Verification is user-initiated via the email verification banner instead.
|
||||||
|
$this->app->booted(function () {
|
||||||
|
Event::forget(Registered::class);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,12 +4,11 @@
|
|||||||
|
|
||||||
@section('letter-reference', $application->application_number)
|
@section('letter-reference', $application->application_number)
|
||||||
|
|
||||||
@section('letter-date', now()->translatedFormat('d F Y'))
|
@section('letter-date', now()->locale('ms')->translatedFormat('d F Y'))
|
||||||
|
|
||||||
@section('letter-recipient')
|
@section('letter-recipient')
|
||||||
<strong>{{ $applicant->name }}</strong><br>
|
<strong>{{ $applicant->name }}</strong><br>
|
||||||
{!! nl2br(e($applicant->address)) !!}<br>
|
{!! nl2br(e($applicant->address)) !!}
|
||||||
{{ $applicant->postcode }}
|
|
||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
@section('letter-honorific')
|
@section('letter-honorific')
|
||||||
|
|||||||
@@ -444,7 +444,7 @@ class MembershipApplicationService
|
|||||||
'application' => $application,
|
'application' => $application,
|
||||||
'applicant' => $applicant,
|
'applicant' => $applicant,
|
||||||
'boardMeetingReference' => $boardMeetingReference,
|
'boardMeetingReference' => $boardMeetingReference,
|
||||||
'boardMeetingDate' => Carbon::parse($boardMeetingDate)->translatedFormat('d F Y'),
|
'boardMeetingDate' => Carbon::parse($boardMeetingDate)->locale('ms')->translatedFormat('d F Y'),
|
||||||
'isPassed' => $isPassed,
|
'isPassed' => $isPassed,
|
||||||
'letterSubject' => $isPassed
|
'letterSubject' => $isPassed
|
||||||
? 'KELULUSAN PERMOHONAN MENJADI ANGGOTA KOPERASI PERMODALAN KELANTAN BERHAD (KoPKB)'
|
? 'KELULUSAN PERMOHONAN MENJADI ANGGOTA KOPERASI PERMODALAN KELANTAN BERHAD (KoPKB)'
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ class UserController extends BaseCrudController
|
|||||||
'ic_number' => 'sometimes|string|max:255|unique:users,ic_number,'.$user->id,
|
'ic_number' => 'sometimes|string|max:255|unique:users,ic_number,'.$user->id,
|
||||||
'position' => 'sometimes|string|max:255',
|
'position' => 'sometimes|string|max:255',
|
||||||
'phone_number' => 'sometimes|string|max:255',
|
'phone_number' => 'sometimes|string|max:255',
|
||||||
'image' => 'sometimes|image|mimes:jpeg,png,jpg,gif|max:2048',
|
'image' => 'sometimes|image|mimes:jpeg,png,jpg,gif|max:5120',
|
||||||
'image_url' => 'sometimes|string|max:255',
|
'image_url' => 'sometimes|string|max:255',
|
||||||
'gender' => 'sometimes|string|max:255',
|
'gender' => 'sometimes|string|max:255',
|
||||||
'marriage_status' => 'sometimes|string|max:255',
|
'marriage_status' => 'sometimes|string|max:255',
|
||||||
|
|||||||
@@ -163,6 +163,9 @@ COPY --from=builder /usr/local/bin/docker-php-ext-* /usr/local/bin/
|
|||||||
# Use the recommended production PHP configuration
|
# Use the recommended production PHP configuration
|
||||||
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
|
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
|
||||||
|
|
||||||
|
# Custom PHP overrides (upload limits, etc.) — official image loads conf.d/*.ini
|
||||||
|
COPY be/docker/common/unified/php/uploads.ini /usr/local/etc/php/conf.d/uploads.ini
|
||||||
|
|
||||||
# Enable PHP-FPM status page via separate config file (avoid modifying zz-docker.conf)
|
# Enable PHP-FPM status page via separate config file (avoid modifying zz-docker.conf)
|
||||||
RUN echo '[www]' > /usr/local/etc/php-fpm.d/zzz-status.conf && \
|
RUN echo '[www]' > /usr/local/etc/php-fpm.d/zzz-status.conf && \
|
||||||
echo 'pm.status_path = /status' >> /usr/local/etc/php-fpm.d/zzz-status.conf
|
echo 'pm.status_path = /status' >> /usr/local/etc/php-fpm.d/zzz-status.conf
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ http {
|
|||||||
sendfile on;
|
sendfile on;
|
||||||
keepalive_timeout 65;
|
keepalive_timeout 65;
|
||||||
|
|
||||||
|
client_max_body_size 128M;
|
||||||
|
|
||||||
# Logging
|
# Logging
|
||||||
access_log /var/log/nginx/access.log;
|
access_log /var/log/nginx/access.log;
|
||||||
error_log /var/log/nginx/error.log;
|
error_log /var/log/nginx/error.log;
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
; Keep above Laravel validation (max:10240 = 10MB)
|
||||||
|
upload_max_filesize = 12M
|
||||||
|
post_max_size = 12M
|
||||||
@@ -8,6 +8,8 @@ http {
|
|||||||
|
|
||||||
sendfile on;
|
sendfile on;
|
||||||
keepalive_timeout 65;
|
keepalive_timeout 65;
|
||||||
|
|
||||||
|
client_max_body_size 128M;
|
||||||
|
|
||||||
access_log /var/log/nginx/access.log;
|
access_log /var/log/nginx/access.log;
|
||||||
error_log /var/log/nginx/error.log;
|
error_log /var/log/nginx/error.log;
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ http {
|
|||||||
sendfile on;
|
sendfile on;
|
||||||
keepalive_timeout 65;
|
keepalive_timeout 65;
|
||||||
|
|
||||||
|
client_max_body_size 128M;
|
||||||
|
|
||||||
# Logging
|
# Logging
|
||||||
access_log /var/log/nginx/access.log;
|
access_log /var/log/nginx/access.log;
|
||||||
error_log /var/log/nginx/error.log;
|
error_log /var/log/nginx/error.log;
|
||||||
|
|||||||
@@ -692,7 +692,12 @@ function stepLabelClass(stepId: number) {
|
|||||||
<template v-else-if="currentStep === 2">
|
<template v-else-if="currentStep === 2">
|
||||||
<Field class="col-span-12">
|
<Field class="col-span-12">
|
||||||
<FieldLabel for="address">Alamat</FieldLabel>
|
<FieldLabel for="address">Alamat</FieldLabel>
|
||||||
<Textarea id="address" v-model="form.applicant.address" rows="3" />
|
<Textarea
|
||||||
|
id="address"
|
||||||
|
v-model="form.applicant.address"
|
||||||
|
rows="3"
|
||||||
|
placeholder="Lot Pt 448, Tingkat 1, Jalan Kuala Krai, Batu 3, Wakaf Che Yeh, 15150 Kota Bharu, Kelantan."
|
||||||
|
/>
|
||||||
<FieldError v-if="fieldErrors['applicant.address']">{{ fieldErrors['applicant.address'] }}</FieldError>
|
<FieldError v-if="fieldErrors['applicant.address']">{{ fieldErrors['applicant.address'] }}</FieldError>
|
||||||
</Field>
|
</Field>
|
||||||
<Field class="col-span-12 sm:col-span-4">
|
<Field class="col-span-12 sm:col-span-4">
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ const DOCUMENT_TYPE_LABELS: Record<string, string> = {
|
|||||||
[RESULT_LETTER_DOCUMENT_TYPE]: 'Surat Keputusan',
|
[RESULT_LETTER_DOCUMENT_TYPE]: 'Surat Keputusan',
|
||||||
}
|
}
|
||||||
|
|
||||||
const BOARD_MEETING_REFERENCE_PREFIX = 'Mesyuarat Lembaga Bil.'
|
const BOARD_MEETING_REFERENCE_PREFIX = 'Mesyuarat Lembaga KoPKB Bil. '
|
||||||
|
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
|||||||
@@ -190,6 +190,9 @@ onMounted(async () => {
|
|||||||
No. {{ authStore.userMemberNumber }}
|
No. {{ authStore.userMemberNumber }}
|
||||||
</Badge>
|
</Badge>
|
||||||
</div>
|
</div>
|
||||||
|
<p class="mt-2 text-xs opacity-70">
|
||||||
|
Gambar profil: maksimum 2 MB (JPEG, PNG, GIF).
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -318,7 +318,6 @@ async function confirmRestore() {
|
|||||||
const headers: TableHeader[] = [
|
const headers: TableHeader[] = [
|
||||||
{ title: 'Bil.', key: '#', sortable: false },
|
{ title: 'Bil.', key: '#', sortable: false },
|
||||||
{ title: 'Name', key: 'name', sortable: true },
|
{ title: 'Name', key: 'name', sortable: true },
|
||||||
{ title: 'Jenis Anggota', key: 'member_type', sortable: true },
|
|
||||||
{
|
{
|
||||||
title: 'Unit',
|
title: 'Unit',
|
||||||
key: 'company_name',
|
key: 'company_name',
|
||||||
|
|||||||
Reference in New Issue
Block a user