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

GameDeleteProcessor::build()   F
last analyzed

Complexity

Conditions 26
Paths 258

Size

Total Lines 296
Code Lines 187

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 26
eloc 187
nc 258
nop 1
dl 0
loc 296
rs 2.0865
c 1
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php declare(strict_types=1);
2
3
namespace Smr\Pages\Admin;
4
5
use Smr\Database;
6
use Smr\Epoch;
7
use Smr\Page\AccountPageProcessor;
8
use Smr\Request;
9
use SmrAccount;
10
use SmrGame;
11
12
class GameDeleteProcessor extends AccountPageProcessor {
13
14
	public function __construct(
15
		private readonly int $deleteGameID
16
	) {}
17
18
	public function build(SmrAccount $account): never {
19
		$game_id = $this->deleteGameID;
20
		create_error('Deleting games is disabled!');
21
22
		$db = Database::getInstance();
23
24
		$smr_db_sql = [];
25
		$history_db_sql = [];
26
27
		$action = Request::get('action');
28
		if (Request::get('save') == 'Yes') {
29
			$save = true;
30
		} else {
31
			$save = false;
32
		}
33
34
		if ($action == 'Yes') {
35
			if ($save) {
36
				$dbResult = $db->read('SELECT * FROM alliance WHERE game_id = ' . $db->escapeNumber($game_id));
37
38
				foreach ($dbResult->records() as $dbRecord) {
39
					$id = $dbRecord->getInt('alliance_id');
40
					//we need info for forces
41
					//populate alliance list
42
					$dbResult2 = $db->read('SELECT * FROM player
43
								WHERE alliance_id = ' . $db->escapeNumber($id) . '
44
									AND game_id = ' . $db->escapeNumber($game_id));
45
					$list = [0];
46
					foreach ($dbResult2->records() as $dbRecord2) {
47
						$list[] = $dbRecord2->getInt('account_id');
48
					}
49
					$dbResult2 = $db->read('SELECT sum(mines) as sum_m, sum(combat_drones) as cds, sum(scout_drones) as sds
50
								FROM sector_has_forces
51
								WHERE owner_id IN (' . $db->escapeArray($list) . ') AND game_id = ' . $db->escapeNumber($game_id));
52
					if ($dbResult2->hasRecord()) {
53
						$dbRecord2 = $dbResult2->record();
54
						$mines = $dbRecord2->getInt('sum_m');
55
						$cds = $dbRecord2->getInt('cds');
56
						$sds = $dbRecord2->getInt('sds');
57
					} else {
58
						$mines = 0;
59
						$cds = 0;
60
						$sds = 0;
61
					}
62
63
					// get info we want
64
					$name = $dbRecord->getString('alliance_name');
65
					$leader = $dbRecord->getInt('leader_id');
66
					$kills = $dbRecord->getInt('alliance_kills');
67
					$deaths = $dbRecord->getInt('alliance_deaths');
68
					// insert into history db
69
					$history_db_sql[] = 'INSERT INTO alliance (game_id, alliance_id, leader_id, kills, deaths, alliance_name, mines, cds, sds) ' .
70
										'VALUES (' . $db->escapeNumber($game_id) . ', ' . $db->escapeNumber($id) . ', ' . $db->escapeNumber($leader) . ', ' . $db->escapeNumber($kills) . ', ' . $db->escapeNumber($deaths) . ', ' . $db->escapeString($name) . ', ' . $db->escapeNumber($mines) . ', ' . $db->escapeNumber($cds) . ', ' . $db->escapeNumber($sds) . ')';
71
72
				}
73
74
			}
75
76
			// these table is nothing worth without the players
77
			//$smr_db_sql[] = 'DELETE FROM account_has_logs WHERE game_id = '.$game_id;
78
79
			$smr_db_sql[] = 'UPDATE active_session SET game_id = 0 WHERE game_id = ' . $db->escapeNumber($game_id);
80
			$smr_db_sql[] = 'DELETE FROM alliance WHERE game_id = ' . $db->escapeNumber($game_id);
81
			$smr_db_sql[] = 'DELETE FROM alliance_bank_transactions WHERE game_id = ' . $db->escapeNumber($game_id);
82
			$smr_db_sql[] = 'DELETE FROM alliance_has_roles WHERE game_id = ' . $db->escapeNumber($game_id);
83
			$smr_db_sql[] = 'DELETE FROM alliance_thread WHERE game_id = ' . $db->escapeNumber($game_id);
84
			$smr_db_sql[] = 'DELETE FROM alliance_thread_topic WHERE game_id = ' . $db->escapeNumber($game_id);
85
86
			if ($save) {
87
88
				$dbResult = $db->read('SELECT * FROM alliance_vs_alliance WHERE game_id = ' . $db->escapeNumber($game_id));
89
				foreach ($dbResult->records() as $dbRecord) {
90
91
					$alliance_1 = $dbRecord->getInt('alliance_id_1');
92
					$alliance_2 = $dbRecord->getInt('alliance_id_2');
93
					$kills = $dbRecord->getInt('kills');
94
					$history_db_sql[] = 'INSERT INTO alliance_vs_alliance (game_id, alliance_id_1, alliance_id_2, kills) ' .
95
										'VALUES (' . $game_id . ', ' . $alliance_1 . ', ' . $alliance_2 . ', ' . $kills . ')';
96
97
				}
98
99
			}
100
101
			$smr_db_sql[] = 'DELETE FROM alliance_vs_alliance WHERE game_id = ' . $db->escapeNumber($game_id);
102
			$smr_db_sql[] = 'DELETE FROM anon_bank WHERE game_id = ' . $db->escapeNumber($game_id);
103
			$smr_db_sql[] = 'DELETE FROM anon_bank_transactions WHERE game_id = ' . $db->escapeNumber($game_id);
104
			$smr_db_sql[] = 'DELETE FROM bar_tender WHERE game_id = ' . $db->escapeNumber($game_id);
105
			$smr_db_sql[] = 'DELETE FROM blackjack WHERE game_id = ' . $db->escapeNumber($game_id);
106
			$smr_db_sql[] = 'DELETE FROM galactic_post_applications WHERE game_id = ' . $db->escapeNumber($game_id);
107
			$smr_db_sql[] = 'DELETE FROM galactic_post_article WHERE game_id = ' . $db->escapeNumber($game_id);
108
			$smr_db_sql[] = 'DELETE FROM galactic_post_paper WHERE game_id = ' . $db->escapeNumber($game_id);
109
			$smr_db_sql[] = 'DELETE FROM galactic_post_paper_content WHERE game_id = ' . $db->escapeNumber($game_id);
110
			$smr_db_sql[] = 'DELETE FROM galactic_post_writer WHERE game_id = ' . $db->escapeNumber($game_id);
111
			$smr_db_sql[] = 'DELETE FROM game_galaxy WHERE game_id = ' . $db->escapeNumber($game_id);
112
113
			if ($save) {
114
				$game = SmrGame::getGame($game_id);
115
				// insert into history db
116
				$history_db_sql[] = 'INSERT INTO game (game_id, end_date, start_date, game_name, speed, type) VALUES ' .
117
										'(' . $db->escapeNumber($game_id) . ', ' . $game->getEndTime() . ', ' . $game->getStartTime() . ', ' . $db->escapeString($game->getName()) . ', ' . $game->getGameSpeed() . ', ' . $db->escapeString($game->getGameType()) . ')';
118
			}
119
120
			$smr_db_sql[] = 'DELETE FROM location WHERE game_id = ' . $db->escapeNumber($game_id);
121
			$smr_db_sql[] = 'DELETE FROM mb_exceptions WHERE value LIKE ' . $db->escapeString($game_id . '%');
122
			$smr_db_sql[] = 'DELETE FROM message WHERE game_id = ' . $db->escapeNumber($game_id);
123
			$smr_db_sql[] = 'DELETE FROM message_notify WHERE game_id = ' . $db->escapeNumber($game_id);
124
125
			if ($save) {
126
127
				$dbResult = $db->read('SELECT * FROM news WHERE game_id = ' . $game_id . ' AND type = \'regular\'');
128
				$id = 1;
129
130
				foreach ($dbResult->records() as $dbRecord) {
131
132
					// get info we want
133
					$time = $dbRecord->getInt('time');
134
					$msg = $dbRecord->getString('news_message');
135
136
					// insert into history db
137
					$history_db_sql[] = 'INSERT INTO news (game_id, news_id, time, message) VALUES (' . $game_id . ', ' . $id . ', ' . $time . ', ' . $db->escapeString($msg) . ')';
138
					$id++;
139
140
				}
141
			}
142
143
			$smr_db_sql[] = 'DELETE FROM news WHERE game_id = ' . $db->escapeNumber($game_id);
144
145
			if ($save) {
146
147
				$dbResult = $db->read('SELECT * FROM planet WHERE game_id = ' . $db->escapeNumber($game_id));
148
149
				foreach ($dbResult->records() as $dbRecord) {
150
151
					// get info we want
152
					$sector = $dbRecord->getInt('sector_id');
153
					$owner = $dbRecord->getInt('owner_id');
154
155
					$dbResult2 = $db->read('SELECT * FROM planet_has_building WHERE game_id = ' . $game_id . ' AND sector_id = ' . $sector . ' AND construction_id = 1');
156
					if ($dbResult2->hasRecord()) {
157
						$gens = $dbResult2->record()->getInt('amount');
158
					} else {
159
						$gens = 0;
160
					}
161
162
					$dbResult2 = $db->read('SELECT * FROM planet_has_building WHERE game_id = ' . $game_id . ' AND sector_id = ' . $sector . ' AND construction_id = 2');
163
					if ($dbResult2->hasRecord()) {
164
						$hangs = $dbResult2->record()->getInt('amount');
165
					} else {
166
						$hangs = 0;
167
					}
168
169
					$dbResult2 = $db->read('SELECT * FROM planet_has_building WHERE game_id = ' . $game_id . ' AND sector_id = ' . $sector . ' AND construction_id = 3');
170
					if ($dbResult2->hasRecord()) {
171
						$turs = $dbResult2->record()->getInt('amount');
172
					} else {
173
						$turs = 0;
174
					}
175
176
					// insert into history db
177
					$history_db_sql[] = 'INSERT INTO planet (game_id, sector_id, owner_id, generators, hangers, turrets) VALUES ' .
178
										'(' . $game_id . ', ' . $sector . ', ' . $owner . ', ' . $gens . ', ' . $hangs . ', ' . $turs . ')';
179
180
				}
181
182
			}
183
184
			$smr_db_sql[] = 'DELETE FROM planet WHERE game_id = ' . $db->escapeNumber($game_id);
185
			$smr_db_sql[] = 'DELETE FROM planet_is_building WHERE game_id = ' . $db->escapeNumber($game_id);
186
			$smr_db_sql[] = 'DELETE FROM planet_has_cargo WHERE game_id = ' . $db->escapeNumber($game_id);
187
			$smr_db_sql[] = 'DELETE FROM planet_has_building WHERE game_id = ' . $db->escapeNumber($game_id);
188
189
			if ($save) {
190
191
				$dbResult = $db->read('SELECT * FROM player WHERE game_id = ' . $game_id);
192
193
				foreach ($dbResult->records() as $dbRecord) {
194
195
					// get info we want
196
					$acc_id = $dbRecord->getInt('account_id');
197
					$name = $dbRecord->getString('player_name');
198
					$id = $dbRecord->getInt('player_id');
199
					$exp = $dbRecord->getInt('experience');
200
					$ship = $dbRecord->getInt('ship_type_id');
201
					$race = $dbRecord->getInt('race_id');
202
					$align = $dbRecord->getInt('alignment');
203
					$alli = $dbRecord->getInt('alliance_id');
204
					$kills = $dbRecord->getInt('kills');
205
					$deaths = $dbRecord->getInt('deaths');
206
207
					$amount = 0;
208
					$smrCredits = 0;
209
					$dbResult2 = $db->read('SELECT sum(amount) as bounty_am, sum(smr_credits) as bounty_cred FROM bounty WHERE game_id = ' . $game_id . ' AND account_id = ' . $acc_id . ' AND claimer_id = 0');
210
					if ($dbResult2->hasRecord()) {
211
						$dbRecord2 = $dbResult2->record();
212
						$amount = $dbRecord2->getInt('bounty_am');
213
						$smrCredits = $dbRecord2->getInt('bounty_cred');
214
					}
215
216
					$dbResult2 = $db->read('SELECT * FROM ship_has_name WHERE game_id = ' . $game_id . ' AND account_id = ' . $acc_id);
217
					if ($dbResult2->hasRecord()) {
218
						$ship_name = $dbResult2->record()->getString('ship_name');
219
					} else {
220
						$ship_name = 'None';
221
					}
222
223
					// insert into history db
224
					$history_db_sql[] = 'INSERT INTO player (account_id, game_id, player_name, player_id, experience, ship, race, alignment, alliance_id, kills, deaths, bounty, bounty_cred, ship_name) ' .
225
										'VALUES (' . $acc_id . ', ' . $game_id . ', ' . $db->escapeString($name) . ', ' . $id . ', ' . $exp . ', ' . $ship . ', ' . $race . ', ' . $align . ', ' . $alli . ', ' . $kills . ', ' . $deaths . ', ' . $amount . ',' . $smrCredits . ', ' . $db->escapeString($ship_name) . ')';
226
227
				}
228
229
			}
230
231
			$smr_db_sql[] = 'DELETE FROM player WHERE game_id = ' . $db->escapeNumber($game_id);
232
			$smr_db_sql[] = 'DELETE FROM bounty WHERE game_id = ' . $db->escapeNumber($game_id);
233
			$smr_db_sql[] = 'DELETE FROM player_has_ticker WHERE game_id = ' . $db->escapeNumber($game_id);
234
			$smr_db_sql[] = 'DELETE FROM player_has_ticket WHERE game_id = ' . $db->escapeNumber($game_id);
235
			$smr_db_sql[] = 'DELETE FROM player_has_alliance_role WHERE game_id = ' . $db->escapeNumber($game_id);
236
			$smr_db_sql[] = 'DELETE FROM player_has_drinks WHERE game_id = ' . $db->escapeNumber($game_id);
237
			$smr_db_sql[] = 'DELETE FROM player_has_relation WHERE game_id = ' . $db->escapeNumber($game_id);
238
			$smr_db_sql[] = 'DELETE FROM player_has_unread_messages WHERE game_id = ' . $db->escapeNumber($game_id);
239
			$smr_db_sql[] = 'DELETE FROM player_plotted_course WHERE game_id = ' . $db->escapeNumber($game_id);
240
			$smr_db_sql[] = 'DELETE FROM player_read_thread WHERE game_id = ' . $db->escapeNumber($game_id);
241
			$smr_db_sql[] = 'DELETE FROM player_visited_port WHERE game_id = ' . $db->escapeNumber($game_id);
242
			$smr_db_sql[] = 'DELETE FROM player_visited_sector WHERE game_id = ' . $db->escapeNumber($game_id);
243
			$smr_db_sql[] = 'DELETE FROM player_votes_pact WHERE game_id = ' . $db->escapeNumber($game_id);
244
			$smr_db_sql[] = 'DELETE FROM player_votes_relation WHERE game_id = ' . $db->escapeNumber($game_id);
245
			$smr_db_sql[] = 'DELETE FROM port WHERE game_id = ' . $db->escapeNumber($game_id);
246
			$smr_db_sql[] = 'DELETE FROM port_has_goods WHERE game_id = ' . $db->escapeNumber($game_id);
247
			$smr_db_sql[] = 'DELETE FROM race_has_relation WHERE game_id = ' . $db->escapeNumber($game_id);
248
			$smr_db_sql[] = 'DELETE FROM race_has_voting WHERE game_id = ' . $db->escapeNumber($game_id);
249
250
			if ($save) {
251
252
				$dbResult = $db->read('SELECT * FROM sector WHERE game_id = ' . $game_id);
253
254
				foreach ($dbResult->records() as $dbRecord) {
255
256
					// get info we want
257
					$sector = $dbRecord->getInt('sector_id');
258
					$kills = $dbRecord->getInt('battles');
259
					$gal_id = $dbRecord->getInt('galaxy_id');
260
261
					$dbResult2 = $db->read('SELECT sum(mines) as sum_mines, sum(combat_drones) as cds, sum(scout_drones) as sds FROM sector_has_forces ' .
262
								'WHERE sector_id = ' . $sector . ' AND game_id = ' . $game_id . ' GROUP BY sector_id');
263
					if ($dbResult2->hasRecord()) {
264
265
						$dbRecord2 = $dbResult2->record();
266
						$mines = $dbRecord2->getInt('sum_mines');
267
						$cds = $dbRecord2->getInt('cds');
268
						$sds = $dbRecord2->getInt('sds');
269
270
					} else {
271
272
						$mines = 0;
273
						$cds = 0;
274
						$sds = 0;
275
276
					}
277
278
					// insert into history db
279
					$history_db_sql[] = 'INSERT INTO sector (game_id, sector_id, gal_id, mines, kills, combat, scouts) ' .
280
										'VALUES (' . $game_id . ',' . $sector . ',' . $gal_id . ',' . $mines . ',' . $kills . ',' . $cds . ',' . $sds . ')';
281
282
				}
283
284
			}
285
286
			$smr_db_sql[] = 'DELETE FROM sector WHERE game_id = ' . $game_id;
287
			$smr_db_sql[] = 'DELETE FROM sector_has_forces WHERE game_id = ' . $game_id;
288
			$smr_db_sql[] = 'DELETE FROM ship_has_cargo WHERE game_id = ' . $game_id;
289
			$smr_db_sql[] = 'DELETE FROM ship_has_hardware WHERE game_id = ' . $game_id;
290
			$smr_db_sql[] = 'DELETE FROM ship_has_name WHERE game_id = ' . $game_id;
291
			$smr_db_sql[] = 'DELETE FROM ship_has_illusion WHERE game_id = ' . $game_id;
292
			$smr_db_sql[] = 'DELETE FROM ship_has_weapon WHERE game_id = ' . $game_id;
293
			$smr_db_sql[] = 'DELETE FROM ship_is_cloaked WHERE game_id = ' . $game_id;
294
			$smr_db_sql[] = 'UPDATE game SET end_time=' . Epoch::time() . ' WHERE game_id = ' . $game_id . ' AND end_time > ' . Epoch::time(); // Do not delete game placeholder, just make sure game is finished
295
			$smr_db_sql[] = 'UPDATE active_session SET game_id = 0 WHERE game_id = ' . $game_id;
296
297
			// now do the sql stuff
298
			foreach ($smr_db_sql as $sql) {
299
				$db->write($sql);
300
			}
301
302
			// Note that the `smr_live_history` database does not currently exist,
303
			// but if we decided to enable this tool to archive SMR 1.6 games,
304
			// we could create it.
305
			$db->switchDatabases('smr_live_history');
306
			foreach ($history_db_sql as $sql) {
307
				$db->write($sql);
308
			}
309
			$db->switchDatabaseToLive();
310
311
		}
312
313
		(new AdminTools())->go();
314
	}
315
316
}
317