Example #1
0
 /**
  * @param SimpleXMLElement $row The row for a single kill.
  */
 private function processKill($row)
 {
     $skip = false;
     $dup = false;
     $errorstring = "";
     $internalID = (int) $row['killInternalID'];
     $externalID = (int) $row['killID'];
     $id = 0;
     if (config::get('filter_apply') && config::get('filter_date') > strtotime(strval($row['killTime']))) {
         $skip = true;
     } else {
         $kill = new Kill();
         if ($externalID) {
             $kill->setExternalID($externalID);
             $id = $kill->getDupe();
             //speedy dup check based on external id only
             if ($id > 0) {
                 //duplicate found
                 $qry = DBFactory::getDBQuery(true);
                 $qry->execute("INSERT IGNORE INTO kb3_mails (`kll_id`," . " `kll_timestamp`, `kll_external_id`, `kll_modified_time`)" . "VALUES({$id}, '" . $kill->getTimeStamp() . "', {$externalID},  UTC_TIMESTAMP())");
                 $qry->execute("UPDATE kb3_kills SET kb3_kills.kll_external_id = {$externalID} WHERE kb3_kills.kll_id = {$id} AND kb3_kills.kll_external_id IS NULL");
                 $dup = true;
             }
         }
         if (!$dup) {
             $kill->setTimeStamp(strval($row['killTime']));
             $sys = SolarSystem::getByID((int) $row['solarSystemID']);
             if (!$sys->getName()) {
                 $errorstring .= " Invalid solar system";
                 $skip = true;
             }
             $kill->setSolarSystem($sys);
             if (!$this->processVictim($row, $kill, strval($row['killTime']))) {
                 $errorstring .= " Invalid victim.";
                 $skip = true;
             }
             if (!$skip) {
                 //skipping intensive involved party processing
                 $this->npcOnly = true;
                 //there's no real check for this anymore?
                 foreach ($row->rowset[0]->row as $inv) {
                     if (!$this->processInvolved($inv, $kill, strval($row['killTime']))) {
                         $errorstring .= " Invalid involved party.";
                         $skip = true;
                         break;
                     }
                 }
                 // Don't post NPC only kills if configured.
                 if ($this->npcOnly && Config::get('post_no_npc_only')) {
                     $errorstring .= " NPC Only mail.";
                     $skip = true;
                 }
                 if (!$skip) {
                     //skipping intensive items processing
                     if (isset($row->rowset[1]->row[0])) {
                         foreach ($row->rowset[1]->row as $item) {
                             $this->processItem($item, $kill);
                         }
                     }
                     $authorized = false;
                     if (config::get('cfg_allianceid') && in_array($kill->getVictimAllianceID(), config::get('cfg_allianceid'))) {
                         $authorized = true;
                     } else {
                         if (config::get('cfg_corpid') && in_array($kill->getVictimCorpID(), config::get('cfg_corpid'))) {
                             $authorized = true;
                         } else {
                             if (config::get('cfg_pilotid') && in_array($kill->getVictimID(), config::get('cfg_pilotid'))) {
                                 $authorized = true;
                             }
                         }
                     }
                     foreach ($kill->getInvolved() as $inv) {
                         if (config::get('cfg_allianceid') && in_array($inv->getAllianceID(), config::get('cfg_allianceid'))) {
                             $authorized = true;
                         } else {
                             if (config::get('cfg_corpid') && in_array($inv->getCorpID(), config::get('cfg_corpid'))) {
                                 $authorized = true;
                             } else {
                                 if (config::get('cfg_pilotid') && in_array($inv->getPilotID(), config::get('cfg_pilotid'))) {
                                     $authorized = true;
                                 }
                             }
                         }
                     }
                     if (!$authorized) {
                         $skip = true;
                     } else {
                         $id = $kill->add();
                         if ($kill->getDupe(true)) {
                             $dup = true;
                         } else {
                             $this->posted[] = array($externalID, $internalID, $id);
                             // Prepare text for the log.
                             if ($this->url) {
                                 $logaddress = "ID:" . $this->url;
                                 if (strpos($logaddress, "?")) {
                                     $logaddress = substr($logaddress, 0, strpos($logaddress, "?"));
                                 }
                                 if ($kill->getExternalID()) {
                                     $logaddress .= "?a=kill_detail&kll_ext_id=" . $kill->getExternalID();
                                 } else {
                                     if ($internalID) {
                                         $logaddress .= "?a=kill_detail&kll_id=" . $internalID;
                                     }
                                 }
                             } else {
                                 if ($this->name) {
                                     $logaddress = $this->name;
                                     if ($kill->getExternalID()) {
                                         $logaddress .= ":kll_ext_id=" . $kill->getExternalID();
                                     } else {
                                         if ($internalID) {
                                             $logaddress .= ":kll_id=" . $internalID;
                                         }
                                     }
                                 } else {
                                     $logaddress = "ID: local input";
                                 }
                             }
                             logger::logKill($id, $logaddress);
                         }
                     }
                 }
             }
         }
     }
     if ($skip) {
         $this->skipped[] = array($externalID, $internalID, $id);
         if ($errorstring) {
             $errorstring .= " Kill not added. killID =  {$externalID}" . ($internalID ? ", killInternalID = {$internalID}." : ".");
             $this->parsemsg[] = $errorstring;
         }
     }
     if ($dup) {
         $this->duplicate[] = array($externalID, $internalID, $id);
     }
     if ($this->lastReturned < $externalID) {
         $this->lastReturned = $externalID;
     }
     if ($this->lastInternalReturned < $internalID) {
         $this->lastInternalReturned = $internalID;
     }
 }
Example #2
0
function post()
{
    global $page;
    if (config::get("post_password") == '' || crypt($_POST['password'], config::get("post_password")) == config::get("post_password") || $page->isAdmin()) {
        $parser = new Parser($_POST['killmail']);
        // Filtering
        if (config::get('filter_apply')) {
            $filterdate = config::get('filter_date');
            $year = substr($_POST['killmail'], 0, 4);
            $month = substr($_POST['killmail'], 5, 2);
            $day = substr($_POST['killmail'], 8, 2);
            $killstamp = mktime(0, 0, 0, $month, $day, $year);
            if ($killstamp < $filterdate) {
                $killid = -3;
            } else {
                $killid = $parser->parse(true, null, false);
            }
        } else {
            $killid = $parser->parse(true, null, false);
        }
        if ($killid <= 0) {
            if ($killid == 0) {
                $html = "Killmail is malformed.<br/>";
                if ($errors = $parser->getError()) {
                    foreach ($errors as $error) {
                        $html .= 'Error: ' . $error[0];
                        if ($error[1]) {
                            $html .= ' The text leading to this error was: "' . $error[1] . '"';
                        }
                        $html .= '<br/>';
                    }
                }
            } elseif ($killid == -1) {
                $url = edkURI::page('kill_detail', $parser->getDupeID(), 'kll_id');
                $html = "That killmail has already been posted <a href=\"" . edkURI::page('kill_detail', $parser->getDupeID(), 'kll_id') . "\">here</a>.";
            } elseif ($killid == -2) {
                $html = "You are not authorized to post this killmail.";
            } elseif ($killid == -3) {
                $filterdate = kbdate("j F Y", config::get("filter_date"));
                $html = "You are not allowed to post killmails older than" . " {$filterdate}.";
            } elseif ($killid == -4) {
                $html = "That mail has been deleted. Kill id was " . $parser->getDupeID();
                if ($page->isAdmin()) {
                    $html .= '<br />
<form id="postform" name="postform" class="f_killmail" method="post" action="' . edkURI::page('post') . '">
	<input type="hidden" name="killmail" id="killmail" value = "' . htmlentities($_POST['killmail']) . '"/>
	<input type="hidden" name="kll_id" id="kill_id" value = "' . $parser->getDupeID() . '"/>
	<input type="hidden" name="undelete" id="undelete" value = "1"/>
<input id="submit" name="submit" type="submit" value="Undelete" />
</form>';
                }
            }
        } else {
            if (config::get('post_mailto') != "") {
                $mailer = new PHPMailer();
                $kill = new Kill($killid);
                if (!($server = config::get('post_mailserver'))) {
                    $server = 'localhost';
                }
                $mailer->From = "mailer@" . config::get('post_mailhost');
                $mailer->FromName = config::get('post_mailhost');
                $mailer->Subject = "Killmail #" . $killid;
                $mailer->Host = $server;
                $mailer->Port = 25;
                $mailer->Helo = $server;
                $mailer->Mailer = "smtp";
                $mailer->AddReplyTo("no_reply@" . config::get('post_mailhost'), "No-Reply");
                $mailer->Sender = "mailer@" . config::get('post_mailhost');
                $mailer->Body = $_POST['killmail'];
                $mailer->AddAddress(config::get('post_mailhost'));
                $mailer->Send();
            }
            logger::logKill($killid);
            header("Location: " . htmlspecialchars_decode(edkURI::page('kill_detail', $killid, 'kll_id')));
            exit;
        }
    } else {
        $html = "Invalid password.";
    }
    return $html;
}