feat: auto-remove retired monitor plugin on package update

Added removeRetiredExtensions() to package postflight script.
On every install/update, it checks for retired extensions and
removes them (DB record + files). Currently retires:
- plg_system_mokowaas_monitor (merged into core in 02.32.00)

Future retired extensions can be added to the $retired array.

Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jonathan Miller
2026-06-02 14:17:21 -05:00
parent 79c3cfc1f0
commit a78178b5dd
+80 -1
View File
@@ -34,8 +34,9 @@ class Pkg_MokowaasInstallerScript
*/
public function postflight($type, $parent)
{
// Remove legacy extensions from before the package rewrite
// Remove legacy and retired extensions
$this->cleanupLegacyExtensions();
$this->removeRetiredExtensions();
$this->enablePlugin('system', 'mokowaas');
$this->enablePlugin('system', 'mokowaas_firewall');
@@ -125,6 +126,84 @@ class Pkg_MokowaasInstallerScript
}
}
/**
* Remove extensions that have been retired and merged into core.
*
* plg_system_mokowaas_monitor was merged into the core plugin in 02.32.00.
* Health monitoring is now built into plg_system_mokowaas directly.
*
* @return void
*
* @since 02.32.00
*/
private function removeRetiredExtensions(): void
{
$retired = [
['type' => 'plugin', 'folder' => 'system', 'element' => 'mokowaas_monitor'],
];
try
{
$db = Factory::getDbo();
foreach ($retired as $ext)
{
// Check if installed
$query = $db->getQuery(true)
->select($db->quoteName('extension_id'))
->from($db->quoteName('#__extensions'))
->where($db->quoteName('type') . ' = ' . $db->quote($ext['type']))
->where($db->quoteName('folder') . ' = ' . $db->quote($ext['folder']))
->where($db->quoteName('element') . ' = ' . $db->quote($ext['element']));
$db->setQuery($query);
$extId = (int) $db->loadResult();
if (!$extId)
{
continue;
}
// Unprotect so Joomla allows removal
$db->setQuery(
$db->getQuery(true)
->update($db->quoteName('#__extensions'))
->set($db->quoteName('protected') . ' = 0')
->where($db->quoteName('extension_id') . ' = ' . $extId)
)->execute();
// Remove extension record
$db->setQuery(
$db->getQuery(true)
->delete($db->quoteName('#__extensions'))
->where($db->quoteName('extension_id') . ' = ' . $extId)
)->execute();
// Remove files
$dir = JPATH_PLUGINS . '/' . $ext['folder'] . '/' . $ext['element'];
if (is_dir($dir))
{
$this->rmdirRecursive($dir);
}
Factory::getApplication()->enqueueMessage(
sprintf('Removed retired extension: %s/%s', $ext['folder'], $ext['element']),
'message'
);
Log::add(
sprintf('Removed retired extension %s/%s (ID %d)', $ext['folder'], $ext['element'], $extId),
Log::INFO,
'mokowaas'
);
}
}
catch (\Throwable $e)
{
Log::add('Retired extension cleanup error: ' . $e->getMessage(), Log::WARNING, 'mokowaas');
}
}
/**
* Recursively remove a directory.
*