| Server IP : 172.67.201.108 / Your IP : 216.73.216.25 Web Server : Apache/2.4.68 (Amazon Linux) OpenSSL/3.5.5 System : Linux ip-172-31-69-123.ec2.internal 6.1.176-223.369.amzn2023.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Jul 24 13:34:27 UTC 2026 x86_64 User : ec2-user ( 1000) PHP Version : 8.4.23 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/tgnewprod/admin/classes/lib/ |
Upload File : |
<?php
namespace classes\lib;
use Exception;
class BatchJob {
protected $job_id;
public function __construct(int|null $job_id = NULL, int|NULL $reference_id = NULL, string $job_type = '') {
if (!empty($job_id)) :
$this->job_id = $job_id;
return;
endif;
global $db;
try {
$db->beginTransaction();
$sql = "
INSERT INTO batch_jobs SET
status = 'not_started',
job_type = " . $db->quote($job_type) . ",
reference_id = " . nz($reference_id, 'NULL') . ",
initiated_by = " . nz(trim($_SESSION['user_id']), '0') . "
";
$db->query($sql) ;
$this->job_id = last_id();
$db->commit();
} catch(Exception $e) {
db_err_rollback($e);
}
}
public function get_job_id(): int {
return $this->job_id;
}
public function start($job_name, $args = []): void {
global $db;
try {
$db->beginTransaction();
$sql = "
UPDATE batch_jobs SET
start_time = NOW(),
status = 'running'
WHERE id = " . nz($this->job_id, '0') . "
";
$db->query($sql) ;
$db->commit();
} catch(Exception $e) {
db_err_rollback($e);
}
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') :
$nulldev = '> NUL 2>&1 &';
else :
$nulldev = '> /dev/null 2>/dev/null &';
endif;
$command = 'php ' . APP_ROOT_DIR . '/batch.php ' . $job_name . ' ' . implode(' ', $args) . ' ' . $nulldev;
shell_exec($command);
}
public function finish($cancel = false): void {
global $db;
$status = $cancel ? 'cancelled' : 'completed';
try {
$db->beginTransaction();
$sql = "
UPDATE batch_jobs SET
end_time = NOW(),
status = '{$status}'
WHERE id = " . nz($this->job_id, '0') . "
";
$db->query($sql) ;
$db->commit();
} catch(Exception $e) {
db_err_rollback($e);
}
}
public function fail($message = null): void {
global $db;
try {
$db->beginTransaction();
$sql = "
UPDATE batch_jobs SET
end_time = NOW(),
status = 'failed',
output = CONCAT(COALESCE(output, ''), " . $db->quote('<p>' . $message . '</p>') . ")
WHERE id = " . nz($this->job_id, '0') . "
";
$db->query($sql) ;
$db->commit();
} catch(Exception $e) {
db_err_rollback($e);
}
}
public function append_output($text): void {
global $db;
$output = PHP_EOL . $text;
try {
$db->beginTransaction();
$sql = "
UPDATE batch_jobs SET
output = CONCAT(COALESCE(output, ''), " . $db->quote($output) . ")
WHERE id = " . nz($this->job_id, '0') . "
";
$db->query($sql) ;
$db->commit();
} catch(Exception $e) {
db_err_rollback($e);
}
}
public function set_total_recs(int $num_recs): void {
global $db;
try {
$db->beginTransaction();
$sql = "
UPDATE batch_jobs SET
total_recs = " . nz($num_recs, '0') . "
WHERE id = " . nz($this->job_id, '0') . "
";
$db->query($sql) ;
$db->commit();
} catch(Exception $e) {
db_err_rollback($e);
}
}
public function set_processed_recs(int $num_recs): void {
global $db;
try {
$db->beginTransaction();
$sql = "
UPDATE batch_jobs SET
processed_recs = " . nz($num_recs, '0') . "
WHERE id = " . nz($this->job_id, '0') . "
";
$db->query($sql) ;
$db->commit();
} catch(Exception $e) {
db_err_rollback($e);
}
}
public function request_cancellation(): void {
global $db;
try {
$db->beginTransaction();
$sql = "
UPDATE batch_jobs SET
cancel_requested = 1,
cancel_requested_by = " . nz(trim($_SESSION['user_id']), '0') . "
WHERE id = " . nz($this->job_id, '0') . "
";
$db->query($sql) ;
$db->commit();
} catch(Exception $e) {
db_err_rollback($e);
}
}
public function cancel_requested(): bool {
global $db;
$sql = "
SELECT cancel_requested FROM batch_jobs
WHERE id = " . nz($this->job_id, '0') . "
";
$result = $db->query($sql) ;
if ($result->rowCount() > 0) :
$row = $result->fetch(\PDO::FETCH_OBJ);
if ($row->cancel_requested === 1) :
return true;
endif;
endif;
return false;
}
public function get_output(): string {
global $db;
$sql = "
SELECT output FROM batch_jobs
WHERE id = " . nz($this->job_id, '0') . "
";
$result = $db->query($sql) ;
$html = '';
if ($result->rowCount() > 0) :
$row = $result->fetch(\PDO::FETCH_OBJ);
$html = $row->output;
endif;
return $html;
}
}