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'); }
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'); }
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'); }