fix deployment db issue and widthrawal administration page
Deploy to Shared Hosting / Shared hosting deploy (push) Failing after 47s
Tests / PHPUnit (push) Failing after 1m19s

This commit is contained in:
root
2026-08-20 20:18:00 -04:00
parent 889c037660
commit d3da699e55
19 changed files with 1170 additions and 194 deletions
+25 -10
View File
@@ -6,16 +6,16 @@ use CodeIgniter\Config\BaseConfig;
class Email extends BaseConfig
{
public string $protocol = 'smtp';
public string $SMTPHost = 'smtp.gmail.com';
public string $SMTPUser = 'alrahma.sunday.school@gmail.com';
public string $SMTPPass = 'psnp emdq dykw ypul'; // Consider using ENV()
public int $SMTPPort = 465;
public string $SMTPCrypto = 'ssl'; // ✅ Correct for port 465
public string $protocol;
public string $SMTPHost;
public string $SMTPUser;
public string $SMTPPass;
public int $SMTPPort;
public string $SMTPCrypto;
public bool $SMTPAuth = true;
public int $SMTPTimeout = 5;
public bool $SMTPKeepAlive = true;
public bool $SMTPAuth;
public int $SMTPTimeout;
public bool $SMTPKeepAlive;
public string $charset = 'UTF-8';
public string $mailType = 'html';
@@ -23,4 +23,19 @@ class Email extends BaseConfig
public string $newline = "\r\n";
public string $CRLF = "\r\n";
}
public function __construct()
{
parent::__construct();
$this->protocol = (string) env('mail.protocol', env('email.protocol', 'smtp'));
$this->SMTPHost = (string) env('mail.SMTPHost', env('email.SMTPHost', env('SMTP_HOST', 'smtp.gmail.com')));
$this->SMTPUser = (string) env('mail.SMTPUser', env('email.SMTPUser', env('SMTP_USER', '')));
$this->SMTPPass = (string) env('mail.SMTPPass', env('email.SMTPPass', env('SMTP_PASS', '')));
$this->SMTPPort = (int) env('mail.SMTPPort', env('email.SMTPPort', env('SMTP_PORT', 465)));
$this->SMTPCrypto = (string) env('mail.SMTPCrypto', env('email.SMTPCrypto', env('SMTP_ENCRYPTION', 'ssl')));
$this->SMTPAuth = filter_var(env('mail.SMTPAuth', env('email.SMTPAuth', true)), FILTER_VALIDATE_BOOLEAN);
$this->SMTPTimeout = (int) env('mail.SMTPTimeout', env('email.SMTPTimeout', 5));
$this->SMTPKeepAlive = filter_var(env('mail.SMTPKeepAlive', env('email.SMTPKeepAlive', true)), FILTER_VALIDATE_BOOLEAN);
}
}
+23 -3
View File
@@ -29,7 +29,7 @@ class Filters extends BaseConfig
'auth' => \App\Filters\AuthFilter::class, // Define the alias for your auth filter
'apiAuth' => \App\Filters\ApiAuthFilter::class, // JWT-based API authentication
'cleanupScheduler' => \App\Filters\CleanupScheduler::class,
'permission' => \App\Filters\PermissionFilter::class,
'permission' => \App\Filters\PermissionFilter::class,
'timezone' => \App\Filters\TimezoneFilter::class,
'schoolYear' => \App\Filters\RequireSchoolYearFilter::class,
'schoolYearWritable'=> \App\Filters\SchoolYearWritableFilter::class,
@@ -45,10 +45,30 @@ class Filters extends BaseConfig
*/
public array $globals = [
'before' => [
'timezone',
// Heartbeat must not load timezone preferences / settings.
'timezone' => ['except' => [
'session/ping-activity',
'index.php/session/ping-activity',
'session/ping',
'index.php/session/ping',
'session/check-timeout',
'index.php/session/check-timeout',
'session/get-timeout-config',
'index.php/session/get-timeout-config',
]],
'sanitizeinput',
'invalidchars',
'schoolYearWritable',
// Heartbeat is not a school-year write; skip writable-year DB work.
'schoolYearWritable' => ['except' => [
'session/ping-activity',
'index.php/session/ping-activity',
'session/ping',
'index.php/session/ping',
'session/check-timeout',
'index.php/session/check-timeout',
'session/get-timeout-config',
'index.php/session/get-timeout-config',
]],
'csrf' => ['except' => [
// Attendance management AJAX saves
'attendance/update',
+3 -2
View File
@@ -308,8 +308,9 @@ $routes->get('ui/style', 'View\UiController::style');
//Timeout page after timeout
$routes->get('session/get-timeout-config', 'View\SessionTimeoutController::getTimeoutConfig');
$routes->get('session/check-timeout', 'View\SessionTimeoutController::checkTimeout');
$routes->post('session/ping-activity', 'View\SessionTimeoutController::pingActivity');
$routes->post('session/ping', 'View\SessionTimeoutController::pingActivity');
// Cap heartbeat to ~5 requests/minute per authenticated session (or IP if anonymous).
$routes->post('session/ping-activity', 'View\SessionTimeoutController::pingActivity', ['filter' => 'apiratelimit:5,60']);
$routes->post('session/ping', 'View\SessionTimeoutController::pingActivity', ['filter' => 'apiratelimit:5,60']);
/*
+9 -6
View File
@@ -6,13 +6,16 @@ class SessionTimeout
{
// Session timeout in seconds (30 minutes)
public const TIMEOUT_DURATION = 1800;
// Show warning during the last 30 seconds before timeout.
public const WARNING_THRESHOLD = 1770;
// Server-side check interval (in seconds)
public const CHECK_INTERVAL = 5;
// Client-side check interval (in milliseconds)
public const CLIENT_CHECK_INTERVAL = 5000;
public const CHECK_INTERVAL = 30;
// Client-side session status check interval (in milliseconds)
public const CLIENT_CHECK_INTERVAL = 30000;
// Minimum interval between successful activity pings (in milliseconds)
public const CLIENT_PING_INTERVAL = 60000;
}