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

Revision 137, 15.3 KB (checked in by exi, 14 years ago)

Pimped the syndication module.

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            if ($this->minkllid_)
191            {
192                $this->sql_ .= ' WHERE kll.kll_id > \''.$this->minkllid_.'\' ';
193            }
194
195            // group by
196            if ($this->groupby_) $this->sql_ .= " group by " . implode(",", $this->groupby_);
197            // order/limit
198            if ($this->ordered_)
199            {
200                if (!$this->orderby_) $this->sql_ .= " order by kll_timestamp desc";
201                else $this->sql_ .= " order by " . $this->orderby_;
202            }
203            if ($this->limit_) $this->sql_ .= " limit " . $this->offset_ . ", " . $this->limit_;
204            // echo '<p>'.$this->sql_."</p>";
205            $this->qry_->execute($this->sql_);
206        }
207    }
208
209    function getRow()
210    {
211        $this->execQuery();
212        if ($this->plimit_ && $this->killcounter_ >= $this->plimit_)
213        {
214            // echo $this->plimit_." ".$this->killcounter_;
215            return null;
216        }
217
218        $skip = $this->poffset_ - $this->killpointer_;
219        if ($skip > 0)
220        {
221            for ($i = 0; $i < $skip; $i++)
222            {
223                $this->killpointer_++;
224                $row = $this->qry_->getRow();
225            }
226        }
227
228        $row = $this->qry_->getRow();
229
230        return $row;
231    }
232
233    function getKill()
234    {
235        $this->execQuery();
236        if ($this->plimit_ && $this->killcounter_ >= $this->plimit_)
237        {
238            // echo $this->plimit_." ".$this->killcounter_;
239            return null;
240        }
241
242        $skip = $this->poffset_ - $this->killpointer_;
243        if ($skip > 0)
244        {
245            for ($i = 0; $i < $skip; $i++)
246            {
247                $this->killpointer_++;
248                $row = $this->qry_->getRow();
249            }
250        }
251
252        $row = $this->qry_->getRow();
253        if ($row)
254        {
255            $this->killcounter_++;
256            if ($row['scl_class'] != 2 && $row['scl_class'] != 3 && $row['scl_class'] != 11)
257                $this->realkillcounter_++;
258
259            global $config;
260            if ($config->getConfig('ship_values'))
261            {
262                if ($row['shp_value'])
263                {
264                    $row['scl_value'] = $row['shp_value'];
265                }
266            }
267
268            $this->killisk_ += $row['scl_value'] / 1000000;
269            $this->killpoints_ += $row['kll_points'];
270
271            $kill = new Kill($row['kll_id']);
272            $kill->setTimeStamp($row['kll_timestamp']);
273            $kill->setSolarSystemName($row['sys_name']);
274            $kill->setSolarSystemSecurity($row['sys_sec']);
275            $kill->setVictimName($row['plt_name']);
276            $kill->setVictimCorpName($row['crp_name']);
277            $kill->setVictimAllianceName($row['ali_name']);
278            $kill->setVictimShipName($row['shp_name']);
279            $kill->setVictimShipExternalID($row['shp_externalid']);
280            $kill->setVictimShipClassName($row['scl_class']);
281            $kill->setVictimShipValue(round($row['scl_value'] / 1000000, 2));
282            $kill->setFBPilotName($row['fbplt_name']);
283            $kill->setFBCorpName($row['fbcrp_name']);
284            $kill->setKillPoints($row['kll_points']);
285            return $kill;
286        }
287        else return null;
288    }
289
290    function getAllKills()
291    {
292        while ($this->getKill())
293        {
294        }
295        $this->rewind();
296    }
297
298    function addInvolvedPilot($pilot)
299    {
300        $this->inv_plt_ .= $pilot->getID() . ", ";
301        if ($this->inv_crp_ || $this->inv_all_)
302            $this->mixedinvolved_ = true;
303    }
304
305    function addInvolvedCorp($corp)
306    {
307        $this->inv_crp_ .= $corp->getID() . ", ";
308        if ($this->inv_plt_ || $this->inv_all_)
309            $this->mixedinvolved_ = true;
310    }
311
312    function addInvolvedAlliance($alliance)
313    {
314        $this->inv_all_ .= $alliance->getID() . ", ";
315        if ($this->inv_plt_ || $this->inv_crp_)
316            $this->mixedinvolved_ = true;
317    }
318
319    function addVictimPilot($pilot)
320    {
321        $this->vic_plt_ .= $pilot->getID() . ", ";
322        if ($this->vic_crp_ || $this->vic_all_)
323            $this->mixedvictims_ = true;
324    }
325
326    function addVictimCorp($corp)
327    {
328        $this->vic_crp_ .= $corp->getID() . ", ";
329        if ($this->vic_plt_ || $this->vic_all_)
330            $this->mixedvictims_ = true;
331    }
332
333    function addVictimAlliance($alliance)
334    {
335        $this->vic_all_ .= $alliance->getID() . ", ";
336        if ($this->vic_plt_ || $this->vic_crp_)
337            $this->mixedvictims_ = true;
338    }
339
340    function addVictimShipClass($shipclass)
341    {
342        array_push($this->vic_scl_id_, $shipclass->getID());
343    }
344
345    function addVictimShip($ship)
346    {
347    }
348
349    function addItemDestroyed($item)
350    {
351    }
352
353    function addRegion($region)
354    {
355        array_push($this->regions_, $region->getID());
356    }
357
358    function addSystem($system)
359    {
360        array_push($this->systems_, $system->getID());
361    }
362
363    function addGroupBy($groupby)
364    {
365        array_push($this->groupby_, $groupby);
366    }
367
368    function setPageSplitter($pagesplitter)
369    {
370        if (isset($_GET['page'])) $page = $_GET['page'];
371        else $page = 1;
372        $this->plimit_ = $pagesplitter->getSplit();
373        $this->poffset_ = ($page * $this->plimit_) - $this->plimit_;
374        // echo $this->offset_;
375        // echo $this->limit_;
376    }
377
378    function setWeek($weekno)
379    {
380        $this->timeframe_ .= " and date_format( kll.kll_timestamp, \"%u\" ) = ";
381        $this->timeframe_ .= $weekno;
382    }
383
384    function setYear($yearno)
385    {
386        $this->timeframe_ .= " and date_format( kll.kll_timestamp, \"%Y\" ) = ";
387        $this->timeframe_ .= $yearno;
388    }
389
390    function setStartWeek($weekno)
391    {
392        $this->timeframe_ .= " and date_format( kll.kll_timestamp, \"%u\" ) >= ";
393        $this->timeframe_ .= $weekno;
394    }
395
396    function setStartDate($timestamp)
397    {
398        $this->timeframe_ .= " and kll.kll_timestamp >= '" . $timestamp . "'";
399    }
400
401    function setEndDate($timestamp)
402    {
403        $this->timeframe_ .= " and kll.kll_timestamp <= '" . $timestamp . "'";
404    }
405
406    function setRelated($killid)
407    {
408        $this->related_ = $killid;
409    }
410
411    function setLimit($limit)
412    {
413        $this->limit_ = $limit;
414    }
415
416    function setOrderBy($orderby)
417    {
418        $this->orderby_ = $orderby;
419    }
420
421    function setMinKllID($id)
422    {
423        $this->timeframe_ = '';
424        $this->minkllid_ = $id;
425    }
426
427    function getCount()
428    {
429        $this->execQuery();
430        return $this->qry_->recordCount();
431    }
432
433    function getRealCount()
434    {
435        $this->execQuery();
436        return $this->qry_->recordCount();
437    }
438
439    function getISK()
440    {
441        $this->execQuery();
442        return $this->killisk_;
443    }
444
445    function getPoints()
446    {
447        return $this->killpoints_;
448    }
449
450    function rewind()
451    {
452        $this->qry_->rewind();
453        $this->killcounter_ = 0;
454    }
455
456    function setPodsNoobShips($flag)
457    {
458        if (!$flag)
459        {
460            array_push($this->exclude_scl_, 2);
461            array_push($this->exclude_scl_, 3);
462            array_push($this->exclude_scl_, 11);
463        }
464    }
465
466    function setOrdered($flag)
467    {
468        $this->ordered_ = $flag;
469    }
470}
471?>
Note: See TracBrowser for help on using the browser.