helpers/Groups.GroupsEdit now supports an 'add' mode for creating new groups.

This commit is contained in:
Chris Houseknecht
2014-03-17 23:49:14 -04:00
parent 633c63aadb
commit 2585855e1c
2 changed files with 128 additions and 265 deletions

View File

@@ -327,7 +327,7 @@ InventoriesAdd.$inject = ['$scope', '$rootScope', '$compile', '$location', '$log
function InventoriesEdit($scope, $location, $routeParams, $compile, GenerateList, ClearScope, InventoryGroups, InventoryHosts, BuildTree, Wait, function InventoriesEdit($scope, $location, $routeParams, $compile, GenerateList, ClearScope, InventoryGroups, InventoryHosts, BuildTree, Wait,
GetSyncStatusMsg, InjectHosts, HostsReload, GroupsAdd, GroupsEdit, GroupsDelete, Breadcrumbs, LoadBreadCrumbs, Empty, Rest, ProcessErrors, GetSyncStatusMsg, InjectHosts, HostsReload, GroupsEdit, GroupsDelete, Breadcrumbs, LoadBreadCrumbs, Empty, Rest, ProcessErrors,
InventoryUpdate, Alert, ToggleChildren, ViewUpdateStatus, GroupsCancelUpdate, Find, HostsCreate, EditInventoryProperties, HostsEdit, InventoryUpdate, Alert, ToggleChildren, ViewUpdateStatus, GroupsCancelUpdate, Find, HostsCreate, EditInventoryProperties, HostsEdit,
HostsDelete, ToggleHostEnabled, CopyMoveGroup, CopyMoveHost, Stream, GetBasePath, ShowJobSummary, ApplyEllipsis, WatchInventoryWindowResize, HostsDelete, ToggleHostEnabled, CopyMoveGroup, CopyMoveHost, Stream, GetBasePath, ShowJobSummary, ApplyEllipsis, WatchInventoryWindowResize,
HelpDialog, InventoryGroupsHelp, Store) { HelpDialog, InventoryGroupsHelp, Store) {
@@ -499,10 +499,11 @@ function InventoriesEdit($scope, $location, $routeParams, $compile, GenerateList
}; };
$scope.createGroup = function () { $scope.createGroup = function () {
GroupsAdd({ GroupsEdit({
scope: $scope, scope: $scope,
inventory_id: $scope.inventory_id, inventory_id: $scope.inventory_id,
group_id: $scope.selected_group_id group_id: $scope.selected_group_id,
mode: 'add'
}); });
}; };
@@ -512,7 +513,8 @@ function InventoriesEdit($scope, $location, $routeParams, $compile, GenerateList
inventory_id: $scope.inventory_id, inventory_id: $scope.inventory_id,
group_id: group_id, group_id: group_id,
tree_id: tree_id, tree_id: tree_id,
groups_reload: true groups_reload: true,
mode: 'edit'
}); });
}; };
@@ -663,8 +665,8 @@ function InventoriesEdit($scope, $location, $routeParams, $compile, GenerateList
} }
InventoriesEdit.$inject = ['$scope', '$location', '$routeParams', '$compile', 'GenerateList', 'ClearScope', 'InventoryGroups', 'InventoryHosts', InventoriesEdit.$inject = ['$scope', '$location', '$routeParams', '$compile', 'GenerateList', 'ClearScope', 'InventoryGroups', 'InventoryHosts',
'BuildTree', 'Wait', 'GetSyncStatusMsg', 'InjectHosts', 'HostsReload', 'GroupsAdd', 'GroupsEdit', 'GroupsDelete', 'Breadcrumbs', 'BuildTree', 'Wait', 'GetSyncStatusMsg', 'InjectHosts', 'HostsReload', 'GroupsEdit', 'GroupsDelete', 'Breadcrumbs',
'LoadBreadCrumbs', 'Empty', 'Rest', 'ProcessErrors', 'InventoryUpdate', 'Alert', 'ToggleChildren', 'ViewUpdateStatus', 'GroupsCancelUpdate', 'LoadBreadCrumbs', 'Empty', 'Rest', 'ProcessErrors', 'InventoryUpdate', 'Alert', 'ToggleChildren', 'ViewUpdateStatus', 'GroupsCancelUpdate',
'Find', 'HostsCreate', 'EditInventoryProperties', 'HostsEdit', 'HostsDelete', 'ToggleHostEnabled', 'CopyMoveGroup', 'CopyMoveHost', 'Find', 'HostsCreate', 'EditInventoryProperties', 'HostsEdit', 'HostsDelete', 'ToggleHostEnabled', 'CopyMoveGroup', 'CopyMoveHost',
'Stream', 'GetBasePath', 'ShowJobSummary', 'ApplyEllipsis', 'WatchInventoryWindowResize', 'HelpDialog', 'InventoryGroupsHelp', 'Store' 'Stream', 'GetBasePath', 'ShowJobSummary', 'ApplyEllipsis', 'WatchInventoryWindowResize', 'HelpDialog', 'InventoryGroupsHelp', 'Store'
]; ];

View File

@@ -319,217 +319,6 @@ angular.module('GroupsHelper', ['RestServices', 'Utilities', 'ListGenerator', 'G
} }
]) ])
.factory('GroupsAdd', ['$rootScope', '$location', '$log', '$routeParams', 'Rest', 'Alert', 'GroupForm', 'GenerateForm',
'Prompt', 'ProcessErrors', 'GetBasePath', 'ParseTypeChange', 'Wait', 'GetChoices',
'GetSourceTypeOptions', 'LookUpInit', 'BuildTree', 'SourceChange', 'WatchInventoryWindowResize', 'ToJSON',
function ($rootScope, $location, $log, $routeParams, Rest, Alert, GroupForm, GenerateForm, Prompt, ProcessErrors,
GetBasePath, ParseTypeChange, Wait, GetChoices, GetSourceTypeOptions, LookUpInit, BuildTree,
SourceChange, WatchInventoryWindowResize, ToJSON) {
return function (params) {
var inventory_id = params.inventory_id,
group_id = (params.group_id !== undefined) ? params.group_id : null,
parent_scope = params.scope,
defaultUrl = (group_id !== null) ? GetBasePath('groups') + group_id + '/children/' :
GetBasePath('inventory') + inventory_id + '/groups/',
form = GroupForm,
generator = GenerateForm,
scope = generator.inject(form, { mode: 'add', modal: true, related: false, show_modal: false }),
choicesReady;
scope.formModalActionLabel = 'Save';
scope.formModalCancelShow = true;
scope.source = null;
generator.reset();
scope[form.fields.source_vars.parseTypeName] = 'yaml';
scope.parseType = 'yaml';
ParseTypeChange({ scope: scope, field_id: 'group_variables' });
$('#group_tabs a[data-toggle="tab"]').on('show.bs.tab', function (e) {
var callback = function(){ Wait('stop'); };
if ($(e.target).text() === 'Properties') {
Wait('start');
ParseTypeChange({ scope: scope, field_id: 'group_variables', onReady: callback });
}
else {
if (scope.source && scope.source.value === 'ec2') {
Wait('start');
ParseTypeChange({ scope: scope, variable: 'source_vars', parse_variable: form.fields.source_vars.parseTypeName,
field_id: 'group_source_vars', onReady: callback });
}
}
});
if (scope.removeAddTreeRefreshed) {
scope.removeAddTreeRefreshed();
}
scope.removeAddTreeRefreshed = scope.$on('GroupTreeRefreshed', function () {
$rootScope.formModalHeader = null;
$rootScope.formModalCancleShow = null;
$rootScope.formModalActionLabel = null;
Wait('stop');
$('#form-modal').modal('hide');
scope.removeAddTreeRefreshed();
});
if (scope.removeSaveComplete) {
scope.removeSaveComplete();
}
scope.removeSaveComplete = scope.$on('SaveComplete', function (e, group_id, error) {
if (!error) {
if (scope.searchCleanup) {
scope.searchCleanup();
}
scope.formModalActionDisabled = false;
BuildTree({
scope: parent_scope,
inventory_id: inventory_id,
refresh: true,
new_group_id: group_id
});
WatchInventoryWindowResize();
}
});
if (scope.removeFormSaveSuccess) {
scope.removeFormSaveSuccess();
}
scope.removeFormSaveSuccess = scope.$on('formSaveSuccess', function (e, group_id, url) {
// Source data gets stored separately from the group. Validate and store Source
// related fields, then call SaveComplete to wrap things up.
var parseError = false,
data = {},
regions, r, i;
// Update the selector tree with new group name, descr
//SetNodeName({ scope: scope['selectedNode'], group_id: group_id,
// name: scope.name, description: scope.description });
if (scope.source.value !== null && scope.source.value !== '') {
data.group = group_id;
data.source = scope.source.value;
data.source_path = scope.source_path;
data.credential = scope.credential;
data.overwrite = scope.overwrite;
data.overwrite_vars = scope.overwrite_vars;
data.update_on_launch = scope.update_on_launch;
// Create a string out of selected list of regions
regions = $('#s2id_group_source_regions').select2("data");
r = [];
for (i = 0; i < regions.length; i++) {
r.push(regions[i].id);
}
data.source_regions = r.join();
if (scope.source.value === 'ec2') {
data.source_vars = ToJSON(scope.envParseType, scope.source_vars, true);
}
if (!parseError) {
Rest.setUrl(url);
Rest.put(data)
.success(function () {
scope.$emit('SaveComplete', group_id, false);
})
.error(function (data, status) {
scope.$emit('SaveComplete', group_id, true);
ProcessErrors(scope, data, status, form, {
hdr: 'Error!',
msg: 'Failed to update group inventory source. PUT status: ' + status
});
});
}
} else {
// No source value
scope.$emit('SaveComplete', group_id, false);
}
});
// Cancel
scope.cancelModal = function () {
if (scope.searchCleanup) {
scope.searchCleanup();
}
WatchInventoryWindowResize();
};
// Save
scope.formModalAction = function () {
var data;
Wait('start');
scope.formModalActionDisabled = true;
data = {
name: scope.name,
description: scope.description
};
if (inventory_id) {
data.inventory = inventory_id;
}
data.variables = ToJSON(scope.parseType, scope.variables, true);
Rest.setUrl(defaultUrl);
Rest.post(data)
.success(function (data) {
scope.$emit('formSaveSuccess', data.id, GetBasePath('inventory_sources') + data.id + '/');
})
.error(function (data, status) {
Wait('stop');
scope.formModalActionDisabled = false;
ProcessErrors(scope, data, status, form, { hdr: 'Error!',
msg: 'Failed to add new group. POST returned status: ' + status });
});
};
scope.sourceChange = function () {
SourceChange({ scope: scope, form: GroupForm });
};
choicesReady = 0;
if (scope.removeChoicesReady) {
scope.removeChoicesReady();
}
scope.removeChoicesReady = scope.$on('choicesReadyGroup', function () {
choicesReady++;
if (choicesReady === 2) {
$('#form-modal').modal('show');
Wait('stop');
}
});
// Load options for source regions
GetChoices({
scope: scope,
url: GetBasePath('inventory_sources'),
field: 'source_regions',
variable: 'rax_regions',
choice_name: 'rax_region_choices',
callback: 'choicesReadyGroup'
});
GetChoices({
scope: scope,
url: GetBasePath('inventory_sources'),
field: 'source_regions',
variable: 'ec2_regions',
choice_name: 'ec2_region_choices',
callback: 'choicesReadyGroup'
});
GetSourceTypeOptions({
scope: scope,
variable: 'source_type_options'
});
Wait('start');
};
}
])
/** /**
* *
* Add the list of schedules to the Group Edit modal * Add the list of schedules to the Group Edit modal
@@ -609,7 +398,11 @@ function(ScheduleEdit, SchedulesList, GenerateList, SearchInit, PaginateInit, Re
scope.editSchedule = function(id) { scope.editSchedule = function(id) {
var schedule = Find({ list: scope[SchedulesList.name], key: 'id', val: id }); var schedule = Find({ list: scope[SchedulesList.name], key: 'id', val: id });
ScheduleEdit({ scope: parent_scope, schedule: schedule }); ScheduleEdit({ scope: parent_scope, schedule: schedule, mode: 'edit' });
};
scope.addSchedule = function() {
ScheduleEdit({ scope: parent_scope, schedule: {}, mode: 'add'});
}; };
}; };
}]) }])
@@ -633,6 +426,7 @@ function(ScheduleEdit, SchedulesList, GenerateList, SearchInit, PaginateInit, Re
function(SchedulerInit, Rest, Wait, SetSchedulesInnerDialogSize) { function(SchedulerInit, Rest, Wait, SetSchedulesInnerDialogSize) {
return function(params) { return function(params) {
var parent_scope = params.scope, var parent_scope = params.scope,
mode = params.mode, // 'create' or 'edit'
schedule = params.schedule, schedule = params.schedule,
scope = parent_scope.$new(), scope = parent_scope.$new(),
scheduler, scheduler,
@@ -677,10 +471,12 @@ function(SchedulerInit, Rest, Wait, SetSchedulesInnerDialogSize) {
container.show('slide', { direction: 'left' }, 300); container.show('slide', { direction: 'left' }, 300);
$('#group-save-button').prop('disabled', true); $('#group-save-button').prop('disabled', true);
target.show(); target.show();
scope.$apply(function() { if (mode === 'edit') {
scheduler.setRRule(schedule.rrule); scope.$apply(function() {
scheduler.setName(schedule.name); scheduler.setRRule(schedule.rrule);
}); scheduler.setName(schedule.name);
});
}
}; };
setTimeout(function() { showForm(); }, 1000); setTimeout(function() { showForm(); }, 1000);
@@ -694,7 +490,6 @@ function(SchedulerInit, Rest, Wait, SetSchedulesInnerDialogSize) {
parent_scope.showScheduleDetail = function() { parent_scope.showScheduleDetail = function() {
if (parent_scope.formShowing) { if (parent_scope.formShowing) {
scheduler.isValid(); scheduler.isValid();
//$('#schedules-form').hide();
detail.width($('#schedules-form').width()).height($('#schedules-form').height()); detail.width($('#schedules-form').width()).height($('#schedules-form').height());
target.hide(); target.hide();
detail.show(); detail.show();
@@ -717,15 +512,28 @@ function(SchedulerInit, Rest, Wait, SetSchedulesInnerDialogSize) {
schedule.name = newSchedule.name; schedule.name = newSchedule.name;
schedule.rrule = newSchedule.rrule; schedule.rrule = newSchedule.rrule;
Rest.setUrl(url); Rest.setUrl(url);
Rest.post(schedule) if (mode === 'edit') {
.success(function(){ Rest.put(schedule)
Wait('stop'); .success(function(){
container.hide('slide', { direction: 'right' }, 500, restoreList); Wait('stop');
}) container.hide('slide', { direction: 'right' }, 500, restoreList);
.error(function(){ })
Wait('stop'); .error(function(){
container.hide('slide', { direction: 'right' }, 500, restoreList); Wait('stop');
}); container.hide('slide', { direction: 'right' }, 500, restoreList);
});
}
else {
Rest.post(schedule)
.success(function(){
Wait('stop');
container.hide('slide', { direction: 'right' }, 500, restoreList);
})
.error(function(){
Wait('stop');
container.hide('slide', { direction: 'right' }, 500, restoreList);
});
}
} }
else { else {
scope.schedulerIsValid = false; scope.schedulerIsValid = false;
@@ -752,10 +560,11 @@ function(SchedulerInit, Rest, Wait, SetSchedulesInnerDialogSize) {
var parent_scope = params.scope, var parent_scope = params.scope,
group_id = params.group_id, group_id = params.group_id,
tree_id = params.tree_id, tree_id = params.tree_id,
mode = params.mode, // 'add' or 'edit'
inventory_id = params.inventory_id, inventory_id = params.inventory_id,
groups_reload = params.groups_reload, groups_reload = params.groups_reload,
generator = GenerateForm, generator = GenerateForm,
defaultUrl = GetBasePath('groups') + group_id + '/', defaultUrl,
master = {}, master = {},
choicesReady, choicesReady,
modal_scope = parent_scope.$new(), modal_scope = parent_scope.$new(),
@@ -763,6 +572,14 @@ function(SchedulerInit, Rest, Wait, SetSchedulesInnerDialogSize) {
sources_scope = parent_scope.$new(), sources_scope = parent_scope.$new(),
x, y, ww, wh, maxrows; x, y, ww, wh, maxrows;
if (mode === 'edit') {
defaultUrl = GetBasePath('groups') + group_id + '/';
}
else {
defaultUrl = (group_id !== null) ? GetBasePath('groups') + group_id + '/children/' :
GetBasePath('inventory') + inventory_id + '/groups/';
}
generator.inject(GroupForm, { mode: 'edit', id: 'properties-tab', breadCrumbs: false, related: false, scope: properties_scope }); generator.inject(GroupForm, { mode: 'edit', id: 'properties-tab', breadCrumbs: false, related: false, scope: properties_scope });
generator.inject(SourceForm, { mode: 'edit', id: 'sources-tab', breadCrumbs: false, related: false, scope: sources_scope }); generator.inject(SourceForm, { mode: 'edit', id: 'sources-tab', breadCrumbs: false, related: false, scope: sources_scope });
@@ -1068,7 +885,12 @@ function(SchedulerInit, Rest, Wait, SetSchedulesInnerDialogSize) {
sources_scope.removeChoicesReady = sources_scope.$on('choicesReadyGroup', function () { sources_scope.removeChoicesReady = sources_scope.$on('choicesReadyGroup', function () {
choicesReady++; choicesReady++;
if (choicesReady === 2) { if (choicesReady === 2) {
modal_scope.$emit('choicesCompleteGroup'); if (mode === 'edit') {
modal_scope.$emit('choicesCompleteGroup');
}
else {
modal_scope.$emit('groupVariablesLoaded');
}
} }
}); });
@@ -1175,18 +997,46 @@ function(SchedulerInit, Rest, Wait, SetSchedulesInnerDialogSize) {
if (!parseError) { if (!parseError) {
Rest.setUrl(sources_scope.source_url); Rest.setUrl(sources_scope.source_url);
Rest.put(data) if (mode === 'edit') {
.success(function () { Rest.put(data)
modal_scope.$emit('SaveComplete', false); .success(function () {
}) modal_scope.$emit('SaveComplete', false);
.error(function (data, status) { })
modal_scope.$emit('SaveComplete', true); .error(function (data, status) {
ProcessErrors(sources_scope, data, status, SourceForm, { hdr: 'Error!', modal_scope.$emit('SaveComplete', true);
msg: 'Failed to update group inventory source. PUT status: ' + status }); ProcessErrors(sources_scope, data, status, SourceForm, { hdr: 'Error!',
}); msg: 'Failed to update group inventory source. PUT status: ' + status });
});
}
else {
Rest.post(data)
.success(function () {
modal_scope.$emit('SaveComplete', false);
})
.error(function (data, status) {
modal_scope.$emit('SaveComplete', true);
ProcessErrors(sources_scope, data, status, SourceForm, { hdr: 'Error!',
msg: 'Failed to update group inventory source. PUT status: ' + status });
});
}
} }
}); });
if (modal_scope.removeUpdateVariables) {
modal_scope.removeUpdateVariables();
}
modal_scope.removeUpdateVariables = modal_scope.$on('updateVariables', function(e, data, url) {
Rest.setUrl(url);
Rest.put(data)
.success(function () {
modal_scope.$emit('formSaveSuccess');
})
.error(function (data, status) {
ProcessErrors(modal_scope, data, status, null, { hdr: 'Error!',
msg: 'Failed to update group variables. PUT status: ' + status });
});
});
// Cancel // Cancel
modal_scope.cancelModal = function () { modal_scope.cancelModal = function () {
try { try {
@@ -1218,29 +1068,40 @@ function(SchedulerInit, Rest, Wait, SetSchedulesInnerDialogSize) {
data.inventory = inventory_id; data.inventory = inventory_id;
Rest.setUrl(defaultUrl); Rest.setUrl(defaultUrl);
Rest.put(data) if (mode === 'edit') {
.success(function () { Rest.put(data)
if (properties_scope.variables) { .success(function () {
//update group variables if (properties_scope.variables) {
Rest.setUrl(properties_scope.variable_url); modal_scope.$emit('updateVariables', json_data, properties_scope.variable_url);
Rest.put(json_data) }
.success(function () { else {
modal_scope.$emit('formSaveSuccess'); modal_scope.$emit('formSaveSuccess');
}) }
.error(function (data, status) { })
ProcessErrors(modal_scope, data, status, null, { hdr: 'Error!', .error(function (data, status) {
msg: 'Failed to update group variables. PUT status: ' + status }); Wait('stop');
}); ProcessErrors(properties_scope, data, status, GroupForm, { hdr: 'Error!',
} else { msg: 'Failed to update group: ' + group_id + '. PUT status: ' + status
modal_scope.$emit('formSaveSuccess'); });
}
})
.error(function (data, status) {
Wait('stop');
ProcessErrors(properties_scope, data, status, GroupForm, { hdr: 'Error!',
msg: 'Failed to update group: ' + group_id + '. PUT status: ' + status
}); });
}); }
else {
Rest.post(data)
.success(function () {
if (properties_scope.variables) {
modal_scope.$emit('updateVariables', json_data, properties_scope.variable_url);
}
else {
modal_scope.$emit('formSaveSuccess');
}
})
.error(function (data, status) {
Wait('stop');
ProcessErrors(properties_scope, data, status, GroupForm, { hdr: 'Error!',
msg: 'Failed to create group: ' + group_id + '. POST status: ' + status
});
});
}
}; };
// Start the update process // Start the update process