* Forhåndsvisning av forumtråd * * Inndata: * - topic_id [optional] * - text */ require "../../../app/ajax.php"; ajax::require_user(); // kontroller lås ajax::validate_lock(true); global $_base, $_game; // sett opp tekst $text = postval("text"); if (empty($text)) { $text = "Mangler innhold."; } // forhåndsviser vi en redigert forumtråd? if (isset($_POST['topic_id'])) { // hent forumtråden $topic = new \Kofradia\Forum\TopicAjax($_POST['topic_id']); // sett opp data $data = $topic->extended_info(); $data['ft_text'] = $text; $data['ft_last_edit'] = time(); $data['ft_last_edit_up_id'] = login::$user->player->id; } else { // sett opp data $data = array("ft_text" => $text); } ajax::html(parse_html(\Kofradia\Forum\Category::template_topic_preview($data)));
/** * 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(); }
/** * Skjema for å opprette ny tråd */ protected function show() { // kontroller rankkravet if (!$this->forum->check_rank()) { // sett opp ranknavnet $rank_info = game::$ranks['items_number'][\Kofradia\Forum\Category::TOPIC_MIN_RANK]; echo ' <div class="bg1_c xsmall"> <h1 class="bg1">Ny forumtråd i ' . htmlspecialchars($this->forum->get_name()) . '<span class="left"></span><span class="right"></span></h1> <p class="h_left"><a href="forum?id=' . $this->forum->id . '">« Tilbake</a></p> <div class="bg1"> <div class="error_box" style="padding: 10px 0"> <p>Du har for lav rank for å kunne opprette forumtråder i forumet.</p> <p>For å kunne opprette en ny forumtråd må du ha nådd ranken <b>' . htmlspecialchars($rank_info['name']) . '</b>.</p> <p>Se også <a href="' . ess::$s['relative_path'] . '/node/5">hjelp</a>.</p> <p><a href="forum?id=' . $this->forum->id . '">Tilbake</a></p> </div> </div> </div>'; return; } // kontroller blokkeringer $block = $this->forum->check_block(); // opprette forumtråden? if (!$block && isset($_POST['opprett'])) { $title = postval("title"); $text = postval("text"); // type forumtråd og låst/ulåst $type = NULL; $locked = NULL; if ($this->forum->fmod) { $type = postval("type"); $locked = isset($_POST['locked']); } // forsøk å opprett forumtråden $this->forum->add_topic($title, $text, $type, $locked); } echo ' <div class="bg1_c forumw forumnewtopic"> <h1 class="bg1">Ny forumtråd i ' . htmlspecialchars($this->forum->get_name()) . '<span class="left"></span><span class="right"></span></h1> <p class="h_left"><a href="forum?id=' . $this->forum->id . '">« Tilbake</a></p> <div class="bg1"> <boxes /> <div id="topic_info_add"></div> <div class="forum_reply_edit_c"> <form action="" method="post"> <dl class="dl_2x"> <dt>Tittel</dt> <dd> <input type="text" name="title" id="topic_title" class="styled w300" value="' . htmlspecialchars(postval("title")) . '" maxlength="40" />'; if ($this->forum->fmod) { $type = intval(postval("type")); echo ' <select name="type" id="topic_type"> <option value="1"' . ($type == 1 ? ' selected="selected"' : '') . '>Normal forumtråd</option> <option value="2"' . ($type == 2 ? ' selected="selected"' : '') . '>Sticky forumtråd</option> <option value="3"' . ($type == 3 ? ' selected="selected"' : '') . '>Viktig forumtråd</option> </select> </dd> <dt>Låst</dt> <dd><input type="checkbox" name="locked" id="topic_locked"' . (isset($_POST['locked']) ? ' checked="checked"' : '') . ' /><label for="topic_locked"> Lås forumtråden for endringer</label>'; } echo '</dd> <dt>Innhold</dt> <dd><textarea name="text" rows="20" cols="75" id="topic_text">' . htmlspecialchars(postval("text")) . '</textarea></dd> </dl> <p class="c">Husk at <a href="' . ess::$s['relative_path'] . '/node/6" target="_blank">forumreglene</a> til enhver tid skal følges.</p> <p class="c"> ' . show_sbutton("Opprett", 'name="opprett" accesskey="s" id="topic_add"') . ' ' . show_sbutton("Forhåndsvis", 'name="preview" accesskey="p" id="topic_preview"') . ' </p> </form> </div> <div id="topic_info">'; // forhåndsvisning if (isset($_POST['preview'])) { $data = array("ft_text" => postval("text")); echo ' <div class="forum">' . \Kofradia\Forum\Category::template_topic_preview($data) . ' </div>'; } echo ' </div> </div> </div>'; // div javascript ess::$b->page->add_js_file(ess::$s['relative_path'] . "/js/forum.js"); ess::$b->page->add_js_domready(' new NewForumTopic(' . $this->forum->id . ');'); }
<?php require "../base.php"; global $_base; access::no_guest(); // firma/familie? if (isset($_GET['f']) || isset($_GET['fa'])) { #require "f/sok"; die; } // hent forumene og sett opp forumene vi har tilgang til $sections = \Kofradia\Forum\Category::get_forum_list(); $_base->page->add_title("Forum", "Søk"); $forum_mod = access::has("forum_mod"); $allow_deleted = $forum_mod; // hvor man skal kunne søke $search_where = array(1 => array("Alle innlegg", true, true), array("Kun hovedinnlegg", true, false), array("Kun svar", false, true)); $id = requestval("w"); $search_where_id = isset($search_where[$id]) ? $id : 1; // hvilke forum søker vi i? $search_forums = $sections; $search_forums_active = array(); foreach ($_REQUEST as $key => $dummy) { $match = false; if (preg_match("/^s(\\d+)\$/Du", $key, $match)) { if (isset($search_forums[$match[1]])) { $search_forums_active[] = $match[1]; } } } if (count($search_forums_active) == 0) {
<form action="" method="post"> <dl class="dl_2x"> <dt>Innhold</dt> <dd><textarea name="text" rows="20" cols="75">' . htmlspecialchars(postval("text", $reply->info['fr_text'])) . '</textarea></dd> </dl> <p class="c"> ' . show_sbutton("Lagre endringer", 'name="save" accesskey="s"') . ' ' . show_sbutton("Forhåndsvis", 'name="preview" accesskey="p"') . ' </p> </form> </div>'; // forhåndsvise? if (isset($_POST['preview'])) { // sett opp data $data = $reply->extended_info(); $data['ft_text'] = postval("text"); $data['ft_last_edit'] = time(); $data['fr_last_edit_up_id'] = login::$user->player->id; // vis forhåndsvisning echo ' <div class="forum">' . \Kofradia\Forum\Category::template_topic_reply_preview($data) . ' </div>'; } echo ' </div> </div>'; $_base->page->load(); } else { $_base->page->add_message("Ukjent handling."); redirect::handle("forum"); }
<?php // denne siden viser alle forumene require "../base.php"; ess::$b->page->add_title("Forum"); // hent forumene $forum = \Kofradia\Forum\Category::get_forum_list(); echo ' <div class="bg1_c small bg1_padding"> <h1 class="bg1">Forumoversikt<span class="left"></span><span class="right"></span></h1> <div class="bg1">'; if (count($forum) == 0) { // ingen forum echo ' <p>Det finnes ingen forum!</p>'; } else { echo ' <ul>'; foreach ($forum as $row) { echo ' <li><a href="forum?id=' . $row['fse_id'] . '">' . htmlspecialchars($row['name']) . '</a></li>'; } echo ' </ul>'; } echo ' </div> </div>'; ess::$b->page->load();
/** * Legg til ny forumtråd * @param string $title * @param string $text * @param integer $type * @param boolean $locked */ public function add_topic($title, $text, $type = NULL, $locked = NULL) { if (!\login::$logged_in) { throw new \HSNotLoggedIn(); } // kontroller blokkering if ($this->check_block()) { return; } // kontroller rankkrav if (!$this->check_rank()) { $this->add_topic_error_rank(); return; } // kontroller ventetid før nytt forumsvar kan legges til $this->check_timers(); if ($this->wait_topic > 0) { $this->add_topic_error_wait($this->wait_topic); return; } // kontroller tekstlengde (tittel) $title = trim($title); if (mb_strlen($title) < \Kofradia\Forum\Category::TOPIC_TITLE_MIN_LENGTH || mb_strlen($title) > \Kofradia\Forum\Category::TOPIC_TITLE_MAX_LENGTH) { $this->add_topic_error_length_title(); return; } // kontroller tekstlengde (innhold) $text = trim($text); if (\Kofradia\Forum\Category::check_length($text) < \Kofradia\Forum\Category::TOPIC_MIN_LENGTH) { $this->add_topic_error_length(); return; } $set = ''; // sette type if ($type !== NULL) { // kontroller type $type = (int) $type; if ($type < 1 || $type > 3) { $this->add_topic_error_type(); return; } $set .= ", ft_type = {$type}"; } // sette som låst/ulåst if ($locked !== NULL) { $set .= ", ft_locked = " . ($locked ? 1 : 0); } // legg til forumtråden \Kofradia\DB::get()->exec("INSERT INTO forum_topics SET ft_title = " . \Kofradia\DB::quote($title) . ", ft_text = " . \Kofradia\DB::quote($text) . ", ft_time = " . time() . ", ft_up_id = " . \login::$user->player->id . ", ft_fse_id = {$this->id}{$set}"); $topic_id = \Kofradia\DB::get()->lastInsertId(); // oppdater spilleren if ($this->ff) { \Kofradia\DB::get()->exec("UPDATE ff_members SET ffm_forum_topics = ffm_forum_topics + 1 WHERE ffm_up_id = " . \login::$user->player->id . " AND ffm_ff_id = {$this->ff->id}"); \Kofradia\DB::get()->exec("UPDATE users_players SET up_forum_ff_num_topics = up_forum_ff_num_topics + 1 WHERE up_id = " . \login::$user->player->id); } else { \Kofradia\DB::get()->exec("UPDATE users, users_players SET up_forum_num_topics = up_forum_num_topics + 1, u_forum_topic_time = " . time() . " WHERE up_id = " . \login::$user->player->id . " AND u_id = up_u_id"); } // oppdater tid om nødvendig $this->update_change_time(); // logg \Kofradia\Forum\Log::add_topic_added($this, array("ft_id" => $topic_id, "ft_title" => $title, "ft_type" => $type !== NULL ? $type : 1)); // fullført $this->add_topic_complete($topic_id); }
/** * Rediger forumsvaret * @param string $text nytt innhold */ public function edit($text) { if (!\login::$logged_in) { throw new HSNotLoggedIn(); } // kontroller tilgang til forumsvaret if (!$this->require_access()) { return; } // er forumtråden låst? if ($this->topic->info['ft_locked'] != 0 && !$this->topic->forum->fmod) { $this->edit_error_locked(); return; } // kontroller blokkering if ($this->topic->forum->check_block()) { return; } // kontroller tekstlengde $text = trim($text); if (\Kofradia\Forum\Category::check_length($text) < \Kofradia\Forum\Category::REPLY_MIN_LENGTH) { $this->edit_error_length(); return; } // ingen endringer utført? if ($text == $this->info['fr_text']) { $this->edit_error_nochange(); return; } // rediger forumsvaret $a = \Kofradia\DB::get()->exec("UPDATE forum_replies SET fr_text = " . \Kofradia\DB::quote($text) . ", fr_last_edit = " . time() . ", fr_last_edit_up_id = " . \login::$user->player->id . " WHERE fr_id = {$this->id}"); // ble ikke oppdatert? if ($a == 0) { // mest sannsynlig finnes ikke forumsvaret, eller så er det oppdatert to ganger samme sekund med samme innhold av samme bruker $this->edit_error_failed(); return; } $old_data = array("fr_text" => $this->info['fr_text']); // lagre lokale endringer $this->info['fr_text'] = $text; $this->info['fr_last_edit'] = time(); $this->info['fr_last_edit_up_id'] = \login::$user->player->id; // logg \Kofradia\Forum\Log::add_reply_edited($this, $old_data); // fullført $this->edit_complete(); }
/** * Legg til nytt forumsvar * @param string $text * @param boolean $no_concatenate ikke sammenslå med evt. forrige forumsvar * @param boolean $announce annonser på IRC/spilleloggen */ public function add_reply($text, $no_concatenate, $announce) { if (!\login::$logged_in) { throw new HSNotLoggedIn(); } // er forumtråden låst? if ($this->info['ft_locked'] != 0 && !$this->forum->fmod) { $this->add_reply_error_locked(); return; } // er forumtråden slettet? if ($this->info['ft_deleted'] != 0) { $this->add_reply_error_deleted(); return; } // kontroller blokkering if ($this->forum->check_block()) { return; } // kontroller ventetid før nytt forumsvar kan legges til $this->forum->check_timers(); if ($this->forum->wait_reply > 0) { $this->add_reply_error_wait($this->forum->wait_reply); return; } // kontroller tekstlengde $text = trim($text); if (\Kofradia\Forum\Category::check_length($text) < \Kofradia\Forum\Category::REPLY_MIN_LENGTH) { $this->add_reply_error_length(); return; } // sjekk om vi skal sammenslå dette med det siste forumsvaret if (!$no_concatenate) { // hent siste forumsvaret $result = \Kofradia\DB::get()->query("SELECT fr_id, fr_up_id, fr_time FROM forum_replies WHERE fr_ft_id = {$this->id} AND fr_deleted = 0 ORDER BY fr_time DESC LIMIT 1"); $row = $result->fetch(); // fant forumsvar, og tilhører brukeren // forumsvaret er nyere enn 6 timer if ($row && $row['fr_up_id'] == \login::$user->player->id && time() - $row['fr_time'] < 21600) { // slå sammen med dette forumsvaret $text = "\n\n[hr]\n\n{$text}"; \Kofradia\DB::get()->exec("UPDATE forum_replies SET fr_text = CONCAT(fr_text, " . \Kofradia\DB::quote($text) . "), fr_last_edit = " . time() . ", fr_last_edit_up_id = " . \login::$user->player->id . " WHERE fr_id = {$row['fr_id']}"); // annonsere forumsvaret? if ($announce && ($reply = $this->get_reply($row['fr_id']))) { $reply->announce(); } // logg \Kofradia\Forum\Log::add_reply_concatenated($this, $row['fr_id']); $this->add_reply_merged($row['fr_id']); return; } } // legg til som nytt forumsvar \Kofradia\DB::get()->exec("INSERT INTO forum_replies SET fr_time = " . time() . ", fr_up_id = " . \login::$user->player->id . ", fr_text = " . \Kofradia\DB::quote($text) . ", fr_ft_id = {$this->id}"); $reply_id = \Kofradia\DB::get()->lastInsertId(); // oppdater forumtråden med antall forumsvar og siste forumsvar \Kofradia\DB::get()->exec("UPDATE forum_topics SET ft_replies = ft_replies + 1, ft_last_reply = {$reply_id} WHERE ft_id = {$this->id}"); // oppdater spilleren if ($this->forum->ff) { \Kofradia\DB::get()->exec("UPDATE ff_members SET ffm_forum_replies = ffm_forum_replies + 1 WHERE ffm_up_id = " . \login::$user->player->id . " AND ffm_ff_id = {$this->forum->ff->id}"); \Kofradia\DB::get()->exec("UPDATE users_players SET up_forum_ff_num_replies = up_forum_ff_num_replies + 1 WHERE up_id = " . \login::$user->player->id); } else { \Kofradia\DB::get()->exec("UPDATE users, users_players SET up_forum_num_replies = up_forum_num_replies + 1, u_forum_reply_time = " . time() . " WHERE up_id = " . \login::$user->player->id . " AND up_u_id = u_id"); } // annonsere forumsvaret? if ($announce && ($reply = $this->get_reply($reply_id))) { $reply->announce(); } // oppdater tid om nødvendig $this->forum->update_change_time(); // logg \Kofradia\Forum\Log::add_reply_added($this, $reply_id); // fullført $this->add_reply_complete($reply_id); }