v0.249.0: i18n slice 1 release B — backup pages in English, Hungarian byte-identical (R-556)
gates / gates (push) Successful in 20s
gates / gates (push) Successful in 20s
Seven backup pages + the restore-progress JS converted against fixtures captured unconverted
(f8ebc47); recovery renders through executeTemplateLang; English retrieval claims registered;
the Fut comparison left unconverted (R-563).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
{{template "layout_start" .}}
|
||||
|
||||
<div class="page-header">
|
||||
<h2>Biztonsági mentés — Alkalmazások</h2>
|
||||
<h2>{{T "backups_apps.biztonsagi_mentes_alkalmazasok"}}</h2>
|
||||
<span class="domain-badge">{{.Domain}}</span>
|
||||
</div>
|
||||
|
||||
@@ -13,54 +13,54 @@
|
||||
{{template "backups_empty" .}}
|
||||
{{else}}
|
||||
|
||||
<h3 class="backup-tier-divider">Alkalmazás-mentések (adatbázis + konfiguráció)</h3>
|
||||
<p class="form-hint" style="margin:-0.25rem 0 1rem">Az egyes alkalmazások részletes, granulált mentése — adatbázis-kiírások, beállítások és alkalmazás-fájlok. A fenti teljes mentéstől függetlenül, alkalmazásonként visszaállítható.</p>
|
||||
<h3 class="backup-tier-divider">{{T "backups_apps.alkalmazas_mentesek_adatbazis_konfigurac"}}</h3>
|
||||
<p class="form-hint" style="margin:-0.25rem 0 1rem">{{T "backups_apps.az_egyes_alkalmazasok_reszletes_granulal"}}</p>
|
||||
|
||||
<!-- Section 2: Schedule -->
|
||||
<div class="schedule-card">
|
||||
<h3>Ütemezés</h3>
|
||||
<h3>{{T "backups_apps.utemezes"}}</h3>
|
||||
<div class="schedule-rows">
|
||||
<div class="schedule-row">
|
||||
<span class="schedule-task">Adatbázis mentés</span>
|
||||
<span class="schedule-task">{{T "backups_apps.adatbazis_mentes"}}</span>
|
||||
<span class="schedule-time">{{.Backup.DBDumpSchedule}}</span>
|
||||
<span class="schedule-next">Következő: {{nextRunLabel .Backup.NextDBDump}}</span>
|
||||
<span class="schedule-next">{{T "backups_apps.kovetkezo"}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="schedule-summary">
|
||||
{{if .Backup.LastDBDump}}
|
||||
<div class="schedule-summary-row">
|
||||
<span>Utolsó adatbázis mentés:</span>
|
||||
<span>{{T "backups_apps.utolso_adatbazis_mentes"}}</span>
|
||||
<span class="schedule-summary-value">{{fmtTime .Backup.LastDBDump.LastRun}} ({{timeAgo .Backup.LastDBDump.LastRun}})</span>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="schedule-summary-row">
|
||||
<span>Utolsó adatbázis mentés:</span>
|
||||
<span class="schedule-summary-value relative-time">Még nem futott</span>
|
||||
<span>{{T "backups_apps.utolso_adatbazis_mentes"}}</span>
|
||||
<span class="schedule-summary-value relative-time">{{T "backups_apps.meg_nem_futott"}}</span>
|
||||
</div>
|
||||
{{end}}
|
||||
</div>
|
||||
<div class="schedule-actions">
|
||||
<button class="btn btn-sm btn-primary" onclick="triggerBackupFromPage()" id="backup-page-btn"
|
||||
{{if .Backup.Running}}disabled{{end}}>
|
||||
{{if .Backup.Running}}Mentés folyamatban...{{else}}Mentés most{{end}}
|
||||
{{if .Backup.Running}}{{T "backups_apps.mentes_folyamatban"}}{{else}}{{T "backups_apps.mentes_most"}}{{end}}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Section 3: Databases -->
|
||||
<div class="backup-section-card">
|
||||
<h3>Adatbázisok</h3>
|
||||
<h3>{{T "backups_apps.adatbazisok"}}</h3>
|
||||
{{if or .Backup.DumpFiles .Backup.DiscoveredDBs}}
|
||||
<div class="backup-table-wrap">
|
||||
<table class="db-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Alkalmazás</th>
|
||||
<th>Típus</th>
|
||||
<th>Méret</th>
|
||||
<th>Utolsó</th>
|
||||
<th>Érvényesítés</th>
|
||||
<th>Állapot</th>
|
||||
<th>{{T "backups_apps.alkalmazas"}}</th>
|
||||
<th>{{T "backups_apps.tipus"}}</th>
|
||||
<th>{{T "backups_apps.meret"}}</th>
|
||||
<th>{{T "backups_apps.utolso"}}</th>
|
||||
<th>{{T "backups_apps.ervenyesites"}}</th>
|
||||
<th>{{T "backups_apps.allapot"}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -75,16 +75,16 @@
|
||||
{{if .Error}}
|
||||
<span class="validation-badge validation-na">–</span>
|
||||
{{else if .Validation.Valid}}
|
||||
<span class="validation-badge validation-ok">{{.Validation.TableCount}} tábla</span>
|
||||
<span class="validation-badge validation-ok">{{T "backups_apps.tabla"}}</span>
|
||||
{{else if .Validation.Error}}
|
||||
<span class="validation-badge validation-fail" title="{{.Validation.Error}}">Hiba</span>
|
||||
<span class="validation-badge validation-fail" title="{{.Validation.Error}}">{{T "backups_apps.hiba"}}</span>
|
||||
{{else}}
|
||||
<span class="validation-badge validation-na" title="Az érvényesítés nem futott le">–</span>
|
||||
<span class="validation-badge validation-na" title="{{T "backups_apps.az_ervenyesites_nem_futott_le"}}">–</span>
|
||||
{{end}}
|
||||
</td>
|
||||
<td>
|
||||
{{if .Error}}
|
||||
<span class="validation-badge validation-fail" title="{{.Error}}">Hiba</span>
|
||||
<span class="validation-badge validation-fail" title="{{.Error}}">{{T "backups_apps.hiba"}}</span>
|
||||
{{else}}
|
||||
<span class="validation-badge validation-ok">OK</span>
|
||||
{{end}}
|
||||
@@ -100,9 +100,9 @@
|
||||
<td class="mono">{{fmtTimeShort .ModTime}}</td>
|
||||
<td>
|
||||
{{if .Validation.Valid}}
|
||||
<span class="validation-badge validation-ok">{{.Validation.TableCount}} tábla</span>
|
||||
<span class="validation-badge validation-ok">{{T "backups_apps.tabla"}}</span>
|
||||
{{else if .Validation.Error}}
|
||||
<span class="validation-badge validation-fail" title="{{.Validation.Error}}">Hiba</span>
|
||||
<span class="validation-badge validation-fail" title="{{.Validation.Error}}">{{T "backups_apps.hiba"}}</span>
|
||||
{{else}}
|
||||
<span class="validation-badge validation-na">–</span>
|
||||
{{end}}
|
||||
@@ -115,23 +115,20 @@
|
||||
</table>
|
||||
</div>
|
||||
{{else if eq .DBSectionState "pending"}}
|
||||
<div class="backup-table-empty">Még nem készült adatbázis-mentés — az első ütemezett mentés éjjel fut le.</div>
|
||||
<div class="backup-table-empty">{{T "backups_apps.meg_nem_keszult_adatbazis_mentes"}}</div>
|
||||
{{else}}
|
||||
<div class="backup-table-empty">A telepített alkalmazások beágyazott adatbázist használnak (pl. SQLite) — adatbázisuk a fájl- és kötetmentés része, külön adatbázis-kiírás nem szükséges.</div>
|
||||
<div class="backup-table-empty">{{T "backups_apps.a_telepitett_alkalmazasok_beagyazott_ada"}}</div>
|
||||
{{end}}
|
||||
</div>
|
||||
|
||||
<!-- Section 4: Unified per-app backup status -->
|
||||
{{if .Backup.AppDataInfo}}
|
||||
<div class="backup-section-card">
|
||||
<h3>Alkalmazások mentési állapota</h3>
|
||||
<h3>{{T "backups_apps.alkalmazasok_mentesi_allapota"}}</h3>
|
||||
|
||||
{{if .NoUserDataBackupWarning}}
|
||||
<div class="alert alert-error" style="margin-bottom:1.5rem">
|
||||
<strong>Felhasználói adatokról nincs biztonsági mentés.</strong><br>
|
||||
A szerveren tárolt fotók, dokumentumok és egyéb fájlok jelenleg csak egy példányban léteznek.
|
||||
Külső meghajtó csatlakoztatásával biztonsági másolat készíthető a 3-2-1 szabály szerint.
|
||||
<a href="/settings" style="color:inherit;text-decoration:underline">Meghajtó beállítása →</a>
|
||||
{{T "backups_apps.felhasznaloi_adatokrol_nincs_biztonsagi"}}
|
||||
</div>
|
||||
{{end}}
|
||||
|
||||
@@ -148,17 +145,17 @@
|
||||
<span class="app-backup-row-name">{{.DisplayName}}</span>
|
||||
<div class="app-backup-row-meta">
|
||||
{{if .Removed}}
|
||||
<span class="tag tag-warn">Eltávolítva — visszaállítható</span>
|
||||
<span class="tag tag-warn">{{T "backups_apps.eltavolitva_visszaallithato"}}</span>
|
||||
{{if .StorageLabel}}<span class="meta-badge meta-badge-storage">{{.StorageLabel}}</span>{{end}}
|
||||
{{else if .DriveDisconnected}}
|
||||
<span class="tag tag-warn">Meghajtó leválasztva</span>
|
||||
<span class="tag tag-warn">{{T "backups_apps.meghajto_levalasztva"}}</span>
|
||||
{{else if .HasHDDData}}
|
||||
{{if .StorageLabel}}<span class="meta-badge meta-badge-storage">{{.StorageLabel}}</span>{{end}}
|
||||
<span class="mono app-backup-size" style="font-size:.8rem">{{.HDDSizeHuman}}</span>
|
||||
{{else if .HasVolumeData}}
|
||||
<span class="meta-badge">Konfig{{if .HasDB}} + DB{{end}} + Adatok</span>
|
||||
<span class="meta-badge">{{T "backups_apps.konfig"}}{{if .HasDB}} + DB{{end}} {{T "backups_apps.adatok"}}</span>
|
||||
{{else}}
|
||||
<span class="meta-badge">Konfig{{if .HasDB}} + DB{{end}}</span>
|
||||
<span class="meta-badge">{{T "backups_apps.konfig"}}{{if .HasDB}} + DB{{end}}</span>
|
||||
{{end}}
|
||||
<span class="status-dot status-{{.Status}}" title="{{.StatusText}}"></span>
|
||||
</div>
|
||||
@@ -171,15 +168,15 @@
|
||||
from the unit (R-253). No tier rows: nothing is scheduled for an app that is not here. */}}
|
||||
<div class="backup-layers">
|
||||
<div class="backup-layer-row">
|
||||
<span class="tier-label">Mentés</span>
|
||||
<span class="layer-badge">Megtartva</span>
|
||||
<span class="tier-location">helyi</span>
|
||||
<span class="tier-contents">Az alkalmazást eltávolítottad, a mentése megmaradt. Legutóbbi mentés: {{fmtTimeStr .RemovedUnitTime}}.</span>
|
||||
<span class="tier-label">{{T "backups_apps.mentes"}}</span>
|
||||
<span class="layer-badge">{{T "backups_apps.megtartva"}}</span>
|
||||
<span class="tier-location">{{T "backups_apps.helyi"}}</span>
|
||||
<span class="tier-contents">{{T "backups_apps.az_alkalmazast_eltavolitottad_a_mentese"}}</span>
|
||||
<div class="layer-actions">
|
||||
<form method="POST" action="/backup/restore" style="display:inline">{{$.CSRFField}}
|
||||
<input type="hidden" name="stack_name" value="{{.StackName}}">
|
||||
<input type="hidden" name="snapshot_id" value="helyi">
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Újratelepíti a(z) {{.DisplayName}} alkalmazást a megtartott mentésből ({{fmtTimeStr .RemovedUnitTime}})? Az adatok a mentésből állnak vissza.">Visszaállítás a mentésből</button>
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="{{T "backups_apps.ujratelepiti_a_z_alkalmazast_a"}}">{{T "backups_apps.visszaallitas_a_mentesbol"}}</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@@ -188,82 +185,82 @@
|
||||
<div class="backup-layers">
|
||||
<!-- Tier 1: Nightly backup (mandatory, same drive) -->
|
||||
<div class="backup-layer-row">
|
||||
<span class="tier-label">1. mentés</span>
|
||||
<span class="tier-label">{{T "backups_apps.1_mentes"}}</span>
|
||||
<span class="layer-badge">Auto</span>
|
||||
<span class="tier-location">helyi</span>
|
||||
<span class="tier-location">{{T "backups_apps.helyi"}}</span>
|
||||
{{if .Tier1LastRun}}
|
||||
{{/* R-258: three states. The tick is THIS app's own most recent dump result,
|
||||
not the box's most recent run — and a third value renders NO icon, which is
|
||||
where "we have no result for this backup" belongs. A tick standing for
|
||||
"a file exists" is what this replaced. */}}
|
||||
<span class="layer-last">Utolsó: {{timeAgoStr .Tier1LastRun}}
|
||||
<span class="layer-last">{{T "backups_apps.utolso_2"}}
|
||||
{{if eq .Tier1LastStatus "ok"}}<span class="text-ok"><svg class="ico ico-sm"><use href="#i-check"/></svg></span>
|
||||
{{else if eq .Tier1LastStatus "error"}}<span class="text-error"><svg class="ico ico-sm"><use href="#i-x"/></svg></span>
|
||||
{{else}}<span class="state-text-neutral" title="Erről a mentésről nincs eredményünk.">—</span>{{end}}
|
||||
{{else}}<span class="state-text-neutral" title="{{T "backups_apps.errol_a_mentesrol_nincs_eredmenyunk"}}">—</span>{{end}}
|
||||
</span>
|
||||
{{end}}
|
||||
<span class="tier-contents">{{.Tier1Contents}}</span>
|
||||
{{if .DriveFilesNote}}<span class="state-text-neutral" style="font-size:.8rem">{{.DriveFilesNote}}{{if .DriveFilesNoteLink}} <a href="{{.DriveFilesNoteLink}}">{{.DriveFilesNoteLinkText}} →</a>{{end}}</span>{{end}}
|
||||
{{if and .HasDB (eq .Tier1DBStatus "error")}}
|
||||
<span class="text-error" style="font-size:.8rem"><svg class="ico ico-sm"><use href="#i-triangle-alert"/></svg> DB dump hiba</span>
|
||||
<span class="text-error" style="font-size:.8rem"><svg class="ico ico-sm"><use href="#i-triangle-alert"/></svg> {{T "backups_apps.db_dump_hiba"}}</span>
|
||||
{{end}}
|
||||
</div>
|
||||
<!-- Tier 2: Cross-drive backup (opt-in, different device) -->
|
||||
<div class="backup-layer-row">
|
||||
<span class="tier-label">2. mentés</span>
|
||||
<span class="tier-label">{{T "backups_apps.2_mentes"}}</span>
|
||||
{{if .Tier2UserDisabled}}
|
||||
<span class="layer-unconfigured">2. mentés kikapcsolva</span>
|
||||
<span class="layer-unconfigured">{{T "backups_apps.2_mentes_kikapcsolva"}}</span>
|
||||
<div class="layer-actions">
|
||||
<a href="/stacks/{{.StackName}}/backup" class="btn btn-xs btn-outline">Beállítás</a>
|
||||
<a href="/stacks/{{.StackName}}/backup" class="btn btn-xs btn-outline">{{T "backups_apps.beallitas"}}</a>
|
||||
</div>
|
||||
{{else if and .Tier2Configured .Tier2DestDisconnected}}
|
||||
<span class="layer-method" style="opacity:.6">rsync</span>
|
||||
<span class="layer-dest" style="opacity:.6">→ {{.Tier2Dest}}</span>
|
||||
<span class="tag tag-warn">Cél meghajtó leválasztva</span>
|
||||
<span class="tag tag-warn">{{T "backups_apps.cel_meghajto_levalasztva"}}</span>
|
||||
{{if not .Tier2SuccessTracked}}{{if .Tier2LastRun}}
|
||||
<span class="layer-last" style="opacity:.6">Utolsó: {{timeAgoStr .Tier2LastRun}}</span>
|
||||
<span class="layer-last" style="opacity:.6">{{T "backups_apps.utolso_3"}}</span>
|
||||
{{end}}{{else if .Tier2LastSuccess}}
|
||||
<span class="layer-last" style="opacity:.6">Utolsó sikeres: {{timeAgoStr .Tier2LastSuccess}}</span>
|
||||
<span class="layer-last" style="opacity:.6">{{T "backups_apps.utolso_sikeres"}}</span>
|
||||
{{else}}
|
||||
<span class="layer-last" style="opacity:.6">Még nincs sikeres másolat</span>
|
||||
<span class="layer-last" style="opacity:.6">{{T "backups_apps.meg_nincs_sikeres_masolat"}}</span>
|
||||
{{end}}
|
||||
<span class="tier-contents" style="opacity:.6">{{.Tier23Contents}}</span>
|
||||
<div class="layer-actions">
|
||||
<a href="/stacks/{{.StackName}}/backup" class="btn btn-xs btn-outline">Beállítás</a>
|
||||
<a href="/stacks/{{.StackName}}/backup" class="btn btn-xs btn-outline">{{T "backups_apps.beallitas"}}</a>
|
||||
</div>
|
||||
{{else if and .Tier2Configured .Tier2DestInactive}}
|
||||
<span class="layer-method" style="opacity:.6">rsync</span>
|
||||
<span class="layer-dest" style="opacity:.6">→ {{.Tier2Dest}}</span>
|
||||
<span class="tag tag-warn">Cél meghajtó inaktív</span>
|
||||
<span class="tag tag-warn">{{T "backups_apps.cel_meghajto_inaktiv"}}</span>
|
||||
{{if not .Tier2SuccessTracked}}{{if .Tier2LastRun}}
|
||||
<span class="layer-last" style="opacity:.6">Utolsó: {{timeAgoStr .Tier2LastRun}}</span>
|
||||
<span class="layer-last" style="opacity:.6">{{T "backups_apps.utolso_3"}}</span>
|
||||
{{end}}{{else if .Tier2LastSuccess}}
|
||||
<span class="layer-last" style="opacity:.6">Utolsó sikeres: {{timeAgoStr .Tier2LastSuccess}}</span>
|
||||
<span class="layer-last" style="opacity:.6">{{T "backups_apps.utolso_sikeres"}}</span>
|
||||
{{else}}
|
||||
<span class="layer-last" style="opacity:.6">Még nincs sikeres másolat</span>
|
||||
<span class="layer-last" style="opacity:.6">{{T "backups_apps.meg_nincs_sikeres_masolat"}}</span>
|
||||
{{end}}
|
||||
<span class="tier-contents" style="opacity:.6">{{.Tier23Contents}}</span>
|
||||
<div class="layer-actions">
|
||||
<a href="/stacks/{{.StackName}}/backup" class="btn btn-xs btn-outline">Beállítás</a>
|
||||
<a href="/stacks/{{.StackName}}/backup" class="btn btn-xs btn-outline">{{T "backups_apps.beallitas"}}</a>
|
||||
</div>
|
||||
{{else if .Tier2Configured}}
|
||||
<span class="layer-method">rsync</span>
|
||||
<span class="layer-dest">→ {{.Tier2Dest}}</span>
|
||||
<span class="layer-schedule">{{.Tier2Schedule}}</span>
|
||||
{{if not .Tier2SuccessTracked}}{{if .Tier2LastRun}}
|
||||
<span class="layer-last">Utolsó: {{timeAgoStr .Tier2LastRun}}
|
||||
<span class="layer-last">{{T "backups_apps.utolso_3"}}
|
||||
<span class="{{if eq .Tier2LastStatus "ok"}}text-ok{{else if eq .Tier2LastStatus "error"}}text-error{{else if eq .Tier2LastStatus "running"}}text-muted{{end}}">
|
||||
{{.Tier2StatusBadge}}
|
||||
</span>
|
||||
</span>
|
||||
{{end}}{{else if .Tier2LastSuccess}}
|
||||
<span class="layer-last">Utolsó sikeres: {{timeAgoStr .Tier2LastSuccess}}
|
||||
<span class="layer-last">{{T "backups_apps.utolso_sikeres"}}
|
||||
<span class="{{if eq .Tier2LastStatus "ok"}}text-ok{{else if eq .Tier2LastStatus "error"}}text-error{{else if eq .Tier2LastStatus "running"}}text-muted{{end}}">
|
||||
{{.Tier2StatusBadge}}
|
||||
</span>
|
||||
</span>
|
||||
{{else}}
|
||||
<span class="layer-last">Még nincs sikeres másolat
|
||||
<span class="layer-last">{{T "backups_apps.meg_nincs_sikeres_masolat"}}
|
||||
<span class="{{if eq .Tier2LastStatus "error"}}text-error{{else}}text-muted{{end}}">{{.Tier2StatusBadge}}</span>
|
||||
</span>
|
||||
{{end}}
|
||||
@@ -274,20 +271,20 @@
|
||||
this one is about the PACKAGE, and after a preserved leg they differ. */}}
|
||||
{{if .Tier2UnitStaleNotice}}<span class="layer-reason" style="color:var(--warn);opacity:.9">{{.Tier2UnitStaleNotice}}</span>{{end}}
|
||||
<span class="tier-contents">{{.Tier23Contents}}</span>
|
||||
<span class="tier-browsable" title="A mentés böngészhető fájlrendszerben"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<span class="tier-browsable" title="{{T "backups_apps.a_mentes_bongeszheto_fajlrendszerben"}}"><svg class="ico ico-sm"><use href="#i-file-text"/></svg></span>
|
||||
<div class="layer-actions">
|
||||
{{if not .Tier2SuccessTracked}}{{if .Tier2LastRun}}
|
||||
<form method="POST" action="/backup/tier2/restore" style="display:inline">{{$.CSRFField}}
|
||||
<input type="hidden" name="stack_name" value="{{.StackName}}">
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítja a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi másolat: {{fmtTimeStr .Tier2LastRun}}">Fájlok visszaállítása</button>
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="{{T "backups_apps.visszaallitja_a_hianyzo_fajlokat_a"}}">{{T "backups_apps.fajlok_visszaallitasa"}}</button>
|
||||
</form>
|
||||
{{end}}{{else if .Tier2LastSuccess}}
|
||||
<form method="POST" action="/backup/tier2/restore" style="display:inline">{{$.CSRFField}}
|
||||
<input type="hidden" name="stack_name" value="{{.StackName}}">
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítja a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi sikeres másolat: {{fmtTimeStr .Tier2LastSuccess}}.{{if .Tier2StaleCopy}} Figyelem: a legutóbbi mentési kísérlet nem sikerült, ezért a visszaállított fájlok ennél régebbiek lehetnek.{{end}}">Fájlok visszaállítása</button>
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="{{T "backups_apps.visszaallitja_legutobbi_sikeres_masolat"}}{{if .Tier2StaleCopy}}{{T "backups_apps.figyelem_legutobbi_kiserlet_nem_sikerult"}}{{end}}">{{T "backups_apps.fajlok_visszaallitasa"}}</button>
|
||||
</form>
|
||||
{{else}}
|
||||
<span class="layer-reason" style="opacity:.85">Még nincs sikeres másolat, amiből vissza lehetne állítani.</span>
|
||||
<span class="layer-reason" style="opacity:.85">{{T "backups_apps.meg_nincs_sikeres_masolat_amibol"}}</span>
|
||||
{{end}}
|
||||
{{/* R-102/R-103: the DESTRUCTIVE twin of the button above. Offered only when the
|
||||
copy holds an openable recovery unit (Tier2UnitRestorable — a second
|
||||
@@ -297,54 +294,54 @@
|
||||
{{if .Tier2UnitRestorable}}
|
||||
<form method="POST" action="/backup/tier2/unit-restore" style="display:inline">{{$.CSRFField}}
|
||||
<input type="hidden" name="stack_name" value="{{.StackName}}">
|
||||
<button type="submit" class="btn btn-xs btn-danger-outline" data-confirm="{{.Tier2UnitConfirm}}">Teljes visszaállítás a másolatból</button>
|
||||
<button type="submit" class="btn btn-xs btn-danger-outline" data-confirm="{{.Tier2UnitConfirm}}">{{T "backups_apps.teljes_visszaallitas_a_masolatbol"}}</button>
|
||||
</form>
|
||||
{{end}}
|
||||
<a href="/stacks/{{.StackName}}/backup" class="btn btn-xs btn-outline">Beállítás</a>
|
||||
<a href="/stacks/{{.StackName}}/backup" class="btn btn-xs btn-outline">{{T "backups_apps.beallitas"}}</a>
|
||||
</div>
|
||||
{{else}}
|
||||
<span class="layer-auto-ok"><svg class="ico ico-sm"><use href="#i-check"/></svg> 1. mentés auto</span>
|
||||
<span class="layer-unconfigured"><svg class="ico ico-sm"><use href="#i-triangle-alert"/></svg> Nincs 2. (off-drive) másolat</span>
|
||||
<span class="layer-auto-ok"><svg class="ico ico-sm"><use href="#i-check"/></svg> {{T "backups_apps.1_mentes_auto"}}</span>
|
||||
<span class="layer-unconfigured"><svg class="ico ico-sm"><use href="#i-triangle-alert"/></svg> {{T "backups_apps.nincs_2_off_drive_masolat"}}</span>
|
||||
{{if .Tier2LastError}}
|
||||
<span class="layer-reason" style="opacity:.85" title="A 2. mentés automatikus — külön beállítás nem kell">{{.Tier2LastError}}</span>
|
||||
<span class="layer-reason" style="opacity:.85" title="{{T "backups_apps.a_2_mentes_automatikus_kulon"}}">{{.Tier2LastError}}</span>
|
||||
{{end}}
|
||||
<div class="layer-actions">
|
||||
<a href="/stacks/{{.StackName}}/backup" class="btn btn-xs btn-outline">Beállítás</a>
|
||||
<a href="/stacks/{{.StackName}}/backup" class="btn btn-xs btn-outline">{{T "backups_apps.beallitas"}}</a>
|
||||
</div>
|
||||
{{end}}
|
||||
</div>
|
||||
<!-- Tier 3: Off-box (NAS) backup — real state (see tier3State). -->
|
||||
{{if eq .Tier3State "active"}}
|
||||
<div class="backup-layer-row">
|
||||
<span class="tier-label">3. mentés</span>
|
||||
<span class="layer-badge {{if eq $.Offbox.LastStatus "ok"}}text-ok{{else if eq $.Offbox.LastStatus "error"}}text-error{{else if eq $.Offbox.LastStatus "running"}}text-muted{{end}}">{{if eq $.Offbox.LastStatus "ok"}}Sikeres{{else if eq $.Offbox.LastStatus "error"}}Hiba{{else if eq $.Offbox.LastStatus "running"}}Fut...{{else}}—{{end}}</span>
|
||||
<span class="tier-label">{{T "backups_apps.3_mentes"}}</span>
|
||||
<span class="layer-badge {{if eq $.Offbox.LastStatus "ok"}}text-ok{{else if eq $.Offbox.LastStatus "error"}}text-error{{else if eq $.Offbox.LastStatus "running"}}text-muted{{end}}">{{if eq $.Offbox.LastStatus "ok"}}{{T "backups_apps.sikeres"}}{{else if eq $.Offbox.LastStatus "error"}}{{T "backups_apps.hiba"}}{{else if eq $.Offbox.LastStatus "running"}}{{T "backups_apps.fut"}}{{else}}—{{end}}</span>
|
||||
<span class="tier-location">restic → {{$.Offbox.Host}}</span>
|
||||
{{if $.Offbox.LastRun}}<span class="layer-last">Utolsó: {{timeAgoStr $.Offbox.LastRun}}</span>{{end}}
|
||||
<span class="tier-contents">Helyreállítási egység, titkosítva</span>
|
||||
{{if $.Offbox.LastRun}}<span class="layer-last">{{T "backups_apps.utolso_4"}}</span>{{end}}
|
||||
<span class="tier-contents">{{T "backups_apps.helyreallitasi_egyseg_titkositva"}}</span>
|
||||
</div>
|
||||
{{else if eq .Tier3State "escrow_pending"}}
|
||||
<div class="backup-layer-row">
|
||||
<span class="tier-label">3. mentés</span>
|
||||
<span class="layer-badge text-error">Kulcsletétre vár</span>
|
||||
<span class="tier-contents">A távoli mentés a titkosítási kulcs letétbe helyezéséig szünetel</span>
|
||||
<span class="tier-label">{{T "backups_apps.3_mentes"}}</span>
|
||||
<span class="layer-badge text-error">{{T "backups_apps.kulcsletetre_var"}}</span>
|
||||
<span class="tier-contents">{{T "backups_apps.a_tavoli_mentes_a_titkositasi"}}</span>
|
||||
</div>
|
||||
{{else if eq .Tier3State "off"}}
|
||||
<div class="backup-layer-row" style="opacity:.5">
|
||||
<span class="tier-label">3. mentés</span>
|
||||
<span class="layer-badge">Kikapcsolva</span>
|
||||
<span class="tier-contents">Ez az alkalmazás nincs kijelölve távoli mentésre</span>
|
||||
<span class="tier-label">{{T "backups_apps.3_mentes"}}</span>
|
||||
<span class="layer-badge">{{T "backups_apps.kikapcsolva"}}</span>
|
||||
<span class="tier-contents">{{T "backups_apps.ez_az_alkalmazas_nincs_kijelolve"}}</span>
|
||||
<div class="layer-actions">
|
||||
<a href="/backups/remote#offbox-section" class="btn btn-xs btn-outline">Bekapcsolás</a>
|
||||
<a href="/backups/remote#offbox-section" class="btn btn-xs btn-outline">{{T "backups_apps.bekapcsolas"}}</a>
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="backup-layer-row" style="opacity:.5">
|
||||
<span class="tier-label">3. mentés</span>
|
||||
<span class="layer-badge" style="background:var(--bg-2);color:var(--text-3)">Nincs beállítva</span>
|
||||
<span class="tier-location">távoli (offsite)</span>
|
||||
<span class="tier-contents">Nincs távoli mentési cél beállítva</span>
|
||||
<span class="tier-label">{{T "backups_apps.3_mentes"}}</span>
|
||||
<span class="layer-badge" style="background:var(--bg-2);color:var(--text-3)">{{T "backups_apps.nincs_beallitva"}}</span>
|
||||
<span class="tier-location">{{T "backups_apps.tavoli_offsite"}}</span>
|
||||
<span class="tier-contents">{{T "backups_apps.nincs_tavoli_mentesi_cel_beallitva"}}</span>
|
||||
<div class="layer-actions">
|
||||
<a href="/backups/remote#offbox-section" class="btn btn-xs btn-outline">Beállítás</a>
|
||||
<a href="/backups/remote#offbox-section" class="btn btn-xs btn-outline">{{T "backups_apps.beallitas"}}</a>
|
||||
</div>
|
||||
</div>
|
||||
{{end}}
|
||||
@@ -383,22 +380,22 @@ function toggleBackupDetail(header) {
|
||||
function triggerBackupFromPage() {
|
||||
const btn = document.getElementById('backup-page-btn');
|
||||
btn.disabled = true;
|
||||
btn.textContent = 'Mentés indítása...';
|
||||
btn.textContent = '{{T "backups_apps.mentes_inditasa"}}';
|
||||
fetch('/api/backup/run', { method: 'POST', headers: csrfHeaders() })
|
||||
.then(r => r.json())
|
||||
.then(data => {
|
||||
if (data.ok) {
|
||||
btn.textContent = 'Mentés folyamatban...';
|
||||
btn.textContent = '{{T "backups_apps.mentes_folyamatban"}}';
|
||||
btn.classList.add('loading');
|
||||
startBackupPolling();
|
||||
} else {
|
||||
btn.textContent = data.error || 'Hiba';
|
||||
setTimeout(() => { btn.textContent = 'Mentés most'; btn.disabled = false; }, 3000);
|
||||
btn.textContent = data.error || '{{T "backups_apps.hiba"}}';
|
||||
setTimeout(() => { btn.textContent = '{{T "backups_apps.mentes_most"}}'; btn.disabled = false; }, 3000);
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
btn.textContent = 'Hiba';
|
||||
setTimeout(() => { btn.textContent = 'Mentés most'; btn.disabled = false; }, 3000);
|
||||
btn.textContent = '{{T "backups_apps.hiba"}}';
|
||||
setTimeout(() => { btn.textContent = '{{T "backups_apps.mentes_most"}}'; btn.disabled = false; }, 3000);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user