--- a
+++ b/functions/adminfunc/plugin_askinstall.m
@@ -0,0 +1,95 @@
+% PLUGIN_ASKINSTALL - install EEGLAB plugin from a GUI or command line
+%                       call.
+% Usage:
+%  plugin_askinstall(pluginName, pluginFunc, force);
+%
+% Inputs:
+%  pluginName - [string] name of the plugin
+%  pluginFunc - [string] function belonging to the plugin
+%  force       - [boolean] force install (even if already installed)
+%
+% Example:
+%   Force install BVA-IO
+%   plugin_askinstall('bva-io', [], true);
+
+% Copyright (C) 2012- Arnaud Delorme
+%
+% This file is part of EEGLAB, see http://www.eeglab.org
+% for the documentation and details.
+%
+% Redistribution and use in source and binary forms, with or without
+% modification, are permitted provided that the following conditions are met:
+%
+% 1. Redistributions of source code must retain the above copyright notice,
+% this list of conditions and the following disclaimer.
+%
+% 2. Redistributions in binary form must reproduce the above copyright notice,
+% this list of conditions and the following disclaimer in the documentation
+% and/or other materials provided with the distribution.
+%
+% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+% THE POSSIBILITY OF SUCH DAMAGE.
+
+function installRes = plugin_askinstall(pluginName, pluginFunc, forceInstall)
+
+if nargin < 3, forceInstall = false; end
+
+if nargin < 2 || ~exist(char(pluginFunc))
+    
+    if ~forceInstall
+        db = dbstack;
+        if length(db) > 2 && ~strcmpi(db(end).file, 'checkouteeglab.m')
+            error([ 'Cannot find ' pluginName ' extension, use EEGLAB Extension Manager to install it' ]);
+        end
+
+        installRes = 0;
+
+        % check is deactivated
+        try, PLUGINLIST = evalin('base', 'PLUGINLIST'); catch, PLUGINLIST = []; end
+        if ~isempty(PLUGINLIST) && isfield(PLUGINLIST, 'plugin')
+            indPlugin = strmatch(lower(pluginName), lower({ PLUGINLIST.plugin }), 'exact');
+            if ~isempty(indPlugin) && strcmpi(PLUGINLIST(indPlugin(1)).status, 'deactivated')
+                res = questdlg2( [ pluginName ' extension is de-activated. Do you want to reactivate it now?' ], [ pluginName ' extension installation' ], 'No', 'Yes', 'Yes' );
+                if strcmpi(res, 'no'), return, end
+                plugin_reactivate(PLUGINLIST(indPlugin(1)).foldername);
+                evalin('base', 'eeglab rebuild');
+                installRes = 1;
+                return;
+            end
+        end
+
+        % check for installing
+        res = questdlg2( [ pluginName ' extension is not installed. Do you want to download it now?' ], [ pluginName ' extension installation' ], 'No', 'Yes', 'Yes' );
+    else
+        res = 'yes';
+    end
+    
+    if strcmpi(res, 'no'), return, end
+    try
+        plugins = plugin_getweb('plugin_install', []);
+    catch
+        error('Issue with retrieving statistics for extensions, maybe check your connection');
+    end
+    if isempty(plugins)
+        error('Cannot download the extension. Please check your internet connection');
+    end
+    indPlugin = strmatch(lower(pluginName), lower({ plugins.name }), 'exact');
+    if isempty(indPlugin)
+        error([ pluginName ' extension not found' ]);
+    end
+    result = plugin_install(plugins(indPlugin(1)).zip, plugins(indPlugin(1)).name, plugins(indPlugin(1)).version, forceInstall);
+    if result == 1, installRes = 1; end
+    
+    evalin('base', 'eeglab rebuild');
+else
+    installRes = 1;
+end