35632-vm/workflow_engine.php
2025-11-20 02:21:39 +00:00

65 lines
2.3 KiB
PHP

<?php
require_once 'db/config.php';
require_once 'mail/MailService.php';
function trigger_workflow($trigger, $data) {
$pdo = db();
// 1. Fetch all workflows for the given trigger
$stmt = $pdo->prepare("SELECT * FROM workflows WHERE `trigger` = ?");
$stmt->execute([$trigger]);
$workflows = $stmt->fetchAll();
foreach ($workflows as $workflow) {
// 2. For each workflow, fetch its actions
$stmt = $pdo->prepare("SELECT * FROM workflow_actions WHERE workflow_id = ?");
$stmt->execute([$workflow['id']]);
$actions = $stmt->fetchAll();
foreach ($actions as $action) {
// 3. Execute each action
execute_action($action, $data);
}
}
}
function execute_action($action, $data) {
$config = json_decode($action['config'], true);
// Replace placeholders in the config with data
array_walk_recursive($config, function(&$value) use ($data) {
if (is_string($value)) {
foreach ($data as $key => $val) {
if (is_string($val) || is_numeric($val)) {
$value = str_replace('{{candidate.' . $key . '}}', $val, $value);
}
}
}
});
switch ($action['action_type']) {
case 'send_email':
MailService::sendMail($config['to'], $config['subject'], $config['message']);
break;
case 'create_task':
$pdo = db();
$stmt = $pdo->prepare("INSERT INTO tasks (name, assignee_id) VALUES (?, ?)");
$stmt->execute([$config['task_name'], $config['assign_to']]);
break;
case 'send_slack_notification':
$ch = curl_init($config['webhook_url']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['text' => $config['message']]));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_exec($ch);
curl_close($ch);
break;
case 'update_candidate_status':
$pdo = db();
$stmt = $pdo->prepare("UPDATE candidates SET status = ? WHERE id = ?");
$stmt->execute([$config['new_status'], $data['candidate.id']]);
break;
}
}
?>