Ejemplo n.º 1
0
 * 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)));
Ejemplo n.º 2
0
    /**
     * Construct
     */
    public function __construct()
    {
        // endre signatur i forumet
        if (login::$logged_in && (isset($_GET['show_signature']) || isset($_GET['hide_signature']))) {
            if (isset($_GET['show_signature']) && login::$user->data['u_forum_show_signature'] == 0) {
                \Kofradia\DB::get()->exec("UPDATE users SET u_forum_show_signature = 1 WHERE u_id = " . login::$user->id);
            } elseif (isset($_GET['hide_signature']) && login::$user->data['u_forum_show_signature'] == 1) {
                \Kofradia\DB::get()->exec("UPDATE users SET u_forum_show_signature = 0 WHERE u_id = " . login::$user->id);
            }
            redirect::handle(game::address("topic", $_GET, array("show_signature", "hide_signature")));
        }
        // hent forumtråd
        $this->topic = new \Kofradia\Forum\Topic(getval("id"));
        $this->fmod = $this->topic->forum->fmod;
        // sett standard redirect
        redirect::store("topic?id={$this->topic->id}");
        // slette forumtråden?
        if (isset($_POST['delete'])) {
            // forsøk å slette forumtråden
            validate_sid();
            $this->topic->delete();
        }
        // gjenopprette forumtråden?
        if (isset($_POST['restore'])) {
            // forsøk å gjenopprette forumtråden
            validate_sid();
            $this->topic->restore();
        }
        // slette forumsvar?
        if (isset($_GET['delete_reply'])) {
            validate_sid();
            // finn forumsvaret
            if ($reply = $this->topic->get_reply($_GET['delete_reply'])) {
                // forsøk å slett forumsvaret
                $reply->delete();
            } else {
                ess::$b->page->add_message("Fant ikke forumsvaret.", "error");
                redirect::handle();
            }
        }
        // gjenopprette forumsvar?
        if (isset($_GET['restore_reply'])) {
            validate_sid();
            // finn forumsvaret
            if ($reply = $this->topic->get_reply($_GET['restore_reply'])) {
                // forsøk å gjenopprett forumsvaret
                $reply->restore();
            } else {
                ess::$b->page->add_message("Fant ikke forumsvaret.", "error");
                redirect::handle();
            }
        }
        // legge til nytt svar?
        if (isset($_GET['reply']) && isset($_POST['post']) && isset($_POST['text'])) {
            // ikke slå sammen?
            $no_concatenate = isset($_POST['no_concatenate']) && access::has("forum_mod");
            // annonsere?
            $announce = isset($_POST['announce']) && access::has("forum_mod");
            // har vi ingen aktiv spiller?
            if (count(login::$user->lock) == 1 && in_array("player", login::$user->lock)) {
                ess::$b->page->add_message("Du har ingen aktiv spiller.", "error");
                redirect::handle();
            }
            // forsøk å legg til svaret
            $this->topic->add_reply($_POST['text'], $no_concatenate, $announce);
        }
        // den aktuelle siden (sjekk for replyid før vi retter sidetall)
        $pagei = new pagei(pagei::ACTIVE_GET, "p", pagei::PER_PAGE, $this->topic->replies_per_page);
        // sjekk om vi skal vise slettede svar
        if (isset($_GET['show_deleted']) && $this->fmod) {
            $show_deleted = true;
            $deleted = "";
        } else {
            $show_deleted = false;
            $deleted = " AND fr_deleted = 0";
        }
        // skal vi vise status for meldingene?
        $fs_id = 0;
        // skal vi vise et bestemt forumsvar?
        $reply_id = false;
        if (isset($_GET['replyid'])) {
            // hent forumsvaret
            $reply_id = intval($_GET['replyid']);
            $result = \Kofradia\DB::get()->query("SELECT fr_id, fr_deleted FROM forum_replies WHERE fr_ft_id = {$this->topic->id} AND fr_id = {$reply_id}");
            $row = $result->fetch();
            // fant ikke forumsvaret, eller slettet uten tilgang?
            if (!$row || $row['fr_deleted'] != 0 && !$this->fmod) {
                ess::$b->page->add_message("Fant ikke forumsvaret du refererte til.", "error");
                redirect::handle();
            }
            // slettet?
            if ($row['fr_deleted'] != 0 && !$show_deleted) {
                $show_deleted = true;
                $deleted = "";
            }
            // finn ut antall forumsvar før
            $result = \Kofradia\DB::get()->query("SELECT COUNT(fr_id) FROM forum_replies WHERE fr_ft_id = {$this->topic->id} AND fr_id < {$reply_id}{$deleted}");
            $reply_num = $result->fetchColumn(0) + 1;
            // sett opp sidetallet og sett til aktiv side
            $pagei->__construct(pagei::ACTIVE, ceil($reply_num / $this->topic->replies_per_page));
        } elseif (isset($_GET['fs']) && \Kofradia\Forum\Category::$fs_check) {
            // har vi ikke status?
            if (empty($this->topic->info['fs_time'])) {
                // sørg for at vi er på side 1
                if ($pagei->active != 1) {
                    // gå til første side
                    redirect::handle(game::address(PHP_SELF, $_GET, array("p")), redirect::SERVER);
                }
            } else {
                // finn neste forumsvar etter fs_time
                $result = \Kofradia\DB::get()->query("SELECT fr_id FROM forum_replies WHERE fr_ft_id = {$this->topic->id} AND fr_time > {$this->topic->info['fs_time']}{$deleted} ORDER BY fr_time LIMIT 1");
                $row = $result->fetch();
                // fant ikke noe forumsvar?
                if (!$row) {
                    // finn det siste innlegget
                    $result = \Kofradia\DB::get()->query("SELECT fr_id FROM forum_replies WHERE fr_ft_id = {$this->topic->id}{$deleted} ORDER BY fr_time DESC LIMIT 1");
                    $row = $result->fetch();
                }
                // fremdeles ingen forumsvar å gå til?
                if (!$row) {
                    // sørg for at vi er på side 1
                    if ($pagei->active != 1) {
                        // gå til første side
                        redirect::handle(game::address(PHP_SELF, $_GET, array("p")), redirect::SERVER);
                    }
                } else {
                    // finn ut antall forumsvar før det vi skal gå til
                    $result = \Kofradia\DB::get()->query("SELECT COUNT(fr_id) FROM forum_replies WHERE fr_ft_id = {$this->topic->id} AND fr_id < {$row['fr_id']}{$deleted}");
                    $reply_num = $result->fetchColumn(0) + 1;
                    // sett opp sidetallet og kontroller at vi er på riktig side
                    $page = ceil($reply_num / $this->topic->replies_per_page);
                    if ($pagei->active != $page) {
                        // videresend til den riktige siden
                        redirect::handle(game::address(PHP_SELF, $_GET, array("p"), array("p" => $page)), redirect::SERVER);
                    }
                    $fs_id = $row['fr_id'];
                }
            }
        }
        // viser vi slettede meldinger?
        if ($show_deleted) {
            // finn ut hvor mange meldinger som er slettet
            $result = \Kofradia\DB::get()->query("SELECT COUNT(fr_id) FROM forum_replies WHERE fr_ft_id = {$this->topic->id} AND fr_deleted != 0");
            $count = $result->fetchColumn(0);
            ess::$b->page->add_message("Du viser slettede forumsvar. Denne forumtråden har <b>{$count}</b> " . fword("slettet forumsvar", "slettede forumsvar", $count) . ".", NULL, "top");
        }
        // øk visningstelleren hvis vi ikke har besøkt denne forumtråden de siste 10 min
        if (!isset($_SESSION[$GLOBALS['__server']['session_prefix'] . 'forum_topics_visited'][$this->topic->id]) || $_SESSION[$GLOBALS['__server']['session_prefix'] . 'forum_topics_visited'][$this->topic->id] + 600 <= time()) {
            \Kofradia\DB::get()->exec("UPDATE forum_topics SET ft_views = ft_views + 1 WHERE ft_id = {$this->topic->id}");
        }
        // lagre som vist
        $_SESSION[$GLOBALS['__server']['session_prefix'] . 'forum_topics_visited'][$this->topic->id] = time();
        // tittel på siden
        $this->topic->forum->add_title();
        ess::$b->page->add_title($this->topic->info['ft_title']);
        // finn ut antall svar vi har synlige
        if ($show_deleted) {
            $result = \Kofradia\DB::get()->query("SELECT COUNT(fr_id) FROM forum_replies WHERE fr_ft_id = {$this->topic->id}{$deleted}");
            $replies_count = $result->fetchColumn(0);
        } else {
            $replies_count = $this->topic->info['ft_replies'];
        }
        // korriger aktiv side
        $pagei->__construct(pagei::TOTAL, $replies_count);
        // skal vi vise svarskjema?
        $reply_form = login::$logged_in && isset($_GET['reply']) && !$reply_id;
        if ($reply_form) {
            // sørg for at vi er på siste siden
            $pagei->__construct(pagei::ACTIVE_LAST);
        }
        echo '
<div class="bg1_c forumw">
	<h1 class="bg1">' . htmlspecialchars($this->topic->info['ft_title']) . '<span class="left"></span><span class="right"></span></h1>
	<p class="h_left"><a href="forum?id=' . $this->topic->forum->id . '">' . htmlspecialchars($this->topic->forum->get_name()) . '</a></p>
	<p class="h_right">' . ($this->topic->info['ft_locked'] == 1 ? '
		Låst emne!' : '') . (login::$logged_in && $this->topic->info['ft_deleted'] == 0 && ($this->topic->info['ft_locked'] != 1 || $this->fmod) ? '
		<a href="' . htmlspecialchars(game::address(PHP_SELF, $_GET, array("replyid"), array("reply" => true))) . '" class="forum_link_replyform">Opprett svar</a>' : '') . ($this->fmod ? $show_deleted ? '
		<a href="' . htmlspecialchars(game::address(PHP_SELF, $_GET, array("show_deleted", "replyid"))) . '">Skjul slettede svar</a>' : '
		<a href="' . htmlspecialchars(game::address(PHP_SELF, $_GET, array(), array("show_deleted" => true))) . '">Vis slettede svar</a>' : '') . '
	</p>
	<div class="bg1">
<div class="forum" id="forum_topic_container">';
        // vise sidetall øverst?
        if ($pagei->pages > 1) {
            echo '
	<p class="c">' . $pagei->pagenumbers(game::address(PHP_SELF, $_GET, array("p", "replyid", "fs")), game::address(PHP_SELF, $_GET, array("p", "replyid", "fs"), array("p" => "_pageid_"))) . '</p>';
        }
        // hent forumsvar
        $replies = array();
        $up_ids = array();
        $id_list = array();
        $last_time = 0;
        $replies_last_edit = array();
        if ($replies_count > 0) {
            // hent svarene
            $result = \Kofradia\DB::get()->query("\n\t\t\t\tSELECT\n\t\t\t\t\tfr_id, fr_time, fr_up_id, fr_text, fr_deleted, fr_last_edit, fr_last_edit_up_id,\n\t\t\t\t\tup_name, up_access_level, up_forum_signature, up_points, up_profile_image_url,\n\t\t\t\t\tupr_rank_pos,\n\t\t\t\t\tr_time\n\t\t\t\tFROM\n\t\t\t\t\tforum_replies\n\t\t\t\t\tLEFT JOIN users_players ON up_id = fr_up_id\n\t\t\t\t\tLEFT JOIN users_players_rank ON upr_up_id = up_id\n\t\t\t\t\tLEFT JOIN rapportering ON r_type = " . rapportering::TYPE_FORUM_REPLY . " AND r_type_id = fr_id AND r_state < 2\n\t\t\t\tWHERE fr_ft_id = {$this->topic->id}{$deleted}\n\t\t\t\tGROUP BY fr_id\n\t\t\t\tORDER BY fr_time ASC\n\t\t\t\tLIMIT {$pagei->start}, {$pagei->per_page}");
            while ($row = $result->fetch()) {
                $id_list[] = $row['fr_id'];
                $up_ids[] = $row['fr_up_id'];
                $last_time = $row['fr_time'];
                $replies_last_edit[$row['fr_id']] = $row['fr_last_edit'];
                $replies[] = $row;
            }
        }
        // hent inn familierelasjoner
        $up_ids[] = $this->topic->info['ft_up_id'];
        $this->topic->forum->ff_get_familier($up_ids);
        // vis hovedinnlegget
        echo $this->topic->forum->template_topic($this->topic->extended_info());
        // vis forumsvar
        if (count($replies) > 0) {
            // scrolle til første forumsvar på andre enn første side
            if ($pagei->active > 1 && !$reply_form && !$reply_id && !$fs_id) {
                echo '
	<div id="forum_scroll_here"></div>';
            }
            $reply_num = $pagei->per_page * ($pagei->active - 1) + 1;
            foreach ($replies as $row) {
                $row['ft_fse_id'] = $this->topic->forum->id;
                $row['ft_id'] = $this->topic->id;
                $row['reply_num'] = ++$reply_num;
                $row['fs_new'] = \Kofradia\Forum\Category::$fs_check && $this->topic->info['fs_time'] < $row['fr_time'];
                if ($reply_id == $row['fr_id']) {
                    $row['class_extra'] = 'forum_focus';
                }
                if ($reply_id == $row['fr_id'] || $fs_id == $row['fr_id']) {
                    $row['h2_extra'] = 'id="forum_scroll_here"';
                    // vis bokser her
                    if ($reply_id == $row['fr_id'] || $fs_id == $row['fr_id']) {
                        echo '
	<boxes />';
                    }
                }
                // vis html for svaret
                echo $this->topic->forum->template_topic_reply($row);
            }
        }
        // oppdatere sist sett?
        $time = $last_time != 0 ? $last_time : $this->topic->info['ft_time'];
        // legge til?
        if (login::$logged_in && empty($this->topic->info['fs_time'])) {
            \Kofradia\DB::get()->exec("INSERT IGNORE INTO forum_seen SET fs_ft_id = {$this->topic->id}, fs_u_id = " . login::$user->id . ", fs_time = {$time}");
        } elseif (login::$logged_in && $time > $this->topic->info['fs_time']) {
            \Kofradia\DB::get()->exec("UPDATE forum_seen SET fs_time = GREATEST(fs_time, {$time}) WHERE fs_ft_id = {$this->topic->id} AND fs_u_id = " . login::$user->id);
        }
        echo '
</div>';
        // vis svarskjema
        echo '
<div' . ($reply_form ? '' : ' style="display: none"') . ' id="container_reply">' . ($reply_form ? '
	<boxes />' : '') . '
	<form action="' . htmlspecialchars(game::address("topic", $_GET, array("replyid", "fs"), array("reply" => true))) . '" method="post"' . ($reply_form ? ' id="forum_scroll_here"' : '') . '>
		<div class="section forum_reply_edit_c">
			<h2>Svar</h2>
			<dl class="dl_2x">
				<dt>Innhold</dt>
				<dd><textarea name="text" rows="20" cols="75" id="replyText">' . htmlspecialchars(postval("text")) . '</textarea></dd>';
        // vise ekstra alternativer?
        if (access::has("forum_mod") || $this->topic->forum->id >= 5 && $this->topic->forum->id <= 7) {
            $no_concat = isset($_POST['no_concatenate']) || $_SERVER['REQUEST_METHOD'] != "POST" && $this->topic->forum->id >= 5 && $this->topic->forum->id <= 7;
            $announce_text = $this->topic->forum->id >= 5 && $this->topic->forum->id <= 7 ? 'Legg til logg i spilleloggen til medlemmer av Crewet.' : 'Annonser på #kofradia kanalen';
            echo '
				<dt>Ekstra</dt>
				<dd>' . (!$this->topic->forum->ff ? '
					<input type="checkbox" name="announce" id="announce"' . (isset($_POST['announce']) ? ' checked="checked"' : '') . ' /><label for="announce"> ' . $announce_text . '</label><br />' : '') . '
					<input type="checkbox" name="no_concatenate" id="no_concatenate"' . ($no_concat ? ' checked="checked"' : '') . ' /><label for="no_concatenate"> <u>Ikke</u> kombiner sammen med siste melding.</label>
				</dd>';
        }
        echo '
			</dl>
			<p class="c">
				' . show_sbutton("Legg til svar", 'name="post" accesskey="s" id="forum_reply_button_add"') . '
				' . show_sbutton("Forhåndsvis", 'name="preview" accesskey="p" id="forum_reply_button_preview"') . '
			</p>
		</div>
		<div id="reply_preview" class="forum">';
        // forhåndsvise?
        if (login::$logged_in && isset($_POST['preview'])) {
            $data = array("ft_id" => $this->topic->id, "fr_text" => postval("text"), "fr_up_id" => login::$user->player->id, "up_name" => login::$user->player->data['up_name'], "up_access_level" => login::$user->player->data['up_access_level'], "up_points" => login::$user->player->data['up_points'], "upr_rank_pos" => login::$user->player->data['upr_rank_pos'], "up_forum_signature" => login::$user->player->data['up_forum_signature'], "up_profile_image_url" => login::$user->player->data['up_profile_image_url'], "fs_new" => \Kofradia\Forum\Category::$fs_check);
            echo \Kofradia\Forum\Category::template_topic_reply_preview($data);
        }
        echo '</div>
	</form>
</div>';
        // linker i bunn
        if (login::$logged_in) {
            echo '
<form action="" method="post">
	<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
	<div class="forum_footer_links">';
            // slette/gjenopprette lenker
            if ($this->fmod || $this->topic->info['ft_up_id'] == login::$user->player->id) {
                echo '
		<p class="left">' . ($this->topic->info['ft_deleted'] == 0 ? '
			<span class="red">' . show_sbutton("Slett emnet", 'name="delete" onclick="return confirm(\'Sikker?!\')"') . '</span>' : '
			<span class="green">' . show_sbutton("Gjenopprett emnet", 'name="restore" onclick="return confirm(\'Sikker?!\')"') . '</span>') . '
		</p>';
            }
            // alternativer
            echo '
		<p class="right">';
            // reply lenke
            if (!$reply_form && $this->topic->info['ft_deleted'] == 0 && ($this->topic->info['ft_locked'] == 0 || $this->fmod)) {
                echo '
			<a href="' . htmlspecialchars(game::address("topic", $_GET, array("replyid"), array("reply" => true))) . '" class="button forum_link_replyform" accesskey="r">Opprett svar</a>';
            }
            // signatur lenker
            echo login::$user->data['u_forum_show_signature'] == 1 ? '
			<a href="' . htmlspecialchars(game::address("topic", $_GET, array("show_signature"), array("hide_signature" => true))) . '" class="button">Skjul signaturer</a>' : '
			<a href="' . htmlspecialchars(game::address("topic", $_GET, array("hide_signature"), array("show_signature" => true))) . '" class="button">Vis signaturer</a>';
            echo '
		</p>';
        }
        // sidetall
        if ($pagei->pages > 1) {
            echo '
		<p class="center">' . $pagei->pagenumbers(game::address(PHP_SELF, $_GET, array("p", "replyid", "fs", "reply")), game::address(PHP_SELF, $_GET, array("p", "replyid", "fs", "reply"), array("p" => "_pageid_"))) . '</p>';
        }
        echo '
	</div>
</form>
	</div>
</div>';
        // div javascript
        // sørg for at meldingene blir oppdatert og at nye meldinger blr hentet hvis vi er på siste side
        ess::$b->page->add_js_file(ess::$s['relative_path'] . "/js/forum.js");
        ess::$b->page->add_js('
		sm_scripts.report_links();');
        ess::$b->page->add_js_domready('
	var topic = new ForumTopic(' . $this->topic->id . ', ' . js_encode($id_list) . ', ' . js_encode($replies_last_edit) . ', ' . ($pagei->pages == $pagei->active ? 'true' : 'false') . ', ' . ($show_deleted ? 'true' : 'false') . ', ' . ($this->fmod ? 'true' : 'false') . ', ' . (int) $this->topic->info['ft_last_edit'] . ');' . ($reply_form ? '
	topic.reply_form_show();' : ''));
        $this->topic->forum->load_page();
    }
Ejemplo n.º 3
0
    /**
     * 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 . '">&laquo; 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 . '">&laquo; 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 . ');');
    }
Ejemplo n.º 4
0
<?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) {
Ejemplo n.º 5
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");
}
Ejemplo n.º 6
0
<?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();
Ejemplo n.º 7
0
 /**
  * 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);
 }
Ejemplo n.º 8
0
 /**
  * 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();
 }
Ejemplo n.º 9
0
 /**
  * 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);
 }