root/dev/common/includes/class.kill.php @ 419

Revision 419, 36.2 KB (checked in by kovell, 12 years ago)

Fixes: some php4 errors fixed. The great commenting project continues.

Line 
1<?php
2require_once('common/includes/class.item.php');
3require_once('common/includes/class.corp.php');
4require_once('common/includes/class.alliance.php');
5require_once('common/includes/class.ship.php');
6require_once('common/includes/class.system.php');
7require_once('common/includes/class.pilot.php');
8//require_once('common/includes/class.killlist.php');
9require_once('common/includes/class.itemlist.php');
10require_once('common/includes/class.cache.php');
11require_once('common/includes/class.summary.php');
12
13class Kill
14{
15        function Kill($id = 0, $external = false)
16        {
17                if($id && $external)
18                {
19                        $qry = new DBQuery();
20                        $qry->execute("SELECT kll_id FROM kb3_kills WHERE kll_external_id = ".$id);
21                        if($qry->recordCount())
22                        {
23                                $result = $qry->getRow();
24                                $this->id_ = $result['kll_id'];
25                                $this->externalid_ = $id;
26                        }
27                        else
28                        {
29                                $this->id_ = 0;
30                                $this->external_id = 0;
31                        }
32                }
33                else
34                {
35                        $this->id_ = $id;
36                        $this->externalid_ = 0;
37                }
38                $this->involvedparties_ = array();
39                $this->destroyeditems_ = array();
40                $this->droppeditems_ = array();
41                $this->fullinvolved_ = false;
42        }
43
44        function set($var, $value)
45        {
46                $this->$var = $value;
47        }
48
49        function getID()
50        {
51                return $this->id_;
52        }
53
54        function getExternalID()
55        {
56                if($this->externalid_) return $this->externalid_;
57                $this->execQuery();
58                return $this->externalid_;
59        }
60
61        function getTimeStamp()
62        {
63                $this->execQuery();
64                return $this->timestamp_;
65        }
66
67        function getVictimName()
68        {
69                $this->execQuery();
70                return $this->victimname_;
71        }
72
73        function getVictimID()
74        {
75                $this->execQuery();
76                return $this->victimid_;
77        }
78
79        function getVictimPortrait($size = 32)
80        {
81                $this->execQuery();
82                $plt = new Pilot($this->victimid_);
83                return $plt->getPortraitURL($size);
84        }
85
86        function getVictimCorpID()
87        {
88                $this->execQuery();
89                return $this->victimcorpid_;
90        }
91
92        function getVictimCorpName()
93        {
94                $this->execQuery();
95                return $this->victimcorpname_;
96        }
97
98        function getVictimAllianceName()
99        {
100                $this->execQuery();
101                return $this->victimalliancename_;
102        }
103
104        function getVictimFactionName()
105        {
106        $this->execQuery();
107        if ($this->getIsVictimFaction())
108                {
109                        return $this->victimalliancename_;
110                }
111                else
112                {
113                        return "NONE";
114                }
115        }
116
117        function getVictimAllianceID()
118        {
119                $this->execQuery();
120                return $this->victimallianceid_;
121        }
122
123        function getVictimShip()
124        {
125                $this->execQuery();
126                return $this->victimship_;
127        }
128
129        function getSystem()
130        {
131                $this->execQuery();
132                return $this->solarsystem_;
133        }
134
135        function getFBPilotID()
136        {
137                $this->execQuery();
138                if (!$this->fbpilotid_) return "null";
139                else return $this->fbpilotid_;
140        }
141
142        function getFBPilotName()
143        {
144                $this->execQuery();
145                return $this->fbpilotname_;
146        }
147
148        function getFBCorpID()
149        {
150                $this->execQuery();
151                if (!$this->fbcorpid_) return "null";
152                else return $this->fbcorpid_;
153        }
154
155        function getFBCorpName()
156        {
157                $this->execQuery();
158                return $this->fbcorpname_;
159        }
160
161        function getFBAllianceID()
162        {
163                $this->execQuery();
164                if (!$this->fballianceid_) return "null";
165                else return $this->fballianceid_;
166        }
167
168        function getFBAllianceName()
169        {
170                $this->execQuery();
171                return $this->fballiancename_;
172        }
173
174        function getISKLoss()
175        {
176                $this->execQuery();
177                return $this->iskloss_;
178        }
179        function getKillPoints()
180        {
181                $this->execQuery();
182                return $this->killpoints_;
183        }
184
185        function getSolarSystemName()
186        {
187                return $this->solarsystemname_;
188        }
189
190        function getSolarSystemSecurity()
191        {
192                return $this->solarsystemsecurity_;
193        }
194
195        function getVictimShipName()
196        {
197                return $this->victimshipname_;
198        }
199
200        function getVictimShipExternalID()
201        {
202                return $this->victimshipexternalid_;
203        }
204
205        function getVictimShipClassName()
206        {
207                return $this->victimshipclassname_;
208        }
209
210        function getVictimShipValue()
211        {
212                return $this->victimshipvalue_;
213        }
214
215        function getVictimShipImage($size)
216        {
217                return IMG_URL."/ships/".$size."_".$size."/".$this->victimshipexternalid_.".png";
218        }
219
220        function getVictimShipValueIndicator()
221        {
222        // value is now raw
223                $value = $this->getVictimShipValue()/1000000;
224
225                if ($value >= 0 && $value <= 1)
226                        $color = 'gray';
227                elseif ($value > 1 && $value <= 15)
228                        $color = 'blue';
229                elseif ($value > 15 && $value <= 25)
230                        $color = 'green';
231                elseif ($value > 25 && $value <= 40)
232                        $color = 'yellow';
233                elseif ($value > 40 && $value <= 80)
234                        $color = 'red';
235                elseif ($value > 80 && $value <= 250)
236                        $color = 'orange';
237                elseif ($value > 250)
238                        $color = 'purple';
239
240                return IMG_URL.'/ships/ship-'.$color.'.gif';
241        }
242        //! Check if the victim is in a Faction.
243        function getIsVictimFaction()
244        {
245        $this->execQuery();
246                $factions = array("Amarr Empire", "Minmatar Republic", "Caldari State", "Gallente Federation");
247
248                return (in_array($this->victimalliancename_, $factions));
249        }
250
251
252        function getRawMail()
253        {
254                if (config::get('km_cache_enabled') && file_exists(config::get('km_cache_dir')."/".$this->getID().".txt"))
255                {
256                        return file_get_contents(config::get('km_cache_dir')."/".$this->getID().".txt");
257                }
258
259                $this->execQuery();
260                if ($this->isClassified())
261                {
262                        return 'Killmail not yet available, try again in '.round($this->getClassifiedTime()/3600, 2).' hrs.';
263                }
264
265                $ship = $this->getVictimShip();
266                $shipclass = $ship->getClass();
267
268                $mail .= substr(str_replace('-', '.' , $this->getTimeStamp()), 0, 16)."\r\n\r\n";
269                if ( $shipclass->getID() == 35 ) // Starbase (so this is a POS mail)
270                {
271                        $mail .= "Corp: ".$this->getVictimCorpName()."\r\n";
272                        if($this->getIsVictimFaction()) $mail .= "Alliance: NONE\r\n";
273                        else $mail .= "Alliance: ".$this->getVictimAllianceName()."\r\n";
274                        $mail .= "Faction: ".$this->getVictimFactionName()."\r\n";
275                        //$ship = $this->getVictimShip();
276                        $mail .= "Destroyed: ".$ship->getName()."\r\n";
277                        $mail .= "Moon: ".$this->getVictimName()."\r\n";
278                        $system = $this->getSystem();
279                        $mail .= "System: ".$system->getName()."\r\n";
280                        $mail .= "Security: ".$system->getSecurity(true)."\r\n";
281                        $mail .= "Damage Taken: ".$this->VictimDamageTaken."\r\n\r\n";
282                        $mail .= "Involved parties:\r\n\r\n";
283                }
284                else
285                {
286                        $mail .= "Victim: ".$this->getVictimName()."\r\n";
287                        $mail .= "Corp: ".$this->getVictimCorpName()."\r\n";
288                        if($this->getIsVictimFaction()) $mail .= "Alliance: NONE\r\n";
289                        else $mail .= "Alliance: ".$this->getVictimAllianceName()."\r\n";
290                        $mail .= "Faction: ".$this->getVictimFactionName()."\r\n";
291                        //$ship = $this->getVictimShip();
292                        $mail .= "Destroyed: ".$ship->getName()."\r\n";
293                        $system = $this->getSystem();
294                        $mail .= "System: ".$system->getName()."\r\n";
295                        $mail .= "Security: ".$system->getSecurity(true)."\r\n";
296                        $mail .= "Damage Taken: ".$this->VictimDamageTaken."\r\n\r\n";
297                        $mail .= "Involved parties:\r\n\r\n";
298                }
299
300                foreach ($this->involvedparties_ as $inv)
301                {
302                        $pilot = new Pilot($inv->getPilotID());
303                        $corp = new Corporation($inv->getCorpID());
304                        $alliance = new Alliance($inv->getAllianceID());
305
306                        $weapon = $inv->getWeapon();
307                        $ship = $inv->getShip();
308                        if ($pilot->getName() == $weapon->getName())
309                        {
310                                $name = $pilot->getName()." / ".$corp->getName();
311                        }
312                        else
313                        {
314                                $name = $pilot->getName();
315                        }
316
317                        $mail .= "Name: ".$name;
318                        if ($pilot->getID() == $this->getFBPilotID())
319                        {
320                                $mail .= " (laid the final blow)";
321                        }
322                        $mail .= "\r\n";
323
324                        if ($pilot->getName() != $weapon->getName())
325                        {
326                                $mail .= "Security: ".$inv->getSecStatus()."\r\n";
327                                $mail .= "Corp: ".$corp->getName()."\r\n";
328                                if ($alliance->isFaction())
329                                {
330                                        $mail .= "Alliance: NONE\r\n";
331                                        $mail .= "Faction: ".$alliance->getName()."\r\n";
332                                }
333                                else
334                                {
335                                        $mail .= "Alliance: ".$alliance->getName()."\r\n";
336                                        $mail .= "Faction: NONE\r\n";
337                                }
338                                $mail .= "Ship: ".$ship->getName()."\r\n";
339                                $mail .= "Weapon: ".$weapon->getName()."\r\n";
340                                $mail .= "Damage Done: ".$inv->dmgdone_."\r\n";
341                        }
342                        else
343                        {
344                                $mail .= "Damage Done: ".$inv->dmgdone_."\r\n";
345                        }
346                        $mail .= "\r\n";
347                }
348
349                if (count($this->destroyeditems_) > 0)
350                {
351                        $mail .= "\r\nDestroyed items:\r\n\r\n";
352
353                        foreach($this->destroyeditems_ as $destroyed)
354                        {
355                                $item = $destroyed->getItem();
356                                $mail .= $item->getName();
357                                if ($destroyed->getQuantity() > 1)
358                                {
359                                // if the option is enabled and the item is fitted then split it up
360                                // this is aworkaround for the lazy parser of griefwatch
361                                        if (config::get('kill_splitfit') && $destroyed->getQuantity() < 9 && ($destroyed->getLocationID() == 1
362                                                || $destroyed->getLocationID() == 2 || $destroyed->getLocationID() == 3))
363                                        {
364                                                for ($i = $destroyed->getQuantity(); $i > 1; $i--)
365                                                {
366                                                        $mail .= "\r\n".$item->getName();
367                                                }
368
369                                        }
370                                        else
371                                        {
372                                                $mail .= ", Qty: ".$destroyed->getQuantity();
373                                        }
374                                }
375                                if ($destroyed->getLocationID() == 4) // cargo
376                                        $mail .= " (Cargo)";
377                                if ($destroyed->getLocationID() == 6) // drone
378                                        $mail .= " (Drone Bay)";
379                                $mail .= "\r\n";
380                        }
381                }
382
383                if (count($this->droppeditems_) > 0)
384                {
385                        $mail .= "\r\nDropped items:\r\n\r\n";
386
387                        foreach($this->droppeditems_ as $dropped)
388                        {
389                                $item = $dropped->getItem();
390                                $mail .= $item->getName();
391                                if ($dropped->getQuantity() > 1)
392                                {
393                                // if the option is enabled and the item is fitted then split it up
394                                // this is aworkaround for the lazy parser of griefwatch
395                                        if (config::get('kill_splitfit') && $dropped->getQuantity() < 9 && ($dropped->getLocationID() == 1
396                                                || $dropped->getLocationID() == 2 || $dropped->getLocationID() == 3))
397                                        {
398                                                for ($i = $dropped->getQuantity(); $i > 1; $i--)
399                                                {
400                                                        $mail .= "\r\n".$item->getName();
401                                                }
402
403                                        }
404                                        else
405                                        {
406                                                $mail .= ", Qty: ".$dropped->getQuantity();
407                                        }
408                                }
409                                if ($dropped->getLocationID() == 4) // cargo
410                                        $mail .= " (Cargo)";
411                                if ($dropped->getLocationID() == 6) // drone
412                                        $mail .= " (Drone Bay)";
413                                $mail .= "\r\n";
414                        }
415                }
416
417                if (config::get('km_cache_enabled')) file_put_contents(config::get('km_cache_dir')."/".$this->getID().".txt", $mail);
418
419                return $mail;
420        }
421
422        function getDupe($checkonly = false)
423        {
424                if (!$checkonly)
425                {
426                        $this->execQuery();
427                }
428                $dupe = 0;
429                $qry = new DBQuery(true);
430                if (!$this->getFBPilotID() || !$this->victimid_)
431                        return 0;
432                $qry->execute("select kll_id
433                    from kb3_kills
434                    where kll_timestamp ='".$this->timestamp_."'
435                    and kll_victim_id = ".$this->victimid_."
436                    and kll_ship_id = ".$this->victimship_->getID()."
437                    and kll_system_id = ".$this->solarsystem_->getID()."
438                    and kll_fb_plt_id = ".$this->getFBPilotID()."
439                    and kll_id != ".$this->id_);
440
441                $row = $qry->getRow();
442                if ($row)
443                        return $row['kll_id'];
444                else
445                        return 0;
446        }
447
448        function execQuery()
449        {
450                if (!$this->timestamp_)
451                {
452                        $qry = new DBQuery();
453
454                        $this->qry_ = new DBQuery();
455                        $this->sql_ = "select kll.kll_id, kll.kll_timestamp, plt.plt_name,
456                          crp.crp_name, ali.all_name, ali.all_id, kll.kll_ship_id,
457                          kll.kll_system_id, kll.kll_ship_id, kll.kll_external_id,
458                          kll.kll_victim_id, plt.plt_externalid, kll.kll_isk_loss,
459                          kll.kll_crp_id, kll.kll_points, kll.kll_isk_loss,
460                          fbplt.plt_id as fbplt_id,
461                          fbplt.plt_externalid as fbplt_externalid,
462                          fbcrp.crp_id as fbcrp_id,
463                          fbali.all_id as fbali_id,
464                          fbplt.plt_name as fbplt_name,
465                          fbcrp.crp_name as fbcrp_name,
466                          fbali.all_name as fbali_name,
467                          kll_dmgtaken
468                     from kb3_kills kll, kb3_pilots plt, kb3_corps crp,
469                          kb3_alliances ali, kb3_alliances fbali, kb3_corps fbcrp,
470                          kb3_pilots fbplt, kb3_inv_detail fb
471                    where kll.kll_id = '".$this->id_."'
472                      and plt.plt_id = kll.kll_victim_id
473                      and crp.crp_id = kll.kll_crp_id
474                      and ali.all_id = kll.kll_all_id
475                                          and fb.ind_kll_id = kll.kll_id
476                                          and fb.ind_plt_id = kll.kll_fb_plt_id
477                      and fbali.all_id = fb.ind_all_id
478                      and fbcrp.crp_id = fb.ind_crp_id
479                      and fbplt.plt_id = kll.kll_fb_plt_id";
480
481                        $this->qry_->execute($this->sql_);
482                        $row = $this->qry_->getRow();
483                        if (!$row)
484                        {
485                                $this->valid_ = false;
486                                return false;
487                        }
488                        else
489                        {
490                                $this->valid_ = true;
491                        }
492
493                        $this->setTimeStamp($row['kll_timestamp']);
494                        $this->setSolarSystem(new SolarSystem($row['kll_system_id']));
495                        $this->setVictimID($row['kll_victim_id']);
496                        $this->setVictimName($row['plt_name']);
497                        $this->setVictimCorpID($row['kll_crp_id']);
498                        $this->setVictimCorpName($row['crp_name']);
499                        $this->setVictimAllianceID($row['all_id']);
500                        $this->setVictimAllianceName($row['all_name']);
501                        $this->setVictimShip(new Ship($row['kll_ship_id']));
502                        $this->setFBPilotID($row['fbplt_id']);
503                        $this->setFBPilotName($row['fbplt_name']);
504                        $this->setFBCorpID($row['fbcrp_id']);
505                        $this->setFBCorpName($row['fbcrp_name']);
506                        $this->setFBAllianceID($row['fbali_id']);
507                        $this->setFBAllianceName($row['fbali_name']);
508                        $this->setKillPoints($row['kll_points']);
509                        $this->setExternalID($row['kll_external_id']);
510                        $this->setISKLoss($row['kll_isk_loss']);
511                        $this->plt_ext_ = $row['plt_externalid'];
512                        $this->fbplt_ext_ = $row['fbplt_externalid'];
513                        $this->VictimDamageTaken = $row['kll_dmgtaken'];
514
515                        // involved
516                        if($this->fullinvolved_)
517                        {
518                                $sql = "select ind_plt_id, ind_crp_id, ind_all_id, ind_sec_status,
519                                        ind_shp_id, ind_wep_id, typeName, ind_dmgdone,
520                                        shp_id, shp_name, shp_externalid, shp_class, scl_class,
521                                        plt_name, plt_externalid, crp_name, all_name
522                                        from kb3_inv_detail
523                                        join kb3_pilots on ind_plt_id = plt_id
524                                        join kb3_corps on ind_crp_id = crp_id
525                                        join kb3_alliances on ind_all_id = all_id
526                                        join kb3_ships on ind_shp_id = shp_id
527                                        join kb3_ship_classes on shp_class = scl_id
528                                        join kb3_invtypes on ind_wep_id = typeID
529                                        where ind_kll_id = ".$this->getID()."
530                                        order by ind_order";
531
532                                $qry->execute($sql) or die($qry->getErrorMsg());
533                                while ($row = $qry->getRow())
534                                {
535                                        $pilot = new Pilot($row['ind_plt_id']);
536                                        $pilot->externalid_ = $row['plt_externalid'];
537                                        $pilot->name_ = $row['plt_name'];
538                                        $pilot->corp_ = $row['ind_crp_id'];
539
540                                        $corp = new Corporation($row['ind_crp_id']);
541                                        $corp->name_ = $row['crp_name'];
542                                        $corp->alliance_ = $row['ind_all_id'];
543
544                                        $alliance = new Alliance($row['ind_all_id']);
545                                        $alliance->name_ = $row['all_name'];
546
547                                        $ship = new Ship($row['shp_id']);
548                                        $ship->externalid_ = $row['shp_externalid'];
549                                        $ship->shipname_ = $row['shp_name'];
550
551                                        $ship->shipclass_ = new ShipClass($row['shp_class']);
552                                        $ship->shipclass_->name_ = $row['scl_class'];
553                                       
554                                        $weapon = new Item($row['ind_wep_id']);
555                                        $weapon->row_['typeName'] = $row['typeName'];
556                                        $weapon->row_['typeID'] = $row['ind_wep_id'];
557                                        $weapon->row_['itm_externalid'] = $row['ind_wep_id'];
558                                       
559                                        $involved = new DetailedInv($pilot,
560                                                $row['ind_sec_status'],
561                                                $corp,
562                                                $alliance,
563                                                $ship,
564                                                $weapon);
565                                        $involved->dmgdone_ = $row['ind_dmgdone'];
566                                        array_push($this->involvedparties_, $involved);
567                                }
568                        }
569                        else
570                        {
571                                $sql = "select ind_plt_id, ind_crp_id, ind_all_id, ind_sec_status,
572                                        ind_shp_id, ind_wep_id, ind_dmgdone
573                                        from kb3_inv_detail
574                                        where ind_kll_id = ".$this->getID()."
575                                        order by ind_order";
576
577                                $qry->execute($sql) or die($qry->getErrorMsg());
578                                while ($row = $qry->getRow())
579                                {
580                                        $involved = new InvolvedParty($row['ind_plt_id'],
581                                                $row['ind_crp_id'],
582                                                $row['ind_all_id'],
583                                                $row['ind_sec_status'],
584                                                new Ship($row['ind_shp_id']),
585                                                new Item($row['ind_wep_id']));
586                                        $involved->dmgdone_ = $row['ind_dmgdone'];
587                                        array_push($this->involvedparties_, $involved);
588                                }
589                        }
590                        $destroyedlist = new ItemList(null, true);
591                        $destroyedlist->addKillDestroyed($this->id_);
592                        while($item = $destroyedlist->getItem())
593                        {
594                                $destroyed = new DestroyedItem($item,
595                                        $item->row_['itd_quantity'],
596                                        $item->row_['itl_location'],
597                                        $item->row_['itd_itl_id']);
598                                array_push($this->destroyeditems_, $destroyed);
599                        }
600                        $droppedlist = new ItemList(null, true);
601                        $droppedlist->addKillDropped($this->id_);
602                        while($item = $droppedlist->getItem())
603                        {
604                                $dropped = new DroppedItem($item,
605                                        $item->row_['itd_quantity'],
606                                        $item->row_['itl_location'],
607                                        $item->row_['itd_itl_id']);
608                                array_push($this->droppeditems_, $dropped);
609                        }
610                }
611        }
612
613        function isClassified()
614        {
615                if (config::get('kill_classified'))
616                {
617                        if (user::role('classified_see'))
618                        {
619                                return false;
620                        }
621
622                        $offset = config::get('kill_classified')*3600;
623                        if (config::get('date_gmtime'))
624                        {
625                                $time = time()-date('Z');
626                        }
627                        else
628                        {
629                                $time = time();
630                        }
631                        if (strtotime($this->timestamp_) > $time-$offset)
632                        {
633                                return true;
634                        }
635                }
636                return false;
637        }
638
639        function getClassifiedTime()
640        {
641                if (config::get('kill_classified'))
642                {
643                        $offset = config::get('kill_classified')*3600;
644                        if (config::get('date_gmtime'))
645                        {
646                                $time = time()-date('Z');
647                        }
648                        else
649                        {
650                                $time = time();
651                        }
652                        if (strtotime($this->timestamp_) > $time-$offset)
653                        {
654                                return ($offset-$time+strtotime($this->timestamp_));
655                        }
656                }
657                return 0;
658        }
659
660        function getInvolvedPartyCount()
661        {
662                if(isset($this->involvedcount_)) return $this->involvedcount_;
663                $qry = new DBQuery();
664                $qry->execute("select max(ind_order)+1 inv from kb3_inv_detail where ind_kll_id = ". $this->id_);
665                $result = $qry->getRow();
666                $this->involvedcount_ = $result['inv'];
667                return $result['inv'];
668        }
669
670        // Set the number of involved parties - used by killlist
671        function setInvolvedPartyCount($invcount = 0)
672        {
673                $this->involvedcount_ = $invcount;
674        }
675
676        function setDetailedInvolved()
677        {
678                $this->fullinvolved_ = true;
679        }
680        function exists()
681        {
682                $this->execQuery();
683                return $this->valid_;
684        }
685
686        //Count all kills by board owner related to this kill
687        function relatedKillCount()
688        {
689                if($this->relatedkillcount_) return $this->relatedkillcount_;
690                $sql="SELECT COUNT(kll.kll_id) AS kills FROM kb3_kills kll WHERE ";
691                $sql.="kll.kll_timestamp <= '".(date('Y-m-d H:i:s',strtotime($this->timestamp_) + 60 * 60))."'
692                                                   AND kll.kll_timestamp >=
693                                                           '".(date('Y-m-d H:i:s',strtotime($this->timestamp_) - 60 * 60))."'
694                                                   AND kll.kll_system_id = ".$this->solarsystem_->getID();
695                if(ALLIANCE_ID <>0)
696                {
697                        $sql .=" AND EXISTS (SELECT 1 FROM kb3_inv_detail ind".
698                                " WHERE ( ind.ind_all_id = ".ALLIANCE_ID." AND kll.kll_id = ind.ind_kll_id".
699                                " AND ind.ind_all_id != kll.kll_all_id ) LIMIT 1)";
700                }
701                else if(CORP_ID <>0)
702                {
703                        $sql .=" AND EXISTS (SELECT 1 FROM kb3_inv_detail".
704                                " WHERE ( ind_crp_id = ".CORP_ID."  AND kll.kll_id = ind_kll_id".
705                                " AND ind_crp_id != kll.kll_crp_id ) LIMIT 1) ";
706                }
707                else if(PILOT_ID <>0)
708                {
709                        $sql .=" AND EXISTS (SELECT 1 FROM kb3_inv_detail".
710                                " WHERE ( ind_plt_id = ".PILOT_ID."  AND kll.kll_id = ind_kll_id".
711                                " AND ind_plt_id != kll.kll_victim_id ) LIMIT 1) ";
712                }
713                $sql .= "-- related kill count";
714                $qry = new DBQuery();
715                if(!$qry->execute($sql)) return 0;
716                $res=$qry->getRow();
717                $this->relatedkillcount_ = $res['kills'];
718                return $this->relatedkillcount_;
719        }
720
721        //Count all losses by board owner related to this kill
722        function relatedLossCount()
723        {
724                if($this->relatedlosscount_) return $this->relatedlosscount_;
725                $sql="SELECT count(kll.kll_id) as losses FROM kb3_kills kll ";
726                $sql.="WHERE kll.kll_system_id = ".$this->solarsystem_->getID().
727                        " AND kll.kll_timestamp <= '".
728                                (date('Y-m-d H:i:s',strtotime($this->timestamp_) + 60 * 60)).
729                        "' AND kll.kll_timestamp >= '".
730                                (date('Y-m-d H:i:s',strtotime($this->timestamp_) - 60 * 60))."'";
731                if(ALLIANCE_ID <>0)
732                {
733                        $sql .="AND kll.kll_all_id = ".ALLIANCE_ID.
734                                " AND EXISTS (SELECT 1 FROM kb3_inv_detail ind".
735                                " WHERE ( kll.kll_id = ind.ind_kll_id".
736                                " AND ind.ind_all_id != ".ALLIANCE_ID." ) ) ";
737                }
738                else if(CORP_ID <>0)
739                {
740                        $sql .="AND kll_crp_id = ".CORP_ID."  AND".
741                                " EXISTS (SELECT 1 FROM kb3_inv_detail".
742                                " WHERE ( kll.kll_id = ind_kll_id".
743                                " AND ind_crp_id != ".CORP_ID." ) ) ";
744                }
745                else if(PILOT_ID <>0)
746                {
747                        $sql .="AND kll_victim_id = ".PILOT_ID." AND".
748                                " EXISTS (SELECT 1 FROM kb3_inv_detail".
749                                " WHERE ( kll.kll_id = ind_kll_id".
750                                " AND ind_plt_id != ".PILOT_ID." ) ) ";
751                }
752                $sql .= "-- related loss count";
753                $qry = new DBQuery();
754                if(!$qry->execute($sql)) return 0;
755                $res=$qry->getRow();
756                $this->relatedlosscount_ = $res['losses'];
757                return $this->relatedlosscount_;
758        }
759
760        function countComment($kll_id)
761        {
762                if(isset($this->commentcount_)) return $this->commentcount_;
763                $qry = new DBQuery();
764                $sql = "SELECT count(id) as comments FROM kb3_comments WHERE kll_id = '$kll_id'";
765                // return 0 if query fails. May be incorrect but is harmless here
766                if(!$qry->execute($sql)) return 0;
767                $result = $qry->getRow();
768                $this->commentcount_ = $result['comments'];
769                return $result['comments'];
770        }
771
772        // Set the number of comments - used by killlist
773        function setCommentCount($comcount = 0)
774        {
775                $this->commentcount_ = $comcount;
776        }
777
778        function setID($id)
779        {
780                $this->id_ = $id;
781        }
782
783        function setTimeStamp($timestamp)
784        {
785                $this->timestamp_ = $timestamp;
786        }
787
788        function setSolarSystem($solarsystem)
789        {
790                $this->solarsystem_ = $solarsystem;
791        }
792
793        function setSolarSystemName($solarsystemname)
794        {
795                $this->solarsystemname_ = $solarsystemname;
796        }
797
798        function setSolarSystemSecurity($solarsystemsecurity)
799        {
800                $this->solarsystemsecurity_ = $solarsystemsecurity;
801        }
802
803        function setExternalID($externalid)
804        {
805                if($externalid) $this->externalid_ = $externalid;
806                else $this->externalid_ = 0;
807        }
808       
809        function setVictim($victim)
810        {
811                $this->victim_ = $victim;
812        }
813
814        function setVictimID($victimid)
815        {
816                $this->victimid_ = $victimid;
817        }
818
819        function setVictimName($victimname)
820        {
821                $this->victimname_ = $victimname;
822        }
823
824        function setVictimCorpID($victimcorpid)
825        {
826                $this->victimcorpid_ = $victimcorpid;
827        }
828
829        function setVictimCorpName($victimcorpname)
830        {
831                $this->victimcorpname_ = $victimcorpname;
832        }
833
834        function setVictimAllianceID($victimallianceid)
835        {
836                $this->victimallianceid_ = $victimallianceid;
837        }
838
839        function setVictimAllianceName($victimalliancename)
840        {
841                $this->victimalliancename_ = $victimalliancename;
842        }
843
844        function setVictimShip($victimship)
845        {
846                $this->victimship_ = $victimship;
847        }
848
849        function setVictimShipName($victimshipname)
850        {
851                $this->victimshipname_ = $victimshipname;
852        }
853
854        function setVictimShipExternalID($victimshipexternalid)
855        {
856                $this->victimshipexternalid_ = $victimshipexternalid;
857        }
858
859        function setVictimShipClassName($victimshipclassname)
860        {
861                $this->victimshipclassname_ = $victimshipclassname;
862        }
863
864        function setVictimShipValue($victimshipvalue)
865        {
866                $this->victimshipvalue_ = $victimshipvalue;
867        }
868
869        function setFBPilotID($fbpilotid)
870        {
871                $this->fbpilotid_ = $fbpilotid;
872        }
873
874        function setFBPilotName($fbpilotname)
875        {
876                $npc = strpos($fbpilotname, "#");
877                if ($npc === false)
878                {
879                        $this->fbpilotname_ = $fbpilotname;
880                }
881                else
882                {
883                        $name = explode("#", $fbpilotname);
884                        $plt = new Item($name[2]);
885                        $this->fbpilotname_ = $plt->getName();
886                }
887        }
888
889        function setFBCorpID($fbcorpid)
890        {
891                $this->fbcorpid_ = $fbcorpid;
892        }
893
894        function setFBCorpName($fbcorpname)
895        {
896                $this->fbcorpname_ = $fbcorpname;
897        }
898
899        function setFBAllianceID($fballianceid)
900        {
901                $this->fballianceid_ = $fballianceid;
902        }
903
904        function setFBAllianceName($fballiancename)
905        {
906                $this->fballiancename_ = $fballiancename;
907        }
908        function setKillPoints($killpoints)
909        {
910                $this->killpoints_ = $killpoints;
911        }
912
913        function setISKLoss($isk)
914        {
915                $this->iskloss_ = $isk;
916        }
917
918        function calculateISKLoss()
919        {
920                $value = 0;
921                foreach($this->destroyeditems_ as $itd)
922                {
923                        $value += $itd->getValue() * $itd->getQuantity();
924                }
925                if(config::get('kd_droptototal'))
926                {
927                        foreach($this->droppeditems_ as $itd)
928                        {
929                                $value += $itd->getValue() * $itd->getQuantity();
930                        }
931                }
932                $value += $this->victimship_->getPrice();
933                $this->iskloss_ = $value;
934                return $value;
935        }
936
937        function calculateKillPoints()
938        {
939                $ship = $this->getVictimShip();
940                $shipclass = $ship->getClass();
941                $vicpoints = $shipclass->getPoints();
942                $maxpoints = round($vicpoints * 1.2);
943
944                foreach ($this->involvedparties_ as $inv)
945                {
946                        $shipinv = $inv->getShip();
947                        $shipclassinv = $shipinv->getClass();
948                        $invpoints += $shipclassinv->getPoints();
949                }
950
951                $gankfactor = $vicpoints / ($vicpoints + $invpoints);
952                $points = ceil($vicpoints * ($gankfactor / 0.75));
953
954                if ($points > $maxpoints) $points = $maxpoints;
955
956                $points = round($points, 0);
957                return $points;
958        }
959
960        function add($id = null)
961        {
962                if (!$this->solarsystem_->getID())
963                {
964                        echo 'INTERNAL ERROR; SOLARSYSTEM NOT FOUND; PLEASE CONTACT A DEV WITH THIS MESSAGE<br/>';
965                        var_dump($this->solarsystem_);
966                        var_dump($this->solarsystemname_);
967                        return 0;
968                }
969
970                $dupe = $this->getDupe(true);
971                if ($dupe == 0)
972                {
973                        $this->realadd();
974                }
975                elseif (config::get('readd_dupes'))
976                {
977                        $this->dupeid_ = $dupe;
978                        $this->id_ = $dupe;
979                        $this->remove(false);
980                        $this->realadd($dupe);
981                        $this->id_ = -1;
982                }
983                else
984                {
985                        $this->dupeid_ = $dupe;
986                        $this->id_ = -1;
987                }
988                return $this->id_;
989        }
990
991        function realadd($id = null)
992        {
993                if ( $this->timestamp_ == "" || !$this->victimid_ || !$this->victimship_->getID() || !$this->solarsystem_->getID() ||
994                !$this->victimallianceid_ || !$this->victimcorpid_ || !$this->getFBAllianceID() || !$this->getFBCorpID() ||
995                !$this->getFBPilotID() ) return 0;
996                if ($id == null)
997                {
998                        $qid = 'null';
999                }
1000                else
1001                {
1002                        $qid = $id;
1003                }
1004                if (!$this->dmgtaken)
1005                {
1006                        $this->dmgtaken = 0;
1007                }
1008
1009                $qry = new DBQuery();
1010                $sql = "INSERT INTO kb3_kills
1011            (kll_id , kll_timestamp , kll_victim_id , kll_all_id , kll_crp_id , kll_ship_id , kll_system_id , kll_fb_plt_id , kll_points , kll_dmgtaken, kll_external_id, kll_isk_loss)
1012            VALUES (".$qid.",
1013                    date_format('".$this->timestamp_."', '%Y.%m.%d %H:%i:%s'),
1014            ".$this->victimid_.",
1015            ".$this->victimallianceid_.",
1016            ".$this->victimcorpid_.",
1017            ".$this->victimship_->getID().",
1018            ".$this->solarsystem_->getID().",
1019            ".$this->getFBPilotID().",
1020            ".$this->calculateKillPoints().",
1021            ".$this->dmgtaken.", ";
1022                if($this->externalid_) $sql .= $this->externalid_.", ";
1023                else $sql .= "NULL, ";
1024        $sql .= $this->calculateISKLoss()." )";
1025                $qry->autocommit(false);
1026                if(!$qry->execute($sql))
1027                {
1028                        $qry->rollback();
1029                        $qry->autocommit(true);
1030                        //If the query is causing errors here there's no point going on
1031                        return false;
1032                }
1033
1034                if ($id)
1035                {
1036                        $this->id_ = $id;
1037                }
1038                else
1039                {
1040                        $this->id_ = $qry->getInsertID();
1041                }
1042                if(!$this->id_)
1043                {
1044                        $qry->rollback();
1045                        $qry->autocommit(true);
1046                        return false;
1047                }
1048                // involved
1049                $order = 0;
1050                $invall = array();
1051                $invcrp = array();
1052                $invplt = array();
1053                $involveddsql = 'insert into kb3_inv_detail
1054                    (ind_kll_id, ind_plt_id, ind_sec_status, ind_all_id, ind_crp_id, ind_shp_id, ind_wep_id, ind_order, ind_dmgdone )
1055                    values ';
1056                $notfirstd = false;
1057                foreach ($this->involvedparties_ as $inv)
1058                {
1059                        $ship = $inv->getShip();
1060                        $weapon = $inv->getWeapon();
1061                        if (!$inv->getPilotID() || $inv->getSecStatus() == "" || !$inv->getAllianceID() || !$inv->getCorpID() || !$ship->getID() || !$weapon->getID())
1062                        {
1063                                $this->remove();
1064                                return 0;
1065                        }
1066
1067                        if (!$inv->dmgdone_)
1068                        {
1069                                $inv->dmgdone_ = 0;
1070                        }
1071                        if($notfirstd) $involveddsql .= ", ";
1072                        $involveddsql .= "( ".$this->getID().", ".$inv->getPilotID().", '".$inv->getSecStatus()."', "
1073                                .$inv->getAllianceID().", ".$inv->getCorpID().", ".$ship->getID().", "
1074                                .$weapon->getID().", ".$order++.", ".$inv->dmgdone_.")";
1075                        $notfirstd = true;
1076
1077                }
1078                if($notfirstd && !$qry->execute($involveddsql))
1079                {
1080                        $qry->rollback();
1081                        $qry->autocommit(true);
1082                        return false;
1083                }
1084
1085                // destroyed
1086                $notfirstitd=false;
1087                $itdsql = "insert into kb3_items_destroyed (itd_kll_id, itd_itm_id, itd_quantity, itd_itl_id) values ";
1088                foreach ($this->destroyeditems_ as $dest)
1089                {
1090                        $item = $dest->getItem();
1091                        $loc_id = $dest->getLocationID();
1092                        if (!is_numeric($this->getID()) || !is_numeric($item->getID()) || !is_numeric($dest->getQuantity()) || !is_numeric($loc_id))
1093                        {
1094                                trigger_error('error with destroyed item.', E_USER_WARNING);
1095                                var_dump($dest);exit;
1096                                continue;
1097                        }
1098
1099                        if($notfirstitd) $itdsql .= ", ";
1100                        $itdsql .= "( ".$this->getID().", ".$item->getID().", ".$dest->getQuantity().", ".$loc_id." )";
1101                        $notfirstitd = true;
1102                }
1103                if($notfirstitd &&!$qry->execute($itdsql))
1104                {
1105                        $qry->rollback();
1106                        $qry->autocommit(true);
1107                        return false;
1108                }
1109
1110                // dropped
1111                $notfirstitd=false;
1112                $itdsql = "insert into kb3_items_dropped (itd_kll_id, itd_itm_id, itd_quantity, itd_itl_id) values ";
1113                foreach ($this->droppeditems_ as $dest)
1114                {
1115                        $item = $dest->getItem();
1116                        $loc_id = $dest->getLocationID();
1117                        if (!is_numeric($this->getID()) || !is_numeric($item->getID()) || !is_numeric($dest->getQuantity()) || !is_numeric($loc_id))
1118                        {
1119                                trigger_error('error with dropped item.', E_USER_WARNING);
1120                                var_dump($dest);exit;
1121                                continue;
1122                        }
1123
1124                        if($notfirstitd) $itdsql .= ", ";
1125                        $itdsql .= "( ".$this->getID().", ".$item->getID().", ".$dest->getQuantity().", ".$loc_id." )";
1126                        $notfirstitd = true;
1127                }
1128                if($notfirstitd &&!$qry->execute($itdsql))
1129                {
1130                        $qry->rollback();
1131                        $qry->autocommit(true);
1132                        return false;
1133                }
1134                //Update cache tables.
1135                allianceSummary::addKill($this);
1136                corpSummary::addKill($this);
1137                pilotSummary::addKill($this);
1138                $qry->autocommit(true);
1139                // call the event that we added this mail
1140                event::call('killmail_added', $this);
1141                cache::notifyKillAdded();
1142                return $this->id_;
1143        }
1144
1145        function remove($delcomments = true)
1146        {
1147                if (!$this->id_)
1148                        return;
1149
1150                event::call('killmail_delete', $this);
1151                allianceSummary::delKill($this);
1152                corpSummary::delKill($this);
1153                pilotSummary::delKill($this);
1154
1155                $qry = new DBQuery();
1156                $qry->execute("delete from kb3_kills where kll_id = ".$this->id_);
1157                $qry->execute("delete from kb3_inv_detail where ind_kll_id = ".$this->id_);
1158//              $qry->execute("delete from kb3_inv_all where ina_kll_id = ".$this->id_);
1159//              $qry->execute("delete from kb3_inv_crp where inc_kll_id = ".$this->id_);
1160//              $qry->execute("delete from kb3_inv_plt where inp_kll_id = ".$this->id_);
1161                $qry->execute("delete from kb3_items_destroyed where itd_kll_id = ".$this->id_);
1162                $qry->execute("delete from kb3_items_dropped where itd_kll_id = ".$this->id_);
1163                // Don't remove comments when readding a kill
1164                if ($delcomments)
1165                {
1166                        $qry->execute("delete from kb3_comments where kll_id = ".$this->id_);
1167                }
1168                allianceSummary::delKill($this);
1169                corpSummary::delKill($this);
1170                pilotSummary::delKill($this);
1171        }
1172
1173        function addInvolvedParty($involved)
1174        {
1175                array_push($this->involvedparties_, $involved);
1176        }
1177
1178        function addDestroyedItem($destroyed)
1179        {
1180                array_push($this->destroyeditems_, $destroyed);
1181        }
1182
1183        function addDroppedItem($dropped)
1184        {
1185                array_push($this->droppeditems_, $dropped);
1186        }
1187}
1188
1189class InvolvedParty
1190{
1191        function InvolvedParty($pilotid, $corpid, $allianceid, $secstatus, $ship, $weapon)
1192        {
1193                $this->pilotid_ = $pilotid;
1194                $this->corpid_ = $corpid;
1195                $this->allianceid_ = $allianceid;
1196                $this->secstatus_ = $secstatus;
1197                $this->ship_ = $ship;
1198                $this->weapon_ = $weapon;
1199        }
1200
1201        function getPilotID()
1202        {
1203                return $this->pilotid_;
1204        }
1205
1206        function getCorpID()
1207        {
1208                return $this->corpid_;
1209        }
1210
1211        function getAllianceID()
1212        {
1213                return $this->allianceid_;
1214        }
1215
1216        function getSecStatus()
1217        {
1218                return $this->secstatus_;
1219        }
1220
1221        function getShip()
1222        {
1223                return $this->ship_;
1224        }
1225
1226        function getWeapon()
1227        {
1228                return $this->weapon_;
1229        }
1230}
1231
1232class DestroyedItem
1233{
1234        function DestroyedItem($item, $quantity, $location, $locationID = null)
1235        {
1236                $this->item_ = $item;
1237                $this->quantity_ = $quantity;
1238                $this->location_ = $location;
1239                $this->locationID_ = $locationID;
1240        }
1241
1242        function getItem()
1243        {
1244                return $this->item_;
1245        }
1246
1247        function getQuantity()
1248        {
1249                if ($this->quantity_ == "") $this->quantity = 1;
1250                return $this->quantity_;
1251        }
1252        //! Deprecated function to support old mods.
1253        function getFormatttedValue()
1254        {
1255                return $this->getFormattedValue();
1256        }
1257        //! Return value formatted into millions or thousands.
1258        function getFormattedValue()
1259        {
1260                if (!isset($this->value))
1261                {
1262                        $this->getValue();
1263                }
1264                if ($this->value > 0)
1265                {
1266                        $value = $this->value * $this->getQuantity();
1267                        // Value Manipulation for prettyness.
1268                        if (strlen($value) > 6) // Is this value in the millions?
1269                        {
1270                                $formatted = round($value / 1000000, 2);
1271                                $formatted = number_format($formatted, 2);
1272                                $formatted = $formatted." M";
1273                        }
1274                        elseif (strlen($value) > 3) // 1000's ?
1275                        {
1276                                $formatted = round($value / 1000, 2);
1277
1278                                $formatted = number_format($formatted, 2);
1279                                $formatted = $formatted." K";
1280                        }
1281                        else
1282                        {
1283                                $formatted = number_format($value, 2);
1284                                $formatted = $formatted." isk";
1285                        }
1286                }
1287                else
1288                {
1289                        $formatted = "0 isk";
1290                }
1291                return $formatted;
1292        }
1293
1294        function getValue()
1295        {
1296                if ($this->value)
1297                {
1298                        return $this->value;
1299                }
1300                if ($this->item_->row_['itm_value'])
1301                {
1302                        $this->value = $this->item_->row_['itm_value'];
1303                        return $this->item_->row_['itm_value'];
1304                }
1305                elseif ($this->item_->row_['baseprice'])
1306                {
1307                        $this->value = $this->item_->row_['baseprice'];
1308                        return $this->item_->row_['baseprice'];
1309                }
1310                $this->value = 0;
1311                $qry = new DBQuery();
1312                $qry->execute("select basePrice, price
1313                                        from kb3_invtypes
1314                                        left join kb3_item_price on kb3_invtypes.typeID=kb3_item_price.typeID
1315                                        where kb3_invtypes.typeID='".$this->item_->getID()."'");
1316                if ($row = $qry->getRow())
1317                {
1318                        if ($row['price'])
1319                        {
1320                                $this->value = $row['price'];
1321                        }
1322                        else
1323                        {
1324                                $this->value = $row['basePrice'];
1325                        }
1326                }
1327                return $this->value;
1328
1329                //returns the value of an item
1330                $value = 0;                             // Set 0 value incase nothing comes back
1331                $id = $this->item_->getID(); // get Item ID
1332                $qry = new DBQuery();
1333                $qry->execute("select itm_value from kb3_items where itm_id= '".$id."'");
1334                $row = $qry->getRow();
1335                $value = $row['itm_value'];
1336                if ($value == '')
1337                {
1338                        $value = 0;
1339                }
1340                return $value;
1341        }
1342
1343        function getLocationID()
1344        {
1345                if(!is_null($this->locationID_)) return $this->locationID_;
1346                $id = false;
1347                if (strlen($this->location_) < 2)
1348                {
1349                        $id = $this->item_->getSlot();
1350                }
1351                else
1352                {
1353                        $qry = new DBQuery();
1354                        $qry->execute("select itl_id from kb3_item_locations where itl_location = '".$this->location_."'");
1355                        $row = $qry->getRow();
1356                        $id = $row['itl_id'];
1357                }
1358                return $id;
1359        }
1360}
1361
1362class DroppedItem extends DestroyedItem
1363{
1364        function DroppedItem($item, $quantity, $location, $locationID = null)
1365        {
1366                $this->item_ = $item;
1367                $this->quantity_ = $quantity;
1368                $this->location_ = $location;
1369                $this->locationID_ = $locationID;
1370        }
1371}
1372
1373class DetailedInv extends InvolvedParty
1374{
1375        function DetailedInv($pilot, $secstatus, $corp, $alliance, $ship, $weapon)
1376        {
1377                $this->pilot_ = $pilot;
1378                $this->secstatus_ = $secstatus;
1379                $this->corp_ = $corp;
1380                $this->alliance_ = $alliance;
1381                $this->ship_ = $ship;
1382                $this->weapon_ = $weapon;
1383        }
1384
1385        function getPilot()
1386        {
1387                return $this->pilot_;
1388        }
1389
1390        function getPilotID()
1391        {
1392                return $this->pilot_->getID();
1393        }
1394
1395        function getCorp()
1396        {
1397                return $this->corp_;
1398        }
1399
1400        function getCorpID()
1401        {
1402                return $this->corp_->getID();
1403        }
1404
1405        function getAlliance()
1406        {
1407                return $this->alliance_;
1408        }
1409
1410        function getAllianceID()
1411        {
1412                return $this->alliance_->getID();
1413        }
1414
1415}
1416?>
Note: See TracBrowser for help on using the browser.