Use bg-white for card backgrounds across all WHM pages
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
|
|||||||
<!-- Tailwind/DaisyUI class safelist for gniza WHM plugin -->
|
<!-- Tailwind/DaisyUI class safelist for gniza WHM plugin -->
|
||||||
<div class="alert alert-error alert-info alert-success alert-warning badge badge-error badge-sm badge-success badge-warning bg-base-100 bg-base-200 bg-neutral bg-primary/10 border border-base-300 border-base-content/5 breadcrumbs btn btn-error btn-ghost btn-primary btn-secondary btn-sm btn-xs card card-body card-title checkbox checkbox-sm cursor-pointer flex flex-1 flex-col flex-wrap font-bold font-medium font-mono font-semibold gap-1 gap-2 gap-3 hidden inline input input-bordered input-sm items-center items-start mx-auto join join-item link list-disc loading loading-spinner loading-xs max-h-48 max-w-2xl max-w-xs mb-1 mb-2.5 mb-3 mb-4 mb-5 mb-6 ml-2 modal modal-action modal-backdrop modal-box mt-2 mt-3 mt-4 mt-5 my-2 my-4 overflow-x-auto overflow-y-auto p-3 p-4 pt-1 pt-2 pl-5 px-4 py-1 py-3 py-4 radio radio-sm rounded-box rounded-lg select select-bordered select-sm shadow-sm steps tab tab-content table hover tabs tabs-box tabs-lg tab-active text-center text-error text-lg textarea textarea-bordered textarea-sm text-base-content/60 text-neutral-content text-sm text-xl text-xs toggle toggle-sm toggle-success w-11/12 w-44 w-full whitespace-pre-wrap font-sans text-[2.3rem] text-warning badge-info badge-neutral btn-active leading-relaxed inline-flex items-stretch w-fit bg-[#fafafa] px-5 max-h-[360px] m-0 no-underline"></div>
|
<div class="alert alert-error alert-info alert-success alert-warning badge badge-error badge-sm badge-success badge-warning bg-base-100 bg-base-200 bg-neutral bg-primary/10 border border-base-300 border-base-content/5 breadcrumbs btn btn-error btn-ghost btn-primary btn-secondary btn-sm btn-xs card card-body card-title checkbox checkbox-sm cursor-pointer flex flex-1 flex-col flex-wrap font-bold font-medium font-mono font-semibold gap-1 gap-2 gap-3 hidden inline input input-bordered input-sm items-center items-start mx-auto join join-item link list-disc loading loading-spinner loading-xs max-h-48 max-w-2xl max-w-xs mb-1 mb-2.5 mb-3 mb-4 mb-5 mb-6 ml-2 modal modal-action modal-backdrop modal-box mt-2 mt-3 mt-4 mt-5 my-2 my-4 overflow-x-auto overflow-y-auto p-3 p-4 pt-1 pt-2 pl-5 px-4 py-1 py-3 py-4 radio radio-sm rounded-box rounded-lg select select-bordered select-sm shadow-sm steps tab tab-content table hover tabs tabs-box tabs-lg tab-active text-center text-error text-lg textarea textarea-bordered textarea-sm text-base-content/60 text-neutral-content text-sm text-xl text-xs toggle toggle-sm toggle-success w-11/12 w-44 w-full whitespace-pre-wrap font-sans text-[2.3rem] text-warning badge-info badge-neutral btn-active leading-relaxed inline-flex items-stretch w-fit bg-[#fafafa] px-5 max-h-[360px] m-0 no-underline bg-white"></div>
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ print qq{</div>\n};
|
|||||||
|
|
||||||
# Remote destinations
|
# Remote destinations
|
||||||
my @remotes = GnizaWHM::UI::list_remotes();
|
my @remotes = GnizaWHM::UI::list_remotes();
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">Configured Remotes</h2>\n};
|
print qq{<h2 class="card-title text-sm">Configured Remotes</h2>\n};
|
||||||
if (@remotes) {
|
if (@remotes) {
|
||||||
print qq{<div class="overflow-x-auto rounded-box border border-base-content/5 bg-base-100"><table class="table">\n};
|
print qq{<div class="overflow-x-auto rounded-box border border-base-content/5 bg-base-100"><table class="table">\n};
|
||||||
@@ -55,7 +55,7 @@ print qq{</div>\n</div>\n};
|
|||||||
|
|
||||||
# Active schedules
|
# Active schedules
|
||||||
my $schedules = GnizaWHM::Cron::get_current_schedules();
|
my $schedules = GnizaWHM::Cron::get_current_schedules();
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">Active Cron Schedules</h2>\n};
|
print qq{<h2 class="card-title text-sm">Active Cron Schedules</h2>\n};
|
||||||
if (keys %$schedules) {
|
if (keys %$schedules) {
|
||||||
print qq{<div class="overflow-x-auto rounded-box border border-base-content/5 bg-base-100"><table class="table">\n};
|
print qq{<div class="overflow-x-auto rounded-box border border-base-content/5 bg-base-100"><table class="table">\n};
|
||||||
@@ -76,7 +76,7 @@ print qq{</div>\n</div>\n};
|
|||||||
|
|
||||||
# Overview
|
# Overview
|
||||||
my $version = GnizaWHM::UI::get_gniza_version();
|
my $version = GnizaWHM::UI::get_gniza_version();
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">Overview</h2>\n};
|
print qq{<h2 class="card-title text-sm">Overview</h2>\n};
|
||||||
print qq{<div class="overflow-x-auto rounded-box border border-base-content/5 bg-base-100"><table class="table">\n};
|
print qq{<div class="overflow-x-auto rounded-box border border-base-content/5 bg-base-100"><table class="table">\n};
|
||||||
print qq{<tr><td class="font-semibold w-44">gniza version</td><td>} . GnizaWHM::UI::esc($version) . qq{</td></tr>\n};
|
print qq{<tr><td class="font-semibold w-44">gniza version</td><td>} . GnizaWHM::UI::esc($version) . qq{</td></tr>\n};
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ sub handle_list {
|
|||||||
|
|
||||||
my @remotes = GnizaWHM::UI::list_remotes();
|
my @remotes = GnizaWHM::UI::list_remotes();
|
||||||
|
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
|
|
||||||
if (@remotes) {
|
if (@remotes) {
|
||||||
print qq{<div class="overflow-x-auto rounded-box border border-base-content/5 bg-base-100"><table class="table">\n};
|
print qq{<div class="overflow-x-auto rounded-box border border-base-content/5 bg-base-100"><table class="table">\n};
|
||||||
@@ -506,7 +506,7 @@ sub render_remote_form {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Remote name
|
# Remote name
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">Remote Identity</h2>\n};
|
print qq{<h2 class="card-title text-sm">Remote Identity</h2>\n};
|
||||||
print qq{<div class="flex items-center gap-3 mb-2.5">\n};
|
print qq{<div class="flex items-center gap-3 mb-2.5">\n};
|
||||||
print qq{ <label class="w-44 font-medium text-sm" for="remote_name">Remote Name</label>\n};
|
print qq{ <label class="w-44 font-medium text-sm" for="remote_name">Remote Name</label>\n};
|
||||||
@@ -551,7 +551,7 @@ sub render_remote_form {
|
|||||||
my $pw_hidden = ($auth_method ne 'password') ? ' hidden' : '';
|
my $pw_hidden = ($auth_method ne 'password') ? ' hidden' : '';
|
||||||
|
|
||||||
print qq{<div id="type-ssh-fields"$ssh_hidden>\n};
|
print qq{<div id="type-ssh-fields"$ssh_hidden>\n};
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">SSH Connection</h2>\n};
|
print qq{<h2 class="card-title text-sm">SSH Connection</h2>\n};
|
||||||
_field($conf, 'REMOTE_HOST', 'Hostname / IP', 'Required');
|
_field($conf, 'REMOTE_HOST', 'Hostname / IP', 'Required');
|
||||||
_field($conf, 'REMOTE_PORT', 'SSH Port', 'Default: 22');
|
_field($conf, 'REMOTE_PORT', 'SSH Port', 'Default: 22');
|
||||||
@@ -588,7 +588,7 @@ sub render_remote_form {
|
|||||||
my $s3_hidden = ($remote_type ne 's3') ? ' hidden' : '';
|
my $s3_hidden = ($remote_type ne 's3') ? ' hidden' : '';
|
||||||
|
|
||||||
print qq{<div id="type-s3-fields"$s3_hidden>\n};
|
print qq{<div id="type-s3-fields"$s3_hidden>\n};
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">Amazon S3 / S3-Compatible</h2>\n};
|
print qq{<h2 class="card-title text-sm">Amazon S3 / S3-Compatible</h2>\n};
|
||||||
_field($conf, 'S3_ACCESS_KEY_ID', 'Access Key ID', 'Required');
|
_field($conf, 'S3_ACCESS_KEY_ID', 'Access Key ID', 'Required');
|
||||||
_password_field($conf, 'S3_SECRET_ACCESS_KEY', 'Secret Access Key', 'Required');
|
_password_field($conf, 'S3_SECRET_ACCESS_KEY', 'Secret Access Key', 'Required');
|
||||||
@@ -603,7 +603,7 @@ sub render_remote_form {
|
|||||||
my $gdrive_hidden = ($remote_type ne 'gdrive') ? ' hidden' : '';
|
my $gdrive_hidden = ($remote_type ne 'gdrive') ? ' hidden' : '';
|
||||||
|
|
||||||
print qq{<div id="type-gdrive-fields"$gdrive_hidden>\n};
|
print qq{<div id="type-gdrive-fields"$gdrive_hidden>\n};
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">Google Drive</h2>\n};
|
print qq{<h2 class="card-title text-sm">Google Drive</h2>\n};
|
||||||
_field($conf, 'GDRIVE_SERVICE_ACCOUNT_FILE', 'Service Account JSON', 'Absolute path, required');
|
_field($conf, 'GDRIVE_SERVICE_ACCOUNT_FILE', 'Service Account JSON', 'Absolute path, required');
|
||||||
_field($conf, 'GDRIVE_ROOT_FOLDER_ID', 'Root Folder ID', 'Optional');
|
_field($conf, 'GDRIVE_ROOT_FOLDER_ID', 'Root Folder ID', 'Optional');
|
||||||
@@ -612,13 +612,13 @@ sub render_remote_form {
|
|||||||
print qq{</div>\n};
|
print qq{</div>\n};
|
||||||
|
|
||||||
# ── Common fields ─────────────────────────────────────────
|
# ── Common fields ─────────────────────────────────────────
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">Storage Path</h2>\n};
|
print qq{<h2 class="card-title text-sm">Storage Path</h2>\n};
|
||||||
_field($conf, 'REMOTE_BASE', 'Remote Base Dir', 'Default: /backups');
|
_field($conf, 'REMOTE_BASE', 'Remote Base Dir', 'Default: /backups');
|
||||||
print qq{</div>\n</div>\n};
|
print qq{</div>\n</div>\n};
|
||||||
|
|
||||||
# Transfer
|
# Transfer
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">Transfer Settings</h2>\n};
|
print qq{<h2 class="card-title text-sm">Transfer Settings</h2>\n};
|
||||||
_field($conf, 'BWLIMIT', 'Bandwidth Limit', 'KB/s, 0 = unlimited');
|
_field($conf, 'BWLIMIT', 'Bandwidth Limit', 'KB/s, 0 = unlimited');
|
||||||
print qq{<div id="rsync-opts-field"$ssh_hidden>\n};
|
print qq{<div id="rsync-opts-field"$ssh_hidden>\n};
|
||||||
@@ -627,7 +627,7 @@ sub render_remote_form {
|
|||||||
print qq{</div>\n</div>\n};
|
print qq{</div>\n</div>\n};
|
||||||
|
|
||||||
# Retention
|
# Retention
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">Retention</h2>\n};
|
print qq{<h2 class="card-title text-sm">Retention</h2>\n};
|
||||||
_field($conf, 'RETENTION_COUNT', 'Snapshots to Keep', 'Default: 30');
|
_field($conf, 'RETENTION_COUNT', 'Snapshots to Keep', 'Default: 30');
|
||||||
print qq{</div>\n</div>\n};
|
print qq{</div>\n</div>\n};
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ sub handle_step1 {
|
|||||||
print qq{<form method="GET" action="restore.cgi">\n};
|
print qq{<form method="GET" action="restore.cgi">\n};
|
||||||
print qq{<input type="hidden" name="restore_step" value="2">\n};
|
print qq{<input type="hidden" name="restore_step" value="2">\n};
|
||||||
|
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">Step 1: Select Source</h2>\n};
|
print qq{<h2 class="card-title text-sm">Step 1: Select Source</h2>\n};
|
||||||
|
|
||||||
# Remote dropdown
|
# Remote dropdown
|
||||||
@@ -219,7 +219,7 @@ sub handle_step2 {
|
|||||||
print qq{<input type="hidden" name="remote" value="$esc_remote">\n};
|
print qq{<input type="hidden" name="remote" value="$esc_remote">\n};
|
||||||
print qq{<input type="hidden" name="account" value="$esc_account">\n};
|
print qq{<input type="hidden" name="account" value="$esc_account">\n};
|
||||||
|
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">Step 2: Choose Restore Options</h2>\n};
|
print qq{<h2 class="card-title text-sm">Step 2: Choose Restore Options</h2>\n};
|
||||||
print qq{<p class="text-sm mb-3">Account: <strong>$esc_account</strong> on remote <strong>$esc_remote</strong></p>\n};
|
print qq{<p class="text-sm mb-3">Account: <strong>$esc_account</strong> on remote <strong>$esc_remote</strong></p>\n};
|
||||||
|
|
||||||
@@ -275,7 +275,7 @@ sub handle_step2 {
|
|||||||
|
|
||||||
# Sub-field cards per type
|
# Sub-field cards per type
|
||||||
print qq{<div id="field-path" hidden>\n};
|
print qq{<div id="field-path" hidden>\n};
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-3">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-3">\n};
|
||||||
print qq{<div class="card-body py-3 px-4">\n};
|
print qq{<div class="card-body py-3 px-4">\n};
|
||||||
print qq{ <h3 class="card-title text-sm">Files</h3>\n};
|
print qq{ <h3 class="card-title text-sm">Files</h3>\n};
|
||||||
print qq{ <div class="flex items-center gap-3">\n};
|
print qq{ <div class="flex items-center gap-3">\n};
|
||||||
@@ -291,7 +291,7 @@ sub handle_step2 {
|
|||||||
print qq{</div>\n};
|
print qq{</div>\n};
|
||||||
|
|
||||||
print qq{<div id="field-dbname" hidden>\n};
|
print qq{<div id="field-dbname" hidden>\n};
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-3">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-3">\n};
|
||||||
print qq{<div class="card-body py-3 px-4">\n};
|
print qq{<div class="card-body py-3 px-4">\n};
|
||||||
print qq{ <h3 class="card-title text-sm">Databases</h3>\n};
|
print qq{ <h3 class="card-title text-sm">Databases</h3>\n};
|
||||||
print qq{ <input type="hidden" id="dbnames" name="dbnames">\n};
|
print qq{ <input type="hidden" id="dbnames" name="dbnames">\n};
|
||||||
@@ -303,7 +303,7 @@ sub handle_step2 {
|
|||||||
print qq{</div>\n};
|
print qq{</div>\n};
|
||||||
|
|
||||||
print qq{<div id="field-email" hidden>\n};
|
print qq{<div id="field-email" hidden>\n};
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-3">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-3">\n};
|
||||||
print qq{<div class="card-body py-3 px-4">\n};
|
print qq{<div class="card-body py-3 px-4">\n};
|
||||||
print qq{ <h3 class="card-title text-sm">Mailboxes</h3>\n};
|
print qq{ <h3 class="card-title text-sm">Mailboxes</h3>\n};
|
||||||
print qq{ <input type="hidden" id="emails" name="emails">\n};
|
print qq{ <input type="hidden" id="emails" name="emails">\n};
|
||||||
@@ -315,7 +315,7 @@ sub handle_step2 {
|
|||||||
print qq{</div>\n};
|
print qq{</div>\n};
|
||||||
|
|
||||||
print qq{<div id="field-dbusers" hidden>\n};
|
print qq{<div id="field-dbusers" hidden>\n};
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-3">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-3">\n};
|
||||||
print qq{<div class="card-body py-3 px-4">\n};
|
print qq{<div class="card-body py-3 px-4">\n};
|
||||||
print qq{ <h3 class="card-title text-sm">Database Users</h3>\n};
|
print qq{ <h3 class="card-title text-sm">Database Users</h3>\n};
|
||||||
print qq{ <input type="hidden" id="dbuser_names" name="dbuser_names">\n};
|
print qq{ <input type="hidden" id="dbuser_names" name="dbuser_names">\n};
|
||||||
@@ -327,7 +327,7 @@ sub handle_step2 {
|
|||||||
print qq{</div>\n};
|
print qq{</div>\n};
|
||||||
|
|
||||||
print qq{<div id="field-cron" hidden>\n};
|
print qq{<div id="field-cron" hidden>\n};
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-3">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-3">\n};
|
||||||
print qq{<div class="card-body py-3 px-4">\n};
|
print qq{<div class="card-body py-3 px-4">\n};
|
||||||
print qq{ <h3 class="card-title text-sm">Cron Jobs</h3>\n};
|
print qq{ <h3 class="card-title text-sm">Cron Jobs</h3>\n};
|
||||||
print qq{ <div id="cron-list" class="max-h-48 overflow-y-auto">\n};
|
print qq{ <div id="cron-list" class="max-h-48 overflow-y-auto">\n};
|
||||||
@@ -338,7 +338,7 @@ sub handle_step2 {
|
|||||||
print qq{</div>\n};
|
print qq{</div>\n};
|
||||||
|
|
||||||
print qq{<div id="field-domains" hidden>\n};
|
print qq{<div id="field-domains" hidden>\n};
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-3">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-3">\n};
|
||||||
print qq{<div class="card-body py-3 px-4">\n};
|
print qq{<div class="card-body py-3 px-4">\n};
|
||||||
print qq{ <h3 class="card-title text-sm">Domains</h3>\n};
|
print qq{ <h3 class="card-title text-sm">Domains</h3>\n};
|
||||||
print qq{ <input type="hidden" id="domain_names" name="domain_names">\n};
|
print qq{ <input type="hidden" id="domain_names" name="domain_names">\n};
|
||||||
@@ -350,7 +350,7 @@ sub handle_step2 {
|
|||||||
print qq{</div>\n};
|
print qq{</div>\n};
|
||||||
|
|
||||||
print qq{<div id="field-ssl" hidden>\n};
|
print qq{<div id="field-ssl" hidden>\n};
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-3">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-3">\n};
|
||||||
print qq{<div class="card-body py-3 px-4">\n};
|
print qq{<div class="card-body py-3 px-4">\n};
|
||||||
print qq{ <h3 class="card-title text-sm">SSL Certificates</h3>\n};
|
print qq{ <h3 class="card-title text-sm">SSL Certificates</h3>\n};
|
||||||
print qq{ <input type="hidden" id="ssl_names" name="ssl_names">\n};
|
print qq{ <input type="hidden" id="ssl_names" name="ssl_names">\n};
|
||||||
@@ -793,7 +793,7 @@ sub handle_step3 {
|
|||||||
|
|
||||||
my $types_display = join(', ', map { GnizaWHM::UI::esc($TYPE_LABELS{$_} // $_) } @selected_types);
|
my $types_display = join(', ', map { GnizaWHM::UI::esc($TYPE_LABELS{$_} // $_) } @selected_types);
|
||||||
|
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">Step 3: Confirm Restore</h2>\n};
|
print qq{<h2 class="card-title text-sm">Step 3: Confirm Restore</h2>\n};
|
||||||
print qq{<div class="overflow-x-auto rounded-box border border-base-content/5 bg-base-100"><table class="table">\n};
|
print qq{<div class="overflow-x-auto rounded-box border border-base-content/5 bg-base-100"><table class="table">\n};
|
||||||
print qq{<tr><td class="font-medium w-44">Remote</td><td>$esc_remote</td></tr>\n};
|
print qq{<tr><td class="font-medium w-44">Remote</td><td>$esc_remote</td></tr>\n};
|
||||||
@@ -1002,7 +1002,7 @@ sub handle_step4 {
|
|||||||
? '<span class="badge badge-success badge-sm">OK</span>'
|
? '<span class="badge badge-success badge-sm">OK</span>'
|
||||||
: '<span class="badge badge-error badge-sm">Failed</span>';
|
: '<span class="badge badge-error badge-sm">Failed</span>';
|
||||||
|
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-4">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-4">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">$esc_label $badge</h2>\n};
|
print qq{<h2 class="card-title text-sm">$esc_label $badge</h2>\n};
|
||||||
my $output = $r->{stdout} . ($r->{stderr} =~ /\S/ ? "\n$r->{stderr}" : '');
|
my $output = $r->{stdout} . ($r->{stderr} =~ /\S/ ? "\n$r->{stderr}" : '');
|
||||||
$output = '(no output)' unless $output =~ /\S/;
|
$output = '(no output)' unless $output =~ /\S/;
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ sub handle_list {
|
|||||||
my @schedules = GnizaWHM::UI::list_schedules();
|
my @schedules = GnizaWHM::UI::list_schedules();
|
||||||
my $cron_schedules = GnizaWHM::Cron::get_current_schedules();
|
my $cron_schedules = GnizaWHM::Cron::get_current_schedules();
|
||||||
|
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">Configured Schedules</h2>\n};
|
print qq{<h2 class="card-title text-sm">Configured Schedules</h2>\n};
|
||||||
|
|
||||||
if (@schedules) {
|
if (@schedules) {
|
||||||
@@ -483,7 +483,7 @@ sub render_schedule_form {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Schedule name
|
# Schedule name
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">Schedule Identity</h2>\n};
|
print qq{<h2 class="card-title text-sm">Schedule Identity</h2>\n};
|
||||||
print qq{<div class="flex items-center gap-3 mb-2.5">\n};
|
print qq{<div class="flex items-center gap-3 mb-2.5">\n};
|
||||||
print qq{ <label class="w-44 font-medium text-sm" for="schedule_name">Schedule Name</label>\n};
|
print qq{ <label class="w-44 font-medium text-sm" for="schedule_name">Schedule Name</label>\n};
|
||||||
@@ -497,7 +497,7 @@ sub render_schedule_form {
|
|||||||
print qq{</div>\n</div>\n};
|
print qq{</div>\n</div>\n};
|
||||||
|
|
||||||
# Schedule settings
|
# Schedule settings
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">Schedule Settings</h2>\n};
|
print qq{<h2 class="card-title text-sm">Schedule Settings</h2>\n};
|
||||||
|
|
||||||
my $sched = $conf->{SCHEDULE} // '';
|
my $sched = $conf->{SCHEDULE} // '';
|
||||||
@@ -524,7 +524,7 @@ sub render_schedule_form {
|
|||||||
print qq{</div>\n</div>\n};
|
print qq{</div>\n</div>\n};
|
||||||
|
|
||||||
# Target remotes
|
# Target remotes
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">Target Remotes</h2>\n};
|
print qq{<h2 class="card-title text-sm">Target Remotes</h2>\n};
|
||||||
print qq{<p class="text-xs text-base-content/60 mb-3">Select which remotes this schedule targets. Leave all unchecked to target all remotes.</p>\n};
|
print qq{<p class="text-xs text-base-content/60 mb-3">Select which remotes this schedule targets. Leave all unchecked to target all remotes.</p>\n};
|
||||||
|
|
||||||
|
|||||||
@@ -156,13 +156,13 @@ print qq{<form method="POST" action="settings.cgi">\n};
|
|||||||
print GnizaWHM::UI::csrf_hidden_field();
|
print GnizaWHM::UI::csrf_hidden_field();
|
||||||
|
|
||||||
# Section: Local Settings
|
# Section: Local Settings
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">Local Settings</h2>\n};
|
print qq{<h2 class="card-title text-sm">Local Settings</h2>\n};
|
||||||
field_text('TEMP_DIR', 'Working Directory', 'Default: /usr/local/gniza/workdir');
|
field_text('TEMP_DIR', 'Working Directory', 'Default: /usr/local/gniza/workdir');
|
||||||
print qq{</div>\n</div>\n};
|
print qq{</div>\n</div>\n};
|
||||||
|
|
||||||
# Section: Account Filtering
|
# Section: Account Filtering
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">Account Filtering</h2>\n};
|
print qq{<h2 class="card-title text-sm">Account Filtering</h2>\n};
|
||||||
my $inc_val = GnizaWHM::UI::esc($conf->{INCLUDE_ACCOUNTS} // '');
|
my $inc_val = GnizaWHM::UI::esc($conf->{INCLUDE_ACCOUNTS} // '');
|
||||||
my $exc_val = GnizaWHM::UI::esc($conf->{EXCLUDE_ACCOUNTS} // '');
|
my $exc_val = GnizaWHM::UI::esc($conf->{EXCLUDE_ACCOUNTS} // '');
|
||||||
@@ -184,7 +184,7 @@ if (@accounts) {
|
|||||||
print qq{</div>\n</div>\n};
|
print qq{</div>\n</div>\n};
|
||||||
|
|
||||||
# Section: Logging
|
# Section: Logging
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">Logging</h2>\n};
|
print qq{<h2 class="card-title text-sm">Logging</h2>\n};
|
||||||
field_text('LOG_DIR', 'Log Directory', 'Default: /var/log/gniza');
|
field_text('LOG_DIR', 'Log Directory', 'Default: /var/log/gniza');
|
||||||
field_select('LOG_LEVEL', 'Log Level', ['debug', 'info', 'warn', 'error']);
|
field_select('LOG_LEVEL', 'Log Level', ['debug', 'info', 'warn', 'error']);
|
||||||
@@ -192,14 +192,14 @@ field_text('LOG_RETAIN', 'Log Retention (days)', 'Default: 90');
|
|||||||
print qq{</div>\n</div>\n};
|
print qq{</div>\n</div>\n};
|
||||||
|
|
||||||
# Section: Notifications
|
# Section: Notifications
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">Notifications</h2>\n};
|
print qq{<h2 class="card-title text-sm">Notifications</h2>\n};
|
||||||
field_text('NOTIFY_EMAIL', 'Email Address(es)', 'Comma-separated, empty = disabled');
|
field_text('NOTIFY_EMAIL', 'Email Address(es)', 'Comma-separated, empty = disabled');
|
||||||
field_select('NOTIFY_ON', 'Notify On', ['always', 'failure', 'never']);
|
field_select('NOTIFY_ON', 'Notify On', ['always', 'failure', 'never']);
|
||||||
print qq{</div>\n</div>\n};
|
print qq{</div>\n</div>\n};
|
||||||
|
|
||||||
# Section: SMTP Settings
|
# Section: SMTP Settings
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">SMTP Settings</h2>\n};
|
print qq{<h2 class="card-title text-sm">SMTP Settings</h2>\n};
|
||||||
print qq{<p class="text-xs text-base-content/60 mb-3">Optional. When SMTP Host is empty, system mail/sendmail is used.</p>\n};
|
print qq{<p class="text-xs text-base-content/60 mb-3">Optional. When SMTP Host is empty, system mail/sendmail is used.</p>\n};
|
||||||
field_text('SMTP_HOST', 'SMTP Host', 'e.g. smtp.gmail.com');
|
field_text('SMTP_HOST', 'SMTP Host', 'e.g. smtp.gmail.com');
|
||||||
@@ -223,7 +223,7 @@ print qq{<div id="gniza-smtp-alert" class="mt-3"></div>\n};
|
|||||||
print qq{</div>\n</div>\n};
|
print qq{</div>\n</div>\n};
|
||||||
|
|
||||||
# Section: Advanced
|
# Section: Advanced
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">Advanced</h2>\n};
|
print qq{<h2 class="card-title text-sm">Advanced</h2>\n};
|
||||||
field_text('LOCK_FILE', 'Lock File', 'Default: /var/run/gniza.lock');
|
field_text('LOCK_FILE', 'Lock File', 'Default: /var/run/gniza.lock');
|
||||||
field_text('SSH_TIMEOUT', 'SSH Timeout (seconds)', 'Default: 30');
|
field_text('SSH_TIMEOUT', 'SSH Timeout (seconds)', 'Default: 30');
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ sub handle_step1 {
|
|||||||
|
|
||||||
my $keys = GnizaWHM::UI::detect_ssh_keys();
|
my $keys = GnizaWHM::UI::detect_ssh_keys();
|
||||||
|
|
||||||
print qq{<div class="card bg-base-100 shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
print qq{<div class="card bg-white shadow-sm border border-base-300 mb-6">\n<div class="card-body">\n};
|
||||||
print qq{<h2 class="card-title text-sm">Step 1: SSH Key</h2>\n};
|
print qq{<h2 class="card-title text-sm">Step 1: SSH Key</h2>\n};
|
||||||
print qq{<p>gniza uses SSH keys to connect to remote backup destinations. Select an existing key or create one first.</p>\n};
|
print qq{<p>gniza uses SSH keys to connect to remote backup destinations. Select an existing key or create one first.</p>\n};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user