See Release Notes
Long Term Support Release
<?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Post class. * * @package mod_forum * @copyright 2019 Ryan Wyllie <ryan@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ namespace mod_forum\local\entities; defined('MOODLE_INTERNAL') || die(); use stdClass; /** * Post class. * * @copyright 2019 Ryan Wyllie <ryan@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class post { /** @var int $id ID */ private $id; /** @var int $discussionid The id of the discussion this post belongs to */ private $discussionid; /** @var int $parentid The id of the post that this post is replying to. Zero if it isn't a reply. */ private $parentid; /** @var int $authorid The id of user who authored the post */ private $authorid; /** @var int $timecreated Timestamp for when the post was created */ private $timecreated; /** @var int $timemodified Timestamp for when the post last modified */ private $timemodified; /** @var bool $mailed If the post has been mailed */ private $mailed; /** @var string $subject Post subject */ private $subject; /** @var string $message Post message */ private $message; /** @var int $messageformat Format of the post message */ private $messageformat; /** @var bool $messagetrust Is this a trusted message, i.e. created by a trusted user. */ private $messagetrust; /** @var bool $hasattachments Does the post have attachments */ private $hasattachments; /** @var int $totalscore Total score */ private $totalscore; /** @var bool $mailnow Should this post be mailed immediately */ private $mailnow; /** @var bool $deleted Is the post deleted */ private $deleted; /** @var int $privatereplyto The user being privately replied to */ private $privatereplyto; /** @var int $wordcount Number of words in the message */ private $wordcount; /** @var int $charcount Number of chars in the message */ private $charcount; /** * Constructor. * * @param int $id ID * @param int $discussionid The id of the discussion this post belongs to * @param int $parentid The id of the post that this post is replying to. Zero if it isn't a reply. * @param int $authorid The id of user who authored the post * @param int $timecreated Timestamp for when the post was created * @param int $timemodified Timestamp for when the post last modified * @param bool $mailed If the post has been mailed * @param string $subject Post subject * @param string $message Post message * @param int $messageformat Format of the post message * @param bool $messagetrust Is this a trusted message, i.e. created by a trusted user. * @param bool $hasattachments Does the post have attachments * @param int $totalscore Total score * @param bool $mailnow Should this post be mailed immediately * @param bool $deleted Is the post deleted * @param int $privatereplyto Which user this reply is intended for in a private reply situation */ public function __construct( int $id, int $discussionid, int $parentid, int $authorid, int $timecreated, int $timemodified, bool $mailed, string $subject, string $message, int $messageformat, bool $messagetrust, bool $hasattachments, int $totalscore, bool $mailnow, bool $deleted, int $privatereplyto, ?int $wordcount, ?int $charcount ) { $this->id = $id; $this->discussionid = $discussionid; $this->parentid = $parentid; $this->authorid = $authorid; $this->timecreated = $timecreated; $this->timemodified = $timemodified; $this->mailed = $mailed; $this->subject = $subject; $this->message = $message; $this->messageformat = $messageformat; $this->messagetrust = $messagetrust; $this->hasattachments = $hasattachments; $this->totalscore = $totalscore; $this->mailnow = $mailnow; $this->deleted = $deleted; $this->privatereplyto = $privatereplyto; $this->wordcount = $wordcount; $this->charcount = $charcount; } /** * Get the post id. * * @return int */ public function get_id() : int { return $this->id; } /** * Get the discussion id. * * @return int */ public function get_discussion_id() : int { return $this->discussionid; } /** * Get the id of the parent post. Returns zero if this post is not a reply. * * @return int */ public function get_parent_id() : int { return $this->parentid; } /** * Does this post have a parent? I.e. is it a reply? * * @return bool */ public function has_parent() : bool { return $this->get_parent_id() > 0; } /** * Get the id of the user that authored the post. * * @return int */ public function get_author_id() : int { return $this->authorid; } /** * Get the timestamp for when this post was created. * * @return int */ public function get_time_created() : int { return $this->timecreated; } /** * Get the timestamp for when this post was last modified. * * @return int */ public function get_time_modified() : int { return $this->timemodified; } /** * Has this post been mailed? * * @return bool */ public function has_been_mailed() : bool { return $this->mailed; } /** * Get the post subject. * * @return string */ public function get_subject() : string { return $this->subject; } /** * Get the post message. * * @return string */ public function get_message() : string { return $this->message; } /** * Get the post message format. * * @return int */ public function get_message_format() : int { return $this->messageformat; } /** * Is this a trusted message? I.e. was it authored by a trusted user? * * @return bool */ public function is_message_trusted() : bool { return $this->messagetrust; } /** * Does this post have attachments? * * @return bool */ public function has_attachments() : bool { return $this->hasattachments; } /** * Get the total score. * * @return int */ public function get_total_score() : int { return $this->totalscore; } /** * Should this post be mailed now? * * @return bool */ public function should_mail_now() : bool { return $this->mailnow; } /** * Is this post deleted? * * @return bool */ public function is_deleted() : bool { return $this->deleted; } /** * Is this post private? * * @return bool */ public function is_private_reply() : bool { return !empty($this->privatereplyto); } /** * Get the id of the user that this post was intended for. * * @return int */ public function get_private_reply_recipient_id() : int { return $this->privatereplyto; } /** * Get the post's age in seconds. * * @return int */ public function get_age() : int { return time() - $this->get_time_created(); } /** * Check if the given user authored this post. * * @param stdClass $user The user to check. * @return bool */ public function is_owned_by_user(stdClass $user) : bool { return $this->get_author_id() == $user->id; } /** * Check if the given post is a private reply intended for the given user. * * @param stdClass $user The user to check. * @return bool */ public function is_private_reply_intended_for_user(stdClass $user) : bool { return $this->get_private_reply_recipient_id() == $user->id; } /** * Returns the word count. * * @return int|null */ public function get_wordcount() : ?int { return $this->wordcount; } /** * Returns the char count. * * @return int|null */ public function get_charcount() : ?int { return $this->charcount; } /** * This methods adds/updates forum posts' word count and char count attributes based on $data->message. * * @param \stdClass $record A record ready to be inserted / updated in DB. * @return void. */ public static function add_message_counts(\stdClass $record) : void { if (!empty($record->message)) {< $record->wordcount = count_words($record->message); < $record->charcount = count_letters($record->message);> $record->wordcount = count_words($record->message, $record->messageformat); > $record->charcount = count_letters($record->message, $record->messageformat);} } }