diff --git a/source/packages/com_mokojoombackup/src/Engine/SteppedSession.php b/source/packages/com_mokojoombackup/src/Engine/SteppedSession.php index 7f83d806..d34d726b 100644 --- a/source/packages/com_mokojoombackup/src/Engine/SteppedSession.php +++ b/source/packages/com_mokojoombackup/src/Engine/SteppedSession.php @@ -53,6 +53,7 @@ class SteppedSession public string $remoteStorage = 'none'; public bool $includeMokoRestore = false; public bool $remoteKeepLocal = true; + public string $encryptionPassword = ''; // Progress public int $totalSteps = 0; diff --git a/source/packages/com_mokojoombackup/src/Extension/MokoJoomBackupComponent.php b/source/packages/com_mokojoombackup/src/Extension/MokoJoomBackupComponent.php index f5dc0d57..05759360 100644 --- a/source/packages/com_mokojoombackup/src/Extension/MokoJoomBackupComponent.php +++ b/source/packages/com_mokojoombackup/src/Extension/MokoJoomBackupComponent.php @@ -13,7 +13,33 @@ namespace Joomla\Component\MokoJoomBackup\Administrator\Extension; defined('_JEXEC') or die; use Joomla\CMS\Extension\MVCComponent; +use Joomla\CMS\Factory; class MokoJoomBackupComponent extends MVCComponent { + public function boot(): void + { + parent::boot(); + + try { + $app = Factory::getApplication(); + + if (!$app->isClient('administrator')) { + return; + } + + $wa = $app->getDocument()->getWebAssetManager(); + $wa->addInlineStyle( + '#menu a[href*="com_mokojoombackup"][href*="view=dashboard"] .sidebar-item-title::before,' + . ' #menu a[href*="com_mokojoombackup"][href*="view=backups"] .sidebar-item-title::before,' + . ' #menu a[href*="com_mokojoombackup"][href*="view=profiles"] .sidebar-item-title::before' + . ' { font-family: "Font Awesome 6 Free"; font-weight: 900; margin-right: .5em; }' + . ' #menu a[href*="com_mokojoombackup"][href*="view=dashboard"] .sidebar-item-title::before { content: "\f015"; }' + . ' #menu a[href*="com_mokojoombackup"][href*="view=backups"] .sidebar-item-title::before { content: "\f1c0"; }' + . ' #menu a[href*="com_mokojoombackup"][href*="view=profiles"] .sidebar-item-title::before { content: "\f013"; }' + ); + } catch (\Throwable $e) { + // Non-critical + } + } } diff --git a/source/script.php b/source/script.php index 931b23f0..ac511e1e 100644 --- a/source/script.php +++ b/source/script.php @@ -203,12 +203,50 @@ class Pkg_MokoJoomBackupInstallerScript } } + // Sync submenu icons in #__menu (Joomla doesn't update icons on upgrades) + $this->syncMenuIcons(); + // Warn if no license key configured (skip on uninstall) if ($type !== 'uninstall') { $this->warnMissingLicenseKey(); } } + private function syncMenuIcons(): void + { + $iconMap = [ + 'view=dashboard' => 'class:home', + 'view=backups' => 'class:database', + 'view=profiles' => 'class:cog', + ]; + + try { + $db = Factory::getDbo(); + + foreach ($iconMap as $linkFragment => $icon) { + $query = $db->getQuery(true) + ->update($db->quoteName('#__menu')) + ->set($db->quoteName('img') . ' = ' . $db->quote($icon)) + ->where($db->quoteName('client_id') . ' = 1') + ->where($db->quoteName('link') . ' LIKE ' . $db->quote('%com_mokojoombackup%' . $linkFragment . '%')); + $db->setQuery($query); + $db->execute(); + } + + // Set top-level component menu icon + $query = $db->getQuery(true) + ->update($db->quoteName('#__menu')) + ->set($db->quoteName('img') . ' = ' . $db->quote('class:archive')) + ->where($db->quoteName('client_id') . ' = 1') + ->where($db->quoteName('link') . ' LIKE ' . $db->quote('index.php?option=com_mokojoombackup')) + ->where($db->quoteName('level') . ' = 1'); + $db->setQuery($query); + $db->execute(); + } catch (\Throwable $e) { + // Non-critical + } + } + /** * Restore the download key to the (possibly new) update site record. */