/** * Constructs draft post. * @param object $draftfields Fields from query_drafts query */ private function __construct($draftfields) { $draftfields->replytouser = forum_utils::extract_subobject($draftfields, 'u_'); $this->draftfields = $draftfields; }
/** * * @param forum $forum Forum * @param object $cm Course-module object * @param object $context Context object * @param object $course Course object */ function next_forum(&$forum, &$cm, &$context, &$course) { // Skip if required to get to new forum while ($this->forum != null) { $this->next_discussion($discussion); } // Get record if ($this->storedrecord) { $record = $this->storedrecord; $this->storedrecord = null; } else { if (!$this->rs) { // Already used entire list and closed recordset return false; } else { $record = rs_fetch_next_record($this->rs); if (!$record) { // End of the line. Mark everything as mailed $this->mark_mailed($this->time); rs_close($this->rs); $this->rs = null; return false; } } } // Set data $this->storedrecord = clone $record; $cm = forum_utils::extract_subobject($record, 'cm_'); $course = forum_utils::extract_subobject($record, 'c_'); $context = forum_utils::extract_subobject($record, 'x_'); $forum = new forum($course, $cm, $context, forum_utils::extract_subobject($record, 'f_')); if ($forum->is_shared()) { $forum->set_clone_reference($record->cloneid); $cm = $forum->get_course_module(); $course = $forum->get_course(); $context = $forum->get_context(); } $this->forum = $forum; return true; }
/** * Obtains all flagged post in this forum by the given or current user, * in reverse data order (of when they were flagged). * @param int $userid User whose flags will be retrieved; 0 = current * @return array Array of forum_post objects */ public function get_flagged_posts($userid = 0) { // Get all flagged posts. Note that we request the discussion row as // well, this is necessary (a) so we can include its forumid field in // the query, and (b) because we will use that data to construct // basic discussion objects (without having to do another query). $records = forum_post::query_posts('fd.forumid = ' . $this->get_id() . ' AND ff.flagged IS NOT NULL AND fp.deleted = 0', 'ff.flagged DESC', false, true, false, $userid, true, true); // Construct post object for each one $result = array(); foreach ($records as $record) { // Get discussion details from record $discussionfields = forum_utils::extract_subobject($record, 'fd_'); $discussion = new forum_discussion($this, $discussionfields, false, -1); // Create post object $post = new forum_post($discussion, $record); $result[$record->id] = $post; } return $result; }
/** * Obtains a list of everybody who has read this discussion (only works * if the discussion is within the 'read' period). The list is in date order * (most recent first). Each returned item has ->time (time last read) and * ->user (Moodle user object) fields. * @param int $groupid Group ID or forum::ALL_GROUPS * @return array Array of information about readers */ public function get_readers($groupid = forum::ALL_GROUPS) { global $CFG; $context = $this->get_forum()->get_context(); // Create comma separated list of context ids $context_ids = str_replace('/', ',', substr($context->path, 1)); $id = $this->discussionfields->id; $groupjoin = $groupquery = ''; $groupwhere = ''; if ($groupid) { $groupjoin = " INNER JOIN {$CFG->prefix}groups_members gm ON gm.userid=fr.userid\n INNER JOIN {$CFG->prefix}groups g ON gm.groupid = g.id"; $groupwhere = " AND g.id={$groupid}"; } $result = get_records_sql("\nSELECT\n fr.id,\n " . forum_utils::select_username_fields('u', false) . ",\n fr.time,\n u.idnumber AS u_idnumber\nFROM\n {$CFG->prefix}forumng_read fr\n INNER JOIN {$CFG->prefix}user u ON u.id = fr.userid\n {$groupjoin}\nWHERE\n fr.discussionid = {$id}\n {$groupquery}\n AND fr.userid in(SELECT userid FROM {$CFG->prefix}role_assignments ra \n WHERE ra.contextid in({$context_ids})AND ra.roleid in ({$CFG->forumng_monitorroles}))\n {$groupwhere}\nORDER BY\n fr.time DESC"); $result = $result ? $result : array(); foreach ($result as $item) { $item->user = forum_utils::extract_subobject($item, 'u_'); } return $result; }
/** * @param forum_discussion $discussion Discussion object * @param object $postfields Post fields from DB table (may also include * some extra fields provided by forum_post::query_posts) * @param forum_post $parentpost Parent post or null if this is root post, * or PARENT_NOT_LOADED if not available */ function __construct($discussion, $postfields, $parentpost = self::PARENT_NOT_LOADED) { $this->discussion = $discussion; $this->postfields = $postfields; // Extract the user details into Moodle user-like objects if (property_exists($postfields, 'u_id')) { $postfields->user = forum_utils::extract_subobject($postfields, 'u_'); $postfields->edituser = forum_utils::extract_subobject($postfields, 'eu_'); $postfields->deleteuser = forum_utils::extract_subobject($postfields, 'du_'); } $this->parentpost = $parentpost; $this->children = false; }