cpmsg('cloudaddons_downloading', "action=cloudaddons&operation=download&addonids={$_GET['addonids']}&i={$addoni}&step=1&md5hash=" . $_GET['md5hash'] . '&timestamp=' . $_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;
}
Example #3
0
         $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');
Example #4
0
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;
}