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