/** * Get search results. * @param object $forum * @param int $groupid * @param string $author * @param int $daterangefrom * @param int $daterangeto * @param int $page * @param int $resultsperpage (FORUMNG_SEARCH_RESULTSPERPAGE used as constant) * @return object */ function forumng_get_results_for_this_forum($forum, $groupid, $author = null, $daterangefrom = 0, $daterangeto = 0, $page, $asmoderator = false, $resultsperpage = FORUMNG_SEARCH_RESULTSPERPAGE) { $before = microtime(true); global $CFG, $DB, $USER; require_once $CFG->dirroot . '/mod/forumng/mod_forumng.php'; $forumngid = $forum->get_id(); $context = $forum->get_context(); $params = array(); $where = "WHERE d.forumngid = ?"; $params[] = $forumngid; // Exclude deleted discussion/post. $where .= " AND d.deleted = 0 AND p.deleted = 0 AND p.oldversion = 0 "; if ($author) { list($morewhere, $moreparams) = forumng_get_author_sql($author); $where .= $morewhere; $params = array_merge($params, $moreparams); } if ($daterangefrom && !is_array($daterangefrom)) { $where .= " AND p.modified>=?"; $params[] = $daterangefrom; } if ($daterangeto && !is_array($daterangeto)) { $where .= " AND p.modified<=?"; $params[] = $daterangeto; } if ($groupid) { $where .= " AND (d.groupid = ? OR d.groupid IS NULL)"; $params[] = $groupid; } if (!empty($author)) { if ($forum->get_can_post_anon() == true && $forum->can_post_anonymously() == false) { $where .= " AND p.asmoderator != ? "; $params[] = mod_forumng::ASMODERATOR_ANON; } } if ($asmoderator) { $where .= " AND p.asmoderator > ? "; $params[] = mod_forumng::ASMODERATOR_NO; } $sql = "SELECT p.modified, p.id, p.discussionid, p.userid, p.parentpostid,\n p.subject AS title, p.message AS summary, u.username, u.firstname,\n u.lastname, p2.subject\n FROM {forumng_posts} p\n INNER JOIN {forumng_discussions} d ON d.id = p.discussionid\n INNER JOIN {user} u ON p.userid = u.id\n INNER JOIN {forumng_posts} p2 ON p2.id = d.postid\n {$where}\n ORDER BY p.modified DESC, p.id ASC"; $results = new stdClass(); $results->success = 1; $results->numberofentries = 0; $results->done = 0; $posts = $DB->get_records_sql($sql, $params, $page, $resultsperpage); $groupposts = array(); foreach ($posts as $post) { if (!$post->title) { // Add Re: if the post doesn't have a subject. $post->title = get_string('re', 'forumng', $post->subject); } $post->title = s(strip_tags($post->title)); $post->summary = s(strip_tags(shorten_text($post->summary, 250))); $post->url = $CFG->wwwroot . "/mod/forumng/discuss.php?d={$post->discussionid}" . $forum->get_clone_param(mod_forumng::PARAM_PLAIN) . "#p{$post->id}"; } $results->results = $groupposts ? $groupposts : $posts; $results->searchtime = microtime(true) - $before; $results->numberofentries = count($results->results); if (count($results->results) < $resultsperpage) { $results->done = 1; } else { if (!($extrapost = $DB->get_records_sql($sql, $params, $page + $resultsperpage, 1))) { $results->done = 1; } } return $results; }
/** * Create output for post information (Title, date, user) * Returns content and user object (discussion poster, null if anon) * @param object $forum * @param object $discussion * @param object $post * @return array content html, poster user object */ public function render_usage_post_info($forum, $discussion, mod_forumng_post $post) { $user = $post->get_user(); $link = html_writer::link($post->get_url(), format_string($post->get_effective_subject())); $content = html_writer::div($link); $content .= html_writer::div(mod_forumng_utils::display_date($post->get_created())); $content .= html_writer::start_div('fng_userlink'); if ($post->get_asmoderator() == mod_forumng::ASMODERATOR_ANON && !$forum->can_post_anonymously()) { // Hide user details if anon post and user does not have permission to see. $user = null; } else { $content .= $forum->display_user_link($user) . ' '; } if ($post->get_asmoderator() != mod_forumng::ASMODERATOR_NO) { $content .= get_string('moderator', 'mod_forumng'); } $content .= html_writer::end_div(); return array($content, $user); }