/** * 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(); }
/** * 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'] . '&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>'; }
/** * 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(); }
/** * 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); }
/** * 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 «Rank» og «Wanted nivå» 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>'; } }
/** * 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 . '&change_priority&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 . '&change_priority&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 . '&change_priority&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(); }
/** * 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(); }
/** * 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(); }
/** * 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}"); }
/** * 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(); } } }
/** * 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; }
/** * 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 . '&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 . '&stats&reset">Nullstill statistikk</a></p> </div> </div>'; $this->ff->load_page(); }