queue("menuSetup"); $this->queue("menu"); } /** * Start constructing the page. * Prepare all the shared variables such as dates and check alliance ID. * */ function start() { // set some directory paths for this mod first $this->modDir = dirname(__FILE__) . DIRECTORY_SEPARATOR;; $this->includeDir = $this->modDir . 'include' . DIRECTORY_SEPARATOR; $this->cssDir = config::get("cfg_kbhost") . '/mods/' . basename(dirname(__FILE__)) . '/css/'; $this->templateDir = $this->modDir . 'template' . DIRECTORY_SEPARATOR; $this->jsDir = config::get("cfg_kbhost") . '/mods/' . basename(dirname(__FILE__)) . '/js/'; $this->imgDir = config::get("cfg_kbhost") . '/mods/' . basename(dirname(__FILE__)) . '/img/'; $this->page = new Page('Related kills & losses'); $this->page->addHeader(''); $this->isFixed = FALSE; $this->kll_id = (int) edkURI::getArg('kll_id', 1); if (!$this->kll_id) { $this->kll_external_id = (int) edkURI::getArg('kll_ext_id'); if (!$this->kll_external_id) { // internal and external ids easily overlap so we can't guess which $this->kll_id = (int) edkURI::getArg(null, 1); $this->kill = Kill::getByID($this->kll_id); } else { $this->kill = new Kill($this->kll_external_id, true); $this->kll_id = $this->kill->getID(); } } else { $this->kill = Kill::getByID($this->kll_id); } // read url parameters $this->adjacent = (bool) edkURI::getArg('adjacent'); $this->scl_id = (int) edkURI::getArg('scl_id'); $this->displayingBattle = (bool) edkURI::getArg('battle'); $this->menuOptions = array(); if (!$this->kll_id || !$this->kill->exists()) { echo 'No valid kill id specified'; exit; } if ($this->kill->isClassified()) { Header("Location: ".KB_HOST."/?a=kill_detail&kll_id=".$this->kll_id); die(); } // set javascript headers $this->page->addHeader("cssDir."tabber.css\" TYPE=\"text/css\" MEDIA=\"screen\">"); $this->page->addHeader(""); $this->page->addHeader(""); $this->page->addHeader(""); $this->page->addHeader(""); $this->page->addHeader(''); // include helpers include_once($this->includeDir."class.helpers.php"); } public function getInvolved() { $this->victimAll = array(); $this->invAll = array(); $this->victimCorp = array(); $this->invCorp = array(); // Find all involved parties not in the same corp/alliance as the victim. If // the board has an owner swap sides if necessary so board owner is the killer foreach ($this->kill->getInvolved() as $inv) { if (strcasecmp($inv->getAlliance()->getName(), 'None')) { if ($inv->getAllianceID() != $this->kill->getVictimAllianceID()) { $this->invAll[$inv->getAllianceID()] = $inv->getAllianceID(); } } elseif ($inv->getCorpID() != $this->kill->getVictimCorpID()) $this->invCorp[$inv->getCorpID()] = $inv->getCorpID(); } if (strcasecmp($this->kill->getVictimAllianceName(), 'None')) $this->victimAll[$this->kill->getVictimAllianceID()] = $this->kill->getVictimAllianceID(); else $this->victimCorp[$this->kill->getVictimCorpID()] = $this->kill->getVictimCorpID(); // Check which side board owner is on and make that the kill side. The other // side is the loss side. If board owner is on neither then victim is the loss // side. if (in_array($this->kill->getVictimAllianceID(), config::get('cfg_allianceid')) || in_array($this->kill->getVictimCorpID(), config::get('cfg_corpid'))) { $tmp = $this->victimAll; $this->victimAll = $this->invAll; $this->invAll = $tmp; $tmp = $this->victimCorp; $this->victimCorp = $this->invCorp; $this->invCorp = $tmp; } } public function buildStats() { // this is a fast query to get the system and timestamp $rqry = DBFactory::getDBQuery(); if ($this->adjacent) { $rsql = 'SELECT kll_timestamp, sjp_to as sys_id from kb3_kills join kb3_systems a ON (a.sys_id = kll_system_id) join kb3_system_jumps on (sjp_from = a.sys_id) where kll_id = '.$this->kll_id.' UNION SELECT kll_timestamp, kll_system_id as sys_id from kb3_kills where kll_id = '.$this->kll_id; } else { $rsql = 'SELECT kll_timestamp, kll_system_id as sys_id from kb3_kills where kll_id = '.$this->kll_id; } $rqry->execute($rsql); while ($rrow = $rqry->getRow()) { $this->systems[] = $rrow['sys_id']; $basetime = $rrow['kll_timestamp']; } // now we get all kills in that system for +-4 hours $query = 'SELECT kll.kll_timestamp AS ts FROM kb3_kills kll WHERE kll.kll_system_id IN ('.implode(',', $this->systems). ') AND kll.kll_timestamp <= "'.(date('Y-m-d H:i:s', strtotime($basetime) + (config::get('fleet_battles_mod_maxtime') * 60 * 60))).'"'. ' AND kll.kll_timestamp >= "'.(date('Y-m-d H:i:s', strtotime($basetime) - (config::get('fleet_battles_mod_maxtime') * 60 * 60))).'"'. ' ORDER BY kll.kll_timestamp ASC'; $qry = DBFactory::getDBQuery(); $qry->execute($query); $ts = array(); $timestampsRaw = array(); while ($row = $qry->getRow()) { $time = strtotime($row['ts']); $ts[intval(date('H', $time))][] = $row['ts']; $timestampsRaw[] = $row["ts"]; } // only for non-battles if(!$this->displayingBattle) { // this tricky thing looks for gaps of more than 1 hour and creates an intersection $baseh = date('H', strtotime($basetime)); $maxc = count($ts); $times = array(); for ($i = 0; $i < $maxc; $i++) { $h = ($baseh + $i) % 24; if (!isset($ts[$h])) { break; } foreach ($ts[$h] as $timestamp) { $times[] = $timestamp; } } for ($i = 0; $i < $maxc; $i++) { $h = ($baseh - $i) % 24; if ($h < 0) { $h += 24; } if (!isset($ts[$h])) { break; } foreach ($ts[$h] as $timestamp) { $times[] = $timestamp; } } unset($ts); asort($times); // we got 2 resulting timestamps $this->firstts = array_shift($times); $this->lastts = array_pop($times); } // displaying a battle else { // take the first and last timestamp from our original query $this->firstts = array_shift($timestampsRaw); $this->lastts = array_pop($timestampsRaw); } // get parameters for overriding start and end times // dirty hook for the enlightened circle ;) $overrideStartTime = str_replace('%20', ' ', edkURI::getArg('starttime')); $overrideEndTime = str_replace('%20', ' ', edkURI::getArg('endtime')); if($overrideStartTime && strtotime($overrideStartTime)) { $this->firstts = $overrideStartTime; } if($overrideEndTime && strtotime($overrideEndTime)) { $this->lastts = $overrideEndTime; } // unfiltered kill list (no ship class filter applied) $this->kslist = new KillList(); $this->kslist->setOrdered(true); foreach ($this->systems as $system) $this->kslist->addSystem($system); $this->kslist->setStartDate($this->firstts); $this->kslist->setEndDate($this->lastts); involved::load($this->kslist,'kill'); // unfiltered loss list (no ship class filter applied) $this->lslist = new KillList(); $this->lslist->setOrdered(true); foreach ($this->systems as $system) $this->lslist->addSystem($system); $this->lslist->setStartDate($this->firstts); $this->lslist->setEndDate($this->lastts); involved::load($this->lslist,'loss'); // filtered kill list (shipclass filter applied) $this->klist = new KillList(); $this->klist->setOrdered(true); $this->klist->setCountComments(true); $this->klist->setCountInvolved(true); foreach ($this->systems as $system) $this->klist->addSystem($system); $this->klist->setStartDate($this->firstts); $this->klist->setEndDate($this->lastts); involved::load($this->klist,'kill'); // filtered loss list (ship class filter applied) $this->llist = new KillList(); $this->llist->setOrdered(true); $this->llist->setCountComments(true); $this->llist->setCountInvolved(true); foreach ($this->systems as $system) $this->llist->addSystem($system); $this->llist->setStartDate($this->firstts); $this->llist->setEndDate($this->lastts); involved::load($this->llist,'loss'); // apply ship class filters if ($this->scl_id) { $this->klist->addVictimShipClass($this->scl_id); $this->llist->addVictimShipClass($this->scl_id); } // if manual side assignment is enabled if(config::get("fleet_battles_mod_sideassign")) { // get possible side assignments $sideAssignments = getSideAssignments($this->systems[0], $this->firstts, $this->lastts); $sideAssignmentMap = array(); // apply foreach($sideAssignments AS $sideAssignment) { $this->isFixed = TRUE; $sideAssignmentMap[$sideAssignment["entity_type"]][$sideAssignment["entity_id"]] = $sideAssignment["side"]; // entity is an alliance if($sideAssignment["entity_type"] == "alliance") { // alliance is an enemy if($sideAssignment["side"] == "e") { $this->kslist->addVictimAlliance($sideAssignment["entity_id"]); $this->lslist->addInvolvedAlliance($sideAssignment["entity_id"]); $this->klist->addVictimAlliance($sideAssignment["entity_id"]); $this->llist->addInvolvedAlliance($sideAssignment["entity_id"]); } // alliance is an ally else { $this->kslist->addInvolvedAlliance($sideAssignment["entity_id"]); $this->lslist->addVictimAlliance($sideAssignment["entity_id"]); // also add as involved alliance for blue-on-blue kills $this->lslist->addInvolvedAlliance($sideAssignment["entity_id"]); $this->klist->addInvolvedAlliance($sideAssignment["entity_id"]); $this->llist->addVictimAlliance($sideAssignment["entity_id"]); // also add as involved alliance for blue-on-blue kills $this->llist->addInvolvedAlliance($sideAssignment["entity_id"]); } } // entity is a corporation else { // alliance is an enemy if($sideAssignment["side"] == "e") { $this->kslist->addVictimCorp($sideAssignment["entity_id"]); $this->lslist->addInvolvedCorp($sideAssignment["entity_id"]); $this->klist->addVictimCorp($sideAssignment["entity_id"]); $this->llist->addInvolvedCorp($sideAssignment["entity_id"]); } // alliance is an ally else { $this->kslist->addInvolvedCorp($sideAssignment["entity_id"]); $this->lslist->addVictimCorp($sideAssignment["entity_id"]); // also add as involved alliance for blue-on-blue kills $this->lslist->addInvolvedCorp($sideAssignment["entity_id"]); $this->klist->addInvolvedCorp($sideAssignment["entity_id"]); $this->llist->addVictimCorp($sideAssignment["entity_id"]); // also add as involved alliance for blue-on-blue kills $this->llist->addInvolvedCorp($sideAssignment["entity_id"]); } } } } // we need a summary table first $this->summaryTable = new KillSummaryTable($this->kslist, $this->lslist); $this->summaryTable->generate(); $this->destroyed = array(); $this->lossValues = array(); $this->killValues = array(); $this->pilots = array('a' => array(), 'e' => array()); $this->klist->rewind(); $this->damageOverview = array('a' => array(), 'e' => array()); $totalKillIsk = $this->summaryTable->getTotalKillISK(); while ($kill = $this->klist->getKill()) { handle_involved($kill, 'a', $this->pilots, $sideAssignmentMap, TRUE); handle_destroyed($kill, 'e', $this->destroyed, $this->pilots, $sideAssignmentMap, TRUE); // gather data for battle timeline and loss value lists // for better performance we use this loop so we won't have to loop over the same data again // --------------------------------------------------------------------------------------- // gathering kill values // --------------------------------------------------------------------------------------- // we dont want our own people on the enemy's side! if(in_array($kill->getVictimAllianceID(), config::get('cfg_allianceid')) || in_array($kill->getVictimCorpID(), config::get('cfg_corpid')) || in_array($kill->getVictimID(), config::get('cfg_pilotid'))) { continue; } $lossValueRaw = $kill->getISKLoss(); $lossValue = self::formatIskValue($lossValueRaw); if($totalKillIsk != 0) { $percentualLossValue = number_format(($lossValueRaw/$totalKillIsk)*100, 2); } else { $percentualLossValue = 0.00; } if($lossValueRaw > 0) { $this->killValues[] = array( "victimName" => $kill->getVictimName(), "victimID" => $kill->getVictimID(), "victimUrl" => edkURI::page("pilot_detail", $kill->getVictimID(), "plt_id"), "victimShipName" => $kill->getVictimShipName(), "victimShipImage" => imageUrl::getURL("Ship", $kill->getVictimShipID(), 32), "victimShipClass" => $kill->getVictimShipClassName(), "victimCorpName" => $kill->getVictimCorpName(), "victimCorpID" => $kill->getVictimCorpID(), "victimCorpUrl" => edkURI::page("corp_detail", $kill->getVictimCorpID(), "crp_id"), "victimAllianceName" => $kill->getVictimAllianceName(), "victimAllianceID" => $kill->getVictimAllianceID(), "victimAllianceUrl" => edkURI::page("alliance_detail", $kill->getVictimAllianceID(), "all_id"), "killId" => $kill->getID(), "killUrl" => edkURI::page("kill_detail", $kill->getID(), "kll_id"), "lossValueRaw" => $lossValueRaw, "lossValue" => $lossValue, "lossValuePercentage" => $percentualLossValue ); } // --------------------------------------------------------------------------------------- // gathering timeline data // --------------------------------------------------------------------------------------- $killTimestamp = strtotime($kill->getTimeStamp()); // increase killtimestamp for pods so they appear AFTER the ship kill in the timeline $shipClassId = $kill->getVictimShip()->getClass()->getID(); if($shipClassId == 18 || $shipClassId == 2) $killTimestamp += 1; $this->timeLine[] = array("timestamp" => $killTimestamp, "loss" => NULL, "kill" => array( "victimName" => $kill->getVictimName(), "victimID" => $kill->getVictimID(), "victimUrl" => edkURI::page("pilot_detail", $kill->getVictimID(), "plt_id"), "victimShipName" => $kill->getVictimShipName(), "victimShipImage" => imageUrl::getURL("Ship", $kill->getVictimShipID(), 32), "victimShipClass" => $kill->getVictimShipClassName(), "victimCorpName" => $kill->getVictimCorpName(), "victimCorpID" => $kill->getVictimCorpID(), "victimCorpUrl" => edkURI::page("corp_detail", $kill->getVictimCorpID(), "crp_id"), "victimAllianceName" => $kill->getVictimAllianceName(), "victimAllianceID" => $kill->getVictimAllianceID(), "victimAllianceUrl" => edkURI::page("alliance_detail", $kill->getVictimAllianceID(), "all_id"), "killId" => $kill->getID(), "killUrl" => edkURI::page("kill_detail", $kill->getID(), "kll_id") )); // --------------------------------------------------------------------------------------- // gathering damage overview data // --------------------------------------------------------------------------------------- $this->damageOverview["a"][] = array( "victimName" => $kill->getVictimName(), "victimID" => $kill->getVictimID(), "victimUrl" => edkURI::page("pilot_detail", $kill->getVictimID(), "plt_id"), "victimShipName" => $kill->getVictimShipName(), "victimShipImage" => imageUrl::getURL("Ship", $kill->getVictimShipID(), 32), "victimShipClass" => $kill->getVictimShipClassName(), "victimCorpName" => $kill->getVictimCorpName(), "victimCorpID" => $kill->getVictimCorpID(), "victimCorpUrl" => edkURI::page("corp_detail", $kill->getVictimCorpID(), "crp_id"), "victimAllianceName" => $kill->getVictimAllianceName(), "victimAllianceID" => $kill->getVictimAllianceID(), "victimAllianceUrl" => edkURI::page("alliance_detail", $kill->getVictimAllianceID(), "all_id"), "killId" => $kill->getID(), "killUrl" => edkURI::page("kill_detail", $kill->getID(), "kll_id"), "lossValueRaw" => $lossValueRaw, "lossValue" => $lossValue, "lossValuePercentage" => $percentualLossValue ); } $this->llist->rewind(); $totalLossIsk = $this->summaryTable->getTotalLossISK(); while ($kill = $this->llist->getKill()) { handle_involved($kill, 'e', $this->pilots, $sideAssignmentMap, TRUE); handle_destroyed($kill, 'a', $this->destroyed, $this->pilots, $sideAssignmentMap, TRUE); // gather data for battle timeline and loss value lists // for better performance we use this loop so we won't have to loop over the same data again // --------------------------------------------------------------------------------------- // gathering loss values // --------------------------------------------------------------------------------------- $lossValueRaw = $kill->getISKLoss(); $lossValue = self::formatIskValue($lossValueRaw); if($totalLossIsk != 0) { $percentualLossValue = number_format(($lossValueRaw/$totalLossIsk)*100, 2); } else { $percentualLossValue = 0.00; } if($lossValueRaw > 0) { $this->lossValues[] = array( "victimName" => $kill->getVictimName(), "victimID" => $kill->getVictimID(), "victimUrl" => edkURI::page("pilot_detail", $kill->getVictimID(), "plt_id"), "victimShipName" => $kill->getVictimShipName(), "victimShipImage" => imageUrl::getURL("Ship", $kill->getVictimShipID(), 32), "victimShipClass" => $kill->getVictimShipClassName(), "victimCorpName" => $kill->getVictimCorpName(), "victimCorpID" => $kill->getVictimCorpID(), "victimCorpUrl" => edkURI::page("corp_detail", $kill->getVictimCorpID(), "crp_id"), "victimAllianceName" => $kill->getVictimAllianceName(), "victimAllianceID" => $kill->getVictimAllianceID(), "victimAllianceUrl" => edkURI::page("alliance_detail", $kill->getVictimAllianceID(), "all_id"), "killId" => $kill->getID(), "killUrl" => edkURI::page("kill_detail", $kill->getID(), "kll_id"), "lossValueRaw" => $lossValueRaw, "lossValue" => $lossValue, "lossValuePercentage" => $percentualLossValue ); } // --------------------------------------------------------------------------------------- // gathering timeline data // --------------------------------------------------------------------------------------- $killTimestamp = strtotime($kill->getTimeStamp()); $shipClassId = $kill->getVictimShip()->getClass()->getID(); $this->timeLine[] = array("timestamp" => strtotime($kill->getTimeStamp()), "loss" => array( "victimName" => $kill->getVictimName(), "victimID" => $kill->getVictimID(), "victimUrl" => edkURI::page("pilot_detail", $kill->getVictimID(), "plt_id"), "victimShipName" => $kill->getVictimShipName(), "victimShipImage" => imageUrl::getURL("Ship", $kill->getVictimShipID(), 32), "victimShipClass" => $kill->getVictimShipClassName(), "victimCorpName" => $kill->getVictimCorpName(), "victimCorpID" => $kill->getVictimCorpID(), "victimCorpUrl" => edkURI::page("corp_detail", $kill->getVictimCorpID(), "crp_id"), "victimAllianceName" => $kill->getVictimAllianceName(), "victimAllianceID" => $kill->getVictimAllianceID(), "victimAllianceUrl" => edkURI::page("alliance_detail", $kill->getVictimAllianceID(), "all_id"), "killId" => $kill->getID(), "killUrl" => edkURI::page("kill_detail", $kill->getID(), "kll_id") ), "kill" => NULL); } //echo "
"; var_dump($this->pilots); echo ""; // sort pilot ships, order pods after ships foreach ($this->pilots as $side => $pilot) { foreach ($pilot as $id => $kll) { usort($this->pilots[$side][$id], array($this, 'cmp_ts_func')); } } // sort arrays, ships with high points first uasort($this->pilots['a'], array($this, 'cmp_func')); uasort($this->pilots['e'], array($this, 'cmp_func')); // now get the pods out and mark the ships the've flown as podded foreach ($this->pilots as $side => $pilot) { foreach ($pilot as $id => $kll) { $max = count($kll); for ($i = 0; $i < $max; $i++) { // add up total damage for each side if($side == "a") { if(isset($kll[$i]["damage"])) $this->damageTotalFriendly += $kll[$i]["damage"]; } else { if(isset($kll[$i]["damage"])) $this->damageTotalHostile += $kll[$i]["damage"]; } // this kill has a pod as ship if ($kll[$i]['shipClass'] == 'Capsule') { // this pilot made previous kills in another ship if (isset($kll[$i - 1]['sid'])) { // this kill is a pod loss if(isset($kll[$i]['destroyed'])) { $this->pilots[$side][$id][$i - 1]['podded'] = true; $this->pilots[$side][$id][$i - 1]['podid'] = $kll[$i]['kll_id']; $this->pilots[$side][$id][$i - 1]['pod_url'] = edkURI::page("kill_detail", $kll[$i]['kll_id'], "kll_id"); unset($this->pilots[$side][$id][$i]); } // the pilot was involved in this kill, but flew a pod else { // update stats for previously used ship $this->pilots[$side][$id][$i - 1]['times'] += $this->pilots[$side][$id][$i]['times']; $this->pilots[$side][$id][$i - 1]['damage'] += $this->pilots[$side][$id][$i]['damage']; unset($this->pilots[$side][$id][$i]); } } } } } } // update battles with current stats $this->updateBattles(); } /** * @return string HTML string for the summary overview of the battle. */ public function overview() { global $smarty; $smarty->assignByRef('pilots_a', $this->pilots['a']); $smarty->assignByRef('pilots_e', $this->pilots['e']); $pod = Ship::getByID(670); $smarty->assign('podpic', $pod->getImage(32)); $smarty->assign('friendlycnt', count($this->pilots['a'])); $smarty->assign('hostilecnt', count($this->pilots['e'])); if ($this->kill->isClassified()) { $smarty->assign('system', 'Classified System'); } else { if (!$this->adjacent) { $smarty->assign('system', $this->kill->getSolarSystemName()); } else { $sysnames = array(); foreach ($this->systems as $sys_id) { $system = SolarSystem::getByID($sys_id); $sysnames[] = $system->getName(); } $smarty->assign('system', implode(', ', $sysnames)); } } $smarty->assign('firstts', $this->firstts); $smarty->assign('lastts', $this->lastts); $smarty->assign("battleOverviewTableTemplate", $this->templateDir . "battle_overview_table.tpl"); return $smarty->fetch($this->templateDir . "battle_overview.tpl"); } /** * @return string HTML for the timeline tab */ public function timeLine() { global $smarty; uasort($this->timeLine, array("self", "compareTimelineEntry")); $smarty->assign("timeline", $this->timeLine); $this->klist->rewind(); $this->llist->rewind(); $summaryTable = new KillSummaryTable($this->klist, $this->llist); $summaryTable->generate(); $smarty->assign('kcount', $summaryTable->getTotalKills()); $smarty->assign('lcount', $summaryTable->getTotalLosses()); return $smarty->fetch($this->templateDir . "battle_timeline.tpl"); } /** * @return string HTML for the losslists tab */ public function lossValueLists() { global $smarty; // sort loss value lists uasort($this->lossValues, array("self", "compareLossValueEntity")); uasort($this->killValues, array("self", "compareLossValueEntity")); $this->klist->rewind(); $this->llist->rewind(); $summaryTable = new KillSummaryTable($this->klist, $this->llist); $summaryTable->generate(); $smarty->assign("lossValues", $this->lossValues); $smarty->assign("killValues", $this->killValues); $smarty->assign('kcount', $summaryTable->getTotalKills()); $smarty->assign('lcount', $summaryTable->getTotalLosses()); $smarty->assign("battleLossValuesTableTemplate", $this->templateDir . "battle_lossValues_table.tpl"); return $smarty->fetch($this->templateDir . 'battle_lossValues.tpl'); } /** * @return string HTML for the loot tab */ public function lootOverview() { global $smarty; // hostile Loot // initialize arrays $destroyedLoot = array(); $droppedLoot = array(); $lootOverview = array(); // get loot $lootOverview["hostile"]["destroyed"]["totalValue"] = self::getDestroyedLoot($this->klist, $destroyedLoot); $lootOverview["hostile"]["dropped"]["totalValue"] = self::getDroppedLoot($this->klist, $droppedLoot); // sort loot by value desc uasort($destroyedLoot, array("self", "sortLoot")); uasort($droppedLoot, array("self", "sortLoot")); // save in overview $lootOverview["hostile"]["destroyed"]["list"] = $destroyedLoot; $lootOverview["hostile"]["dropped"]["list"] = $droppedLoot; // initialize arrays $destroyedLoot = array(); $droppedLoot = array(); // get loot $lootOverview["friendly"]["destroyed"]["totalValue"] = self::getDestroyedLoot($this->llist, $destroyedLoot); $lootOverview["friendly"]["dropped"]["totalValue"] = self::getDroppedLoot($this->llist, $droppedLoot); // sort loot by value desc uasort($destroyedLoot, array("self", "sortLoot")); uasort($droppedLoot, array("self", "sortLoot")); // save in overview $lootOverview["friendly"]["destroyed"]["list"] = $destroyedLoot; $lootOverview["friendly"]["dropped"]["list"] = $droppedLoot; // assign values $smarty->assign("lootFriendly", $lootOverview["friendly"]); $smarty->assign("lootHostile", $lootOverview["hostile"]); $smarty->assign("lootTableTemplate", $this->templateDir . "loot_table.tpl"); return $smarty->fetch($this->templateDir . "loot_overview.tpl"); } /** * @return string HTML for the footer */ public function footer() { $html="
"; // var_dump($timestampStart); // var_dump($timestampEnd); // var_dump($battle["start"]); // var_dump($battle["end"]); // echo ""; // battle is in exactly the same time interval as the current displayed one -> can update with stats of current battle if($timestampStart == $battle["start"] && $timestampEnd == $battle["end"]) { $this->statusMessages[] = "Stats for a cached Battle have been updated."; $battleIdsToUpdateWithCurrentStats[] = $battle["battle_id"]; } // battle overlaps -> compelete recalculation necessary // we'll let the cronjob do that, too expensive to do now else { $this->statusMessages[] = "deleting battle {$battle["battle_id"]}"; $this->statusMessages[] = "Changes partially affect stats of a cached battle. The cache for this battle has been deleted. Please build your cache or wait for cronjob execution. "; Battle::deleteBattleFromCache($battle["battle_id"]); } } $this->battlesToUpdate = $battleIdsToUpdateWithCurrentStats; } protected function handleDeleteBattleSetup() { if(!Session::isAdmin() || !config::get("fleet_battles_mod_sideassign") || !isset($_POST["deleteSideAssignments"]) || $_POST["deleteSideAssignments"] != "reset") { return; } $timestampStart = $_POST["timestampStart"]; $timestampEnd = $_POST["timestampEnd"]; $systemIds = explode(",", $_POST["systemIds"]); foreach($_POST AS $elementName => $side) { if(strpos($elementName, "side_") === 0) { $elementName = substr($elementName, 5); // index 0 is entityType // index 1 is entityId $entityInfo = explode("-", $elementName); // for each system foreach($systemIds AS $systemId) { // delete side assignment $this->deleteSideAssignment($systemId, $timestampStart, $timestampEnd, $entityInfo[1], $entityInfo[0]); } } } $this->checkForBattleCacheUpdate($systemIds, $timestampStart, $timestampEnd); $this->statusMessages[] = "Side assignments have been deleted."; } } $killRelated = new pKillRelatedFleetBattle(); // read URI parameters so we can decide what we have to do $balanceOfPowerTab = (bool) edkURI::getArg('BalanceOfPower'); $battleTimelineTab = (bool) edkURI::getArg('BattleTimeline'); $lossValuesTab = (bool) edkURI::getArg('LossValues'); $damageOverviewTab = (bool) edkURI::getArg('DamageOverview'); $killListsTab = (bool) edkURI::getArg('KillLists'); $lootTab = (bool) edkURI::getArg('Loot'); $setupTab = (bool) edkURI::getArg('Setup'); // show Balance of Power Tab only as per ajax request if($balanceOfPowerTab) { $killRelated->start(); $killRelated->buildStats(); echo $killRelated->balanceOfPower(); exit(); } // show Battle Timeline Tab only as per ajax request elseif($battleTimelineTab) { $killRelated->start(); $killRelated->buildStats(); echo $killRelated->timeLine(); exit(); } // show Loss Values Tab only as per ajax request elseif($lossValuesTab) { $killRelated->start(); $killRelated->buildStats(); echo $killRelated->lossValueLists(); exit(); } // show Damage Overview Tab only as per ajax request elseif($damageOverviewTab) { $killRelated->start(); $killRelated->buildStats(); echo $killRelated->damageOverview(); exit(); } // show Kill Lists Tab only as per ajax request elseif($killListsTab) { $killRelated->start(); $killRelated->buildStats(); echo $killRelated->killList(); exit(); } // show Loot Tab only as per ajax request elseif($lootTab) { $killRelated->start(); $killRelated->buildStats(); echo $killRelated->lootOverview(); exit(); } // show Battle Setup tab only as per ajax request elseif($setupTab && Session::isAdmin()) { $killRelated->start(); $killRelated->buildStats(); echo $killRelated->battleSetup(); exit(); } // default: show related kills page else { // queue up callbacks in right order $killRelated->queue("start"); //$this->queue("getInvolved"); $killRelated->queue("handleSaveBattleSetup"); $killRelated->queue("handleDeleteBattleSetup"); $killRelated->queue("buildStats"); $killRelated->queue("metaTags"); $killRelated->queue("summaryTable"); // Battle in .... $killRelated->queue("battleHeader"); // open a tabbed area $killRelated->queue("beginTabberArea"); $killRelated->queue("addDefaultTabs"); // if configured and admin: battle setup tab if(config::get("fleet_battles_mod_sideassign") && Session::isAdmin()) { $killRelated->queue("battleSetup"); } // close the tabbed area $killRelated->queue("endTabberArea"); $killRelated->queue("footer"); $killRelated->queue("initTabber"); event::call("killRelated_assembling", $killRelated); $html = $killRelated->assemble(); // we need jquery to load $killRelated->page->addJsLibs("jquery"); $killRelated->page->setContent($html); $killRelated->context(); event::call("killRelated_context_assembling", $killRelated); $context = $killRelated->assemble(); $killRelated->page->addContext($context); $killRelated->page->generate(); }