]> git.mxchange.org Git - friendica.git/blob - src/DI.php
Funkwhale context file moved
[friendica.git] / src / DI.php
1 <?php
2 /**
3  * @copyright Copyright (C) 2010-2022, the Friendica project
4  *
5  * @license GNU AGPL version 3 or any later version
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU Affero General Public License as
9  * published by the Free Software Foundation, either version 3 of the
10  * License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU Affero General Public License for more details.
16  *
17  * You should have received a copy of the GNU Affero General Public License
18  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
19  *
20  */
21
22 namespace Friendica;
23
24 use Dice\Dice;
25 use Psr\Log\LoggerInterface;
26
27 /**
28  * This class is capable of getting all dynamic created classes
29  *
30  * @see https://designpatternsphp.readthedocs.io/en/latest/Structural/Registry/README.html
31  */
32 abstract class DI
33 {
34         /** @var Dice */
35         private static $dice;
36
37         public static function init(Dice $dice)
38         {
39                 self::$dice = $dice;
40         }
41
42         /**
43          * Returns a clone of the current dice instance
44          * This usefull for overloading the current instance with mocked methods during tests
45          *
46          * @return Dice
47          */
48         public static function getDice()
49         {
50                 return clone self::$dice;
51         }
52
53         //
54         // common instances
55         //
56
57         /**
58          * @return App
59          */
60         public static function app()
61         {
62                 return self::$dice->create(App::class);
63         }
64
65         /**
66          * @return Database\Database
67          */
68         public static function dba(): Database\Database
69         {
70                 return self::$dice->create(Database\Database::class);
71         }
72
73         /**
74          * @return \Friendica\Database\Definition\DbaDefinition
75          */
76         public static function dbaDefinition(): Database\Definition\DbaDefinition
77         {
78                 return self::$dice->create(Database\Definition\DbaDefinition::class);
79         }
80
81         /**
82          * @return \Friendica\Database\Definition\ViewDefinition
83          */
84         public static function viewDefinition(): Database\Definition\ViewDefinition
85         {
86                 return self::$dice->create(Database\Definition\ViewDefinition::class);
87         }
88
89         //
90         // "App" namespace instances
91         //
92
93         /**
94          * @return App\Arguments
95          */
96         public static function args()
97         {
98                 return self::$dice->create(App\Arguments::class);
99         }
100
101         /**
102          * @return App\BaseURL
103          */
104         public static function baseUrl()
105         {
106                 return self::$dice->create(App\BaseURL::class);
107         }
108
109         /**
110          * @return App\Mode
111          */
112         public static function mode()
113         {
114                 return self::$dice->create(App\Mode::class);
115         }
116
117         /**
118          * @return App\Page
119          */
120         public static function page()
121         {
122                 return self::$dice->create(App\Page::class);
123         }
124
125         /**
126          * @return App\Router
127          */
128         public static function router()
129         {
130                 return self::$dice->create(App\Router::class);
131         }
132
133         //
134         // "Content" namespace instances
135         //
136
137         /**
138          * @return Content\Item
139          */
140         public static function contentItem()
141         {
142                 return self::$dice->create(Content\Item::class);
143         }
144
145         /**
146          * @return Content\Conversation
147          */
148         public static function conversation()
149         {
150                 return self::$dice->create(Content\Conversation::class);
151         }
152
153         /**
154          * @return Content\Text\BBCode\Video
155          */
156         public static function bbCodeVideo()
157         {
158                 return self::$dice->create(Content\Text\BBCode\Video::class);
159         }
160
161         //
162         // "Core" namespace instances
163         //
164
165         /**
166          * @return Core\Cache\Capability\ICanCache
167          */
168         public static function cache()
169         {
170                 return self::$dice->create(Core\Cache\Capability\ICanCache::class);
171         }
172
173         /**
174          * @return Core\Config\Capability\IManageConfigValues
175          */
176         public static function config()
177         {
178                 return self::$dice->create(Core\Config\Capability\IManageConfigValues::class);
179         }
180
181         /**
182          * @return Core\PConfig\Capability\IManagePersonalConfigValues
183          */
184         public static function pConfig()
185         {
186                 return self::$dice->create(Core\PConfig\Capability\IManagePersonalConfigValues::class);
187         }
188
189         /**
190          * @return Core\Lock\Capability\ICanLock
191          */
192         public static function lock()
193         {
194                 return self::$dice->create(Core\Lock\Capability\ICanLock::class);
195         }
196
197         /**
198          * @return Core\L10n
199          */
200         public static function l10n()
201         {
202                 return self::$dice->create(Core\L10n::class);
203         }
204
205         /**
206          * @return Core\Worker\Repository\Process
207          */
208         public static function process()
209         {
210                 return self::$dice->create(Core\Worker\Repository\Process::class);
211         }
212
213         /**
214          * @return Core\Session\Capability\IHandleSessions
215          */
216         public static function session()
217         {
218                 return self::$dice->create(Core\Session\Capability\IHandleSessions::class);
219         }
220
221         /**
222          * @return \Friendica\Core\Storage\Repository\StorageManager
223          */
224         public static function storageManager()
225         {
226                 return self::$dice->create(Core\Storage\Repository\StorageManager::class);
227         }
228
229         /**
230          * @return \Friendica\Core\System
231          */
232         public static function system()
233         {
234                 return self::$dice->create(Core\System::class);
235         }
236
237         //
238         // "LoggerInterface" instances
239         //
240
241         /**
242          * Flushes the Logger instance, so the factory is called again
243          * (creates a new id and retrieves the current PID)
244          */
245         public static function flushLogger()
246         {
247                 $flushDice = self::$dice
248                         ->addRule(LoggerInterface::class, self::$dice->getRule(LoggerInterface::class))
249                         ->addRule('$devLogger', self::$dice->getRule('$devLogger'));
250                 static::init($flushDice);
251         }
252
253         /**
254          * @return LoggerInterface
255          */
256         public static function logger()
257         {
258                 return self::$dice->create(LoggerInterface::class);
259         }
260
261         /**
262          * @return LoggerInterface
263          */
264         public static function devLogger()
265         {
266                 return self::$dice->create('$devLogger');
267         }
268
269         /**
270          * @return LoggerInterface
271          */
272         public static function workerLogger()
273         {
274                 return self::$dice->create(Core\Logger\Type\WorkerLogger::class);
275         }
276
277         //
278         // "Factory" namespace instances
279         //
280
281         /**
282          * @return Factory\Api\Mastodon\Account
283          */
284         public static function mstdnAccount()
285         {
286                 return self::$dice->create(Factory\Api\Mastodon\Account::class);
287         }
288
289         /**
290          * @return Factory\Api\Mastodon\Application
291          */
292         public static function mstdnApplication()
293         {
294                 return self::$dice->create(Factory\Api\Mastodon\Application::class);
295         }
296
297         /**
298          * @return Factory\Api\Mastodon\Attachment
299          */
300         public static function mstdnAttachment()
301         {
302                 return self::$dice->create(Factory\Api\Mastodon\Attachment::class);
303         }
304
305         /**
306          * @return Factory\Api\Mastodon\Card
307          */
308         public static function mstdnCard()
309         {
310                 return self::$dice->create(Factory\Api\Mastodon\Card::class);
311         }
312
313         /**
314          * @return Factory\Api\Mastodon\Conversation
315          */
316         public static function mstdnConversation()
317         {
318                 return self::$dice->create(Factory\Api\Mastodon\Conversation::class);
319         }
320
321         /**
322          * @return Factory\Api\Mastodon\Emoji
323          */
324         public static function mstdnEmoji()
325         {
326                 return self::$dice->create(Factory\Api\Mastodon\Emoji::class);
327         }
328
329         /**
330          * @return Factory\Api\Mastodon\Error
331          */
332         public static function mstdnError()
333         {
334                 return self::$dice->create(Factory\Api\Mastodon\Error::class);
335         }
336
337         /**
338          * @return Factory\Api\Mastodon\FollowRequest
339          */
340         public static function mstdnFollowRequest()
341         {
342                 return self::$dice->create(Factory\Api\Mastodon\FollowRequest::class);
343         }
344
345         /**
346          * @return Factory\Api\Mastodon\Poll
347          */
348         public static function mstdnPoll()
349         {
350                 return self::$dice->create(Factory\Api\Mastodon\Poll::class);
351         }
352
353         /**
354          * @return Factory\Api\Mastodon\Relationship
355          */
356         public static function mstdnRelationship()
357         {
358                 return self::$dice->create(Factory\Api\Mastodon\Relationship::class);
359         }
360
361         /**
362          * @return Factory\Api\Mastodon\Status
363          */
364         public static function mstdnStatus()
365         {
366                 return self::$dice->create(Factory\Api\Mastodon\Status::class);
367         }
368
369         /**
370          * @return Factory\Api\Mastodon\ScheduledStatus
371          */
372         public static function mstdnScheduledStatus()
373         {
374                 return self::$dice->create(Factory\Api\Mastodon\ScheduledStatus::class);
375         }
376
377         /**
378          * @return Factory\Api\Mastodon\Subscription
379          */
380         public static function mstdnSubscription()
381         {
382                 return self::$dice->create(Factory\Api\Mastodon\Subscription::class);
383         }
384
385         /**
386          * @return Factory\Api\Mastodon\ListEntity
387          */
388         public static function mstdnList()
389         {
390                 return self::$dice->create(Factory\Api\Mastodon\ListEntity::class);
391         }
392
393         /**
394          * @return Factory\Api\Mastodon\Notification
395          */
396         public static function mstdnNotification()
397         {
398                 return self::$dice->create(Factory\Api\Mastodon\Notification::class);
399         }
400
401         /**
402          * @return Factory\Api\Twitter\Status
403          */
404         public static function twitterStatus()
405         {
406                 return self::$dice->create(Factory\Api\Twitter\Status::class);
407         }
408
409         /**
410          * @return Factory\Api\Twitter\User
411          */
412         public static function twitterUser()
413         {
414                 return self::$dice->create(Factory\Api\Twitter\User::class);
415         }
416
417         public static function notificationIntro(): Navigation\Notifications\Factory\Introduction
418         {
419                 return self::$dice->create(Navigation\Notifications\Factory\Introduction::class);
420         }
421
422         //
423         // "Model" namespace instances
424         //
425         /**
426          * @return \Friendica\Core\Worker\Repository\Process
427          */
428         public static function modelProcess()
429         {
430                 return self::$dice->create(Core\Worker\Repository\Process::class);
431         }
432
433         /**
434          * @return Model\User\Cookie
435          */
436         public static function cookie()
437         {
438                 return self::$dice->create(Model\User\Cookie::class);
439         }
440
441         /**
442          * @return Core\Storage\Capability\ICanWriteToStorage
443          */
444         public static function storage()
445         {
446                 return self::$dice->create(Core\Storage\Capability\ICanWriteToStorage::class);
447         }
448
449         /**
450          * @return Model\Log\ParsedLogIterator
451          */
452         public static function parsedLogIterator()
453         {
454                 return self::$dice->create(Model\Log\ParsedLogIterator::class);
455         }
456
457         //
458         // "Module" namespace
459         //
460
461         public static function apiResponse(): Module\Api\ApiResponse
462         {
463                 return self::$dice->create(Module\Api\ApiResponse::class);
464         }
465
466         //
467         // "Network" namespace
468         //
469
470         /**
471          * @return Network\HTTPClient\Capability\ICanSendHttpRequests
472          */
473         public static function httpClient()
474         {
475                 return self::$dice->create(Network\HTTPClient\Capability\ICanSendHttpRequests::class);
476         }
477
478         //
479         // "Repository" namespace
480         //
481
482         /**
483          * @return Contact\FriendSuggest\Repository\FriendSuggest;
484          */
485         public static function fsuggest()
486         {
487                 return self::$dice->create(Contact\FriendSuggest\Repository\FriendSuggest::class);
488         }
489
490         /**
491          * @return Contact\FriendSuggest\Factory\FriendSuggest;
492          */
493         public static function fsuggestFactory()
494         {
495                 return self::$dice->create(Contact\FriendSuggest\Factory\FriendSuggest::class);
496         }
497
498         /**
499          * @return Contact\Introduction\Repository\Introduction
500          */
501         public static function intro()
502         {
503                 return self::$dice->create(Contact\Introduction\Repository\Introduction::class);
504         }
505
506         /**
507          * @return Contact\Introduction\Factory\Introduction
508          */
509         public static function introFactory()
510         {
511                 return self::$dice->create(Contact\Introduction\Factory\Introduction::class);
512         }
513
514         public static function localRelationship(): Contact\LocalRelationship\Repository\LocalRelationship
515         {
516                 return self::$dice->create(Contact\LocalRelationship\Repository\LocalRelationship::class);
517         }
518
519         public static function permissionSet(): Security\PermissionSet\Repository\PermissionSet
520         {
521                 return self::$dice->create(Security\PermissionSet\Repository\PermissionSet::class);
522         }
523
524         public static function permissionSetFactory(): Security\PermissionSet\Factory\PermissionSet
525         {
526                 return self::$dice->create(Security\PermissionSet\Factory\PermissionSet::class);
527         }
528
529         public static function profileField(): Profile\ProfileField\Repository\ProfileField
530         {
531                 return self::$dice->create(Profile\ProfileField\Repository\ProfileField::class);
532         }
533
534         public static function profileFieldFactory(): Profile\ProfileField\Factory\ProfileField
535         {
536                 return self::$dice->create(Profile\ProfileField\Factory\ProfileField::class);
537         }
538
539         public static function notification(): Navigation\Notifications\Repository\Notification
540         {
541                 return self::$dice->create(Navigation\Notifications\Repository\Notification::class);
542         }
543
544         public static function notificationFactory(): Navigation\Notifications\Factory\Notification
545         {
546                 return self::$dice->create(Navigation\Notifications\Factory\Notification::class);
547         }
548
549         public static function notify(): Navigation\Notifications\Repository\Notify
550         {
551                 return self::$dice->create(Navigation\Notifications\Repository\Notify::class);
552         }
553
554         public static function notifyFactory(): Navigation\Notifications\Factory\Notify
555         {
556                 return self::$dice->create(Navigation\Notifications\Factory\Notify::class);
557         }
558
559         public static function formattedNotificationFactory(): Navigation\Notifications\Factory\FormattedNotify
560         {
561                 return self::$dice->create(Navigation\Notifications\Factory\FormattedNotify::class);
562         }
563
564         public static function formattedNavNotificationFactory(): Navigation\Notifications\Factory\FormattedNavNotification
565         {
566                 return self::$dice->create(Navigation\Notifications\Factory\FormattedNavNotification::class);
567         }
568
569         //
570         // "Protocol" namespace instances
571         //
572
573         /**
574          * @return Protocol\Activity
575          */
576         public static function activity()
577         {
578                 return self::$dice->create(Protocol\Activity::class);
579         }
580
581         //
582         // "Security" namespace instances
583         //
584
585         /**
586          * @return \Friendica\Security\Authentication
587          */
588         public static function auth()
589         {
590                 return self::$dice->create(Security\Authentication::class);
591         }
592
593         //
594         // "Util" namespace instances
595         //
596
597         /**
598          * @return Util\ACLFormatter
599          */
600         public static function aclFormatter()
601         {
602                 return self::$dice->create(Util\ACLFormatter::class);
603         }
604
605         /**
606          * @return string
607          */
608         public static function basePath()
609         {
610                 return self::$dice->create('$basepath');
611         }
612
613         /**
614          * @return Util\DateTimeFormat
615          */
616         public static function dtFormat()
617         {
618                 return self::$dice->create(Util\DateTimeFormat::class);
619         }
620
621         /**
622          * @return Util\FileSystem
623          */
624         public static function fs()
625         {
626                 return self::$dice->create(Util\FileSystem::class);
627         }
628
629         /**
630          * @return Util\Profiler
631          */
632         public static function profiler()
633         {
634                 return self::$dice->create(Util\Profiler::class);
635         }
636
637         /**
638          * @return Util\Emailer
639          */
640         public static function emailer()
641         {
642                 return self::$dice->create(Util\Emailer::class);
643         }
644 }