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