Beispiel #1
0
 /**
  * Behandle siden
  */
 protected function handle()
 {
     // skal vi sette oss i fengsel?
     if (isset($_POST['time']) && (!MAIN_SERVER || access::is_nostat() && access::has("mod"))) {
         $this->in();
     }
     // skal vi gå ut av fengsel?
     if (isset($_POST['remove']) && (!MAIN_SERVER || access::is_nostat() && access::has("mod"))) {
         $this->out();
     }
     // sette dusør?
     if (isset($_POST['dusor']) && validate_sid()) {
         $this->dusor();
     }
     // skal vi forsøke å bryte ut av fengsel?
     if (isset($_POST['up_id'])) {
         $this->bryt_ut();
     }
     // vis fengsel
     $this->show();
 }
Beispiel #2
0
    /**
     * Behandle ny spiller
     */
    protected function solve_player()
    {
        ess::$b->page->add_title("Ny spiller");
        redirect::store($_SERVER['REQUEST_URI']);
        // sjekk om vi allerede har en spiller fra før som ikke er den aktive
        $result = \Kofradia\DB::get()->query("SELECT up_id, up_name, up_created_time, up_last_online, up_access_level FROM users_players WHERE up_u_id = " . login::$user->id . " AND up_access_level != 0");
        if ($result->rowCount() > 0) {
            // sett opp liste over spillere
            $players = array();
            while ($row = $result->fetch()) {
                $players[$row['up_id']] = $row;
            }
            // velge aktiv spiller?
            if (isset($_POST['select']) && isset($_POST['up_id']) && validate_sid()) {
                $up_id = (int) $_POST['up_id'];
                if (!isset($players[$up_id])) {
                    ess::$b->page->add_message("Fant ikke spillere.", "error");
                    redirect::handle();
                }
                // sett som aktiv spiller
                \Kofradia\DB::get()->exec("UPDATE users SET u_active_up_id = {$up_id} WHERE u_id = " . login::$user->id);
                ess::$b->page->add_message('Du har valgt <user="******" /> som din aktive spiller.');
                redirect::handle("min_side");
            }
            echo '
<div class="bg1_c xmedium">
	<h1 class="bg1">Ny spiller<span class="left2"></span><span class="right2"></span></h1>
	<p class="h_left"><a href="' . htmlspecialchars($this->url) . '">Tilbake</a></p>
	<div class="bg1">
		<form action="" method="post">
			<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
			<p>Du har allerede en annen spiller som er i live. Du må enten deaktivere spilleren eller velge å bruke den som din aktive spiller.</p>
			<table class="table center">
				<thead>
					<tr>
						<th>ID</th>
						<th>Spiller</th>
						<th>Opprettet</th>
						<th>Sist aktiv</th>
						<th>Deaktiver</th>
					</tr>
				</head>
				<tbody>';
            foreach ($players as $row) {
                echo '
					<tr class="box_handle">
						<td><input type="radio" name="up_id" value="' . $row['up_id'] . '" />' . $row['up_id'] . '</td>
						<td>' . game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level']) . '</td>
						<td>' . ess::$b->date->get($row['up_created_time'])->format() . '</td>
						<td>' . ess::$b->date->get($row['up_last_online'])->format() . '</td>
						<td><a href="min_side?up_id=' . $row['up_id'] . '&amp;a=deact">Deaktiver</a></td>
					</tr>';
            }
            echo '
				</tbody>
			</table>
			<p class="c">' . show_sbutton("Velg som aktiv spiller", 'name="select"') . '</p>
		</form>
	</div>
</div>';
            ess::$b->page->load();
        }
        // opprette ny spiller?
        if (isset($_POST['name']) && !isset($_POST['abort']) && validate_sid()) {
            $name = trim($_POST['name']);
            $bydel = postval("bydel");
            if (!isset(game::$bydeler[$bydel]) || !game::$bydeler[$bydel]['active']) {
                $bydel = false;
            }
            // kontroller navnet
            $result1 = \Kofradia\DB::get()->query("SELECT " . \Kofradia\DB::quoteNoNull($name) . " REGEXP regex AS m, error FROM regex_checks WHERE (type = 'reg_user_special' OR type = 'reg_user_strength') HAVING m = 1");
            $where = ALLOW_SAME_PLAYERNAME ? " AND (up_u_id != " . login::$user->id . " OR up_access_level != 0)" : "";
            $result2 = \Kofradia\DB::get()->query("SELECT up_id FROM users_players WHERE up_name = " . \Kofradia\DB::quote($name) . $where);
            $result3 = \Kofradia\DB::get()->query("SELECT id FROM registration WHERE user = "******"Spillernavnet var ikke gyldig:<ul>" . implode("", $feil) . "</ul>", "error");
            } elseif (empty($name)) {
                ess::$b->page->add_message("Du må skrive inn et navn du ønsker at din nye spiller skal ha.", "error");
            } elseif ($result2->rowCount() > 0) {
                ess::$b->page->add_message("Spillernavnet er allerede tatt! Velg et annet.", "error");
            } elseif ($result3->rowCount() > 0) {
                ess::$b->page->add_message("Noen holder allerede på å registrere seg med dette spillernavnet. Velg et annet.", "error");
            } else {
                // godkjent?
                if (isset($_POST['confirm'])) {
                    // finne tilfeldig bydel?
                    if (!$bydel) {
                        // finn en tilfeldig bydel
                        $result = \Kofradia\DB::get()->query("SELECT id FROM bydeler WHERE active = 1 ORDER BY RAND()");
                        $bydel = $result->fetchColumn(0);
                    }
                    \Kofradia\DB::get()->beginTransaction();
                    // opprett spiller og tilknytt brukeren
                    \Kofradia\DB::get()->exec("INSERT INTO users_players SET up_u_id = " . login::$user->id . ", up_name = " . \Kofradia\DB::quote($name) . ", up_created_time = " . time() . ", up_b_id = {$bydel}");
                    $up_id = \Kofradia\DB::get()->lastInsertId();
                    // sett opp riktig rank plassering
                    #\Kofradia\DB::get()->exec("UPDATE users_players AS main, (SELECT COUNT(users_players.up_id)+1 AS pos, ref.up_id FROM users_players AS ref LEFT JOIN users_players ON users_players.up_points > ref.up_points AND users_players.up_access_level < ".ess::$g['access_noplay']." AND users_players.up_access_level != 0 WHERE ref.up_id = $up_id GROUP BY ref.up_id) AS rp SET main.up_rank_pos = rp.pos WHERE main.up_id = rp.up_id");
                    \Kofradia\DB::get()->exec("INSERT INTO users_players_rank SET upr_up_id = {$up_id}");
                    ranklist::update();
                    // sett spilleren som den aktive spilleren for brukerne
                    \Kofradia\DB::get()->exec("UPDATE users SET u_active_up_id = {$up_id} WHERE u_id = " . login::$user->id);
                    \Kofradia\DB::get()->commit();
                    // hent antall medlemmer
                    $result = \Kofradia\DB::get()->query("SELECT COUNT(up_id) FROM users_players WHERE up_access_level < " . ess::$g['access_noplay'] . " AND up_access_level != 0");
                    putlog("INFO", "%bNY SPILLER:%b (#{$up_id} - Nummer %b" . $result->fetchColumn(0) . "%b) %u{$name}%u registrerte seg! " . ess::$s['path'] . "/p/" . rawurlencode($name));
                    ess::$b->page->add_message("Du har opprettet en ny spiller med navnet <b>" . htmlspecialchars($name) . "</b>!");
                    redirect::handle("min_side");
                }
                echo '
<div class="bg1_c xxsmall">
	<h1 class="bg1">Bekreft ny spiller<span class="left2"></span><span class="right2"></span></h1>
	<div class="bg1">
		<form action="" method="post">' . ($bydel ? '
			<input type="hidden" name="bydel" value="' . $bydel['id'] . '" />' : '') . '
			<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
			<input type="hidden" name="name" value="' . htmlspecialchars($name) . '" />
			<p>Du er i ferd med å opprette følgende spiller:</p>
			<dl class="dd_right">
				<dt>Spillernavn</dt>
				<dd><b>' . htmlspecialchars($name) . '</b></dd>
				<dt>Bydel</dt>
				<dd>' . ($bydel ? htmlspecialchars(game::$bydeler[$bydel]['name']) : 'Tilfeldig valgt') . '</dd>
			</dl> 
			<p>Du kan ikke bytte dette spillernavnet senere uten og opprette en ny spiller.</p>
			<p class="c">' . show_sbutton("Opprett spiller", 'name="confirm"') . ' ' . show_sbutton("Avbryt", 'name="abort"') . '</p>
		</form>
	</div>
</div>';
                ess::$b->page->load();
            }
        }
        ess::$b->page->add_css('
#name_validate { color: #AAA }
#name_validate_ok { color: #CCFF00 }
#name_validate_loading img { vertical-align: text-bottom; margin: -2px 0 }
#name_validate_taken { color: #900000 }
');
        ess::$b->page->add_js_domready('
	var status = function(val)
	{
		if (val == "") $("name_validate").removeClass("hide"); else $("name_validate").addClass("hide");
		if (val == "taken") $("name_validate_taken").removeClass("hide"); else $("name_validate_taken").addClass("hide");
		if (val == "ok") $("name_validate_ok").removeClass("hide"); else $("name_validate_ok").addClass("hide");
		if (val == "loading") $("name_validate_loading").removeClass("hide"); else $("name_validate_loading").addClass("hide");
	};
	var change_last = null, change_timer;
	var change = function()
	{
		if (this.get("value") == change_last) return; change_last = this.get("value");
		if (this.get("value") == "") { status(""); return; }
		
		$clear(change_timer);
		change_timer = this.search.delay(500, this, true);
		
		status("loading");
	};
	
	$("name_enter").addEvents({
		"keyup": change,
		"change": change
	}).focus();
	var xhr;
	$("name_enter").search = function()
	{
		if (!xhr)
		{
			xhr = new Request({"url": relative_path + "/ajax/find_user"});
			xhr.addEvent("success", function(text, xml)
			{
				if (xmlGetValue(xml, "user"))
					status("taken");
				else
					status("ok");
			});
			xhr.addEvent("failure", function(x)
			{
				alert("En feil oppsto.");
			});
		}
		xhr.send({"data": {"q": $("name_enter").get("value").trim()' . (ALLOW_SAME_PLAYERNAME ? ', "is": true' : '') . '}});
	};
	if ($("name_enter").get("value") != "") $("name_enter").search.run(null, $("name_enter"));
	else status("");
	change_last = $("name_enter").get("value");');
        echo '
<div class="bg1_c xsmall">
	<h1 class="bg1">Ny spiller<span class="left2"></span><span class="right2"></span></h1>
	<p class="h_left"><a href="' . htmlspecialchars($this->url) . '">Tilbake</a></p>
	<div class="bg1">
		<form action="" method="post">
			<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
			<p>Du er nå i ferd med å opprette en ny spiller. Du kan også se informasjon for din tidligere spiller <a href="min_side?up_id=' . login::$user->player->id . '">' . htmlspecialchars(login::$user->player->data['up_name']) . '</a>.</p>
			<p>Du kan ikke bytte spillernavnet du velger å opprette her uten og opprette en ny spiller.</p>
			<dl class="dd_right" style="overflow: hidden">
				<dt>Nytt spillernavn</dt>
				<dd><input type="text" id="name_enter" name="name" class="styled w120" value="' . htmlspecialchars(postval("name")) . '" /></dd>
				<dt>Status:
					<span class="name_v hide" id="name_validate_loading"><img src="' . STATIC_LINK . '/other/loading-black.gif" /></span>
					<span class="name_v hide" id="name_validate">Skriv inn ønsket navn</span>
					<span class="name_v hide" id="name_validate_ok">Ledig</span>
					<span class="name_v hide" id="name_validate_taken">Opptatt</span>
				</dt>
			</dl>
			<dl class="dd_right">
				<dt>Bydel</dt>
				<dd>
					<select name="bydel">';
        $active = postval("bydel");
        if (!isset(game::$bydeler[$active]) || !game::$bydeler[$active]['active']) {
            $active = false;
        }
        echo '
						<option' . (!$active ? ' selected="selected"' : '') . '>Velg tilfeldig</option>';
        foreach (game::$bydeler as $bydel) {
            if (!$bydel['active']) {
                continue;
            }
            echo '
						<option value="' . $bydel['id'] . '"' . ($active == $bydel['id'] ? ' selected="selected"' : '') . '>' . htmlspecialchars($bydel['name']) . '</option>';
        }
        echo '
					</select>
				</dd>
			</dl>
			<p class="c">' . show_sbutton("Fortsett") . '</p>
		</form>
	</div>
</div>';
    }
Beispiel #3
0
    /**
     * Construct
     */
    public function __construct()
    {
        // endre signatur i forumet
        if (login::$logged_in && (isset($_GET['show_signature']) || isset($_GET['hide_signature']))) {
            if (isset($_GET['show_signature']) && login::$user->data['u_forum_show_signature'] == 0) {
                \Kofradia\DB::get()->exec("UPDATE users SET u_forum_show_signature = 1 WHERE u_id = " . login::$user->id);
            } elseif (isset($_GET['hide_signature']) && login::$user->data['u_forum_show_signature'] == 1) {
                \Kofradia\DB::get()->exec("UPDATE users SET u_forum_show_signature = 0 WHERE u_id = " . login::$user->id);
            }
            redirect::handle(game::address("topic", $_GET, array("show_signature", "hide_signature")));
        }
        // hent forumtråd
        $this->topic = new \Kofradia\Forum\Topic(getval("id"));
        $this->fmod = $this->topic->forum->fmod;
        // sett standard redirect
        redirect::store("topic?id={$this->topic->id}");
        // slette forumtråden?
        if (isset($_POST['delete'])) {
            // forsøk å slette forumtråden
            validate_sid();
            $this->topic->delete();
        }
        // gjenopprette forumtråden?
        if (isset($_POST['restore'])) {
            // forsøk å gjenopprette forumtråden
            validate_sid();
            $this->topic->restore();
        }
        // slette forumsvar?
        if (isset($_GET['delete_reply'])) {
            validate_sid();
            // finn forumsvaret
            if ($reply = $this->topic->get_reply($_GET['delete_reply'])) {
                // forsøk å slett forumsvaret
                $reply->delete();
            } else {
                ess::$b->page->add_message("Fant ikke forumsvaret.", "error");
                redirect::handle();
            }
        }
        // gjenopprette forumsvar?
        if (isset($_GET['restore_reply'])) {
            validate_sid();
            // finn forumsvaret
            if ($reply = $this->topic->get_reply($_GET['restore_reply'])) {
                // forsøk å gjenopprett forumsvaret
                $reply->restore();
            } else {
                ess::$b->page->add_message("Fant ikke forumsvaret.", "error");
                redirect::handle();
            }
        }
        // legge til nytt svar?
        if (isset($_GET['reply']) && isset($_POST['post']) && isset($_POST['text'])) {
            // ikke slå sammen?
            $no_concatenate = isset($_POST['no_concatenate']) && access::has("forum_mod");
            // annonsere?
            $announce = isset($_POST['announce']) && access::has("forum_mod");
            // har vi ingen aktiv spiller?
            if (count(login::$user->lock) == 1 && in_array("player", login::$user->lock)) {
                ess::$b->page->add_message("Du har ingen aktiv spiller.", "error");
                redirect::handle();
            }
            // forsøk å legg til svaret
            $this->topic->add_reply($_POST['text'], $no_concatenate, $announce);
        }
        // den aktuelle siden (sjekk for replyid før vi retter sidetall)
        $pagei = new pagei(pagei::ACTIVE_GET, "p", pagei::PER_PAGE, $this->topic->replies_per_page);
        // sjekk om vi skal vise slettede svar
        if (isset($_GET['show_deleted']) && $this->fmod) {
            $show_deleted = true;
            $deleted = "";
        } else {
            $show_deleted = false;
            $deleted = " AND fr_deleted = 0";
        }
        // skal vi vise status for meldingene?
        $fs_id = 0;
        // skal vi vise et bestemt forumsvar?
        $reply_id = false;
        if (isset($_GET['replyid'])) {
            // hent forumsvaret
            $reply_id = intval($_GET['replyid']);
            $result = \Kofradia\DB::get()->query("SELECT fr_id, fr_deleted FROM forum_replies WHERE fr_ft_id = {$this->topic->id} AND fr_id = {$reply_id}");
            $row = $result->fetch();
            // fant ikke forumsvaret, eller slettet uten tilgang?
            if (!$row || $row['fr_deleted'] != 0 && !$this->fmod) {
                ess::$b->page->add_message("Fant ikke forumsvaret du refererte til.", "error");
                redirect::handle();
            }
            // slettet?
            if ($row['fr_deleted'] != 0 && !$show_deleted) {
                $show_deleted = true;
                $deleted = "";
            }
            // finn ut antall forumsvar før
            $result = \Kofradia\DB::get()->query("SELECT COUNT(fr_id) FROM forum_replies WHERE fr_ft_id = {$this->topic->id} AND fr_id < {$reply_id}{$deleted}");
            $reply_num = $result->fetchColumn(0) + 1;
            // sett opp sidetallet og sett til aktiv side
            $pagei->__construct(pagei::ACTIVE, ceil($reply_num / $this->topic->replies_per_page));
        } elseif (isset($_GET['fs']) && \Kofradia\Forum\Category::$fs_check) {
            // har vi ikke status?
            if (empty($this->topic->info['fs_time'])) {
                // sørg for at vi er på side 1
                if ($pagei->active != 1) {
                    // gå til første side
                    redirect::handle(game::address(PHP_SELF, $_GET, array("p")), redirect::SERVER);
                }
            } else {
                // finn neste forumsvar etter fs_time
                $result = \Kofradia\DB::get()->query("SELECT fr_id FROM forum_replies WHERE fr_ft_id = {$this->topic->id} AND fr_time > {$this->topic->info['fs_time']}{$deleted} ORDER BY fr_time LIMIT 1");
                $row = $result->fetch();
                // fant ikke noe forumsvar?
                if (!$row) {
                    // finn det siste innlegget
                    $result = \Kofradia\DB::get()->query("SELECT fr_id FROM forum_replies WHERE fr_ft_id = {$this->topic->id}{$deleted} ORDER BY fr_time DESC LIMIT 1");
                    $row = $result->fetch();
                }
                // fremdeles ingen forumsvar å gå til?
                if (!$row) {
                    // sørg for at vi er på side 1
                    if ($pagei->active != 1) {
                        // gå til første side
                        redirect::handle(game::address(PHP_SELF, $_GET, array("p")), redirect::SERVER);
                    }
                } else {
                    // finn ut antall forumsvar før det vi skal gå til
                    $result = \Kofradia\DB::get()->query("SELECT COUNT(fr_id) FROM forum_replies WHERE fr_ft_id = {$this->topic->id} AND fr_id < {$row['fr_id']}{$deleted}");
                    $reply_num = $result->fetchColumn(0) + 1;
                    // sett opp sidetallet og kontroller at vi er på riktig side
                    $page = ceil($reply_num / $this->topic->replies_per_page);
                    if ($pagei->active != $page) {
                        // videresend til den riktige siden
                        redirect::handle(game::address(PHP_SELF, $_GET, array("p"), array("p" => $page)), redirect::SERVER);
                    }
                    $fs_id = $row['fr_id'];
                }
            }
        }
        // viser vi slettede meldinger?
        if ($show_deleted) {
            // finn ut hvor mange meldinger som er slettet
            $result = \Kofradia\DB::get()->query("SELECT COUNT(fr_id) FROM forum_replies WHERE fr_ft_id = {$this->topic->id} AND fr_deleted != 0");
            $count = $result->fetchColumn(0);
            ess::$b->page->add_message("Du viser slettede forumsvar. Denne forumtråden har <b>{$count}</b> " . fword("slettet forumsvar", "slettede forumsvar", $count) . ".", NULL, "top");
        }
        // øk visningstelleren hvis vi ikke har besøkt denne forumtråden de siste 10 min
        if (!isset($_SESSION[$GLOBALS['__server']['session_prefix'] . 'forum_topics_visited'][$this->topic->id]) || $_SESSION[$GLOBALS['__server']['session_prefix'] . 'forum_topics_visited'][$this->topic->id] + 600 <= time()) {
            \Kofradia\DB::get()->exec("UPDATE forum_topics SET ft_views = ft_views + 1 WHERE ft_id = {$this->topic->id}");
        }
        // lagre som vist
        $_SESSION[$GLOBALS['__server']['session_prefix'] . 'forum_topics_visited'][$this->topic->id] = time();
        // tittel på siden
        $this->topic->forum->add_title();
        ess::$b->page->add_title($this->topic->info['ft_title']);
        // finn ut antall svar vi har synlige
        if ($show_deleted) {
            $result = \Kofradia\DB::get()->query("SELECT COUNT(fr_id) FROM forum_replies WHERE fr_ft_id = {$this->topic->id}{$deleted}");
            $replies_count = $result->fetchColumn(0);
        } else {
            $replies_count = $this->topic->info['ft_replies'];
        }
        // korriger aktiv side
        $pagei->__construct(pagei::TOTAL, $replies_count);
        // skal vi vise svarskjema?
        $reply_form = login::$logged_in && isset($_GET['reply']) && !$reply_id;
        if ($reply_form) {
            // sørg for at vi er på siste siden
            $pagei->__construct(pagei::ACTIVE_LAST);
        }
        echo '
<div class="bg1_c forumw">
	<h1 class="bg1">' . htmlspecialchars($this->topic->info['ft_title']) . '<span class="left"></span><span class="right"></span></h1>
	<p class="h_left"><a href="forum?id=' . $this->topic->forum->id . '">' . htmlspecialchars($this->topic->forum->get_name()) . '</a></p>
	<p class="h_right">' . ($this->topic->info['ft_locked'] == 1 ? '
		Låst emne!' : '') . (login::$logged_in && $this->topic->info['ft_deleted'] == 0 && ($this->topic->info['ft_locked'] != 1 || $this->fmod) ? '
		<a href="' . htmlspecialchars(game::address(PHP_SELF, $_GET, array("replyid"), array("reply" => true))) . '" class="forum_link_replyform">Opprett svar</a>' : '') . ($this->fmod ? $show_deleted ? '
		<a href="' . htmlspecialchars(game::address(PHP_SELF, $_GET, array("show_deleted", "replyid"))) . '">Skjul slettede svar</a>' : '
		<a href="' . htmlspecialchars(game::address(PHP_SELF, $_GET, array(), array("show_deleted" => true))) . '">Vis slettede svar</a>' : '') . '
	</p>
	<div class="bg1">
<div class="forum" id="forum_topic_container">';
        // vise sidetall øverst?
        if ($pagei->pages > 1) {
            echo '
	<p class="c">' . $pagei->pagenumbers(game::address(PHP_SELF, $_GET, array("p", "replyid", "fs")), game::address(PHP_SELF, $_GET, array("p", "replyid", "fs"), array("p" => "_pageid_"))) . '</p>';
        }
        // hent forumsvar
        $replies = array();
        $up_ids = array();
        $id_list = array();
        $last_time = 0;
        $replies_last_edit = array();
        if ($replies_count > 0) {
            // hent svarene
            $result = \Kofradia\DB::get()->query("\n\t\t\t\tSELECT\n\t\t\t\t\tfr_id, fr_time, fr_up_id, fr_text, fr_deleted, fr_last_edit, fr_last_edit_up_id,\n\t\t\t\t\tup_name, up_access_level, up_forum_signature, up_points, up_profile_image_url,\n\t\t\t\t\tupr_rank_pos,\n\t\t\t\t\tr_time\n\t\t\t\tFROM\n\t\t\t\t\tforum_replies\n\t\t\t\t\tLEFT JOIN users_players ON up_id = fr_up_id\n\t\t\t\t\tLEFT JOIN users_players_rank ON upr_up_id = up_id\n\t\t\t\t\tLEFT JOIN rapportering ON r_type = " . rapportering::TYPE_FORUM_REPLY . " AND r_type_id = fr_id AND r_state < 2\n\t\t\t\tWHERE fr_ft_id = {$this->topic->id}{$deleted}\n\t\t\t\tGROUP BY fr_id\n\t\t\t\tORDER BY fr_time ASC\n\t\t\t\tLIMIT {$pagei->start}, {$pagei->per_page}");
            while ($row = $result->fetch()) {
                $id_list[] = $row['fr_id'];
                $up_ids[] = $row['fr_up_id'];
                $last_time = $row['fr_time'];
                $replies_last_edit[$row['fr_id']] = $row['fr_last_edit'];
                $replies[] = $row;
            }
        }
        // hent inn familierelasjoner
        $up_ids[] = $this->topic->info['ft_up_id'];
        $this->topic->forum->ff_get_familier($up_ids);
        // vis hovedinnlegget
        echo $this->topic->forum->template_topic($this->topic->extended_info());
        // vis forumsvar
        if (count($replies) > 0) {
            // scrolle til første forumsvar på andre enn første side
            if ($pagei->active > 1 && !$reply_form && !$reply_id && !$fs_id) {
                echo '
	<div id="forum_scroll_here"></div>';
            }
            $reply_num = $pagei->per_page * ($pagei->active - 1) + 1;
            foreach ($replies as $row) {
                $row['ft_fse_id'] = $this->topic->forum->id;
                $row['ft_id'] = $this->topic->id;
                $row['reply_num'] = ++$reply_num;
                $row['fs_new'] = \Kofradia\Forum\Category::$fs_check && $this->topic->info['fs_time'] < $row['fr_time'];
                if ($reply_id == $row['fr_id']) {
                    $row['class_extra'] = 'forum_focus';
                }
                if ($reply_id == $row['fr_id'] || $fs_id == $row['fr_id']) {
                    $row['h2_extra'] = 'id="forum_scroll_here"';
                    // vis bokser her
                    if ($reply_id == $row['fr_id'] || $fs_id == $row['fr_id']) {
                        echo '
	<boxes />';
                    }
                }
                // vis html for svaret
                echo $this->topic->forum->template_topic_reply($row);
            }
        }
        // oppdatere sist sett?
        $time = $last_time != 0 ? $last_time : $this->topic->info['ft_time'];
        // legge til?
        if (login::$logged_in && empty($this->topic->info['fs_time'])) {
            \Kofradia\DB::get()->exec("INSERT IGNORE INTO forum_seen SET fs_ft_id = {$this->topic->id}, fs_u_id = " . login::$user->id . ", fs_time = {$time}");
        } elseif (login::$logged_in && $time > $this->topic->info['fs_time']) {
            \Kofradia\DB::get()->exec("UPDATE forum_seen SET fs_time = GREATEST(fs_time, {$time}) WHERE fs_ft_id = {$this->topic->id} AND fs_u_id = " . login::$user->id);
        }
        echo '
</div>';
        // vis svarskjema
        echo '
<div' . ($reply_form ? '' : ' style="display: none"') . ' id="container_reply">' . ($reply_form ? '
	<boxes />' : '') . '
	<form action="' . htmlspecialchars(game::address("topic", $_GET, array("replyid", "fs"), array("reply" => true))) . '" method="post"' . ($reply_form ? ' id="forum_scroll_here"' : '') . '>
		<div class="section forum_reply_edit_c">
			<h2>Svar</h2>
			<dl class="dl_2x">
				<dt>Innhold</dt>
				<dd><textarea name="text" rows="20" cols="75" id="replyText">' . htmlspecialchars(postval("text")) . '</textarea></dd>';
        // vise ekstra alternativer?
        if (access::has("forum_mod") || $this->topic->forum->id >= 5 && $this->topic->forum->id <= 7) {
            $no_concat = isset($_POST['no_concatenate']) || $_SERVER['REQUEST_METHOD'] != "POST" && $this->topic->forum->id >= 5 && $this->topic->forum->id <= 7;
            $announce_text = $this->topic->forum->id >= 5 && $this->topic->forum->id <= 7 ? 'Legg til logg i spilleloggen til medlemmer av Crewet.' : 'Annonser på #kofradia kanalen';
            echo '
				<dt>Ekstra</dt>
				<dd>' . (!$this->topic->forum->ff ? '
					<input type="checkbox" name="announce" id="announce"' . (isset($_POST['announce']) ? ' checked="checked"' : '') . ' /><label for="announce"> ' . $announce_text . '</label><br />' : '') . '
					<input type="checkbox" name="no_concatenate" id="no_concatenate"' . ($no_concat ? ' checked="checked"' : '') . ' /><label for="no_concatenate"> <u>Ikke</u> kombiner sammen med siste melding.</label>
				</dd>';
        }
        echo '
			</dl>
			<p class="c">
				' . show_sbutton("Legg til svar", 'name="post" accesskey="s" id="forum_reply_button_add"') . '
				' . show_sbutton("Forhåndsvis", 'name="preview" accesskey="p" id="forum_reply_button_preview"') . '
			</p>
		</div>
		<div id="reply_preview" class="forum">';
        // forhåndsvise?
        if (login::$logged_in && isset($_POST['preview'])) {
            $data = array("ft_id" => $this->topic->id, "fr_text" => postval("text"), "fr_up_id" => login::$user->player->id, "up_name" => login::$user->player->data['up_name'], "up_access_level" => login::$user->player->data['up_access_level'], "up_points" => login::$user->player->data['up_points'], "upr_rank_pos" => login::$user->player->data['upr_rank_pos'], "up_forum_signature" => login::$user->player->data['up_forum_signature'], "up_profile_image_url" => login::$user->player->data['up_profile_image_url'], "fs_new" => \Kofradia\Forum\Category::$fs_check);
            echo \Kofradia\Forum\Category::template_topic_reply_preview($data);
        }
        echo '</div>
	</form>
</div>';
        // linker i bunn
        if (login::$logged_in) {
            echo '
<form action="" method="post">
	<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
	<div class="forum_footer_links">';
            // slette/gjenopprette lenker
            if ($this->fmod || $this->topic->info['ft_up_id'] == login::$user->player->id) {
                echo '
		<p class="left">' . ($this->topic->info['ft_deleted'] == 0 ? '
			<span class="red">' . show_sbutton("Slett emnet", 'name="delete" onclick="return confirm(\'Sikker?!\')"') . '</span>' : '
			<span class="green">' . show_sbutton("Gjenopprett emnet", 'name="restore" onclick="return confirm(\'Sikker?!\')"') . '</span>') . '
		</p>';
            }
            // alternativer
            echo '
		<p class="right">';
            // reply lenke
            if (!$reply_form && $this->topic->info['ft_deleted'] == 0 && ($this->topic->info['ft_locked'] == 0 || $this->fmod)) {
                echo '
			<a href="' . htmlspecialchars(game::address("topic", $_GET, array("replyid"), array("reply" => true))) . '" class="button forum_link_replyform" accesskey="r">Opprett svar</a>';
            }
            // signatur lenker
            echo login::$user->data['u_forum_show_signature'] == 1 ? '
			<a href="' . htmlspecialchars(game::address("topic", $_GET, array("show_signature"), array("hide_signature" => true))) . '" class="button">Skjul signaturer</a>' : '
			<a href="' . htmlspecialchars(game::address("topic", $_GET, array("hide_signature"), array("show_signature" => true))) . '" class="button">Vis signaturer</a>';
            echo '
		</p>';
        }
        // sidetall
        if ($pagei->pages > 1) {
            echo '
		<p class="center">' . $pagei->pagenumbers(game::address(PHP_SELF, $_GET, array("p", "replyid", "fs", "reply")), game::address(PHP_SELF, $_GET, array("p", "replyid", "fs", "reply"), array("p" => "_pageid_"))) . '</p>';
        }
        echo '
	</div>
</form>
	</div>
</div>';
        // div javascript
        // sørg for at meldingene blir oppdatert og at nye meldinger blr hentet hvis vi er på siste side
        ess::$b->page->add_js_file(ess::$s['relative_path'] . "/js/forum.js");
        ess::$b->page->add_js('
		sm_scripts.report_links();');
        ess::$b->page->add_js_domready('
	var topic = new ForumTopic(' . $this->topic->id . ', ' . js_encode($id_list) . ', ' . js_encode($replies_last_edit) . ', ' . ($pagei->pages == $pagei->active ? 'true' : 'false') . ', ' . ($show_deleted ? 'true' : 'false') . ', ' . ($this->fmod ? 'true' : 'false') . ', ' . (int) $this->topic->info['ft_last_edit'] . ');' . ($reply_form ? '
	topic.reply_form_show();' : ''));
        $this->topic->forum->load_page();
    }
Beispiel #4
0
 /**
  * Delete selected contacts
  */
 public function action_delete_many()
 {
     $removed = array();
     if (validate_sid(false) && isset($_POST['id']) && is_array($_POST['id'])) {
         foreach ($_POST['id'] as $id) {
             $contact = Contact::getContactById($id);
             if (!$contact || $contact->getOwnerUserID() != $this->user->id) {
                 break;
             }
             if ($contact->delete()) {
                 $removed[] = '<user id="' . $contact->getTargetPlayerID() . '" />';
             }
         }
     }
     if ($removed) {
         \ess::$b->page->add_message('Du fjernet ' . sentences_list($removed) . ' fra listen.');
     }
     return \redirect::handle("/kontakter", \redirect::ROOT);
 }
Beispiel #5
0
    /**
     * Innstillinger
     */
    protected static function page_set()
    {
        global $__server;
        $subpage2 = getval("b");
        redirect::store(page_min_side::addr(NULL, $subpage2 != "" ? "b=" . $subpage2 : ''));
        ess::$b->page->add_title("Innstillinger");
        ess::$b->page->add_css('
.minside_set_links .active { color: #CCFF00 }');
        echo '
	<p class="c minside_set_links">
		<a href="' . htmlspecialchars(page_min_side::addr(NULL, "")) . '"' . ($subpage2 == "" ? ' class="active"' : '') . '>Generelt</a> |
		<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=email")) . '"' . ($subpage2 == "email" ? ' class="active"' : '') . '>Skift e-postadresse</a> |
		<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=pass")) . '"' . ($subpage2 == "pass" ? ' class="active"' : '') . '>Skift passord</a>
	</p>';
        // endre passord?
        if ($subpage2 == "pass") {
            ess::$b->page->add_title("Endre passord");
            // må logge inn med utvidede tilganger
            if (isset(login::$extended_access) && !login::$extended_access['authed']) {
                echo '
	<div class="bg1_c center" style="width: 350px">
		<h1 class="bg1">Skift passord<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<boxes />
			<p>Du må logge inn med utvidede tilganger for å få tilgang til denne funksjonen.</p>
		</div>
	</div>';
            } elseif (access::has("mod") && page_min_side::$active_user->id != login::$user->id) {
                // kan ikke endre denne brukerens passord?
                if (page_min_side::$active_user->data['u_access_level'] != 0 && page_min_side::$active_user->data['u_access_level'] != 1 && !access::has("sadmin")) {
                    echo '
	<div class="bg1_c" style="width: 350px">
		<h1 class="bg1">Skift passord<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<p>Du har ikke rettigheter til å endre passordet til denne brukeren. Kun senioradministrator kan gjøre det.</p>
		</div>
	</div>';
                } else {
                    // lagre passordet?
                    if (isset($_POST['pass'])) {
                        $pass = trim(postval("pass"));
                        $error = password::validate($pass, password::LEVEL_LOGIN);
                        $log = trim(postval("log"));
                        if ($error > 0) {
                            $errors = array();
                            if ($error & password::ERROR_SHORT) {
                                $errors[] = 'Passordet er for kort. Må være minimum 8 tegn.';
                            }
                            if ($error & password::ERROR_NONCAP || $error & password::ERROR_CAP || $error & password::ERROR_NUM) {
                                $errors[] = 'Passordet må inneholde både små bokstaver, store bokstaver og tall.';
                            }
                            ess::$b->page->add_message(implode('<br />', $errors), "error");
                        } elseif ($log == "") {
                            ess::$b->page->add_message("Mangler logg melding.", "error");
                        } else {
                            // samme passord?
                            if (password::verify_hash($pass, page_min_side::$active_user->data['u_pass'], 'user')) {
                                ess::$b->page->add_message("Passordet er det samme som nåværende. Velg et annet.", "error");
                            } else {
                                $pass_new = password::hash($pass, null, 'user');
                                // lagre endringer
                                \Kofradia\DB::get()->exec("UPDATE users SET u_pass = "******" WHERE u_id = " . page_min_side::$active_user->id);
                                // legg til crewlogg
                                crewlog::log("user_password", page_min_side::$active_player->id, $log, array("pass_old" => page_min_side::$active_user->data['u_pass'], "pass_new" => $pass_new));
                                ess::$b->page->add_message("Passordet ble endret.");
                            }
                        }
                    }
                    echo '
	<div class="bg1_c" style="width: 350px">
		<h1 class="bg1">Endre passord<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<p class="r">Tilgangsnivå: Moderator</p>
			<p>Her endrer du passordet til ' . page_min_side::$active_player->profile_link() . '.</p>
			<form action="" method="post" autocomplete="off">
				<dl class="dd_right dl_2x">
					<dt>Nytt passord</dt>
					<dd><input type="password" value="" name="pass" id="pass" class="styled w120" /></dd>
					<dt>Begrunnelse for endring</dt>
					<dd><textarea name="log" id="log" cols="30" rows="5">' . htmlspecialchars(postval("log")) . '</textarea></dd>
					<dd>' . show_sbutton("Lagre") . '</dd>
				</dl>
			</form>
		</div>
	</div>';
                }
            } else {
                // lagre passord
                if (isset($_POST['save_pass'])) {
                    // kontroller alle feltene
                    $pass_old = trim(postval("pass_old"));
                    $pass_new = trim(postval("pass_new"));
                    $pass_repeat = trim(postval("pass_repeat"));
                    // kontroller at alle feltene er fylt ut
                    if ($pass_old == "" || $pass_new == "" || $pass_repeat == "") {
                        ess::$b->page->add_message("Alle feltene må fylles ut.", "error");
                    } elseif (!password::verify_hash($pass_old, page_min_side::$active_user->data['u_pass'], 'user')) {
                        ess::$b->page->add_message("Det gamle passordet stemte ikke.", "error");
                    } elseif ($pass_new != $pass_repeat) {
                        ess::$b->page->add_message("De nye passordene var ikke like.", "error");
                    } elseif ($pass_old == $pass_new) {
                        ess::$b->page->add_message("Du må velge et nytt passord.", "error");
                    } elseif (mb_strlen($pass_new) < 6) {
                        ess::$b->page->add_message("Det nye passordet må inneholde minimum 6 tegn.", "error");
                    } elseif (password::validate($pass_new, password::LEVEL_LOGIN) != 0) {
                        ess::$b->page->add_message("Du må velge et vanskeligere passord.", "error");
                    } elseif (password::verify_hash($pass_new, page_min_side::$active_user->data['u_bank_auth'], 'bank_auth')) {
                        ess::$b->page->add_message("Velg et annet passord enn du har i banken.");
                    } else {
                        \Kofradia\DB::get()->exec("UPDATE users SET u_pass = "******" WHERE u_id = " . page_min_side::$active_user->id);
                        // melding
                        ess::$b->page->add_message("Passordet ble endret. Alle andre steder brukeren var logget inn er nå logget ut.");
                        putlog("NOTICE", "%bPASSORD-ENDRING%b: %u" . page_min_side::$active_player->data['up_name'] . "%u byttet passordet på sin bruker. {$__server['path']}/min_side?u_id=" . page_min_side::$active_user->id);
                        // logg ut alle andre brukere
                        \Kofradia\DB::get()->exec("UPDATE sessions SET ses_active = 0, ses_logout_time = " . time() . " WHERE ses_active = 1 AND ses_u_id = " . page_min_side::$active_user->id . " AND ses_id != " . login::$info['ses_id']);
                        redirect::handle();
                    }
                }
                echo '
	<div class="bg1_c" style="width: 300px">
		<h1 class="bg1">Skift passord<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<p>For å kunne skifte passord må alle 3 feltene være fylt ut.</p>
			<form action="" method="post" autocomplete="off">
				<dl class="dd_right dl_2x">
					<dt>Nåværende passord</dt>
					<dd><input type="password" class="styled w100" name="pass_old" /></dd>
					<dt>Nytt passord</dt>
					<dd><input type="password" class="styled w100" name="pass_new" /></dd>
					<dt>Gjenta nytt passord</dt>
					<dd><input type="password" class="styled w100" name="pass_repeat" /></dd>
				</dl>
				<p class="c">' . show_sbutton("Skift passordet", 'name="save_pass"') . '</p>
			</form>
		</div>
	</div>';
            }
        } elseif ($subpage2 == "email") {
            // skifte e-postadresse?
            /* Trinn i skifte e-postadresse:
            				1. Skriver inn ønsket e-postadresse man vil skifte til
            				2. E-post blir sendt til gammel e-postadresse med info og link til validering
            				3. Validering av gammel e-postadresse (step 1)
            				4. E-post blir sendt til ny e-postadresse med info og link til validering
            				5. E-potadresse blir skiftet (step 2)
            			*/
            ess::$b->page->add_title("Skifte e-postadresse");
            // må logge inn med utvidede tilganger
            if (isset(login::$extended_access) && !login::$extended_access['authed']) {
                echo '
	<div class="bg1_c center" style="width: 350px">
		<h1 class="bg1">Skifte e-postadresse<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<boxes />
			<p>Du må logge inn med utvidede tilganger for å få tilgang til denne funksjonen.</p>
		</div>
	</div>';
            } elseif (access::has("mod") && (page_min_side::$active_user->id != login::$user->id || isset($_GET['o']))) {
                // kan ikke endre denne brukerens e-postadresse?
                if (page_min_side::$active_user->data['u_access_level'] != 0 && page_min_side::$active_user->data['u_access_level'] != 1 && !access::has("sadmin")) {
                    echo '
	<div class="bg1_c" style="width: 350px">
		<h1 class="bg1">Skifte e-postadresse<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<p>Du har ikke rettigheter til å skifte e-postadressen til denne brukeren. Kun senioradministrator kan gjøre det.</p>
		</div>
	</div>';
                } else {
                    // lagre ny e-post?
                    $email_ex = false;
                    if (isset($_POST['email'])) {
                        $email = trim(postval("email"));
                        $log = trim(postval("log"));
                        // sjekk om e-postadressen allerede er i bruk
                        $result = \Kofradia\DB::get()->query("SELECT u_id, up_id, up_name, up_access_level FROM users LEFT JOIN users_players ON up_id = u_active_up_id WHERE u_email = " . \Kofradia\DB::quote($email) . " AND u_access_level != 0");
                        $email_ex = $result->fetch();
                        // ikke gyldig e-postadresse?
                        if (!game::validemail($email)) {
                            ess::$b->page->add_message("Ugyldig e-postadresse.", "error");
                        } elseif (empty($log)) {
                            ess::$b->page->add_message("Du må fylle inn en loggmelding.", "error");
                        } elseif ($email == page_min_side::$active_user->data['u_email']) {
                            ess::$b->page->add_message("Du må skrive inn en ny e-postadresse.");
                        } elseif ($email_ex && !isset($_POST['ignore_ex'])) {
                            ess::$b->page->add_message("Denne e-posten er allerede i bruk av " . game::profile_link($email_ex['up_id'], $email_ex['up_name'], $email_ex['up_access_level']) . ". Bekreft at du ønsker å la begge brukerene ha denne e-postadresse, evt. endre til en annen e-postadresse.");
                        } else {
                            // lagre endringer
                            \Kofradia\DB::get()->exec("UPDATE users SET u_email = " . \Kofradia\DB::quote($email) . " WHERE u_id = " . page_min_side::$active_user->id);
                            // legg til crewlogg
                            crewlog::log("user_email", page_min_side::$active_player->id, $log, array("email_old" => page_min_side::$active_user->data['u_email'], "email_new" => $email));
                            // fjern mulige params for egen bytting av e-post
                            page_min_side::$active_user->params->remove("change_email_step");
                            page_min_side::$active_user->params->remove("change_email_new_address");
                            page_min_side::$active_user->params->remove("change_email_hash");
                            page_min_side::$active_user->params->remove("change_email_time", true);
                            ess::$b->page->add_message("E-postadressen ble endret.");
                            redirect::handle(page_min_side::addr(""));
                        }
                    }
                    echo '
	<div class="bg1_c center" style="width: 350px">
		<h1 class="bg1">Skifte e-postadresse<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<boxes />
			<form action="" method="post" autocomplete="off">
				<dl class="dd_right dl_2x">
					<dt>Nåværende e-postadresse</dt>
					<dd>' . htmlspecialchars(page_min_side::$active_user->data['u_email']) . '</dd>
					<dt>Ny e-postadresse</dt>
					<dd><input type="text" value="' . htmlspecialchars(postval("email", page_min_side::$active_user->data['u_email'])) . '" name="email" id="email" class="styled w150" /></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">' . ($email_ex ? show_sbutton("Lagre ny e-postadresse, ignorer advarsel", 'name="ignore_ex"') : show_sbutton("Lagre ny e-postadresse")) . '</p>
			</form>
		</div>
	</div>';
                }
            } else {
                // blokkert fra å skifte e-postadressen?
                $blokkering = blokkeringer::check(blokkeringer::TYPE_EPOST);
                if ($blokkering) {
                    ess::$b->page->add_message("Du er blokkert fra å skifte e-postadressen din. 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");
                    redirect::handle(page_min_side::addr(""));
                }
                // hent status
                $status = page_min_side::$active_user->params->get("change_email_step", false);
                $email_addr = page_min_side::$active_user->params->get("change_email_new_address");
                $html_pre = '
	<div class="bg1_c center" style="width: 350px">
		<h1 class="bg1">Skifte e-postadresse<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<boxes />';
                $html_suf = '
		</div>
	</div>';
                $in_use = false;
                $expire = false;
                if ($status) {
                    // se om e-postadressen allerede er i bruk
                    $result = \Kofradia\DB::get()->query("SELECT COUNT(u_id) FROM users WHERE u_email = " . \Kofradia\DB::quote($email_addr) . " AND u_access_level != 0");
                    $in_use = $result->fetchColumn(0) > 0;
                } elseif ($status && page_min_side::$active_user->params->get("change_email_time") + 86400 < time()) {
                    $expire = true;
                }
                // avbryte?
                if (isset($_POST['abort']) && $status || $in_use || $expire) {
                    if ($in_use) {
                        // logg
                        putlog("CREWCHAN", "%u" . page_min_side::$active_player->data['up_name'] . "%u kunne ikke skifte e-postadresse fordi den nye adressen er i bruk (ville skifte fra %u" . page_min_side::$active_user->data['u_email'] . "%u til %u" . $email_addr . "%u) {$__server['path']}/min_side?u_id=" . page_min_side::$active_user->id);
                        // info
                        ess::$b->page->add_message("E-postadressen <b>" . htmlspecialchars($email_addr) . "</b> har blitt benyttet av en annen bruker. Du kan ikke skifte til denne e-postadressen.", "error");
                    } elseif ($expire) {
                        // logg
                        putlog("CREWCHAN", "%u" . page_min_side::$active_player->data['up_name'] . "%u kunne ikke skifte e-postadresse fordi det ble brukt for lang tid (egentlig startet " . ess::$b->date->get(page_min_side::$active_user->params->get("change_email_time"))->format() . ") (ville skifte fra %u" . page_min_side::$active_user->data['u_email'] . "%u til %u{$email_addr}%u) {$__server['path']}/min_side?u_id=" . page_min_side::$active_user->id);
                        // info
                        ess::$b->page->add_message("Du brukte for lang tid med å bekrefte e-postadressen. Skifting av e-post er avbrutt.", "error");
                    } else {
                        // logg
                        putlog("CREWCHAN", "%u" . page_min_side::$active_player->data['up_name'] . "%u avbrøt skifting av e-postadresse (ville skifte fra %u" . page_min_side::$active_user->data['u_email'] . "%u til %u{$email_addr}%u) {$__server['path']}/min_side?u_id=" . page_min_side::$active_user->id);
                        // info
                        ess::$b->page->add_message("Du har avbrutt skifting av e-postadresse.");
                    }
                    // fjern fra params
                    page_min_side::$active_user->params->remove("change_email_step");
                    page_min_side::$active_user->params->remove("change_email_new_address");
                    page_min_side::$active_user->params->remove("change_email_hash");
                    page_min_side::$active_user->params->remove("change_email_time", true);
                    redirect::handle();
                }
                // behandle trinn 1
                if (isset($_GET['old'])) {
                    // er ikke på trinn 1 eller feil kode?
                    if ($status != 1 || page_min_side::$active_user->params->get("change_email_hash") != $_GET['old']) {
                        ess::$b->page->add_message("E-posten du har blitt henvist fra gjelder ikke lenger.", "error");
                        redirect::handle();
                    }
                    // gå videre til neste trinn?
                    if (isset($_POST['continue']) && validate_sid(false)) {
                        // generer kode
                        $hash = mb_substr(md5(uniqid("kofradia_")), 0, 16);
                        // sett status
                        page_min_side::$active_user->params->update("change_email_step", 2);
                        page_min_side::$active_user->params->update("change_email_new_address", $email_addr);
                        page_min_side::$active_user->params->update("change_email_hash", $hash);
                        page_min_side::$active_user->params->update("change_email_time", time(), true);
                        // send e-post til nye e-posten
                        $email = new email();
                        $email->text = 'Hei,

Du har bedt om å skifte e-postadressen for din spiller ' . page_min_side::$active_player->data['up_name'] . ' på ' . $__server['path'] . '.
Den gamle e-postadressen har blitt bekreftet.

Gammel/nåværende e-postadresse: ' . page_min_side::$active_user->data['u_email'] . '
Ny e-postadresse: ' . $email_addr . '

For å godta eller avslå dette gå inn på følgende adresse:
' . $__server['path'] . '/min_side?u&a=set&b=email&new=' . $hash . '

--
www.kofradia.no';
                        $email->headers['X-SMafia-IP'] = $_SERVER['REMOTE_ADDR'];
                        $email->headers['Reply-To'] = "*****@*****.**";
                        $email->send($email_addr, "Skifte e-postadresse (bekrefte ny adresse)");
                        // logg
                        putlog("CREWCHAN", "%u" . page_min_side::$active_player->data['up_name'] . "%u har bekreftet gammel e-postadresse (%u" . page_min_side::$active_user->data['u_email'] . "%u) og skal nå bekrefte %u{$email_addr}%u {$__server['path']}/min_side?u_id=" . page_min_side::$active_user->id);
                        // info
                        ess::$b->page->add_message("En e-post har blitt sendt til <b>" . htmlspecialchars($email_addr) . "</b> for bekreftelse.");
                        redirect::handle();
                    }
                    echo $html_pre . '
		<p>Du har bekreftet nåværende e-postadresse.</p>
		<dl class="dd_right">
			<dt>Nåværende e-postadresse</dt>
			<dd>' . htmlspecialchars(page_min_side::$active_user->data['u_email']) . '</dd>
			<dt>Ny ønsket e-postadresse</dt>
			<dd>' . htmlspecialchars($email_addr) . '</dd>
		</dl>
		<p><u>Du må nå bekrefte den nye e-postadressen.</u></p>
		<form action="" method="post">
			<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
			<p class="c">
				' . show_sbutton("Send e-post for bekreftelse", 'name="continue"') . '
				' . show_sbutton("Avbryt", 'name="abort"') . '
			</p>
		</form>' . $html_suf;
                } elseif (isset($_GET['new'])) {
                    // er ikke på trinn 2 eller feil kode?
                    if ($status != 2 || page_min_side::$active_user->params->get("change_email_hash") != $_GET['new']) {
                        ess::$b->page->add_message("E-posten du har blitt henvist fra gjelder ikke lenger.", "error");
                        redirect::handle();
                    }
                    // fullføre skifting av e-postadresse?
                    if (isset($_POST['confirm']) && validate_sid(false)) {
                        $note = trim(postval("note"));
                        // mangler logg?
                        if ($note == "") {
                            ess::$b->page->add_message("Mangler begrunnelse.");
                        } else {
                            // lagre endringer
                            \Kofradia\DB::get()->exec("UPDATE users SET u_email = " . \Kofradia\DB::quote($email_addr) . " WHERE u_id = " . page_min_side::$active_user->id);
                            // legg til crewlogg
                            crewlog::log("user_email", page_min_side::$active_player->id, $note, array("email_old" => page_min_side::$active_user->data['u_email'], "email_new" => $email_addr));
                            // logg
                            putlog("CREWCHAN", "%u" . page_min_side::$active_player->data['up_name'] . "%u skiftet e-postadresse fra %u" . page_min_side::$active_user->data['u_email'] . "%u til %u" . $email_addr . "%u {$__server['path']}/min_side?u_id=" . page_min_side::$active_user->id);
                            // info
                            ess::$b->page->add_message("E-postadressen ble skiftet fra <b>" . htmlspecialchars(page_min_side::$active_user->data['u_email']) . "</b> til <b>" . htmlspecialchars($email_addr) . "</b>.");
                            // fjern fra params
                            page_min_side::$active_user->params->remove("change_email_step");
                            page_min_side::$active_user->params->remove("change_email_new_address");
                            page_min_side::$active_user->params->remove("change_email_hash");
                            page_min_side::$active_user->params->remove("change_email_time", true);
                            redirect::handle();
                        }
                    }
                    echo $html_pre . '
		<p>Du har bekreftet både den nåværende og den nye e-postadressen.</p>
		<dl class="dd_right">
			<dt>Nåværende e-postadresse</dt>
			<dd>' . htmlspecialchars(page_min_side::$active_user->data['u_email']) . '</dd>
			<dt>Ny ønsket e-postadresse</dt>
			<dd><b><u>' . htmlspecialchars($email_addr) . '</u></b></dd>
		</dl>
		<form action="" method="post">
			<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
			<dl class="dd_right">
				<dt>Begrunnelse</dt>
				<dd><textarea name="note" rows="5" cols="10" class="w200">' . htmlspecialchars(postval("note")) . '</textarea></dd>
			</dl>
			<p class="c">
				' . show_sbutton("Skift e-postadresse", 'name="confirm"') . '
				' . show_sbutton("Avbryt", 'name="abort"') . '
			</p>
		</form>' . $html_suf;
                } elseif (!$status) {
                    // velge ny e-postadresse
                    if (isset($_POST['new_email']) && validate_sid(false)) {
                        // se om e-postadressen allerede er i bruk
                        $result = \Kofradia\DB::get()->query("SELECT COUNT(u_id) FROM users WHERE u_email = " . \Kofradia\DB::quote($_POST['new_email']) . " AND u_access_level != 0");
                        $in_use = $result->fetchColumn(0) > 0;
                        // valider e-post
                        $email_addr = $_POST['new_email'];
                        $email_valid = game::validemail($email_addr);
                        // kontroller om e-postadressen eller domenet er blokkert
                        if ($email_valid) {
                            $pos = mb_strpos($email_addr, "@");
                            $domain = mb_strtolower(mb_substr($email_addr, $pos + 1));
                            $result = \Kofradia\DB::get()->query("SELECT eb_id, eb_type FROM email_blacklist WHERE (eb_type = 'address' AND eb_value = " . \Kofradia\DB::quote($email_addr) . ") OR (eb_type = 'domain' AND eb_value = " . \Kofradia\DB::quote($domain) . ") ORDER BY eb_type = 'address' LIMIT 1");
                            $error_email = $result->fetch();
                        }
                        // ugyldig e-postadresse?
                        if (!$email_valid) {
                            ess::$b->page->add_message("Ugyldig e-postadresse.", "error");
                        } elseif ($in_use) {
                            putlog("CREWCHAN", "%u" . page_min_side::$active_player->data['up_name'] . "%u forsøkte å skifte e-postadresse fra %u" . page_min_side::$active_user->data['u_email'] . "%u til %u{$email_addr}%u som allerde er i bruk {$__server['path']}/min_side?u_id=" . page_min_side::$active_user->id);
                            ess::$b->page->add_message("E-posten du ønsker å skifte til er allerede benyttet av en annen bruker.");
                        } elseif ($error_email) {
                            if ($error_email['eb_type'] == "address") {
                                ess::$b->page->add_message("E-postadressen <b>" . htmlspecialchars($email_addr) . "</b> er blokkert og kan ikke benyttes.", "error");
                            } else {
                                ess::$b->page->add_message("Domenet <b>" . htmlspecialchars($domain) . "</b> er blokkert og kan ikke benyttes.", "error");
                            }
                        } else {
                            // generer kode
                            $hash = mb_substr(md5(uniqid("kofradia_")), 0, 16);
                            // sett status
                            page_min_side::$active_user->params->update("change_email_step", 1);
                            page_min_side::$active_user->params->update("change_email_new_address", $email_addr);
                            page_min_side::$active_user->params->update("change_email_hash", $hash);
                            page_min_side::$active_user->params->update("change_email_time", time(), true);
                            // send e-post til gamle e-posten
                            $email = new email();
                            $email->text = 'Hei,

Du har bedt om å skifte e-postadressen for din spiller ' . page_min_side::$active_player->data['up_name'] . ' på ' . $__server['path'] . '.

Gammel/nåværende e-postadresse: ' . page_min_side::$active_user->data['u_email'] . '
Ny e-postadresse: ' . $email_addr . '

For å godta eller avslå dette gå inn på følgende adresse:
' . $__server['path'] . '/min_side?u&a=set&b=email&old=' . $hash . '

--
www.kofradia.no';
                            $email->headers['X-SMafia-IP'] = $_SERVER['REMOTE_ADDR'];
                            $email->headers['Reply-To'] = "*****@*****.**";
                            $email->send(page_min_side::$active_user->data['u_email'], "Skifte e-postadresse (bekrefte gammel adresse)");
                            // logg
                            putlog("CREWCHAN", "%u" . page_min_side::$active_player->data['up_name'] . "%u har startet skifting av e-postadresse fra %u" . page_min_side::$active_user->data['u_email'] . "%u til %u{$email_addr}%u {$__server['path']}/min_side?u_id=" . page_min_side::$active_user->id);
                            // info
                            ess::$b->page->add_message("En e-post har blitt sendt til <b>" . htmlspecialchars(page_min_side::$active_user->data['u_email']) . "</b> for bekreftelse.");
                            redirect::handle();
                        }
                    }
                    echo $html_pre . '
		<form action="" method="post">
			<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
			<dl class="dd_right">
				<dt>Nåværende e-postadresse</dt>
				<dd>' . htmlspecialchars(page_min_side::$active_user->data['u_email']) . '</dd>
				<dt>Ny ønsket e-postadresse</dt>
				<dd><input type="text" name="new_email" value="' . htmlspecialchars(postval("new_email", "")) . '" class="styled w150" /></dd>
			</dl>
			<p>Du vil motta en e-post for bekreftelse på den gamle e-postadressen, for deretter å få en bekreftelse på den nye før e-postadressen blir skiftet.</p>
			<p>Husk at du ikke har lov til å gi bort eller selge brukeren til andre personer. <u>Brukeren skal ikke brukes av andre enn deg.</u></p>
			<p class="c">' . show_sbutton("Fortsett") . '</p>' . (access::has("mod") ? '
			<p class="c"><a href="' . htmlspecialchars(page_min_side::addr("set", "b=email&o")) . '">Endre e-postadresse som moderator</a></p>' : '') . '
		</form>' . $html_suf;
                } else {
                    echo $html_pre . '
		<p>Du er i ferd med å skifte e-postadresse for brukeren din.</p>
		<p>Informasjon:</p>
		<dl class="dd_right">
			<dt>Nåværende e-postadresse</dt>
			<dd>' . htmlspecialchars(page_min_side::$active_user->data['u_email']) . '</dd>
			<dt>Ny ønsket e-postadresse</dt>
			<dd>' . htmlspecialchars($email_addr) . '</dd>
			<dt>Status</dt>
			<dd>' . ($status == 1 ? 'Venter på bekreftelse av <b>gammel</b> e-postadresse.' : 'Venter på bekreftelse av <b>ny</b> e-postadresse') . '</dd>
		</dl>
		<form action="" method="post">
			<p class="c">' . show_sbutton("Avbryt", 'name="abort"') . '</p>
		</form>' . $html_suf;
                }
            }
        } elseif ($subpage2 == "") {
            // lagre innstillinger?
            if (isset($_POST['save'])) {
                if (page_min_side::$active_user->id != login::$user->id && !access::has("sadmin")) {
                    ess::$b->page->add_message("Du har ikke tilgang til å redigere disse innstillingene for andre brukere.", "error");
                    redirect::handle();
                }
                $show_signature = LOCK ? page_min_side::$active_user->data['u_forum_show_signature'] : (isset($_POST['show_signature']) ? 1 : 0);
                $forum_page = LOCK ? page_min_side::$active_user->data['u_forum_per_page'] : max(5, min(100, intval(postval("forum_page"))));
                $force_ssl = isset($_POST['force_ssl']) ? 1 : 0;
                $music_auto = LOCK ? page_min_side::$active_user->data['u_music_auto'] : (isset($_POST['music']) && $_POST['music'] == "auto" ? 1 : 0);
                $music_manual = LOCK ? page_min_side::$active_user->params->get("music_manual") ? true : false : isset($_POST['music']) && $_POST['music'] == "manual";
                $hide_progressbar_left = LOCK ? page_min_side::$active_user->params->get("hide_progressbar_left") ? true : false : isset($_POST['hide_progressbar_left']);
                $changed = false;
                $user_change = array();
                if ($force_ssl != page_min_side::$active_user->data['u_force_ssl']) {
                    $user_change[] = "u_force_ssl = {$force_ssl}";
                }
                if ($music_auto != page_min_side::$active_user->data['u_music_auto']) {
                    $user_change[] = "u_music_auto = {$music_auto}";
                }
                if ($show_signature != page_min_side::$active_user->data['u_forum_show_signature']) {
                    $user_change[] = "u_forum_show_signature = {$show_signature}";
                }
                if ($forum_page != page_min_side::$active_user->data['u_forum_per_page']) {
                    $user_change[] = "u_forum_per_page = {$forum_page}";
                }
                if ($hide_progressbar_left != (page_min_side::$active_user->params->get("hide_progressbar_left") ? true : false)) {
                    if (!$hide_progressbar_left) {
                        page_min_side::$active_user->params->remove("hide_progressbar_left");
                    } else {
                        page_min_side::$active_user->params->update("hide_progressbar_left", "1");
                    }
                    $changed = true;
                }
                if ($music_manual != (page_min_side::$active_user->params->get("music_manual") ? true : false)) {
                    if (!$music_manual) {
                        page_min_side::$active_user->params->remove("music_manual");
                    } else {
                        page_min_side::$active_user->params->update("music_manual", "1");
                    }
                    $changed = true;
                }
                if ($changed) {
                    page_min_side::$active_user->params->commit();
                }
                // noe som skal endres?
                if (count($user_change) > 0) {
                    \Kofradia\DB::get()->exec("UPDATE users SET " . implode(", ", $user_change) . " WHERE u_id = " . page_min_side::$active_user->id);
                    $changed = true;
                }
                if ($changed) {
                    ess::$b->page->add_message("Endringene ble lagret.");
                } else {
                    ess::$b->page->add_message("Ingen endringer ble utført.");
                }
                redirect::handle();
            }
            ess::$b->page->add_css('
.minside_set { margin: 0 20px; background-color: #222222; padding: 1px 5px }
.minside_set p { margin: 5px 0 }');
            echo '
	<div class="bg1_c" style="width: 400px">
		<h1 class="bg1">Innstillinger<span class="left2"></span><span class="right2"></span></h1>
		<div class="bg1">
			<boxes />
			<form action="" method="post">
				<p><b>Forumalternativer:</b></p>
				<div class="minside_set">
					<p><input type="checkbox" name="show_signature" id="show_signature"' . (page_min_side::$active_user->data['u_forum_show_signature'] != 0 ? ' checked="checked"' : '') . ' /><label for="show_signature"> Vis signaturer i forumet</label></p>
					<p>Antall foruminnlegg per side: <input type="text" name="forum_page" maxlength="2" value="' . page_min_side::$active_user->data['u_forum_per_page'] . '" class="styled w40" /></p>
				</div>
				
				<p><b>Sikkerhet:</b></p>
				<div class="minside_set">
					<p><input type="checkbox" name="force_ssl" id="force_ssl"' . (page_min_side::$active_user->data['u_force_ssl'] != 0 ? ' checked="checked"' : '') . ' /><label for="force_ssl"> Alltid benytt sikker tilkobling (SSL)</label>' . (page_min_side::$active_user->data['u_access_level'] != 0 && page_min_side::$active_user->data['u_access_level'] != 1 ? ' <span class="dark">(Som crew benytter du uansett alltid SSL.)</span>' : '') . '</p>
				</div>
				
				<p><b>Spillinnstillinger:</b></p>
				<div class="minside_set">
					<p><input type="checkbox" name="hide_progressbar_left" id="hide_progressbar_left"' . (page_min_side::$active_user->params->get("hide_progressbar_left") ? ' checked="checked"' : '') . ' /><label for="hide_progressbar_left"> Skjul &laquo;Rank&raquo; og &laquo;Wanted nivå&raquo; fra toppen av siden</label></p>
				</div>
				
				<p><b>Annet:</b></p>
				<div class="minside_set">
					<p>Musikkalternativer:<br />
						<input type="radio" name="music" value="auto" id="music_auto"' . (!page_min_side::$active_user->params->get("music_manual") && page_min_side::$active_user->data['u_music_auto'] ? ' checked="checked"' : '') . ' /><label for="music_auto"> Spill av musikk automatisk</label><br />
						<input type="radio" name="music" value="preload" id="music_preload"' . (!page_min_side::$active_user->params->get("music_manual") && !page_min_side::$active_user->data['u_music_auto'] ? ' checked="checked"' : '') . ' /><label for="music_preload"> Last inn musikkfil, men ikke spill av automatisk</label><br />
						<input type="radio" name="music" value="manual" id="music_manual"' . (page_min_side::$active_user->params->get("music_manual") ? ' checked="checked"' : '') . ' /><label for="music_manual"> Ikke last inn musikkfil -- trykk på spiller for å laste inn</label>
					</p>
				</div>' . (page_min_side::$active_user->id != login::$user->id ? '
				<p class="c">Du har ikke tilgang til å endre disse innstillingene</p>' : '
				<p class="c">' . show_sbutton("Lagre endringer", 'name="save"') . '</p>') . '
			</form>
		</div>
	</div>';
        }
    }
Beispiel #6
0
    /**
     * Endre posisjon for et medlem
     */
    protected function change_priority()
    {
        ess::$b->page->add_title("Endre posisjon på medlem");
        // har ikke merket av en spiller?
        if (!isset($_REQUEST['up_id']) && !isset($_REQUEST['up_ids'])) {
            ess::$b->page->add_message("Du må merke en eller flere spillere.", "error");
            redirect::handle();
        }
        // kontroller medlemmene
        $up_ids = isset($_REQUEST['up_ids']) ? array_map("intval", explode(",", $_REQUEST['up_ids'])) : array_map("intval", (array) $_REQUEST['up_id']);
        $priority_list = array();
        $members = array();
        $rank_points_low = null;
        // rankpoengene til spilleren med dårligst rank
        foreach ($up_ids as $up_id) {
            // er ikke medlem?
            if (!isset($this->ff->members['members'][$up_id])) {
                ess::$b->page->add_message('Spilleren <user id="' . $up_id . '" /> er ikke medlem av ' . $this->ff->type['refobj'] . '.', "error");
                redirect::handle();
            }
            $member = $this->ff->members['members'][$up_id];
            // kan ikke endre posisjon på seg selv
            if ($member->id == login::$user->player->id && !$this->ff->mod) {
                ess::$b->page->add_message('Du kan ikke omplassere deg selv.');
                redirect::handle();
            }
            // eier kan ikke omplasseres
            if ($member->data['ffm_priority'] == 1 && !$this->ff->mod) {
                ess::$b->page->add_message(ucfirst($this->ff->type['priority'][1]) . " kan ikke omplasseres.");
                redirect::handle();
            }
            // har høyere prioritering?
            if ($member->data['ffm_priority'] <= $this->ff->uinfo->data['ffm_priority'] && !$this->ff->mod) {
                ess::$b->page->add_message('Du kan ikke omplassere <user id="' . $member->id . '" /> som har høyere eller samme posisjon som deg.', "error");
                redirect::handle();
            }
            // sett opp rank informasjon for spilleren
            if ($rank_points_low === null || $member->data['up_points'] < $rank_points_low) {
                $rank_points_low = $member->data['up_points'];
            }
            $members[] = $member;
            $priority_list[] = $member->data['ffm_priority'];
        }
        // ingen medlemmer?
        $c = count($members);
        if ($c == 0) {
            ess::$b->page->add_message("Du må merke en eller flere spillere.", "error");
            redirect::handle();
        }
        // sorter slik at medlemmene med høyest posisjon kommer først
        array_multisort($priority_list, $members);
        ksort($priority_list);
        // sett opp nåværende prioritering hvis det kun er 1 spiller eller alle har samme prioritering
        $priority_old = array_unique($priority_list);
        if (count($priority_old) == 1) {
            $priority_old = $priority_old[0];
        } else {
            $priority_old = null;
        }
        // rank info for den dårligste ranken
        $rank_info = game::rank_info($rank_points_low);
        $rank_number = $rank_info['number'];
        // hent oversikt over ledige plasser og fjern eier/medeier posisjon om nødvendig
        $limits_data = $this->ff->check_limits($members);
        if (!$this->ff->mod) {
            unset($limits_data['priorities'][1]);
            if ($this->ff->uinfo->data['ffm_priority'] > 1) {
                unset($limits_data['priorities'][2]);
            }
        }
        // valg posisjon?
        if ((isset($_POST['pick_priority']) || isset($_POST['priority'])) && validate_sid()) {
            // har ikke valgt posisjon?
            $priority = isset($_POST['priority']) && isset($limits_data['priorities'][$_POST['priority']]) ? $limits_data['priorities'][$_POST['priority']] : false;
            if (!isset($_POST['priority'])) {
                ess::$b->page->add_message("Du må velge en posisjon.", "error");
            } elseif (!$priority || $priority['max'] == -1 && !$this->ff->mod) {
                ess::$b->page->add_message("Ugyldig posisjon.", "error");
            } elseif ($rank_number < $priority['min_rank'] && !$this->ff->mod && $priority['priority'] != $priority_old) {
                ess::$b->page->add_message('En eller flere av spillerene valgt har ikke høy nok rank for å bli ' . $this->ff->type['priority'][$priority['priority']] . ".", "error");
            } elseif ($priority['free'] < $c && !$this->ff->mod && $priority['priority'] != $priority_old) {
                ess::$b->page->add_message("Det er ingen ledige plasser som " . $this->ff->type['priority'][$priority['priority']] . ".", "error");
            } elseif ($this->ff->type['parent'] && $priority['priority'] == 4 && $limits_data['priorities'][3]['members'] == 0) {
                ess::$b->page->add_message("Det finnes ingen spillere med posisjon {$this->ff->type['priority'][3]} du kan tilegne en {$this->ff->type['priority'][4]}. Du må først sette en spiller som {$this->ff->type['priority'][3]} før du kan sette en {$this->ff->type['priority'][4]}.", "error");
            } elseif ($priority['priority'] == $priority_old && (!$this->ff->type['parent'] || $priority['priority'] != 4)) {
                ess::$b->page->add_message("Du må velge en annen posisjon enn den som er satt.");
            } else {
                // fjern de som er valgt og som allerede har denne prioriteringen
                if ($priority_old === null && ($priority['priority'] != 4 || !$this->ff->type['parent'])) {
                    foreach ($members as $key => $member) {
                        if ($member->data['ffm_priority'] == $priority['priority']) {
                            unset($members[$key]);
                            unset($priority_list[$key]);
                        }
                    }
                    $c = count($members);
                }
                $parent = $this->pick_parent($priority, $members, null, 'medlemmer?ff_id=' . $this->ff->id . '&amp;change_priority&amp;up_ids=' . implode(",", $up_ids), '
		<input type="hidden" name="change_priority" />
		<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />');
                // fjern de som er valgt og som har samme parent
                if ($priority['priority'] == 4 && $this->ff->type['parent']) {
                    foreach ($members as $key => $member) {
                        if ($member->data['ffm_priority'] == $priority['priority'] && $member->data['ffm_parent_up_id'] == $parent) {
                            unset($members[$key]);
                            unset($priority_list[$key]);
                        }
                    }
                    $c = count($members);
                }
                // godkjent?
                if (isset($_POST['confirm']) && validate_sid(false)) {
                    // sorter slik at medlemmene med lavest posisjon kommer først
                    array_multisort($priority_list, SORT_DESC, $members);
                    // flytt spillerene
                    $changed = array();
                    $error = array();
                    foreach ($members as $member) {
                        // flytt spilleren
                        $old_priority = $member->data['ffm_priority'];
                        $old_parent = $member->data['ffm_parent_up_id'];
                        if ($member->change_priority($priority['priority'], $parent)) {
                            $changed[] = '<user id="' . $member->id . '" /> fra ' . $this->ff->type['priority'][$old_priority] . ($old_parent ? ' underordnet <user id="' . $old_parent . '" />' : '');
                        } else {
                            $error[] = '<user id="' . $member->id . '" /> (' . $this->ff->type['priority'][$old_priority] . ($old_parent ? ' underordnet <user id="' . $old_parent . '" />' : '') . ')';
                        }
                    }
                    if (count($changed) == 1) {
                        ess::$b->page->add_message("Du endret posisjonen til {$changed[0]} til " . $this->ff->type['priority'][$priority['priority']] . ($parent ? ' underordnet <user id="' . $parent . '" />' : '') . '.');
                    } elseif (count($changed) > 1) {
                        ess::$b->page->add_message("Du endret posisjonene til følgende spillere til " . $this->ff->type['priority'][$priority['priority']] . ($parent ? ' underordnet <user id="' . $parent . '" />' : '') . ':<ul><li>' . implode("</li><li>", $changed) . '</li></ul>');
                    }
                    if (count($error) == 1) {
                        ess::$b->page->add_message("Posisjonen til {$error[0]} kunne ikke bli endret til " . $this->ff->type['priority'][$priority['priority']] . ($parent ? ' underordnet <user id="' . $parent . '" />' : '') . '.', "error");
                    } elseif (count($error) > 1) {
                        ess::$b->page->add_message("Posisjonene til følgende spillere kunne ikke bli satt til " . $this->ff->type['priority'][$priority['priority']] . ($parent ? ' underordnet <user id="' . $parent . '" />' : '') . ':<ul><li>' . implode("</li><li>", $error) . '</li></ul>');
                    }
                    redirect::handle();
                }
                // vis bekreftskjema
                ess::$b->page->add_title("Bekreft endring av posisjon");
                $width = 180;
                if ($c > 1) {
                    $width = 300;
                } elseif ($parent || $members[0]->data['ffm_parent_up_id']) {
                    $width = 300;
                }
                echo '
<div class="section" style="width: ' . $width . 'px">
	<h1>Bekreft endring av posisjon</h1>
	<p class="h_right"><a href="medlemmer?ff_id=' . $this->ff->id . '&amp;change_priority&amp;up_ids=' . implode(",", $up_ids) . '">Tilbake</a></p>
	<boxes />
	<form action="" method="post">
		<input type="hidden" name="change_priority" />
		<input type="hidden" name="up_ids" value="' . implode(",", $up_ids) . '" />
		<input type="hidden" name="priority" value="' . $priority['priority'] . '" />' . ($parent ? '
		<input type="hidden" name="parent" value="' . $parent . '" />' : '') . '
		<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />';
                if ($c == 1) {
                    $member = $members[0];
                    echo '
		<dl class="dd_right">
			<dt>Spiller</dt>
			<dd>' . game::profile_link($member->id, $member->data['up_name'], $member->data['up_access_level']) . '</dd>
			<dt>Nåværende posisjon</dt>
			<dd>' . ucfirst($member->get_priority_name()) . ($member->data['ffm_parent_up_id'] ? ' underordnet <user id="' . $member->data['ffm_parent_up_id'] . '" />' : '') . '</dd>
			<dt>Ny posisjon</dt>
			<dd>' . ucfirst($this->ff->type['priority'][$priority['priority']]) . ($parent ? ' underordnet <user id="' . $parent . '" />' : '') . '</dd>
		</dl>';
                } else {
                    $list = array();
                    foreach ($members as $member) {
                        $list[] = '<li><user id="' . $member->id . '" /> (' . $member->get_priority_name() . ($member->data['ffm_parent_up_id'] ? ' underordnet <user id="' . $member->data['ffm_parent_up_id'] . '" />' : '') . ')</li>';
                    }
                    echo '
		<p>Spillere som flyttes:</p>
		<ul>' . implode("", $list) . '</ul>
		<dl class="dd_right">
			<dt>Ny posisjon</dt>
			<dd>' . ucfirst($this->ff->type['priority'][$priority['priority']]) . ($parent ? ' underordnet <user id="' . $parent . '" />' : '') . '</dd>
		</dl>';
                }
                echo ($rank_number < $priority['min_rank'] ? '
		<p>En eller flere spillere har i utgangspunktet for lav rank.</p>' : '') . ($priority['free'] < $c && $priority['priority'] != $priority_old ? '
		<p>Det er i utgangspunktet ikke mange nok ledige plasser for denne posisjonen.</p>' : '');
                // kontroller for underordnede spillere
                if ($this->ff->type['parent']) {
                    $subs = array();
                    $pri3_count = 0;
                    foreach ($members as $member) {
                        if ($member->data['ffm_priority'] == 3) {
                            $pri3_count++;
                        }
                        if ($member->data['ffm_priority'] == 3 && isset($this->ff->members['members_parent'][$member->id])) {
                            foreach ($this->ff->members['members_parent'][$member->id] as $member_sub) {
                                // hopp over om det er en av de som skal bytte plass
                                if (in_array($member_sub->id, $up_ids)) {
                                    continue;
                                }
                                $subs[] = '<li><user id="' . $member_sub->id . '" />' . ($c == 1 ? '' : '(Underordnet <user id="' . $member->data['ffm_parent_up_id'] . '" />)') . '</li>';
                            }
                        }
                    }
                    if (count($subs) > 0) {
                        // er det noen pri3 etter alle blir kastet ut?
                        $pri3 = count($this->ff->members['members_priority'][3]) - $pri3_count > 0;
                        if ($c == 1) {
                            echo '
		<p>Medlemmet har følgende medlemmer underordnet seg:</p>';
                        } else {
                            echo '
		<p>Følgende medlemmer er underordnet av en av spillerene du har valgt:</p>';
                        }
                        echo '
		<ul>' . implode("", $subs) . '</ul>' . ($pri3 ? '
		<p>Underordnede medlemmer vil bli flyttet til tilfeldige spillere med posisjon ' . $this->ff->type['priority'][3] . '.</p>' : '
		<p>Spilleren med posisjonen ' . $this->ff->type['priority'][4] . ' som har vært medlem lengst bli utvalgt til ' . $this->ff->type['priority'][3] . '.') . '</p>';
                    }
                }
                echo '
		<p class="c">
			' . show_sbutton("Endre posisjon", 'name="confirm"') . '
			<a href="medlemmer?ff_id=' . $this->ff->id . '&amp;change_priority&amp;up_ids=' . implode(",", $up_ids) . '">Tilbake</a>
		</p>
	</form>
</div>';
                $this->ff->load_page();
            }
        }
        ess::$b->page->add_title("Velg ny posisjon");
        // vis oversikt over de ulike posisjonene man kan velge
        echo '
<div class="section" style="width: 400px">
	<h1>Velg ny posisjon</h1>
	<p class="h_right"><a href="medlemmer?ff_id=' . $this->ff->id . '">Tilbake</a></p>
	<boxes />
	<form action="" method="post">';
        if ($c == 1) {
            $member = reset($members);
            echo '
		<p>Valgt spiller: ' . game::profile_link($member->id, $member->data['up_name'], $member->data['up_access_level']) . ' (' . $member->get_priority_name() . ($member->data['ffm_parent_up_id'] ? ' underordnet <user id="' . $member->data['ffm_parent_up_id'] . '" />' : '') . ')</p>';
        } else {
            $list = array();
            foreach ($members as $member) {
                $list[] = '<li>' . game::profile_link($member->id, $member->data['up_name'], $member->data['up_access_level']) . ' (' . $member->get_priority_name() . ($member->data['ffm_parent_up_id'] ? ' underordnet <user id="' . $member->data['ffm_parent_up_id'] . '" />' : '') . ')</li>';
            }
            echo '
		<p>Valgte spillere:</p>
		<ul>' . implode("", $list) . '</ul>';
        }
        echo '
		<input type="hidden" name="change_priority" />
		<input type="hidden" name="up_ids" value="' . implode(",", $up_ids) . '" />
		<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
		<p>Du må nå velge ny posisjon du ønsker ' . fword("spilleren", "spillerene", $c) . ' skal få i ' . $this->ff->type['refobj'] . '.</p>';
        $this->pick_position($limits_data, $rank_info['number'], $members);
        echo '
		<p class="c">
			' . show_sbutton("Velg posisjon", 'name="pick_priority"') . '
			<a href="medlemmer?ff_id=' . $this->ff->id . '">Tilbake</a>
		</p>
	</form>
</div>';
        $this->ff->load_page();
    }
Beispiel #7
0
    /**
     * Kontroller at vi er logget inn i banken
     */
    protected function auth_verify()
    {
        // alltid logget inn i banken når man er logget inn som crew
        if (isset(login::$extended_access['authed'])) {
            return;
        }
        // sjekk om vi er logget inn i banken
        $last = login::data_get("banken_last_view", 0);
        $idle = 1800;
        // hvor lenge vi kan være inaktiv
        $exceed = max(0, time() - $last - $idle);
        // allerede logget inn?
        if ($last != 0 && $exceed == 0) {
            login::data_set("banken_last_view", time());
            return;
        }
        // logge inn?
        if (isset($_POST['passord'])) {
            // sjekk passord
            if (!password::verify_hash($_POST['passord'], $this->up->user->data['u_bank_auth'], "bank_auth")) {
                ess::$b->page->add_message("Passordet var ikke riktig. Husk at dette er bank passordet og ikke passordet til brukerkontoen.", "error");
                putlog("ABUSE", "%c4%bUGYLDIG PASSORD I BANKEN:%b%c %u" . $this->up->data['up_name'] . "%u ({$_SERVER['REMOTE_ADDR']}) brukte feil passord for å logge inn i banken");
            } else {
                // logget inn
                login::data_set("banken_last_view", time());
                ess::$b->page->add_message("Du er nå logget inn i banken. Du blir logget ut etter " . game::timespan($idle, game::TIME_FULL) . " uten å besøke banken.");
            }
            redirect::handle();
        }
        // glemt passord?
        if (isset($_GET['rp'])) {
            // validere?
            if (!empty($_GET['rp'])) {
                $this->auth_reset($_GET['rp']);
            }
            // be om e-post?
            if (isset($_POST['send']) && validate_sid()) {
                $this->auth_send_link();
            }
            ess::$b->page->add_title("Nullstill bankpassord");
            $requested = $this->up->user->params->get("bankauth_change_rtime");
            $expire = $this->up->user->params->get("bankauth_change_expire");
            echo '
<div class="bg1_c xsmall">
	<h1 class="bg1">Nullstill bankpassord<span class="left"></span><span class="right"></span></h1>
	<div class="bg1">
		<boxes />
		<p>For å nullstille passordet til banken må du bekrefte din identitet via e-posten din.</p>';
            // allerede sendt e-post?
            if ($expire > time()) {
                echo '
		<p>Du ba om e-post ' . ess::$b->date->get($requested)->format() . ' for å nullstille ditt passord. Forespørselen er gyldig til ' . ess::$b->date->get($expire)->format() . '.</p>
		<p>Du må vente til dette klokkeslettet for å be om ny e-post.</p>';
            } else {
                echo '
		<form action="" method="post">
			<input type="hidden" name="rp" />
			<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
			<p class="c">' . show_sbutton("Send e-post", 'name="send"') . '</p>
		</form>';
            }
            echo '
		<p class="c"><a href="banken">Tilbake</a></p>
	</div>
</div>';
            ess::$b->page->load();
        }
        echo '
<div class="bg1_c xsmall">
	<h1 class="bg1">
		Banken
		<span class="left"></span><span class="right"></span>
	</h1>
	<div class="bg1">
		<boxes />';
        if ($exceed > 0 && $last != 0) {
            login::data_set("banken_last_view", 0);
            echo '
		<p>Det gikk for lang tid siden du viste banken og du må logge inn på nytt. Du var ' . game::timespan($exceed, game::TIME_FULL) . ' over tiden.</p>';
        }
        // javascript for fokus til passord feltet
        ess::$b->page->add_body_post('<script type="text/javascript">
document.getElementById("b_pass").focus();
</script>');
        echo '
		<p>Du må logge inn for å få tilgang til bankkontoen din.</p>
		<p>Denne sikkerheten er her for å hindre uvedkommende i å kvitte seg med pengene dine, selv om de kommer inn på spilleren din.</p>
		<form action="" method="post">
			<dl class="dd_right dl_2x">
				<dt>Bankpassord</dt>
				<dd><input type="password" class="styled w100" name="passord" id="b_pass" /></dd>
			</dl>
			<p class="c">' . show_sbutton("Logg inn") . '</p>
			<p class="c"><a href="banken?rp">Nullstill bankpassord</a></p>
		</form>
	</div>
</div>';
        ess::$b->page->load();
    }
Beispiel #8
0
    /**
     * Kaste ut en spiller
     */
    protected function kick_handle()
    {
        // valider sid
        validate_sid();
        // kan vi ikke kaste ut noen spillere nå?
        if (login::$user->player->fengsel_check() || login::$user->player->bomberom_check() || login::$user->player->data['up_b_id'] != $this->ff->data['br_b_id'] || !$this->kick_hour_ok) {
            redirect::handle();
        }
        // mangler spillervalg?
        if (!isset($_POST['player'])) {
            ess::$b->page->add_message("Du må velge en spiller du vil kaste ut.", "error");
            redirect::handle();
        }
        // er ikke spilleren i bomberommet?
        $up_id = (int) $_POST['player'];
        $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT u_email, up_id, up_name, up_access_level, up_brom_expire\n\t\t\tFROM users_players JOIN users ON up_u_id = u_id\n\t\t\tWHERE up_id = {$up_id} AND up_brom_ff_id = {$this->ff->id} AND up_brom_expire > " . time() . " AND up_access_level != 0");
        $cost = $this->fam ? self::KICK_PLAYER_COST_FAMILIE : self::KICK_PLAYER_COST;
        $up = $result->fetch();
        if (!$up) {
            ess::$b->page->add_message("Fant ikke spilleren.", "error");
            redirect::handle();
        }
        // sett opp skjema
        $form = \Kofradia\Form::getByDomain("other", login::$user);
        // har vi bekreftet ønsket om å kaste ut en spiller?
        if (isset($_POST['confirm']) && $form->validateHashOrAlert(null, "Kast ut spiller fra bomberom")) {
            \Kofradia\DB::get()->beginTransaction();
            // forsøk å trekk fra pengene
            if (!$this->ff->bank(ff::BANK_BETALING, $cost, "Kaste ut spilleren [user id={$up['up_id']}] fra bomberommet")) {
                ess::$b->page->add_message("Det er ikke nok penger i " . ($this->fam ? "broderskapbanken" : "firmabanken") . ".", "error");
                \Kofradia\DB::get()->commit();
            } else {
                // finn en tilfeldig bydel å plassere spilleren
                $result = \Kofradia\DB::get()->query("SELECT id, name FROM bydeler WHERE active != 0 ORDER BY RAND() LIMIT 1");
                $b_id = $result->fetchColumn(0);
                // forsøk å trekk ut spilleren fra bomberommet
                $a = \Kofradia\DB::get()->exec("\n\t\t\t\t\tUPDATE users_players\n\t\t\t\t\tSET up_brom_expire = 0, up_b_id = {$b_id}\n\t\t\t\t\tWHERE up_id = {$up['up_id']} AND up_brom_ff_id = {$this->ff->id} AND up_brom_expire = {$up['up_brom_expire']} AND up_access_level != 0");
                // feilet?
                if ($a == 0) {
                    // avbryt transaksjon
                    \Kofradia\DB::get()->rollback();
                    ess::$b->page->add_message("Kunne ikke kaste ut spilleren fra bomberommet.", "error");
                } else {
                    // legg til hendelse hos spilleren
                    player::add_log_static("bomberom_kicked", login::$user->player->id . ":" . urlencode($this->ff->data['ff_name']) . ":{$up['up_brom_expire']}", $this->ff->id, $up['up_id']);
                    // send e-post til spilleren
                    $email = new email();
                    $email->text = 'Hei,

Din spiller ble kastet ut fra bomberommet av ' . ($this->fam ? 'broderskapet' : 'firmaet') . ' som styrer bomberommet.

--
www.kofradia.no';
                    $email->send($up['u_email'], "Kastet ut av bomberom");
                    // firmalogg
                    $this->ff->add_log("bomberom_kick", login::$user->player->id . ":{$up['up_id']}:{$up['up_brom_expire']}");
                    // logg
                    putlog("DF", "BOMBEROM: {$up['up_name']} ble kastet ut av bomberommet {$this->ff->data['ff_name']} av " . login::$user->player->data['up_name'] . " " . ess::$s['spath'] . "/min_side?up_id={$up['up_id']}");
                    ess::$b->page->add_message('Du kastet ut <user id="' . $up['up_id'] . '" /> fra bomberommet. ' . ($this->fam ? 'Broderskapet' : 'Firmaet') . ' betalte et gebyr på ' . game::format_cash($cost) . '.');
                    \Kofradia\DB::get()->commit();
                    redirect::handle();
                }
            }
        }
        ess::$b->page->add_title("Kaste ut spiller");
        // vis informasjon
        echo '
<div class="bg1_c xsmall">
	<h1 class="bg1">Kaste ut spiller fra bomberommet<span class="left2"></span><span class="right2"></span></h1>
	<div class="bg1">
		<p>Du er i ferd med å kaste ut ' . game::profile_link($up['up_id'], $up['up_name'], $up['up_access_level']) . ' fra bomberommet.</p>
		<p>Spilleren skal i utgangspunktet sitte i bomberommet til ' . ess::$b->date->get($up['up_brom_expire'])->format(date::FORMAT_SEC) . ' (' . game::counter($up['up_brom_expire'] - time()) . ' gjenstår).</p>
		<p>For å kaste ut spilleren må det betales en avgift på <b>' . game::format_cash($cost) . '</b> som betales fra ' . ($this->fam ? 'broderskapkontoen' : 'firmakontoen') . '.</p>';
        // har vi ikke nok penger i firmakontoen?
        if ($this->ff->data['ff_bank'] < $cost) {
            echo '
		<p>' . ($this->fam ? 'Broderskapet' : 'Firmaet') . ' har for øyeblikket kun ' . game::format_cash($this->ff->data['ff_bank']) . ' på konto, noe som ikke er nok. ' . ($this->ff->access(1) ? '<a href="' . ess::$s['relative_path'] . '/ff/banken?ff_id=' . $this->ff->id . '">Sett inn penger på ' . ($this->fam ? 'broderskapkontoen' : 'firmakontoen') . '</a>' : '<a href="' . ess::$s['relative_path'] . '/ff/panel?ff_id=' . $this->ff->id . '">Donér til ' . ($this->fam ? 'broderskapet' : 'firmaet') . '</a>') . ' først for å kunne kaste ut spilleren.</p>
		<p class="c"><a href="bomberom?ff_id=' . $this->ff->id . '">Tilbake</a></p>';
        } else {
            echo '
		<p>' . ($this->fam ? 'Broderskapet' : 'Firmaet') . ' har for øyeblikket ' . game::format_cash($this->ff->data['ff_bank']) . ' på konto.</p>
		<form action="" method="post">
			' . $form->getHTMLInput() . '
			<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
			<input type="hidden" name="player" value="' . $up['up_id'] . '" />
			<input type="hidden" name="kick" />
			<p class="c">' . show_sbutton("Bekreft, kast ut spilleren", 'name="confirm"') . ' <a href="bomberom?ff_id=' . $this->ff->id . '">Avbryt</a></p>
		</form>';
        }
        echo '
	</div>
</div>';
        $this->ff->load_page();
    }
Beispiel #9
0
 /**
  * Slett svar
  */
 public function reply_restore_try()
 {
     if ($this->restrict) {
         return;
     }
     validate_sid(false);
     $im_id = (int) getval("im_restore");
     // hent status
     $result = \Kofradia\DB::get()->query("SELECT im_deleted, im_up_id FROM inbox_messages WHERE im_it_id = {$this->id} AND im_id = {$im_id}");
     $row = $result->fetch();
     if (!$row) {
         ess::$b->page->add_message("Fant ikke svaret som skulle bli gjenopprettet.", "error");
         return;
     }
     // er ikke slettet?
     if ($row['im_deleted'] == 0) {
         ess::$b->page->add_message("Svaret er ikke slettet.", "error");
     } else {
         // forsøk å slett svaret
         $a = \Kofradia\DB::get()->exec("UPDATE inbox_messages SET im_deleted = 0 WHERE im_id = {$im_id} AND im_deleted != 0");
         if ($a > 0) {
             ess::$b->page->add_message("Svaret ble gjenopprettet.", "error");
             crewlog::log("player_message_restore", $row['im_up_id'], NULL, array("it_id" => $this->id, "im_id" => $im_id, "it_title" => $this->data_thread['it_title']));
         } else {
             // vi vet svaret finnes, så da må det har blitt gjenopprettet samtidig
             ess::$b->page->add_message("Svaret er ikke slettet.", "error");
         }
     }
     redirect::handle("innboks_les?id={$this->id}&goto={$im_id}");
 }
Beispiel #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();
            }
        }
    }
Beispiel #11
0
    /**
     * Be som sykebil
     */
    protected function sykebil()
    {
        // kan ikke bruke sykebil?
        if ($this->up->data['up_b_id'] == $this->ff->data['br_b_id'] || $this->up->get_energy_percent() >= self::ENERGY_SYKEBIL_REQ) {
            return;
        }
        // bekreftet?
        if (isset($_POST['confirm']) && validate_sid()) {
            // ikke bekreftet?
            if (!isset($_POST['c'])) {
                ess::$b->page->add_message("Du må bekrefte at du mister 25 % rank for å kunne benytte deg av alternativet.", "error");
            } else {
                if (!$this->form->validateHashOrAlert(null, "Sykehus")) {
                    return;
                }
                // sett ned ranken
                $p = round($this->up->data['up_points'] * 0.25);
                $this->up->increase_rank(-$p, false);
                // flytt til korrekt bydel
                \Kofradia\DB::get()->exec("UPDATE users_players SET up_b_id = {$this->ff->data['br_b_id']}, up_b_time = " . time() . " WHERE up_id = " . $this->up->id);
                $this->up->data['up_b_id'] = $this->ff->data['br_b_id'];
                unset($this->up->bydel);
                // gi  melding
                ess::$b->page->add_message("Du ble hentet av en sykebil og ble fraktet til <b>" . htmlspecialchars($this->up->bydel['name']) . "</b>. Du kan nå kjøpe energi hos sykehuset. Du mistet " . game::format_num($p) . " poeng (" . game::format_rank($p) . " rank).");
                putlog("DF", "%c4%bSYKEBIL:%b%c " . $this->up->data['up_name'] . " benyttet seg av sykebil og mistet " . game::format_number($p) . " rankpoeng. " . $this->up->generate_minside_url());
                redirect::handle();
            }
        }
        echo '
<div class="bg1_c xsmall">
	<h1 class="bg1">Sykehus<span class="left2"></span><span class="right2"></span></h1>
	<div class="bg1">
		<boxes />
		<p class="c"><a href="./?ff_id=' . $this->ff->id . '">Tilbake</a></p>
		<p>Du har svært lite energi. Hvis du føler du står i fare for å dø og ikke har nok energi for å reise via bydeler, kan du få en sykebil til å hente deg.</p>
		<p>Når du blir hentet av en sykebil, vil du bli fraktet til bydelen sykehuset befinner seg i uten å miste noe helse eller energi. Du vil deretter kunne utføre alternativene for å få energi.</p>
		<p>Ved å benytte seg av dette alternativet <b>må du ofre 25 % av din totale rank</b>.</p>
		<form action="" method="post">
			<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
			<input type="hidden" name="sykebil" />
			' . $this->form->getHTMLInput() . '
			<p class="c"><input type="checkbox" id="sykebil_c" name="c" /><label for="sykebil_c"> Jeg bekrefter at jeg mister 25 % av min rank</label></p>
			<p class="c">' . show_sbutton("Be om sykebil", 'name="confirm"') . '</p>
		</form>
		<p class="c"><a href="./?ff_id=' . $this->ff->id . '">Tilbake</a></p>
	</div>
</div>';
        return true;
    }
Beispiel #12
0
    /**
     * Vis statistikk for FF
     */
    protected function stats()
    {
        ess::$b->page->add_title("Statistikk");
        redirect::store("banken?ff_id={$this->ff->id}&stats");
        // nullstille?
        if (isset($_GET['reset'])) {
            // bekreftet?
            if (isset($_POST['confirm']) && validate_sid()) {
                $this->ff->reset_bank_stats();
                ess::$b->page->add_message("Statistikken ble nullstilt.");
                redirect::handle();
            }
            // vis skjema for å bekrefte
            echo '
<div class="bg1_c xxsmall">
	<h1 class="bg1">Nullstille Statistikk<span class="left"></span><span class="right"></span></h1>
	<div class="bg1">
		<p>Du er i ferd med å nullstille statistikken over pengeflyten i ' . $this->ff->type['refobj'] . '.</p>
		<p>Når du nullstiller statistikken vil du beholde en totaloversikt fra ' . $this->ff->type['refobj'] . ' ble opprettet og frem til nå.</p>
		<p>Etter at statistikken blir nullstilt vil det være to oversikter, som hver viser statistikk før og etter nullstillingen.</p>
		<p>Det kan kanskje være ønskelig å ta en kopi av statistikken nå for å kunne sammenlikne senere.</p>
		<form action="" method="post">
			<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
			<p class="c">' . show_sbutton("Ja, nullstill statistikk", 'name="confirm"') . '</p>
			<p class="c"><a href="banken?ff_id=' . $this->ff->id . '&amp;stats">Avbryt</a></p>
		</form>
	</div>
</div>';
            $this->ff->load_page();
        }
        // har vi nullstilt?
        $reset = $this->ff->data['ff_money_reset_time'] ?: null;
        // sett opp data
        $stats = array(ff::BANK_INNSKUDD => 0, ff::BANK_UTTAK => 0, ff::BANK_DONASJON => 0, ff::BANK_BETALING => 0, ff::BANK_TILBAKEBETALING => 0, "in" => 0, "out" => 0);
        $stats = array("before" => $stats, "after" => $stats);
        ess::$b->page->add_css('
.ff_bank_tot { font-weight: bold; color: #555; border-bottom: 1px solid #333333; margin-bottom: 2px; padding-bottom: 2px }
.ff_bank_profit { font-weight: bold; color: #888; border-bottom: 2px solid #333333; padding-bottom: 2px }');
        // hent statistikk
        $this->stats_get($stats['before'], $reset);
        $this->stats_get($stats['after'], $reset, true);
        echo '
<div class="bg1_c xsmall">
	<h1 class="bg1">Statistikk over pengeflyt i ' . $this->ff->type['refobj'] . '<span class="left"></span><span class="right"></span></h1>
	<div class="bg1">';
        if ($reset) {
            echo '
		<p>Statistikken ble nullstilt ' . ess::$b->date->get($reset)->format() . '. Etter dette tidspunktet er følgende gjeldende:</p>';
        }
        $this->stats_show($stats['after']);
        if ($reset) {
            echo '
		<p>Før statistikken ble nullstilt:</p>';
            $this->stats_show($stats['before']);
        }
        echo '
		<p>Fortjenesten tar ikke med innskudd og uttak.</p>
		<p class="c"><a href="banken?ff_id=' . $this->ff->id . '">Tilbake</a> | <a href="banken?ff_id=' . $this->ff->id . '&amp;stats&amp;reset">Nullstill statistikk</a></p>
	</div>
</div>';
        $this->ff->load_page();
    }