root/dev/mods/rank_mod/alliance_detail.php @ 419

Revision 370, 41.1 KB (checked in by kovell, 12 years ago)

- SQL queries optimised for speed and error protection.
- feed syndication optimised
- front page includes optional clock and optional kill/loss display
- mysqli support added
- transaction protection of kills added where supported (mysqli and InnoDB)
- summary tables and contracts show total destroyed value instead of ship value
- html errors reduced
- related kill calculation improved
- query caching errors reduced
- minor bugfixes
- Smarty 2.6.25 added
- apoc fitting mod added and modded
- code optimisations
- code comments added (doxygen format)
- conflicting mods are now identified

Line 
1<?php
2require_once('common/includes/class.corp.php');
3require_once('common/includes/class.alliance.php');
4require_once('common/includes/class.killlist.php');
5require_once('common/includes/class.killlisttable.php');
6require_once('common/includes/class.killsummarytable.php');
7require_once('common/includes/class.toplist.php');
8require_once('mods/rank_mod/rank.php');
9
10if (!$all_id = intval($_GET['all_id']))
11{
12    if (ALLIANCE_ID)
13    {
14        $all_id = ALLIANCE_ID;
15    }
16    else
17    {
18        echo 'no valid alliance id specified<br/>';
19        return;
20    }
21}
22
23$rank_known = config::get('rankmod_known');
24
25$medals=array(
26array( 'type' => 'eagle', 'name' => 'Killer', 'cnt' => 0, 'mname' =>'Silver Eagle'),            // 0
27array( 'type' => 'redcross', 'name' => 'Scorer', 'cnt' => 0,  'mname' =>'Iron Cross'),          // 1
28array( 'type' => 'cross', 'name' => 'Solo Killer', 'cnt' => 0, 'mname' =>'Winged Cross'),       // 2
29array( 'type' => 'wing1', 'name' => 'Damagedealer', 'cnt' => 0, 'mname' =>'Diamond Wing'),      // 3   
30array( 'type' => 'skull', 'name' => 'Final Blows', 'cnt' => 0, 'mname' =>'Red Skull'),          // 4
31array( 'type' => 'globe', 'name' => 'Podkiller', 'cnt' => 0, 'mname' =>'Silver Globe'),         // 5
32array( 'type' => 'star', 'name' => 'Griefer', 'cnt' => 0, 'mname' =>'Golden Star'),             // 6
33array( 'type' => 'wing2', 'name' => 'ISK Killer', 'cnt' => 0, 'mname' =>'Gold Wing'),           // 7
34array( 'type' => 'moon', 'name' => 'Loser', 'cnt' => 0, 'mname' =>'Purple Moon')                // 8
35);
36
37$alliance = new Alliance($all_id);
38$page = new Page('Alliance details - '.$alliance->getName());
39
40$html .= "<table class=kb-table width=\"100%\" border=\"0\" cellspacing=1><tr class=kb-table-row-even><td rowspan=8 width=128 align=center bgcolor=black>";
41
42if (file_exists("img/alliances/".$alliance->getUnique().".png"))
43{
44    $html .= "<img src=\"".IMG_URL."/alliances/".$alliance->getUnique().".png\" border=\"0\"></td>";
45}
46else
47{
48    $html .= "<img src=\"".IMG_URL."/alliances/default.gif\" border=\"0\"></td>";
49}
50$kill_summary = new KillSummaryTable();
51$kill_summary->addInvolvedAlliance($alliance);
52$kill_summary->setBreak(config::get('summarytable_rowcount'));
53$summary_html = $kill_summary->generate();
54$k_cost=$kill_summary->getTotalKillISK();
55$l_cost=$kill_summary->getTotalLossISK();
56$k_count=$kill_summary->getTotalKills();
57$l_count=$kill_summary->getTotalLosses();
58          if (($k_cost == 0) && ($l_cost == 0)) {
59            $efficiency = 'N/A';
60          } elseif ($k_cost == 0) {
61            $efficiency = '0%';
62          } elseif ($l_cost == 0) {
63            $efficiency = '100%';
64          } else {
65            $efficiency = round($k_cost / ($k_cost + $l_cost) * 100, 2).'%';
66          }
67          if ($k_cost >= 1000000000) {
68            $k_cost = round($k_cost / 1000000000, 2).'B';
69          } else { 
70            $k_cost = round($k_cost / 1000000, 2).'M';
71          }
72          if ($l_cost >= 1000000000) {
73            $l_cost = round($l_cost / 1000000000, 2).'B';
74          } else { 
75            $l_cost = round($l_cost / 1000000, 2).'M';
76          }
77          if ($k_count == 0) {
78            $k_ratio = 'N/A';
79          } elseif ($l_count == 0) {
80            $k_ratio = $k_count.' : 0';
81          } else {
82            $k_ratio = round($k_count / $l_count, 2).' : 1';
83          }
84
85$html .= "<td class=kb-table-cell width=180><b>Kills:</b></td><td class=kl-kill>".$k_count."</td></tr>";
86$html .= "<tr class=kb-table-row-even><td class=kb-table-cell><b>Losses:</b></td><td class=kl-loss>".$l_count."</td></tr>";
87$html .= "<tr class=kb-table-row-even><td class=kb-table-cell><b>Damage done (ISK):</b></td><td class=kl-kill>".$k_cost."</td></tr>";
88$html .= "<tr class=kb-table-row-even><td class=kb-table-cell><b>Damage received (ISK):</b></td><td class=kl-loss>".$l_cost."</td></tr>";
89$html .= "<tr class=kb-table-row-even><td class=kb-table-cell><b>Efficiency:</b></td><td class=kb-table-cell><b>" . $efficiency . "</b></td></tr>";
90$html .= "<tr class=kb-table-row-even><td class=kb-table-cell><b>Kill Ratio:</b></td><td class=kb-table-cell><b>" . $k_ratio . "</b></td></tr>";
91$html .= "</table>";
92$html .= "<br/>";
93
94if ($_GET['view'] == "" || $_GET['view'] == "kills" || $_GET['view'] == "losses")
95{
96    $html .= $summary_html;
97}
98
99switch ($_GET['view'])
100{
101    case "":
102        $html .= "<div class=kb-kills-header>10 Most recent kills</div>";
103
104        $list = new KillList();
105        $list->setOrdered(true);
106        $list->setLimit(10);
107        $list->setPodsNoobships(true);
108        $list->addInvolvedAlliance($alliance);
109        if ($_GET['scl_id'])
110            $list->addVictimShipClass(new ShipClass($_GET['scl_id']));
111
112        $ktab = new KillListTable($list);
113        $ktab->setLimit(10);
114        $ktab->setDayBreak(false);
115        $html .= $ktab->generate();
116
117        $html .= "<div class=kb-losses-header>10 Most recent losses</div>";
118
119        $list = new KillList();
120        $list->setOrdered(true);
121        $list->setLimit(10);
122        $list->setPodsNoobships(true);
123        $list->addVictimAlliance($alliance);
124        if ($_GET['scl_id'])
125            $list->addVictimShipClass(new ShipClass($_GET['scl_id']));
126
127        $ltab = new KillListTable($list);
128        $ltab->setLimit(10);
129        $ltab->setDayBreak(false);
130        $html .= $ltab->generate();
131
132        break;
133    case "kills":
134        $html .= "<div class=kb-kills-header>All kills</div>";
135
136        $list = new KillList();
137        $list->setOrdered(true);
138        $list->addInvolvedAlliance($alliance);
139        if ($_GET['scl_id'])
140            $list->addVictimShipClass(new ShipClass($_GET['scl_id']));
141        $pagesplitter = new PageSplitter($list->getCount(), 30);
142        $list->setPageSplitter($pagesplitter);
143        $table = new KillListTable($list);
144        $table->setDayBreak(false);
145        $html .= $table->generate();
146        $html .= $pagesplitter->generate();
147
148        break;
149    case "losses":
150        $html .= "<div class=kb-losses-header>All losses</div>";
151
152        $list = new KillList();
153        $list->setOrdered(true);
154        $list->setPodsNoobships(true);
155        $list->addVictimAlliance($alliance);
156        if ($_GET['scl_id'])
157            $list->addVictimShipClass(new ShipClass($_GET['scl_id']));
158        $pagesplitter = new PageSplitter($list->getCount(), 30);
159        $list->setPageSplitter($pagesplitter);
160
161        $table = new KillListTable($list);
162        $table->setDayBreak(false);
163        $html .= $table->generate();
164        $html .= $pagesplitter->generate();
165
166        break;
167    case "corp_kills":
168        $html .= "<div class=block-header2>Top killers</div>";
169
170        $html .= "<table class=kb-subtable><tr><td valign=top width=440>";
171        $html .= "<div class=block-header>This month</div>";
172
173        $list = new TopCorpKillsList();
174        $list->addInvolvedAlliance($alliance);
175        $list->setPodsNoobShips(false);
176        $list->setMonth(kbdate("m"));
177        $list->setYear(kbdate("Y"));
178        $table = new TopCorpTable($list, "Kills");
179        $html .= $table->generate();
180
181        $html .= "</td><td valign=top width=400>";
182        $html .= "<div class=block-header>All time</div>";
183
184        $list = new TopCorpKillsList();
185        $list->addInvolvedAlliance($alliance);
186        $list->setPodsNoobShips(false);
187        $table = new TopCorpTable($list, "Kills");
188        $html .= $table->generate();
189
190        $html .= "</td></tr></table>";
191
192        break;
193    case "corp_kills_class":
194        $html .= "<div class=block-header2>Destroyed ships</div>";
195
196        // Get all ShipClasses
197        $sql = "select scl_id, scl_class from kb3_ship_classes
198            where scl_class not in ('Drone','Unknown') order by scl_class";
199
200        $qry = new DBQuery();
201        $qry->execute($sql);
202        while ($row = $qry->getRow())
203        {
204            $shipclass[] = new Shipclass($row['scl_id']);
205        }
206        $html .= "<table class=kb-subtable>";
207        $html .= "<tr>";
208        $newrow = true;
209
210        foreach ($shipclass as $shp){
211            if ($newrow){
212            $html .= '</tr><tr>';
213            }
214            $list = new TopCorpKillsList();
215            $list->addInvolvedAlliance($alliance);
216            $list->addVictimShipClass($shp);
217            $table = new TopCorpTable($list, "Kills");
218            $content = $table->generate();
219            if ($content != '<table class=kb-table cellspacing=1><tr class=kb-table-header><td class=kb-table-cell align=center>#</td><td class=kb-table-cell align=center>Corporation</td><td class=kb-table-cell align=center width=60>Kills</td></tr></table>'){
220            $html .= "<td valign=top width=440>";
221            $html .= "<div class=block-header>".$shp->getName()."</div>";
222            $html .= $content;
223            $html .= "</td>";
224            $newrow = !$newrow;
225            }
226
227        }
228        $html .= "</tr></table>";
229
230        break;
231    case "kills_class":
232        $html .= "<div class=block-header2>Destroyed ships</div>";
233
234        // Get all ShipClasses
235        $sql = "select scl_id, scl_class from kb3_ship_classes
236            where scl_class not in ('Drone','Unknown') order by scl_class";
237
238        $qry = new DBQuery();
239        $qry->execute($sql);
240        while ($row = $qry->getRow())
241        {
242            $shipclass[] = new Shipclass($row['scl_id']);
243        }
244        $html .= "<table class=kb-subtable>";
245        $html .= "<tr>";
246        $newrow = true;
247
248        foreach ($shipclass as $shp){
249            if ($newrow){
250            $html .= '</tr><tr>';
251            }
252            $list = new TopKillsList();
253            $list->addInvolvedAlliance($alliance);
254            $list->addVictimShipClass($shp);
255            $table = new TopPilotTable($list, "Kills");
256            $content = $table->generate();
257            if ($content != '<table class=kb-table cellspacing=1><tr class=kb-table-header><td class=kb-table-cell align=center colspan=2>Pilot</td><td class=kb-table-cell align=center width=60>Kills</td></tr></table>'){
258            $html .= "<td valign=top width=440>";
259            $html .= "<div class=block-header>".$shp->getName()."</div>";
260            $html .= $content;
261            $html .= "</td>";
262            $newrow = !$newrow;
263            }
264
265        }
266        $html .= "</tr></table>";
267
268        break;
269    case "corp_losses_class":
270        $html .= "<div class=block-header2>Lost ships</div>";
271
272            // Get all ShipClasses
273        $sql = "select scl_id, scl_class from kb3_ship_classes
274            where scl_class not in ('Drone','Unknown') order by scl_class";
275
276        $qry = new DBQuery();
277        $qry->execute($sql);
278        while ($row = $qry->getRow())
279        {
280            $shipclass[] = new Shipclass($row['scl_id']);
281        }
282        $html .= "<table class=kb-subtable>";
283        $html .= "<tr>";
284        $newrow = true;
285
286        foreach ($shipclass as $shp){
287            if ($newrow){
288            $html .= '</tr><tr>';
289            }
290            $list = new TopCorpLossesList();
291                $list->addVictimAlliance($alliance);
292            $list->addVictimShipClass($shp);
293            $table = new TopCorpTable($list, "Losses");
294            $content = $table->generate();
295            if ($content != '<table class=kb-table cellspacing=1><tr class=kb-table-header><td class=kb-table-cell align=center>#</td><td class=kb-table-cell align=center>Corporation</td><td class=kb-table-cell align=center width=60>Losses</td></tr></table>'){
296            $html .= "<td valign=top width=440>";
297                $html .= "<div class=block-header>".$shp->getName()."</div>";
298                $html .= $content;
299            $html .= "</td>";
300            $newrow = !$newrow;
301            }
302        }
303        $html .= "</tr></table>";
304
305        break;
306    case "losses_class":
307        $html .= "<div class=block-header2>Lost ships</div>";
308
309            // Get all ShipClasses
310        $sql = "select scl_id, scl_class from kb3_ship_classes
311            where scl_class not in ('Drone','Unknown') order by scl_class";
312
313        $qry = new DBQuery();
314        $qry->execute($sql);
315        while ($row = $qry->getRow())
316        {
317            $shipclass[] = new Shipclass($row['scl_id']);
318        }
319        $html .= "<table class=kb-subtable>";
320        $html .= "<tr>";
321        $newrow = true;
322
323        foreach ($shipclass as $shp){
324            if ($newrow){
325            $html .= '</tr><tr>';
326            }
327            $list = new TopLossesList();
328                $list->addVictimAlliance($alliance);
329            $list->addVictimShipClass($shp);
330            $table = new TopPilotTable($list, "Losses");
331            $content = $table->generate();
332            if ($content != '<table class=kb-table cellspacing=1><tr class=kb-table-header><td class=kb-table-cell align=center colspan=2>Pilot</td><td class=kb-table-cell align=center width=60>Losses</td></tr></table>'){
333            $html .= "<td valign=top width=440>";
334                $html .= "<div class=block-header>".$shp->getName()."</div>";
335                $html .= $content;
336            $html .= "</td>";
337            $newrow = !$newrow;
338            }
339        }
340        $html .= "</tr></table>";
341
342        break;
343    case "corp_losses":
344        $html .= "<div class=block-header2>Top losers</div>";
345
346        $html .= "<table class=kb-subtable><tr><td valign=top width=440>";
347        $html .= "<div class=block-header>This month</div>";
348
349        $list = new TopCorpLossesList();
350        $list->addVictimAlliance($alliance);
351        $list->setPodsNoobShips(false);
352        $list->setMonth(kbdate("m"));
353        $list->setYear(kbdate("Y"));
354        $table = new TopCorpTable($list, "Losses");
355        $html .= $table->generate();
356
357        $html .= "</td><td valign=top width=400>";
358        $html .= "<div class=block-header>All time</div>";
359
360        $list = new TopCorpLossesList();
361        $list->addVictimAlliance($alliance);
362        $list->setPodsNoobShips(false);
363        $table = new TopCorpTable($list, "Losses");
364        $html .= $table->generate();
365
366        $html .= "</td></tr></table>";
367
368        break;
369    case "pilot_kills":
370        $html .= "<div class=block-header2>Top killers</div>";
371
372        $html .= "<table class=kb-subtable><tr><td valign=top width=440>";
373        $html .= "<div class=block-header>This month</div>";
374
375        $list = new TopKillsList();
376        $list->addInvolvedAlliance($alliance);
377        $list->setPodsNoobShips(false);
378        $list->setMonth(kbdate("m"));
379        $list->setYear(kbdate("Y"));
380        $table = new TopPilotTable($list, "Kills");
381        $html .= $table->generate();
382
383        $html .= "</td><td valign=top width=400>";
384        $html .= "<div class=block-header>All time</div>";
385
386        $list = new TopKillsList();
387        $list->addInvolvedAlliance($alliance);
388        $list->setPodsNoobShips(false);
389        $table = new TopPilotTable($list, "Kills");
390        $html .= $table->generate();
391
392        $html .= "</td></tr></table>";
393
394        break;
395    case "pilot_scores":
396        $html .= "<div class=block-header2>Top scorers</div>";
397
398        $html .= "<table class=kb-subtable><tr><td valign=top width=440>";
399        $html .= "<div class=block-header>This month</div>";
400
401        $list = new TopScoreList();
402        $list->addInvolvedAlliance($alliance);
403        $list->setPodsNoobShips(true);
404        $list->setMonth(kbdate("m"));
405        $list->setYear(kbdate("Y"));
406        $table = new TopPilotTable($list, "Points");
407        $html .= $table->generate();
408
409        $html .= "</td><td valign=top width=400>";
410        $html .= "<div class=block-header>All time</div>";
411
412        $list = new TopScoreList();
413        $list->addInvolvedAlliance($alliance);
414        $list->setPodsNoobShips(true);
415        $table = new TopPilotTable($list, "Points");
416        $html .= $table->generate();
417
418        $html .= "</td></tr></table>";
419
420        break;
421    case "pilot_losses":
422        $html .= "<div class=block-header2>Top losers</div>";
423
424        $html .= "<table class=kb-subtable><tr><td valign=top width=440>";
425        $html .= "<div class=block-header>This month</div>";
426
427        $list = new TopLossesList();
428        $list->addVictimAlliance($alliance);
429        $list->setPodsNoobShips(false);
430        $list->setMonth(kbdate("m"));
431        $list->setYear(kbdate("Y"));
432        $table = new TopPilotTable($list, "Losses");
433        $html .= $table->generate();
434
435        $html .= "</td><td valign=top width=400>";
436        $html .= "<div class=block-header>All time</div>";
437
438        $list = new TopLossesList();
439        $list->addVictimAlliance($alliance);
440        $list->setPodsNoobShips(false);
441        $table = new TopPilotTable($list, "Losses");
442        $html .= $table->generate();
443
444        $html .= "</td></tr></table>";
445
446        break;
447    case "pilot_solo":
448        $html .= "<div class=block-header2>Top solokillers</div>";
449
450        $html .= "<table class=kb-subtable><tr><td valign=top width=440>";
451        $html .= "<div class=block-header>This month</div>";
452
453        $list = new TopSoloKillerList();
454        $list->addInvolvedAlliance($alliance);
455        $list->setPodsNoobShips(true);
456        $list->setMonth(kbdate("m"));
457        $list->setYear(kbdate("Y"));
458        $table = new TopPilotTable($list, "Points");
459        $html .= $table->generate();
460
461        $html .= "</td><td valign=top width=400>";
462        $html .= "<div class=block-header>All time</div>";
463
464        $list = new TopSoloKillerList();
465        $list->addInvolvedAlliance($alliance);
466        $list->setPodsNoobShips(true);
467        $table = new TopPilotTable($list, "Points");
468        $html .= $table->generate();
469
470        $html .= "</td></tr></table>";
471
472        break;
473    case "pilot_damage":
474        $html .= "<div class=block-header2>Top damagedealers</div>";
475
476        $html .= "<table class=kb-subtable><tr><td valign=top width=440>";
477        $html .= "<div class=block-header>This month</div>";
478
479        $list = new TopDamageDealerList();
480        $list->addInvolvedAlliance($alliance);
481        $list->setPodsNoobShips(true);
482        $list->setMonth(kbdate("m"));
483        $list->setYear(kbdate("Y"));
484        $table = new TopPilotTable($list, "Points");
485        $html .= $table->generate();
486
487        $html .= "</td><td valign=top width=400>";
488        $html .= "<div class=block-header>All time</div>";
489
490        $list = new TopDamageDealerList();
491        $list->addInvolvedAlliance($alliance);
492        $list->setPodsNoobShips(true);
493        $table = new TopPilotTable($list, "Points");
494        $html .= $table->generate();
495
496        $html .= "</td></tr></table>";
497
498        break;
499    case "pilot_blow":
500        $html .= "<div class=block-header2>Top finalblows</div>";
501
502        $html .= "<table class=kb-subtable><tr><td valign=top width=440>";
503        $html .= "<div class=block-header>This month</div>";
504
505        $list = new TopFinalBlowList();
506        $list->addInvolvedAlliance($alliance);
507        $list->setPodsNoobShips(true);
508        $list->setMonth(kbdate("m"));
509        $list->setYear(kbdate("Y"));
510        $table = new TopPilotTable($list, "Points");
511        $html .= $table->generate();
512
513        $html .= "</td><td valign=top width=400>";
514        $html .= "<div class=block-header>All time</div>";
515
516        $list = new TopFinalBlowList();
517        $list->addInvolvedAlliance($alliance);
518        $list->setPodsNoobShips(true);
519        $table = new TopPilotTable($list, "Points");
520        $html .= $table->generate();
521
522        $html .= "</td></tr></table>";
523
524        break;
525    case "pilot_pod":
526        $html .= "<div class=block-header2>Top podkillers</div>";
527
528        $html .= "<table class=kb-subtable><tr><td valign=top width=440>";
529        $html .= "<div class=block-header>This month</div>";
530
531        $list = new TopPodKillerList();
532        $list->addInvolvedAlliance($alliance);
533        $list->setPodsNoobShips(true);
534        $list->setMonth(kbdate("m"));
535        $list->setYear(kbdate("Y"));
536        $table = new TopPilotTable($list, "Points");
537        $html .= $table->generate();
538
539        $html .= "</td><td valign=top width=400>";
540        $html .= "<div class=block-header>All time</div>";
541
542        $list = new TopPodKillerList();
543        $list->addInvolvedAlliance($alliance);
544        $list->setPodsNoobShips(true);
545        $table = new TopPilotTable($list, "Points");
546        $html .= $table->generate();
547
548        $html .= "</td></tr></table>";
549
550        break;
551    case "pilot_griefer":
552        $html .= "<div class=block-header2>Top griefers</div>";
553
554        $html .= "<table class=kb-subtable><tr><td valign=top width=440>";
555        $html .= "<div class=block-header>This month</div>";
556
557        $list = new TopGrieferList();
558        $list->addInvolvedAlliance($alliance);
559        $list->setPodsNoobShips(true);
560        $list->setMonth(kbdate("m"));
561        $list->setYear(kbdate("Y"));
562        $table = new TopPilotTable($list, "Points");
563        $html .= $table->generate();
564
565        $html .= "</td><td valign=top width=400>";
566        $html .= "<div class=block-header>All time</div>";
567
568        $list = new TopGrieferList();
569        $list->addInvolvedAlliance($alliance);
570        $list->setPodsNoobShips(true);
571        $table = new TopPilotTable($list, "Points");
572        $html .= $table->generate();
573
574        $html .= "</td></tr></table>";
575
576        break;
577    case "pilot_isk":
578        $html .= "<div class=block-header2>Top ISK killers</div>";
579
580        $html .= "<table class=kb-subtable><tr><td valign=top width=440>";
581        $html .= "<div class=block-header>This month</div>";
582
583        $list = new TopCapitalShipKillerList();
584        $list->addInvolvedAlliance($alliance);
585        $list->setPodsNoobShips(true);
586        $list->setMonth(kbdate("m"));
587        $list->setYear(kbdate("Y"));
588        $table = new TopPilotTable($list, "Points");
589        $html .= $table->generate();
590
591        $html .= "</td><td valign=top width=400>";
592        $html .= "<div class=block-header>All time</div>";
593
594        $list = new TopCapitalShipKillerList();
595        $list->addInvolvedAlliance($alliance);
596        $list->setPodsNoobShips(true);
597        $table = new TopPilotTable($list, "Points");
598        $html .= $table->generate();
599
600        $html .= "</td></tr></table>";
601
602        break;
603    case "ships_weapons":
604        $html .= "<div class=block-header2>Ships & weapons used</div>";
605
606        $html .= "<table class=kb-subtable><tr><td valign=top width=400>";
607        $shiplist = new TopShipList();
608        $shiplist->addInvolvedAlliance($alliance);
609        $shiplisttable = new TopShipListTable($shiplist);
610        $html .= $shiplisttable->generate();
611        $html .= "</td><td valign=top align=right width=400>";
612
613        $weaponlist = new TopWeaponList();
614        $weaponlist->addInvolvedAlliance($alliance);
615        $weaponlisttable = new TopWeaponListTable($weaponlist);
616        $html .= $weaponlisttable->generate();
617        $html .= "</td></tr></table>";
618
619        break;
620    case 'violent_systems':
621        $html .= "<div class=block-header2>Most violent systems</div>";
622        $html .= "<table width=\"99%\"><tr><td align=center valign=top>";
623
624        $html .= "<div class=block-header>This month</div>";
625        $html .= "<table class=kb-table>";
626        $html .= "<tr class=kb-table-header><td>#</td><td width=180>System</td><td width=40 align=center >Kills</td></tr>";
627
628        $sql = "select sys.sys_name, sys.sys_sec, sys.sys_id, count(distinct kll.kll_id) as kills
629                    from kb3_systems sys, kb3_kills kll, kb3_inv_detail inv
630                    where kll.kll_system_id = sys.sys_id
631                    and inv.ind_kll_id = kll.kll_id";
632
633        if ($crp_id)
634            $sql .= " and inv.ind_crp_id in (".$crp_id.")";
635        if ($all_id)
636            $sql .= " and inv.ind_all_id = ".$all_id;
637
638        $sql .= "   and date_format( kll.kll_timestamp, \"%c\" ) = ".kbdate("m")."
639                    and date_format( kll.kll_timestamp, \"%Y\" ) = ".kbdate("Y")."
640                    group by sys.sys_name
641                    order by kills desc
642                    limit 25";
643
644        $qry = new DBQuery();
645        $qry->execute($sql);
646        $odd = false;
647        $counter = 1;
648        while ($row = $qry->getRow())
649        {
650            if (!$odd)
651            {
652                $odd = true;
653                $rowclass = 'kb-table-row-odd';
654            }
655            else
656            {
657                $odd = false;
658                $rowclass = 'kb-table-row-even';
659            }
660
661            $html .= "<tr class=".$rowclass."><td><b>".$counter.".</b></td><td class=kb-table-cell width=180><b><a href=\"?a=system_detail&amp;sys_id=".$row['sys_id']."\">".$row['sys_name']."</a></b> (".roundsec($row['sys_sec']).")</td><td align=center>".$row['kills']."</td></tr>";
662            $counter++;
663        }
664
665        $html .= "</table>";
666
667        $html .= "</td><td align=center valign=top>";
668        $html .= "<div class=block-header>All-Time</div>";
669        $html .= "<table class=kb-table>";
670        $html .= "<tr class=kb-table-header><td>#</td><td width=180>System</td><td width=40 align=center>Kills</td></tr>";
671
672        $sql = "select sys.sys_name, sys.sys_id, sys.sys_sec, count(distinct kll.kll_id) as kills
673                    from kb3_systems sys, kb3_kills kll, kb3_inv_detail inv
674                    where kll.kll_system_id = sys.sys_id
675                    and inv.ind_kll_id = kll.kll_id";
676
677        if ($crp_id)
678            $sql .= " and inv.ind_crp_id in (".$crp_id.")";
679        if ($all_id)
680            $sql .= " and inv.ind_all_id = ".$all_id;
681
682        $sql .= " group by sys.sys_name
683                    order by kills desc
684                    limit 25";
685
686        $qry = new DBQuery();
687        $qry->execute($sql);
688        $odd = false;
689        $counter = 1;
690        while ($row = $qry->getRow())
691        {
692            if (!$odd)
693            {
694                $odd = true;
695                $rowclass = 'kb-table-row-odd';
696            }
697            else
698            {
699                $odd = false;
700                $rowclass = 'kb-table-row-even';
701            }
702
703            $html .= "<tr class=".$rowclass."><td><b>".$counter.".</b></td><td class=kb-table-cell><b><a href=\"?a=system_detail&amp;sys_id=".$row['sys_id']."\">".$row['sys_name']."</a></b> (".roundsec($row['sys_sec']).")</td><td align=center>".$row['kills']."</td></tr>";
704            $counter++;
705        }
706        $html .= "</table>";
707        $html .= "</td></tr></table>";
708    break;
709    case "pilot_ranks":
710        break;
711    case "pilot_medals":
712        break;
713   case "evo_ranks":
714        $rank_imageset = config::get('rankmod_imageset');
715        $rank_titleset = config::get('rankmod_titleset');
716        $keep_title = config::get('rankmod_keep');
717        $rank_type = config::get('rankmod_rtype');
718        $rank_ttl = config::getnumerical('rankmod_titles');
719        if ($keep_title) { $words = 'Custom Rank Set'; } else { $words = $rank_titleset." Rank Set"; }
720        $html .= "<div class=block-header2>Rank Evolution Table - ".$words." with ".$rank_imageset." Insignia Set - ".$rank_type."</div>";
721        $html .= "<table class=kb-table width=\"750\" border=\"0\" cellspacing=\"1\">";
722        $html .= "<tr><td width=34><b>Icon</b></td><td width=266><b>Rank Name</b></td><td width=150><b>Abbreviation</b></td><td width=150><b>Req. Rank Points</b></td><td width=150><b>Req. Kill Points</b></td></tr>";
723        foreach($rank_ttl as $level) {
724          $html .= "<tr height=36><td class=\"item-icon\" valign=\"top\" width=\"34\" height=\"36\">".$level['img']."</td>";   
725          $html .= "<td>".$level['title']."</td>";
726          $html .= "<td>".$level['abbr']."</td>";
727          $html .= "<td align=right>".$level['reqrp']."</td>";
728          $html .= "<td align=right>".$level['reqkp']."</td></tr>";
729        }
730        $html .= "</table><br>";
731        break;
732   case "rank_ribbons":
733        $rank_badges = config::getnumerical('rankmod_badreqs');
734        $rank_sub_badges = config::getnumerical('rankmod_sub_badreqs');
735        GetEnabledClasses($shipbadges); 
736        $html .= "<div class=block-header2>Grantable Ship Combat Ribbons</div>";
737        $html .= "<table class=kb-table cellspacing=1 width=\"100%\">";
738        $html .= "<tr class=kb-table-header><td width=108>Ribbon</td><td width=300>Name / Class</td><td>Description</td></tr>";
739        $class='odd';
740        foreach ($shipbadges as $i => $ship)
741        {
742          if ($class=='odd') {$class='even';} else {$class='odd';}
743          if ($ship['type'] == 'kamikaze') { $conj = 'like a'; } else { $conj = 'in a'; }
744          if (isset($ship['parent'])) {
745                $expert = $rank_sub_badges[$ship['cnt']][2];
746                $veteran = $rank_sub_badges[$ship['cnt']][1];
747                $elite = $rank_sub_badges[$ship['cnt']][0];
748          } else {
749                $expert = $rank_badges[$ship['cnt']][2];
750                $veteran = $rank_badges[$ship['cnt']][1];
751                $elite = $rank_badges[$ship['cnt']][0];
752          }
753          $html .= "<tr class=kb-table-row-".$class." height=32><td><img src=\"".IMG_URL."/ranks/ribbons/".$ship['type']."_expert.gif\" border=\"0\"></td><td><b>Expert ".$ship['name']." Pilot</b><br />".$ship['name']." Combat 3rd Class</td><td>Awarded when a pilot does <b><i>".$expert."</i></b> kills ".$conj." ".$ship['type'].".</td></tr>";
754          $html .= "<tr class=kb-table-row-".$class." height=32><td><img src=\"".IMG_URL."/ranks/ribbons/".$ship['type']."_veteran.gif\" border=\"0\"></td><td><b>Veteran ".$ship['name']." Pilot</b><br />".$ship['name']." Combat 2nd Class</td><td>Awarded when a pilot does <b><i>".$veteran."</i></b> kills ".$conj." ".$ship['type'].".</td></tr>";
755          $html .= "<tr class=kb-table-row-".$class." height=32><td><img src=\"".IMG_URL."/ranks/ribbons/".$ship['type']."_elite.gif\" border=\"0\"></td><td><b>Elite ".$ship['name']." Pilot</b><br />".$ship['name']." Combat 1st Class</td><td>Awarded when a pilot does <b><i>".$elite."</i></b> kills ".$conj." ".$ship['type'].".</td></tr>";
756
757        }
758        $html .= "</table>";
759        $weaponbadges=array(
760                array( 'type' => 'hybrid', 'name' => 'Hybrid Turret', 'cnt' => 0, 'icon' => 0, 'ribbon' => 0, 'class' =>0),             // 0
761                array( 'type' => 'laser', 'name' => 'Laser Turret', 'cnt' => 0, 'icon' => 0, 'ribbon' => 0, 'class' =>0),               // 1
762                array( 'type' => 'projectile', 'name' => 'Projectile Turret', 'cnt' => 0, 'icon' => 0, 'ribbon' => 0, 'class' =>0),     // 2
763                array( 'type' => 'missile', 'name' => 'Missile Launcher', 'cnt' => 0, 'icon' => 0, 'ribbon' => 0, 'class' =>0),         // 3
764                array( 'type' => 'ew', 'name' => 'Electronic Warfare', 'cnt' => 0, 'icon' => 0, 'ribbon' => 0, 'class' =>0),            // 4
765                array( 'type' => 'drone', 'name' => 'Drone', 'cnt' => 0, 'icon' => 0, 'ribbon' => 0, 'class' =>0)                       // 5
766                );
767        $html .= "<div class=block-header2>Grantable Weapon Master Ribbons</div>";
768        $html .= "<table class=kb-table cellspacing=1 width=\"100%\">";
769        $html .= "<tr class=kb-table-header><td width=108>Ribbon</td><td width=300>Name / Class</td><td>Description</td></tr>";
770        $class='odd';
771        foreach ($weaponbadges as $weap)
772        {
773          if ($class=='odd') {$class='even';} else {$class='odd';}
774          switch ($weap['type']) {
775          case 'ew':
776                $conj = 'with an';
777                $bottom = 'Operator';
778                $bottom2 = ' device';
779                break;
780          case 'missile':
781                $conj = 'with a';
782                $bottom = 'Operator';
783                $bottom2 = ' launcher';
784                break;
785          case 'drone':
786                $conj = 'using';
787                $bottom = 'Operator';
788                $bottom2 = 's';
789                break;
790          default:
791                $conj = 'with a';
792                $bottom = 'Gunner';
793                $bottom2 = ' turret';
794                break;   
795          }
796          $html .= "<tr class=kb-table-row-".$class." height=32><td><img src=\"".IMG_URL."/ranks/ribbons/".$weap['type']."_expert.gif\" border=\"0\"></td><td><b>Expert ".$weap['name']." ".$bottom."</b><br />".$weap['name']." Master 3rd Class</td><td>Awarded when a pilot does <b><i>".$rank_badges[$weap['cnt']][2]."</i></b> kills ".$conj." ".$weap['type'].$bottom2.".</td></tr>";
797          $html .= "<tr class=kb-table-row-".$class." height=32><td><img src=\"".IMG_URL."/ranks/ribbons/".$weap['type']."_veteran.gif\" border=\"0\"></td><td><b>Veteran ".$weap['name']." ".$bottom."</b><br />".$weap['name']." Master 2nd Class</td><td>Awarded when a pilot does <b><i>".$rank_badges[$weap['cnt']][1]."</i></b> kills ".$conj." ".$weap['type'].$bottom2.".</td></tr>";
798          $html .= "<tr class=kb-table-row-".$class." height=32><td><img src=\"".IMG_URL."/ranks/ribbons/".$weap['type']."_elite.gif\" border=\"0\"></td><td><b>Elite ".$weap['name']." ".$bottom."</b><br />".$weap['name']." Master 1st Class</td><td>Awarded when a pilot does <b><i>".$rank_badges[$weap['cnt']][0]."</i></b> kills ".$conj." ".$weap['type'].$bottom2.".</td></tr>";
799
800        }
801        $html .= "</table>";
802        $html .= "<div class=block-header2>Awarded Medal Ribbons</div>";
803        $html .= "<table class=kb-table cellspacing=1 width=\"100%\">";
804        $html .= "<tr class=kb-table-header><td width=108>Ribbon</td><td width=300>Name / Class</td><td>Description</td></tr>";
805        $class='odd';
806        foreach ($medals as $med)
807        {
808          if ($class=='odd') {$class='even';} else {$class='odd';}
809          $html .= "<tr class=kb-table-row-".$class." height=32><td><img src=\"".IMG_URL."/ranks/ribbons/".$med['type'].".gif\" border=\"0\"></td><td><b>".$med['mname']."</b><br />Top ".$med['name']." Award</td><td>Awarded monthly to the Top ".$med['name']." pilot.</td></tr>";
810        }
811        $html .= "</table>";
812        break;
813   case "known_members":
814        if (isset($_GET['page'])) { 
815                $limit = ($_GET['page'] - 1)*30;
816                $last_page = $_GET['page'] - 1;
817                $next_page = $_GET['page'] + 1; 
818        } else {
819                $limit = 0;
820                $last_page = 0;
821                $next_page = 2; 
822        }
823        $query = "SELECT * FROM kb3_pilots plt
824                INNER JOIN kb3_corps crp ON ( plt.plt_crp_id = crp.crp_id )
825                WHERE crp.crp_all_id =" . $alliance->getID() . "
826                AND plt.plt_name NOT LIKE '%Warp Disruptor%'
827                AND plt.plt_name NOT LIKE '%Control Tower%'
828                AND plt.plt_name NOT LIKE '%Sentry Gun%'
829                AND plt.plt_name NOT LIKE '%Battery%'
830                ORDER BY plt.plt_name ASC
831                LIMIT ".$limit." , 30";
832        $qry = new DBQuery();
833        $qry->execute($query);
834        if ($qry->recordCount() < 30) { $next = FALSE; } else { $next = TRUE; }
835        $html .= "<table class=kb-table align=center width=\"100%\">";
836        $html .= "<tr><td width =\"33%\" align=left>";
837        if ($last_page > 0) {
838                $html .= "<a href=\"?a=alliance_detail&all_id=" . $alliance->getID() . "&view=known_members&page=".$last_page."\">Previous Page</a>";
839        }
840        $html .= "</td><td width =\"33%\" align=center>";
841        if ($next_page > 3) {
842                $html .= "<a href=\"?a=alliance_detail&all_id=" . $alliance->getID() . "&view=known_members&page=1\">Back to First Page</a>";
843        }
844        $html .= "</td><td width =\"33%\" align=right>";
845        if ($next) {
846                $html .= "<a href=\"?a=alliance_detail&all_id=" . $alliance->getID() . "&view=known_members&page=".$next_page."\">Next Page</a>";
847        }
848        $html .= "</td></tr></table>";
849        $html .= "<div class=block-header2>".$alliance->getName()." Known Members</div>";
850        $html .= "<table class=kb-table align=center>";
851        $html .= '<tr class=kb-table-header>';
852        if (strpos($rank_known, 'portrait'))
853        {
854          $html .= '<td width=34></td>';
855        }
856        $html .= '<td width=150>Name</td>';
857       
858        if (strpos($rank_known, 'score'))
859        {
860          $html .= '<td width=80 align=center>Kill<br>Points</td>';
861        }
862        if (strpos($rank_known, 'done'))
863        {               
864          $html .= '<td align=center>Damage<br>Done</td>';
865        }
866        if (strpos($rank_known, 'received'))
867        {
868          $html .= '<td width=80 align=center>Damage<br>Received</td>';
869        }
870        if (strpos($rank_known, 'efficiency'))
871        {
872          $html .= '<td width=80 align=center>Efficiency</td>';
873        }
874        if (strpos($rank_known, 'ratio'))
875        {
876          $html .= '<td width=80 align=center>Kill<br>Ratio</td>';
877        }
878        if ($page->isAdmin())
879        {
880          $html .= '<td width=80 align=center>Admin<br>Move</td>';
881        }
882        $html .= '</tr>';
883        $class='odd';
884        while ($row = $qry->getRow()) {
885          if ($class=='odd') {$class='even';} else {$class='odd';}
886          $pilot = new Pilot($row['plt_id']);
887          $kill_list = new KillList();
888          $kill_list->addInvolvedPilot($pilot);
889          $kill_list->getAllKills();
890          $k_score = $kill_list->getPoints();
891          if (!$k_score) { $k_score = 0; }
892          $k_count = $kill_list->getCount();
893          $k_cost = $kill_list->getISK();       
894          $loss_list = new KillList();
895          $loss_list->addVictimPilot($pilot);
896          $loss_list->getAllKills();
897          $l_count = $loss_list->getCount();
898          $l_cost = $loss_list->getISK();
899          if (($k_cost == 0) && ($l_cost == 0)) {
900            $efficiency = 'N/A';
901          } elseif ($k_cost == 0) {
902            $efficiency = '0%';
903          } elseif ($l_cost == 0) {
904            $efficiency = '100%';
905          } else {
906            $efficiency = round($k_cost / ($k_cost + $l_cost) * 100, 2).'%';
907          }
908          if ($k_cost >= 1000000000) {
909            $k_cost = round($k_cost / 1000000000, 2).'B';
910          } else { 
911            $k_cost = round($k_cost / 1000000, 2).'M';
912          }
913          if ($l_cost >= 1000000000) {
914            $l_cost = round($l_cost / 1000000000, 2).'B';
915          } else { 
916            $l_cost = round($l_cost / 1000000, 2).'M';
917          }
918          if ($k_count == 0) {
919            $k_ratio = 'N/A';
920          } elseif ($l_count == 0) {
921            $k_ratio = $k_count.' : 0';
922          } else {
923            $k_ratio = round($k_count / $l_count, 2).' : 1';
924          }
925          $html .= "<tr height=34 class=kb-table-row-".$class.">";
926          if (strpos($rank_known, 'portrait'))
927          {
928            $html .= "<td><img src=".$pilot->getPortraitURL( 32 )."></td>";
929          }
930          $html .= "<td class=kb-table-cell><a class=kb-shipclass href=?a=pilot_detail&plt_id=".$pilot->getID().">".$pilot->getName()."</a></td>";
931          if (strpos($rank_known, 'score'))
932          {
933            $html .= '<td align=right>'.$k_score.'</td>';
934          }
935          if (strpos($rank_known, 'done'))
936          {
937            $html .= '<td align=right>'.$k_cost.'</td>';
938          }
939          if (strpos($rank_known, 'received'))
940          {
941            $html .= '<td align=right>'.$l_cost.'</td>';
942          }
943          if (strpos($rank_known, 'efficiency'))
944          {
945            $html .= '<td align=right>'.$efficiency.'</td>';
946          }
947          if (strpos($rank_known, 'ratio'))
948          {
949            $html .= '<td align=right>'.$k_ratio.'</td>';
950          }
951          if ($page->isAdmin())
952          {
953            $html .= "<td align=center><a href=\"javascript:openWindow('?a=admin_move_pilot&plt_id=".$plt['plt_id']."', null, 500, 500, '' )\">Move</a></td>";
954          }
955          $html .= "</tr>";
956        }
957        $html .= "</table>";
958        break;
959
960}
961
962$menubox = new Box("Menu");
963$menubox->setIcon("menu-item.gif");
964$menubox->addOption("caption","Kills & losses");
965$menubox->addOption("link","Recent activity", "?a=alliance_detail&all_id=" . $alliance->getID());
966$menubox->addOption("link","Kills", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=kills");
967$menubox->addOption("link","Losses", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=losses");
968$menubox->addOption("caption","Corp statistics");
969$menubox->addOption("link","Top killers", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=corp_kills");
970$menubox->addOption("link","Top losers", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=corp_losses");
971$menubox->addOption("link","Destroyed ships", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=corp_kills_class");
972$menubox->addOption("link","Lost ships", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=corp_losses_class");
973$menubox->addOption("caption","Pilot statistics");
974$menubox->addOption("link","Top killers", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=pilot_kills");
975if (config::get('kill_points'))
976{
977    $menubox->addOption('link', "Top scorers", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=pilot_scores");
978}
979$menubox->addOption("link","Top solokillers", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=pilot_solo");
980$menubox->addOption("link","Top damagedealers", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=pilot_damage");
981$menubox->addOption("link","Top final blows", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=pilot_blow");
982$menubox->addOption("link","Top podkillers", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=pilot_pod");
983$menubox->addOption("link","Top griefers", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=pilot_griefer");
984$menubox->addOption("link","Top ISK killers", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=pilot_isk");
985$menubox->addOption("link","Top losers", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=pilot_losses");
986$menubox->addOption("caption","Pilot ship statistics");
987$menubox->addOption("link","Destroyed ships", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=kills_class");
988$menubox->addOption("link","Lost ships", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=losses_class");
989
990$menubox->addOption("caption","Global statistics");
991$menubox->addOption("link","Ships & weapons", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=ships_weapons");
992$menubox->addOption("link","Most violent systems", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=violent_systems");
993
994if (    (CORP_ID == 0 && ALLIANCE_ID == 0) // Public Board
995        || (ALLIANCE_ID && ALLIANCE_ID == $alliance->getID()) // Allied Board
996)
997{
998  $menubox->addOption("caption","Ranks & Medals");
999  $menubox->addOption("link","Pilot Ranks", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=pilot_ranks");
1000  $menubox->addOption("link","Pilot Medals", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=pilot_medals");
1001  $menubox->addOption("caption","Rank Showroom");
1002  $menubox->addOption("link","Evolution Table", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=evo_ranks");
1003  $menubox->addOption("link","Ribbons", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=rank_ribbons");
1004} elseif (strpos($rank_known, 'enabled')) {
1005  $menubox->addOption("link","Known Members", "?a=alliance_detail&all_id=" . $alliance->getID() . "&view=known_members&page=1");
1006}
1007
1008
1009$page->addContext($menubox->generate());
1010
1011$page->setContent($html);
1012$page->generate();
1013?>
Note: See TracBrowser for help on using the browser.