Changeset 353

Show
Ignore:
Timestamp:
10/21/08 08:42:44 (12 years ago)
Author:
beans
Message:

Parser fix from FriedRoadKill?

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • dev/common/includes/class.parser.php

    r339 r353  
    3434 
    3535        // Parser fix, since some killmails don't have a final blow, they would break the KB. 
    36         //On mails without final kill info the first name on the list becomes thefinal blow holder 
     36        //On mails without final blow info, the first name on the list becomes the final blow holder 
    3737        if (strpos($this->killmail_, 'laid the final blow') < 1) 
    3838        { 
     
    5252        $upper_limit =  count($victim); 
    5353         
    54         $victimname = "Unknown"; 
     54        $victimname = "Unknown"; //lovely default values 
    5555        $factionname = "None"; 
    5656        $alliancename = "None"; 
     
    6767            if(preg_match("/Victim: (.*)/", $victim[$counter], $matches))  
    6868            { 
    69                 $victimname = $matches[1]; 
     69                if($matches[1]) 
     70                    $victimname = $matches[1]; 
    7071            }  
    7172            elseif (preg_match("/Corp: (.*)/", $victim[$counter], $matches))  
    7273            { 
    73                 $corpname = $matches[1]; 
     74                 if($matches[1]) 
     75                    $corpname = $matches[1]; 
    7476            } 
    7577            elseif (preg_match("/Alliance: (.*)/", $victim[$counter], $matches))  
    7678            { 
    77                 $alliancename = $matches[1]; 
     79                if($matches[1]) 
     80                    $alliancename = $matches[1]; 
    7881            } 
    7982            elseif (preg_match("/Faction: (.*)/", $victim[$counter], $matches))  
    8083            { 
    81                 $factionname = $matches[1]; 
     84                if($matches[1]) 
     85                    $factionname = $matches[1]; 
    8286            } 
    8387            elseif (preg_match("/Destroyed: (.*)/", $victim[$counter], $matches))  
    8488            { 
    85                 $shipname = $matches[1]; 
     89                if($matches[1]) 
     90                    $shipname = $matches[1]; 
    8691            }  
    8792            elseif (preg_match("/System: (.*)/", $victim[$counter], $matches))  
    8893            { 
    89                 $systemname = $matches[1]; 
     94                if($matches[1]) 
     95                    $systemname = $matches[1]; 
    9096            }  
    9197            elseif (preg_match("/Security: (.*)/", $victim[$counter], $matches))  
    9298            { 
    93                 $systemsec = $matches[1]; 
     99                if($matches[1]) 
     100                    $systemsec = $matches[1]; 
    94101            }  
    95102            elseif (preg_match("/Damage Taken: (.*)/", $victim[$counter], $matches))  
    96103            { 
    97                 $dmgtaken = $matches[1]; 
    98                 $this->dmgtaken = $dmgtaken; 
     104                if($matches[1]) 
     105                { 
     106                    $dmgtaken = $matches[1]; 
     107                    $this->dmgtaken = $dmgtaken; 
     108                } 
    99109            }  
    100110            elseif (preg_match("/Moon: (.*)/", $victim[$counter], $matches))  
    101111            { 
    102                 $moon = $matches[1]; 
    103                 $victimname = $matches[1]; 
    104                 $pos = 1; 
     112                if($matches[1]) 
     113                { 
     114                    $moon = $matches[1]; 
     115                    $victimname = $matches[1]; 
     116                    $pos = 1; 
     117                } 
    105118            } 
    106119        } 
     
    110123        //the rest aren't required but for completeness, you'd want them in :) 
    111124        if (strcmp($victimname, 'Unknown') == 0) 
     125        { 
    112126            $this->error('Victim has no name.'); 
     127            unset($victimname); //we unset the variable so that it fails the next check 
     128        } 
    113129         
    114130        if (strcmp($corpname, 'Unknown') == 0) 
     131        { 
    115132            $this->error('Victim has no corp.'); 
     133            unset($corpname); 
     134        } 
    116135             
    117136        if (strcmp($shipname, 'Unknown') == 0) 
     137        { 
    118138            $this->error('Victim has no ship type.'); 
     139            unset($shipname); 
     140        } 
    119141         
    120142        if (strcmp($systemname, 'Unknown') == 0) 
     143        { 
    121144            $this->error('Killmail lacks solar system information.'); 
     145            unset($systemname); 
     146        } 
    122147         
    123148        //modification here 
     
    231256                    if(preg_match("/Name: (.*)/", $involved[$counter], $matches))  
    232257                    { 
    233                         if(stristr($involved[$counter], '/')) 
     258                        if($matches[1]) //new check - involved party has name 
    234259                        { 
    235                             $slash = strpos($involved[$counter], '/'); 
    236                             $name = trim(substr($involved[$counter], 5, $slash-5)); 
    237                             $corperation = trim(substr($involved[$counter], $slash+1, strlen($involved[$counter])- $shash+1)); 
    238                              
    239                             //now if the corp bit has final blow info, note it 
    240                             preg_match("/(.*) \\(laid the final blow\\)/", $corperation, $matched); 
    241                             if($matched[1]) 
     260                            if(stristr($involved[$counter], '/')) 
    242261                            { 
    243                                 $finalblow = 1; 
    244                                 $iwname = $name; 
    245                                 $end = strpos($corperation, '(') -1; 
    246                                 $corperation = substr($corperation, 0, $end); 
     262                                $slash = strpos($involved[$counter], '/'); 
     263                                $name = trim(substr($involved[$counter], 5, $slash-5)); 
     264                                $corperation = trim(substr($involved[$counter], $slash+1, strlen($involved[$counter])- $shash+1)); 
     265 
     266                                //now if the corp bit has final blow info, note it 
     267                                preg_match("/(.*) \\(laid the final blow\\)/", $corperation, $matched); 
     268                                if($matched[1]) 
     269                                { 
     270                                    $finalblow = 1; 
     271                                    $iwname = $name; 
     272                                    $end = strpos($corperation, '(') -1; 
     273                                    $corperation = substr($corperation, 0, $end); 
     274                                } 
     275                                else  
     276                                { 
     277                                    $finalblow = 0; 
     278                                    $iwname = $name; 
     279                                } 
     280                                $ipname = $name; 
     281                                $icname = $corperation; 
    247282                            } 
    248                             else  
    249                             { 
    250                                 $finalblow = 0; 
    251                                 $iwname = $name; 
    252                             } 
    253                             $ipname = $name; 
    254                             $icname = $corperation; 
    255                         } 
    256                         else 
    257                         { 
    258                             $ipname = $matches[1]; 
    259                             preg_match("/(.*) \\(laid the final blow\\)/", $ipname, $matches); 
    260                             if ($matches[1]) 
     283                            else 
    261284                            { 
    262285                                $ipname = $matches[1]; 
    263                                 $finalblow = 1; 
     286                                preg_match("/(.*) \\(laid the final blow\\)/", $ipname, $matches); 
     287                                if ($matches[1]) 
     288                                { 
     289                                    $ipname = $matches[1]; 
     290                                    $finalblow = 1; 
     291                                } 
     292                                else $finalblow = 0; 
    264293                            } 
    265                             else $finalblow = 0; 
    266294                        } 
    267295                    } 
    268296                    else if(preg_match("/Alliance: (.*)/", $involved[$counter], $matches))  
    269297                    { 
    270                         $ianame = $matches[1]; 
     298                        if($matches[1]) 
     299                            $ianame = $matches[1]; 
    271300                    } 
    272301                    else if(preg_match("/Faction: (.*)/", $involved[$counter], $matches))  
    273302                    { 
    274                         $ifname = $matches[1]; 
     303                        if($matches[1]) 
     304                            $ifname = $matches[1]; 
    275305                    } 
    276306                    else if(preg_match("/Corp: (.*)/", $involved[$counter], $matches))  
    277307                    { 
    278                         $icname = $matches[1]; 
     308                        if($matches[1]) 
     309                            $icname = $matches[1]; 
    279310                    } 
    280311                    else if(preg_match("/Ship: (.*)/", $involved[$counter], $matches))  
    281312                    { 
    282                         $isname = $matches[1]; 
     313                        if($matches[1]) 
     314                            $isname = $matches[1]; 
    283315                    } 
    284316                    else if(preg_match("/Weapon: (.*)/", $involved[$counter], $matches))  
    285317                    { 
    286                         $iwname = $matches[1]; 
     318                        if($matches[1]) 
     319                            $iwname = $matches[1]; 
    287320                    } 
    288321                    else if(preg_match("/Security: (.*)/", $involved[$counter], $matches))  
    289322                    { 
    290                         $secstatus = $matches[1]; 
     323                        if($matches[1]) 
     324                            $secstatus = $matches[1]; 
    291325                    } 
    292326                    else if(preg_match("/Damage Done: (.*)/", $involved[$counter], $matches))  
    293327                    { 
    294                         $idmgdone = $matches[1]; 
     328                        if($matches[1]) 
     329                            $idmgdone = $matches[1]; 
    295330                    } 
    296331                    else { 
     
    309344                $ialliance = new Alliance(); 
    310345                $ialliance->add($ianame); 
     346                 
    311347                $icorp = new Corporation(); 
    312                 $icorp->add($icname, $ialliance, $kill->getTimeStamp()); 
    313  
     348                if (strcmp($icname, 'None') == 0) 
     349                { 
     350                    $this->error('Involved party has no corp.'); 
     351                } 
     352                else 
     353                {   //don't add corp, because pilots have to be in corps. 
     354                    $icorp->add($icname, $ialliance, $kill->getTimeStamp()); 
     355                } 
     356 
     357                $ipilot = new Pilot();  
     358                 
    314359                if (strcmp($ipname, 'Unknown') == 0) 
    315360                { 
    316                     $this->error('Involved pilot has no name.'); 
    317                 } 
    318  
    319                 $ipilot = new Pilot(); 
    320                 $ipilot->add($ipname, $icorp, $timestamp); 
     361                    $this->error('Involved party has no name.'); 
     362                } 
     363                else 
     364                { 
     365                    //don't add pilot if the pilot's unknown or dud 
     366                    $ipilot->add($ipname, $icorp, $timestamp);  
     367                } 
    321368 
    322369                $iship = new Ship(); 
     
    604651                            'Dropped items:', 'Qty:', 'Unknown', 'Drone Bay', 'Drone Bay'); 
    605652 
    606             //if (strpos($this->killmail, chr(246)) === false) 
    607             //{ 
    608             //    $this->killmail_ = utf8_decode($this->killmail_); 
    609             //} 
    610653            $this->killmail_ = str_replace($search, $replace, $this->killmail_); 
    611654            return;