mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-30 18:46:01 +01:00
fix: don't move theme/plugin to top if its already active
This commit is contained in:
@@ -63,9 +63,19 @@ function activate(plugin) {
|
|||||||
if (!isInstalled) {
|
if (!isInstalled) {
|
||||||
return next(new Error('plugin not installed'));
|
return next(new Error('plugin not installed'));
|
||||||
}
|
}
|
||||||
|
plugins.isActive(plugin, next);
|
||||||
|
},
|
||||||
|
function (isActive, next) {
|
||||||
|
if (isActive) {
|
||||||
|
winston.info('Plugin `%s` already active', plugin);
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
db.sortetSetCard('plugins:active', next);
|
||||||
|
},
|
||||||
|
function (numPlugins, next) {
|
||||||
winston.info('Activating plugin `%s`', plugin);
|
winston.info('Activating plugin `%s`', plugin);
|
||||||
db.sortedSetAdd('plugins:active', 0, plugin, next);
|
db.sortedSetAdd('plugins:active', numPlugins, plugin, next);
|
||||||
},
|
},
|
||||||
function (next) {
|
function (next) {
|
||||||
events.log({
|
events.log({
|
||||||
|
|||||||
@@ -86,31 +86,28 @@ async function getThemes(themePath) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Themes.set = async (data) => {
|
Themes.set = async (data) => {
|
||||||
const themeData = {
|
|
||||||
'theme:type': data.type,
|
|
||||||
'theme:id': data.id,
|
|
||||||
'theme:staticDir': '',
|
|
||||||
'theme:templates': '',
|
|
||||||
'theme:src': '',
|
|
||||||
};
|
|
||||||
|
|
||||||
switch (data.type) {
|
switch (data.type) {
|
||||||
case 'local': {
|
case 'local': {
|
||||||
const current = await Meta.configs.get('theme:id');
|
const current = await Meta.configs.get('theme:id');
|
||||||
var config = await fsReadfile(path.join(nconf.get('themes_path'), data.id, 'theme.json'), 'utf8');
|
if (current !== data.id) {
|
||||||
|
let config = await fsReadfile(path.join(nconf.get('themes_path'), data.id, 'theme.json'), 'utf8');
|
||||||
config = JSON.parse(config);
|
config = JSON.parse(config);
|
||||||
await db.sortedSetRemove('plugins:active', current);
|
|
||||||
await db.sortedSetAdd('plugins:active', 0, data.id);
|
|
||||||
|
|
||||||
|
await db.sortedSetRemove('plugins:active', current);
|
||||||
|
const numPlugins = await db.sortedSetCard('plugins:active');
|
||||||
|
await db.sortedSetAdd('plugins:active', numPlugins, data.id);
|
||||||
// Re-set the themes path (for when NodeBB is reloaded)
|
// Re-set the themes path (for when NodeBB is reloaded)
|
||||||
Themes.setPath(config);
|
Themes.setPath(config);
|
||||||
|
|
||||||
themeData['theme:staticDir'] = config.staticDir ? config.staticDir : '';
|
await Meta.configs.setMultiple({
|
||||||
themeData['theme:templates'] = config.templates ? config.templates : '';
|
'theme:type': data.type,
|
||||||
themeData['theme:src'] = '';
|
'theme:id': data.id,
|
||||||
themeData.bootswatchSkin = '';
|
'theme:staticDir': config.staticDir ? config.staticDir : '',
|
||||||
|
'theme:templates': config.templates ? config.templates : '',
|
||||||
|
'theme:src': '',
|
||||||
|
bootswatchSkin: '',
|
||||||
|
});
|
||||||
|
|
||||||
await Meta.configs.setMultiple(themeData);
|
|
||||||
await events.log({
|
await events.log({
|
||||||
type: 'theme-set',
|
type: 'theme-set',
|
||||||
uid: parseInt(data.uid, 10) || 0,
|
uid: parseInt(data.uid, 10) || 0,
|
||||||
@@ -119,6 +116,7 @@ Themes.set = async (data) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
Meta.reloadRequired = true;
|
Meta.reloadRequired = true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'bootswatch':
|
case 'bootswatch':
|
||||||
|
|||||||
@@ -106,27 +106,18 @@ SocketAdmin.themes.getInstalled = function (socket, data, callback) {
|
|||||||
meta.themes.get(callback);
|
meta.themes.get(callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
SocketAdmin.themes.set = function (socket, data, callback) {
|
SocketAdmin.themes.set = async function (socket, data) {
|
||||||
if (!data) {
|
if (!data) {
|
||||||
return callback(new Error('[[error:invalid-data]]'));
|
throw new Error('[[error:invalid-data]]');
|
||||||
|
}
|
||||||
|
if (data.type === 'local') {
|
||||||
|
await widgets.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
async.waterfall([
|
|
||||||
function (next) {
|
|
||||||
if (data.type === 'bootswatch') {
|
|
||||||
setImmediate(next);
|
|
||||||
} else {
|
|
||||||
widgets.reset(next);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
function (next) {
|
|
||||||
// Add uid and ip data
|
|
||||||
data.ip = socket.ip;
|
data.ip = socket.ip;
|
||||||
data.uid = socket.uid;
|
data.uid = socket.uid;
|
||||||
|
|
||||||
meta.themes.set(data, next);
|
await meta.themes.set(data);
|
||||||
},
|
|
||||||
], callback);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
SocketAdmin.plugins.toggleActive = async function (socket, plugin_id) {
|
SocketAdmin.plugins.toggleActive = async function (socket, plugin_id) {
|
||||||
|
|||||||
Reference in New Issue
Block a user