示例#1
0
 /**
  * Må vente før ny forumtråd kan legges til
  * @param integer $wait ventetid
  */
 protected function add_topic_error_wait($wait)
 {
     \ajax::html("Du må vente " . \game::counter($wait) . " før du kan opprette ny forumtråd.", \ajax::TYPE_INVALID);
 }
示例#2
0
    /** Behandle respons */
    public function handle_ret($id, $data = NULL)
    {
        switch ($id) {
            case self::RET_INFO_DELETED_OWN:
                echo '
<p class="info_box">Du viser en av dine egne meldinger som har blitt slettet.</p>';
                break;
            case self::RET_INFO_DELETED:
                echo '
<p class="info_box">Denne meldingen tilhører ikke deg.</p>';
                break;
            case self::RET_INFO_REPORTED:
                echo '
<p class="info_box">Du har tilgang til denne meldingstråden fordi den er eller har vært rapportert.</p>';
                break;
            case self::RET_ERROR_404:
                ess::$b->page->add_message("Fant ikke meldingstråden.", "error");
                redirect::handle("innboks");
                break;
            case self::RET_ERROR_CANNOT_REPLY:
                ess::$b->page->add_message("Du kan ikke svare på denne meldingstråden.", "error");
                redirect::handle();
                break;
            case self::RET_ERROR_NO_RECEIVERS:
                ess::$b->page->add_message("Det er ingen mottakere du kan sende svar til.", "error");
                redirect::handle();
                break;
            case self::RET_ERROR_BAN_CREW:
                ess::$b->page->add_message("Du er blokkert fra å sende meldinger til andre enn Crewet. Du kan kun ha én mottaker. Blokkeringen varer til " . ess::$b->date->get($data['ub_time_expire'])->format(date::FORMAT_SEC) . ".<br /><b>Begrunnelse:</b> " . game::format_data($data['ub_reason'], "bb-opt", "Ingen begrunnelse gitt."), "error");
                break;
            case self::RET_ERROR_BAN:
                ess::$b->page->add_message("Du er blokkert fra å sende meldinger til andre enn Crewet. Blokkeringen varer til " . ess::$b->date->get($data['ub_time_expire'])->format(date::FORMAT_SEC) . ".<br /><b>Begrunnelse:</b> " . game::format_data($data['ub_reason'], "bb-opt", "Ingen begrunnelse gitt."), "error");
                break;
            case self::RET_ERROR_BLOCKED:
                foreach ($data as &$row) {
                    $row = game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level']) . (($reason = game::bb_to_html($row['uc_info'])) == "" ? "" : ' - begrunnelse: ' . $reason);
                }
                ess::$b->page->add_message("Du kan ikke svare på denne meldingstråden fordi følgende brukere har blokkert deg:<ul><li>" . implode("</li><li>", $data) . "</li></ul>", "error");
                break;
            case self::RET_INFO_BLOCKED:
                foreach ($data as &$row) {
                    $row = game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level']) . (($reason = game::bb_to_html($row['uc_info'])) == "" ? "" : ' - begrunnelse: ' . $reason);
                }
                ess::$b->page->add_message("Følgende brukere har egentlig blokkert deg:<ul><li>" . implode("</li><li>", $data) . "</li></ul>");
                break;
            case self::RET_ERROR_WAIT:
                global $__server;
                ess::$b->page->add_message('Du må vente ' . game::counter($data) . ' før du kan sende en melding!', "error");
                putlog("LOG", "%c13%bMELDING FORSØK%b%c: %u" . login::$user->player->data['up_name'] . "%u forsøkte å svare på en melding til it_id {$this->id} (%u{$this->data_thread['it_title']}%u). Må vente {$data} sekunder. {$__server['path']}/innboks_les?id={$this->id}");
                break;
            case self::RET_ERROR_CONTENT_SHORT:
                ess::$b->page->add_message("Meldingen kan ikke inneholde færre enn 3 bokstaver/tall.", "error");
                break;
            case self::RET_ERROR_MARK_NO_REL:
                ess::$b->page->add_message("Du har ikke mulighet til å markere denne meldingstråden da du ikke er en deltaker i den.", "error");
                break;
            case self::RET_INFO_MARK_ALREADY:
                if ($this->data_rel['ir_marked']) {
                    ess::$b->page->add_message("Meldingstråden er allerede markert som merket.");
                } else {
                    ess::$b->page->add_message("Meldingstråden er ikke merket fra før.");
                }
                break;
            case self::RET_INFO_MARK_TRUE:
                ess::$b->page->add_message("Meldingstråden er nå markert for oppfølging.");
                break;
            case self::RET_INFO_MARK_FALSE:
                ess::$b->page->add_message("Meldingstråden er ikke lenger markert for oppfølging.");
                break;
            default:
                throw new HSException("Ukjent behandler.");
        }
    }
示例#3
0
 /**
  * Kontroller inndata og utfør utpressing
  */
 public function utpress()
 {
     // wait time?
     if (($wait = $this->ut->getWait()) > 0) {
         \ess::$b->page->add_message("Du må vente " . \game::counter($wait, true) . " før du kan utføre en ny utpressing.", "error");
         return;
     }
     // validate form
     $form_info = '';
     if ($this->ut->up->data['up_utpressing_last']) {
         $form_info = sprintf("Siste=%s;", \game::timespan($this->ut->up->data['up_utpressing_last'], \game::TIME_ABS | \game::TIME_SHORT | \game::TIME_NOBOLD));
     } else {
         $form_info = "First;";
     }
     if ($wait) {
         $form_info .= sprintf("%%c11Ventetid=%s%%c", \game::timespan($wait, \game::TIME_SHORT | \game::TIME_NOBOLD));
     } else {
         $form_info .= "%c9No-wait%c";
     }
     if (!$this->form->validateHashOrAlert(postval('hash'), $form_info)) {
         return;
     }
     // mangler alternativ?
     $option = $this->ut->getOption(postval("opt"));
     if (!$option) {
         \ess::$b->page->add_message("Du må velge et alternativ.", "error");
         return;
     }
     // lagre valg for neste gang
     \ess::session_put("utpressing_opt_key", postval("opt"));
     // forsøk utpressing
     $result = $this->ut->utpress($option);
     if ($msg = $result->getMessage()) {
         \ess::$b->page->add_message($msg);
     }
     // oppdater anti-bot
     $this->antibot->increase_counter();
 }
示例#4
0
 /**
  * Sjekk for ventetid
  */
 protected function check_wait()
 {
     // ventetid - 20 sekunder
     // TODO: forbedre denne så den sjekker antall meldinger sendt siste 10 min eller liknende
     if (access::has("crewet")) {
         $wait = 0;
     } else {
         $wait = max(0, login::$user->data['u_inbox_sent_time'] + 20 - time());
     }
     // ventetid?
     if ($wait > 0) {
         ess::$b->page->add_message('Du må vente ' . game::counter($wait) . ' før du kan sende en melding.', "error");
         putlog("LOG", "%c13%bMELDING FORSØK%b%c: %u" . login::$user->player->data['up_name'] . "%u forsøkte å opprette en ny melding. Må vente {$wait} sekunder.");
         return false;
     }
     return true;
 }
示例#5
0
    protected function show($as_who = null)
    {
        $complete = $this->data['poker_state'] == self::STATE_COMPLETE;
        if ($complete) {
            $winner = $this->get_winner();
        }
        $is_starter = $as_who == self::SHOW_STARTER;
        $has_challenger = $this->data['poker_state'] >= self::STATE_CHALLENGE;
        $new = $this->data['poker_state'] == self::STATE_BEGIN;
        $challenge = !$is_starter && $this->data['poker_state'] == self::STATE_CHALLENGE;
        echo '
<div class="bg1_c small">
	<h1 class="bg1">' . ($is_starter ? $new ? 'Nytt pokerspill' : 'Ditt pokerspill' : 'Din utfordring') . '<span class="left"></span><span class="right"></span></h1>
	<div class="bg1">';
        if ($new) {
            echo '
		<p>Du har nå startet et nytt pokerspill og fortsetter ved å velge de kortene du vil <u>beholde</u>. Når du har trykket fortsett kommer du opp på listen for utfordrere og andre kan spille mot deg.</p>
		<form action="" method="post">
		<input type="hidden" name="state1" value="' . $this->id . '" />';
        } elseif ($challenge) {
            $time_left = $this->data['poker_time_challenge'] + self::MAX_CHALLENGE_TIME - time();
            echo '
		<p>Du må fullføre din utfordring innen <b>' . game::counter($time_left, true) . '</b>. Dersom du ikke fullfører vil spillet automatisk velge kort for deg.</p>
		<form action="" method="post">
		<input type="hidden" name="state3" value="' . $this->id . '" />';
        }
        echo '
		<dl class="dd_right center" style="width: 60%">
			<dt>Tid siden start</dt>
			<dd>' . game::timespan($this->data['poker_time_start'], game::TIME_ABS) . '</dd>' . ($has_challenger ? '
			<dt>Tid siden utfordring</dt>
			<dd>' . game::timespan($this->data['poker_time_challenge'], game::TIME_ABS) . '</dd>' : '') . '
			<dt>Innsats</dt>
			<dd>' . game::format_cash($this->data['poker_cash']) . '</dd>' . ($has_challenger ? '
			<dt>Utfordrer</dt>
			<dd><user id="' . $this->data['poker_' . ($is_starter ? 'challenger' : 'starter') . '_up_id'] . '" /></dd>' : '
			<dt>Utfordrer</dt>
			<dd>Ingen enda</dd>') . '
		</dl>';
        if ($complete || $has_challenger && access::has("admin")) {
            echo '
		<div class="poker_cards_section">
			<p><b>Motstanderens kort:</b> ' . ($is_starter ? $this->text2 : $this->text1) . '</p>
			<p>';
            if ($is_starter) {
                $this->list_cards($this->poker2, $this->solve2);
            } else {
                $this->list_cards($this->poker1, $this->solve1);
            }
            echo '
			</p>
		</div>';
        }
        echo '
		<div class="poker_cards_section">
			<p><b>Dine kort:</b> ' . ($is_starter ? $this->text1 : $this->text2) . '</p>' . ($challenge ? '
			<p>Marker de kortene du ønsker å <u>beholde</u>.</p>' : '') . '
			<p>';
        if ($new || $challenge) {
            ess::$b->page->add_js('sm_scripts.poker_parse();');
            if ($new) {
                $this->list_cards_selectable($this->poker1, $this->solve1);
            } else {
                $this->list_cards_selectable($this->poker2, $this->solve2);
            }
        } elseif ($is_starter) {
            $this->list_cards($this->poker1, $this->solve1);
        } else {
            $this->list_cards($this->poker2, $this->solve2);
        }
        echo '
			</p>
		</div>';
        if ($complete) {
            if ($winner[0] == 1 && !$is_starter || $winner[0] == 2 && $is_starter) {
                if ($winner[1]) {
                    echo '
		<p class="poker_res_lost">Dere fikk samme kombinasjon, men motstanderen din hadde høyere highcard. Du tapte runden...</p>';
                } else {
                    echo '
		<p class="poker_res_lost">Motstanderen fikk bedre kombinasjon enn deg. Du tapte runden...</p>';
                }
            } elseif ($winner[0] != 0) {
                if ($winner[1]) {
                    echo '
		<p class="poker_res_won">Dere fikk samme kombinasjon, men du hadde høyere highcard og vant ' . game::format_cash($this->data['poker_prize']) . '!</p>';
                } else {
                    echo '
		<p class="poker_res_won">Du fikk bedre kombinasjon enn motstanderen og vant ' . game::format_cash($this->data['poker_prize']) . '!</p>';
                }
            } else {
                echo '
		<p class="poker_res_eq">Runden ble uavgjort.</p>';
            }
        } elseif ($new) {
            echo (access::has("admin") ? '
			<p class="c"><input type="checkbox" name="renew" id="renew"' . (isset($_POST['renew']) ? ' checked="checked"' : '') . '><label for="renew"> Ikke avslutt runden</label></p>' : '') . '
			<p class="c">' . show_sbutton("Velg kort og åpne runden") . '</p>
			</form>';
        } elseif ($challenge) {
            echo (access::has("admin") ? '
			<p class="c"><input type="checkbox" name="renew" id="renew"' . (isset($_POST['renew']) ? ' checked="checked"' : '') . '><label for="renew"> Ikke avslutt runden</label></p>' : '') . '
			<p class="c">' . show_sbutton("Velg kort og avslutt") . '</p>
			</form>';
        } elseif ($this->can_pullback) {
            echo '
			<form action="" method="post">
				<input type="hidden" name="pullback" value="' . $this->id . '" />
				<p class="c">Pokerrunden har ligget ute i mer enn ' . game::timespan(self::PULLBACK_TIME, game::TIME_FULL) . ' og du kan trekke den tilbake for å få igjen pengene og evt. legge deg ut på nytt.</p>
				<p class="c">' . show_sbutton("Trekk tilbake pokerrunden") . '</p>
			</form>';
        } elseif ($this->data['poker_state'] == self::STATE_FREE) {
            echo '
			<p class="c">Hvis ingen utfordrer deg i løpet av ' . game::timespan(self::PULLBACK_TIME, game::TIME_FULL) . ' vil du kunne trekke tilbake runden.</p>';
        } elseif ($is_starter && $this->data['poker_state'] == self::STATE_CHALLENGE) {
            echo '
			<p class="c">Venter på at <user id="' . $this->data['poker_challenger_up_id'] . '" /> skal velge kort...</p>';
        }
        echo '
	</div>
</div>';
    }
示例#6
0
    /**
     * Vis fengsel
     */
    protected function show()
    {
        // er vi i fengsel nå?
        if ($wait = $this->up->fengsel_wait()) {
            ess::$b->page->add_js_domready('$("fengsel_dusor").focus();');
            echo '
<div class="bg1_c xsmall">
	<h1 class="bg1">Du er i fengsel<span class="left"></span><span class="right"></span></h1>
	<p class="h_right"><a href="node/16">Hjelp</a></p>
	<div class="bg1">
		<p>Du befinner deg for øyeblikket i fengsel og slipper ut om ' . game::counter($wait, true) . '.</p>' . (!$this->up->is_nostat() ? '
		<form action="" method="post">
			<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
			<input type="hidden" name="expire" value="' . $this->up->data['up_fengsel_time'] . '" />
			<dl class="dd_right">
				<dt>Dusør for å bryte deg ut</dt>
				<dd><input type="text" class="styled w80" name="amount" id="fengsel_dusor" value="' . game::format_cash($this->up->data['up_fengsel_dusor']) . '" /></dd>
			</dl>
			<p class="c">' . show_sbutton($this->up->data['up_fengsel_dusor'] > 0 ? "Endre dusør" : "Sett dusør", 'name="dusor"') . '</p>
			<p class="c">Spilleren som bryter ut mottar kun ' . self::DUSOR_PROFIT * 100 . ' % av dusøren.</p>
		</form>' : '') . '
	</div>
</div>';
        }
        // sortering
        $sort = new sorts("sort");
        $sort->append("asc", "Spiller", "up_name");
        $sort->append("desc", "Spiller", "up_name DESC");
        $sort->append("asc", "Wanted nivå", "up_wanted_level, up_fengsel_time DESC");
        $sort->append("desc", "Wanted nivå", "up_wanted_level DESC, up_fengsel_time DESC");
        $sort->append("asc", "Tid igjen", "up_fengsel_time");
        $sort->append("desc", "Tid igjen", "up_fengsel_time DESC");
        $sort->set_active(requestval("sort"), 5);
        // hent folk i fengsel
        $sort_info = $sort->active();
        $pagei = new pagei(pagei::ACTIVE_GET, "side", pagei::PER_PAGE, 15);
        $result = $pagei->query("\n\t\t\tSELECT up_id, up_name, up_access_level, up_fengsel_time, up_fengsel_num, up_fengsel_dusor, ROUND(up_fengsel_dusor * " . self::DUSOR_PROFIT . ") up_fengsel_dusor_get, up_wanted_level\n\t\t\tFROM users_players\n\t\t\tWHERE up_fengsel_time > " . time() . " AND up_access_level != 0\n\t\t\tORDER BY {$sort_info['params']}");
        $num = $result->rowCount();
        echo '
<div class="bg1_c ' . ($num == 0 ? 'xsmall' : 'xlarge') . '">
	<h1 class="bg1">Fengsel<span class="left"></span><span class="right"></span></h1>
	<p class="h_right"><a href="node/16">Hjelp</a></p>
	<div class="bg1">
		<form action="" method="post">
			<p class="c dark">Ditt wanted nivå er på ' . game::format_number($this->up->data['up_wanted_level'] / 10, 1) . ' %.</p>';
        if ($num == 0) {
            echo '
			<p class="c dark">Ingen er i fengselet for øyeblikket.</p>
			<p class="c"><a href="' . htmlspecialchars(game::address("fengsel", $_GET)) . '" class="button">Oppdater</a></p>';
        } else {
            echo '
			<table class="table center" width="100%">
				<thead>
					<tr>
						<th>Spiller ' . $sort->show_link(0, 1) . '</th>
						<th>Wanted<br />nivå ' . $sort->show_link(2, 3) . '</th>
						<th>Utbrytning<br />sannsynlighet</th>
						<th>Ca. poeng</th>
						<th>Dusør</th>
						<th>Tid igjen ' . $sort->show_link(4, 5) . '</th>
					</tr>
				</thead>
				<tbody>';
            $i = 0;
            while ($row = $result->fetch()) {
                $prefix = "";
                $attr = new attr("class");
                if (++$i % 2 == 0) {
                    $attr->add("color");
                }
                if (!$this->up->fengsel_check()) {
                    $attr->add("box_handle");
                    $prefix = '<input type="radio" name="up_id" value="' . $row['up_id'] . '_' . $row['up_fengsel_time'] . '_' . $row['up_fengsel_dusor'] . '" /> ';
                }
                $time = $row['up_fengsel_time'] - time();
                $prob = self::calc_prob($time, $row['up_wanted_level'] / 10);
                $points = self::calc_points($prob);
                echo '
					<tr' . $attr->build() . '>
						<td>' . $prefix . game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level']) . '</td>
						<td class="c">' . game::format_number($row['up_wanted_level'] / 10, 1) . ' %</td>
						<td class="c">' . game::format_number($prob, 1) . ' %</td>
						<td class="c">' . game::format_num($points) . '</td>
						<td class="r nowrap">' . game::format_cash($row['up_fengsel_dusor_get']) . '</td>
						<td class="r">' . game::counter($time) . '</td>
					</tr>';
            }
            echo '
				</tbody>
			</table>
			<p class="c">' . (($wait = $this->up->fengsel_wait()) == 0 ? '
				' . show_sbutton("Bryt ut", 'name="brytut"') : '
				Du er i fengsel og slipper ut om ' . game::counter($wait, true) . '.
			</p>
			<p class="c">') . '
				<a href="' . htmlspecialchars(game::address("fengsel", $_GET)) . '" class="button">Oppdater</a>
			</p>';
            // flere sider?
            if ($pagei->pages > 1) {
                echo '
			<div class="hr"></div>
			<p class="c">
				' . $pagei->pagenumbers() . '
			</p>';
            }
        }
        echo '
		</form>
	</div>
</div>';
        // testing
        if (!MAIN_SERVER || access::is_nostat() && access::has("mod")) {
            echo '
<div class="bg1_c xxsmall bg1_padding">
	<h1 class="bg1">' . (MAIN_SERVER ? 'No-stat' : 'Testing') . '<span class="left"></span><span class="right"></span></h1>
	<div class="bg1">
		<form action="" method="post">' . ($this->up->fengsel_check() ? '
			<p class="c">' . show_sbutton("Gå ut av fengsel", 'name="remove"') . '</p>' : '
			<dl class="dd_right dl_2x">
				<dt>Tid</dt>
				<dd><input type="text" name="time" value="' . htmlspecialchars(postval("time", 20)) . '" class="styled w40" /> sekunder</dd>
			</dl>
			<p class="c">' . show_sbutton("Gå inn i fensgel") . '</p>') . '
		</form>
	</div>
</div>';
        }
    }
示例#7
0
 /** Forsøk å legg til ny melding i henvendelsen */
 protected function handle_reply()
 {
     // sjekk for blokkering
     $blokkering = blokkeringer::check(blokkeringer::TYPE_SUPPORT);
     if ($blokkering) {
         ess::$b->page->add_message("Du er blokkert fra å sende inn henvendelser til support. Blokkeringen varer til " . ess::$b->date->get($blokkering['ub_time_expire'])->format(date::FORMAT_SEC) . ".<br /><b>Begrunnelse:</b> " . game::format_data($blokkering['ub_reason'], "bb-opt", "Ingen begrunnelse gitt."), "error");
         return;
     }
     $text = trim(postval("text"));
     // tom tekst?
     if (empty($text)) {
         ess::$b->page->add_message("Du må fylle inn en melding.", "error");
         return;
     }
     // sjekk for ventetid
     if (!access::has("crewet")) {
         // hvor lenge er det siden forrige melding ble lagt til?
         $result = \Kofradia\DB::get()->query("\n\t\t\t\tSELECT sum_time FROM support_messages, users_players\n\t\t\t\tWHERE up_u_id = " . login::$user->id . " AND sum_up_id = up_id\n\t\t\t\tORDER BY sum_id DESC LIMIT 1");
         if ($result->rowCount() > 0) {
             $last = $result->fetchColumn(0);
             $wait = max(0, $last + support::$ventetid_reply - time());
             if ($wait > 0) {
                 ess::$b->page->add_message('Du må vente ' . game::counter($wait) . ' før du kan legge til nytt svar.', "error");
                 return;
             }
         }
     }
     // sjekk om det har blitt lagt til noen nye meldinger siden vi viste siden
     $result = \Kofradia\DB::get()->query("SELECT sum_id FROM support_messages WHERE sum_su_id = {$this->data['su_id']} ORDER BY sum_time DESC LIMIT 1");
     $last_sum = $result->rowCount() > 0 ? $result->fetchColumn(0) : 0;
     if (!isset($_POST['last_sum']) || $_POST['last_sum'] != $last_sum) {
         ess::$b->page->add_message("Nytt svar har blitt lagt til siden du viste siden sist. Trykk legg til melding på nytt for å fortsette.", "error");
         return;
     }
     // legg til meldingen
     \Kofradia\DB::get()->exec("INSERT INTO support_messages SET sum_su_id = {$this->data['su_id']}, sum_up_id = " . login::$user->player->id . ", sum_time = " . time() . ", sum_text = " . \Kofradia\DB::quote($text));
     // endre status?
     if ($this->own) {
         $su_solved = 0;
     } elseif (isset($_POST['solve'])) {
         $su_solved = 1;
     } else {
         $su_solved = 0;
     }
     \Kofradia\DB::get()->exec("UPDATE support SET su_solved = {$su_solved} WHERE su_id = {$this->data['su_id']}");
     // sende logg til spilleren som henvendelsen tilhører?
     if (!$this->own) {
         global $_game;
         player::add_log_static("support", login::$user->player->id . ":" . $this->data['su_title'], $this->data['su_id'], $this->data['new_up_id']);
     }
     // fiks antall nye henvendelser
     support::update_tasks();
     // fjern fra status
     if (!$this->own) {
         $this->status_remove();
     }
     if ($this->own) {
         putlog("CREWCHAN", "%c11%bSUPPORT HENVENDELSE OPPDATERT%b%c: %u" . login::$user->player->data['up_name'] . "%u la til nytt svar i %u{$this->data['su_title']}%u " . ess::$s['spath'] . "/support/?a=show&su_id={$this->data['su_id']}");
     }
     ess::$b->page->add_message("Meldingen ble lagt til.");
     redirect::handle("?a=show&su_id={$this->data['su_id']}");
 }
示例#8
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();
    }
示例#9
0
文件: index.php 项目: Kuzat/kofradia
    /**
     * Sykehus
     */
    public function __construct(player $up = null, ff $ff)
    {
        parent::__construct($up);
        $this->ff = $ff;
        $show = $this->up && $this->ff->active;
        if ($show) {
            // i fengsel eller bomberom?
            if ($this->up->fengsel_require_no(false) || $this->up->bomberom_require_no(false)) {
                return;
            }
            // sett opp skjema
            $this->form = \Kofradia\Form::getByDomain("sykehus", login::$user);
            // utføre et alternativ?
            if (isset($_POST['sykehus'])) {
                $this->action();
            }
            // utføre sykebil
            if (isset($_POST['sykebil']) && $this->sykebil()) {
                return;
            }
        }
        // vis alternativene
        echo '
<div class="bg1_c xsmall">
	<h1 class="bg1">Sykehus<span class="left2"></span><span class="right2"></span></h1>
	<div class="bg1">
		<boxes />
		<p>Sykehus gir deg muligheten til å øke din energi slik at helsen din går mye fortere opp enn hva den ville gjort utenom. Energien kan ved hjelp av sykehus gå over 100 %.</p>';
        // ventetid?
        $wait = $this->calc_wait();
        if ($wait > 0) {
            echo '
		<p>Du må vente ' . game::counter($wait, true) . ' før du kan benytte deg av sykehus på nytt.</p>';
        } elseif ($show && $this->up->data['up_b_id'] != $this->ff->data['br_b_id']) {
            echo '
		<p>Du må befinne deg i samme bydel som sykehuset for å kunne benytte deg av det.</p>';
            // har vi lite nok energi til å ta sykebil?
            if ($this->up->get_energy_percent() < self::ENERGY_SYKEBIL_REQ) {
                echo '
		<div style="background-color: #533; padding: 1px 10px">
			<p>Du har svært lite energi. Hvis du føler du står i fare for å dø og ikke har nok energi for å reise via bydeler, kan du få en sykebil til å hente deg.</p>
			<p>Når du blir hentet av en sykebil, vil du bli fraktet til bydelen sykehuset befinner seg i uten å miste noe helse eller energi. Du vil deretter kunne utføre alternativene for å få energi.</p>
			<p>Ved å benytte seg av dette alternativet <b>må du ofre 25 % av din totale rank</b>.</p>
			<form action="" method="post">
				<p class="c">' . show_sbutton("Be om sykebil", 'name="sykebil"') . '</p>
			</form>
		</div>';
            }
        } elseif ($show) {
            // vis alternativene
            echo '
		<form action="" method="post">
			' . $this->form->getHTMLInput() . '
			<table class="table center">
				<thead>
					<tr>
						<th>Alternativ</th>
						<th>Pris</th>
					</tr>
				</thead>
				<tbody>';
            $i = 0;
            $last_id = ess::session_get("sykehus_last_id");
            foreach (self::$options as $id => $row) {
                echo '
					<tr class="box_handle' . (++$i % 2 == 0 ? ' color' : '') . '">
						<td><input type="radio" name="id" value="' . $id . '"' . ($last_id == $id ? ' checked="checked"' : '') . ' />' . htmlspecialchars($row['name']) . '</td>
						<td class="r">' . game::format_cash($row['price']) . '</td>
					</tr>';
            }
            echo '
				</tbody>
			</table>
			<p class="c">' . show_sbutton("Utfør handling", 'name="sykehus"') . '</p>
		</form>';
        }
        echo '
		<p class="c"><a href="' . ess::$s['relative_path'] . '/node/57">Mer informasjon om sykehus</a></p>
	</div>
</div>';
    }
示例#10
0
文件: panel.php 项目: Kuzat/kofradia
    /**
     * 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();
            }
        }
    }
示例#11
0
    /**
     * Informasjon om spilleren
     */
    protected static function page_info()
    {
        // kan ikke se?
        if (!page_min_side::$pstats) {
            echo '
	<p class="c">Du har ikke tilgang til å se denne siden.</p>';
            return;
        }
        global $_game;
        // antall ganger vi har vunnet i lotto
        $result = \Kofradia\DB::get()->query("SELECT COUNT(id), SUM(won) FROM lotto_vinnere WHERE lv_up_id = " . page_min_side::$active_player->id);
        $row = $result->fetch(\PDO::FETCH_NUM);
        $lotto_vinn = $row[0];
        $lotto_vinn_sum = $row[1];
        ess::$b->page->add_css('
.minside_stats_h { margin-bottom: 0; text-decoration: underline }
.minside_stats_d { margin-top: 0 }');
        // pengeplassering
        if (access::has("mod")) {
            $result = \Kofradia\DB::get()->query("SELECT COUNT(up_id)+1 FROM users_players WHERE up_cash+up_bank > " . page_min_side::$active_player->data['up_cash'] . "+" . page_min_side::$active_player->data['up_bank'] . " AND up_access_level < {$_game['access_noplay']} AND up_access_level != 0");
            $pengeplassering = $result->fetchColumn(0);
        }
        echo '
	<div class="col2_w">
		<div class="col_w left">
			<div class="col">
				<div class="bg1_c">
					<h1 class="bg1">Basisinformasjon<span class="left2"></span><span class="right2"></span></h1>
					<div class="bg1">
						<dl class="dd_right">
							<dt>Spillerens ID</dt>
							<dd>#' . page_min_side::$active_player->id . '</dd>
							<dt>Opprettet</dt>
							<dd>' . ess::$b->date->get(page_min_side::$active_player->data['up_created_time'])->format() . '<br />
								' . game::timespan(page_min_side::$active_player->data['up_created_time'], game::TIME_ABS) . '</dd>
							<dt>Spillernavn</dt>
							<dd>' . page_min_side::$active_player->profile_link() . '</dd>
							<dt>Plassering</dt>
							<dd><a href="bydeler?bydel=' . page_min_side::$active_player->bydel['name'] . '">' . page_min_side::$active_player->bydel['name'] . '</a></dd>
						</dl>
					</div>
				</div>';
        echo '
				<div class="bg1_c">
					<h1 class="bg1">Spilleressurser<span class="left2"></span><span class="right2"></span></h1>
					<div class="bg1">
						<dl class="dd_right">
							<dt>Penger ute</dt>
							<dd>' . game::format_cash(page_min_side::$active_player->data['up_cash']) . '</dd>
							<dt>Penger i bank</dt>
							<dd>' . game::format_cash(page_min_side::$active_player->data['up_bank']) . '</dd>
							<dt>Rankplassering</dt>
							<dd>#' . page_min_side::$active_player->data['upr_rank_pos'] . '</dd>' . (access::has("mod") ? '
							<dt>Poeng</dt>
							<dd>' . (access::has("admin") ? '<a href="' . htmlspecialchars(page_min_side::addr("crew", "b=rank")) . '">' : '') . game::format_number(page_min_side::$active_player->data['up_points']) . (access::has("admin") ? '</a>' : '') . '</dd>
							<dt>Pengeplassering</dt>
							<dd>' . game::format_number($pengeplassering) . '. plass</dd>' : '') . '
						</dl>
					</div>
				</div>
				<div class="bg1_c">
					<h1 class="bg1">Våpen<span class="left2"></span><span class="right2"></span></h1>
					<div class="bg1">';
        // TODO: lenker til å kjøpe våpen og beskyttelse (hvis man har høy nok rank) etc
        if (!page_min_side::$active_player->weapon) {
            echo '
						<p>Du har ikke noe våpen. Du kjøper våpen hos et våpen og beskyttelse-firma via bydeler.</p>';
        } else {
            echo '
						<dl class="dd_right">
							<dt>Våpen</dt>
							<dd>' . htmlspecialchars(page_min_side::$active_player->weapon->data['name']) . '</dd>
							<dt>Kulekapasitet</dt>
							<dd>' . page_min_side::$active_player->weapon->data['bullets'] . '</dd>
							<dt>Antall kuler i våpenet</dt>
							<dd>' . page_min_side::$active_player->data['up_weapon_bullets'] . '</dd>
							<dt>Våpentrening</dt>
							<dd>' . game::format_number(page_min_side::$active_player->data['up_weapon_training'] * 100, 2) . ' %</dd>
						</dl>';
        }
        echo '
					</div>
				</div>
				<div class="bg1_c">
					<h1 class="bg1">Beskyttelse<span class="left2"></span><span class="right2"></span></h1>
					<div class="bg1">';
        if (!page_min_side::$active_player->protection->data) {
            echo '
						<p>Du har ingen beskyttelse. Du kjøper beskyttelse hos et våpen og beskyttelse-firma via bydeler.</p>';
        } else {
            echo '
						<dl class="dd_right">
							<dt>Beskyttelse</dt>
							<dd>' . htmlspecialchars(page_min_side::$active_player->protection->data['name']) . '</dd>
							<dt>Status</dt>
							<dd>' . game::format_number(page_min_side::$active_player->data['up_protection_state'] * 100, 2) . ' %</dd>
						</dl>';
        }
        // i bomberom?
        $bomberom_wait = page_min_side::$active_player->bomberom_wait();
        if ($bomberom_wait > 0) {
            echo '
						<p>Befinner seg i <a href="' . ess::$s['relative_path'] . '/ff/?ff_id=' . page_min_side::$active_player->data['up_brom_ff_id'] . '">bomberom</a> til ' . ess::$b->date->get(page_min_side::$active_player->data['up_brom_expire'])->format() . ' (' . game::counter($bomberom_wait) . ' gjenstår).</p>';
        }
        echo '
					</div>
				</div>';
        echo '
			</div>
		</div>
		<div class="col_w right">
			<div class="col">
				<div class="bg1_c">
					<h1 class="bg1">Statistikk<span class="left2"></span><span class="right2"></span></h1>
					<div class="bg1">
						<p class="minside_stats_h">Generelt</p>
						<dl class="dd_right minside_stats_d">
							<dt>Sidevisninger</dt>
							<dd>' . game::format_number(page_min_side::$active_player->data['up_hits']) . '</dd>
							<dt>Videresendinger</dt>
							<dd>' . game::format_number(page_min_side::$active_player->data['up_hits_redirect']) . '</dd>
						</dl>
						<p class="minside_stats_h">Profil</p>
						<dl class="dd_right minside_stats_d">
							<dt>Visninger i profilen</dt>
							<dd>' . game::format_number(page_min_side::$active_player->data['up_profile_hits']) . '</dd>
						</dl>
						<p class="minside_stats_h">Spiller</p>
						<dl class="dd_right minside_stats_d">
							<dt>Ant. ganger i fengsel</dt>
							<dd>' . game::format_number(page_min_side::$active_player->data['up_fengsel_num']) . '</dd>
							<dt>Antall utbrytninger</dt>
							<dd>' . game::format_number(page_min_side::$active_player->data['up_fengsel_num_out_success']) . ' / ' . game::format_number(page_min_side::$active_player->data['up_fengsel_num_out_tries']) . '</dd>
							<dt>Antall ganger vunnet i lotto</dt>
							<dd><a href="lotto_vinn' . (page_min_side::$active_user->id != login::$user->id ? '?up_id=' . page_min_side::$active_player->id : '') . '">' . game::format_number($lotto_vinn) . '</a></dd>
							<dt>Totalt gitt fra seg i fengseldusører</dt>
							<dd>' . game::format_cash(page_min_side::$active_player->data['up_fengsel_dusor_total_out']) . '</dd>
							<dt>Totalt skaffet av fengseldusører</dt>
							<dd>' . game::format_cash(page_min_side::$active_player->data['up_fengsel_dusor_total_in']) . '</dd>
							<dt>Totalt vunnet i lotto</dt>
							<dd>' . game::format_cash($lotto_vinn_sum) . '</dd>
							<dt>Siste rentebeløp</dt>
							<dd>' . game::format_cash(page_min_side::$active_player->data['up_interest_last']) . '</dd>
							<dt>Totalt brukt på auksjoner</dt>
							<dd>' . game::format_cash(page_min_side::$active_player->data['up_auksjoner_total_out']) . '</dd>
							<dt>Totalt tjent på auksjoner</dt>
							<dd>' . game::format_cash(page_min_side::$active_player->data['up_auksjoner_total_in']) . '</dd>
						</dl>
						<p class="minside_stats_h">Meldinger og forum</p>
						<dl class="dd_right minside_stats_d">
							<dt>Nye meldinger</dt>
							<dd>' . game::format_number(page_min_side::$active_player->data['up_inbox_num_threads']) . '</dd>
							<dt>Svar på meldinger</dt>
							<dd>' . game::format_number(page_min_side::$active_player->data['up_inbox_num_messages']) . '</dd>
							<dt>Forumtråder</dt>
							<dd>' . game::format_number(page_min_side::$active_player->data['up_forum_num_topics']) . '</dd>
							<dt>Forumsvar</dt>
							<dd>' . game::format_number(page_min_side::$active_player->data['up_forum_num_replies']) . '</dd>
							<dt>Forumtråder i firma/broderskap</dt>
							<dd>' . game::format_number(page_min_side::$active_player->data['up_forum_ff_num_topics']) . '</dd>
							<dt>Forumsvar i firma/broderskap</dt>
							<dd>' . game::format_number(page_min_side::$active_player->data['up_forum_ff_num_replies']) . '</dd>
						</dl>
						<p class="minside_stats_h">Angrep</p>
						<dl class="dd_right minside_stats_d">
							<dt>Angrep hvor spilleren ikke ble funnet</dt>
							<dd>' . game::format_num(page_min_side::$active_player->data['up_attack_failed_num']) . '</dd>
							<dt>Angrep hvor spilleren ble skadet</dt>
							<dd>' . game::format_num(page_min_side::$active_player->data['up_attack_damaged_num']) . '</dd>
							<dt>Angrep hvor spilleren ble drept</dt>
							<dd>' . game::format_num(page_min_side::$active_player->data['up_attack_killed_num']) . '</dd>
							<dt>Angrep hvor spilleren døde av skadene påført</dt>
							<dd>' . game::format_num(page_min_side::$active_player->data['up_attack_bleed_num']) . '</dd>' . (page_min_side::$active_player->data['up_df_time'] ? '
							<dt>Siste angrep ble utført</dt>
							<dd>' . ess::$b->date->get(page_min_side::$active_player->data['up_df_time'])->format() . '</dd>' : '') . '
						</dl>
					</div>
				</div>
			</div>
		</div>
	</div>';
    }
示例#12
0
文件: gta.php 项目: Kuzat/kofradia
    /**
     * Vis biltyveri
     */
    protected function biltyveri_show()
    {
        ess::$b->page->add_title("Biltyveri");
        // kontroller ranken vi må ha for å utføre biltyveri
        $this->check_rank();
        // kontroller energi
        $this->gta->up->energy_require(gta::ENERGY_BILTYVERI * 1.3);
        // legg til 30 % på kravet
        // anti-bot
        $this->antibot = antibot::get("biltyveri", 10);
        $this->antibot->check_required(ess::$s['rpath'] . '/gta');
        // skjema
        $this->form = \Kofradia\Form::getByDomain("biltyveri", login::$user);
        // hent inn alternativene
        $this->gta->load_options();
        // ønsker vi å utføre biltyveri?
        if (isset($_POST['option_id'])) {
            $this->biltyveri_utfor();
        }
        // kontroller ventetid
        $wait = $this->gta->calc_wait();
        $wait = $wait[0];
        echo '
<div class="col2_w" style="margin: 35px 0">
	<div class="col_w left" style="width: 64%">
		<div class="col">
<div class="bg1_c center" style="width: 350px">
	<h1 class="bg1">Biltyveri<span class="left2"></span><span class="right2"></span></h1>
	<p class="h_right"><a href="&rpath;/node/20">Hjelp</a></p>
	<div class="bg1">
		';
        // har vi ikke garasje i denne bydelen?
        $bydeler = $this->gta->get_bydeler_info();
        if (!$bydeler[$this->gta->up->data['up_b_id']]['ff_id']) {
            echo '
		<p>Du må ha en garasje i denne bydelen før du kan forsøke å utføre biltyveri.</p>';
        } elseif ($bydeler[$this->gta->up->data['up_b_id']]['garage_free'] == 0) {
            $msg = ess::$b->page->messages->getMessageByName("gta_result");
            if ($msg) {
                echo '
		<div class="p c">' . $msg->content . '</div>';
            }
            echo '
		<p>Det er ikke plass til flere kjøretøy i garasjen din. Oppgrader garasje, selg eller flytt biler for å kunne utføre biltyveri.</p>';
        } elseif (count($this->gta->options) == 0) {
            echo '
		<p>Det er ingen mulighet for å stjele biler i denne bydelen.</p>';
        } else {
            $id = reset($this->gta->options);
            $id = $id['id'];
            $rank = $this->gta->up->rank['need_points'] == 0 ? game::format_number(round(gta::RANK_BILTYVERI / $this->gta->up->rank['points'], 5) * 100, 4) : game::format_number(round(gta::RANK_BILTYVERI / $this->gta->up->rank['need_points'], 5) * 100, 3);
            echo '
		<form action="" method="post" onsubmit="noSubmit(this)">
			' . $this->form->getHTMLInput() . '
			<table class="table game center tablemt" style="width: 100%">
				<thead>
					<tr>
						<th>Navn</th>
						<th>Sjanse</th>
						<th>Forsøk</th>
						<th>Vellykkede</th>
					</tr>
				</thead>
				<tbody>';
            // vis alternativene
            $valgt = login::data_get("biltyveri_alternativ_" . login::$user->player->data['up_b_id']);
            $i = 0;
            foreach ($this->gta->options as $option) {
                echo '
					<tr class="box_handle' . (++$i % 2 == 0 ? ' color' : '') . '">
						<td><input type="radio" name="option_id" value="' . $option['id'] . '"' . ($option['id'] == $valgt ? ' checked="checked"' : '') . ' />' . htmlspecialchars($option['name']) . '</td>
						<td class="r">' . game::format_number($option['percent']) . ' %</td>
						<td class="r">' . game::format_number($option['count']) . '</td>
						<td class="r">' . game::format_number($option['success']) . ' (' . ($option['count'] == 0 ? '0,0' : game::format_number($option['success'] / $option['count'] * 100, 1)) . ' %)</td>
					</tr>';
            }
            echo '
				</tbody>
			</table>';
            $msg = ess::$b->page->messages->getMessageByName("gta_result");
            if ($msg) {
                echo '
			<div class="p c">' . $msg->content . '</div>';
            }
            echo $wait > 0 ? '
			<p class="c">Du må vente ' . game::counter($wait, true) . ' før du kan utføre biltyveri igjen.</p>' : '
			<p class="c">' . show_sbutton("Utfør handling") . '</p>';
            echo '
		</form>';
        }
        echo '
	</div>
</div>
		</div>
	</div>
	<div class="col_w right" style="width: 36%">
		<div class="col">
			<p class="c" style="margin-top: 0"><img src="&staticlink;/gta/biltyveri.jpg" alt="Biltyveri" style="border: 3px solid #1F1F1F" /></p>
		</div>
	</div>
</div>';
    }
示例#13
0
        if (isset(login::$user->player->oppdrag->new[$row['o_id']])) {
            echo '
			<p><b>Nytt oppdrag!</b></p>';
        }
        // ikke mulig å utføre enda?
        if ($row['uo_locked'] != 0) {
            echo '
			<div class="p">' . login::$user->player->oppdrag->get_description($row['o_id']) . '</div>';
            // status
            echo login::$user->player->oppdrag->status($row['o_id']);
        } else {
            echo '
			<div class="p">' . login::$user->player->oppdrag->get_description($row['o_id']) . '</div>';
            // akkurat forsøkt -- mislykte -- må vente
            if ($row['uo_last_state'] == 0 && $row['uo_last_time'] + $row['o_retry_wait'] > time()) {
                $wait = $row['uo_last_time'] + $row['o_retry_wait'] - time();
                echo '
			<p>Du mislyktes oppdraget forrige gang du prøvde og må vente ' . game::counter($wait, true) . ' før du kan prøve igjen.</p>';
            } else {
                echo '
			<p><a href="oppdrag?o_id=' . $row['o_id'] . '" class="button">Start oppdrag &raquo;</a></p>';
            }
        }
        echo '
		</div>';
    }
}
echo '
	</div>
</div>';
$_base->page->load();
示例#14
0
 /**
  * Må vente før ny forumtråd kan legges til
  * @param integer $wait ventetid
  */
 protected function add_topic_error_wait($wait)
 {
     \ess::$b->page->add_message("Du må vente " . \game::counter($wait) . " før du kan opprette ny forumtråd.", "error");
 }
示例#15
0
文件: lotto.php 项目: Kuzat/kofradia
 /**
  * Kjøpe lodd
  */
 protected function lodd_kjop()
 {
     // nostat?
     if (access::is_nostat() && !access::has("sadmin") && MAIN_SERVER) {
         ess::$b->page->add_message("Du har ikke tilgang til å spille lotto. (NoStat)", "error");
         redirect::handle();
     }
     if (!$this->form->validateHashOrAlert(null, ($this->last > 0 ? "Previous=" . game::timespan($this->last, game::TIME_ABS | game::TIME_SHORT | game::TIME_NOBOLD) . ";" : "First;") . ($this->active ? "Active;" : "NOT-ACTIVE;") . ($this->wait ? "%c11Ventetid=" . game::timespan($this->wait, game::TIME_SHORT | game::TIME_NOBOLD) . "%c" : "%c9No-wait%c"))) {
         return;
     }
     if (isset($_POST['b'])) {
         global $__server;
         putlog("ABUSE", "Trolig bot: " . login::$user->player->data['up_name'] . " - Skjult skjema sendt (Lotto) SID=" . login::$info['ses_id'] . " " . $__server['path'] . "/min_side?up_id=" . login::$user->player->id);
     }
     // ikke aktiv?
     if (!$this->active) {
         ess::$b->page->add_message("Lottoen er ikke aktiv for øyeblikket!", "error");
         redirect::handle();
     }
     // ventetid?
     if ($this->wait > 0) {
         ess::$b->page->add_message('Du må vente ' . game::counter($this->wait, true) . ' før du kan kjøpe nye lodd!', "error");
         redirect::handle();
     }
     $lodd = intval($_POST['lodd']);
     // ikke gyldig?
     if ($lodd < 1) {
         ess::$b->page->add_message("Du må minimum kjøpe ett lodd!", "error");
         redirect::handle();
     }
     // for mange lodd?
     if ($lodd > lotto::$lodd_maks_om_gangen) {
         ess::$b->page->add_message("Du kan maks kjøpe " . game::format_number(lotto::$lodd_maks_om_gangen) . " lodd på en gang!", "error");
         redirect::handle();
     }
     // kan vi kjøpe så mange lodd?
     if ($lodd > lotto::$lodd_maks - $this->info['antall_lodd']) {
         ess::$b->page->add_message("Du kan ikke kjøpe så mange lodd!", "error");
         redirect::handle();
     }
     $lodd_price = lotto::get_lodd_price();
     $cost = $lodd * $lodd_price;
     // trekk fra pengene
     $a = \Kofradia\DB::get()->exec("UPDATE users_players SET up_cash = up_cash - ({$lodd} * " . $lodd_price . ") WHERE up_id = " . login::$user->player->id . " AND up_cash >= ({$lodd} * " . $lodd_price . ")");
     if ($a == 0) {
         ess::$b->page->add_message("Du har ikke nok penger på hånda!", "error");
         redirect::handle();
     }
     // gi loddene til brukeren
     $q = array();
     $time = time();
     for ($i = 0; $i < $lodd; $i++) {
         $q[] = "(" . login::$user->player->id . ", {$time})";
     }
     \Kofradia\DB::get()->exec("INSERT INTO lotto (l_up_id, time) VALUES " . implode(",", $q));
     // energi
     login::$user->player->energy_use(self::ENERGY);
     ess::$b->page->add_message("Du har kjøpt <b>" . game::format_number($lodd) . "</b> lottolodd for <b>" . game::format_cash($lodd * $lodd_price) . "</b>!");
     $this->antibot->increase_counter();
     redirect::handle();
 }
示例#16
0
    /**
     * Krev at vi ikke er i bomberom
     */
    public function bomberom_require_no($load_page = true)
    {
        $wait = $this->bomberom_wait();
        if ($wait == 0) {
            return false;
        }
        // ikke i bomberom
        global $__server;
        if ($load_page) {
            ess::$b->page->add_title("I bomberom");
        }
        // i bomberom
        echo '
<div class="bg1_c xsmall" style="width: 460px">
	<h1 class="bg1">
		Bomberom
		<span class="left2"></span><span class="right2"></span>
	</h1>
	<div class="bg1 c" style="color: #BBB">
		<p style="float: right; margin: 10px 0 10px 10px"><img src="' . STATIC_LINK . '/other/bomberom.jpg" alt="I bomberom" style="border: 2px solid #333333" /></p>
		<p style="margin-top: 30px; text-align: center; font-size: 150%">I bomberom</p>
		<p style="margin-top: 20px">Du befinner deg i bomberom frem til ' . ess::$b->date->get($this->data['up_brom_expire'])->format(date::FORMAT_SEC) . '.</p>
		<p style="margin-top: 20px">' . game::counter($wait, true) . ' gjenstår</p>
		<p style="margin-top: 20px"><a href="' . $__server['relative_path'] . '/ff/?ff_id=' . $this->data['up_brom_ff_id'] . '">Vis mer informasjon &raquo;</a></p>
	</div>
</div>';
        if ($load_page) {
            ess::$b->page->load();
        }
        return true;
    }
示例#17
0
    /**
     * Vis anti-boten
     */
    protected function show()
    {
        login::$data['antibot'][$this->antibot->data['id']] = $this->images_data;
        ess::$b->page->add_css_file("sjekk.css?u");
        $c = str_replace(".", "", round(microtime(true), 2));
        echo '
<div class="bg1_c small">
	<h1 class="bg1">Anti-bot<span class="left"></span><span class="right"></span></h1>
	<div class="bg1">
		<boxes />
		<p>Dette er et virkemiddel mot bruk av programmer som spiller for deg uten at du aktivt utfører noen handlinger. Dette er juks og ikke tillatt.</p>' . ($this->antibot->kuler_time_left ? '
		<p>Anti-bot må fullføres <b>før</b> kulene blir kjøpt. Du har nå reservert kulene, men for å fullføre kjøpet må anti-boten gjennomføres <b style="color: #DD0000">innen ' . game::counter($this->antibot->kuler_time_left, true) . '</b> sekunder.</p>' : '') . '
		<p>Merk de bildene som inneholder en <u>bil</u> og trykk på &laquo;Fullfør&raquo; knappen nederst.</p>' . ($this->wait ? '
		<p class="error_box">Du må vente ' . game::counter($this->wait) . ' før du kan utføre anti-bot sjekk på nytt.</p>' : '') . '
		<form action="" method="post" id="antibot_form">
			' . $this->form->getHTMLInput() . '
			<div id="antibot">
				<div class="antibot_row">
					<div class="antibot_col1 box_handle box_handle_noimg">
						<img src="sjekk?a=' . $this->antibot->data['id'] . '1&amp;' . $c . '" alt="Bilde 1" />
						<input type="checkbox" name="bilde[1]" />
					</div>
					<div class="antibot_col2 box_handle box_handle_noimg">
						<img src="sjekk?a=' . $this->antibot->data['id'] . '2&amp;' . $c . '" alt="Bilde 2" />
						<input type="checkbox" name="bilde[2]" />
					</div>
					<div class="antibot_col3 box_handle box_handle_noimg">
						<img src="sjekk?a=' . $this->antibot->data['id'] . '3&amp;' . $c . '" alt="Bilde 3" />
						<input type="checkbox" name="bilde[3]" />
					</div>
				</div>
				<div class="antibot_row">
					<div class="antibot_col1 box_handle box_handle_noimg">
						<img src="sjekk?a=' . $this->antibot->data['id'] . '4&amp;' . $c . '" alt="Bilde 4" />
						<input type="checkbox" name="bilde[4]" />
					</div>
					<div class="antibot_col2 box_handle box_handle_noimg">
						<img src="sjekk?a=' . $this->antibot->data['id'] . '5&amp;' . $c . '" alt="Bilde 5" />
						<input type="checkbox" name="bilde[5]" />
					</div>
					<div class="antibot_col3 box_handle box_handle_noimg">
						<img src="sjekk?a=' . $this->antibot->data['id'] . '6&amp;' . $c . '" alt="Bilde 6" />
						<input type="checkbox" name="bilde[6]" />
					</div>
				</div>
			</div>
			<p class="c">
				' . show_sbutton("Fullfør", 'name="valider"') . '
				' . show_sbutton("Nye bilder", 'name="new"') . '
			</p>
		</form>
	</div>
</div>';
        ess::$b->page->load();
    }
示例#18
0
    /**
     * Behandle forespørsel
     */
    protected function handle_page()
    {
        $this->krim->up->fengsel_require_no();
        $this->krim->up->bomberom_require_no();
        $this->krim->up->energy_require(kriminalitet::ENERGY_KRIM * 1.3);
        // legg til 30 % på kravet
        // sett opp skjema
        $this->form = \Kofradia\Form::getByDomain("kriminalitet", login::$user);
        // sett opp antibot og sjekk om den skal utføres nå
        $this->antibot = antibot::get("kriminalitet", 12);
        $this->antibot->check_required();
        ess::$b->page->add_title("Kriminalitet");
        // hent informasjon om forrige forsøk
        $this->krim->get_last_info();
        // hent inn alternativene
        $this->krim->options_load();
        // utføre handling?
        if (isset($_POST['theid'])) {
            $this->utfor();
        }
        echo '
<div class="bg1_c medium">
	<h1 class="bg1">Kriminalitet<span class="left2"></span><span class="right2"></span></h1>
	<p class="h_right"><a href="' . ess::$s['rpath'] . '/node/3">Hjelp</a></p>
	<div class="bg1" style="padding-bottom: 1em">
		<p>Her kan du gjøre enkle forbrytelser. Type forbrytelse er forskjellig fra bydel til bydel. Sannsynligheten justerer seg etter resultatet av forrige forsøk.</p>';
        // siste utført?
        if ($this->krim->last) {
            echo '
		<p>Du utførte kriminalitet sist den ' . ess::$b->date->get($this->krim->last['last'])->format(date::FORMAT_SEC) . ' på ' . game::$bydeler[$this->krim->last['b_id']]['name'] . '.</p>';
        }
        echo '
		<boxes />';
        // er det noe ventetid?
        if ($this->krim->wait) {
            echo '
		<p>Du må vente ' . game::counter($this->krim->wait, true) . ' før du kan utføre kriminalitet på nytt.</p>';
        }
        // har vi ingen alternativer?
        if (count($this->krim->options) == 0) {
            echo '
		<p>Det er ingen alternativer å utføre i denne bydelen. Prøv en annen bydel.</p>';
        } else {
            ess::$b->page->add_css('
.krim_boks {
	clear: both;
	position: relative;
	padding: 0 0 0 85px;
	border: 1px solid #232323;
	background-color: #222222;
	margin: 0.7em 0 0;
	background-repeat: no-repeat;
	background-position: 0;
	height: 75px;
}
.krim_boks p, .krim_boks h4 { margin: 0; padding: 0; position: absolute }
.krim_boks p { color: #CCCCCC }
.krim_boks.krim_color {
	background-color: #262626;
}
.krim_boks.krim_last {
	background-color: #2D1E1E;
}
.krim_boks .krim_img {
	float: left;
	margin-right: 5px;
}
.krim_boks h4 {
	top: 8px;
}
.krim_strength {
	bottom: 23px;
}
.krim_rank {
	bottom: 23px;
	right: 8px;
}
.krim_info {
	bottom: 8px;
}
.krim_wait {
	right: 8px;
	bottom: 8px;
}
.krim_cash {
	right: 8px;
	top: 8px;
	font-weight: bold;
}');
            if ($this->krim->wait) {
                ess::$b->page->add_js_domready('
	$$("div.krim_boks input").setStyle("display", "none");');
            } else {
                ess::$b->page->add_js_domready('
	$$("div.krim_boks").each(function(elm)
	{
		elm.setStyle("cursor", "pointer");
		elm.addEvents({
			"mouseover": function()
			{
				this.setStyle("background-color", "#181818");
			},
			"mouseout": function()
			{
				this.setStyle("background-color", "");
			},
			"click": function()
			{
				$("theid")
					.set("value", this.get("rel"))
					.form.submit();
			}
		});
		elm.set("title", "Klikk for å utføre");
		elm.getElement("input").setStyle("display", "none");
	});');
            }
            echo '
		<form action="" method="post">
			' . $this->form->getHTMLInput() . '
			<input type="hidden" name="theid" value="" id="theid" />';
            $i = 0;
            $show_id = ess::session_get("krim_last_id");
            foreach ($this->krim->options as $row) {
                $rank = game::format_num($row['points']);
                echo '
			<div class="krim_boks' . (++$i % 2 == 0 ? ' krim_color' : '') . ($show_id == $row['id'] ? ' krim_last' : '') . '" style="background-image: url(' . STATIC_LINK . '/krim/' . (empty($row['img']) ? 'none.png' : $row['img']) . ')" rel="' . $row['id'] . '">
				<h4>
					<input type="submit" name="id' . $row['id'] . '" value="Utfør" />
					' . htmlspecialchars($row['name']) . '
				</h4>
				<p class="krim_strength">' . game::format_num(round($row['prob'] * 100, 1), 1) . ' % sannsynlighet</p>
				<p class="krim_rank">Poeng: ' . $rank . '</p>
				<p class="krim_info">' . game::format_number($row['success']) . ' av ' . game::format_number($row['count']) . ' vellykkede forsøk (' . ($row['count'] == 0 ? '0' : game::format_number($row['success'] / $row['count'] * 100, 1)) . ' %)</p>
				<p class="krim_wait">Ventetid: ' . $row['wait_time'] . ' sek.</p>
				<p class="krim_cash">' . game::format_cash($row['cash_min']) . ' til ' . game::format_cash($row['cash_max']) . '</p>
			</div>';
            }
            echo '
		</form>';
        }
        echo '
	</div>
</div>';
    }
示例#19
0
require "base.php";
global $_game, $_base;
$now = time();
// antall minutter man skal vise pålogget
$online_min = 15;
$u = login::$logged_in ? "%u" . login::$user->player->data['up_name'] . "%u" : "Anonym";
// vis nostatusers
$show_nsu = isset($_GET['show_nsu']);
if ($show_nsu) {
    $_base->page->add_message("Du viser nå også folk som ikke vanligvis vises på statistikk (NoStatUser)!");
}
$next = isset($_SESSION[$GLOBALS['__server']['session_prefix'] . 'statistikk_check']) ? $_SESSION[$GLOBALS['__server']['session_prefix'] . 'statistikk_check'] : 0;
if (!empty($next) && $next > time() && !access::has("mod")) {
    $wait = $next - time();
    if ($wait <= 5) {
        $_base->page->add_message('Du sjekket statistikk for under 5 sekunder siden og må derfor vente i ' . game::counter($wait, true) . '!', "error");
        putlog("LOG", "%bVIS STATISTIKK%b: {$u} (%bDelayed%b)");
        $_base->page->load();
    }
}
$_SESSION[$GLOBALS['__server']['session_prefix'] . 'statistikk_check'] = time() + 5;
$_base->page->add_title("Statistikk");
putlog("LOG", "%bVIS STATISTIKK%b: {$u}" . ($show_nsu ? ' (Show NoStatUser)' : ''));
// hente server informasjon?
if (MAIN_SERVER) {
    // minneinformasjon
    $mem = shell_exec("free -bo");
    $matches = false;
    if (preg_match_all("/(Mem|Swap):\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)(\\s+(\\d+)\\s+(\\d+)\\s+(\\d+))?/u", $mem, $matches, PREG_SET_ORDER)) {
        $mem = array("mem" => array("total" => $matches[0][2], "used" => $matches[0][3], "free" => $matches[0][4], "shared" => $matches[0][6], "buffers" => $matches[0][7], "cached" => $matches[0][8], "used_app" => $matches[0][3] - $matches[0][6] - $matches[0][7] - $matches[0][8]), "swap" => array("total" => $matches[1][2], "used" => $matches[1][3], "free" => $matches[1][4]));
    } else {
示例#20
0
    /**
     * Crewside
     */
    protected static function page_crew()
    {
        global $__server, $_lang;
        ess::$b->page->add_title("Crew");
        $subpage2 = getval("b");
        redirect::store(page_min_side::addr(NULL, $subpage2 != "" ? "b=" . $subpage2 : ''));
        ess::$b->page->add_css('
.minside_crew_links .active { color: #CCFF00 }');
        $links = array();
        $links[] = '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "", "player")) . '">Min spiller</a>';
        $links[] = '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "")) . '"' . ($subpage2 == "" ? ' class="active"' : '') . '>Oversikt / logg</a>';
        if (access::has("forum_mod")) {
            $links[] = '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=addlog")) . '"' . ($subpage2 == "addlog" ? ' class="active"' : '') . '>Nytt notat</a>';
        }
        $links[] = '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=blokk")) . '"' . ($subpage2 == "blokk" ? ' class="active"' : '') . '>Blokkeringer</a>';
        if (access::has("mod")) {
            $links[] = '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=banka")) . '"' . ($subpage2 == "banka" ? ' class="active"' : '') . '>Bankpassord</a>';
        }
        if (access::has("mod")) {
            $links[] = '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=birth")) . '"' . ($subpage2 == "birth" ? ' class="active"' : '') . '>Fødselsdato</a>';
        }
        if (access::has("mod")) {
            $links[] = '<a href="' . htmlspecialchars(page_min_side::addr("set", "b=pass")) . '">Passord</a>';
        }
        if (access::has("admin")) {
            $links[] = '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=level")) . '"' . ($subpage2 == "level" ? ' class="active"' : '') . '>Tilgangsnivå</a>';
        }
        $links[] = '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=send_email")) . '"' . ($subpage2 == "send_email" ? ' class="active"' : '') . '>Send e-post</a>';
        $links[] = '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=warning")) . '"' . ($subpage2 == "warning" ? ' class="active"' : '') . '>Gi advarsel</a>';
        echo '
	<p class="c minside_crew_links">' . implode(" | ", $links) . '</p>';
        if ($subpage2 == "") {
            // javascript for rapporteringer
            ess::$b->page->add_js_domready('
	var w = $("minside_reports");
	var xhr = new Request({
		url: relative_path + "/ajax/minside_report",
		data: { u_id: ' . page_min_side::$active_user->id . ' },
		evalScripts: function(script)
		{
			ajax.js += script;
		}
	});
	xhr.addEvent("success", function(text)
	{
		w.set("html", text);
		w.getElements(".pagenumbers").each(function(elm)
		{
			elm.addEvent("set_page", function(s) { load(null, s, true); });
		});
		ajax.refresh();
	});
	xhr.addEvent("failure", function(x)
	{
		var p = new Element("p", {html: "Feil: " + x}).inject(w.empty());
	});
	function load(a, s, goto)
	{
		if (a !== null) xhr.options.data.a = a;
		if (s) xhr.options.data.s = s;
		if (goto) w.getParent().goto(-10);
		w.set("html", "<p>Laster inn data..</p>");
		xhr.send();
	}
	$("minside_reports_from").addEvent("click", function() { load("from", 1, true); });
	$("minside_reports_to").addEvent("click", function() { load("to", 1, true); });
	$("minside_reports_all").addEvent("click", function() { load("", 1, true); });
	load();');
            // css for rapporteringer
            ess::$b->page->add_css('
.rap_wrap {
	margin: 1em 0;
	background-color: #222222;
	position: relative;
	overflow: auto;
}
.rap_time {
	position: absolute;
	top: 8px;
	right: 5px;
	margin: 0;
	color: #777777;
}
.rap_time span {
	color: #EEEEEE;
}
.rap_w {
	margin: 0;
	padding: 5px;
	background-color: #282828;
}
.rap_u {
	font-size: 14px;
}

.rap_wrap .col2_w { margin: 0 }
.rap_wrap .col_w.left { width: 40% }
.rap_wrap .col_w.right { width: 60% }
.rap_wrap .col_w.left .col { margin: 0 0 0 5px }
.rap_wrap .col_w.right .col { margin: 5px 5px 5px 0 }

.rap_note {
	background-color: #1C1C1C;
	padding: 5px !important;
	overflow: auto;
	border: 1px dotted #525252
}
');
            // faner
            ess::$b->page->add_js_domready('
	$$(".minside_fane_link").addEvent("click", function(elm)
	{
		$$(".minside_fane").setStyle("display", "none");
		$$(".minside_fane_link").removeClass("minside_fane_active");
		this.addClass("minside_fane_active");
		$(this.get("rel")).setStyle("display", "");
	});
	$$(".minside_fane_active").fireEvent("click");');
            ess::$b->page->add_css('
.minside_fane_active, .minside_fane_active:hover {
	color: #CCFF00;
}');
            echo '
	<div class="col2_w">
		<div class="col_w left">
			<div class="col">
				<div class="bg1_c">
					<h1 class="bg1">Oversikt<span class="left2"></span><span class="right2"></span></h1>
					<div class="bg1">';
            // hent blokkeringer for brukeren
            $result = \Kofradia\DB::get()->query("SELECT ub_id, ub_type, ub_time_expire, ub_reason FROM users_ban WHERE ub_u_id = " . page_min_side::$active_user->id . " AND ub_time_expire > " . time());
            if ($result->rowCount() > 0) {
                while ($row = $result->fetch()) {
                    $access = access::has(blokkeringer::$types[$row['ub_type']]['access']);
                    echo '
						<p>Blokkert: ' . ($access ? '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=blokk&t={$row['ub_type']}")) . '">' : '') . htmlspecialchars(blokkeringer::$types[$row['ub_type']]['title']) . ($access ? '</a>' : '') . ' (til ' . ess::$b->date->get($row['ub_time_expire'])->format(date::FORMAT_SEC) . ', ' . game::counter($row['ub_time_expire'] - time()) . ')</p>';
                }
            }
            echo '
						<p>Trykk deg inn på de forskjellige spillerene til brukeren for å se informasjon knyttet opp mot dem.</p>
					</div>
				</div>
			</div>
		</div>
		<div class="col_w right">
			<div class="col">
				<div class="bg1_c">
					<h1 class="bg1">Crewnotat for brukeren<span class="left2"></span><span class="right2"></span></h1>
					<p class="h_right"><a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=enote")) . '">rediger</a></p>
					<div class="bg1">
						<p>Her kan hvem som helst i crewet legge til eller endre et notat for denne brukeren for å memorere ting som har med <u>brukeren</u> å gjøre.</p>' . (empty(page_min_side::$active_user->data['u_note_crew']) ? '
						<p>Ingen notat er registrert.</p>' : '
						<div class="p">' . game::bb_to_html(page_min_side::$active_user->data['u_note_crew']) . '</div>') . '
					</div>
				</div>
			</div>
		</div>
	</div>
	<p class="c"><a class="minside_fane_link minside_fane_active" rel="minside_fane2">Loggoppføringer</a> | <a class="minside_fane_link" rel="minside_fane1">Rapporteringer</a></p>
	<div id="minside_fane1" class="minside_fane">
		<p class="c">Filter: <a id="minside_reports_from">Brukerens egne rapporteringer</a> | <a id="minside_reports_to">Andres rapporteringer</a> | <a id="minside_reports_all">Alle</a></p>
		<div id="minside_reports">
			<p>Laster inn..</p>
		</div>
	</div>
	<div id="minside_fane2" class="minside_fane">
	<p class="c">Loggoppføringer for denne brukeren</p>';
            // hent loggene for denne brukeren
            $pagei = new pagei(pagei::ACTIVE_GET, "side", pagei::PER_PAGE, 50);
            $result = $pagei->query("SELECT lc_id, lc_up_id, lc_time, lc_lca_id, lc_a_up_id, lc_log FROM log_crew JOIN users_players ON up_u_id = " . page_min_side::$active_user->id . " WHERE lc_a_up_id = up_id ORDER BY lc_time DESC");
            // ingen handlinger?
            if ($result->rowCount() == 0) {
                echo '
	<p class="c">Ingen oppføringer eksisterer.</p>';
            } else {
                $rows = array();
                while ($row = $result->fetch()) {
                    $rows[$row['lc_id']] = $row;
                }
                $data = crewlog::load_summary_data($rows);
                $logs = array();
                foreach ($data as $row) {
                    // hent sammendrag
                    $summary = crewlog::make_summary($row, NULL, $row['lc_a_up_id'] != page_min_side::$active_player->id);
                    $day = ess::$b->date->get($row['lc_time'])->format(date::FORMAT_NOTIME);
                    $logs[$day][] = '<p><span class="time">' . ess::$b->date->get($row['lc_time'])->format("H:i") . ':</span> ' . $summary . '</p>';
                }
                ess::$b->page->add_css('.crewlog .time { color: #888888; padding-right: 5px }');
                foreach ($logs as $day => $items) {
                    echo '
	<div class="bg1_c">
		<h1 class="bg1">' . $day . '<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1 crewlog">
			' . implode('
			', $items) . '
		</div>
	</div>';
                }
                echo '
	<p class="c">' . $pagei->pagenumbers() . '</p>';
            }
            echo '
	</div>';
        } elseif ($subpage2 == "addlog" && access::has("forum_mod")) {
            // legge til?
            if (isset($_POST['notat'])) {
                $notat = trim(postval("notat"));
                $notat_bb = trim(game::bb_to_html($notat));
                if (empty($notat_bb)) {
                    ess::$b->page->add_message("Notatet kan ikke være tomt.", "error");
                } else {
                    // legg til i crewloggen
                    crewlog::log("user_add_note", page_min_side::$active_player->id, $notat);
                    ess::$b->page->add_message("Notatet ble registrert.");
                    redirect::handle(page_min_side::addr());
                }
            }
            ess::$b->page->add_title("Nytt notat");
            ess::$b->page->add_js_domready('$("notat_felt").focus();');
            echo '
	<div class="bg1_c">
		<h1 class="bg1">Legg til notat i crewloggen<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<p>Notat: (Vil bli lagt til som vanlig logg i <a href="' . htmlspecialchars(page_min_side::addr(NULL)) . '">Crewloggen</a>.)</p>
			<form action="" method="post">
				<p><textarea name="notat" id="notat_felt" rows="10" cols="30" style="width: 98%; overflow: auto">' . htmlspecialchars(postval("notat")) . '</textarea></p>
				<p>' . show_sbutton("Legg til notat") . '</p>
			</form>
		</div>
	</div>';
        } elseif ($subpage2 == "blokk") {
            ess::$b->page->add_title("Blokkeringer");
            $type = false;
            if (isset($_GET['t'])) {
                // kontroller type
                $type_id = intval($_GET['t']);
                // fant ikke?
                if (!isset(blokkeringer::$types[$type_id])) {
                    ess::$b->page->add_message("Ugyldig type '.{$type_id}.'.", "error");
                } else {
                    $type = blokkeringer::$types[$type_id];
                    // har vi tilgang til å gjøre noe med denne blokkeringen?
                    if (!access::has($type['access'])) {
                        ess::$b->page->add_message('Du har ikke tilgang til denne typen blokkering. (' . htmlspecialchars($type['title']) . ')', "error");
                        $type = false;
                    }
                }
            }
            // vise en type blokkering?
            if ($type) {
                redirect::store(page_min_side::addr(NULL, "b=blokk&t={$type_id}"));
                // sjekk om det er en aktiv blokkering for denne typen
                $active = blokkeringer::check($type_id, page_min_side::$active_user->id);
                if ($active) {
                    // hent informasjon om blokkeringen
                    $info = blokkeringer::get_info($active['ub_id']);
                }
                // handling: legg til blokkering
                if (isset($_POST['add']) && $active) {
                    ess::$b->page->add_message("Det er allerede en blokkering på brukeren som varer til " . ess::$b->date->get($active['ub_time_expire'])->format() . ".", "error");
                } elseif (isset($_POST['add'])) {
                    // kontroller verdier
                    $date_type = isset($_POST['date_type']) && $_POST['date_type'] == "abs" ? "abs" : "rel";
                    $rel_weeks = intval(postval("rel_weeks"));
                    $rel_days = intval(postval("rel_days"));
                    $rel_hours = intval(postval("rel_hours"));
                    $rel_mins = intval(postval("rel_mins"));
                    $abs_date = postval("abs_date");
                    $abs_time = postval("abs_time");
                    // sjekk type og verdiene
                    $expire = false;
                    // bestemt dato/tidspunkt
                    if ($date_type == "abs") {
                        // kontroller datoen
                        if (!($abs_date_m = check_date($abs_date, "%y-%m-%d"))) {
                            ess::$b->page->add_message('Datoen du skrev inn er ikke gyldig.', "error");
                        } elseif (!($abs_time_m = check_date($abs_time, "%h:%i:%s"))) {
                            ess::$b->page->add_message('Tidspunktet du skrev inn er ikke gyldig.', "error");
                        } else {
                            // ok
                            $date = ess::$b->date->get();
                            $date->setTime($abs_time_m[1], $abs_time_m[2], $abs_time_m[3]);
                            $date->setDate($abs_date_m[1], $abs_date_m[2], $abs_date_m[3]);
                            $expire = $date->format("U");
                        }
                    } else {
                        // sjekk uker
                        if ($rel_weeks < 0 || $rel_weeks > 9) {
                            ess::$b->page->add_message('Antall uker kan ikke være under 0 eller over 9.', "error");
                        } elseif ($rel_days < 0 || $rel_days > 6) {
                            ess::$b->page->add_message('Antall dager kan ikke være under 0 eller over 6.', "error");
                        } elseif ($rel_hours < 0 || $rel_hours > 23) {
                            ess::$b->page->add_message('Antall timer kan ikke være under 0 eller over 23.', "error");
                        } elseif ($rel_mins < 0 || $rel_mins > 59) {
                            ess::$b->page->add_message('Antall minutter kan ikke være under 0 eller over 59.', "error");
                        } else {
                            // ok
                            $expire = time() + $rel_weeks * 604800 + $rel_days * 86400 + $rel_hours * 3600 + $rel_mins * 60;
                        }
                    }
                    // sjekke videre?
                    if ($expire) {
                        // sjekk at datoen er minst 1 min fremover i tid
                        if ($expire < time() + 60) {
                            ess::$b->page->add_message('Du kan ikke legge til en blokkering for mindre enn 1 minutt.', "error");
                        } else {
                            // kontroller begrunnelse og intern informasjon
                            $log = trim(postval("log"));
                            $note = trim(postval("note"));
                            // mangler begrunnelse?
                            if ($log == "") {
                                ess::$b->page->add_message('Mangler begrunnelse.', "error");
                            } elseif ($note == "") {
                                ess::$b->page->add_message("Mangler intern informasjon", "error");
                            } else {
                                // forsøk å legg til blokkeringen
                                $add = blokkeringer::add(page_min_side::$active_user->id, $type_id, $expire, $log, $note);
                                if ($add !== true) {
                                    ess::$b->page->add_message("Det er allerede en blokkering på brukeren som varer til " . ess::$b->date->get($add['ub_time_expire'])->format() . ".", "error");
                                } else {
                                    // legg til crewlogg
                                    crewlog::log("user_ban_active", page_min_side::$active_player->id, $log, array("type" => $type_id, "time_end" => $expire, "note" => $note));
                                    ess::$b->page->add_message('Brukeren er nå blokkert til ' . ess::$b->date->get($expire)->format() . '. (' . htmlspecialchars($type['title']) . ')');
                                    redirect::handle();
                                }
                            }
                        }
                    }
                } elseif (isset($_POST['edit']) && !$active) {
                    // ingen blokkering å redigere?
                    ess::$b->page->add_message("Brukeren har ikke lengre denne blokkeringen.", "error");
                } elseif (isset($_POST['edit'])) {
                    // godkjent handling?
                    if (isset($_POST['log_change'])) {
                        // kontroller verdier
                        $date = postval("date");
                        $time = postval("time");
                        // kontroller datoen
                        if (!($date_m = check_date($date, "%y-%m-%d"))) {
                            ess::$b->page->add_message('Datoen du skrev inn er ikke gyldig.', "error");
                        } elseif (!($time_m = check_date($time, "%h:%i:%s"))) {
                            ess::$b->page->add_message('Tidspunktet du skrev inn er ikke gyldig.', "error");
                        } else {
                            $date = ess::$b->date->get();
                            $date->setTime($time_m[1], $time_m[2], $time_m[3]);
                            $date->setDate($date_m[1], $date_m[2], $date_m[3]);
                            $expire = $date->format("U");
                            // sjekk at datoen er minst 1 min fremover i tid
                            if ($expire < time() + 60) {
                                ess::$b->page->add_message('Du kan ikke legge til en blokkering for mindre enn 1 minutt.', "error");
                            } else {
                                // kontroller begrunnelse for utestengelse, begrunnelse for endring og intern informasjon
                                $log_ban = trim(postval("log_ban"));
                                $log_change = trim(postval("log_change"));
                                $note = trim(postval("note"));
                                // mangler begrunnelse for endring?
                                if ($log_change == "") {
                                    ess::$b->page->add_message('Mangler begrunnelse for endring.', "error");
                                } elseif ($log_ban == "") {
                                    ess::$b->page->add_message('Mangler begrunnelse for utestengelse.', "error");
                                } elseif ($note == "") {
                                    ess::$b->page->add_message('Mangler intern informasjon.', "error");
                                } elseif ($expire == $info['ub_time_expire'] && $log_ban == $info['ub_reason'] && $note == $info['ub_note']) {
                                    ess::$b->page->add_message('Ingen endringer ble utført.', "error");
                                } else {
                                    // oppdater blokkeringen
                                    $edit = blokkeringer::edit($active['ub_id'], $expire, $log_ban, $note);
                                    if ($edit == 0) {
                                        ess::$b->page->add_message("Blokkeringen kunne ikke bli oppdatert. Den er mest sannsynlig ikke lengre aktiv.", "error");
                                    } else {
                                        // legg til crewlogg
                                        $data = array("type" => $type_id, "time_end_old" => $info['ub_time_expire'], "log_old" => $info['ub_reason'], "note_old" => $info['ub_note']);
                                        if ($expire != $info['ub_time_expire']) {
                                            $data["time_end_new"] = $expire;
                                        }
                                        if ($log_ban != $info['ub_reason']) {
                                            $data["log_new"] = $log_ban;
                                        }
                                        if ($note != $info['ub_note']) {
                                            $data["note_new"] = $note;
                                        }
                                        crewlog::log("user_ban_change", page_min_side::$active_player->id, $log_change, $data);
                                        ess::$b->page->add_message('Du har oppdatert blokkeringen. Brukeren er nå blokkert til ' . ess::$b->date->get($expire)->format() . '. (' . htmlspecialchars($type['title']) . ')');
                                        redirect::handle();
                                    }
                                }
                            }
                        }
                    }
                } elseif (isset($_POST['delete']) && !$active) {
                    // ingen blokkering å slette?
                    ess::$b->page->add_message("Brukeren har ikke lengre denne blokkeringen.", "error");
                } elseif (isset($_POST['delete'])) {
                    // godkjent handling?
                    if (isset($_POST['log'])) {
                        $log = trim(postval("log"));
                        // mangler logg?
                        if ($log == "") {
                            ess::$b->page->add_message('Mangler begrunnelse.', "error");
                        } else {
                            // fjern blokkeringen
                            $delete = blokkeringer::delete($active['ub_id']);
                            if ($delete == 0) {
                                ess::$b->page->add_message("Blokkeringen kunne ikke bli oppdatert. Den er mest sannsynlig ikke lengre aktiv.", "error");
                            } else {
                                // legg til crewlogg
                                crewlog::log("user_ban_delete", page_min_side::$active_player->id, $log, array("type" => $type_id, "time_end" => $info['ub_time_expire'], "log" => $info['ub_reason'], "note" => $info['ub_note']));
                                ess::$b->page->add_message('Du har fjernet blokkeringen. (' . htmlspecialchars($type['title']) . ')');
                                redirect::handle();
                            }
                        }
                    }
                }
                echo '
	<div class="bg1_c" style="width: 350px">
		<h1 class="bg1">Blokkering: ' . htmlspecialchars($type['title']) . '<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<boxes />
			<p class="r">Tilgangsnivå: ' . access::name($type['access']) . '</p>
			<p><u>Hensikt:</u> ' . $type['description'] . '</p>';
                // blokkert?
                if ($active) {
                    echo '
			<p>Brukeren er blokkert.</p>
			<dl class="dd_right">
				<dt>Lagt til</dt>
				<dd>' . ess::$b->date->get($info['ub_time_added'])->format(date::FORMAT_SEC) . '<br />' . game::timespan($info['ub_time_added'], game::TIME_ABS | game::TIME_ALL, 5) . '</dd>
				<dt>Utestengt til</dt>
				<dd>' . ess::$b->date->get($info['ub_time_expire'])->format(date::FORMAT_SEC) . '<br />' . game::counter($info['ub_time_expire'] - time()) . '</dd>
			</dl>
			<div class="section">
				<h2>Begrunnelse</h2>
				<div class="p">' . (($reason = game::bb_to_html($info['ub_reason'])) == "" ? 'Ikke oppgitt.' : $reason) . '</div>
				<h2>Intern informasjon</h2>
				<div class="p">' . (($note = game::bb_to_html($info['ub_note'])) == "" ? 'Ikke oppgitt.' : $note) . '</div>
			</div>';
                    // handling: redigere blokkering
                    if (isset($_POST['edit'])) {
                        echo '
			<p>Du er i ferd med å endre blokkeringen til brukeren.</p>
			<form action="" method="post">
				<dl class="dd_right dl_2x">
					<dt>Til</dt>
					<dd>
						Dato:
						<input type="text" name="date" id="ban_date" value="' . htmlspecialchars(postval("date", ess::$b->date->get($info['ub_time_expire'])->format("Y-m-d"))) . '" class="styled w80" />
						<input type="text" name="time" id="ban_time" value="' . htmlspecialchars(postval("time", ess::$b->date->get($info['ub_time_expire'])->format("H:i:s"))) . '" class="styled w80" />
					</dd>
					<dt>Begrunnelse for endring</dt>
					<dd><textarea name="log_change" cols="30" rows="5">' . htmlspecialchars(postval("log_change")) . '</textarea></dd>
					<dt>Begrunnelse for blokkering</dt>
					<dd><textarea name="log_ban" cols="30" rows="5">' . htmlspecialchars(postval("log_ban", $info['ub_reason'])) . '</textarea></dd>
					<dt>Intern informasjon</dt>
					<dd><textarea name="note" cols="30" rows="5">' . htmlspecialchars(postval("note", $info['ub_note'])) . '</textarea></dd>
					<dd>
						' . show_sbutton("Lagre endringer", 'name="edit"') . '
						' . show_sbutton("Avbryt") . '
					</dd>
				</dl>
			</form>';
                    } elseif (isset($_POST['delete'])) {
                        echo '
			<p>Du er i ferd med å fjerne blokkeringen til brukeren.</p>
			<form action="" method="post">
				<dl class="dd_right dl_2x">
					<dt>Begrunnelse for fjerning</dt>
					<dd><textarea name="log" cols="30" rows="5">' . htmlspecialchars(postval("log")) . '</textarea></dd>
					<form action="" method="post">
						<dd>
							' . show_sbutton("Fjern", 'name="delete"') . '
							' . show_sbutton("Avbryt") . '
						</dd>
					</form>
				</dl>
			</form>';
                    } else {
                        echo '
			<form action="" method="post">
				<p>
					' . show_sbutton("Endre", 'name="edit"') . '
					' . show_sbutton("Fjern", 'name="delete"') . '
					<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=blokk")) . '" class="button">Tilbake</a>
				</p>
			</form>';
                    }
                } else {
                    $date_type = isset($_POST['type']) && $_POST['type'] == "abs" ? "abs" : "rel";
                    $hide_rel = $date_type == "rel" ? '' : ' hide';
                    $hide_abs = $date_type == "abs" ? '' : ' hide';
                    echo '
			<p>Brukeren har ingen aktiv blokkering.</p>
			<form action="" method="post">
				<input type="hidden" name="date_type" value="' . $date_type . '" />
				<dl class="dd_right dl_2x">
					<dt class="date_rel' . $hide_rel . '">Varighet (<a href="#" onclick="handleClass(\'.date_abs\', \'.date_rel\', event, this.parentNode.parentNode); $(\'date_type\').value=\'abs\'">velg dato</a>)</dt>
					<dd class="date_rel' . $hide_rel . '">
						<input type="text" name="rel_weeks" class="styled w30 r" style="width: 10px" value="' . intval(postval("rel_weeks")) . '" maxlength="1" /> uker
						<input type="text" name="rel_days" class="styled w30 r" style="width: 10px" value="' . intval(postval("rel_days")) . '" maxlength="1" /> dager
						<input type="text" name="rel_hours" class="styled w30 r" style="width: 17px" value="' . intval(postval("rel_hours")) . '" maxlength="2" /> timer
						<input type="text" name="rel_mins" class="styled w30 r" style="width: 17px" value="' . intval(postval("rel_mins")) . '" maxlength="2" /> minutter
					</dd>
					<dt class="date_abs' . $hide_abs . '">Til (<a href="#" onclick="handleClass(\'.date_rel\', \'.date_abs\', event, this.parentNode.parentNode); $(\'date_type\').value=\'rel\'">velg varighet</a>)</dt>
					<dd class="date_abs' . $hide_abs . '">
						Dato:
						<input type="text" name="abs_date" value="' . htmlspecialchars(postval("abs_date", ess::$b->date->get()->format("Y-m-d"))) . '" class="styled w80" />
						<input type="text" name="abs_time" value="' . htmlspecialchars(postval("abs_time", ess::$b->date->get()->format("H:i:s"))) . '" class="styled w60" />
					</dd>
					<dt>Begrunnelse</dt>
					<dd><textarea name="log" cols="30" rows="5">' . htmlspecialchars(postval("log")) . '</textarea></dd>
					<dt>Intern informasjon</dt>
					<dd><textarea name="note" cols="30" rows="5">' . htmlspecialchars(postval("note")) . '</textarea></dd>
					<dd>
						' . show_sbutton("Legg til blokkering", 'name="add"') . '
						<a href="' . htmlspecialchars(page_min_side::addr(NULL, "a=blokk")) . '" class="button">Tilbake</a>
					</dd>
				</dl>
			</form>';
                }
                echo '
		</div>
	</div>';
            } else {
                // filtrer ut de blokkeringene vi har tilgang til å sette
                $types = blokkeringer::$types;
                $links = array();
                foreach ($types as $id => $type) {
                    if (!access::has($type['access'])) {
                        continue;
                    }
                    $links[$type['title']] = '
				<li><a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=blokk&t={$id}")) . '" title="' . htmlspecialchars($type['description']) . '">' . htmlspecialchars($type['title']) . '</a></li>';
                }
                // sorter
                ksort($links);
                $links = implode('', $links);
                // vis oversikt
                echo '
	<div class="bg1_c" style="width: 350px">
		<h1 class="bg1">Blokkeringer<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<p>Velg type:</p>';
                if ($links == '') {
                    echo '
			<p>Du har ikke tilgang til noen blokkeringstyper.</p>';
                } else {
                    echo '
			<ul>' . $links . '
			</ul>';
                }
                echo '
		</div>
	</div>';
                // hent alle aktive blokkeringer
                $result = \Kofradia\DB::get()->query("SELECT ub_type, ub_time_expire, ub_reason FROM users_ban WHERE ub_u_id = " . page_min_side::$active_user->id . " AND ub_time_expire > " . time() . " ORDER BY ub_time_expire");
                if ($result->rowCount() > 0) {
                    echo '
	<div class="bg1_c" style="width: 350px">
		<h1 class="bg1">Aktive blokkeringer<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<table class="table tablem" style="width: 100%">
				<thead>
					<tr>
						<th>Type</th>
						<th>Dato</th>
						<th>Begrunnelse</th>
					</tr>
				</thead>
				<tbody>';
                    $i = 0;
                    while ($row = $result->fetch()) {
                        $type = blokkeringer::get_type($row['ub_type']);
                        $access = access::has($type['access']);
                        echo '
					<tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '>
						<td>' . ($access ? '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=blokk&t={$row['ub_type']}")) . '">' : '') . htmlspecialchars($type['title']) . ($access ? '</a>' : '') . '</td>
						<td>
							' . ess::$b->date->get($row['ub_time_expire'])->format(date::FORMAT_SEC) . '<br />
							(' . game::timespan($row['ub_time_expire'], game::TIME_ABS | game::TIME_ALL, 5) . ')
						</td>
						<td>' . game::format_data($row['ub_reason'], "bb-opt", "Ingen begrunnelse gitt.") . '</td>
					</tr>';
                    }
                    echo '
				</tbody>
			</table>
		</div>
	</div>';
                }
            }
        } elseif ($subpage2 == "send_email") {
            ess::$b->page->add_title("Send e-post");
            // har tekst?
            $show_form = true;
            if (isset($_POST['text']) && !isset($_POST['edit'])) {
                $subject = trim(postval("subject"));
                $text = trim(postval("text"));
                // mangler emne?
                if (empty($subject)) {
                    ess::$b->page->add_message("Du må fylle ut emnefeltet.", "error");
                } elseif (empty($text)) {
                    ess::$b->page->add_message("Du må fylle ut innholdet.", "error");
                } else {
                    $email_subject = $subject;
                    $email_text = $text . "\n\n--\n" . login::$user->player->data['up_name'] . "\nwww.kofradia.no\n\nDenne meldingen ble sendt til " . page_min_side::$active_user->data['u_email'] . " som tilhører " . page_min_side::$active_player->data['up_name'];
                    // godkjent?
                    if (isset($_POST['send'])) {
                        // send e-posten
                        $email = new email();
                        $email->text = $email_text;
                        $email->headers['BCC'] = "*****@*****.**";
                        $email->headers['Reply-To'] = "*****@*****.**";
                        $email->send(page_min_side::$active_user->data['u_email'], $email_subject);
                        // legg til crewlogg
                        crewlog::log("user_send_email", page_min_side::$active_player->id, NULL, array("email" => page_min_side::$active_user->data['u_email'], "email_subject" => $email_subject, "email_content" => $email_text));
                        ess::$b->page->add_message("E-posten ble sendt til " . htmlspecialchars(page_min_side::$active_user->data['u_email']) . ".");
                        redirect::handle(page_min_side::addr(""));
                    }
                    echo '
	<div class="bg1_c" style="width: 400px">
		<h1 class="bg1">Send e-post<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<p><b>Mottaker:</b> ' . htmlspecialchars(page_min_side::$active_user->data['u_email']) . '</p>
			<p><b>Emne:</b> ' . htmlspecialchars($email_subject) . '</p>
			<p style="font-family: monospace">' . nl2br(htmlspecialchars($email_text)) . '</p>
			<form action="" method="post">
				<input type="hidden" id="email_subject" name="subject" value="' . htmlspecialchars($subject) . '" />
				<input type="hidden" id="email_text" name="text" value="' . htmlspecialchars($text) . '" />
				<p>' . show_sbutton("Send e-posten", 'name="send"') . ' ' . show_sbutton("Tilbake / endre", 'name="edit"') . '</p>
			</form>
		</div>
	</div>';
                    $show_form = false;
                }
            }
            if ($show_form) {
                ess::$b->page->add_js_domready('$("email_subject").focus();');
                echo '
	<div class="bg1_c" style="width: 400px">
		<h1 class="bg1">Send e-post<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<boxes />
			<p>Her sender du e-post til brukeren på vegne av Kofradia. Avsender vil være den normale avsendere all e-post fra Kofradia blir sendt fra.</p>
			<form action="" method="post">
				<dl class="dd_right dl_2x">
					<dt>Mottaker</dt>
					<dd>' . htmlspecialchars(page_min_side::$active_user->data['u_email']) . '</dd>
					<dt>Emne</dt>
					<dd><input type="text" value="' . htmlspecialchars(postval("subject")) . '" name="subject" id="email_subject" class="styled w200" /></dd>
					<dt>Innhold</dt>
					<dd><textarea name="text" id="email_text" cols="50" rows="10">' . htmlspecialchars(postval("text", "Hei,\n\n")) . '</textarea></dd>
					<dd>' . show_sbutton("Forhåndsvis / fortsett") . '</dd>
				</dl>
			</form>
		</div>
	</div>';
            }
        } elseif ($subpage2 == "warning") {
            ess::$b->page->add_title("Gi advarsel til brukeren");
            $types = crewlog::$user_warning_types;
            // legge til advarsel?
            if (isset($_POST['log'])) {
                $log = trim(postval("log"));
                $note = trim(postval("note"));
                $type = postval("type");
                $priority = (int) postval("priority");
                $notify = isset($_POST['notify']);
                if (empty($log) || empty($note)) {
                    ess::$b->page->add_message("Både begrunnelse og intern informasjon må fylles ut.", "error");
                } elseif (!isset($types[$type])) {
                    ess::$b->page->add_message("Ugyldig kategori.", "error");
                } elseif ($priority < 1 || $priority > 3) {
                    ess::$b->page->add_message("Ugylig alvorlighet.", "error");
                } else {
                    $data = array("type" => $types[$type], "note" => $note, "priority" => $priority);
                    // legge til spillerlogg?
                    if ($notify) {
                        $data['notified'] = 1;
                        $data['notified_id'] = player::add_log_static(gamelog::$items['advarsel'], urlencode($types[$type]) . ':' . urlencode($log), NULL, page_min_side::$active_player->id);
                        ess::$b->page->add_message("Advarselen ble lagret. Brukeren ble informert.");
                    } else {
                        ess::$b->page->add_message("Advarselen ble lagret. Du har ikke informert brukeren om denne advarselen.");
                    }
                    // legg til advarselen
                    crewlog::log("user_warning", page_min_side::$active_player->id, $log, $data);
                    redirect::handle();
                }
            }
            echo '
	<div class="bg1_c" style="width: 400px">
		<h1 class="bg1">Gi advarsel til brukeren<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<form action="" method="post">
				<boxes />
				<p>Dette kan benyttes som et verktøy for å gi advarsler til brukere. Det kan velges om brukeren skal motta advarselen eller ikke. Hvis man ikke velger å informere brukeren om noe, blir det alikevel søkbart i crewloggen for brukeren.</p>
				<p>Alvorligheten av advarselen blir benyttet for å automatisere en poengsum brukeren får avhengig av antall advarseler. En advarsel med høy alvorlighet varer lenger og teller mer enn en med lav alvorlighet.</p>
				<dl class="dd_right">
					<dt>Kategori</dt>
					<dd>
						<select name="type">';
            $type = isset($_POST['type']) && isset($types[$_POST['type']]) ? intval($_POST['type']) : false;
            if ($type === false) {
                echo '
							<option value="">Velg ..</option>';
            }
            foreach ($types as $key => $row) {
                echo '
							<option value="' . $key . '"' . ($key === $type ? ' selected="selected"' : '') . '>' . htmlspecialchars($row) . '</option>';
            }
            echo '
						</select>
					</dd>
					<dt>Alvorlighet/prioritet</dt>
					<dd>
						<select name="priority">';
            $priority = isset($_POST['priority']) && is_numeric($_POST['priority']) && $_POST['priority'] >= 1 && $_POST['priority'] <= 3 ? $_POST['priority'] : 2;
            echo '
							<option value="1"' . ($priority == 1 ? ' selected="selected"' : '') . '>Lav</option>
							<option value="2"' . ($priority == 2 ? ' selected="selected"' : '') . '>Moderat</option>
							<option value="3"' . ($priority == 3 ? ' selected="selected"' : '') . '>Høy</option>
						</select>
					</dd>
				</dl>
				<p>Begrunnelse:</p>
				<p><textarea name="log" rows="10" cols="30" style="width: 98%">' . htmlspecialchars(postval("log")) . '</textarea></p>
				<p>Intern informasjon:</p>
				<p><textarea name="note" rows="10" cols="30" style="width: 98%">' . htmlspecialchars(postval("note")) . '</textarea></p>
				<p><input type="checkbox" name="notify"' . ($_SERVER['REQUEST_METHOD'] == "POST" && !isset($_POST['notify']) ? '' : ' checked="checked"') . ' id="warning_notify" /><label for="warning_notify"> Gi brukeren informasjon om denne advarselen. Kun kategori og begrunnelse vil bli oppgitt til brukeren som en logg i hendelser.</label></p>
				<p class="c">' . show_sbutton("Lagre") . '</p>
			</form>
		</div>
	</div>';
            // analyser advarsler
            $lca_id = crewlog::$actions['user_warning'][0];
            $pagei = new pagei(pagei::ACTIVE_GET, "side", pagei::PER_PAGE, 15);
            $result = $pagei->query("\n\t\t\t\tSELECT lc_id, lc_up_id, lc_time, lc_log, lcd_data_int\n\t\t\t\tFROM log_crew\n\t\t\t\t\tJOIN users_players ON lc_a_up_id = up_id AND up_u_id = " . page_min_side::$active_user->id . "\n\t\t\t\t\tLEFT JOIN log_crew_data ON lcd_lc_id = lc_id AND lcd_lce_id = 5\n\t\t\t\tWHERE lc_lca_id = {$lca_id} AND (lcd_data_int IS NULL OR lcd_data_int = 0)\n\t\t\t\tORDER BY lc_time DESC");
            $data = array();
            while ($row = $result->fetch()) {
                $data[$row['lc_id']] = $row;
            }
            // sett opp data
            $data = crewlog::load_summary_data($data);
            echo '
	<div class="bg1_c ' . (count($data) == 0 ? 'xsmall' : 'medium') . '">
		<h1 class="bg1">Tidligere advarsler<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">';
            if (count($data) == 0) {
                echo '
			<p>Brukeren har ingen tidligere advarsler.</p>';
            } else {
                ess::$b->page->add_css('
.advarsel { border: 1px solid #292929; margin: 10px 0; padding: 0 10px }');
                foreach ($data as $row) {
                    $priority = $row['data']['priority'] == 1 ? "lav" : ($row['data']['priority'] == 2 ? "moderat" : "høy");
                    echo '
			<div class="advarsel">
				<p><b>' . ess::$b->date->get($row['lc_time'])->format() . '</b>: ' . $row['data']['type'] . ' (alvorlighet: <b>' . $priority . '</b>):</p>
				<ul>
					<li>' . game::format_data($row['lc_log']) . '</li>
					<li>Internt notat: ' . game::format_data($row['data']['note']) . '</li>
				</ul>
				<p>' . (empty($row['data']['notified']) ? 'Ble IKKE varslet.' : 'Ble varslet.') . ' Av <user id="' . $row['lc_up_id'] . '" /></p>
			</div>';
                }
                echo '
			<p class="c">' . $pagei->pagenumbers() . '</p>';
            }
            echo '
		</div>
	</div>';
        } elseif ($subpage2 == "enote") {
            ess::$b->page->add_title("Endre notat for bruker");
            // lagre endringer?
            if (isset($_POST['notat'])) {
                $notat = postval("notat");
                if ($notat == page_min_side::$active_user->data['u_note_crew']) {
                    ess::$b->page->add_message("Ingen endringer ble utført.", "error");
                } else {
                    \Kofradia\DB::get()->exec("UPDATE users SET u_note_crew = " . \Kofradia\DB::quote($notat) . " WHERE u_id = " . page_min_side::$active_user->id);
                    // legg til crewlogg
                    crewlog::log("user_note_crew", page_min_side::$active_player->id, NULL, array("note_old" => page_min_side::$active_user->data['u_note_crew'], "note_diff" => diff::make(page_min_side::$active_user->data['u_note_crew'], $notat)));
                    ess::$b->page->add_message("Notatet ble endret.");
                    redirect::handle();
                }
            }
            echo '
	<div class="bg1_c" style="width: 400px">
		<h1 class="bg1">Endre crewnotat for bruker<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<form action="" method="post">
				<p>Dette endrer notatet som er tilknyttet brukeren. Du kan også tilknytte <a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=enote", "player")) . '">informasjon til spilleren</a>, hvis det heller er ønskelig.</p>
				<p>Notat:</p>
				<p><textarea name="notat" rows="10" cols="30" style="width: 98%">' . htmlspecialchars(page_min_side::$active_user->data['u_note_crew']) . '</textarea></p>
				<p class="c">' . show_sbutton("Lagre") . '</p>
			</form>
		</div>
	</div>';
        } elseif ($subpage2 == "level" && access::has("admin")) {
            // nivåer man kan bytte til
            static $levels = array(1 => "Vanlig bruker", 14 => "Skjult nostat (crewtilgang)", -4 => "Ressurs", 12 => "Ressurs (nostat)", 13 => "Utvikler", 4 => "Forummoderator", 6 => "Forummoderator (nostat)", 5 => "Moderator", 11 => "Seniormoderator");
            if (access::has("sadmin")) {
                $levels[7] = "Administrator";
            }
            if (access::has("sadmin")) {
                $levels[8] = "Superadministrator";
            }
            // kan vi ikke endre brukernivået til denne brukeren?
            if (!isset($levels[page_min_side::$active_user->data['u_access_level']])) {
                ess::$b->page->add_message("Du har ikke rettigheter til å endre tilgangsnivået til denne brukeren.", "error");
                redirect::handle(page_min_side::addr());
            }
            // endre brukernivå?
            if (isset($_POST['level'])) {
                $level = intval($_POST['level']);
                $log = trim(postval("log"));
                // samme brukernivå?
                if ($level == page_min_side::$active_user->data['u_access_level']) {
                    ess::$b->page->add_message("Du må velge et nytt tilgangsnivå.", "error");
                } elseif (!isset($levels[$level])) {
                    ess::$b->page->add_message("Ugyldig tilgangsnivå.");
                } elseif (empty($log)) {
                    ess::$b->page->add_message("Mangler begrunnelse.");
                } else {
                    // endre tilgangsnivå
                    $old = page_min_side::$active_user->data['u_access_level'];
                    if (page_min_side::$active_user->change_level($level, isset($_POST['no_update_up']))) {
                        // e-post logg
                        sysreport::log("Endring av tilgangsnivå: " . login::$user->player->data['up_name'] . " endret tilgangsnivået til " . page_min_side::$active_user->data['u_email'] . " (" . page_min_side::$active_player->data['up_name'] . ") fra {$levels[$old]} til {$levels[$level]} {$__server['path']}/min_side?u_id=" . page_min_side::$active_user->id . "\n\nBegrunnelse: " . strip_tags(game::format_data($log)), "Kofradia: Endring av tilgangsnivå for " . page_min_side::$active_user->data['u_email'] . " (" . page_min_side::$active_player->data['up_name'] . ")");
                        // finn totalt beløp spilleren har
                        $result = \Kofradia\DB::get()->query("SELECT up_cash + up_bank FROM users_players WHERE up_id = " . page_min_side::$active_player->id);
                        $money = $result->fetchColumn(0);
                        // crewlogg
                        $data = array("level_old" => $old, "level_old_text" => $levels[$old], "level_new" => $level, "level_new_text" => $levels[$level], "money" => $money, "points" => page_min_side::$active_player->data['up_points']);
                        if (page_min_side::$active_player->active && !isset($_POST['no_update_up'])) {
                            $data['up_id'] = page_min_side::$active_player->id;
                        }
                        crewlog::log("user_level", page_min_side::$active_player->id, $log, $data);
                        putlog("CREWCHAN", "%bEndring av tilgangsnivå%b: " . login::$user->player->data['up_name'] . " endret tilgangsnivået til " . page_min_side::$active_user->data['u_email'] . " (" . page_min_side::$active_player->data['up_name'] . ") fra {$levels[$old]} til {$levels[$level]} {$__server['path']}/min_side?u_id=" . page_min_side::$active_user->id);
                        ess::$b->page->add_message('Tilgangsnivået ble endret fra <b>' . htmlspecialchars($levels[$old]) . '</b> til <b>' . htmlspecialchars($levels[$level]) . '</b>.');
                    } else {
                        ess::$b->page->add_message("Tilgangsnivået kunne ikke endres.", "error");
                    }
                    redirect::handle();
                }
            }
            echo '
	<div class="bg1_c" style="width: 350px">
		<h1 class="bg1">Endre tilgangsnivå for bruker<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">' . (page_min_side::$active_player->active ? '
			<p>Dette vil automatisk berøre spilleren ' . page_min_side::$active_player->profile_link() . '.<p>' : '
			<p>Dette vil kun ha innvirkning på brukeren, siden det ikke er noen aktiv spiller.</p>') . '
			<form action="" method="post">
				<dl class="dd_right">
					<dt>Nåværende tilgangsnivå</dt>
					<dd>' . $levels[page_min_side::$active_user->data['u_access_level']] . '</dd>
					<dt>Nytt tilgangsnivå</dt>
					<dd>
						<select name="level">';
            $level = intval(postval("level", page_min_side::$active_user->data['u_access_level']));
            foreach ($levels as $id => $name) {
                echo '
							<option value="' . $id . '"' . ($level == $id ? ' selected="selected"' : '') . '>' . htmlspecialchars($name) . '</option>';
            }
            echo '
						</select>
					</dd>
					<dt>Begrunnelse</dt>
					<dd><textarea name="log" id="log" cols="30" rows="5">' . htmlspecialchars(postval("log")) . '</textarea></dd>
				</dl>' . (page_min_side::$active_player->active ? '
				<p><input type="checkbox" id="no_update_up" name="no_update_up"' . (isset($_POST['no_update_up']) ? ' checked="checked"' : '') . ' /><label for="no_update_up"> Ikke oppdater det visuelle tilgangsnivået til ' . page_min_side::$active_player->profile_link() . '</label></p>' : '') . '
				<p class="c">' . show_sbutton("Endre tilgangsnivå") . '</p>
			</form>
		</div>
	</div>';
        } elseif ($subpage2 == "banka" && access::has("mod")) {
            // lagre nytt passord
            if (isset($_POST['bank_auth'])) {
                $bank_auth = postval("bank_auth");
                $log = trim(postval("log"));
                // for kort?
                if (mb_strlen($bank_auth) < 6) {
                    ess::$b->page->add_message("Passordet må inneholde minst 6 tegn.", "error");
                } elseif (password::verify_hash($bank_auth, page_min_side::$active_user->data['u_bank_auth'], 'bank_auth')) {
                    ess::$b->page->add_message("Passordet er det samme som nåværende.", "error");
                } elseif ($log == "") {
                    ess::$b->page->add_message("Mangler begrunnelse.", "error");
                } else {
                    $newpass = password::hash($bank_auth, null, 'bank_auth');
                    \Kofradia\DB::get()->exec("UPDATE users SET u_bank_auth = " . \Kofradia\DB::quote($newpass) . " WHERE u_id = " . page_min_side::$active_user->id);
                    // crewlogg
                    crewlog::log("user_bank_auth", page_min_side::$active_player->id, $log, array("pass_old" => page_min_side::$active_user->data['u_bank_auth'], "pass_new" => $newpass));
                    ess::$b->page->add_message("Bankpassordet ble endret.");
                    redirect::handle();
                }
            }
            ess::$b->page->add_title("Endre bankpassord");
            echo '
	<div class="bg1_c" style="width: 350px">
		<h1 class="bg1">Endre bankpassord<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<form action="" method="post" autocomplete="off">
				<dl class="dd_right">
					<dt>Nytt bankpassord</dt>
					<dd><input type="password" id="bank_auth" class="styled w120" /></dd>
					<dt>Begrunnelse for endring</dt>
					<dd><textarea name="log" id="log" cols="30" rows="5">' . htmlspecialchars(postval("log")) . '</textarea></dd>
				</dl>
				<p class="c">' . show_sbutton("Lagre") . '</p>
			</form>
		</div>
	</div>';
        } elseif ($subpage2 == "phone" && access::has("mod")) {
            // lagre nytt nummer?
            if (isset($_POST['phone'])) {
                $phone = postval("phone");
                $log = trim(postval("log"));
                if (!preg_match("/^47\\d{8}\$/Du", $phone) && $phone != "") {
                    ess::$b->page->add_message("Ugyldig telefonnummer. Må bestå av 10 tall inkludert 47 først.", "error");
                } else {
                    // kontroller at nummeret ikke er lagt inn fra før
                    $result = \Kofradia\DB::get()->query("SELECT u_id, u_email, up_id, up_name, up_access_level FROM users, users_players WHERE u_phone = " . \Kofradia\DB::quote($phone) . " AND u_id != " . page_min_side::$active_user->id . " AND up_id = u_active_up_id LIMIT 1");
                    if ($result->rowCount() > 0) {
                        $row = $result->fetch();
                        ess::$b->page->add_message('Nummeret er allerede i bruk av <a href="min_side?u_id=' . $row['u_id'] . '">' . htmlspecialchars($row['u_email']) . '</a> (' . game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level']) . ').', "error");
                    } elseif ($phone == page_min_side::$active_user->data['u_phone']) {
                        ess::$b->page->add_message("Nummeret er det samme som nåværende nummer.", "error");
                    } elseif ($log == "") {
                        ess::$b->page->add_message("Mangler logg melding.");
                    } else {
                        // lagre nytt nummer
                        \Kofradia\DB::get()->exec("UPDATE users SET u_phone = " . \Kofradia\DB::quote($phone) . " WHERE u_id = " . page_min_side::$active_user->id);
                        crewlog::log("user_phone", page_min_side::$active_player->id, $log, array("phone_old" => page_min_side::$active_user->data['u_phone'], "phone_new" => $phone));
                        ess::$b->page->add_message('Mobilnummeret ble endret fra <b>' . (empty(page_min_side::$active_user->data['u_phone']) ? 'tomt' : htmlspecialchars(page_min_side::$active_user->data['u_phone'])) . '</b> til <b>' . (empty($phone) ? 'tomt' : $phone) . '</b>.');
                    }
                }
            }
            ess::$b->page->add_title("Endre mobilnummer");
            echo '
	<div class="bg1_c" style="width: 350px">
		<h1 class="bg1">Endre mobilnummer<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<p>Her endrer du mobilnummeret til brukeren. Dette kan bli brukt til å sende ut forskjellig informasjon.</p>
			<form action="" method="post">
				<dl class="dd_right dl_2x">
					<dt>Nåværende nummer</dt>
					<dd>' . (empty(page_min_side::$active_user->data['u_phone']) ? 'Tomt' : htmlspecialchars(page_min_side::$active_user->data['u_phone'])) . '</dd>
					<dt>Nytt nummer</dt>
					<dd><input type="text" maxlength="10" value="' . htmlspecialchars(postval("phone", page_min_side::$active_user->data['u_phone'])) . '" name="phone" class="styled w80" /></dd>
					<dt>Begrunnelse for endring</dt>
					<dd><textarea name="log" cols="30" rows="5">' . htmlspecialchars(postval("log")) . '</textarea></dd>
				</dl>
				<p class="c">' . show_sbutton("Lagre") . '</p>
			</form>
		</div>
	</div>';
        } elseif ($subpage2 == "birth" && access::has("mod")) {
            // lagre ny fødselsdato?
            if (isset($_POST['birth_day']) && isset($_POST['birth_month']) && isset($_POST['birth_year'])) {
                $birth = postval("birth");
                // sjekk fødselsdato
                $birth_day = intval(postval("birth_day"));
                $birth_month = intval(postval("birth_month"));
                $birth_year = intval(postval("birth_year"));
                $date = ess::$b->date->get();
                $n_day = $date->format("j");
                $n_month = $date->format("n");
                $n_year = $date->format("Y");
                $age = $n_year - $birth_year - ($n_month < $birth_month || $birth_month == $n_month && $n_day < $birth_day ? 1 : 0);
                $birth = $birth_year . "-" . str_pad($birth_month, 2, "0", STR_PAD_LEFT) . "-" . str_pad($birth_day, 2, "0", STR_PAD_LEFT);
                // sjekk om fødselsdatoen er gyldig
                $birth_date = ess::$b->date->get();
                $birth_date->setDate($birth_year, $birth_month, $birth_day);
                $birth_valid = $birth_date->format("Y-m-d") == $birth;
                $log = trim(postval("log"));
                // ugyldig dag?
                if ($birth_day < 0 || $birth_day > 31) {
                    ess::$b->page->add_message("Du må velge en gyldig dag.", "error");
                } elseif ($birth_month < 0 || $birth_month > 12) {
                    ess::$b->page->add_message("Du må velge en gyldig måned.", "error");
                } elseif (($birth_year < 1900 || $birth_year > $n_year) && $birth_year !== 0) {
                    ess::$b->page->add_message("Du må velge et gyldig år.", "error");
                } elseif (!$birth_valid && $birth !== '0-00-00') {
                    ess::$b->page->add_message("Datoen du fylte inn for fødselsdatoen din eksisterer ikke.");
                } elseif ($birth == page_min_side::$active_user->data['u_birth']) {
                    ess::$b->page->add_message("Fødselsdatoen ble ikke endret.", "error");
                } elseif ($log == "") {
                    ess::$b->page->add_message("Mangler begrunnelse.", "error");
                } else {
                    // oppdater
                    \Kofradia\DB::get()->exec("UPDATE users SET u_birth = " . \Kofradia\DB::quote($birth) . " WHERE u_id = " . page_min_side::$active_user->id);
                    // legg til crewlogg
                    crewlog::log("user_birth", page_min_side::$active_player->id, $log, array("birth_old" => page_min_side::$active_user->data['u_birth'], "birth_new" => $birth));
                    // alder
                    if ($age < 13) {
                        ess::$b->page->add_message("Fødselsdatoen ble satt til <b>{$birth}</b> ({$age} år). Brukeren oppfyller <u>ikke</u> kravet om alder jf. betingelsene.");
                    } else {
                        ess::$b->page->add_message("Fødselsdatoen ble satt til <b>{$birth}</b> ({$age} år).");
                    }
                    redirect::handle();
                }
            }
            $birth = explode("-", page_min_side::$active_user->data['u_birth']);
            $birth_day = isset($birth[2]) ? intval($birth[2]) : 0;
            $birth_month = isset($birth[1]) ? intval($birth[1]) : 0;
            $birth_year = isset($birth[0]) ? intval($birth[0]) : 0;
            ess::$b->page->add_title("Endre fødselsdato");
            echo '
	<div class="bg1_c" style="width: 350px">
		<h1 class="bg1">Endre fødselsdato<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<form action="" method="post">
				<dl class="dd_right dl_2x">
					<dt>Nåværende fødselsdato</dt>
					<dd>' . (empty(page_min_side::$active_user->data['u_birth']) ? 'Ikke registrert' : htmlspecialchars(page_min_side::$active_user->data['u_birth'])) . '</dd>
					<dt>Ny fødselsdato</dt>
					<dd>
						<select name="birth_day">
							<option value="">Dag</option>
							<option value="0">0</option>';
            $active = postval("birth_day", $birth_day);
            for ($i = 1; $i <= 31; $i++) {
                echo '
							<option value="' . $i . '"' . ($i == $active ? ' selected="selected"' : '') . '>' . $i . '</option>';
            }
            echo '
						</select>
						<select name="birth_month">
							<option value="">Måned</option>
							<option value="0">Tom</option>';
            $active = postval("birth_month", $birth_month);
            for ($i = 1; $i <= 12; $i++) {
                echo '
							<option value="' . $i . '"' . ($i == $active ? ' selected="selected"' : '') . '>' . ucfirst($_lang['months'][$i]) . '</option>';
            }
            echo '
						</select>
						<select name="birth_year">
							<option value="">År</option>
							<option value="0">0000</option>';
            $active = postval("birth_year", $birth_year);
            for ($i = ess::$b->date->get()->format("Y"); $i >= 1900; $i--) {
                echo '
							<option value="' . $i . '"' . ($i == $active ? ' selected="selected"' : '') . '>' . $i . '</option>';
            }
            echo '
						</select>
					</dd>
					<dt>Begrunnelse for endring</dt>
					<dd><textarea name="log" id="log" cols="30" rows="5">' . htmlspecialchars(postval("log")) . '</textarea></dd>
				</dl>
				<p class="c">' . show_sbutton("Lagre") . '</p>
			</form>
		</div>
	</div>';
        }
    }
示例#21
0
文件: bank.php 项目: Kuzat/kofradia
    /**
     * 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>';
        }
    }
示例#22
0
 /**
  * Må vente før nytt forumsvar kan legges til
  * @param integer $wait ventetid
  */
 protected function add_reply_error_wait($wait)
 {
     \ajax::html("Du må vente " . \game::counter($wait) . " før du kan opprette forumsvaret.", \ajax::TYPE_INVALID);
 }
示例#23
0
    /**
     * Vis auksjonen
     */
    protected function show()
    {
        // hent budet som leder, evt. vant
        $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT ab_up_id, ab_bid, ab_time\n\t\t\tFROM auksjoner_bud\n\t\t\tWHERE ab_a_id = {$this->auksjon->id} AND ab_active != 0\n\t\t\tORDER BY ab_time DESC\n\t\t\tLIMIT 1");
        $bud_lead = $result->fetch();
        // hent alle budene
        $pagei = new pagei(pagei::ACTIVE_GET, "side", pagei::PER_PAGE, 30);
        $result = $pagei->query("\n\t\t\tSELECT ab_up_id, ab_bid, ab_time, ab_active\n\t\t\tFROM auksjoner_bud\n\t\t\tWHERE ab_a_id = {$this->auksjon->id}\n\t\t\tORDER BY ab_time DESC");
        $bud = array();
        while ($row = $result->fetch()) {
            $bud[] = $row;
        }
        // sjekk om vi har bud
        $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT ab_bid, ab_time\n\t\t\tFROM auksjoner_bud\n\t\t\tWHERE ab_a_id = {$this->auksjon->id} AND ab_up_id = {$this->up->id} AND ab_active != 0");
        $bud_own = $result->fetch();
        $bud_own_locked = $this->auksjon->data['a_type'] == auksjon::TYPE_KULER || time() > $bud_own['ab_time'] + auksjon::MAX_TIME_REMOVE;
        $type = auksjon_type::get($this->auksjon->data['a_type']);
        // beregn minstepris
        $minstepris = $bud_lead ? bcadd($bud_lead['ab_bid'], $this->auksjon->data['a_bid_jump']) : $this->auksjon->data['a_bid_start'];
        // sett opp tittel/beskrivelse
        $title = htmlspecialchars($this->auksjon->data['a_title']);
        // firma/familie?
        if ($this->auksjon->data['a_type'] == auksjon::TYPE_FIRMA) {
            $ff_id = $this->auksjon->params->get("ff_id");
            if ($ff_id) {
                $title = '<a href="' . ess::$s['relative_path'] . '/ff/?ff_id=' . $ff_id . '">' . $title . '</a>';
            }
        }
        echo '
<div class="col2_w" style="margin: 40px"> 
	<div class="col_w left" style="width: 45%">
		<div class="col" style="margin-right: 20px">
			<div class="bg1_c">
				<h1 class="bg1">Auksjon<span class="left"></span><span class="right"></span></h1>
				<div class="bg1">
					<p class="c"><a href="auksjoner?t=' . $this->auksjon->data['a_type'] . '">Tilbake til oversikt</a></p>
					<dl class="dd_right">
						<dt>Beskrivelse</dt>
						<dd>' . $title . '</dd>' . ($type->have_up ? '
						<dt>Spiller</dt>
						<dd>' . ($this->auksjon->data['a_up_id'] ? '<user id="' . $this->auksjon->data['a_up_id'] . '" />' : 'Ingen spiller') . '</dd>' : '');
        // ikke startet?
        if ($this->auksjon->status == auksjon::STATUS_WAIT) {
            echo '
						<dt>Auksjonsstart</dt>
						<dd>' . ess::$b->date->get($this->auksjon->data['a_start'])->format(date::FORMAT_SEC) . '<br />' . game::counter($this->auksjon->data['a_start'] - time(), true) . '</dd>
						<dt>Auksjonslutt</dt>
						<dd>' . ess::$b->date->get($this->auksjon->data['a_end'])->format(date::FORMAT_SEC) . '</dd>';
        } else {
            echo '
						<dt>Auksjonslutt</dt>
						<dd>' . ess::$b->date->get($this->auksjon->data['a_end'])->format(date::FORMAT_SEC) . ($this->auksjon->status == auksjon::STATUS_ACTIVE ? '<br />' . game::counter($this->auksjon->data['a_end'] - time(), true) : '') . '</dd>';
        }
        // vis info
        echo '
						<dt>Budstart</dt>
						<dd>' . game::format_cash($this->auksjon->data['a_bid_start']) . '</dd>
						<dt>Minste budøkning</dt>
						<dd>' . game::format_cash($this->auksjon->data['a_bid_jump']) . '</dd>';
        // status
        if ($this->auksjon->status == auksjon::STATUS_WAIT) {
            // ikke startet
            echo '
						<dt>Status</dt>
						<dd>Ikke startet</dd>';
        } elseif ($this->auksjon->status == auksjon::STATUS_FINISHED) {
            // ferdig
            echo '
						<dt>Status</dt>
						<dd>Avsluttet</dd>
						<dt>Vunnet av</dt>';
            // vinnerbudet
            if ($bud_lead) {
                echo '
						<dd><user id="' . $bud_lead['ab_up_id'] . '" /></dd>';
            } else {
                echo '
						<dd>Ingen vinner</dd>';
            }
        } else {
            // pågår
            echo '
						<dt>Status</dt>
						<dd>Pågår nå</dd>';
        }
        echo '
					</dl>';
        // mer info?
        if (!empty($this->auksjon->data['a_info'])) {
            echo '
					<p>' . game::bb_to_html($this->auksjon->data['a_info']) . '</p>';
        }
        echo '
				</div>
			</div>
		</div>
	</div>
	<div class="col_w right" style="width: 55%">
		<div class="col" style="margin-left: 20px">
			<div class="bg1_c">
				<h1 class="bg1">Bud<span class="left"></span><span class="right"></span></h1>
				<div class="bg1">';
        // auksjon pågår -- legg til nye bud
        if ($this->auksjon->status == auksjon::STATUS_ACTIVE) {
            $own = $this->auksjon->data['a_up_id'] == $this->up->id;
            if (!$own) {
                // første budet?
                if (!$bud_lead) {
                    echo '
					<p>Dette er det første budet på denne auksjonen. Du må derfor by minimum ' . game::format_cash($this->auksjon->data['a_bid_start']) . '.</p>';
                } else {
                    echo '
					<p>Du må by minimum ' . game::format_cash($this->auksjon->data['a_bid_jump']) . ' høyere enn ' . ($bud_lead['ab_up_id'] == $this->up->id ? 'ditt forrige bud' : 'det forrige budet til <user id="' . $bud_lead['ab_up_id'] . '" />') . ' på ' . game::format_cash($bud_lead['ab_bid']) . '.</p>';
                }
                // bud på kuler kan ikke trekkes tilbake
                // TODO: om noe kan trekkes tilbake bør bestemmes av auksjonen, ikke logikken i koden her
                if ($this->auksjon->data['a_type'] == auksjon::TYPE_KULER) {
                    echo '
					<p><b>Budet er bindende og kan ikke trekkes tilbake!</b></p>
					<p>Dersom noen byr over deg, vil budet ditt bli inaktivt og du får pengene igjen.</p>';
                } else {
                    echo '
					<p>Du kan trekke tilbake budet ditt innen det har gått ' . game::timespan(auksjon::MAX_TIME_REMOVE, game::TIME_FULL) . '. Etter ' . game::timespan(auksjon::MAX_TIME_REMOVE, game::TIME_FULL | game::TIME_NOBOLD) . ' er budet ditt bindende og det kan ikke trekkes tilbake.</p>
					<p>Dersom noen byr over deg, vil budet ditt bli inaktivt og du får pengene igjen etter at budet har stått i ' . game::timespan(auksjon::MAX_TIME_REMOVE, game::TIME_FULL | game::TIME_NOBOLD) . '.</p>';
                }
            }
            // har vi bydd?
            if ($bud_own) {
                // gått ut på tid?
                if ($bud_own_locked) {
                    echo '
					<p>Du har bydd på denne auksjonen og ditt bud er bindende.</p>';
                } else {
                    // kan trekke budet
                    echo '
					<p>Du har bydd på denne auksjonen og kan fortsatt trekke tilbake ditt bud.</p>';
                }
                // vis budøkning
                echo '
					<form action="" method="post">
						<dl class="dd_right">
							<dt>Øk bud til</dt>
							<dd><input class="styled w100 r" type="text" name="amount" value="' . game::format_cash($minstepris) . '" /></dd>
						</dl>
						<p class="c">' . show_sbutton("Øk bud", 'name="raise_bid"') . (!$bud_own_locked ? ' ' . show_sbutton("Slett bud", 'name="del_bid"') : '') . '</p>
					</form>';
            } elseif (!$own) {
                // har ikke noe våpen?
                if ($this->auksjon->data['a_type'] == auksjon::TYPE_KULER && !$this->up->weapon) {
                    echo '
					<p>Du har ikke noe våpen og kan ikke delta i denne auksjonen.</p>';
                } elseif ($this->auksjon->data['a_type'] == auksjon::TYPE_FIRMA && $this->up->get_health_percent() < player::FF_HEALTH_LOW * 100) {
                    echo '
					<p>Du har for lav helse til å kunne by på et firma.</p>';
                } else {
                    echo '
					<form action="" method="post">
						<dl class="dd_right">
							<dt>Legg inn bud</dt>
							<dd><input class="styled w100 r" type="text" name="amount" value="' . game::format_cash($minstepris) . '" /></dd>
						</dl>
						<p class="c">' . show_sbutton("Legg inn bud", 'name="place_bid"') . '</p>
					</form>';
                }
            }
        }
        // vis budene
        if (count($bud) == 0) {
            if ($this->auksjon->status != auksjon::STATUS_WAIT) {
                echo '
					<p class="c">Ingen bud er lagt inn i denne auksjonen.</p>';
            }
        } else {
            ess::$b->page->add_css('.bud_inactive { text-decoration: line-through; color: #888 }');
            echo '
					<dl class="dd_right">';
            // gå gjennom alle budene
            foreach ($bud as $row) {
                echo '
						<dt' . ($row['ab_active'] == 0 ? ' class="bud_inactive"' : '') . '>' . ess::$b->date->get($row['ab_time'])->format("H:i:s") . ': <user id="' . $row['ab_up_id'] . '" /></dt>
						<dd' . ($row['ab_active'] == 0 ? ' class="bud_inactive"' : '') . '>' . game::format_cash($row['ab_bid']) . '</dd>';
            }
            echo '
					</dl>';
            if ($pagei->pages > 1) {
                echo '
					<p class="c">' . $pagei->pagenumbers() . '</p>';
            }
        }
        echo '
				</div>
			</div>
		</div>
	</div>
</div>';
    }
示例#24
0
    }
}
$_base->page->add_js('sm_scripts.poker_parse();');
// progress for tid
$progress_time_limit = (int) $trigger->get("time_limit", oppdrag::DEFAULT_TIME_LIMIT_ACTIVE);
$progress_time_status = time() - $oppdrag['uo_active_time'];
$progress_time = $progress_time_status / $progress_time_limit * 100;
// javascript for progress for tiden
$_base->page->add_js_domready('
	new CountdownProgressbarTime($("progress_time"), ' . $progress_time_status . ', ' . $progress_time_limit . ');');
echo '
<div class="bg1_c small bg1_padding" style="width: 420px">
	<h1 class="bg1">' . htmlspecialchars($oppdrag['o_title']) . '<span class="left"></span><span class="right"></span></h1>
	<p class="h_left"><a href="oppdrag?force">&laquo; Tilbake</a></p>
	<div class="bg1">' . (!$success ? '
		<p>Du må ha mer enn <b>' . game::format_number($target) . '</b> chips om <u>' . game::counter($expire - time()) . '</u>.<br />
		Du har nå <b>' . game::format_number($chips) . '</b> chips' . ($chips < $target ? ' og mangler ' . game::format_number($target - $chips) . ' chips' : '') . '.</p>' : '
		<p>Trykk <a href="oppdrag">her</a> for å gå tilbake til oppdrag.</p>') . '
		<div class="progressbar">
			<div class="progress" style="width: ' . round(min($chips, $target) / $target * 100) . '%"><p>Du har ' . game::format_number(min($chips, $target) / $target * 100, 1) . ' % av antall chips du trenger</p></div>
		</div>
		<div class="progressbar" style="margin-top: 3px">
			<div class="progress" style="width: ' . round($progress_time) . '%" id="progress_time"><p>' . game::timespan($progress_time_limit - $progress_time_status, game::TIME_FULL) . ' gjenstår</p></div>
		</div>';
// nytt spill?
if (!$cards && !$success) {
    ess::$b->page->add_js_domready('$("chips").focus();');
    echo '
		<div class="bg1_c" style="width: 65%">
			<h2 class="bg1">Nytt spill<span class="left2"></span><span class="right2"></span></h2>
			<div class="bg1 c">
示例#25
0
    /**
     * Sette dusør på en spiller
     */
    protected function show_add_player()
    {
        ess::$b->page->add_title("Sett dusør");
        echo '
<div class="bg1_c xxsmall">
	<h1 class="bg1">Etterlyst - sett dusør<span class="left2"></span><span class="right2"></span></h1>
	<div class="bg1"><boxes />';
        // har vi valgt en spiller?
        $player = false;
        if (isset($_GET['up_id']) || isset($_POST['up_id']) || isset($_POST['up_name'])) {
            $by_id = isset($_GET['up_id']) ? (int) $_GET['up_id'] : (isset($_POST['up_id']) ? (int) $_POST['up_id'] : false);
            // finn spilleren
            $search = "";
            if ($by_id !== false) {
                $search = "up_id = {$by_id}";
            } else {
                $search = "up_name = " . \Kofradia\DB::quote($_POST['up_name']) . " ORDER BY up_access_level = 0, up_last_online DESC LIMIT 1";
            }
            $result = \Kofradia\DB::get()->query("SELECT up_id, up_name, up_access_level FROM users_players WHERE {$search}");
            $player = $result->fetch();
            // fant ikke?
            if (!$player) {
                ess::$b->page->add_message("Fant ikke spilleren.", "error");
                if ($by_id !== false) {
                    redirect::handle("etterlyst?add");
                }
            }
            // død spiller?
            if ($player && $player['up_access_level'] == 0) {
                ess::$b->page->add_message('Spilleren <user id="' . $player['up_id'] . '" /> er død og kan ikke etterlyses.', "error");
                if ($by_id !== false) {
                    redirect::handle("etterlyst?add");
                }
                $player = false;
            }
            // seg selv?
            if ($player && $player['up_id'] == $this->up->id) {
                ess::$b->page->add_message("Du kan ikke sette dusør på deg selv.", "error");
                if ($by_id !== false) {
                    redirect::handle("etterlyst?add");
                }
                $player = false;
            }
            // nostat?
            if ($player['up_access_level'] >= ess::$g['access_noplay'] && !access::is_nostat()) {
                ess::$b->page->add_message("Du kan ikke sette dusør på en nostat.", "error");
                if ($by_id !== false) {
                    redirect::handle("etterlyst?add");
                }
                $player = false;
            }
            // er nostat og prøver å sette dusør på en spiller som ikke er nostat?
            if (access::is_nostat() && $player['up_access_level'] < ess::$g['access_noplay'] && !access::has("sadmin")) {
                ess::$b->page->add_message("Du er nostat og kan ikke sette dusør på en vanlig spiller.", "error");
                if ($by_id !== false) {
                    redirect::handle("etterlyst?add");
                }
                $player = false;
            }
        }
        // bestemme dusør?
        if ($player) {
            // hent eventuelle aktive dusører på spilleren
            $result = \Kofradia\DB::get()->query("\n\t\t\t\tSELECT SUM(hl_amount_valid) AS sum_hl_amount_valid\n\t\t\t\tFROM hitlist\n\t\t\t\tWHERE hl_up_id = {$player['up_id']}");
            $a = $result->fetchColumn(0);
            // må vi vente?
            $wait = false;
            if ($a == 0 && !access::has("admin")) {
                // sjekk når siste hitlist ble utført
                $last = $this->up->params->get("hitlist_last_new", false);
                if ($last && $last + etterlyst::WAIT_TIME > time()) {
                    $wait = $last + etterlyst::WAIT_TIME - time();
                }
            }
            // legge til dusøren?
            if (isset($_POST['amount']) && !$wait) {
                $amount = game::intval($_POST['amount']);
                // høy nok dusør?
                if ($amount < etterlyst::MIN_AMOUNT_SET) {
                    ess::$b->page->add_message("Dusøren må være på minimum " . game::format_cash(etterlyst::MIN_AMOUNT_SET) . ".", "error");
                } else {
                    \Kofradia\DB::get()->beginTransaction();
                    // forsøk å trekk fra pengene
                    $a = \Kofradia\DB::get()->exec("UPDATE users_players SET up_cash = up_cash - {$amount} WHERE up_id = " . $this->up->id . " AND up_cash >= {$amount}");
                    if ($a == 0) {
                        ess::$b->page->add_message("Du har ikke nok penger på hånda.", "error");
                    } else {
                        // vellykket
                        \Kofradia\DB::get()->exec("INSERT INTO hitlist SET hl_up_id = {$player['up_id']}, hl_by_up_id = " . $this->up->id . ", hl_time = " . time() . ", hl_amount = {$amount}, hl_amount_valid = {$amount}");
                        \Kofradia\DB::get()->commit();
                        // legg til i loggen til spilleren
                        player::add_log_static("etterlyst_add", NULL, $amount, $player['up_id']);
                        putlog("LOG", "ETTERLYST: " . $this->up->data['up_name'] . " la til dusør for UP_ID={$player['up_id']} på " . game::format_cash($amount) . '.');
                        putlog("INFO", "ETTERLYST: En spiller la til en dusør for {$player['up_name']} på " . game::format_cash($amount) . " " . ess::$s['path'] . "/etterlyst");
                        ess::$b->page->add_message('Du la til ' . game::format_cash($amount) . ' som dusør for spilleren <user id="' . $player['up_id'] . '" />.');
                        $this->up->params->update("hitlist_last_new", time(), true);
                        redirect::handle("etterlyst");
                    }
                    \Kofradia\DB::get()->commit();
                }
            }
            ess::$b->page->add_js_domready('$("select_amount").focus();');
            echo '
		<p>Valgt spiller: <user id="' . $player['up_id'] . '" /></p>
		<form action="" method="post">
			<input type="hidden" name="up_id" value="' . $player['up_id'] . '" />' . (!$a ? '
			<p>Denne spilleren har ingen dusør tilnyttet seg fra før.</p>' : '
			<p>Denne spilleren har allerede en dusør på ' . game::format_cash($a) . '.</p>') . ($wait ? '
			<p class="error_box">Du må vente ' . game::counter($wait) . ' før du kan plassere en ny spiller på listen.</p>
			<p class="c"><a href="etterlyst">Avbryt</a></p>' : '
			<dl class="dd_right">
				<dt>' . (!$a ? 'Dusør' : 'Øk dusøren med') . '</dt>
				<dd><input type="text" name="amount" id="select_amount" value="' . htmlspecialchars(postval("amount")) . '" class="styled w100" /></dd>
			</dl>
			<p class="c">' . show_sbutton($a ? "Øk dusøren" : "Legg til dusør") . '</p>
			<p class="c"><a href="etterlyst">Avbryt</a> - <a href="etterlyst?add">Velg en annen spiller</a></p>
			<p>Hvis du velger å fjerne dusøren etter du har lagt den til, får du kun 50 % igjen. Hvis noen kjøper ut dusøren får du igjen 50 % av den.</p>') . '
		</form>';
        } else {
            ess::$b->page->add_js_domready('$("select_up_name").focus();');
            echo '
		<p>Du må først velge hvilken spiller du ønsker å legge til dusør på.</p>
		<form action="" method="post">
			<dl class="dd_right">
				<dt>Spiller</dt>
				<dd><input type="text" name="up_name" id="select_up_name" value="' . htmlspecialchars(postval("up_name")) . '" class="styled w120" /></dd>
			</dl>
			<p class="c">' . show_sbutton("Finn spiller") . '</p>
			<p class="c"><a href="etterlyst">Avbryt</a></p>
		</form>';
        }
        echo '
	</div>
</div>';
    }
示例#26
0
文件: angrip.php 项目: Kuzat/kofradia
    /**
     * Våpentrening
     */
    protected function page_training_show()
    {
        // sett opp og test for anti-bot
        $this->training_antibot = new antibot(login::$user->id, "training", 7);
        if (MAIN_SERVER) {
            $this->training_antibot->check_required();
        }
        // sett opp skjema
        $this->training_form = \Kofradia\Form::getByDomain("training", login::$user);
        // ventetid?
        $wait = max(0, login::$user->player->data['up_weapon_training_next'] - time());
        // skal vi trene våpenet?
        if (isset($_POST['wt']) && $this->training_form->validateHashOrAlert(null, "Våpentrening")) {
            // kan vi ikke trene nå?
            if ($wait > 0) {
                redirect::handle();
            }
            // finnes ikke valget?
            $id = (int) postval("training_id");
            if (!isset(self::$trainings[$id])) {
                ess::$b->page->add_message("Du må velge et alternativ.", "error");
                redirect::handle();
            }
            $opt = self::$trainings[$id];
            // lagre valget for neste gang
            ess::session_put("training_id", $id);
            // har ikke nok cash?
            if ($opt['price'] > login::$user->player->data['up_cash']) {
                ess::$b->page->add_message("Du har ikke nok penger til å utføre våpentreningen.");
                redirect::handle();
            }
            $f = self::TRAINING_MAX * $opt['percent'];
            $next_old = login::$user->player->data['up_weapon_training_next'] ? ' = ' . login::$user->player->data['up_weapon_training_next'] : ' IS NULL';
            // utfør våpentrening
            $a = \Kofradia\DB::get()->exec("\n\t\t\t\tUPDATE users_players\n\t\t\t\tSET up_weapon_training = up_weapon_training + (1 - up_weapon_training) * {$f}, up_weapon_training_next = " . (time() + $opt['wait']) . ", up_cash = up_cash - {$opt['price']}\n\t\t\t\tWHERE up_id = " . login::$user->player->id . " AND up_cash >= {$opt['price']} AND up_weapon_training_next{$next_old}");
            // ikke oppdatert?
            if ($a == 0) {
                ess::$b->page->add_message("Kunne ikke utføre våpentrening.", "error");
            } else {
                $this->training_antibot->increase_counter();
                ess::$b->page->add_message("Du trente opp våpenet ditt og våpentreningen økte med " . game::format_num((1 - login::$user->player->data['up_weapon_training']) * $f * 100, 2) . " %.");
            }
            redirect::handle();
        }
        $training = login::$user->player->data['up_weapon_training'] * 100;
        echo '
<div class="bg1_c xsmall">
	<h1 class="bg1">Våpentrening<span class="left2"></span><span class="right2"></span></h1>
	<div class="bg1">';
        if ($wait > 0) {
            echo '
		<p class="c">Du må vente ' . game::counter($wait, true) . ' før du kan trene våpenet på nytt.</p>';
        } else {
            // vis alternativene
            echo '
		<form action="" method="post">
			' . $this->training_form->getHTMLInput() . '
			<table class="table tablemt center">
				<thead>
					<tr>
						<th>Pris</th>
						<th>Ventetid</th>
					</tr>
				</thead>
				<tbody>';
            $i = 0;
            $match = ess::session_get("training_id") ?: 0;
            foreach (self::$trainings as $id => $row) {
                echo '
					<tr class="box_handle' . (++$i % 2 == 0 ? ' color' : '') . '">
						<td class="r"><input type="radio" name="training_id"' . ($match == $id ? ' checked="checked"' : '') . ' value="' . $id . '" />' . game::format_cash($row['price']) . '</td>
						<td class="r">' . game::timespan($row['wait']) . '</td>
					</tr>';
            }
            echo '
				</tbody>
			</table>
			<p class="c">' . show_sbutton("Utfør", 'name="wt"') . '</p>
		</form>';
        }
        echo '
		<div class="progressbar p' . ($training < 28 ? ' levelcrit' : ($training < 35 ? ' levelwarn' : '')) . '">
			<div class="progress" style="width: ' . round(min(100, $training)) . '%">
				<p>Våpentrening: ' . ($training == 100 ? '100' : game::format_num($training, 2)) . ' %</p>
			</div>
		</div>
		<p>Du har en <b>' . htmlspecialchars(login::$user->player->weapon->data['name']) . '</b> med <b>' . game::format_num(login::$user->player->data['up_weapon_bullets']) . '</b> ' . fword('kule', 'kuler', login::$user->player->data['up_weapon_bullets']) . '.</p>
		<p>Våpentreningen din synker jevnlig i løpet av dagen, og du er nødt til å trene for å holde oppe våpentreningen din. Hvis våpentreningen din faller under 25 %, risikerer du å miste våpenet ditt.</p>
		<p>Bedre våpentrening fører til:</p>
		<ul class="spacer">
			<li>Du forbedrer treffsikkerheten din</li>
			<li>Du øker skuddtakten samtidig som treffsikkerheten forblir den samme</li>
		</ul>
	</div>
</div>';
    }
示例#27
0
文件: Topic.php 项目: Kuzat/kofradia
 /**
  * Må vente før nytt forumsvar kan legges til
  * @param integer $wait ventetid
  */
 protected function add_reply_error_wait($wait)
 {
     \ess::$b->page->add_message("Du må vente " . \game::counter($wait) . " før du kan opprette forumsvaret.", "error");
 }