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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
<?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(): bool
{
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 static function get_latest(): array
{
$sql = "SELECT thread_id FROM threads ORDER BY thread_date_lastpost DESC LIMIT 10";
$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']);
}
}
|