MDL-66625 forumreport_summary: Adding behat
[moodle.git] / mod / forum / classes / local / entities / post.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * Post class.
19  *
20  * @package    mod_forum
21  * @copyright  2019 Ryan Wyllie <ryan@moodle.com>
22  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
25 namespace mod_forum\local\entities;
27 defined('MOODLE_INTERNAL') || die();
29 use stdClass;
31 /**
32  * Post class.
33  *
34  * @copyright  2019 Ryan Wyllie <ryan@moodle.com>
35  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
36  */
37 class post {
38     /** @var int $id ID */
39     private $id;
40     /** @var int $discussionid The id of the discussion this post belongs to */
41     private $discussionid;
42     /** @var int $parentid The id of the post that this post is replying to. Zero if it isn't a reply. */
43     private $parentid;
44     /** @var int $authorid The id of user who authored the post */
45     private $authorid;
46     /** @var int $timecreated Timestamp for when the post was created */
47     private $timecreated;
48     /** @var int $timemodified Timestamp for when the post last modified */
49     private $timemodified;
50     /** @var bool $mailed If the post has been mailed */
51     private $mailed;
52     /** @var string $subject Post subject */
53     private $subject;
54     /** @var string $message Post message */
55     private $message;
56     /** @var int $messageformat Format of the post message */
57     private $messageformat;
58     /** @var bool $messagetrust Is this a trusted message, i.e. created by a trusted user. */
59     private $messagetrust;
60     /** @var bool $hasattachments Does the post have attachments */
61     private $hasattachments;
62     /** @var int $totalscore Total score */
63     private $totalscore;
64     /** @var bool $mailnow Should this post be mailed immediately */
65     private $mailnow;
66     /** @var bool $deleted Is the post deleted */
67     private $deleted;
68     /** @var int $privatereplyto The user being privately replied to */
69     private $privatereplyto;
71     /**
72      * Constructor.
73      *
74      * @param int $id ID
75      * @param int $discussionid The id of the discussion this post belongs to
76      * @param int $parentid The id of the post that this post is replying to. Zero if it isn't a reply.
77      * @param int $authorid The id of user who authored the post
78      * @param int $timecreated Timestamp for when the post was created
79      * @param int $timemodified Timestamp for when the post last modified
80      * @param bool $mailed If the post has been mailed
81      * @param string $subject Post subject
82      * @param string $message Post message
83      * @param int $messageformat Format of the post message
84      * @param bool $messagetrust Is this a trusted message, i.e. created by a trusted user.
85      * @param bool $hasattachments Does the post have attachments
86      * @param int $totalscore Total score
87      * @param bool $mailnow Should this post be mailed immediately
88      * @param bool $deleted Is the post deleted
89      * @param int $privatereplyto Which user this reply is intended for in a private reply situation
90      */
91     public function __construct(
92         int $id,
93         int $discussionid,
94         int $parentid,
95         int $authorid,
96         int $timecreated,
97         int $timemodified,
98         bool $mailed,
99         string $subject,
100         string $message,
101         int $messageformat,
102         bool $messagetrust,
103         bool $hasattachments,
104         int $totalscore,
105         bool $mailnow,
106         bool $deleted,
107         int $privatereplyto
108     ) {
109         $this->id = $id;
110         $this->discussionid = $discussionid;
111         $this->parentid = $parentid;
112         $this->authorid = $authorid;
113         $this->timecreated = $timecreated;
114         $this->timemodified = $timemodified;
115         $this->mailed = $mailed;
116         $this->subject = $subject;
117         $this->message = $message;
118         $this->messageformat = $messageformat;
119         $this->messagetrust = $messagetrust;
120         $this->hasattachments = $hasattachments;
121         $this->totalscore = $totalscore;
122         $this->mailnow = $mailnow;
123         $this->deleted = $deleted;
124         $this->privatereplyto = $privatereplyto;
125     }
127     /**
128      * Get the post id.
129      *
130      * @return int
131      */
132     public function get_id() : int {
133         return $this->id;
134     }
136     /**
137      * Get the discussion id.
138      *
139      * @return int
140      */
141     public function get_discussion_id() : int {
142         return $this->discussionid;
143     }
145     /**
146      * Get the id of the parent post. Returns zero if this post is not a reply.
147      *
148      * @return int
149      */
150     public function get_parent_id() : int {
151         return $this->parentid;
152     }
154     /**
155      * Does this post have a parent? I.e. is it a reply?
156      *
157      * @return bool
158      */
159     public function has_parent() : bool {
160         return $this->get_parent_id() > 0;
161     }
163     /**
164      * Get the id of the user that authored the post.
165      *
166      * @return int
167      */
168     public function get_author_id() : int {
169         return $this->authorid;
170     }
172     /**
173      * Get the timestamp for when this post was created.
174      *
175      * @return int
176      */
177     public function get_time_created() : int {
178         return $this->timecreated;
179     }
181     /**
182      * Get the timestamp for when this post was last modified.
183      *
184      * @return int
185      */
186     public function get_time_modified() : int {
187         return $this->timemodified;
188     }
190     /**
191      * Has this post been mailed?
192      *
193      * @return bool
194      */
195     public function has_been_mailed() : bool {
196         return $this->mailed;
197     }
199     /**
200      * Get the post subject.
201      *
202      * @return string
203      */
204     public function get_subject() : string {
205         return $this->subject;
206     }
208     /**
209      * Get the post message.
210      *
211      * @return string
212      */
213     public function get_message() : string {
214         return $this->message;
215     }
217     /**
218      * Get the post message format.
219      *
220      * @return int
221      */
222     public function get_message_format() : int {
223         return $this->messageformat;
224     }
226     /**
227      * Is this a trusted message? I.e. was it authored by a trusted user?
228      *
229      * @return bool
230      */
231     public function is_message_trusted() : bool {
232         return $this->messagetrust;
233     }
235     /**
236      * Does this post have attachments?
237      *
238      * @return bool
239      */
240     public function has_attachments() : bool {
241         return $this->hasattachments;
242     }
244     /**
245      * Get the total score.
246      *
247      * @return int
248      */
249     public function get_total_score() : int {
250         return $this->totalscore;
251     }
253     /**
254      * Should this post be mailed now?
255      *
256      * @return bool
257      */
258     public function should_mail_now() : bool {
259         return $this->mailnow;
260     }
262     /**
263      * Is this post deleted?
264      *
265      * @return bool
266      */
267     public function is_deleted() : bool {
268         return $this->deleted;
269     }
271     /**
272      * Is this post private?
273      *
274      * @return bool
275      */
276     public function is_private_reply() : bool {
277         return !empty($this->privatereplyto);
278     }
280     /**
281      * Get the id of the user that this post was intended for.
282      *
283      * @return int
284      */
285     public function get_private_reply_recipient_id() : int {
286         return $this->privatereplyto;
287     }
290     /**
291      * Get the post's age in seconds.
292      *
293      * @return int
294      */
295     public function get_age() : int {
296         return time() - $this->get_time_created();
297     }
299     /**
300      * Check if the given user authored this post.
301      *
302      * @param stdClass $user The user to check.
303      * @return bool
304      */
305     public function is_owned_by_user(stdClass $user) : bool {
306         return $this->get_author_id() == $user->id;
307     }
309     /**
310      * Check if the given post is a private reply intended for the given user.
311      *
312      * @param stdClass $user The user to check.
313      * @return bool
314      */
315     public function is_private_reply_intended_for_user(stdClass $user) : bool {
316         return $this->get_private_reply_recipient_id() == $user->id;
317     }