Example #1
0
    /**
     * Vis informasjon om betaling for FF
     */
    protected function page_pay_handle()
    {
        $pay_info = $this->ff->pay_info();
        if (isset($_POST['pay'])) {
            // har vi ikke gått over tiden
            if ($pay_info['in_time']) {
                ess::$b->page->add_message("Du har ikke mulighet til å betale nå.");
            } elseif (login::$user->player->data['up_cash'] <= $pay_info['price']) {
                ess::$b->page->add_message("Du har ikke nok penger på hånda.");
            } else {
                // utfør betalingen
                $result = $this->ff->pay_action();
                if ($result !== false) {
                    ess::$b->page->add_message("Du har betalt driftskostnaden på <b>" . game::format_cash($result) . "</b>. Neste gang driftskostnaden skal trekkes er " . ess::$b->date->get($this->ff->data['ff_pay_next'])->format() . ".");
                    $this->ff->redirect();
                } else {
                    ess::$b->page->add_message("Noe gikk galt ved betaling. Prøv på nytt.");
                    redirect::handle("panel?ff_id={$this->ff->id}&a=pay");
                }
            }
        }
        ess::$b->page->add_title("Driftskostnad");
        // hent oversikt over medlemmer og vis hvor mye hver av dem har ranket som teller for FF
        $rank_info = $this->ff->get_rank_info();
        ess::$b->page->add_css('
.ff_panel_pay { padding-bottom: 1em }
.ff_panel_pay .progressbar p { color: #EEEEEE }
.ff_panel_pay .progressbar { margin-bottom: 2px; background-color: #2D2D2D }
.ff_panel_pay .progressbar .progress { background-color: #434343 }');
        echo '
<div class="section w350 ff_panel_pay">
	<h2>Driftskostnad</h2>
	<p class="h_right"><a href="panel?ff_id=' . $this->ff->id . '">Tilbake</a></p>
	<boxes />
	<p>For at ' . $this->ff->type['refobj'] . ' ikke skal dø ut, må det betales inn et beløp på <u>100 mill</u> i tillegg til kostnad per ekstra medlemsplass til spillet hver 10. dag.</p>
	<p>Når medlemmene i ' . $this->ff->type['refobj'] . ' ranker, vil beløpet som må innbetales synke med 1 og 1 mill avhengig av hvor mye som rankes.</p>
	<p>' . ucfirst($this->ff->type['refobj']) . ' mister ikke ranken hvis et medlem forlater ' . $this->ff->type['refobj'] . '.</p>
	<p>Beløpet vil bli trukket fra banken for ' . $this->ff->type['refobj'] . ' automatisk ved innbetalingstidspunkt. Hvis det ikke er nok penger i banken, vil ' . $this->ff->type['refobj'] . ' få frist på å innbetale beløpet manuelt innen 24 timer. Beløpet vil da øke med 50 %.</p>' . (!$pay_info['in_time'] ? '
	<div class="section" style="width: 220px">
		<h2>Betaling av driftskostnad</h2>
		<p class="error_box">' . ucfirst($this->ff->type['refobj']) . ' har overskredet tidspunktet for innbetaling. Betaling må skje manuelt av ' . $this->ff->type['priority'][1] . '/' . $this->ff->type['priority'][2] . '.</p>
		<dl class="dd_right">
			<dt>Betalingsfrist</dt>
			<dd>' . ess::$b->date->get($pay_info['next'])->format() . '<br />' . game::timespan($pay_info['next'], game::TIME_ABS) . '</dd>
			<dt>Beløp</dt>
			<dd>' . game::format_cash($pay_info['price']) . '</dd>
		</dl>' . ($this->ff->access(2) ? '
		<form action="panel?ff_id=' . $this->ff->id . '&amp;a=pay" method="post">
			<p class="c">' . show_sbutton("Betal driftskostnaden", 'name="pay"') . '</p>
		</form>' : '') . '
		<p>Hvis beløpet ikke blir betalt innen betalingsfristen vil ' . $this->ff->type['refobj'] . ' bli oppløst.</p>
	</div>' : '
	<dl class="dd_right">
		<dt>Neste innbetaling</dt>
		<dd>' . ess::$b->date->get($pay_info['next'])->format() . '</dd>
		<dt>Utgangspunkt for beløp (' . fwords("%d eksta spillerplass", "%d ekstra spillerplasser", $pay_info['members_limit']) . ')</dt>
		<dd>' . game::format_cash($pay_info['price_max']) . '</dd>
		<dt>Foreløpig beløp</dt>
		<dd>' . game::format_cash($pay_info['price']) . '</dd>
	</dl>') . '
	<p>Medlemmers bidrag:</p>';
        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'] . ' (' . game::format_number($rank_info['others']['percent_text'], 1) . ' %)</p>
		</div>
	</div>';
        }
        echo '
</div>';
        $this->ff->load_page();
    }
Example #2
0
    /**
     * 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>';
            }
        }
    }