/** * 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); }