예제 #1
0
 /** Last opp ny revisjon */
 public function upload($filename, $description, $mime, $src, $set_active = false)
 {
     global $_base;
     // ikke logget inn?
     if (!crewfiles::$up) {
         // anonym Exception for at $data ikke skal gå ut
         throw new HSException("Ingen spillerobjekt er registert for å kunne laste opp fil.", sysreport::EXCEPTION_ANONYMOUS);
     }
     // sett opp adresse til ny fil
     $name = uniqid() . "-" . crewfiles::$up->id;
     $path = CREWFILES_DATA_FOLDER . "/" . $name;
     // kan vi flytte filen?
     if (is_uploaded_file($src)) {
         move_uploaded_file($src, $path);
         $size = filesize($path);
     } else {
         $size = @file_put_contents($path, @file_get_contents($src));
     }
     // mislykket?
     if ($size === false) {
         // anonym Exception for at $data ikke skal gå ut
         throw new HSException("Kunne ikke opprette fil {$path}.", sysreport::EXCEPTION_ANONYMOUS);
     }
     // lagre revisjon
     \Kofradia\DB::get()->exec("INSERT INTO crewfiles_revisions SET cfr_cff_id = {$this->id}, cfr_title = " . \Kofradia\DB::quoteNoNull($filename) . ", cfr_description = " . \Kofradia\DB::quote($description) . ", cfr_time = " . time() . ", cfr_up_id = " . crewfiles::$up->id . ", cfr_mime = " . \Kofradia\DB::quote($mime) . ", cfr_path = " . \Kofradia\DB::quote($name) . ", cfr_size = " . intval($size));
     $id = \Kofradia\DB::get()->lastInsertId();
     // hent revisjoninformasjon
     $revision = new crewfiles_revision($id);
     $revision->file = $this;
     // sette revisjonen aktiv?
     if ($set_active) {
         $revision->set_active();
     }
     return $revision;
 }
예제 #2
0
파일: lock.php 프로젝트: Kuzat/kofradia
    /**
     * Behandle ny spiller
     */
    protected function solve_player()
    {
        ess::$b->page->add_title("Ny spiller");
        redirect::store($_SERVER['REQUEST_URI']);
        // sjekk om vi allerede har en spiller fra før som ikke er den aktive
        $result = \Kofradia\DB::get()->query("SELECT up_id, up_name, up_created_time, up_last_online, up_access_level FROM users_players WHERE up_u_id = " . login::$user->id . " AND up_access_level != 0");
        if ($result->rowCount() > 0) {
            // sett opp liste over spillere
            $players = array();
            while ($row = $result->fetch()) {
                $players[$row['up_id']] = $row;
            }
            // velge aktiv spiller?
            if (isset($_POST['select']) && isset($_POST['up_id']) && validate_sid()) {
                $up_id = (int) $_POST['up_id'];
                if (!isset($players[$up_id])) {
                    ess::$b->page->add_message("Fant ikke spillere.", "error");
                    redirect::handle();
                }
                // sett som aktiv spiller
                \Kofradia\DB::get()->exec("UPDATE users SET u_active_up_id = {$up_id} WHERE u_id = " . login::$user->id);
                ess::$b->page->add_message('Du har valgt <user="******" /> som din aktive spiller.');
                redirect::handle("min_side");
            }
            echo '
<div class="bg1_c xmedium">
	<h1 class="bg1">Ny spiller<span class="left2"></span><span class="right2"></span></h1>
	<p class="h_left"><a href="' . htmlspecialchars($this->url) . '">Tilbake</a></p>
	<div class="bg1">
		<form action="" method="post">
			<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
			<p>Du har allerede en annen spiller som er i live. Du må enten deaktivere spilleren eller velge å bruke den som din aktive spiller.</p>
			<table class="table center">
				<thead>
					<tr>
						<th>ID</th>
						<th>Spiller</th>
						<th>Opprettet</th>
						<th>Sist aktiv</th>
						<th>Deaktiver</th>
					</tr>
				</head>
				<tbody>';
            foreach ($players as $row) {
                echo '
					<tr class="box_handle">
						<td><input type="radio" name="up_id" value="' . $row['up_id'] . '" />' . $row['up_id'] . '</td>
						<td>' . game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level']) . '</td>
						<td>' . ess::$b->date->get($row['up_created_time'])->format() . '</td>
						<td>' . ess::$b->date->get($row['up_last_online'])->format() . '</td>
						<td><a href="min_side?up_id=' . $row['up_id'] . '&amp;a=deact">Deaktiver</a></td>
					</tr>';
            }
            echo '
				</tbody>
			</table>
			<p class="c">' . show_sbutton("Velg som aktiv spiller", 'name="select"') . '</p>
		</form>
	</div>
</div>';
            ess::$b->page->load();
        }
        // opprette ny spiller?
        if (isset($_POST['name']) && !isset($_POST['abort']) && validate_sid()) {
            $name = trim($_POST['name']);
            $bydel = postval("bydel");
            if (!isset(game::$bydeler[$bydel]) || !game::$bydeler[$bydel]['active']) {
                $bydel = false;
            }
            // kontroller navnet
            $result1 = \Kofradia\DB::get()->query("SELECT " . \Kofradia\DB::quoteNoNull($name) . " REGEXP regex AS m, error FROM regex_checks WHERE (type = 'reg_user_special' OR type = 'reg_user_strength') HAVING m = 1");
            $where = ALLOW_SAME_PLAYERNAME ? " AND (up_u_id != " . login::$user->id . " OR up_access_level != 0)" : "";
            $result2 = \Kofradia\DB::get()->query("SELECT up_id FROM users_players WHERE up_name = " . \Kofradia\DB::quote($name) . $where);
            $result3 = \Kofradia\DB::get()->query("SELECT id FROM registration WHERE user = "******"Spillernavnet var ikke gyldig:<ul>" . implode("", $feil) . "</ul>", "error");
            } elseif (empty($name)) {
                ess::$b->page->add_message("Du må skrive inn et navn du ønsker at din nye spiller skal ha.", "error");
            } elseif ($result2->rowCount() > 0) {
                ess::$b->page->add_message("Spillernavnet er allerede tatt! Velg et annet.", "error");
            } elseif ($result3->rowCount() > 0) {
                ess::$b->page->add_message("Noen holder allerede på å registrere seg med dette spillernavnet. Velg et annet.", "error");
            } else {
                // godkjent?
                if (isset($_POST['confirm'])) {
                    // finne tilfeldig bydel?
                    if (!$bydel) {
                        // finn en tilfeldig bydel
                        $result = \Kofradia\DB::get()->query("SELECT id FROM bydeler WHERE active = 1 ORDER BY RAND()");
                        $bydel = $result->fetchColumn(0);
                    }
                    \Kofradia\DB::get()->beginTransaction();
                    // opprett spiller og tilknytt brukeren
                    \Kofradia\DB::get()->exec("INSERT INTO users_players SET up_u_id = " . login::$user->id . ", up_name = " . \Kofradia\DB::quote($name) . ", up_created_time = " . time() . ", up_b_id = {$bydel}");
                    $up_id = \Kofradia\DB::get()->lastInsertId();
                    // sett opp riktig rank plassering
                    #\Kofradia\DB::get()->exec("UPDATE users_players AS main, (SELECT COUNT(users_players.up_id)+1 AS pos, ref.up_id FROM users_players AS ref LEFT JOIN users_players ON users_players.up_points > ref.up_points AND users_players.up_access_level < ".ess::$g['access_noplay']." AND users_players.up_access_level != 0 WHERE ref.up_id = $up_id GROUP BY ref.up_id) AS rp SET main.up_rank_pos = rp.pos WHERE main.up_id = rp.up_id");
                    \Kofradia\DB::get()->exec("INSERT INTO users_players_rank SET upr_up_id = {$up_id}");
                    ranklist::update();
                    // sett spilleren som den aktive spilleren for brukerne
                    \Kofradia\DB::get()->exec("UPDATE users SET u_active_up_id = {$up_id} WHERE u_id = " . login::$user->id);
                    \Kofradia\DB::get()->commit();
                    // hent antall medlemmer
                    $result = \Kofradia\DB::get()->query("SELECT COUNT(up_id) FROM users_players WHERE up_access_level < " . ess::$g['access_noplay'] . " AND up_access_level != 0");
                    putlog("INFO", "%bNY SPILLER:%b (#{$up_id} - Nummer %b" . $result->fetchColumn(0) . "%b) %u{$name}%u registrerte seg! " . ess::$s['path'] . "/p/" . rawurlencode($name));
                    ess::$b->page->add_message("Du har opprettet en ny spiller med navnet <b>" . htmlspecialchars($name) . "</b>!");
                    redirect::handle("min_side");
                }
                echo '
<div class="bg1_c xxsmall">
	<h1 class="bg1">Bekreft ny spiller<span class="left2"></span><span class="right2"></span></h1>
	<div class="bg1">
		<form action="" method="post">' . ($bydel ? '
			<input type="hidden" name="bydel" value="' . $bydel['id'] . '" />' : '') . '
			<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
			<input type="hidden" name="name" value="' . htmlspecialchars($name) . '" />
			<p>Du er i ferd med å opprette følgende spiller:</p>
			<dl class="dd_right">
				<dt>Spillernavn</dt>
				<dd><b>' . htmlspecialchars($name) . '</b></dd>
				<dt>Bydel</dt>
				<dd>' . ($bydel ? htmlspecialchars(game::$bydeler[$bydel]['name']) : 'Tilfeldig valgt') . '</dd>
			</dl> 
			<p>Du kan ikke bytte dette spillernavnet senere uten og opprette en ny spiller.</p>
			<p class="c">' . show_sbutton("Opprett spiller", 'name="confirm"') . ' ' . show_sbutton("Avbryt", 'name="abort"') . '</p>
		</form>
	</div>
</div>';
                ess::$b->page->load();
            }
        }
        ess::$b->page->add_css('
#name_validate { color: #AAA }
#name_validate_ok { color: #CCFF00 }
#name_validate_loading img { vertical-align: text-bottom; margin: -2px 0 }
#name_validate_taken { color: #900000 }
');
        ess::$b->page->add_js_domready('
	var status = function(val)
	{
		if (val == "") $("name_validate").removeClass("hide"); else $("name_validate").addClass("hide");
		if (val == "taken") $("name_validate_taken").removeClass("hide"); else $("name_validate_taken").addClass("hide");
		if (val == "ok") $("name_validate_ok").removeClass("hide"); else $("name_validate_ok").addClass("hide");
		if (val == "loading") $("name_validate_loading").removeClass("hide"); else $("name_validate_loading").addClass("hide");
	};
	var change_last = null, change_timer;
	var change = function()
	{
		if (this.get("value") == change_last) return; change_last = this.get("value");
		if (this.get("value") == "") { status(""); return; }
		
		$clear(change_timer);
		change_timer = this.search.delay(500, this, true);
		
		status("loading");
	};
	
	$("name_enter").addEvents({
		"keyup": change,
		"change": change
	}).focus();
	var xhr;
	$("name_enter").search = function()
	{
		if (!xhr)
		{
			xhr = new Request({"url": relative_path + "/ajax/find_user"});
			xhr.addEvent("success", function(text, xml)
			{
				if (xmlGetValue(xml, "user"))
					status("taken");
				else
					status("ok");
			});
			xhr.addEvent("failure", function(x)
			{
				alert("En feil oppsto.");
			});
		}
		xhr.send({"data": {"q": $("name_enter").get("value").trim()' . (ALLOW_SAME_PLAYERNAME ? ', "is": true' : '') . '}});
	};
	if ($("name_enter").get("value") != "") $("name_enter").search.run(null, $("name_enter"));
	else status("");
	change_last = $("name_enter").get("value");');
        echo '
<div class="bg1_c xsmall">
	<h1 class="bg1">Ny spiller<span class="left2"></span><span class="right2"></span></h1>
	<p class="h_left"><a href="' . htmlspecialchars($this->url) . '">Tilbake</a></p>
	<div class="bg1">
		<form action="" method="post">
			<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
			<p>Du er nå i ferd med å opprette en ny spiller. Du kan også se informasjon for din tidligere spiller <a href="min_side?up_id=' . login::$user->player->id . '">' . htmlspecialchars(login::$user->player->data['up_name']) . '</a>.</p>
			<p>Du kan ikke bytte spillernavnet du velger å opprette her uten og opprette en ny spiller.</p>
			<dl class="dd_right" style="overflow: hidden">
				<dt>Nytt spillernavn</dt>
				<dd><input type="text" id="name_enter" name="name" class="styled w120" value="' . htmlspecialchars(postval("name")) . '" /></dd>
				<dt>Status:
					<span class="name_v hide" id="name_validate_loading"><img src="' . STATIC_LINK . '/other/loading-black.gif" /></span>
					<span class="name_v hide" id="name_validate">Skriv inn ønsket navn</span>
					<span class="name_v hide" id="name_validate_ok">Ledig</span>
					<span class="name_v hide" id="name_validate_taken">Opptatt</span>
				</dt>
			</dl>
			<dl class="dd_right">
				<dt>Bydel</dt>
				<dd>
					<select name="bydel">';
        $active = postval("bydel");
        if (!isset(game::$bydeler[$active]) || !game::$bydeler[$active]['active']) {
            $active = false;
        }
        echo '
						<option' . (!$active ? ' selected="selected"' : '') . '>Velg tilfeldig</option>';
        foreach (game::$bydeler as $bydel) {
            if (!$bydel['active']) {
                continue;
            }
            echo '
						<option value="' . $bydel['id'] . '"' . ($active == $bydel['id'] ? ' selected="selected"' : '') . '>' . htmlspecialchars($bydel['name']) . '</option>';
        }
        echo '
					</select>
				</dd>
			</dl>
			<p class="c">' . show_sbutton("Fortsett") . '</p>
		</form>
	</div>
</div>';
    }
예제 #3
0
파일: base.php 프로젝트: Kuzat/kofradia
 protected function log_request()
 {
     // logg
     if (!defined("AUTOSCRIPT")) {
         $userid = login::$logged_in ? login::$user->id : 0;
         $method = \Kofradia\DB::quote($_SERVER['REQUEST_METHOD']);
         $uri = \Kofradia\DB::quote($_SERVER['REQUEST_URI']);
         $time = time();
         $referer = isset($_SERVER['HTTP_REFERER']) ? \Kofradia\DB::quote($_SERVER['HTTP_REFERER']) : NULL;
         $ip = \Kofradia\DB::quoteNoNull($_SERVER['REMOTE_ADDR'], false);
         $browser = \Kofradia\DB::quote($_SERVER['HTTP_USER_AGENT']);
         $file = LOGFILE_REQUESTS;
         $fh = fopen($file, "a");
         if (!$fh) {
             die("error (base) line " . __LINE__);
         }
         fwrite($fh, "\r\n({$userid}, {$method}, {$uri}, {$time}, {$referer}, {$ip}, {$browser}),");
         fclose($fh);
     }
     $user = login::$logged_in ? login::$user->player->data['up_name'] : '';
     if (empty($user)) {
         if (defined("AUTOSCRIPT")) {
             $user = "******";
         } else {
             $user = "******";
         }
     }
     putlog("INT", "(" . str_pad($_SERVER['REMOTE_ADDR'], 15, "_") . ") (" . str_pad($user, 15, "_") . ") (________) (" . str_pad($_SERVER['REQUEST_METHOD'], 4, "_") . ") (http" . (isset($_SERVER["SERVER_PORT_SECURE"]) ? 's' : '') . "://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']})");
 }
예제 #4
0
    function step3()
    {
        $referers = array(1 => array("Via google eller en annen søkeside", false), array("En venn tipset meg", false), array("Leste det på en nettside", "Lenke til nettsiden"), array("Så en reklameannonse", "Lenke til nettsiden"), array("Så det i et forum", "Lenke til forumet"), array("Annet", "Spesifiser"));
        // er skjemaet sendt inn?
        if ($_SERVER['REQUEST_METHOD'] == "POST") {
            // sjekk for gyldig trinn
            if (!isset($_POST['step']) || $_POST['step'] != 3) {
                redirect::handle();
            }
            // spillernavn, passord1, passord2, referer1, referer2
            $brukernavn = postval("brukernavn");
            $passord1 = postval("passord1");
            $passord2 = postval("passord2");
            $referer1 = postval("referer1");
            $referer2 = trim(postval("referer2"));
            // diverse spørringer
            $result1 = \Kofradia\DB::get()->query("SELECT " . \Kofradia\DB::quoteNoNull($brukernavn) . " REGEXP regex AS m, error FROM regex_checks WHERE (type = 'reg_user_special' OR type = 'reg_user_strength') HAVING m = 1");
            $result2 = \Kofradia\DB::get()->query("SELECT up_id FROM users_players WHERE up_name = " . \Kofradia\DB::quote($brukernavn));
            $result3 = \Kofradia\DB::get()->query("SELECT id FROM registration WHERE user = "******"SELECT " . \Kofradia\DB::quoteNoNull($passord1) . " REGEXP regex AS m, error FROM regex_checks WHERE type = 'reg_pass' HAVING m = 1");
            // sjekk spillernavn
            if ($result1->rowCount() > 0) {
                $feil = array();
                while ($row = $result1->fetch()) {
                    $feil[] = '<li>' . htmlspecialchars($row['error']) . '</li>';
                }
                ess::$b->page->add_message("Spillernavnet var ikke gyldig:<ul>" . implode("", $feil) . "</ul>", "error");
            } elseif ($result2->rowCount() > 0) {
                ess::$b->page->add_message("Spillernavnet er allerede tatt! Velg et annet.", "error");
            } elseif ($result3->rowCount() > 0) {
                ess::$b->page->add_message("Noen holder allerede på å registrere seg med dette spillernavnet. Velg et annet.", "error");
            } elseif ($result4->rowCount() > 0) {
                $feil = array();
                while ($row = $result4->fetch()) {
                    $feil[] = '<li>' . htmlspecialchars($row['error']) . '</li>';
                }
                ess::$b->page->add_message("Passordet var ikke gyldig:<ul>" . implode("", $feil) . "</ul>", "error");
            } elseif ($passord1 == $brukernavn) {
                ess::$b->page->add_message("Passordet kan ikke være det samme som spillernavnet.", "error");
            } elseif ($passord1 != $passord2) {
                ess::$b->page->add_message("Passordene var ikke like med hverandre.", "error");
            } elseif (!isset($referers[$referer1])) {
                ess::$b->page->add_message("Velg et gyldig alternativ for hvor du hørte om Kofradia.", "error");
            } elseif ($referers[$referer1][1] && empty($referer2)) {
                ess::$b->page->add_message("Fyll ut feltet for mer informasjon for hvor du hørte om Kofradia.", "error");
            } else {
                $referer = $referers[$referer1][0] . "|" . $referer2;
                // oppdater databasen
                \Kofradia\DB::get()->exec("UPDATE registration SET user = "******", referer = " . \Kofradia\DB::quote($referer) . ", pass = "******" WHERE id = {$this->id}");
                $_SESSION[$GLOBALS['__server']['session_prefix'] . 'reg']['step'] = 4;
                redirect::handle();
            }
        }
        $refs = array();
        foreach ($referers as $ref) {
            if ($ref[1]) {
                $refs[] = "'" . addslashes($ref[1]) . "'";
            } else {
                $refs[] = "false";
            }
        }
        ess::$b->page->add_js('var referers = [false,' . implode(",", $refs) . '];
function checkReferer(elm)
{
	var index = elm.selectedIndex + (elm.options[0].value == "" ? 0 : 1);
	var ref = referers[index];
	var elms = $$(".referer2p");
	var text = $("referer2i");
	if (ref)
	{
		text.innerHTML = ref;
		elms.each(function(elm){elm.setStyle("display", "");});
	}
	else
	{
		elms.each(function(elm){elm.setStyle("display", "none");});
	}
}');
        echo '
<form action="registrer" method="post">
	<input type="hidden" name="abort" />
	<h1>Brukerinformasjon</h1>
	<p class="h_right">' . show_sbutton("Avbryt registrering", 'onclick="return confirm(\'Er du sikker på at du vil AVBRYTE?\')"') . '</p>
</form>
<p>Det er nå tid for å velge spillernavn og passord. Spillernavnet vil du ikke kunne endre senere, mens passordet kan endres når du ønsker og nullstilles via e-post.</p>
<p>Tips: Trykk &laquo;Gå videre&raquo; for å sjekke om spillernavnet er ledig før du fyller inn passordet for å slippe å fylle inn passordet hver gang.</p>
<boxes />
<form action="registrer" method="post">
	<input type="hidden" name="step" value="3" />
	<dl class="dl_30">
		<dt>Ønsket spillernavn</dt>
		<dd><input type="text" name="brukernavn" value="' . htmlspecialchars(postval("brukernavn")) . '" class="styled w120" /></dd>
		<dt>Passord</dt>
		<dd><input type="password" name="passord1" class="styled w120" /></dd>
		<dt>Gjenta passord</dt>
		<dd><input type="password" name="passord2" class="styled w120" /></dd>
		<dt>Hvor hørte du om Kofradia?</dt>
		<dd>
			<select name="referer1" id="referer_select" onchange="checkReferer(this)">';
        $selected = postval("referer1", false);
        if (!isset($referers[$selected])) {
            echo '
				<option value="">Velg</option>';
        }
        foreach ($referers as $id => $referer) {
            echo '
				<option value="' . $id . '"' . ($selected == $id ? ' selected="selected"' : '') . '>' . $referer[0] . '</option>';
        }
        echo '
			</select>
		</dd>
		<dt class="referer2p" id="referer2i">Spesifiser</dt>
		<dd class="referer2p"><input type="text" name="referer2" value="' . htmlspecialchars(postval("referer2")) . '" class="styled w250" /></dd>
		<dd>' . show_sbutton("Gå videre") . '</dd>
	</dl>
</form>';
        ess::$b->page->add_body_post('<script type="text/javascript">checkReferer($("referer_select"));</script>');
    }
예제 #5
0
    /**
     * Crewside
     */
    protected static function page_crew()
    {
        if (!isset(login::$extended_access['authed'])) {
            echo '
	<p class="c">Du må logge inn for utvidede tilganger.</p>';
        } else {
            $subpage2 = getval("b");
            redirect::store(page_min_side::addr(NULL, $subpage2 != "" ? "b=" . $subpage2 : ''));
            ess::$b->page->add_title("Crew");
            ess::$b->page->add_css('
.minside_links .active { color: #CCFF00 }');
            $links = array();
            $links[] = '<a href="' . htmlspecialchars(page_min_side::addr("crew", "", "user")) . '">Min bruker</a>';
            $links[] = '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "")) . '"' . ($subpage2 == "" ? ' class="active"' : '') . '>Oversikt</a>';
            if (access::has("seniormod")) {
                $links[] = '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=rank")) . '"' . ($subpage2 == "rank" ? ' class="active"' : '') . '>Juster rank</a>';
            }
            if (access::has("mod")) {
                $links[] = '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=name")) . '"' . ($subpage2 == "name" ? ' class="active"' : '') . '>Endre spillernavn</a>';
            }
            echo '
	<p class="c minside_links">' . implode(" | ", $links) . '</p>';
            if ($subpage2 == "") {
                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">' . (access::has("mod") ? '
						<ul>' . (access::has("admin") && KOFRADIA_DEBUG ? '
							<li><a href="innboks?u_id=' . page_min_side::$active_user->id . '">Vis innboksen</a></li>
							<li><a href="innboks_sok?u_id=' . page_min_side::$active_user->id . '">Søk i innboksen</a></li>' : '') . '
							<li><a href="poker?up_id=' . page_min_side::$active_player->id . '&amp;stats">Vis pokerhistorien</a></li>
							<li><a href="admin/brukere/bankoverforinger?u1=' . page_min_side::$active_player->id . '">Vis bankoverføringer</a></li>
							<li><a href="drap?up_id=' . page_min_side::$active_player->id . '">Vis angrep utført av spilleren</a></li>
							<li><a href="drap?offer_up_id=' . page_min_side::$active_player->id . '">Vis angrep utført mot spilleren</a></li>
						</ul>' : '') . '
						<p>Trykk på <a href="' . htmlspecialchars(page_min_side::addr(NULL, "", "user")) . '">min bruker</a> for å vise informasjon om brukeren.</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", "user")) . '">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 class="bg1_c">
					<h1 class="bg1">Crewnotat for spilleren<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 spilleren for å memorere ting som har med <u>spilleren</u> å gjøre.</p>' . (empty(page_min_side::$active_player->data['up_note_crew']) ? '
						<p>Ingen notat er registrert.</p>' : '
						<div class="p">' . game::bb_to_html(page_min_side::$active_player->data['up_note_crew']) . '</div>') . '
					</div>
				</div>
			</div>
		</div>
	</div>
	<p class="c">Loggoppføringer for denne spilleren - <a href="' . htmlspecialchars(page_min_side::addr(NULL, "", "user")) . '">se komplett logg for brukeren</a></p>';
                // hent loggene for denne spilleren
                $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 WHERE lc_a_up_id = " . page_min_side::$active_player->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>';
                }
            } elseif ($subpage2 == "enote") {
                ess::$b->page->add_title("Endre notat");
                // lagre endringer?
                if (isset($_POST['notat'])) {
                    $notat = postval("notat");
                    if ($notat == page_min_side::$active_player->data['up_note_crew']) {
                        ess::$b->page->add_message("Ingen endringer ble utført.", "error");
                    } else {
                        \Kofradia\DB::get()->exec("UPDATE users_players SET up_note_crew = " . \Kofradia\DB::quote($notat) . " WHERE up_id = " . page_min_side::$active_player->id);
                        // legg til crewlogg
                        crewlog::log("player_note_crew", page_min_side::$active_player->id, NULL, array("note_old" => page_min_side::$active_player->data['up_note_crew'], "note_diff" => diff::make(page_min_side::$active_player->data['up_note_crew'], $notat)));
                        page_min_side::$active_player->data['up_note_crew'] = $notat;
                        ess::$b->page->add_message("Notet ble endret.");
                        redirect::handle();
                    }
                }
                echo '
	<div class="bg1_c" style="width: 400px">
		<h1 class="bg1">Endre crewnotat for spiller<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<form action="" method="post">
				<p>Dette endrer notatet som er tilknyttet denne spilleren. Du kan også tilknytte <a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=enote", "user")) . '">informasjon til brukeren</a>, eller til en annen av brukerens spillere 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_player->data['up_note_crew']) . '</textarea></p>
				<p class="c">' . show_sbutton("Lagre") . '</p>
			</form>
		</div>
	</div>';
            } elseif ($subpage2 == "rank" && access::has("seniormod")) {
                // endre?
                if (isset($_POST['rel']) || isset($_POST['abs'])) {
                    $log = trim(postval("log"));
                    $rel = 0;
                    // mangler begrunnelse?
                    if ($log == "") {
                        ess::$b->page->add_message("Mangler begrunnelse.", "error");
                    } elseif (isset($_POST['abs'])) {
                        $points = game::intval(postval("points_abs"));
                        // samme?
                        if ($points == page_min_side::$active_player->data['up_points']) {
                            ess::$b->page->add_message("Ingen endringer ble utført.", "error");
                        } elseif ($points < 0) {
                            ess::$b->page->add_message("Kan ikke sette til negativt tall.", "error");
                        } elseif ($points > 9999999) {
                            ess::$b->page->add_message("Kan ikke settes til så høyt tall.", "error");
                        } else {
                            $rel = $points - page_min_side::$active_player->data['up_points'];
                        }
                    } elseif (isset($_POST['rel'])) {
                        $points = game::intval(postval("points_rel"));
                        // ingen endring?
                        if ($points == 0) {
                            ess::$b->page->add_message("Ingen endringer ble utført.", "error");
                        } elseif (page_min_side::$active_player->data['up_points'] + $points < 0) {
                            ess::$b->page->add_message("Kan ikke utføre handlingen. Vil føre til <b>for lav</b> verdi.", "error");
                        } elseif (page_min_side::$active_player->data['up_points'] + $points > 9999999) {
                            ess::$b->page->add_message("Kan ikke utføre handlingen. Vil føre til <b>for høy</b> verdi.", "error");
                        } else {
                            $rel = $points;
                        }
                    }
                    // skal ikke dette annonseres?
                    $silent = isset($_POST['silent']);
                    // øke ranken?
                    if ($rel > 0) {
                        page_min_side::$active_player->increase_rank($rel, false, $silent, 0);
                        // legg til crewlogg
                        crewlog::log("player_rank_inc", page_min_side::$active_player->id, $log, array("points" => $rel));
                        ess::$b->page->add_message("Endringene ble lagret. Du økte ranken med " . game::format_number($rel) . " poeng." . ($silent ? ' Informasjonen ble ikke annonsert.' : ''));
                        redirect::handle();
                    } elseif ($rel < 0) {
                        page_min_side::$active_player->increase_rank($rel, false, $silent, 0);
                        $rel = abs($rel);
                        // legg til crewlogg
                        crewlog::log("player_rank_dec", page_min_side::$active_player->id, $log, array("points" => $rel));
                        ess::$b->page->add_message("Endringene ble lagret. Du senket ranken med " . game::format_number($rel) . " poeng." . ($silent ? ' Informasjonen ble ikke annonsert.' : ''));
                        redirect::handle();
                    }
                }
                ess::$b->page->add_title("Juster rank");
                echo '
	<div class="bg1_c" style="width: 350px">
		<h1 class="bg1">Juster rank<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<p>Antall rankpoeng: <b>' . game::format_number(page_min_side::$active_player->data['up_points']) . '</b></p>
			<form action="" method="post">
				<dl class="dd_right dl_2x">
					<dt>Bestem rankpoeng (absolutt verdi)</dt>
					<dd><input type="text" name="points_abs" value="' . game::format_number(postval("points_abs", page_min_side::$active_player->data['up_points'])) . '" class="styled w60" maxlength="10" /> ' . show_sbutton("Lagre", 'name="abs"') . '</dd>
					<dt>Juster ranken (relativ verdi)</dt>
					<dd><input type="text" name="points_rel" value="' . game::format_number(postval("points_rel", 0)) . '" class="styled w60" maxlength="10" /> ' . show_sbutton("Lagre", 'name="rel"') . '</dd>
					<dd><input type="checkbox" name="silent"' . (isset($_POST['silent']) ? ' checked="checked"' : '') . ' id="silent" /><label for="silent"> Ikke annonser denne endringen (f.eks. på IRC)</label></dd>
					<dt>Begrunnelse for endring (crewlogg)</dt>
					<dd><textarea name="log" id="log" cols="30" rows="5">' . htmlspecialchars(postval("log")) . '</textarea></dd>
				</dl>
			</form>
		</div>
	</div>';
            } elseif ($subpage2 == "name" && access::has("mod")) {
                // lagre nytt spillernavn?
                if (isset($_POST['name'])) {
                    $name = trim(postval("name"));
                    $log = trim(postval("log"));
                    // ingen endringer utført?
                    if (strcmp(page_min_side::$active_player->data['up_name'], $name) === 0) {
                        ess::$b->page->add_message("Spillernavnet er det samme som før.", "error");
                    } elseif ($log == "") {
                        ess::$b->page->add_message("Mangler begrunnelse.", "error");
                    } else {
                        // kontroller spillernavnet (kun hvis endringer utover små/store bokstaver er gjort)
                        $check = strcasecmp(page_min_side::$active_player->data['up_name'], $name) !== 0;
                        if ($check) {
                            $result = \Kofradia\DB::get()->query("SELECT " . \Kofradia\DB::quoteNoNull($name) . " REGEXP regex AS m, error FROM regex_checks WHERE type = 'reg_user_strength' HAVING m = 1");
                        }
                        if ($check && $result->rowCount() > 0) {
                            // sett opp feilmeldingene
                            $feil = array();
                            while ($row = $result->fetch()) {
                                $feil[] = '<li>' . htmlspecialchars($row['error']) . '</li>';
                            }
                            // legg til feilmeldingene
                            ess::$b->page->add_message("<p>Spillernavnet var ikke gyldig:</p><ul>" . implode("", $feil) . "</ul>", "error");
                        } else {
                            // sjekk at spillernavnet ikke finnes fra før
                            $result = \Kofradia\DB::get()->query("SELECT up_id, up_name, up_access_level FROM users_players WHERE up_name = " . \Kofradia\DB::quote($name) . " AND up_id != " . page_min_side::$active_player->id . " AND (up_u_id != " . page_min_side::$active_user->id . " OR up_access_level != 0)");
                            if ($result->rowCount() > 0) {
                                $row = $result->fetch();
                                ess::$b->page->add_message("Spillernavnet er allerede i bruk: " . game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level']), "error");
                            } else {
                                // utfør endringer - endre spillernavnet
                                \Kofradia\DB::get()->exec("UPDATE users_players SET up_name = " . \Kofradia\DB::quote($name) . " WHERE up_id = " . page_min_side::$active_player->id);
                                // legg til crewlogg
                                crewlog::log("player_name", page_min_side::$active_player->id, $log, array("user_old" => page_min_side::$active_player->data['up_name'], "user_new" => $name));
                                ess::$b->page->add_message("Spillernavnet ble endret fra " . htmlspecialchars(page_min_side::$active_player->data['up_name']) . " til " . game::profile_link(page_min_side::$active_player->id, $name, page_min_side::$active_player->data['up_access_level']) . '.');
                                redirect::handle();
                            }
                        }
                    }
                }
                ess::$b->page->add_title("Endre spillernavn");
                echo '
	<div class="bg1_c" style="width: 350px">
		<h1 class="bg1">Endre spillernavn<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<p>Ikke utfør andre endringer enn store/små bokstaver i spillernavnet dersom det ikke er veldig nødvendig. Dette på grunn av BB-koder som [user=..] ikke lenger vil fungere.</p>
			<p>Det er mulig å gi en spiller samme navn som en annen spiller, så lenge spillerene tilhører samme bruker.</p>
			<form action="" method="post">
				<dl class="dd_right dl_2x">
					<dt>Nåværende spillernavn</dt>
					<dd>' . htmlspecialchars(page_min_side::$active_player->data['up_name']) . '</dd>
					<dt>Nytt spillernavn</dt>
					<dd><input type="text" value="' . htmlspecialchars(postval("name", page_min_side::$active_player->data['up_name'])) . '" name="name" class="styled w120" /></dd>
					<dt>Begrunnelse for endring (crewlogg)</dt>
					<dd><textarea name="log" id="log" cols="30" rows="5">' . htmlspecialchars(postval("log")) . '</textarea></dd>
				</dl>
				<p class="c">' . show_sbutton("Endre spillernavnet") . '</p>
			</form>
		</div>
	</div>';
            }
        }
    }