ArrayFilterEvent::BLOCK_CONTACT => 'block',
ArrayFilterEvent::UNBLOCK_CONTACT => 'unblock',
ArrayFilterEvent::ADD_WORKER_TASK => 'proc_run',
+ ArrayFilterEvent::STORAGE_CONFIG => 'storage_config',
+ ArrayFilterEvent::STORAGE_INSTANCE => 'storage_instance',
HtmlFilterEvent::HEAD => 'head',
HtmlFilterEvent::FOOTER => 'footer',
HtmlFilterEvent::PAGE_HEADER => 'page_header',
ArrayFilterEvent::BLOCK_CONTACT => 'onArrayFilterEvent',
ArrayFilterEvent::UNBLOCK_CONTACT => 'onArrayFilterEvent',
ArrayFilterEvent::ADD_WORKER_TASK => 'onArrayFilterEvent',
+ ArrayFilterEvent::STORAGE_CONFIG => 'onArrayFilterEvent',
+ ArrayFilterEvent::STORAGE_INSTANCE => 'onArrayFilterEvent',
HtmlFilterEvent::HEAD => 'onHtmlFilterEvent',
HtmlFilterEvent::FOOTER => 'onHtmlFilterEvent',
HtmlFilterEvent::PAGE_HEADER => 'onHtmlFilterEvent',
use Friendica\Database\Database;
use Friendica\Core\Storage\Type;
use Friendica\DI;
+use Friendica\Event\ArrayFilterEvent;
use Friendica\Network\HTTPException\InternalServerErrorException;
+use Psr\EventDispatcher\EventDispatcherInterface;
use Psr\Log\LoggerInterface;
/**
private $config;
/** @var LoggerInterface */
private $logger;
+ private EventDispatcherInterface $eventDispatcher;
/** @var L10n */
private $l10n;
* @throws InvalidClassStorageException in case the active backend class is invalid
* @throws StorageException in case of unexpected errors during the active backend class loading
*/
- public function __construct(Database $dba, IManageConfigValues $config, LoggerInterface $logger, L10n $l10n, bool $includeAddon = true)
+ public function __construct(Database $dba, IManageConfigValues $config, LoggerInterface $logger, EventDispatcherInterface $eventDispatcher, L10n $l10n, bool $includeAddon = true)
{
$this->dba = $dba;
$this->config = $config;
$this->logger = $logger;
+ $this->eventDispatcher = $eventDispatcher;
$this->l10n = $l10n;
$this->validBackends = $config->get('storage', 'backends', self::DEFAULT_BACKENDS);
'name' => $name,
'storage_config' => null,
];
+
try {
- Hook::callAll('storage_config', $data);
+ $data = $this->eventDispatcher->dispatch(
+ new ArrayFilterEvent(ArrayFilterEvent::STORAGE_CONFIG, $data),
+ )->getArray();
+
if (!($data['storage_config'] ?? null) instanceof ICanConfigureStorage) {
throw new InvalidClassStorageException(sprintf('Configuration for backend %s was not found', $name));
}
'name' => $name,
'storage' => null,
];
+
try {
- Hook::callAll('storage_instance', $data);
+ $data = $this->eventDispatcher->dispatch(
+ new ArrayFilterEvent(ArrayFilterEvent::STORAGE_INSTANCE, $data),
+ )->getArray();
+
if (!($data['storage'] ?? null) instanceof ICanReadFromStorage) {
throw new InvalidClassStorageException(sprintf('Backend %s was not found', $name));
}
use Friendica\Database\Database;
use Friendica\DI;
use Friendica\Core\Config\Factory\Config;
+use Friendica\Core\Hooks\HookEventBridge;
use Friendica\Core\Storage\Type;
use Friendica\Test\DatabaseTestCase;
use Friendica\Test\Util\CreateDatabaseTrait;
use Friendica\Test\Util\Database\StaticDatabase;
+use Friendica\Test\Util\FakeEventDispatcher;
use org\bovigo\vfs\vfsStream;
-use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger;
use Friendica\Test\Util\SampleStorageBackend;
/** @var IManageConfigValues */
private $config;
- /** @var LoggerInterface */
- private $logger;
/** @var L10n */
private $l10n;
vfsStream::newDirectory(Type\FilesystemConfig::DEFAULT_BASE_FOLDER, 0777)->at($this->root);
- $this->logger = new NullLogger();
$this->database = $this->getDbInstance();
$configFactory = new Config();
*/
public function testInstance()
{
- $storageManager = new StorageManager($this->database, $this->config, $this->logger, $this->l10n, false);
+ $storageManager = new StorageManager(
+ $this->database,
+ $this->config,
+ new NullLogger(),
+ new FakeEventDispatcher(),
+ $this->l10n,
+ false
+ );
self::assertInstanceOf(StorageManager::class, $storageManager);
}
$this->config->set('storage', 'name', $name);
}
- $storageManager = new StorageManager($this->database, $this->config, $this->logger, $this->l10n, false);
+ $storageManager = new StorageManager(
+ $this->database,
+ $this->config,
+ new NullLogger(),
+ new FakeEventDispatcher(),
+ $this->l10n,
+ false
+ );
if ($interface === ICanWriteToStorage::class) {
$storage = $storageManager->getWritableStorageByName($name);
*/
public function testIsValidBackend($name, $valid, $interface, $assert, $assertName)
{
- $storageManager = new StorageManager($this->database, $this->config, $this->logger, $this->l10n, false);
+ $storageManager = new StorageManager(
+ $this->database,
+ $this->config,
+ new NullLogger(),
+ new FakeEventDispatcher(),
+ $this->l10n,
+ false
+ );
// true in every of the backends
self::assertEquals(!empty($assertName), $storageManager->isValidBackend($name));
*/
public function testListBackends()
{
- $storageManager = new StorageManager($this->database, $this->config, $this->logger, $this->l10n, false);
+ $storageManager = new StorageManager(
+ $this->database,
+ $this->config,
+ new NullLogger(),
+ new FakeEventDispatcher(),
+ $this->l10n,
+ false
+ );
self::assertEquals(StorageManager::DEFAULT_BACKENDS, $storageManager->listBackends());
}
static::markTestSkipped('only works for ICanWriteToStorage');
}
- $storageManager = new StorageManager($this->database, $this->config, $this->logger, $this->l10n, false);
+ $storageManager = new StorageManager(
+ $this->database,
+ $this->config,
+ new NullLogger(),
+ new FakeEventDispatcher(),
+ $this->l10n,
+ false
+ );
$selBackend = $storageManager->getWritableStorageByName($name);
$storageManager->setBackend($selBackend);
$this->expectException(InvalidClassStorageException::class);
}
- $storageManager = new StorageManager($this->database, $this->config, $this->logger, $this->l10n, false);
+ $storageManager = new StorageManager(
+ $this->database,
+ $this->config,
+ new NullLogger(),
+ new FakeEventDispatcher(),
+ $this->l10n,
+ false
+ );
self::assertInstanceOf($assert, $storageManager->getBackend());
}
->addRule(IHandleSessions::class, ['instanceOf' => Memory::class, 'shared' => true, 'call' => null]);
DI::init($dice);
- $storageManager = new StorageManager($this->database, $this->config, $this->logger, $this->l10n, false);
+ $storageManager = new StorageManager(
+ $this->database,
+ $this->config,
+ new NullLogger(),
+ new FakeEventDispatcher(),
+ $this->l10n,
+ false
+ );
self::assertTrue($storageManager->register(SampleStorageBackend::class));
->addRule(IHandleSessions::class, ['instanceOf' => Memory::class, 'shared' => true, 'call' => null]);
DI::init($dice);
- $storageManager = new StorageManager($this->database, $this->config, $this->logger, $this->l10n, false);
+ /** @var \Friendica\Event\EventDispatcher */
+ $eventDispatcher = DI::eventDispatcher();
+
+ foreach (HookEventBridge::getStaticSubscribedEvents() as $eventName => $methodName) {
+ $eventDispatcher->addListener($eventName, [HookEventBridge::class, $methodName]);
+ }
+
+ $storageManager = new StorageManager(
+ $this->database,
+ $this->config,
+ new NullLogger(),
+ $eventDispatcher,
+ $this->l10n,
+ false
+ );
self::assertTrue($storageManager->register(SampleStorageBackend::class));
$this->loadFixture(__DIR__ . '/../../../../datasets/storage/database.fixture.php', $this->database);
- $storageManager = new StorageManager($this->database, $this->config, $this->logger, $this->l10n, false);
+ $storageManager = new StorageManager(
+ $this->database,
+ $this->config,
+ new NullLogger(),
+ new FakeEventDispatcher(),
+ $this->l10n,
+ false
+ );
$storage = $storageManager->getWritableStorageByName($name);
$storageManager->move($storage);
$this->expectException(InvalidClassStorageException::class);
$this->expectExceptionMessage('Backend SystemResource is not valid');
- $storageManager = new StorageManager($this->database, $this->config, $this->logger, $this->l10n, false);
+ $storageManager = new StorageManager(
+ $this->database,
+ $this->config,
+ new NullLogger(),
+ new FakeEventDispatcher(),
+ $this->l10n,
+ false
+ );
$storage = $storageManager->getWritableStorageByName(SystemResource::getName());
$storageManager->move($storage);
}