pdo = $connection->getPdo(); $this->collector = $collector; } public function index(Request $request, Response $response): string { $sources = $this->collector->getActiveSources(); // Also get inactive ones $stmt = $this->pdo->query("SELECT * FROM sources ORDER BY status, name"); $allSources = $stmt->fetchAll(); return $this->render('admin/sources/index', ['sources' => $allSources], 'admin'); } public function create(Request $request, Response $response): string { return $this->render('admin/sources/form', ['source' => null], 'admin'); } public function edit(Request $request, Response $response, int $id): string { $stmt = $this->pdo->prepare("SELECT * FROM sources WHERE id = ?"); $stmt->execute([$id]); $source = $stmt->fetch(); if (!$source) { $response->redirect('/admin/sources'); return ''; } return $this->render('admin/sources/form', ['source' => $source], 'admin'); } public function store(Request $request, Response $response): void { $id = $request->post('id', ''); $name = $request->post('name', ''); $url = $request->post('url', ''); $type = $request->post('type', 'rss'); $status = $request->post('status', 'active'); try { if ($id) { $stmt = $this->pdo->prepare("UPDATE sources SET name=?, url=?, type=?, status=? WHERE id=?"); $stmt->execute([$name, $url, $type, $status, $id]); } else { $stmt = $this->pdo->prepare("INSERT INTO sources (name, url, type, status) VALUES (?, ?, ?, ?)"); $stmt->execute([$name, $url, $type, $status]); } $this->session->setFlash('success', 'Source saved.'); } catch (Throwable $e) { $this->session->setFlash('error', 'Error: ' . $e->getMessage()); } $response->redirect('/admin/sources'); } public function delete(Request $request, Response $response, int $id): void { $this->pdo->prepare("DELETE FROM sources WHERE id = ?")->execute([$id]); $this->session->setFlash('success', 'Source deleted.'); $response->redirect('/admin/sources'); } public function run(Request $request, Response $response): void { $id = (int)$request->routeParam('id'); $stmt = $this->pdo->prepare("SELECT * FROM sources WHERE id = ?"); $stmt->execute([$id]); $source = $stmt->fetch(); if (!$source) { $this->session->setFlash('error', 'Source not found.'); $response->redirect('/admin/sources'); return; } try { $result = $this->collector->collectSource($source); $this->session->setFlash('success', "Collected {$result['entries_found']} entries, {$result['opportunities']} new opportunities."); } catch (Throwable $e) { $this->session->setFlash('error', 'Collection error: ' . $e->getMessage()); } $response->redirect('/admin/sources'); } }