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:
+80
-1
@@ -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.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user