Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
44.44% covered (danger)
44.44%
20 / 45
33.33% covered (danger)
33.33%
2 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
OlzApps
44.44% covered (danger)
44.44%
20 / 45
33.33% covered (danger)
33.33%
2 / 6
66.55
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 16
0.00% covered (danger)
0.00%
0 / 1
2
 getApp
83.33% covered (warning)
83.33%
5 / 6
0.00% covered (danger)
0.00%
0 / 1
3.04
 getAppPaths
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
5
 getApps
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
3
 getAppsForUser
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
12
 registerAllEndpoints
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace Olz\Apps;
4
5use Olz\Apps\Anmelden\AnmeldenEndpoints;
6use Olz\Apps\Commands\CommandsEndpoints;
7use Olz\Apps\Files\FilesEndpoints;
8use Olz\Apps\Logs\LogsEndpoints;
9use Olz\Apps\Members\MembersEndpoints;
10use Olz\Apps\Monitoring\MonitoringEndpoints;
11use Olz\Apps\Newsletter\NewsletterEndpoints;
12use Olz\Apps\Oev\OevEndpoints;
13use Olz\Apps\Panini2024\Panini2024Endpoints;
14use Olz\Apps\Quiz\QuizEndpoints;
15use Olz\Apps\Results\ResultsEndpoints;
16use Olz\Apps\SearchEngines\SearchEnginesEndpoints;
17use Olz\Apps\Statistics\StatisticsEndpoints;
18use Olz\Apps\Youtube\YoutubeEndpoints;
19use Olz\Entity\Users\User;
20use PhpTypeScriptApi\Api;
21
22class OlzApps {
23    /** @var array<BaseAppEndpoints> */
24    protected array $apps_endpoints;
25
26    public function __construct(
27        AnmeldenEndpoints $anmeldenEndpoints,
28        CommandsEndpoints $commandsEndpoints,
29        FilesEndpoints $filesEndpoints,
30        LogsEndpoints $logsEndpoints,
31        MembersEndpoints $membersEndpoints,
32        MonitoringEndpoints $monitoringEndpoints,
33        NewsletterEndpoints $newsletterEndpoints,
34        OevEndpoints $oevEndpoints,
35        Panini2024Endpoints $panini2024Endpoints,
36        QuizEndpoints $quizEndpoints,
37        ResultsEndpoints $resultsEndpoints,
38        SearchEnginesEndpoints $searchEnginesEndpoints,
39        StatisticsEndpoints $statisticsEndpoints,
40        YoutubeEndpoints $youtubeEndpoints,
41    ) {
42        $this->apps_endpoints = [
43            $anmeldenEndpoints,
44            $commandsEndpoints,
45            $filesEndpoints,
46            $logsEndpoints,
47            $membersEndpoints,
48            $monitoringEndpoints,
49            $newsletterEndpoints,
50            $oevEndpoints,
51            $panini2024Endpoints,
52            $quizEndpoints,
53            $resultsEndpoints,
54            $searchEnginesEndpoints,
55            $statisticsEndpoints,
56            $youtubeEndpoints,
57        ];
58    }
59
60    public static function getApp(string $basename): ?BaseAppMetadata {
61        $metadata_class_name = "\\Olz\\Apps\\{$basename}\\Metadata";
62        if (class_exists($metadata_class_name)) {
63            $instance = new $metadata_class_name();
64            if ($instance instanceof BaseAppMetadata) {
65                return $instance;
66            }
67        }
68        return null;
69    }
70
71    /** @return array<string> */
72    public static function getAppPaths(): array {
73        $entries = scandir(__DIR__) ?: [];
74        $app_paths = [];
75        foreach ($entries as $entry) {
76            $path = __DIR__."/{$entry}";
77            if (is_dir($path) && is_file("{$path}/Metadata.php")) {
78                $app_paths[] = $path;
79            }
80        }
81        return $app_paths;
82    }
83
84    /** @return array<BaseAppMetadata> */
85    public static function getApps(): array {
86        $app_paths = self::getAppPaths();
87        $apps = [];
88        foreach ($app_paths as $app_path) {
89            $app_basename = basename($app_path);
90            $app = self::getApp($app_basename);
91            if ($app !== null) {
92                $apps[] = $app;
93            }
94        }
95        return $apps;
96    }
97
98    /** @return array<BaseAppMetadata> */
99    public static function getAppsForUser(?User $user): array {
100        $apps = self::getApps();
101        $apps_for_user = [];
102        foreach ($apps as $app) {
103            if ($app->isAccessibleToUser($user)) {
104                $apps_for_user[] = $app;
105            }
106        }
107        return $apps_for_user;
108    }
109
110    public function registerAllEndpoints(Api $api): void {
111        foreach ($this->apps_endpoints as $apps_endpoints) {
112            $apps_endpoints->register($api);
113        }
114    }
115}