/**
 * Get post in a format compatable with RSS lib
 *
 * @param int $blogid
 * @param int $bloginstancesid
 * @param object $user
 * @param bool $allowedvisibility
 * @param int $groupid
 * @param object $cm
 * @return array
 */
function oublog_get_feed_posts($blogid, $bloginstance, $user, $allowedvisibility, $groupid, $cm, $oublog, $individualid = -1)
{
    global $CFG, $DB;
    $params = array();
    $items = array();
    if ($bloginstance) {
        $sqlwhere = "AND p.oubloginstancesid = ? ";
        $params[] = $bloginstance->id;
    } else {
        $sqlwhere = "AND i.oublogid = ? ";
        $params[] = $blogid;
    }
    // If individual blog.
    if ($individualid > 0 || $oublog->individual > OUBLOG_NO_INDIVIDUAL_BLOGS) {
        $capable = oublog_individual_has_permissions($cm, $oublog, $groupid, $individualid, $user->id);
        oublog_individual_add_to_sqlwhere($sqlwhere, $params, 'i.userid', $oublog->id, $groupid, $individualid, $capable);
    } else {
        // No individual blog.
        if ($groupid) {
            $sqlwhere .= " AND p.groupid = ? ";
            $params[] = $groupid;
        } else {
            if (!empty($cm->groupingid)) {
                if ($groups = $DB->get_records('groupings_groups', array('groupingid' => $cm->groupingid), null, 'groupid')) {
                    $sqlwhere .= "AND p.groupid IN (" . implode(',', array_keys($groups)) . ") ";
                }
            }
        }
    }
    // Scheme URL for tags
    $scheme = $CFG->wwwroot . '/mod/oublog/';
    if ($oublog->global) {
        if (!$bloginstance) {
            $scheme .= 'allposts.php?tag=';
        } else {
            $scheme .= 'view.php?user='******'&tag=';
        }
    } else {
        $scheme .= 'view.php?id=' . $cm->id;
        if ($groupid) {
            $scheme .= '&group=' . $groupid;
        }
        $scheme .= '&tag=';
    }
    $usernamefields = get_all_user_name_fields(true, 'u');
    // Get posts
    $sql = "SELECT p.id, p.title, p.message AS description, p.timeposted AS pubdate, i.userid, {$usernamefields}, u.email, u.picture, u.imagealt, u.idnumber\n            FROM {oublog_posts} p\n            INNER JOIN {oublog_instances} i ON p.oubloginstancesid = i.id\n            INNER JOIN {user} u ON i.userid = u.id\n            WHERE p.deletedby IS NULL AND p.visibility >= {$allowedvisibility} {$sqlwhere}\n            ORDER BY p.timeposted DESC ";
    $rs = $DB->get_recordset_sql($sql, $params, 0, OUBLOG_MAX_FEED_ITEMS);
    $modcontext = context_module::instance($cm->id);
    foreach ($rs as $item) {
        $item->link = $CFG->wwwroot . '/mod/oublog/viewpost.php?post=' . $item->id;
        $item->author = fullname($item);
        $item->tags = array();
        $item->tagscheme = $scheme;
        // Feeds do not allow blank titles
        if ((string) $item->title === '') {
            $item->title = html_to_text(shorten_text($item->description));
        }
        // Rewrite image urls in oublog posts.
        $item->description = file_rewrite_pluginfile_urls($item->description, 'mod/oublog/pluginfile.php', $modcontext->id, 'mod_oublog', 'message', $item->id);
        $items[$item->id] = $item;
    }
    $rs->close();
    // Get all tags related to these posts and fill them in
    $sql = "SELECT p.id AS postid, t.id AS tagid, t.tag\n            FROM {oublog_posts} p\n            INNER JOIN {oublog_instances} i ON p.oubloginstancesid = i.id\n            INNER JOIN {oublog_taginstances} ti ON p.id = ti.postid\n            INNER JOIN {oublog_tags} t ON ti.tagid = t.id\n            WHERE p.deletedby IS NULL AND p.visibility >= {$allowedvisibility} {$sqlwhere}";
    $rs = $DB->get_recordset_sql($sql, $params);
    foreach ($rs as $tag) {
        if (array_key_exists($tag->postid, $items)) {
            $items[$tag->postid]->tags[$tag->tagid] = $tag->tag;
        }
    }
    $rs->close();
    return $items;
}
            error('Access denied');
        }
    }
} elseif ($loggedin) {
    if ($loggedin == md5($accesstoken . $viewer . OUBLOG_VISIBILITY_LOGGEDINUSER) && ($user = get_record('user', 'id', $viewer))) {
        $allowedvisibility = OUBLOG_VISIBILITY_LOGGEDINUSER;
    } else {
        error('Access denied');
    }
} else {
    $allowedvisibility = OUBLOG_VISIBILITY_PUBLIC;
    $user = get_guest();
}
// Check individual
if ($blog->individual) {
    if (!oublog_individual_has_permissions($cm, $blog, $groupid, $individualid, $user->id)) {
        error('Access denied (you have no permission to view this individual blog)');
    }
}
// Check separate groups
if ($groupmode == SEPARATEGROUPS) {
    // If you are a member of the group and viewing a specified group then
    // you are OK
    if ($groupid && groups_is_member($groupid, $user->id)) {
        // Group members are OK
    } else {
        // Must have access all groups
        require_capability('moodle/site:accessallgroups', get_context_instance(CONTEXT_MODULE, $cm->id), $user->id);
    }
}
/// Get data for feed in a standard form
/**
 * Get post in a format compatable with RSS lib
 *
 * @param int $blogid
 * @param int $bloginstancesid
 * @param object $user
 * @param bool $allowedvisibility
 * @param int $groupid
 * @param object $cm
 * @return array
 */
function oublog_get_feed_posts($blogid, $bloginstance, $user, $allowedvisibility, $groupid, $cm, $oublog, $individualid = -1)
{
    global $CFG;
    $items = array();
    if ($bloginstance) {
        $sqlwhere = "AND p.oubloginstancesid = {$bloginstance->id} ";
    } else {
        $sqlwhere = "AND i.oublogid = {$blogid} ";
    }
    //if individual blog
    if ($individualid > -1) {
        $capable = oublog_individual_has_permissions($cm, $oublog, $groupid, $individualid);
        oublog_individual_add_to_sqlwhere(&$sqlwhere, 'i.userid', $oublog->id, $groupid, $individualid, $capable);
    } else {
        if ($groupid) {
            $sqlwhere .= " AND p.groupid = {$groupid} ";
        }
        if (!empty($CFG->enablegroupings) && !empty($cm->groupingid)) {
            if ($groups = get_records('groupings_groups', 'groupingid', $cm->groupingid, null, 'groupid')) {
                $sqlwhere .= "AND p.groupid IN (" . implode(',', array_keys($groups)) . ") ";
            }
        }
    }
    // Scheme URL for tags
    $scheme = $CFG->wwwroot . '/mod/oublog/';
    if ($oublog->global) {
        if (!$bloginstance) {
            $scheme .= 'allposts.php?tag=';
        } else {
            $scheme .= 'view.php?user='******'&tag=';
        }
    } else {
        $scheme .= 'view.php?id=' . $cm->id;
        if ($groupid) {
            $scheme .= '&group=' . $groupid;
        }
        $scheme .= '&tag=';
    }
    // Get posts
    $sql = "SELECT p.id, p.title, p.message AS description, p.timeposted AS pubdate, i.userid, u.firstname, u.lastname, u.email, u.picture, u.imagealt, u.idnumber\n            FROM {$CFG->prefix}oublog_posts p\n            INNER JOIN {$CFG->prefix}oublog_instances i ON p.oubloginstancesid = i.id\n            INNER JOIN {$CFG->prefix}user u ON i.userid = u.id\n            WHERE p.deletedby IS NULL AND p.visibility >= {$allowedvisibility} {$sqlwhere}\n            ORDER BY p.timeposted DESC ";
    $rs = get_recordset_sql($sql, 0, OUBLOG_MAX_FEED_ITEMS);
    while ($item = rs_fetch_next_record($rs)) {
        $item->link = $CFG->wwwroot . '/mod/oublog/viewpost.php?post=' . $item->id;
        $item->author = fullname($item);
        $item->tags = array();
        $item->tagscheme = $scheme;
        // Feeds do not allow blank titles
        if ((string) $item->title === '') {
            $item->title = html_to_text(shorten_text($item->description));
        }
        $items[$item->id] = $item;
    }
    rs_close($rs);
    // Get all tags related to these posts and fill them in
    $sql = "SELECT p.id AS postid, t.id AS tagid, t.tag\n            FROM {$CFG->prefix}oublog_posts p\n            INNER JOIN {$CFG->prefix}oublog_instances i ON p.oubloginstancesid = i.id\n            INNER JOIN {$CFG->prefix}oublog_taginstances ti ON p.id = ti.postid\n            INNER JOIN {$CFG->prefix}oublog_tags t ON ti.tagid = t.id\n            WHERE p.deletedby IS NULL AND p.visibility >= {$allowedvisibility} {$sqlwhere}";
    $rs = get_recordset_sql($sql);
    while ($tag = rs_fetch_next_record($rs)) {
        if (array_key_exists($tag->postid, $items)) {
            $items[$tag->postid]->tags[$tag->tagid] = $tag->tag;
        }
    }
    rs_close($rs);
    return $items;
}