Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
120 changes: 107 additions & 13 deletions bin/cron.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,14 @@

use ICT\Core\Service;
use ICT\Core\Task;
use ICT\Core\Corelog;
use ICT\Core\User;
use ICT\Core\Tenant;
use ICT\Core\Transmission;
use ICT\Core\Message\Document;
use ICT\Core\Spool;
use ICT\Core\Password_Policy;
use ICT\Core\DB;

// default include is /usr/ictcore/core
chdir(dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'core');
Expand All @@ -16,20 +24,106 @@

function cron_process()
{
// process all pending retries
Task::process_all();

// execute reload method for all available services
// it will restart gateway in case there are new configurations
$listService = Service::load_all();
foreach ($listService as $oService) {
$oService->config_update();
}

// execute email fetch script
// nothing special we just need to include it for execution
include_once('../bin/sendmail/gateway.php');
// -----------------------------------------------
// OLD ORIGINAL FUNCTIONS (UNTOUCHED)
// -----------------------------------------------

// process all pending retries
Task::process_all();

// counting user password expiration
$Password_Policy = new Password_Policy();
$Password_Policy->password_exp_limit();

// reload method for all services
$listService = Service::load_all();
foreach ($listService as $oService) {
$oService->config_update();
}

// execute email fetch script
include_once('../bin/sendmail/gateway.php');

date_default_timezone_set('UTC');
$newDateTime = date('h:i A');
if ($newDateTime == '12:00 AM') {

Corelog::log('Reseting tenant limits at: ' . date('r'), Corelog::INFO);

$listUser = User::search();
foreach ($listUser as $aUser) {
$oUser = new User($aUser['user_id']);
$oUser->reset_daily_sent();
if (date('d') == 1) {
$oUser->reset_monthly_sent();
}
}
}

// -----------------------------------------------
// ⭐ ADDED: schedule.fax.cron.php functions
// -----------------------------------------------

Corelog::log("=== FAX CRON STARTED ===", Corelog::INFO);
Corelog::log("TIME: " . date('Y-m-d H:i:s'), Corelog::INFO);

$currentTime = time();

$query = "
SELECT transmission_id
FROM transmission
WHERE status = '" . Transmission::STATUS_PENDING . "'
AND (schedule_time IS NULL OR schedule_time <= $currentTime)
ORDER BY transmission_id DESC
LIMIT 1
";

$results = DB::query('transmission', $query);

if (empty($results)) {
Corelog::log("No pending transmissions at " . date('Y-m-d H:i:s'), Corelog::INFO);
return;
}

foreach ($results as $row) {
try {
$transmission = new Transmission($row['transmission_id']);

if (!isset($transmission->transmission_id)) {
Corelog::log("Invalid transmission object — skipping", Corelog::WARNING);
continue;
}

if (empty($transmission->contact_id)) {
Corelog::log("Contact missing — calling send() anyway", Corelog::WARNING);
}

$success = $transmission->send();

// if ($success) {
// $transmission->status = Transmission::STATUS_COMPLETED;
// $transmission->response = "Sent successfully";
// } else {
// $transmission->status = Transmission::STATUS_FAILED;
// $transmission->response = "Send failed";
// }

$transmission->last_run = time();

if (method_exists($transmission, 'save')) {
$transmission->save();
} else {
Corelog::log("Save method missing — cannot update", Corelog::WARNING);
}

} catch (Exception $e) {
Corelog::log("Error: " . $e->getMessage(), Corelog::ERROR);
}
}

Corelog::log("=== FAX CRON FINISHED ===", Corelog::INFO);
}

// run cron
cron_process();
exit();
Loading