/** * Given an object containing all the necessary data, * create a new discussion and return the id * * @param object $post * @param mixed $mform * @param string $unused * @param int $userid * @param \mod_hsuforum\upload_file $uploader * @return object */ function hsuforum_add_discussion($discussion, $mform = null, $unused = null, $userid = null, \mod_hsuforum\upload_file $uploader = null) { global $USER, $CFG, $DB; $timenow = time(); if (is_null($userid)) { $userid = $USER->id; } // The first post is stored as a real post, and linked // to from the discuss entry. $forum = $DB->get_record('hsuforum', array('id' => $discussion->forum)); $cm = get_coursemodule_from_instance('hsuforum', $forum->id); $post = new stdClass(); $post->discussion = 0; $post->parent = 0; $post->userid = $userid; $post->created = $timenow; $post->modified = $timenow; $post->mailed = HSUFORUM_MAILED_PENDING; $post->subject = $discussion->name; $post->message = $discussion->message; $post->messageformat = $discussion->messageformat; $post->messagetrust = $discussion->messagetrust; $post->attachments = isset($discussion->attachments) ? $discussion->attachments : null; $post->forum = $forum->id; // speedup $post->course = $forum->course; // speedup $post->mailnow = $discussion->mailnow; $post->reveal = $discussion->reveal; if (!is_null($mform)) { $data = $mform->get_data(); if (!empty($data->reveal)) { $post->reveal = 1; } } $post->id = $DB->insert_record("hsuforum_posts", $post); // TODO: Fix the calling code so that there always is a $cm when this function is called if (!empty($cm->id) && !empty($discussion->itemid)) { // In "single simple discussions" this may not exist yet $context = context_module::instance($cm->id); $text = file_save_draft_area_files($discussion->itemid, $context->id, 'mod_hsuforum', 'post', $post->id, mod_hsuforum_post_form::editor_options($context, null), $post->message); $DB->set_field('hsuforum_posts', 'message', $text, array('id' => $post->id)); } // Now do the main entry for the discussion, linking to this first post $discussion->firstpost = $post->id; $discussion->timemodified = $timenow; $discussion->usermodified = $post->userid; $discussion->userid = $userid; $discussion->assessed = 0; $post->discussion = $DB->insert_record("hsuforum_discussions", $discussion); // Finally, set the pointer on the post. $DB->set_field("hsuforum_posts", "discussion", $post->discussion, array("id" => $post->id)); if (!empty($cm->id)) { hsuforum_add_attachment($post, $forum, $cm, $mform, $unused, $uploader); } hsuforum_mark_post_read($post->userid, $post, $post->forum); // Let Moodle know that assessable content is uploaded (eg for plagiarism detection) if (!empty($cm->id)) { hsuforum_trigger_content_uploaded_event($post, $cm, 'hsuforum_add_discussion'); } return $post->discussion; }
/** * Render a list of posts * * @param \stdClass $cm The forum course module * @param \stdClass $discussion The discussion for the posts * @param \stdClass[] $posts The posts to render * @param bool $canreply * @throws coding_exception * @return string */ public function posts($cm, $discussion, $posts, $canreply = false) { global $USER; $items = ''; $count = 0; if (!empty($posts)) { if (!array_key_exists($discussion->firstpost, $posts)) { throw new coding_exception('Missing discussion post'); } $parent = $posts[$discussion->firstpost]; $items .= $this->post_walker($cm, $discussion, $posts, $parent, $canreply, $count); // Mark post as read. if (empty($parent->postread)) { $forum = hsuforum_get_cm_forum($cm); hsuforum_mark_post_read($USER->id, $parent, $forum->id); } } $output = "<h5 role='heading' aria-level='5'>" . hsuforum_xreplies($count) . "</h5>"; if (!empty($count)) { $output .= "<ol class='hsuforum-thread-replies-list'>" . $items . "</ol>"; } return "<div class='hsuforum-thread-replies'>" . $output . "</div>"; }