Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions Controller/Backup.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ class Backup extends Controller
/** @var string */
public $active_tab = 'download';

/** @var string */
public $download_tab = 'general';

/** @var array */
public $backup_list = [];

Expand All @@ -50,6 +53,9 @@ class Backup extends Controller
/** @var string */
public $zip_file_name = '';

/** @var string */
public $db_charset = 'utf8';

/**
* Return the max file size that can be uploaded.
*
Expand Down Expand Up @@ -80,7 +86,11 @@ public function privateCore(&$response, $user, $permissions)
{
parent::privateCore($response, $user, $permissions);

// track charset for the download tab selector
$this->db_charset = Tools::config('mysql_charset', 'utf8');

$this->active_tab = $this->request->get('active_tab', 'download');
$this->download_tab = $this->request->get('download_tab', 'general');

$action = $this->request->get('action', '');
switch ($action) {
Expand Down Expand Up @@ -685,6 +695,9 @@ private function switchDbCharsetAction(): void
return;
}

$this->db_charset = $selectedCharset;
$this->active_tab = 'advanced';

Tools::log()->notice('record-updated-correctly');
}

Expand Down
7 changes: 5 additions & 2 deletions Translation/en_EN.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"backup": "Backup",
"backup-charset-error": "The backup encoding is %db-charset%, while in config.php it is %config-charset%. Press the change encoding button before restoring.",
"backup-charset-error": "The backup encoding is %db-charset%, while config.php uses %config-charset%. Adjust the encoding before restoring.",
"backup-file-too-big": "The backup file is too large to upload to the server. The maximum size is %size% MB",
"backup-memory-warning": "Warning: the backup takes %size% MB, but you only have %memory% MB of memory available. Insufficient to perform the backup.",
"backup-port-warning": "The MySQL port should be 3306, but you are using %port%",
Expand All @@ -15,5 +15,8 @@
"restore-backup-warning": "Warning: restoring FacturaScripts data is like going back in time. Everything that was not in the backup will be deleted, that is, the invoices that you have made later and are not in the copy, will be lost.",
"restore-files": "Restore files",
"restore-files-p": "If you have the backup of the files, select that zip file and press the restore button.",
"switch-db-charset": "Change encoding"
"switch-db-charset": "Database encoding",
"switch-db-charset-info": "The encoding must match the backup. If you receive a warning that it is different, change it from here.",
"general": "General",
"advanced": "Advanced"
}
7 changes: 5 additions & 2 deletions Translation/es_ES.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"backup": "Copia de seguridad",
"backup-charset-error": "La codificación de la copia de seguridad es %db-charset%, mientras que en el config.php es %config-charset%. Pulsa el botón cambiar codificación antes de restaurar.",
"backup-charset-error": "La codificación de la copia de seguridad es %db-charset%, mientras que en el config.php es %config-charset%. Ajusta la codificación antes de restaurar.",
"backup-file-too-big": "El archivo de copia de seguridad es demasiado grande para subirlo al servidor. El tamaño máximo es %size% MB",
"backup-memory-warning": "Advertencia: la copia de seguridad ocupa %size% MB, pero solamente tienes %memory% MB de memoria RAM disponible. Insuficiente para realizar la copia de seguridad. Como alternativa puedes comprimir la carpeta de FacturaScripts, que es equivalente a una copia de los archivos.",
"backup-port-warning": "El puerto de MySQL debe ser el 3306, pero estás usando el %port%",
Expand All @@ -15,5 +15,8 @@
"restore-backup-warning": "Advertencia: restaurar los datos de FacturaScripts es como volver al pasado. Se eliminará todo lo que no estuviese en la copia de seguridad, es decir, las facturas que hayas realizado después y no estén en la copia, se perderán.",
"restore-files": "Restaurar archivos",
"restore-files-p": "Si tienes la copia de seguridad de los archivos, selecciona ese archivo zip y pulsa el botón restaurar.",
"switch-db-charset": "Cambiar codificación"
"switch-db-charset": "Codificación de la base de datos",
"switch-db-charset-info": "La codificación debe ser la misma que la de la copia de seguridad. Si recibe aviso de que no es la misma, cámbiela desde aquí.",
"general": "General",
"advanced": "Avanzado"
}
117 changes: 75 additions & 42 deletions View/Backup.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@
<i class="fa-solid fa-upload me-1"></i> {{ trans('restore') }}
</button>
</li>
<li class="nav-item" role="presentation">
{% set btnClass = fsc.active_tab == 'advanced' ? 'nav-link active' : 'nav-link' %}
<button class="{{ btnClass }}" id="advanced-tab" data-bs-toggle="tab" data-bs-target="#advanced"
type="button" role="tab" aria-controls="advanced"
aria-selected="{{ fsc.active_tab == 'advanced' ? 'true' : 'false' }}">
<i class="fa-solid fa-gear me-1"></i> {{ trans('advanced') }}
</button>
</li>
</ul>
</div>
<div class="col-auto">
Expand Down Expand Up @@ -47,29 +55,33 @@
</h2>
<p class="card-text">{{ trans('download-backup-p') }}</p>
</div>
<div class="card-footer p-2">
{% if fsc.db_file_name %}
<button type="button" class="btn btn-success btn-spin-action me-2"
onclick="downloadBackupAction('download-sql-file','{{ fsc.db_file_name }}')">
<i class="fa-solid fa-download me-2"></i> {{ trans('download') }}
</button>
{% else %}
<button type="button" class="btn btn-secondary btn-spin-action me-2"
onclick="createBackupAction('create-sql-file')">
<i class="fa-solid fa-database me-2"></i> {{ trans('database') }}
</button>
{% endif %}
{% if fsc.zip_file_name %}
<button type="button" class="btn btn-success btn-spin-action"
onclick="downloadBackupAction('download-zip-file','{{ fsc.zip_file_name }}')">
<i class="fa-solid fa-download me-2"></i> {{ trans('download') }}
</button>
{% else %}
<button type="submit" class="btn btn-secondary btn-spin-action"
onclick="createBackupAction('create-zip-file')">
<i class="fa-solid fa-box-archive me-2"></i> {{ trans('files') }}
</button>
{% endif %}
<div class="card-footer p-3">
<div class="d-flex flex-wrap align-items-center gap-2">
<div class="btn-group me-2">
{% if fsc.db_file_name %}
<button type="button" class="btn btn-success btn-spin-action"
onclick="downloadBackupAction('download-sql-file','{{ fsc.db_file_name }}')">
<i class="fa-solid fa-download me-2"></i> {{ trans('download') }}
</button>
{% else %}
<button type="button" class="btn btn-secondary btn-spin-action"
onclick="createBackupAction('create-sql-file')">
<i class="fa-solid fa-database me-2"></i> {{ trans('database') }}
</button>
{% endif %}
</div>
{% if fsc.zip_file_name %}
<button type="button" class="btn btn-success btn-spin-action"
onclick="downloadBackupAction('download-zip-file','{{ fsc.zip_file_name }}')">
<i class="fa-solid fa-download me-2"></i> {{ trans('download') }}
</button>
{% else %}
<button type="button" class="btn btn-secondary btn-spin-action"
onclick="createBackupAction('create-zip-file')">
<i class="fa-solid fa-box-archive me-2"></i> {{ trans('files') }}
</button>
{% endif %}
</div>
</div>
</div>
<div class="card shadow mb-5">
Expand Down Expand Up @@ -169,24 +181,6 @@
<button type="submit" class="btn btn-warning btn-spin-action">
{{ trans('restore') }}
</button>
<div class="btn-group ms-2">
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle btn-spin-action"
type="button" data-bs-toggle="dropdown" aria-expanded="false">
{{ trans('switch-db-charset') }}
</button>
<div class="dropdown-menu">
<a class="dropdown-item"
href="?action=switch-db-charset&charset=utf8&multireqtoken={{ formToken(false) }}&active_tab=restore">
utf8
</a>
<a class="dropdown-item"
href="?action=switch-db-charset&charset=utf8mb4&multireqtoken={{ formToken(false) }}&active_tab=restore">
utf8mb4
</a>
</div>
</div>
</div>
</div>
</div>
</form>
Expand Down Expand Up @@ -220,6 +214,45 @@
</div>
</form>
</div>
{% set tabClass = fsc.active_tab == 'advanced' ? 'tab-pane fade show active' : 'tab-pane fade' %}
<div class="{{ tabClass }}" id="advanced" role="tabpanel" aria-labelledby="advanced-tab">
<div class="card shadow mb-4">
<div class="card-body">
<h2 class="h4 mb-3">
<i class="fa-solid fa-gear me-2"></i> {{ trans('switch-db-charset') }}
</h2>
<p class="card-text mb-0">
{{ trans('switch-db-charset-info') }}
</p>
</div>
<div class="card-footer p-3">
<div class="d-flex flex-wrap align-items-center gap-2">
<div class="btn-group">
<button class="btn btn-secondary dropdown-toggle btn-spin-action" type="button"
data-bs-toggle="dropdown" aria-expanded="false">
{{ trans('switch-db-charset') }}: <span class="text-uppercase">{{ fsc.db_charset }}</span>
</button>
<div class="dropdown-menu dropdown-menu-end">
<a class="dropdown-item{% if fsc.db_charset == 'utf8' %} active{% endif %}"
href="?action=switch-db-charset&charset=utf8&multireqtoken={{ formToken(false) }}&active_tab=advanced">
utf8
{% if fsc.db_charset == 'utf8' %}
<i class="fa-solid fa-check ms-2"></i>
{% endif %}
</a>
<a class="dropdown-item{% if fsc.db_charset == 'utf8mb4' %} active{% endif %}"
href="?action=switch-db-charset&charset=utf8mb4&multireqtoken={{ formToken(false) }}&active_tab=advanced">
utf8mb4
{% if fsc.db_charset == 'utf8mb4' %}
<i class="fa-solid fa-check ms-2"></i>
{% endif %}
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
Expand Down Expand Up @@ -284,4 +317,4 @@
});
});
</script>
{% endblock %}
{% endblock %}