コード例 #1
0
ファイル: cache_plugin.php プロジェクト: pan289091315/Discuz
function build_cache_plugin()
{
    global $importtxt;
    $data = array();
    $query = DB::query("SELECT * FROM " . DB::table('common_plugin') . " WHERE available='1'");
    $pluginsetting = array();
    while ($plugin = DB::fetch($query)) {
        $dir = substr($plugin['directory'], 0, -1);
        $plugin['modules'] = unserialize($plugin['modules']);
        if ($plugin['modules']['extra']['langexists']) {
            require_once libfile('function/plugin');
            require_once libfile('function/admincp');
            $file = DISCUZ_ROOT . './source/plugin/' . $dir . '/discuz_plugin_' . $dir . ($plugin['modules']['extra']['installtype'] ? '_' . $plugin['modules']['extra']['installtype'] : '') . '.xml';
            $importtxt = @implode('', file($file));
            $pluginarray = getimportdata('Discuz! Plugin', 1, 1);
            if ($pluginarray) {
                updatepluginlanguage($pluginarray);
            }
        }
        $queryvars = DB::query("SELECT * FROM " . DB::table('common_pluginvar') . " WHERE pluginid='{$plugin['pluginid']}'");
        while ($var = DB::fetch($queryvars)) {
            $data[$plugin['identifier']][$var['variable']] = $var['value'];
            if (in_array(substr($var['type'], 0, 6), array('group_', 'forum_'))) {
                $stype = substr($var['type'], 0, 5) . 's';
                $type = substr($var['type'], 6);
                if ($type == 'select') {
                    foreach (explode("\n", $var['extra']) as $key => $option) {
                        $option = trim($option);
                        if (strpos($option, '=') === FALSE) {
                            $key = $option;
                        } else {
                            $item = explode('=', $option);
                            $key = trim($item[0]);
                            $option = trim($item[1]);
                        }
                        $var['select'][] = array($key, $option);
                    }
                }
                $pluginsetting[$stype][$plugin['identifier']]['name'] = $plugin['name'];
                $pluginsetting[$stype][$plugin['identifier']]['setting'][$var['pluginvarid']] = array('title' => $var['title'], 'description' => $var['description'], 'type' => $type, 'select' => $var['select']);
            }
        }
    }
    writetocache('pluginsetting', getcachevars(array('pluginsetting' => $pluginsetting)));
    save_syscache('plugin', $data);
}
コード例 #2
0
function pluginupgrade($pluginarray, $installtype)
{
    if (!$pluginarray || !$pluginarray['plugin']['identifier']) {
        return false;
    }
    $plugin = C::t('common_plugin')->fetch_by_identifier($pluginarray['plugin']['identifier']);
    if (!$plugin) {
        return false;
    }
    if (is_array($pluginarray['var'])) {
        $pluginvars = $pluginvarsnew = array();
        foreach (C::t('common_pluginvar')->fetch_all_by_pluginid($plugin['pluginid']) as $pluginvar) {
            $pluginvars[] = $pluginvar['variable'];
        }
        foreach ($pluginarray['var'] as $config) {
            if (!in_array($config['variable'], $pluginvars)) {
                $data = array('pluginid' => $plugin[pluginid]);
                foreach ($config as $key => $val) {
                    $data[$key] = $val;
                }
                C::t('common_pluginvar')->insert($data);
            } else {
                $data = array();
                foreach ($config as $key => $val) {
                    if ($key != 'value') {
                        $data[$key] = $val;
                    }
                }
                if ($data) {
                    C::t('common_pluginvar')->update_by_variable($plugin['pluginid'], $config['variable'], $data);
                }
            }
            $pluginvarsnew[] = $config['variable'];
        }
        $pluginvardiff = array_diff($pluginvars, $pluginvarsnew);
        if ($pluginvardiff) {
            C::t('common_pluginvar')->delete_by_variable($plugin['pluginid'], $pluginvardiff);
        }
    }
    $langexists = updatepluginlanguage($pluginarray);
    $pluginarray['plugin']['modules'] = dunserialize($pluginarray['plugin']['modules']);
    $plugin['modules'] = dunserialize($plugin['modules']);
    if (!empty($plugin['modules']['system'])) {
        $pluginarray['plugin']['modules']['system'] = $plugin['modules']['system'];
    }
    $plugin['modules']['extra']['installtype'] = $installtype;
    $pluginarray['plugin']['modules']['extra'] = $plugin['modules']['extra'];
    if (!empty($pluginarray['intro']) || $langexists) {
        if (!empty($pluginarray['intro'])) {
            require_once libfile('function/discuzcode');
            $pluginarray['plugin']['modules']['extra']['intro'] = discuzcode(strip_tags($pluginarray['intro']), 1, 0);
        }
        $langexists && ($pluginarray['plugin']['modules']['extra']['langexists'] = 1);
    }
    if (!empty($pluginarray['uninstallfile'])) {
        $pluginarray['plugin']['modules']['extra']['uninstallfile'] = $pluginarray['uninstallfile'];
    }
    if (!empty($pluginarray['checkfile'])) {
        $pluginarray['plugin']['modules']['extra']['checkfile'] = $pluginarray['checkfile'];
    }
    if (!empty($pluginarray['enablefile'])) {
        $pluginarray['plugin']['modules']['extra']['enablefile'] = $pluginarray['enablefile'];
    }
    if (!empty($pluginarray['disablefile'])) {
        $pluginarray['plugin']['modules']['extra']['disablefile'] = $pluginarray['disablefile'];
    }
    $pluginarray['plugin']['modules'] = serialize($pluginarray['plugin']['modules']);
    C::t('common_plugin')->update($plugin['pluginid'], array('version' => $pluginarray['plugin']['version'], 'modules' => $pluginarray['plugin']['modules']));
    cloudaddons_installlog($pluginarray['plugin']['identifier'] . '.plugin');
    cron_create($pluginarray['plugin']['identifier']);
    updatecache(array('plugin', 'setting', 'styles'));
    cleartemplatecache();
    dsetcookie('addoncheck_plugin', '', -1);
    return true;
}
コード例 #3
0
function pluginupgrade($pluginarray, $installtype)
{
    if (!$pluginarray || !$pluginarray['plugin']['identifier']) {
        return false;
    }
    $plugin = DB::fetch_first("SELECT name, pluginid, modules FROM " . DB::table('common_plugin') . " WHERE identifier='{$pluginarray[plugin][identifier]}' LIMIT 1");
    if (!$plugin) {
        return false;
    }
    if (is_array($pluginarray['var'])) {
        $query = DB::query("SELECT variable FROM " . DB::table('common_pluginvar') . " WHERE pluginid='{$plugin['pluginid']}'");
        $pluginvars = $pluginvarsnew = array();
        while ($pluginvar = DB::fetch($query)) {
            $pluginvars[] = $pluginvar['variable'];
        }
        foreach ($pluginarray['var'] as $config) {
            if (!in_array($config['variable'], $pluginvars)) {
                $data = array('pluginid' => $plugin[pluginid]);
                foreach ($config as $key => $val) {
                    $data[$key] = $val;
                }
                DB::insert('common_pluginvar', $data);
            } else {
                $sql = $comma = '';
                foreach ($config as $key => $val) {
                    if ($key != 'value') {
                        $sql .= $comma . $key . '=\'' . $val . '\'';
                        $comma = ',';
                    }
                }
                if ($sql) {
                    DB::query("UPDATE " . DB::table('common_pluginvar') . " SET {$sql} WHERE pluginid='{$plugin['pluginid']}' AND variable='{$config['variable']}'");
                }
            }
            $pluginvarsnew[] = $config['variable'];
        }
        $pluginvardiff = array_diff($pluginvars, $pluginvarsnew);
        if ($pluginvardiff) {
            DB::query("DELETE FROM " . DB::table('common_pluginvar') . " WHERE pluginid='{$plugin['pluginid']}' AND variable IN (" . dimplode($pluginvardiff) . ")");
        }
    }
    $langexists = updatepluginlanguage($pluginarray);
    $pluginarray['plugin']['modules'] = unserialize(dstripslashes($pluginarray['plugin']['modules']));
    $plugin['modules'] = unserialize($plugin['modules']);
    if (!empty($plugin['modules']['system'])) {
        $pluginarray['plugin']['modules']['system'] = $plugin['modules']['system'];
    }
    $plugin['modules']['extra']['installtype'] = $installtype;
    $pluginarray['plugin']['modules']['extra'] = $plugin['modules']['extra'];
    if (!empty($pluginarray['intro']) || $langexists) {
        if (!empty($pluginarray['intro'])) {
            require_once libfile('function/discuzcode');
            $pluginarray['plugin']['modules']['extra']['intro'] = discuzcode(dstripslashes(strip_tags($pluginarray['intro'])), 1, 0);
        }
        $langexists && ($pluginarray['plugin']['modules']['extra']['langexists'] = 1);
    }
    $pluginarray['plugin']['modules'] = addslashes(serialize($pluginarray['plugin']['modules']));
    DB::query("UPDATE " . DB::table('common_plugin') . " SET version='{$pluginarray[plugin][version]}', modules='{$pluginarray[plugin][modules]}' WHERE pluginid='{$plugin['pluginid']}'");
    updatecache(array('plugin', 'setting', 'styles'));
    return true;
}