mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-04 21:15:55 +01:00
plugin installation takes a version now, and queries nbbpm, #2363
better error handling for #2363 upgrades now also call the suggestion route from nbbpm upgrade button will show alert now if you try to upgrade past the suggested version, #2363
This commit is contained in:
@@ -33,35 +33,16 @@ define('admin/extend/plugins', function() {
|
||||
pluginsList.on('click', 'button[data-action="toggleInstall"]', function() {
|
||||
pluginID = $(this).parents('li').attr('data-plugin-id');
|
||||
|
||||
var btn = $(this);
|
||||
var activateBtn = btn.siblings('[data-action="toggleActive"]');
|
||||
btn.html(btn.html() + 'ing')
|
||||
.attr('disabled', true)
|
||||
.find('i').attr('class', 'fa fa-refresh fa-spin');
|
||||
|
||||
socket.emit('admin.plugins.toggleInstall', pluginID, function(err, status) {
|
||||
if (err) {
|
||||
return app.alertError(err.message);
|
||||
}
|
||||
|
||||
if (status.installed) {
|
||||
btn.html('<i class="fa fa-trash-o"></i> Uninstall');
|
||||
Plugins.suggest(pluginID, function(err, payload) {
|
||||
if (!err) {
|
||||
Plugins.toggleInstall(pluginID, payload.version);
|
||||
} else {
|
||||
btn.html('<i class="fa fa-download"></i> Install');
|
||||
|
||||
bootbox.confirm('<p>NodeBB could not reach the package manager, proceed with installation of latest version?</p><div class="alert alert-danger"><strong>Server returned (' + err.status + ')</strong>: ' + err.responseText + '</div>', function(confirm) {
|
||||
if (confirm) {
|
||||
Plugins.toggleInstall(pluginID, 'latest');
|
||||
}
|
||||
});
|
||||
}
|
||||
activateBtn.toggleClass('hidden', !status.installed);
|
||||
|
||||
btn.toggleClass('btn-danger', status.installed).toggleClass('btn-success', !status.installed)
|
||||
.attr('disabled', false);
|
||||
|
||||
app.alert({
|
||||
alert_id: 'plugin_toggled',
|
||||
title: 'Plugin ' + (status.installed ? 'Installed' : 'Uninstalled'),
|
||||
message: status.installed ? 'Plugin successfully installed, please activate the plugin.' : 'The plugin has been successfully deactivated and uninstalled.',
|
||||
type: 'info',
|
||||
timeout: 5000
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -70,15 +51,30 @@ define('admin/extend/plugins', function() {
|
||||
var parent = btn.parents('li');
|
||||
pluginID = parent.attr('data-plugin-id');
|
||||
|
||||
btn.attr('disabled', true).find('i').attr('class', 'fa fa-refresh fa-spin');
|
||||
|
||||
socket.emit('admin.plugins.upgrade', pluginID, function(err) {
|
||||
if (err) {
|
||||
return app.alertError(err.message);
|
||||
Plugins.suggest(pluginID, function(err, payload) {
|
||||
if (!err) {
|
||||
require(['semver'], function(semver) {
|
||||
if (semver.gt(payload.version, parent.find('.currentVersion').text())) {
|
||||
btn.attr('disabled', true).find('i').attr('class', 'fa fa-refresh fa-spin');
|
||||
socket.emit('admin.plugins.upgrade', {
|
||||
id: pluginID,
|
||||
version: payload.version
|
||||
}, function(err) {
|
||||
if (err) {
|
||||
return app.alertError(err.message);
|
||||
}
|
||||
parent.find('.fa-exclamation-triangle').remove();
|
||||
parent.find('.currentVersion').text(payload.version);
|
||||
btn.remove();
|
||||
});
|
||||
} else {
|
||||
bootbox.alert('<p>Your version of NodeBB (v' + app.config.version + ') is only cleared to upgrade to v' + payload.version + ' of this plugin. Please update your NodeBB if you wish to install a newer version of this plugin.');
|
||||
}
|
||||
});
|
||||
} else {
|
||||
bootbox.alert('<p>NodeBB could not reach the package manager, an upgrade is not suggested at this time.</p>');
|
||||
}
|
||||
parent.find('.fa-exclamation-triangle').remove();
|
||||
parent.find('.currentVersion').text(parent.find('.latestVersion').text());
|
||||
btn.remove();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -94,6 +90,58 @@ define('admin/extend/plugins', function() {
|
||||
} else {
|
||||
pluginsList.append('<li><p><i>No plugins found.</i></p></li>');
|
||||
}
|
||||
},
|
||||
toggleInstall: function(pluginID, version, callback) {
|
||||
var btn = $('li[data-plugin-id="' + pluginID + '"] button[data-action="toggleInstall"]');
|
||||
var activateBtn = btn.siblings('[data-action="toggleActive"]');
|
||||
btn.html(btn.html() + 'ing')
|
||||
.attr('disabled', true)
|
||||
.find('i').attr('class', 'fa fa-refresh fa-spin');
|
||||
|
||||
socket.emit('admin.plugins.toggleInstall', {
|
||||
id: pluginID,
|
||||
version: version
|
||||
}, function(err, status) {
|
||||
if (err) {
|
||||
return app.alertError(err.message);
|
||||
}
|
||||
|
||||
if (status.installed) {
|
||||
btn.html('<i class="fa fa-trash-o"></i> Uninstall');
|
||||
} else {
|
||||
btn.html('<i class="fa fa-download"></i> Install');
|
||||
|
||||
}
|
||||
activateBtn.toggleClass('hidden', !status.installed);
|
||||
|
||||
btn.toggleClass('btn-danger', status.installed).toggleClass('btn-success', !status.installed)
|
||||
.attr('disabled', false);
|
||||
|
||||
app.alert({
|
||||
alert_id: 'plugin_toggled',
|
||||
title: 'Plugin ' + (status.installed ? 'Installed' : 'Uninstalled'),
|
||||
message: status.installed ? 'Plugin successfully installed, please activate the plugin.' : 'The plugin has been successfully deactivated and uninstalled.',
|
||||
type: 'info',
|
||||
timeout: 5000
|
||||
});
|
||||
|
||||
if (typeof callback === 'function') {
|
||||
callback.apply(this, arguments);
|
||||
}
|
||||
});
|
||||
},
|
||||
suggest: function(pluginId, callback) {
|
||||
var nbbVersion = app.config.version;
|
||||
$.ajax('https://packages.nodebb.org/api/v1/suggest', {
|
||||
type: 'GET',
|
||||
data: {
|
||||
package: pluginId,
|
||||
version: nbbVersion
|
||||
},
|
||||
dataType: 'json'
|
||||
}).done(function(payload) {
|
||||
callback(undefined, payload);
|
||||
}).fail(callback);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
'use strict';
|
||||
|
||||
var winston = require('winston'),
|
||||
db = require('../database');
|
||||
db = require('../database'),
|
||||
pkg = require('../../package.json');
|
||||
|
||||
module.exports = function(Meta) {
|
||||
|
||||
@@ -25,6 +26,7 @@ module.exports = function(Meta) {
|
||||
|
||||
Meta.configs.list = function (callback) {
|
||||
db.getObject('config', function (err, config) {
|
||||
config.version = pkg.version;
|
||||
callback(err, config || {});
|
||||
});
|
||||
};
|
||||
|
||||
@@ -550,7 +550,7 @@ var fs = require('fs'),
|
||||
});
|
||||
};
|
||||
|
||||
Plugins.toggleInstall = function(id, callback) {
|
||||
Plugins.toggleInstall = function(id, version, callback) {
|
||||
Plugins.isInstalled(id, function(err, installed) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
@@ -573,7 +573,7 @@ var fs = require('fs'),
|
||||
npm.load({}, next);
|
||||
},
|
||||
function(res, next) {
|
||||
npm.commands[installed ? 'uninstall' : 'install'](installed ? id : [id], next);
|
||||
npm.commands[installed ? 'uninstall' : 'install'](installed ? id : [id + '@' + (version || 'latest')], next);
|
||||
}
|
||||
], function(err) {
|
||||
callback(err, {
|
||||
@@ -584,13 +584,13 @@ var fs = require('fs'),
|
||||
});
|
||||
};
|
||||
|
||||
Plugins.upgrade = function(id, callback) {
|
||||
Plugins.upgrade = function(id, version, callback) {
|
||||
async.waterfall([
|
||||
function(next) {
|
||||
npm.load({}, next);
|
||||
},
|
||||
function(res, next) {
|
||||
npm.commands.install([id], next);
|
||||
npm.commands.install([id + '@' + (version || 'latest')], next);
|
||||
}
|
||||
], callback);
|
||||
};
|
||||
|
||||
@@ -97,12 +97,12 @@ SocketAdmin.plugins.toggleActive = function(socket, plugin_id, callback) {
|
||||
plugins.toggleActive(plugin_id, callback);
|
||||
};
|
||||
|
||||
SocketAdmin.plugins.toggleInstall = function(socket, plugin_id, callback) {
|
||||
plugins.toggleInstall(plugin_id, callback);
|
||||
SocketAdmin.plugins.toggleInstall = function(socket, data, callback) {
|
||||
plugins.toggleInstall(data.id, data.version, callback);
|
||||
};
|
||||
|
||||
SocketAdmin.plugins.upgrade = function(socket, plugin_id, callback) {
|
||||
plugins.upgrade(plugin_id, callback);
|
||||
SocketAdmin.plugins.upgrade = function(socket, data, callback) {
|
||||
plugins.upgrade(data.id, data.version, callback);
|
||||
};
|
||||
|
||||
SocketAdmin.widgets.set = function(socket, data, callback) {
|
||||
|
||||
Reference in New Issue
Block a user