root/dev/common/class.killlist.php @ 86

Revision 86, 15.0 KB (checked in by exi, 14 years ago)

Added Smarty files and some basic templates for index.php and killlists.

Line 
1<?php
2require_once('class.kill.php');
3require_once('class.profiler.php');
4require_once('class.pagesplitter.php');
5
6class KillList
7{
8    function KillList()
9    {
10        $this->qry_ = new DBQuery();
11        $this->killpointer_ = 0;
12        $this->kills_ = 0;
13        $this->losses_ = 0;
14        $this->killisk_ = 0;
15        $this->lossisk_ = 0;
16        $this->exclude_scl_ = array();
17        $this->vic_scl_id_ = array();
18        $this->regions_ = array();
19        $this->systems_ = array();
20        $this->groupby_ = array();
21        $this->offset_ = 0;
22        $this->killcounter_ = 0;
23        $this->realkillcounter_ = 0;
24        $this->ordered_ = false;
25    }
26
27    function execQuery()
28    {
29        if (!$this->qry_->executed_)
30        {
31            if (!count($this->groupby_))
32                $this->sql_ = 'select distinct kll.kll_id, kll.kll_timestamp, plt.plt_name,
33                                crp.crp_name, ali.all_name, kll.kll_ship_id,
34                                kll.kll_system_id, kll.kll_ship_id,
35                                kll.kll_victim_id, plt.plt_externalid,
36                                kll.kll_crp_id, kll.kll_points,
37                                shp.shp_class, shp.shp_name,
38                                shp.shp_externalid,
39                                scl.scl_id, scl.scl_class, scl.scl_value,
40                                sys.sys_name, sys.sys_sec,
41                                fbplt.plt_name as fbplt_name,
42                                fbcrp.crp_name as fbcrp_name';
43
44            global $config;
45            if ($config->getConfig('ship_values'))
46            {
47                $this->sql_ .= ', ksv.shp_value';
48            }
49            if (count($this->groupby_))
50            {
51                $this->sql_ .= "select count(*) as cnt, " . implode(",", $this->groupby_);
52            }
53
54            $this->sql_ .= "    from kb3_kills kll
55                           inner join kb3_ships shp
56                              on ( shp.shp_id = kll.kll_ship_id )
57                           inner join kb3_ship_classes scl
58                              on ( scl.scl_id = shp.shp_class )";
59            if ($config->getConfig('ship_values'))
60            {
61                $this->sql_ .= ' left join kb3_ships_values ksv on (shp.shp_id = ksv.shp_id)';
62            }
63
64            $this->sql_ .= "inner join kb3_pilots plt
65                              on ( plt.plt_id = kll.kll_victim_id )
66                           inner join kb3_corps crp
67                              on ( crp.crp_id = kll.kll_crp_id )
68                           inner join kb3_alliances ali
69                              on ( ali.all_id = kll.kll_all_id )
70                           inner join kb3_pilots fbplt
71                              on ( fbplt.plt_id = kll.kll_fb_plt_id )
72                           inner join kb3_corps fbcrp
73                              on ( fbcrp.crp_id = kll.kll_fb_crp_id )
74                           inner join kb3_systems sys
75                              on ( sys.sys_id = kll.kll_system_id )";
76
77            // involved filter
78            if (! $this->mixedinvolved_)
79            {
80                if ($this->inv_plt_)
81                    $this->sql_ .= " inner join kb3_inv_plt inp
82                               on ( inp.inp_plt_id in ( " . substr($this->inv_plt_, 0, strlen($this->inv_plt_) - 2) . " ) and kll.kll_id = inp.inp_kll_id ) ";
83                if ($this->inv_crp_)
84                    $this->sql_ .= " inner join kb3_inv_crp inc
85                              on ( inc.inc_crp_id in ( " . substr($this->inv_crp_, 0, strlen($this->inv_crp_) - 2) . " ) and kll.kll_id = inc.inc_kll_id ) ";
86                if ($this->inv_all_)
87                    $this->sql_ .= " inner join kb3_inv_all ina
88                              on ( ina.ina_all_id in ( " . substr($this->inv_all_, 0, strlen($this->inv_all_) - 2) . " ) and kll.kll_id = ina.ina_kll_id ) ";
89            }
90            else
91            {
92                $this->sql_ .= " <ph> ";
93            }
94            // echo $this->sql_;
95            // regions
96            if (count($this->regions_))
97            {
98                $this->sql_ .= " inner join kb3_constellations con
99                              on ( con.con_id = sys.sys_con_id )
100                           inner join kb3_regions reg
101                              on ( reg.reg_id = con.con_reg_id
102                                   and reg.reg_id in ( " . implode($this->regions_, ",") . " ) )";
103            }
104
105            if (count($this->systems_))
106            {
107                $this->sql_ .= "   and kll.kll_system_id in ( " . implode($this->systems_, ",").")";
108            }
109            // victim filter
110            if ($this->mixedvictims_)
111            {
112                $this->sql_ .= " and ( 1 = 0 ";
113                $op = "or";
114            }
115            else $op = "and";
116
117            if ($this->vic_plt_)
118                $this->sql_ .= " " . $op . " kll.kll_victim_id in ( " . substr($this->vic_plt_, 0, strlen($this->vic_plt_) - 2) . " )";
119            if ($this->vic_crp_)
120                $this->sql_ .= " " . $op . " kll.kll_crp_id in ( " . substr($this->vic_crp_, 0, strlen($this->vic_crp_) - 2) . " )";
121            if ($this->vic_all_)
122                $this->sql_ .= " " . $op . " kll.kll_all_id in ( " . substr($this->vic_all_, 0, strlen($this->vic_all_) - 2) . " )";
123
124            if ($this->mixedvictims_)
125                $this->sql_ .= " ) ";
126            // echo $this->sql_;
127            // ship filter
128            if (count($this->exclude_scl_))
129            {
130                $this->sql_ .= " and scl.scl_id not in ( " . implode(",", $this->exclude_scl_) . " )";
131            }
132            if (count($this->vic_scl_id_))
133            {
134                $this->sql_ .= " and scl.scl_id in ( " . implode(",", $this->vic_scl_id_) . " )";
135            }
136            // related
137            if ($this->related_)
138            {
139                $rqry = new DBQuery();
140                $rsql = "select kll_timestamp, kll_system_id
141                     from kb3_kills
142                    where kll_id = " . $this->related_;
143
144                $rqry->execute($rsql) or die($rqry->getErrorMsg());
145                $rrow = $rqry->getRow();
146
147                $this->sql_ .= " and kll.kll_system_id = " . $rrow['kll_system_id'] . "
148                           and kll.kll_timestamp <=
149                               date_add( '" . $rrow['kll_timestamp'] . "', INTERVAL '15:0' MINUTE_SECOND )
150                           and kll.kll_timestamp >=
151                               date_sub( '" . $rrow['kll_timestamp'] . "', INTERVAL '15:0' MINUTE_SECOND )";
152            }
153            // timeframe
154            if ($this->timeframe_)
155                $this->sql_ .= $this->timeframe_;
156
157            if (!strpos($this->sql_, " join ") && !$this->mixedinvolved_)
158                $this->sqlhead_ .= " where 1 = 1";
159
160            if ($this->mixedinvolved_)
161            {
162                if ($this->inv_plt_)
163                {
164                    $replace = " inner join kb3_inv_plt inp
165                            on ( inp.inp_plt_id in ( " . substr($this->inv_plt_, 0, strlen($this->inv_plt_) - 2) . " ) and kll.kll_id = inp.inp_kll_id ) ";
166                    $psql = str_replace("<ph>", $replace, $this->sql_);
167                }
168                if ($this->inv_crp_)
169                {
170                    $replace = " inner join kb3_inv_crp inc
171                            on ( inc.inc_crp_id in ( " . substr($this->inv_crp_, 0, strlen($this->inv_crp_) - 2) . " ) and kll.kll_id = inc.inc_kll_id ) ";
172                    $csql = str_replace("<ph>", $replace, $this->sql_);
173                }
174                if ($this->inv_all_)
175                {
176                    $replace = " inner join kb3_inv_all ina
177                            on ( ina.ina_all_id in ( " . substr($this->inv_all_, 0, strlen($this->inv_all_) - 2) . " ) and kll.kll_id = ina.ina_kll_id ) ";
178                    $asql = str_replace("<ph>", $replace, $this->sql_);
179                }
180
181                if ($psql)
182                    $nsql = $psql . " union ";
183                if ($csql)
184                    $nsql .= $csql . " union ";
185                if ($asql)
186                    $nsql .= $asql;
187
188                $this->sql_ = $nsql;
189            }
190            // group by
191            if ($this->groupby_) $this->sql_ .= " group by " . implode(",", $this->groupby_);
192            // order/limit
193            if ($this->ordered_)
194            {
195                if (!$this->orderby_) $this->sql_ .= " order by kll_timestamp desc";
196                else $this->sql_ .= " order by " . $this->orderby_;
197            }
198            if ($this->limit_) $this->sql_ .= " limit " . $this->offset_ . ", " . $this->limit_;
199            // echo '<p>'.$this->sql_."</p>";
200            $this->qry_->execute($this->sql_);
201        }
202    }
203
204    function getRow()
205    {
206        $this->execQuery();
207        if ($this->plimit_ && $this->killcounter_ >= $this->plimit_)
208        {
209            // echo $this->plimit_." ".$this->killcounter_;
210            return null;
211        }
212
213        $skip = $this->poffset_ - $this->killpointer_;
214        if ($skip > 0)
215        {
216            for ($i = 0; $i < $skip; $i++)
217            {
218                $this->killpointer_++;
219                $row = $this->qry_->getRow();
220            }
221        }
222
223        $row = $this->qry_->getRow();
224
225        return $row;
226    }
227
228    function getKill()
229    {
230        $this->execQuery();
231        if ($this->plimit_ && $this->killcounter_ >= $this->plimit_)
232        {
233            // echo $this->plimit_." ".$this->killcounter_;
234            return null;
235        }
236
237        $skip = $this->poffset_ - $this->killpointer_;
238        if ($skip > 0)
239        {
240            for ($i = 0; $i < $skip; $i++)
241            {
242                $this->killpointer_++;
243                $row = $this->qry_->getRow();
244            }
245        }
246
247        $row = $this->qry_->getRow();
248        if ($row)
249        {
250            $this->killcounter_++;
251            if ($row['scl_class'] != 2 && $row['scl_class'] != 3 && $row['scl_class'] != 11)
252                $this->realkillcounter_++;
253
254            global $config;
255            if ($config->getConfig('ship_values'))
256            {
257                if ($row['shp_value'])
258                {
259                    $row['scl_value'] = $row['shp_value'];
260                }
261            }
262
263            $this->killisk_ += $row['scl_value'] / 1000000;
264            $this->killpoints_ += $row['kll_points'];
265
266            $kill = new Kill($row['kll_id']);
267            $kill->setTimeStamp($row['kll_timestamp']);
268            $kill->setSolarSystemName($row['sys_name']);
269            $kill->setSolarSystemSecurity($row['sys_sec']);
270            $kill->setVictimName($row['plt_name']);
271            $kill->setVictimCorpName($row['crp_name']);
272            $kill->setVictimAllianceName($row['ali_name']);
273            $kill->setVictimShipName($row['shp_name']);
274            $kill->setVictimShipExternalID($row['shp_externalid']);
275            $kill->setVictimShipClassName($row['scl_class']);
276            $kill->setVictimShipValue(round($row['scl_value'] / 1000000, 2));
277            $kill->setFBPilotName($row['fbplt_name']);
278            $kill->setFBCorpName($row['fbcrp_name']);
279            $kill->setKillPoints($row['kll_points']);
280            return $kill;
281        }
282        else return null;
283    }
284
285    function getAllKills()
286    {
287        while ($this->getKill())
288        {
289        }
290        $this->rewind();
291    }
292
293    function addInvolvedPilot($pilot)
294    {
295        $this->inv_plt_ .= $pilot->getID() . ", ";
296        if ($this->inv_crp_ || $this->inv_all_)
297            $this->mixedinvolved_ = true;
298    }
299
300    function addInvolvedCorp($corp)
301    {
302        $this->inv_crp_ .= $corp->getID() . ", ";
303        if ($this->inv_plt_ || $this->inv_all_)
304            $this->mixedinvolved_ = true;
305    }
306
307    function addInvolvedAlliance($alliance)
308    {
309        $this->inv_all_ .= $alliance->getID() . ", ";
310        if ($this->inv_plt_ || $this->inv_crp_)
311            $this->mixedinvolved_ = true;
312    }
313
314    function addVictimPilot($pilot)
315    {
316        $this->vic_plt_ .= $pilot->getID() . ", ";
317        if ($this->vic_crp_ || $this->vic_all_)
318            $this->mixedvictims_ = true;
319    }
320
321    function addVictimCorp($corp)
322    {
323        $this->vic_crp_ .= $corp->getID() . ", ";
324        if ($this->vic_plt_ || $this->vic_all_)
325            $this->mixedvictims_ = true;
326    }
327
328    function addVictimAlliance($alliance)
329    {
330        $this->vic_all_ .= $alliance->getID() . ", ";
331        if ($this->vic_plt_ || $this->vic_crp_)
332            $this->mixedvictims_ = true;
333    }
334
335    function addVictimShipClass($shipclass)
336    {
337        array_push($this->vic_scl_id_, $shipclass->getID());
338    }
339
340    function addVictimShip($ship)
341    {
342    }
343
344    function addItemDestroyed($item)
345    {
346    }
347
348    function addRegion($region)
349    {
350        array_push($this->regions_, $region->getID());
351    }
352
353    function addSystem($system)
354    {
355        array_push($this->systems_, $system->getID());
356    }
357
358    function addGroupBy($groupby)
359    {
360        array_push($this->groupby_, $groupby);
361    }
362
363    function setPageSplitter($pagesplitter)
364    {
365        if (isset($_GET['page'])) $page = $_GET['page'];
366        else $page = 1;
367        $this->plimit_ = $pagesplitter->getSplit();
368        $this->poffset_ = ($page * $this->plimit_) - $this->plimit_;
369        // echo $this->offset_;
370        // echo $this->limit_;
371    }
372
373    function setWeek($weekno)
374    {
375        $this->timeframe_ .= " and date_format( kll.kll_timestamp, \"%u\" ) = ";
376        $this->timeframe_ .= $weekno;
377    }
378
379    function setYear($yearno)
380    {
381        $this->timeframe_ .= " and date_format( kll.kll_timestamp, \"%Y\" ) = ";
382        $this->timeframe_ .= $yearno;
383    }
384
385    function setStartWeek($weekno)
386    {
387        $this->timeframe_ .= " and date_format( kll.kll_timestamp, \"%u\" ) >= ";
388        $this->timeframe_ .= $weekno;
389    }
390
391    function setStartDate($timestamp)
392    {
393        $this->timeframe_ .= " and kll.kll_timestamp >= '" . $timestamp . "'";
394    }
395
396    function setEndDate($timestamp)
397    {
398        $this->timeframe_ .= " and kll.kll_timestamp <= '" . $timestamp . "'";
399    }
400
401    function setRelated($killid)
402    {
403        $this->related_ = $killid;
404    }
405
406    function setLimit($limit)
407    {
408        $this->limit_ = $limit;
409    }
410
411    function setOrderBy($orderby)
412    {
413        $this->orderby_ = $orderby;
414    }
415
416    function getCount()
417    {
418        $this->execQuery();
419        return $this->qry_->recordCount();
420    }
421
422    function getRealCount()
423    {
424        $this->execQuery();
425        return $this->qry_->recordCount();
426    }
427
428    function getISK()
429    {
430        $this->execQuery();
431        return $this->killisk_;
432    }
433
434    function getPoints()
435    {
436        return $this->killpoints_;
437    }
438
439    function rewind()
440    {
441        $this->qry_->rewind();
442        $this->killcounter_ = 0;
443    }
444
445    function setPodsNoobShips($flag)
446    {
447        if (!$flag)
448        {
449            array_push($this->exclude_scl_, 2);
450            array_push($this->exclude_scl_, 3);
451            array_push($this->exclude_scl_, 11);
452        }
453    }
454
455    function setOrdered($flag)
456    {
457        $this->ordered_ = $flag;
458    }
459}
460?>
Note: See TracBrowser for help on using the browser.