root/dev/common/kill_related.php @ 155

Revision 155, 7.8 KB (checked in by exi, 14 years ago)

Added option to paint systems on maps based on security rating.
Added most violent systems statistic to corp and alliance details.
Some fixes for files with short php tags.
Fixed a bug which prevented sql errors to halt page generation if enabled in config.
Added system details as whole page instead of a js popup for maps.
Battle summaries should now work if the hour of the kill is less than 10.
Removed obsolete stats.php.

Line 
1<?php
2require_once("class.page.php");
3require_once("class.corp.php");
4require_once("class.alliance.php");
5require_once("class.killlist.php");
6require_once("class.killlisttable.php");
7require_once("class.killsummarytable.php");
8require_once("class.box.php");
9
10if (!$kll_id = intval($_GET['kll_id']))
11{
12    echo 'No valid kill id specified';
13    exit;
14}
15
16$page = new Page("Related kills & losses");
17
18// this is a fast query to get the system and timestamp
19$rqry = new DBQuery();
20$rsql = 'SELECT kll_timestamp, kll_system_id from kb3_kills where kll_id = '.$kll_id;
21$rqry->execute($rsql);
22$rrow = $rqry->getRow();
23$system = new SolarSystem($rrow['kll_system_id']);
24
25// now we get all kills in that system for +-12 hours
26$query = 'SELECT kll.kll_timestamp AS ts FROM kb3_kills kll WHERE kll.kll_system_id='.$rrow['kll_system_id'].'
27            AND kll.kll_timestamp <= date_add( \''.$rrow['kll_timestamp'].'\', INTERVAL \'12\' HOUR )
28            AND kll.kll_timestamp >= date_sub( \''.$rrow['kll_timestamp'].'\', INTERVAL \'12\' HOUR )
29            ORDER BY kll.kll_timestamp ASC';
30$qry = new DBQuery();
31$qry->execute($query);
32$ts = array();
33while ($row = $qry->getRow())
34{
35    $time = strtotime($row['ts']);
36    $ts[intval(date('H', $time))][] = $row['ts'];
37}
38
39// this tricky thing looks for gaps of more than 1 hour and creates an intersection
40$baseh = date('H', strtotime($rrow['kll_timestamp']));
41$maxc = count($ts);
42$times = array();
43for ($i = 0; $i < $maxc; $i++)
44{
45    $h = ($baseh+$i) % 24;
46    if (!isset($ts[$h]))
47    {
48        break;
49    }
50    foreach ($ts[$h] as $timestamp)
51    {
52        $times[] = $timestamp;
53    }
54}
55for ($i = 0; $i < $maxc; $i++)
56{
57    $h = ($baseh-$i) % 24;
58    if (!isset($ts[$h]))
59    {
60        break;
61    }
62    foreach ($ts[$h] as $timestamp)
63    {
64        $times[] = $timestamp;
65    }
66}
67unset($ts);
68asort($times);
69
70// we got 2 resulting timestamps
71$firstts = array_shift($times);
72$lastts = array_pop($times);
73
74$kslist = new KillList();
75$kslist->addSystem($system);
76$kslist->setStartDate($firstts);
77$kslist->setEndDate($lastts);
78if (CORP_ID)
79    $kslist->addInvolvedCorp(new Corporation(CORP_ID));
80if (ALLIANCE_ID)
81    $kslist->addInvolvedAlliance(new Alliance(ALLIANCE_ID));
82
83$lslist = new KillList();
84$lslist->addSystem($system);
85$lslist->setStartDate($firstts);
86$lslist->setEndDate($lastts);
87if (CORP_ID)
88    $lslist->addVictimCorp(new Corporation(CORP_ID));
89if (ALLIANCE_ID)
90    $lslist->addVictimAlliance(new Alliance(ALLIANCE_ID));
91
92$summarytable = new KillSummaryTable($kslist, $lslist);
93$summarytable->setBreak(6);
94$html .= $summarytable->generate();
95
96$klist = new KillList();
97$klist->setOrdered(true);
98$klist->addSystem($system);
99$klist->setStartDate($firstts);
100$klist->setEndDate($lastts);
101if (CORP_ID)
102    $klist->addInvolvedCorp(new Corporation(CORP_ID));
103if (ALLIANCE_ID)
104    $klist->addInvolvedAlliance(new Alliance(ALLIANCE_ID));
105
106$llist = new KillList();
107$llist->setOrdered(true);
108$llist->addSystem($system);
109$llist->setStartDate($firstts);
110$llist->setEndDate($lastts);
111if (CORP_ID)
112    $llist->addVictimCorp(new Corporation(CORP_ID));
113if (ALLIANCE_ID)
114    $llist->addVictimAlliance(new Alliance(ALLIANCE_ID));
115
116if ($_GET['scl_id'])
117{
118    $klist->addVictimShipClass(new ShipClass($_GET['scl_id']));
119    $llist->addVictimShipClass(new ShipClass($_GET['scl_id']));
120}
121
122function handle_involved($kill, $side)
123{
124    global $pilots;
125    $qry = new DBQuery();
126    $sql = "select ind_plt_id, ind_crp_id, ind_all_id, ind_sec_status,
127            ind_shp_id, ind_wep_id
128            from kb3_inv_detail
129            where ind_kll_id = ".$kill->getID()."
130            order by ind_order";
131
132    $qry->execute($sql);
133    while ($row = $qry->getRow())
134    {
135        $ship = new Ship($row['ind_shp_id']);
136        $shipc = $ship->getClass();
137
138        // dont set pods as ships for pilots we already have
139        if (isset($pilots[$side][$row['ind_plt_id']]))
140        {
141            if ($shipc->getID() == 18 || $shipc->getID() == 2)
142            {
143                continue;
144            }
145        }
146        $weapon = new Item($row['ind_wep_id']);
147        $pilot = new Pilot($row['ind_plt_id']);
148        $corp = new Corporation($row['ind_crp_id']);
149        $alliance = new Alliance($row['ind_all_id']);
150
151        $pilots[$side][$row['ind_plt_id']] = array('name' => $pilot->getName(), 'sid' => $ship->getID(), 'spic' => $ship->getImage(32), 'aid' => $row['ind_all_id'],
152                                                  'corp' => $corp->getName(), 'alliance' => $alliance->getName(), 'scl' => $shipc->getPoints(),
153                                                  'ship' => $ship->getName(), 'weapon' => $weapon->getName(), 'cid' => $row['ind_crp_id']);
154    }
155}
156
157function handle_destroyed($kill, $side)
158{
159    global $destroyed, $pilots;
160
161    $destroyed[$kill->getID()] = $kill->getVictimID();
162
163    $ship = new Ship();
164    $ship->lookup($kill->getVictimShipName());
165    $shipc = $ship->getClass();
166
167    // mark the pilot as podded
168    if ($shipc->getID() == 18 || $shipc->getID() == 2)
169    {
170        global $pods;
171        $pods[] = $kill->getVictimID();
172
173        // return when we've added him already
174        if (isset($pilots[$side][$kill->getVictimId()]))
175        {
176            return;
177        }
178    }
179
180    $pilots[$side][$kill->getVictimId()] = array('name' => $kill->getVictimName(), 'spic' => $ship->getImage(32), 'scl' => $shipc->getPoints(),
181                                              'corp' => $kill->getVictimCorpName(), 'alliance' => $kill->getVictimAllianceName(), 'aid' => $kill->getVictimAllianceID(),
182                                              'ship' => $kill->getVictimShipname(), 'sid' => $ship->getID(), 'cid' => $kill->getVictimCorpID());
183}
184
185$destroyed = $pods = array();
186$pilots = array('a' => array(), 'e' => array());
187$kslist->rewind();
188while ($kill = $kslist->getKill())
189{
190    handle_involved($kill, 'a');
191    handle_destroyed($kill, 'e');
192}
193$lslist->rewind();
194while ($kill = $lslist->getKill())
195{
196    handle_involved($kill, 'e');
197    handle_destroyed($kill, 'a');
198}
199function cmp_func($a, $b)
200{
201    if ($a['scl'] > $b['scl'])
202    {
203        return -1;
204    }
205    elseif ($a['scl'] == $b['scl'])
206    {
207        if ($a['ship'] > $b['ship'])
208        {
209            return 1;
210        }
211        return -1;
212    }
213    return 1;
214}
215
216function is_destroyed($pilot)
217{
218    global $destroyed;
219
220    if ($result = array_search((string)$pilot, $destroyed))
221    {
222        global $smarty;
223
224        $smarty->assign('kll_id', $result);
225        return true;
226    }
227    return false;
228}
229
230function podded($pilot)
231{
232    global $pods;
233
234    if (in_array((string)$pilot, $pods))
235    {
236        return true;
237    }
238    return false;
239}
240
241// sort arrays, ships with high points first
242uasort($pilots['a'], 'cmp_func');
243uasort($pilots['e'], 'cmp_func');
244$smarty->assign_by_ref('pilots_a', $pilots['a']);
245$smarty->assign_by_ref('pilots_e', $pilots['e']);
246
247$pod = new Ship(6);
248$smarty->assign('podpic', $pod->getImage(32));
249$smarty->assign('friendlycnt', count($pilots['a']));
250$smarty->assign('hostilecnt', count($pilots['e']));
251$smarty->assign('system', $system->getName());
252$smarty->assign('firstts', $firstts);
253$smarty->assign('lastts', $lastts);
254
255$html .= $smarty->fetch(get_tpl('battle_overview'));
256
257$html .= "<div class=kb-kills-header>Related kills</div>";
258
259$ktable = new KillListTable($klist);
260$html .= $ktable->generate();
261
262$html .= "<div class=kb-losses-header>Related losses</div>";
263
264$ltable = new KillListTable($llist);
265$html .= $ltable->generate();
266
267$menubox = new Box("Menu");
268$menubox->setIcon("menu-item.gif");
269$menubox->addOption("caption", "View");
270$menubox->addOption("link", "Kills & losses", "?a=kill_related&kll_id=".$_GET['kll_id']);
271$page->addContext($menubox->generate());
272
273$page->setContent($html);
274$page->generate();
275?>
Note: See TracBrowser for help on using the browser.