diff --git a/Assets/JS/EditSettings.js b/Assets/JS/EditSettings.js new file mode 100644 index 0000000..3529dfa --- /dev/null +++ b/Assets/JS/EditSettings.js @@ -0,0 +1,26 @@ +document.addEventListener('DOMContentLoaded', function () { + const frequencySelect = document.getElementById('backup_frequency'); + const weeklyDaySelect = document.getElementById('weekly_backup_day'); + const monthlyDayInput = document.getElementById('monthly_backup_day'); + + // Find the parent container of the inputs to hide the label as well. + // You may need to inspect the page source in your browser to find the exact parent element and its class. + //const weeklyContainer = weeklyDaySelect ? weeklyDaySelect.closest('div.col-sm-3') : null; + //const monthlyContainer = monthlyDayInput ? monthlyDayInput.closest('div.col-sm-3') : null; + + const toggleVisibility = () => { + if (frequencySelect.value === '1 week') { + weeklyDaySelect.style.display = ''; + monthlyDayInput.style.display = 'none'; + } else if (frequencySelect.value === '1 month') { + weeklyDaySelect.style.display = 'none'; + monthlyDayInput.style.display = ''; + } else { + weeklyDaySelect.style.display = 'none'; + monthlyDayInput.style.display = 'none'; + } + }; + + frequencySelect.addEventListener('change', toggleVisibility); + toggleVisibility(); +}); diff --git a/Cron.php b/Cron.php index 8021e49..93c96dd 100644 --- a/Cron.php +++ b/Cron.php @@ -32,11 +32,51 @@ class Cron extends CronClass public function run(): void { - $this->job(self::JOB_NAME) - ->every('1 week') - ->run(function () { - $this->createBackup(); - }); + $frequency = Tools::settings('default', 'backup_frequency'); + $dayOfWeek = Tools::settings('default', 'weekly_backup_day', 1); + $dayOfMonth = Tools::settings('default', 'monthly_backup_day', 1); + + $job = $this->job(self::JOB_NAME); + + if ($frequency === '1 month') { + $job->everyDay($dayOfMonth, 7); + } elseif ($frequency === '1 week') { + switch ($dayOfWeek) { + case 1: + $job->everyMondayAt(7); + break; + case 2: + $job->everyTuesdayAt(7); + break; + case 3: + $job->everyWednesdayAt(7); + break; + case 4: + $job->everyThursdayAt(7); + break; + case 5: + $job->everyFridayAt(7); + break; + case 6: + $job->everySaturdayAt(7); + break; + case 7: + $job->everySundayAt(7); + break; + default: + $job->everyMondayAt(7); + } + } elseif ($frequency === '1 day') { + $job->every('1 day'); + } + else{ + // selección no válida + return; + } + + $job->run(function () { + $this->createBackup(); + }); } protected function createBackup(): void diff --git a/Extension/XMLView/SettingsDefault.xml b/Extension/XMLView/SettingsDefault.xml new file mode 100644 index 0000000..82c361f --- /dev/null +++ b/Extension/XMLView/SettingsDefault.xml @@ -0,0 +1,31 @@ + + + + + + + 1 day + 1 week + 1 month + + + + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + + + + + + + + + + + \ No newline at end of file diff --git a/Init.php b/Init.php index 7234546..1fbea2e 100644 --- a/Init.php +++ b/Init.php @@ -19,6 +19,7 @@ namespace FacturaScripts\Plugins\Backup; +use FacturaScripts\Dinamic\Lib\AssetManager; use FacturaScripts\Core\Template\InitClass; /** @@ -31,6 +32,7 @@ class Init extends InitClass public function init(): void { $this->loadExtension(new Extension\Controller\ListFacturaCliente()); + AssetManager::addJs(FS_ROUTE . 'plugins/Backup/Assets/JS/EditSettings.js'); } public function uninstall(): void