Ejemplo n.º 1
0
    /** Søkefunksjon */
    public static function action_search()
    {
        access::need("crewet");
        ess::$b->page->add_title("Søk");
        // hvem som skal ha kunnet skrevet det man søker på
        $search_from = array(1 => array("Alle", ""), array("Meg selv", " AND sum_up_id = up_ref.up_id"), array("Andre", " AND sum_up_id != up_ref.up_id"), array('Spesifiser', NULL, array()));
        $id = requestval("f");
        $search_from_id = isset($search_from[$id]) ? $id : 1;
        // sjekk etter spillere?
        if ($search_from_id == 4) {
            $name = trim(postval("up"));
            // sett opp brukernavnene
            $names = explode(",", $name);
            foreach ($names as $name) {
                $name = trim($name);
                if (empty($name)) {
                    continue;
                }
                if (preg_match('/^[0-9a-zA-Z\\-_ ]+$/Du', $name)) {
                    $search_from[4][2][] = $name;
                } else {
                    ess::$b->page->add_message('Ugyldig spillernavn: <b>' . htmlspecialchars($name) . '</b>.', "error");
                }
            }
            if (count($search_from[4][2]) == 0) {
                $search_from_id = 1;
            } else {
                $search_from[4][1] = " AND up_sum.up_name IN (" . implode(",", array_map(array(ess::$b->db, "quote"), $search_from[4][2])) . ")";
            }
        }
        // søke kun blant den som sendte inn henvendelsen eller de som svarte?
        // MERK: tar ikke høyde for at brukere skifter spiller
        $search_by = array(1 => array("Alle", ""), array("Innsender", " AND sum_up_id = su_up_id"), array("Crewet", " AND sum_up_id != su_up_id"));
        $id = requestval("fb");
        $search_by_id = isset($search_by[$id]) ? $id : 1;
        // kategorier
        $search_kat = array();
        foreach (self::$kategorier as $info) {
            $search_kat[$info['id']] = array($info['name'], "su_category = {$info['id']}");
        }
        $search_kat_active = array();
        $search_kat_query = array();
        foreach ($_REQUEST as $key => $dummy) {
            $match = false;
            if (preg_match("/^k(\\d+)\$/Du", $key, $match)) {
                if (isset($search_kat[$match[1]])) {
                    $search_kat_active[] = $match[1];
                    $search_kat_query[] = $search_kat[$match[1]][1];
                }
            }
        }
        if (count($search_kat_query) > 0 && count($search_kat_query) != count($search_kat)) {
            $search_kat_query = " AND (" . implode(" OR ", $search_kat_query) . ")";
            $more = true;
        } else {
            if (count($search_kat_active) == 0) {
                $search_kat_active = array_keys($search_kat);
            }
            $search_kat_query = "";
        }
        // sortering
        $sort = new sorts("sort");
        $sort->append("asc", "Avsender", "up_name, sum_time DESC");
        $sort->append("desc", "Avsender", "up_name DESC, sum_time DESC");
        $sort->append("asc", "Tittel", "su_title, sum_time DESC");
        $sort->append("desc", "Tittel", "su_title DESC, sum_time DESC");
        #$sort->append("asc", "Innhold", "id_text");
        #$sort->append("desc", "Innhold", "id_text DESC");
        $sort->append("asc", "Tid", "sum_time");
        $sort->append("desc", "Tid", "sum_time DESC");
        $sort->set_active(postval("sort"), 5);
        // søkeskjema
        echo '
<h1>Søk i support</h1>
<p class="h_right"><a href="./">Tilbake</a></p>
<form action="" method="post">
	<div class="section" style="width: 410px; margin-left: auto; margin-right: auto">
		<h2>Søk</h2>
		<dl class="dl_20 dl_2x">
			<dt>Tittel</dt>
			<dd><input type="text" name="title" value="' . htmlspecialchars(postval("title")) . '" class="styled w150" /></dd>
			
			<dt>Innhold</dt>
			<dd><input type="text" name="text" value="' . htmlspecialchars(postval("text")) . '" class="styled w300" /></dd>
			
			<dt>Av?</dt>
			<dd>';
        $i = 0;
        foreach ($search_from as $key => $item) {
            if (++$i == count($search_from)) {
                break;
            }
            echo '
				<input type="radio" id="f_' . $key . '" name="f" value="' . $key . '"' . ($search_from_id == $key ? ' checked="checked"' : '') . ' /><label for="f_' . $key . '"> ' . htmlspecialchars($item[0]) . '</label>';
        }
        echo '
			</dd>
			
			<dt>&nbsp;</dt>
			<dd><input type="radio" id="f_' . $key . '" name="f" value="' . $key . '"' . ($search_from_id == $key ? ' checked="checked"' : '') . ' onclick="$(\'u_name\').focus()" /><label for="f_' . $key . '"> Spesifiser: </label><input type="text" name="up" value="' . htmlspecialchars(postval("up")) . '" class="styled w100" id="u_name" onfocus="$(\'f_' . $key . '\').checked=true" /></dd>
			
			<dt>Hvilke meldinger?</dt>
			<dd>';
        foreach ($search_by as $key => $item) {
            echo '
				<input type="radio" id="fb_' . $key . '" name="fb" value="' . $key . '"' . ($search_by_id == $key ? ' checked="checked"' : '') . ' /><label for="fb_' . $key . '"> ' . htmlspecialchars($item[0]) . '</label>';
        }
        echo '
			</dd>
			
			<dt>Kategorier</dt>
			<dd>';
        $i = 0;
        foreach ($search_kat as $key => $item) {
            if ($i++ > 0) {
                echo '<br />';
            }
            echo '
					<input type="checkbox" id="kat?' . $key . '" name="k' . $key . '" value="1"' . (in_array($key, $search_kat_active) ? ' checked="checked"' : '') . ' /><label for="kat_' . $key . '"> ' . htmlspecialchars($item[0]) . '</label>';
        }
        echo '
			</dd>
		</dl>
		<h3 class="c">
			' . show_sbutton("Utfør søk", 'name="search"') . '
		</h3>
	</div>
</form>';
        // søke?
        if (isset($_POST['search'])) {
            $title_search = postval("title");
            $text_search = postval("text");
            // finn ut delene av spørringen
            $title_parts = search_query($title_search);
            $text_parts = search_query($text_search);
            if (count($title_parts[0]) == 0 && count($text_parts[0]) == 0 && $search_from_id != 4 && $search_kat_query == "") {
                echo '
<h2>Søkeresultater</h2>
<p>Ingen søkekriterier.</p>';
            } else {
                // sett opp søkespørringen
                $search = "";
                if (count($title_parts[0]) > 0) {
                    $search .= " AND su_title" . implode(" AND su_title", $title_parts[0]);
                }
                if (count($text_parts[0]) > 0) {
                    $search .= " AND sum_text" . implode(" AND sum_text", $text_parts[0]);
                }
                // sortering
                $sort_info = $sort->active();
                // sidetall - hent henvendelsene på denne siden
                $pagei = new pagei(pagei::ACTIVE_POST, "side", pagei::PER_PAGE, 50);
                $result = $pagei->query("\n\t\t\t\t\tSELECT su_id, su_up_id, su_category, su_title, su_time, su_solved, sum_id, sum_up_id, sum_time, sum_text, up_sum.up_name, up_sum.up_access_level\n\t\t\t\t\tFROM support\n\t\t\t\t\t\tJOIN support_messages ON sum_su_id = su_id\n\t\t\t\t\t\tJOIN users_players up_sum ON up_sum.up_id = sum_up_id,\n\t\t\t\t\t\tusers_players up_ref\n\t\t\t\t\tWHERE up_ref.up_u_id = " . login::$user->id . "{$search_from[$search_from_id][1]}{$search_by[$search_by_id][1]}{$search_kat_query}{$search}\n\t\t\t\t\tGROUP BY sum_id" . (count($text_parts[0]) == 0 && $search_from_id == 1 ? ", su_id" : "") . "\n\t\t\t\t\tORDER BY {$sort_info['params']}", array_merge($title_parts[2], $text_parts[2]));
                $info = array();
                foreach ($title_parts[1] as $part) {
                    $info[] = '<b>Tittel:</b> ' . htmlspecialchars($part);
                }
                foreach ($text_parts[1] as $part) {
                    $info[] = '<b>Innhold:</b> ' . htmlspecialchars($part);
                }
                if ($search_from_id == 4) {
                    if (count($search_from[4][2]) == 1) {
                        $info[] = '<b>Spiller:</b> <user="******" />';
                    } else {
                        $u = array();
                        foreach ($search_from[4][2] as $name) {
                            $u[] = '<user="******" />';
                        }
                        $info[] = '<b>Spiller:</b> ' . implode(" eller ", $u);
                    }
                }
                $info = implode(" ", $info);
                echo '
<h2>Søkeresultater</h2>
<p>Søkekriterier: ' . $info . '</p>';
                // fant vi noe?
                if ($pagei->total == 0) {
                    echo '
<p>Fant ingen treff.</p>';
                } else {
                    echo '
<p>Antall treff: <b>' . $pagei->total . '</b></p>
<form action="" method="post">';
                    foreach ($_POST as $key => $value) {
                        if ($key == "side" || $key == "sort") {
                            continue;
                        }
                        echo '
	<input type="hidden" name="' . htmlspecialchars($key) . '" value="' . htmlspecialchars($value) . '" />';
                    }
                    echo '
	<input type="hidden" name="sort" id="sort_sort" value="' . $sort->active . '" />
	<table class="table' . ($pagei->pages == 1 ? ' tablemb' : '') . '" width="100%">
		<thead>
			<tr>
				<th><span class="tools_r">' . $sort->show_button(0, 1) . '</span> Spiller</th>
				<th><span class="tools_r">' . $sort->show_button(2, 3) . '</span> Henvendelse</th>
				<th><span class="tools_r">Tekst</th>
				<th><span class="tools_r">' . $sort->show_button(4, 5) . '</span> Tid</th>
			</tr>
		</thead>
		<tbody>';
                    ess::$b->page->add_css('
.su_not_solved { color: #FF0000; font-weight: bold }
.sum_up { white-space: nowrap; width: 100px }
.su_time { text-align: center; white-space: nowrap; color: #888888; width: 100px }');
                    $i = 0;
                    while ($row = $result->fetch()) {
                        $content = trim(strip_tags(game::bb_to_html($row['sum_text'])));
                        $length = mb_strlen($content);
                        $max = 60;
                        if (mb_strlen($content) > $max) {
                            $content = mb_substr($content, 0, $max - 4) . " ...";
                        }
                        echo '
			<tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '>
				<td class="sum_up">' . game::profile_link($row['sum_up_id'], $row['up_name'], $row['up_access_level']) . '</td>
				<td><a href="./?a=show&amp;su_id=' . $row['su_id'] . '">' . htmlspecialchars($row['su_title']) . '</a>' . ($row['su_solved'] == 0 ? ' <span class="su_not_solved">(Uløst)</span>' : '') . '</td>
				<td class="dark">' . htmlspecialchars($content) . ' (' . $length . ' tegn)</td>
				<td class="su_time">' . ess::$b->date->get($row['sum_time'])->format() . '</td>
			</tr>';
                    }
                    echo '
		</tbody>
	</table>';
                    // flere sider?
                    if ($pagei->pages > 1) {
                        echo '
	<div class="hr"></div>
	<p class="c">
		' . $pagei->pagenumbers("input") . '
	</p>';
                    }
                    echo '
</form>';
                }
            }
        }
    }
Ejemplo n.º 2
0
<?php

require "../../app/ajax.php";
// mangler tekst?
if (!isset($_POST['text'])) {
    ajax::text("ERROR:MISSING", ajax::TYPE_INVALID);
}
global $__server;
ajax::essentials();
// logg
$name = login::$logged_in ? login::$user->player->data['up_name'] : '*ukjent spiller*';
$ref = isset($_SERVER['HTTP_REFERER']) ? ' - referer: ' . $_SERVER['HTTP_REFERER'] : ' - ingen referer';
putlog("LOG", "%c3%bMIN-STATUS:%b%c %u{$name}%u hentet HTML for BB-kode{$ref}");
// sett opp html
$bb = parse_html(game::bb_to_html($_POST['text']));
// send raw html?
if (isset($_POST['plain'])) {
    ajax::text($bb);
}
// send inni xml element
ajax::xml('<content>' . htmlspecialchars($bb) . '</content>');
Ejemplo n.º 3
0
access::no_guest();
$_base->page->add_title("BB-testing");
$_base->page->add_js_domready('
	new Element("input", {"type": "button", "value": "Vis resultat med AJAX", "class": "button"}).addEvent("click", function()
	{
		$("ajaxcontainer").setStyle("display", "block");
		$("ajaxcontent").set("html", "<p>Henter data..</p>");
		preview($("textcontent").value, $("ajaxcontent"));
		
		//preview_bb(event, $("textcontent").value, ["ajaxcontainer"], "ajaxcontent");
	}).inject($("ajaxbutton"));');
echo '
<div class="bg1_c large">
	<h1 class="bg1">BB-testing<span class="left"></span><span class="right"></span></h1>
	<div class="bg1">
		<p>Her kan du teste diverse BB-koder. Du kan også forhåndsvise profilen din på <a href="' . $__server['relative_path'] . '/min_side?a=profil">rediger profil</a>.</p>
		<form action="" method="post">
			<p><b>BB-kode</b>: (<a href="' . ess::$s['relative_path'] . '/node/11">Hjelp</a>)</p>
			<p><textarea name="bb" rows="13" cols="100" style="width: 97%" id="textcontent">' . htmlspecialchars(postval("bb")) . '</textarea></p>
			<p class="c">' . show_sbutton("Vis resultat") . ' <span id="ajaxbutton"></span></p>
		</form>
	</div>
</div>

<div class="bg1_c large' . (!isset($_POST['bb']) ? ' hide' : '') . '" id="ajaxcontainer">
	<h1 class="bg1">Resultat<span class="left"></span><span class="right"></span></h1>
	<div class="bg1">
		<div class="p" id="ajaxcontent">' . game::bb_to_html(postval("bb")) . '</div>
	</div>
</div>';
$_base->page->load();
Ejemplo n.º 4
0
    }
    echo '
			</ul>';
} else {
    echo '
			<p>Spilleren har ikke oppnådd noen prestasjoner.</p>';
}
echo '
		</div>';
echo '
	</div>
	<div class="clear"></div>
</div>';
// vise signaturen?
if (isset($_GET['signature'])) {
    $signature = game::bb_to_html($player->data['up_forum_signature']);
    ess::$b->page->add_css('
.profile_signature {
	background-color: #222222;
	margin: 1px 0 0 0;
	padding: 8px 10px 9px;
	font-size: 10px;
	text-align: center;
	overflow: hidden;
	line-height: 1.5em;
}
.profile_signature_empty {
	color: #555555;
}
');
    echo '
Ejemplo n.º 5
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;
 }
Ejemplo n.º 6
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>';
        }
    }
Ejemplo n.º 7
0
    $data .= '
<div class="rap_wrap">
	<p class="rap_time">Innsendt <span>' . ess::$b->date->get($row['r_time'])->format() . '</span></p>
	<p class="rap_w"><user id="' . $row['r_source_up_id'] . '" /> rapporterte <span class="rap_u"><user id="' . $row['r_up_id'] . '" /></span></p>
	<div class="col2_w">
		<div class="col_w left">
			<div class="col">
				<p>Rapportert: <a href="' . rapportering::generate_link($row) . '">' . rapportering::$types[$row['r_type']] . '</a></p>';
    if ($row['r_state'] <= 0) {
        $data .= '
				<p><b>Ubehandlet rapportering</b></p>';
    } elseif ($row['r_state'] == 1) {
        $data .= '
				<p>Blir behandlet av <user id="' . $row['r_crew_up_id'] . '" /><br />(' . ess::$b->date->get($row['r_crew_time'])->format() . ')</p>';
    } else {
        $data .= '
				<p>Behandlet av <user id="' . $row['r_crew_up_id'] . '" /><br />(' . ess::$b->date->get($row['r_crew_time'])->format() . ')</p>';
    }
    $data .= '
			</div>
		</div>
		<div class="col_w right">
			<div class="col rap_note">' . game::bb_to_html($row['r_note']) . '</div>' . ($row['r_state'] == 2 ? '
			<div class="col rap_note">' . game::bb_to_html($row['r_crew_note']) . '</div>' : '') . '
		</div>
	</div>
</div>';
}
$data .= '
<p class="c">' . $pagei->pagenumbers_ajax() . '</p>';
ajax::html(parse_html($data));
Ejemplo n.º 8
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;
    }
Ejemplo n.º 9
0
    /**
     * Sett opp HTML for svar
     */
    public function reply_format($row, $num, $highlight, $new)
    {
        global $__server;
        $ret = '
	<div class="thread' . ($highlight ? ' thread_highlight scroll_here' : '') . ($new ? ' thread_ny' : '') . ($num == 1 ? ' first' : '') . ($row['im_deleted'] != 0 ? ' deleted' : '') . '" id="m' . $row['im_id'] . '">
		<div class="title">
			<div class="title_left">#' . $num . ' - Av <user id="' . $row['im_up_id'] . '" />' . ($new ? ' <span class="ny">(Ny!)</span>' : '') . '</div>' . (!$this->restrict ? $row['im_deleted'] == 0 ? '
			<a href="' . game::address($__server['relative_path'] . '/innboks_les', $_GET, array(), array("im_del" => $row['im_id'], "sid" => login::$info['ses_id'])) . '">Slett</a>' : '
			<a href="' . game::address($__server['relative_path'] . '/innboks_les', $_GET, array(), array("im_restore" => $row['im_id'], "sid" => login::$info['ses_id'])) . '">Gjenopprett</a>' : '') . '
			' . ess::$b->date->get($row['im_time'])->format(date::FORMAT_SEC) . '
		</div>
		<div class="text">
			<div class="p">' . game::bb_to_html($row['id_text']) . '</div>
		</div>';
        // rapportering
        if ($row['im_up_id'] != login::$user->player->id) {
            // rapportert?
            if ($row['r_time']) {
                $ret .= '
			<p class="inbox_report_link">Rapportert ' . ess::$b->date->get($row['r_time'])->format() . '</p>';
            } else {
                $ret .= '
			<p class="inbox_report_link"><a href="js" class="report_link" rel="pm,' . $row['im_id'] . ',1">Rapporter melding</a></p>';
            }
        }
        $ret .= '
	</div>';
        return $ret;
    }
Ejemplo n.º 10
0
		<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
		<div class="section" style="width: 270px; margin-left: auto; margin-right: auto">
			<h2>Informasjon</h2>
			<dl class="dl_30 dl_2x">
				<dt>Spiller</dt>
				<dd>' . $player->profile_link() . '</dd>
				
				<dt>Type</dt>
				<dd>' . (!$is_block ? 'Kontakt' : 'Blokkering') . '</dd>';
if ($edit) {
    echo '
				<dt>Lagt til</dt>
				<dd>' . \ess::$b->date->get($contact->data['uc_time'])->format(date::FORMAT_SEC) . '</dd>';
}
echo '			
				<dt>' . (!$is_block == 1 ? 'Informasjon' : 'Begrunnelse') . '</dt>
				<dd>
					<textarea name="info" rows="5" cols="25" style="width: 165px" id="ptx">' . htmlspecialchars(postval("info", $info)) . '</textarea>
				</dd>
				
				<dt' . (isset($_POST['preview']) && isset($_POST['info']) ? '' : ' style="display: none"') . ' id="pdt">Forhåndsvisning</dt>
				<dd' . (isset($_POST['preview']) && isset($_POST['info']) ? '' : ' style="display: none"') . ' id="pdd">' . (!isset($_POST['info']) || empty($_POST['info']) ? 'Tomt?!' : \game::bb_to_html($_POST['info'])) . '</dd>
				<div class="clear"></div>
			</dl>
			<h3 class="c">
				' . ($edit ? show_sbutton("Lagre", 'name="save"') : show_sbutton("Legg til", 'name="add"')) . '
				' . show_sbutton("Avbryt", 'name="abort"') . '
				' . show_sbutton("Forhåndsvis", 'name="preview" onclick="previewDL(event, \'ptx\', \'pdt\', \'pdd\')"') . '
			</h3>
		</div>
	</form>';
Ejemplo n.º 11
0
    /**
     * Vis auksjonen
     */
    protected function show()
    {
        // hent budet som leder, evt. vant
        $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT ab_up_id, ab_bid, ab_time\n\t\t\tFROM auksjoner_bud\n\t\t\tWHERE ab_a_id = {$this->auksjon->id} AND ab_active != 0\n\t\t\tORDER BY ab_time DESC\n\t\t\tLIMIT 1");
        $bud_lead = $result->fetch();
        // hent alle budene
        $pagei = new pagei(pagei::ACTIVE_GET, "side", pagei::PER_PAGE, 30);
        $result = $pagei->query("\n\t\t\tSELECT ab_up_id, ab_bid, ab_time, ab_active\n\t\t\tFROM auksjoner_bud\n\t\t\tWHERE ab_a_id = {$this->auksjon->id}\n\t\t\tORDER BY ab_time DESC");
        $bud = array();
        while ($row = $result->fetch()) {
            $bud[] = $row;
        }
        // sjekk om vi har bud
        $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT ab_bid, ab_time\n\t\t\tFROM auksjoner_bud\n\t\t\tWHERE ab_a_id = {$this->auksjon->id} AND ab_up_id = {$this->up->id} AND ab_active != 0");
        $bud_own = $result->fetch();
        $bud_own_locked = $this->auksjon->data['a_type'] == auksjon::TYPE_KULER || time() > $bud_own['ab_time'] + auksjon::MAX_TIME_REMOVE;
        $type = auksjon_type::get($this->auksjon->data['a_type']);
        // beregn minstepris
        $minstepris = $bud_lead ? bcadd($bud_lead['ab_bid'], $this->auksjon->data['a_bid_jump']) : $this->auksjon->data['a_bid_start'];
        // sett opp tittel/beskrivelse
        $title = htmlspecialchars($this->auksjon->data['a_title']);
        // firma/familie?
        if ($this->auksjon->data['a_type'] == auksjon::TYPE_FIRMA) {
            $ff_id = $this->auksjon->params->get("ff_id");
            if ($ff_id) {
                $title = '<a href="' . ess::$s['relative_path'] . '/ff/?ff_id=' . $ff_id . '">' . $title . '</a>';
            }
        }
        echo '
<div class="col2_w" style="margin: 40px"> 
	<div class="col_w left" style="width: 45%">
		<div class="col" style="margin-right: 20px">
			<div class="bg1_c">
				<h1 class="bg1">Auksjon<span class="left"></span><span class="right"></span></h1>
				<div class="bg1">
					<p class="c"><a href="auksjoner?t=' . $this->auksjon->data['a_type'] . '">Tilbake til oversikt</a></p>
					<dl class="dd_right">
						<dt>Beskrivelse</dt>
						<dd>' . $title . '</dd>' . ($type->have_up ? '
						<dt>Spiller</dt>
						<dd>' . ($this->auksjon->data['a_up_id'] ? '<user id="' . $this->auksjon->data['a_up_id'] . '" />' : 'Ingen spiller') . '</dd>' : '');
        // ikke startet?
        if ($this->auksjon->status == auksjon::STATUS_WAIT) {
            echo '
						<dt>Auksjonsstart</dt>
						<dd>' . ess::$b->date->get($this->auksjon->data['a_start'])->format(date::FORMAT_SEC) . '<br />' . game::counter($this->auksjon->data['a_start'] - time(), true) . '</dd>
						<dt>Auksjonslutt</dt>
						<dd>' . ess::$b->date->get($this->auksjon->data['a_end'])->format(date::FORMAT_SEC) . '</dd>';
        } else {
            echo '
						<dt>Auksjonslutt</dt>
						<dd>' . ess::$b->date->get($this->auksjon->data['a_end'])->format(date::FORMAT_SEC) . ($this->auksjon->status == auksjon::STATUS_ACTIVE ? '<br />' . game::counter($this->auksjon->data['a_end'] - time(), true) : '') . '</dd>';
        }
        // vis info
        echo '
						<dt>Budstart</dt>
						<dd>' . game::format_cash($this->auksjon->data['a_bid_start']) . '</dd>
						<dt>Minste budøkning</dt>
						<dd>' . game::format_cash($this->auksjon->data['a_bid_jump']) . '</dd>';
        // status
        if ($this->auksjon->status == auksjon::STATUS_WAIT) {
            // ikke startet
            echo '
						<dt>Status</dt>
						<dd>Ikke startet</dd>';
        } elseif ($this->auksjon->status == auksjon::STATUS_FINISHED) {
            // ferdig
            echo '
						<dt>Status</dt>
						<dd>Avsluttet</dd>
						<dt>Vunnet av</dt>';
            // vinnerbudet
            if ($bud_lead) {
                echo '
						<dd><user id="' . $bud_lead['ab_up_id'] . '" /></dd>';
            } else {
                echo '
						<dd>Ingen vinner</dd>';
            }
        } else {
            // pågår
            echo '
						<dt>Status</dt>
						<dd>Pågår nå</dd>';
        }
        echo '
					</dl>';
        // mer info?
        if (!empty($this->auksjon->data['a_info'])) {
            echo '
					<p>' . game::bb_to_html($this->auksjon->data['a_info']) . '</p>';
        }
        echo '
				</div>
			</div>
		</div>
	</div>
	<div class="col_w right" style="width: 55%">
		<div class="col" style="margin-left: 20px">
			<div class="bg1_c">
				<h1 class="bg1">Bud<span class="left"></span><span class="right"></span></h1>
				<div class="bg1">';
        // auksjon pågår -- legg til nye bud
        if ($this->auksjon->status == auksjon::STATUS_ACTIVE) {
            $own = $this->auksjon->data['a_up_id'] == $this->up->id;
            if (!$own) {
                // første budet?
                if (!$bud_lead) {
                    echo '
					<p>Dette er det første budet på denne auksjonen. Du må derfor by minimum ' . game::format_cash($this->auksjon->data['a_bid_start']) . '.</p>';
                } else {
                    echo '
					<p>Du må by minimum ' . game::format_cash($this->auksjon->data['a_bid_jump']) . ' høyere enn ' . ($bud_lead['ab_up_id'] == $this->up->id ? 'ditt forrige bud' : 'det forrige budet til <user id="' . $bud_lead['ab_up_id'] . '" />') . ' på ' . game::format_cash($bud_lead['ab_bid']) . '.</p>';
                }
                // bud på kuler kan ikke trekkes tilbake
                // TODO: om noe kan trekkes tilbake bør bestemmes av auksjonen, ikke logikken i koden her
                if ($this->auksjon->data['a_type'] == auksjon::TYPE_KULER) {
                    echo '
					<p><b>Budet er bindende og kan ikke trekkes tilbake!</b></p>
					<p>Dersom noen byr over deg, vil budet ditt bli inaktivt og du får pengene igjen.</p>';
                } else {
                    echo '
					<p>Du kan trekke tilbake budet ditt innen det har gått ' . game::timespan(auksjon::MAX_TIME_REMOVE, game::TIME_FULL) . '. Etter ' . game::timespan(auksjon::MAX_TIME_REMOVE, game::TIME_FULL | game::TIME_NOBOLD) . ' er budet ditt bindende og det kan ikke trekkes tilbake.</p>
					<p>Dersom noen byr over deg, vil budet ditt bli inaktivt og du får pengene igjen etter at budet har stått i ' . game::timespan(auksjon::MAX_TIME_REMOVE, game::TIME_FULL | game::TIME_NOBOLD) . '.</p>';
                }
            }
            // har vi bydd?
            if ($bud_own) {
                // gått ut på tid?
                if ($bud_own_locked) {
                    echo '
					<p>Du har bydd på denne auksjonen og ditt bud er bindende.</p>';
                } else {
                    // kan trekke budet
                    echo '
					<p>Du har bydd på denne auksjonen og kan fortsatt trekke tilbake ditt bud.</p>';
                }
                // vis budøkning
                echo '
					<form action="" method="post">
						<dl class="dd_right">
							<dt>Øk bud til</dt>
							<dd><input class="styled w100 r" type="text" name="amount" value="' . game::format_cash($minstepris) . '" /></dd>
						</dl>
						<p class="c">' . show_sbutton("Øk bud", 'name="raise_bid"') . (!$bud_own_locked ? ' ' . show_sbutton("Slett bud", 'name="del_bid"') : '') . '</p>
					</form>';
            } elseif (!$own) {
                // har ikke noe våpen?
                if ($this->auksjon->data['a_type'] == auksjon::TYPE_KULER && !$this->up->weapon) {
                    echo '
					<p>Du har ikke noe våpen og kan ikke delta i denne auksjonen.</p>';
                } elseif ($this->auksjon->data['a_type'] == auksjon::TYPE_FIRMA && $this->up->get_health_percent() < player::FF_HEALTH_LOW * 100) {
                    echo '
					<p>Du har for lav helse til å kunne by på et firma.</p>';
                } else {
                    echo '
					<form action="" method="post">
						<dl class="dd_right">
							<dt>Legg inn bud</dt>
							<dd><input class="styled w100 r" type="text" name="amount" value="' . game::format_cash($minstepris) . '" /></dd>
						</dl>
						<p class="c">' . show_sbutton("Legg inn bud", 'name="place_bid"') . '</p>
					</form>';
                }
            }
        }
        // vis budene
        if (count($bud) == 0) {
            if ($this->auksjon->status != auksjon::STATUS_WAIT) {
                echo '
					<p class="c">Ingen bud er lagt inn i denne auksjonen.</p>';
            }
        } else {
            ess::$b->page->add_css('.bud_inactive { text-decoration: line-through; color: #888 }');
            echo '
					<dl class="dd_right">';
            // gå gjennom alle budene
            foreach ($bud as $row) {
                echo '
						<dt' . ($row['ab_active'] == 0 ? ' class="bud_inactive"' : '') . '>' . ess::$b->date->get($row['ab_time'])->format("H:i:s") . ': <user id="' . $row['ab_up_id'] . '" /></dt>
						<dd' . ($row['ab_active'] == 0 ? ' class="bud_inactive"' : '') . '>' . game::format_cash($row['ab_bid']) . '</dd>';
            }
            echo '
					</dl>';
            if ($pagei->pages > 1) {
                echo '
					<p class="c">' . $pagei->pagenumbers() . '</p>';
            }
        }
        echo '
				</div>
			</div>
		</div>
	</div>
</div>';
    }
Ejemplo n.º 12
0
    /**
     * Sjekk om spilleren er død
     */
    protected function player_dead()
    {
        // ikke død?
        if (login::$user->player->active) {
            return;
        }
        $killed = login::$user->player->data['up_deactivated_dead'];
        $deact_self = false;
        // deaktivert self?
        if (!$killed) {
            // deaktivert av seg selv?
            if (!empty(login::$user->player->data['up_deactivated_up_id'])) {
                $deact_self = login::$user->player->data['up_deactivated_up_id'] == login::$user->player->id;
                if (!$deact_self) {
                    $result = \Kofradia\DB::get()->query("SELECT u_id FROM users JOIN users_players ON u_id = up_u_id WHERE up_id = " . login::$user->player->data['up_deactivated_up_id']);
                    $row = $result->fetch();
                    unset($result);
                    if ($row && $row['u_id'] == login::$user->id) {
                        $deact_self = true;
                    }
                }
            }
        }
        ess::$b->page->add_css('
.player_dead {
	background-color: #222222;
	margin: 30px auto;
	padding: 0 10px;
	width: 300px;
	overflow: hidden;
	border-top: 2px solid #333333;
	border-bottom: 2px solid #333333;
}
');
        echo '
<div class="player_dead r2">
	<h1>' . ($killed == 2 ? 'Du blødde ihjel' : ($killed ? 'Du ble drept' : 'Du er deaktivert')) . '</h1>
	<p>' . ($deact_self ? 'Du deaktivert din spiller' : 'Din spiller ' . ($killed == 2 ? 'blødde ihjel på grunn av lite energi og helse' : ($killed ? 'ble drept' : 'ble deaktivert'))) . ' ' . ess::$b->date->get(login::$user->player->data['up_deactivated_time'])->format() . '.' . ($killed == 1 ? ' Du vil ikke kunne se hvem som drepte deg uten å få en spiller som vitnet angrepet til å fortelle deg det.' : '') . '</p>' . (!$killed && !$deact_self ? '
	<p>Begrunnelse for deaktivering: ' . (empty(login::$user->player->data['up_deactivated_reason']) ? 'Ingen begrunnelse oppgitt.' : game::bb_to_html(login::$user->player->data['up_deactivated_reason'])) . '</p>' : '') . '
	<p>Ved å gå inn på "min side" og "min bruker" kan du se informasjon om dine tidligere spillere. Du kan trykke på spillernavnet som står oppført for å komme til "min spiller" som gjelder for den spilleren.</p>
	<p>Du må opprette en <a href="lock?f=player">ny spiller</a> for å kunne fortsette i spillet med en ny spiller.</p>
</div>';
    }
Ejemplo n.º 13
0
 /**
  * Sett opp tekst for en logg
  */
 public function format_log($type, $note, $num)
 {
     global $_game, $__server;
     $html = false;
     // typenavn
     $type_name = self::$items_id[$type];
     switch ($type_name) {
         case "utpressing":
             $melding = '[user id=' . $note . '] presset deg for [b]' . game::format_cash($num) . '[/b]!';
             break;
         case "fengsel":
             $dusor = empty($note) ? '' : ' og mottok dusøren på ' . game::format_cash($note);
             $melding = '[user id=' . $num . '] brøt deg ut av fengselet' . $dusor . '!';
             break;
         case "fengsel_dusor_return":
             $melding = 'Ingen hadde brutt deg ut av fengsel innen du kom ut og du fikk tilbake dusøren på ' . game::format_cash($num) . '.';
             break;
         case "renter":
             $melding = "Du mottok [b]" . game::format_cash($num) . "[/b] i renter fra banken!" . (!empty($note) ? ' ' . $note : '');
             break;
         case "forfremmelse":
             $melding = "Du ble forfremmet til [b]{$note}[/b]!";
             break;
         case "nedgradering":
             $melding = "Du ble nedgradert til [b]{$note}[/b]!";
             break;
             // rank bonus
         // rank bonus
         case "rank_bonus":
             // syntax: plassering(int):prosent bonus(float), num = bonus
             $info = explode(":", $note);
             $melding = 'Du var den ' . ($info[0] == 1 ? 'beste' : $info[0] . '. beste') . ' rankeren de siste 24 timene og fikk ' . game::format_num($info[1] * 100) . ' % i bonus av poengene du hadde skaffet (' . game::format_num($num) . ' poeng i bonus).';
             break;
             // verve bonus
         // verve bonus
         case "verve_bonus":
             // syntax: antall_spillere num = bonus
             $melding = 'Du mottok ' . game::format_num($num) . ' poeng i bonus fra ' . fwords("%d spiller", "%d spillere", $note) . ' du har vervet som hadde ranket de siste 24 timene.';
             break;
         case "testing":
             $melding = "Testing - Melding: {$note} - Tall: {$num}";
             break;
         case "raw":
             $html = true;
             $melding = $note;
             break;
         case "systeminfo":
             $melding = "Systeminformasjon: " . $note;
             break;
             // emen i crewforumet
         // emen i crewforumet
         case "crewforum_emne":
             $u = explode(":", $note, 2);
             $html = true;
             $melding = '<user id="' . $u[0] . '" /> opprettet <a href="forum/topic?id=' . $num . '">' . htmlspecialchars($u[1]) . '</a> i crewforumet.';
             break;
             // svar i crewforumet
         // svar i crewforumet
         case "crewforum_svar":
             $u = explode(":", $note, 2);
             $s = explode("#", $u[0]);
             $u[0] = $s[0];
             $replyid = isset($s[1]) ? '&amp;replyid=' . $s[1] : '';
             $html = true;
             $melding = '<user id="' . $u[0] . '" /> svarte i <a href="forum/topic?id=' . $num . $replyid . '">' . htmlspecialchars($u[1]) . '</a> i crewforumet';
             break;
             // emne i crewforumet (arkiv)
         // emne i crewforumet (arkiv)
         case "crewforuma_emne":
             $u = explode(":", $note, 2);
             $html = true;
             $melding = '<user id="' . $u[0] . '" /> opprettet <a href="forum/topic?id=' . $num . '">' . htmlspecialchars($u[1]) . '</a> i crewforumet (arkiv).';
             break;
             // svar i crewforumet (arkiv)
         // svar i crewforumet (arkiv)
         case "crewforuma_svar":
             $u = explode(":", $note, 2);
             $s = explode("#", $u[0]);
             $u[0] = $s[0];
             $replyid = isset($s[1]) ? '&amp;replyid=' . $s[1] : '';
             $html = true;
             $melding = '<user id="' . $u[0] . '" /> svarte i <a href="forum/topic?id=' . $num . $replyid . '">' . htmlspecialchars($u[1]) . '</a> i crewforumet (arkiv).';
             break;
             // emne i idémyldringsforumet
         // emne i idémyldringsforumet
         case "crewforumi_emne":
             $u = explode(":", $note, 2);
             $html = true;
             $melding = '<user id="' . $u[0] . '" /> opprettet <a href="forum/topic?id=' . $num . '">' . htmlspecialchars($u[1]) . '</a> i idémyldringsforumet.';
             break;
             // svar i idémyldringsforumet
         // svar i idémyldringsforumet
         case "crewforumi_svar":
             $u = explode(":", $note, 2);
             $s = explode("#", $u[0]);
             $u[0] = $s[0];
             $replyid = isset($s[1]) ? '&amp;replyid=' . $s[1] : '';
             $html = true;
             $melding = '<user id="' . $u[0] . '" /> svarte i <a href="forum/topic?id=' . $num . $replyid . '">' . htmlspecialchars($u[1]) . '</a> i idémyldringsforumet.';
             break;
         case "bankoverforing":
             $info = explode(":", $note, 2);
             $melding = '[user id=' . $num . '] sendte deg [b]' . game::format_cash($info[0]) . '[/b]!' . (!empty($info[1]) ? ' [b]Melding[/b]: ' . $info[1] : '');
             break;
         case "lotto":
             $info = explode(":", $note);
             $data = array();
             $data[] = 'Du kom på <b>' . $info[0] . '</b>. plass i lotto';
             $data[] = 'vant <b>' . game::format_cash($num) . '</b>';
             if (isset($info[1])) {
                 $data[] = 'mottok <b>' . game::format_num($info[1]) . '</b> poeng';
             }
             $melding = sentences_list($data) . "!";
             $html = true;
             break;
         case "informasjon":
             $html = $num == 1;
             $melding = $note;
             break;
         case "poker":
             // winner:utfordrer:pott
             $info = explode(":", $note, 3);
             $melding = 'Du brukte for lang tid da du utfordret [user id=' . $info[1] . '] i poker for [b]' . game::format_cash($num) . '[/b]. Spillet valgte kort for deg automatisk..';
             switch ($info[0]) {
                 case 1:
                     $melding .= ' Motstanderen vant runden.';
                     break;
                 case 2:
                     $melding .= ' Du vant runden og fikk [b]' . game::format_cash($info[2]) . '[/b].';
                     break;
                 default:
                     $melding .= ' Det ble uavgjort og du fikk tilbake [b]' . game::format_cash($info[2]) . '[/b].';
             }
             break;
             // oppdrag
         // oppdrag
         case "oppdrag":
             $html = true;
             $melding = $note;
             break;
             // døde
         // døde
         case "dead":
             // syntax: instant(int:0/1)
             $html = true;
             $melding = $note ? "Du ble angrepet og klarte ikke å stå i mot angrepet. Du døde." : "Du døde på grunn av lav energi og lav helse.";
             break;
         case "support":
             // avsluttet?
             if (mb_substr($note, 0, 2) == "c:") {
                 $info = explode(":", $note, 3);
                 // c:sum_up_id:su_title
                 $html = true;
                 $melding = '<user id="' . $info[1] . '" /> avsluttet din henvendelse &laquo;<a href="' . $__server['relative_path'] . '/support/?a=show&amp;su_id=' . $num . '">' . htmlspecialchars($info[2]) . '</a>&raquo; hos support.';
                 break;
             }
             // oppdatert
             $info = explode(":", $note, 2);
             // sum_up_id:su_title
             $html = true;
             $melding = '<user id="' . $info[0] . '" /> oppdaterte din henvendelse &laquo;<a href="' . $__server['relative_path'] . '/support/?a=show&amp;su_id=' . $num . '">' . htmlspecialchars($info[1]) . '</a>&raquo; hos support.';
             break;
         case "blokkering":
             // ny blokkering: 1:type:end:reason
             // blokkering endret: 2:type:end:reason end og reason kan være blank hvis feltet ikke ble endret
             // blokkering fjernet: 3:type
             $info = explode(":", $note);
             $blokkering = isset(blokkeringer::$types[$num]) ? blokkeringer::$types[$num]['userlog'] : '(type ukjent: ' . $num . ')';
             switch ($info[0]) {
                 // ny blokkering
                 case 1:
                     $melding = 'Du har blitt blokkert fra å ' . $blokkering . '. Varer til ' . ess::$b->date->get($info[1])->format() . '. Begrunnelse: ' . urldecode($info[2]);
                     break;
                     // blokkering endret
                 // blokkering endret
                 case 2:
                     $melding = 'Blokkeringen for å ' . $blokkering . ' har blitt endret.';
                     if ($info[1] != "") {
                         $melding .= ' Ny varighet til ' . ess::$b->date->get($info[1])->format() . '.';
                     }
                     if ($info[2] != "") {
                         $melding .= ' Ny begrunnelse: ' . urldecode($info[2]);
                     }
                     break;
                     // blokkering fjernet
                 // blokkering fjernet
                 case 3:
                     $melding = 'Blokkeringen for å ' . $blokkering . ' har blitt fjernet.';
                     break;
             }
             break;
         case "advarsel":
             // type:reason
             $info = explode(":", $note, 2);
             $melding = 'Du har fått en advarsel fra Crewet (kategori: ' . urldecode($info[0]) . '). Begrunnelse: ' . urldecode($info[1]);
             break;
         case "soknader":
             // av enkelthetskyld (og praktiske årsaker) blir meldinger lagt til med full tekst fra søknadssystemet
             // dette kan utvidees ved en senere anledning
             // syntax: html:Din søknad [..]
             // syntax: bb:Din søknad [..]
             $info = explode(":", $note, 2);
             if ($info[0] == "html") {
                 $html = true;
                 $melding = $info[1];
             } elseif ($info[0] == "bb") {
                 $melding = $info[1];
             }
             break;
             // spiller bløde ihjel etter angrep
         // spiller bløde ihjel etter angrep
         case "player_bleed":
             $html = true;
             $melding = '<user id="' . $num . '" /> døde av skadene som ble påført i ditt tidligere angrep.';
             break;
             // vitne
         // vitne
         case "vitne":
             // syntax: drept:attack_type:ble_sett:offer_up_id (num = angriper)
             $info = explode(":", $note);
             $html = true;
             $melding = 'Du vitnet <user id="' . $num . '" /> ' . ($info[0] ? 'drepe' : 'skade') . ' <user id="' . $info[3] . '" />.';
             // ble vi oppdaget?
             if ($info[2]) {
                 $melding .= ' Du ble oppdaget av <user id="' . $num . '" />.';
             }
             break;
             // mistet beskyttelse
         // mistet beskyttelse
         case "beskyttelse_lost":
             // syntax: gammel_beskyttelse_navn:ny_beskyttelse_navn:ny_beskyttelse_state (navn er urlencode-ed)
             $info = explode(":", $note);
             $html = true;
             $melding = 'Du mistet din beskyttelse <b>' . htmlspecialchars(urldecode($info[0])) . '</b>. Du har nå <b>' . htmlspecialchars(urldecode($info[1])) . '</b> som beskyttelse med en status på <b>' . game::format_num($info[2] * 100, 2) . ' %</b>.';
             break;
             // angrepet?
         // angrepet?
         case "attacked":
             // syntax: lost_health:lost_energy:lost_protection:lost_rankpoints:new_health:new_energy:new_protection:new_rankpoints:gammel_bydel:ny_bydel:bank:cash
             $info = explode(":", $note);
             $html = true;
             // vise hvor mye vi mistet
             $d = array();
             $d[] = '<b>' . game::format_num($info[0] * 100, 2) . ' %</b> helse';
             $d[] = '<b>' . game::format_num($info[1] * 100, 2) . ' %</b> energi';
             if ($info[2]) {
                 $d[] = '<b>' . game::format_num($info[2] * 100, 2) . ' %</b> beskyttelse';
             }
             $d[] = '<b>' . $info[3] . '</b> poeng';
             $melding = 'Du ble angrepet av en spiller og mistet ' . sentences_list($d) . '.';
             // vis verdiene etter angrepet
             $d = array();
             $d[] = '<b>' . game::format_num($info[4] * 100, 2) . ' %</b> helse';
             $d[] = '<b>' . game::format_num($info[5] * 100, 2) . ' %</b> energi';
             if ($info[6]) {
                 $d[] = '<b>' . game::format_num($info[6] * 100, 2) . ' %</b> beskyttelse';
             }
             $melding .= ' Du endte opp med ' . sentences_list($d) . '.';
             // mistet vi penger?
             if (!empty($info[10])) {
                 $melding .= ' Angriperen fikk i tillegg med seg <b>' . game::format_cash($info[10]) . '</b> fra hånda di.';
             }
             // ble vi flyttet til en annen bydel?
             if (!empty($info[8])) {
                 $melding .= ' Du ble flyttet fra bydelen ' . htmlspecialchars(urldecode($info[8])) . ' til <b>' . htmlspecialchars(urldecode($info[9])) . '</b> siden du hadde under ' . game::format_num(player::HEALTH_MOVE_AUTO * 100) . ' % helse.';
             }
             break;
             // mistet/nedgradert våpen
         // mistet/nedgradert våpen
         case "weapon_lost":
             // syntax 1: weapon_id:weapon_name:bullets (num = 0)
             // syntax 2: weapon_id:weapon_name:bullets:new_weapon:new_training (num = 1)
             $info = explode(":", $note);
             $html = true;
             if ($num == 1) {
                 $melding = 'Våpentreningen falt under 25 % og ditt våpen <b>' . htmlspecialchars(urldecode($info[1])) . '</b>' . ($info[2] > 0 ? ' med <b>' . $info[2] . '</b> kuler' : '') . ' ble nedgradert til våpnet <b>' . htmlspecialchars(urldecode($info[3])) . '</b> med ' . game::format_num($info[4] * 100) . ' % våpentrening og 0 kuler.';
             } else {
                 $melding = 'Våpentreningen falt under 25 % og du mistet våpenet <b>' . htmlspecialchars(urldecode($info[1])) . '</b>' . ($info[2] > 0 ? ' og <b>' . $info[2] . '</b> kuler' : '') . '.';
             }
             break;
             // kastet ut av bomberom
         // kastet ut av bomberom
         case "bomberom_kicked":
             // syntax: up_id(som utfører handlingen):urlencode(ff_name):up_brom_expire(når vi egentlig skulle gå ut av bomberommet) num=ff_id
             $info = explode(":", $note);
             $html = true;
             $melding = 'Du ble kastet ut fra bomberommet <a href="' . ess::$s['relative_path'] . '/ff/?ff_id=' . $num . '">' . htmlspecialchars(urldecode($info[1])) . '</a>. Du skulle egentlig sittet til ' . ess::$b->date->get($info[2])->format() . '.';
             break;
             // plassert i bomberom
         // plassert i bomberom
         case "bomberom_set":
             // syntax: up_id(som utfører handlingen):urlencode(ff_name):up_brom_expire(hvor lenge vi er inne) num=ff_id
             $info = explode(":", $note);
             $html = true;
             $melding = '<user id="' . $info[0] . '" /> plasserte deg i bomberommet <a href="' . ess::$s['relative_path'] . '/ff/?ff_id=' . $num . '">' . htmlspecialchars(urldecode($info[1])) . '</a> til ' . ess::$b->date->get($info[2])->format() . '.';
             break;
             // fikk penger fra etterlyst for angrep
         // fikk penger fra etterlyst for angrep
         case "etterlyst_receive":
             // syntax: up_id(som ble angrepet):bool(instant?):bool(bare skadet?)
             $info = explode(":", $note);
             $html = true;
             $melding = '<user id="' . $info[0] . '" /> ' . (!empty($info[2]) ? 'ble skadet av ditt angrep' : 'døde etter ditt angrep') . ' og du mottok ' . game::format_cash($num) . ' som' . (!empty($info[2]) ? ' del av det' : '') . ' spilleren var etterlyst for.';
             break;
             // fikk tilbake penger fra etterlyst fordi spiller ble deaktivert
         // fikk tilbake penger fra etterlyst fordi spiller ble deaktivert
         case "etterlyst_deactivate":
             // syntax: up_id(som ble deaktivert)
             $html = true;
             $melding = '<user id="' . $note . '" /> ble deaktivert og du fikk tilbake ' . game::format_cash($num) . ' fra etterlyst som du hadde plassert på spilleren.';
             break;
             // lagt til på etterlyst
         // lagt til på etterlyst
         case "etterlyst_add":
             $melding = 'En spiller la til en dusør for deg på ' . game::format_cash($num) . '.';
             break;
             // kuleauksjon avsluttet uten bud
         // kuleauksjon avsluttet uten bud
         case "auksjon_kuler_no_bid":
             // syntax: a_id(auksjonen) num=antall kuler returnert
             $html = true;
             $melding = 'Ingen vant <a href="' . ess::$s['relative_path'] . '/auksjoner?a_id=' . $note . '">auksjonen</a> for kuler du la ut for salg og du fikk tilbake ' . $num . ' kuler.';
             break;
             // vinner kuleauksjon
         // vinner kuleauksjon
         case "auksjon_kuler_won":
             // syntax: a_id(auksjonen):amount(beløp man vant med) num=antall kuler
             $info = explode(":", $note);
             $html = true;
             $melding = 'Du vant <a href="' . ess::$s['relative_path'] . '/auksjoner?a_id=' . $info[0] . '">auksjonen</a> for kuler med ditt bud på ' . game::format_cash($info[1]) . ' og mottok ' . $num . ' kuler.';
             break;
             // mistet garasje
         // mistet garasje
         case "garage_lost":
             // syntax: urlencode(bydel) num=antal biler
             $html = true;
             $melding = 'Du mistet garasjen din på ' . htmlspecialchars(urldecode($note)) . ($num > 0 ? ' og ' . fwords("den ene bilen", "de %d bilene", $num) . ' som var i garasjen' : '') . '.';
             break;
             // FF-systemet
         // FF-systemet
         case "ff_invite":
             // ff_id:ff_name:stilling:parent
             $info = explode(":", $note, 4);
             $html = true;
             $melding = '<user id="' . $num . '" /> inviterte deg til <a href="ff/?ff_id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[1])) . '</a> for posisjonen <b>' . htmlspecialchars(urldecode($info[2])) . '</b>' . (!empty($info[3]) ? ' underordnet <user id="' . $info[3] . '" />' : '') . '.';
             break;
         case "ff_delinvite":
             // ff_id:ff_name
             $info = explode(":", $note, 2);
             $html = true;
             if ($num) {
                 $melding = '<user id="' . $num . '" /> fjernet din invitasjon til <a href="ff/?ff_id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[1])) . '</a>.';
             } else {
                 $melding = 'Din invitasjon til <a href="ff/?ff_id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[1])) . '</a> ble fjernet.';
             }
             break;
         case "ff_member_priority":
             // num = action_user_id
             // ff_id:ff_name:priority_old:priority_new:parent_old:parent_new
             $info = explode(":", $note);
             $html = true;
             if ($num) {
                 $melding = '<user id="' . $num . '" /> endret din posisjon i <a href="ff/?ff_id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[1])) . '</a> fra ' . htmlspecialchars(urldecode($info[2])) . (!empty($info[4]) ? ' underordnet <user id="' . $info[4] . '" />' : '') . ' til <b>' . htmlspecialchars(urldecode($info[3])) . '</b>' . (!empty($info[5]) ? ' underordnet <user id="' . $info[5] . '" />' : '') . '.';
             } else {
                 // anonym
                 $melding = 'Din posisjon i <a href="ff/?ff_id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[1])) . '</a> ble endret fra ' . htmlspecialchars(urldecode($info[2])) . (!empty($info[4]) ? ' underordnet <user id="' . $info[4] . '" />' : '') . ' til <b>' . htmlspecialchars(urldecode($info[3])) . '</b>' . (!empty($info[5]) ? ' underordnet <user id="' . $info[5] . '" />' : '') . '.';
             }
             break;
         case "ff_member_set_priority":
             // ff_id:ff_name:priority:parent_up_id
             $info = explode(":", $note);
             $html = true;
             $melding = 'Du ble satt som ' . htmlspecialchars(urldecode($info[2])) . (!empty($info[3]) ? ' underordnet <user id="' . $info[3] . '" />' : '') . ' i <a href="ff/?ff_id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[1])) . '</a>.';
             break;
         case "ff_member_parent":
             // num = action_user_id
             // ff_id:ff_name:parent_old:parent_new
             $info = explode(":", $note);
             $html = true;
             if ($num) {
                 $melding = '<user id="' . $num . '" /> endret din overordnede i <a href="ff/?ff_id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[1])) . '</a> fra <user id="' . $info[2] . '" /> til <user id="' . $info[3] . '" />.';
             } else {
                 // anonym
                 $melding = 'Din overordnede i <a href="ff/?ff_id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[1])) . '</a> ble endret fra <user id="' . $info[2] . '" /> til <user id="' . $info[3] . '" />.';
             }
             break;
         case "ff_kick":
             // ff_id:ff_name:note
             $info = explode(":", $note, 3);
             $html = true;
             $note = empty($info[2]) ? '' : ' Begrunnelse: ' . game::bb_to_html(urldecode($info[2]));
             $melding = '<user id="' . $num . '" /> kastet deg ut fra <a href="ff/?ff_id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[1])) . '</a>.' . $note;
             break;
         case "ff_dead":
             // refstring,name
             $info = explode(":", $note, 2);
             $html = true;
             $melding = ucfirst($info[0]) . ' <b>' . htmlspecialchars(urldecode($info[1])) . '</b> har blitt oppløst.';
             break;
         case "ff_dead_invited":
             // refstring,name
             $info = explode(":", $note, 2);
             $html = true;
             $melding = ucfirst($info[0]) . ' <b>' . htmlspecialchars(urldecode($info[1])) . '</b> som du var invitert til har blitt oppløst.';
             break;
         case "ff_diverse":
             $html = true;
             $melding = $note;
             break;
         case "ff_low_health":
             // ff_id:ff_name:stilling:parent
             $info = explode(":", $note, 4);
             $html = true;
             $melding = 'Du mistet posisjonen som <b>' . htmlspecialchars(urldecode($info[2])) . '</b>' . (!empty($info[3]) ? ' underordnet <user id="' . $info[3] . '" />' : '') . ' i <a href="ff/?ff_id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[1])) . '</a> grunnet for lav helse.';
             break;
         case "ff_takeover":
             // ff_id:ff_name_org:ff_name_new:ff_type_ref:ff_stilling
             $info = explode(":", $note, 5);
             $html = true;
             $melding = 'Ditt angrep førte til at ' . htmlspecialchars(urldecode($info[3])) . ' ' . htmlspecialchars(urldecode($info[1])) . ' ble stående uten ' . htmlspecialchars(urldecode($info[4])) . '. Du tok derfor over ' . htmlspecialchars(urldecode($info[3])) . ' som fikk navnet <a href="ff/?ff_id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[2])) . '</a>.';
             break;
             // forumtråd flyttet
         // forumtråd flyttet
         case "forum_topic_move":
             // ft_id, ft_title, fromname, toname, up_id(hvem gjorde det)
             $info = explode(":", $note);
             $html = true;
             $melding = 'Din forumtråd <a href="' . ess::$s['relative_path'] . '/forum/topic?id=' . $info[0] . '">' . htmlspecialchars(urldecode($info[1])) . '</a> ble flyttet fra ' . htmlspecialchars(urldecode($info[2])) . ' til ' . htmlspecialchars(urldecode($info[3])) . '.';
             break;
             // prestasjon oppnådd
         // prestasjon oppnådd
         case "achievement":
             // count(repetisjonsnummer), ac_name, prize
             // num: ac_id
             $info = explode(":", $note);
             $html = true;
             $rep = $info[0] > 1 ? ' for ' . $info[0] . '. gang' : '';
             $prize = !empty($info[2]) ? ' og mottok ' . $info[2] : '';
             $melding = 'Du oppnådde prestasjonen &laquo;' . htmlspecialchars(urldecode($info[1])) . "&raquo;" . $rep . $prize . '.';
             break;
             // hall of fame
         // hall of fame
         case "hall_of_fame":
             $html = true;
             $melding = 'Du ble den ' . $note . ' og havnet på <a href="' . ess::$s['rpath'] . '/hall_of_fame">Hall of Fame</a>!';
             break;
         default:
             $type = "Ukjent ({$type})";
             $melding = $note;
     }
     $melding = $html ? $melding : game::bb_to_html($melding);
     return $melding;
 }
Ejemplo n.º 14
0
require "../base.php";
global $_base;
$_base->page->add_title("Planlegger", "Status");
echo '
<h1>Planlegger - Status</h1>';
$result = \Kofradia\DB::get()->query("SELECT s_name, s_hours, s_minutes, s_seconds, s_file, s_description, s_count, s_previous, s_next, s_active FROM scheduler ORDER BY s_name");
if ($result->rowCount() == 0) {
    echo '
<p>
	Ingen rutiner er opprettet.
</p>';
} else {
    $i = 0;
    while ($row = $result->fetch()) {
        $info = game::bb_to_html($row['s_description']);
        echo '
<div class="section w250' . ($i++ % 2 == 0 && $i > 0 ? ' clear' : '') . '" style="float: left; margin-left: 25px">
	<h2>' . htmlspecialchars($row['s_name']) . ($row['s_active'] == 0 ? ' <span class="dark">(inaktiv)</span>' : '') . '</h2>
	<dl>
		<dt>Timer</dt>
		<dd class="r">' . htmlspecialchars($row['s_hours']) . '</dd>
		
		<dt>Minutter</dt>
		<dd class="r">' . htmlspecialchars($row['s_minutes']) . '</dd>
		
		<dt>Sekunder</dt>
		<dd class="r">' . htmlspecialchars($row['s_seconds']) . '</dd>
		
		<dt>Scriptfil</dt>
		<dd class="r">' . htmlspecialchars($row['s_file']) . '</dd>
Ejemplo n.º 15
0
    /**
     * Overføre penger
     */
    protected function overfor()
    {
        $mottaker = postval("mottaker");
        $amount = game::intval(postval("amount"));
        // kontroller at vi har nok penger
        $result = \Kofradia\DB::get()->query("SELECT {$amount} <= up_bank FROM users_players WHERE up_id = " . $this->up->id);
        $amount_ok = $result->fetchColumn(0) == 1;
        // sjekk beløpet
        if ($amount <= 0) {
            ess::$b->page->add_message("Ugyldig beløp.", "error");
            return;
        }
        if ($amount < 50) {
            ess::$b->page->add_message("Du må sende minimum 50 kr.", "error");
            return;
        }
        if (!$amount_ok) {
            ess::$b->page->add_message("Du har ikke så mye penger i banken.", "error");
            return;
        }
        // har vi ikke tilgang (NoStatUser)
        if (access::is_nostat() && !access::has("admin")) {
            ess::$b->page->add_message("Du er NoStatUser og kan ikke sende penger!", "error");
            return;
        }
        // sjekk session
        if (postval("sid") != login::$info['ses_id']) {
            ess::$b->page->add_message("Startet du ikke overføringen selv? :o", "error");
            return;
        }
        // sjekk mottaker
        $result = \Kofradia\DB::get()->query("SELECT up_id, up_u_id, up_name, up_access_level, up_bank_ff_id FROM users_players WHERE up_name = " . \Kofradia\DB::quote($mottaker) . " ORDER BY up_access_level = 0, up_last_online DESC LIMIT 1");
        $player = $result->fetch();
        // ingen gyldig mottaker?
        if (!$player) {
            ess::$b->page->add_message("Fant ikke mottakeren.", "error");
            return;
        }
        // seg selv?
        if ($player['up_id'] == $this->up->id) {
            ess::$b->page->add_message("Du kan ikke sende til deg selv.", "error");
            return;
        }
        // død mottaker?
        if ($player['up_access_level'] == 0) {
            ess::$b->page->add_message('<user id="' . $player['up_id'] . '" /> er død. Hvem skal motta pengene?!');
            return;
        }
        $result = \Kofradia\DB::get()->query("SELECT uc_info FROM users_contacts WHERE uc_u_id = {$player['up_u_id']} AND uc_contact_up_id = " . $this->up->id . " AND uc_type = 2");
        $blokkert = $result->rowCount() > 0;
        $blokkert_info = $blokkert ? $result->fetchColumn(0) : false;
        // sjekk bankkontoen til mottaker
        $bank = page_banken_bank::get($player['up_bank_ff_id']);
        // ingen bankkonto?
        if (!$bank) {
            ess::$b->page->add_message("Mottakeren har ingen bankkonto du kan sende til.", "error");
            return;
        }
        // blokkert?
        if ($blokkert && !access::has("crewet")) {
            // blokkert
            $reason = game::bb_to_html($blokkert_info);
            $reason = empty($reason) ? '' : ' Begrunnelse: ' . $reason;
            ess::$b->page->add_message("Denne spilleren har blokkert deg, og du kan derfor ikke sende personen penger.{$reason}", "error");
            return;
        }
        $note = mb_substr(postval("note"), 0, 100);
        // hoppe over overføringstapet?
        $skip_bog = false;
        if (isset($_POST['skip_bog']) && access::is_nostat()) {
            $skip_bog = true;
            $this->bank->overforingstap = 0;
            $bank->overforingstap = 0;
        }
        // regn ut hvor mye penger som skal bli til overs etc
        $result = \Kofradia\DB::get()->query("SELECT ROUND({$amount} * {$this->bank->overforingstap}), ROUND({$amount} * {$bank->overforingstap}), ROUND({$amount} * {$this->bank->overforingstap}) + ROUND({$amount} * {$bank->overforingstap}), {$amount} - ROUND({$amount} * {$this->bank->overforingstap}) - ROUND({$amount} * {$bank->overforingstap}), {$amount} - ROUND({$amount} * {$this->bank->overforingstap})");
        $info = $result->fetch(\PDO::FETCH_NUM);
        // 0 -> tap sender
        // 1 -> tap mottaker
        // 2 -> tap totalt
        // 3 -> til overs (det som mottakeren får)
        // 4 -> mellombeløp (utgangsbeløpet - tap sender)
        // kontrollere at overføringen ikke blir utført flere ganger
        $form = \Kofradia\Form::getByDomain("banken_" . $player['up_id'], login::$user);
        // bekreftet?
        if (isset($_POST['confirm']) && isset($_POST['ovt_s']) && isset($_POST['ovt_m']) && $form->validateHashOrAlert()) {
            // kontroller overføringstapene (slik at det ikke har skjedd noen endringer)
            $ovt_s = postval("ovt_s");
            $ovt_m = postval("ovt_m");
            if ($ovt_s != $this->bank->overforingstap || $ovt_m != $bank->overforingstap) {
                // det har endret seg
                login::data_set("banken_ovt_endret", true);
            } else {
                // start transaksjon
                \Kofradia\DB::get()->beginTransaction();
                // send pengene
                $a = \Kofradia\DB::get()->exec("UPDATE users_players AS s, users_players AS m SET s.up_bank = s.up_bank - {$amount}, m.up_bank = m.up_bank + {$info[3]} WHERE s.up_id = " . $this->up->id . " AND m.up_id = {$player['up_id']} AND s.up_bank >= {$amount}");
                // mislykket?
                if ($a == 0) {
                    ess::$b->page->add_message("Noe gikk galt under overføringen.", "error");
                    \Kofradia\DB::get()->commit();
                } else {
                    // lagre overføringslogg
                    \Kofradia\DB::get()->exec("INSERT INTO bank_log SET bl_sender_up_id = " . $this->up->id . ", bl_receiver_up_id = {$player['up_id']}, amount = {$info[4]}, time = " . time());
                    // oppdater senderen
                    \Kofradia\DB::get()->exec("UPDATE users_players SET up_bank_sent = up_bank_sent + {$info[4]}, up_bank_profit = up_bank_profit - {$info[4]}, up_bank_num_sent = up_bank_num_sent + 1, up_bank_charge = up_bank_charge + {$info[0]} WHERE up_id = " . $this->up->id);
                    // oppdater mottakeren
                    \Kofradia\DB::get()->exec("UPDATE users_players SET up_bank_received = up_bank_received + {$info[4]}, up_bank_profit = up_bank_profit + {$info[4]}, up_bank_num_received = up_bank_num_received + 1, up_bank_charge = up_bank_charge + {$info[1]} WHERE up_id = {$player['up_id']}");
                    // spillelogg (med melding)
                    $player2 = new player($player['up_id']);
                    $player2->add_log("bankoverforing", $info[4] . ":" . $note, $this->up->id);
                    // legg til transaksjonsrader
                    if ($info[0] > 0) {
                        \Kofradia\DB::get()->exec("INSERT INTO ff_bank_transactions SET ffbt_ff_id = {$this->bank->id}, ffbt_time = " . time() . ", ffbt_amount = {$amount}, ffbt_profit = {$info[0]}");
                    }
                    if ($info[1] > 0) {
                        \Kofradia\DB::get()->exec("INSERT INTO ff_bank_transactions SET ffbt_ff_id = {$bank->id}, ffbt_time = " . time() . ", ffbt_amount = {$amount}, ffbt_profit = {$info[1]}");
                    }
                    // IRC logg
                    putlog("LOG", "%c9%uBANKOVERFØRING:%u%c (%u" . $this->up->data['up_name'] . "%u) sendte (%u" . game::format_cash($amount) . "%u (%u{$info[3]}%u)) til (%u{$player['up_name']}%u) (TAP: " . game::format_cash($info[2]) . ") " . (!empty($note) ? 'Melding: (' . $note . ')' : 'Ingen melding.'));
                    ess::$b->page->add_message('Du overførte <b>' . game::format_cash($info[4]) . '</b> til <user id="' . $player['up_id'] . '" />.' . ($info[0] > 0 ? ' Banken din tok <b>' . game::format_cash($info[0]) . '</b> i overføringsgebyr.' : ''));
                    \Kofradia\DB::get()->commit();
                    // trigger
                    $this->up->update_money(-$amount, false, false, null);
                    $player2->update_money($info[3], false, false, null);
                    redirect::handle();
                }
            }
        }
        ess::$b->page->add_css('.dl_bank dd { text-align: right }');
        // vis godkjenn form
        echo '
<h1>Banken - overføring</h1>
<form action="" method="post">
	<input type="hidden" name="mottaker" value="' . htmlspecialchars($mottaker) . '" />
	<input type="hidden" name="amount" value="' . $amount . '" />
	<input type="hidden" name="note" value="' . htmlspecialchars($note) . '" />
	<input type="hidden" name="ovt_s" value="' . $this->bank->overforingstap . '" />
	<input type="hidden" name="ovt_m" value="' . $bank->overforingstap . '" />
	' . $form->getHTMLInput();
        // hoppe over overføringstapet?
        if ($skip_bog) {
            echo '
	<input type="hidden" name="skip_bog" />';
        }
        echo '
	<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
	<div style="width: 200px; padding-left: 100px; float: left">
		<div class="section">
			<h2>Avsender</h2>
			<dl class="dl_30">
				<dt>Kontoeier</dt>
				<dd>' . game::profile_link() . '</dd>
				
				<dt>Bankfirma</dt>
				<dd><a href="ff/?ff_id=' . $this->bank->id . '">' . htmlspecialchars($this->bank->data['ff_name']) . '</a></dd>
				
				<dt><abbr title="Overføringstap">Overf.tap</abbr></dt>
				<dd>' . $this->bank->overforingstap * 100 . ' %</dd>
				
				<dt>Plassering</dt>
				<dd>' . (!isset(game::$bydeler[$this->bank->data['br_b_id']]) ? '<span style="color: #777777">Ukjent</span>' : htmlspecialchars(game::$bydeler[$this->bank->data['br_b_id']]['name'])) . '</dd>
			</dl>
		</div>
	</div>
	<div style="width: 200px; padding-left: 20px; float: left">
		<div class="section">
			<h2>Mottaker</h2>
			<dl class="dl_30">
				<dt>Kontoeier</dt>
				<dd><user id="' . $player['up_id'] . '" /></dd>
				
				<dt>Bankfirma</dt>
				<dd><a href="ff/?ff_id=' . $bank->id . '">' . htmlspecialchars($bank->data['ff_name']) . '</a></dd>
				
				<dt><abbr title="Overføringstap">Overf.tap</abbr></dt>
				<dd>' . $bank->overforingstap * 100 . ' %</dd>
				
				<dt>Plassering</dt>
				<dd>' . (!isset(game::$bydeler[$bank->data['br_b_id']]) ? '<span style="color: #777777">Ukjent</span>' : htmlspecialchars(game::$bydeler[$bank->data['br_b_id']]['name'])) . '</dd>
			</dl>
		</div>
	</div>
	<div class="clear" style="width: 420px; margin-left: 100px">
		<div class="section">
			<h2>Overføringsinformasjon</h2>
			<dl class="dl_40 dl_bank">
				<dt>Overføringsbeløp</dt>
				<dd>' . game::format_cash($amount) . '</dd>';
        // hopper over overføringstapet?
        if ($skip_bog) {
            echo '
				
				<dt>Hopper over overføringstapet</dt>
				<dd>NoStat</dd>';
        }
        echo '
				
				<dt>Overføringstap for avsender</dt>
				<dd>' . game::format_cash($info[0]) . '</dd>
				
				<dt>Overføringstap for mottaker</dt>
				<dd>' . game::format_cash($info[1]) . '</dd>
				
				<dt>Mottaker får</dt>
				<dd>' . game::format_cash($info[3]) . '</dd>
				
				<dt>Melding</dt>
				<dd>' . (empty($note) ? 'Ingen melding.' : game::bb_to_html($note)) . '</dd>
			</dl>
			<h4>
				' . show_sbutton("Utfør overføring", 'name="confirm"') . '
				' . show_sbutton("Avbryt/endre", 'name="abort"') . '
			</h4>
		</div>
	</div>
</form>';
        ess::$b->page->load();
    }
Ejemplo n.º 16
0
    echo '
		<p>Ingen avstemninger er opprettet.</p>';
} else {
    echo '
		<table class="table tablemt" style="width: 100%">
			<thead>
				<tr>
					<th>Tittel</th>
					<th>Beskrivelse</th>
					<th>Opprettet</th>
				</tr>
			</thead>
			<tbody>';
    $i = 0;
    while ($row = $result->fetch()) {
        $bb = game::bb_to_html($row['ag_description']);
        echo '
				<tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '>
					<td><a href="?ag_id=' . $row['ag_id'] . '">' . htmlspecialchars($row['ag_title']) . '</a></td>
					<td>' . (empty($bb) ? '&nbsp;' : $bb) . '</td>
					<td>' . $_base->date->get($row['ag_time'])->format() . '<br />Av <user id="' . $row['ag_up_id'] . '" /></td>
				</tr>';
    }
    echo '
			</tbody>
		</table>';
}
echo '
		<p><a href="?new">Opprett ny avstemning &raquo;</a></p>
	</div>
</div>';
Ejemplo n.º 17
0
    /** Sjekk for IP-ban */
    private function check_ip_ban()
    {
        global $_base;
        // sjekk for IP-ban
        if ($_SERVER['REQUEST_METHOD'] == "CRON") {
            return;
        }
        // allerede sjekket og OK?
        if (cache::fetch("ip_ok_" . $_SERVER['REMOTE_ADDR'])) {
            return;
        }
        $ip = \Kofradia\DB::quote(to_float(ip2long($_SERVER['REMOTE_ADDR'])));
        $time = time();
        $result = \Kofradia\DB::get()->query("SELECT bi_ip_start, bi_ip_end, bi_time_start, bi_time_end, bi_reason FROM ban_ip WHERE {$ip} BETWEEN bi_ip_start AND bi_ip_end AND IF(ISNULL(bi_time_end), {$time} >= bi_time_start, {$time} BETWEEN bi_time_start AND bi_time_end) ORDER BY bi_ip_end - bi_ip_start");
        // fant ingen IP-ban oppføring
        if ($result->rowCount() == 0) {
            // sjekk om vi venter en kommende IP-ban
            $result = \Kofradia\DB::get()->query("SELECT bi_time_start FROM ban_ip WHERE {$ip} BETWEEN bi_ip_start AND bi_ip_end AND {$time} <= bi_time_start ORDER BY bi_time_start LIMIT 1");
            if ($result->rowCount() > 0) {
                $next = $result->fetchColumn(0);
                // marker som ok for tiden før IP-ban starter
                cache::store("ip_ok_" . $_SERVER['REMOTE_ADDR'], true, $next - $time);
                return;
            }
            // marker som ok
            cache::store("ip_ok_" . $_SERVER['REMOTE_ADDR'], true);
            return;
        }
        // utestengt via IP
        // mer enn 1 uke vil vise som ubestemt tid
        // sett opp grunner
        $ban_end = 0;
        $reasons = array();
        while ($row = $result->fetch()) {
            if ($ban_end !== false && empty($row['bi_time_end'])) {
                $ban_end = false;
            } elseif ($ban_end !== false && $row['bi_time_end'] > $ban_end) {
                $ban_end = $row['bi_time_end'];
            }
            // sett opp IP-adresse (range?)
            $ip = '<b>' . long2ip($row['bi_ip_start']);
            if ($row['bi_ip_start'] != $row['bi_ip_end']) {
                // range
                $ip .= ' - ' . long2ip($row['bi_ip_end']);
            }
            $ip .= '</b>';
            // grunn oppgitt?
            if (empty($row['bi_reason'])) {
                // nei
                $reason = 'Grunn ikke oppgitt.';
            } else {
                // ja
                $reason = game::bb_to_html($row['bi_reason']);
            }
            #$reasons[] = '<p>'.$ip.': '.$reason.'</p>';
            $reasons[] = '<fieldset><legend>' . $ip . '</legend><p>' . $reason . '</p></fieldset>';
        }
        // "jukse" til ubestemt tid?
        #if ($ban_end !== false && $ban_end > time()+604800) $ban_end = false;
        #$timeinfo = $ban_end === false ? '<p>Din IP-adresse er utestengt på ubestemt tid.</p>' : '<p>Din IP-adresse er utestengt til <b>'.$_base->date->get($ban_end)->format(date::FORMAT_SEC).'</b>.</p>';
        putlog("ABUSE", "%c8%bIP-Blokk:%b%c %u{$_SERVER['REMOTE_ADDR']}%u - {$_SERVER['HTTP_USER_AGENT']}");
        // send feilmelding etc
        header("HTTP/1.0 403 Forbidden");
        echo '<!DOCTYPE html>
<html lang="no">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="author" content="Henrik Steen; http://www.henrist.net" />
<title>IP-blokkering</title>
<style type="text/css">
<!--
body { font-family: tahoma; font-size: 14px; }
h1 { font-size: 23px; }
.hsws { color: #CCCCCC; font-size: 12px; }
.subtitle { font-size: 16px; font-weight: bold; }
fieldset { margin: 10px 0 }
fieldset p { margin: 8px 3px 5px; padding: 0 }
legend { color: #FFFFFF; background-color: #222222; padding: 3px 5px; border: 3px solid #FFFFFF; border-width: 0 3px }
-->
</style>
</head>
<body>
<h1>IP-blokkering</h1>
<p>Din IP-adresse er blokkert/utestengt.</p>
<p>IP-adresse og eventuelle grunner:</p>
' . implode("\n", $reasons) . '
<p class="hsws"><a href="http://hsw.no/">hsw.no</a></p>
</body>
</html>';
        die;
    }
Ejemplo n.º 18
0
 /** Formatere hendelser i loggen */
 public function format_log($id, $time, $action, $data, $extra)
 {
     global $__server;
     // sett opp data
     switch (self::$log_id[$action]) {
         // Forum: Ny forumtråd
         case "forum_topic_add":
             $info = explode(":", $data);
             $data = '<user id="' . $info[0] . '" /> opprettet <a href="' . $__server['relative_path'] . '/forum/topic?id=' . $info[1] . '">' . htmlspecialchars(urldecode($info[2])) . '</a> i forumet.';
             break;
             // Forum: Forumtråd slettet
         // Forum: Forumtråd slettet
         case "forum_topic_delete":
             $info = explode(":", $data);
             $title = $this->mod ? '<a href="' . $__server['relative_path'] . '/forum/topic?id=' . $info[1] . '">' . htmlspecialchars(urldecode($info[2])) . '</a>' : htmlspecialchars(urldecode($info[2]));
             $data = '<user id="' . $info[0] . '" /> slettet ' . $title . ' fra forumet.';
             break;
             // Forum: Forumtråd gjenopprettet
         // Forum: Forumtråd gjenopprettet
         case "forum_topic_restore":
             $info = explode(":", $data);
             $data = '<user id="' . $info[0] . '" /> gjenopprettet <a href="' . $__server['relative_path'] . '/forum/topic?id=' . $info[1] . '">' . htmlspecialchars(urldecode($info[2])) . '</a> i forumet.';
             break;
             // Forum: Forumtråd redigert
         // Forum: Forumtråd redigert
         case "forum_topic_edit":
             $info = explode(":", $data);
             $data = '<user id="' . $info[0] . '" /> redigerte <a href="' . $__server['relative_path'] . '/forum/topic?id=' . $info[1] . '">' . htmlspecialchars(urldecode($info[2])) . '</a> i forumet.';
             break;
             // Medlem: Inviter spiller
         // Medlem: Inviter spiller
         case "member_invite":
             $info = explode(":", $data);
             $data = '<user id="' . $info[0] . '" /> inviterte <user id="' . $info[1] . '" /> til ' . $this->refstring . ' som <b>' . htmlspecialchars(urldecode($info[2])) . (!empty($info[3]) ? ' underordnet <user id="' . $info[3] . '" />' : '') . '</b>.';
             break;
             // Medlem: Godta invitasjon
         // Medlem: Godta invitasjon
         case "member_invite_accept":
             $data = '<user id="' . $data . '" /> godtok invitasjonen og er nå medlem av ' . $this->refstring . '.';
             break;
             // Medlem: Avslå invitasjon
         // Medlem: Avslå invitasjon
         case "member_invite_decline":
             $data = '<user id="' . $data . '" /> avslo invitasjonen til ' . $this->refstring . '.';
             break;
             // Medlem: Tilbaketrukket invitasjon
         // Medlem: Tilbaketrukket invitasjon
         case "member_invite_pullback":
             $info = explode(":", $data);
             if ($info[0]) {
                 $data = '<user id="' . $info[0] . '" /> trakk tilbake invitasjonen til <user id="' . $info[1] . '" />.';
             } else {
                 $data = 'Invitasjonen til <user id="' . $info[1] . '" /> ble trukket tilbake.';
             }
             break;
             // Medlem: Foreslå medlem
         // Medlem: Foreslå medlem
         case "member_suggest":
             $info = explode(":", $data);
             $data = '<user id="' . $info[0] . '" /> foreslo <user id="' . $info[1] . '" /> som medlem av ' . $this->refstring . ' som <b>' . htmlspecialchars(urldecode($info[2])) . '</b>.';
             break;
             // Medlem: Godta forslag
         // Medlem: Godta forslag
         case "member_suggest_accept":
             $info = explode(":", $data);
             $data = '<user id="' . $info[0] . '" /> godtok forslaget' . ($info[3] ? ' til <user id="' . $info[3] . '" />' : '') . ' om å invitere <user id="' . $info[1] . '" /> til ' . $this->refstring . ' som <b>' . htmlspecialchars(urldecode($info[2])) . '</b>. <user id="' . $info[1] . '" /> er nå invitert.';
             break;
             // Medlem: Avslå forslag
         // Medlem: Avslå forslag
         case "member_suggest_decline":
             $info = explode(":", $data);
             if ($info[0]) {
                 $data = '<user id="' . $info[0] . '" /> avslo forslaget om å invitere <user id="' . $info[1] . '" />.';
             } else {
                 $data = 'Forslaget om å invitere <user id="' . $info[1] . '" /> ble avslått.';
             }
             break;
             // Medlem: Forlat
         // Medlem: Forlat
         case "member_leave":
             $info = explode(":", $data);
             $data = '<user id="' . $info[0] . '" /> forlot ' . $this->refstring . (isset($info[1]) ? ' fra sin posisjon som <b>' . htmlspecialchars(urldecode($info[1])) . '</b>' : '') . '.';
             break;
             // Medlem: Drept/for lav helse
         // Medlem: Drept/for lav helse
         case "member_deactivated":
             $info = explode(":", $data);
             $data = '<user id="' . $info[0] . '" /> fikk for lite helse til å kunne opprettholde sitt medlemskap.' . (isset($info[1]) ? ' Hadde posisjonen <b>' . htmlspecialchars(urldecode($info[1])) . '</b>' : '') . '.';
             break;
             // Medlem: Sparket
         // Medlem: Sparket
         case "member_kicked":
             $info = explode(":", $data);
             $note = $note = empty($info[3]) ? '' : ' Begrunnelse: ' . game::bb_to_html(urldecode($info[3]));
             $data = '<user id="' . $info[0] . '" /> sparket <user id="' . $info[1] . '" /> fra ' . $this->refstring . ' og sin posisjon som <b>' . htmlspecialchars(urldecode($info[2])) . '</b>.' . $note;
             break;
             // Medlem: Posisjon
         // Medlem: Posisjon
         case "member_priority":
             $info = explode(":", $data);
             if ($info[0]) {
                 $data = '<user id="' . $info[0] . '" /> endret posisjonen til <user id="' . $info[1] . '" /> fra <b>' . htmlspecialchars(urldecode($info[2])) . '</b>' . (!empty($info[4]) ? ' underordnet <user id="' . $info[4] . '" />' : '') . ' til <b>' . htmlspecialchars(urldecode($info[3])) . '</b>' . (!empty($info[5]) ? ' underordnet <user id="' . $info[5] . '" />' : '') . '.';
             } else {
                 // anonym
                 $data = 'Posisjonen til <user id="' . $info[1] . '" /> ble endret fra <b>' . htmlspecialchars(urldecode($info[2])) . '</b>' . (!empty($info[4]) ? ' underordnet <user id="' . $info[4] . '" />' : '') . ' til <b>' . htmlspecialchars(urldecode($info[3])) . '</b>' . (!empty($info[5]) ? ' underordnet <user id="' . $info[5] . '" />' : '') . '.';
             }
             break;
             // Medlem Overordnet capo
         // Medlem Overordnet capo
         case "member_parent":
             $info = explode(":", $data);
             if ($info[0]) {
                 $data = '<user id="' . $info[0] . '" /> endret overordnet til <user id="' . $info[1] . '" /> fra <user id="' . $info[2] . '" /> til <user id="' . $info[3] . '" />.';
             } else {
                 // anonym
                 $data = 'Overordnet til <user id="' . $info[1] . '" /> ble endret fra <user id="' . $info[2] . '" /> til <user id="' . $info[3] . '" />.';
             }
             break;
             // Sett en spiller til en bestemt posisjon
         // Sett en spiller til en bestemt posisjon
         case "member_set_priority":
             // syntax: up_id:priority_name:parent_up_id
             $info = explode(":", $data);
             $data = '<user id="' . $info[0] . '" /> ble satt som <b>' . htmlspecialchars(urldecode($info[1])) . '</b>' . (!empty($info[2]) ? ' underordnet <user id="' . $info[2] . '" />' : '') . '.';
             break;
             // Ny logo
         // Ny logo
         case "logo":
             if (empty($data)) {
                 $data = "Logoen ble fjernet.";
             } else {
                 $info = explode(":", $data);
                 $data = isset($info[1]) && $info[1] == "removed" ? '<user id="' . $info[0] . '" /> fjernet logoen' : '<user id="' . $info[0] . '" /> lastet opp' . (!empty($extra) ? ' ny logo' : ' en logo');
                 $data .= ' for ' . $this->type['refobj'] . '.';
             }
             if (!empty($extra)) {
                 $data .= ' Gammel logo: <img src="' . ess::$s['rpath'] . '/ff/_logo?ff_id=' . $this->id . '&amp;log_id=' . $id . '" alt="Gammel logo" />';
             }
             break;
             // Endre beskrivelse
         // Endre beskrivelse
         case "description":
             $data = '<user id="' . $data . '" /> redigerte beskrivelsen for ' . $this->refstring . '.';
             break;
             // Salg
         // Salg
         case "sell":
             $info = explode(":", $data);
             switch ($info[0]) {
                 // starter salget:
                 // {TYPE=init}:BOSS:UBOSS:FEE:AMOUNT
                 case "init":
                     $data = '<user id="' . $info[1] . '" /> åpnet salg av ' . $this->refstring . ' til <user id="' . $info[2] . '" /> for ' . game::format_cash($info[4]) . '.';
                     break;
                     // avbryter salget (trekker det tilbake)
                     // {TYPE=abort}:BOSS:UBOSS:FEE:AMOUNT
                 // avbryter salget (trekker det tilbake)
                 // {TYPE=abort}:BOSS:UBOSS:FEE:AMOUNT
                 case "abort":
                     $data = '<user id="' . $info[1] . '" /> trakk tilbake salg av ' . $this->refstring . ' til <user id="' . $info[2] . '" /> for ' . game::format_cash($info[4]) . '.';
                     break;
                     // godtar kjøpet (mottakeren)
                     // {TYPE=approve}:BOSS:UBOSS:FEE:AMOUNT
                 // godtar kjøpet (mottakeren)
                 // {TYPE=approve}:BOSS:UBOSS:FEE:AMOUNT
                 case "approve":
                     $data = '<user id="' . $info[2] . '" /> godtok salget av ' . $this->refstring . ' og har nå overtatt som ' . htmlspecialchars($this->type['priority'][1]) . '. <user id="' . $info[1] . '" /> har blitt satt som ' . htmlspecialchars($this->type['priority'][2]) . '. Gebyr: ' . game::format_cash($info[3]) . '. Salgsbeløp: ' . game::format_cash($info[4]) . '.';
                     break;
                     // avslår kjøpet (mottakeren)
                     // {TYPE=reject}:UBOSS:FEE:AMOUNT
                 // avslår kjøpet (mottakeren)
                 // {TYPE=reject}:UBOSS:FEE:AMOUNT
                 case "reject":
                     $data = '<user id="' . $info[2] . '" /> avslo salget av ' . $this->refstring . ' for ' . game::format_cash($info[4]) . '.';
                     break;
             }
             break;
             // Nytt navn
         // Nytt navn
         case "name":
             // syntax: gammelt navn:nytt navn:spiller som sendte søknad:innvilget av
             // syntax (abstrakt): ff_name:ff_name:up_id:up_id
             $info = explode(":", $data);
             $data = 'Navnet på ' . $this->refstring . ' ble endret fra ' . htmlspecialchars(urldecode($info[0])) . ' til <b>' . htmlspecialchars(urldecode($info[1])) . '</b>.';
             break;
         case "bank_overforing_tap_change":
             $info = explode(":", $data);
             $data = 'Overføringsgebyret endret seg med ' . game::format_number($info[1] * 100, 2) . ' % til <b>' . game::format_number(($info[0] + $info[1]) * 100, 2) . ' %</b>.';
             break;
         case "article_edited":
             // data: fna_id,up_id,fna_up_id,fna_title_org,fna_title_new,fna_text_old,fna_text_new
             $info = array_map("urldecode", explode(":", $data));
             $data = '<user id="' . $info[1] . '" /> redigerte <a href="' . $__server['relative_path'] . '/ff/avis?ff_id=' . $this->id . '&amp;a&amp;ffna=' . $info[0] . '">artikkelen</a> til <user id="' . $info[2] . '" />.';
             break;
             // kastet ut spiller fra bomberommet
         // kastet ut spiller fra bomberommet
         case "bomberom_kick":
             // syntax: up_id(som utfører handlingen):up_id(som ble kastet ut):up_brom_expire(når vi egentlig skulle gå ut av bomberommet)
             $info = explode(":", $data);
             $data = '<user id="' . $info[0] . '" /> kastet ut <user id="' . $info[1] . '" /> fra bomberommet, som egentlig skulle sittet til ' . ess::$b->date->get($info[2])->format() . '.';
             break;
             // oppløst
         // oppløst
         case "dissolve":
             // syntax: up_id(som utfører handlingen):up_id(som ble kastet ut):up_brom_expire(når vi egentlig skulle gå ut av bomberommet)
             $info = explode(":", $data);
             $data = ucfirst($this->type['refobj']) . ' ble oppløst.';
             break;
             // kuler inn
         // kuler inn
         case "bullets_in":
             // syntax: up_id:num
             $info = explode(":", $data);
             $data = '<user id="' . $info[0] . '" /> satt inn ' . fwords("%d kule", "%d kuler", $info[1]) . ' i kulelageret.';
             break;
             // kuler ut
         // kuler ut
         case "bullets_out":
             // syntax: up_id:num[:action_up]
             $info = explode(":", $data);
             if (isset($info[2])) {
                 $data = '<user id="' . $info[2] . '" /> tok ut ' . fwords("%d kule", "%d kuler", $info[1]) . ' fra kulelageret og gav de til <user id="' . $info[0] . '" />.';
             } else {
                 $data = '<user id="' . $info[0] . '" /> tok ut ' . fwords("%d kule", "%d kuler", $info[1]) . ' fra kulelageret.';
             }
             break;
             // informasjon
         // informasjon
         case "info":
             // behold data urørt
             break;
             // Dummy
         // Dummy
         case "dummy":
             $data = $time;
             break;
         default:
             $data = htmlspecialchars($data);
     }
     return $data;
 }
Ejemplo n.º 19
0
				<th><span class="tools_r">' . $sort->show_button(4, 5) . '</span>Innhold</th>
				<th><span class="tools_r">' . $sort->show_button(6, 7) . '</span> Dato</th>
			</tr>
		</thead>
		<tbody>';
            $_base->page->add_css('
.ny { color: #FF0000; font-weight: bold }
.it_u { white-space: nowrap; width: 100px }
.it_dato { text-align: center; white-space: nowrap; color: #888888; width: 100px }
#meldinger a { text-decoration: none }
.utgaaende { color: #888888 }' . ($show_deleted ? '
.slettet { color: #BBBB99 }' : '
.ir_marked { color: #BBBB99; font-weight: bold }'));
            $i = 0;
            while ($row = $result->fetch()) {
                $content = trim(strip_tags(game::bb_to_html($row['id_text'])));
                $length = mb_strlen($content);
                $max = 60;
                if (mb_strlen($content) > $max) {
                    $content = mb_substr($content, 0, $max - 4) . " ...";
                }
                echo '
			<tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '>
				<td class="it_u">' . ($row['im_up_id'] == $user->player->id ? '<span class="utgaaende">Utgående</span>' : game::profile_link($row['im_up_id'], $row['up_name'], $row['up_access_level'])) . '</td>
				<td><a href="innboks_les?id=' . $row['it_id'] . '&amp;goto=' . $row['im_id'] . '">' . htmlspecialchars($row['it_title']) . '</a>' . ($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>' : '') . ($row['ir_up_id'] != $user->player->id || !$user->player->active ? ' <span class="it_locked">(Låst)</span>' : '') . ($row['ir_marked'] != 0 ? ' <span class="ir_marked">(Til oppfølging)</span>' : '') . '</td>
				<td class="dark">' . htmlspecialchars($content) . ' (' . $length . ' tegn)</td>
				<td class="it_dato">' . $_base->date->get($row['im_time'])->format() . '</td>
			</tr>';
            }
            echo '
		</tbody>
Ejemplo n.º 20
0
 /**
  * Utfør biltyveri
  */
 public function biltyveri_utfor($option_id)
 {
     if (!isset($this->options[$option_id])) {
         throw new HSException("Ugyldig alternativ.");
     }
     $option = $this->options[$option_id];
     // litt sannsynlighetsberegning
     $rand = rand(0, 1000);
     // test sannsynlighet
     $ret = array("success" => $rand <= $option['percent'] * 10);
     // traff vi på sannsynligheten?
     if ($ret['success']) {
         // hent alle bilene vi kan skaffe
         $result = \Kofradia\DB::get()->query("SELECT id, probability FROM gta WHERE min_rank <= " . $this->up->rank['number']);
         $biler = array();
         $prob_total = 0;
         while ($row = $result->fetch()) {
             $prob_total += $row['probability'];
             $biler[$row['id']] = $row['probability'];
         }
         // finn en bil
         $rand = rand(1, $prob_total);
         $prob = 1;
         $bil = false;
         foreach ($biler as $id => $p) {
             $prob = $prob + $p;
             if ($rand < $prob) {
                 // fant enhet
                 $bil = $id;
                 break;
             }
         }
         // hent bilen
         $result = \Kofradia\DB::get()->query("SELECT id, brand, model, min_rank, img_mini, probability FROM gta WHERE id = {$bil}");
         // finn en tilfeldig bil bassert på sannsynligheten for bilen
         $bil = $result->fetch();
         // beregn skade ut i fra sannsynligheten vi hadde
         $damage_min = 99 - floor($option['percent']) * (rand(1, 15) / 10);
         if ($damage_min < 0) {
             $damage_min = 0;
         }
         $damage_max = 99 - floor($option['percent']) * (rand(1, 10) / 10);
         if ($damage_max > 99) {
             $damage_max = 99;
         }
         if ($damage_min > $damage_max) {
             $damage = $damage_min;
         }
         $damage = rand($damage_min, $damage_max);
         // gi rankpoeng
         $ret['rank_change'] = $this->up->increase_rank(self::RANK_BILTYVERI);
         // gi bil
         \Kofradia\DB::get()->exec("INSERT INTO users_gta SET ug_up_id = " . $this->up->id . ", gtaid = {$bil['id']}, time = " . time() . ", b_id_org = " . $this->up->data['up_b_id'] . ", b_id = " . $this->up->data['up_b_id'] . ", damage = {$damage}");
         $ret['gta'] = $bil;
         // finn en tekst?
         $result = \Kofradia\DB::get()->query("SELECT got_text FROM gta_options_text WHERE got_go_id = {$option['id']} ORDER BY RAND() LIMIT 1");
         if ($row = $result->fetch()) {
             $replace_from = array("%bil%", "%skade%");
             $replace_to = array("{$bil['brand']} {$bil['model']}", $damage);
             $ret['message'] = game::bb_to_html(str_replace($replace_from, $replace_to, $row['got_text']));
         } else {
             $ret['message'] = "Du skaffet deg en <b>{$bil['brand']} {$bil['model']}</b> med <b>{$damage} %</b> skade!";
         }
     }
     // wanted nivå
     $ret['wanted_change'] = $this->up->fengsel_rank(self::RANK_BILTYVERI, $ret['success']);
     // oppdater prosenter osv
     $increase = rand(0, $option['max_pos_change'] * 10) / 10;
     // for høy prosent?
     $percent = $option['percent'];
     if ($percent + $increase > $option['max_percent']) {
         $percent -= rand(0, $option['max_neg_change'] * 10) / 10;
     } else {
         $percent += $increase;
     }
     // ordne status
     if ($option['status_id']) {
         \Kofradia\DB::get()->exec("UPDATE gta_options_status SET percent = {$percent}, time_last = " . time() . ", count = count + 1" . ($ret['success'] ? ', success = success + 1' : '') . " WHERE id = {$option['status_id']}");
     } else {
         \Kofradia\DB::get()->exec("INSERT INTO gta_options_status SET optionid = {$option['id']}, gos_up_id = " . $this->up->id . ", percent = {$percent}, time_last = " . time() . ", count = 1" . ($ret['success'] ? ', success = 1' : ''));
     }
     // energi
     $this->up->energy_use(self::ENERGY_BILTYVERI);
     // trigger
     $this->up->trigger("biltyveri", array("success" => $ret['success'], "option" => $option, "prob" => $option['percent'], "gta" => $ret['success'] ? $bil : null, "damage" => $ret['success'] ? $damage : null));
     return $ret;
 }
Ejemplo n.º 21
0
 /**
  * Vis side for feilmelding hvis det er noen feilmelding
  */
 protected function show_errors()
 {
     // ingen feilmelding?
     if (!isset($_SESSION[$GLOBALS['__server']['session_prefix'] . 'login_error'])) {
         return;
     }
     // vis feilside
     $login_error = $_SESSION[$GLOBALS['__server']['session_prefix'] . 'login_error'][0];
     $info = $_SESSION[$GLOBALS['__server']['session_prefix'] . 'login_error'][1];
     unset($_SESSION[$GLOBALS['__server']['session_prefix'] . 'login_error']);
     \ess::$b->page->theme_file = "guest";
     switch ($login_error) {
         case "deactivated":
             \ess::$b->page->add_title("Deaktivert");
             return \Kofradia\View::forgeTwig('users/login/deactivated', array("email" => $info['u_email'], "date" => $info['u_deactivated_time'], "reason" => \game::bb_to_html($info['u_deactivated_reason'])));
         default:
             throw new HSException("Ukjent innloggingsfeil ({$login_error})");
     }
 }
Ejemplo n.º 22
0
    /**
     * Invitere en spiller
     */
    protected function invite()
    {
        // hent oversikt over ledige plasser
        $limits_data = $this->ff->check_limits();
        // har vi noen ledige plasser?
        if ($limits_data['total_free'] == 0 && !$this->ff->mod) {
            ess::$b->page->add_message("Det er ingen ledige plasser i {$this->ff->type['refobj']}.", "error");
            redirect::handle();
        }
        ess::$b->page->add_title("Inviter spiller");
        $player = false;
        // begrensning i antall ff man kan være med i
        if ($this->ff->type['type'] == "familie") {
            $type_limit = ff::MAX_FAMILIES;
            $type_text = "broderskap";
            $type_where = "ff_type = 1";
        } else {
            $type_limit = ff::FIRMS_MEMBERS_LIMIT;
            $type_text = "firmaer";
            $type_where = "ff_type != 1";
        }
        // finne spiller?
        if (isset($_POST['player']) || isset($_REQUEST['up_id'])) {
            // hent spillerinformasjon
            $where = isset($_REQUEST['up_id']) ? 'up_id = ' . intval($_REQUEST['up_id']) : 'up_name = ' . \Kofradia\DB::quote($_POST['player']);
            $more = isset($_REQUEST['up_id']) ? '' : ' ORDER BY up_access_level = 0, up_last_online DESC LIMIT 1';
            $result = \Kofradia\DB::get()->query("\n\t\t\t\tSELECT up_id, up_name, up_access_level, up_points, upr_rank_pos, uc_time, uc_info, COUNT(ff_id) ff_num\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\t\tJOIN users ON up_u_id = u_id\n\t\t\t\t\tLEFT JOIN users_contacts ON uc_u_id = u_id AND uc_contact_up_id = " . login::$user->player->id . " AND uc_type = 2\n\t\t\t\t\tLEFT JOIN ff_members ON ffm_up_id = up_id AND (ffm_status = 0 OR ffm_status = 1)\n\t\t\t\t\tLEFT JOIN ff ON ff_id = ffm_ff_id AND ff_is_crew = 0 AND ff_inactive = 0 AND {$type_where}\n\t\t\t\tWHERE {$where}\n\t\t\t\tGROUP BY up_id{$more}");
            $row = $result->fetch();
            // fant ikke spilleren?
            if (!$row || !$row['up_id']) {
                ess::$b->page->add_message("Fant ikke spilleren med " . (isset($_REQUEST['up_id']) ? "id #" . intval($_REQUEST['up_id']) : "navn <b>" . htmlspecialchars($_POST['player']) . "</b>") . ".", "error");
            } else {
                // er i FF?
                if (isset($this->ff->members['list'][$row['up_id']])) {
                    ess::$b->page->add_message('<user id="' . $row['up_id'] . '" /> er allerede foreslått, invitert eller medlem av ' . $this->ff->type['refobj'] . '.', "error");
                } elseif ($row['up_access_level'] == 0) {
                    ess::$b->page->add_message('<user id="' . $row['up_id'] . '" /> er død og kan ikke inviteres.', "error");
                } elseif ($row['uc_time'] && !$this->ff->mod) {
                    $reason = game::bb_to_html($row['uc_info']);
                    $reason = empty($reason) ? '' : ' Begrunnelse: ' . $reason;
                    ess::$b->page->add_message('Denne spilleren blokkerte deg ' . ess::$b->date->get($row['uc_time'])->format() . '. Du kan derfor ikke invitere spilleren til ' . $this->ff->type['refobj'] . '.' . $reason, "error");
                } elseif ($this->ff->data['ff_is_crew'] == 0 && $row['ff_num'] >= $type_limit && !$this->ff->mod) {
                    ess::$b->page->add_message("Spilleren er allerede medlem av eller invitert til for mange {$type_text}.", "error");
                } else {
                    $player = $row;
                }
            }
        }
        // har ikke funnet spiller?
        if (!$player || $_SERVER['REQUEST_METHOD'] == "GET") {
            // vis skjema for å finne spiller
            ess::$b->page->add_title("Velg spiller");
            echo '
<div class="section" style="width: 200px">
	<h1>Inviter spiller</h1>
	<p class="h_right"><a href="medlemmer?ff_id=' . $this->ff->id . '">Tilbake</a></p>
	<boxes />
	<form action="" method="post">
		<p>Skriv inn navn på spilleren du vil invitere til ' . $this->ff->type['refobj'] . '.</p>
		<dl class="dd_right">
			<dt>Spillernavn</dt>
			<dd><input type="text" name="player" value="' . htmlspecialchars(postval("player", $player ? $player['up_name'] : '')) . '" class="styled w100" /></dd>
		</dl>
		<p class="c">
			' . show_sbutton("Finn spiller") . '
			<a href="medlemmer?ff_id=' . $this->ff->id . '">Tilbake</a>
		</p>
	</form>
</div>';
            $this->ff->load_page();
        }
        // sett opp rank informasjon for spilleren
        $rank_info = game::rank_info($player['up_points'], $player['upr_rank_pos'], $player['up_access_level']);
        // fjern eier og medeier posisjonen om nødvendig
        if (!$this->ff->mod) {
            unset($limits_data['priorities'][1]);
            if ($this->ff->uinfo->data['ffm_priority'] > 1) {
                unset($limits_data['priorities'][2]);
            }
        }
        // valg posisjon?
        if (isset($_POST['pick_priority'])) {
            // har ikke valgt posisjon?
            $priority = isset($_POST['priority']) && isset($limits_data['priorities'][$_POST['priority']]) ? $limits_data['priorities'][$_POST['priority']] : false;
            if (!isset($_POST['priority'])) {
                ess::$b->page->add_message("Du må velge en posisjon.", "error");
            } elseif (!$priority || $priority['max'] == -1 && !$this->ff->mod) {
                ess::$b->page->add_message("Ugyldig posisjon.", "error");
            } elseif ($rank_info['number'] < $priority['min_rank'] && !$this->ff->mod) {
                ess::$b->page->add_message('<user id="' . $row['up_id'] . '" /> har ikke høy nok rank for å bli ' . $this->ff->type['priority'][$priority['priority']] . ".", "error");
            } elseif ($priority['free'] == 0 && !$this->ff->mod) {
                ess::$b->page->add_message("Det er ingen ledige plasser som " . $this->ff->type['priority'][$priority['priority']] . ".", "error");
            } elseif ($this->ff->type['parent'] && $priority['priority'] == 4 && !isset($this->ff->members['members_priority'][3])) {
                ess::$b->page->add_message("Det finnes ingen {$this->ff->type['priority'][3]} du kan tilegne en {$this->ff->type['priority'][4]}. Du må først sette en spiller som <b>{$this->ff->type['priority'][3]}</b> før du kan invitere en {$this->ff->type['priority'][4]}.", "error");
            } else {
                $parent = $this->pick_parent($priority, null, $player, 'medlemmer?ff_id=' . $this->ff->id . '&amp;invite&amp;up_id=' . $player['up_id'], '
		<input type="hidden" name="pick_priority" />', true);
                // godkjent?
                if (isset($_POST['confirm']) && validate_sid(false)) {
                    // inviter spilleren
                    if ($this->ff->player_invite($player['up_id'], $priority['priority'], $parent)) {
                        ess::$b->page->add_message('<user id="' . $player['up_id'] . '" /> ble invitert til ' . $this->ff->type['refobj'] . ' som ' . $this->ff->type['priority'][$priority['priority']] . ($parent ? ' underordnet <user id="' . $parent . '" />' : '') . '.');
                        redirect::handle();
                    } else {
                        ess::$b->page->add_message("Noe gikk galt. Kunne ikke invitere spilleren.", "error");
                    }
                }
                // vis bekreftskjema
                ess::$b->page->add_title("Godkjenn invitasjon");
                echo '
<div class="section" style="width: ' . ($parent ? '220' : '150') . 'px">
	<h1>Godkjenn invitasjon</h1>
	<p class="h_right"><a href="medlemmer?ff_id=' . $this->ff->id . '&amp;invite&amp;up_id=' . $player['up_id'] . '">Tilbake</a></p>
	<boxes />
	<form action="" method="post">
		<input type="hidden" name="up_id" value="' . $player['up_id'] . '" />
		<input type="hidden" name="priority" value="' . $priority['priority'] . '" />
		<input type="hidden" name="pick_priority" />' . ($parent ? '
		<input type="hidden" name="parent" value="' . $parent . '" />' : '') . '
		<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
		<p>Informasjon:</p>
		<dl class="dd_right">
			<dt>Spiller</dt>
			<dd>' . game::profile_link($player['up_id'], $player['up_name'], $player['up_access_level']) . '</dd>
			<dt>Posisjon</dt>
			<dd>' . ucfirst($this->ff->type['priority'][$priority['priority']]) . ($parent ? ' underordnet <user id="' . $parent . '" />' : '') . '</dd>
		</dl>' . ($this->ff->data['ff_is_crew'] != 0 && $player['ff_num'] >= $type_limit ? '
		<p>Spilleren er egentlig medlem av eller invitert til for mange andre ' . $type_text . '.</p>' : '') . ($rank_info['number'] < $priority['min_rank'] ? '
		<p>Spilleren har i utgangspunktet for lav rank.</p>' : '') . ($priority['free'] == 0 ? '
		<p>Det er i utgangspunktet ingen ledige plasser for denne posisjonen.</p>' : '') . '
		<p class="c">
			' . show_sbutton("Inviter spiller", 'name="confirm"') . '
			<a href="medlemmer?ff_id=' . $this->ff->id . '&amp;invite&amp;up_id=' . $player['up_id'] . '">Tilbake</a>
		</p>
	</form>
</div>';
                $this->ff->load_page();
            }
        }
        ess::$b->page->add_title("Velg posisjon");
        // maks antall medlemmer en familie kan ha
        $members_limit_max = $this->ff->competition ? ff::MEMBERS_LIMIT_TOTAL_MAX_COMP : ff::MEMBERS_LIMIT_TOTAL_MAX;
        // vis oversikt over de ulike posisjonene man kan velge
        echo '
<div class="section" style="width: 400px">
	<h1>Inviter spiller</h1>
	<p class="h_right"><a href="medlemmer?ff_id=' . $this->ff->id . '&amp;invite">Tilbake</a></p>
	<boxes />
	<form action="" method="post">
		<p>Valgt spiller: ' . game::profile_link($player['up_id'], $player['up_name'], $player['up_access_level']) . '</p>
		<input type="hidden" name="player" value="' . htmlspecialchars($player['up_name']) . '" />
		<input type="hidden" name="up_id" value="' . $player['up_id'] . '" />
		<p>Du må nå velge en posisjon du ønsker spilleren skal få i ' . $this->ff->type['refobj'] . '. Maks antall plasser i ' . $this->ff->type['refobj'] . ': ' . $limits_data['max'] . '.' . ($this->ff->type['type'] == "familie" && $limits_data['max'] < $members_limit_max ? ' <a href="panel?ff_id=' . $this->ff->id . '&amp;a=members_limit">Øk begrensning &raquo;</a>' : '') . '</p>';
        $this->pick_position($limits_data, $rank_info['number']);
        echo '
		<p class="c">
			' . show_sbutton("Velg posisjon", 'name="pick_priority"') . '
			<a href="medlemmer?ff_id=' . $this->ff->id . '&amp;invite&amp;up_id=' . $player['up_id'] . '">Tilbake</a>
		</p>
	</form>
</div>';
        $this->ff->load_page();
    }
Ejemplo n.º 23
0
        // kontroller lås
        ajax::validate_lock(true);
        $result = rapportering::report_signature($ref, $note);
        // brukeren finnes ikke
        if ($result === "player_not_found") {
            ajax::html("<p>Spilleren du ønsket å rapportere ble ikke funnet.</p>", ajax::TYPE_INVALID);
        } elseif ($result[0] === "dupe") {
            ajax::html("<p>Du har allerede rapportert signaturen til denne brukeren.</p>", ajax::TYPE_INVALID);
        }
        break;
        // profiltekst
    // profiltekst
    case "profile":
        // kontroller lås
        ajax::validate_lock(true);
        $result = rapportering::report_profile($ref, $note);
        // brukeren finnes kke
        if ($result === "player_not_found") {
            ajax::html("<p>Spilleren du ønsket å rapportere ble ikke funnet.</p>", ajax::TYPE_INVALID);
        } elseif ($result[0] === "dupe") {
            ajax::html("<p>Du har allerede rapportert profilen til denne brukeren.</p>", ajax::TYPE_INVALID);
        }
        break;
        // fant ikke ønsket rapporteringsvalg
    // fant ikke ønsket rapporteringsvalg
    default:
        ajax::html("<p>Ukjent rapportering.</p>", ajax::TYPE_INVALID);
        sysreport::log("Rapportering ble ikke funnet: {$_POST['type']}\n\nReferanse: {$_POST['ref']}\n\nBegrunnelse for rapportering: {$_POST['note']}");
}
ajax::html('<p>Rapporteringen ble sendt inn og vil bli behandlet så fort som mulig.</p><p>Du vil normalt <b>ikke få svar</b> når saken er behandlet. Takk for din rapportering.</p><div class="p" style="border: 1px dotted #525252; padding: 5px; margin: 1em 1.5em">' . parse_html(game::bb_to_html($note)) . '</div>');
Ejemplo n.º 24
0
            die("Ugyldig forum: {$id}");
        }
    }
    $ids = array_map("intval", $show);
}
$forums = array(1 => "Game", 2 => "Off-topic", 3 => "Salg/søknad", 4 => "Support");
$forums_active = array();
foreach ($ids as $id) {
    $forums_active[] = $forums[$id];
}
// sett opp beskrivelse
$desc = array_map("strtolower", $forums_active);
$last = count($desc) > 1 ? array_pop($desc) : false;
$description = "Forumsvar i " . implode(", ", $desc) . ($last ? " og {$last}" : '') . ' forum' . ($last ? 'ene' : 'et') . '.';
// sett opp RSS
$rss = new rss("Forumsvar - Kofradia", "https://www.kofradia.no/", $description);
$rss->ttl(1);
// hent forumsvarene
$result = \Kofradia\DB::get()->query("\n\tSELECT fr_id, fr_text, fr_time, up_name, ft_id, ft_type, ft_title, ft_fse_id\n\tFROM forum_replies r\n\t\tLEFT JOIN users_players ON up_id = fr_up_id,\n\t\tforum_topics t\n\tWHERE fr_ft_id = ft_id AND ft_fse_id IN (" . implode(",", $ids) . ") AND ft_deleted = 0 AND fr_deleted = 0\n\tORDER BY fr_time DESC LIMIT 50");
while ($row = $result->fetch()) {
    $item = new rss_item();
    $item->title($row['up_name'] . ' svarte i &laquo;' . htmlspecialchars($row['ft_title']) . '&raquo;' . ($row['ft_type'] == 2 ? ' (sticky)' : ($row['ft_type'] == 3 ? ' (viktig)' : '')) . ' (' . $forums[$row['ft_fse_id']] . ' forum)');
    $item->description(parse_html(game::bb_to_html($row['fr_text'])));
    $item->author($row['up_name']);
    $item->pubDate($row['fr_time']);
    $item->link($__server['path'] . '/forum/topic?id=' . $row['ft_id'] . '&replyid=' . $row['fr_id']);
    $item->guid("fr{$row['fr_id']}", false);
    $rss->item($item);
}
header("Content-Type: application/rss+xml; charset=utf-8");
echo $rss->generate();
Ejemplo n.º 25
0
if ($result->rowCount() == 0) {
    echo '
		<p class="c">Det er ingen søknader som er åpne for øyeblikket.</p>';
} else {
    while ($row = $result->fetch()) {
        echo '
		<h2 class="bg1">
			' . htmlspecialchars($row['so_title']) . '
			<span class="left2"></span>
			<span class="right2"></span>
		</h2>
		<div class="bg1">';
        // preinfo
        if (!empty($row['so_preinfo'])) {
            echo '
			<div class="p">' . game::bb_to_html($row['so_preinfo']) . '</div>';
        }
        echo '
			<p>Søknadsfrist: ' . $_base->date->get($row['so_expire'])->format(date::FORMAT_SEC) . '</p>
			<p><a href="soknader_vis?so_id=' . $row['so_id'] . '">Vis søknad &raquo;</a></p>
		</div>';
    }
}
echo '
	</div>
</div>';
// hent lukkede søknader
$pagei = new pagei(pagei::ACTIVE_GET, "side", pagei::PER_PAGE, 20);
$result = $pagei->query("SELECT so_id, so_title, so_expire, so_status FROM soknader_oversikt WHERE so_expire <= " . time() . " AND so_status != 0 ORDER BY so_expire DESC, so_title");
if ($result->rowCount() > 0) {
    echo '
Ejemplo n.º 26
0
	<tbody class="r">
		<tr>
			<th>IP</th>
			<td>' . $ip_str . '</td>
		</tr>
		<tr>
			<th>Utestengt til</th>
			<td>' . ($time == 0 ? 'Permanent' : ess::$b->date->get($time + time())->format()) . '</td>
		</tr>
		<tr>
			<th>Begrunnelse</th>
			<td>' . game::bb_to_html($begrunnelse) . '</td>
		</tr>
		<tr>
			<th>Intern info</th>
			<td>' . game::bb_to_html($interninfo) . '</td>
		</tr>
	</tbody>
</table>
<form action="" method="post">
	<input type="hidden" name="ip" value="' . $ip_str . '" />
	<input type="hidden" name="time" value="' . htmlspecialchars($time) . '" />
	<input type="hidden" name="begrunnelse" value="' . htmlspecialchars($begrunnelse) . '" />
	<input type="hidden" name="interninfo" value="' . htmlspecialchars($interninfo) . '" />
	<input type="hidden" name="confirm" />
	<p align="center">
		' . show_sbutton("Godkjenn") . '
	</p>
</form>';
        ess::$b->page->load();
    }
Ejemplo n.º 27
0
    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>
		<?php 
}
?>

			</tbody>
		</table>
		<p class="c">
			<?php 
Ejemplo n.º 28
0
    protected function show()
    {
        // tittel på meldingstråden
        ess::$b->page->add_title($this->thread->data_thread['it_title']);
        // sett opp deltakere
        $deltakere = array();
        $c = access::has("crewet");
        foreach ($this->thread->receivers as $row) {
            if ($this->thread->data_rel && $this->thread->data_rel['ir_up_id'] == $row['ir_up_id']) {
                continue;
            }
            $p = $row['ir_deleted'] != 0 || $row['up_access_level'] == 0 && (!access::has("crewet") || $row['u_access_level'] == 0 || $row['u_active_up_id'] != $row['ir_up_id']);
            $deltakere[] = ($p ? '<span class="user_strike">' : '') . '<user id="' . $row['ir_up_id'] . '" />' . ($p ? '</span>' : '');
        }
        $deltakere_siste = array_pop($deltakere);
        $this->add_receivers();
        // overskrift
        if ($this->thread->restrict || !$this->thread->can_reply_receivers) {
            echo '
<h1>Melding: ' . htmlspecialchars($this->thread->data_thread['it_title']) . '</h1>';
        } else {
            echo '
<form action="" method="post">
	<h1><span class="red">' . show_sbutton("Slett", 'name="slettalle" onclick="return confirm(\'Dette vil slette meldingstråden for alle deltakere. Denne handlingen kan ikke angres uten videre. Fortsette?\')"') . '</span> Melding: ' . htmlspecialchars($this->thread->data_thread['it_title']) . '</h1>
</form>';
        }
        // tittel og verktøy
        echo '
<form action="innboks" method="post">
	<p class="im_tools top h_right">
		<a href="innboks' . ($this->thread->data_rel ? '' : '?user='******'up_name'])) . '">Tilbake til meldinger</a>
		<input type="hidden" name="it_id[]" value="' . $this->thread->id . '" />' . (!isset($_GET['reply']) && $this->can_reply ? '
		' . show_sbutton("Opprett svar", 'name="reply" accesskey="s"', 'reply_link_form_show') : '') . ($this->thread->data_rel ? '
		<span class="red">' . show_sbutton("Slett", 'name="slett"  accesskey="d" onclick="return confirm(\'Er du sikker på at du vil slette meldingen?\')"') . '</span>' : '') . '
	</p>
</form>';
        // deltakere
        if ($deltakere_siste) {
            echo '
<p id="im_deltakere"><span id="im_deltakere_i">Deltakere: ' . (count($deltakere) > 0 ? implode(", ", $deltakere) . ' og ' : '') . $deltakere_siste . '</span></p>';
            if (!$this->thread->can_reply_access) {
                echo '
<p>Du har ikke mulighet til å svare i denne meldingen.</p>';
            } elseif (!$this->thread->can_reply_receivers) {
                echo '
<p>Det er ingen mottakere du kan svare til.</p>';
            }
        } else {
            echo '
<p>Det er ingen andre deltakere enn deg selv i denne meldingstråden.</p>';
        }
        // flere sider?
        if ($this->pagei->pages > 1) {
            echo '
<p class="c">' . $this->pagei->pagenumbers(array("goto")) . '</p>';
        }
        // svarskjema
        echo '
<div id="container_reply"' . (!isset($_GET['reply']) ? ' style="display: none"' : '') . '>
	<form action="' . htmlspecialchars(game::address(PHP_SELF, $_GET, array(), array("reply" => true))) . '" method="post" onsubmit="this.onsubmit=function(){return false;}">
		<div class="section" style="margin-top:0">
			<h3>Skriv svar</h3>
			<dl class="dd_auto_100">
				<dt>Innhold</dt>
				<dd><textarea name="melding" rows="10" cols="75" id="textContent">' . htmlspecialchars(postval("melding")) . '</textarea></dd>
				<dt' . (isset($_POST['preview']) && isset($_POST['melding']) ? '' : ' style="display: none"') . ' id="previewDT">Forhåndsvisning</dt>
				<dd' . (isset($_POST['preview']) && isset($_POST['melding']) ? '' : ' style="display: none"') . ' id="previewDD">' . (!isset($_POST['melding']) || empty($_POST['melding']) ? 'Tom melding?!' : game::bb_to_html($_POST['melding'])) . '</dd>
			</dl>
			<h3 class="c">
				' . show_sbutton("Send melding", 'name="post" accesskey="s"') . '
				' . show_sbutton("Forhåndsvis", 'name="preview" accesskey="p" id="reply_link_preview"') . '
			</h3>
		</div>
	</form>
</div>';
        // meldingene
        echo '
<div id="innboks">';
        // hent meldingene på denne siden
        $result = $this->thread->get_messages($this->pagei->start, $this->limit);
        $i = 0;
        $last_id = 0;
        while ($row = $result->fetch()) {
            $e = $this->pagei->total - $i - ($this->pagei->active - 1) * $this->pagei->per_page;
            if ($i == 0) {
                $last_id = $row['im_id'];
            }
            echo $this->thread->reply_format($row, $e, $this->highlight_im_id == $row['im_id'], $i < $this->new);
            $i++;
        }
        echo '
</div>';
        if (!isset($_GET['reply']) && $this->can_reply || $this->thread->data_rel) {
            echo '
<form action="innboks" method="post">
	<input type="hidden" name="it_id[]" value="' . $this->thread->id . '" />' . ($this->thread->data_rel ? '
	<p class="im_tools bottom left" id="im_mark"></p>' : '') . '
	<p class="im_tools bottom">' . (!isset($_GET['reply']) && $this->can_reply ? '
		' . show_sbutton("Opprett svar", 'name="reply" accesskey="s"', 'reply_link_form_show') : '') . ($this->thread->data_rel ? '
		<span class="red">' . show_sbutton("Slett", 'name="slett"  accesskey="d" onclick="return confirm(\'Er du sikker på at du vil slette meldingen?\')"') . '</span>' : '') . '
	</p>
</form>';
        }
        // flere sider?
        if ($this->pagei->pages > 1) {
            echo '
<p class="c center w200">' . $this->pagei->pagenumbers(array("goto")) . '</p>';
        }
        echo '
<div class="clear"></div>';
        $this->add_css();
        $this->add_js($last_id);
        $this->load_page();
    }
Ejemplo n.º 29
0
    /**
     * Vis siden for å sende melding
     */
    protected function show()
    {
        // mottakere til uten JS
        $list = array();
        foreach ($this->receivers as $row) {
            $list[] = $row['up_name'];
        }
        $list = implode(",", $list);
        echo '
<div class="page_w0">
<h1>Ny melding</h1>
<p class="h_right" style="margin: -23px 0 0 0 !important"><a href="innboks">Tilbake til meldinger</a></p>
<form action="" method="post" onsubmit="return innboks_ny.submit()" id="rec_form">
	<div class="section">
		<h3>Innhold</h3>
		<dl class="dd_auto_100">
			<dt>Mottakere <span id="rec_s"></span></dt>
			<dd>
				<input type="text" name="receivers" value="' . htmlspecialchars(postval("receivers", $list)) . '" class="styled w300" id="rec" />
				<noscript>Separer med komma (,).</noscript>
				<div id="rec_new" class="section">
					<h3>Legg til mottaker</h3>
					<dl class="dl_20 dl_2x">
						<dt>Navn</dt>
						<dd><input type="text" class="styled w100" /></dd>
					</dl>
					<ul></ul>
					<div id="rec_newm"></div>
				</div>
				<ul id="rec_list"></ul>
				<div style="clear: both"></div>
			</dd>
			
			<dt>Tittel</dt>
			<dd><input type="text" name="title" value="' . htmlspecialchars(postval("title")) . '" class="styled w300" maxlength="35" /></dd>
			
			<dt>Tekst</dt>
			<dd><textarea name="message" rows="20" cols="75" id="melding">' . htmlspecialchars(postval("message")) . '</textarea></dd>
			
			<dt' . (isset($_POST['preview']) && isset($_POST['message']) ? '' : ' style="display: none"') . ' id="pdt">Forhåndsvisning</dt>
			<dd' . (isset($_POST['preview']) && isset($_POST['message']) ? '' : ' style="display: none"') . ' id="pdd">' . (!isset($_POST['message']) || empty($_POST['message']) ? 'Tomt?!' : game::bb_to_html($_POST['message'])) . '</dd>
			<div class="clear"></div>
		</dl>
		<h3 class="c">
			' . show_sbutton("Send melding", 'name="post" accesskey="s"') . '
			' . show_sbutton("Forhåndsvis", 'name="preview" accesskey="p" onclick="previewDL(event, \'melding\', \'pdt\', \'pdd\')"') . '
		</h3>
	</div>
</form>
</div>';
        $this->css();
        $this->js();
        ess::$b->page->load();
    }
Ejemplo n.º 30
0
 public function bbFilter($data)
 {
     return \game::bb_to_html($data);
 }