]> git.mxchange.org Git - friendica.git/blobdiff - src/DI.php
Merge pull request #8631 from MrPetovan/task/remove-item-tag-field
[friendica.git] / src / DI.php
index 09969f29a99bec2ae2d8f1fddd3ebfa1c4e59724..c89315c0ec98897e532d5eac0837d163eceae43d 100644 (file)
@@ -1,92 +1,36 @@
 <?php
+/**
+ * @copyright Copyright (C) 2020, Friendica
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
 
 namespace Friendica;
 
 use Dice\Dice;
-use Friendica\Core\Cache\ICache;
-use Friendica\Core\Config\IConfiguration;
-use Friendica\Core\Config\IPConfiguration;
-use Friendica\Core\L10n\L10n;
-use Friendica\Core\Lock\ILock;
-use Friendica\Core\Process;
-use Friendica\Core\Session\ISession;
-use Friendica\Database\Database;
-use Friendica\Model\Notify;
-use Friendica\Protocol\Activity;
-use Friendica\Util\ACLFormatter;
-use Friendica\Content;
-use Friendica\Util\DateTimeFormat;
-use Friendica\Util\FileSystem;
-use Friendica\Util\Logger\WorkerLogger;
-use Friendica\Util\Profiler;
 use Psr\Log\LoggerInterface;
 
 /**
  * This class is capable of getting all dynamic created classes
  *
- * There has to be a "method" phpDoc for each new class, containing result class for a proper matching
- *
- * @method static App app()
- * @method static ACLFormatter aclFormatter()
- * @method static Notify notify()
- * @method static Activity activity()
- * @method static Content\Item contentItem()
- * @method static Content\Text\BBCode\Video bbCodeVideo()
- * @method static DateTimeFormat dtFormat()
- * @method static ICache cache()
- * @method static IConfiguration config()
- * @method static IPConfiguration pConfig()
- * @method static ILock lock()
- * @method static L10n l10n()
- * @method static LoggerInterface logger()
- * @method static LoggerInterface devLogger()
- * @method static LoggerInterface workerLogger()
- * @method static Profiler profiler()
- * @method static ISession session()
- * @method static App\Authentication auth()
- * @method static App\Arguments args()
- * @method static App\BaseURL baseUrl()
- * @method static App\Mode mode()
- * @method static App\Module module()
- * @method static App\Page page()
- * @method static App\Router router()
- * @method static Database dba()
- * @method static FileSystem fs()
- * @method static Process process()
- *
+ * @see https://designpatternsphp.readthedocs.io/en/latest/Structural/Registry/README.html
  */
-class DI
+abstract class DI
 {
-       const CLASS_MAPPING = [
-               'app'          => App::class,
-               'aclFormatter' => ACLFormatter::class,
-               'auth'         => App\Authentication::class,
-               'args'         => App\Arguments::class,
-               'baseUrl'      => App\BaseURL::class,
-               'mode'         => App\Mode::class,
-               'module'       => App\Module::class,
-               'page'         => App\Page::class,
-               'router'       => App\Router::class,
-               'notify'       => Notify::class,
-               'activity'     => Activity::class,
-               'contentItem'  => Content\Item::class,
-               'bbCodeVideo'  => Content\Text\BBCode\Video::class,
-               'dtFormat'     => DateTimeFormat::class,
-               'cache'        => ICache::class,
-               'config'       => IConfiguration::class,
-               'pConfig'      => IPConfiguration::class,
-               'l10n'         => L10n::class,
-               'lock'         => ILock::class,
-               'logger'       => LoggerInterface::class,
-               'workerLogger' => WorkerLogger::class,
-               'devLogger'    => '$devLogger',
-               'session'      => ISession::class,
-               'dba'          => Database::class,
-               'fs'           => FileSystem::class,
-               'profiler'     => Profiler::class,
-               'process'      => Process::class,
-       ];
-
        /** @var Dice */
        private static $dice;
 
@@ -95,8 +39,387 @@ class DI
                self::$dice = $dice;
        }
 
-       public static function __callStatic($name, $arguments)
+       //
+       // common instances
+       //
+
+       /**
+        * @return App
+        */
+       public static function app()
+       {
+               return self::$dice->create(App::class);
+       }
+
+       /**
+        * @return Database\Database
+        */
+       public static function dba()
+       {
+               return self::$dice->create(Database\Database::class);
+       }
+
+       //
+       // "App" namespace instances
+       //
+
+       /**
+        * @return App\Authentication
+        */
+       public static function auth()
+       {
+               return self::$dice->create(App\Authentication::class);
+       }
+
+       /**
+        * @return App\Arguments
+        */
+       public static function args()
+       {
+               return self::$dice->create(App\Arguments::class);
+       }
+
+       /**
+        * @return App\BaseURL
+        */
+       public static function baseUrl()
+       {
+               return self::$dice->create(App\BaseURL::class);
+       }
+
+       /**
+        * @return App\Mode
+        */
+       public static function mode()
+       {
+               return self::$dice->create(App\Mode::class);
+       }
+
+       /**
+        * @return App\Module
+        */
+       public static function module()
+       {
+               return self::$dice->create(App\Module::class);
+       }
+
+       /**
+        * @return App\Page
+        */
+       public static function page()
+       {
+               return self::$dice->create(App\Page::class);
+       }
+
+       /**
+        * @return App\Router
+        */
+       public static function router()
+       {
+               return self::$dice->create(App\Router::class);
+       }
+
+       //
+       // "Content" namespace instances
+       //
+
+       /**
+        * @return Content\Item
+        */
+       public static function contentItem()
+       {
+               return self::$dice->create(Content\Item::class);
+       }
+
+       /**
+        * @return Content\Text\BBCode\Video
+        */
+       public static function bbCodeVideo()
+       {
+               return self::$dice->create(Content\Text\BBCode\Video::class);
+       }
+
+       //
+       // "Core" namespace instances
+       //
+
+       /**
+        * @return Core\Cache\ICache
+        */
+       public static function cache()
+       {
+               return self::$dice->create(Core\Cache\ICache::class);
+       }
+
+       /**
+        * @return Core\Config\IConfig
+        */
+       public static function config()
+       {
+               return self::$dice->create(Core\Config\IConfig::class);
+       }
+
+       /**
+        * @return Core\PConfig\IPConfig
+        */
+       public static function pConfig()
+       {
+               return self::$dice->create(Core\PConfig\IPConfig::class);
+       }
+
+       /**
+        * @return Core\Lock\ILock
+        */
+       public static function lock()
+       {
+               return self::$dice->create(Core\Lock\ILock::class);
+       }
+
+       /**
+        * @return Core\L10n
+        */
+       public static function l10n()
+       {
+               return self::$dice->create(Core\L10n::class);
+       }
+
+       /**
+        * @return Core\Process
+        */
+       public static function process()
+       {
+               return self::$dice->create(Core\Process::class);
+       }
+
+       /**
+        * @return Core\Session\ISession
+        */
+       public static function session()
+       {
+               return self::$dice->create(Core\Session\ISession::class);
+       }
+
+       /**
+        * @return Core\StorageManager
+        */
+       public static function storageManager()
+       {
+               return self::$dice->create(Core\StorageManager::class);
+       }
+
+       //
+       // "LoggerInterface" instances
+       //
+
+       /**
+        * @return LoggerInterface
+        */
+       public static function logger()
+       {
+               return self::$dice->create(LoggerInterface::class);
+       }
+
+       /**
+        * @return LoggerInterface
+        */
+       public static function devLogger()
+       {
+               return self::$dice->create('$devLogger');
+       }
+
+       /**
+        * @return LoggerInterface
+        */
+       public static function workerLogger()
+       {
+               return self::$dice->create(Util\Logger\WorkerLogger::class);
+       }
+
+       //
+       // "Factory" namespace instances
+       //
+
+       /**
+        * @return Factory\Api\Mastodon\Account
+        */
+       public static function mstdnAccount()
+       {
+               return self::$dice->create(Factory\Api\Mastodon\Account::class);
+       }
+
+       /**
+        * @return Factory\Api\Mastodon\Emoji
+        */
+       public static function mstdnEmoji()
+       {
+               return self::$dice->create(Factory\Api\Mastodon\Emoji::class);
+       }
+
+       /**
+        * @return Factory\Api\Mastodon\Field
+        */
+       public static function mstdnField()
+       {
+               return self::$dice->create(Factory\Api\Mastodon\Field::class);
+       }
+
+       /**
+        * @return Factory\Api\Mastodon\FollowRequest
+        */
+       public static function mstdnFollowRequest()
+       {
+               return self::$dice->create(Factory\Api\Mastodon\FollowRequest::class);
+       }
+
+       /**
+        * @return Factory\Api\Mastodon\Relationship
+        */
+       public static function mstdnRelationship()
+       {
+               return self::$dice->create(Factory\Api\Mastodon\Relationship::class);
+       }
+
+       /**
+        * @return Factory\Notification\Notification
+        */
+       public static function notification()
+       {
+               return self::$dice->create(Factory\Notification\Notification::class);
+       }
+
+       /**
+        * @return Factory\Notification\Introduction
+        */
+       public static function notificationIntro()
+       {
+               return self::$dice->create(Factory\Notification\Introduction::class);
+       }
+
+       //
+       // "Model" namespace instances
+       //
+
+       /**
+        * @return Model\User\Cookie
+        */
+       public static function cookie()
+       {
+               return self::$dice->create(Model\User\Cookie::class);
+       }
+
+       /**
+        * @return Model\Storage\IStorage
+        */
+       public static function storage()
+       {
+               return self::$dice->create(Model\Storage\IStorage::class);
+       }
+
+       //
+       // "Repository" namespace
+       //
+
+       /**
+        * @return Repository\FSuggest;
+        */
+       public static function fsuggest()
+       {
+               return self::$dice->create(Repository\FSuggest::class);
+       }
+
+       /**
+        * @return Repository\Introduction
+        */
+       public static function intro()
+       {
+               return self::$dice->create(Repository\Introduction::class);
+       }
+
+       /**
+        * @return Repository\PermissionSet
+        */
+       public static function permissionSet()
+       {
+               return self::$dice->create(Repository\PermissionSet::class);
+       }
+
+       /**
+        * @return Repository\ProfileField
+        */
+       public static function profileField()
+       {
+               return self::$dice->create(Repository\ProfileField::class);
+       }
+
+       /**
+        * @return Repository\Notify
+        */
+       public static function notify()
+       {
+               return self::$dice->create(Repository\Notify::class);
+       }
+
+       //
+       // "Protocol" namespace instances
+       //
+
+       /**
+        * @return Protocol\Activity
+        */
+       public static function activity()
+       {
+               return self::$dice->create(Protocol\Activity::class);
+       }
+
+       //
+       // "Util" namespace instances
+       //
+
+       /**
+        * @return Util\ACLFormatter
+        */
+       public static function aclFormatter()
+       {
+               return self::$dice->create(Util\ACLFormatter::class);
+       }
+
+       /**
+        * @return string
+        */
+       public static function basePath()
+       {
+               return self::$dice->create('$basepath');
+       }
+
+       /**
+        * @return Util\DateTimeFormat
+        */
+       public static function dtFormat()
+       {
+               return self::$dice->create(Util\DateTimeFormat::class);
+       }
+
+       /**
+        * @return Util\FileSystem
+        */
+       public static function fs()
+       {
+               return self::$dice->create(Util\FileSystem::class);
+       }
+
+       /**
+        * @return Util\Profiler
+        */
+       public static function profiler()
+       {
+               return self::$dice->create(Util\Profiler::class);
+       }
+
+       /**
+        * @return Util\Emailer
+        */
+       public static function emailer()
        {
-               return self::$dice->create(self::CLASS_MAPPING[$name], $arguments);
+               return self::$dice->create(Util\Emailer::class);
        }
 }