Example #1
0
	<thead>
		<tr>
			<th>Bruker/spiller</th>
			<th>Type blokkering</th>
			<th>Ble utestengt</th>
			<th>Utestengt til</th>
			<th>Begrunnelse</th>
			<th>Intern info</th>
		</tr>
	</thead>
	<tbody>';
    $i = 0;
    while ($row = $result->fetch()) {
        $access = access::has(blokkeringer::$types[$row['ub_type']]['access']);
        echo '
		<tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '>
			<td>' . game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level']) . '</td>
			<td>' . ($access ? '<a href="' . $__server['relative_path'] . '/min_side?u_id=' . $row['u_id'] . '&amp;b=blokk&amp;t=' . $row['ub_type'] . '">' : '') . htmlspecialchars(blokkeringer::$types[$row['ub_type']]['title']) . ($access ? '</a>' : '') . '</td>
			<td>' . $_base->date->get($row['ub_time_added'])->format(date::FORMAT_SEC) . '</td>
			<td>' . $_base->date->get($row['ub_time_expire'])->format(date::FORMAT_SEC) . '<br />
			' . game::timespan($row['ub_time_expire'], game::TIME_ABS) . '</td>
			<td>' . game::format_data($row['ub_reason'], "bb-opt", "Ingen begrunnelse oppgitt.") . '</td>
			<td>' . game::format_data($row['ub_note'], "bb-opt", "Ingen begrunnelse oppgitt.") . '</td>
		</tr>';
    }
    echo '
	</tbody>
</table>
<p>' . $pagei->pagenumbers() . '</p>';
}
$_base->page->load();
Example #2
0
                        break;
                    case "text":
                        $rows = intval($info['params']->get("textarea_rows", 5));
                        $field = '<textarea name="sf_' . $key . '" rows="' . $rows . '" cols="60" style="width: 344px">' . htmlspecialchars($value) . '</textarea>';
                        $dl = false;
                        break;
                }
                if ($dl) {
                    echo '
			<dl class="dd_right dl_2x">
				<dt>' . htmlspecialchars($info['sf_title']) . (isset($errors[$key]) ? $errors[$key] : '') . '' . (!empty($info['sf_extra']) ? ' ' . game::format_data($info['sf_extra']) : '') . '</dt>
				<dd>' . $field . (($post = $info['params']->get("post")) != "" ? ' ' . $post : '') . '</dd>
			</dl>';
                } else {
                    echo '
			<p class="sf_p">' . htmlspecialchars($info['sf_title']) . (isset($errors[$key]) ? $errors[$key] : '') . '' . (!empty($info['sf_extra']) ? '<br />' . game::format_data($info['sf_extra']) : '') . '</p>
			<p class="sf">' . $field . '</p>';
                }
            }
            echo '
			<p>
				' . show_sbutton("Lagre", 'name="lagre"') . '
				' . show_sbutton("Lagre og forhåndsvis", 'name="preview"') . '
				' . show_sbutton("Lagre og send inn", 'name="send_inn"') . '
				' . show_sbutton("Slett", 'name="slett"') . '
			</p>
			<p><i>Du kan trekke tilbake søknaden etter du har sendt den inn for å gjøre endringer innen fristen. Etter fristen vil du ikke kunne sende inn eller trekke tilbake søknaden.</i></p>
		</form>';
        }
    }
} elseif (isset($_POST['opprett']) && login::$logged_in) {
Example #3
0
 /** Blokkert fra å utføre forumhandlinger */
 protected function blocked($blokkering)
 {
     \ajax::html("Du er blokkert fra å utføre handlinger i forumet.<br />Blokkeringen varer til " . \ess::$b->date->get($blokkering['ub_time_expire'])->format(\date::FORMAT_SEC) . " (" . \game::counter($blokkering['ub_time_expire'] - time()) . ").<br />\n" . "<b>Begrunnelse:</b> " . \game::format_data($blokkering['ub_reason'], "bb-opt", "Ingen begrunnelse gitt."), \ajax::TYPE_INVALID);
 }
Example #4
0
<?php

require "../../app/ajax.php";
// krev bruker
ajax::require_user();
// mangler verdier?
if (!isset($_POST['type']) || !isset($_POST['note']) || !isset($_POST['ref'])) {
    ajax::text("ERROR:MISSING", ajax::TYPE_INVALID);
}
// blokkert fra å sende inn rapporteringer?
$blokkering = blokkeringer::check(blokkeringer::TYPE_RAPPORTERINGER);
if ($blokkering) {
    ajax::html("Du er blokkert fra å sende inn rapporteringer. Blokkeringen varer til " . $_base->date->get($blokkering['ub_time_expire'])->format(date::FORMAT_SEC) . ".<br /><b>Begrunnelse:</b> " . game::format_data($blokkering['ub_reason'], "bb-opt", "Ingen begrunnelse gitt."), ajax::TYPE_INVALID);
}
// begrunnelse er tomt?
$note = trim($_POST['note']);
if (empty($note)) {
    ajax::html("<p>Begrunnelsen kan ikke være tom!</p>", ajax::TYPE_INVALID);
}
// referanseid
$ref = intval($_POST['ref']);
// forsøk å legg til
switch ($_POST['type']) {
    // privat melding
    case "pm":
        $result = rapportering::report_pm($ref, $note);
        // fant ikke meldingen
        if ($result === false) {
            ajax::html("<p>Fant ikke meldingen.</p>", ajax::TYPE_INVALID);
        } elseif ($result[0] === "dupe") {
            ajax::html("<p>Du har allerede rapportert denne meldingen.</p>", ajax::TYPE_INVALID);
Example #5
0
    /**
     * Redigere en oppføring
     */
    protected function handle_specific_edit($lc, $lc_action, $data)
    {
        ess::$b->page->add_title("Redigering av oppføring: {$lc['lc_id']} (" . htmlspecialchars($lc_action[4]) . ")");
        // behandle ulike type oppføringer
        switch (crewlog::$actions_id[$lc['lc_lca_id']]) {
            // advarsel
            case "user_warning":
                $invalidated = !empty($data['invalidated']);
                if (!$invalidated) {
                    // slette?
                    if (isset($_POST['revoke'])) {
                        // legg til logg
                        $d = array("lc_id" => $lc['lc_id'], "type" => $data['type'], "priority" => $data['priority']);
                        crewlog::log("user_warning_invalidated", $lc['lc_a_up_id'], null, $d);
                        // marker som slettet
                        \Kofradia\DB::get()->exec("\n\t\t\t\t\t\t\tINSERT INTO log_crew_data\n\t\t\t\t\t\t\tSET lcd_lc_id = {$lc['lc_id']}, lcd_lce_id = 5, lcd_lca_id = {$lc['lc_lca_id']}, lcd_data_int = 1\n\t\t\t\t\t\t\tON DUPLICATE KEY UPDATE lcd_data_int = 1");
                        // har vi en hendelse vi kan slette?
                        if (!empty($data['notified_id'])) {
                            \Kofradia\DB::get()->exec("DELETE FROM users_log WHERE id = {$data['notified_id']}");
                        }
                        ess::$b->page->add_message("Advarselen ble markert som ugyldig.");
                        redirect::handle("crewlogg?lc_id={$lc['lc_id']}");
                    }
                    // redigere?
                    if (isset($_POST['edit'])) {
                        $types = crewlog::$user_warning_types;
                        $log = trim(postval("log"));
                        $note = trim(postval("note"));
                        $type = postval("type");
                        $priority = (int) postval("priority");
                        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");
                        } elseif ($priority == $data['priority'] && $log == $lc['lc_log'] && $note == $data['note'] && $types[$type] == $data['type']) {
                            ess::$b->page->add_message("Ingenting ble endret.", "error");
                        } else {
                            $d = array("lc_id" => $lc['lc_id']);
                            $d['priority_new'] = $priority;
                            if ($priority != $data['priority']) {
                                $d['priority_old'] = $data['priority'];
                            }
                            $d['type_new'] = $types[$type];
                            if ($types[$type] != $data['type']) {
                                $d['type_old'] = $data['type'];
                            }
                            if ($log != $lc['lc_log']) {
                                $d['log_old'] = $lc['lc_log'];
                                $d['log_new'] = $log;
                            }
                            if ($note != $data['note']) {
                                $d['note_old'] = $data['note'];
                                $d['note_new'] = $note;
                            }
                            // legg til at advarselen er redigert
                            crewlog::log("user_warning_edit", $lc['lc_a_up_id'], null, $d);
                            // oppdater crewloggen
                            \Kofradia\DB::get()->exec("UPDATE log_crew SET lc_log = " . \Kofradia\DB::quote($log) . " WHERE lc_id = {$lc['lc_id']}");
                            \Kofradia\DB::get()->exec("UPDATE log_crew_data SET lcd_data_int = {$priority} WHERE lcd_lc_id = {$lc['lc_id']} AND lcd_lce_id = 3");
                            \Kofradia\DB::get()->exec("UPDATE log_crew_data SET lcd_data_text = " . \Kofradia\DB::quote($types[$type]) . " WHERE lcd_lc_id = {$lc['lc_id']} AND lcd_lce_id = 1");
                            \Kofradia\DB::get()->exec("UPDATE log_crew_data SET lcd_data_text = " . \Kofradia\DB::quote($note) . " WHERE lcd_lc_id = {$lc['lc_id']} AND lcd_lce_id = 2");
                            // har vi en hendelse vi kan oppdatere?
                            if (!empty($data['notified_id'])) {
                                \Kofradia\DB::get()->exec("UPDATE users_log SET note = " . \Kofradia\DB::quote(urlencode($types[$type]) . ":" . urlencode($log)) . " WHERE id = {$data['notified_id']}");
                            }
                            ess::$b->page->add_message("Advarselen ble redigert.");
                            redirect::handle("crewlogg?lc_id={$lc['lc_id']}");
                        }
                    }
                }
                echo '
<div class="bg1_c small">
	<h1 class="bg1">Rediger advarsel<span class="left2"></span><span class="right2"></span></h1>
	<p class="h_left"><a href="crewlogg?lc_id=' . $lc['lc_id'] . '">&laquo; Tilbake</a></p>
	<div class="bg1">
		<dl class="dd_right">
			<dt>Logg ID</dt>
			<dd>' . $lc['lc_id'] . '</dd>
			<dt>Handling</dt>
			<dd>' . htmlspecialchars(crewlog::$actions_groups[$lc_action[1]]) . ': ' . htmlspecialchars($lc_action[4]) . '</dd>
			<dt>Utført av</dt>
			<dd><user id="' . $lc['lc_up_id'] . '" /></dd>' . ($lc['lc_a_up_id'] ? '
			<dt>Påvirket spiller</dt>
			<dd><user id="' . $lc['lc_a_up_id'] . '" /></dd>' : '') . '
			<dt>Tidspunkt</dt>
			<dd>' . ess::$b->date->get($lc['lc_time'])->format(date::FORMAT_SEC) . '</dd>
		</dl>
		<dl class="dd_right">
			<dt>Kategori</dt>
			<dd>' . $data['type'] . '</dd>
			<dt>Prioritet</dt>
			<dd>' . ($data['priority'] == 1 ? 'Lav' : ($data['priority'] == 3 ? 'Høy' : 'Moderator')) . '</dd>
			<dt>Varslet?</dt>
			<dd>' . (empty($data['notified']) ? 'Brukeren ble ikke varslet' : 'Brukeren ble varslet med logg') . '</dd>' . ($invalidated ? '
			<dt>Ugyldig</dt>
			<dd><b>Advarselen er trukket tilbake</b></dd>' : '') . '
		</dl>
		<p>Begrunnelse:</p>
		<div class="crewlog_note">' . game::format_data($lc['lc_log']) . '</div>
		<p>Intern informasjon:</p>
		<div class="crewlog_note">' . game::format_data($data['note']) . '</div>';
                if ($invalidated) {
                    echo '
		<p>Denne advarselen er trukket tilbake og kan ikke redigeres.</p>';
                } else {
                    echo '
		<form action="" method="post">
			<div class="hr"></div>
			<p><b>Rediger advarsel:</b></p>
			<dl class="dd_right">
				<dt>Kategori</dt>
				<dd>
					<select name="type">';
                    $type = array_search($data['type'], crewlog::$user_warning_types);
                    if (isset($_POST['type']) && isset($types[$_POST['type']])) {
                        $type = (int) $_POST['type'];
                    }
                    if ($type === false) {
                        echo '
							<option value="">Velg ..</option>';
                    }
                    foreach (crewlog::$user_warning_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'] : $data['priority'];
                    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", $lc['lc_log'])) . '</textarea></p>
			<p>Intern informasjon:</p>
			<p><textarea name="note" rows="10" cols="30" style="width: 98%">' . htmlspecialchars(postval("note", $data['note'])) . '</textarea></p>
			<p class="c">' . show_sbutton("Oppdater advarsel", 'name="edit"') . '</p>
		</form>
		<form action="" method="post">
			<p class="c">' . show_sbutton("Trekk tilbake advarsel", 'name="revoke" onclick="return confirm(\'Er du sikker på at du ønsker å trekke tilbake denne advarselen?\')"') . '</p>
		</form>';
                }
                echo '
	</div>
</div>';
                break;
                // ukjent
            // ukjent
            default:
                ess::$b->page->add_message("Kan ikke redigere denne oppføringen.", "error");
                redirect::handle("crewlogg?lc_id={$lc['lc_id']}");
        }
        ess::$b->page->load();
    }
Example #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>';
        }
    }
Example #7
0
    /**
     * Publiser utgivelse
     */
    protected function pub_publish(ff_avis_utgivelse $ffn)
    {
        // allerede publisert
        if ($ffn->data['ffn_published'] != 0) {
            ess::$b->page->add_message("Utgivelsen er allerede publisert.", "error");
            redirect::handle();
        }
        // kontroller beskrivelse
        $desc_plain = strip_tags(game::format_data($ffn->data['ffn_description']));
        if (mb_strlen($desc_plain) < 30) {
            ess::$b->page->add_message("Beskrivelsen for utgivelsen må inneholde minimum 30 bokstaver/tall før den kan publiseres.", "error");
            redirect::handle();
        }
        // sjekk når siste publisering ble utført
        $result = \Kofradia\DB::get()->query("SELECT ffn_published_time FROM ff_newspapers WHERE ffn_ff_id = {$this->ff->id} AND ffn_published != 0 ORDER BY ffn_published_time DESC LIMIT 1");
        $last = $result->rowCount() > 0 ? $result->fetchColumn(0) : 0;
        // har det gått lang nok tid?
        $delay = ff_avis::FFN_PUBLISH_DELAY + $last - time();
        if ($delay > 0) {
            ess::$b->page->add_message("Du må vente " . game::timespan(ff_avis::FFN_PUBLISH_DELAY, game::TIME_FULL) . " mellom hver utgivelse som utføres. Gjenstår før neste utgivelse kan publiseres: " . game::timespan($delay, game::TIME_FULL) . ".", "error");
            redirect::handle();
        }
        // hent artiklene med pris
        $result = \Kofradia\DB::get()->query("SELECT ffna_id, ffna_up_id, ffna_title, ffna_price FROM ff_newspapers_articles WHERE ffna_ffn_id = {$ffn->id} ORDER BY ffna_title");
        // for få artikler?
        if ($result->rowCount() < 4) {
            ess::$b->page->add_message("Utgivelsen må inneholde minimum 4 artikler for å bli publisert.", "error");
            redirect::handle();
        }
        // kun eier
        if (!$this->ff->access(1)) {
            ess::$b->page->add_message("Kun " . htmlspecialchars($this->ff->type['priority'][1]) . " kan publisere utgivelsen.", "error");
            redirect::handle();
        }
        // finn total pris for artiklene
        $articles = array();
        $articles_price = 0;
        while ($row = $result->fetch()) {
            $articles_price += $row['ffna_price'];
            $articles[] = $row;
        }
        $total_price = $articles_price + ff_avis::FFN_PUBLISH_COST;
        // godkjenne publisering?
        if (isset($_POST['approve'])) {
            $price = game::intval(postval("price"));
            $sid = postval("sid");
            // kontroller pris
            if ($price != $total_price) {
                ess::$b->page->add_message("Det ser ut som prisen har endret seg. Prøv på nytt.", "error");
            } elseif ($sid != login::$info['ses_id']) {
                ess::$b->page->add_message("Ugyldig.", "error");
            } elseif ($total_price > 0 && $this->ff->data['ff_bank'] < $total_price) {
                ess::$b->page->add_message("Det er ikke nok penger i firmabanken.", "error");
            } else {
                \Kofradia\DB::get()->beginTransaction();
                // trekk fra pengene fra firmabanken
                if ($total_price > 0 && !$this->ff->bank(ff::BANK_BETALING, $total_price, "Publisering av utgivelse: {$ffn->data['ffn_title']} (id: {$ffn->id})")) {
                    \Kofradia\DB::get()->commit();
                    // var tidligere rollback, men trenger ikke være det
                    ess::$b->page->add_message("Det er ikke nok penger i firmabanken.", "error");
                } else {
                    // oppdater utgivelsen
                    \Kofradia\DB::get()->exec("UPDATE ff_newspapers SET ffn_published = 1, ffn_published_time = " . time() . ", ffn_published_up_id = " . login::$user->player->id . " WHERE ffn_id = {$ffn->id}");
                    // utbetal til journalistene
                    \Kofradia\DB::get()->exec("UPDATE users_players, ff_members, (SELECT ffna_up_id, SUM(ffna_price) AS ffna_sum, COUNT(ffna_price) AS ffna_count FROM ff_newspapers_articles WHERE ffna_ffn_id = {$ffn->id} AND ffna_price > 0 GROUP BY ffna_up_id) AS ref SET up_bank = up_bank + ffna_sum, up_bank_received = up_bank_received + ffna_sum, up_bank_profit = up_bank_profit + ffna_sum, up_bank_num_received = up_bank_num_received + ffna_count, up_log_new = up_log_new + ffna_count, ffm_earnings = ffm_earnings + ffna_sum WHERE ffna_up_id = up_id AND ffm_up_id = up_id AND ffm_ff_id = {$this->ff->id}");
                    // lagre overføringslogg
                    \Kofradia\DB::get()->exec("INSERT INTO bank_log (bl_sender_up_id, bl_receiver_up_id, amount, time) SELECT " . login::$user->player->id . ", ffna_up_id, ffna_price, " . time() . " FROM users_players, ff_newspapers_articles WHERE ffna_ffn_id = {$ffn->id} AND ffna_up_id = up_id AND ffna_price > 0");
                    // spillelogg
                    \Kofradia\DB::get()->exec("INSERT INTO users_log (time, ul_up_id, type, note, num) SELECT " . time() . ", ffna_up_id, " . gamelog::$items['bankoverforing'] . ", CONCAT(ffna_price, ':Utbetaling for avisartikkel.'), " . login::$user->player->id . " FROM users_players, ff_newspapers_articles WHERE ffna_ffn_id = {$ffn->id} AND ffna_up_id = up_id AND ffna_price > 0");
                    \Kofradia\DB::get()->commit();
                    // live-feed
                    livefeed::add_row('Avisutgivelsen <a href="' . ess::$s['relative_path'] . '/ff/avis?ff_id=' . $this->ff->id . '&amp;ffn=' . $ffn->id . '">' . htmlspecialchars($ffn->data['ffn_title']) . '</a> ble publisert av <a href="' . ess::$s['relative_path'] . '/ff/?ff_id=' . $this->ff->id . '">' . htmlspecialchars($this->ff->data['ff_name']) . '</a>.');
                    ess::$b->page->add_message("Utgivelsen er nå publisert.");
                    redirect::handle();
                }
            }
        }
        echo '
<p class="c">Publiser utgivelse | <a href="avis?ff_id=' . $this->ff->id . '&amp;u&amp;ffn=' . $ffn->id . '">Tilbake</a></p>
<div class="section center w200">
	<h2>Utgivelsesinformasjon</h2>
	<dl class="dd_right">
		<dt>Tittel</dt>
		<dd>' . htmlspecialchars($ffn->data['ffn_title']) . '</dd>
		<dt>Opprettet</dt>
		<dd>' . ess::$b->date->get($ffn->data['ffn_created_time'])->format() . '</dd>
		<dt>Salgspris</dt>
		<dd>' . game::format_cash($ffn->data['ffn_cost']) . '</dd>
	</dl>
</div>
<div class="section center w200">
	<h2>Beskrivelse av utgivelsen</h2>' . (($d = $this->ff->format_description($ffn->data['ffn_description'])) != '' ? '
	<div class="p">' . $d . '</div>' : '
	<p>Ingen beskrivelse.</p>') . '
</div>
<form action="" method="post">
	<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
	<input type="hidden" name="price" value="' . $total_price . '" />
	<div class="section center w350">
		<h2>Prisoversikt</h2>
		<dl class="dd_right">
			<dt>Publisering av utgivelse</dt>
			<dd>' . game::format_cash(ff_avis::FFN_PUBLISH_COST) . '</dd>';
        foreach ($articles as $row) {
            echo '
			<dt><a href="avis?ff_id=' . $this->ff->id . '&amp;a&amp;ffna_id=' . $row['ffna_id'] . '">' . htmlspecialchars($row['ffna_title']) . '</a> (<user id="' . $row['ffna_up_id'] . '" />)</dt>
			<dd>' . game::format_cash($row['ffna_price']) . '</dd>';
        }
        echo '
		</dl>
		<dl class="dd_right">
			<dt>I firmabanken</dt>
			<dd>' . game::format_cash($this->ff->data['ff_bank']) . '</dd>
			<dt><u>Samlet kostnader</u></dt>
			<dd><u>' . game::format_cash($total_price) . '</u></dd>
		</dl>
		<p class="c">' . show_sbutton("Publiser utgivelsen", 'name="approve"') . '</p>
	</div>
</form>
<div class="hr fhr"><hr /></div>';
        // vis utgivelsen
        echo $ffn->build_avis_html();
    }
Example #8
0
    /**
     * Sett opp innhold til en enhet i noden
     * @param array $unit
     */
    public static function content_build($unit)
    {
        switch ($unit['ni_type']) {
            case 1:
                // bb
                $content = '
<div class="p">' . game::format_data($unit['nir_content']) . '</div>';
                break;
            case 2:
                // html
            // html
            case 3:
                // htmleditor
                $content = '
' . $unit['nir_content'];
                break;
            case 5:
                // gallery_section
                $content = '
<p>Not implementet.</p>';
                break;
            case 6:
                // gallery_item
                $content = '
<p>Not implementet.</p>';
                break;
            case 7:
                // news
                $params = new params($unit['nir_params']);
                // hvilke tags?
                $tags = new container($params->get("tags"));
                $page_name = "ni_s_{$unit['ni_id']}";
                $pageinfo = new pagei(PAGEI_ACTIVE_GET, $page_name, PAGEI_PER_PAGE, max(1, min(50, $params->get("per_page", 15))));
                // hent nyhetene
                if (count($tags->items) > 0) {
                    $tags_db = array_map(array(ess::$b->db, "quote"), $tags->items);
                    // filter via tags
                    $query = "n_id, n_title, n_content, n_userid, n_time, n_visible, n_type FROM news, news_tags WHERE n_visible > 0 AND n_id = nt_n_id AND nt_tagname IN (" . implode(", ", $tags_db) . ") GROUP BY n_id ORDER BY n_time DESC";
                } else {
                    $query = "n_id, n_title, n_intro, LEFT(n_content, 5) AS n_content, n_userid, n_time, n_visible, n_type FROM news WHERE n_visible > 0 ORDER BY n_time DESC";
                }
                $result = $pageinfo->query($query);
                $content = '';
                if ($result->rowCount() == 0) {
                    $content .= '
<p>Ingen nyheter.</p>';
                } else {
                    while ($row = $result->fetch()) {
                        $content .= '
<h2>' . htmlspecialchars($row['n_title']) . '</h2>
<p class="h_right">' . ess::$b->date->get($row['n_time'])->format() . '</p>
<div class="p">' . game::format_data($row['n_intro']) . '</div>';
                        // mer info?
                        if (mb_strlen($row['n_content']) > 0) {
                            $content .= '
<p><a href="' . game::address(PHP_SELF, $_GET, array(), array("show_n" => $row['n_id'])) . '">Les mer &raquo;</a></p>';
                        }
                    }
                    if (!$params->get("hide_select_page") && $pageinfo->pages > 1) {
                        $content .= '
<p>' . game::pagenumbers(game::address(PHP_SELF, $_GET, array($page_name)), game::address(PHP_SELF, $_GET, array($page_name), array($page_name => true)) . "=", $pageinfo->pages, $pageinfo->active) . '</p>';
                    }
                }
                break;
            case 8:
                // php include
                $content = '
<p>Not implementet.</p>';
                break;
            default:
                // plaintext
                $content = '
<p>' . htmlspecialchars($unit['nir_content']) . '</p>';
        }
        return $content;
    }
Example #9
0
    /**
     * Vis oversikt
     */
    protected function index()
    {
        // hent data som er blokkert
        $result = \Kofradia\DB::get()->query("SELECT eb_id, eb_type, eb_value, eb_time, eb_up_id, eb_note FROM email_blacklist ORDER BY eb_value");
        $data = array("address" => array(), "domain" => array());
        while ($row = $result->fetch()) {
            $data[$row['eb_type']][] = $row;
        }
        echo '
<div class="bg1_c xmedium">
	<h1 class="bg1">Blokkering av e-post<span class="left"></span><span class="right"></span></h1>
	<div class="bg1">
		<p class="c"><a href="email_blacklist?new">Opprett ny blokkering &raquo;</a></p>
		<p>Spesifikke e-postadresser som er blokkert:</p>';
        if (count($data['address']) == 0) {
            echo '
		<p class="c">Ingen spesifikke e-postadresser er blokkert.</p>';
        } else {
            echo '
		<form action="" method="post">
			<table class="table center">
				<thead>
					<tr>
						<th>E-postadresse</th>
						<th>Lagt til</th>
						<th>Av</th>
						<th>Notat</th>
					</tr>
				</thead>
				<tbody>';
            $i = 0;
            foreach ($data['address'] as $row) {
                $note = game::format_data($row['eb_note']);
                if (empty($note)) {
                    $note = '&nbsp;';
                }
                echo '
					<tr class="box_handle' . (++$i % 2 == 0 ? ' color' : '') . '">
						<td><a href="brukere/finn?email=' . urlencode($row['eb_value']) . '"><input type="radio" name="eb_id" value="' . $row['eb_id'] . '" />' . htmlspecialchars($row['eb_value']) . '</a></td>
						<td class="r">' . ess::$b->date->get($row['eb_time'])->format() . '</td>
						<td><user id="' . $row['eb_up_id'] . '" /></td>
						<td>' . $note . '</td>
					</tr>';
            }
            echo '
				</tbody>
			</table>
			<p class="c">' . show_sbutton("Rediger", 'name="edit"') . ' <span class="red">' . show_sbutton("Slett", 'name="delete"') . '</span></p>
		</form>';
        }
        echo '
		<p>E-postdomener som er blokkert:</p>';
        if (count($data['domain']) == 0) {
            echo '
		<p class="c">Ingen domener er blokkert.</p>';
        } else {
            echo '
		<form action="" method="post">
			<table class="table center">
				<thead>
					<tr>
						<th>Domene</th>
						<th>Lagt til</th>
						<th>Av</th>
						<th>Notat</th>
					</tr>
				</thead>
				<tbody>';
            $i = 0;
            foreach ($data['domain'] as $row) {
                $note = game::format_data($row['eb_note']);
                if (empty($note)) {
                    $note = '&nbsp;';
                }
                echo '
					<tr class="box_handle' . (++$i % 2 == 0 ? ' color' : '') . '">
						<td><a href="brukere/finn?email=' . urlencode('*@' . $row['eb_value']) . '"><input type="radio" name="eb_id" value="' . $row['eb_id'] . '" />' . htmlspecialchars($row['eb_value']) . '</a></td>
						<td class="r">' . ess::$b->date->get($row['eb_time'])->format() . '</td>
						<td><user id="' . $row['eb_up_id'] . '" /></td>
						<td>' . $note . '</td>
					</tr>';
            }
            echo '
				</tbody>
			</table>
			<p class="c">' . show_sbutton("Rediger", 'name="edit"') . ' <span class="red">' . show_sbutton("Slett", 'name="delete"') . '</span></p>
		</form>';
        }
        echo '
	</div>
</div>';
    }
Example #10
0
    /**
     * Behandle donasjon
     */
    protected function page_donate_handle()
    {
        $amount = game::intval($_POST['donate']);
        $note = trim(postval("note"));
        // nostat?
        if (access::is_nostat()) {
            ess::$b->page->add_message("Du er nostat og har ikke tilgang til å donere til {$this->ff->type['refobj']}.", "error");
        } elseif ($amount < 0) {
            ess::$b->page->add_message("Beløpet kan ikke være negativt..", "error");
        } elseif ($amount < 15000) {
            ess::$b->page->add_message("Minstebeløp å donere er 15 000 kr.", "error");
        } else {
            // finn ut når vi donerte siste gang - kan ikke donere oftere enn en gang i timen
            $result = \Kofradia\DB::get()->query("SELECT ffbl_time FROM ff_bank_log WHERE ffbl_ff_id = {$this->ff->id} AND ffbl_type = 3 AND ffbl_up_id = " . login::$user->player->id . " ORDER BY ffbl_time DESC LIMIT 1");
            $last = $result->fetch();
            if ($last && $last['ffbl_time'] + 3600 > time()) {
                ess::$b->page->add_message("Du kan ikke donere oftere enn én gang per time. Du må vente " . game::counter($last['ffbl_time'] + 3600 - time()) . " før du kan donere på nytt.", "error");
            } elseif ($amount > login::$user->player->data['up_cash']) {
                ess::$b->page->add_message("Du har ikke nok penger på hånda til å donere " . game::format_cash($amount) . " til {$this->ff->type['refobj']}.", "error");
            } elseif (isset($_POST['approve']) && validate_sid(false)) {
                // forsøk å donere
                $a = \Kofradia\DB::get()->exec("UPDATE ff, users_players SET ff_bank = ff_bank + {$amount}, up_cash = up_cash - {$amount} WHERE ff_id = {$this->ff->id} AND up_id = " . login::$user->player->id . " AND up_cash >= {$amount}");
                // hadde ikke nok penger?
                if ($a == 0) {
                    ess::$b->page->add_message("Du har ikke nok penger på hånda til å donere " . game::format_cash($amount) . " til {$this->ff->type['refobj']}.", "error");
                } else {
                    // finn balanse
                    $result = \Kofradia\DB::get()->query("SELECT ff_bank FROM ff WHERE ff_id = {$this->ff->id}");
                    $balance = $result->fetchColumn(0);
                    // legg til logg
                    \Kofradia\DB::get()->exec("INSERT INTO ff_bank_log SET ffbl_ff_id = {$this->ff->id}, ffbl_type = 3, ffbl_amount = {$amount}, ffbl_up_id = " . login::$user->player->id . ", ffbl_time = " . time() . ", ffbl_balance = {$balance}, ffbl_note = " . \Kofradia\DB::quote($note));
                    // legg til i spillerinfo
                    \Kofradia\DB::get()->exec("UPDATE ff_members SET ffm_donate = ffm_donate + {$amount} WHERE ffm_up_id = " . login::$user->player->id . " AND ffm_ff_id = {$this->ff->id} AND ffm_status = 1");
                    ess::$b->page->add_message("Du donerte " . game::format_cash($amount) . " til {$this->ff->type['refobj']}.");
                    // legg til daglig stats
                    $this->ff->stats_update("money_in", $amount, true);
                    redirect::handle();
                }
            } elseif (!isset($_POST['skip'])) {
                ess::$b->page->add_title("Donér til {$this->ff->type['refobj']}");
                // vis skjema for godkjenning
                echo '
<!-- donasjon -->
<div class="section w200">
	<h2>Donér til ' . $this->ff->type['refobj'] . '</h2>
	<p>Du er i ferd med å donére til ' . $this->ff->type['refobj'] . '.</p>
	<p>Beløp: ' . game::format_cash($amount) . '</p>
	<p>Melding/notat: ' . game::format_data($note, "bb-opt", "Uten melding") . '</p>
	<form action="" method="post">
		<input type="hidden" name="donate" value="' . $amount . '" />
		<input type="hidden" name="note" value="' . htmlspecialchars($note) . '" />
		<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
		<p class="c">
			' . show_sbutton("Utfør donasjon", 'name="approve"') . '
			' . show_sbutton("Avbryt", 'name="skip"') . '
		</p>
	</form>
</div>';
                $this->ff->load_page();
            }
        }
    }
Example #11
0
    /** Vis henvendelsen */
    protected function show()
    {
        // øk visningstelleren
        $this->increase_view_counter();
        echo '
<h1>Henvendelse</h1>
<p class="c"><a href="./">Tilbake</a></p>
<table class="table center tablemb">
	<tbody>
		<tr>
			<th>Tittel</th>
			<td>' . htmlspecialchars($this->data['su_title']) . '</td>
		</tr>
		<tr>
			<th>Kategori</th>
			<td>' . htmlspecialchars(support::$kategorier[$this->data['su_category']]['name']) . '</td>
		</tr>' . (!$this->own ? '
		<tr>
			<th>Innsender</th>
			<td><user id="' . $this->data['su_up_id'] . '" />' . ($this->data['new_up_id'] != $this->data['su_up_id'] ? '<br />
				(Ny: <user id="' . $this->data['new_up_id'] . '" />)' : '') . '</td>
		</tr>' : '') . '
		<tr>
			<th>Innsendt</th>
			<td>' . ess::$b->date->get($this->data['su_time'])->format(date::FORMAT_SEC) . '<br />' . game::timespan($this->data['su_time'], game::TIME_ABS | game::TIME_PAST) . '</td>
		</tr>
		<tr>
			<th>Status</th>';
        if ($this->solved) {
            echo '
			<td>Avsluttet</td>';
        } else {
            // knapp for å avslutte henvendelsen
            echo '
			<td>
				Åpen / under behandling<br />
				<form action="" method="post">' . show_sbutton("Avslutt henvendelsen", 'name="close" style="margin-top: 3px"') . '</form>
			</td>';
        }
        echo '
		</tr>
	</tbody>
</table>';
        // vis skjema for å svare på henvendelsen
        $this->show_reply_form();
        // hent meldingene
        $pagei = new pagei(pagei::PER_PAGE, 30, pagei::ACTIVE_GET, "side");
        $result = $pagei->query("\n\t\t\tSELECT sum_up_id, sum_time, sum_text\n\t\t\tFROM support_messages\n\t\t\tWHERE sum_su_id = {$this->data['su_id']}\n\t\t\tORDER BY sum_time DESC");
        if ($pagei->pages > 1) {
            echo '
<p class="c">' . $pagei->pagenumbers() . '</p>';
        }
        ess::$b->page->add_css('.profile_link_imgfix img { vertical-align: top; margin-top: -2px }');
        while ($row = $result->fetch()) {
            echo '
<div class="bg1_c" style="width: 500px">
	<h2 class="bg1">
		<span style="float: left" class="profile_link_imgfix"><user id="' . $row['sum_up_id'] . '" /></span>
		<span style="float: right; font-size: 10px">' . ess::$b->date->get($row['sum_time'])->format(date::FORMAT_SEC) . '</span>
		<span class="left2"></span><span class="right2"></span>
	</h2>
	<div class="bg1">
		<div class="p">' . game::format_data($row['sum_text']) . '</div>
	</div>
</div>';
        }
        if ($pagei->pages > 1) {
            echo '
<p class="c">' . $pagei->pagenumbers() . '</p>';
        }
        echo '
<div style="margin-bottom: 50px"></div>';
    }
Example #12
0
					<td>' . ($row['ds_reply_decision'] == 1 ? 'Fra: ' . htmlspecialchars($params['name_old']) . '<br />Til: ' . htmlspecialchars($params['name']) : 'Til: ' . htmlspecialchars($params['name'])) . '</td>
					<td><user id="' . $row['ds_up_id'] . '" /><br />
						' . ($row['ds_reply_decision'] == 1 ? 'Innvilget' : ($row['ds_reply_decision'] == -1 ? 'Avslått' : 'Under behandling')) . '</td>
				</tr>';
                }
                echo '
			</tbody>
		</table>';
            }
            break;
    }
    // behandlet?
    if ($soknad['ds_reply_decision'] != 0) {
        echo '
		<p>Søknaden ble <b>' . ($soknad['ds_reply_decision'] == -1 ? 'avslått' : 'godtatt') . '</b> ' . $_base->date->get($soknad['ds_reply_time'])->format() . ' av <user id="' . $soknad['ds_reply_up_id'] . '" />.</p>
		<p><b>Begrunnelse for ' . ($soknad['ds_reply_decision'] == -1 ? 'avslag' : 'godtatt søknad') . ':</b><br />' . game::format_data($soknad['ds_reply_reason'], "bb-opt", "Ingen begrunnelse gitt.") . '</p>';
    } elseif (!access::has($type['access'])) {
        echo '
		<p><u>Du har ikke tilgang til å behandle denne søknaden. Må behandles av en ' . access::name($type['access']) . '.</u></p>';
    } else {
        echo '
		<form action="" method="post">
			<p><b>Begrunnelse:</b> (Spilleren blir opplyst om denne begrunnelsen.)</p>
			<p><textarea name="reason" rows="5" cols="40">' . htmlspecialchars(postval("reason")) . '</textarea></p>
			<p>
				' . show_sbutton("Godta søknad", 'name="approve"') . '
				' . show_sbutton("Avslå søknad", 'name="decline"') . '
				<a href="soknader" class="button">Avbryt</a>
			</p>
		</form>';
    }
Example #13
0
 /**
  * Hent meldinger og data for meldingene
  */
 public function get_messages(pagei $pagei, $show_deleted = false)
 {
     $result = $pagei->query("\n\t\t\tSELECT it_id, it_title, ir_unread, ir_restrict_im_time, ir_up_id, ir_deleted, ir_marked, COUNT(im_id) num_messages\n\t\t\tFROM inbox_threads\n\t\t\t\tJOIN inbox_rel ON it_id = ir_it_id\n\t\t\t\tJOIN users_players ON up_u_id = {$this->u->id} AND ir_up_id = up_id\n\t\t\t\tJOIN inbox_messages ON im_it_id = it_id AND im_deleted = 0 AND im_time <= ir_restrict_im_time\n\t\t\tWHERE 1" . ($show_deleted ? '' : ' AND ir_deleted = 0') . "\n\t\t\tGROUP BY it_id\n\t\t\tORDER BY (ir_unread != 0 AND ir_deleted = 0) DESC, ir_marked = 0, ir_restrict_im_time DESC");
     // ingen meldinger?
     if ($pagei->total == 0) {
         return array();
     }
     // sett opp data for meldingene
     $meldinger = array();
     $prev = array();
     while ($row = $result->fetch()) {
         $row['up_prev'] = false;
         $row['up_prev_other'] = false;
         $row['id_text'] = '';
         $row['receivers'] = array();
         $row['receivers_ok'] = false;
         $row['receivers_crew'] = true;
         $prev[] = $row['it_id'];
         $meldinger[$row['it_id']] = $row;
     }
     // hent alle deltakerene i meldingstrådene som skal listes opp
     $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT ir_it_id, ir_up_id, ir_unread, ir_views, ir_deleted, ir_restrict_im_time, ir_marked, COUNT(im_id) AS num_messages, up_access_level, up_u_id, u_access_level, u_active_up_id\n\t\t\tFROM inbox_rel\n\t\t\t\tJOIN (\n\t\t\t\t\tSELECT ir_it_id ref_it_id, MAX(ir_restrict_im_time) ref_ir_restrict_im_time\n\t\t\t\t\tFROM inbox_rel, users_players\n\t\t\t\t\tWHERE ir_it_id IN (" . implode(",", $prev) . ") AND up_id = ir_up_id AND up_u_id = {$this->u->id}\n\t\t\t\t\tGROUP BY ir_it_id\n\t\t\t\t\tORDER BY up_last_online DESC\n\t\t\t\t) ref ON ref_it_id = ir_it_id\n\t\t\t\tLEFT JOIN inbox_messages ON im_it_id = ir_it_id AND im_up_id = ir_up_id AND im_deleted = 0 AND im_time <= ref_ir_restrict_im_time\n\t\t\t\tLEFT JOIN users_players ON up_id = ir_up_id\n\t\t\t\tLEFT JOIN users ON u_id = up_u_id\n\t\t\tWHERE ir_it_id IN (" . implode(",", $prev) . ")\n\t\t\tGROUP BY ir_it_id, ir_up_id\n\t\t\tORDER BY up_name");
     $c = access::has("crewet");
     while ($row = $result->fetch()) {
         $meldinger[$row['ir_it_id']]['receivers'][] = $row;
         if ($row['ir_up_id'] != $this->u->player->id && $row['ir_deleted'] == 0 && ($row['up_access_level'] != 0 || $c && $row['u_access_level'] != 0 && $row['u_active_up_id'] == $row['ir_up_id'])) {
             $meldinger[$row['ir_it_id']]['receivers_ok'] = true;
             if ($meldinger[$row['ir_it_id']]['receivers_crew'] && !in_array("crewet", access::types($row['up_access_level']))) {
                 $meldinger[$row['ir_it_id']]['receivers_crew'] = false;
             }
         }
     }
     // hent spillerene som har skrevet siste melding (inkludert meg)
     $im_id = array();
     $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT im_id, im_it_id, im_up_id, is_self\n\t\t\tFROM (\n\t\t\t\tSELECT im_id, im_it_id, im_up_id, IF(up1.up_u_id = {$this->u->id}, 1, 0) is_self\n\t\t\t\tFROM inbox_messages\n\t\t\t\t\tJOIN users_players up1 ON up1.up_id = im_up_id\n\t\t\t\t\tJOIN users_players up2 ON up2.up_u_id = {$this->u->id}\n\t\t\t\t\tJOIN inbox_rel ON im_it_id = ir_it_id AND ir_up_id = up2.up_id AND im_time <= ir_restrict_im_time\n\t\t\t\tWHERE im_it_id IN (" . implode(",", $prev) . ") AND im_deleted = 0\n\t\t\t\tORDER BY im_id DESC\n\t\t\t) AS ref\n\t\t\tGROUP BY im_it_id");
     $others = array();
     while ($row = $result->fetch()) {
         $meldinger[$row['im_it_id']]['up_prev'] = array($row['is_self'], $row['im_up_id']);
         $im_id[$row['im_id']] = $row['im_it_id'];
         if ($row['is_self']) {
             $others[] = $row['im_it_id'];
         }
     }
     // skal vi hente tidligere avsender? (vi har svart sist)
     if (count($others) > 0) {
         // hent spillerene som har skrevet siste melding (ekskludert meg)
         $result = \Kofradia\DB::get()->query("\n\t\t\t\tSELECT im_it_id, im_up_id\n\t\t\t\tFROM (\n\t\t\t\t\tSELECT im_it_id, im_up_id\n\t\t\t\t\tFROM inbox_messages\n\t\t\t\t\t\tJOIN users_players up1 ON up1.up_id = im_up_id AND up1.up_u_id != {$this->u->id}\n\t\t\t\t\t\tJOIN users_players up2 ON up2.up_u_id = {$this->u->id}\n\t\t\t\t\t\tJOIN inbox_rel ON im_it_id = ir_it_id AND ir_up_id = up2.up_id AND im_time <= ir_restrict_im_time\n\t\t\t\t\tWHERE im_it_id IN (" . implode(",", $others) . ") AND im_deleted = 0\n\t\t\t\t\tORDER BY im_id DESC\n\t\t\t\t) AS ref\n\t\t\t\tGROUP BY im_it_id");
         $others = array();
         while ($row = $result->fetch()) {
             $meldinger[$row['im_it_id']]['up_prev_other'] = $row;
         }
     }
     // hent innholdet til de siste meldingene
     if (count($im_id) > 0) {
         $result = \Kofradia\DB::get()->query("\n\t\t\t\tSELECT id_im_id, id_text FROM inbox_data WHERE id_im_id IN (" . implode(",", array_keys($im_id)) . ")");
         $max = 50;
         while ($row = $result->fetch()) {
             $d = strip_tags(game::format_data($row['id_text']));
             $d = preg_replace("/(^ +| +\$|\\r)/mu", "", $d);
             $d = preg_replace("/(?<![!,.\\n ])\\n/u", ". ", $d);
             $d = preg_replace("/\\n/u", " ", $d);
             $d = preg_replace("/  +/u", " ", $d);
             $d = trim($d);
             if (mb_strlen($d) > $max) {
                 // TODO: Flytt funksjon til en klasse/funksjon så den kan gjenbrukes av andre sider
                 // forsøk å bryt på et mellomrom
                 $pos = mb_strpos($d, " ", $max - 10);
                 if ($pos !== false && $pos < $max) {
                     $d = mb_substr($d, 0, $pos) . " ...";
                 } else {
                     $d = mb_substr($d, 0, $max - 3) . "...";
                 }
             }
             $meldinger[$im_id[$row['id_im_id']]]['id_text'] = $d;
         }
     }
     return $meldinger;
 }
Example #14
0
    /**
     * Felt for advarsel
     */
    protected static function advarsel_input($kategori = null)
    {
        $active = !empty($_POST['a_active']);
        $types = crewlog::$user_warning_types;
        $types_name = crewlog::$user_warning_types_name;
        ess::$b->page->add_js_domready('
	$("advarsel_inactive").getElement("a").addEvent("click", function(event)
	{
		$("advarsel_inactive").addClass("hide");
		$("advarsel_active").removeClass("hide");
		$("a_active").set("value", "1");
		event.stop();
	});
	$("advarsel_active").getElement("a").addEvent("click", function(event)
	{
		$("advarsel_inactive").removeClass("hide");
		$("advarsel_active").addClass("hide");
		$("a_active").set("value", "0");
		event.stop();
	});');
        $html = '
<div id="advarsel_inactive"' . ($active ? ' class="hide"' : '') . '>
	<p class="c"><a href="#">Legg til advarsel sammen med endringen</a></p>
</div>
<div id="advarsel_active"' . (!$active ? ' class="hide"' : '') . '>
	<p class="c"><a href="#">Ikke legg til advarsel</a></p>
	<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">
				<input type="hidden" name="a_active" id="a_active" value="' . ($active ? 1 : 0) . '" />
				<dl class="dd_right">';
        if ($kategori) {
            if (!isset($types_name[$kategori])) {
                throw new HSException("Ugyldig kategori.");
            }
            $html .= '
					<dt>Kategori</dt>
					<dd>' . htmlspecialchars($types[$types_name[$kategori]]) . '</dd>';
        } else {
            $html .= '
					<dt>Kategori</dt>
					<dd>
						<select name="a_type">';
            $type = isset($_POST['a_type']) && isset($types[$_POST['a_type']]) ? intval($_POST['a_type']) : false;
            if ($type === false) {
                $html .= '
							<option value="">Velg ..</option>';
            }
            foreach ($types as $key => $row) {
                $html .= '
							<option value="' . $key . '"' . ($key === $type ? ' selected="selected"' : '') . '>' . htmlspecialchars($row) . '</option>';
            }
            $html .= '
						</select>
					</dd>';
        }
        $html .= '
					<dt>Alvorlighet/prioritet</dt>
					<dd>
						<select name="a_priority">';
        $priority = isset($_POST['a_priority']) && is_numeric($_POST['a_priority']) && $_POST['a_priority'] >= 1 && $_POST['a_priority'] <= 3 ? $_POST['a_priority'] : 2;
        $html .= '
							<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 for advarsel</p>
				<p><textarea name="a_log" rows="10" cols="30" style="width: 98%">' . htmlspecialchars(postval("a_log")) . '</textarea></p>
				<p><input type="checkbox" name="a_notify"' . ($_SERVER['REQUEST_METHOD'] == "POST" && !isset($_POST['a_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>
			</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\tSELECT lc_id, lc_up_id, lc_time, lc_log, lcd_data_int\n\t\t\tFROM log_crew\n\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\tLEFT JOIN log_crew_data ON lcd_lc_id = lc_id AND lcd_lce_id = 5\n\t\t\tWHERE lc_lca_id = {$lca_id} AND (lcd_data_int IS NULL OR lcd_data_int = 0)\n\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);
        $html .= '
	<div class="bg1_c ' . (count($data) == 0 ? 'xsmall' : 'xmedium') . '">
		<h1 class="bg1">Tidligere advarsler<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">';
        if (count($data) == 0) {
            $html .= '
			<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");
                $html .= '
			<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>';
            }
            // TODO: AJAX på sidevalg
            $html .= '
			<p class="c">' . $pagei->pagenumbers() . '</p>';
            if ($pagei->pages > 1) {
                $html .= '
			<p class="c dark">(Sidene åpner i samme vindu, så pass på hvis du har fylt inn feltene ovenfor.)</p>';
            }
        }
        $html .= '
		</div>
	</div>
</div>';
        return $html;
    }
Example #15
0
        }
        $_base->page->add_title("Slett");
        // vis skjema
        echo '
<h1 class="path_all">Slette revisjon: ' . $hierarchy . '</h1>
<p>Er du sikker på at du ønsker å slette denne revisjonen?</p>
<div class="warning">
	<p>Revisjonen vil bli slettet permanent.</p>
</div>
<form action="" method="post">
	<p><input type="checkbox" name="confirm" id="confirm_del" /><label for="confirm_del"> Bekreft</label></p>
	<p>' . show_sbutton("Slett", 'name="do"') . ' <a href="' . $filurl . '" class="button">Avbryt</a></p>
</form>
<p>Lastet opp ' . $_base->date->get($revision->info['cfr_time'])->format(date::FORMAT_SEC) . ' av <user id="' . $revision->info['cfr_up_id'] . '" />.</p>';
        // vis beskrivelse
        $description = trim(game::format_data($revision->info['cfr_description']));
        if (!empty($description)) {
            echo '
<div class="p">' . $description . '</div>';
        }
        echo '
<p><a href="' . $revurl . '/raw"><b>Hent fil &raquo;</b></a></p>';
        $_base->page->load();
    }
    // handling: sett aktiv revisjon
    if ($subpage == "active") {
        // allerede aktiv?
        if ($revision->id == $file->info['cff_cfr_id']) {
            $_base->page->add_message("Denne revisjonen er allerede aktiv.");
        } else {
            // sett som aktiv
Example #16
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;
    }
Example #17
0
 /** Formater data for beskrivelsen */
 public function format_description($data = -1)
 {
     if ($data == -1) {
         $data = $this->data['ff_description'];
     }
     return game::format_data(game::format_data(game::format_data($data, "music_pre"), "bb"), "music_post");
 }
Example #18
0
    /** Behandle respons */
    public function handle_ret($id, $data = NULL)
    {
        switch ($id) {
            case self::RET_INFO_DELETED_OWN:
                echo '
<p class="info_box">Du viser en av dine egne meldinger som har blitt slettet.</p>';
                break;
            case self::RET_INFO_DELETED:
                echo '
<p class="info_box">Denne meldingen tilhører ikke deg.</p>';
                break;
            case self::RET_INFO_REPORTED:
                echo '
<p class="info_box">Du har tilgang til denne meldingstråden fordi den er eller har vært rapportert.</p>';
                break;
            case self::RET_ERROR_404:
                ess::$b->page->add_message("Fant ikke meldingstråden.", "error");
                redirect::handle("innboks");
                break;
            case self::RET_ERROR_CANNOT_REPLY:
                ess::$b->page->add_message("Du kan ikke svare på denne meldingstråden.", "error");
                redirect::handle();
                break;
            case self::RET_ERROR_NO_RECEIVERS:
                ess::$b->page->add_message("Det er ingen mottakere du kan sende svar til.", "error");
                redirect::handle();
                break;
            case self::RET_ERROR_BAN_CREW:
                ess::$b->page->add_message("Du er blokkert fra å sende meldinger til andre enn Crewet. Du kan kun ha én mottaker. Blokkeringen varer til " . ess::$b->date->get($data['ub_time_expire'])->format(date::FORMAT_SEC) . ".<br /><b>Begrunnelse:</b> " . game::format_data($data['ub_reason'], "bb-opt", "Ingen begrunnelse gitt."), "error");
                break;
            case self::RET_ERROR_BAN:
                ess::$b->page->add_message("Du er blokkert fra å sende meldinger til andre enn Crewet. Blokkeringen varer til " . ess::$b->date->get($data['ub_time_expire'])->format(date::FORMAT_SEC) . ".<br /><b>Begrunnelse:</b> " . game::format_data($data['ub_reason'], "bb-opt", "Ingen begrunnelse gitt."), "error");
                break;
            case self::RET_ERROR_BLOCKED:
                foreach ($data as &$row) {
                    $row = game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level']) . (($reason = game::bb_to_html($row['uc_info'])) == "" ? "" : ' - begrunnelse: ' . $reason);
                }
                ess::$b->page->add_message("Du kan ikke svare på denne meldingstråden fordi følgende brukere har blokkert deg:<ul><li>" . implode("</li><li>", $data) . "</li></ul>", "error");
                break;
            case self::RET_INFO_BLOCKED:
                foreach ($data as &$row) {
                    $row = game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level']) . (($reason = game::bb_to_html($row['uc_info'])) == "" ? "" : ' - begrunnelse: ' . $reason);
                }
                ess::$b->page->add_message("Følgende brukere har egentlig blokkert deg:<ul><li>" . implode("</li><li>", $data) . "</li></ul>");
                break;
            case self::RET_ERROR_WAIT:
                global $__server;
                ess::$b->page->add_message('Du må vente ' . game::counter($data) . ' før du kan sende en melding!', "error");
                putlog("LOG", "%c13%bMELDING FORSØK%b%c: %u" . login::$user->player->data['up_name'] . "%u forsøkte å svare på en melding til it_id {$this->id} (%u{$this->data_thread['it_title']}%u). Må vente {$data} sekunder. {$__server['path']}/innboks_les?id={$this->id}");
                break;
            case self::RET_ERROR_CONTENT_SHORT:
                ess::$b->page->add_message("Meldingen kan ikke inneholde færre enn 3 bokstaver/tall.", "error");
                break;
            case self::RET_ERROR_MARK_NO_REL:
                ess::$b->page->add_message("Du har ikke mulighet til å markere denne meldingstråden da du ikke er en deltaker i den.", "error");
                break;
            case self::RET_INFO_MARK_ALREADY:
                if ($this->data_rel['ir_marked']) {
                    ess::$b->page->add_message("Meldingstråden er allerede markert som merket.");
                } else {
                    ess::$b->page->add_message("Meldingstråden er ikke merket fra før.");
                }
                break;
            case self::RET_INFO_MARK_TRUE:
                ess::$b->page->add_message("Meldingstråden er nå markert for oppfølging.");
                break;
            case self::RET_INFO_MARK_FALSE:
                ess::$b->page->add_message("Meldingstråden er ikke lenger markert for oppfølging.");
                break;
            default:
                throw new HSException("Ukjent behandler.");
        }
    }
Example #19
0
    echo '
					<option value="' . $id . '"' . ($selected == $id ? ' selected="selected"' : '') . '>' . htmlspecialchars($kategori) . '</option>';
}
echo '
				</select>
			</dd>
			<dt>Navn</dt>
			<dd><input type="text" name="name" value="' . htmlspecialchars(postval("name")) . '" id="kontakt_navn" maxlength="30" class="styled w150" /></dd>
			<dt>E-postadresse</dt>
			<dd><input type="text" name="email" value="' . htmlspecialchars(postval("email")) . '" class="styled w150" /></dd>
			<dt>Kort emne</dt>
			<dd><input type="text" name="subject" value="' . htmlspecialchars(postval("subject")) . '" class="styled w150" /></dd>
			<dt>Din henvendelse</dt>
			<dd><textarea name="content" rows="10" cols="35">' . htmlspecialchars(postval("content")) . '</textarea></dd>' . ($preview ? '
			<dt>Forhåndsvisning</dt>
			<dd>' . game::format_data($content) . '</dd>' : '') . '
		</dl>
		<p class="c">' . show_sbutton("Send inn henvendelse", 'name="add"') . ' ' . show_sbutton("Forhåndsvis", 'name="preview"') . '</p>
	</form>
</div>
<div class="section w350 center">
	<h2>Mine henvendelser</h2>
	<p class="j">For å få tilgang til henvendelsene du har sendt inn må du logge inn. Du får ny ID ved hver henvendelse, men alle ID-ene gir deg tilgang til alle henvendelsene.</p>
	<form action="" method="post" autocomplete="off">
		<dl class="dl_30 dl_2x">
			<dt>ID - <a href="henvendelser?forgot">Glemt ID?</a></dt>
			<dd><input type="text" name="id" value="' . htmlspecialchars(postval("id")) . '" class="styled w40" /></dd>
			<dt>E-postadresse</dt>
			<dd><input type="text" name="email" value="' . htmlspecialchars(postval("email")) . '" class="styled w150" /></dd>
		</dl>
		<p class="c">' . show_sbutton("Vis mine henvendelser") . '</p>
Example #20
0
    protected static function load_polls()
    {
        if (self::$locked) {
            return;
        }
        $polls = self::get_polls();
        if (!$polls || !$polls['polls']) {
            return;
        }
        // innhold på høyre siden
        $content = '';
        kf_menu::$data['is_avstemning'] = true;
        $i = 0;
        foreach ($polls['polls'] as $p_id => $poll) {
            $options = isset($polls['options'][$p_id]) ? $polls['options'][$p_id] : array();
            $vote = isset($polls['votes'][$p_id]) ? $polls['votes'][$p_id] : false;
            $voted = (bool) $vote;
            $content .= '
<div class="default_right_box r4">
	<!--<h1>Avstemninger</h1>-->';
            $content .= (!$voted ? '
	<form action="' . ess::$s['relative_path'] . '/polls/vote" method="post">' : '') . '
	<h1><b>' . htmlspecialchars($poll['p_title']) . '</b></h1>';
            if (($bb = game::format_data($poll['p_text'])) != "") {
                $content .= '
	<div class="p">' . $bb . '</div>';
            }
            // link til forum emne?
            if ($poll['p_ft_id']) {
                $content .= '
	<p><a href="' . ess::$s['relative_path'] . '/forum/topic?id=' . $poll['p_ft_id'] . '">Diskuter avstemning</a></p>';
            }
            $content .= '
	<div class="poll_options">';
            // alternativene
            foreach ($options['options'] as $option) {
                if ($voted) {
                    $p = round($option['po_votes'] / $options['votes'] * 100, 1);
                    $p_w = round($option['po_votes'] / $options['votes_max'] * 100, 1);
                    $is = $option['po_id'] == $vote['pv_po_id'];
                    // resultatet
                    $content .= '
		<div class="poll_option' . ($is ? ' voted' : '') . '">
			<div class="p">' . game::format_data($option['po_text']) . '</div>
			<div class="poll_option_bar_wrap">
				<div class="poll_option_bar" style="width: ' . round($p_w) . '%"><p>' . $p . ' %' . ($is ? ' (valgt)' : '') . '</p></div>
			</div>
		</div>';
                } else {
                    $content .= '
		<div class="p"><input type="radio" name="poll[' . $poll['p_id'] . ']" value="' . $option['po_id'] . '" id="poll_' . $poll['p_id'] . '_' . $option['po_id'] . '" /><label for="poll_' . $poll['p_id'] . '_' . $option['po_id'] . '"> ' . game::format_data($option['po_text']) . '</label></div>';
                }
            }
            $content .= (!$voted ? '
		<p class="c">' . show_sbutton("Avgi stemme", 'name="vote"') . '</p>' : '') . '
	</div>' . (!$voted ? '
	</form>' : '') . ($i == 0 ? '
	<p><a href="' . ess::$s['relative_path'] . '/polls">Tidligere avstemninger &raquo;</a></p>' : '') . '
</div>';
            $i++;
        }
        ess::$b->page->add_content_right($content, 1);
    }
Example #21
0
<p>Viser signaturen til ' . $player->profile_link() . ':</p>
<div class="profile_signature">' . (empty($signature) ? '
	<span class="profile_signature_empty">Spilleren har ingen signatur.</span>' : $signature) . '
</div>
<p>' . (login::$logged_in ? $player->data['up_u_id'] == login::$user->id || access::has("forum_mod") ? '<a href="' . ess::$s['rpath'] . '/min_side?up_id=' . $player->id . '&amp;a=forum">Rediger signatur</a> - ' : '<a href="' . $__server['relative_path'] . '/js" class="report_link" rel="signature,' . $player->id . ',1">Rapporter signatur</a> - ' : '') . '<a href="' . $__server['relative_path'] . '/p/' . rawurlencode($player->data['up_name']) . '/' . $player->id . '">Tilbake til profil</a></p>';
    ess::$b->page->load();
}
// forhåndsvisning?
$preview = false;
$text = $player->data['up_profile_text'];
if (isset($_POST['preview']) && (login::$logged_in && (login::$user->id == $player->data['up_u_id'] || access::has("crewet")))) {
    ess::$b->page->add_message("Denne profilen er en forhåndsvisning av teksten du redigerer.<br /><br />For å lagre teksten må du lukke dette vinduet og gå tilbake til redigeringen.");
    $text = $_POST['preview'];
    $preview = true;
}
$html = game::format_data($text, "profile", $player);
echo '
<div class="p" id="profile_text">
	' . (empty($html) ? '<span class="dark">Mangler profiltekst.</span>' : $html) . '
</div>
<div class="clear"></div>';
if ($preview) {
    echo '
<p class="dark" style="border-top: 2px solid #1F1F1F; padding: 5px 2px"><b>Dette er en forhåndsvisning.</b></p>';
}
// sjekk for whatpulse
$wp = new whatpulse();
if ($wp->load_user($player->id) && $wp->update()) {
    // hent ut hvilke felt vi skal vise
    $fields = $wp->params->get("fields");
    if (empty($fields)) {
Example #22
0
 /**
  * Godta/avslå søknad
  * @param boolean $outcome - om søknaden blir innvilget eller ikke
  * @param integer $ds_id
  * @param string $reason
  */
 public static function decide($outcome, $ds_id, $reason)
 {
     global $_base, $__server;
     $ds_id = (int) $ds_id;
     // hent søknaden
     $soknad = self::get($ds_id);
     // fant ikke søknaden?
     if (!$soknad) {
         return false;
     }
     // er søknaden allerede behandlet?
     if ($soknad['ds_reply_decision'] != 0) {
         return false;
     }
     // typen
     $type = self::get_type($soknad['ds_type']);
     // har vi tilgang til søknaden?
     if (!access::has($type['access'])) {
         return false;
     }
     // sjekk for tom begrunnelse
     $have_reason = trim(game::format_data($reason)) != "";
     // sett opp params
     $params = unserialize($soknad['ds_params']);
     // sett opp søknadsinfo
     $info = self::get_info($type['name'], $soknad, $params);
     // info er ikke gyldig - søknaden er ikke gyldig
     if (!is_array($info)) {
         // slett søknaden
         self::delete($ds_id);
         return $info;
     }
     // avslå søknad
     if (!$outcome) {
         $msg = 'bb:' . $type['title'] . ': Din søknad ble avslått. (' . $info['bb'] . ') Begrunnelse: ' . ($have_reason ? $reason : 'Ingen begrunnelse gitt.');
         // spesielle handlinger
         switch ($type['name']) {
             case "ff_name":
                 // sett tilbakepengene på bankkontoen
                 if (isset($params['cost']) && $params['cost'] > 0) {
                     $msg .= ' Beløpet på ' . game::format_cash($params['cost']) . ' som ble innbetalt ved søknad er satt inn på kontoen igjen.';
                     ff::bank_static(ff::BANK_TILBAKEBETALING, $params['cost'], $soknad['ds_rel_id'], 'Navnsøknad avslått: ' . $params['name']);
                 }
                 break;
         }
     } else {
         $msg = 'bb:' . $type['title'] . ': Din søknad har blitt innvilget. (' . $info['bb'] . ') Begrunnelse: ' . ($have_reason ? $reason : 'Ingen begrunnelse gitt.');
         // spesielle handlinger
         switch ($type['name']) {
             case "ff_name":
                 $ff = ff::get_ff($soknad['ds_rel_id'], ff::LOAD_SCRIPT);
                 if ($ff) {
                     $ff->change_name($params['name'], $soknad['ds_up_id']);
                     // lagre gammelt navn på FF i søknaden
                     $params['name_old'] = $info['ff_name'];
                 }
                 break;
         }
     }
     // legg til logg hos spilleren
     player::add_log_static("soknader", $msg, 0, $soknad['ds_up_id']);
     // oppdater søknaden
     \Kofradia\DB::get()->exec("UPDATE div_soknader SET ds_params = " . \Kofradia\DB::quote(serialize($params)) . ", ds_reply_decision = " . ($outcome ? 1 : -1) . ", ds_reply_reason = " . \Kofradia\DB::quote($reason) . ", ds_reply_up_id = " . self::up_id() . ", ds_reply_time = " . time() . " WHERE ds_id = {$ds_id}");
     // oppdater cache
     tasks::set("soknader", \Kofradia\DB::get()->query("SELECT COUNT(ds_id) FROM div_soknader WHERE ds_reply_decision = 0")->fetchColumn(0));
     return $info;
 }
Example #23
0
    /**
     * Vis deaktiverte spillere
     */
    protected static function vis_spillere()
    {
        global $__server;
        ess::$b->page->add_title("Deaktiverte brukere");
        // hente listen over brukere
        $pagei = new pagei(pagei::PER_PAGE, 20, pagei::ACTIVE_GET, "side");
        $result = $pagei->query("\n\t\t\tSELECT\n\t\t\t\tu_id, u_email, u_access_level, u_deactivated_time, u_deactivated_up_id, u_deactivated_reason, u_deactivated_note,\n\t\t\t\tup_id, up_name, up_access_level, up_deactivated_time, up_deactivated_up_id, up_deactivated_reason, up_deactivated_note\n\t\t\tFROM\n\t\t\t\tusers\n\t\t\t\tJOIN users_players ON u_id = up_u_id\n\t\t\tWHERE\n\t\t\t\tup_access_level = 0 AND (u_access_level != 0 OR u_deactivated_time != up_deactivated_time)\n\t\t\tORDER BY up_deactivated_time DESC");
        echo '
<h1>Deaktiverte spillere</h1>
<p>Merk: Denne listen viser ikke spillere som har blitt deaktivert samtidig som brukeren ble deaktivert.</p>';
        self::table_header();
        while ($row = $result->fetch()) {
            if ($row['u_access_level'] == 0) {
                echo '
		<tr>
			<td>' . game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level'], true, $__server['relative_path'] . '/min_side?up_id=' . $row['up_id']) . '</td>
			<td class="nowrap r">' . ess::$b->date->get($row['up_deactivated_time'])->format() . '</td>
			<td' . ($row['up_deactivated_up_id'] == $row['up_id'] ? ' class="pcd_self">Ja' : ' class="pcd_crew">Nei') . '</td>
			<td>' . game::format_data($row['up_deactivated_reason']) . '</td>
		</tr>';
            }
        }
        self::table_footer($pagei);
    }
Example #24
0
 /**
  * Sjekk lengde for en bb-tekst
  * Tillatter kun a-z, A-Z, æøåÆØÅ, 0-9 som tegn
  * @param string $data
  */
 public static function check_length($data)
 {
     // gjør om data til kun tillatte tegn
     $data = trim($data);
     $plain = htmlspecialchars_decode(strip_tags(\game::format_data($data)));
     $plain = preg_replace("/[^a-zA-ZæøåÆØÅ0-9]/u", '', $plain);
     // sjekk lengden
     return mb_strlen($plain);
 }
Example #25
0
                    case "text":
                        $bb = true;
                        break;
                }
                $value = trim($value);
                if ($value == "") {
                    echo '
			<p>
				<u>' . htmlspecialchars($info['sf_title']) . '</u><br />
				<i>Mangler verdi.</i>
			</p>';
                } else {
                    echo '
			<div class="p">
				<u>' . htmlspecialchars($info['sf_title']) . '</u><br />
				' . ($bb ? game::format_data($value) : htmlspecialchars($value)) . (($post = $info['params']->get("post")) != "" ? ' ' . $post : '') . '
			</div>';
                }
            }
            echo '
			<div class="noprint">
				<div class="hr"></div>
				<form action="" method="post">
					<dl class="dl_20">
						<dt><u>Rating</u> (tallverdi)</dt>
						<dd><input type="text" name="rating" class="styled w40" value="' . intval($applicant['sa_weight']) . '" /></dd>
					</dl>
					<p>
						<u>Kommentar</u><br />
						<textarea name="comment" rows="10" cols="30" style="width: 400px; margin-top: 5px">' . htmlspecialchars($applicant['sa_comment']) . '</textarea>
					</p>' . ($applicant['sa_verified'] != 0 ? '
Example #26
0
        if ($ag->info['ag_up_id'] != login::$user->player->id && !access::has("admin")) {
            $_base->page->add_message("Du har ikke tilgang til å redigere denne avstemningen.", "error");
            redirect::handle();
        }
    }
    // hent alle svarene
    $data = $ag->get_av_data();
    echo '
<h1>' . htmlspecialchars($ag->info['ag_title']) . '</h1>';
    // knapp til redigering
    if ($ag->info['ag_up_id'] == login::$user->player->id || access::has("admin")) {
        echo '
<p class="h_right"><a href="?ag_id=' . $ag->ag_id . '&amp;edit" class="button">Rediger informasjon</a> <a href="?ag_id=' . $ag->ag_id . '&amp;edit_ai" class="button">Rediger alternativer</a></p>';
    }
    // beskrivelse?
    $description = game::format_data($ag->info['ag_description']);
    if (!empty($description)) {
        echo '
<div class="p">' . $description . '</div>';
    }
    // vis valgene og stemmene som er gitt
    if (count($ag->ai) == 0) {
        echo '
<p>Ingen alternativer er opprettet.</p>';
    } else {
        echo '
<form action="" method="post">
	<table class="table" style="width: 100%">
		<thead>
			<tr>
				<th>Bruker</th>
Example #27
0
 protected function create_handle()
 {
     // er det noen mottakere som ikke ble funnet?
     if (count($this->receivers) != count($this->players_list)) {
         $this->report_missing();
     }
     // noen infomeldinger
     if (count($this->infos) > 0) {
         ess::$b->page->add_message(implode("<br />", $this->infos));
     }
     // noen feil?
     if (count($this->errors) > 0) {
         ess::$b->page->add_message(implode("<br />", $this->errors), "error");
         return;
     }
     // ingen mottakere?
     if (count($this->receivers) == 0) {
         ess::$b->page->add_message("Du må velge en eller flere mottakere.", "error");
         return;
     }
     // for mange mottakere?
     if (count($this->receivers) > $this->receivers_limit) {
         ess::$b->page->add_message("Du har valgt for mange mottakere. Du har en grense på <b>{$this->receivers_limit}</b> spillere.", "error");
         return;
     }
     // blokkert fra å sende meldinger? (kan kun sende til Crewet og med 1 mottaker)
     $blokkering = blokkeringer::check(blokkeringer::TYPE_MELDINGER);
     $blokkering_ok = true;
     if ($blokkering && count($this->receivers) == 1) {
         // kontroller at den ene mottakeren vi har valgt er i Crewet (tilgang til "crewet")
         $row = reset($this->receivers);
         $result = \Kofradia\DB::get()->query("SELECT up_access_level FROM users_players WHERE up_id = {$row['up_id']}");
         $row = $result->fetch();
         if (!$row || !in_array("crewet", access::types($row['up_access_level']))) {
             $blokkering_ok = false;
         }
     }
     // er mottakere crew?
     $receivers_crew = true;
     foreach ($this->receivers as $row) {
         if (!in_array("crewet", access::types($row['up_access_level']))) {
             $receivers_crew = false;
             break;
         }
     }
     // blokkert og for mange mottakere?
     if ($blokkering && count($this->receivers) > 1) {
         ess::$b->page->add_message("Du er blokkert fra å sende meldinger til andre enn Crewet. Du kan kun ha én mottaker. Blokkeringen varer til " . ess::$b->date->get($blokkering['ub_time_expire'])->format(date::FORMAT_SEC) . ".<br /><b>Begrunnelse:</b> " . game::format_data($blokkering['ub_reason'], "bb-opt", "Ingen begrunnelse gitt."), "error");
         return;
     }
     // blokkert og mottaker er ikke i Crewet?
     if (!$blokkering_ok) {
         ess::$b->page->add_message("Du er blokkert fra å sende meldinger til andre enn Crewet. Blokkeringen varer til " . ess::$b->date->get($blokkering['ub_time_expire'])->format(date::FORMAT_SEC) . ".<br /><b>Begrunnelse:</b> " . game::format_data($blokkering['ub_reason'], "bb-opt", "Ingen begrunnelse gitt."), "error");
         return;
     }
     // er spilleren deaktivert, og mottakere er ikke crew?
     if (!login::$user->player->active && (!$receivers_crew || count($this->receivers) > 1)) {
         ess::$b->page->add_message("Din spiller er deaktivert. Du har kun mulighet til å sende meldinger til Crewet. Kun én deltaker kan legges til.");
         return;
     }
     // ikke sende enda?
     if (!isset($_POST['post'])) {
         return;
     }
     // kontroller ventetid
     if (!$this->check_wait()) {
         return;
     }
     // behandle innhold
     $title = trim(postval("title"));
     $message = trim(postval("message"));
     // lengde
     $plain = strip_tags(game::bb_to_html($message));
     $plain = preg_replace("/[^a-zA-ZæøåÆØÅ0-9]/u", '', $plain);
     // er ikke begge feltene fylt ut?
     if (empty($title) || empty($message)) {
         ess::$b->page->add_message("Både tittelfeltet og tekstfeltet må fylles ut.", "error");
         return;
     }
     // for kort tittel?
     if (mb_strlen($title) < 2) {
         ess::$b->page->add_message("Tittelfeltet må inneholde minst 2 tegn.", "error");
         return;
     }
     // for lang tittel?
     if (mb_strlen($title) > 35) {
         ess::$b->page->add_message("Tittelfeltet kan ikke være lengre enn 35 tegn.", "error");
         return;
     }
     // for kort melding?
     if (mb_strlen($plain) < 10) {
         ess::$b->page->add_message("Meldingen kan ikke inneholde færre enn 10 bokstaver/tall.", "error");
         return;
     }
     $it_id = login::$user->player->send_message($this->receivers, $title, $message);
     redirect::handle("innboks_les?id={$it_id}");
 }
Example #28
0
    /**
     * Lag HTML for en artikkelboks
     * @param array $ffna
     */
    public function build_box($ffna)
    {
        $text = game::format_data($ffna['ffna_text']);
        return '
		<div class="ffn_template_ffna' . (isset($ffna['example']) ? ' ffn_template_ffna_example' : '') . '">
			<div class="ffn_template_title">' . htmlspecialchars($ffna['ffna_title']) . '</div>
			<div class="ffn_template_text">
				' . $text . '
				<div class="clear"></div>
			</div>
			<div class="ffn_template_u">' . (!$ffna['ffna_up_id'] ? 'Eksempel' : 'Av <user id="' . $ffna['ffna_up_id'] . '" />') . '</div>
		</div>';
    }