diff --git a/js/app.js b/js/app.js index a2d42e9c..08100b2d 100644 --- a/js/app.js +++ b/js/app.js @@ -299,6 +299,16 @@ app = Sammy('#main', function (sam) { req.params.users = data.users; }); }); + sam.before(/apps\/install\//, function (req){ + // Preload apps list. + req.params.apps = []; + req.api('/apps', function(data) { + // Only installed apps + $.each(data['apps'], function(k, v) { + if (v['installed']) req.params.apps.push(v); + }); + }); + }); sam.before({except: {path: ['#/logout', '#/login', '#/postinstall', '#/postinstall/domain', '#/postinstall/password']}}, function (req) { // Store path for further redirections @@ -841,7 +851,7 @@ app = Sammy('#main', function (sam) { }); // Helper function that build app installation form - sam.helper('appInstallForm', function(appId, manifest, users, domains) { + sam.helper('appInstallForm', function(appId, manifest, params) { data = { id: appId, manifest: manifest @@ -849,11 +859,13 @@ app = Sammy('#main', function (sam) { if (typeof data.manifest.arguments.install !== 'undefined') { $.each(data.manifest.arguments.install, function(k, v) { - // Default values - data.manifest.arguments.install[k].type = 'text'; - data.manifest.arguments.install[k].required = 'required'; - // Radio button + // Default values + data.manifest.arguments.install[k].type = (typeof v.type !== 'undefined') ? v.type : 'string'; + data.manifest.arguments.install[k].inputType = 'text'; + data.manifest.arguments.install[k].required = (typeof v.optional !== 'undefined' && v.optional == "true") ? '' : 'required'; + + // Input with choices becomes select list if (typeof data.manifest.arguments.install[k].choices !== 'undefined') { // Update choices values with key and checked data $.each(data.manifest.arguments.install[k].choices, function(ck, cv){ @@ -867,9 +879,9 @@ app = Sammy('#main', function (sam) { // Special case for domain input. // Display a list of available domains - if (v.name == 'domain') { + if (v.name == 'domain' || data.manifest.arguments.install[k].type == 'domain') { data.manifest.arguments.install[k].choices = []; - $.each(domains, function(key, domain){ + $.each(params.domains, function(key, domain){ data.manifest.arguments.install[k].choices.push({ value: domain, label: domain, @@ -879,11 +891,11 @@ app = Sammy('#main', function (sam) { data.manifest.arguments.install[k].help = ""+y18n.t('manage_domains')+""; } - // Special case for admin input. + // Special case for admin / user input. // Display a list of available users - if (v.name == 'admin') { + if (v.name == 'admin' || data.manifest.arguments.install[k].type == 'user') { data.manifest.arguments.install[k].choices = []; - $.each(users, function(key, user){ + $.each(params.users, function(key, user){ data.manifest.arguments.install[k].choices.push({ value: user.username, label: user.fullname+' ('+user.mail+')', @@ -893,17 +905,27 @@ app = Sammy('#main', function (sam) { data.manifest.arguments.install[k].help = ""+y18n.t('manage_users')+""; } - // Special case for password input. - if (v.name == 'password') { - data.manifest.arguments.install[k].type = 'password'; + // 'app' type input display a list of available apps + if (data.manifest.arguments.install[k].type == 'app') { + data.manifest.arguments.install[k].choices = []; + $.each(params.apps, function(key, app){ + data.manifest.arguments.install[k].choices.push({ + value: app.id, + label: app.name, + selected: false + }); + }); + data.manifest.arguments.install[k].help = ""+y18n.t('manage_apps')+""; } - // Optional field - if (typeof v.optional !== 'undefined' && v.optional == "true") { - data.manifest.arguments.install[k].required = ''; + // 'password' type input. + if (v.name == 'password' || data.manifest.arguments.install[k].type == 'password') { + // Change html input type + data.manifest.arguments.install[k].inputType = 'password'; } - // Multilingual description + + // Multilingual label data.manifest.arguments.install[k].label = (typeof data.manifest.arguments.install[k].ask[y18n.locale] !== 'undefined') ? data.manifest.arguments.install[k].ask[y18n.locale] : data.manifest.arguments.install[k].ask['en'] @@ -917,7 +939,7 @@ app = Sammy('#main', function (sam) { data.manifest.description['en'] ; - // Multi Instance settings + // Multi Instance settings boolean to text data.manifest.multi_instance = (data.manifest.multi_instance == 'true') ? y18n.t('yes') : y18n.t('no'); // View app install form @@ -932,8 +954,7 @@ app = Sammy('#main', function (sam) { c.appInstallForm( c.params['app'], data[c.params['app']].manifest, - c.params.users, - c.params.domains + c.params ); }); @@ -986,8 +1007,7 @@ app = Sammy('#main', function (sam) { c.appInstallForm( params.app, manifest, - c.params.users, - c.params.domains + c.params ); }) diff --git a/locales/en.json b/locales/en.json index f13ac301..0b6e5a86 100644 --- a/locales/en.json +++ b/locales/en.json @@ -113,6 +113,7 @@ "multi_instance" : "Multi instance", "manage_domains" : "Manage domains", "manage_users" : "Manage users", + "manage_apps" : "Manage apps", "install_time" : "Install time", "custom_app_install" : "Install custom app", "custom_app_url_only_github" : "Currently only from GitHub", diff --git a/locales/fr.json b/locales/fr.json index df54e115..ae74b377 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -112,6 +112,7 @@ "multi_instance" : "Multi instance", "manage_domains" : "Gérer les domaines", "manage_users" : "Gérer les utilisateurs", + "manage_apps" : "Gérer les applications", "install_time" : "Date d'installation", "custom_app_install" : "Installer une application personnalisée", "custom_app_url_only_github" : "Uniquement depuis GitHub", diff --git a/views/app/app_install.ms b/views/app/app_install.ms index 9b299f9b..6edbb3be 100644 --- a/views/app/app_install.ms +++ b/views/app/app_install.ms @@ -47,7 +47,7 @@ {{#choices}}{{/choices}} {{else}} - + {{/if}} {{#if help}}