function updatespacecache($uid, $module, $list = FALSE) { global $_DCOOKIE, $db, $mod, $tablepre, $timestamp, $tpp, $page, $multipage, $starttime, $endtime, $spacedata, $lastvisit, $videoopen, $tradetypeid; if (!file_exists(DISCUZ_ROOT . './forumdata/cache/cache_spacesettings.php')) { require_once DISCUZ_ROOT . './include/cache.func.php'; updatespacesettings(); } require DISCUZ_ROOT . './forumdata/cache/cache_spacesettings.php'; if ($list) { $tpp = $mod != 'mytrades' ? $tpp : 15; $page = max(1, intval($page)); $start_limit = ($page - 1) * $tpp; $parms['items'] = "{$start_limit}, {$tpp}"; } else { $parms['items'] = intval($spacedata['limit' . $module]); } $parms['list'] = $list; $parms['conditions'] = $parms['extraquery'] = ''; $parms['cols'] = '*'; $user_func = 'module_' . $module; $user_func($parms); $tids = $datalist = array(); $query = $db->query("SELECT {$parms['cols']} FROM {$tablepre}{$parms['table']} {$parms['conditions']} LIMIT {$parms['items']}"); while ($data = $db->fetch_array($query)) { if (!empty($data['message'])) { $data['message'] = spacecutstr($data['message'], $spacedata['textlength']); $videoopen && ($data['message'] = videocode($data['message'], $data['tid'], $data['pid'])); } if ($data['tid'] && $lastvisit < $data['lastpost'] && (empty($_DCOOKIE['oldtopics']) || strpos($_DCOOKIE['oldtopics'], 'D' . $data['tid'] . 'D') === FALSE)) { $data['subject'] .= ' <a href="redirect.php?tid=' . $data['tid'] . '&goto=newpost#newpost" target="_blank"><img src="' . IMGDIR . '/firstnew.gif" border="0" alt="" /></a>'; } if ($parms['extraquery']) { $tids[] = $data['tid']; $datalist[$data['tid']] = $data; } else { $datalist[] = $data; } } if ($tids) { $query = $db->query($parms['extraquery'] . '(' . implodeids($tids) . ')'); while ($data = $db->fetch_array($query)) { $datalist[$data['tid']] = array_merge($datalist[$data['tid']], $data); } } if (!$list) { $db->query("REPLACE INTO {$tablepre}spacecaches (uid, variable, value, expiration) VALUES ('{$uid}', '{$module}', '" . addslashes(serialize($datalist)) . "', '" . ($timestamp + $spacedata['cachelife']) . "')"); } else { $num = $db->result_first("SELECT count(*) FROM {$tablepre}{$parms['table']} {$parms['conditions']}"); $module = empty($parms['pagemodule']) ? $module : $parms['pagemodule']; $multipage = spacemulti($num, $tpp, $page, "space.php?uid={$uid}&mod={$module}" . ($starttime ? "&starttime={$starttime}" : '') . ($endtime ? "&endtime={$endtime}" : '') . (isset($tradetypeid) ? "&tradetypeid={$tradetypeid}" : '')); } return $datalist; }
function updatecache($cachename = '') { global $db, $bbname, $tablepre, $maxbdays; static $cachescript = array('settings' => array('settings'), 'forums' => array('forums'), 'icons' => array('icons'), 'ranks' => array('ranks'), 'usergroups' => array('usergroups'), 'jswizard' => array('jswizard'), 'medals' => array('medals'), 'magics' => array('magics'), 'topicadmin' => array('modreasons'), 'archiver' => array('advs_archiver'), 'register' => array('advs_register'), 'faqs' => array('faqs'), 'secqaa' => array('secqaa'), 'updatecircles' => array('supe_updatecircles'), 'censor' => array('censor'), 'ipbanned' => array('ipbanned'), 'google' => array('google'), 'index' => array('announcements', 'onlinelist', 'forumlinks', 'advs_index', 'supe_updateusers', 'supe_updateitems', 'tags_index'), 'forumdisplay' => array('announcements_forum', 'pmlist', 'globalstick', 'floatthreads', 'forums', 'icons', 'onlinelist', 'advs_forumdisplay'), 'viewthread' => array('forums', 'pmlist', 'usergroups', 'ranks', 'bbcodes', 'smilies', 'smileytypes', 'advs_viewthread', 'tags_viewthread', 'custominfo'), 'post' => array('bbcodes_display', 'bbcodes', 'smilies_display', 'smilies', 'smileytypes', 'icons'), 'blog' => array('usergroups', 'ranks', 'bbcodes', 'smilies', 'smileytypes'), 'profilefields' => array('fields_required', 'fields_optional'), 'viewpro' => array('fields_required', 'fields_optional', 'custominfo'), 'bbcodes' => array('bbcodes', 'smilies', 'smileytypes')); if ($maxbdays) { $cachescript['birthdays'] = array('birthdays'); $cachescript['index'][] = 'birthdays_index'; } $updatelist = empty($cachename) ? array_values($cachescript) : (is_array($cachename) ? array('0' => $cachename) : array(array('0' => $cachename))); $updated = array(); foreach ($updatelist as $value) { foreach ($value as $cname) { if (empty($updated) || !in_array($cname, $updated)) { $updated[] = $cname; getcachearray($cname); } } } foreach ($cachescript as $script => $cachenames) { if (empty($cachename) || !is_array($cachename) && in_array($cachename, $cachenames) || is_array($cachename) && array_intersect($cachename, $cachenames)) { $cachedata = ''; $query = $db->query("SELECT data FROM {$tablepre}caches WHERE cachename in(" . implodeids($cachenames) . ")"); while ($data = $db->fetch_array($query)) { $cachedata .= $data['data']; } writetocache($script, $cachenames, $cachedata); } } if (!$cachename || $cachename == 'styles') { $stylevars = array(); $defaultstyleid = $db->result_first("SELECT value FROM {$tablepre}settings WHERE variable = 'styleid'"); $query = $db->query("SELECT sv.* FROM {$tablepre}stylevars sv LEFT JOIN {$tablepre}styles s ON s.styleid = sv.styleid AND (s.available=1 OR s.styleid='{$defaultstyleid}')"); while ($var = $db->fetch_array($query)) { $stylevars[$var['styleid']][$var['variable']] = $var['substitute']; } $query = $db->query("SELECT s.*, t.directory AS tpldir FROM {$tablepre}styles s LEFT JOIN {$tablepre}templates t ON s.templateid=t.templateid WHERE s.available=1 OR s.styleid='{$defaultstyleid}'"); while ($data = $db->fetch_array($query)) { $data = array_merge($data, $stylevars[$data['styleid']]); $data['bgcode'] = setcssbackground($data, 'bgcolor'); $data['catbgcode'] = setcssbackground($data, 'catcolor'); $data['headerbgcode'] = setcssbackground($data, 'headercolor'); $data['headermenubgcode'] = setcssbackground($data, 'headermenu'); $data['portalboxbgcode'] = setcssbackground($data, 'portalboxbgcode'); if (strstr($data['boardimg'], ',')) { $flash = explode(",", $data['boardimg']); $flash[0] = trim($flash[0]); $flash[0] = preg_match('/^http:\\/\\//i', $flash[0]) ? $flash[0] : $data['imgdir'] . '/' . $flash[0]; $data['boardlogo'] = "<embed src=\"" . $flash[0] . "\" width=\"" . trim($flash[1]) . "\" height=\"" . trim($flash[2]) . "\" type=\"application/x-shockwave-flash\"></embed>"; } else { $data['boardimg'] = preg_match('/^http:\\/\\//i', $data['boardimg']) ? $data['boardimg'] : $data['imgdir'] . '/' . $data['boardimg']; $data['boardlogo'] = "<img src=\"{$data['boardimg']}\" alt=\"{$bbname}\" border=\"0\" />"; } $data['bold'] = $data['nobold'] ? 'normal' : 'bold'; $data['postminheight'] = $GLOBALS['postminheight']; $data['maxsigrows'] = $GLOBALS['maxsigrows']; writetocache($data['styleid'], '', getcachevars($data, 'CONST'), 'style_'); writetocsscache($data); } } if (!$cachename || $cachename == 'usergroups') { $query = $db->query("SELECT * FROM {$tablepre}usergroups u\r\n\t\t\t\t\tLEFT JOIN {$tablepre}admingroups a ON u.groupid=a.admingid"); while ($data = $db->fetch_array($query)) { $ratearray = array(); if ($data['raterange']) { foreach (explode("\n", $data['raterange']) as $rating) { $rating = explode("\t", $rating); $ratearray[$rating[0]] = array('min' => $rating[1], 'max' => $rating[2], 'mrpd' => $rating[3]); } } $data['raterange'] = $ratearray; $data['grouptitle'] = $data['color'] ? '<font color="' . $data['color'] . '">' . $data['grouptitle'] . '</font>' : $data['grouptitle']; $data['grouptype'] = $data['type']; $data['grouppublic'] = $data['system'] != 'private'; $data['groupcreditshigher'] = $data['creditshigher']; $data['groupcreditslower'] = $data['creditslower']; unset($data['type'], $data['system'], $data['creditshigher'], $data['creditslower'], $data['color'], $data['groupavatar'], $data['admingid']); foreach ($data as $key => $val) { if (!isset($data[$key])) { unset($data[$key]); } } writetocache($data['groupid'], '', getcachevars($data), 'usergroup_'); } } if (!$cachename || $cachename == 'admingroups') { $query = $db->query("SELECT * FROM {$tablepre}admingroups"); while ($data = $db->fetch_array($query)) { writetocache($data['admingid'], '', getcachevars($data), 'admingroup_'); } } if (!$cachename || $cachename == 'plugins') { $query = $db->query("SELECT pluginid, available, adminid, name, identifier, datatables, directory, copyright, modules FROM {$tablepre}plugins"); while ($plugin = $db->fetch_array($query)) { $data = array_merge($plugin, array('modules' => array()), array('vars' => array())); $plugin['modules'] = unserialize($plugin['modules']); if (is_array($plugin['modules'])) { foreach ($plugin['modules'] as $module) { $data['modules'][$module['name']] = $module; } } $queryvars = $db->query("SELECT variable, value FROM {$tablepre}pluginvars WHERE pluginid='{$plugin['pluginid']}'"); while ($var = $db->fetch_array($queryvars)) { $data['vars'][$var['variable']] = $var['value']; } writetocache($plugin['identifier'], '', "\$_DPLUGIN['{$plugin['identifier']}'] = " . arrayeval($data), 'plugin_'); } } if (!$cachename || $cachename == 'threadtypes') { $typelist = $templatedata = array(); $query = $db->query("SELECT t.typeid, tt.optionid, tt.title, tt.type, tt.rules, tt.identifier, tt.description, tv.required, tv.unchangeable, tv.search\r\n\t\t\tFROM {$tablepre}threadtypes t\r\n\t\t\tLEFT JOIN {$tablepre}typevars tv ON t.typeid=tv.typeid\r\n\t\t\tLEFT JOIN {$tablepre}typeoptions tt ON tv.optionid=tt.optionid\r\n\t\t\tWHERE t.special='1' AND tv.available='1'\r\n\t\t\tORDER BY tv.displayorder"); while ($data = $db->fetch_array($query)) { $data['rules'] = unserialize($data['rules']); $typeid = $data['typeid']; $optionid = $data['optionid']; $typelist[$typeid][$optionid] = array('title' => dhtmlspecialchars($data['title']), 'type' => dhtmlspecialchars($data['type']), 'identifier' => dhtmlspecialchars($data['identifier']), 'description' => dhtmlspecialchars($data['description']), 'required' => intval($data['required']), 'unchangeable' => intval($data['unchangeable']), 'search' => intval($data['search'])); if (in_array($data['type'], array('select', 'checkbox', 'radio'))) { if ($data['rules']['choices']) { $choices = array(); foreach (explode("\n", $data['rules']['choices']) as $item) { list($index, $choice) = explode('=', $item); $choices[trim($index)] = trim($choice); } $typelist[$typeid][$optionid]['choices'] = $choices; } else { $typelist[$typeid][$optionid]['choices'] = array(); } } elseif (in_array($data['type'], array('text', 'textarea'))) { $typelist[$typeid][$optionid]['maxlength'] = intval($data['rules']['maxlength']); } elseif ($data['type'] == 'image') { $typelist[$typeid][$optionid]['maxwidth'] = intval($data['rules']['maxwidth']); $typelist[$typeid][$optionid]['maxheight'] = intval($data['rules']['maxheight']); } elseif ($data['type'] == 'number') { $typelist[$typeid][$optionid]['maxnum'] = intval($data['rules']['maxnum']); $typelist[$typeid][$optionid]['minnum'] = intval($data['rules']['minnum']); } } $query = $db->query("SELECT typeid, description, template FROM {$tablepre}threadtypes WHERE special='1'"); while ($data = $db->fetch_array($query)) { $templatedata[$data['typeid']] = $data['template']; $threaddesc[$data['typeid']] = dhtmlspecialchars($data['description']); } foreach ($typelist as $typeid => $option) { writetocache($typeid, '', "\$_DTYPE = " . arrayeval($option) . ";\n\n\$_DTYPETEMPLATE = \"" . addslashes($templatedata[$typeid]) . "\";\n\n\$_DTYPEDESC = \"" . addslashes($threaddesc[$typeid]) . "\";\n", 'threadtype_'); } } if (empty($cachename) || in_array($cachename, array('forums', 'usergroups', 'settings'))) { updatespacesettings(); } }