feat(plugins): ganchos de ciclo de vida y checkpoints boot_plugins y post_variables

Fase 0 del instalador de plugins (docs/plugins/fase0-instalador-diseno.md del
repo de Forge). Un plugin puede llevar install.php, uninstall.php, enable.php,
disable.php y status.php; los ejecuta runPluginLifecycle() dentro de la web
por action_ws=pluginLifecycle, sea Forge o el CMS legacy quien instale.
showInstall() reutiliza el mismo nucleo (installPluginArtifacts) en vez de
duplicar install.sql/schemaPresets.

Checkpoints nuevos, sin efecto hasta que un plugin los declare:
- boot_plugins: en init.php, con la BD ya conectada.
- post_variables: tras cada require de lib/variables.php (slug.php, sesion.php,
  lib/recursos.php), una vez por peticion. Un plugin llega DESPUES del bloque
  de cache de variables.php y puede pisarlo.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HPL66q9F33YZxbLPUT7KW8
This commit is contained in:
Jordan Diaz
2026-09-12 22:40:42 +00:00
co-authored by Claude Fable 5.1
parent 462cba0505
commit 273c3dd781
6 changed files with 177 additions and 4 deletions
+8
View File
@@ -27,6 +27,14 @@ displaySocketErrors();
if ($SETTINGS['isInstalled']) {
connectToMySQL();
}
// Checkpoint `boot_plugins` (2026-09-12): el CMS esta cargado y la BD conectada.
// Los plugins que lo declaren en [checkPoints] se inicializan aqui en cada
// peticion (instalar/reconciliar lo suyo, autodiagnostico). Ningun plugin del
// catalogo lo declaraba al crearlo: no cambia nada hasta que uno lo use.
if (function_exists('addPlugins')) {
$bootPluginsVar = array();
addPlugins('boot_plugins', $bootPluginsVar);
}
function enableErrorReporting() {
if (!defined('E_STRICT')) { define('E_STRICT', 2048); } // define E_STRICT for PHP < 5
error_reporting(E_ALL | E_STRICT); // display all errors