feat: rename mokojoombackup → mokosuitebackup, add [HOME] placeholder for backup directory
Generic: Repo Health / Scripts governance (push) Blocked by required conditions
Generic: Repo Health / Repository health (push) Blocked by required conditions
Generic: Repo Health / Report Issues (push) Blocked by required conditions
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 2s
Universal: Auto Version Bump / Version Bump (push) Successful in 10s
Generic: Repo Health / Scripts governance (push) Blocked by required conditions
Generic: Repo Health / Repository health (push) Blocked by required conditions
Generic: Repo Health / Report Issues (push) Blocked by required conditions
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 2s
Universal: Auto Version Bump / Version Bump (push) Successful in 10s
Renames all sub-extensions from mokojoombackup to mokosuitebackup
(package, component, 7 plugins, language files, manifests).
Adds [HOME] placeholder to BackupDirectory and PlaceholderResolver
so users can set backup_dir to [HOME]/backups (outside web root).
Fixes folder browser "access denied" on PHP-FPM shared hosting
where getenv('HOME') returns empty by adding POSIX and JPATH_ROOT
fallback detection.
This commit is contained in:
+29
-29
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package MokoJoomBackup
|
||||
* @package MokoSuiteBackup
|
||||
* @author Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
||||
* @license GNU General Public License version 3 or later; see LICENSE
|
||||
@@ -14,7 +14,7 @@ use Joomla\CMS\Installer\InstallerAdapter;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Router\Route;
|
||||
|
||||
class Pkg_MokoJoomBackupInstallerScript
|
||||
class Pkg_MokoSuiteBackupInstallerScript
|
||||
{
|
||||
/**
|
||||
* Minimum Joomla version required
|
||||
@@ -91,7 +91,7 @@ class Pkg_MokoJoomBackupInstallerScript
|
||||
$db->quoteName('#__extensions', 'e')
|
||||
. ' ON ' . $db->quoteName('e.extension_id') . ' = ' . $db->quoteName('use.extension_id')
|
||||
)
|
||||
->where($db->quoteName('e.element') . ' = ' . $db->quote('pkg_mokojoombackup'))
|
||||
->where($db->quoteName('e.element') . ' = ' . $db->quote('pkg_mokosuitebackup'))
|
||||
->where($db->quoteName('e.type') . ' = ' . $db->quote('package'))
|
||||
->setLimit(1);
|
||||
$db->setQuery($query);
|
||||
@@ -101,7 +101,7 @@ class Pkg_MokoJoomBackupInstallerScript
|
||||
$this->savedDownloadKey = $key;
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
error_log('MokoJoomBackup: Could not save download key: ' . $e->getMessage());
|
||||
error_log('MokoSuiteBackup: Could not save download key: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -120,7 +120,7 @@ class Pkg_MokoJoomBackupInstallerScript
|
||||
->set($db->quoteName('enabled') . ' = 1')
|
||||
->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
|
||||
->where($db->quoteName('folder') . ' = ' . $db->quote('system'))
|
||||
->where($db->quoteName('element') . ' = ' . $db->quote('mokojoombackup'));
|
||||
->where($db->quoteName('element') . ' = ' . $db->quote('mokosuitebackup'));
|
||||
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
@@ -131,7 +131,7 @@ class Pkg_MokoJoomBackupInstallerScript
|
||||
->set($db->quoteName('enabled') . ' = 1')
|
||||
->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
|
||||
->where($db->quoteName('folder') . ' = ' . $db->quote('quickicon'))
|
||||
->where($db->quoteName('element') . ' = ' . $db->quote('mokojoombackup'));
|
||||
->where($db->quoteName('element') . ' = ' . $db->quote('mokosuitebackup'));
|
||||
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
@@ -142,7 +142,7 @@ class Pkg_MokoJoomBackupInstallerScript
|
||||
->set($db->quoteName('enabled') . ' = 1')
|
||||
->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
|
||||
->where($db->quoteName('folder') . ' = ' . $db->quote('task'))
|
||||
->where($db->quoteName('element') . ' = ' . $db->quote('mokojoombackup'));
|
||||
->where($db->quoteName('element') . ' = ' . $db->quote('mokosuitebackup'));
|
||||
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
@@ -153,7 +153,7 @@ class Pkg_MokoJoomBackupInstallerScript
|
||||
->set($db->quoteName('enabled') . ' = 1')
|
||||
->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
|
||||
->where($db->quoteName('folder') . ' = ' . $db->quote('webservices'))
|
||||
->where($db->quoteName('element') . ' = ' . $db->quote('mokojoombackup'));
|
||||
->where($db->quoteName('element') . ' = ' . $db->quote('mokosuitebackup'));
|
||||
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
@@ -164,7 +164,7 @@ class Pkg_MokoJoomBackupInstallerScript
|
||||
->set($db->quoteName('enabled') . ' = 1')
|
||||
->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
|
||||
->where($db->quoteName('folder') . ' = ' . $db->quote('console'))
|
||||
->where($db->quoteName('element') . ' = ' . $db->quote('mokojoombackup'));
|
||||
->where($db->quoteName('element') . ' = ' . $db->quote('mokosuitebackup'));
|
||||
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
@@ -175,7 +175,7 @@ class Pkg_MokoJoomBackupInstallerScript
|
||||
->set($db->quoteName('enabled') . ' = 1')
|
||||
->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
|
||||
->where($db->quoteName('folder') . ' = ' . $db->quote('content'))
|
||||
->where($db->quoteName('element') . ' = ' . $db->quote('mokojoombackup'));
|
||||
->where($db->quoteName('element') . ' = ' . $db->quote('mokosuitebackup'));
|
||||
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
@@ -186,13 +186,13 @@ class Pkg_MokoJoomBackupInstallerScript
|
||||
->set($db->quoteName('enabled') . ' = 1')
|
||||
->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
|
||||
->where($db->quoteName('folder') . ' = ' . $db->quote('actionlog'))
|
||||
->where($db->quoteName('element') . ' = ' . $db->quote('mokojoombackup'));
|
||||
->where($db->quoteName('element') . ' = ' . $db->quote('mokosuitebackup'));
|
||||
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
|
||||
// Create and protect default backup directory
|
||||
$backupDir = JPATH_ADMINISTRATOR . '/components/com_mokojoombackup/backups';
|
||||
$backupDir = JPATH_ADMINISTRATOR . '/components/com_mokosuitebackup/backups';
|
||||
|
||||
if (!is_dir($backupDir)) {
|
||||
mkdir($backupDir, 0755, true);
|
||||
@@ -231,7 +231,7 @@ class Pkg_MokoJoomBackupInstallerScript
|
||||
|
||||
// Remind user to review backup profile settings
|
||||
if ($type === 'install') {
|
||||
$profileUrl = Route::_('index.php?option=com_mokojoombackup&view=profiles');
|
||||
$profileUrl = Route::_('index.php?option=com_mokosuitebackup&view=profiles');
|
||||
|
||||
Factory::getApplication()->enqueueMessage(
|
||||
'<strong>Review Your Backup Settings</strong> — '
|
||||
@@ -249,16 +249,16 @@ class Pkg_MokoJoomBackupInstallerScript
|
||||
$db = Factory::getDbo();
|
||||
$query = $db->getQuery(true)
|
||||
->select('COUNT(*)')
|
||||
->from($db->quoteName('#__mokojoombackup_profiles'))
|
||||
->from($db->quoteName('#__mokosuitebackup_profiles'))
|
||||
->where($db->quoteName('published') . ' = 1')
|
||||
->where('(' . $db->quoteName('backup_dir') . ' = ' . $db->quote('administrator/components/com_mokojoombackup/backups')
|
||||
->where('(' . $db->quoteName('backup_dir') . ' = ' . $db->quote('administrator/components/com_mokosuitebackup/backups')
|
||||
. ' OR ' . $db->quoteName('backup_dir') . ' = ' . $db->quote('[DEFAULT_DIR]')
|
||||
. ' OR ' . $db->quoteName('backup_dir') . ' = ' . $db->quote('')
|
||||
. ' OR ' . $db->quoteName('backup_dir') . ' IS NULL)');
|
||||
$db->setQuery($query);
|
||||
|
||||
if ((int) $db->loadResult() > 0) {
|
||||
$profileUrl = Route::_('index.php?option=com_mokojoombackup&view=profiles');
|
||||
$profileUrl = Route::_('index.php?option=com_mokosuitebackup&view=profiles');
|
||||
|
||||
Factory::getApplication()->enqueueMessage(
|
||||
'<strong>Backup Directory Warning</strong> — '
|
||||
@@ -269,7 +269,7 @@ class Pkg_MokoJoomBackupInstallerScript
|
||||
);
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
error_log('MokoJoomBackup: warnDefaultBackupDir() failed: ' . $e->getMessage());
|
||||
error_log('MokoSuiteBackup: warnDefaultBackupDir() failed: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -278,11 +278,11 @@ class Pkg_MokoJoomBackupInstallerScript
|
||||
try {
|
||||
$db = Factory::getDbo();
|
||||
|
||||
// Check if a MokoJoomBackup task already exists
|
||||
// Check if a MokoSuiteBackup task already exists
|
||||
$query = $db->getQuery(true)
|
||||
->select('COUNT(*)')
|
||||
->from($db->quoteName('#__scheduler_tasks'))
|
||||
->where($db->quoteName('type') . ' = ' . $db->quote('mokojoombackup.run_profile'));
|
||||
->where($db->quoteName('type') . ' = ' . $db->quote('mokosuitebackup.run_profile'));
|
||||
$db->setQuery($query);
|
||||
|
||||
if ((int) $db->loadResult() > 0) {
|
||||
@@ -292,8 +292,8 @@ class Pkg_MokoJoomBackupInstallerScript
|
||||
$now = date('Y-m-d H:i:s');
|
||||
|
||||
$task = (object) [
|
||||
'title' => 'MokoJoomBackup — Monthly Full Backup',
|
||||
'type' => 'mokojoombackup.run_profile',
|
||||
'title' => 'MokoSuiteBackup — Monthly Full Backup',
|
||||
'type' => 'mokosuitebackup.run_profile',
|
||||
'execution_rules' => json_encode([
|
||||
'rule-type' => 'interval-days',
|
||||
'interval-days' => '30',
|
||||
@@ -329,7 +329,7 @@ class Pkg_MokoJoomBackupInstallerScript
|
||||
|
||||
$db->insertObject('#__scheduler_tasks', $task);
|
||||
} catch (\Throwable $e) {
|
||||
error_log('MokoJoomBackup: createDefaultScheduledTask() failed: ' . $e->getMessage());
|
||||
error_log('MokoSuiteBackup: createDefaultScheduledTask() failed: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -349,7 +349,7 @@ class Pkg_MokoJoomBackupInstallerScript
|
||||
->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 . '%'));
|
||||
->where($db->quoteName('link') . ' LIKE ' . $db->quote('%com_mokosuitebackup%' . $linkFragment . '%'));
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
}
|
||||
@@ -359,12 +359,12 @@ class Pkg_MokoJoomBackupInstallerScript
|
||||
->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('link') . ' LIKE ' . $db->quote('index.php?option=com_mokosuitebackup'))
|
||||
->where($db->quoteName('level') . ' = 1');
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
} catch (\Throwable $e) {
|
||||
error_log('MokoJoomBackup: syncMenuIcons() failed: ' . $e->getMessage());
|
||||
error_log('MokoSuiteBackup: syncMenuIcons() failed: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -388,7 +388,7 @@ class Pkg_MokoJoomBackupInstallerScript
|
||||
$db->quoteName('#__extensions', 'e')
|
||||
. ' ON ' . $db->quoteName('e.extension_id') . ' = ' . $db->quoteName('use.extension_id')
|
||||
)
|
||||
->where($db->quoteName('e.element') . ' = ' . $db->quote('pkg_mokojoombackup'))
|
||||
->where($db->quoteName('e.element') . ' = ' . $db->quote('pkg_mokosuitebackup'))
|
||||
->where($db->quoteName('e.type') . ' = ' . $db->quote('package'))
|
||||
->setLimit(1);
|
||||
$db->setQuery($query);
|
||||
@@ -403,7 +403,7 @@ class Pkg_MokoJoomBackupInstallerScript
|
||||
$db->execute();
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
error_log('MokoJoomBackup: Could not restore download key: ' . $e->getMessage());
|
||||
error_log('MokoSuiteBackup: Could not restore download key: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -416,7 +416,7 @@ class Pkg_MokoJoomBackupInstallerScript
|
||||
$db->getQuery(true)
|
||||
->select([$db->quoteName('update_site_id'), $db->quoteName('extra_query')])
|
||||
->from($db->quoteName('#__update_sites'))
|
||||
->where('(' . $db->quoteName('name') . ' LIKE ' . $db->quote('%MokoJoomBackup%') . ' OR ' . $db->quoteName('location') . ' LIKE ' . $db->quote('%MokoJoomBackup%') . ')')
|
||||
->where('(' . $db->quoteName('name') . ' LIKE ' . $db->quote('%MokoSuiteBackup%') . ' OR ' . $db->quoteName('location') . ' LIKE ' . $db->quote('%MokoSuiteBackup%') . ')')
|
||||
->setLimit(1)
|
||||
);
|
||||
$site = $db->loadObject();
|
||||
@@ -440,7 +440,7 @@ class Pkg_MokoJoomBackupInstallerScript
|
||||
);
|
||||
}
|
||||
catch (\Throwable $e) {
|
||||
error_log('MokoJoomBackup: License key check failed: ' . $e->getMessage());
|
||||
error_log('MokoSuiteBackup: License key check failed: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user