fix: re-register MokoWaaS extensions and task after full DB restore
Full database restore overwrites #__extensions and #__scheduler_tasks with snapshot data, losing the current plugin registrations. After restore, re-enables all MokoWaaS extensions, re-registers the task plugin if missing, and re-enables the update server. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -299,6 +299,10 @@ class DemoResetService
|
||||
}
|
||||
}
|
||||
|
||||
// After full DB restore, re-ensure the task plugin and scheduled task
|
||||
// exist — the restore overwrote #__extensions and #__scheduler_tasks
|
||||
$this->reRegisterAfterRestore();
|
||||
|
||||
Log::add(
|
||||
sprintf('Demo site reset to baseline "%s" (full DB, media=%s)', $name, $mediaRestored ? 'yes' : 'no'),
|
||||
Log::WARNING,
|
||||
@@ -537,6 +541,95 @@ class DemoResetService
|
||||
*
|
||||
* @since 02.21.00
|
||||
*/
|
||||
private function reRegisterAfterRestore(): void
|
||||
{
|
||||
try
|
||||
{
|
||||
$db = Factory::getDbo();
|
||||
$prefix = $db->getPrefix();
|
||||
|
||||
// Re-enable all MokoWaaS extensions (may have been overwritten by old snapshot)
|
||||
$elements = [
|
||||
$db->quote('pkg_mokowaas'),
|
||||
$db->quote('mokowaas'),
|
||||
$db->quote('com_mokowaas'),
|
||||
$db->quote('mokowaasdemo'),
|
||||
$db->quote('perfectpublisher'),
|
||||
];
|
||||
|
||||
$db->setQuery(
|
||||
$db->getQuery(true)
|
||||
->update($db->quoteName('#__extensions'))
|
||||
->set($db->quoteName('enabled') . ' = 1')
|
||||
->set($db->quoteName('protected') . ' = 1')
|
||||
->set($db->quoteName('locked') . ' = 0')
|
||||
->where($db->quoteName('element') . ' IN (' . implode(',', $elements) . ')')
|
||||
);
|
||||
$db->execute();
|
||||
|
||||
// If the task plugin isn't registered, add it
|
||||
$db->setQuery(
|
||||
$db->getQuery(true)
|
||||
->select('COUNT(*)')
|
||||
->from($db->quoteName('#__extensions'))
|
||||
->where($db->quoteName('element') . ' = ' . $db->quote('mokowaasdemo'))
|
||||
->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
|
||||
);
|
||||
|
||||
if ((int) $db->loadResult() === 0)
|
||||
{
|
||||
$obj = (object) [
|
||||
'name' => 'Task - MokoWaaS Demo Reset',
|
||||
'type' => 'plugin',
|
||||
'element' => 'mokowaasdemo',
|
||||
'folder' => 'task',
|
||||
'client_id' => 0,
|
||||
'enabled' => 1,
|
||||
'protected' => 1,
|
||||
'locked' => 0,
|
||||
'access' => 1,
|
||||
'params' => '{}',
|
||||
];
|
||||
$db->insertObject('#__extensions', $obj);
|
||||
}
|
||||
|
||||
// Ensure the scheduled task exists and is enabled
|
||||
$db->setQuery(
|
||||
$db->getQuery(true)
|
||||
->select($db->quoteName('id'))
|
||||
->from($db->quoteName('#__scheduler_tasks'))
|
||||
->where($db->quoteName('type') . ' = ' . $db->quote('mokowaas.demo.reset'))
|
||||
);
|
||||
$taskId = (int) $db->loadResult();
|
||||
|
||||
if ($taskId > 0)
|
||||
{
|
||||
// Re-enable and update next_execution to now so it stays active
|
||||
$db->setQuery(
|
||||
$db->getQuery(true)
|
||||
->update($db->quoteName('#__scheduler_tasks'))
|
||||
->set($db->quoteName('state') . ' = 1')
|
||||
->where($db->quoteName('id') . ' = ' . $taskId)
|
||||
);
|
||||
$db->execute();
|
||||
}
|
||||
|
||||
// Re-enable the update server
|
||||
$db->setQuery(
|
||||
$db->getQuery(true)
|
||||
->update($db->quoteName('#__update_sites'))
|
||||
->set($db->quoteName('enabled') . ' = 1')
|
||||
->where('(' . $db->quoteName('name') . ' LIKE ' . $db->quote('%MokoWaaS%')
|
||||
. ' OR ' . $db->quoteName('location') . ' LIKE ' . $db->quote('%MokoWaaS%') . ')')
|
||||
);
|
||||
$db->execute();
|
||||
}
|
||||
catch (\Throwable $e)
|
||||
{
|
||||
// Best effort — don't let registration failure break the restore
|
||||
}
|
||||
}
|
||||
|
||||
private function ensureSnapshotDir(): void
|
||||
{
|
||||
if (!is_dir($this->snapshotDir))
|
||||
|
||||
Reference in New Issue
Block a user