root/dev/common/kill_related.php @ 157

Revision 157, 8.2 KB (checked in by exi, 14 years ago)

Added option to show a link to the pod killmail instead of a pod picture on the battle summary.
Battle summaries will now be sorted by shippoints, shipname, pilotname.
Added option to disable mailposting without having to change the password.
Fixed a typo on the standingslist.

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->getID()] = $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    // sort after points, shipname, pilotname
206    elseif ($a['scl'] == $b['scl'])
207    {
208        if ($a['ship'] == $b['ship'])
209        {
210            if ($a['name'] > $b['name'])
211            {
212                return 1;
213            }
214            return -1;
215        }
216        elseif ($a['ship'] > $b['ship'])
217        {
218            return 1;
219        }
220        return -1;
221    }
222    return 1;
223}
224
225function is_destroyed($pilot)
226{
227    global $destroyed;
228
229    if ($result = array_search((string)$pilot, $destroyed))
230    {
231        global $smarty;
232
233        $smarty->assign('kll_id', $result);
234        return true;
235    }
236    return false;
237}
238
239function podded($pilot)
240{
241    global $pods;
242
243    if ($result = array_search((string)$pilot, $pods))
244    {
245        global $smarty;
246
247        $smarty->assign('pod_kll_id', $result);
248        return true;
249    }
250    return false;
251}
252
253// sort arrays, ships with high points first
254uasort($pilots['a'], 'cmp_func');
255uasort($pilots['e'], 'cmp_func');
256$smarty->assign_by_ref('pilots_a', $pilots['a']);
257$smarty->assign_by_ref('pilots_e', $pilots['e']);
258
259$pod = new Ship(6);
260$smarty->assign('podpic', $pod->getImage(32));
261$smarty->assign('friendlycnt', count($pilots['a']));
262$smarty->assign('hostilecnt', count($pilots['e']));
263$smarty->assign('system', $system->getName());
264$smarty->assign('firstts', $firstts);
265$smarty->assign('lastts', $lastts);
266
267$html .= $smarty->fetch(get_tpl('battle_overview'));
268
269$html .= "<div class=kb-kills-header>Related kills</div>";
270
271$ktable = new KillListTable($klist);
272$html .= $ktable->generate();
273
274$html .= "<div class=kb-losses-header>Related losses</div>";
275
276$ltable = new KillListTable($llist);
277$html .= $ltable->generate();
278
279$menubox = new Box("Menu");
280$menubox->setIcon("menu-item.gif");
281$menubox->addOption("caption", "View");
282$menubox->addOption("link", "Kills & losses", "?a=kill_related&kll_id=".$_GET['kll_id']);
283$page->addContext($menubox->generate());
284
285$page->setContent($html);
286$page->generate();
287?>
Note: See TracBrowser for help on using the browser.