/** * Creates a new discussion in this forum. * @param int $groupid Group ID for the discussion or null if it should show * to all groups * @param string $subject Subject of message * @param string $message Message content * @param int $format Format of message content * @param array $attachments Array of attachment files. These should have * already been checked and renamed etc by a Moodle upload manager. * @param bool $mailnow True to mail ASAP, else false * @param int $timestart Visibility time of discussion (seconds since epoch) or null * @param int $timeend Time at which discussion disappears (seconds since epoch) or null * @param bool $locked True if discussion should be locked * @param bool $sticky True if discussion should be sticky * @param int $userid User ID or 0 for current user * @param bool $log True to log this * @return array Array with 2 elements ($discussionid, $postid) */ public function create_discussion($groupid, $subject, $message, $format, $attachments = array(), $mailnow = false, $timestart = 0, $timeend = 0, $locked = false, $sticky = false, $userid = 0, $log = true) { $userid = forum_utils::get_real_userid($userid); // Prepare discussion object $discussionobj = new StdClass(); $discussionobj->forumid = $this->forumfields->id; $discussionobj->groupid = $groupid == self::ALL_GROUPS || $groupid == self::NO_GROUPS ? null : $groupid; $discussionobj->postid = null; // Temporary until we create that first post $discussionobj->lastpostid = null; $discussionobj->timestart = $timestart; $discussionobj->timeend = $timeend; $discussionobj->deleted = 0; $discussionobj->locked = $locked ? 1 : 0; $discussionobj->sticky = $sticky ? 1 : 0; // Create discussion forum_utils::start_transaction(); $discussionobj->id = forum_utils::insert_record('forumng_discussions', $discussionobj); $newdiscussion = new forum_discussion($this, $discussionobj, false, -1); // Create initial post $postid = $newdiscussion->create_root_post($subject, $message, $format, $attachments, $mailnow, $userid); // Update discussion so that it contains the post id $changes = new StdClass(); $changes->id = $discussionobj->id; $changes->postid = $postid; $changes->lastpostid = $postid; forum_utils::update_record('forumng_discussions', $changes); $newdiscussion->log('add discussion'); if (forum::search_installed()) { forum_post::get_from_id($postid, $this->get_course_module_id())->search_update(); } forum_utils::finish_transaction(); return array($newdiscussion->get_id(), $postid); }