Scrutinizer GitHub App not installed

We could not synchronize checks via GitHub's checks API since Scrutinizer's GitHub App is not installed for this repository.

Install GitHub App

Failed Conditions
Pull Request — main (#1494)
by Dan
08:06 queued 03:15
created

Globals::getPlanetFinancesHREF()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 2
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php declare(strict_types=1);
2
3
use Smr\Database;
4
use Smr\Exceptions\UserError;
5
use Smr\Pages\Account\BugReportProcessor;
6
use Smr\Pages\Account\BuyMessageNotifications;
7
use Smr\Pages\Account\FeatureRequest;
8
use Smr\Pages\Account\NewsReadAdvanced;
9
use Smr\Pages\Player\AllianceBroadcast;
10
use Smr\Pages\Player\AllianceForces;
11
use Smr\Pages\Player\AllianceList;
12
use Smr\Pages\Player\AllianceMessageBoard;
13
use Smr\Pages\Player\AllianceMotd;
14
use Smr\Pages\Player\AllianceOptions;
15
use Smr\Pages\Player\AllianceRoster;
16
use Smr\Pages\Player\AttackPlayerProcessor;
17
use Smr\Pages\Player\Bank\AllianceBank;
18
use Smr\Pages\Player\BetaFunctions;
19
use Smr\Pages\Player\BuyShipName;
20
use Smr\Pages\Player\Chess\MatchList;
21
use Smr\Pages\Player\Chess\MatchStartProcessor;
22
use Smr\Pages\Player\Council\MessageCouncil;
23
use Smr\Pages\Player\Council\ViewCouncil;
24
use Smr\Pages\Player\CurrentPlayers;
25
use Smr\Pages\Player\CurrentSector;
26
use Smr\Pages\Player\ListPlanetDefense;
27
use Smr\Pages\Player\ListPlanetFinancial;
28
use Smr\Pages\Player\LocalMap;
29
use Smr\Pages\Player\MessageBlacklist;
30
use Smr\Pages\Player\MessageBox;
31
use Smr\Pages\Player\MessageSend;
32
use Smr\Pages\Player\PlotCourse;
33
use Smr\Pages\Player\PlotCourseConventionalProcessor;
34
use Smr\Pages\Player\SectorMoveProcessor;
35
use Smr\Pages\Player\SectorScan;
36
use Smr\Pages\Player\SectorsFileDownloadProcessor;
37
use Smr\Pages\Player\ShopGoods;
38
use Smr\Pages\Player\TraderBounties;
39
use Smr\Pages\Player\TraderRelations;
40
use Smr\Pages\Player\TraderStatus;
41
use Smr\Pages\Player\WeaponReorderProcessor;
42
use Smr\Race;
43
44
class Globals {
45
46
	/** @var array<int> */
47
	protected static array $HIDDEN_PLAYERS;
48
	/** @var array<int, array<string, string|int>> */
49
	protected static array $LEVEL_REQUIREMENTS;
50
	/** @var array<int, array<string, string|int>> */
51
	protected static array $GOODS;
52
	/** @var array<int, array<string, string|int>> */
53
	protected static array $HARDWARE_TYPES;
54
	protected static bool $FEATURE_REQUEST_OPEN;
55
	/** @var array<int, array<int, array<int, int>>> */
56
	protected static array $RACE_RELATIONS;
57
	/** @var array<string, string> */
58
	protected static array $AVAILABLE_LINKS = [];
59
	protected static Database $db;
60
61
	protected static function initialiseDatabase(): void {
62
		if (!isset(self::$db)) {
63
			self::$db = Database::getInstance();
64
		}
65
	}
66
67
	/**
68
	 * @return array<string, string>
69
	 */
70
	public static function getAvailableLinks(): array {
71
		return self::$AVAILABLE_LINKS;
72
	}
73
74
	/**
75
	 * @param array<string, int> $extraInfo
76
	 */
77
	public static function canAccessPage(string $pageName, AbstractSmrPlayer $player, array $extraInfo): void {
78
		switch ($pageName) {
79
			case 'AllianceMOTD':
80
				if ($player->getAllianceID() != $extraInfo['AllianceID']) {
81
					logException(new Exception('Tried to access page without permission.'));
0 ignored issues
show
Bug introduced by
The function logException was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

81
					/** @scrutinizer ignore-call */ 
82
     logException(new Exception('Tried to access page without permission.'));
Loading history...
82
					throw new UserError('You cannot access this page.');
83
				}
84
				break;
85
		}
86
	}
87
88
	/**
89
	 * @return array<int>
90
	 */
91
	public static function getHiddenPlayers(): array {
92
		if (!isset(self::$HIDDEN_PLAYERS)) {
93
			self::initialiseDatabase();
94
			$dbResult = self::$db->read('SELECT account_id FROM hidden_players');
95
			self::$HIDDEN_PLAYERS = [0]; //stop errors
96
			foreach ($dbResult->records() as $dbRecord) {
97
				self::$HIDDEN_PLAYERS[] = $dbRecord->getInt('account_id');
98
			}
99
		}
100
		return self::$HIDDEN_PLAYERS;
101
	}
102
103
	/**
104
	 * @return array<int>
105
	 */
106
	public static function getGalacticPostEditorIDs(int $gameID): array {
107
		self::initialiseDatabase();
108
		$editorIDs = [];
109
		$dbResult = self::$db->read('SELECT account_id FROM galactic_post_writer WHERE position=\'editor\' AND game_id=' . self::$db->escapeNumber($gameID));
110
		foreach ($dbResult->records() as $dbRecord) {
111
			$editorIDs[] = $dbRecord->getInt('account_id');
112
		}
113
		return $editorIDs;
114
	}
115
116
	/**
117
	 * @return array<int, array<string, string|int>>
118
	 */
119
	public static function getLevelRequirements(): array {
120
		if (!isset(self::$LEVEL_REQUIREMENTS)) {
121
			self::initialiseDatabase();
122
			self::$LEVEL_REQUIREMENTS = [];
123
124
			// determine user level
125
			$dbResult = self::$db->read('SELECT * FROM level ORDER BY level_id ASC');
126
			foreach ($dbResult->records() as $dbRecord) {
127
				self::$LEVEL_REQUIREMENTS[$dbRecord->getInt('level_id')] = [
128
					'Name' => $dbRecord->getString('level_name'),
129
					'Requirement' => $dbRecord->getInt('requirement'),
130
				];
131
			}
132
		}
133
		return self::$LEVEL_REQUIREMENTS;
134
	}
135
136
	public static function getColouredRaceNameForRace(int $raceID, int $gameID, int $fromRaceID, bool $linked = true): string {
137
		$raceRelations = self::getRaceRelations($gameID, $fromRaceID);
138
		return self::getColouredRaceName($raceID, $raceRelations[$raceID], $linked);
139
	}
140
141
	public static function getColouredRaceName(int $raceID, int $relations, bool $linked = true): string {
142
		$raceName = get_colored_text($relations, Race::getName($raceID));
143
		if ($linked === true) {
144
			$container = new ViewCouncil($raceID);
145
			$raceName = create_link($container, $raceName);
146
		}
147
		return $raceName;
148
	}
149
150
	/**
151
	 * @return array<int, array<string, string|int>>
152
	 */
153
	public static function getGoods(): array {
154
		if (!isset(self::$GOODS)) {
155
			self::initialiseDatabase();
156
			self::$GOODS = [];
157
158
			// determine user level
159
			$dbResult = self::$db->read('SELECT * FROM good ORDER BY good_id');
160
			foreach ($dbResult->records() as $dbRecord) {
161
				self::$GOODS[$dbRecord->getInt('good_id')] = [
162
					'Type' => 'Good',
163
					'ID' => $dbRecord->getInt('good_id'),
164
					'Name' => $dbRecord->getString('good_name'),
165
					'Max' => $dbRecord->getInt('max_amount'),
166
					'BasePrice' => $dbRecord->getInt('base_price'),
167
					'Class' => $dbRecord->getInt('good_class'),
168
					'ImageLink' => 'images/port/' . $dbRecord->getInt('good_id') . '.png',
169
					'AlignRestriction' => $dbRecord->getInt('align_restriction'),
170
				];
171
			}
172
		}
173
		return self::$GOODS;
174
	}
175
176
	/**
177
	 * @return array<string, string|int>
178
	 */
179
	public static function getGood(int $goodID): array {
180
		return self::getGoods()[$goodID];
181
	}
182
183
	public static function getGoodName(int $goodID): string {
184
		if ($goodID == GOODS_NOTHING) {
185
			return 'Nothing';
186
		}
187
		return self::getGoods()[$goodID]['Name'];
188
	}
189
190
	/**
191
	 * @return ($hardwareTypeID is null ? array<int, array<string, string|int>> : array<string, string|int>)
0 ignored issues
show
Documentation Bug introduced by
The doc comment ($hardwareTypeID at position 1 could not be parsed: Unknown type name '$hardwareTypeID' at position 1 in ($hardwareTypeID.
Loading history...
192
	 */
193
	public static function getHardwareTypes(int $hardwareTypeID = null): array {
194
		if (!isset(self::$HARDWARE_TYPES)) {
195
			self::initialiseDatabase();
196
			self::$HARDWARE_TYPES = [];
197
198
			// determine user level
199
			$dbResult = self::$db->read('SELECT * FROM hardware_type ORDER BY hardware_type_id');
200
			foreach ($dbResult->records() as $dbRecord) {
201
				self::$HARDWARE_TYPES[$dbRecord->getInt('hardware_type_id')] = [
202
					'Type' => 'Hardware',
203
					'ID' => $dbRecord->getInt('hardware_type_id'),
204
					'Name' => $dbRecord->getString('hardware_name'),
205
					'Cost' => $dbRecord->getInt('cost'),
206
				];
207
			}
208
		}
209
		if ($hardwareTypeID === null) {
210
			return self::$HARDWARE_TYPES;
211
		}
212
		return self::$HARDWARE_TYPES[$hardwareTypeID];
213
	}
214
215
	public static function getHardwareName(int $hardwareTypeID): string {
216
		return self::getHardwareTypes()[$hardwareTypeID]['Name'];
217
	}
218
219
	public static function getHardwareCost(int $hardwareTypeID): int {
220
		return self::getHardwareTypes()[$hardwareTypeID]['Cost'];
221
	}
222
223
	public static function isFeatureRequestOpen(): bool {
224
		if (!isset(self::$FEATURE_REQUEST_OPEN)) {
225
			self::initialiseDatabase();
226
			$dbResult = self::$db->read('SELECT open FROM open_forms WHERE type=\'FEATURE\'');
227
228
			self::$FEATURE_REQUEST_OPEN = $dbResult->record()->getBoolean('open');
229
		}
230
		return self::$FEATURE_REQUEST_OPEN;
231
	}
232
233
	/**
234
	 * @return array<int, int>
235
	 */
236
	public static function getRaceRelations(int $gameID, int $raceID): array {
237
		if (!isset(self::$RACE_RELATIONS[$gameID][$raceID])) {
238
			self::initialiseDatabase();
239
			//get relations
240
			self::$RACE_RELATIONS[$gameID][$raceID] = [];
241
			foreach (Race::getAllIDs() as $otherRaceID) {
242
				self::$RACE_RELATIONS[$gameID][$raceID][$otherRaceID] = 0;
243
			}
244
			$dbResult = self::$db->read('SELECT race_id_2,relation FROM race_has_relation WHERE race_id_1=' . self::$db->escapeNumber($raceID) . ' AND game_id=' . self::$db->escapeNumber($gameID));
245
			foreach ($dbResult->records() as $dbRecord) {
246
				self::$RACE_RELATIONS[$gameID][$raceID][$dbRecord->getInt('race_id_2')] = $dbRecord->getInt('relation');
247
			}
248
		}
249
		return self::$RACE_RELATIONS[$gameID][$raceID];
250
	}
251
252
	public static function getFeatureRequestHREF(): string {
253
		return (new FeatureRequest())->href();
254
	}
255
256
	public static function getCurrentSectorHREF(): string {
257
		return self::$AVAILABLE_LINKS['CurrentSector'] = (new CurrentSector())->href();
258
	}
259
260
	public static function getLocalMapHREF(): string {
261
		return self::$AVAILABLE_LINKS['LocalMap'] = (new LocalMap())->href();
262
	}
263
264
	public static function getCurrentPlayersHREF(): string {
265
		return self::$AVAILABLE_LINKS['CurrentPlayers'] = (new CurrentPlayers())->href();
266
	}
267
268
	public static function getTradeHREF(): string {
269
		return self::$AVAILABLE_LINKS['EnterPort'] = (new ShopGoods())->href();
270
	}
271
272
	public static function getAttackTraderHREF(int $accountID): string {
273
		$container = new AttackPlayerProcessor($accountID);
274
		return self::$AVAILABLE_LINKS['AttackTrader'] = $container->href();
275
	}
276
277
	public static function getBetaFunctionsHREF(): string { //BETA
278
		return (new BetaFunctions())->href();
279
	}
280
281
	public static function getBugReportProcessingHREF(): string {
282
		return (new BugReportProcessor())->href();
283
	}
284
285
	public static function getWeaponReorderHREF(int $weaponOrderID, string $direction): string {
286
		$container = new WeaponReorderProcessor($weaponOrderID, $direction);
287
		return $container->href();
288
	}
289
290
	public static function getSmrFileCreateHREF(): string {
291
		$container = new SectorsFileDownloadProcessor();
292
		return $container->href();
293
	}
294
295
	public static function getCurrentSectorMoveHREF(AbstractSmrPlayer $player, int $toSector): string {
296
		return self::getSectorMoveHREF($player, $toSector, new CurrentSector());
297
	}
298
299
	public static function getSectorMoveHREF(AbstractSmrPlayer $player, int $toSector, CurrentSector|LocalMap $targetPage): string {
300
		$container = new SectorMoveProcessor($toSector, $targetPage);
301
		return self::$AVAILABLE_LINKS['Move' . $player->getSector()->getSectorDirection($toSector)] = $container->href();
302
	}
303
304
	public static function getSectorScanHREF(AbstractSmrPlayer $player, int $toSector): string {
305
		$container = new SectorScan($toSector);
306
		return self::$AVAILABLE_LINKS['Scan' . $player->getSector()->getSectorDirection($toSector)] = $container->href();
307
	}
308
309
	public static function getPlotCourseHREF(int $fromSector = null, int $toSector = null): string {
310
		if ($fromSector === null && $toSector === null) {
311
			return self::$AVAILABLE_LINKS['PlotCourse'] = (new PlotCourse())->href();
312
		}
313
		return (new PlotCourseConventionalProcessor(from: $fromSector, to: $toSector))->href();
314
	}
315
316
	public static function getAllianceHREF(int $allianceID = null): string {
317
		if ($allianceID > 0) {
318
			return self::getAllianceMotdHREF($allianceID);
0 ignored issues
show
Bug introduced by
It seems like $allianceID can also be of type null; however, parameter $allianceID of Globals::getAllianceMotdHREF() does only seem to accept integer, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

318
			return self::getAllianceMotdHREF(/** @scrutinizer ignore-type */ $allianceID);
Loading history...
319
		}
320
		return self::getAllianceListHREF();
321
	}
322
323
	public static function getAllianceBankHREF(int $allianceID = null): string {
324
		$container = new AllianceBank($allianceID);
0 ignored issues
show
Bug introduced by
It seems like $allianceID can also be of type null; however, parameter $allianceID of Smr\Pages\Player\Bank\AllianceBank::__construct() does only seem to accept integer, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

324
		$container = new AllianceBank(/** @scrutinizer ignore-type */ $allianceID);
Loading history...
325
		return $container->href();
326
	}
327
328
	public static function getAllianceRosterHREF(int $allianceID = null): string {
329
		return (new AllianceRoster($allianceID))->href();
330
	}
331
332
	public static function getAllianceListHREF(): string {
333
		return (new AllianceList())->href();
334
	}
335
336
	public static function getAllianceNewsHREF(int $gameID, int $allianceID): string {
337
		return (new NewsReadAdvanced(gameID: $gameID, submit: 'Search For Alliance', allianceIDs: [$allianceID]))->href();
338
	}
339
340
	public static function getAllianceMotdHREF(int $allianceID): string {
341
		return (new AllianceMotd($allianceID))->href();
342
	}
343
344
	public static function getAllianceMessageHREF(int $allianceID): string {
345
		return (new AllianceBroadcast($allianceID))->href();
346
	}
347
348
	public static function getAllianceMessageBoardHREF(int $allianceID): string {
349
		return (new AllianceMessageBoard($allianceID))->href();
350
	}
351
352
	public static function getAllianceForcesHREF(int $allianceID): string {
353
		return (new AllianceForces($allianceID))->href();
354
	}
355
356
	public static function getAllianceOptionsHREF(): string {
357
		return (new AllianceOptions())->href();
358
	}
359
360
	public static function getPlanetListHREF(int $allianceID): string {
361
		return (new ListPlanetDefense($allianceID))->href();
362
	}
363
364
	public static function getPlanetListFinancialHREF(int $allianceID): string {
365
		return (new ListPlanetFinancial($allianceID))->href();
366
	}
367
368
	public static function getViewMessageBoxesHREF(): string {
369
		return (new MessageBox())->href();
370
	}
371
372
	public static function getSendGlobalMessageHREF(): string {
373
		return (new MessageSend())->href();
374
	}
375
376
	public static function getManageBlacklistHREF(): string {
377
		return (new MessageBlacklist())->href();
378
	}
379
380
	public static function getSendCouncilMessageHREF(int $raceID): string {
381
		$container = new MessageCouncil($raceID);
382
		return $container->href();
383
	}
384
385
	public static function getTraderStatusHREF(): string {
386
		return (new TraderStatus())->href();
387
	}
388
389
	public static function getCouncilHREF(int $raceID): string {
390
		$container = new ViewCouncil($raceID);
391
		return $container->href();
392
	}
393
394
	public static function getTraderRelationsHREF(): string {
395
		return (new TraderRelations())->href();
396
	}
397
398
	public static function getTraderBountiesHREF(): string {
399
		return (new TraderBounties())->href();
400
	}
401
402
	public static function getCasinoHREF(): string {
403
		return (new MatchList())->href();
404
	}
405
406
	public static function getChessHREF(): string {
407
		return (new MatchList())->href();
408
	}
409
410
	public static function getChessCreateHREF(): string {
411
		return (new MatchStartProcessor())->href();
412
	}
413
414
	public static function getBuyMessageNotificationsHREF(): string {
415
		return (new BuyMessageNotifications())->href();
416
	}
417
418
	public static function getBuyShipNameHREF(): string {
419
		return (new BuyShipName())->href();
420
	}
421
422
	/**
423
	 * @return array<string, int>
424
	 */
425
	public static function getBuyShipNameCosts(): array {
426
		return [
427
			'text' => CREDITS_PER_TEXT_SHIP_NAME,
428
			'html' => CREDITS_PER_HTML_SHIP_NAME,
429
			'logo' => CREDITS_PER_SHIP_LOGO,
430
		];
431
	}
432
433
	public static function getSectorBBLink(int $sectorID): string {
434
		return '[sector=' . $sectorID . ']';
435
	}
436
437
	/**
438
	 * @return array<string>
439
	 */
440
	public static function getAvailableTemplates(): array {
441
		return array_keys(CSS_URLS);
442
	}
443
444
	/**
445
	 * @return array<string>
446
	 */
447
	public static function getAvailableColourSchemes(string $templateName): array {
448
		return array_keys(CSS_COLOUR_URLS[$templateName]);
449
	}
450
451
	/**
452
	 * Returns an array of history databases for which we have ancient saved
453
	 * game data. Array keys are database names and values are the columns in
454
	 * the `account` table with the linked historical account ID's.
455
	 *
456
	 * @return array<string, string>
457
	 */
458
	public static function getHistoryDatabases(): array {
459
		if (!defined('HISTORY_DATABASES')) {
460
			return [];
461
		}
462
		return HISTORY_DATABASES;
0 ignored issues
show
Bug introduced by
The constant HISTORY_DATABASES was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
463
	}
464
465
}
466