<?php
/**
- * @copyright Copyright (C) 2010-2022, the Friendica project
+ * @copyright Copyright (C) 2010-2023, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
namespace Friendica;
use Dice\Dice;
+use Friendica\Core\Logger\Capability\ICheckLoggerSettings;
+use Friendica\Core\Logger\Util\LoggerSettingsCheck;
+use Friendica\Core\Session\Capability\IHandleSessions;
use Friendica\Core\Session\Capability\IHandleUserSessions;
use Friendica\Navigation\SystemMessages;
use Psr\Log\LoggerInterface;
/** @var Dice */
private static $dice;
- public static function init(Dice $dice)
+ /**
+ * Initialize the singleton DI container with the Dice instance
+ *
+ * @param Dice $dice The Dice instance
+ * @param bool $disableDepByHand If true, the database dependencies aren't set, thus any occurrence of logging or
+ * profiling in database methods would lead to an error. This flag is for testing only.
+ *
+ * @return void
+ */
+ public static function init(Dice $dice, bool $disableDepByHand = false)
{
self::$dice = $dice;
+
+ if (!$disableDepByHand) {
+ self::setCompositeRootDependencyByHand();
+ }
+ }
+
+ /**
+ * I HATE this method, but everything else needs refactoring at the database itself
+ * Set the database dependencies manually, because of current, circular dependencies between the database and the config table
+ *
+ * @todo Instead of this madness, split the database in a core driver-dependent (mysql, mariadb, postgresql, ..) part without any other dependency unlike credentials and in the full-featured, driver-independent database class with all dependencies
+ */
+ public static function setCompositeRootDependencyByHand()
+ {
+ $database = static::dba();
+ $database->setDependency(static::config(), static::profiler(), static::logger());
}
/**
* Returns a clone of the current dice instance
- * This usefull for overloading the current instance with mocked methods during tests
+ * This useful for overloading the current instance with mocked methods during tests
*
* @return Dice
*/
return self::$dice->create(App\Arguments::class);
}
- /**
- * @return App\BaseURL
- */
- public static function baseUrl()
+ public static function baseUrl(): App\BaseURL
{
return self::$dice->create(App\BaseURL::class);
}
return self::$dice->create(Core\Config\Capability\IManageConfigValues::class);
}
+ public static function configFileManager(): Core\Config\Util\ConfigFileManager
+ {
+ return self::$dice->create(Core\Config\Util\ConfigFileManager::class);
+ }
+
+ public static function keyValue(): Core\KeyValueStorage\Capability\IManageKeyValuePairs
+ {
+ return self::$dice->create(Core\KeyValueStorage\Capability\IManageKeyValuePairs::class);
+ }
+
/**
* @return Core\PConfig\Capability\IManagePersonalConfigValues
*/
return self::$dice->create(Core\Worker\Repository\Process::class);
}
- /**
- * @return Core\Session\Capability\IHandleSessions
- */
- public static function session()
+ public static function session(): IHandleSessions
{
return self::$dice->create(Core\Session\Capability\IHandleSessions::class);
}
static::init($flushDice);
}
+ public static function logCheck(): ICheckLoggerSettings
+ {
+ return self::$dice->create(LoggerSettingsCheck::class);
+ }
+
/**
* @return LoggerInterface
*/
return self::$dice->create(Factory\Api\Mastodon\Error::class);
}
- /**
- * @return Factory\Api\Mastodon\FollowRequest
- */
- public static function mstdnFollowRequest()
- {
- return self::$dice->create(Factory\Api\Mastodon\FollowRequest::class);
- }
-
/**
* @return Factory\Api\Mastodon\Poll
*/
return self::$dice->create(Factory\Api\Mastodon\Status::class);
}
+ /**
+ * @return Factory\Api\Mastodon\StatusSource
+ */
+ public static function mstdnStatusSource()
+ {
+ return self::$dice->create(Factory\Api\Mastodon\StatusSource::class);
+ }
+
/**
* @return Factory\Api\Mastodon\ScheduledStatus
*/
return self::$dice->create(Contact\Introduction\Factory\Introduction::class);
}
+ public static function report(): Moderation\Repository\Report
+ {
+ return self::$dice->create(Moderation\Repository\Report::class);
+ }
+
+ public static function reportFactory(): Moderation\Factory\Report
+ {
+ return self::$dice->create(Moderation\Factory\Report::class);
+ }
+
public static function localRelationship(): Contact\LocalRelationship\Repository\LocalRelationship
{
return self::$dice->create(Contact\LocalRelationship\Repository\LocalRelationship::class);
return self::$dice->create(Navigation\Notifications\Factory\FormattedNavNotification::class);
}
+ //
+ // "Federation" namespace instances
+ //
+
+ public static function deliveryQueueItemFactory(): Federation\Factory\DeliveryQueueItem
+ {
+ return self::$dice->create(Federation\Factory\DeliveryQueueItem::class);
+ }
+
+ public static function deliveryQueueItemRepo(): Federation\Repository\DeliveryQueueItem
+ {
+ return self::$dice->create(Federation\Repository\DeliveryQueueItem::class);
+ }
+
//
// "Protocol" namespace instances
//
return self::$dice->create(Protocol\Activity::class);
}
+ public static function dsprContact(): Protocol\Diaspora\Repository\DiasporaContact
+ {
+ return self::$dice->create(Protocol\Diaspora\Repository\DiasporaContact::class);
+ }
+
//
// "Security" namespace instances
//
return self::$dice->create(Util\DateTimeFormat::class);
}
- /**
- * @return Util\FileSystem
- */
- public static function fs()
- {
- return self::$dice->create(Util\FileSystem::class);
- }
-
/**
* @return Util\Profiler
*/