prepare("INSERT INTO forums (name,descr,sort_order) VALUES (?,?,?)") ->execute([$n, mb_substr(trim((string)($_POST['descr'] ?? '')), 0, 120), (int)($_POST['sort_order'] ?? 0)]); $msg = 'Forum "' . $n . '" created.'; } } elseif ($act === 'save' && $fid) { $n = mb_substr(trim((string)($_POST['name'] ?? '')), 0, 60); if ($n === '') $err = 'Forum name required.'; else { $d->prepare("UPDATE forums SET name=?,descr=?,sort_order=?,is_locked=? WHERE id=?") ->execute([$n, mb_substr(trim((string)($_POST['descr'] ?? '')), 0, 120), (int)($_POST['sort_order'] ?? 0), (int)($_POST['is_locked'] ?? 0), $fid]); $msg = 'Forum saved.'; } } elseif ($act === 'del' && $fid) { // ON DELETE CASCADE removes its topics and their posts $d->prepare("DELETE FROM forums WHERE id=?")->execute([$fid]); $msg = 'Forum and all its topics deleted.'; $edit = 0; } } page_start('Admin: forums', ['back' => '/admin/index.php']); if ($err) p_err($err); if ($msg) p_ok($msg); if ($edit) { $s = $d->prepare("SELECT * FROM forums WHERE id=?"); $s->execute([$edit]); $f = $s->fetch(); if (!$f) bail('Admin', 'No such forum.', '/admin/forums.php'); p_para('Editing forum #' . $f['id']); p_form('/admin/forums.php?edit=' . $edit, [ ['name' => 'act', 'type' => 'hidden', 'value' => 'save'], ['name' => 'fid', 'type' => 'hidden', 'value' => (string)$f['id']], ['name' => 'name', 'label' => 'Name', 'value' => $f['name'], 'maxlength' => 60], ['name' => 'descr', 'label' => 'Description', 'value' => $f['descr'], 'maxlength' => 120], ['name' => 'sort_order', 'label' => 'Sort order', 'value' => (string)$f['sort_order'], 'maxlength' => 4, 'format' => '*N'], ['name' => 'is_locked', 'label' => 'Locked', 'type' => 'select', 'value' => (string)$f['is_locked'], 'options' => ['0' => 'no', '1' => 'yes']], ], 'Save forum'); p_form('/admin/forums.php', [ ['name' => 'act', 'type' => 'hidden', 'value' => 'del'], ['name' => 'fid', 'type' => 'hidden', 'value' => (string)$f['id']], ], 'DELETE forum'); p_links([['/admin/forums.php', 'Back to forum list']]); page_end(); exit; } $rows = $d->query("SELECT f.*, (SELECT COUNT(*) FROM topics t WHERE t.forum_id=f.id) tc FROM forums f ORDER BY f.sort_order, f.id")->fetchAll(); foreach ($rows as $r) { p_link('/admin/forums.php', '#' . $r['id'] . ' ' . $r['name'] . ' (' . $r['tc'] . 't)' . ($r['is_locked'] ? ' [locked]' : ''), ['edit' => $r['id']]); } if (!$rows) p_para('No forums.'); p_rule(); p_para('Add a forum:'); p_form('/admin/forums.php', [ ['name' => 'act', 'type' => 'hidden', 'value' => 'add'], ['name' => 'name', 'label' => 'Name', 'maxlength' => 60], ['name' => 'descr', 'label' => 'Description', 'maxlength' => 120], ['name' => 'sort_order', 'label' => 'Sort order', 'value' => '0', 'maxlength' => 4, 'format' => '*N'], ], 'Add forum'); p_links([['/admin/index.php', 'Admin home']]); page_end();