', '<=', '>=', '=', '!=') DEFAULT '<', threshold_value DECIMAL(18,4) NOT NULL, duration_seconds INT DEFAULT 0, message_template VARCHAR(255) NOT NULL, icon VARCHAR(10) DEFAULT '⚠️', is_active TINYINT(1) DEFAULT 1, display_alert TINYINT(1) DEFAULT 1, created_by VARCHAR(100) NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_tag_name (tag_name), INDEX idx_is_active (is_active) )"; mysqli_query($alertsConn, $createTable); $message = ''; $messageType = ''; // Handle form submissions if ($_SERVER['REQUEST_METHOD'] === 'POST') { $action = $_POST['action'] ?? ''; switch ($action) { case 'add': $tagName = trim($_POST['tag_name'] ?? ''); $alertType = $_POST['alert_type'] ?? 'warning'; $comparison = $_POST['comparison'] ?? '<'; $threshold = floatval($_POST['threshold_value'] ?? 0); $duration = intval($_POST['duration_seconds'] ?? 0); $messageTemplate = trim($_POST['message_template'] ?? ''); $icon = trim($_POST['icon'] ?? '⚠️'); $displayAlert = isset($_POST['display_alert']) ? 1 : 0; $createdBy = $_SESSION['SESS_FIRST_NAME'] ?? 'Unknown'; if ($tagName && $messageTemplate) { $stmt = mysqli_prepare($alertsConn, "INSERT INTO alert_definitions (tag_name, alert_type, comparison, threshold_value, duration_seconds, message_template, icon, display_alert, created_by) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)" ); mysqli_stmt_bind_param($stmt, 'sssdissis', $tagName, $alertType, $comparison, $threshold, $duration, $messageTemplate, $icon, $displayAlert, $createdBy ); if (mysqli_stmt_execute($stmt)) { $message = "Alert added successfully!"; $messageType = 'success'; } else { $message = "Error adding alert: " . mysqli_error($alertsConn); $messageType = 'error'; } mysqli_stmt_close($stmt); } else { $message = "Tag name and message are required."; $messageType = 'error'; } break; case 'update': $id = intval($_POST['id'] ?? 0); $tagName = trim($_POST['tag_name'] ?? ''); $alertType = $_POST['alert_type'] ?? 'warning'; $comparison = $_POST['comparison'] ?? '<'; $threshold = floatval($_POST['threshold_value'] ?? 0); $duration = intval($_POST['duration_seconds'] ?? 0); $messageTemplate = trim($_POST['message_template'] ?? ''); $icon = trim($_POST['icon'] ?? '⚠️'); $isActive = isset($_POST['is_active']) ? 1 : 0; $displayAlert = isset($_POST['display_alert']) ? 1 : 0; if ($id && $tagName && $messageTemplate) { $stmt = mysqli_prepare($alertsConn, "UPDATE alert_definitions SET tag_name = ?, alert_type = ?, comparison = ?, threshold_value = ?, duration_seconds = ?, message_template = ?, icon = ?, is_active = ?, display_alert = ? WHERE id = ?" ); mysqli_stmt_bind_param($stmt, 'sssdiasiii', $tagName, $alertType, $comparison, $threshold, $duration, $messageTemplate, $icon, $isActive, $displayAlert, $id ); if (mysqli_stmt_execute($stmt)) { $message = "Alert updated successfully!"; $messageType = 'success'; } else { $message = "Error updating alert: " . mysqli_error($alertsConn); $messageType = 'error'; } mysqli_stmt_close($stmt); } break; case 'delete': $id = intval($_POST['id'] ?? 0); if ($id) { $stmt = mysqli_prepare($alertsConn, "DELETE FROM alert_definitions WHERE id = ?"); mysqli_stmt_bind_param($stmt, 'i', $id); if (mysqli_stmt_execute($stmt)) { $message = "Alert deleted!"; $messageType = 'success'; } else { $message = "Error deleting alert."; $messageType = 'error'; } mysqli_stmt_close($stmt); } break; case 'toggle': $id = intval($_POST['id'] ?? 0); if ($id) { mysqli_query($alertsConn, "UPDATE alert_definitions SET is_active = NOT is_active WHERE id = $id"); $message = "Alert toggled!"; $messageType = 'success'; } break; } } // Fetch all alerts $alerts = []; $result = mysqli_query($alertsConn, "SELECT * FROM alert_definitions ORDER BY is_active DESC, tag_name ASC"); while ($row = mysqli_fetch_assoc($result)) { $alerts[] = $row; } // Fetch available tags for autocomplete $tags = []; $tagResult = mysqli_query($alertsConn, "SELECT DISTINCT Name FROM items ORDER BY Name"); while ($row = mysqli_fetch_assoc($tagResult)) { $tags[] = $row['Name']; } // Layout config $layoutWithoutSidebar = true; $layoutReturnUrl = 'overview.php'; $layoutReturnLabel = 'Back to overview'; $assetBasePath = ''; include __DIR__ . '/includes/layout/header.php'; ?>

🔔 Alerts Admin

➕ Add New Alert

0 = trigger immediately
Use {value} for current value, {threshold} for threshold
Unchecked = log only

📋 Active Alerts ()

No alerts defined yet. Add one above!

Tag Type Condition Duration Message Display Status Actions
s
>
>