chartboard/app/Views/alert/create.php
2026-03-30 09:51:33 +05:30

86 lines
5.0 KiB
PHP

<?= $this->extend('layouts/main') ?>
<?= $this->section('content') ?>
<header class="cb-page-header">
<div>
<a href="<?= base_url('alert') ?>" class="text-decoration-none small d-inline-block mb-1" style="color: var(--text-secondary);">&larr; Back to alerts</a>
<h1 class="cb-page-title">New alert</h1>
<p class="cb-page-subtitle mb-0">Watch a column from the chart&rsquo;s query result.</p>
</div>
</header>
<div class="cb-page-body">
<?php if (session()->getFlashdata('errors')): ?>
<div class="alert alert-danger">
<?php foreach (session()->getFlashdata('errors') as $err): ?>
<div><?= esc(is_array($err) ? implode(' ', $err) : $err) ?></div>
<?php endforeach; ?>
</div>
<?php endif; ?>
<?php if (session()->getFlashdata('error')): ?>
<div class="alert alert-danger"><?= esc(session()->getFlashdata('error')) ?></div>
<?php endif; ?>
<?php if ($charts === []): ?>
<div class="alert alert-warning">Create a chart first before adding alerts.</div>
<?php else: ?>
<div class="card border-0 shadow-sm">
<div class="card-body">
<form action="<?= base_url('alert/store') ?>" method="post">
<?= csrf_field() ?>
<div class="mb-3">
<label class="form-label fw-semibold">Name</label>
<input type="text" name="name" class="form-control" value="<?= esc(old('name', '')) ?>" required maxlength="200">
</div>
<div class="mb-3">
<label class="form-label fw-semibold">Chart</label>
<select name="chart_id" class="form-select" required>
<option value="">— Select —</option>
<?php foreach ($charts as $c): ?>
<option value="<?= (int) $c['id'] ?>" <?= (string) old('chart_id') === (string) $c['id'] ? 'selected' : '' ?>><?= esc($c['name']) ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="mb-3">
<label class="form-label fw-semibold">Metric column</label>
<input type="text" name="metric_field" class="form-control" value="<?= esc(old('metric_field', '')) ?>" required placeholder="e.g. revenue, total, count" maxlength="150">
<div class="form-text">First row of the query result; column name must match.</div>
</div>
<div class="row g-3 mb-3">
<div class="col-md-4">
<label class="form-label fw-semibold">Condition</label>
<select name="condition" class="form-select">
<?php foreach (['gt' => 'Greater than', 'lt' => 'Less than', 'eq' => 'Equals', 'gte' => 'Greater or equal', 'lte' => 'Less or equal'] as $k => $lab): ?>
<option value="<?= esc($k) ?>" <?= old('condition', 'gt') === $k ? 'selected' : '' ?>><?= esc($lab) ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="col-md-4">
<label class="form-label fw-semibold">Threshold</label>
<input type="text" name="threshold" class="form-control" value="<?= esc(old('threshold', '0')) ?>" required inputmode="decimal">
</div>
<div class="col-md-4">
<label class="form-label fw-semibold">Check every (minutes)</label>
<input type="number" name="check_interval" class="form-control" value="<?= esc(old('check_interval', '15')) ?>" min="1" max="1440">
</div>
</div>
<div class="border rounded-3 p-3 mb-3">
<div class="form-check mb-2">
<input class="form-check-input" type="checkbox" name="notify_email" value="1" id="ne" <?= old('notify_email') ? 'checked' : '' ?>>
<label class="form-check-label" for="ne">Email</label>
</div>
<input type="text" name="email_addresses" class="form-control form-control-sm" placeholder="Comma-separated emails" value="<?= esc(old('email_addresses', '')) ?>">
<div class="form-check mt-3 mb-2">
<input class="form-check-input" type="checkbox" name="notify_slack" value="1" id="ns" <?= old('notify_slack') ? 'checked' : '' ?>>
<label class="form-check-label" for="ns">Slack (incoming webhook)</label>
</div>
<input type="url" name="slack_webhook" class="form-control form-control-sm" placeholder="https://hooks.slack.com/..." value="<?= esc(old('slack_webhook', '')) ?>">
</div>
<button type="submit" class="btn btn-dark">Save alert</button>
</form>
</div>
</div>
<?php endif; ?>
</div>
<?= $this->endSection() ?>