Esempio n. 1
0
function fr_parse_post($node, $signature = true, $html = true)
{
    $userinfo = vB_Api::instance('user')->fetchUserinfo($node['userid']);
    $options = vB::get_datastore()->get_value('options');
    $post = array('post_id' => $node['nodeid'], 'thread_id' => $node['starter'], 'post_timestamp' => fr_date($node['created']), 'forum_id' => $node['content']['channelid'], 'forum_title' => html_entity_decode($node['content']['channeltitle']), 'title' => html_entity_decode($node['title']), 'username' => $node['userid'] > 0 ? $node['authorname'] : (string) new vB_Phrase('global', 'guest'), 'userid' => $node['userid'], 'joindate' => fr_date($userinfo['joindate']), 'usertitle' => $userinfo['usertitle'], 'numposts' => $userinfo['posts'], 'online' => fr_get_user_online($userinfo['lastactivity']), 'text' => strip_bbcode($node['content']['rawtext']), 'quotable' => $node['content']['rawtext'], 'edittext' => $node['content']['rawtext'], 'canedit' => $node['content']['permissions']['canedit'], 'candelete' => $node['content']['permissions']['canmoderate'], 'canlike' => $node['content']['permissions']['canuserep'] > 0, 'likes' => $node['content']['nodeVoted'] ? true : false);
    if (!empty($node['deleteuserid'])) {
        $post['deleted'] = true;
        $del_userinfo = vB_Api::instance('user')->fetchUserInfo($node['deleteuserid']);
        $post['del_username'] = $del_userinfo['username'];
        $post['del_reason'] = $node['deletereason'];
    }
    if ($avatarurl = fr_find_avatarurl($node)) {
        $post['avatarurl'] = $options['bburl'] . '/' . $avatarurl;
    }
    $inline_images = array();
    if ($signature || $html) {
        $bbcode = fr_post_to_bbcode($node, $html);
        if ($signature) {
            $post['signature'] = $bbcode['signature'];
        }
        if ($html) {
            $post['text'] = $bbcode['html'];
            $post['html'] = $bbcode['html'];
        }
        $inline_images = $bbcode['images'];
    }
    if (!empty($node['content']['attach'])) {
        $fr_images = array();
        foreach ($node['content']['attach'] as $attachment) {
            if ($attachment['visible'] > 0) {
                $image = fr_base_url() . 'filedata/fetch?id=' . $attachment['nodeid'];
                $fr_images[] = array('img' => $image);
                if (!in_array($image, $inline_images)) {
                    $post['text'] .= "<img src=\"{$image}\"/>";
                    $post['html'] .= "<img src=\"{$image}\"/>";
                }
            }
        }
        $post['fr_images'] = $fr_images;
    }
    return $post;
}
Esempio n. 2
0
function fr_process_message_callback($matches)
{
    if (count($matches) > 1) {
        $fr_attach = vB_dB_Assertor::instance()->getRow('ForumRunner:getAttachmentMarkerById', array('id' => $matches[1]));
        if (!empty($fr_attach)) {
            return '[IMG]' . fr_base_url() . 'filedata/fetch?id=' . $fr_attach['attachmentid'] . '[/IMG]';
        }
    }
    return '';
}
Esempio n. 3
0
function do_get_thread()
{
    $userinfo = vB_Api::instance('user')->fetchUserInfo();
    $cleaned = vB::getCleaner()->cleanArray($_REQUEST, array('threadid' => vB_Cleaner::TYPE_INT, 'signature' => vB_Cleaner::TYPE_BOOL, 'page' => vB_Cleaner::TYPE_UINT, 'perpage' => vB_Cleaner::TYPE_UINT));
    if (empty($cleaned['threadid'])) {
        return json_error(ERR_INVALID_TOP);
    }
    $threadinfo = vB_Api::instance('node')->getFullContentforNodes(array($cleaned['threadid']));
    if (empty($threadinfo)) {
        return json_error(ERR_INVALID_TOP);
    }
    $pagenumber = $cleaned['page'] ? $cleaned['page'] : 1;
    $perpage = $cleaned['perpage'] ? $cleaned['perpage'] : 10;
    $do_last_unread_search = false;
    if ($pagenumber == FR_LAST_POST) {
        $do_last_unread_search = true;
        $pagenumber = 1;
    }
    $threadinfo = $threadinfo[0];
    $mod = 0;
    $posts_out = array();
    $totalposts = 0;
    $pollid = null;
    $postid = null;
    $thread_link = rtrim(fr_base_url(), "/") . vB_Api::instance('route')->getUrl($threadinfo['routeid'], $threadinfo, array());
    $foruminfo = vB_Api::instance('node')->getFullContentforNodes(array($threadinfo['parentid']));
    $foruminfo = $foruminfo[0];
    if ($foruminfo['content']['permissions']['canmoderate']) {
        $mod |= MOD_DELETEPOST;
        if ($threadinfo['sticky']) {
            $mod |= MOD_UNSTICK;
        } else {
            $mod |= MOD_STICK;
        }
        $mod |= MOD_DELETETHREAD;
        if ($threadinfo['open']) {
            $mod |= MOD_CLOSE;
        } else {
            $mod |= MOD_OPEN;
        }
        $mod |= MOD_MOVETHREAD;
        $mod |= MOD_SPAM_CONTROLS;
    }
    $search = array("channel" => $cleaned['threadid']);
    $search['view'] = vB_Api_Search::FILTER_VIEW_CONVERSATION_THREAD;
    $search['depth'] = 1;
    $search['include_starter'] = true;
    $search['sort']['created'] = 'asc';
    $search_result = vB_Api::instanceInternal('search')->getSearchResult($search);
    $topic_search = vB_Api::instance('search')->getMoreResults($search_result, $perpage, $pagenumber, false);
    if ($do_last_unread_search) {
        while ($pagenumber < $topic_search['totalpages'] && !fr_last_unread_post_on_this_page($topic_search, $userinfo)) {
            $pagenumber = $pagenumber + 1;
            $topic_search = vB_Api::instance('search')->getMoreResults($search_result, $perpage, $pagenumber, false);
            if (isset($topic_search['errors'])) {
                break;
            }
        }
    }
    if (!isset($topic_search['errors']) and !empty($topic_search['results'])) {
        foreach ($topic_search['results'] as $node) {
            if ($node['content']['contenttypeclass'] == 'Poll') {
                $pollid = $node['nodeid'];
            }
            if ($node['content']['contenttypeclass'] != 'Channel') {
                $posts_out[] = fr_parse_post($node, $cleaned['signature']);
            }
        }
        $totalposts = $topic_search['totalRecords'];
    }
    $out = array('thread_link' => $thread_link, 'posts' => $posts_out, 'total_posts' => $totalposts, 'page' => $pagenumber, 'canpost' => $threadinfo['content']['createpermissions']['vbforum_text'], 'mod' => $mod, 'subscribed' => $threadinfo['content']['subscribed'], 'title' => html_entity_decode($threadinfo['title']), 'canattach' => $threadinfo['content']['createpermissions']['vbforum_attach']);
    if ($postid) {
        $out['gotopostid'] = $postid;
    }
    if ($pollid) {
        $out['pollid'] = $pollid;
    }
    vB_Api::instance('node')->markRead($threadinfo['nodeid']);
    $options = vB::getDatastore()->getValue('options');
    if (!$options['threadmarking']) {
        $forumview = fr_set_bbarray_cookie('discussion-view', $threadinfo['nodeid'], vB::getRequest()->getTimeNow());
    }
    return $out;
}