cpmsg('cloudaddons_downloading', "action=cloudaddons&operation=download&addonids={$_GET['addonids']}&i={$addoni}&step=1&md5hash=" . $_GET['md5hash'] . '×tamp=' . $_GET['timestamp'], 'loading', array('addonid' => $_GET['key'] . '.' . $_GET['type']), FALSE); } list($_GET['key'], $_GET['type'], $_GET['rid']) = explode('.', $addonids[0]); cloudaddons_downloadlog($_GET['key'] . '.' . $_GET['type']); if ($_GET['type'] == 'plugin') { $plugin = C::t('common_plugin')->fetch_by_identifier($_GET['key']); if (!$plugin['pluginid']) { dheader('location: ' . ADMINSCRIPT . '?action=plugins&operation=import&dir=' . $_GET['key']); } else { dheader('location: ' . ADMINSCRIPT . '?action=plugins&operation=upgrade&pluginid=' . $plugin['pluginid']); } } elseif ($_GET['type'] == 'template') { dheader('location: ' . ADMINSCRIPT . '?action=styles&operation=import&dir=' . $_GET['key']); } else { cloudaddons_validator($_GET['key'] . '.pack'); cloudaddons_installlog($_GET['key'] . '.pack'); if (file_exists('saekv://data/addonpack/' . $_GET['key'] . '.php')) { dheader('location: ' . $_G['siteurl'] . 'data/addonpack/' . $_GET['key'] . '.php'); } cpmsg('cloudaddons_pack_installed', '', 'succeed'); } } } function dir_clear($dir) { if (strstr($dir, 'saekv://')) { clearkvfolder(substr($dir, 8)); } elseif ($directory = @dir($dir)) { while ($entry = $directory->read()) { if ($entry == '.' || $entry == '..') { continue;
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; }
$filename = DISCUZ_ROOT . './source/plugin/' . $plugin['identifier'] . '/' . $pluginarray['checkfile']; if (file_exists($filename)) { loadcache('pluginlanguage_install'); $installlang = $_G['cache']['pluginlanguage_install'][$plugin['identifier']]; @(include $filename); } } if ($upgrade) { cpmsg('plugins_config_upgrade_confirm', 'action=plugins&operation=upgrade&pluginid=' . $pluginid . '&confirm=yes', 'form', array('pluginname' => $plugin['name'], 'version' => $plugin['version'], 'toversion' => $newver)); } elseif ($upgradestr) { echo '<h3>' . cplang('discuz_message') . '</h3><div class="infobox"><h4 class="marginbot normal">' . cplang('plugins_config_upgrade_other', array('pluginname' => $plugin['name'], 'version' => $plugin['version'])) . '</h4><br /><p class="margintop">' . $upgradestr . '<input class="btn" onclick="location.href=\'' . ADMINSCRIPT . '?action=plugins\'" type="button" value="' . $lang['cancel'] . '"/></div></div>'; } else { $addonid = $plugin['identifier'] . '.plugin'; $checkresult = dunserialize(cloudaddons_upgradecheck(array($addonid))); list($return, $newver, $sysver) = explode(':', $checkresult[$addonid]); cloudaddons_installlog($pluginarray['plugin']['identifier'] . '.plugin'); dsetcookie('addoncheck_plugin', '', -1); cloudaddons_clear('plugin', $dir); if ($sysver && $sysver > $plugin['version']) { cpmsg('plugins_config_upgrade_new', '', 'succeed', array('newver' => $sysver, 'addonid' => $addonid)); } elseif ($newver) { cpmsg('plugins_config_upgrade_new', '', 'succeed', array('newver' => $newver, 'addonid' => $addonid)); } else { cpmsg('plugins_config_upgrade_missed', 'action=plugins', 'succeed'); } } } else { $installtype = !isset($_GET['installtype']) ? $modules['extra']['installtype'] : (preg_match('/^\\w+$/', $_GET['installtype']) ? $_GET['installtype'] : ''); $importfile = DISCUZ_ROOT . './source/plugin/' . $dir . '/discuz_plugin_' . $dir . ($installtype ? '_' . $installtype : '') . '.xml'; if (!file_exists($importfile)) { cpmsg('plugin_file_error', '', 'error');
function import_styles($ignoreversion = 1, $dir = '', $restoreid = 0, $updatecache = 1, $validate = 1) { global $_G, $importtxt, $stylearray; if (!isset($dir)) { $stylearrays = array(getimportdata('Discuz! Style')); } else { require_once libfile('function/cloudaddons'); if (!$restoreid) { $dir = str_replace(array('/', '\\'), '', $dir); $templatedir = DISCUZ_ROOT . './template/' . $dir; if ($validate) { cloudaddons_validator($dir . '.template'); } } else { $templatedir = DISCUZ_ROOT . $dir; $dir = basename($dir); if ($validate) { cloudaddons_validator($dir . '.template'); } } $searchdir = dir($templatedir); $stylearrays = array(); while ($searchentry = $searchdir->read()) { if (substr($searchentry, 0, 13) == 'discuz_style_' && fileext($searchentry) == 'xml') { $importfile = $templatedir . '/' . $searchentry; $importtxt = implode('', file($importfile)); $stylearrays[] = getimportdata('Discuz! Style'); } } } foreach ($stylearrays as $stylearray) { if (empty($ignoreversion) && strip_tags($stylearray['version']) != strip_tags($_G['setting']['version'])) { cpmsg('styles_import_version_invalid', 'action=styles', 'error', array('cur_version' => $stylearray['version'], 'set_version' => $_G['setting']['version'])); } if (!$restoreid) { $renamed = 0; if ($stylearray['templateid'] != 1) { $templatedir = DISCUZ_ROOT . './' . $stylearray['directory']; if (!is_dir($templatedir)) { if (!@mkdir($templatedir, 0777)) { $basedir = dirname($stylearray['directory']); cpmsg('styles_import_directory_invalid', 'action=styles', 'error', array('basedir' => $basedir, 'directory' => $stylearray['directory'])); } } if (!($templateid = C::t('common_template')->get_templateid($stylearray['tplname']))) { $templateid = C::t('common_template')->insert(array('name' => $stylearray['tplname'], 'directory' => $stylearray['directory'], 'copyright' => $stylearray['copyright']), true); } } else { $templateid = 1; } if (C::t('common_style')->check_stylename($stylearray['name'])) { $renamed = 1; } else { $styleidnew = C::t('common_style')->insert(array('name' => $stylearray['name'], 'templateid' => $templateid), true); } } else { $styleidnew = $restoreid; C::t('common_stylevar')->delete_by_styleid($styleidnew); } foreach ($stylearray['style'] as $variable => $substitute) { $substitute = @dhtmlspecialchars($substitute); C::t('common_stylevar')->insert(array('styleid' => $styleidnew, 'variable' => $variable, 'substitute' => $substitute)); } } if ($dir) { cloudaddons_installlog($dir . '.template'); } if ($updatecache) { updatecache('styles'); updatecache('setting'); } return $renamed; }