From c89d75f78d98da0dfe4c44b283b509dcdc1bcd3c Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 3 Nov 2022 16:20:33 +0100 Subject: [minilinux] Add support for branch colors and changelogs --- modules-available/minilinux/inc/minilinux.inc.php | 24 ++++++++++++++-------- modules-available/minilinux/install.inc.php | 19 +++++++++++++++++ modules-available/minilinux/page.inc.php | 12 ++++++++--- .../minilinux/templates/branches.html | 2 +- .../minilinux/templates/filelist.html | 2 +- .../minilinux/templates/page-minilinux.html | 2 +- .../minilinux/templates/versionlist.html | 7 ++++++- 7 files changed, 52 insertions(+), 16 deletions(-) diff --git a/modules-available/minilinux/inc/minilinux.inc.php b/modules-available/minilinux/inc/minilinux.inc.php index 8778b50d..96763874 100644 --- a/modules-available/minilinux/inc/minilinux.inc.php +++ b/modules-available/minilinux/inc/minilinux.inc.php @@ -83,13 +83,15 @@ class MiniLinux continue; $branchid = $sourceid . '/' . $system['id']; $title = empty($system['title']) ? $branchid : $system['title']; - $description = empty($system['description']) ? '' : $system['description']; - Database::exec('INSERT INTO minilinux_branch (branchid, sourceid, title, description) - VALUES (:branchid, :sourceid, :title, :description) - ON DUPLICATE KEY UPDATE title = VALUES(title), description = VALUES(description)', [ + $description = $system['description'] ?? ''; + $color = $system['color'] ?? ''; + Database::exec('INSERT INTO minilinux_branch (branchid, sourceid, title, color, description) + VALUES (:branchid, :sourceid, :title, :color, :description) + ON DUPLICATE KEY UPDATE title = VALUES(title), color = VALUES(color), description = VALUES(description)', [ 'branchid' => $branchid, 'sourceid' => $sourceid, 'title' => $title, + 'color' => $color, 'description' => $description, ]); if (@is_array($system['versions'])) { @@ -116,7 +118,8 @@ class MiniLinux return; } $versionid = $branchid . '/' . $version['version']; - $title = empty($version['title']) ? '' : $version['title']; + $title = $version['title'] ?? ''; + $description = $version['description'] ?? ''; $dateline = empty($version['releasedate']) ? time() : (int)$version['releasedate']; unset($version['version'], $version['title'], $version['releasedate']); // Sanitize files array @@ -149,12 +152,14 @@ class MiniLinux $version['files'] = array_values($version['files']); } $data = json_encode($version); - Database::exec('INSERT INTO minilinux_version (versionid, branchid, title, dateline, data, orphan) - VALUES (:versionid, :branchid, :title, :dateline, :data, 0) - ON DUPLICATE KEY UPDATE title = VALUES(title), data = VALUES(data), orphan = 0', [ + Database::exec('INSERT INTO minilinux_version (versionid, branchid, title, description, dateline, data, orphan) + VALUES (:versionid, :branchid, :title, :description, :dateline, :data, 0) + ON DUPLICATE KEY UPDATE title = VALUES(title), description = VALUES(description), + dateline = VALUES(dateline), data = VALUES(data), orphan = 0', [ 'versionid' => $versionid, 'branchid' => $branchid, 'title' => $title, + 'description' => $description, 'dateline' => $dateline, 'data' => $data, ]); @@ -357,7 +362,8 @@ class MiniLinux public static function queryAllVersionsByBranch() { $list = []; - $res = Database::simpleQuery('SELECT branchid, versionid, title, dateline, orphan, taskid, installed + $res = Database::simpleQuery('SELECT branchid, versionid, title, Length(description) AS desclen, + dateline, orphan, taskid, installed FROM minilinux_version ORDER BY branchid, dateline, versionid'); foreach ($res as $row) { $list[$row['branchid']][$row['versionid']] = $row; diff --git a/modules-available/minilinux/install.inc.php b/modules-available/minilinux/install.inc.php index e71e3c10..12b5c69c 100644 --- a/modules-available/minilinux/install.inc.php +++ b/modules-available/minilinux/install.inc.php @@ -14,6 +14,7 @@ $result[] = tableCreate('minilinux_branch', " `sourceid` varchar(8) CHARACTER SET ascii DEFAULT NULL, `branchid` varchar(40) CHARACTER SET ascii NOT NULL, `title` varchar(100) NOT NULL, + `color` varchar(7) NOT NULL, `description` blob NOT NULL, PRIMARY KEY (`branchid`), KEY (`title`) @@ -22,6 +23,7 @@ $result[] = tableCreate('minilinux_version', " `branchid` varchar(40) CHARACTER SET ascii NOT NULL, `versionid` varchar(72) CHARACTER SET ascii NOT NULL, `title` varchar(100) NOT NULL, + `description` blob NOT NULL, `dateline` int(10) UNSIGNED NOT NULL, `data` blob NOT NULL, `orphan` tinyint(3) UNSIGNED NOT NULL, @@ -39,4 +41,21 @@ $result[] = tableAddConstraint('minilinux_version', 'branchid', 'minilinux_branc $result[] = tableAddConstraint('minilinux_branch', 'sourceid', 'minilinux_source', 'sourceid', 'ON UPDATE CASCADE ON DELETE SET NULL'); +// 2022-10-17: Add color to branch, description to version +if (!tableHasColumn('minilinux_branch', 'color')) { + if (Database::exec("ALTER TABLE minilinux_branch ADD COLUMN `color` varchar(7) NOT NULL DEFAULT '' AFTER `title`") !== false) { + $result[] = UPDATE_DONE; + } else { + finalResponse(UPDATE_FAILED, Database::lastError()); + } +} +if (!tableHasColumn('minilinux_version', 'description')) { + // BLOB/TEXT cannot have non-NULL default on older MariaDB + if (Database::exec("ALTER TABLE minilinux_version ADD COLUMN `description` blob NULL DEFAULT NULL AFTER `title`") !== false) { + $result[] = UPDATE_DONE; + } else { + finalResponse(UPDATE_FAILED, Database::lastError()); + } +} + responseFromArray($result); diff --git a/modules-available/minilinux/page.inc.php b/modules-available/minilinux/page.inc.php index 411d1ae9..035a45d5 100644 --- a/modules-available/minilinux/page.inc.php +++ b/modules-available/minilinux/page.inc.php @@ -34,7 +34,7 @@ class Page_MiniLinux extends Page $show = Request::get('show', 'list', 'string'); if ($show === 'list') { // List branches and versions - $branches = Database::queryAll('SELECT sourceid, branchid, title, description FROM minilinux_branch ORDER BY title ASC'); + $branches = Database::queryAll('SELECT sourceid, branchid, title, color, description FROM minilinux_branch ORDER BY title ASC'); $versions = MiniLinux::queryAllVersionsByBranch(); $usage = MiniLinux::getBootMenuUsage(); $sourceList = []; @@ -44,7 +44,11 @@ class Page_MiniLinux extends Page if (!isset($sourceList[$branch['sourceid']])) { $sourceList[$branch['sourceid']] = ['sourceid' => $branch['sourceid'], 'list' => []]; } - $sourceList[$branch['sourceid']]['list'][] = ['title' => $branch['title'], 'bid' => $bid]; + $sourceList[$branch['sourceid']]['list'][] = [ + 'title' => $branch['title'], + 'color' => $branch['color'], + 'bid' => $bid + ]; $branch['bid'] = $bid; if (isset($versions[$branch['branchid']])) { $branch['versionlist'] = $this->renderVersionList($versions[$branch['branchid']], $usage); @@ -130,7 +134,8 @@ class Page_MiniLinux extends Page if ($versionid === false) { die('What!'); } - $ver = Database::queryFirst('SELECT versionid, taskid, data, installed FROM minilinux_version WHERE versionid = :versionid', + $ver = Database::queryFirst('SELECT versionid, description, taskid, data, installed + FROM minilinux_version WHERE versionid = :versionid', ['versionid' => $versionid]); if ($ver === false) { die('No such version'); @@ -184,6 +189,7 @@ class Page_MiniLinux extends Page if ($data['dltask'] !== false || $ver['installed']) { MiniLinux::checkStage4($data, $data['s4_errors']); } + $data['changelog'] = Util::markup($ver['description'] ?? ''); echo Render::parse('filelist', $data); } diff --git a/modules-available/minilinux/templates/branches.html b/modules-available/minilinux/templates/branches.html index 4816cc63..372321e2 100644 --- a/modules-available/minilinux/templates/branches.html +++ b/modules-available/minilinux/templates/branches.html @@ -4,7 +4,7 @@
{{#branches}} -
+
{{sourceid}} {{branchid}} diff --git a/modules-available/minilinux/templates/filelist.html b/modules-available/minilinux/templates/filelist.html index fdbef4ad..e4923a8f 100644 --- a/modules-available/minilinux/templates/filelist.html +++ b/modules-available/minilinux/templates/filelist.html @@ -50,6 +50,6 @@ {{/dltask}} {{#changelog}}

{{lang_changelog}}

-{{changelog}} +{{{changelog}}} {{/changelog}}
\ No newline at end of file diff --git a/modules-available/minilinux/templates/page-minilinux.html b/modules-available/minilinux/templates/page-minilinux.html index 19bd9cb4..c66de597 100644 --- a/modules-available/minilinux/templates/page-minilinux.html +++ b/modules-available/minilinux/templates/page-minilinux.html @@ -5,7 +5,7 @@ {{sourceid}} {{#list}} - + {{title}} {{/list}} diff --git a/modules-available/minilinux/templates/versionlist.html b/modules-available/minilinux/templates/versionlist.html index c69f3510..763ab784 100644 --- a/modules-available/minilinux/templates/versionlist.html +++ b/modules-available/minilinux/templates/versionlist.html @@ -16,7 +16,12 @@ - {{dateline_s}} + + {{dateline_s}} + {{#desclen}} + + {{/desclen}} + {{title}} {{#usage.entryids.0}} -- cgit v1.2.3-55-g7522