diff --git a/src/App.php b/src/App.php index 0d4e8880dd..e8385b7f29 100644 --- a/src/App.php +++ b/src/App.php @@ -27,6 +27,8 @@ use Friendica\App\BaseURL; use Friendica\Capabilities\ICanCreateResponses; use Friendica\Core\Config\Factory\Config; use Friendica\Core\Session\Capability\IHandleUserSessions; +use Friendica\Database\Definition\DbaDefinition; +use Friendica\Database\Definition\ViewDefinition; use Friendica\Model\User; use Friendica\Module\Maintenance; use Friendica\Security\Authentication; @@ -337,27 +339,29 @@ class App * @param App\Arguments $args The Friendica Arguments of the call * @param IManagePersonalConfigValues $pConfig Personal configuration * @param IHandleUserSessions $session The (User)Session handler + * @param DbaDefinition $dbaDefinition + * @param ViewDefinition $viewDefinition */ - public function __construct(Database $database, IManageConfigValues $config, App\Mode $mode, BaseURL $baseURL, LoggerInterface $logger, Profiler $profiler, L10n $l10n, Arguments $args, IManagePersonalConfigValues $pConfig, IHandleUserSessions $session) + public function __construct(Database $database, IManageConfigValues $config, App\Mode $mode, BaseURL $baseURL, LoggerInterface $logger, Profiler $profiler, L10n $l10n, Arguments $args, IManagePersonalConfigValues $pConfig, IHandleUserSessions $session, DbaDefinition $dbaDefinition, ViewDefinition $viewDefinition) { - $this->database = $database; - $this->config = $config; - $this->mode = $mode; - $this->baseURL = $baseURL; - $this->profiler = $profiler; - $this->logger = $logger; - $this->l10n = $l10n; - $this->args = $args; - $this->pConfig = $pConfig; - $this->session = $session; + $this->database = $database; + $this->config = $config; + $this->mode = $mode; + $this->baseURL = $baseURL; + $this->profiler = $profiler; + $this->logger = $logger; + $this->l10n = $l10n; + $this->args = $args; + $this->pConfig = $pConfig; + $this->session = $session; - $this->load(); + $this->load($dbaDefinition, $viewDefinition); } /** * Load the whole app instance */ - public function load() + protected function load(DbaDefinition $dbaDefinition, ViewDefinition $viewDefinition) { set_time_limit(0); @@ -386,6 +390,10 @@ class App Core\Hook::loadHooks(); $loader = (new Config())->createConfigFileLoader($this->getBasePath(), $_SERVER); Core\Hook::callAll('load_config', $loader); + + // Hooks are now working, reload the whole definitions with hook enabled + $dbaDefinition->load(true); + $viewDefinition->load(true); } $this->loadDefaultTimezone(); diff --git a/src/Database/DBStructure.php b/src/Database/DBStructure.php index 6e50c9fb28..cdb5d4ef98 100644 --- a/src/Database/DBStructure.php +++ b/src/Database/DBStructure.php @@ -249,7 +249,8 @@ class DBStructure // Get the definition if (is_null($definition)) { - $definition = DI::dbaDefinition()->getAll(); + // just for Update purpose, reload the DBA definition with addons to explicit get the whole definition + $definition = DI::dbaDefinition()->load(true)->getAll(); } // MySQL >= 5.7.4 doesn't support the IGNORE keyword in ALTER TABLE statements diff --git a/src/Database/View.php b/src/Database/View.php index d64e544cc0..ca6078956b 100644 --- a/src/Database/View.php +++ b/src/Database/View.php @@ -49,7 +49,8 @@ class View } } - $definition = DI::viewDefinition()->getAll(); + // just for Create purpose, reload the view definition with addons to explicit get the whole definition + $definition = DI::viewDefinition()->load(true)->getAll(); foreach ($definition as $name => $structure) { if (self::isView($name)) {