/** * @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; } }
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; }