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}}