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

Revision 2, 12.5 KB (checked in by andrewgunn, 14 years ago)

Created "dev", "mods", and "stable" folders. "Dev" folder currently contains the base EVE-Killboard.net source code. The folder "original" should continue to hold the original code, and never be edited.

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