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']);
}
}
|