Esempio n. 1
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);
 }