/**
 * 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;
}
Exemplo n.º 2
0
 /**
  * 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);
 }