use Friendica\Core\Update;
use Friendica\Database\Definition\DbaDefinition;
use Friendica\Database\Definition\ViewDefinition;
+use Friendica\Event\ConfigLoadedEvent;
use Friendica\Event\Event;
use Friendica\EventSubscriber\HookEventBridge;
use Friendica\Module\Maintenance;
$this->mode,
$this->config,
$this->profiler,
+ $this->container->create(EventDispatcherInterface::class),
$this->appHelper,
);
$this->container->create(Mode::class),
$this->container->create(IManageConfigValues::class),
$this->container->create(Profiler::class),
+ $this->container->create(EventDispatcherInterface::class),
$this->container->create(AppHelper::class),
);
$this->container->create(Mode::class),
$this->container->create(IManageConfigValues::class),
$this->container->create(Profiler::class),
+ $this->container->create(EventDispatcherInterface::class),
$this->container->create(AppHelper::class),
);
Mode $mode,
IManageConfigValues $config,
Profiler $profiler,
+ EventDispatcherInterface $eventDispatcher,
AppHelper $appHelper
): void {
if ($config->get('system', 'ini_max_execution_time') !== false) {
if ($mode->has(Mode::DBAVAILABLE)) {
Core\Hook::loadHooks();
$loader = (new Config())->createConfigFileManager($appHelper->getBasePath(), $serverParams);
- Core\Hook::callAll('load_config', $loader);
+
+ $eventDispatcher->dispatch(new ConfigLoadedEvent(ConfigLoadedEvent::CONFIG_LOADED, $loader));
// Hooks are now working, reload the whole definitions with hook enabled
$dbaDefinition->load(true);
namespace Friendica\EventSubscriber;
use Friendica\Core\Hook;
+use Friendica\Event\ConfigLoadedEvent;
use Friendica\Event\Event;
use Friendica\Event\HtmlFilterEvent;
use Friendica\Event\NamedEvent;
*/
private static array $eventMapper = [
Event::INIT => 'init_1',
+ ConfigLoadedEvent::CONFIG_LOADED => 'load_config',
HtmlFilterEvent::HEAD => 'head',
HtmlFilterEvent::FOOTER => 'footer',
HtmlFilterEvent::PAGE_CONTENT_TOP => 'page_content_top',
{
return [
Event::INIT => 'onNamedEvent',
+ ConfigLoadedEvent::CONFIG_LOADED => 'onConfigLoadedEvent',
HtmlFilterEvent::HEAD => 'onHtmlFilterEvent',
HtmlFilterEvent::FOOTER => 'onHtmlFilterEvent',
HtmlFilterEvent::PAGE_CONTENT_TOP => 'onHtmlFilterEvent',
);
}
+ public static function onConfigLoadedEvent(ConfigLoadedEvent $event): void
+ {
+ $name = $event->getName();
+
+ $name = static::$eventMapper[$name] ?? $name;
+
+ static::callHook($name, $event->getConfig());
+ }
+
/**
* @param string|array $data
*
- * @return string|array
+ * @return string|array|object
*/
private static function callHook(string $name, $data)
{
namespace Friendica\Test\Unit\EventSubscriber;
+use Friendica\Core\Config\Util\ConfigFileManager;
+use Friendica\Event\ConfigLoadedEvent;
use Friendica\Event\Event;
use Friendica\Event\HtmlFilterEvent;
use Friendica\EventSubscriber\HookEventBridge;
{
$expected = [
Event::INIT => 'onNamedEvent',
+ ConfigLoadedEvent::CONFIG_LOADED => 'onConfigLoadedEvent',
HtmlFilterEvent::HEAD => 'onHtmlFilterEvent',
HtmlFilterEvent::FOOTER => 'onHtmlFilterEvent',
HtmlFilterEvent::PAGE_CONTENT_TOP => 'onHtmlFilterEvent',
HookEventBridge::onNamedEvent($event);
}
+ public static function getConfigLoadedEventData(): array
+ {
+ return [
+ ['test', 'test'],
+ [ConfigLoadedEvent::CONFIG_LOADED, 'load_config'],
+ ];
+ }
+
+ /**
+ * @dataProvider getConfigLoadedEventData
+ */
+ public function testOnConfigLoadedEventCallsHookWithCorrectValue($name, $expected): void
+ {
+ $config = $this->createStub(ConfigFileManager::class);
+
+ $event = new ConfigLoadedEvent($name, $config);
+
+ $reflectionProperty = new \ReflectionProperty(HookEventBridge::class, 'mockedCallHook');
+ $reflectionProperty->setAccessible(true);
+
+ $reflectionProperty->setValue(null, function (string $name, $data) use ($expected, $config) {
+ $this->assertSame($expected, $name);
+ $this->assertSame($config, $data);
+
+ return $data;
+ });
+
+ HookEventBridge::onConfigLoadedEvent($event);
+ }
+
public static function getHtmlFilterEventData(): array
{
return [