/** 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); }
/** * 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 . '&u&ffn=' . $ffn->data['ffn_id'] . '">Vis detaljer</a>' : '') . ' | <a href="avis?ff_id=' . $this->ff->id . '">Tilbake</a></p>' . $data; }
/** * 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(); }
/** * 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> </dt> <dd>' . game::format_cash($info[2]) . '</dd> <dt> </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>'; } }
/** * 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 . '&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(); }
/** * 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 . '&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>'; }
/** * 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 . '&stats">Vis statistikk over pengeflyt i ' . $this->ff->type['refobj'] . ' »</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>'; } } }
/** * 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); }