|
1
|
|
|
<?php |
|
2
|
|
|
/* zKillboard |
|
3
|
|
|
* Copyright (C) 2012-2015 EVE-KILL Team and EVSCO. |
|
4
|
|
|
* |
|
5
|
|
|
* This program is free software: you can redistribute it and/or modify |
|
6
|
|
|
* it under the terms of the GNU Affero General Public License as published by |
|
7
|
|
|
* the Free Software Foundation, either version 3 of the License, or |
|
8
|
|
|
* (at your option) any later version. |
|
9
|
|
|
* |
|
10
|
|
|
* This program is distributed in the hope that it will be useful, |
|
11
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
12
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
13
|
|
|
* GNU Affero General Public License for more details. |
|
14
|
|
|
* |
|
15
|
|
|
* You should have received a copy of the GNU Affero General Public License |
|
16
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
17
|
|
|
*/ |
|
18
|
|
|
|
|
19
|
|
|
/** |
|
20
|
|
|
* General stuff for getting kills and manipulating them |
|
21
|
|
|
*/ |
|
22
|
|
|
class Kills |
|
23
|
|
|
{ |
|
24
|
|
|
/** |
|
25
|
|
|
* Gets killmails |
|
26
|
|
|
* |
|
27
|
|
|
* @param $parameters an array of parameters to fetch mails for |
|
28
|
|
|
* @param $allTime gets all mails from the beginning of time or not |
|
29
|
|
|
* @return array |
|
30
|
|
|
*/ |
|
31
|
|
|
public static function getKills($parameters = array(), $allTime = true, $includeKillDetails = true) |
|
32
|
|
|
{ |
|
33
|
|
|
$tables = array(); |
|
34
|
|
|
$orWhereClauses = array(); |
|
35
|
|
|
$andWhereClauses = array(); |
|
36
|
|
|
Filters::buildFilters($tables, $orWhereClauses, $andWhereClauses, $parameters, $allTime); |
|
37
|
|
|
|
|
38
|
|
|
$tables = array_unique($tables); |
|
39
|
|
|
if (sizeof($tables) == 0) $tables[] = "zz_participants p"; |
|
40
|
|
|
if (sizeof($tables) > 2) throw new Exception("More than 2 tables not supported yet"); |
|
41
|
|
|
|
|
42
|
|
|
$tables = array_values($tables); |
|
43
|
|
|
$tablePrefix = substr($tables[0], strlen($tables[0]) - 1, 1); |
|
44
|
|
|
$tablePrefixOther = sizeof($tables) == 2 ? substr($tables[1], strlen($tables[1]) - 1, 1) : "p"; |
|
45
|
|
|
|
|
46
|
|
|
$query = "select distinct ${tablePrefix}.killID from "; |
|
47
|
|
|
$query .= implode(" left join ", array_unique($tables)); |
|
48
|
|
|
if (sizeof($tables) == 2) $query .= " on ($tablePrefix.killID = ${tablePrefixOther}.killID) "; |
|
49
|
|
|
if(isset($parameters["index"])) $query .= " use index (". $parameters["index"] . ") "; |
|
50
|
|
|
if (sizeof($andWhereClauses) || sizeof($orWhereClauses)) { |
|
51
|
|
|
$query .= " where "; |
|
52
|
|
|
if (sizeof($orWhereClauses) > 0) { |
|
53
|
|
|
$andOr = array_key_exists("combined", $parameters) && $parameters["combined"] == true ? " or " : " and "; |
|
54
|
|
|
$query .= " ( " . implode($andOr, $orWhereClauses) . " ) "; |
|
55
|
|
|
if (sizeof($andWhereClauses)) $query .= " and "; |
|
56
|
|
|
} |
|
57
|
|
|
if (sizeof($andWhereClauses)) $query .= implode(" and ", $andWhereClauses); |
|
58
|
|
|
} |
|
59
|
|
|
|
|
60
|
|
|
$limit = array_key_exists("limit", $parameters) ? (int)$parameters["limit"] : 100; |
|
61
|
|
|
$page = array_key_exists("page", $parameters) ? (int)$parameters["page"] : 1; |
|
62
|
|
|
$offset = ($page - 1) * $limit; |
|
63
|
|
|
|
|
64
|
|
|
if ($tablePrefix == "w") $orderBy = "w.killID"; |
|
65
|
|
|
else $orderBy = array_key_exists("orderBy", $parameters) ? $parameters["orderBy"] : "${tablePrefix}.dttm"; |
|
66
|
|
|
$orderDirection = array_key_exists("orderDirection", $parameters) ? $parameters["orderDirection"] : "desc"; |
|
|
|
|
|
|
67
|
|
|
$orderDirection = "desc"; // only desc |
|
68
|
|
|
$query .= " order by $orderBy $orderDirection limit $offset, $limit"; |
|
69
|
|
|
|
|
70
|
|
|
// Is isVictim is used, no need to use distinct, since isVictim is already distinct |
|
71
|
|
|
if(stristr($query, "isVictim = '1'")) |
|
72
|
|
|
$query = str_replace("distinct", "", $query); |
|
73
|
|
|
|
|
74
|
|
|
// This is a war query, lets replace the entire thing |
|
75
|
|
|
if(isset($parameters["war"])) |
|
76
|
|
|
$query = "SELECT p.killID FROM zz_participants p WHERE p.killID IN (SELECT killID FROM zz_warmails WHERE warID = " . $parameters["war"] . ") AND p.isVictim = 1 ORDER BY $orderBy $orderDirection LIMIT $offset, $limit"; |
|
77
|
|
|
|
|
78
|
|
|
$cacheTime = array_key_exists("cacheTime", $parameters) ? (int)$parameters["cacheTime"] : 120; |
|
79
|
|
|
$cacheTime = max(120, $cacheTime); |
|
80
|
|
|
if (array_key_exists("log", $parameters)) Db::log($query, array()); |
|
81
|
|
|
$kills = Db::query($query, array(), $cacheTime); |
|
82
|
|
|
if ($includeKillDetails == false) return $kills; |
|
|
|
|
|
|
83
|
|
|
$merged = self::getKillsDetails($kills); |
|
84
|
|
|
return $merged; |
|
85
|
|
|
} |
|
86
|
|
|
|
|
87
|
|
|
/** |
|
88
|
|
|
* Gets details for kills |
|
89
|
|
|
* |
|
90
|
|
|
* @param $kills |
|
91
|
|
|
* @return array |
|
92
|
|
|
*/ |
|
93
|
|
|
public static function getKillsDetails($kills) |
|
94
|
|
|
{ |
|
95
|
|
|
$merged = array(); |
|
96
|
|
|
$killIDS = array(); |
|
97
|
|
|
|
|
98
|
|
|
foreach ($kills as $kill) { |
|
99
|
|
|
$killIDS[] = $kill["killID"]; |
|
100
|
|
|
$merged[$kill["killID"]] = array(); |
|
101
|
|
|
} |
|
102
|
|
|
|
|
103
|
|
|
if (sizeof($killIDS)) { |
|
104
|
|
|
$imploded = implode(",", $killIDS); |
|
105
|
|
|
$victims = Db::query("select * from zz_participants where killID in ($imploded) and isVictim = 1", array(), 300); |
|
106
|
|
|
$finalBlows = Db::query("select * from zz_participants where killID in ($imploded) and finalBlow = 1", array(), 300); |
|
107
|
|
|
$info = $victims; |
|
108
|
|
|
$merged = self::killMerge($merged, "victim", $victims); |
|
109
|
|
|
$merged = self::killMerge($merged, "finalBlow", $finalBlows); |
|
110
|
|
|
$merged = self::killMerge($merged, "info", $info); |
|
111
|
|
|
} |
|
112
|
|
|
return $merged; |
|
113
|
|
|
} |
|
114
|
|
|
|
|
115
|
|
|
/** |
|
116
|
|
|
* Merges killmail arrays |
|
117
|
|
|
* |
|
118
|
|
|
* @param $array1 |
|
119
|
|
|
* @param string $type |
|
120
|
|
|
* @param $array2 |
|
121
|
|
|
* @return array |
|
122
|
|
|
*/ |
|
123
|
|
|
private static function killMerge($array1, $type, $array2) |
|
124
|
|
|
{ |
|
125
|
|
|
foreach ($array2 as $element) { |
|
126
|
|
|
$killid = $element["killID"]; |
|
127
|
|
|
Info::addInfo($element); |
|
128
|
|
|
if (!isset($array1[$killid])) $array1[$killid] = array(); |
|
129
|
|
|
$array1[$killid][$type] = $element; |
|
130
|
|
|
$array1[$killid][$type]["commentID"] = $killid; |
|
131
|
|
|
} |
|
132
|
|
|
return $array1; |
|
133
|
|
|
} |
|
134
|
|
|
|
|
135
|
|
|
/** |
|
136
|
|
|
* Gets details for a kill |
|
137
|
|
|
* |
|
138
|
|
|
* @param $killID the killID of the kill you want details for |
|
139
|
|
|
* @return array |
|
140
|
|
|
*/ |
|
141
|
|
|
public static function getKillDetails($killID) |
|
142
|
|
|
{ |
|
143
|
|
|
$victim = Db::queryRow("select * from zz_participants where killID = :killID and isVictim = 1", array(":killID" => $killID)); |
|
144
|
|
|
$kill = $victim; |
|
145
|
|
|
$involved = Db::query("select * from zz_participants where killID = :killID and isVictim = 0 order by damage desc", array(":killID" => $killID)); |
|
146
|
|
|
$items = self::getItems($killID); |
|
147
|
|
|
|
|
148
|
|
|
Info::addInfo($kill); |
|
149
|
|
|
Info::addInfo($victim); |
|
150
|
|
|
$infoInvolved = array(); |
|
151
|
|
|
$infoItems = array(); |
|
152
|
|
|
foreach ($involved as $i) $infoInvolved[] = Info::addInfo($i); |
|
153
|
|
|
unset($involved); |
|
154
|
|
|
foreach ($items as $i) $infoItems[] = Info::addInfo($i); |
|
155
|
|
|
unset($items); |
|
156
|
|
|
|
|
157
|
|
|
return array("info" => $kill, "victim" => $victim, "involved" => $infoInvolved, "items" => $infoItems); |
|
158
|
|
|
} |
|
159
|
|
|
|
|
160
|
|
|
public static function getItems($killID) |
|
|
|
|
|
|
161
|
|
|
{ |
|
162
|
|
|
$json = Killmail::get($killID); |
|
163
|
|
|
$killArray = json_decode($json, true); |
|
164
|
|
|
$killTime = $killArray["killTime"]; |
|
165
|
|
|
$items = array(); |
|
166
|
|
|
if(isset($killArray["items"])) |
|
167
|
|
|
self::addItems($items, $killArray["items"], $killTime); |
|
168
|
|
|
return $items; |
|
169
|
|
|
} |
|
170
|
|
|
|
|
171
|
|
|
public static function addItems(&$itemArray, $items, $killTime, $inContainer = 0, $parentFlag = 0) { |
|
172
|
|
|
if (is_array($items)) foreach ($items as $item) { |
|
173
|
|
|
$typeID = $item["typeID"]; |
|
174
|
|
|
$item["price"] = Price::getItemPrice($typeID, $killTime); |
|
175
|
|
|
$item["inContainer"] = $inContainer; |
|
176
|
|
|
if ($inContainer) $item["flag"] = $parentFlag; |
|
177
|
|
|
if ($inContainer && strpos(Info::getItemName($typeID), "Blueprint")) $item["singleton"] = 2; |
|
178
|
|
|
unset($item["_stringValue"]); |
|
179
|
|
|
$itemArray[] = $item; |
|
180
|
|
|
$subItems = isset($item["items"]) ? $item["items"] : null; |
|
181
|
|
|
unset($item["items"]); |
|
182
|
|
|
if ($subItems != null) self::addItems($itemArray, $subItems, $killTime, 1, $item["flag"]); |
|
183
|
|
|
} |
|
184
|
|
|
} |
|
185
|
|
|
|
|
186
|
|
|
/** |
|
187
|
|
|
* Merges two kill arrays together |
|
188
|
|
|
* |
|
189
|
|
|
* @param $array1 |
|
190
|
|
|
* @param $array2 |
|
191
|
|
|
* @param $maxSize |
|
192
|
|
|
* @param $key |
|
193
|
|
|
* @param $id |
|
194
|
|
|
* @return array |
|
195
|
|
|
*/ |
|
196
|
|
|
public static function mergeKillArrays($array1, $array2, $maxSize, $key, $id) |
|
197
|
|
|
{ |
|
198
|
|
|
$maxSize = max(0, $maxSize); |
|
199
|
|
|
$resultArray = array_diff_key($array1, $array2) + $array2; |
|
200
|
|
|
while (sizeof($resultArray) > $maxSize) array_pop($resultArray); |
|
201
|
|
|
foreach ($resultArray as $killID => $kill) { |
|
202
|
|
|
if (!isset($kill["victim"])) continue; |
|
203
|
|
|
$victim = $kill["victim"]; |
|
204
|
|
|
if ($victim[$key] == $id) $kill["displayAsLoss"] = true; |
|
205
|
|
|
else $kill["displayAsKill"] = true; |
|
206
|
|
|
$resultArray[$killID] = $kill; |
|
207
|
|
|
} |
|
208
|
|
|
return $resultArray; |
|
209
|
|
|
} |
|
210
|
|
|
|
|
211
|
|
|
/** |
|
212
|
|
|
* Returns an array of the kill |
|
213
|
|
|
* |
|
214
|
|
|
* @param $killID the ID of the kill |
|
215
|
|
|
* @return array |
|
216
|
|
|
*/ |
|
217
|
|
|
public static function getArray($killID) |
|
218
|
|
|
{ |
|
219
|
|
|
$jsonRaw = Killmail::get($killID); |
|
220
|
|
|
$decode = json_decode($jsonRaw, true); |
|
221
|
|
|
$killarray = Info::addInfo($decode); |
|
222
|
|
|
return $killarray; |
|
223
|
|
|
} |
|
224
|
|
|
|
|
225
|
|
|
/** |
|
226
|
|
|
* Returns json of the kill |
|
227
|
|
|
* |
|
228
|
|
|
* @param $killID the ID of the kill |
|
229
|
|
|
* @return string |
|
230
|
|
|
*/ |
|
231
|
|
|
public static function getJson($killID) |
|
232
|
|
|
{ |
|
233
|
|
|
$jsonRaw = Killmail::get($killID); |
|
234
|
|
|
$decoded = json_decode($jsonRaw, true); |
|
235
|
|
|
$killarray = Info::addInfo($decoded); |
|
236
|
|
|
return json_encode($killarray); |
|
237
|
|
|
} |
|
238
|
|
|
|
|
239
|
|
|
/** |
|
240
|
|
|
* Returns a raw mail, that it gets from the getArray function |
|
241
|
|
|
* |
|
242
|
|
|
* @static |
|
243
|
|
|
* @param $killID the ID of the kill |
|
244
|
|
|
* @return string |
|
245
|
|
|
*/ |
|
246
|
|
|
public static function getRawMail($killID, $array = array(), $edk = true) |
|
247
|
|
|
{ |
|
248
|
|
|
$cacheName = $killID; |
|
249
|
|
|
$sem = Semaphore::fetch($killID); |
|
250
|
|
|
if($edk) |
|
251
|
|
|
$cacheName = $killID."EDK"; |
|
252
|
|
|
|
|
253
|
|
|
// Check if the mail has already been generated, then return it from the cache.. |
|
254
|
|
|
$Cache = Cache::get($cacheName); |
|
255
|
|
|
if($Cache) { |
|
|
|
|
|
|
256
|
|
|
Semaphore::release($sem); |
|
257
|
|
|
return $Cache; |
|
258
|
|
|
} |
|
259
|
|
|
|
|
260
|
|
|
// Find all groupIDs where they contain Deadspace |
|
261
|
|
|
$deadspaceIDs = array(); |
|
262
|
|
|
$dIDs = Db::query("SELECT groupID FROM ccp_invGroups WHERE groupName LIKE '%deadspace%' OR groupName LIKE 'FW%' OR groupName LIKE 'Asteroid%'"); |
|
263
|
|
|
foreach($dIDs as $dd) |
|
264
|
|
|
$deadspaceIDs[] = $dd["groupID"]; |
|
265
|
|
|
|
|
266
|
|
|
// ADD ALL THE FLAGS!!!!!!!!!!! |
|
267
|
|
|
//$flags = array("(Cargo)" => 5, "(Drone Bay)" => 87, "(Implant)" => 89); |
|
268
|
|
|
$dbFlags = Db::query("SELECT flagText, flagID FROM ccp_invFlags", array(), 3600); |
|
269
|
|
|
$flags = array(); |
|
270
|
|
|
foreach($dbFlags as $f) |
|
271
|
|
|
$flags[(int) $f["flagID"]] = $f["flagText"]; |
|
272
|
|
|
|
|
273
|
|
|
if(!$array) |
|
|
|
|
|
|
274
|
|
|
$k = self::getArray($killID); |
|
275
|
|
|
else |
|
276
|
|
|
$k = $array; |
|
277
|
|
|
|
|
278
|
|
|
$mail = $k["killTime"] . "\n"; |
|
279
|
|
|
$mail .= "\n"; |
|
280
|
|
|
$mail .= "Victim: " . $k["victim"]["characterName"] . "\n"; |
|
281
|
|
|
$mail .= "Corp: " . $k["victim"]["corporationName"] . "\n"; |
|
282
|
|
|
if (!isset($k["victim"]["allianceName"]) || $k["victim"]["allianceName"] == "") |
|
283
|
|
|
$k["victim"]["allianceName"] = "None"; |
|
284
|
|
|
$mail .= "Alliance: " . $k["victim"]["allianceName"] . "\n"; |
|
285
|
|
|
if (!isset($k["victim"]["factionName"]) || $k["victim"]["factionName"] == "") |
|
286
|
|
|
$k["victim"]["factionName"] = "None"; |
|
287
|
|
|
$mail .= "Faction: " . $k["victim"]["factionName"] . "\n"; |
|
288
|
|
|
if (!isset($k["victim"]["shipName"]) || $k["victim"]["shipName"] == "") |
|
289
|
|
|
$k["victim"]["shipName"] = "None"; |
|
290
|
|
|
$mail .= "Destroyed: " . $k["victim"]["shipName"] . "\n"; |
|
291
|
|
|
if (!isset($k["solarSystemName"]) || $k["solarSystemName"] == "") |
|
292
|
|
|
$k["solarSystemName"] = "None"; |
|
293
|
|
|
$mail .= "System: " . $k["solarSystemName"] . "\n"; |
|
294
|
|
|
if (!isset($k["solarSystemSecurity"]) || $k["solarSystemSecurity"] == "") |
|
295
|
|
|
$k["solarSystemSecurity"] = (int) 0; |
|
296
|
|
|
$mail .= "Security: " . $k["solarSystemSecurity"] . "\n"; |
|
297
|
|
|
if (!isset($k["victim"]["damageTaken"]) || $k["victim"]["damageTaken"] == "") |
|
298
|
|
|
$k["victim"]["damageTaken"] = (int) 0; |
|
299
|
|
|
$mail .= "Damage Taken: " . $k["victim"]["damageTaken"] . "\n\n"; |
|
300
|
|
|
if(isset($k["attackers"])) |
|
301
|
|
|
{ |
|
302
|
|
|
$mail .= "Involved parties:\n\n"; |
|
303
|
|
|
foreach ($k["attackers"] as $inv) |
|
304
|
|
|
{ |
|
305
|
|
|
// find groupID for the ship |
|
306
|
|
|
if(!isset($inv["shipName"])) $inv["shipName"] = "Unknown"; |
|
307
|
|
|
$groupID = Db::queryField("SELECT groupID FROM ccp_invTypes WHERE typeName LIKE :shipName", "groupID", array(":shipName" => $inv["shipName"])); |
|
308
|
|
|
if(in_array($groupID, $deadspaceIDs)) |
|
309
|
|
|
{ |
|
310
|
|
|
// shipName isn't set, but it's an npc.. fml.. |
|
311
|
|
|
if ($inv["finalBlow"] == 1) |
|
312
|
|
|
$mail .= "Name: ". $inv["shipName"] . " / " . $inv["corporationName"] . " (laid the final blow)\n"; |
|
313
|
|
|
else |
|
314
|
|
|
$mail .= "Name: ". $inv["shipName"] . " / " . $inv["corporationName"] . "\n"; |
|
315
|
|
|
$mail .= "Damage Done: " . $inv["damageDone"] . "\n\n"; |
|
316
|
|
|
} |
|
317
|
|
|
else |
|
318
|
|
|
{ |
|
319
|
|
|
if ($inv["finalBlow"] == 1) |
|
320
|
|
|
$mail .= "Name: " . $inv["characterName"] . " (laid the final blow)\n"; |
|
321
|
|
|
else if (strlen($inv["characterName"])) |
|
322
|
|
|
$mail .= "Name: " . $inv["characterName"] . "\n"; |
|
323
|
|
|
if (strlen($inv["characterName"])) $mail .= "Security: " . $inv["securityStatus"] . "\n"; |
|
324
|
|
|
$mail .= "Corp: " . $inv["corporationName"] . "\n"; |
|
325
|
|
|
if (!isset($inv["allianceName"]) || $inv["allianceName"] == "") |
|
326
|
|
|
$inv["allianceName"] = "None"; |
|
327
|
|
|
$mail .= "Alliance: " . $inv["allianceName"] . "\n"; |
|
328
|
|
|
if (!isset($inv["factionName"]) || $inv["factionName"] == "") |
|
329
|
|
|
$inv["factionName"] = "None"; |
|
330
|
|
|
$mail .= "Faction: " . $inv["factionName"] . "\n"; |
|
331
|
|
|
if (!isset($inv["shipName"]) || $inv["shipName"] == "") |
|
332
|
|
|
$inv["shipName"] = "None"; |
|
333
|
|
|
$mail .= "Ship: " . $inv["shipName"] . "\n"; |
|
334
|
|
|
if (!isset($inv["weaponName"]) || $inv["weaponName"] == "") |
|
335
|
|
|
$inv["weaponName"] = $inv["shipName"]; |
|
336
|
|
|
$mail .= "Weapon: " . $inv["weaponName"] . "\n"; |
|
337
|
|
|
$mail .= "Damage Done: " . $inv["damageDone"] . "\n\n"; |
|
338
|
|
|
} |
|
339
|
|
|
} |
|
340
|
|
|
} |
|
341
|
|
|
|
|
342
|
|
|
$mail .= "\n"; |
|
343
|
|
|
$dropped = array(); |
|
344
|
|
|
$destroyed = array(); |
|
345
|
|
|
if(isset($k["items"])) |
|
346
|
|
|
{ |
|
347
|
|
|
foreach($k["items"] as $itm) |
|
348
|
|
|
{ |
|
349
|
|
|
// Take the flags we get from $itemToSlot and replace it with the proper flag from the database |
|
350
|
|
|
if (!(isset($itm["flag"]) && isset($flags[$itm["flag"]]))) continue; |
|
351
|
|
|
$itm["flagName"] = $flags[$itm["flag"]]; |
|
352
|
|
|
|
|
353
|
|
|
// create the flag! |
|
354
|
|
|
$copy = null; |
|
355
|
|
|
if($itm["singleton"] == 2) |
|
356
|
|
|
$copy = " (Copy)"; |
|
357
|
|
|
|
|
358
|
|
|
$edkValidFlags = array("Cargo", "Drone Bay"); |
|
359
|
|
|
if($edk && !in_array($itm["flagName"], $edkValidFlags)) |
|
360
|
|
|
$flagName = null; |
|
361
|
|
|
else |
|
362
|
|
|
$flagName = " (". $itm["flagName"] . ")"; |
|
363
|
|
|
|
|
364
|
|
|
|
|
365
|
|
|
if($itm["qtyDropped"]) // go to dropped list |
|
366
|
|
|
{ |
|
367
|
|
|
$line = $itm["typeName"] . ", Qty: " . $itm["qtyDropped"] . $flagName . ($copy ? $copy : null); |
|
368
|
|
|
$dropped[] = $line; |
|
369
|
|
|
} |
|
370
|
|
|
|
|
371
|
|
|
if($itm["qtyDestroyed"]) // go to destroyed list |
|
372
|
|
|
{ |
|
373
|
|
|
$line = $itm["typeName"] . ", Qty: " . $itm["qtyDestroyed"] . $flagName . ($copy ? $copy : null); |
|
374
|
|
|
$destroyed[] = $line; |
|
375
|
|
|
} |
|
376
|
|
|
|
|
377
|
|
|
if(isset($itm["items"])) |
|
378
|
|
|
foreach($itm["items"] as $key => $sub) |
|
379
|
|
|
{ |
|
380
|
|
|
if($sub["qtyDropped"]) // go to dropped list |
|
381
|
|
|
{ |
|
382
|
|
|
$line = $sub["typeName"] . ", Qty: " . $sub["qtyDropped"] . $flagName . ($copy ? $copy : null) . " (In Container)"; |
|
383
|
|
|
$dropped[] = $line; |
|
384
|
|
|
} |
|
385
|
|
|
if($sub["qtyDestroyed"]) // go to destroyed list |
|
386
|
|
|
{ |
|
387
|
|
|
$line = $sub["typeName"] . ", Qty: " . $sub["qtyDestroyed"] . $flagName . ($copy ? $copy : null) . " (In Container)"; |
|
388
|
|
|
$destroyed[] = $line; |
|
389
|
|
|
} |
|
390
|
|
|
} |
|
391
|
|
|
} |
|
392
|
|
|
} |
|
393
|
|
|
|
|
394
|
|
|
if ($destroyed) { |
|
|
|
|
|
|
395
|
|
|
$mail .= "Destroyed items:\n\n"; |
|
396
|
|
|
foreach ($destroyed as $items) |
|
397
|
|
|
$mail .= $items . "\n"; |
|
398
|
|
|
} |
|
399
|
|
|
$mail .= "\n"; |
|
400
|
|
|
if ($dropped) { |
|
|
|
|
|
|
401
|
|
|
$mail .= "Dropped items:\n\n"; |
|
402
|
|
|
foreach ($dropped as $items) |
|
403
|
|
|
$mail .= $items . "\n"; |
|
404
|
|
|
} |
|
405
|
|
|
|
|
406
|
|
|
// Store the generated mail in cache |
|
407
|
|
|
Cache::set($cacheName, $mail, 604800); |
|
408
|
|
|
|
|
409
|
|
|
Semaphore::release($sem); |
|
410
|
|
|
return $mail; |
|
411
|
|
|
} |
|
412
|
|
|
|
|
413
|
|
|
public static function cleanDupe($mKillID, $killID) |
|
|
|
|
|
|
414
|
|
|
{ |
|
415
|
|
|
Db::execute("update zz_killmails set processed = 2 where killID = :mKillID", array(":mKillID" => $mKillID)); |
|
416
|
|
|
Stats::calcStats($mKillID, false); // remove manual version from stats |
|
417
|
|
|
} |
|
418
|
|
|
} |
|
419
|
|
|
|
This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.
Both the
$myVarassignment in line 1 and the$higherassignment in line 2 are dead. The first because$myVaris never used and the second because$higheris always overwritten for every possible time line.