예제 #1
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;
}
예제 #2
0
파일: cp.php 프로젝트: druphliu/dzzoffice
    $apparray = getimportdata('Dzz! app');
    $filename = $apparray['app']['extra']['installfile'];
    $request_uri = ADMINSCRIPT . '?mod=app';
    if (!empty($filename) && preg_match('/^[\\w\\.]+$/', $filename)) {
        $filename = DZZ_ROOT . './dzz/' . $dir . '/' . $filename;
        if (file_exists($filename)) {
            @(include_once $filename);
        } else {
            $finish = TRUE;
        }
    } else {
        $finish = TRUE;
    }
    if ($finish) {
        if ($app = importByarray($apparray, 1)) {
            cron_create($app['identifier']);
        }
        showmessage('应用安装成功', ADMINSCRIPT . '?mod=app&op=list&do=available', array(), array('alert' => 'right'));
    }
} elseif ($do == 'uninstall') {
    //卸载应用
    $appid = intval($_GET['appid']);
    if (!($app = C::t('app_market')->fetch($appid))) {
        showmessage('应用不存在,或已删除', ADMINSCRIPT . '?mod=app&op=list&do=available', array(), array('alert' => 'right'));
    }
    $app['extra'] = unserialize($app['extra']);
    $finish = FALSE;
    $request_uri = ADMINSCRIPT . '?mod=app';
    $msg = '应用卸载成功!';
    if ($app['identifier']) {
        $entrydir = DZZ_ROOT . './dzz/' . $app['identifier'];