Esempio n. 1
0
function block_updatecache($bid, $forceupdate = false)
{
    global $_G;
    if (isset($_G['block'][$bid]['cachetime']) && $_G['block'][$bid]['cachetime'] < 0 || !$forceupdate && discuz_process::islocked('block_update_cache', 5)) {
        return false;
    }
    block_memory_clear($bid);
    $block = empty($_G['block'][$bid]) ? array() : $_G['block'][$bid];
    if (!$block) {
        return;
    }
    $obj = block_script($block['blockclass'], $block['script']);
    if (is_object($obj)) {
        DB::update('common_block', array('dateline' => TIMESTAMP), array('bid' => $bid));
        $_G['block'][$bid]['dateline'] = TIMESTAMP;
        $block['param'] = empty($block['param']) ? array() : unserialize($block['param']);
        $theclass = block_getclass($block['blockclass']);
        $thestyle = !empty($block['styleid']) ? block_getstyle($block['styleid']) : unserialize($block['blockstyle']);
        if (in_array($block['blockclass'], array('forum_thread', 'group_thread', 'space_blog', 'space_pic', 'portal_article'))) {
            $datalist = array();
            $mapping = array('forum_thread' => 'tid', 'group_thread' => 'tid', 'space_blog' => 'blogid', 'space_blog' => 'picid', 'portal_article' => 'aid');
            $idtype = $mapping[$block['blockclass']];
            $bannedids = !empty($block['param']['bannedids']) ? explode(',', $block['param']['bannedids']) : array();
            $bannedsql = $bannedids ? ' AND id NOT IN (' . dimplode($bannedids) . ')' : '';
            $shownum = intval($block['shownum']);
            $titlelength = !empty($block['param']['titlelength']) ? intval($block['param']['titlelength']) : 40;
            $summarylength = !empty($block['param']['summarylength']) ? intval($block['param']['summarylength']) : 80;
            $query = DB::query('SELECT * FROM ' . DB::table('common_block_item_data') . " WHERE bid='{$bid}' AND isverified='1' {$bannedsql} ORDER BY stickgrade DESC, verifiedtime DESC LIMIT {$shownum}");
            while ($value = DB::fetch($query)) {
                $value['title'] = cutstr($value['title'], $titlelength, '');
                $value['summary'] = cutstr($value['summary'], $summarylength, '');
                $value['itemtype'] = '3';
                $datalist[] = $value;
                $bannedids[] = intval($value['id']);
            }
            $leftnum = $block['shownum'] - count($datalist);
            if ($leftnum > 0 && empty($block['isblank'])) {
                $block['param']['items'] = $leftnum;
                $block['param']['bannedids'] = implode(',', $bannedids);
                $return = $obj->getdata($thestyle, $block['param']);
                $return['data'] = array_merge($datalist, (array) $return['data']);
            } else {
                $return['data'] = $datalist;
            }
        } else {
            $return = $obj->getdata($thestyle, $block['param']);
        }
        if ($return['data'] === null) {
            $_G['block'][$block['bid']]['summary'] = $return['html'];
            DB::update('common_block', array('summary' => daddslashes($return['html'])), array('bid' => $bid));
        } else {
            $_G['block'][$block['bid']]['itemlist'] = block_updateitem($bid, $return['data']);
        }
    } else {
        DB::update('common_block', array('dateline' => TIMESTAMP + 999999, 'cachetime' => 0), array('bid' => $bid));
        $_G['block'][$bid]['dateline'] = TIMESTAMP + 999999;
    }
    if (getglobal('setting/memory/diyblock/enable') && memory('check')) {
        memory('set', 'blockcache_' . $bid, $_G['block'][$bid], getglobal('setting/memory/diyblock/ttl'));
        $styleid = $_G['block'][$bid]['styleid'];
        if ($styleid && $_G['blockstyle_' . $styleid]) {
            memory('set', 'blockstylecache_' . $styleid, $_G['blockstyle_' . $styleid], getglobal('setting/memory/diyblock/ttl'));
        }
    }
    discuz_process::unlock('block_update_cache');
}
Esempio n. 2
0
function block_updatecache($bid, $forceupdate = false)
{
    global $_G;
    if (isset($_G['block'][$bid]['cachetime']) && $_G['block'][$bid]['cachetime'] < 0 || !$forceupdate && discuz_process::islocked('block_update_cache', 5)) {
        return false;
    }
    C::t('common_block')->clear_cache($bid);
    $block = empty($_G['block'][$bid]) ? array() : $_G['block'][$bid];
    if (!$block) {
        return false;
    }
    $obj = block_script($block['blockclass'], $block['script']);
    if (is_object($obj)) {
        C::t('common_block')->update($bid, array('dateline' => TIMESTAMP));
        $_G['block'][$bid]['dateline'] = TIMESTAMP;
        $theclass = block_getclass($block['blockclass']);
        $thestyle = !empty($block['styleid']) ? block_getstyle($block['styleid']) : dunserialize($block['blockstyle']);
        if (in_array($block['blockclass'], array('forum_thread', 'group_thread', 'space_blog', 'space_pic', 'portal_article'))) {
            $datalist = array();
            $mapping = array('forum_thread' => 'tid', 'group_thread' => 'tid', 'space_blog' => 'blogid', 'space_blog' => 'picid', 'portal_article' => 'aid');
            $idtype = $mapping[$block['blockclass']];
            $bannedids = !empty($block['param']['bannedids']) ? explode(',', $block['param']['bannedids']) : array();
            $bannedsql = $bannedids ? ' AND id NOT IN (' . dimplode($bannedids) . ')' : '';
            $shownum = intval($block['shownum']);
            $titlelength = !empty($block['param']['titlelength']) ? intval($block['param']['titlelength']) : 40;
            $summarylength = !empty($block['param']['summarylength']) ? intval($block['param']['summarylength']) : 80;
            foreach (C::t('common_block_item_data')->fetch_all_by_bid($bid, 1, 0, $shownum * 2, $bannedids, false) as $value) {
                $value['title'] = cutstr($value['title'], $titlelength, '');
                $value['summary'] = cutstr($value['summary'], $summarylength, '');
                $value['itemtype'] = '3';
                $datalist[] = $value;
                $bannedids[] = intval($value['id']);
            }
            $leftnum = $block['shownum'] - count($datalist);
            if ($leftnum > 0 && empty($block['isblank'])) {
                if ($leftnum != $block['param']['items']) {
                    $block['param']['items'] = $leftnum;
                    $block['param']['bannedids'] = implode(',', $bannedids);
                }
                $return = $obj->getdata($thestyle, $block['param']);
                $return['data'] = array_merge($datalist, (array) $return['data']);
            } else {
                $return['data'] = $datalist;
            }
        } else {
            $return = $obj->getdata($thestyle, $block['param']);
        }
        if ($return['data'] === null) {
            $_G['block'][$block['bid']]['summary'] = $return['html'];
            C::t('common_block')->update($bid, array('summary' => $return['html']));
        } else {
            $_G['block'][$block['bid']]['itemlist'] = block_updateitem($bid, $return['data']);
        }
    } else {
        C::t('common_block')->update($bid, array('dateline' => TIMESTAMP + 999999, 'cachetime' => 0));
        $_G['block'][$bid]['dateline'] = TIMESTAMP + 999999;
    }
    if (C::t('common_block')->allowmem) {
        memory('set', 'blockcache_' . $bid, $_G['block'][$bid], C::t('common_block')->cache_ttl);
        $styleid = $_G['block'][$bid]['styleid'];
        if ($styleid && $_G['blockstyle_' . $styleid]) {
            memory('set', 'blockstylecache_' . $styleid, $_G['blockstyle_' . $styleid], C::t('common_block')->cache_ttl);
        }
    }
    discuz_process::unlock('block_update_cache');
}
Esempio n. 3
0
function block_updatecache($bid, $forceupdate = false)
{
    global $_G;
    if (!$forceupdate && discuz_process::islocked('block_update_cache', 5)) {
        return false;
    }
    block_memory_clear($bid);
    $block = empty($_G['block'][$bid]) ? array() : $_G['block'][$bid];
    if (!$block) {
        return;
    }
    $obj = block_script($block['script']);
    if ($obj) {
        DB::update('common_block', array('dateline' => TIMESTAMP), array('bid' => $bid));
        $block['param'] = empty($block['param']) ? array() : unserialize($block['param']);
        $theclass = block_getclass($block['blockclass']);
        if ($block['blockclass'] == 'portal_article') {
            $parameter = array('aids' => array());
            $query = DB::query('SELECT aid FROM ' . DB::table('portal_article_title') . " WHERE bid='{$bid}'");
            while ($value = DB::fetch($query)) {
                $parameter['aids'][] = intval($value['aid']);
            }
            $datalist = array();
            if (!empty($parameter['aids'])) {
                $bannedids = !empty($block['param']['bannedids']) ? explode(',', $block['param']['bannedids']) : array();
                if (!empty($bannedids)) {
                    $parameter['aids'] = array_diff($parameter['aids'], $bannedids);
                }
                $bannedids = array_merge($bannedids, $parameter['aids']);
                $block['param']['bannedids'] = implode(',', $bannedids);
                $parameter['aids'] = implode(',', $parameter['aids']);
                $return = $obj->getdata($theclass['style'][$block['styleid']], $parameter);
                $datalist = $return['data'];
            }
            $return = $obj->getdata($theclass['style'][$block['styleid']], $block['param']);
            if ($datalist) {
                $return['data'] = array_merge($datalist, $return['data']);
            }
        } else {
            $return = $obj->getdata($theclass['style'][$block['styleid']], $block['param']);
        }
        if ($return['data'] === null) {
            $_G['block'][$block['bid']]['summary'] = $return['html'];
            DB::update('common_block', array('summary' => daddslashes($return['html'])), array('bid' => $bid));
        } else {
            $_G['block'][$block['bid']]['itemlist'] = block_updateitem($bid, $return['data']);
        }
    } else {
        DB::update('common_block', array('dateline' => TIMESTAMP + 999999, 'cachetime' => 0), array('bid' => $bid));
    }
    discuz_process::unlock('block_update_cache');
}