Beispiel #1
0
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'] . '&amp;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}&amp;mod={$module}" . ($starttime ? "&amp;starttime={$starttime}" : '') . ($endtime ? "&amp;endtime={$endtime}" : '') . (isset($tradetypeid) ? "&amp;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();
    }
}