/
TorX
/
rasp
Обзор
Документация
Войти
/
TorX
/
rasp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
admin/release-edit.php
152 строки
6 KB
tormovies
Add a posted flag for upcoming releases in admin and public lists.
07 авг 2026, 15:02
07 авг 2026, 15:02
3708742
Код
Авторство
О чём код?
<?php declare(strict_types=1); require_once __DIR__ . '/../includes/auth.php'; require_once __DIR__ . '/../includes/queries.php'; require_once __DIR__ . '/../includes/layout.php'; require_admin(); $id = isset($_GET['id']) ? (int) $_GET['id'] : 0; $release = $id > 0 ? get_release($id) : null; if ($id > 0 && !$release) { flash_set('error', 'Релиз не найден'); redirect('/admin/releases.php'); } $artists = list_artists(); $genres = distinct_values('genre'); $authors = distinct_values('lyric_author'); $labels = distinct_values('label'); $defaults = [ 'artist_id' => $release['artist_id'] ?? '', 'title' => $release['title'] ?? '', 'release_date' => $release['release_date'] ?? (isset($_GET['date']) ? (string) $_GET['date'] : today_iso()), 'genre' => $release['genre'] ?? '', 'lyric_author' => $release['lyric_author'] ?? '', 'label' => $release['label'] ?? '', 'type' => $release['type'] ?? 'single', 'has_pitch' => $release ? (bool) $release['has_pitch'] : true, 'is_posted' => $release ? (bool) ($release['is_posted'] ?? false) : false, ]; $error = null; if (request_method() === 'POST') { $payload = [ 'artist_id' => (int) ($_POST['artist_id'] ?? 0), 'title' => post_string('title'), 'release_date' => post_string('release_date'), 'genre' => post_string('genre'), 'lyric_author' => post_string('lyric_author'), 'label' => post_string('label'), 'type' => post_string('type', 'single'), 'has_pitch' => isset($_POST['has_pitch']), 'is_posted' => isset($_POST['is_posted']), ]; $defaults = array_merge($defaults, $payload); try { if ($release) { update_release((int) $release['id'], $payload); flash_set('ok', 'Релиз сохранён'); redirect('/admin/release-edit.php?id=' . (int) $release['id']); } $newId = create_release($payload); flash_set('ok', 'Релиз создан'); redirect('/admin/release-edit.php?id=' . $newId); } catch (Throwable $e) { $error = $e->getMessage(); } } $pageTitle = $release ? 'Редактировать релиз' : 'Новый релиз'; render_header($pageTitle, true); ?> <div class="row"> <div> <h1><?= e($pageTitle) ?></h1> <p class="muted">Поля как в экспорте · лейбл и тип опциональны по смыслу, но тип всегда есть</p> </div> <a class="btn btn-secondary" href="/admin/releases.php">К списку</a> </div> <?php if ($error): ?><p class="flash flash-error"><?= e($error) ?></p><?php endif; ?> <form method="post" class="form panel" style="margin-top:1rem"> <label class="block"> <span>Артист</span> <select class="field" name="artist_id" required> <option value="">— выберите —</option> <?php foreach ($artists as $a): ?> <option value="<?= (int) $a['id'] ?>"<?= (int) $defaults['artist_id'] === (int) $a['id'] ? ' selected' : '' ?>> <?= e($a['name']) ?> </option> <?php endforeach; ?> </select> <?php if (!$artists): ?> <span class="muted">Сначала <a href="/admin/artists.php">добавьте артиста</a></span> <?php endif; ?> </label> <label class="block"> <span>Название</span> <input class="field" name="title" required value="<?= e((string) $defaults['title']) ?>"> </label> <label class="block"> <span>Дата</span> <input class="field" type="date" name="release_date" required value="<?= e((string) $defaults['release_date']) ?>"> </label> <label class="block"> <span>Жанр</span> <input class="field" name="genre" list="genres" required value="<?= e((string) $defaults['genre']) ?>"> <datalist id="genres"> <?php foreach ($genres as $g): ?><option value="<?= e($g) ?>"><?php endforeach; ?> </datalist> </label> <label class="block"> <span>Автор текста</span> <input class="field" name="lyric_author" list="authors" required value="<?= e((string) $defaults['lyric_author']) ?>"> <datalist id="authors"> <?php foreach ($authors as $a): ?><option value="<?= e($a) ?>"><?php endforeach; ?> </datalist> </label> <label class="block"> <span>Лейбл</span> <input class="field" name="label" list="labels" value="<?= e((string) $defaults['label']) ?>"> <datalist id="labels"> <?php foreach ($labels as $l): ?><option value="<?= e($l) ?>"><?php endforeach; ?> </datalist> </label> <label class="block"> <span>Тип</span> <select class="field" name="type"> <?php foreach (RELEASE_TYPES as $t): ?> <option value="<?= e($t) ?>"<?= $defaults['type'] === $t ? ' selected' : '' ?>> <?= e(release_type_label($t)) ?> </option> <?php endforeach; ?> </select> </label> <label class="check"> <input type="checkbox" name="has_pitch" value="1"<?= !empty($defaults['has_pitch']) ? ' checked' : '' ?>> <span>Есть питчинг</span> </label> <label class="check"> <input type="checkbox" name="is_posted" value="1"<?= !empty($defaults['is_posted']) ? ' checked' : '' ?>> <span>Выложено</span> </label> <div class="actions"> <button class="btn btn-primary" type="submit"><?= $release ? 'Сохранить' : 'Создать' ?></button> <a class="btn btn-secondary" href="/admin/">К обзору</a> </div> </form> <?php render_footer();