From f2e00040bd5bb84aa4437004fd37086b32397b77 Mon Sep 17 00:00:00 2001 From: amcmanu3 Date: Sat, 20 Apr 2024 18:15:06 -0400 Subject: [PATCH] Make backups list page load --- app/classes/web/panel_handler.py | 31 +- .../templates/panel/server_backup.html | 411 +++------ .../templates/panel/server_backup_edit.html | 820 ++++++++++++++++++ 3 files changed, 952 insertions(+), 310 deletions(-) create mode 100644 app/frontend/templates/panel/server_backup_edit.html diff --git a/app/classes/web/panel_handler.py b/app/classes/web/panel_handler.py index d436a72a..514ea494 100644 --- a/app/classes/web/panel_handler.py +++ b/app/classes/web/panel_handler.py @@ -677,16 +677,10 @@ class PanelHandler(BaseHandler): page_data["java_versions"] = page_java if subpage == "backup": server_info = self.controller.servers.get_server_data_by_id(server_id) - page_data["backup_config"] = ( - self.controller.management.get_backup_config(server_id) - ) + page_data["backups"] = self.controller.management.get_backups_by_server( server_id, model=True ) - exclusions = [] - page_data["exclusions"] = ( - self.controller.management.get_excluded_backup_dirs(server_id) - ) page_data["backing_up"] = ( self.controller.servers.get_server_instance_by_id( server_id @@ -698,20 +692,8 @@ class PanelHandler(BaseHandler): ).send_backup_status() ) # makes it so relative path is the only thing shown - for file in page_data["exclusions"]: - if Helpers.is_os_windows(): - exclusions.append(file.replace(server_info["path"] + "\\", "")) - else: - exclusions.append(file.replace(server_info["path"] + "/", "")) - page_data["exclusions"] = exclusions + self.controller.servers.refresh_server_settings(server_id) - try: - page_data["backup_list"] = server.list_backups() - except: - page_data["backup_list"] = [] - page_data["backup_path"] = Helpers.wtol_path( - page_data["backup_config"]["backup_path"] - ) if subpage == "metrics": try: @@ -1260,6 +1242,15 @@ class PanelHandler(BaseHandler): template = "panel/server_schedule_edit.html" + elif page == "edit_backup": + exclusions = [] + for file in page_data["exclusions"]: + if Helpers.is_os_windows(): + exclusions.append(file.replace(server_info["path"] + "\\", "")) + else: + exclusions.append(file.replace(server_info["path"] + "/", "")) + page_data["exclusions"] = exclusions + elif page == "edit_user": user_id = self.get_argument("id", None) role_servers = self.controller.servers.get_authorized_servers(user_id) diff --git a/app/frontend/templates/panel/server_backup.html b/app/frontend/templates/panel/server_backup.html index 0ffba3c4..6a8098c4 100644 --- a/app/frontend/templates/panel/server_backup.html +++ b/app/frontend/templates/panel/server_backup.html @@ -43,35 +43,51 @@
-

{{ translate('serverBackups', 'backups', data['lang']) }}

+

{{ translate('serverBackups', 'backups', + data['lang']) }}

{% if data['user_data']['hints'] %} - + {% end %} -
{{ translate('serverBackups', 'newBackup', data['lang']) }}
+
{{ translate('serverBackups', 'newBackup', data['lang']) }} +
{% if len(data['backups']) == 0 %}
- {{ translate('serverBackups', 'no-backup', data['lang']) }} {{ translate('serverBackups', 'newBackup',data['lang']) }}. + {{ translate('serverBackups', 'no-backup', data['lang']) }} {{ + translate('serverBackups', 'newBackup',data['lang']) }}.
{% end %} {% if len(data['backups']) > 0 %}
- +
- - - - - + + + + + {% for backup in data['backups'] %} @@ -85,13 +101,17 @@

{{backup.max_backups}}

@@ -101,7 +121,8 @@
{{ translate('serverBackups', 'enabled', data['lang']) }}{{ translate('serverBackups', 'name', data['lang']) }} {{ translate('serverBackups', 'storageLocation', data['lang']) }}{{ translate('serverBackups', 'maxBackups', data['lang']) }}{{ translate('serverBackups', 'actions', data['lang']) }}{{ translate('serverBackups', 'enabled', + data['lang']) }}{{ translate('serverBackups', 'name', + data['lang']) }} {{ translate('serverBackups', + 'storageLocation', data['lang']) }}{{ translate('serverBackups', + 'maxBackups', data['lang']) }}{{ translate('serverBackups', 'actions', + data['lang']) }}
- - -
- +
@@ -124,13 +148,17 @@

{{backup.backup_name}}

@@ -144,207 +172,6 @@ -
-
-
-
- {% if data['backing_up'] %} -
-
{{ - data['backup_stats']['percent'] }}%
-
-

Backing up {{data['server_stats']['world_size']}}

- {% end %} - -
- {% if not data['backing_up'] %} -
- -
- {% end %} -
-
- {% if data['super_user'] %} - - - {% end %} -
- -
- - -
-
- - {% if data['backup_config']['compress'] %} - {{ translate('serverBackups', 'compress', data['lang']) }} - {% else %} - {{ - translate('serverBackups', 'compress', data['lang']) }} - {% end %} -
-
- - {% if data['backup_config']['shutdown'] %} - {{ translate('serverBackups', 'shutdown', data['lang']) }} - {% else %} - {{ - translate('serverBackups', 'shutdown', data['lang']) }} - {% end %} -
-
- - {% if data['backup_config']['before'] %} - {{ - translate('serverBackups', 'before', data['lang']) }} -
- - {% else %} - {{ - translate('serverBackups', 'before', data['lang']) }} -
- - {% end %} -
-
- - {% if data['backup_config']['after'] %} - {{ - translate('serverBackups', 'after', data['lang']) }} -
- - {% else %} - {{ - translate('serverBackups', 'after', data['lang']) }} -
- - {% end %} -
-
- -
- -
- - - - - -
- -
-
- -
{{ translate('serverBackups', 'enabled', @@ -116,7 +137,10 @@ {% for backup in data['backups'] %}
- - -
-

{{ translate('serverBackups', 'currentBackups', data['lang']) }}

- - - - - - - - - {% for backup in data['backup_list'] %} - - - - - - {% end %} - - -
{{ translate('serverBackups', 'options', data['lang']) }}{{ translate('serverBackups', 'path', data['lang']) }}{{ translate('serverBackups', 'size', data['lang']) }}
- - - {{ translate('serverBackups', 'download', data['lang']) }} - -
-
- - -
{{ backup['path'] }}{{ backup['size'] }}
- -
-
-
-
-
-
-
-

{{ translate('serverBackups', 'excludedBackups', - data['lang']) }}

-
-
-
    - {% for item in data['exclusions'] %} -
  • {{item}}
  • -
    - {% end %} -
-
@@ -414,15 +241,15 @@ async function backup_started() { const token = getCookie("_xsrf") let res = await fetch(`/api/v2/servers/${server_id}/action/backup_server`, { - method: 'POST', - headers: { - 'X-XSRFToken': token - } - }); - let responseData = await res.json(); - if (responseData.status === "ok") { - console.log(responseData); - $("#backup_button").html(`
+ method: 'POST', + headers: { + 'X-XSRFToken': token + } + }); + let responseData = await res.json(); + if (responseData.status === "ok") { + console.log(responseData); + $("#backup_button").html(`
{{ @@ -430,18 +257,18 @@

Backing up {{data['server_stats']['world_size']}}

`); - } else { + } else { - bootbox.alert({ - title: responseData.status, - message: responseData.error - }); - } + bootbox.alert({ + title: responseData.status, + message: responseData.error + }); + } return; } async function del_backup(filename, id) { const token = getCookie("_xsrf") - let contents = JSON.stringify({"filename": filename}) + let contents = JSON.stringify({ "filename": filename }) let res = await fetch(`/api/v2/servers/${id}/backups/backup/`, { method: 'DELETE', headers: { @@ -452,15 +279,17 @@ let responseData = await res.json(); if (responseData.status === "ok") { window.location.reload(); - }else{ - bootbox.alert({"title": responseData.status, - "message": responseData.error}) + } else { + bootbox.alert({ + "title": responseData.status, + "message": responseData.error + }) } } async function restore_backup(filename, id) { const token = getCookie("_xsrf") - let contents = JSON.stringify({"filename": filename}) + let contents = JSON.stringify({ "filename": filename }) var dialog = bootbox.dialog({ message: " {{ translate('serverBackups', 'restoring', data['lang']) }}", closeButton: false @@ -475,9 +304,11 @@ let responseData = await res.json(); if (responseData.status === "ok") { window.location.href = "/panel/dashboard"; - }else{ - bootbox.alert({"title": responseData.status, - "message": responseData.error}) + } else { + bootbox.alert({ + "title": responseData.status, + "message": responseData.error + }) } } @@ -529,7 +360,7 @@ $('input.excluded:checkbox:checked').each(function () { excluded.push($(this).val()); }); - if ($("#root_files_button").hasClass("clicked")){ + if ($("#root_files_button").hasClass("clicked")) { formDataObject.exclusions = excluded; } delete formDataObject.root_path @@ -711,54 +542,54 @@ }); } - function getDirView(event){ + function getDirView(event) { let path = event.target.parentElement.getAttribute("data-path"); if (document.getElementById(path).classList.contains('clicked')) { return; - }else{ + } else { getTreeView(path); } } - async function getTreeView(path){ + async function getTreeView(path) { console.log(path) const token = getCookie("_xsrf"); let res = await fetch(`/api/v2/servers/${server_id}/files`, { - method: 'POST', - headers: { - 'X-XSRFToken': token - }, - body: JSON.stringify({"page": "backups", "path": path}), + method: 'POST', + headers: { + 'X-XSRFToken': token + }, + body: JSON.stringify({ "page": "backups", "path": path }), + }); + let responseData = await res.json(); + if (responseData.status === "ok") { + console.log(responseData); + process_tree_response(responseData); + + } else { + + bootbox.alert({ + title: responseData.status, + message: responseData.error }); - let responseData = await res.json(); - if (responseData.status === "ok") { - console.log(responseData); - process_tree_response(responseData); - - } else { - - bootbox.alert({ - title: responseData.status, - message: responseData.error - }); - } + } } function process_tree_response(response) { let path = response.data.root_path.path; let text = `
    `; - Object.entries(response.data).forEach(([key, value]) => { - if (key === "root_path" || key === "db_stats"){ - //continue is not valid in for each. Return acts as a continue. - return; - } + Object.entries(response.data).forEach(([key, value]) => { + if (key === "root_path" || key === "db_stats") { + //continue is not valid in for each. Return acts as a continue. + return; + } let checked = "" let dpath = value.path; let filename = key; - if (value.excluded){ + if (value.excluded) { checked = "checked" } - if (value.dir){ + if (value.dir) { text += `
  • \n
    @@ -768,7 +599,7 @@ ${filename}
  • ` - }else{ + } else { text += `
  • `; - if(response.data.root_path.top){ + if (response.data.root_path.top) { try { - document.getElementById('main-tree-div').innerHTML += text; - document.getElementById('main-tree').parentElement.classList.add("clicked"); - } catch { - document.getElementById('files-tree').innerHTML = text; - } - }else{ + document.getElementById('main-tree-div').innerHTML += text; + document.getElementById('main-tree').parentElement.classList.add("clicked"); + } catch { + document.getElementById('files-tree').innerHTML = text; + } + } else { try { - document.getElementById(path + "span").classList.add('tree-caret-down'); - document.getElementById(path).innerHTML += text; - document.getElementById(path).classList.add("clicked"); - } catch { - console.log("Bad") - } + document.getElementById(path + "span").classList.add('tree-caret-down'); + document.getElementById(path).innerHTML += text; + document.getElementById(path).classList.add("clicked"); + } catch { + console.log("Bad") + } - var toggler = document.getElementById(path + "span"); + var toggler = document.getElementById(path + "span"); - if (toggler.classList.contains('files-tree-title')) { - document.getElementById(path + "span").addEventListener("click", function caretListener() { - document.getElementById(path + "ul").classList.toggle("d-block"); - document.getElementById(path + "span").classList.toggle("tree-caret-down"); - }); - } + if (toggler.classList.contains('files-tree-title')) { + document.getElementById(path + "span").addEventListener("click", function caretListener() { + document.getElementById(path + "ul").classList.toggle("d-block"); + document.getElementById(path + "span").classList.toggle("tree-caret-down"); + }); + } } } diff --git a/app/frontend/templates/panel/server_backup_edit.html b/app/frontend/templates/panel/server_backup_edit.html new file mode 100644 index 00000000..0ffba3c4 --- /dev/null +++ b/app/frontend/templates/panel/server_backup_edit.html @@ -0,0 +1,820 @@ +{% extends ../base.html %} + +{% block meta %} +{% end %} + +{% block title %}Crafty Controller - {{ translate('serverDetails', 'serverDetails', data['lang']) }}{% end %} + +{% block content %} + +
    + + +
    +
    + +
    + +
    + + + {% include "parts/details_stats.html %} + +
    + +
    +
    +
    + + + {% include "parts/server_controls_list.html %} + + + {% include "parts/m_server_controls_list.html %} + +
    +
    +
    +
    +

    {{ translate('serverBackups', 'backups', data['lang']) }}

    + {% if data['user_data']['hints'] %} + + {% end %} + +
    +
    + {% if len(data['backups']) == 0 %} +
    + {{ translate('serverBackups', 'no-backup', data['lang']) }} {{ translate('serverBackups', 'newBackup',data['lang']) }}. +
    + {% end %} + {% if len(data['backups']) > 0 %} +
    + + + + + + + + + + + + {% for backup in data['backups'] %} + + + + + + + + {% end %} + +
    {{ translate('serverBackups', 'enabled', data['lang']) }}{{ translate('serverBackups', 'name', data['lang']) }} {{ translate('serverBackups', 'storageLocation', data['lang']) }}{{ translate('serverBackups', 'maxBackups', data['lang']) }}{{ translate('serverBackups', 'actions', data['lang']) }}
    + + +

    {{backup.backup_name}}

    +
    +

    {{backup.backup_location}}

    +
    +

    {{backup.max_backups}}

    +
    + + + +
    +
    +
    + + + + + + + + + + {% for backup in data['backups'] %} + + + + + + {% end %} + +
    {{ translate('serverBackups', 'enabled', + data['lang']) }}Name + {{ translate('serverBackups', 'edit', data['lang']) + }}
    + + +

    {{backup.backup_name}}

    +
    + + + +
    +
    + {% end %} +
    +
    +
    +
    +
    +
    +
    +
    + {% if data['backing_up'] %} +
    +
    {{ + data['backup_stats']['percent'] }}%
    +
    +

    Backing up {{data['server_stats']['world_size']}}

    + {% end %} + +
    + {% if not data['backing_up'] %} +
    + +
    + {% end %} +
    +
    + {% if data['super_user'] %} + + + {% end %} +
    + +
    + + +
    +
    + + {% if data['backup_config']['compress'] %} + {{ translate('serverBackups', 'compress', data['lang']) }} + {% else %} + {{ + translate('serverBackups', 'compress', data['lang']) }} + {% end %} +
    +
    + + {% if data['backup_config']['shutdown'] %} + {{ translate('serverBackups', 'shutdown', data['lang']) }} + {% else %} + {{ + translate('serverBackups', 'shutdown', data['lang']) }} + {% end %} +
    +
    + + {% if data['backup_config']['before'] %} + {{ + translate('serverBackups', 'before', data['lang']) }} +
    + + {% else %} + {{ + translate('serverBackups', 'before', data['lang']) }} +
    + + {% end %} +
    +
    + + {% if data['backup_config']['after'] %} + {{ + translate('serverBackups', 'after', data['lang']) }} +
    + + {% else %} + {{ + translate('serverBackups', 'after', data['lang']) }} +
    + + {% end %} +
    +
    + +
    + +
    + + + + +
    +
    + +
    +
    + + +

    {{ translate('serverBackups', 'currentBackups', data['lang']) }}

    + + + + + + + + + {% for backup in data['backup_list'] %} + + + + + + {% end %} + + +
    {{ translate('serverBackups', 'options', data['lang']) }}{{ translate('serverBackups', 'path', data['lang']) }}{{ translate('serverBackups', 'size', data['lang']) }}
    + + + {{ translate('serverBackups', 'download', data['lang']) }} + +
    +
    + + +
    {{ backup['path'] }}{{ backup['size'] }}
    + +
    +
    +
    +
    +
    +
    +
    +

    {{ translate('serverBackups', 'excludedBackups', + data['lang']) }}

    +
    +
    +
      + {% for item in data['exclusions'] %} +
    • {{item}}
    • +
      + {% end %} +
    +
    + +
    +
    +
    +
    + + + +
    + + + +{% end %} + +{% block js %} + + +{% end %} \ No newline at end of file