Example #1
0
    /**
     * Publiser utgivelse
     */
    protected function pub_publish(ff_avis_utgivelse $ffn)
    {
        // allerede publisert
        if ($ffn->data['ffn_published'] != 0) {
            ess::$b->page->add_message("Utgivelsen er allerede publisert.", "error");
            redirect::handle();
        }
        // kontroller beskrivelse
        $desc_plain = strip_tags(game::format_data($ffn->data['ffn_description']));
        if (mb_strlen($desc_plain) < 30) {
            ess::$b->page->add_message("Beskrivelsen for utgivelsen må inneholde minimum 30 bokstaver/tall før den kan publiseres.", "error");
            redirect::handle();
        }
        // sjekk når siste publisering ble utført
        $result = \Kofradia\DB::get()->query("SELECT ffn_published_time FROM ff_newspapers WHERE ffn_ff_id = {$this->ff->id} AND ffn_published != 0 ORDER BY ffn_published_time DESC LIMIT 1");
        $last = $result->rowCount() > 0 ? $result->fetchColumn(0) : 0;
        // har det gått lang nok tid?
        $delay = ff_avis::FFN_PUBLISH_DELAY + $last - time();
        if ($delay > 0) {
            ess::$b->page->add_message("Du må vente " . game::timespan(ff_avis::FFN_PUBLISH_DELAY, game::TIME_FULL) . " mellom hver utgivelse som utføres. Gjenstår før neste utgivelse kan publiseres: " . game::timespan($delay, game::TIME_FULL) . ".", "error");
            redirect::handle();
        }
        // hent artiklene med pris
        $result = \Kofradia\DB::get()->query("SELECT ffna_id, ffna_up_id, ffna_title, ffna_price FROM ff_newspapers_articles WHERE ffna_ffn_id = {$ffn->id} ORDER BY ffna_title");
        // for få artikler?
        if ($result->rowCount() < 4) {
            ess::$b->page->add_message("Utgivelsen må inneholde minimum 4 artikler for å bli publisert.", "error");
            redirect::handle();
        }
        // kun eier
        if (!$this->ff->access(1)) {
            ess::$b->page->add_message("Kun " . htmlspecialchars($this->ff->type['priority'][1]) . " kan publisere utgivelsen.", "error");
            redirect::handle();
        }
        // finn total pris for artiklene
        $articles = array();
        $articles_price = 0;
        while ($row = $result->fetch()) {
            $articles_price += $row['ffna_price'];
            $articles[] = $row;
        }
        $total_price = $articles_price + ff_avis::FFN_PUBLISH_COST;
        // godkjenne publisering?
        if (isset($_POST['approve'])) {
            $price = game::intval(postval("price"));
            $sid = postval("sid");
            // kontroller pris
            if ($price != $total_price) {
                ess::$b->page->add_message("Det ser ut som prisen har endret seg. Prøv på nytt.", "error");
            } elseif ($sid != login::$info['ses_id']) {
                ess::$b->page->add_message("Ugyldig.", "error");
            } elseif ($total_price > 0 && $this->ff->data['ff_bank'] < $total_price) {
                ess::$b->page->add_message("Det er ikke nok penger i firmabanken.", "error");
            } else {
                \Kofradia\DB::get()->beginTransaction();
                // trekk fra pengene fra firmabanken
                if ($total_price > 0 && !$this->ff->bank(ff::BANK_BETALING, $total_price, "Publisering av utgivelse: {$ffn->data['ffn_title']} (id: {$ffn->id})")) {
                    \Kofradia\DB::get()->commit();
                    // var tidligere rollback, men trenger ikke være det
                    ess::$b->page->add_message("Det er ikke nok penger i firmabanken.", "error");
                } else {
                    // oppdater utgivelsen
                    \Kofradia\DB::get()->exec("UPDATE ff_newspapers SET ffn_published = 1, ffn_published_time = " . time() . ", ffn_published_up_id = " . login::$user->player->id . " WHERE ffn_id = {$ffn->id}");
                    // utbetal til journalistene
                    \Kofradia\DB::get()->exec("UPDATE users_players, ff_members, (SELECT ffna_up_id, SUM(ffna_price) AS ffna_sum, COUNT(ffna_price) AS ffna_count FROM ff_newspapers_articles WHERE ffna_ffn_id = {$ffn->id} AND ffna_price > 0 GROUP BY ffna_up_id) AS ref SET up_bank = up_bank + ffna_sum, up_bank_received = up_bank_received + ffna_sum, up_bank_profit = up_bank_profit + ffna_sum, up_bank_num_received = up_bank_num_received + ffna_count, up_log_new = up_log_new + ffna_count, ffm_earnings = ffm_earnings + ffna_sum WHERE ffna_up_id = up_id AND ffm_up_id = up_id AND ffm_ff_id = {$this->ff->id}");
                    // lagre overføringslogg
                    \Kofradia\DB::get()->exec("INSERT INTO bank_log (bl_sender_up_id, bl_receiver_up_id, amount, time) SELECT " . login::$user->player->id . ", ffna_up_id, ffna_price, " . time() . " FROM users_players, ff_newspapers_articles WHERE ffna_ffn_id = {$ffn->id} AND ffna_up_id = up_id AND ffna_price > 0");
                    // spillelogg
                    \Kofradia\DB::get()->exec("INSERT INTO users_log (time, ul_up_id, type, note, num) SELECT " . time() . ", ffna_up_id, " . gamelog::$items['bankoverforing'] . ", CONCAT(ffna_price, ':Utbetaling for avisartikkel.'), " . login::$user->player->id . " FROM users_players, ff_newspapers_articles WHERE ffna_ffn_id = {$ffn->id} AND ffna_up_id = up_id AND ffna_price > 0");
                    \Kofradia\DB::get()->commit();
                    // live-feed
                    livefeed::add_row('Avisutgivelsen <a href="' . ess::$s['relative_path'] . '/ff/avis?ff_id=' . $this->ff->id . '&amp;ffn=' . $ffn->id . '">' . htmlspecialchars($ffn->data['ffn_title']) . '</a> ble publisert av <a href="' . ess::$s['relative_path'] . '/ff/?ff_id=' . $this->ff->id . '">' . htmlspecialchars($this->ff->data['ff_name']) . '</a>.');
                    ess::$b->page->add_message("Utgivelsen er nå publisert.");
                    redirect::handle();
                }
            }
        }
        echo '
<p class="c">Publiser utgivelse | <a href="avis?ff_id=' . $this->ff->id . '&amp;u&amp;ffn=' . $ffn->id . '">Tilbake</a></p>
<div class="section center w200">
	<h2>Utgivelsesinformasjon</h2>
	<dl class="dd_right">
		<dt>Tittel</dt>
		<dd>' . htmlspecialchars($ffn->data['ffn_title']) . '</dd>
		<dt>Opprettet</dt>
		<dd>' . ess::$b->date->get($ffn->data['ffn_created_time'])->format() . '</dd>
		<dt>Salgspris</dt>
		<dd>' . game::format_cash($ffn->data['ffn_cost']) . '</dd>
	</dl>
</div>
<div class="section center w200">
	<h2>Beskrivelse av utgivelsen</h2>' . (($d = $this->ff->format_description($ffn->data['ffn_description'])) != '' ? '
	<div class="p">' . $d . '</div>' : '
	<p>Ingen beskrivelse.</p>') . '
</div>
<form action="" method="post">
	<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
	<input type="hidden" name="price" value="' . $total_price . '" />
	<div class="section center w350">
		<h2>Prisoversikt</h2>
		<dl class="dd_right">
			<dt>Publisering av utgivelse</dt>
			<dd>' . game::format_cash(ff_avis::FFN_PUBLISH_COST) . '</dd>';
        foreach ($articles as $row) {
            echo '
			<dt><a href="avis?ff_id=' . $this->ff->id . '&amp;a&amp;ffna_id=' . $row['ffna_id'] . '">' . htmlspecialchars($row['ffna_title']) . '</a> (<user id="' . $row['ffna_up_id'] . '" />)</dt>
			<dd>' . game::format_cash($row['ffna_price']) . '</dd>';
        }
        echo '
		</dl>
		<dl class="dd_right">
			<dt>I firmabanken</dt>
			<dd>' . game::format_cash($this->ff->data['ff_bank']) . '</dd>
			<dt><u>Samlet kostnader</u></dt>
			<dd><u>' . game::format_cash($total_price) . '</u></dd>
		</dl>
		<p class="c">' . show_sbutton("Publiser utgivelsen", 'name="approve"') . '</p>
	</div>
</form>
<div class="hr fhr"><hr /></div>';
        // vis utgivelsen
        echo $ffn->build_avis_html();
    }
Example #2
0
    /**
     * Behandle navnbytte
     */
    protected function page_navnbytte_handle()
    {
        ess::$b->page->add_title("Navnbytte");
        echo '
<!-- søk om navnbytte -->
<div class="section w200">
	<h2>Søk om navnbytte</h2><boxes />';
        // hent mulig søknad
        $result = \Kofradia\DB::get()->query("SELECT ds_id, ds_up_id, ds_time, ds_reason, ds_params FROM div_soknader WHERE ds_type = " . soknader::TYPE_FF_NAME . " AND ds_rel_id = {$this->ff->id} AND ds_reply_decision = 0");
        $soknad = $result->fetch();
        // har vi en aktiv søknad?
        if ($soknad) {
            $params = unserialize($soknad['ds_params']);
            // trekke tilbake søknaden?
            if (isset($_POST['withdraw'])) {
                if (soknader::delete($soknad['ds_id'])) {
                    $extra = '';
                    // gi tilbake penger?
                    if (isset($params['cost']) && $params['cost'] > 0) {
                        $this->ff->bank(ff::BANK_TILBAKEBETALING, $params['cost'], 'Navnsøknad tilbaketrukket: ' . $params['name']);
                        $extra = ' Beløpet på ' . game::format_cash($params['cost']) . ' ble satt tilbake på bankkontoen.';
                    }
                    ess::$b->page->add_message("Søknaden ble trukket tilbake.{$extra}");
                }
                redirect::handle("panel?ff_id={$this->ff->id}&a=navnbytte");
            }
            echo '
	<p>Søknad ble levert av <user id="' . $soknad['ds_up_id'] . '" /> ' . ess::$b->date->get($soknad['ds_time'])->format() . '.</p>
	<dl class="dd_right">
		<dt>Navn som søkes</dt>
		<dd>' . htmlspecialchars($params['name']) . '</dd>
		<dt>Kostnad</dt>
		<dd>' . (isset($params['cost']) ? game::format_cash($params['cost']) : '0 kr') . '</dd>
	</dl>
	<p><u>Begrunnelse:</u><br />' . game::format_data($soknad['ds_reason'], "bb-opt", "Ingen begrunnelse gitt.") . '</p>
	<p>Søknaden er under behandling.</p>
	<form action="" method="post">
		<p>' . show_sbutton("Trekk tilbake søknad", 'name="withdraw"') . '</p>
	</form>';
        } else {
            // kan vi levere gratis søknad?
            $soknad_free = $this->ff->mod || $this->ff->competition || !$this->ff->params->get("name_changed") || $this->ff->params->get("name_changed") < $this->ff->params->get("sold") || $this->ff->params->get("name_changed") < $this->ff->data['ff_time_reset'];
            // levere søknad?
            if (isset($_POST['name']) && isset($_POST['reason'])) {
                $name = trim(postval("name"));
                $reason = trim(postval("reason"));
                // fjern evt. flere mellomromstegn etter hverandre
                $name = preg_replace("/  +/u", " ", $name);
                $_POST['name'] = $name;
                // samme navn som før?
                if ($name == $this->ff->data['ff_name']) {
                    ess::$b->page->add_message("Du må velge et nytt navn å søke om.");
                } elseif (preg_match("/[^\\p{L}\\d ]/u", $name)) {
                    ess::$b->page->add_message("Navnet kan kun inneholde bokstaver, tall og mellomrom.", "error");
                } elseif (mb_strlen($name) < 2) {
                    ess::$b->page->add_message("Minimum lengde for navnet er 2 tegn.", "error");
                } elseif (mb_strlen($name) > 20) {
                    ess::$b->page->add_message("Maksimal lengde for navnet er 20 tegn.", "error");
                } elseif (empty($reason)) {
                    ess::$b->page->add_message("Du må fylle inn en begrunnelse.", "error");
                } else {
                    $success = $soknad_free;
                    // forsøk å trekk fra pengene
                    if (!$soknad_free) {
                        $success = $this->ff->bank(ff::BANK_BETALING, ff::NAME_CHANGE_COST, 'Navnsøknad: ' . $name);
                    }
                    // ikke nok penger i banken
                    if (!$success) {
                        ess::$b->page->add_message("Det er ikke nok penger i banken.", "error");
                    } else {
                        // legg til søknaden
                        soknader::add(soknader::TYPE_FF_NAME, array("name" => $name, "cost" => $soknad_free ? 0 : ff::NAME_CHANGE_COST), $reason, $this->ff->id);
                        ess::$b->page->add_message("Du har nå levert søknad om nytt navn til {$this->ff->type['refobj']}." . ($soknad_free ? '' : ' ' . game::format_cash(ff::NAME_CHANGE_COST) . ' ble trukket fra bankkontoen.'));
                        redirect::handle("panel?ff_id={$this->ff->id}&a=navnbytte");
                    }
                }
            }
            echo '
	<form action="" method="post">' . ($soknad_free ? $this->ff->competition ? '
		<p>Du kan under hele konkurranseperioden sende inn gratis søknad om navnbytte for ' . $this->ff->type['refobj'] . '. Så snart konkurranseperioden er over, vil det koste ' . game::format_cash(ff::NAME_CHANGE_COST) . ' å søke om navnbytte dersom navnet ble byttet under konkurranseperioden.</p>' : ($this->ff->mod ? '
		<p>Som moderator kan du sende inn gratis søknader på vegne av ' . $this->ff->type['refobj'] . '.</p>' : '
		<p>Du kan sende inn gratis søknad om navnbytte for ' . $this->ff->type['refobj'] . ' én gang (søknaden må innvilges for å telle). Neste gang vil det koste ' . game::format_cash(ff::NAME_CHANGE_COST) . '.</p>') : '') . '
		<dl class="dd_right">
			<dt>Ønsket navn</dt>
			<dd><input type="text" name="name" value="' . htmlspecialchars(postval("name", $this->ff->data['ff_name'])) . '" class="styled w100" /></dd>
			<dt>Kostnad (ved innvilgelse)</dt>
			<dd>' . ($soknad_free ? '0 kr' : game::format_cash(ff::NAME_CHANGE_COST)) . '</dd>
		</dl>
		<p>Begrunnelse</p>
		<p class="c"><textarea name="reason" rows="5" cols="30">' . htmlspecialchars(postval("reason")) . '</textarea></p>
		<p class="c">' . show_sbutton("Send inn søknad") . '</p>
	</form>';
        }
        echo '
	<p><a href="panel?ff_id=' . $this->ff->id . '">&laquo; Tilbake</a></p>
</div>';
        $this->ff->load_page();
    }
Example #3
0
    /**
     * Kaste ut en spiller
     */
    protected function kick_handle()
    {
        // valider sid
        validate_sid();
        // kan vi ikke kaste ut noen spillere nå?
        if (login::$user->player->fengsel_check() || login::$user->player->bomberom_check() || login::$user->player->data['up_b_id'] != $this->ff->data['br_b_id'] || !$this->kick_hour_ok) {
            redirect::handle();
        }
        // mangler spillervalg?
        if (!isset($_POST['player'])) {
            ess::$b->page->add_message("Du må velge en spiller du vil kaste ut.", "error");
            redirect::handle();
        }
        // er ikke spilleren i bomberommet?
        $up_id = (int) $_POST['player'];
        $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT u_email, up_id, up_name, up_access_level, up_brom_expire\n\t\t\tFROM users_players JOIN users ON up_u_id = u_id\n\t\t\tWHERE up_id = {$up_id} AND up_brom_ff_id = {$this->ff->id} AND up_brom_expire > " . time() . " AND up_access_level != 0");
        $cost = $this->fam ? self::KICK_PLAYER_COST_FAMILIE : self::KICK_PLAYER_COST;
        $up = $result->fetch();
        if (!$up) {
            ess::$b->page->add_message("Fant ikke spilleren.", "error");
            redirect::handle();
        }
        // sett opp skjema
        $form = \Kofradia\Form::getByDomain("other", login::$user);
        // har vi bekreftet ønsket om å kaste ut en spiller?
        if (isset($_POST['confirm']) && $form->validateHashOrAlert(null, "Kast ut spiller fra bomberom")) {
            \Kofradia\DB::get()->beginTransaction();
            // forsøk å trekk fra pengene
            if (!$this->ff->bank(ff::BANK_BETALING, $cost, "Kaste ut spilleren [user id={$up['up_id']}] fra bomberommet")) {
                ess::$b->page->add_message("Det er ikke nok penger i " . ($this->fam ? "broderskapbanken" : "firmabanken") . ".", "error");
                \Kofradia\DB::get()->commit();
            } else {
                // finn en tilfeldig bydel å plassere spilleren
                $result = \Kofradia\DB::get()->query("SELECT id, name FROM bydeler WHERE active != 0 ORDER BY RAND() LIMIT 1");
                $b_id = $result->fetchColumn(0);
                // forsøk å trekk ut spilleren fra bomberommet
                $a = \Kofradia\DB::get()->exec("\n\t\t\t\t\tUPDATE users_players\n\t\t\t\t\tSET up_brom_expire = 0, up_b_id = {$b_id}\n\t\t\t\t\tWHERE up_id = {$up['up_id']} AND up_brom_ff_id = {$this->ff->id} AND up_brom_expire = {$up['up_brom_expire']} AND up_access_level != 0");
                // feilet?
                if ($a == 0) {
                    // avbryt transaksjon
                    \Kofradia\DB::get()->rollback();
                    ess::$b->page->add_message("Kunne ikke kaste ut spilleren fra bomberommet.", "error");
                } else {
                    // legg til hendelse hos spilleren
                    player::add_log_static("bomberom_kicked", login::$user->player->id . ":" . urlencode($this->ff->data['ff_name']) . ":{$up['up_brom_expire']}", $this->ff->id, $up['up_id']);
                    // send e-post til spilleren
                    $email = new email();
                    $email->text = 'Hei,

Din spiller ble kastet ut fra bomberommet av ' . ($this->fam ? 'broderskapet' : 'firmaet') . ' som styrer bomberommet.

--
www.kofradia.no';
                    $email->send($up['u_email'], "Kastet ut av bomberom");
                    // firmalogg
                    $this->ff->add_log("bomberom_kick", login::$user->player->id . ":{$up['up_id']}:{$up['up_brom_expire']}");
                    // logg
                    putlog("DF", "BOMBEROM: {$up['up_name']} ble kastet ut av bomberommet {$this->ff->data['ff_name']} av " . login::$user->player->data['up_name'] . " " . ess::$s['spath'] . "/min_side?up_id={$up['up_id']}");
                    ess::$b->page->add_message('Du kastet ut <user id="' . $up['up_id'] . '" /> fra bomberommet. ' . ($this->fam ? 'Broderskapet' : 'Firmaet') . ' betalte et gebyr på ' . game::format_cash($cost) . '.');
                    \Kofradia\DB::get()->commit();
                    redirect::handle();
                }
            }
        }
        ess::$b->page->add_title("Kaste ut spiller");
        // vis informasjon
        echo '
<div class="bg1_c xsmall">
	<h1 class="bg1">Kaste ut spiller fra bomberommet<span class="left2"></span><span class="right2"></span></h1>
	<div class="bg1">
		<p>Du er i ferd med å kaste ut ' . game::profile_link($up['up_id'], $up['up_name'], $up['up_access_level']) . ' fra bomberommet.</p>
		<p>Spilleren skal i utgangspunktet sitte i bomberommet til ' . ess::$b->date->get($up['up_brom_expire'])->format(date::FORMAT_SEC) . ' (' . game::counter($up['up_brom_expire'] - time()) . ' gjenstår).</p>
		<p>For å kaste ut spilleren må det betales en avgift på <b>' . game::format_cash($cost) . '</b> som betales fra ' . ($this->fam ? 'broderskapkontoen' : 'firmakontoen') . '.</p>';
        // har vi ikke nok penger i firmakontoen?
        if ($this->ff->data['ff_bank'] < $cost) {
            echo '
		<p>' . ($this->fam ? 'Broderskapet' : 'Firmaet') . ' har for øyeblikket kun ' . game::format_cash($this->ff->data['ff_bank']) . ' på konto, noe som ikke er nok. ' . ($this->ff->access(1) ? '<a href="' . ess::$s['relative_path'] . '/ff/banken?ff_id=' . $this->ff->id . '">Sett inn penger på ' . ($this->fam ? 'broderskapkontoen' : 'firmakontoen') . '</a>' : '<a href="' . ess::$s['relative_path'] . '/ff/panel?ff_id=' . $this->ff->id . '">Donér til ' . ($this->fam ? 'broderskapet' : 'firmaet') . '</a>') . ' først for å kunne kaste ut spilleren.</p>
		<p class="c"><a href="bomberom?ff_id=' . $this->ff->id . '">Tilbake</a></p>';
        } else {
            echo '
		<p>' . ($this->fam ? 'Broderskapet' : 'Firmaet') . ' har for øyeblikket ' . game::format_cash($this->ff->data['ff_bank']) . ' på konto.</p>
		<form action="" method="post">
			' . $form->getHTMLInput() . '
			<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
			<input type="hidden" name="player" value="' . $up['up_id'] . '" />
			<input type="hidden" name="kick" />
			<p class="c">' . show_sbutton("Bekreft, kast ut spilleren", 'name="confirm"') . ' <a href="bomberom?ff_id=' . $this->ff->id . '">Avbryt</a></p>
		</form>';
        }
        echo '
	</div>
</div>';
        $this->ff->load_page();
    }
Example #4
0
    /**
     * Plassere spiller i bomberom
     */
    protected function type_bomberom_set_handle($ledige_plasser, $ant_i_bomberommet)
    {
        $player = login::$user->player;
        $self = true;
        $familie = false;
        // plassere en annen spiller?
        if ($_POST['player'] != "own") {
            // ingen ledige plasser?
            if ($ledige_plasser == 0) {
                ess::$b->page->add_message("Det er ingen ledige plasser til å plassere andre spillere i bomberommet.", "error", null, "bomberom_set");
                redirect::handle();
            }
            // hent spillerinfo
            $player = player::get(postval("player"));
            if (!$player || !$player->active || $player->bomberom_check() || $player->fengsel_check()) {
                ess::$b->page->add_message("Kan ikke plassere spilleren i bomberom.", "error", null, "bomberom_set");
                redirect::handle();
            }
            // kan ikke sette i bomberom pga. rankforskjell?
            if (!login::$user->player->can_set_brom($player)) {
                ess::$b->page->add_message('Kan ikke plassere <user id="' . $player->id . '" /> i bomberom pga. spilleren sin rank er for langt unna din rank. Se mer i <a href="&rpath;node/39">hjelp</a>.', "error", null, "bomberom_set");
                redirect::handle();
            }
            // kontroller at vi er ansvarlig eller har tilgang pga. familie
            if ($player->data['up_brom_up_id'] != $this->up->id) {
                // sjekk at vi er i en felles familie
                $result = \Kofradia\DB::get()->query("\n\t\t\t\t\tSELECT ffm_ff_id\n\t\t\t\t\tFROM ff, ff_members, (\n\t\t\t\t\t\tSELECT ffm_ff_id ff_id FROM ff_members WHERE ffm_up_id = " . $this->up->id . " AND ffm_status = 1\n\t\t\t\t\t) ref\n\t\t\t\t\tWHERE ffm_ff_id = ref.ff_id AND ff.ff_id = ref.ff_id AND ff_type = 1 AND ffm_up_id = {$player->id} AND ffm_status = 1\n\t\t\t\t\tLIMIT 1");
                // ikke i felles familie?
                if ($result->rowCount() == 0) {
                    ess::$b->page->add_message('Du kan ikke plassere <user id="' . $player->id . '" /> i bomberom.', "error", null, "bomberom_set");
                    redirect::handle();
                }
                $familie = true;
            }
            // kan vi ikke flytte spilleren?
            if ($familie && $player->data['up_b_id'] != $this->ff->data['br_b_id']) {
                ess::$b->page->add_message('<user id="' . $player->id . '" /> er ikke i samme bydel som bomberommet. Du har ikke mulighet til å flytte spilleren og kan dermed ikke plassere spilleren i dette bomberommt.', "error", null, "bomberom_set");
                redirect::handle();
            }
            $self = false;
        }
        // familie og vi har allerede plassert en spiller de siste 12 timene?
        if ($familie) {
            $familie_wait = max(0, $this->up->data['up_brom_ff_time'] + bomberom::FAMILIY_MEMBERS_WAIT - time());
            if ($familie_wait > 0) {
                ess::$b->page->add_message("Du kan ikke plassere medlemmer av noen broderskap du er med i for øyeblikket, fordi du plasserte forrige spiller fra broderskap " . ess::$b->date->get($this->up->data['up_brom_ff_time'])->format() . ". Du må vente " . game::counter($familie_wait) . ".", "error", null, "bomberom_set");
                redirect::handle();
            }
        }
        // sett opp timepris
        $price_hour = bomberom::PRICE_HOUR + $ant_i_bomberommet * bomberom::PRICE_EACH_PLAYER;
        if (!$self) {
            $price_hour *= bomberom::PRICE_FACTOR_OTHER;
        }
        if ($self && $this->ff->access(true)) {
            $price_hour *= bomberom::PRICE_FACTOR_OWN;
        }
        // sjekke pris?
        $hours = (int) $_POST['hours'];
        if ($hours <= 0) {
            ess::$b->page->add_message("Du må skrive inn et gyldig antall timer.", "error", null, "bomberom_set");
        } elseif ($hours > bomberom::MAX_HOURS) {
            ess::$b->page->add_message("Du kan maksimalt sette en spiller i bomberom i " . bomberom::MAX_HOURS . " timer.", "error", null, "bomberom_set");
        } else {
            // bekreftet pris?
            if (isset($_POST['price']) && $_POST['price'] != "") {
                validate_sid();
                // beregn pris
                $price = $hours * $price_hour;
                // har prisen endret seg?
                if (postval("price") != $price) {
                    ess::$b->page->add_message("Prisen har endret seg og du må bekrefte på nytt.", "error", null, "bomberom_set");
                } else {
                    \Kofradia\DB::get()->beginTransaction();
                    // trekk fra pengene
                    $a = \Kofradia\DB::get()->exec("UPDATE users_players SET up_cash = up_cash - {$price} WHERE up_id = " . $this->up->id . " AND up_cash >= {$price}");
                    if ($a == 0) {
                        ess::$b->page->add_message("Du har ikke så mye penger på hånda.", "error", null, "bomberom_set");
                    } else {
                        $expire = time() + $hours * 3600;
                        $b_id = !$self && !$familie ? ', up_b_id = ' . $this->ff->data['br_b_id'] : '';
                        // sett spilleren i bomberommet
                        $a = \Kofradia\DB::get()->exec("UPDATE users_players SET up_brom_ff_id = {$this->ff->id}, up_brom_expire = {$expire}{$b_id} WHERE up_id = {$player->id} AND up_brom_expire = {$player->data['up_brom_expire']}");
                        // kunne ikke plassere spilleren i bomberommet?
                        if ($a == 0) {
                            ess::$b->page->add_message("Kunne ikke plassere spilleren i bomberommet.", "error", null, "bomberom_set");
                            \Kofradia\DB::get()->rollback();
                        } else {
                            // send logg til spilleren
                            if (!$self) {
                                $player->add_log("bomberom_set", $this->up->id . ":" . urlencode($this->ff->data['ff_name']) . ":{$expire}", $this->ff->id);
                            }
                            // oppdatere tidspunkt for familie?
                            if ($familie) {
                                \Kofradia\DB::get()->exec("UPDATE users_players SET up_brom_ff_time = " . time() . " WHERE up_id = " . $this->up->id);
                            }
                            // gi penger til firmaet
                            $this->ff->bank(ff::BANK_TJENT, round($price * ff::BOMBEROM_PERCENT));
                            putlog("DF", "BOMBEROM ANSVARLIG: " . $this->up->data['up_name'] . " satt%c3 " . ($self ? 'seg selv' : $player->data['up_name']) . "%c i bomberom i firmaet {$this->ff->data['ff_name']} for {$hours} timer " . $player->generate_minside_url());
                            ess::$b->page->add_message("Du plasserte " . ($self ? 'deg selv' : '<user id="' . $player->id . '" />') . " i bomberommet med en varighet på <b>{$hours}</b> " . fword("time", "timer", $hours) . ". Det kostet deg <b>" . game::format_cash($price) . "</b>.", null, null, "bomberom_set");
                            \Kofradia\DB::get()->commit();
                            redirect::handle("?ff_id={$this->ff->id}");
                        }
                    }
                    \Kofradia\DB::get()->commit();
                }
            }
            echo '
		' . ess::$b->page->message_get("bomberom_set", true, true) . '
		<p>Du er i ferd med å plassere ' . ($self ? 'deg selv' : $player->profile_link()) . ' i dette bomberommet.</p>
		<p>For tiden er det ' . fwords("%d spiller", "%d spillere", $ant_i_bomberommet) . ' i bomberommet og ' . fwords("%d ledig plass", "%d ledige plasser", $ledige_plasser) . '.' . ($ledige_plasser == 0 ? ' Du har alikevel plass i bomberommet som medlem av firmaet.' : '') . '</p>
		<dl class="dd_right">
			<dt>Antall timer</dt>
			<dd>' . fwords("<b>%d</b> time", "<b>%d</b> timer", $hours) . '</dd>
			<dt>Total kostnad</dt>
			<dd>' . game::format_cash($hours * $price_hour) . '</dd>
			<dt>Varighet til</dt>
			<dd>' . ess::$b->date->get(time() + $hours * 3600)->format(date::FORMAT_SEC) . '</dd>
		</dl>
		<form action="" method="post">' . (!$self ? '
			<input type="hidden" name="player" value="' . $player->id . '" />' : '') . '
			<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
			<input type="hidden" name="hours" value="' . $hours . '" />
			<input type="hidden" name="price" value="' . $hours * $price_hour . '" />
			<p class="c">' . show_sbutton("Sett spilleren i bomberom") . '</p>
		</form>
		<form action="" method="post">' . (!$self ? '
			<input type="hidden" name="player" value="' . $player->id . '" />' : '') . '
			<p>Endre antall timer: <input type="text" name="hours" class="styled w30" value="' . $hours . '" /> ' . show_sbutton("Nytt prisoppsett") . '</p>
		</form>
		<p class="c"><a href="./?ff_id=' . $this->ff->id . '">Tilbake</a></p>';
        }
    }