Example #1
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 #2
0
    /**
     * Behandle donasjon
     */
    protected function page_donate_handle()
    {
        $amount = game::intval($_POST['donate']);
        $note = trim(postval("note"));
        // nostat?
        if (access::is_nostat()) {
            ess::$b->page->add_message("Du er nostat og har ikke tilgang til å donere til {$this->ff->type['refobj']}.", "error");
        } elseif ($amount < 0) {
            ess::$b->page->add_message("Beløpet kan ikke være negativt..", "error");
        } elseif ($amount < 15000) {
            ess::$b->page->add_message("Minstebeløp å donere er 15 000 kr.", "error");
        } else {
            // finn ut når vi donerte siste gang - kan ikke donere oftere enn en gang i timen
            $result = \Kofradia\DB::get()->query("SELECT ffbl_time FROM ff_bank_log WHERE ffbl_ff_id = {$this->ff->id} AND ffbl_type = 3 AND ffbl_up_id = " . login::$user->player->id . " ORDER BY ffbl_time DESC LIMIT 1");
            $last = $result->fetch();
            if ($last && $last['ffbl_time'] + 3600 > time()) {
                ess::$b->page->add_message("Du kan ikke donere oftere enn én gang per time. Du må vente " . game::counter($last['ffbl_time'] + 3600 - time()) . " før du kan donere på nytt.", "error");
            } elseif ($amount > login::$user->player->data['up_cash']) {
                ess::$b->page->add_message("Du har ikke nok penger på hånda til å donere " . game::format_cash($amount) . " til {$this->ff->type['refobj']}.", "error");
            } elseif (isset($_POST['approve']) && validate_sid(false)) {
                // forsøk å donere
                $a = \Kofradia\DB::get()->exec("UPDATE ff, users_players SET ff_bank = ff_bank + {$amount}, up_cash = up_cash - {$amount} WHERE ff_id = {$this->ff->id} AND up_id = " . login::$user->player->id . " AND up_cash >= {$amount}");
                // hadde ikke nok penger?
                if ($a == 0) {
                    ess::$b->page->add_message("Du har ikke nok penger på hånda til å donere " . game::format_cash($amount) . " til {$this->ff->type['refobj']}.", "error");
                } else {
                    // finn balanse
                    $result = \Kofradia\DB::get()->query("SELECT ff_bank FROM ff WHERE ff_id = {$this->ff->id}");
                    $balance = $result->fetchColumn(0);
                    // legg til logg
                    \Kofradia\DB::get()->exec("INSERT INTO ff_bank_log SET ffbl_ff_id = {$this->ff->id}, ffbl_type = 3, ffbl_amount = {$amount}, ffbl_up_id = " . login::$user->player->id . ", ffbl_time = " . time() . ", ffbl_balance = {$balance}, ffbl_note = " . \Kofradia\DB::quote($note));
                    // legg til i spillerinfo
                    \Kofradia\DB::get()->exec("UPDATE ff_members SET ffm_donate = ffm_donate + {$amount} WHERE ffm_up_id = " . login::$user->player->id . " AND ffm_ff_id = {$this->ff->id} AND ffm_status = 1");
                    ess::$b->page->add_message("Du donerte " . game::format_cash($amount) . " til {$this->ff->type['refobj']}.");
                    // legg til daglig stats
                    $this->ff->stats_update("money_in", $amount, true);
                    redirect::handle();
                }
            } elseif (!isset($_POST['skip'])) {
                ess::$b->page->add_title("Donér til {$this->ff->type['refobj']}");
                // vis skjema for godkjenning
                echo '
<!-- donasjon -->
<div class="section w200">
	<h2>Donér til ' . $this->ff->type['refobj'] . '</h2>
	<p>Du er i ferd med å donére til ' . $this->ff->type['refobj'] . '.</p>
	<p>Beløp: ' . game::format_cash($amount) . '</p>
	<p>Melding/notat: ' . game::format_data($note, "bb-opt", "Uten melding") . '</p>
	<form action="" method="post">
		<input type="hidden" name="donate" value="' . $amount . '" />
		<input type="hidden" name="note" value="' . htmlspecialchars($note) . '" />
		<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
		<p class="c">
			' . show_sbutton("Utfør donasjon", 'name="approve"') . '
			' . show_sbutton("Avbryt", 'name="skip"') . '
		</p>
	</form>
</div>';
                $this->ff->load_page();
            }
        }
    }