diff --git a/source/packages/com_mokosuitebackup/access.xml b/source/packages/com_mokosuitebackup/access.xml new file mode 100644 index 00000000..c7e6f788 --- /dev/null +++ b/source/packages/com_mokosuitebackup/access.xml @@ -0,0 +1,15 @@ + + +
+ + + + + + + + + + +
+
diff --git a/source/packages/com_mokosuitebackup/language/en-GB/com_mokosuitebackup.ini b/source/packages/com_mokosuitebackup/language/en-GB/com_mokosuitebackup.ini index 7bb6af0c..ac36f20f 100644 --- a/source/packages/com_mokosuitebackup/language/en-GB/com_mokosuitebackup.ini +++ b/source/packages/com_mokosuitebackup/language/en-GB/com_mokosuitebackup.ini @@ -12,6 +12,14 @@ COM_MOKOJOOMBACKUP_SUBMENU_DASHBOARD="Dashboard" COM_MOKOJOOMBACKUP_SUBMENU_BACKUPS="Backup Records" COM_MOKOJOOMBACKUP_SUBMENU_PROFILES="Backup Profiles" +; ACL Actions +COM_MOKOSUITEBACKUP_ACTION_BACKUP_RUN="Run Backup" +COM_MOKOSUITEBACKUP_ACTION_BACKUP_RUN_DESC="Allows users in this group to trigger backup operations." +COM_MOKOSUITEBACKUP_ACTION_BACKUP_DOWNLOAD="Download Backup" +COM_MOKOSUITEBACKUP_ACTION_BACKUP_DOWNLOAD_DESC="Allows users in this group to download backup archive files. These archives contain the full database and site files." +COM_MOKOSUITEBACKUP_ACTION_BACKUP_RESTORE="Restore Backup" +COM_MOKOSUITEBACKUP_ACTION_BACKUP_RESTORE_DESC="Allows users in this group to restore the site from a backup archive. This is a destructive operation that overwrites the current site." + ; Dashboard view COM_MOKOJOOMBACKUP_DASHBOARD_TITLE="MokoSuiteBackup Dashboard" COM_MOKOJOOMBACKUP_DASHBOARD_LAST_BACKUP="Last Backup" diff --git a/source/packages/com_mokosuitebackup/language/en-GB/com_mokosuitebackup.sys.ini b/source/packages/com_mokosuitebackup/language/en-GB/com_mokosuitebackup.sys.ini index 3776c946..d9887da7 100644 --- a/source/packages/com_mokosuitebackup/language/en-GB/com_mokosuitebackup.sys.ini +++ b/source/packages/com_mokosuitebackup/language/en-GB/com_mokosuitebackup.sys.ini @@ -9,3 +9,11 @@ COM_MOKOJOOMBACKUP_DESCRIPTION="Full-site backup and restore for Joomla — data COM_MOKOJOOMBACKUP_SUBMENU_DASHBOARD="Dashboard" COM_MOKOJOOMBACKUP_SUBMENU_BACKUPS="Backup Records" COM_MOKOJOOMBACKUP_SUBMENU_PROFILES="Backup Profiles" + +; ACL Actions +COM_MOKOSUITEBACKUP_ACTION_BACKUP_RUN="Run Backup" +COM_MOKOSUITEBACKUP_ACTION_BACKUP_RUN_DESC="Allows users in this group to trigger backup operations." +COM_MOKOSUITEBACKUP_ACTION_BACKUP_DOWNLOAD="Download Backup" +COM_MOKOSUITEBACKUP_ACTION_BACKUP_DOWNLOAD_DESC="Allows users in this group to download backup archive files. These archives contain the full database and site files." +COM_MOKOSUITEBACKUP_ACTION_BACKUP_RESTORE="Restore Backup" +COM_MOKOSUITEBACKUP_ACTION_BACKUP_RESTORE_DESC="Allows users in this group to restore the site from a backup archive. This is a destructive operation that overwrites the current site." diff --git a/source/packages/com_mokosuitebackup/language/en-US/com_mokosuitebackup.ini b/source/packages/com_mokosuitebackup/language/en-US/com_mokosuitebackup.ini index e552cb61..2878f11d 100644 --- a/source/packages/com_mokosuitebackup/language/en-US/com_mokosuitebackup.ini +++ b/source/packages/com_mokosuitebackup/language/en-US/com_mokosuitebackup.ini @@ -9,6 +9,15 @@ COM_MOKOJOOMBACKUP_DESCRIPTION="Full-site backup and restore for Joomla" COM_MOKOJOOMBACKUP_SUBMENU_DASHBOARD="Dashboard" COM_MOKOJOOMBACKUP_SUBMENU_BACKUPS="Backup Records" COM_MOKOJOOMBACKUP_SUBMENU_PROFILES="Backup Profiles" + +; ACL Actions +COM_MOKOSUITEBACKUP_ACTION_BACKUP_RUN="Run Backup" +COM_MOKOSUITEBACKUP_ACTION_BACKUP_RUN_DESC="Allows users in this group to trigger backup operations." +COM_MOKOSUITEBACKUP_ACTION_BACKUP_DOWNLOAD="Download Backup" +COM_MOKOSUITEBACKUP_ACTION_BACKUP_DOWNLOAD_DESC="Allows users in this group to download backup archive files. These archives contain the full database and site files." +COM_MOKOSUITEBACKUP_ACTION_BACKUP_RESTORE="Restore Backup" +COM_MOKOSUITEBACKUP_ACTION_BACKUP_RESTORE_DESC="Allows users in this group to restore the site from a backup archive. This is a destructive operation that overwrites the current site." + COM_MOKOJOOMBACKUP_DASHBOARD_TITLE="MokoSuiteBackup Dashboard" COM_MOKOJOOMBACKUP_DASHBOARD_LAST_BACKUP="Last Backup" COM_MOKOJOOMBACKUP_DASHBOARD_NO_BACKUPS="No backups yet" diff --git a/source/packages/com_mokosuitebackup/language/en-US/com_mokosuitebackup.sys.ini b/source/packages/com_mokosuitebackup/language/en-US/com_mokosuitebackup.sys.ini index 184d0b25..23f1d10e 100644 --- a/source/packages/com_mokosuitebackup/language/en-US/com_mokosuitebackup.sys.ini +++ b/source/packages/com_mokosuitebackup/language/en-US/com_mokosuitebackup.sys.ini @@ -9,3 +9,11 @@ COM_MOKOJOOMBACKUP_DESCRIPTION="Full-site backup and restore for Joomla — data COM_MOKOJOOMBACKUP_SUBMENU_DASHBOARD="Dashboard" COM_MOKOJOOMBACKUP_SUBMENU_BACKUPS="Backup Records" COM_MOKOJOOMBACKUP_SUBMENU_PROFILES="Backup Profiles" + +; ACL Actions +COM_MOKOSUITEBACKUP_ACTION_BACKUP_RUN="Run Backup" +COM_MOKOSUITEBACKUP_ACTION_BACKUP_RUN_DESC="Allows users in this group to trigger backup operations." +COM_MOKOSUITEBACKUP_ACTION_BACKUP_DOWNLOAD="Download Backup" +COM_MOKOSUITEBACKUP_ACTION_BACKUP_DOWNLOAD_DESC="Allows users in this group to download backup archive files. These archives contain the full database and site files." +COM_MOKOSUITEBACKUP_ACTION_BACKUP_RESTORE="Restore Backup" +COM_MOKOSUITEBACKUP_ACTION_BACKUP_RESTORE_DESC="Allows users in this group to restore the site from a backup archive. This is a destructive operation that overwrites the current site." diff --git a/source/packages/com_mokosuitebackup/mokosuitebackup.xml b/source/packages/com_mokosuitebackup/mokosuitebackup.xml index 2b101173..39c77090 100644 --- a/source/packages/com_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/com_mokosuitebackup/mokosuitebackup.xml @@ -50,6 +50,8 @@ alt="Profiles">COM_MOKOJOOMBACKUP_SUBMENU_PROFILES + access.xml + config.xml cli forms services diff --git a/source/script.php b/source/script.php index bfbbe1cf..9f949dcd 100644 --- a/source/script.php +++ b/source/script.php @@ -231,7 +231,9 @@ class Pkg_MokoSuiteBackupInstallerScript $indexHtml = $backupDir . '/index.html'; if (!file_exists($indexHtml)) { - file_put_contents($indexHtml, ''); + if (file_put_contents($indexHtml, '') === false) { + error_log('MokoSuiteBackup: Failed to write index.html to ' . $backupDir); + } } } @@ -468,6 +470,11 @@ class Pkg_MokoSuiteBackupInstallerScript } } catch (\Exception $e) { error_log('MokoSuiteBackup: ensureSubmenuItems() failed: ' . $e->getMessage()); + Factory::getApplication()->enqueueMessage( + 'MokoSuiteBackup could not create or update sidebar menu items. ' + . 'If submenu entries are missing, try reinstalling the component.', + 'warning' + ); } } @@ -502,6 +509,10 @@ class Pkg_MokoSuiteBackupInstallerScript $db->execute(); } catch (\Exception $e) { error_log('MokoSuiteBackup: syncMenuIcons() failed: ' . $e->getMessage()); + Factory::getApplication()->enqueueMessage( + 'MokoSuiteBackup could not update sidebar menu icons. This is cosmetic and does not affect functionality.', + 'notice' + ); } } @@ -583,6 +594,11 @@ class Pkg_MokoSuiteBackupInstallerScript } catch (\Exception $e) { error_log('MokoSuiteBackup: License key check failed: ' . $e->getMessage()); + Factory::getApplication()->enqueueMessage( + 'MokoSuiteBackup could not verify your license key status. ' + . 'Please check System → Update Sites to ensure a valid license key is configured.', + 'warning' + ); } } }