Exemple #1
0
 public function counterFilter($time, $redirect_to)
 {
     $rel = (string) $time;
     if ($redirect_to) {
         if ($redirect_to === true) {
             $rel .= ",refresh";
         } else {
             $rel .= "," . htmlspecialchars($redirect_to);
         }
     }
     return '<span class="counter" rel="' . $rel . '">' . \game::timespan($time, \game::TIME_FULL, 5) . '</span>';
 }
Exemple #2
0
function visliste($name, $where)
{
    global $_base;
    $result = \Kofradia\DB::get()->query("SELECT up_id, up_name, up_access_level, up_last_online FROM users_players WHERE {$where} ORDER BY up_name");
    // hopp over hvis det ikke finnes noen
    if ($result->rowCount() == 0) {
        return;
    }
    echo '
		<h2 class="bg1">' . $name . '<span class="left2"></span><span class="right2"></span></h2>
		<div class="bg1">
			<dl class="dd_right">';
    while ($row = $result->fetch()) {
        echo '
				<dt>' . game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level']) . '</dt>
				<dd>' . game::timespan($row['up_last_online'], game::TIME_ABS | game::TIME_NOBOLD) . '</dd>';
    }
    echo '
			</dl>
		</div>';
}
Exemple #3
0
    /**
     * Vis meldinger
     */
    protected function show_messages()
    {
        // hent meldinger
        $pagei = new pagei(pagei::ACTIVE_GET, "side", pagei::PER_PAGE, login::data_get("innboks_per_side", 15));
        $meldinger = $this->inbox->get_messages($pagei, $this->show_deleted);
        $this->css();
        echo '
<div style="margin-top: 1em; font-size: 15px">
	<h1' . ($pagei->active > 1 && ($show_deleted = false ? ' id="scroll_here"' : '')) . ' style="float: left; margin-top: 0">Meldinger</h1>
	<p class="h_right" style="margin: 10px 0 0 0 !important">
		<a href="innboks_ny">Opprett ny melding</a>' . ($pagei->total > 0 ? '
		<a href="' . htmlspecialchars($this->addr(null, null, "innboks_sok")) . '">Søk</a>' : '') . '
	</p>
</div>';
        // ingen meldinger å vise?
        if (!$meldinger) {
            echo '
<p class="clear">Du har ingen meldinger i din innboks eller utboks.</p>
<p>Så fort du sender eller mottar en melding vil den komme opp på denne siden.</p>';
        } else {
            $this->js();
            // flere sider?
            if ($pagei->pages > 1) {
                echo '
<p class="c" style="margin: 25px auto 10px; width: 250px">' . $pagei->pagenumbers() . '</p>';
            }
            echo '
<form action="" method="post">
	<table class="table clear" width="100%" id="meldinger">
		<thead>
			<tr>
				<th>Emne (<a href="#" class="box_handle_toggle" rel="it_id[]">Merk alle</a>)</th>
				<th><abbr title="Antall meldinger i meldingstråden">Ant.</abbr></th>
				<th><abbr title="Antall deltakere utenom deg selv">De.</abbr></th>
				<th>Siste</th>
				<th class="nowrap" colspan="1">Tid siste (<a id="skift_tid">veksle</a>)</th>
			</tr>
		</thead>
		<tbody>';
            $i = 0;
            $c = access::has("crewet");
            foreach ($meldinger as $row) {
                $o = $row['up_prev_other'] ? '<user id="' . $row['up_prev_other']['im_up_id'] . '" /> <span class="im_utg">(utgående)</span>' : ($row['up_prev'] && !$row['up_prev'][0] ? '<user id="' . $row['up_prev'][1] . '" />' : (count($row['receivers']) > 1 ? '<user id="' . $row['receivers'][0]['ir_up_id'] . '" /> <span class="im_utg">(utgående)</span>' : '<span class="dark">Ingen</span>'));
                // låst?
                // TODO: Skal ikke tråden se ut som den er låst når man er i crewet? Man har uansett mulighet til å svare når man går inn i tråden
                $locked = false;
                if (!$row['receivers_ok']) {
                    $locked = true;
                } elseif ($row['ir_up_id'] != $this->inbox->u->player->id || !$this->inbox->u->player->active && !$row['receivers_crew']) {
                    $locked = true;
                }
                echo '
			<tr class="box_handle' . ($row['ir_unread'] > 0 ? ' not_viewed' : (++$i % 2 == 0 ? ' color' : '')) . '">
				<td class="it_e">
					<input type="checkbox" name="it_id[]" value="' . $row['it_id'] . '" />
					<a href="innboks_les?id=' . $row['it_id'] . '" class="it_a">
						<span class="it_t_w">
							<span class="it_t">' . htmlspecialchars($row['it_title']) . '</span>' . ($row['ir_unread'] == 1 ? ' <span class="ny">(Ny!)</span>' : ($row['ir_unread'] > 1 ? ' <span class="ny">(' . $row['ir_unread'] . ' nye!)</span>' : '')) . ($row['ir_deleted'] != 0 ? ' <span class="slettet">(Slettet)</span>' : '') . ($locked ? ' <span class="it_locked">(Låst)</span>' : '') . ($row['ir_marked'] != 0 ? '<span class="ir_marked"> (Til oppfølging)</span>' : '') . '
						</span>' . ($row['id_text'] != "" ? '<br />
						<span class="id_text_w"><span class="id_text">' . $row['id_text'] . '</span> <span class="id_up">(' . ($row['up_prev'][0] ? 'meg' : '<user id="' . $row['up_prev'][1] . '" nolink />') . ')</span></span>' : '') . '
					</a>
				</td>
				<td class="c">' . game::format_number($row['num_messages']) . '</td>
				<td class="c">' . (count($row['receivers']) - 1) . '</td>
				<td class="it_u">
					' . $o . '
					<div class="im_deltakere_det hide" rel="' . $row['it_id'] . ',' . $row['ir_marked'] . '">
						<table class="table">
							<thead>
								<tr>
									<th>Spiller</th>
									<th>Antall</th>
									<th>Uleste</th>' . (access::has("mod") ? '
									<th>Vis</th>' : '') . '
									<th>Status</th>
								</tr>
							</thead>
							<tbody>';
                foreach ($row['receivers'] as $r) {
                    echo '
								<tr>
									<td><user id="' . $r['ir_up_id'] . '" /></td>
									<td class="r">' . $r['num_messages'] . '</td>
									<td class="r">' . ($r['ir_unread'] > 0 ? '<b>' . $r['ir_unread'] . '</b>' : $r['ir_unread']) . '</td>' . (access::has("mod") ? '
									<td>' . $r['ir_views'] . '</td>' : '') . '
									<td>' . ($r['up_access_level'] == 0 ? '<span class="dark">Død' . ($c && $r['u_access_level'] != 0 && $r['u_active_up_id'] == $r['ir_up_id'] ? ', men bruker aktiv' : '') . '</span>' : ($r['ir_deleted'] != 0 ? '<span class="dark">Slettet meldingen</span>' : 'Mottar nye meldinger')) . '</td>
								</tr>';
                }
                echo '
							</tbody>
						</table>
					</div>
				</td>
				<td class="it_dato_w">
					<span class="it_dato_f it_dato_hide">' . ess::$b->date->get($row['ir_restrict_im_time'])->format(date::FORMAT_SEC) . '</span>
					<span class="it_dato_f">' . game::timespan($row['ir_restrict_im_time'], game::TIME_ABS) . '</span>
				</td>
			</tr>';
            }
            echo '
		</tbody>
	</table>
	<p style="float: right; line-height: 25px" class="r red">
		' . show_sbutton("Slett merkede meldinger", 'name="slett" onclick="return confirm(\'Er du sikker på at du vil slette de merkede meldingene?\')"') . '<br />
		' . show_sbutton("Slett alle meldingene", 'name="slettalle"') . '
	</p>
</form>
<form action="" method="post">
	<p style="float: left">
		<select name="ps">';
            $list = array(10, 15, 20, 25, 30, 40, 50, 75, 100);
            if (!in_array($pagei->per_page, $list)) {
                $list[] = $pagei->per_page;
                sort($list);
            }
            foreach ($list as $a) {
                echo ' 
			<option value="' . $a . '"' . ($a == $pagei->per_page ? ' selected="selected"' : '') . '>Vis ' . $a . ' meldinger</option>';
            }
            echo '
		</select>
	</p>
</form>';
            // flere sider?
            if ($pagei->pages > 1) {
                echo '
	<p class="c" style="margin: 13px auto 10px; width: 250px">' . $pagei->pagenumbers() . '</p>';
            }
        }
        $this->load_page();
    }
Exemple #4
0
    /**
     * 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>';
    }
Exemple #5
0
// 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">
				<form action="" method="post">
					<p>Antall chips: <input type="text" class="styled w80 r" name="chips" id="chips" value="' . game::format_number(min($chips, $status->get("bet", 1000))) . ' chips" /> ' . show_sbutton("Start") . '</p>
				</form>
			</div>
		</div>';
}
// velge kort?
Exemple #6
0
 function handle_data($cid, $line)
 {
     global $_base;
     $this->debug($cid, "Handling data: {$line}");
     if (!isset($this->sockets[$cid])) {
         $this->debug($cid, "Socket not found. Aborting data check.");
         return;
     }
     #$this->debug($cid, "Data received: " . $line);
     $matches = false;
     if (preg_match('/^:([^ ]+)\\s+(.+?)\\s+(.+?)(?:\\s+:(.+?))?\\r?$/s', $line, $matches)) {
         $from = $matches[1];
         $type = $matches[2];
         $arg = $matches[3];
         $content = isset($matches[4]) ? $matches[4] : '';
         $user = $this->nickinfo($from);
         switch ($type) {
             // nick i bruk
             case "433":
                 $this->handle_error($cid, "Nick is in use..");
                 return;
                 // motd innhold
             // motd innhold
             case "372":
                 $this->debug($cid, "MOTD: " . $content);
                 break;
                 // motd mangler
             // motd mangler
             case "422":
                 #$this->debug($cid, "MOTD mangler");
             #$this->debug($cid, "MOTD mangler");
             case "376":
                 $this->debug($cid, "MOTD avsluttet");
                 // sette som den aktive?
                 if (!$this->connected_cid) {
                     $this->connected_cid = $cid;
                 }
                 // join kanaler
                 foreach ($this->settings['channels'] as $chan) {
                     $args = isset($chan[1]) ? " :" . $chan[1] : "";
                     $this->send_data($cid, "JOIN {$chan[0]}{$args}\n");
                 }
                 // oper
                 if ($this->settings['name'] == "SMAFIA" || $this->settings['name'] == "SMAFIA_BETA") {
                     $this->send_data($cid, "OPER SMAFIA StreetzMafiaBoten\n");
                 }
                 // merk som klar for timers
                 $this->connected = true;
                 break;
                 // invitasjon
             // invitasjon
             case "INVITE":
                 $chan = explode(" ", $arg);
                 if ($chan != "#StreetzMafia" && $chan != "#kofradia") {
                     break;
                 }
                 $this->send_data($cid, "JOIN {$chan[1]}\n");
                 break;
                 // meldinger
             // meldinger
             case "PRIVMSG":
             case "NOTICE":
                 if (($this->settings['name'] == "SMAFIA" || $this->settings['name'] == "SMAFIA_BETA") && $this->irc_info || $this->settings['name'] == "QuakeNet" && $user["nick"] == "henrist" && $user["ident"] == "henrik" && $user["host"] == "hsw.no") {
                     $match = false;
                     $log = true;
                     $break = false;
                     if (substr($content, 0, 3) == ".r ") {
                         $this->send_data($cid, "NOTICE {$user['nick']} :Sending raw data..\n");
                         $this->send_data($cid, substr($content, 3) . "\n");
                         $break = true;
                     } elseif ($content == ".vars") {
                         $this->msg($cid, $arg, "Kofradia Announcer - Loglimit: {$this->loglimit} - Skiptime: " . game::format_number($this->select_delay / 1000, 1) . " ms - Log delay: " . game::format_number($this->timers["CHECKLOG"][1] * 1000) . " ms");
                     } elseif ($content == ".queue") {
                         $w = $this->settings['name'] == "SMAFIA_BETA" ? '1' : " li_network = " . \Kofradia\DB::quote($this->settings['name']);
                         $result = \Kofradia\DB::get()->query("SELECT COUNT(*) FROM log_irc WHERE {$w}");
                         $ant = $result->fetchColumn(0);
                         unset($result);
                         $this->msg($cid, $arg, "Message queue: " . game::format_number($ant));
                     } elseif (preg_match("/^\\.loglimit\\s(\\d+)\$/", $content, $match)) {
                         $num = intval($match[1]);
                         if ($num <= 0) {
                             $msg = "Must be more than 0.";
                         } elseif ($num > 1500) {
                             $msg = "Must be less than or equal to 1500.";
                         } else {
                             $this->loglimit = $num;
                             $msg = "Log limit set to {$num}.";
                         }
                         $this->msg($cid, $arg, $msg);
                     } elseif (preg_match("/^\\.logdelay\\s(\\d+)\$/", $content, $match)) {
                         $num = intval($match[1]);
                         if ($num < 100) {
                             $msg = "Must be more than or equal 100.";
                         } else {
                             $this->timers["CHECKLOG"][1] = $num / 1000;
                             $msg = "Log delay set to " . game::format_number($num / 1000, 1) . " sec.";
                         }
                         $this->msg($cid, $arg, $msg);
                     } elseif ($content == ".logtimer") {
                         $this->timers["CHECKLOG"][2] = 0;
                         $this->next = 0;
                         $msg = "Timer reset.";
                         $this->msg($cid, $arg, $msg);
                     } elseif (preg_match("/^\\.skiptime\\s(\\d+)\$/", $content, $match)) {
                         $num = intval($match[1]);
                         if ($num < 5) {
                             $msg = "Must be more than or equal to 5.";
                         } elseif ($num > 60000) {
                             $msg = "Must be less than or equal to 60000.";
                         } else {
                             $this->select_delay = $num * 1000;
                             $msg = "Skiptime set to {$num}.";
                         }
                         $this->msg($cid, $arg, $msg);
                     } elseif (preg_match("/^\\.s(\\s|\$)/", $content) && ($arg[0] != "#" || $this->connected_cid == $cid)) {
                         if (strstr($content, " ") == " disconnect") {
                             $this->connect = false;
                             $this->msg($cid, $arg, "State set to disconnect.");
                         } else {
                             $this->connect = true;
                             $this->msg($cid, $arg, "State set to connect.");
                         }
                     } elseif (preg_match("/^\\.addbot\\s(.+)\$/", $content, $match) && ($arg[0] != "#" || $this->connected_cid == $cid)) {
                         $info = explode(" ", $match[1], 4);
                         if (count($info) == 4) {
                             $this->clients[] = array("nick" => $info[1], "user" => $info[2], "name" => $info[3], "bind" => $info[0], "tmp" => "");
                             end($this->clients);
                             $key = key($this->clients);
                             $this->msg($cid, $arg, "New bot added to list. (#{$key})");
                         } else {
                             $this->msg($cid, $arg, "Wrong parameter count.");
                         }
                     } elseif (preg_match("/^\\.disconnect (\\d+)\$/", $content, $match)) {
                         if ($cid == $match[1]) {
                             $this->msg($cid, $arg, ":(");
                             $this->debug($cid, "Disconnect command applied.");
                             $this->disconnect($cid);
                             $break = true;
                         }
                     } elseif (preg_match("/^\\.disconnect\$/", $content)) {
                         $this->debug($cid, "Disconnect command applied.");
                         $this->disconnect($cid);
                         $break = true;
                     } elseif (preg_match("/^\\.die\$/", $content)) {
                         $this->debug($cid, "Die!!!");
                         unset($this->clients[$cid]);
                         $this->msg($cid, $arg, "Bye, bye..");
                         $this->disconnect($cid, "Killed in action!");
                         $break = true;
                     } elseif (preg_match("/^\\.die (\\d+)\$/", $content, $match)) {
                         if (isset($this->clients[$match[1]])) {
                             if ($cid != $match[1]) {
                                 $this->msg($cid, $arg, "Lets kill! heaheaha");
                             } else {
                                 $this->msg($cid, $arg, "Bye, bye.. :(");
                             }
                             $this->debug($match[1], "Die!!!");
                             unset($this->clients[$match[1]]);
                             if (isset($this->sockets[$match[1]])) {
                                 $this->disconnect($match[1], "Killed in action!");
                             }
                             if ($cid == $match[1]) {
                                 $break = true;
                             }
                         } else {
                             #$this->msg($cid, $arg, "I don't know that person....?");
                         }
                     } elseif (substr($content, 0, 5) == ".sql " && ($arg[0] != "#" || $this->connected_cid == $cid)) {
                         $query = substr($content, 5);
                         if (strpos($query, ";") !== false || substr($query, 0, 7) != "SELECT ") {
                             $this->send_data($cid, "PRIVMSG {$arg} :Invalid query..\n");
                         } else {
                             //$arg = "mysql --user="******" --pass="******" ".escapeshellarg(DBNAME)." --execute=".escapeshellarg($query);
                             //$val = shell_exec($arg);
                             $this->send_data($cid, "PRIVMSG {$arg} :Executing query..\n");
                             $ok = true;
                             try {
                                 $result = \Kofradia\DB::get()->query($query);
                             } catch (Exception $e) {
                                 $ok = false;
                             }
                             if (!$ok) {
                                 $this->send_data($cid, "PRIVMSG {$arg} :Query failed: " . \Kofradia\DB::get()->errorInfo()[2] . "\n");
                             } else {
                                 if ($result->rowCount() == 0) {
                                     $this->send_data($cid, "PRIVMSG {$arg} :No data in result.\n");
                                 } else {
                                     // list opp feltene
                                     $row = $result->fetch();
                                     $fields = array_keys($row);
                                     $this->send_data($cid, "PRIVMSG {$arg} :Fields: " . implode(", ", $fields) . "\n");
                                     // vis hver rad
                                     $i = 1;
                                     do {
                                         $data = array();
                                         foreach ($row as $value) {
                                             $data[] = preg_replace("/[\r\n]/", "", $value);
                                         }
                                         $this->send_data($cid, "PRIVMSG {$arg} :Row {$i}: " . implode(", ", $data) . "\n");
                                         $i++;
                                     } while ($row = $result->fetch());
                                 }
                                 $this->send_data($cid, "PRIVMSG {$arg} :Query completed..\n");
                             }
                         }
                         $break = true;
                     } else {
                         $log = false;
                     }
                     if ($log) {
                         // logg forespørselen
                         file_put_contents("irclog-" . $this->settings['name'] . ".log", date("r") . " {$user['nick']}!{$user['ident']}@{$user['host']} {$type} {$arg} {$content}\n", FILE_APPEND);
                     }
                     if ($break) {
                         break;
                     }
                 }
                 // ikke kanal melding
                 if (substr($arg, 0, 1) != "#") {
                     if ($user['ident'] != "" && $type == "PRIVMSG") {
                         $this->send_data($cid, "NOTICE {$user['nick']} :Doh?\n");
                     }
                 } else {
                     // aktiv cid?
                     if ($this->connected_cid == $cid) {
                         $info = preg_split("/\\s+/", $content, 2);
                         if (!isset($info[1])) {
                             $info[1] = NULL;
                         }
                         switch ($info[0]) {
                             case "!status":
                                 $time = intval($info[1]);
                                 if ($time == 0 || $time < 0) {
                                     $time = 300;
                                 }
                                 $last = time() - $time;
                                 $result = \Kofradia\DB::get()->query("SELECT COUNT(up_id) FROM users_players WHERE up_last_online >= {$last}");
                                 $ant = game::format_number($result->fetchColumn(0));
                                 unset($result);
                                 $time = game::timespan($time, game::TIME_FULL | game::TIME_NOBOLD);
                                 $this->msg($cid, $arg, "%bAntall pålogget siste {$time}%b: %u{$ant}%u");
                                 break;
                             case "!info":
                                 if ($this->irc_info) {
                                     $this->irc_info->end_node = $arg;
                                     $this->irc_info->parse_request($info[1]);
                                 }
                                 break;
                             case "!search":
                                 $this->node_search($cid, $arg, $info[1]);
                                 break;
                         }
                     }
                 }
                 break;
             default:
                 $this->debug($cid, "UNKNOWN USER DATA: {$line}");
         }
         return;
     }
     $info = explode(" ", $line, 2);
     switch ($info[0]) {
         case "PING":
             $this->debug($cid, "PING PONG");
             $this->send_data($cid, "PONG {$info[1]}");
             break;
         case "ERROR":
             $this->debug($cid, $line);
             $this->handle_error($cid, "Error occured..");
             // koble til på nytt
             #$this->connect($cid);
             break;
         default:
             $this->debug($cid, "UNKNOWN DATA: {$line}");
     }
 }
Exemple #7
0
 $td[] = '<td class="r"><a href="' . $__server['relative_path'] . '/min_side?up_id=' . $row['up_id'] . '">' . $row['up_id'] . '</a></td>';
 $td[] = '<td>' . game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level']) . '</td>';
 if (isset($show['ip'])) {
     $td[] = '<td><a href="ip_sessions?ip=' . htmlspecialchars($row['u_online_ip']) . '">IP økter</a> - <a href="http://www.ripe.net/fcgi-bin/whois?form_type=simple&full_query_string=&searchtext=' . urlencode($row['u_online_ip']) . '&do_search=Search">RIPE</a> - <a href="finn?ip=' . urlencode($row['u_online_ip']) . '">' . $row['u_online_ip'] . '</a>' . (isset($ip_bans[$row['u_online_ip']]) ? ' <a href="../ip_ban?active" style="color:#FF0000" title="IP-Adresse blokkert' . (!empty($ip_bans[$row['u_online_ip']]['bi_reason']) ? ': ' . htmlspecialchars($ip_bans[$row['u_online_ip']]['bi_reason']) : '') . '">(Blokkert)</a>' : '') . '</td>';
 }
 if (isset($show['reg'])) {
     $td[] = '<td>' . $_base->date->get($row['up_created_time'])->format(date::FORMAT_SEC) . '</td>';
 }
 if (isset($show['email'])) {
     $td[] = '<td><a href="finn?email=' . urlencode($row['u_email']) . '">' . htmlspecialchars($row['u_email']) . '</a></td>';
 }
 if (isset($show['onlinea'])) {
     $td[] = '<td>' . $_base->date->get($row['up_last_online'])->format(date::FORMAT_SEC) . '</td>';
 }
 if (isset($show['onliner'])) {
     $td[] = '<td class="r">' . game::timespan($row['up_last_online'], game::TIME_ABS | game::TIME_SHORT | game::TIME_NOBOLD) . '</td>';
 }
 if (isset($show['hits'])) {
     $td[] = '<td class="r">' . game::format_number($row['up_hits']) . '</td>';
 }
 if (isset($show['points'])) {
     $td[] = '<td class="r">' . game::format_number($row['up_points']) . '</td>';
 }
 if (isset($show['cash'])) {
     $td[] = '<td class="r">' . game::format_cash($row['money']) . '</td>';
 }
 if (isset($show['birth'])) {
     $birth = explode("-", $row['u_birth']);
     $td[] = '<td class="r">' . (empty($row['u_birth']) || $row['u_birth'] == "0000-00-00" ? 'Ikke registrert' : intval($birth[2]) . ". " . $_lang['months'][intval($birth[1])] . " " . $birth[0]) . '</td>';
 }
 if (isset($show['banko'])) {
Exemple #8
0
    /**
     * Vise komplett liste
     */
    protected function all()
    {
        echo '
<div class="bg1_c medium">
	<h1 class="bg1">Rangeringsoversikt<span class="left"></span><span class="right"></span></h1>
	<div class="bg1">
		<p class="c"><a href="ranklist">&laquo; Vis kun topp-plaseringene</a></p>';
        if (isset($_GET['show_nsu'])) {
            $nsu = "";
            ess::$b->page->add_message("Du viser også brukere som ikke vises på vanlig statistikk!");
        } else {
            $nsu = "up_access_level < " . ess::$g['access_noplay'] . " AND ";
        }
        // finn ut antall spillere
        $result = \Kofradia\DB::get()->query("SELECT COUNT(up_id) FROM users_players WHERE {$nsu}up_access_level != 0");
        $antall_spillere = $result->fetchColumn(0);
        if ($antall_spillere == 0) {
            echo '
		<p>
			Det finnes ingen spillere...?!
		</p>';
        } else {
            // sideoppsett
            $pagei = new pagei(pagei::ACTIVE_GET, "side", pagei::PER_PAGE, 50);
            // hent folka..
            $result = $pagei->query("\n\t\t\t\tSELECT up_id, up_name, up_access_level, up_points, up_last_online, upr_rank_pos\n\t\t\t\tFROM users_players\n\t\t\t\t\tLEFT JOIN users_players_rank ON upr_up_id = up_id\n\t\t\t\tWHERE {$nsu}up_access_level != 0\n\t\t\t\tORDER BY up_points DESC");
            $colspan = access::has("mod") ? 6 : 4;
            $e = 0;
            echo '
		<table class="table tablem" width="100%">
			<thead>
				<tr>
					<th>#</th>
					<th>Spillernavn</th>
					<th>Rank</th>
					<th>Sist pålogget</th>' . (access::has("mod") ? '
					<th>Rankpoeng</th>
					<th>&nbsp;</th>' : '') . '
				</tr>
			</thead>
			<tbody>
				<tr>
					<td colspan="' . $colspan . '" class="c">' . $pagei->pagenumbers() . '</td>
				</tr>';
            // startverdi
            $i = $pagei->start;
            $last_rank = 0;
            while ($row = $result->fetch()) {
                $rank = game::rank_info($row['up_points'], $row['upr_rank_pos'], $row['up_access_level']);
                echo '
				<tr' . (++$e % 2 == 0 ? ' class="color"' : '') . '>
					<td class="r">' . ($last_rank != $row['upr_rank_pos'] ? '#' . game::format_number($row['upr_rank_pos']) : '<span style="color: #666">#' . game::format_number($row['upr_rank_pos']) . '</span>') . '</td>
					<td>' . game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level']) . '</td>
					<td class="c">' . $rank['name'] . '</td>
					<td class="r">' . game::timespan($row['up_last_online'], game::TIME_ABS) . '</td>' . (access::has("mod") ? '
					<td class="r">' . game::format_number($row['up_points']) . '</td>
					<td><a href="admin/brukere/finn?up_id=' . $row['up_id'] . '">IP-sjekk</a></td>' : '') . '
				</tr>';
                $last_rank = $row['upr_rank_pos'];
            }
            echo '
				<tr' . (++$e % 2 == 0 ? ' class="color"' : '') . '>
					<td colspan="' . $colspan . '" class="c">' . $pagei->pagenumbers() . '</td>
				</tr>
			</tbody>
		</table>';
        }
        echo '
	</div>
</div>';
    }
Exemple #9
0
    $anon = $last_visitor_anon ? '
				<dt>Anonym</dt>
				<dd>' . game::timespan($last_visitor_anon, game::TIME_ABS) . '</dd>' : '';
    $i = 0;
    while ($row = $last_visitors->fetch()) {
        if ($i++ == $last_visitors_limit) {
            break;
        }
        // anonym?
        if ($last_visitor_anon && $last_visitor_anon > $row['time']) {
            echo $anon;
            $anon = false;
        }
        echo '
				<dt>' . game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level']) . '</dt>
				<dd>' . game::timespan($row['time'], game::TIME_ABS) . '</dd>';
    }
    // anonym?
    if ($anon && $i <= $last_visitors_limit) {
        echo $anon;
    }
    echo '
			</dl>';
}
echo '
		</div>';
// prestasjoner
echo '
		<div class="section">
			<h2>Prestasjoner <img src="' . STATIC_LINK . '/icon/ruby.png" alt="" title="Oppnådde prestasjoner" style="vertical-align: bottom; margin-top: -2px" /></h2>';
// hent alle prestasjonene
Exemple #10
0
		<tr>
			<th class="name">Spiller ' . $sort->show_link(0, 1) . ' (' . $sort->show_link(2, 3) . ')</th>
			<th>Sist pålogget ' . $sort->show_link(4, 5) . '</th>
			<th>Rank</th>
			<th>Plassering ' . $sort->show_link(6, 7) . '</th>
		</tr>
	</thead>
	<tbody>';
        $i = 0;
        while ($row = $result->fetch()) {
            $rank = game::rank_info($row['up_points'], $row['upr_rank_pos'], $row['up_access_level']);
            $rank_name = $rank['name'] . ($rank['orig'] ? ' (' . $rank['orig'] . ')' : '');
            echo '
		<tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '>
			<td>' . game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level']) . '</td>
			<td class="r">' . game::timespan($row['up_last_online'], game::TIME_ABS) . '</td>
			<td>' . $rank_name . '</td>
			<td class="r">' . game::format_number($row['upr_rank_pos']) . '</td>
		</tr>';
        }
        echo '
	</tbody>
</table>';
        // flere sider?
        if ($pagei->pages > 1) {
            echo '
<div class="hr"></div>
<p class="c">
	' . $pagei->pagenumbers() . '
</p>';
        }
Exemple #11
0
})();
</script>';
    die;
}
header("Content-Type: text/xml");
echo '<?xml version="1.0" encoding="utf-8"?>
<playerinfo>
	<up_id>' . $player['up_id'] . '</up_id>
	<url>' . htmlspecialchars($__server['relative_path'] . "/p/" . rawurlencode($player['up_name']) . "/" . $player['up_id']) . '</url>
	<up_name>' . htmlspecialchars($player['up_name']) . '</up_name>
	<up_name_display>' . htmlspecialchars(game::profile_link($player['up_id'], $player['up_name'], $player['up_access_level'])) . '</up_name_display>
	<status>' . htmlspecialchars($status) . '</status>
	<reg_time_abs>' . htmlspecialchars($_base->date->get($player['up_created_time'])->format(date::FORMAT_SEC)) . '</reg_time_abs>
	<reg_time_rel>' . htmlspecialchars(game::timespan($player['up_created_time'], game::TIME_ABS)) . '</reg_time_rel>
	<last_online_abs>' . htmlspecialchars($_base->date->get($player['up_last_online'])->format(date::FORMAT_SEC)) . '</last_online_abs>
	<last_online_rel>' . htmlspecialchars(game::timespan($player['up_last_online'], game::TIME_ABS)) . '</last_online_rel>
	<activated>' . htmlspecialchars($player['up_access_level'] == 0 ? 0 : 1) . '</activated>
	<profile_image>' . htmlspecialchars($profile_image) . '</profile_image>
	<rank_name>' . htmlspecialchars($rank['name'] . ($rank['orig'] ? ' (' . $rank['orig'] . ')' : '')) . '</rank_name>';
// moderator stæsj
if ($mod) {
    echo '
	<ip>' . $player['u_online_ip'] . '</ip>
	<email>' . htmlspecialchars($player['u_email']) . '</email>
	<hits>' . $player['up_hits'] . '</hits>
	<money>' . game::format_cash($player['money']) . '</money>';
}
echo '
	<contact>' . $is_contact . '</contact>
	<block>' . $is_block . '</block>
	<ff_list>';
Exemple #12
0
    /**
     * Send lenke med autologin
     */
    protected function handle()
    {
        // mangler eller ugyldig nøkkel?
        if (!isset($_POST['key']) || !isset($_SESSION['glemtpassord_key']) || $_POST['key'] != $_SESSION['glemtpassord_key']) {
            ess::$b->page->add_message("Ugyldig forespørsel. Prøv på nytt.", "error");
            return;
        }
        // sjekk e-post
        $epost = trim(postval("epost"));
        if (empty($epost)) {
            ess::$b->page->add_message("Du må fylle inn e-postadressen din.", "error");
            return;
        }
        // sjekk om det er noen oppføringer med denne e-posten i databasen (og hent de som lever)
        $result = \Kofradia\DB::get()->query("SELECT u_id, up_name, up_access_level, u_pass_change, u_email FROM users LEFT JOIN users_players ON u_active_up_id = up_id WHERE u_email = " . \Kofradia\DB::quote($epost) . " AND u_access_level != 0");
        // ingen?
        if ($result->rowCount() == 0) {
            ess::$b->page->add_message('Fant ingen bruker som hadde e-postadressen ' . htmlspecialchars($epost) . '. Du finner ikke din bruker dersom <u>brukeren</u> er deaktivert. Dersom du har blitt deaktivert og mener dette er feil ta <a href="henvendelser">kontakt</a>.', "error");
            return;
        }
        // flere e-postadresser?
        if ($result->rowCount() > 1) {
            ess::$b->page->add_message('Det finnes flere brukere som er registrert på ' . htmlspecialchars($epost) . '. Vennligst ta <a href="henvendelser">kontakt</a>!', "error");
            redirect::handle();
        }
        $row = $result->fetch();
        // er det noen oppføring for når passordet sist ble oppdatert?
        if (!empty($row['u_pass_change'])) {
            $info = explode(";", $row['u_pass_change']);
            // A;<timestamp>;<ip>[;hash]			-- asked	- bedt om nytt pass
            // C;<timestamp>;<ip>					-- changed	- endret pass
            // bedt om pass (A - asked)
            if ($info[0] == "A") {
                // når?
                $when = intval($info[1]);
                $wait = max(0, $when + self::WAIT - time());
                if ($wait > 0) {
                    ess::$b->page->add_message("Du benyttet deg av glemt passord " . ess::$b->date->get($when)->format() . ", og må vente " . game::timespan($wait, game::TIME_FULL) . " før du kan benytte deg av glemt passord på nytt. Se e-posten du skal ha mottatt!", "error");
                    return;
                }
            }
        }
        // legg inn i databasen
        \Kofradia\DB::get()->exec("UPDATE users SET u_pass_change = 'A;" . time() . ";{$_SERVER['REMOTE_ADDR']}' WHERE u_id = {$row['u_id']}");
        // generer autologin
        $hash = \Kofradia\Users\Autologin::generate($row['u_id'], time() + self::AUTOLOGIN_TIME, null, \Kofradia\Users\Autologin::TYPE_RESET_PASS);
        // send e-post
        $email = new email();
        $email->text = 'Hei,

Du har bedt om å nullstille ditt passord på ' . ess::$s['path'] . ' fra IP-en ' . $_SERVER['REMOTE_ADDR'] . ' (' . $_SERVER['HTTP_USER_AGENT'] . ').

Ved å benytte lenken nedenfor vil passordet på brukeren din bli nullstilt, du blir automatisk logget inn og kan fylle inn ditt nye passord:
' . \Kofradia\Users\Autologin::generateUrl($hash) . '

Hvis du ikke ønsker å nullstille ditt passord kan du se bort fra denne e-posten.

--
www.kofradia.no';
        $email->headers['X-SMafia-IP'] = $_SERVER['REMOTE_ADDR'];
        $email->headers['Reply-To'] = "*****@*****.**";
        $email->send($epost, "Nullstille ditt passord");
        // logg dette
        putlog("NOTICE", "%c7%bNULLSTILLE PASSORD:%b%c %u{$_SERVER['REMOTE_ADDR']}%u ba om e-post for å nullstille passordet %u{$epost}%u (%u{$row['up_name']}%u)");
        // gi infomelding
        ess::$b->page->add_message("Vi har sendt deg en e-post til <b>" . htmlspecialchars($row['u_email']) . "</b>.<br />Benytt denne for å nullstille passordet ditt.");
        redirect::handle("", redirect::ROOT);
    }
Exemple #13
0
	<thead>
		<tr>
			<th>Bruker/spiller</th>
			<th>Type blokkering</th>
			<th>Ble utestengt</th>
			<th>Utestengt til</th>
			<th>Begrunnelse</th>
			<th>Intern info</th>
		</tr>
	</thead>
	<tbody>';
    $i = 0;
    while ($row = $result->fetch()) {
        $access = access::has(blokkeringer::$types[$row['ub_type']]['access']);
        echo '
		<tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '>
			<td>' . game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level']) . '</td>
			<td>' . ($access ? '<a href="' . $__server['relative_path'] . '/min_side?u_id=' . $row['u_id'] . '&amp;b=blokk&amp;t=' . $row['ub_type'] . '">' : '') . htmlspecialchars(blokkeringer::$types[$row['ub_type']]['title']) . ($access ? '</a>' : '') . '</td>
			<td>' . $_base->date->get($row['ub_time_added'])->format(date::FORMAT_SEC) . '</td>
			<td>' . $_base->date->get($row['ub_time_expire'])->format(date::FORMAT_SEC) . '<br />
			' . game::timespan($row['ub_time_expire'], game::TIME_ABS) . '</td>
			<td>' . game::format_data($row['ub_reason'], "bb-opt", "Ingen begrunnelse oppgitt.") . '</td>
			<td>' . game::format_data($row['ub_note'], "bb-opt", "Ingen begrunnelse oppgitt.") . '</td>
		</tr>';
    }
    echo '
	</tbody>
</table>
<p>' . $pagei->pagenumbers() . '</p>';
}
$_base->page->load();
Exemple #14
0
 /**
  * Angrep en annen spiller
  * @param player $up spilleren man angriper
  * @param int $bullets antall kuler man bruker
  */
 public function attack(player $up, $bullets)
 {
     \Kofradia\DB::get()->beginTransaction();
     // beregn skadeprosent
     $skade = $this->calc_damage($up, $bullets);
     $skadeprosent = $skade[2];
     // tilfeldig skadeprosent
     $skadeprosent *= rand(7500, 10000) / 10000;
     // kalkuler hvor mye helse spilleren skal miste
     $miste_helse = $skadeprosent * self::MAX_ATTACK_HEALTH;
     // sett ned helsen til spilleren og behandle spilleren
     $ret = $up->health_decrease($miste_helse, $this->up, player::ATTACK_TYPE_KILL, $skadeprosent, array("bullets" => $bullets, "attack_skade" => $skade, "skadeprosent" => $skadeprosent));
     if (!$ret) {
         \Kofradia\DB::get()->commit();
         return false;
     }
     // ble drept?
     if ($ret['drept']) {
         // øk wanted nivået
         $ret['fengsel'] = $this->up->fengsel_rank($ret['rankpoeng'], true);
     } else {
         // sett angriper i fengsel
         $tid = rand(300, 600);
         $ret['fengsel'] = $this->up->fengsel_rank($ret['rankpoeng'], false, true, $tid);
         putlog("DF", " - Fengsel i " . game::timespan($tid, game::TIME_NOBOLD | game::TIME_ALL | game::TIME_FULL));
     }
     // sett ny energi for angriper
     $m = $ret['drept'] ? 0.6 : 0.8;
     // faktoren med hvor mye energi man mister
     $m *= $skadeprosent;
     $m = 1 - $m;
     \Kofradia\DB::get()->exec("UPDATE users_players SET up_energy = GREATEST(0, up_energy * {$m}) WHERE up_id = {$this->up->id}");
     $this->up->data['up_energy'] = max(0, $this->up->data['up_energy'] * $m);
     // gjennomfør transaksjon
     \Kofradia\DB::get()->commit();
     return $ret;
 }
Exemple #15
0
 /** Kjør rutine */
 private function run($row)
 {
     global $_base;
     // marker som opptatt
     $a = \Kofradia\DB::get()->exec("UPDATE scheduler SET s_count = s_count + 1, s_previous = {$this->start}, s_expire = " . ($this->start + 600) . " WHERE s_name = " . \Kofradia\DB::quote($row['s_name']) . " AND s_count = {$row['s_count']}");
     // ikke oppdater - hopp over (en annen holder mest sannsynlig på)
     if ($a == 0) {
         return;
     }
     ++$this->count;
     // finn ut når rutinen skal utføres neste gang
     $next = $this->next($row['s_hours'], $row['s_minutes'], $row['s_seconds']);
     // sjekk om filen finnes
     $path = PATH_APP . "/scheduler/" . $row['s_file'];
     if (!file_exists($path)) {
         // lagre logg
         putlog("NOTICE", "%bScheduler:%b ERROR: Scriptfil %u{$row['s_file']}%u for %u{$row['s_name']}%u finnes ikke!");
         sysreport::log("Scheduler - scriptfil mangler", "Scriptfil '{$row['s_file']}' for '{$row['s_name']}' finnes ikke!");
     } else {
         $start = microtime(true);
         // benytt egen funksjon for å hindre overskriving av variabler
         if ($this->load($path) == "skip_next") {
             $scheduler_skip_next = true;
         }
         $next_r = isset($scheduler_skip_next) ? '' : " - neste: " . $_base->date->get($next)->format(date::FORMAT_SEC) . " (" . game::timespan($next, game::TIME_ABS | game::TIME_NOBOLD) . ")";
         putlog("SPAM", "%bScheduler:%b Rutinen %u{$row['s_name']}%u ble utført (" . number_format(round(microtime(true) - $start, 6), 6, ",", ".") . " sekunder){$next_r}");
     }
     $s_next = isset($scheduler_skip_next) ? '' : ', s_next = ' . $next;
     \Kofradia\DB::get()->exec("UPDATE scheduler SET s_expire = 0{$s_next} WHERE s_name = " . \Kofradia\DB::quote($row['s_name']) . " AND s_count = " . ($row['s_count'] + 1));
 }
Exemple #16
0
    /**
     * Publiser utgivelse
     */
    protected function pub_publish(ff_avis_utgivelse $ffn)
    {
        // allerede publisert
        if ($ffn->data['ffn_published'] != 0) {
            ess::$b->page->add_message("Utgivelsen er allerede publisert.", "error");
            redirect::handle();
        }
        // kontroller beskrivelse
        $desc_plain = strip_tags(game::format_data($ffn->data['ffn_description']));
        if (mb_strlen($desc_plain) < 30) {
            ess::$b->page->add_message("Beskrivelsen for utgivelsen må inneholde minimum 30 bokstaver/tall før den kan publiseres.", "error");
            redirect::handle();
        }
        // sjekk når siste publisering ble utført
        $result = \Kofradia\DB::get()->query("SELECT ffn_published_time FROM ff_newspapers WHERE ffn_ff_id = {$this->ff->id} AND ffn_published != 0 ORDER BY ffn_published_time DESC LIMIT 1");
        $last = $result->rowCount() > 0 ? $result->fetchColumn(0) : 0;
        // har det gått lang nok tid?
        $delay = ff_avis::FFN_PUBLISH_DELAY + $last - time();
        if ($delay > 0) {
            ess::$b->page->add_message("Du må vente " . game::timespan(ff_avis::FFN_PUBLISH_DELAY, game::TIME_FULL) . " mellom hver utgivelse som utføres. Gjenstår før neste utgivelse kan publiseres: " . game::timespan($delay, game::TIME_FULL) . ".", "error");
            redirect::handle();
        }
        // hent artiklene med pris
        $result = \Kofradia\DB::get()->query("SELECT ffna_id, ffna_up_id, ffna_title, ffna_price FROM ff_newspapers_articles WHERE ffna_ffn_id = {$ffn->id} ORDER BY ffna_title");
        // for få artikler?
        if ($result->rowCount() < 4) {
            ess::$b->page->add_message("Utgivelsen må inneholde minimum 4 artikler for å bli publisert.", "error");
            redirect::handle();
        }
        // kun eier
        if (!$this->ff->access(1)) {
            ess::$b->page->add_message("Kun " . htmlspecialchars($this->ff->type['priority'][1]) . " kan publisere utgivelsen.", "error");
            redirect::handle();
        }
        // finn total pris for artiklene
        $articles = array();
        $articles_price = 0;
        while ($row = $result->fetch()) {
            $articles_price += $row['ffna_price'];
            $articles[] = $row;
        }
        $total_price = $articles_price + ff_avis::FFN_PUBLISH_COST;
        // godkjenne publisering?
        if (isset($_POST['approve'])) {
            $price = game::intval(postval("price"));
            $sid = postval("sid");
            // kontroller pris
            if ($price != $total_price) {
                ess::$b->page->add_message("Det ser ut som prisen har endret seg. Prøv på nytt.", "error");
            } elseif ($sid != login::$info['ses_id']) {
                ess::$b->page->add_message("Ugyldig.", "error");
            } elseif ($total_price > 0 && $this->ff->data['ff_bank'] < $total_price) {
                ess::$b->page->add_message("Det er ikke nok penger i firmabanken.", "error");
            } else {
                \Kofradia\DB::get()->beginTransaction();
                // trekk fra pengene fra firmabanken
                if ($total_price > 0 && !$this->ff->bank(ff::BANK_BETALING, $total_price, "Publisering av utgivelse: {$ffn->data['ffn_title']} (id: {$ffn->id})")) {
                    \Kofradia\DB::get()->commit();
                    // var tidligere rollback, men trenger ikke være det
                    ess::$b->page->add_message("Det er ikke nok penger i firmabanken.", "error");
                } else {
                    // oppdater utgivelsen
                    \Kofradia\DB::get()->exec("UPDATE ff_newspapers SET ffn_published = 1, ffn_published_time = " . time() . ", ffn_published_up_id = " . login::$user->player->id . " WHERE ffn_id = {$ffn->id}");
                    // utbetal til journalistene
                    \Kofradia\DB::get()->exec("UPDATE users_players, ff_members, (SELECT ffna_up_id, SUM(ffna_price) AS ffna_sum, COUNT(ffna_price) AS ffna_count FROM ff_newspapers_articles WHERE ffna_ffn_id = {$ffn->id} AND ffna_price > 0 GROUP BY ffna_up_id) AS ref SET up_bank = up_bank + ffna_sum, up_bank_received = up_bank_received + ffna_sum, up_bank_profit = up_bank_profit + ffna_sum, up_bank_num_received = up_bank_num_received + ffna_count, up_log_new = up_log_new + ffna_count, ffm_earnings = ffm_earnings + ffna_sum WHERE ffna_up_id = up_id AND ffm_up_id = up_id AND ffm_ff_id = {$this->ff->id}");
                    // lagre overføringslogg
                    \Kofradia\DB::get()->exec("INSERT INTO bank_log (bl_sender_up_id, bl_receiver_up_id, amount, time) SELECT " . login::$user->player->id . ", ffna_up_id, ffna_price, " . time() . " FROM users_players, ff_newspapers_articles WHERE ffna_ffn_id = {$ffn->id} AND ffna_up_id = up_id AND ffna_price > 0");
                    // spillelogg
                    \Kofradia\DB::get()->exec("INSERT INTO users_log (time, ul_up_id, type, note, num) SELECT " . time() . ", ffna_up_id, " . gamelog::$items['bankoverforing'] . ", CONCAT(ffna_price, ':Utbetaling for avisartikkel.'), " . login::$user->player->id . " FROM users_players, ff_newspapers_articles WHERE ffna_ffn_id = {$ffn->id} AND ffna_up_id = up_id AND ffna_price > 0");
                    \Kofradia\DB::get()->commit();
                    // live-feed
                    livefeed::add_row('Avisutgivelsen <a href="' . ess::$s['relative_path'] . '/ff/avis?ff_id=' . $this->ff->id . '&amp;ffn=' . $ffn->id . '">' . htmlspecialchars($ffn->data['ffn_title']) . '</a> ble publisert av <a href="' . ess::$s['relative_path'] . '/ff/?ff_id=' . $this->ff->id . '">' . htmlspecialchars($this->ff->data['ff_name']) . '</a>.');
                    ess::$b->page->add_message("Utgivelsen er nå publisert.");
                    redirect::handle();
                }
            }
        }
        echo '
<p class="c">Publiser utgivelse | <a href="avis?ff_id=' . $this->ff->id . '&amp;u&amp;ffn=' . $ffn->id . '">Tilbake</a></p>
<div class="section center w200">
	<h2>Utgivelsesinformasjon</h2>
	<dl class="dd_right">
		<dt>Tittel</dt>
		<dd>' . htmlspecialchars($ffn->data['ffn_title']) . '</dd>
		<dt>Opprettet</dt>
		<dd>' . ess::$b->date->get($ffn->data['ffn_created_time'])->format() . '</dd>
		<dt>Salgspris</dt>
		<dd>' . game::format_cash($ffn->data['ffn_cost']) . '</dd>
	</dl>
</div>
<div class="section center w200">
	<h2>Beskrivelse av utgivelsen</h2>' . (($d = $this->ff->format_description($ffn->data['ffn_description'])) != '' ? '
	<div class="p">' . $d . '</div>' : '
	<p>Ingen beskrivelse.</p>') . '
</div>
<form action="" method="post">
	<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
	<input type="hidden" name="price" value="' . $total_price . '" />
	<div class="section center w350">
		<h2>Prisoversikt</h2>
		<dl class="dd_right">
			<dt>Publisering av utgivelse</dt>
			<dd>' . game::format_cash(ff_avis::FFN_PUBLISH_COST) . '</dd>';
        foreach ($articles as $row) {
            echo '
			<dt><a href="avis?ff_id=' . $this->ff->id . '&amp;a&amp;ffna_id=' . $row['ffna_id'] . '">' . htmlspecialchars($row['ffna_title']) . '</a> (<user id="' . $row['ffna_up_id'] . '" />)</dt>
			<dd>' . game::format_cash($row['ffna_price']) . '</dd>';
        }
        echo '
		</dl>
		<dl class="dd_right">
			<dt>I firmabanken</dt>
			<dd>' . game::format_cash($this->ff->data['ff_bank']) . '</dd>
			<dt><u>Samlet kostnader</u></dt>
			<dd><u>' . game::format_cash($total_price) . '</u></dd>
		</dl>
		<p class="c">' . show_sbutton("Publiser utgivelsen", 'name="approve"') . '</p>
	</div>
</form>
<div class="hr fhr"><hr /></div>';
        // vis utgivelsen
        echo $ffn->build_avis_html();
    }
Exemple #17
0
    /**
     * Lag tabellrad for et medlem
     * @param ff_member $member
     * @param int $i
     * @param string $class ekstra class på tr
     * @return string <tr>
     */
    protected function show_member_row(ff_member $member, $i, $class = null)
    {
        return '
		<tr class="box_handle' . ($i % 2 == 0 ? ' color' : '') . ($class ? ' ' . $class : '') . '">
			<td><input type="checkbox" name="up_id[]" value="' . $member->id . '"' . (!$this->ff->mod && ($member->id == login::$user->player->id || $member->data['ffm_priority'] == 1) ? ' disabled="disabled"' : '') . ' /> ' . game::profile_link($member->id, $member->data['up_name'], $member->data['up_access_level']) . '<br /><b>' . ucfirst($member->get_priority_name()) . '</b></td>
			<td class="r">' . ess::$b->date->get($member->data['ffm_date_join'])->format() . '</td>
			<td class="r">' . ess::$b->date->get($member->data['up_last_online'])->format() . '<br />' . game::timespan($member->data['up_last_online'], game::TIME_ABS) . '</td>
			<td class="r">' . game::format_cash($member->data['ffm_donate']) . '<br />' . game::format_cash($member->data['ffm_earnings_ff']) . '</td>
			<td class="r">' . game::format_cash($member->data['ffm_earnings']) . '</td>
		</tr>';
    }
Exemple #18
0
        echo '
		<tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '>
			<td rowspan="' . $count . '" valign="top"><a href="finn?ip=' . urlencode($row[0]['u_online_ip']) . '">' . htmlspecialchars($row[0]['u_online_ip']) . '</a><br />(' . $count . ' ' . fword("bruker", "brukere", $count) . ')</td>';
        $e = 0;
        foreach ($row as $player) {
            // ny rad?
            if (++$e > 1) {
                echo '
		</tr>
		<tr' . ($i % 2 == 0 ? ' class="color"' : '') . '>';
            }
            $birth = explode("-", $player['u_birth']);
            echo '
			<td>' . game::profile_link($player['up_id'], $player['up_name'], $player['up_access_level']) . '</td>
			<td><a href="finn?email=' . urlencode($player['u_email']) . '">' . htmlspecialchars($player['u_email']) . '</a></td>
			<td>' . $_base->date->get($player['up_created_time'])->format(date::FORMAT_SEC) . '</td>
			<td>' . $_base->date->get($player['up_last_online'])->format(date::FORMAT_SEC) . '</td>
			<td class="r">' . game::timespan($player['up_last_online'], game::TIME_ABS | game::TIME_SHORT | game::TIME_NOBOLD) . '</td>
			<td class="r">' . game::format_number($player['up_hits']) . '</td>
			<td class="r">' . game::format_number($player['up_points']) . '</td>
			<td class="r">' . game::format_cash($player['money']) . '</td>
			<td class="r">' . (empty($player['u_birth']) || $player['u_birth'] == "0000-00-00" ? 'Ikke registrert' : intval($birth[2]) . ". " . $_lang['months'][intval($birth[1])] . " " . $birth[0]) . '</td>';
        }
        echo '
		</tr>';
    }
    echo '
	</tbody>
</table>';
}
$_base->page->load();
Exemple #19
0
 /**
  * Generer beskrivelse for oppdraget
  * 
  * @param oppdrag id int $o_id
  * @return string
  */
 public function get_description($o_id)
 {
     // finn oppdraget
     if (!isset($this->oppdrag[$o_id])) {
         if ($this->oppdrag_loaded) {
             throw new HSException("Brukeren har ikke noe oppdrag med ID {$o_id}.");
         }
         $this->user_load_all();
         return $this->get_description($o_id);
     }
     $o =& $this->oppdrag[$o_id];
     $active = $o['uo_locked'] == 0;
     $params = $active ? $this->params[$o_id]['o_params'] : $this->params[$o_id]['o_unlock_params'];
     $prefix = (string) $active ? game::bb_to_html($o['o_description']) : game::bb_to_html($o['o_description_unlock']);
     // sjekk for tidsgrense
     if ($active) {
         $time_limit = $params->get("time_limit", oppdrag::DEFAULT_TIME_LIMIT_ACTIVE);
     } else {
         $time_limit = $params->get("time_limit", false);
     }
     // sett opp beskrivelse for premie
     $prize = new container($params->get("prize"));
     if (count($prize->items) == 0) {
         if ($active) {
             $suffix = '<p><b>Premie:</b> Ikke definert.</p>';
         } else {
             $suffix = '';
         }
     } else {
         $prizes = array();
         foreach ($prize->items as $item) {
             switch ($item[0]) {
                 case "cash":
                     $prizes[] = game::format_cash($item[1]);
                     break;
                 case "rank_points":
                     $points = (int) $item[1];
                     $prizes[] = game::format_num($points) . " poeng";
                     break;
                 case "bullets":
                     $prizes[] = fwords("%d kule", "%d kuler", (int) $item[1]) . ' (må ha våpen og ledig kapasitet)';
                     break;
             }
         }
         if (count($prizes) == 0) {
             $suffix = '<p><b>Premie:</b> Premie er feil satt opp.</p>';
         } else {
             $suffix = '<p><b>Premie:</b></p><ul><li>' . implode("</li><li>", $prizes) . '</li></ul>';
         }
     }
     // hva slags trigger
     switch ($params->get("name")) {
         case "rank_points":
             // oppnå poeng på gitt tid
             $target = $this->up->data['up_points'] + $params->get("points");
             return $prefix . '<p>Oppnå totalt ' . game::format_num($target) . ' poeng i løpet av ' . game::timespan($time_limit, game::TIME_FULL) . '. <span class="dark">Merk at <i>lotto</i> og <i>angrep</i> ikke teller med. Hvis du mottar poeng fra disse funksjonene vil poenggrensen øke med så mange poeng du mottar.</span></p>' . $suffix;
             break;
         case "kriminalitet_different":
             // hvor mange forskjellige må vi oppnå?
             $different = $params->get("count", 5);
             return $prefix . '<p>Utfør ' . $different . ' forskjellige kriminaliteter etter hverandre som blir vellykket' . ($active ? ' i løpet av ' . game::timespan($time_limit, game::TIME_FULL) : '') . '.</p>' . $suffix;
             break;
         case "poker_unique_people":
             // hvor mange man må vinne mot
             $user_count = $params->get("user_count", 10);
             return $prefix . '<p>Vinn ' . $user_count . ' ganger på rad i poker mot ' . $user_count . ' forskjellige personer' . ($time_limit ? ' innen ' . game::timespan($time_limit, game::TIME_FULL) : '') . '. Hvis du spiller flere ganger mot samme person, er det første gang som teller. (Taper du første gang, må du vinne ' . $user_count . ' nye ganger.)</p>' . $suffix;
             break;
         case "wanted_level":
             return $prefix . '<p>Oppnå wanted nivå på ' . game::format_num($params->get("wanted_level", 500) / 10, 1) . ' %' . ($time_limit ? ' innen ' . game::timespan($time_limit, game::TIME_FULL) : '') . '.</p>' . $suffix;
         case "fengsel_breakout":
             return $prefix . '<p>Bryt ut ' . $params->get("user_count", 3) . ' spillere fra fengsel på rad uten å komme i fengsel' . ($time_limit ? ' innen ' . game::timespan($time_limit, game::TIME_FULL) : '') . '.</p>' . $suffix;
     }
     return !empty($prefix) ? $prefix . $suffix : '<p>Fant ingen relevant beskrivelse for dette oppdraget på dette stadiet. Ingen triggere som må utføres?</p>' . $suffix;
 }
Exemple #20
0
    /**
     * Send lenke for å endre bankpassordet
     */
    protected function auth_send_link()
    {
        // er det noen aktive nå?
        $expire = $this->up->user->params->get("bankauth_change_expire");
        if ($expire > time()) {
            ess::$b->page->add_message("Du må vente " . game::timespan($expire, game::TIME_ABS | game::TIME_FULL) . " før du kan be om ny e-post for å bytte bankpassordet ditt.", "error");
            redirect::handle();
        }
        // nøkkelen
        $hash = mb_substr(md5(uniqid("", true)), 0, 10);
        // gyldig i 30 minutter
        $expire = time() + 3600;
        // send e-post
        $email = new email();
        $email->text = 'Hei,

For å bytte ditt bankpassord for spilleren ' . $this->up->data['up_name'] . ' må du åpne denne adressen:
' . ess::$s['path'] . '/banken?rp=' . $hash . '

--
www.kofradia.no';
        $email->headers['X-SMafia-IP'] = $_SERVER['REMOTE_ADDR'];
        $email->headers['Reply-To'] = "*****@*****.**";
        $email->send($this->up->user->data['u_email'], "Skifte bankpassord");
        // lagre
        $this->up->user->params->update("bankauth_change_expire", $expire);
        $this->up->user->params->update("bankauth_change_rtime", time());
        $this->up->user->params->update("bankauth_change_hash", $hash, true);
        ess::$b->page->add_message("E-post for bekreftelse er sendt til <b>" . htmlspecialchars($this->up->user->data['u_email']) . "</b>.");
        redirect::handle();
    }
Exemple #21
0
.f_lock { color: #FFFFFF }
.f_u a span { color: #FFFFFF; text-decoration: none }
.f_u a:hover span { text-decoration: underline }
.f_time { color: #AAAAAA }
.f_deld { color: #FFF; font-size: 11px }');
        // vis hver topic
        $i = 0;
        while ($row = $result->fetch()) {
            echo '
				<tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '>
					<td><a href="forum?id=' . $row['ft_fse_id'] . '">' . htmlspecialchars($sections[$row['ft_fse_id']]['name']) . '</a></td>
					<td class="l' . ($row['ft_type'] == 3 ? ' f_viktig' : ($row['ft_type'] == 2 ? ' f_sticky' : '')) . '"><a href="topic?id=' . $row['ft_id'] . '">' . htmlspecialchars($row['ft_title']) . '</a>' . ($row['ft_type'] == 3 ? ' <span class="info">(Viktig)</span>' : ($row['ft_type'] == 2 ? ' <span class="info">(Sticky)</span>' : '')) . ($row['ft_locked'] == 1 ? ' <span class="f_lock">(låst)</span>' : '') . ($row['ft_deleted'] != 0 ? ' <span class="f_deld">(Slettet)</span>' : '') . '</td>
					<td class="f_u">' . game::profile_link($row['ft_up_id'], $row['up_name'], $row['up_access_level']) . '<br /><span class="f_time">' . $_base->date->get($row['ft_time'])->format() . '</span></td>
					<td>' . game::format_number($row['ft_replies']) . '</td>
					<td>' . game::format_number($row['ft_views']) . '</td>
					<td class="f_u">' . ($row['fr_time'] ? game::profile_link($row['fr_up_id'], $row['r_up_name'], $row['r_up_access_level']) . '<br /><span class="f_time">' . game::timespan($row['fr_time'], game::TIME_ABS) . '</span>' : '<span style="color: #AAA">Ingen</span>') . '</td>
					<td>' . ($row['tr_match_type'] == 'subject' ? 'Tittel' : ($row['tr_match_type'] == 'topic' ? 'Hoved' : '<a href="topic?id=' . $row['ft_id'] . '&amp;replyid=' . $row['tr_fr_id'] . '">Svar &raquo;</a>')) . '</td>
				</tr>';
        }
        echo '
			</tbody>
		</table>';
        // flere sider?
        if ($pagei->pages > 1) {
            echo '
		<p class="c">' . $pagei->pagenumbers() . '</p>';
        }
    }
    echo '
	</div>
</div>';
Exemple #22
0
 /**
  * Utfør kriminalitet
  */
 protected function utfor()
 {
     // form sjekking
     if (!$this->form->validateHashOrAlert(null, ($this->krim->last ? "Siste=" . game::timespan($this->krim->last['last'], game::TIME_ABS | game::TIME_SHORT | game::TIME_NOBOLD) . ";" : "First;") . ($this->krim->wait ? "%c11Ventetid=" . game::timespan($this->krim->wait, game::TIME_SHORT | game::TIME_NOBOLD) . "%c" : "%c9No-wait%c"))) {
         return;
     }
     // kontroller at vi ikke har noe ventetid
     if ($this->krim->wait) {
         redirect::handle();
     }
     // finn id
     $id = intval(postval("theid"));
     if (!$id) {
         $found = false;
         foreach ($_POST as $name => $val) {
             $matches = false;
             if (preg_match("/^id([1-9]+|[1-9][0-9]+)\$/Du", $name, $matches)) {
                 $id = $matches[1];
             }
         }
     }
     // har ikke oppføringen?
     if (!isset($this->krim->options[$id])) {
         ess::$b->page->add_message("Ugyldig valg.", "error");
         redirect::handle();
     }
     // lagre valget
     ess::session_put("krim_last_id", $id);
     // utfør kriminalitet
     $result = $this->krim->utfor($id);
     $fengsel_msg = $result['wanted_change'] > 0 ? ' Wanted nivået økte med ' . game::format_number($result['wanted_change'] / 10, 1) . ' %.' : '';
     $msg = $result['success'] ? $this->krim->get_random_message($id, true, $result['cash'], $result['rank']) : $this->krim->get_random_message($id, false);
     ess::$b->page->add_message($msg . $fengsel_msg);
     // oppdater anti-bot
     $this->antibot->increase_counter();
     // oppdater siden
     redirect::handle();
 }
Exemple #23
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();
 }
Exemple #24
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>';
    }
Exemple #25
0
				<tr class="box_handle<?php 
    echo ++$i % 2 == 0 ? ' color' : '';
    ?>
">
					<td><input type="checkbox" name="id[]" rel="id_<?php 
    echo $type;
    ?>
" value="<?php 
    echo $contact->data['uc_id'];
    ?>
" /><?php 
    echo \game::profile_link($contact->data['uc_contact_up_id'], $contact->data['up_name'], $contact->data['up_access_level']);
    ?>
</td>
					<td class="r"><?php 
    echo \game::timespan($contact->data['up_last_online'], game::TIME_ABS);
    ?>
</td>
					<td class="r"><?php 
    echo \ess::$b->date->get($contact->data['uc_time'])->format(date::FORMAT_NOTIME);
    ?>
</td>
					<td><?php 
    echo empty($contact->data['uc_info']) ? '<span class="dark">Ingen info</span>' : \game::bb_to_html($contact->data['uc_info']);
    ?>
</td>
					<td><a href="kontakter/edit/<?php 
    echo $contact->data['uc_id'];
    ?>
" class="op50"><img src="&staticlink;/other/edit.gif" alt="Rediger" /></a></td>
				</tr>
Exemple #26
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>';
        }
    }
Exemple #27
0
    function step1_2()
    {
        global $__server;
        // er skjemaet sendt inn?
        if ($_SERVER['REQUEST_METHOD'] == "POST") {
            // sjekk for gyldig trinn
            if (!isset($_POST['step']) || $_POST['step'] != 1 && $_POST['step'] != 2) {
                redirect::handle();
            }
            $step = $_POST['step'];
            // trin 1
            if ($step == 1) {
                // epost1, epost2, b_dag, b_maaned, b_aar, forste_bruker
                $epost1 = trim(postval("epost1"));
                $epost2 = trim(postval("epost2"));
                $b_dag = intval(postval("b_dag"));
                $b_maaned = intval(postval("b_maaned"));
                $b_aar = intval(postval("b_aar"));
                $forste_bruker = isset($_POST['forste_bruker']);
                $date = ess::$b->date->get();
                $n_day = $date->format("j");
                $n_month = $date->format("n");
                $n_year = $date->format("Y");
                $age = $n_year - $b_aar - ($n_month < $b_maaned || $b_maaned == $n_month && $n_day < $b_dag ? 1 : 0);
                $birth = $b_aar . "-" . str_pad($b_maaned, 2, "0", STR_PAD_LEFT) . "-" . str_pad($b_dag, 2, "0", STR_PAD_LEFT);
                // sjekk om fødselsdatoen er gyldig
                $birth_date = ess::$b->date->get();
                $birth_date->setDate($b_aar, $b_maaned, $b_dag);
                $birth_valid = $birth_date->format("Y-m-d") == $birth;
                // sjekk e-post
                $email_valid = game::validemail($epost1);
                // kontroller om e-postadressen eller domenet er blokkert
                if ($email_valid) {
                    $pos = mb_strpos($epost1, "@");
                    $domain = mb_strtolower(mb_substr($epost1, $pos + 1));
                    $result = \Kofradia\DB::get()->query("SELECT eb_id, eb_type FROM email_blacklist WHERE (eb_type = 'address' AND eb_value = " . \Kofradia\DB::quote($epost1) . ") OR (eb_type = 'domain' AND eb_value = " . \Kofradia\DB::quote($domain) . ") ORDER BY eb_type = 'address' LIMIT 1");
                    $error_email = $result->fetch();
                }
                // sjekk e-post (1)
                if (!$email_valid) {
                    ess::$b->page->add_message("Ugyldig e-postadresse.", "error");
                } elseif ($error_email) {
                    if ($error_email['eb_type'] == "address") {
                        ess::$b->page->add_message("E-postadressen <b>" . htmlspecialchars($epost1) . "</b> er blokkert for registrering.", "error");
                    } else {
                        ess::$b->page->add_message("Domenet <b>" . htmlspecialchars($domain) . "</b> er blokkert for registrering og kan ikke benyttes.", "error");
                    }
                } elseif ($epost1 != $epost2) {
                    ess::$b->page->add_message("Den gjentatte e-postadressen var ikke lik den første.", "error");
                } elseif ($b_dag < 1 || $b_dag > 31) {
                    ess::$b->page->add_message("Du må velge en gyldig dag.", "error");
                } elseif ($b_maaned < 1 || $b_maaned > 12) {
                    ess::$b->page->add_message("Du må velge en gyldig måned.", "error");
                } elseif ($b_aar < 1900 || $b_aar > ess::$b->date->get()->format("Y")) {
                    ess::$b->page->add_message("Du må velge et gyldig år.", "error");
                } elseif (!$birth_valid) {
                    ess::$b->page->add_message("Datoen du fylte inn for fødselsdatoen din eksisterer ikke.");
                } elseif ($age < 13) {
                    putlog("ABUSE", "%c9%bUNDER ALDERSGRENSEN:%b%c %u{$_SERVER['REMOTE_ADDR']}%u prøvde å registrere seg med fødselsdato %u{$birth}%u (%u{$age}%u år) og e-posten %u{$epost1}%u!");
                    ess::$b->page->add_message("Du må ha fylt 13 år for å registrere deg og spille Kofradia!", "error");
                    redirect::handle("", redirect::ROOT);
                } elseif (!$forste_bruker) {
                    ess::$b->page->add_message("I følge betingelsene kan du kun ha en bruker. Bruk den!", "error");
                    redirect::handle("", redirect::ROOT);
                } else {
                    // hent DB info
                    $result1 = \Kofradia\DB::get()->query("SELECT id, time, expire FROM registration WHERE email = " . \Kofradia\DB::quote($epost1));
                    $result2 = \Kofradia\DB::get()->query("SELECT u_id FROM users WHERE u_email = " . \Kofradia\DB::quote($epost1) . " AND u_access_level != 0");
                    // e-post allerede i registreringssystemet?
                    if ($row = $result1->fetch()) {
                        $time = game::timespan($row['expire'], game::TIME_ABS | game::TIME_FULL);
                        ess::$b->page->add_message("E-postadressen er allerede aktivt i registeringssystemet. Sjekk e-posten for e-postkode eller vent {$time}, for så å prøve igjen.", "error");
                    } elseif ($row = $result2->fetch()) {
                        putlog("ABUSE", "%c9%bREGISTRER KONTO:%b%c %u{$_SERVER['REMOTE_ADDR']}%u prøvde å registrere seg en e-post som allerede finnes: %u{$epost1}%u!");
                        ess::$b->page->add_message("Denne e-posten er allerede i bruk.", "error");
                        redirect::handle("", redirect::ROOT);
                    } else {
                        // sett opp kode
                        $code = mb_substr(md5(uniqid("kofradia_")), 0, 16);
                        // legg til i databasen
                        \Kofradia\DB::get()->exec("INSERT INTO registration SET time = " . time() . ", birth = '{$birth}', email = " . \Kofradia\DB::quote($epost1) . ", code = '{$code}', ip = '{$_SERVER['REMOTE_ADDR']}', expire = " . (time() + 7200));
                        // send e-post
                        $email = new email();
                        $email->text = 'Hei,

Du har begynt registrering av bruker på Kofradia.
Dersom du ikke har bedt om denne e-posten kan du se bort ifra den.

For å bekrefte e-postadressen din må du følge denne lenken:
' . $__server['path'] . '/registrer?e=' . $code . '

Din verifiseringskode er: ' . $code . '

Forespørselen ble utført fra ' . $_SERVER['REMOTE_ADDR'] . '.

Du må fortsette innen ' . game::timespan(7200, game::TIME_FULL | game::TIME_NOBOLD) . ' (' . ess::$b->date->get(time() + 7200)->format(date::FORMAT_SEC) . '). Etter den tid må du be om ny e-post.

--
www.kofradia.no';
                        $email->headers['X-SMafia-IP'] = $_SERVER['REMOTE_ADDR'];
                        $email->headers['Reply-To'] = "*****@*****.**";
                        $email->send($epost1, "Starte registrering på Kofradia");
                        ess::$b->page->add_message("En e-post med verifiseringskode har blitt sendt til <b>" . htmlspecialchars($epost1) . "</b>. Sjekk e-posten snarest!");
                        redirect::handle("?e");
                    }
                }
            } else {
                // e
                $ecode = trim(postval("e"));
                // sjekk e-postkode
                if (empty($ecode)) {
                    ess::$b->page->add_message("Du må fylle ut e-postkoden du har fått på epost.", "error");
                } else {
                    // sjekk om den finnes
                    $result = \Kofradia\DB::get()->query("SELECT id, time, email, code, ip, expire, user FROM registration WHERE code = " . \Kofradia\DB::quote($ecode));
                    if (!($row = $result->fetch())) {
                        putlog("ABUSE", "%c9%bE-POST KODE:%b%c %u{$_SERVER['REMOTE_ADDR']}%u prøvde å fortsette registreringen med ugyldig e-postkode (%u{$ecode}%u)!");
                        ess::$b->page->add_message("Fant ikke e-postkoden i databasen! Kontroller at den er riktig og evt. be om ny e-postkode.", "error");
                    } else {
                        // oppdater oppføringen
                        \Kofradia\DB::get()->exec("UPDATE registration SET verified = 1 WHERE id = {$row['id']}");
                        $_SESSION[$GLOBALS['__server']['session_prefix'] . 'reg'] = array("id" => $row['id'], "step" => 3);
                        redirect::handle();
                    }
                }
            }
        }
        echo '
<p><b>Velkommen</b> til Kofradia sine nettsider! Kofradia er et tekstbassert nettspill som handler om å utføre forskjellige funksjoner for å stige i gradene. I tillegg finnes det både forum og diverse annen informasjon på siden!</p>
<p>På denne siden oppretter du din bruker og spiller. Merk! Det er kun lov å ha én bruker. Har du allerede en bruker fra før har du ikke lov til å registrere ny bruker.</p>';
        if (!isset($_REQUEST['e'])) {
            ess::$b->page->add_js_domready('$("epost1").focus();');
            echo '
<form action="registrer" method="post">
	<input type="hidden" name="step" value="1" />
	<div class="registrer_felt">
		<boxes />
		<dl class="dd_right dl_2x">
			<dt>E-postadresse</dt>
			<dd><input type="text" id="epost1" name="epost1" value="' . htmlspecialchars(postval("epost1")) . '" class="styled w150" /></dd>
			
			<dt>Gjenta e-postadresse</dt>
			<dd><input type="text" name="epost2" value="' . htmlspecialchars(postval("epost2")) . '" class="styled w150" /></dd>
			
			<dt>Fødselsdato</dt>
			<dd>
				<select name="b_dag">
					<option value="">Dag</option>';
            $active = postval("b_dag");
            for ($i = 1; $i <= 31; $i++) {
                echo '
					<option value="' . $i . '"' . ($i == $active ? ' selected="selected"' : '') . '>' . $i . '</option>';
            }
            echo '
				</select>
				<select name="b_maaned">
					<option value="">Måned</option>';
            global $_lang;
            $active = postval("b_maaned");
            for ($i = 1; $i <= 12; $i++) {
                echo '
					<option value="' . $i . '"' . ($i == $active ? ' selected="selected"' : '') . '>' . ucfirst($_lang['months'][$i]) . '</option>';
            }
            echo '
				</select>
				<select name="b_aar">
					<option value="">År</option>';
            $active = postval("b_aar");
            for ($i = ess::$b->date->get()->format("Y"); $i >= 1900; $i--) {
                echo '
					<option value="' . $i . '"' . ($i == $active ? ' selected="selected"' : '') . '>' . $i . '</option>';
            }
            echo '
				</select>
			</dd>
			
			<dd><input type="checkbox" name="forste_bruker" id="c1" /><label for="c1"> Jeg har ingen aktiv bruker fra før</label></dd>
		</dl>
		<p class="c">' . show_sbutton("Gå til neste trinn") . '</p>
	</div>
</form>';
        } else {
            ess::$b->page->add_js_domready('$("verife").focus();');
            echo '
<p><b>Verifiseringskode</b></p>
<p>Når du har mottatt e-post etter å ha fylt inn e-postadresse og fødelsdato, mottar du en verifiseringskode som fylles inn her. Du kan deretter fortsette din registrering.</p>
<form action="registrer" method="post">
	<input type="hidden" name="step" value="2" />
	<div class="registrer_felt">
		<boxes />
		<dl class="dd_right">
			<dt>Verifiseringskode</dt>
			<dd><input type="text" id="verife" name="e" value="' . htmlspecialchars(requestval("e")) . '" maxlength="32" class="styled w120" /></dd>
		</dl>
		<p class="c">' . show_sbutton("Valider", 'class="indent"') . '</p>
	</div>
	<p><a href="registrer">Tilbake</a></p>
</form>';
        }
    }
Exemple #28
0
    /**
     * Vis side med kart
     */
    public function show_full_page()
    {
        global $__server;
        // hent familierangering
        $ff_list = ff::get_fam_points_rank();
        // deaktiver høyre side
        //define("DISABLE_RIGHT_COL", true);
        ess::$b->page->add_css('
#default_main { overflow: visible }');
        ess::$b->page->add_js_domready('
	sm_scripts.load_hm();
	window.HM.addEvent("f-changed", function(data) {
		//$$(".bydeler_filter a").removeClass("active");
		$$(".bydeler_ressurs").setStyle("display", "none");
		$$(".bydeler_ressurs_"+data).setStyle("display", "block");
		//$("f_"+data).addClass("active");
	});
	window.HM.addEvent("f-removed", function() {
		//$$(".bydeler_filter a").removeClass("active");
		//$("f_").addClass("active");
		$$(".bydeler_ressurs").setStyle("display", "block");
	});
	window.HM.addEvent("b-added", function() {
		//$$(".bydeler_alt a").removeClass("active");
		//$("v_b").addClass("active");
		$$(".bydeler_br").setStyle("display", "none");
		$$(".bydeler_steder").setStyle("display", "block");
	});
	window.HM.addEvent("b-removed", function() {
		//$$(".bydeler_alt a").removeClass("active");
		//$("v_").addClass("active");
		$$(".bydeler_br").setStyle("display", "block");
		$$(".bydeler_steder").setStyle("display", "none");
	});
	
	$$(".bydeler_steder").setStyle("display", "none");
	$$(".bydeler_alt a").addEvent("click", function(e)
	{
		window.HM.remove("f");
		window.HM.set("b", "");
		e.stop();
	});
	
	$$(".bydeler_filter a").addEvent("click", function(e)
	{
		window.HM.remove("b");
		if (this.get("id") == "f_") window.HM.remove("f");
		else window.HM.set("f", this.get("id").substring(2));
		e.stop();
	});
	
	window.HM.recheck();
');
        // sett opp alle FF og sorter dem i y-retning
        $data = array();
        $pos_x = array();
        $pos_y = array();
        foreach ($this->bydeler as $id => $bydel) {
            if ($id == 0) {
                continue;
            }
            foreach ($bydel['ff'] as $row) {
                $pos_x[] = $row['br_pos_x'];
                $pos_y[] = $row['br_pos_y'];
                $type = ff::$types[$row['ff_type']];
                // familie
                if ($row['ff_type'] == 1) {
                    $eier = count($row['eier']) == 0 ? 'Ingen leder av broderskapet' : 'Styres av ' . self::list_players($row['eier']);
                    $class = "bydeler_ressurs_familie";
                    // antall poeng
                    if (isset($ff_list[$row['ff_id']]) && $ff_list[$row['ff_id']]->data['ff_is_crew'] == 0) {
                        $eier .= '<br />' . game::format_num($ff_list[$row['ff_id']]->data['ff_points_sum']) . ' poeng';
                    }
                } else {
                    if ($type['type'] == "bomberom") {
                        $eier = count($row['eier']) == 0 ? 'Ingen styrer bomberommet' : 'Styres av ' . self::list_players($row['eier']);
                    } else {
                        $eier = count($row['eier']) == 0 ? 'Ingen eier av firmaet' : 'Eies av ' . self::list_players($row['eier']);
                    }
                    $class = "bydeler_ressurs_firma bydeler_ressurs_{$type['type']}firma";
                }
                $data[] = '
		<a href="' . $__server['relative_path'] . '/ff/?ff_id=' . $row['ff_id'] . '" class="bydeler_ressurs ' . $class . '" style="left: ' . $row['br_pos_x'] . '%; top: ' . $row['br_pos_y'] . '%">
			<img class="bydeler_ressurs_t" src="' . htmlspecialchars($type['bydeler_graphic']) . '" alt="' . htmlspecialchars($type['bydeler_alt_pre']) . htmlspecialchars($row['ff_name']) . '" />
			<span class="bydeler_ressurs_tekst">
				' . htmlspecialchars($row['ff_name']) . '<span class="bydeler_owner"><br />
				' . $eier . '</span>
			</span>
			<img class="bydeler_ressurs_graphic" src="' . htmlspecialchars(ff::get_logo_path_static($row['ff_id'], $row['ff_logo_path'])) . '" alt="" />
		</a>';
            }
        }
        array_multisort($pos_y, $pos_x, $data);
        $bydeler_0 = $this->bydeler[0];
        unset($this->bydeler[0]);
        // sorter bydelene i y-retning
        $bydeler_x = array();
        $bydeler_y = array();
        foreach ($this->bydeler as $id => $bydel) {
            $bydeler_x[] = $bydel['bydel_x'];
            $bydeler_y[] = $bydel['bydel_y'];
        }
        array_multisort($bydeler_x, $bydeler_y, $this->bydeler);
        // invitasjoner til FF
        if (count($this->ff_invites) > 0) {
            echo '
<div class="bg1_c small">
	<h1 class="bg1">Invitasjoner<span class="left2"></span><span class="right2"></span></h1>
	<div class="bg1">';
            foreach ($this->ff_invites as $row) {
                $type = ff::$types[$row['ff_type']];
                echo '
		<p>Du er invitert til ' . $type['refobj'] . ' <a href="' . $__server['relative_path'] . '/ff/?ff_id=' . $row['ff_id'] . '">' . htmlspecialchars($row['ff_name']) . '</a> som ' . $type['priority'][$row['ffm_priority']] . ' (' . ess::$b->date->get($row['ffm_date_join'])->format(date::FORMAT_NOTIME) . ') - <a href="' . $__server['relative_path'] . '/ff/?ff_id=' . $row['ff_id'] . '">Godta/avslå</a></p>';
            }
            echo '
	</div>
</div>';
        }
        if (count($this->fff) > 0) {
            echo '
<div class="bg1_c medium bydeler_br bydeler_ressurs bydeler_ressurs_familie">
	<h1 class="bg1">Konkurranse om å danne broderskap<span class="left2"></span><span class="right2"></span></h1>
	<div class="bg1">
		<table class="table center tablem">
			<thead>
				<tr>
					<th>Avsluttes</th>
					<th>Gjenstår</th>
					<th>Antall broderskap</th>
					<th>Gjenstående broderskap</th>
					<th>&nbsp;</th>
				</tr>
			</thead>
			<tbody class="r">';
            $i = 0;
            $free = 0;
            foreach ($this->fff as $row) {
                if ($row['ff_count'] < ff::MAX_FFF_FF_COUNT) {
                    $free += ff::MAX_FFF_FF_COUNT - $row['ff_count'];
                }
                echo '
				<tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '>
					<td>' . ess::$b->date->get($row['fff_time_expire'])->format(date::FORMAT_SEC) . '</td>
					<td>' . game::timespan(max(time(), $row['fff_time_expire']), game::TIME_ABS) . '</td>
					<td>' . $row['ff_count'] . '</td>
					<td>' . $row['ff_count_active'] . '</td>
					<td><a href="' . $__server['relative_path'] . '/ff/?fff_id=' . $row['fff_id'] . '">Vis &raquo;</a></td>
				</tr>';
            }
            $create_link = login::$logged_in ? $this->up->rank['number'] < ff::$types[1]['priority_rank'][1] ? ' - Du har ikke høy nok rank til å opprette et broderskap' : ' - Du har høy nok rank - <a href="' . $__server['relative_path'] . '/ff/?create">Opprett broderskap &raquo;</a>' : '';
            echo '
			</tbody>
		</table>' . ($free > 0 ? '
		<p class="c" style="margin-top: 0">Det er ' . $free . ' ' . fword("ledig konkurranseplass", "ledige konkurranseplasser", $free) . $create_link . '</p>' : '
		<p class="c" style="margin-top: 0">Ingen ledige konkurranseplasser.</p>') . '
	</div>
</div>';
        }
        // topp rangerte familier
        if (count($ff_list) > 0) {
            echo '
<div class="bg1_c xxsmall bydeler_br bydeler_ressurs bydeler_ressurs_familie">
	<h1 class="bg1">Topp rangerte broderskap<span class="left"></span><span class="right"></span></h1>
	<div class="bg1">
		<dl class="dd_right">';
            $i = 0;
            foreach ($ff_list as $ff) {
                $title = "For rank til medlemmer: " . $ff->data['ff_points_up'] . " - For firma til medlemmer: " . $ff->data['ff_points_ff'] . " - For drap: " . $ff->data['ff_points_kill'];
                echo '
			<dt><a href="' . ess::$s['rpath'] . '/ff/?ff_id=' . $ff->id . '">' . htmlspecialchars($ff->data['ff_name']) . '</a></dt>
			<dd title="' . $title . '">' . game::format_num($ff->data['ff_points_sum']) . ' poeng</dd>';
                // vis kun 3 beste familiene
                if (++$i == 3) {
                    break;
                }
            }
            echo '
		</dl>
		<p class="c"><a href="' . ess::$s['rpath'] . '/node/19">Poenginformasjon</a></p>
	</div>
</div>';
        }
        kf_menu::$data['bydeler_menu'] = true;
        echo '
<h1 class="bydeler">Bydeler</h1>
<div class="bydeler">
	<div class="bydeler_kart bydeler_br">
		<img src="' . STATIC_LINK . '/themes/kofradia/drammen_stor.gif" class="bydeler_bg" />
		' . implode('', $data) . '
	</div>';
        // har vi noen FF som ikke er plassert?
        if ($bydeler_0['active']) {
            echo '
	<div class="bydeler_uplassert bydeler_br">';
            foreach ($bydeler_0['ff'] as $row) {
                $type = ff::$types[$row['ff_type']];
                // familie
                if ($row['ff_type'] == 1) {
                    $eier = count($row['eier']) == 0 ? 'Ingen leder av broderskapet' : 'Styres av ' . self::list_players($row['eier']);
                    $class = "bydeler_ressurs_familie";
                } else {
                    if ($type['type'] == "bomberom") {
                        $eier = count($row['eier']) == 0 ? 'Ingen styrer bomberommet' : 'Styres av ' . self::list_players($row['eier']);
                    } else {
                        $eier = count($row['eier']) == 0 ? 'Ingen eier av firmaet' : 'Eies av ' . self::list_players($row['eier']);
                    }
                    $class = "bydeler_ressurs_firma bydeler_ressurs_{$type['type']}firma";
                }
                echo '
		<div class="bydeler_uplassert_boks">
			<a href="' . $__server['relative_path'] . '/ff/?ff_id=' . $row['ff_id'] . '" class="bydeler_ressurs ' . $class . '">
				<img class="bydeler_ressurs_graphic" src="' . htmlspecialchars(ff::get_logo_path_static($row['ff_id'], $row['ff_logo_path'])) . '" alt="" />
				<span class="bydeler_ressurs_tekst">
					' . htmlspecialchars($row['ff_name']) . '<span class="bydeler_owner"><br />
					' . $eier . '</span>
				</span>
				<img class="bydeler_ressurs_t" src="' . htmlspecialchars($type['bydeler_graphic']) . '" alt="' . htmlspecialchars($type['bydeler_alt_pre']) . htmlspecialchars($row['ff_name']) . '" />
			</a>
		</div>';
            }
            echo '
	</div>';
        }
        echo '
	<div class="bydeler_kart bydeler_steder">
		<img src="' . STATIC_LINK . '/themes/kofradia/drammen_stor.gif" class="bydeler_bg" />';
        foreach ($this->bydeler as $bydel) {
            if ($bydel['active'] == 0) {
                continue;
            }
            if ($this->up) {
                $distance = self::calc_travel_distance($this->up->bydel, $bydel);
                $taxi_price = round($distance * self::TAXI_PRICE_KM);
                $taxi_points = round($distance * self::TAXI_POINTS_KM * $this->up->rank['number']);
            }
            echo '
		<div class="map_unit' . ($this->up && $this->up->bydel['id'] == $bydel['id'] ? ' map_active' : '') . '" style="left: ' . $bydel['bydel_x'] . '%; top: ' . $bydel['bydel_y'] . '%" id="map_link_' . $bydel['id'] . '">
			<div class="map_title">
				<p class="map_link"><b><b><b>' . htmlspecialchars($bydel['name']) . '</b></b></b></p>
				<div class="bydeler_sted">
					<div class="bydeler_sted_info">
						<dl class="dd_right">
							<dt>Spillere</dt>
							<dd>' . game::format_number($bydel['num_players']) . '</dd>
							<dt>Penger i omløp</dt>
							<dd>' . game::format_cash($bydel['sum_money']) . '</dd>
						</dl>';
            if (!$this->up) {
            } elseif ($this->up->bydel['id'] == $bydel['id']) {
                echo '
						<p>Du befinner deg i denne bydelen.</p>';
            } elseif ($this->up->fengsel_check()) {
                echo '
						<p>Du er i fengsel og kan ikke reise.</p>';
            } elseif ($this->up->bomberom_check()) {
                echo '
						<p>Du er i bomberom og kan ikke reise.</p>';
            } else {
                echo '
						<div class="bydeler_reise c">
							<form action="bydeler" method="post">
								<input type="hidden" name="reise" value="' . htmlspecialchars($bydel['name']) . '" />';
                // taxi
                if (!$this->up->energy_check(self::TAXI_ENERGY * 1.3)) {
                    echo '
								<p>Du har ikke nok energi til å ta taxi hit.</p>';
                } elseif ($this->up->data['up_points'] < $taxi_points * 2) {
                    echo '
								<p>Du har ikke høy nok rank til å ta taxi hit.</p>';
                } else {
                    echo '
								<p>' . show_sbutton("Ta taxi (" . game::format_cash($taxi_price) . ", " . game::format_number(round($taxi_points)) . " poeng)", 'name="taxi"') . '</p>';
                }
                // gta
                if ($this->gta_count == 0) {
                    echo '
								<p>Du har ingen biler i bydelen du oppholder deg i for å reise med.</p>';
                } elseif (!$this->gta_garage[$bydel['id']]['garage']) {
                    echo '
								<p>Det er ingen garasje i denne bydelen.</p>';
                } elseif ($this->gta_garage[$bydel['id']]['garage_free'] == 0) {
                    echo '
								<p>Det er ingen ledige plasser i garasjen i denne bydelen.</p>';
                } else {
                    echo '
								<p>' . show_sbutton("Kjør egen bil", 'name="gta"') . '</p>';
                }
                // teleportere
                if (access::is_nostat()) {
                    echo '
								<p>' . show_sbutton("Teleporter hit (nostat)", 'name="teleporter"') . '</p>';
                }
                echo '
							</form>
						</div>';
            }
            echo '
					</div>
				</div>
			</div>
		</div>';
        }
        echo '
	</div>';
        echo '
</div>';
        ess::$b->page->load();
    }
Exemple #29
0
					<option value="1200">Siste 20 minuttene</option>
					<option value="1500">Siste 25 minuttene</option>
					<option value="1800">Siste 30 minuttene</option>
					<option value="3600">Siste timen</option>
					<option value="today">I dag</option>
					<option value="d1">Siden i går</option>
					<option value="d2">Siden i forigårs</option>
					<option value="d3">Siden 3 dager</option>
					<option value="24t">Siste 24 timer</option>
					<option value="1u">Siste uken</option>
				</select>
				<noscript>
					<input type="submit" value="Go" />
				</noscript>
			</div>
			<p>Denne listen viser hvem som har vært aktive i løpet av siste ' . game::timespan($time, game::TIME_FULL) . '</p>
		</form>';
// hent brukerne
$result = \Kofradia\DB::get()->query("SELECT up_id, up_name, up_access_level FROM users_players WHERE up_last_online >= " . (time() - $time) . " ORDER BY up_name");
// sett opp alfabetisk liste
$liste = array();
while ($row = $result->fetch()) {
    $liste[mb_strtolower(mb_substr($row['up_name'], 0, 1))][] = game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level']);
}
echo '
		<table class="table tablemb">
			<thead>
				<tr>
					<th colspan="2">Spillere pålogget - ' . game::format_number($result->rowCount()) . ' spiller' . ($result->rowCount() == 1 ? '' : 'e') . '</th>
				</tr>
			</thead>
Exemple #30
0
    public static function format_data($data, $type = "bb", $args = null)
    {
        global $_base;
        switch ($type) {
            case "bb":
            case "signature":
                // bb kode
                return game::bb_to_html($data);
                // bb-kode eller egendefinert tekst hvis bb-kode er tom
            // bb-kode eller egendefinert tekst hvis bb-kode er tom
            case "bb-opt":
                $bb = trim(game::bb_to_html($data));
                if ($bb == "") {
                    return $args;
                }
                return $bb;
            case "music_pre":
                return preg_replace('~\\[music\\](https?://.+?)\\[/music\\]~ieu', 'game::music_add(\'$1\')', $data);
            case "music_post":
                return game::music_replace($data);
            case "profile":
                $data = game::format_data($data, "music_pre");
                // sett opp ranken
                $rank = game::rank_info($args->data['up_points'], $args->data['upr_rank_pos'], $args->data['up_access_level']);
                // diverse bb koder
                $data = str_replace(array("[counter]", "[visits]", "[visitor]", "[rank]", "[bank]", "[cash]", "[money]", "[renter]", "[pm_ulest]", "[pengerank]"), array('<img src="&rpath;/counter?count=' . $args->data['up_profile_hits'] . '" alt="Antall visninger: ' . $args->data['up_profile_hits'] . '" />', $args->data['up_profile_hits'], game::profile_link(), $rank['orig'] ? $rank['orig'] : $rank['name'], game::format_cash($args->data['up_bank']), game::format_cash($args->data['up_cash']), game::format_cash($args->data['up_cash'] + $args->data['up_bank']), game::format_cash($args->data['up_interest_last']), game::format_number($args->user->data['u_inbox_new']), game::cash_name($args->data['up_cash'] + $args->data['up_bank'])), game::bb_to_html($data));
                // rankbar
                $type = false;
                $match_rank = preg_match("~\\[rank_(neste_tid|neste_dato|tid|dato)\\]~iu", $data);
                if (preg_match("~\\[rankbar( type=(1|2))?\\]~iu", $data, $type) || $match_rank) {
                    // høyeste rank?
                    if ($rank['need_points'] == 0) {
                        global $_game;
                        $prosent = $args->data['up_points'] / game::$ranks['items_number'][count(game::$ranks['items_number'])]['points'] * 100;
                        $rankbar_total = '
<div class="progressbar">
	<div class="progress"><p>' . game::format_num($prosent, 3) . ' %</p></div>
</div>';
                        $rankbar_total2 = '
<div class="progressbar" style="margin-top: 1em">
	<div class="progress"><p>' . game::format_num($prosent, 3) . ' %</p></div>
</div>';
                        $data = str_replace(array("[rankbar]", "[rankbar type=1]", "[rankbar type=2]", "[rank_tid]", "[rank_dato]", "[rank_neste_tid]", "[rank_neste_dato]"), array($rankbar_total . $rankbar_total2, $rankbar_total, $rankbar_total, "Oppnådd", "Oppnådd", "Oppnådd", "Oppnådd"), $data);
                    } else {
                        // i forhold til den høyeste ranken
                        global $_game;
                        // antall poeng for den høyeste ranken
                        $points_max = game::$ranks['items'];
                        end($points_max);
                        $points_max = current($points_max);
                        $points_max = $points_max['points'];
                        // hvor langt ifra er vi?
                        $percent_total = round($args->data['up_points'] / $points_max, 2) * 100;
                        #if ($percent_total > 100) $percent_total = 100;
                        if ($percent_total == 0) {
                            $percent_total = 0.01;
                        }
                        $rankbar_total = '
<div class="progressbar">
	<div class="progress" style="width: ' . floor($percent_total) . '%"><p>' . game::format_num($percent_total, 2) . ' % i forhold til høyeste rank.</p></div>
</div>';
                        // i forhold til neste rank
                        $points_rank = $args->data['up_points'] - $rank['points'];
                        $percent = round($points_rank / $rank['need_points'] * 100, 2);
                        #if ($percent  )
                        $rankbar_next = '
<div class="progressbar">
	<div class="progress" style="width: ' . floor($percent) . '%"><p>' . game::format_num($percent, 2) . ' % i forhold til neste rank</p></div>
</div>';
                        $rankbar_next2 = '
<div class="progressbar" style="margin-top: 1em">
	<div class="progress" style="width: ' . floor($percent) . '%"><p>' . game::format_num($percent, 2) . ' % i forhold til neste rank</p></div>
</div>';
                        // fiks bb kodene
                        $data = str_replace(array("[rankbar]", "[rankbar type=1]", "[rankbar type=2]"), array($rankbar_total . $rankbar_next2, $rankbar_total, $rankbar_next), $data);
                        // beregn antatt tid det tar å nå høyeste rank
                        if ($match_rank) {
                            // hent ut aktiviteten de siste X dagene
                            $expire = ess::$b->date->get();
                            $expire->modify("-21 days");
                            $expire = max($args->data['up_created_time'], $expire->format("U"));
                            // maks tid: siste 21 dager eller siden reg (om registrert innen 30 dager)
                            $result = \Kofradia\DB::get()->query("SELECT SUM(uhi_points) FROM users_hits WHERE uhi_up_id = {$args->id} AND uhi_secs_hour >= {$expire}");
                            $points = (int) $result->fetchColumn(0);
                            if ($points == 0) {
                                $data = str_replace(array("[rank_tid]", "[rank_dato]", "[rank_neste_tid]", "[rank_neste_dato]"), array("ukjent", "ukjent", "ukjent", "ukjent"), $data);
                            } else {
                                // antall sekunder poengene skal fordeles på
                                $time_elapsed = time() - $expire;
                                // beregn til neste rank og erstatt BB-kode
                                $need = $rank['points'] + $rank['need_points'] - $args->data['up_points'];
                                $time_left = $need / $points * $time_elapsed;
                                if ($time_left > 63072000) {
                                    $text_left = "over 2 år";
                                    $text_date = "om over 2 år";
                                } else {
                                    $text_left = game::timespan($time_left);
                                    $text_date = ess::$b->date->get($time_left + time())->format(date::FORMAT_NOTIME);
                                }
                                $data = str_replace(array("[rank_neste_tid]", "[rank_neste_dato]"), array($text_left, $text_date), $data);
                                // beregn til øverste rank og erstatt BB-kode
                                $need = $points_max - $args->data['up_points'];
                                $time_left = $need / $points * $time_elapsed;
                                if ($time_left > 63072000) {
                                    $text_left = "over 2 år";
                                    $text_date = "om over 2 år";
                                } else {
                                    $text_left = game::timespan($time_left);
                                    $text_date = ess::$b->date->get($time_left + time())->format(date::FORMAT_NOTIME);
                                }
                                $data = str_replace(array("[rank_tid]", "[rank_dato]"), array($text_left, $text_date), $data);
                            }
                        }
                    }
                }
                // kontaktliste?
                if (mb_strpos($data, "[kontakter]") !== false) {
                    // hent kontaktliste
                    $result = \Kofradia\DB::get()->query("SELECT uc_contact_up_id, up_name, up_access_level, up_last_online FROM users_contacts LEFT JOIN users_players ON uc_contact_up_id = up_id WHERE uc_u_id = {$args->data['up_u_id']} AND uc_type = 1 ORDER BY up_name");
                    $html = '
<table class="table l tablem">
	<thead>
		<tr>
			<th>Spiller</th>
			<th>Sist pålogget</th>
		</tr>
	</thead>
	<tbody>';
                    while ($row = $result->fetch()) {
                        $html .= '
		<tr>
			<td>' . game::profile_link($row['uc_contact_up_id'], $row['up_name'], $row['up_access_level']) . '</td>
			<td class="r">' . game::timespan($row['up_last_online'], game::TIME_ABS) . '</td>
		</tr>';
                    }
                    $html .= '
	</tbody>
</table>';
                    // sett inn som bb kode
                    $data = str_replace("[kontakter]", $html, $data);
                }
                // blokkeringliste?
                if (mb_strpos($data, "[blokkert]") !== false) {
                    // hent blokkeringliste
                    $result = \Kofradia\DB::get()->query("SELECT uc_contact_up_id, up_name, up_access_level, up_last_online FROM users_contacts LEFT JOIN users_players ON uc_contact_up_id = up_id WHERE uc_u_id = {$args->data['up_u_id']} AND uc_type = 2 ORDER BY up_name");
                    $html = '
<table class="table l tablem">
	<thead>
		<tr>
			<th>Spiller</th>
			<th>Sist pålogget</th>
		</tr>
	</thead>
	<tbody>';
                    while ($row = $result->fetch()) {
                        $html .= '
		<tr>
			<td>' . game::profile_link($row['uc_contact_up_id'], $row['up_name'], $row['up_access_level']) . '</td>
			<td class="r">' . game::timespan($row['up_last_online'], game::TIME_ABS) . '</td>
		</tr>';
                    }
                    $html .= '
	</thead>
</table>';
                    // sett inn som bb kode
                    $data = str_replace("[blokkert]", $html, $data);
                }
                return game::format_data($data, "music_post");
            default:
                // ukjent!
                throw new HSException("Ukjent type ({$type})");
        }
        return false;
    }