/** * 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 bool $attachments True if discussion contains attachments * @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 * @param int $asmoderator values are ASMODERATOR_NO, ASMODERATOR_IDENTIFY or ASMODERATOR_ANON * @param array $tags array of tags to add to a discussion * @return array Array with 2 elements ($discussionid, $postid) */ public function create_discussion($groupid, $subject, $message, $format, $attachments = false, $mailnow = false, $timestart = 0, $timeend = 0, $locked = false, $sticky = false, $userid = 0, $log = true, $asmoderator = self::ASMODERATOR_NO, $tags = null) { global $DB, $CFG; require_once $CFG->dirroot . '/tag/lib.php'; $userid = mod_forumng_utils::get_real_userid($userid); // Prepare discussion object $discussionobj = new StdClass(); $discussionobj->forumngid = $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 $transaction = $DB->start_delegated_transaction(); $discussionobj->id = $DB->insert_record('forumng_discussions', $discussionobj); $newdiscussion = new mod_forumng_discussion($this, $discussionobj, false, -1); // Create initial post. $postid = $newdiscussion->create_root_post($subject, $message, $format, $attachments, $mailnow, $userid, $asmoderator); // Update discussion so that it contains the post id $changes = new StdClass(); $changes->id = $discussionobj->id; $changes->postid = $postid; $changes->lastpostid = $postid; $DB->update_record('forumng_discussions', $changes); $newdiscussion->log('add discussion'); if (self::search_installed()) { mod_forumng_post::get_from_id($postid, $this->get_course_module_id())->search_update(); } // If tags add to tag_instance records. if ($tags != null) { tag_set('forumng_discussions', $discussionobj->id, $tags, 'mod_forumng', $this->context->id); } $transaction->allow_commit(); return array($newdiscussion->get_id(), $postid); }