Example #1
0
 /** Sjekk om vi har tilgang */
 public function check_access()
 {
     // tilhører et ff?
     if ($this->ff && !$this->ff->access(true)) {
         return false;
     }
     // kontroller tilgang satt i params
     return self::check_access_params($this->params);
 }
Example #2
0
    /**
     * Vis en bestemt utgivelse
     */
    protected function specific_publication()
    {
        // hent informasjon
        $ffn = ff_avis_utgivelse::get(intval(getval("ffn")), $this->ff);
        // fant ikke?
        if (!$ffn) {
            ess::$b->page->add_message("Fant ikke utgivelsen.", "error");
            $this->ff->load_page();
        }
        redirect::store("avis?ff_id={$this->ff->id}&ffn={$ffn->id}");
        ess::$b->page->add_title($ffn->data['ffn_title']);
        // hent kjøpsinformasjon
        $ffnp = null;
        if (login::$logged_in) {
            $result = \Kofradia\DB::get()->query("SELECT ffnp_cost, ffnp_time FROM ff_newspapers_payments WHERE ffnp_ffn_id = {$ffn->id} AND ffnp_up_id = " . login::$user->player->id);
            $ffnp = $result->fetch();
        }
        // ikke publisert?
        if ($ffn->data['ffn_published'] == 0) {
            if (!$this->ff->access(3)) {
                ess::$b->page->add_message("Fant ikke utgivelsen.", "error");
                $this->ff->load_page();
            }
            redirect::handle("avis?ff_id={$this->ff->id}&u&ffn={$ffn->id}");
        }
        // må vi kjøpe avisutgivelsen?
        if ($this->ff->active && (!login::$logged_in || !$this->ff->access() && !access::is_nostat() && !$ffnp)) {
            // har ikke kjøpt avisen, men avisen er gratis?
            if (login::$logged_in && (!$ffnp && $ffn->data['ffn_cost'] == 0)) {
                // opprett rad for betaling
                \Kofradia\DB::get()->exec("INSERT INTO ff_newspapers_payments SET ffnp_ffn_id = {$ffn->id}, ffnp_up_id = " . login::$user->player->id . ", ffnp_cost = {$ffn->data['ffn_cost']}, ffnp_time = " . time());
                // oppdater utgivelsen
                \Kofradia\DB::get()->exec("UPDATE ff_newspapers SET ffn_sold = ffn_sold + 1, ffn_income = ffn_income + {$ffn->data['ffn_cost']} WHERE ffn_id = {$ffn->id}");
                redirect::handle();
            } else {
                ess::$b->page->add_title("Kjøp utgivelse");
                // kjøpe?
                if (login::$logged_in && isset($_POST['buy'])) {
                    $sid = postval("sid");
                    $price = postval("price");
                    if ($sid != login::$info['ses_id']) {
                        ess::$b->page->add_message("Ugyldig.", "error");
                    } elseif ($price != $ffn->data['ffn_cost']) {
                        ess::$b->page->add_message("Prisen har endret seg. Du må utføre handlingen på nytt.", "error");
                    } elseif (login::$user->player->data['up_cash'] < $ffn->data['ffn_cost']) {
                        ess::$b->page->add_message("Du har ikke nok penger på hånda.", "error");
                    } else {
                        // trekk fra pengene fra brukeren
                        if ($ffn->data['ffn_cost'] != 0) {
                            $a = \Kofradia\DB::get()->exec("UPDATE users_players SET up_cash = up_cash - {$ffn->data['ffn_cost']} WHERE up_id = " . login::$user->player->id . " AND up_cash >= {$ffn->data['ffn_cost']}");
                        }
                        // mislykket
                        if ($ffn->data['ffn_cost'] != 0 && $a == 0) {
                            ess::$b->page->add_message("Du har ikke nok penger på hånda.", "error");
                        } else {
                            // legg til oppføring
                            \Kofradia\DB::get()->exec("INSERT INTO ff_newspapers_payments SET ffnp_ffn_id = {$ffn->id}, ffnp_up_id = " . login::$user->player->id . ", ffnp_cost = {$ffn->data['ffn_cost']}, ffnp_time = " . time());
                            // gi pengene til firmaet
                            \Kofradia\DB::get()->exec("UPDATE ff SET ff_bank = ff_bank + {$ffn->data['ffn_cost']} WHERE ff_id = {$this->ff->id}");
                            // stats for firmaet
                            $ffn->ff->stats_update("money_in", $ffn->data['ffn_cost']);
                            // oppdater utgivelsen
                            \Kofradia\DB::get()->exec("UPDATE ff_newspapers SET ffn_sold = ffn_sold + 1, ffn_income = ffn_income + {$ffn->data['ffn_cost']} WHERE ffn_id = {$ffn->id}");
                            ess::$b->page->add_message("Du har kjøpt utgivelsen for " . game::format_cash($ffn->data['ffn_cost']) . ".");
                            redirect::handle();
                        }
                    }
                }
                echo '
<p class="c">' . htmlspecialchars($ffn->data['ffn_title']) . ' | Kjøp utgivelse | <a href="avis?ff_id=' . $this->ff->id . '">Tilbake</a></p>
<div class="section center w200">
	<h2>Utgivelseinformasjon</h2>
	<dl class="dd_right">
		<dt>Publisert</dt>
		<dd>' . ess::$b->date->get($ffn->data['ffn_published_time'])->format() . '</dd>
		<dt>Solgt utgivelser</dt>
		<dd>' . game::format_number($ffn->data['ffn_sold']) . '</dd>
	</dl>
	<p>Artikler:</p>';
                // hent artiklene
                $result = \Kofradia\DB::get()->query("SELECT ffna_title FROM ff_newspapers_articles WHERE ffna_ffn_id = {$ffn->id} ORDER BY ffna_title");
                // ingen artikler?
                if ($result->rowCount() == 0) {
                    echo '
	<p>Ingen artikler.</p>';
                } else {
                    echo '
	<ul>';
                    while ($row = $result->fetch()) {
                        echo '
		<li>' . htmlspecialchars($row['ffna_title']) . '</li>';
                    }
                    echo '
	</ul>';
                }
                echo '
</div>';
                if (login::$logged_in) {
                    echo '
<form action="" method="post">
	<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
	<input type="hidden" name="price" value="' . $ffn->data['ffn_cost'] . '" />
	<div class="section center w200">
		<h2>Kjøp utgivelse</h2>
		<p>Før du får tilgang til denne utgivelsen må du kjøpe den.</p>
		<dl class="dd_right">
			<dt>Pris</dt>
			<dd>' . game::format_cash($ffn->data['ffn_cost']) . '</dd>
		</dl>
		<p class="c">' . show_sbutton("Kjøp utgivelse", 'name="buy"') . '</p>
	</div>
</form>';
                } else {
                    echo '
<p class="c">Du må <a href="&rpath;/">logge inn</a> for å kjøpe og lese denne utgivelsen.</p>';
                }
                $this->ff->load_page();
            }
        }
        // hent data
        $data = $ffn->build_avis_html();
        echo '
<p class="c">' . htmlspecialchars($ffn->data['ffn_title']) . ($this->ff->access(3) ? ' | <a href="avis?ff_id=' . $this->ff->id . '&amp;u&amp;ffn=' . $ffn->data['ffn_id'] . '">Vis detaljer</a>' : '') . ' | <a href="avis?ff_id=' . $this->ff->id . '">Tilbake</a></p>' . $data;
    }
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
    /**
     * Behandle forespørsel
     */
    protected function page_handle()
    {
        $access = $this->ff->access(1);
        $this->form = \Kofradia\Form::getByDomain("firma", login::$user);
        ess::$b->page->add_title("Bankkontroll");
        // hent antall klienter
        $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT COUNT(up_id)\n\t\t\tFROM users_players\n\t\t\tWHERE up_access_level != 0 AND up_access_level < " . ess::$g['access_noplay'] . " AND up_bank_ff_id = {$this->ff->id}");
        $num_klienter = $result->fetchColumn(0);
        // finn ut nåværende status
        $status = $this->ff->params->get("bank_overforing_tap_change", 0);
        $status_text = $status == 0 ? 'Ingen endring' : ($status > 0 ? 'Øke ' . game::format_number($status * 100, 2) . ' %' : 'Synke ' . game::format_number(abs($status) * 100, 2) . ' %');
        // finn "tilgjengelige" overføringer
        $expire_ffbt = time() - 3600;
        $result = \Kofradia\DB::get()->query("SELECT COUNT(ffbt_id), SUM(ffbt_amount), SUM(ffbt_profit) FROM ff_bank_transactions WHERE ffbt_ff_id = {$this->ff->id} AND ffbt_up_id = 0 AND ffbt_time >= {$expire_ffbt}");
        $info = $result->fetch(\PDO::FETCH_NUM);
        // nåværende overføringsgebyr
        $overforing_tap = $this->ff->params->get("bank_overforing_tap", 0);
        // forandre fortjeneste?
        if (isset($_POST['fortjenestep_2']) && isset($_POST['fortjenestep_0']) && $access) {
            // kontroller verdier
            $fortjenestep_2 = intval($_POST['fortjenestep_2']);
            $fortjenestep_0 = intval($_POST['fortjenestep_0']);
            //$this->ff->params_lock();
            $this->ff->params->lock();
            $i = 0;
            // medeier
            if ($fortjenestep_2 > 40 || $fortjenestep_2 < 5) {
                ess::$b->page->add_message("Fortjenesten for {$this->ff->type['priority'][2]} kan ikke være under 5 % eller over 40  %.", "error");
                $i++;
            } elseif ($fortjenestep_2 != $this->ff->params->get("fortjenestep_2", 0.25) * 100) {
                $this->ff->params->update("fortjenestep_2", $fortjenestep_2 / 100);
                ess::$b->page->add_message("Fortjenesten for " . $this->ff->type['priority'][2] . " er nå på " . $fortjenestep_2 . " %.");
                $i++;
            }
            // øvrige ansatte
            if ($fortjenestep_0 > 40 || $fortjenestep_0 < 5) {
                ess::$b->page->add_message("Fortjenesten for øvrige ansatte kan ikke være under 5 % eller over 40 %.", "error");
                $i++;
            } elseif ($fortjenestep_0 != $this->ff->params->get("fortjenestep_0", 0.1) * 100) {
                $this->ff->params->update("fortjenestep_0", $fortjenestep_0 / 100);
                ess::$b->page->add_message("Fortjenesten for øvrige ansatte er nå på " . $fortjenestep_0 . " %.");
                $i++;
            }
            // ingen som ble endret?
            if ($i == 0) {
                ess::$b->page->add_message("Ingen endringer ble utført.");
            }
            //$this->ff->params_save();
            $this->ff->params->commit();
            redirect::handle();
        }
        // hente gebyr?
        if (isset($_POST['hent_gebyr']) && $this->form->validateHashOrAlert()) {
            // ingen gebyr å hente?
            if ($info[0] == 0) {
                ess::$b->page->add_message("Det er ingen gebyr å hente.", "error");
                redirect::handle();
            }
            // sjekk at det har gått lang nok tid siden forrige gang
            // FIXME: denne er ikke i bruk (bank_gebyr_siste blir aldri satt)
            $expire = $this->ff->uinfo->params->get("bank_gebyr_siste", 0) + 900;
            if ($expire > time()) {
                ess::$b->page->add_message("Du må vente " . ess::$b->date->get($expire)->format(date::FORMAT_SEC) . " før du kan hente nye gebyr.", "error");
                redirect::handle();
            }
            \Kofradia\DB::get()->beginTransaction();
            // oppdater gebyrene til vår bruker
            \Kofradia\DB::get()->exec("UPDATE ff_bank_transactions SET ffbt_up_id = " . login::$user->player->id . " WHERE ffbt_ff_id = {$this->ff->id} AND ffbt_up_id = 0 AND ffbt_time >= {$expire_ffbt}");
            // finn ut hvor mange prosent vi skal få og firmaet skal få
            $p_player = $access ? 0.5 : ($this->ff->access(2) ? $this->ff->params->get("fortjenestep_2", 0.25) : $this->ff->params->get("fortjenestep_0", 0.1));
            $p_firma = max(0, 0.5 - $p_player);
            // hent ut informasjon om hvor mye vi fikk
            $result = \Kofradia\DB::get()->query("\n\t\t\t\tSELECT COUNT(ffbt_id), SUM(ffbt_amount), SUM(ffbt_profit)*{$p_player}, SUM(ffbt_profit)*{$p_firma}\n\t\t\t\tFROM ff_bank_transactions\n\t\t\t\tWHERE ffbt_ff_id = {$this->ff->id} AND ffbt_up_id = " . login::$user->player->id . " AND ffbt_status = 0");
            $info = $result->fetch(\PDO::FETCH_NUM);
            // 0 => antall, 1 => overført, 2 => profit bruker, 3 => profit firma
            // sett pengene til riktige steder
            \Kofradia\DB::get()->exec("\n\t\t\t\tUPDATE users_players, ff, ff_bank_transactions, ff_members, (\n\t\t\t\t\t\tSELECT SUM(ffbt_profit) AS ffbt_profit_sum\n\t\t\t\t\t\tFROM ff_bank_transactions\n\t\t\t\t\t\tWHERE ffbt_ff_id = {$this->ff->id} AND ffbt_up_id = " . login::$user->player->id . " AND ffbt_status = 0\n\t\t\t\t\t) AS ref\n\t\t\t\tSET up_cash = up_cash + ffbt_profit_sum*{$p_player}, ff_bank = ff_bank + ffbt_profit_sum*{$p_firma}, ffbt_status = 1, ffm_earnings = ffm_earnings + ffbt_profit_sum*{$p_player}, ffm_earnings_ff = ffm_earnings_ff + ffbt_profit_sum*{$p_firma}\n\t\t\t\tWHERE ffbt_ff_id = {$this->ff->id} AND ffbt_up_id = " . login::$user->player->id . " AND ffbt_status = 0 AND up_id = ffbt_up_id AND ff_id = ffbt_ff_id AND ffm_ff_id = ff_id AND ffm_up_id = up_id");
            // oppdater stats
            $this->ff->stats_update("money_in", $info[3]);
            // TODO: Slette ffbt oppføringene
            \Kofradia\DB::get()->commit();
            // ingen ble oppdatert?
            if ($info[0] == 0) {
                ess::$b->page->add_message("Det er ingen gebyr å hente.", "error");
            } else {
                ess::$b->page->add_message("Du hentet {$info[0]} gebyr og fikk totalt " . game::format_cash($info[2]) . ". " . game::format_cash($info[1]) . " var blitt overført. Firmaet fikk " . game::format_cash($info[3]) . ".");
            }
            redirect::handle();
        }
        // finn ut hvor lang tid det er til neste endring
        $date = ess::$b->date->get();
        $next_update = 3600 - $date->format("i") * 60 - $date->format("s");
        // endre overføringsgebyr
        if (isset($_POST['eog_value']) && $access) {
            // sjekk at verdien er en av de vi kan velge?
            $step = floatval($_POST['eog_value']);
            if (!in_array($step, ff::$type_bank['eog_steps'])) {
                ess::$b->page->add_message("Verdien du valgte var ikke gyldig.", "error");
                redirect::handle("bank?ff_id={$this->ff->id}");
            }
            $this->ff->params->lock();
            $overforing_tap = $this->ff->params->get("bank_overforing_tap", 0);
            // øke?
            if ($step > 0) {
                // allerede på topp?
                if ($overforing_tap >= ff::$type_bank['bank_overforing_gebyr_max']) {
                    ess::$b->page->add_message("Overføringsgebyret kan ikke økes mer.", "error");
                    $this->ff->params->commit();
                    redirect::handle("bank?ff_id={$this->ff->id}");
                }
                // overstiger maks?
                if ($step + $overforing_tap > ff::$type_bank['bank_overforing_gebyr_max']) {
                    $step = ff::$type_bank['bank_overforing_gebyr_max'] - $overforing_tap;
                }
            } elseif ($step < 0) {
                // allerede på bunn?
                if ($overforing_tap <= ff::$type_bank['bank_overforing_gebyr_min']) {
                    ess::$b->page->add_message("Overføringsgebyret kan ikke senkes mer.", "error");
                    $this->ff->params->commit();
                    redirect::handle("bank?ff_id={$this->ff->id}");
                }
                // overstiger min?
                if ($step + $overforing_tap < ff::$type_bank['bank_overforing_gebyr_min']) {
                    $step = ff::$type_bank['bank_overforing_gebyr_min'] - $overforing_tap;
                }
            }
            // lagre
            $this->ff->params->update("bank_overforing_tap_change", $step, true);
            if ($step == 0) {
                ess::$b->page->add_message("Overføringsgebyret vil ikke lengre bli endret.");
            } else {
                $status = $step > 0 ? 'økt med ' . game::format_number($step * 100, 2) . ' %' : 'senket med ' . game::format_number(abs($step) * 100, 2) . ' %';
                ess::$b->page->add_message('Overføringsgebyret vil bli ' . $status . ' til ' . game::format_number(($overforing_tap + $step) * 100, 2) . ' % om ' . game::counter($next_update) . '.');
            }
            redirect::handle("bank?ff_id={$this->ff->id}");
        }
        echo '
<!--<h1>Bankkontroll</h1>-->
<div class="section" style="width: 250px; margin-left: auto; margin-right: auto">
	<h2>Bankinformasjon</h2>' . ($access ? '
	<p class="h_right eog_off"><a href="../js" onclick="handleClass(\'.eog_on\', \'.eog_off\', event, this.parentNode.parentNode)">Endre overføringsgebyr</a></p>
	<p class="h_right eog_on hide"><a href="../js" onclick="handleClass(\'.eog_off\', \'.eog_on\', event, this.parentNode.parentNode)">Avbryt endringer</a></p>' : '') . '
	<dl class="dd_right' . ($access ? ' eog_off' : '') . '">
		<dt>Overføringsgebyr</dt>
		<dd>' . game::format_number($overforing_tap * 100, 2) . ' %</dd>
		<dt>Neste endring</dt>
		<dd>' . $status_text . '</dd>
		<dt>Tid før neste endring</dt>
		<dd>' . game::counter($next_update) . '</dd>
		<dt>Antall klienter</dt>
		<dd>' . game::format_number($num_klienter) . '</dd>
	</dl>';
        if ($access) {
            echo '
	<form action="" method="post" class="eog_on hide">
		<dl class="dd_right">
			<dt>Nåværende overføringsgebyr</dt>
			<dd>' . game::format_number($overforing_tap * 100, 2) . ' %</dd>
			<dt>Nåværende status</dt>
			<dd>' . $status_text . '</dd>
			<dt>Ny handling</dt>
			<dd>
				<select name="eog_value">';
            $active = in_array($status, ff::$type_bank['eog_steps']) ? $status : 0;
            foreach (ff::$type_bank['eog_steps'] as $step) {
                $status = $step == 0 ? 'Ingen endring' : ($step > 0 ? 'Øke ' . game::format_number($step * 100, 2) . ' %' : 'Senke ' . game::format_number(abs($step) * 100, 2) . ' %');
                echo '
					<option value="' . $step . '"' . ($step == $active ? ' selected="selected"' : '') . '>' . $status . '</option>';
            }
            echo '
				</select>
			</dd>
		</dl>
		<p class="c">
			<input type="submit" class="button" value="Lagre endringer" />
			<a href="../js" class="button" onclick="handleClass(\'.eog_off\', \'.eog_on\', event, this.parentNode.parentNode.parentNode)">Avbryt endringer</a>
		</p>
		<div class="hr"></div>
		<p>Overføringsgebyret blir endret hver hele time og handlingen fortsetter til du endrer den eller du når en av grensene.</p>
		<dl class="dd_right">
			<dt>Minimumsverdi</dt>
			<dd>' . game::format_number(ff::$type_bank['bank_overforing_gebyr_min'] * 100, 2) . ' %</dd>
			<dt>Maksimumsverdi</dt>
			<dd>' . game::format_number(ff::$type_bank['bank_overforing_gebyr_max'] * 100, 2) . ' %</dd>
		</dl>
	</form>';
        }
        echo '
</div>
<div class="section" style="width: 250px; margin-left: auto; margin-right: auto">
	<h2>Overføringsgebyr</h2>
	<p class="h_right">
		<a href="../js" onclick="abortEvent(event);hideClass(\'bankinfo0\');showClass(\'bankinfo1\')" class="bankinfo0">Vis informasjon</a>
		<a href="../js" onclick="abortEvent(event);hideClass(\'bankinfo1\');showClass(\'bankinfo0\')" class="bankinfo1 hide">Skjul informasjon</a>
	</p>
	<dl class="dd_right">
		<dt>Uhentede gebyr</dt>
		<dd>' . game::format_number($info[0]) . '</dd>

		<dt>&nbsp;</dt>
		<dd>' . game::format_cash($info[2]) . '</dd>

		<dt>&nbsp;</dt>
		<dd>(' . game::format_cash($info[1]) . ')</dd>
	</dl>
	<div class="bankinfo1 hide j">
		<div class="hr"></div>
		<p>
			For at banken skal motta overføringsgebyrene må disse hentes inn før det har gått 60 minutter etter at overføringen har skjedd.
		</p>
		<p>
			Den som henter inn gebyrene mottar en viss prosent av gebyrets beløp:
		</p>
		<ul>
			<li>' . ucfirst($this->ff->type['priority'][1]) . ': 50 %</li>
			<li>' . ucfirst($this->ff->type['priority'][2]) . ': ' . intval($this->ff->params->get("fortjenestep_2", 0.25) * 100) . ' % (' . intval(50 - $this->ff->params->get("fortjenestep_2", 0.25) * 100) . ' % til firmaet)</li>
			<li>Øvrige ansatte: ' . intval($this->ff->params->get("fortjenestep_0", 0.1) * 100) . ' % (' . intval(50 - $this->ff->params->get("fortjenestep_0", 0.1) * 100) . ' % til firmaet)</li></li>
		</ul>
		<p>
			Når du har hentet inn nåværende gebyr må du vente 15 minutter til neste gang du kan hente inn gebyr.
		</p>
	</div>' . ($info[0] > 0 ? '
	<form action="" method="post">
		' . $this->form->getHTMLInput() . '
		<h4>' . show_sbutton("Hent gebyr", 'name="hent_gebyr"') . '</h4>
	</form>' : '') . '
</div>';
        // endre fortjeneste
        if ($access) {
            echo '
<div class="section w250 center">
	<h2>Endre fortjeneste</h2>
	<p>Som eier kan du bestemme hvor mange prosent de som henter ut gebyrene skal få. Du må velge mellom 5 % og 40 %. Firmaet får det som er igjen av totalt 50 %.</p>
	<form action="" method="post">
		<dl class="dd_right dl_2x">
			<dt>' . ucfirst($this->ff->type['priority'][2]) . '</dt>
			<dd><input name="fortjenestep_2" type="text" value="' . intval($this->ff->params->get("fortjenestep_2", 0.25) * 100) . '" class="styled w30 r" /> %</dd>

			<dt>Øvrige ansatte</dt>
			<dd><input name="fortjenestep_0" type="text" value="' . intval($this->ff->params->get("fortjenestep_0", 0.1) * 100) . '" class="styled w30 r" /> %</dd>
		</dl>
		<h4>' . show_sbutton("Lagre endringer") . '</h4>
	</form>
</div>';
        }
    }
Example #5
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 #6
0
    /**
     * Garasjeutleie
     */
    protected function type_garasjeutleie()
    {
        $price = $this->ff->params->get("garasje_price", ff::GTA_GARAGE_PRICE_DEFAULT);
        // forandre leiepris?
        if (isset($_GET['gprice']) && $this->ff->access(1)) {
            $this->type_garasjeutleie_price($price);
        }
        // hent statistikk
        $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT COUNT(DISTINCT ugg_up_id) count_up, COUNT(ugg_id) count_ugg, SUM(ugg_places) sum_ugg_places\n\t\t\tFROM users_garage\n\t\t\t\tJOIN users_players ON up_id = ugg_up_id AND up_access_level != 0\n\t\t\tWHERE ugg_ff_id = {$this->ff->id}");
        $stats = $result->fetch();
        echo '
<div class="bg1_c xxsmall">
	<h1 class="bg1">Utleiefirma for garasje<span class="left2"></span><span class="right2"></span></h1>
	<div class="bg1">
		<dl class="dd_right">
			<dt>Leiepris per plass</dt>
			<dd>' . game::format_cash($price) . '</dd>
			<dt>Antall kunder</dt>
			<dd>' . game::format_num($stats['count_up']) . '</dd>
			<dt>Antall garasjer leid ut</dt>
			<dd>' . game::format_num($stats['count_ugg']) . '</dd>
			<dt>Antall bilplasser leid ut</dt>
			<dd>' . game::format_num($stats['sum_ugg_places']) . '</dd>
		</dl>';
        // kan vi forandre leieprisen?
        if ($this->ff->access(1)) {
            echo '
		<p class="c"><a href="./?ff_id=' . $this->ff->id . '&amp;gprice">Forandre leiepris</a></p>';
        }
        if ($this->ff->access()) {
            echo '
		<p class="c">Firmaet får innbetalt ' . ff::GTA_PERCENT * 100 . ' % av det spillerne betaler i leie til firmabanken.</p>';
        }
        echo '
	</div>
</div>';
    }
Example #7
0
    /**
     * Vis banken
     */
    protected function show()
    {
        echo '
<h1 class="c">Banken</h1>

<div class="section" style="width: 250px">
	<h2>Bankinformasjon</h2>
	<dl class="dd_right">
		<dt>Balanse</dt>
		<dd>' . game::format_cash($this->ff->data['ff_bank']) . '</dd>
	</dl>';
        // tilgang til medeier
        if ($this->ff->access(1)) {
            echo '
	<form action="" method="post">
		<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />';
            if ($this->priority_write == 1) {
                echo '
		<p>' . ucfirst($this->ff->type['priority'][2]) . ' har ikke tilgang til å sette inn/ta ut penger fra denne banken.</p>
		<p class="c">' . show_sbutton("Gi tilgang til {$this->ff->type['priority'][2]}", 'name="pri2_wt"') . '</p>';
            } else {
                echo '
		<p>' . ucfirst($this->ff->type['priority'][2]) . ' <b>har</b> tilgang til å sette inn/ta ut penger fra denne banken.</p>
		<p class="c">' . show_sbutton("Fjern tilgang til {$this->ff->type['priority'][2]}", 'name="pri2_wf"') . '</p>';
            }
            echo '
	</form>';
        }
        echo '
	<p class="c"><a href="banken?ff_id=' . $this->ff->id . '&amp;stats">Vis statistikk over pengeflyt i ' . $this->ff->type['refobj'] . ' &raquo;</a></p>
</div>';
        // kun boss kan ta ut og sette inn penger
        if ($this->ff->access($this->priority_write) && !$this->nostat) {
            echo '
<div style="margin: 0 auto; width: 420px">

<!-- sett inn penger -->
<div style="width: 205px; float: left; margin-right: 10px">
	<div class="section">
		<form action="" method="post">
			<h2>Sett inn penger</h2>
			<dl class="dd_right dl_2x">
				<dt>Beløp</dt>
				<dd><input type="text" name="bank_inn" class="styled w90" value="0" style="margin-right: 3px" />' . show_button("Alt", 'onclick="this.previousSibling.value=\'' . game::format_cash(login::$user->player->data['up_cash']) . '\'"') . '
				
				<dt>Notat</dt>
				<dd><input type="text" name="note" value="" maxlength="50" class="styled w120" /></dd>
			</dl>
			<h4>' . show_sbutton("Sett inn") . '</h4>
		</form>
	</div>
</div>

<!-- ta ut penger -->
<div style="width: 205px; float: left">
	<div class="section">
		<form action="" method="post">
			<h2>Ta ut penger</h2>
			<dl class="dd_right dl_2x">
				<dt>Beløp</dt>
				<dd><input type="text" name="bank_ut" class="styled w90" value="0" style="margin-right: 3px" />' . show_button("Alt", 'onclick="this.previousSibling.value=\'' . game::format_cash($this->ff->data['ff_bank']) . '\'"') . '
				
				<dt>Notat</dt>
				<dd><input type="text" name="note" value="" maxlength="50" class="styled w120" /></dd>
			</dl>
			<h4>' . show_sbutton("Ta ut") . '</h4>
		</form>
	</div>
</div>
<div class="clear"></div>

</div>';
        }
        echo '
<div class="fhr"></div>';
        $ff_reset = $this->ff->data['ff_time_reset'] && !$this->ff->mod ? " AND ffbl_time > {$this->ff->data['ff_time_reset']}" : "";
        // sideinformasjon - hent siste bevegelser
        $pagei = new pagei(pagei::ACTIVE_GET, "side", pagei::PER_PAGE, 15);
        $result = $pagei->query("SELECT ffbl_type, ffbl_amount, ffbl_up_id, ffbl_note, ffbl_time, ffbl_balance FROM ff_bank_log WHERE ffbl_ff_id = {$this->ff->id}{$ff_reset} ORDER BY ffbl_time DESC");
        if ($result->rowCount() == 0) {
            echo '
<p class="c">
	Ingen overføringer er enda registrert.
</p>';
        } else {
            echo '
<h1 id="bevegelser" class="c">Siste bevegelser</h1>
<table class="table center">
	<thead>
		<tr>
			<th>Type</th>
			<th>Person</th>
			<th>Beløp</th>
			<th>Tidspunkt</th>
			<th>Notat</th>
			<th>Balanse</th>
		</tr>
	</thead>
	<tbody class="nowrap">';
            $i = 0;
            $typer = array(1 => "bank_inn", "bank_ut", "bank_doner", "bank_betaling", "bank_tbetaling");
            while ($row = $result->fetch()) {
                $type = isset($typer[$row['ffbl_type']]) ? ff::$bank_ikoner[$typer[$row['ffbl_type']]] : 'Ukjent';
                $type .= " " . (isset(ff::$bank_types[$row['ffbl_type']]) ? ff::$bank_types[$row['ffbl_type']] : 'Ukjent');
                if ($row['ffbl_type'] == 2 || $row['ffbl_type'] == 4) {
                    $row['ffbl_amount'] = "-" . $row['ffbl_amount'];
                }
                $player = $row['ffbl_up_id'] ? '<user id="' . $row['ffbl_up_id'] . '" />' : 'Spillet';
                echo '
		<tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '>
			<td>' . $type . '</td>
			<td>' . $player . '</td>
			<td class="r">' . game::format_cash($row['ffbl_amount']) . '</td>
			<td>' . ess::$b->date->get($row['ffbl_time'])->format(date::FORMAT_SEC) . '</td>
			<td class="wrap">' . (empty($row['ffbl_note']) ? '<span style="color: #AAA">Tomt</span>' : game::bb_to_html($row['ffbl_note'])) . '</td>
			<td class="r">' . game::format_cash($row['ffbl_balance']) . '</td>
		</tr>';
            }
            echo '
	</tbody>
</table>';
            // flere sider?
            if ($pagei->pages > 1) {
                echo '
<p class="c">' . $pagei->pagenumbers(game::address(PHP_SELF, $_GET, array("side")) . "#bevegelser", game::address(PHP_SELF, $_GET, array("side"), array("side" => "_pageid_")) . "#bevegelser") . '</p>';
            }
        }
    }
Example #8
0
 /**
  * Sjekk for tilganger
  */
 protected function check_access()
 {
     // skrivetilgang?
     $this->access_write = $this->data['ffna_up_id'] == login::$user->player->id || access::has("mod");
     // lesetilgang?
     $this->access_read = $this->access_write || $this->data['ffna_published'] != 0 && $this->ff->access(2);
 }