コード例 #1
0
ファイル: index.php プロジェクト: Kuzat/kofradia
    /**
     * 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 . '&amp;buy">&laquo; 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 . '&amp;buy">Tilbake</a></p>
			</form>';
                } elseif (!$info && (!access::has("mod") || !isset($_GET['override']))) {
                    echo '
			<p><a href="./?ff_id=' . $this->ff->id . '">&laquo; 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 . '&amp;fff_compare&amp;buy">Kjøp informasjon &raquo;</a></p>';
                    }
                    if (access::has("mod")) {
                        echo '
			<p><a href="./?ff_id=' . $this->ff->id . '&amp;fff_compare&amp;override">Vis nåværende informasjon som moderator &raquo;</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 . '&amp;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 . '">&laquo; 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 . '&amp;fff_compare&amp;buy">Kjøp ny informasjon &raquo;</a></p>';
                    }
                    if (access::has("mod") && !isset($_GET['override'])) {
                        echo '
			<p><a href="./?ff_id=' . $this->ff->id . '&amp;fff_compare&amp;override">Vis nåværende informasjon som moderator &raquo;</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 . '">&laquo; Tilbake</a></p>';
            } else {
                echo '
			<p><a href="./?ff_id=' . $this->ff->id . '&amp;fff_compare">Sammenlikne med de andre broderskapene &raquo;</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 . '&amp;fff_rank">Vis oversikt over medlemmers bidrag &raquo;</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 . '&amp;a=br">Velg bygning &raquo;</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>';
            }
        }
    }