Пример #1
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();
 }
Пример #2
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);
 }
Пример #3
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);
 }