No title supplied.
";
+ }
+ else if (strlen($_POST["title"]) == 0)
+ {
+ $hasErrors = true;
+ $errors .= "You cannot have an empty title.
";
+ }
+ else if (strlen(mysql_real_escape_string(html_escape($_POST["title"]))) > 255)
+ {
+ $hasErrors = true;
+ $errors .= "Your title is too long.
";
+ }
+
+ if (!array_key_exists("message", $_POST))
+ {
+ $hasErrors = true;
+ $errors .= "No message supplied.
";
+ }
+ else if (strlen($_POST["message"]) == 0)
+ {
+ $hasErrors = true;
+ $errors .= "You cannot have an empty message.
";
+ }
+
+ return array($hasErrors, $errors);
+ }
+ private function valid_values_for_new_post()
+ {
+ $hasErrors = false;
+
+ $errors = "";
+ if (!array_key_exists("threadID", $_POST))
+ {
+ $hasErrors = true;
+ $errors = "No thread ID supplied.
";
+ }
+ else if (strlen($_POST["threadID"]) == 0)
+ {
+ $hasErrors = true;
+ $errors = "No thread ID supplied.
";
+ }
+ else if (is_numeric($_POST["threadID"]))
+
+ if (!array_key_exists("message", $_POST))
+ {
+ $hasErrors = true;
+ $errors .= "No message supplied.
";
+ }
+ else if (strlen($_POST["message"]) == 0)
+ {
+ $hasErrors = true;
+ $errors .= "You cannot have an empty message.
";
+ }
+
+ return array($hasErrors, $errors);
+ }
+ private function get_thread_title($threadID)
+ {
+ global $database;
+ $result = $database->get_row("SELECT t.title FROM forum_threads AS t WHERE t.id = ? ", array($threadID));
+ return $result["title"];
+ }
+
+ private function show_last_threads(Page $page, $event, $showAdminOptions = false)
+ {
+ global $config, $database;
+ $pageNumber = $event->get_arg(1);
+ if(is_null($pageNumber) || !is_numeric($pageNumber))
+ $pageNumber = 0;
+ else if ($pageNumber <= 0)
+ $pageNumber = 0;
+ else
+ $pageNumber--;
+
+ $threadsPerPage = $config->get_int('forumThreadsPerPage', 15);
+
+ $threads = $database->get_all(
+ "SELECT f.id, f.sticky, f.title, f.date, f.uptodate, u.name AS user_name, u.email AS user_email, u.admin AS user_admin, sum(1) - 1 AS response_count ".
+ "FROM forum_threads AS f ".
+ "INNER JOIN users AS u ".
+ "ON f.user_id = u.id ".
+ "INNER JOIN forum_posts AS p ".
+ "ON p.thread_id = f.id ".
+ "GROUP BY f.id, f.sticky, f.title, f.date, u.name, u.email, u.admin ".
+ "ORDER BY f.sticky ASC, f.uptodate DESC LIMIT ?, ?"
+ , array($pageNumber * $threadsPerPage, $threadsPerPage)
+ );
+
+ $totalPages = ceil($database->db->GetOne("SELECT COUNT(*) FROM forum_threads") / $threadsPerPage);
+
+ $this->theme->display_thread_list($page, $threads, $showAdminOptions, $pageNumber + 1, $totalPages);
+ }
+
+ private function show_posts($event, $showAdminOptions = false)
+ {
+ global $config, $database, $user;
+
+ $threadID = $event->get_arg(1);
+ $pageNumber = $event->get_arg(2);
+ if(is_null($pageNumber) || !is_numeric($pageNumber))
+ $pageNumber = 0;
+ else if ($pageNumber <= 0)
+ $pageNumber = 0;
+ else
+ $pageNumber--;
+
+ $postsPerPage = $config->get_int('forumPostsPerPage', 15);
+
+ $posts = $database->get_all(
+ "SELECT p.id, p.date, p.message, u.name as user_name, u.email AS user_email, u.admin AS user_admin ".
+ "FROM forum_posts AS p ".
+ "INNER JOIN users AS u ".
+ "ON p.user_id = u.id ".
+ "WHERE thread_id = ? ".
+ "ORDER BY p.date ASC ".
+ "LIMIT ?, ? "
+ , array($threadID, $pageNumber * $postsPerPage, $postsPerPage)
+ );
+
+ $totalPages = ceil($database->db->GetOne("SELECT COUNT(*) FROM forum_posts WHERE thread_id = ?", array($threadID)) / $postsPerPage);
+
+ $threadTitle = $this->get_thread_title($threadID);
+
+ $this->theme->display_thread($posts, $showAdminOptions, $threadTitle, $threadID, $pageNumber + 1, $totalPages);
+ }
+
+ private function save_new_thread($user)
+ {
+ $title = mysql_real_escape_string(html_escape($_POST["title"]));
+ $sticky = html_escape($_POST["sticky"]);
+
+ if($sticky == ""){
+ $sticky = "N";
+ }
+
+ global $database;
+ $database->execute("
+ INSERT INTO forum_threads
+ (title, sticky, user_id, date, uptodate)
+ VALUES
+ (?, ?, ?, now(), now())",
+ array($title, $sticky, $user->id));
+
+ $result = $database->get_row("SELECT LAST_INSERT_ID() AS threadID", array());
+
+ log_info("forum", "Thread {$result["threadID"]} created by {$user->name}");
+
+ return $result["threadID"];
+ }
+
+ private function save_new_post($threadID, $user)
+ {
+ global $config;
+ $userID = $user->id;
+ $message = mysql_real_escape_string(html_escape($_POST["message"]));
+
+ $max_characters = $config->get_int('forumMaxCharsPerPost');
+ $message = substr($message, 0, $max_characters);
+
+ global $database;
+ $database->execute("INSERT INTO forum_posts
+ (thread_id, user_id, date, message)
+ VALUES
+ (?, ?, now(), ?)"
+ , array($threadID, $userID, $message));
+
+ $result = $database->get_row("SELECT LAST_INSERT_ID() AS postID", array());
+
+ log_info("forum", "Post {$result["postID"]} created by {$user->name}");
+
+ $database->execute("UPDATE forum_threads SET uptodate=now() WHERE id=?", array ($threadID));
+ }
+
+ private function retrieve_posts($threadID, $pageNumber)
+ {
+ global $database, $config;
+ $postsPerPage = $config->get_int('forumPostsPerPage', 15);
+
+ return $database->get_all(
+ "SELECT p.id, p.date, p.message, u.name as user_name, u.email AS user_email, u.admin AS user_admin ".
+ "FROM forum_posts AS p ".
+ "INNER JOIN users AS u ".
+ "ON p.user_id = u.id ".
+ "WHERE thread_id = ? ".
+ "ORDER BY p.date ASC ".
+ "LIMIT ?, ? "
+ , array($threadID, ($pageNumber - 1) * $postsPerPage, $postsPerPage));
+ }
+
+ private function delete_thread($threadID)
+ {
+ global $database;
+ $database->execute("DELETE FROM forum_threads WHERE id = ?", array($threadID));
+ $database->execute("DELETE FROM forum_posts WHERE thread_id = ?", array($threadID));
+ }
+
+ private function delete_post($postID)
+ {
+ global $database;
+ $database->execute("DELETE FROM forum_posts WHERE id = ?", array($postID));
+ }
+}
+?>
diff --git a/contrib/forum/theme.php b/contrib/forum/theme.php
index d31490e9..d3c83f41 100644
--- a/contrib/forum/theme.php
+++ b/contrib/forum/theme.php
@@ -1,229 +1,229 @@
-make_thread_list($threads, $showAdminOptions);
-
- $page->set_title(html_escape("Forum"));
- $page->set_heading(html_escape("Forum"));
- $page->add_block(new Block("Forum", $html, "main", 10));
-
- $this->display_paginator($page, "forum/index", null, $pageNumber, $totalPages);
- }
-
-
-
- public function display_new_thread_composer(Page $page, $threadText = null, $threadTitle = null)
- {
- global $config, $user;
- $max_characters = $config->get_int('forumMaxCharsPerPost');
- $postUrl = make_link("forum/create");
- $html = '".
- "".
- "User | ".
- "Message | ".
- "
";
-
- foreach ($posts as $post)
- {
- $message = $post["message"];
-
- $tfe = new TextFormattingEvent($message);
- send_event($tfe);
- $message = $tfe->formatted;
-
- $message = str_replace('\n\r', '
', $message);
- $message = str_replace('\r\n', '
', $message);
- $message = str_replace('\n', '
', $message);
- $message = str_replace('\r', '
', $message);
-
- $message = stripslashes($message);
-
- $user = "".$post["user_name"]."";
-
- $poster = User::by_name($post["user_name"]);
- $gravatar = $poster->get_avatar_html();
-
- $oe = ($n++ % 2 == 0) ? "even" : "odd";
-
- if ($post["user_admin"] == "Y") {
- $rank = "admin";
- } else {
- $rank = "user";
- }
-
- $postID = $post['id'];
-
- //if($user->is_admin()){
- //$delete_link = "Delete";
- //} else {
- //$delete_link = "";
- //}
-
- if($showAdminOptions){
- $delete_link = "Delete";
- }else{
- $delete_link = "";
- }
-
- $html .= "".
- "".$user." ".$rank." ".$gravatar." | ".
- "".$message." | "."
-
- ".autodate($post["date"])." |
- ".$delete_link." |
-
";
-
- }
-
- $html .= "
";
-
- $this->display_paginator($page, "forum/view/".$threadID, null, $pageNumber, $totalPages);
-
- $page->set_title(html_escape($threadTitle));
- $page->set_heading(html_escape($threadTitle));
- $page->add_block(new Block("Thread", $html, "main", 20));
-
- }
-
-
-
- public function add_actions_block(Page $page, $threadID)
- {
- $html = '".
+ "".
+ "User | ".
+ "Message | ".
+ "
";
+
+ foreach ($posts as $post)
+ {
+ $message = $post["message"];
+
+ $tfe = new TextFormattingEvent($message);
+ send_event($tfe);
+ $message = $tfe->formatted;
+
+ $message = str_replace('\n\r', '
', $message);
+ $message = str_replace('\r\n', '
', $message);
+ $message = str_replace('\n', '
', $message);
+ $message = str_replace('\r', '
', $message);
+
+ $message = stripslashes($message);
+
+ $user = "".$post["user_name"]."";
+
+ $poster = User::by_name($post["user_name"]);
+ $gravatar = $poster->get_avatar_html();
+
+ $oe = ($n++ % 2 == 0) ? "even" : "odd";
+
+ if ($post["user_admin"] == "Y") {
+ $rank = "admin";
+ } else {
+ $rank = "user";
+ }
+
+ $postID = $post['id'];
+
+ //if($user->is_admin()){
+ //$delete_link = "Delete";
+ //} else {
+ //$delete_link = "";
+ //}
+
+ if($showAdminOptions){
+ $delete_link = "Delete";
+ }else{
+ $delete_link = "";
+ }
+
+ $html .= "".
+ "".$user." ".$rank." ".$gravatar." | ".
+ "".$message." | "."
+
+ ".autodate($post["date"])." |
+ ".$delete_link." |
+
";
+
+ }
+
+ $html .= "
";
+
+ $this->display_paginator($page, "forum/view/".$threadID, null, $pageNumber, $totalPages);
+
+ $page->set_title(html_escape($threadTitle));
+ $page->set_heading(html_escape($threadTitle));
+ $page->add_block(new Block("Thread", $html, "main", 20));
+
+ }
+
+
+
+ public function add_actions_block(Page $page, $threadID)
+ {
+ $html = '