summaryrefslogtreecommitdiff
path: root/includes/model/Thread.php
blob: 95bd3d8166095ddd7473c2e3acdad4e71ff0ca34 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<?php
include_once './includes/Database.php';
include_once './includes/Session.php';
include_once 'Category.php';
include_once 'User.php';
include_once 'Post.php';

class Thread
{
	public $id;
	public $subject;
	public $date_created = 0;
	public $date_lastpost = 0;
	public $category;
	public $author;

	private $has_value = false;

	function __construct($id)
	{
		$sql = "SELECT thread_subject, thread_date_created, thread_date_lastpost, thread_category, thread_author FROM threads WHERE thread_id = ?;";
		$result = Database::get()->query($sql, "i", $id);

		if (empty($result)) {
			return;
		}

		$this->id = $id;
		$this->subject = $result[0]['thread_subject'];
		$this->date_created = $result[0]['thread_date_created'];
		$this->date_lastpost = $result[0]['thread_date_lastpost'];
		$this->category = new Category($result[0]['thread_category']);

		$this->author = new User();
		$this->author->get_by_id($result[0]['thread_author']);

		$this->has_value = true;
	}

	public static function create($subject, $category): int
	{
		if (!Session::get()->is_signed_in()) {
			trigger_error('You must be signed in to create a thread');
			return 0;
		}

		$user = Session::get()->get_current_user();

		// Insert the new thread into the database
		$sql = "INSERT INTO threads(thread_subject, thread_date_created, thread_date_lastpost, thread_category, thread_author) VALUES (?, CONVERT_TZ(NOW(), 'SYSTEM', '+00:00'), CONVERT_TZ(NOW(), 'SYSTEM', '+00:00'), ?, ?);";
		Database::get()->query($sql, "sii", $subject, $category, $user->id);

		// Get the ID of the thread we just created
		$thread_id = Database::get()->get_last_id();

		// Increment the category's thread count
		$sql = "UPDATE categories SET `cat_thread_count` = `cat_thread_count` + '1' WHERE cat_id = ?;";
		Database::get()->query($sql, "i", $category);

		return $thread_id;
	}

	public static function delete($thread)
	{
		// User must be signed in
		if (!Session::get()->is_signed_in()) {
			trigger_error('You must be signed in to delete a thread.');
			return;
		}

		// User must be a moderator to delete a thread
		$current_user = Session::get()->get_current_user();
		if ($current_user->level != USER_LEVEL_MODERATOR) {
			trigger_error("You must be a moderator to delete this post.");
			return;
		}

		// Delete the thread from the database
		Database::get()->query("DELETE FROM threads WHERE thread_id = ?", "i", $thread->id);

		// Decrement the thread count of the category
		Database::get()->query("UPDATE categories SET `cat_thread_count` = `cat_thread_count` - '1' WHERE cat_id = ?", "i", $thread->category->id);
	}

	public function has_value()
	{
		return $this->has_value;
	}

	public static function get_all(): array
	{
		$sql = "SELECT thread_id FROM threads";
		$result = Database::get()->query($sql);

		$threads = array();

		foreach ($result as $row) {
			$thread = new Thread($row['thread_id']);
			if ($thread->has_value())
				array_push($threads, $thread);
		}

		return $threads;
	}

	public function get_posts(): array
	{
		$sql = "SELECT post_id FROM posts WHERE post_thread = ?";
		$result = Database::get()->query($sql, "i", $this->id);

		$posts = array();

		foreach ($result as $row) {
			$post = new Post($row['post_id']);
			if ($post->has_value())
				array_push($posts, $post);
		}

		return $posts;
	}

	public function get_latest_post(): Post
	{
		$sql = "SELECT post_id FROM posts WHERE post_thread = ? ORDER BY post_date_created DESC LIMIT 1";
		$result = Database::get()->query($sql, "i", $this->id);
		return new Post($result[0]['post_id']);
	}
}