function build_cache_styles() { global $_G; $stylevars = $styledata = array(); $defaultstyleid = $_G['setting']['styleid']; foreach (C::t('common_stylevar')->range() as $var) { $stylevars[$var['styleid']][$var['variable']] = $var['substitute']; } foreach (C::t('common_style')->fetch_all_data(true) as $data) { $data['tpldir'] = $data['directory']; $data = array_merge($data, (array) $stylevars[$data['styleid']]); $datanew = array(); $data['imgdir'] = $data['imgdir'] ? $data['imgdir'] : STATICURL . 'image/common'; $data['styleimgdir'] = $data['styleimgdir'] ? $data['styleimgdir'] : $data['imgdir']; foreach ($data as $k => $v) { if (substr($k, -7, 7) == 'bgcolor') { $newkey = substr($k, 0, -7) . 'bgcode'; $datanew[$newkey] = setcssbackground($data, $k); } } $data = array_merge($data, $datanew); if (strstr($data['boardimg'], ',')) { $flash = explode(",", $data['boardimg']); $flash[0] = trim($flash[0]); $flash[0] = preg_match('/^http:\\/\\//i', $flash[0]) ? $flash[0] : $data['styleimgdir'] . '/' . $flash[0]; $data['boardlogo'] = "<embed src=\"" . $flash[0] . "\" width=\"" . trim($flash[1]) . "\" height=\"" . trim($flash[2]) . "\" type=\"application/x-shockwave-flash\" wmode=\"transparent\"></embed>"; } else { $data['boardimg'] = preg_match('/^http:\\/\\//i', $data['boardimg']) ? $data['boardimg'] : $data['styleimgdir'] . '/' . $data['boardimg']; $data['boardlogo'] = "<img src=\"{$data['boardimg']}\" alt=\"" . $_G['setting']['bbname'] . "\" border=\"0\" />"; } $data['bold'] = $data['nobold'] ? 'normal' : 'bold'; $contentwidthint = intval($data['contentwidth']); $contentwidthint = $contentwidthint ? $contentwidthint : 600; if ($data['extstyle']) { list($data['extstyle'], $data['defaultextstyle']) = explode('|', $data['extstyle']); $extstyle = explode("\t", $data['extstyle']); $data['extstyle'] = array(); foreach ($extstyle as $dir) { if (file_exists($extstylefile = DISCUZ_ROOT . $data['tpldir'] . '/style/' . $dir . '/style.css')) { if ($data['defaultextstyle'] == $dir) { $data['defaultextstyle'] = $data['tpldir'] . '/style/' . $dir; } $content = file_get_contents($extstylefile); if (preg_match('/\\[name\\](.+?)\\[\\/name\\]/i', $content, $r1) && preg_match('/\\[iconbgcolor](.+?)\\[\\/iconbgcolor]/i', $content, $r2)) { $data['extstyle'][] = array($data['tpldir'] . '/style/' . $dir, $r1[1], $r2[1]); } } } } $data['verhash'] = random(3); $styledata[] = $data; } foreach ($styledata as $data) { savecache('style_' . $data['styleid'], $data); if ($defaultstyleid == $data['styleid']) { savecache('style_default', $data); } writetocsscache($data); } }
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'), 'request' => array('request'), 'medals' => array('medals'), 'magics' => array('magics'), 'topicadmin' => array('modreasons'), 'archiver' => array('advs_archiver'), 'register' => array('advs_register'), 'faqs' => array('faqs'), 'secqaa' => array('secqaa'), 'censor' => array('censor'), 'ipbanned' => array('ipbanned'), 'smilies' => array('smilies_js'), 'index' => array('announcements', 'onlinelist', 'forumlinks', 'advs_index'), 'forumdisplay' => array('smilies', 'announcements_forum', 'globalstick', 'floatthreads', 'forums', 'icons', 'onlinelist', 'advs_forumdisplay'), 'viewthread' => array('smilies', 'smileytypes', 'forums', 'usergroups', 'ranks', 'bbcodes', 'smilies', 'advs_viewthread', 'tags_viewthread', 'custominfo', 'groupicon'), 'post' => array('bbcodes_display', 'bbcodes', 'smileycodes', 'smilies', 'smileytypes', 'icons'), '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 = $styledata = $styleicons = array(); $defaultstyleid = $db->result_first("SELECT value FROM {$tablepre}settings WHERE variable = 'styleid'"); list(, $imagemaxwidth) = explode("\t", $db->result_first("SELECT value FROM {$tablepre}settings WHERE variable = 'zoomstatus'")); $imagemaxwidth = $imagemaxwidth ? $imagemaxwidth : 600; $imagemaxwidthint = intval($imagemaxwidth); $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']]); $datanew = array(); $data['imgdir'] = $data['imgdir'] ? $data['imgdir'] : 'images/default'; $data['styleimgdir'] = $data['styleimgdir'] ? $data['styleimgdir'] : $data['imgdir']; foreach ($data as $k => $v) { if (substr($k, -7, 7) == 'bgcolor') { $newkey = substr($k, 0, -7) . 'bgcode'; $datanew[$newkey] = setcssbackground($data, $k); } } $data = array_merge($data, $datanew); $styleicons[$data['styleid']] = $data['menuhover']; if (strstr($data['boardimg'], ',')) { $flash = explode(",", $data['boardimg']); $flash[0] = trim($flash[0]); $flash[0] = preg_match('/^http:\\/\\//i', $flash[0]) ? $flash[0] : $data['styleimgdir'] . '/' . $flash[0]; $data['boardlogo'] = "<embed src=\"" . $flash[0] . "\" width=\"" . trim($flash[1]) . "\" height=\"" . trim($flash[2]) . "\" type=\"application/x-shockwave-flash\" wmode=\"transparent\"></embed>"; } else { $data['boardimg'] = preg_match('/^http:\\/\\//i', $data['boardimg']) ? $data['boardimg'] : $data['styleimgdir'] . '/' . $data['boardimg']; $data['boardlogo'] = "<img src=\"{$data['boardimg']}\" alt=\"{$bbname}\" border=\"0\" />"; } $data['bold'] = $data['nobold'] ? 'normal' : 'bold'; $contentwidthint = intval($data['contentwidth']); $contentwidthint = $contentwidthint ? $contentwidthint : 600; if (substr(trim($data['contentwidth']), -1, 1) != '%') { if (substr(trim($imagemaxwidth), -1, 1) != '%') { $data['imagemaxwidth'] = $imagemaxwidthint > $contentwidthint ? $contentwidthint : $imagemaxwidthint; } else { $data['imagemaxwidth'] = intval($contentwidthint * $imagemaxwidthint / 100); } } else { if (substr(trim($imagemaxwidth), -1, 1) != '%') { $data['imagemaxwidth'] = '%' . $imagemaxwidthint; } else { $data['imagemaxwidth'] = ($imagemaxwidthint > $contentwidthint ? $contentwidthint : $imagemaxwidthint) . '%'; } } $data['verhash'] = random(3); $styledata[] = $data; } foreach ($styledata as $data) { $data['styleicons'] = $styleicons; 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']); 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 == 'threadsorts') { $sortlist = $templatedata = array(); $query = $db->query("SELECT t.typeid AS sortid, 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.sortid\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']); $sortid = $data['sortid']; $optionid = $data['optionid']; $sortlist[$sortid][$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); } $sortlist[$sortid][$optionid]['choices'] = $choices; } else { $typelist[$sortid][$optionid]['choices'] = array(); } } elseif (in_array($data['type'], array('text', 'textarea'))) { $sortlist[$sortid][$optionid]['maxlength'] = intval($data['rules']['maxlength']); } elseif ($data['type'] == 'image') { $sortlist[$sortid][$optionid]['maxwidth'] = intval($data['rules']['maxwidth']); $sortlist[$sortid][$optionid]['maxheight'] = intval($data['rules']['maxheight']); } elseif ($data['type'] == 'number') { $sortlist[$sortid][$optionid]['maxnum'] = intval($data['rules']['maxnum']); $sortlist[$sortid][$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 ($sortlist as $sortid => $option) { writetocache($sortid, '', "\$_DTYPE = " . arrayeval($option) . ";\n\n\$_DTYPETEMPLATE = \"" . str_replace('"', '\\"', $templatedata[$sortid]) . "\";\n", 'threadsort_'); } } }
function build_cache_styles() { global $_G; $stylevars = $styledata = array(); $defaultstyleid = DB::result_first("SELECT svalue FROM " . DB::table('common_setting') . " WHERE skey = 'styleid'"); $zoomstatus = DB::result_first("SELECT svalue FROM " . DB::table('common_setting') . " WHERE skey = 'zoomstatus'"); list(, $imagemaxwidth) = explode("\t", $zoomstatus); $imagemaxwidth = $imagemaxwidth ? $imagemaxwidth : 600; $imagemaxwidthint = intval($imagemaxwidth); $query = DB::query("SELECT sv.* FROM " . DB::table('common_stylevar') . " sv LEFT JOIN " . DB::table('common_style') . " s ON s.styleid = sv.styleid AND (s.available=1 OR s.styleid='{$defaultstyleid}')"); while ($var = DB::fetch($query)) { $stylevars[$var['styleid']][$var['variable']] = $var['substitute']; } $query = DB::query("SELECT s.*, t.directory AS tpldir FROM " . DB::table('common_style') . " s LEFT JOIN " . DB::table('common_template') . " t ON s.templateid=t.templateid"); while ($data = DB::fetch($query)) { $data = array_merge($data, $stylevars[$data['styleid']]); $datanew = array(); $data['imgdir'] = $data['imgdir'] ? $data['imgdir'] : STATICURL . 'image/common'; $data['styleimgdir'] = $data['styleimgdir'] ? $data['styleimgdir'] : $data['imgdir']; foreach ($data as $k => $v) { if (substr($k, -7, 7) == 'bgcolor') { $newkey = substr($k, 0, -7) . 'bgcode'; $datanew[$newkey] = setcssbackground($data, $k); } } $data = array_merge($data, $datanew); if (strstr($data['boardimg'], ',')) { $flash = explode(",", $data['boardimg']); $flash[0] = trim($flash[0]); $flash[0] = preg_match('/^http:\\/\\//i', $flash[0]) ? $flash[0] : $data['styleimgdir'] . '/' . $flash[0]; $data['boardlogo'] = "<embed src=\"" . $flash[0] . "\" width=\"" . trim($flash[1]) . "\" height=\"" . trim($flash[2]) . "\" type=\"application/x-shockwave-flash\" wmode=\"transparent\"></embed>"; } else { $data['boardimg'] = preg_match('/^http:\\/\\//i', $data['boardimg']) ? $data['boardimg'] : $data['styleimgdir'] . '/' . $data['boardimg']; $data['boardlogo'] = "<img src=\"{$data['boardimg']}\" alt=\"" . $_G['setting']['bbname'] . "\" border=\"0\" />"; } $data['bold'] = $data['nobold'] ? 'normal' : 'bold'; $contentwidthint = intval($data['contentwidth']); $contentwidthint = $contentwidthint ? $contentwidthint : 600; if (substr(trim($data['contentwidth']), -1, 1) != '%') { if (substr(trim($_G['setting']['imagemaxwidth']), -1, 1) != '%') { $data['imagemaxwidth'] = $imagemaxwidthint > $contentwidthint ? $contentwidthint : $imagemaxwidthint; } else { $data['imagemaxwidth'] = intval($contentwidthint * $imagemaxwidthint / 100); } } else { if (substr(trim($_G['setting']['imagemaxwidth']), -1, 1) != '%') { $data['imagemaxwidth'] = '%' . $imagemaxwidthint; } else { $data['imagemaxwidth'] = ($imagemaxwidthint > $contentwidthint ? $contentwidthint : $imagemaxwidthint) . '%'; } } if ($data['extstyle']) { list($data['extstyle'], $data['defaultextstyle']) = explode('|', $data['extstyle']); $extstyle = explode("\t", $data['extstyle']); $data['extstyle'] = array(); foreach ($extstyle as $dir) { if (file_exists($extstylefile = DISCUZ_ROOT . $data['tpldir'] . '/style/' . $dir . '/style.css')) { if ($data['defaultextstyle'] == $dir) { $data['defaultextstyle'] = $data['tpldir'] . '/style/' . $dir; } $content = file_get_contents($extstylefile); if (preg_match('/\\[name\\](.+?)\\[\\/name\\]/i', $content, $r1) && preg_match('/\\[iconbgcolor](.+?)\\[\\/iconbgcolor]/i', $content, $r2)) { $data['extstyle'][] = array($data['tpldir'] . '/style/' . $dir, $r1[1], $r2[1]); } } } } $data['verhash'] = random(3); $styledata[] = $data; } foreach ($styledata as $data) { save_syscache('style_' . $data['styleid'], $data); if ($defaultstyleid == $data['styleid']) { save_syscache('style_default', $data); } writetocsscache($data); } }