/** * Konkurransedetaljer */ protected function competition_details() { // vis informasjon hvis konkurranse? if ($this->ff->uinfo && $this->ff->competition && $this->ff->data['fff_time_expire']) { echo ' <div class="section"> <h2>Konkurransemodus</h2> <p class="h_right">Kun synlig for broderskapmedlemmer</p> <p>Broderskapet er i konkurransemodus. <a href="./?fff_id=' . $this->ff->data['fff_id'] . '">Vis konkurransedetaljer</a></p>'; // vis tidsgraf $time_status = (time() - $this->ff->data['fff_time_start']) / ($this->ff->data['fff_time_expire'] - $this->ff->data['fff_time_start']); $time_status = min(100, max(0, $time_status * 100)); echo ' <div class="progressbar" style="margin: 1em 0"> <div class="progress" style="width: ' . round($time_status) . '%"> <p>Tidsstatus: ' . game::format_number($time_status, 1) . ' %</p> </div> </div>'; // vis rankstatus $rank_points = $this->ff->competition_rank_points(); $rank_status = min(100, $rank_points / $this->ff->data['fff_required_points'] * 100); $rank_status_text = $rank_points / $this->ff->data['fff_required_points'] * 100; echo ' <div class="progressbar" style="margin: 1em 0"> <div class="progress" style="width: ' . round($rank_status) . '%"> <p>Rankstatus minstekrav: ' . game::format_number($rank_status_text, 2) . ' %</p> </div> </div>'; if (isset($_GET['fff_compare'])) { // har vi informasjon $info = $this->ff->params->get("competition_info"); if ($info) { $info = unserialize($info); } echo ' <h3>Sammenlikning med de andre broderskapene</h3>'; // skjema for å kjøpe ny info if (isset($_GET['buy']) && $this->ff->access(1)) { // har det ikke gått lang nok tid siden sist? if ($info && $info['time'] > time() - 3600 * 6) { ess::$b->page->add_message("Ny informasjon kan ikke kjøpes før det har gått 6 timer siden forrige kjøp.", "error"); redirect::handle("?ff_id={$this->ff->id}&fff_compare"); } // utføre kjøpet? if (isset($_POST['confirm']) && validate_sid(false)) { $result = $this->ff->buy_competition_info(); if (is_array($result)) { ess::$b->page->add_message("Informasjon om de andre broderskapene ble kjøpt."); redirect::handle("?ff_id={$this->ff->id}&fff_compare"); } switch ($result) { case "wait": ess::$b->page->add_message("Du må vente minimum 6 timer mellom hvert kjøp.", "error"); break; case "none": ess::$b->page->add_message("Det er ingen andre broderskap i konkurransen.", "error"); break; case "familie_cash": ess::$b->page->add_message("Det er ikke nok penger i broderskapbanken.", "error"); break; default: ess::$b->page->add_message("Ukjent feil.", "error"); } } echo ' <p><a href="./?ff_id=' . $this->ff->id . '&buy">« Tilbake</a></p> <form action="" method="post"> <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" /> <p>Informasjonen som blir kjøpt gjelder <u>kun</u> for det øyeblikket kjøpet blir gjennomført, og blir ikke oppdatert før ny informasjon blir kjøpt.</p> <dl class="dd_right"> <dt>Penger i broderskapbanken</dt> <dd>' . game::format_cash($this->ff->data['ff_bank']) . '</dd> <dt>Kostnad for informasjon</dt> <dd>' . game::format_cash(ff::COMPETITION_INFO_COST) . '</dd> </dl> <p>Beløpet blir trukket fra broderskapbanken.</p> <p class="c">' . show_sbutton("Kjøp informasjon", 'name="confirm"') . ' <a href="./?ff_id=' . $this->ff->id . '&buy">Tilbake</a></p> </form>'; } elseif (!$info && (!access::has("mod") || !isset($_GET['override']))) { echo ' <p><a href="./?ff_id=' . $this->ff->id . '">« Tilbake</a></p> <p>For å kunne se informasjonen om de andre broderskapene, må det betales et beløp på ' . game::format_cash(ff::COMPETITION_INFO_COST) . '. Da får man vite hvor mye de andre broderskapene har ranket i forhold til ditt broderskap.</p> <p>Denne informasjonen gjelder kun det tidspunktet informasjonen ble kjøpt. Etter det har gått 6 timer kan ny informasjon kjøpes.</p> <p>Kun Capofamiglia har mulighet til å kjøpe denne informasjonen. Alle medlemmene i broderskapet kan se oversikten når den er kjøpt.</p>'; if ($this->ff->access(1)) { echo ' <p><a href="./?ff_id=' . $this->ff->id . '&fff_compare&buy">Kjøp informasjon »</a></p>'; } if (access::has("mod")) { echo ' <p><a href="./?ff_id=' . $this->ff->id . '&fff_compare&override">Vis nåværende informasjon som moderator »</a></p>'; } } else { // generere informasjon? if ((!$info || isset($_GET['override'])) && access::has("mod")) { ess::$b->page->add_message('Du viser informasjon som moderator. <a href="./?ff_id=' . $this->ff->id . '&fff_compare">Tilbake</a>'); $info = $this->ff->get_competition_info(); } // tidsgraf for det øyeblikket informasjonen ble kjøpt $time_status = ($info['time'] - $this->ff->data['fff_time_start']) / ($this->ff->data['fff_time_expire'] - $this->ff->data['fff_time_start']); $time_status = min(100, max(0, $time_status * 100)); // vis informasjon echo ' <p><a href="./?ff_id=' . $this->ff->id . '">« Tilbake</a></p> <p>Informasjon om de andre broderskapene ble kjøpt ' . ess::$b->date->get($info['time'])->format() . '. Det er ' . game::timespan($info['time'], game::TIME_ABS | game::TIME_PAST | game::TIME_FULL) . '.</p> <div class="progressbar" style="margin: 1em 0"> <div class="progress" style="width: ' . round($time_status) . '%"> <p>Tidsstatus for informasjon: ' . game::format_number($time_status, 1) . ' %</p> </div> </div> <p>Broderskap i konkurransen:</p>'; // hent navn for familiene og sett opp data $ff_ids = array(); $stats = array(); $max = $this->ff->data['fff_required_points']; foreach ($info['stats'] as $row) { $ff_ids[] = $row['ff_id']; $stats[$row['ff_id']] = array($row['ff_id'], $row['ff_name'], $row['total_points'], false); $max = max($max, abs($row['total_points'])); } if (count($ff_ids) > 0) { $result = \Kofradia\DB::get()->query("SELECT ff_id, ff_name, ff_inactive FROM ff WHERE ff_id IN (" . implode(",", $ff_ids) . ")"); while ($row = $result->fetch()) { $stats[$row['ff_id']][1] = $row['ff_name']; $stats[$row['ff_id']][3] = $row['ff_inactive'] == 0; } } ess::$b->page->add_css(' .familie_panel_pay { margin-bottom: 1em } .familie_panel_pay .progressbar p { width: 300px; color: #EEEEEE } .familie_panel_pay .progressbar { margin-bottom: 2px; background-color: #2D2D2D } .familie_panel_pay .progressbar .progress { background-color: #434343 }'); echo ' <div class="familie_panel_pay">'; // vis oversikten over familiene foreach ($stats as $row) { // vis rankstatus $rank_status = $row[2] / $max * 100; $w = abs($rank_status); $link = $row[3] ? '<a href="./?ff_id=' . $row[0] . '">' . htmlspecialchars($row[1]) . '</a>' : htmlspecialchars($row[1]); echo ' <div class="progressbar"> <div class="progress' . ($row[2] < 0 ? ' ff_progress_negative' : '') . '" style="width: ' . round($w) . '%"> <p>' . $link . ' (' . game::format_number($rank_status, 2) . ' %)</p> </div> </div>'; } echo ' </div>'; if ($this->ff->access(1)) { echo ' <p><a href="./?ff_id=' . $this->ff->id . '&fff_compare&buy">Kjøp ny informasjon »</a></p>'; } if (access::has("mod") && !isset($_GET['override'])) { echo ' <p><a href="./?ff_id=' . $this->ff->id . '&fff_compare&override">Vis nåværende informasjon som moderator »</a></p>'; } } } elseif (isset($_GET['fff_rank'])) { $rank_info = $this->ff->get_rank_info(); ess::$b->page->add_css(' .familie_panel_pay .progressbar p { width: 300px; color: #EEEEEE } .familie_panel_pay .progressbar { margin-bottom: 2px; background-color: #2D2D2D } .familie_panel_pay .progressbar .progress { background-color: #434343 }'); echo ' <p>Bidrag fordelt på medlemmer:</p> <div class="familie_panel_pay">'; if (count($rank_info['players']) == 0) { echo ' <p>' . ucfirst($this->ff->type['refobj']) . ' har ingen medlemmer.</p>'; } else { foreach ($rank_info['players'] as $info) { echo ' <div class="progressbar"> <div class="progress' . ($info['points'] < 0 ? ' ff_progress_negative' : '') . '" style="width: ' . round($info['percent_bar']) . '%"> <p>' . game::profile_link($info['member']->id, $info['member']->data['up_name'], $info['member']->data['up_access_level']) . ' (' . $info['member']->get_priority_name() . ($info['member']->data['ffm_parent_up_id'] ? ' underordnet <user id="' . $info['member']->data['ffm_parent_up_id'] . '" />' : '') . ') (' . game::format_number($info['percent_text'], 1) . ' %)</p> </div> </div>'; } } if (isset($rank_info['others'])) { echo ' <div class="progressbar"> <div class="progress' . ($rank_info['others']['points'] < 0 ? ' ff_progress_negative' : '') . '" style="width: ' . round($rank_info['others']['percent_bar']) . '%"> <p>Tidligere medlemmer av ' . $this->ff->type['refobj'] . ' - teller ikke (' . game::format_number($rank_info['others']['percent_text'], 1) . ' %)</p> </div> </div>'; } echo ' </div> <p><a href="./?ff_id=' . $this->ff->id . '">« Tilbake</a></p>'; } else { echo ' <p><a href="./?ff_id=' . $this->ff->id . '&fff_compare">Sammenlikne med de andre broderskapene »</a></p> <p>Hvis et av medlemmene forlater broderskapet i konkurranseperioden, vil broderskapet <u>miste</u> ranken dette medlemmet har opptjent. Inviteres en spiller på nytt telles ranken fra det tidspunktet spilleren ble medlem på nytt.</p> <p>Minstekravet for rank <u>må</u> klares. Selv om minstekravet blir oppnådd, er det broderskapet i konkurransen som har opptjent <u>mest rank som overlever</u>.</p> <p>Hvis broderskapet ikke vinner konkurransen, vil broderskapet dø ut.</p> <p>Hvis broderskapet vinner konkurransen, må leder/nestleder velge en bygning broderskapet skal ha som tilholdssted innen <u>24 timer</u> etter konkurransen er avsluttet for ikke å miste broderskapet.</p> <p><a href="./?ff_id=' . $this->ff->id . '&fff_rank">Vis oversikt over medlemmers bidrag »</a></p>'; } echo ' </div>'; } elseif ($this->ff->competition && $this->ff->data['fff_time_expire']) { echo ' <div class="section"> <h2>Konkurransemodus</h2> <p>Broderskapet er i konkurransemodus. <a href="./?fff_id=' . $this->ff->data['fff_id'] . '">Vis konkurransedetaljer</a></p>'; // vis tidsgraf $time_status = (time() - $this->ff->data['fff_time_start']) / ($this->ff->data['fff_time_expire'] - $this->ff->data['fff_time_start']); $time_status = min(100, max(0, $time_status * 100)); echo ' <div class="progressbar" style="margin: 1em 0"> <div class="progress" style="width: ' . round($time_status) . '%"> <p>Tidsstatus: ' . game::format_number($time_status, 1) . ' %</p> </div> </div> </div>'; } elseif ($this->ff->uinfo && !$this->ff->data['br_id'] && $this->ff->data['fff_time_expire'] && $this->ff->data['ff_inactive'] == 0) { echo ' <div class="section"> <h2>Mangler bygning</h2> <p class="h_right">Kun synlig for broderskapmedlemmer</p> <p>Broderskapet vant broderskapkonkurransen, men leder/nestleder må fremdeles velge bygning for at broderskapet ikke skal dø ut.</p> <p>Valg av bygning må skje innen ' . game::timespan($this->ff->data['fff_time_expire_br'], game::TIME_ABS) . '.</p>' . ($this->ff->access(2) ? ' <p><a href="panel?ff_id=' . $this->ff->id . '&a=br">Velg bygning »</a></p>' : '') . ' </div>'; } // har ikke betalt innen fristen? if ($this->ff->uinfo) { $pay_info = $this->ff->pay_info(); if ($pay_info && !$pay_info['in_time']) { echo ' <div class="section"> <h2>Broderskapkostnaden er ikke betalt</h2> <p class="h_right">Kun synlig for broderskapmedlemmer</p> <p>Broderskapkostnaden ble ikke betalt i tide. ' . ucfirst($this->ff->type['priority'][1]) . '/' . $this->ff->type['priority'][2] . ' må betales dette innen ' . ess::$b->date->get($pay_info['next'])->format() . ' for at broderskapet ikke skal dø ut.</p> </div>'; } } }