diff --git a/src/plugins.js b/src/plugins.js index 35381a3fa0..237f0ddbb7 100644 --- a/src/plugins.js +++ b/src/plugins.js @@ -640,19 +640,18 @@ var fs = require('fs'), async.each(installedPlugins, function(plugin, next) { - pluginMap[plugin.id] = pluginMap[plugin.id] || {}; - pluginMap[plugin.id].id = pluginMap[plugin.id].id || plugin.id; - pluginMap[plugin.id].name = pluginMap[plugin.id].name || plugin.id; - pluginMap[plugin.id].description = plugin.description; - pluginMap[plugin.id].url = pluginMap[plugin.id].url || plugin.url; - pluginMap[plugin.id].installed = true; - - Plugins.isActive(plugin.id, function(err, active) { - if (err) { - return next(err); - } - - pluginMap[plugin.id].active = active; + pluginMap[plugin.name] = pluginMap[plugin.name] || {}; + pluginMap[plugin.name].id = pluginMap[plugin.name].id || plugin.name; + pluginMap[plugin.name].name = pluginMap[plugin.name].name || plugin.name; + pluginMap[plugin.name].description = plugin.description; + pluginMap[plugin.name].url = pluginMap[plugin.name].url || plugin.url; + pluginMap[plugin.name].installed = true; + pluginMap[plugin.name].active = plugin.active; + pluginMap[plugin.name].version = plugin.version; + + getVersion(plugin.name, function(err, version) { + pluginMap[plugin.name].latest = version; + pluginMap[plugin.name].outdated = version !== pluginMap[plugin.name].version; next(); }); }, function(err) { @@ -683,6 +682,19 @@ var fs = require('fs'), }); }; + function getVersion(name, callback) { + var npm = require('npm'); + npm.load({}, function() { + npm.commands.show([name, 'version'], true, function(err, version) { + if (err || !version) { + return callback(null, 'no version'); + } + var obj = Object.keys(version); + callback(null, Array.isArray(obj) && obj.length ? obj[0] : 'no version'); + }); + }); + } + Plugins.isInstalled = function(id, callback) { var pluginDir = path.join(__dirname, '../node_modules', id); @@ -725,7 +737,7 @@ var fs = require('fs'), async.waterfall([ function(next) { - fs.readFile(path.join(file, 'plugin.json'), next); + fs.readFile(path.join(file, 'package.json'), next); }, function(configJSON, next) { var config; @@ -737,13 +749,12 @@ var fs = require('fs'), return next(err, null); } - Plugins.isActive(config.id, function(err, active) { + Plugins.isActive(config.name, function(err, active) { if (err) { next(new Error('no-active-state')); } - delete config.library; - delete config.hooks; + config.active = active; config.installed = true; diff --git a/src/views/admin/extend/plugins.tpl b/src/views/admin/extend/plugins.tpl index 643a07b786..115eed1e08 100644 --- a/src/views/admin/extend/plugins.tpl +++ b/src/views/admin/extend/plugins.tpl @@ -18,6 +18,7 @@ <!-- IF plugins.description --> <p>{plugins.description}</p> <!-- ENDIF plugins.description --> + <!-- IF plugins.outdated --><i class="fa fa-exclamation-triangle text-danger"></i> <!-- ENDIF plugins.outdated --><small>Installed <strong>{plugins.version}</strong> | Latest <strong>{plugins.latest}</strong></small> <!-- IF plugins.url --> <p>For more information: <a href="{plugins.url}">{plugins.url}</a></p> <!-- ENDIF plugins.url -->