Add complete ScoutIQ system: Crawler (RSS+AI), CRUD Controllers (Organizations, Contacts, Opportunities, Sources), dynamic Views, API routes, CLI collector

This commit is contained in:
Hamza-Ayed
2026-06-05 02:23:32 +03:00
parent d2f323a563
commit bd7984f8e3
20 changed files with 2084 additions and 0 deletions

View File

@@ -0,0 +1,59 @@
<div class="page-header">
<h1><?= $contact ? 'Edit' : 'Add' ?> Contact</h1>
</div>
<div class="glass-panel" style="max-width: 600px;">
<form action="/admin/contacts/store" method="POST" class="form-stacked">
<?php if ($contact): ?>
<input type="hidden" name="id" value="<?= $contact['id'] ?>">
<?php endif; ?>
<input type="hidden" name="_csrf" value="<?= $this->session->getCsrfToken() ?>">
<div class="form-group">
<label class="form-label">Name *</label>
<input type="text" name="name" class="form-control" required value="<?= $contact ? $this->escape($contact['name']) : '' ?>">
</div>
<div class="form-row">
<div class="form-group">
<label class="form-label">Email</label>
<input type="email" name="email" class="form-control" value="<?= $contact ? $this->escape($contact['email'] ?? '') : '' ?>">
</div>
<div class="form-group">
<label class="form-label">Phone</label>
<input type="text" name="phone" class="form-control" value="<?= $contact ? $this->escape($contact['phone'] ?? '') : '' ?>">
</div>
</div>
<div class="form-group">
<label class="form-label">Position / Title</label>
<input type="text" name="position" class="form-control" placeholder="e.g. Partner, Director" value="<?= $contact ? $this->escape($contact['position'] ?? '') : '' ?>">
</div>
<div class="form-group">
<label class="form-label">Organization</label>
<select name="organization_id" class="form-control">
<option value="">No Organization</option>
<?php foreach ($organizations as $org): ?>
<option value="<?= $org['id'] ?>" <?= ($selectedOrgId == $org['id']) ? 'selected' : '' ?>><?= $this->escape($org['name']) ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="form-group">
<label class="form-label">Notes</label>
<textarea name="notes" class="form-control" rows="3"><?= $contact ? $this->escape($contact['notes'] ?? '') : '' ?></textarea>
</div>
<div style="display: flex; gap: 12px; margin-top: 10px;">
<button type="submit" class="btn btn-primary"><?= $contact ? 'Update' : 'Create' ?> Contact</button>
<a href="/admin/contacts" class="btn btn-secondary">Cancel</a>
</div>
</form>
</div>
<style>
.form-stacked { display: flex; flex-direction: column; gap: 16px; }
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
@media (max-width: 600px) { .form-row { grid-template-columns: 1fr; } }
</style>