mirror of
https://github.com/ansible/awx.git
synced 2024-11-02 01:21:21 +03:00
Ran all controller files through jsbeautifier.org and applied jsHint.
This commit is contained in:
parent
8c88ee5663
commit
f891c30ebb
@ -3,33 +3,49 @@
|
||||
*
|
||||
*
|
||||
* Admins.js
|
||||
*
|
||||
*
|
||||
* Controller functions for ading Admins to an Organization.
|
||||
*
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
function AdminsList ($scope, $rootScope, $location, $log, $routeParams, Rest,
|
||||
Alert, AdminList, GenerateList, LoadBreadCrumbs, Prompt, SearchInit, PaginateInit,
|
||||
ReturnToCaller,GetBasePath, SelectionInit)
|
||||
{
|
||||
var list = AdminList;
|
||||
var defaultUrl = GetBasePath('organizations') + $routeParams.organization_id + '/users/' ;
|
||||
var view = GenerateList;
|
||||
var mode = 'select';
|
||||
var scope = view.inject(AdminList, { mode: mode }); // Inject our view
|
||||
function AdminsList($scope, $rootScope, $location, $log, $routeParams, Rest,
|
||||
Alert, AdminList, GenerateList, LoadBreadCrumbs, Prompt, SearchInit, PaginateInit,
|
||||
ReturnToCaller, GetBasePath, SelectionInit) {
|
||||
|
||||
var url = GetBasePath('organizations') + $routeParams.organization_id + '/admins/';
|
||||
SelectionInit({ scope: scope, list: list, url: url, returnToCaller: 1 });
|
||||
var list = AdminList,
|
||||
defaultUrl = GetBasePath('organizations') + $routeParams.organization_id + '/users/',
|
||||
view = GenerateList,
|
||||
mode = 'select',
|
||||
scope = view.inject(AdminList, { mode: mode }),
|
||||
url = GetBasePath('organizations') + $routeParams.organization_id + '/admins/';
|
||||
|
||||
SelectionInit({
|
||||
scope: scope,
|
||||
list: list,
|
||||
url: url,
|
||||
returnToCaller: 1
|
||||
});
|
||||
|
||||
SearchInit({
|
||||
scope: scope,
|
||||
set: 'admins',
|
||||
list: list,
|
||||
url: defaultUrl
|
||||
});
|
||||
|
||||
PaginateInit({
|
||||
scope: scope,
|
||||
list: list,
|
||||
url: defaultUrl
|
||||
});
|
||||
|
||||
SearchInit({ scope: scope, set: 'admins', list: list, url: defaultUrl });
|
||||
PaginateInit({ scope: scope, list: list, url: defaultUrl });
|
||||
scope.search(list.iterator);
|
||||
|
||||
LoadBreadCrumbs();
|
||||
}
|
||||
|
||||
AdminsList.$inject = [ '$scope', '$rootScope', '$location', '$log', '$routeParams', 'Rest', 'Alert', 'AdminList', 'GenerateList',
|
||||
'LoadBreadCrumbs', 'Prompt', 'SearchInit', 'PaginateInit', 'ReturnToCaller', 'GetBasePath', 'SelectionInit'];
|
||||
|
||||
AdminsList.$inject = ['$scope', '$rootScope', '$location', '$log', '$routeParams', 'Rest', 'Alert', 'AdminList', 'GenerateList',
|
||||
'LoadBreadCrumbs', 'Prompt', 'SearchInit', 'PaginateInit', 'ReturnToCaller', 'GetBasePath', 'SelectionInit'
|
||||
];
|
@ -8,139 +8,145 @@
|
||||
*
|
||||
*/
|
||||
|
||||
/* globals console:false */
|
||||
|
||||
'use strict';
|
||||
|
||||
function Authenticate($cookieStore, $window, $scope, $rootScope, $location, Authorization, ToggleClass, Alert, Wait,
|
||||
Timer, Empty)
|
||||
{
|
||||
var setLoginFocus = function() {
|
||||
$('#login-username').focus();
|
||||
};
|
||||
function Authenticate($cookieStore, $window, $scope, $rootScope, $location, Authorization, ToggleClass, Alert, Wait,
|
||||
Timer, Empty) {
|
||||
|
||||
var setLoginFocus, lastPath, sessionExpired, scope;
|
||||
|
||||
var sessionExpired = (Empty($rootScope.sessionExpired)) ? $cookieStore.get('sessionExpired') : $rootScope.sessionExpired;
|
||||
|
||||
var lastPath = function() {
|
||||
return (Empty($rootScope.lastPath)) ? $cookieStore.get('lastPath') : $rootScope.lastPath;
|
||||
}
|
||||
setLoginFocus = function () {
|
||||
$('#login-username').focus();
|
||||
};
|
||||
|
||||
if ($AnsibleConfig.debug_mode && console) {
|
||||
console.log('User session expired: ' + sessionExpired);
|
||||
console.log('Last URL: ' + lastPath());
|
||||
}
|
||||
|
||||
// Hide any lingering modal dialogs
|
||||
$('.modal[aria-hidden=false]').each( function() {
|
||||
if ($(this).attr('id') !== 'login-modal') {
|
||||
$(this).modal('hide');
|
||||
}
|
||||
});
|
||||
sessionExpired = (Empty($rootScope.sessionExpired)) ? $cookieStore.get('sessionExpired') : $rootScope.sessionExpired;
|
||||
|
||||
// Just in case, make sure the wait widget is not active
|
||||
Wait('stop');
|
||||
|
||||
// Display the login dialog
|
||||
$('#login-modal').modal({ show: true, keyboard: false, backdrop: 'static' });
|
||||
|
||||
// Set focus to username field
|
||||
$('#login-modal').on('shown.bs.modal', function() {
|
||||
setLoginFocus();
|
||||
});
|
||||
lastPath = function () {
|
||||
return (Empty($rootScope.lastPath)) ? $cookieStore.get('lastPath') : $rootScope.lastPath;
|
||||
};
|
||||
|
||||
var scope = angular.element(document.getElementById('login-modal')).scope();
|
||||
|
||||
// Reset the login form
|
||||
scope['login_username'] = null;
|
||||
scope['login_password'] = null;
|
||||
scope['loginForm']['login_username'].$setPristine();
|
||||
scope['loginForm']['login_password'].$setPristine();
|
||||
if ($AnsibleConfig.debug_mode && console) {
|
||||
console.log('User session expired: ' + sessionExpired);
|
||||
console.log('Last URL: ' + lastPath());
|
||||
}
|
||||
|
||||
if ($location.path() == '/logout') {
|
||||
//if logout request, clear AuthToken and user session data
|
||||
Authorization.logout();
|
||||
}
|
||||
|
||||
$rootScope.userLoggedIn = false; //hide the logout link. if you got here, you're logged out.
|
||||
$cookieStore.put('userLoggedIn', false); //gets set back to true by Authorization.setToken().
|
||||
// Hide any lingering modal dialogs
|
||||
$('.modal[aria-hidden=false]').each(function () {
|
||||
if ($(this).attr('id') !== 'login-modal') {
|
||||
$(this).modal('hide');
|
||||
}
|
||||
});
|
||||
|
||||
$('#login-password').bind('keypress', function(e) {
|
||||
var code = (e.keyCode ? e.keyCode : e.which);
|
||||
if (code == 13) {
|
||||
$('#login-button').click();
|
||||
}
|
||||
});
|
||||
|
||||
scope.reset = function() {
|
||||
$('#login-form input').each( function(index) { $(this).val(''); });
|
||||
};
|
||||
// Just in case, make sure the wait widget is not active
|
||||
Wait('stop');
|
||||
|
||||
// Call the API to get an auth token
|
||||
scope.systemLogin = function(username, password) {
|
||||
$('.api-error').empty();
|
||||
var token;
|
||||
if (username == null || username == undefined || username == '' ||
|
||||
password == null || password == undefined || password == '' ) {
|
||||
Alert('Error!', 'Please provide a username and password before attempting to login.', 'alert-danger', setLoginFocus);
|
||||
}
|
||||
else {
|
||||
Wait('start');
|
||||
Authorization.retrieveToken(username, password)
|
||||
.success( function(data, status, headers, config) {
|
||||
$('#login-modal').modal('hide');
|
||||
token = data.token;
|
||||
Authorization.setToken(data.token, data.expires);
|
||||
$rootScope.sessionTimer = Timer.init();
|
||||
// Get all the profile/access info regarding the logged in user
|
||||
Authorization.getUser()
|
||||
.success(function(data, status, headers, config) {
|
||||
Authorization.setUserInfo(data);
|
||||
$rootScope['user_is_superuser'] = data.results[0].is_superuser;
|
||||
Authorization.getLicense()
|
||||
.success(function(data, status, headers, config) {
|
||||
Authorization.setLicense(data['license_info']);
|
||||
if (lastPath()) {
|
||||
// Go back to most recent navigation path
|
||||
$location.path(lastPath());
|
||||
}
|
||||
else {
|
||||
$location.url('/home?login=true');
|
||||
}
|
||||
})
|
||||
.error(function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
Alert('Error', 'Failed to access user information. GET returned status: ' + status, 'alert-danger', setLoginFocus);
|
||||
});
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
Alert('Error', 'Failed to access license information. GET returned status: ' + status, 'alert-danger', setLoginFocus);
|
||||
});
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
if ( data.non_field_errors && data.non_field_errors.length == 0 ) {
|
||||
// show field specific errors returned by the API
|
||||
for (var key in data) {
|
||||
scope[key + 'Error'] = data[key][0];
|
||||
// Display the login dialog
|
||||
$('#login-modal').modal({
|
||||
show: true,
|
||||
keyboard: false,
|
||||
backdrop: 'static'
|
||||
});
|
||||
|
||||
// Set focus to username field
|
||||
$('#login-modal').on('shown.bs.modal', function () {
|
||||
setLoginFocus();
|
||||
});
|
||||
|
||||
scope = angular.element(document.getElementById('login-modal')).scope();
|
||||
|
||||
// Reset the login form
|
||||
scope.login_username = null;
|
||||
scope.login_password = null;
|
||||
scope.loginForm.login_username.$setPristine();
|
||||
scope.loginForm.login_password.$setPristine();
|
||||
|
||||
if ($location.path() === '/logout') {
|
||||
//if logout request, clear AuthToken and user session data
|
||||
Authorization.logout();
|
||||
}
|
||||
|
||||
$rootScope.userLoggedIn = false; //hide the logout link. if you got here, you're logged out.
|
||||
$cookieStore.put('userLoggedIn', false); //gets set back to true by Authorization.setToken().
|
||||
|
||||
$('#login-password').bind('keypress', function (e) {
|
||||
var code = (e.keyCode ? e.keyCode : e.which);
|
||||
if (code === 13) {
|
||||
$('#login-button').click();
|
||||
}
|
||||
});
|
||||
|
||||
scope.reset = function () {
|
||||
$('#login-form input').each(function () {
|
||||
$(this).val('');
|
||||
});
|
||||
};
|
||||
|
||||
// Call the API to get an auth token
|
||||
scope.systemLogin = function (username, password) {
|
||||
$('.api-error').empty();
|
||||
var token;
|
||||
if (Empty(username) || Empty(password)) {
|
||||
Alert('Error!', 'Please provide a username and password before attempting to login.', 'alert-danger', setLoginFocus);
|
||||
} else {
|
||||
Wait('start');
|
||||
Authorization.retrieveToken(username, password)
|
||||
.success(function (data, status) {
|
||||
$('#login-modal').modal('hide');
|
||||
token = data.token;
|
||||
Authorization.setToken(data.token, data.expires);
|
||||
$rootScope.sessionTimer = Timer.init();
|
||||
// Get all the profile/access info regarding the logged in user
|
||||
Authorization.getUser()
|
||||
.success(function (data) {
|
||||
Authorization.setUserInfo(data);
|
||||
$rootScope.user_is_superuser = data.results[0].is_superuser;
|
||||
Authorization.getLicense()
|
||||
.success(function (data) {
|
||||
Authorization.setLicense(data.license_info);
|
||||
if (lastPath()) {
|
||||
// Go back to most recent navigation path
|
||||
$location.path(lastPath());
|
||||
} else {
|
||||
$location.url('/home?login=true');
|
||||
}
|
||||
})
|
||||
.error(function () {
|
||||
Wait('stop');
|
||||
Alert('Error', 'Failed to access user information. GET returned status: ' + status, 'alert-danger', setLoginFocus);
|
||||
});
|
||||
})
|
||||
.error(function (data, status) {
|
||||
Wait('stop');
|
||||
Alert('Error', 'Failed to access license information. GET returned status: ' + status, 'alert-danger', setLoginFocus);
|
||||
});
|
||||
})
|
||||
.error(function (data, status) {
|
||||
var hdr, msg, key;
|
||||
Wait('stop');
|
||||
if (data.non_field_errors && data.non_field_errors.length === 0) {
|
||||
// show field specific errors returned by the API
|
||||
for (key in data) {
|
||||
scope[key + 'Error'] = data[key][0];
|
||||
}
|
||||
} else {
|
||||
if (data.non_field_errors && data.non_field_errors.length > 0) {
|
||||
hdr = 'Error';
|
||||
msg = data.non_field_errors[0];
|
||||
} else {
|
||||
hdr = 'Error';
|
||||
msg = 'The login attempt failed with a status of: ' + status;
|
||||
}
|
||||
scope.reset();
|
||||
Alert(hdr, msg, 'alert-danger', setLoginFocus);
|
||||
}
|
||||
}
|
||||
else {
|
||||
var hdr, msg;
|
||||
if ( data.non_field_errors && data.non_field_errors.length > 0 ) {
|
||||
hdr = 'Error';
|
||||
msg = data.non_field_errors[0];
|
||||
}
|
||||
else {
|
||||
hdr = 'Error';
|
||||
msg = 'The login attempt failed with a status of: ' + status;
|
||||
}
|
||||
scope.reset();
|
||||
Alert(hdr, msg, 'alert-danger', setLoginFocus);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Authenticate.$inject = ['$cookieStore', '$window', '$scope', '$rootScope', '$location', 'Authorization', 'ToggleClass', 'Alert', 'Wait',
|
||||
'Timer', 'Empty'];
|
||||
'Timer', 'Empty'
|
||||
];
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -3,43 +3,55 @@
|
||||
*
|
||||
*
|
||||
* Home.js
|
||||
*
|
||||
*
|
||||
* Controller functions for Home tab
|
||||
*
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
function Home ($scope, $compile, $routeParams, $rootScope, $location, Wait, ObjectCount, JobStatus, InventorySyncStatus, SCMSyncStatus,
|
||||
function Home($scope, $compile, $routeParams, $rootScope, $location, Wait, ObjectCount, JobStatus, InventorySyncStatus, SCMSyncStatus,
|
||||
ClearScope, Stream, Rest, GetBasePath, ProcessErrors, Button) {
|
||||
|
||||
ClearScope('home'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
|
||||
|
||||
ClearScope('home');
|
||||
|
||||
var buttons, html, e, waitCount, loadedCount;
|
||||
|
||||
// Add buttons to the top of the Home page. We're using lib/ansible/generator_helpers.js-> Buttons()
|
||||
// to build buttons dynamically and insure all styling and icons match the rest of the application.
|
||||
var buttons = {
|
||||
buttons = {
|
||||
refresh: {
|
||||
mode: 'all',
|
||||
awToolTip: "Refresh the page",
|
||||
ngClick: "refresh()"
|
||||
},
|
||||
},
|
||||
stream: {
|
||||
ngClick: "showActivity()",
|
||||
awToolTip: "View Activity Stream",
|
||||
mode: 'all'
|
||||
}
|
||||
};
|
||||
var html = Button({ btn: buttons.refresh, action: 'refresh', toolbar: true });
|
||||
html += Button({ btn: buttons.stream, action: 'stream', toolbar: true });
|
||||
var e = angular.element(document.getElementById('home-list-actions'));
|
||||
}
|
||||
};
|
||||
|
||||
html = Button({
|
||||
btn: buttons.refresh,
|
||||
action: 'refresh',
|
||||
toolbar: true
|
||||
});
|
||||
|
||||
html += Button({
|
||||
btn: buttons.stream,
|
||||
action: 'stream',
|
||||
toolbar: true
|
||||
});
|
||||
|
||||
e = angular.element(document.getElementById('home-list-actions'));
|
||||
e.html(html);
|
||||
$compile(e)($scope);
|
||||
|
||||
var waitCount = 4;
|
||||
var loadedCount = 0;
|
||||
|
||||
if (!$routeParams['login']) {
|
||||
waitCount = 4;
|
||||
loadedCount = 0;
|
||||
|
||||
if (!$routeParams.login) {
|
||||
// If we're not logging in, start the Wait widget. Otherwise, it's already running.
|
||||
Wait('start');
|
||||
}
|
||||
@ -47,297 +59,366 @@ function Home ($scope, $compile, $routeParams, $rootScope, $location, Wait, Obje
|
||||
if ($scope.removeWidgetLoaded) {
|
||||
$scope.removeWidgetLoaded();
|
||||
}
|
||||
$scope.removeWidgetLoaded = $scope.$on('WidgetLoaded', function() {
|
||||
$scope.removeWidgetLoaded = $scope.$on('WidgetLoaded', function () {
|
||||
// Once all the widgets report back 'loaded', turn off Wait widget
|
||||
loadedCount++;
|
||||
if ( loadedCount == waitCount ) {
|
||||
loadedCount++;
|
||||
if (loadedCount === waitCount) {
|
||||
Wait('stop');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
if ($scope.removeDashboardReady) {
|
||||
$scope.removeDashboardReady();
|
||||
}
|
||||
$scope.removeDashboardReady = $scope.$on('dashboardReady', function(e, data) {
|
||||
JobStatus({ scope: $scope, target: 'container1', dashboard: data});
|
||||
InventorySyncStatus({ scope: $scope, target: 'container2', dashboard: data});
|
||||
SCMSyncStatus({ scope: $scope, target: 'container4', dashboard: data});
|
||||
ObjectCount({ scope: $scope, target: 'container3', dashboard: data});
|
||||
$scope.removeDashboardReady = $scope.$on('dashboardReady', function (e, data) {
|
||||
JobStatus({
|
||||
scope: $scope,
|
||||
target: 'container1',
|
||||
dashboard: data
|
||||
});
|
||||
|
||||
$scope.showActivity = function() { Stream({ scope: $scope }); }
|
||||
InventorySyncStatus({
|
||||
scope: $scope,
|
||||
target: 'container2',
|
||||
dashboard: data
|
||||
});
|
||||
SCMSyncStatus({
|
||||
scope: $scope,
|
||||
target: 'container4',
|
||||
dashboard: data
|
||||
});
|
||||
ObjectCount({
|
||||
scope: $scope,
|
||||
target: 'container3',
|
||||
dashboard: data
|
||||
});
|
||||
});
|
||||
|
||||
$scope.refresh = function() {
|
||||
$scope.showActivity = function () {
|
||||
Stream({
|
||||
scope: $scope
|
||||
});
|
||||
};
|
||||
|
||||
$scope.refresh = function () {
|
||||
Wait('start');
|
||||
loadedCount = 0;
|
||||
Rest.setUrl(GetBasePath('dashboard'));
|
||||
Rest.get()
|
||||
.success( function(data, status, headers, config) {
|
||||
.success(function (data) {
|
||||
$scope.$emit('dashboardReady', data);
|
||||
})
|
||||
.error ( function(data, status, headers, config) {
|
||||
.error(function (data, status) {
|
||||
Wait('stop');
|
||||
ProcessErrors($scope, data, status, null,
|
||||
{ hdr: 'Error!', msg: 'Failed to get dashboard: ' + status });
|
||||
})
|
||||
}
|
||||
|
||||
ProcessErrors($scope, data, status, null, { hdr: 'Error!', msg: 'Failed to get dashboard: ' + status });
|
||||
});
|
||||
};
|
||||
|
||||
$scope.refresh();
|
||||
|
||||
}
|
||||
|
||||
Home.$inject=['$scope', '$compile', '$routeParams', '$rootScope', '$location', 'Wait', 'ObjectCount', 'JobStatus', 'InventorySyncStatus',
|
||||
'SCMSyncStatus', 'ClearScope', 'Stream', 'Rest', 'GetBasePath', 'ProcessErrors', 'Button'];
|
||||
}
|
||||
|
||||
Home.$inject = ['$scope', '$compile', '$routeParams', '$rootScope', '$location', 'Wait', 'ObjectCount', 'JobStatus', 'InventorySyncStatus',
|
||||
'SCMSyncStatus', 'ClearScope', 'Stream', 'Rest', 'GetBasePath', 'ProcessErrors', 'Button'
|
||||
];
|
||||
|
||||
|
||||
function HomeGroups ($location, $routeParams, HomeGroupList, GenerateList, ProcessErrors, LoadBreadCrumbs, ReturnToCaller, ClearScope,
|
||||
function HomeGroups($location, $routeParams, HomeGroupList, GenerateList, ProcessErrors, LoadBreadCrumbs, ReturnToCaller, ClearScope,
|
||||
GetBasePath, SearchInit, PaginateInit, FormatDate, GetHostsStatusMsg, GetSyncStatusMsg, ViewUpdateStatus, Stream, GroupsEdit, Wait,
|
||||
Alert, Rest, Empty, InventoryUpdate, Find) {
|
||||
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
|
||||
var generator = GenerateList;
|
||||
var list = HomeGroupList;
|
||||
var defaultUrl=GetBasePath('groups');
|
||||
|
||||
var scope = generator.inject(list, { mode: 'edit' });
|
||||
var base = $location.path().replace(/^\//,'').split('/')[0];
|
||||
var generator = GenerateList,
|
||||
list = HomeGroupList,
|
||||
defaultUrl = GetBasePath('groups'),
|
||||
scope = generator.inject(list, { mode: 'edit' }),
|
||||
opt;
|
||||
|
||||
if (scope.removePostRefresh) {
|
||||
scope.removePostRefresh();
|
||||
}
|
||||
scope.removePostRefresh = scope.$on('PostRefresh', function() {
|
||||
var hosts_status, update_status, last_update, stat;
|
||||
for (var i=0; i < scope.home_groups.length; i++) {
|
||||
|
||||
scope['home_groups'][i]['inventory_name'] = scope['home_groups'][i]['summary_fields']['inventory']['name'];
|
||||
scope.removePostRefresh = scope.$on('PostRefresh', function () {
|
||||
var i, hosts_status, stat;
|
||||
for (i = 0; i < scope.home_groups.length; i++) {
|
||||
|
||||
stat = GetSyncStatusMsg({
|
||||
scope.home_groups[i].inventory_name = scope.home_groups[i].summary_fields.inventory.name;
|
||||
|
||||
stat = GetSyncStatusMsg({
|
||||
status: scope.home_groups[i].summary_fields.inventory_source.status
|
||||
}); // from helpers/Groups.js
|
||||
|
||||
}); // from helpers/Groups.js
|
||||
|
||||
hosts_status = GetHostsStatusMsg({
|
||||
active_failures: scope.home_groups[i].hosts_with_active_failures,
|
||||
total_hosts: scope.home_groups[i].total_hosts,
|
||||
inventory_id: scope.home_groups[i].inventory,
|
||||
group_id: scope.home_groups[i].id
|
||||
});
|
||||
|
||||
scope['home_groups'][i].status_class = stat['class'],
|
||||
scope['home_groups'][i].status_tooltip = stat['tooltip'],
|
||||
scope['home_groups'][i].launch_tooltip = stat['launch_tip'],
|
||||
scope['home_groups'][i].launch_class = stat['launch_class'],
|
||||
scope['home_groups'][i].hosts_status_tip = hosts_status['tooltip'],
|
||||
scope['home_groups'][i].show_failures = hosts_status['failures'],
|
||||
scope['home_groups'][i].hosts_status_class = hosts_status['class'],
|
||||
|
||||
|
||||
});
|
||||
|
||||
scope.home_groups[i].status_class = stat['class'];
|
||||
scope.home_groups[i].status_tooltip = stat.tooltip;
|
||||
scope.home_groups[i].launch_tooltip = stat.launch_tip;
|
||||
scope.home_groups[i].launch_class = stat.launch_class;
|
||||
scope.home_groups[i].hosts_status_tip = hosts_status.tooltip;
|
||||
scope.home_groups[i].show_failures = hosts_status.failures;
|
||||
scope.home_groups[i].hosts_status_class = hosts_status['class'];
|
||||
scope.home_groups[i].status = scope.home_groups[i].summary_fields.inventory_source.status;
|
||||
scope.home_groups[i].source = (scope.home_groups[i].summary_fields.inventory_source) ?
|
||||
scope.home_groups[i].source = (scope.home_groups[i].summary_fields.inventory_source) ?
|
||||
scope.home_groups[i].summary_fields.inventory_source.source : null;
|
||||
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
SearchInit({ scope: scope, set: 'home_groups', list: list, url: defaultUrl });
|
||||
PaginateInit({ scope: scope, list: list, url: defaultUrl });
|
||||
SearchInit({
|
||||
scope: scope,
|
||||
set: 'home_groups',
|
||||
list: list,
|
||||
url: defaultUrl
|
||||
});
|
||||
PaginateInit({
|
||||
scope: scope,
|
||||
list: list,
|
||||
url: defaultUrl
|
||||
});
|
||||
|
||||
// Process search params
|
||||
if ($routeParams['name']) {
|
||||
if ($routeParams.name) {
|
||||
scope[list.iterator + 'InputDisable'] = false;
|
||||
scope[list.iterator + 'SearchValue'] = $routeParams['name'];
|
||||
scope[list.iterator + 'SearchValue'] = $routeParams.name;
|
||||
scope[list.iterator + 'SearchField'] = 'name';
|
||||
scope[list.iterator + 'SearchFieldLabel'] = list.fields['name'].label;
|
||||
scope[list.iterator + 'SearchFieldLabel'] = list.fields.name.label;
|
||||
scope[list.iterator + 'SearchSelectValue'] = null;
|
||||
}
|
||||
|
||||
if ($routeParams['id']) {
|
||||
if ($routeParams.id) {
|
||||
scope[list.iterator + 'InputDisable'] = false;
|
||||
scope[list.iterator + 'SearchValue'] = $routeParams['id'];
|
||||
scope[list.iterator + 'SearchValue'] = $routeParams.id;
|
||||
scope[list.iterator + 'SearchField'] = 'id';
|
||||
scope[list.iterator + 'SearchFieldLabel'] = list.fields['id'].label;
|
||||
scope[list.iterator + 'SearchFieldLabel'] = list.fields.id.label;
|
||||
scope[list.iterator + 'SearchSelectValue'] = null;
|
||||
}
|
||||
|
||||
if ($routeParams['has_active_failures']) {
|
||||
if ($routeParams.has_active_failures) {
|
||||
scope[list.iterator + 'InputDisable'] = true;
|
||||
scope[list.iterator + 'SearchValue'] = $routeParams['has_active_failures'];
|
||||
scope[list.iterator + 'SearchValue'] = $routeParams.has_active_failures;
|
||||
scope[list.iterator + 'SearchField'] = 'has_active_failures';
|
||||
scope[list.iterator + 'SearchFieldLabel'] = list.fields['has_active_failures'].label;
|
||||
scope[list.iterator + 'SearchSelectValue'] = ($routeParams['has_active_failures'] == 'true') ? { value: 1 } : { value: 0 };
|
||||
scope[list.iterator + 'SearchFieldLabel'] = list.fields.has_active_failures.label;
|
||||
scope[list.iterator + 'SearchSelectValue'] = ($routeParams.has_active_failures === 'true') ? { value: 1 } : { value: 0 };
|
||||
}
|
||||
|
||||
if ($routeParams['status'] && !$routeParams['source']) {
|
||||
if ($routeParams.status && !$routeParams.source) {
|
||||
scope[list.iterator + 'SearchField'] = 'status';
|
||||
scope[list.iterator + 'SelectShow'] = true;
|
||||
scope[list.iterator + 'SearchSelectOpts'] = list.fields['status'].searchOptions;
|
||||
scope[list.iterator + 'SearchFieldLabel'] = list.fields['status'].label.replace(/\<br\>/g,' ');
|
||||
for (var opt in list.fields['status'].searchOptions) {
|
||||
if (list.fields['status'].searchOptions[opt].value == $routeParams['status']) {
|
||||
scope[list.iterator + 'SearchSelectValue'] = list.fields['status'].searchOptions[opt];
|
||||
break;
|
||||
}
|
||||
scope[list.iterator + 'SearchSelectOpts'] = list.fields.status.searchOptions;
|
||||
scope[list.iterator + 'SearchFieldLabel'] = list.fields.status.label.replace(/<br\>/g, ' ');
|
||||
for (opt in list.fields.status.searchOptions) {
|
||||
if (list.fields.status.searchOptions[opt].value === $routeParams.status) {
|
||||
scope[list.iterator + 'SearchSelectValue'] = list.fields.status.searchOptions[opt];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($routeParams['source']) {
|
||||
if ($routeParams.source) {
|
||||
scope[list.iterator + 'SearchField'] = 'source';
|
||||
scope[list.iterator + 'SelectShow'] = true;
|
||||
scope[list.iterator + 'SearchSelectOpts'] = list.fields['source'].searchOptions;
|
||||
scope[list.iterator + 'SearchFieldLabel'] = list.fields['source'].label.replace(/\<br\>/g,' ');
|
||||
for (var opt in list.fields['source'].searchOptions) {
|
||||
if (list.fields['source'].searchOptions[opt].value == $routeParams['source']) {
|
||||
scope[list.iterator + 'SearchSelectValue'] = list.fields['source'].searchOptions[opt];
|
||||
break;
|
||||
}
|
||||
scope[list.iterator + 'SearchSelectOpts'] = list.fields.source.searchOptions;
|
||||
scope[list.iterator + 'SearchFieldLabel'] = list.fields.source.label.replace(/<br\>/g, ' ');
|
||||
for (opt in list.fields.source.searchOptions) {
|
||||
if (list.fields.source.searchOptions[opt].value === $routeParams.source) {
|
||||
scope[list.iterator + 'SearchSelectValue'] = list.fields.source.searchOptions[opt];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($routeParams['status']) {
|
||||
scope[list.iterator + 'ExtraParms'] = '&inventory_source__status__icontains=' + $routeParams['status'];
|
||||
if ($routeParams.status) {
|
||||
scope[list.iterator + 'ExtraParms'] = '&inventory_source__status__icontains=' + $routeParams.status;
|
||||
}
|
||||
}
|
||||
|
||||
if ($routeParams['has_external_source']) {
|
||||
if ($routeParams.has_external_source) {
|
||||
scope[list.iterator + 'SearchField'] = 'has_external_source';
|
||||
scope[list.iterator + 'SearchValue'] = list.fields['has_external_source'].searchValue;
|
||||
scope[list.iterator + 'SearchValue'] = list.fields.has_external_source.searchValue;
|
||||
scope[list.iterator + 'InputDisable'] = true;
|
||||
scope[list.iterator + 'SearchType'] = 'in';
|
||||
scope[list.iterator + 'SearchFieldLabel'] = list.fields['has_external_source'].label;
|
||||
scope[list.iterator + 'SearchFieldLabel'] = list.fields.has_external_source.label;
|
||||
}
|
||||
|
||||
scope.search(list.iterator);
|
||||
|
||||
LoadBreadCrumbs();
|
||||
|
||||
scope.showActivity = function() { Stream({ scope: scope }); }
|
||||
|
||||
scope.editGroup = function(group_id, inventory_id) {
|
||||
GroupsEdit({ scope: scope, group_id: group_id, inventory_id: inventory_id, groups_reload: false });
|
||||
}
|
||||
|
||||
scope.viewUpdateStatus = function(id) {
|
||||
scope.search(list.iterator);
|
||||
|
||||
LoadBreadCrumbs();
|
||||
|
||||
scope.showActivity = function () {
|
||||
Stream({
|
||||
scope: scope
|
||||
});
|
||||
};
|
||||
|
||||
scope.editGroup = function (group_id, inventory_id) {
|
||||
GroupsEdit({
|
||||
scope: scope,
|
||||
group_id: group_id,
|
||||
inventory_id: inventory_id,
|
||||
groups_reload: false
|
||||
});
|
||||
};
|
||||
|
||||
scope.viewUpdateStatus = function (id) {
|
||||
scope.groups = scope.home_groups;
|
||||
ViewUpdateStatus({ scope: scope, tree_id: id })
|
||||
};
|
||||
ViewUpdateStatus({
|
||||
scope: scope,
|
||||
tree_id: id
|
||||
});
|
||||
};
|
||||
|
||||
// Launch inventory sync
|
||||
scope.updateGroup = function(id) {
|
||||
var group = Find({ list: scope.home_groups, key: 'id', val: id});
|
||||
scope.updateGroup = function (id) {
|
||||
var group = Find({ list: scope.home_groups, key: 'id', val: id });
|
||||
if (group) {
|
||||
if (Empty(group.source)) {
|
||||
// if no source, do nothing.
|
||||
}
|
||||
else if (group.status == 'updating') {
|
||||
} else if (group.status === 'updating') {
|
||||
Alert('Update in Progress', 'The inventory update process is currently running for group <em>' +
|
||||
scope.home_groups[i].name + '</em>. Use the Refresh button to monitor the status.', 'alert-info');
|
||||
}
|
||||
else {
|
||||
group.name + '</em>. Use the Refresh button to monitor the status.', 'alert-info');
|
||||
} else {
|
||||
Wait('start');
|
||||
Rest.setUrl(group.related.inventory_source);
|
||||
Rest.get()
|
||||
.success( function(data, status, headers, config) {
|
||||
.success(function (data) {
|
||||
InventoryUpdate({
|
||||
scope: scope,
|
||||
scope: scope,
|
||||
url: data.related.update,
|
||||
group_name: data.summary_fields.group.name,
|
||||
group_name: data.summary_fields.group.name,
|
||||
group_source: data.source,
|
||||
tree_id: group.id,
|
||||
group_id: group.id
|
||||
});
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
ProcessErrors(scope, data, status, form,
|
||||
{ hdr: 'Error!', msg: 'Failed to retrieve inventory source: ' + group.related.inventory_source +
|
||||
' POST returned status: ' + status });
|
||||
});
|
||||
})
|
||||
.error(function (data, status) {
|
||||
ProcessErrors(scope, data, status, null, { hdr: 'Error!',
|
||||
msg: 'Failed to retrieve inventory source: ' + group.related.inventory_source + ' POST returned status: ' + status
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
scope.refresh = function() { scope.search(list.iterator, null, false, true); }
|
||||
scope.refresh = function () {
|
||||
scope.search(list.iterator, null, false, true);
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
HomeGroups.$inject = [ '$location', '$routeParams', 'HomeGroupList', 'GenerateList', 'ProcessErrors', 'LoadBreadCrumbs', 'ReturnToCaller',
|
||||
HomeGroups.$inject = ['$location', '$routeParams', 'HomeGroupList', 'GenerateList', 'ProcessErrors', 'LoadBreadCrumbs', 'ReturnToCaller',
|
||||
'ClearScope', 'GetBasePath', 'SearchInit', 'PaginateInit', 'FormatDate', 'GetHostsStatusMsg', 'GetSyncStatusMsg', 'ViewUpdateStatus',
|
||||
'Stream', 'GroupsEdit', 'Wait', 'Alert', 'Rest', 'Empty', 'InventoryUpdate', 'Find'
|
||||
];
|
||||
];
|
||||
|
||||
|
||||
function HomeHosts ($location, $routeParams, HomeHostList, GenerateList, ProcessErrors, LoadBreadCrumbs, ReturnToCaller, ClearScope,
|
||||
function HomeHosts($location, $routeParams, HomeHostList, GenerateList, ProcessErrors, LoadBreadCrumbs, ReturnToCaller, ClearScope,
|
||||
GetBasePath, SearchInit, PaginateInit, FormatDate, SetStatus, ToggleHostEnabled, HostsEdit, Stream, Find, ShowJobSummary) {
|
||||
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
|
||||
var generator = GenerateList;
|
||||
var list = HomeHostList;
|
||||
var defaultUrl=GetBasePath('hosts');
|
||||
|
||||
var scope = generator.inject(list, { mode: 'edit' });
|
||||
var base = $location.path().replace(/^\//,'').split('/')[0];
|
||||
var generator = GenerateList,
|
||||
list = HomeHostList,
|
||||
defaultUrl = GetBasePath('hosts'),
|
||||
scope = generator.inject(list, { mode: 'edit' });
|
||||
|
||||
if (scope.removePostRefresh) {
|
||||
scope.removePostRefresh();
|
||||
scope.removePostRefresh();
|
||||
}
|
||||
scope.removePostRefresh = scope.$on('PostRefresh', function() {
|
||||
for (var i=0; i < scope.hosts.length; i++) {
|
||||
scope['hosts'][i]['inventory_name'] = scope['hosts'][i]['summary_fields']['inventory']['name'];
|
||||
scope.removePostRefresh = scope.$on('PostRefresh', function () {
|
||||
for (var i = 0; i < scope.hosts.length; i++) {
|
||||
scope.hosts[i].inventory_name = scope.hosts[i].summary_fields.inventory.name;
|
||||
//SetHostStatus(scope['hosts'][i]);
|
||||
SetStatus({ scope: scope, host: scope['hosts'][i] });
|
||||
SetStatus({
|
||||
scope: scope,
|
||||
host: scope.hosts[i]
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
SearchInit({
|
||||
scope: scope,
|
||||
set: 'hosts',
|
||||
list: list,
|
||||
url: defaultUrl
|
||||
});
|
||||
PaginateInit({
|
||||
scope: scope,
|
||||
list: list,
|
||||
url: defaultUrl
|
||||
});
|
||||
|
||||
SearchInit({ scope: scope, set: 'hosts', list: list, url: defaultUrl });
|
||||
PaginateInit({ scope: scope, list: list, url: defaultUrl });
|
||||
|
||||
// Process search params
|
||||
if ($routeParams['name']) {
|
||||
if ($routeParams.name) {
|
||||
scope[HomeHostList.iterator + 'InputDisable'] = false;
|
||||
scope[HomeHostList.iterator + 'SearchValue'] = $routeParams['name'];
|
||||
scope[HomeHostList.iterator + 'SearchValue'] = $routeParams.name;
|
||||
scope[HomeHostList.iterator + 'SearchField'] = 'name';
|
||||
scope[HomeHostList.iterator + 'SearchFieldLabel'] = list.fields['name'].label;
|
||||
scope[HomeHostList.iterator + 'SearchFieldLabel'] = list.fields.name.label;
|
||||
}
|
||||
|
||||
if ($routeParams['id']) {
|
||||
|
||||
if ($routeParams.id) {
|
||||
scope[HomeHostList.iterator + 'InputDisable'] = false;
|
||||
scope[HomeHostList.iterator + 'SearchValue'] = $routeParams['id'];
|
||||
scope[HomeHostList.iterator + 'SearchValue'] = $routeParams.id;
|
||||
scope[HomeHostList.iterator + 'SearchField'] = 'id';
|
||||
scope[HomeHostList.iterator + 'SearchFieldLabel'] = list.fields['id'].label;
|
||||
scope[HomeHostList.iterator + 'SearchFieldLabel'] = list.fields.id.label;
|
||||
scope[HomeHostList.iterator + 'SearchSelectValue'] = null;
|
||||
}
|
||||
|
||||
if ($routeParams['has_active_failures']) {
|
||||
if ($routeParams.has_active_failures) {
|
||||
scope[HomeHostList.iterator + 'InputDisable'] = true;
|
||||
scope[HomeHostList.iterator + 'SearchValue'] = $routeParams['has_active_failures'];
|
||||
scope[HomeHostList.iterator + 'SearchValue'] = $routeParams.has_active_failures;
|
||||
scope[HomeHostList.iterator + 'SearchField'] = 'has_active_failures';
|
||||
scope[HomeHostList.iterator + 'SearchFieldLabel'] = HomeHostList.fields['has_active_failures'].label;
|
||||
scope[HomeHostList.iterator + 'SearchSelectValue'] = ($routeParams['has_active_failures'] == 'true') ? { value: 1 } : { value: 0 };
|
||||
scope[HomeHostList.iterator + 'SearchFieldLabel'] = HomeHostList.fields.has_active_failures.label;
|
||||
scope[HomeHostList.iterator + 'SearchSelectValue'] = ($routeParams.has_active_failures === 'true') ? { value: 1 } : { value: 0 };
|
||||
}
|
||||
|
||||
|
||||
scope.search(list.iterator);
|
||||
|
||||
|
||||
LoadBreadCrumbs();
|
||||
|
||||
scope.showActivity = function() { Stream({ scope: scope }); }
|
||||
|
||||
scope.toggle_host_enabled = function(id, sources) { ToggleHostEnabled({ host_id: id, external_source: sources, scope: scope }); }
|
||||
scope.showActivity = function () {
|
||||
Stream({
|
||||
scope: scope
|
||||
});
|
||||
};
|
||||
|
||||
scope.editHost = function(host_id, host_name) {
|
||||
var host = Find({ list: scope.hosts, key: 'id', val: host_id });
|
||||
scope.toggle_host_enabled = function (id, sources) {
|
||||
ToggleHostEnabled({
|
||||
host_id: id,
|
||||
external_source: sources,
|
||||
scope: scope
|
||||
});
|
||||
};
|
||||
|
||||
scope.editHost = function (host_id) {
|
||||
var host = Find({
|
||||
list: scope.hosts,
|
||||
key: 'id',
|
||||
val: host_id
|
||||
});
|
||||
if (host) {
|
||||
HostsEdit({ scope: scope, host_id: host_id, inventory_id: host.inventory, group_id: null, hostsReload: false });
|
||||
}
|
||||
HostsEdit({
|
||||
scope: scope,
|
||||
host_id: host_id,
|
||||
inventory_id: host.inventory,
|
||||
group_id: null,
|
||||
hostsReload: false
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
scope.showJobSummary = function(job_id) {
|
||||
ShowJobSummary({ job_id: job_id });
|
||||
}
|
||||
scope.showJobSummary = function (job_id) {
|
||||
ShowJobSummary({
|
||||
job_id: job_id
|
||||
});
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
HomeHosts.$inject = [ '$location', '$routeParams', 'HomeHostList', 'GenerateList', 'ProcessErrors', 'LoadBreadCrumbs', 'ReturnToCaller',
|
||||
HomeHosts.$inject = ['$location', '$routeParams', 'HomeHostList', 'GenerateList', 'ProcessErrors', 'LoadBreadCrumbs', 'ReturnToCaller',
|
||||
'ClearScope', 'GetBasePath', 'SearchInit', 'PaginateInit', 'FormatDate', 'SetStatus', 'ToggleHostEnabled', 'HostsEdit', 'Stream',
|
||||
'Find', 'ShowJobSummary'
|
||||
];
|
||||
];
|
File diff suppressed because it is too large
Load Diff
@ -3,180 +3,168 @@
|
||||
*
|
||||
*
|
||||
* JobEvents.js
|
||||
*
|
||||
*
|
||||
* Controller functions for the Job Events model.
|
||||
*
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
function JobEventsList ($filter, $scope, $rootScope, $location, $log, $routeParams, Rest, Alert, JobEventList,
|
||||
GenerateList, LoadBreadCrumbs, Prompt, SearchInit, PaginateInit, ReturnToCaller,
|
||||
ClearScope, ProcessErrors, GetBasePath, LookUpInit, ToggleChildren,
|
||||
FormatDate, EventView, Refresh, Wait)
|
||||
{
|
||||
function JobEventsList($filter, $scope, $rootScope, $location, $log, $routeParams, Rest, Alert, JobEventList, GenerateList,
|
||||
LoadBreadCrumbs, Prompt, SearchInit, PaginateInit, ReturnToCaller, ClearScope, ProcessErrors, GetBasePath, LookUpInit, ToggleChildren,
|
||||
FormatDate, EventView, Refresh, Wait) {
|
||||
|
||||
ClearScope('htmlTemplate');
|
||||
var list = JobEventList;
|
||||
|
||||
var list = JobEventList,
|
||||
defaultUrl = GetBasePath('jobs') + $routeParams.id + '/job_events/', //?parent__isnull=1';
|
||||
view = GenerateList,
|
||||
scope = view.inject(list, { mode: 'edit' }),
|
||||
page;
|
||||
|
||||
list.base = $location.path();
|
||||
|
||||
var defaultUrl = GetBasePath('jobs') + $routeParams.id + '/job_events/'; //?parent__isnull=1';
|
||||
|
||||
var view = GenerateList;
|
||||
var base = $location.path().replace(/^\//,'').split('/')[0];
|
||||
var scope = view.inject(list, { mode: 'edit' });
|
||||
|
||||
scope.job_id = $routeParams.id;
|
||||
$rootScope.flashMessage = null;
|
||||
scope.selected = [];
|
||||
scope.expand = true; //on load, automatically expand all nodes
|
||||
scope.expand = true; //on load, automatically expand all nodes
|
||||
|
||||
scope.parentNode = 'parent-event'; // used in ngClass to dynamically set row level class and control
|
||||
scope.childNode = 'child-event'; // link color and cursor
|
||||
|
||||
scope.parentNode = 'parent-event'; // used in ngClass to dynamically set row level class and control
|
||||
scope.childNode = 'child-event'; // link color and cursor
|
||||
|
||||
if (scope.removeSetHostLinks) {
|
||||
scope.removeSetHostLinks();
|
||||
scope.removeSetHostLinks();
|
||||
}
|
||||
scope.removeSetHostLinks = scope.$on('SetHostLinks', function(e, inventory_id) {
|
||||
for (var i=0; i < scope.jobevents.length; i++) {
|
||||
scope.removeSetHostLinks = scope.$on('SetHostLinks', function (e, inventory_id) {
|
||||
for (var i = 0; i < scope.jobevents.length; i++) {
|
||||
if (scope.jobevents[i].summary_fields.host) {
|
||||
scope.jobevents[i].hostLink = "/#/inventories/" + inventory_id + "/hosts/?name=" +
|
||||
escape(scope.jobevents[i].summary_fields.host.name);
|
||||
scope.jobevents[i].hostLink = "/#/inventories/" + inventory_id + "/hosts/?name=" +
|
||||
encodeURI(scope.jobevents[i].summary_fields.host.name);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function formatJSON(eventData) {
|
||||
//turn JSON event data into an html form
|
||||
var html = '';
|
||||
if (eventData['res']) {
|
||||
var n, rows;
|
||||
var found = false;
|
||||
if (typeof eventData.res == 'string') {
|
||||
n = eventData['res'].match(/\n/g);
|
||||
rows = (n) ? n.length : 1;
|
||||
rows = (rows > 10) ? 10 : rows;
|
||||
found = true;
|
||||
html += "<div class=\"form-group\">\n";
|
||||
html += "<label>Traceback:</label>\n";
|
||||
html += "<textarea readonly class=\"form-control nowrap\" rows=\"" + rows + "\">" + eventData.res + "</textarea>\n";
|
||||
html += "</div>\n";
|
||||
}
|
||||
else {
|
||||
for (var fld in eventData.res) {
|
||||
if ( (fld == 'msg' || fld == 'stdout' || fld == 'stderr') &&
|
||||
(eventData.res[fld] !== null && eventData.res[fld] !== '') ) {
|
||||
html += "<div class=\"form-group\">\n";
|
||||
html += "<label>";
|
||||
switch(fld) {
|
||||
case 'msg':
|
||||
case 'stdout':
|
||||
html += 'Output:';
|
||||
break;
|
||||
case 'stderr':
|
||||
html += 'Error:';
|
||||
break;
|
||||
}
|
||||
html += "</label>\n";
|
||||
n = eventData['res'][fld].match(/\n/g);
|
||||
rows = (n) ? n.length : 1;
|
||||
rows = (rows > 10) ? 10 : rows;
|
||||
html += "<textarea readonly class=\"form-control nowrap\" rows=\"" + rows + "\">" + eventData.res[fld] + "</textarea>\n";
|
||||
html += "</div>\n";
|
||||
found = true;
|
||||
}
|
||||
if ( fld == "results" && Array.isArray(eventData.res[fld]) && eventData.res[fld].length > 0 ) {
|
||||
//html += "<textarea readonly class="
|
||||
var txt = '';
|
||||
for (var i=0; i < eventData.res[fld].length; i++) {
|
||||
txt += eventData.res[fld][i];
|
||||
}
|
||||
n = txt.match(/\n/g);
|
||||
rows = (n) ? n.length : 1;
|
||||
rows = (rows > 10) ? 10 : rows;
|
||||
if (txt !== '') {
|
||||
|
||||
var i, n, rows, fld, txt,
|
||||
html = '',
|
||||
found = false;
|
||||
|
||||
if (eventData.res) {
|
||||
if (typeof eventData.res === 'string') {
|
||||
n = eventData.res.match(/\n/g);
|
||||
rows = (n) ? n.length : 1;
|
||||
rows = (rows > 10) ? 10 : rows;
|
||||
found = true;
|
||||
html += "<div class=\"form-group\">\n";
|
||||
html += "<label>Traceback:</label>\n";
|
||||
html += "<textarea readonly class=\"form-control nowrap\" rows=\"" + rows + "\">" + eventData.res + "</textarea>\n";
|
||||
html += "</div>\n";
|
||||
} else {
|
||||
for (fld in eventData.res) {
|
||||
if ((fld === 'msg' || fld === 'stdout' || fld === 'stderr') &&
|
||||
(eventData.res[fld] !== null && eventData.res[fld] !== '')) {
|
||||
html += "<div class=\"form-group\">\n";
|
||||
html += "<label>Results:</label>\n";
|
||||
html += "<textarea readonly class=\"form-control nowrap mono-space\" rows=\"" + rows + "\">" + txt + "</textarea>\n";
|
||||
html += "<label>";
|
||||
switch (fld) {
|
||||
case 'msg':
|
||||
case 'stdout':
|
||||
html += 'Output:';
|
||||
break;
|
||||
case 'stderr':
|
||||
html += 'Error:';
|
||||
break;
|
||||
}
|
||||
html += "</label>\n";
|
||||
n = eventData.res[fld].match(/\n/g);
|
||||
rows = (n) ? n.length : 1;
|
||||
rows = (rows > 10) ? 10 : rows;
|
||||
html += "<textarea readonly class=\"form-control nowrap\" rows=\"" + rows + "\">" + eventData.res[fld] + "</textarea>\n";
|
||||
html += "</div>\n";
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
if (fld == "rc" && eventData.res[fld] != '') {
|
||||
html += "<div class=\"form-group\">\n";
|
||||
html += "<label>Return Code:</label>\n";
|
||||
html += "<input type=\"text\" class=\"form-control nowrap mono-space\" value=\"" + eventData.res[fld] + "\" readonly >\n";
|
||||
html += "</div>\n";
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
html = (found) ? "<form class=\"event-form\">\n" + html + "</form>\n" : '';
|
||||
}
|
||||
if (fld === "results" && Array.isArray(eventData.res[fld]) && eventData.res[fld].length > 0) {
|
||||
//html += "<textarea readonly class="
|
||||
txt = '';
|
||||
for (i = 0; i < eventData.res[fld].length; i++) {
|
||||
txt += eventData.res[fld][i];
|
||||
}
|
||||
n = txt.match(/\n/g);
|
||||
rows = (n) ? n.length : 1;
|
||||
rows = (rows > 10) ? 10 : rows;
|
||||
if (txt !== '') {
|
||||
html += "<div class=\"form-group\">\n";
|
||||
html += "<label>Results:</label>\n";
|
||||
html += "<textarea readonly class=\"form-control nowrap mono-space\" rows=\"" + rows + "\">" + txt + "</textarea>\n";
|
||||
html += "</div>\n";
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
if (fld === "rc" && eventData.res[fld] !== '') {
|
||||
html += "<div class=\"form-group\">\n";
|
||||
html += "<label>Return Code:</label>\n";
|
||||
html += "<input type=\"text\" class=\"form-control nowrap mono-space\" value=\"" + eventData.res[fld] + "\" readonly >\n";
|
||||
html += "</div>\n";
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
html = (found) ? "<form class=\"event-form\">\n" + html + "</form>\n" : '';
|
||||
}
|
||||
if (eventData['host']) {
|
||||
html = "<span class=\"event-detail-host visible-sm\">" + eventData['host'] + "</span>\n" + html;
|
||||
}
|
||||
else {
|
||||
html = (html == '' ) ? null : html;
|
||||
if (eventData.hosts) {
|
||||
html = "<span class=\"event-detail-host visible-sm\">" + eventData.host + "</span>\n" + html;
|
||||
} else {
|
||||
html = (html === '') ? null : html;
|
||||
}
|
||||
return html;
|
||||
}
|
||||
}
|
||||
|
||||
if (scope.removePostRefresh) {
|
||||
scope.removePostRefresh();
|
||||
scope.removePostRefresh();
|
||||
}
|
||||
scope.removePostRefresh = scope.$on('PostRefresh', function() {
|
||||
scope.removePostRefresh = scope.$on('PostRefresh', function () {
|
||||
// Initialize the parent levels
|
||||
var set = scope[list.name];
|
||||
var cDate;
|
||||
for (var i=0; i < set.length; i++) {
|
||||
set[i].event_display = set[i].event_display.replace(/^\u00a0*/g,'');
|
||||
if (set[i].event_level < 3 ) {
|
||||
set[i]['ngclick'] = "toggleChildren(" + set[i].id + ", \"" + set[i].related.children + "\")";
|
||||
set[i]['ngicon'] = 'fa fa-minus-square-o node-toggle';
|
||||
set[i]['class'] = 'parentNode';
|
||||
var set = scope[list.name], i;
|
||||
for (i = 0; i < set.length; i++) {
|
||||
set[i].event_display = set[i].event_display.replace(/^\u00a0*/g, '');
|
||||
if (set[i].event_level < 3) {
|
||||
set[i].ngclick = "toggleChildren(" + set[i].id + ", \"" + set[i].related.children + "\")";
|
||||
set[i].ngicon = 'fa fa-minus-square-o node-toggle';
|
||||
set[i]['class'] = 'parentNode';
|
||||
} else {
|
||||
set[i].ngicon = 'fa fa-square-o node-no-toggle';
|
||||
set[i]['class'] = 'childNode';
|
||||
set[i].event_detail = formatJSON(set[i].event_data);
|
||||
}
|
||||
else {
|
||||
set[i]['ngicon'] = 'fa fa-square-o node-no-toggle';
|
||||
set[i]['class'] = 'childNode';
|
||||
set[i]['event_detail'] = formatJSON(set[i].event_data);
|
||||
}
|
||||
set[i]['show'] = true;
|
||||
set[i]['spaces'] = set[i].event_level * 24;
|
||||
set[i].show = true;
|
||||
set[i].spaces = set[i].event_level * 24;
|
||||
if (scope.jobevents[i].failed) {
|
||||
scope.jobevents[i].status = 'error';
|
||||
if (i == set.length - 1) {
|
||||
scope.jobevents[i].statusBadgeToolTip = "A failure occurred durring one or more playbook tasks.";
|
||||
}
|
||||
else if (set[i].event_level < 3) {
|
||||
scope.jobevents[i].statusBadgeToolTip = "A failure occurred within the children of this event.";
|
||||
}
|
||||
else {
|
||||
scope.jobevents[i].statusBadgeToolTip = "A failure occurred. Click to view details";
|
||||
}
|
||||
}
|
||||
else if (scope.jobevents[i].changed) {
|
||||
scope.jobevents[i].status = 'changed';
|
||||
if (i == set.length - 1) {
|
||||
scope.jobevents[i].statusBadgeToolTip = "A change was completed durring one or more playbook tasks.";
|
||||
}
|
||||
else if (set[i].event_level < 3) {
|
||||
scope.jobevents[i].statusBadgeToolTip = "A change was completed by one or more children of this event.";
|
||||
}
|
||||
else {
|
||||
scope.jobevents[i].statusBadgeToolTip = "A change was completed. Click to view details";
|
||||
}
|
||||
}
|
||||
else {
|
||||
scope.jobevents[i].status = 'success';
|
||||
if (i == set.length - 1) {
|
||||
scope.jobevents[i].statusBadgeToolTip = "All playbook tasks completed successfully.";
|
||||
}
|
||||
else if (set[i].event_level < 3) {
|
||||
scope.jobevents[i].statusBadgeToolTip = "All the children of this event completed successfully.";
|
||||
}
|
||||
else {
|
||||
scope.jobevents[i].statusBadgeToolTip = "No errors occurred. Click to view details";
|
||||
}
|
||||
scope.jobevents[i].status = 'error';
|
||||
if (i === set.length - 1) {
|
||||
scope.jobevents[i].statusBadgeToolTip = "A failure occurred durring one or more playbook tasks.";
|
||||
} else if (set[i].event_level < 3) {
|
||||
scope.jobevents[i].statusBadgeToolTip = "A failure occurred within the children of this event.";
|
||||
} else {
|
||||
scope.jobevents[i].statusBadgeToolTip = "A failure occurred. Click to view details";
|
||||
}
|
||||
} else if (scope.jobevents[i].changed) {
|
||||
scope.jobevents[i].status = 'changed';
|
||||
if (i === set.length - 1) {
|
||||
scope.jobevents[i].statusBadgeToolTip = "A change was completed durring one or more playbook tasks.";
|
||||
} else if (set[i].event_level < 3) {
|
||||
scope.jobevents[i].statusBadgeToolTip = "A change was completed by one or more children of this event.";
|
||||
} else {
|
||||
scope.jobevents[i].statusBadgeToolTip = "A change was completed. Click to view details";
|
||||
}
|
||||
} else {
|
||||
scope.jobevents[i].status = 'success';
|
||||
if (i === set.length - 1) {
|
||||
scope.jobevents[i].statusBadgeToolTip = "All playbook tasks completed successfully.";
|
||||
} else if (set[i].event_level < 3) {
|
||||
scope.jobevents[i].statusBadgeToolTip = "All the children of this event completed successfully.";
|
||||
} else {
|
||||
scope.jobevents[i].statusBadgeToolTip = "No errors occurred. Click to view details";
|
||||
}
|
||||
}
|
||||
//cDate = new Date(set[i].created);
|
||||
//set[i].created = FormatDate(cDate);
|
||||
@ -187,160 +175,180 @@ function JobEventsList ($filter, $scope, $rootScope, $location, $log, $routePara
|
||||
// from job in the event that there are no job event records
|
||||
Rest.setUrl(GetBasePath('jobs') + scope.job_id);
|
||||
Rest.get()
|
||||
.success( function(data, status, headers, config) {
|
||||
.success(function (data) {
|
||||
scope.job_status = data.status;
|
||||
scope.job_name = data.summary_fields.job_template.name;
|
||||
LoadBreadCrumbs({ path: '/jobs/' + scope.job_id, title: scope.job_id + ' - ' + data.summary_fields.job_template.name });
|
||||
scope.$emit('SetHostLinks', data.inventory);
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
ProcessErrors(scope, data, status, null,
|
||||
{ hdr: 'Error!', msg: 'Failed to get job status for job: ' + scope.job_id + '. GET status: ' + status });
|
||||
LoadBreadCrumbs({
|
||||
path: '/jobs/' + scope.job_id,
|
||||
title: scope.job_id + ' - ' + data.summary_fields.job_template.name
|
||||
});
|
||||
});
|
||||
scope.$emit('SetHostLinks', data.inventory);
|
||||
})
|
||||
.error(function (data, status) {
|
||||
ProcessErrors(scope, data, status, null, {
|
||||
hdr: 'Error!',
|
||||
msg: 'Failed to get job status for job: ' + scope.job_id + '. GET status: ' + status
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
SearchInit({ scope: scope, set: 'jobevents', list: list, url: defaultUrl });
|
||||
|
||||
var page = ($routeParams.page) ? parseInt($routeParams.page) - 1 : null;
|
||||
PaginateInit({ scope: scope, list: list, url: defaultUrl, page: page });
|
||||
SearchInit({
|
||||
scope: scope,
|
||||
set: 'jobevents',
|
||||
list: list,
|
||||
url: defaultUrl
|
||||
});
|
||||
|
||||
page = ($routeParams.page) ? parseInt($routeParams.page,10) - 1 : null;
|
||||
PaginateInit({
|
||||
scope: scope,
|
||||
list: list,
|
||||
url: defaultUrl,
|
||||
page: page
|
||||
});
|
||||
|
||||
// Called from Inventories tab, host failed events link:
|
||||
if ($routeParams.host) {
|
||||
scope[list.iterator + 'SearchField'] = 'host';
|
||||
scope[list.iterator + 'SearchValue'] = $routeParams.host;
|
||||
scope[list.iterator + 'SearchFieldLabel'] = list.fields['host'].label;
|
||||
scope[list.iterator + 'SearchField'] = 'host';
|
||||
scope[list.iterator + 'SearchValue'] = $routeParams.host;
|
||||
scope[list.iterator + 'SearchFieldLabel'] = list.fields.host.label;
|
||||
}
|
||||
|
||||
|
||||
scope.search(list.iterator, $routeParams.page);
|
||||
|
||||
scope.toggleChildren = function(id, children) {
|
||||
|
||||
scope.toggleChildren = function (id, children) {
|
||||
ToggleChildren({
|
||||
scope: scope,
|
||||
scope: scope,
|
||||
list: list,
|
||||
id: id,
|
||||
children: children
|
||||
});
|
||||
}
|
||||
|
||||
scope.viewJobEvent = function(id) {
|
||||
EventView({ event_id: id });
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
scope.refresh = function() {
|
||||
scope['jobSearchSpin'] = true;
|
||||
scope['jobLoading'] = true;
|
||||
Wait('start');
|
||||
Refresh({ scope: scope, set: 'jobevents', iterator: 'jobevent', url: scope['current_url'] });
|
||||
}
|
||||
scope.viewJobEvent = function (id) {
|
||||
EventView({
|
||||
event_id: id
|
||||
});
|
||||
};
|
||||
|
||||
scope.refresh = function () {
|
||||
scope.jobSearchSpin = true;
|
||||
scope.jobLoading = true;
|
||||
Wait('start');
|
||||
Refresh({
|
||||
scope: scope,
|
||||
set: 'jobevents',
|
||||
iterator: 'jobevent',
|
||||
url: scope.current_url
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
JobEventsList.$inject = [ '$filter', '$scope', '$rootScope', '$location', '$log', '$routeParams', 'Rest', 'Alert', 'JobEventList',
|
||||
'GenerateList', 'LoadBreadCrumbs', 'Prompt', 'SearchInit', 'PaginateInit', 'ReturnToCaller', 'ClearScope',
|
||||
'ProcessErrors','GetBasePath', 'LookUpInit', 'ToggleChildren', 'FormatDate', 'EventView', 'Refresh', 'Wait'
|
||||
];
|
||||
JobEventsList.$inject = ['$filter', '$scope', '$rootScope', '$location', '$log', '$routeParams', 'Rest', 'Alert', 'JobEventList',
|
||||
'GenerateList', 'LoadBreadCrumbs', 'Prompt', 'SearchInit', 'PaginateInit', 'ReturnToCaller', 'ClearScope',
|
||||
'ProcessErrors', 'GetBasePath', 'LookUpInit', 'ToggleChildren', 'FormatDate', 'EventView', 'Refresh', 'Wait'
|
||||
];
|
||||
|
||||
function JobEventsEdit ($scope, $rootScope, $compile, $location, $log, $routeParams, JobEventForm, GenerateForm,
|
||||
Rest, Alert, ProcessErrors, LoadBreadCrumbs, ClearScope, GetBasePath, FormatDate, EventView,
|
||||
Wait)
|
||||
{
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
// Inject dynamic view
|
||||
var form = JobEventForm;
|
||||
var generator = GenerateForm;
|
||||
var scope = GenerateForm.inject(form, {mode: 'edit', related: true});
|
||||
generator.reset();
|
||||
|
||||
var defaultUrl = GetBasePath('base') + 'job_events/' + $routeParams.event_id + '/';
|
||||
var base = $location.path().replace(/^\//,'').split('/')[0];
|
||||
|
||||
// Retrieve detail record and prepopulate the form
|
||||
Wait('start');
|
||||
Rest.setUrl(defaultUrl);
|
||||
Rest.get()
|
||||
.success( function(data, status, headers, config) {
|
||||
scope['event_display'] = data['event_display'].replace(/^\u00a0*/g,'');
|
||||
LoadBreadCrumbs({ path: '/jobs/' + $routeParams.job_id + '/job_events/' + $routeParams.event_id,
|
||||
title: scope['event_display'] });
|
||||
for (var fld in form.fields) {
|
||||
switch(fld) {
|
||||
case 'status':
|
||||
if (data['failed']) {
|
||||
scope['status'] = 'error';
|
||||
}
|
||||
else if (data['changed']) {
|
||||
scope['status'] = 'changed';
|
||||
}
|
||||
else {
|
||||
scope['status'] = 'success';
|
||||
}
|
||||
break;
|
||||
case 'created':
|
||||
var cDate = new Date(data['created']);
|
||||
scope['created'] = FormatDate(cDate);
|
||||
break;
|
||||
case 'host':
|
||||
if (data['summary_fields'] && data['summary_fields']['host']) {
|
||||
scope['host'] = data['summary_fields']['host']['name'];
|
||||
}
|
||||
break;
|
||||
case 'id':
|
||||
case 'task':
|
||||
case 'play':
|
||||
scope[fld] = data[fld];
|
||||
break;
|
||||
case 'start':
|
||||
case 'end':
|
||||
if (data['event_data'] && data['event_data']['res'] && data['event_data']['res'][fld] !== undefined) {
|
||||
var cDate = new Date(data['event_data']['res'][fld]);
|
||||
scope[fld] = FormatDate(cDate);
|
||||
function JobEventsEdit($scope, $rootScope, $compile, $location, $log, $routeParams, JobEventForm, GenerateForm,
|
||||
Rest, Alert, ProcessErrors, LoadBreadCrumbs, ClearScope, GetBasePath, FormatDate, EventView,
|
||||
Wait) {
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
// Inject dynamic view
|
||||
var form = JobEventForm,
|
||||
generator = GenerateForm,
|
||||
scope = GenerateForm.inject(form, { mode: 'edit', related: true }),
|
||||
defaultUrl = GetBasePath('base') + 'job_events/' + $routeParams.event_id + '/';
|
||||
|
||||
generator.reset();
|
||||
|
||||
// Retrieve detail record and prepopulate the form
|
||||
Wait('start');
|
||||
Rest.setUrl(defaultUrl);
|
||||
Rest.get()
|
||||
.success(function (data) {
|
||||
var cDate, fld, n, rows;
|
||||
scope.event_display = data.event_display.replace(/^\u00a0*/g, '');
|
||||
LoadBreadCrumbs({ path: '/jobs/' + $routeParams.job_id + '/job_events/' + $routeParams.event_id, title: scope.event_display });
|
||||
for (fld in form.fields) {
|
||||
switch (fld) {
|
||||
case 'status':
|
||||
if (data.failed) {
|
||||
scope.status = 'error';
|
||||
} else if (data.changed) {
|
||||
scope.status = 'changed';
|
||||
} else {
|
||||
scope.status = 'success';
|
||||
}
|
||||
break;
|
||||
case 'msg':
|
||||
case 'stdout':
|
||||
case 'stderr':
|
||||
case 'delta':
|
||||
case 'rc':
|
||||
if (data['event_data'] && data['event_data']['res'] && data['event_data']['res'][fld] !== undefined) {
|
||||
scope[fld] = data['event_data']['res'][fld];
|
||||
if (form.fields[fld].type == 'textarea') {
|
||||
var n = data['event_data']['res'][fld].match(/\n/g);
|
||||
var rows = (n) ? n.length : 1;
|
||||
rows = (rows > 15) ? 5 : rows;
|
||||
$('textarea[name="' + fld + '"]').attr('rows',rows);
|
||||
case 'created':
|
||||
cDate = new Date(data.created);
|
||||
scope.created = FormatDate(cDate);
|
||||
break;
|
||||
case 'host':
|
||||
if (data.summary_fields && data.summary_fields.host) {
|
||||
scope.host = data.summary_fields.host.name;
|
||||
}
|
||||
break;
|
||||
case 'id':
|
||||
case 'task':
|
||||
case 'play':
|
||||
scope[fld] = data[fld];
|
||||
break;
|
||||
case 'start':
|
||||
case 'end':
|
||||
if (data.event_data && data.event_data.res && data.event_data.res[fld] !== undefined) {
|
||||
cDate = new Date(data.event_data.res[fld]);
|
||||
scope[fld] = FormatDate(cDate);
|
||||
}
|
||||
break;
|
||||
case 'msg':
|
||||
case 'stdout':
|
||||
case 'stderr':
|
||||
case 'delta':
|
||||
case 'rc':
|
||||
if (data.event_data && data.event_data.res && data.event_data.res[fld] !== undefined) {
|
||||
scope[fld] = data.event_data.res[fld];
|
||||
if (form.fields[fld].type === 'textarea') {
|
||||
n = data.event_data.res[fld].match(/\n/g);
|
||||
rows = (n) ? n.length : 1;
|
||||
rows = (rows > 15) ? 5 : rows;
|
||||
$('textarea[name="' + fld + '"]').attr('rows', rows);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'module_name':
|
||||
case 'module_args':
|
||||
if (data['event_data']['res'] && data['event_data']['res']['invocation']) {
|
||||
scope[fld] = data['event_data']['res']['invocation'][fld];
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
Wait('stop');
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
ProcessErrors(scope, data, status, null,
|
||||
{ hdr: 'Error!', msg: 'Failed to retrieve host: ' + $routeParams.event_id + '. GET status: ' + status });
|
||||
});
|
||||
}
|
||||
break;
|
||||
case 'module_name':
|
||||
case 'module_args':
|
||||
if (data.event_data.res && data.event_data.res.invocation) {
|
||||
scope[fld] = data.event_data.res.invocation.fld;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
Wait('stop');
|
||||
})
|
||||
.error(function (data) {
|
||||
ProcessErrors(scope, data, status, null, { hdr: 'Error!', msg: 'Failed to retrieve host: ' + $routeParams.event_id +
|
||||
'. GET status: ' + status });
|
||||
});
|
||||
|
||||
scope.navigateBack = function() {
|
||||
var url = '/jobs/' + $routeParams.job_id + '/job_events';
|
||||
if ($routeParams.page) {
|
||||
url += '?page=' + $routeParams.page;
|
||||
}
|
||||
$location.url(url);
|
||||
}
|
||||
scope.navigateBack = function () {
|
||||
var url = '/jobs/' + $routeParams.job_id + '/job_events';
|
||||
if ($routeParams.page) {
|
||||
url += '?page=' + $routeParams.page;
|
||||
}
|
||||
$location.url(url);
|
||||
};
|
||||
|
||||
scope.rawView = function () {
|
||||
EventView({
|
||||
"event_id": scope.id
|
||||
});
|
||||
};
|
||||
|
||||
scope.rawView = function() {
|
||||
EventView({"event_id": scope.id });
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
JobEventsEdit.$inject = [ '$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'JobEventForm',
|
||||
'GenerateForm', 'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'ClearScope', 'GetBasePath',
|
||||
'FormatDate', 'EventView', 'Wait'
|
||||
];
|
||||
JobEventsEdit.$inject = ['$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'JobEventForm',
|
||||
'GenerateForm', 'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'ClearScope', 'GetBasePath', 'FormatDate',
|
||||
'EventView', 'Wait'
|
||||
];
|
@ -3,145 +3,165 @@
|
||||
*
|
||||
*
|
||||
* JobHosts.js
|
||||
*
|
||||
*
|
||||
* Controller functions for the Job Hosts Summary model.
|
||||
*
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
function JobHostSummaryList ($scope, $rootScope, $location, $log, $routeParams, Rest, Alert, JobHostList,
|
||||
GenerateList, LoadBreadCrumbs, Prompt, SearchInit, PaginateInit, ReturnToCaller,
|
||||
ClearScope, ProcessErrors, GetBasePath, Refresh, JobStatusToolTip, Wait)
|
||||
{
|
||||
function JobHostSummaryList($scope, $rootScope, $location, $log, $routeParams, Rest, Alert, JobHostList, GenerateList,
|
||||
LoadBreadCrumbs, Prompt, SearchInit, PaginateInit, ReturnToCaller, ClearScope, ProcessErrors, GetBasePath, Refresh,
|
||||
JobStatusToolTip, Wait) {
|
||||
|
||||
ClearScope('htmlTemplate');
|
||||
var list = JobHostList;
|
||||
var base = $location.path().replace(/^\//,'').split('/')[0];
|
||||
var defaultUrl = GetBasePath(base) + $routeParams.id + '/job_host_summaries/';
|
||||
var inventory_id;
|
||||
|
||||
var list = JobHostList,
|
||||
base = $location.path().replace(/^\//, '').split('/')[0],
|
||||
defaultUrl = GetBasePath(base) + $routeParams.id + '/job_host_summaries/',
|
||||
view = GenerateList,
|
||||
scope = view.inject(list, { mode: 'edit' });
|
||||
|
||||
// When viewing all summaries for a particular host, show job ID, otherwise row ID.
|
||||
if (base == 'hosts') {
|
||||
list.index = false;
|
||||
if (base === 'hosts') {
|
||||
list.index = false;
|
||||
} else {
|
||||
list.index = true;
|
||||
}
|
||||
else {
|
||||
list.index = true;
|
||||
}
|
||||
|
||||
var view = GenerateList;
|
||||
var scope = view.inject(list, { mode: 'edit' });
|
||||
|
||||
scope.selected = [];
|
||||
|
||||
|
||||
// control enable/disable/show of job specific view elements
|
||||
if (base == 'hosts') {
|
||||
scope.job_id = null;
|
||||
scope.host_id = $routeParams.id;
|
||||
if (base === 'hosts') {
|
||||
scope.job_id = null;
|
||||
scope.host_id = $routeParams.id;
|
||||
} else {
|
||||
scope.job_id = $routeParams.id;
|
||||
scope.host_id = null;
|
||||
}
|
||||
else {
|
||||
scope.job_id = $routeParams.id;
|
||||
scope.host_id = null;
|
||||
}
|
||||
|
||||
|
||||
if (scope.RemoveSetHostLink) {
|
||||
scope.RemoveSetHostLink();
|
||||
scope.RemoveSetHostLink();
|
||||
}
|
||||
scope.RemoveSetHostLink = scope.$on('setHostLink', function(e, inventory_id) {
|
||||
for (var i=0; i < scope.jobhosts.length; i++) {
|
||||
scope.jobhosts[i].hostLinkTo = '/#/inventories/' + inventory_id + '/?host_name=' +
|
||||
escape(scope.jobhosts[i].summary_fields.host.name);
|
||||
scope.RemoveSetHostLink = scope.$on('setHostLink', function (e, inventory_id) {
|
||||
for (var i = 0; i < scope.jobhosts.length; i++) {
|
||||
scope.jobhosts[i].hostLinkTo = '/#/inventories/' + inventory_id + '/?host_name=' +
|
||||
encodeURI(scope.jobhosts[i].summary_fields.host.name);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// After a refresh, populate any needed summary field values on each row
|
||||
if (scope.removePostRefresh) {
|
||||
scope.removePostRefresh();
|
||||
scope.removePostRefresh();
|
||||
}
|
||||
scope.removePostRefresh = scope.$on('PostRefresh', function() {
|
||||
|
||||
scope.removePostRefresh = scope.$on('PostRefresh', function () {
|
||||
|
||||
// Set status, tooltips, badget icons, etc.
|
||||
for( var i=0; i < scope.jobhosts.length; i++) {
|
||||
scope.jobhosts[i].host_name = scope.jobhosts[i].summary_fields.host.name;
|
||||
scope.jobhosts[i].status = (scope.jobhosts[i].failed) ? 'failed' : 'success';
|
||||
scope.jobhosts[i].statusBadgeToolTip = JobStatusToolTip(scope.jobhosts[i].status) +
|
||||
" Click to view details.";
|
||||
scope.jobhosts[i].statusLinkTo = '/#/jobs/' + scope.jobhosts[i].job + '/job_events/?host=' +
|
||||
escape(scope.jobhosts[i].summary_fields.host.name);
|
||||
for (var i = 0; i < scope.jobhosts.length; i++) {
|
||||
scope.jobhosts[i].host_name = scope.jobhosts[i].summary_fields.host.name;
|
||||
scope.jobhosts[i].status = (scope.jobhosts[i].failed) ? 'failed' : 'success';
|
||||
scope.jobhosts[i].statusBadgeToolTip = JobStatusToolTip(scope.jobhosts[i].status) +
|
||||
" Click to view details.";
|
||||
scope.jobhosts[i].statusLinkTo = '/#/jobs/' + scope.jobhosts[i].job + '/job_events/?host=' +
|
||||
encodeURI(scope.jobhosts[i].summary_fields.host.name);
|
||||
}
|
||||
|
||||
if (scope.job_id !== null && scope.job_id !== undefined && scope.job_id !== '') {
|
||||
// need job_status so we can show/hide refresh button
|
||||
Rest.setUrl(GetBasePath('jobs') + scope.job_id);
|
||||
Rest.get()
|
||||
.success( function(data, status, headers, config) {
|
||||
LoadBreadCrumbs({ path: '/jobs/' + data.id, title: data.id + ' - ' +
|
||||
data.summary_fields.job_template.name });
|
||||
scope.job_status = data.status;
|
||||
if (!(data.status == 'pending' || data.status == 'waiting' || data.status == 'running')) {
|
||||
if ($rootScope.timer) {
|
||||
clearInterval($rootScope.timer);
|
||||
}
|
||||
}
|
||||
scope.$emit('setHostLink', data.inventory);
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
ProcessErrors(scope, data, status, null,
|
||||
{ hdr: 'Error!', msg: 'Failed to get job status for job: ' + scope.job_id + '. GET status: ' + status });
|
||||
});
|
||||
// need job_status so we can show/hide refresh button
|
||||
Rest.setUrl(GetBasePath('jobs') + scope.job_id);
|
||||
Rest.get()
|
||||
.success(function (data) {
|
||||
LoadBreadCrumbs({
|
||||
path: '/jobs/' + data.id,
|
||||
title: data.id + ' - ' +
|
||||
data.summary_fields.job_template.name
|
||||
});
|
||||
scope.job_status = data.status;
|
||||
if (!(data.status === 'pending' || data.status === 'waiting' || data.status === 'running')) {
|
||||
if ($rootScope.timer) {
|
||||
clearInterval($rootScope.timer);
|
||||
}
|
||||
}
|
||||
scope.$emit('setHostLink', data.inventory);
|
||||
})
|
||||
.error(function (data, status) {
|
||||
ProcessErrors(scope, data, status, null, {
|
||||
hdr: 'Error!',
|
||||
msg: 'Failed to get job status for job: ' + scope.job_id + '. GET status: ' + status
|
||||
});
|
||||
});
|
||||
} else {
|
||||
// Make the host name appear in breadcrumbs
|
||||
LoadBreadCrumbs({
|
||||
path: '/hosts/' + scope.host_id,
|
||||
title: ((scope.jobhosts.length > 0) ? scope.jobhosts[0].summary_fields.host.name : 'Host')
|
||||
});
|
||||
if ($routeParams.inventory) {
|
||||
scope.$emit('setHostLink', $routeParams.inventory);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Make the host name appear in breadcrumbs
|
||||
LoadBreadCrumbs({ path: '/hosts/' + scope['host_id'],
|
||||
title: ( (scope.jobhosts.length > 0) ? scope.jobhosts[0].summary_fields.host.name : 'Host' ) });
|
||||
if ($routeParams['inventory']) {
|
||||
scope.$emit('setHostLink', $routeParams['inventory']);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
SearchInit({ scope: scope, set: 'jobhosts', list: list, url: defaultUrl });
|
||||
PaginateInit({ scope: scope, list: list, url: defaultUrl });
|
||||
});
|
||||
|
||||
SearchInit({
|
||||
scope: scope,
|
||||
set: 'jobhosts',
|
||||
list: list,
|
||||
url: defaultUrl
|
||||
});
|
||||
PaginateInit({
|
||||
scope: scope,
|
||||
list: list,
|
||||
url: defaultUrl
|
||||
});
|
||||
|
||||
// Called from Inventories tab, host failed events link:
|
||||
if ($routeParams['host_name']) {
|
||||
scope[list.iterator + 'SearchField'] = 'host';
|
||||
scope[list.iterator + 'SearchValue'] = $routeParams['host_name'];
|
||||
scope[list.iterator + 'SearchFieldLabel'] = list.fields['host'].label;
|
||||
if ($routeParams.host_name) {
|
||||
scope[list.iterator + 'SearchField'] = 'host';
|
||||
scope[list.iterator + 'SearchValue'] = $routeParams.host_name;
|
||||
scope[list.iterator + 'SearchFieldLabel'] = list.fields.host.label;
|
||||
}
|
||||
|
||||
|
||||
scope.search(list.iterator);
|
||||
|
||||
|
||||
scope.showEvents = function(host_name, last_job) {
|
||||
|
||||
|
||||
scope.showEvents = function (host_name, last_job) {
|
||||
// When click on !Failed Events link, redirect to latest job/job_events for the host
|
||||
Rest.setUrl(last_job);
|
||||
Rest.get()
|
||||
.success( function(data, status, headers, config) {
|
||||
LoadBreadCrumbs({ path: '/jobs/' + data.id, title: data.name });
|
||||
$location.url('/jobs/' + data.id + '/job_events/?host=' + escape(host_name));
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
ProcessErrors(scope, data, status, form,
|
||||
{ hdr: 'Error!', msg: 'Failed to lookup last job: ' + last_job + '. GET status: ' + status });
|
||||
});
|
||||
}
|
||||
.success(function (data) {
|
||||
LoadBreadCrumbs({
|
||||
path: '/jobs/' + data.id,
|
||||
title: data.name
|
||||
});
|
||||
$location.url('/jobs/' + data.id + '/job_events/?host=' + encodeURI(host_name));
|
||||
})
|
||||
.error(function (data, status) {
|
||||
ProcessErrors(scope, data, status, null, { hdr: 'Error!', msg: 'Failed to lookup last job: ' + last_job +
|
||||
'. GET status: ' + status });
|
||||
});
|
||||
};
|
||||
|
||||
scope.showJob = function(id) {
|
||||
$location.path('/jobs/' + id);
|
||||
}
|
||||
scope.showJob = function (id) {
|
||||
$location.path('/jobs/' + id);
|
||||
};
|
||||
|
||||
scope.refresh = function() {
|
||||
if (scope.host_id == null) {
|
||||
scope['jobSearchSpin'] = true;
|
||||
scope['jobLoading'] = true;
|
||||
Wait('start');
|
||||
Refresh({ scope: scope, set: 'jobhosts', iterator: 'jobhost', url: scope['current_url'] });
|
||||
scope.refresh = function () {
|
||||
if (scope.host_id === null) {
|
||||
scope.jobSearchSpin = true;
|
||||
scope.jobLoading = true;
|
||||
Wait('start');
|
||||
Refresh({
|
||||
scope: scope,
|
||||
set: 'jobhosts',
|
||||
iterator: 'jobhost',
|
||||
url: scope.current_url
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
JobHostSummaryList.$inject = [ '$scope', '$rootScope', '$location', '$log', '$routeParams', 'Rest', 'Alert', 'JobHostList',
|
||||
'GenerateList', 'LoadBreadCrumbs', 'Prompt', 'SearchInit', 'PaginateInit', 'ReturnToCaller', 'ClearScope',
|
||||
'ProcessErrors', 'GetBasePath', 'Refresh', 'JobStatusToolTip', 'Wait'
|
||||
];
|
||||
JobHostSummaryList.$inject = ['$scope', '$rootScope', '$location', '$log', '$routeParams', 'Rest', 'Alert', 'JobHostList',
|
||||
'GenerateList', 'LoadBreadCrumbs', 'Prompt', 'SearchInit', 'PaginateInit', 'ReturnToCaller', 'ClearScope',
|
||||
'ProcessErrors', 'GetBasePath', 'Refresh', 'JobStatusToolTip', 'Wait'
|
||||
];
|
File diff suppressed because it is too large
Load Diff
@ -3,21 +3,19 @@
|
||||
*
|
||||
*
|
||||
* Jobs.js
|
||||
*
|
||||
*
|
||||
* Controller functions for the Job model.
|
||||
*
|
||||
*/
|
||||
|
||||
/* global jsyaml:false */
|
||||
|
||||
'use strict';
|
||||
|
||||
function JobsListCtrl ($scope, $rootScope, $location, $log, $routeParams, Rest, Alert, JobList, GenerateList, LoadBreadCrumbs, Prompt,
|
||||
function JobsListCtrl($scope, $rootScope, $location, $log, $routeParams, Rest, Alert, JobList, GenerateList, LoadBreadCrumbs, Prompt,
|
||||
SearchInit, PaginateInit, ReturnToCaller, ClearScope, ProcessErrors, GetBasePath, LookUpInit, SubmitJob, FormatDate, Refresh,
|
||||
JobStatusToolTip, Empty, Wait) {
|
||||
|
||||
ClearScope('htmlTemplate');
|
||||
|
||||
|
||||
var list = JobList,
|
||||
defaultUrl = GetBasePath('jobs'),
|
||||
view = GenerateList,
|
||||
@ -26,19 +24,19 @@ function JobsListCtrl ($scope, $rootScope, $location, $log, $routeParams, Rest,
|
||||
|
||||
$rootScope.flashMessage = null;
|
||||
scope.selected = [];
|
||||
|
||||
|
||||
if (scope.removePostRefresh) {
|
||||
scope.removePostRefresh();
|
||||
}
|
||||
scope.removePostRefresh = scope.$on('PostRefresh', function() {
|
||||
var i,cDate;
|
||||
$("tr.success").each(function() {
|
||||
scope.removePostRefresh = scope.$on('PostRefresh', function () {
|
||||
var i, cDate;
|
||||
$("tr.success").each(function () {
|
||||
// Make sure no rows have a green background
|
||||
var ngc = $(this).attr('ng-class');
|
||||
scope[ngc] = "";
|
||||
});
|
||||
if (scope.jobs && scope.jobs.length) {
|
||||
for (i=0; i < scope.jobs.length; i++) {
|
||||
for (i = 0; i < scope.jobs.length; i++) {
|
||||
// Convert created date to local time zone
|
||||
cDate = new Date(scope.jobs[i].created);
|
||||
scope.jobs[i].created = FormatDate(cDate);
|
||||
@ -49,17 +47,25 @@ function JobsListCtrl ($scope, $rootScope, $location, $log, $routeParams, Rest,
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
if ($routeParams.job_host_summaries__host) {
|
||||
defaultUrl += '?job_host_summaries__host=' + $routeParams.job_host_summaries__host;
|
||||
}
|
||||
else if ($routeParams.inventory__int && $routeParams.status) {
|
||||
} else if ($routeParams.inventory__int && $routeParams.status) {
|
||||
defaultUrl += '?inventory__int=' + $routeParams.inventory__int + '&status=' +
|
||||
$routeParams.status;
|
||||
}
|
||||
SearchInit({ scope: scope, set: 'jobs', list: list, url: defaultUrl });
|
||||
PaginateInit({ scope: scope, list: list, url: defaultUrl });
|
||||
SearchInit({
|
||||
scope: scope,
|
||||
set: 'jobs',
|
||||
list: list,
|
||||
url: defaultUrl
|
||||
});
|
||||
PaginateInit({
|
||||
scope: scope,
|
||||
list: list,
|
||||
url: defaultUrl
|
||||
});
|
||||
|
||||
// Called from Inventories page, failed jobs link. Find jobs for selected inventory.
|
||||
if ($routeParams.inventory__int) {
|
||||
@ -76,7 +82,7 @@ function JobsListCtrl ($scope, $rootScope, $location, $log, $routeParams, Rest,
|
||||
scope[list.iterator + 'SearchField'] = 'status';
|
||||
scope[list.iterator + 'SelectShow'] = true;
|
||||
scope[list.iterator + 'SearchSelectOpts'] = list.fields.status.searchOptions;
|
||||
scope[list.iterator + 'SearchFieldLabel'] = list.fields.status.label.replace(/<br>/g,' ');
|
||||
scope[list.iterator + 'SearchFieldLabel'] = list.fields.status.label.replace(/<br>/g, ' ');
|
||||
for (opt in list.fields.status.searchOptions) {
|
||||
if (list.fields.status.searchOptions[opt].value === $routeParams.status) {
|
||||
scope[list.iterator + 'SearchSelectValue'] = list.fields.status.searchOptions[opt];
|
||||
@ -89,71 +95,83 @@ function JobsListCtrl ($scope, $rootScope, $location, $log, $routeParams, Rest,
|
||||
|
||||
LoadBreadCrumbs();
|
||||
|
||||
scope.refresh = function() {
|
||||
scope.refresh = function () {
|
||||
Wait('start');
|
||||
scope.jobLoading = false;
|
||||
Refresh({ scope: scope, set: 'jobs', iterator: 'job', url: scope.current_url });
|
||||
Refresh({
|
||||
scope: scope,
|
||||
set: 'jobs',
|
||||
iterator: 'job',
|
||||
url: scope.current_url
|
||||
});
|
||||
};
|
||||
|
||||
scope.refreshJob = scope.refresh;
|
||||
|
||||
scope.editJob = function(id, name) {
|
||||
LoadBreadCrumbs({ path: '/jobs/' + id, title: id + ' - ' + name });
|
||||
scope.editJob = function (id, name) {
|
||||
LoadBreadCrumbs({
|
||||
path: '/jobs/' + id,
|
||||
title: id + ' - ' + name
|
||||
});
|
||||
$location.path($location.path() + '/' + id);
|
||||
};
|
||||
|
||||
scope.viewEvents = function(id, name) {
|
||||
LoadBreadCrumbs({ path: '/jobs/' + id, title: id + ' - ' + name });
|
||||
scope.viewEvents = function (id, name) {
|
||||
LoadBreadCrumbs({
|
||||
path: '/jobs/' + id,
|
||||
title: id + ' - ' + name
|
||||
});
|
||||
$location.path($location.path() + '/' + id + '/job_events');
|
||||
};
|
||||
|
||||
scope.viewSummary = function(id, name) {
|
||||
LoadBreadCrumbs({ path: '/jobs/' + id, title: id + ' - ' + name });
|
||||
scope.viewSummary = function (id, name) {
|
||||
LoadBreadCrumbs({
|
||||
path: '/jobs/' + id,
|
||||
title: id + ' - ' + name
|
||||
});
|
||||
$location.path($location.path() + '/' + id + '/job_host_summaries');
|
||||
};
|
||||
|
||||
scope.deleteJob = function(id) {
|
||||
scope.deleteJob = function (id) {
|
||||
Rest.setUrl(defaultUrl + id + '/');
|
||||
Rest.get()
|
||||
.success( function(data) {
|
||||
|
||||
.success(function (data) {
|
||||
|
||||
var action, url, action_label, hdr;
|
||||
|
||||
|
||||
if (data.status === 'pending' || data.status === 'running' || data.status === 'waiting') {
|
||||
url = data.related.cancel;
|
||||
action_label = 'cancel';
|
||||
hdr = 'Cancel Job';
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
url = defaultUrl + id + '/';
|
||||
action_label = 'delete';
|
||||
hdr = 'Delete Job';
|
||||
}
|
||||
|
||||
action = function() {
|
||||
action = function () {
|
||||
Rest.setUrl(url);
|
||||
if (action_label === 'cancel') {
|
||||
Rest.post()
|
||||
.success( function() {
|
||||
.success(function () {
|
||||
$('#prompt-modal').modal('hide');
|
||||
scope.search(list.iterator);
|
||||
})
|
||||
.error( function(data, status) {
|
||||
.error(function (data, status) {
|
||||
$('#prompt-modal').modal('hide');
|
||||
ProcessErrors(scope, data, status, null,
|
||||
{ hdr: 'Error!', msg: 'Call to ' + url + ' failed. POST returned status: ' + status });
|
||||
ProcessErrors(scope, data, status, null, { hdr: 'Error!', msg: 'Call to ' + url +
|
||||
' failed. POST returned status: ' + status });
|
||||
});
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
Rest.destroy()
|
||||
.success( function() {
|
||||
.success(function () {
|
||||
$('#prompt-modal').modal('hide');
|
||||
scope.search(list.iterator);
|
||||
})
|
||||
.error( function(data, status) {
|
||||
.error(function (data, status) {
|
||||
$('#prompt-modal').modal('hide');
|
||||
ProcessErrors(scope, data, status, null,
|
||||
{ hdr: 'Error!', msg: 'Call to ' + url + ' failed. DELETE returned status: ' + status });
|
||||
ProcessErrors(scope, data, status, null, { hdr: 'Error!', msg: 'Call to ' + url +
|
||||
' failed. DELETE returned status: ' + status });
|
||||
});
|
||||
}
|
||||
};
|
||||
@ -164,40 +182,46 @@ function JobsListCtrl ($scope, $rootScope, $location, $log, $routeParams, Rest,
|
||||
action: action
|
||||
});
|
||||
})
|
||||
.error( function(data, status) {
|
||||
ProcessErrors(scope, data, status, null,
|
||||
{ hdr: 'Error!', msg: 'Failed to get job details. GET returned status: ' + status });
|
||||
.error(function (data, status) {
|
||||
ProcessErrors(scope, data, status, null, { hdr: 'Error!', msg: 'Failed to get job details. GET returned status: ' + status });
|
||||
});
|
||||
};
|
||||
|
||||
scope.submitJob = function(id, template) {
|
||||
SubmitJob({ scope: scope, id: id, template: template });
|
||||
|
||||
scope.submitJob = function (id, template) {
|
||||
SubmitJob({
|
||||
scope: scope,
|
||||
id: id,
|
||||
template: template
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
JobsListCtrl.$inject = [ '$scope', '$rootScope', '$location', '$log', '$routeParams', 'Rest', 'Alert', 'JobList',
|
||||
'GenerateList', 'LoadBreadCrumbs', 'Prompt', 'SearchInit', 'PaginateInit', 'ReturnToCaller', 'ClearScope',
|
||||
'ProcessErrors','GetBasePath', 'LookUpInit', 'SubmitJob', 'FormatDate', 'Refresh', 'JobStatusToolTip',
|
||||
'Empty', 'Wait'
|
||||
];
|
||||
JobsListCtrl.$inject = ['$scope', '$rootScope', '$location', '$log', '$routeParams', 'Rest', 'Alert', 'JobList',
|
||||
'GenerateList', 'LoadBreadCrumbs', 'Prompt', 'SearchInit', 'PaginateInit', 'ReturnToCaller', 'ClearScope',
|
||||
'ProcessErrors', 'GetBasePath', 'LookUpInit', 'SubmitJob', 'FormatDate', 'Refresh', 'JobStatusToolTip',
|
||||
'Empty', 'Wait'
|
||||
];
|
||||
|
||||
|
||||
function JobsEdit ($scope, $rootScope, $compile, $location, $log, $routeParams, JobForm, GenerateForm, Rest, Alert, ProcessErrors,
|
||||
LoadBreadCrumbs, RelatedSearchInit,RelatedPaginateInit, ReturnToCaller, ClearScope, InventoryList, CredentialList,
|
||||
function JobsEdit($scope, $rootScope, $compile, $location, $log, $routeParams, JobForm, GenerateForm, Rest, Alert, ProcessErrors,
|
||||
LoadBreadCrumbs, RelatedSearchInit, RelatedPaginateInit, ReturnToCaller, ClearScope, InventoryList, CredentialList,
|
||||
ProjectList, LookUpInit, PromptPasswords, GetBasePath, md5Setup, FormatDate, JobStatusToolTip, Wait) {
|
||||
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
|
||||
var defaultUrl= GetBasePath('jobs'),
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
|
||||
var defaultUrl = GetBasePath('jobs'),
|
||||
generator = GenerateForm,
|
||||
form = JobForm,
|
||||
scope = generator.inject(form, {mode: 'edit', related: true}),
|
||||
scope = generator.inject(form, {
|
||||
mode: 'edit',
|
||||
related: true
|
||||
}),
|
||||
master = {},
|
||||
id = $routeParams.id,
|
||||
relatedSets = {},
|
||||
loadingFinishedCount = 0;
|
||||
|
||||
|
||||
generator.reset();
|
||||
|
||||
scope.job_id = id;
|
||||
@ -209,18 +233,17 @@ function JobsEdit ($scope, $rootScope, $compile, $location, $log, $routeParams,
|
||||
var url = GetBasePath('projects') + project + '/playbooks/';
|
||||
Rest.setUrl(url);
|
||||
Rest.get()
|
||||
.success( function(data) {
|
||||
.success(function (data) {
|
||||
scope.playbook_options = [];
|
||||
for (var i=0; i < data.length; i++) {
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
scope.playbook_options.push(data[i]);
|
||||
}
|
||||
scope.$emit('jobTemplateLoadFinished');
|
||||
})
|
||||
.error( function() {
|
||||
.error(function () {
|
||||
scope.$emit('jobTemplateLoadFinished');
|
||||
});
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
scope.$emit('jobTemplateLoadFinished');
|
||||
}
|
||||
}
|
||||
@ -230,23 +253,23 @@ function JobsEdit ($scope, $rootScope, $compile, $location, $log, $routeParams,
|
||||
if (scope.jobLoadedRemove) {
|
||||
scope.jobLoadedRemove();
|
||||
}
|
||||
scope.jobLoadedRemove = scope.$on('jobLoaded', function(e, related_cloud_credential) {
|
||||
|
||||
scope.jobLoadedRemove = scope.$on('jobLoaded', function (e, related_cloud_credential) {
|
||||
|
||||
getPlaybooks(scope.project);
|
||||
|
||||
scope[form.name + 'ReadOnly'] = (scope.status === 'new') ? false : true;
|
||||
|
||||
|
||||
$('#forks-slider').slider("option", "value", scope.forks);
|
||||
$('#forks-slider').slider("disable");
|
||||
$('input[type="checkbox"]').attr('disabled','disabled');
|
||||
$('input[type="radio"]').attr('disabled','disabled');
|
||||
$('#host_config_key-gen-btn').attr('disabled','disabled');
|
||||
$('textarea').attr('readonly','readonly');
|
||||
$('input[type="checkbox"]').attr('disabled', 'disabled');
|
||||
$('input[type="radio"]').attr('disabled', 'disabled');
|
||||
$('#host_config_key-gen-btn').attr('disabled', 'disabled');
|
||||
$('textarea').attr('readonly', 'readonly');
|
||||
|
||||
// Get job template and display/hide host callback fields
|
||||
Rest.setUrl(scope.template_url);
|
||||
Rest.get()
|
||||
.success( function(data) {
|
||||
.success(function (data) {
|
||||
var dft = (data.host_config_key) ? 'true' : 'false';
|
||||
scope.host_config_key = data.host_config_key;
|
||||
md5Setup({
|
||||
@ -258,7 +281,7 @@ function JobsEdit ($scope, $rootScope, $compile, $location, $log, $routeParams,
|
||||
scope.callback_url = (data.related) ? data.related.callback : '<< Job template not found >>';
|
||||
scope.$emit('jobTemplateLoadFinished');
|
||||
})
|
||||
.error( function() {
|
||||
.error(function () {
|
||||
Wait('stop');
|
||||
scope.callback_url = '<< Job template not found >>';
|
||||
});
|
||||
@ -267,16 +290,17 @@ function JobsEdit ($scope, $rootScope, $compile, $location, $log, $routeParams,
|
||||
//Get the name of the cloud credential
|
||||
Rest.setUrl(related_cloud_credential);
|
||||
Rest.get()
|
||||
.success( function(data) {
|
||||
.success(function (data) {
|
||||
scope.cloud_credential_name = data.name;
|
||||
scope.$emit('jobTemplateLoadFinished');
|
||||
})
|
||||
.error( function(data, status) {
|
||||
ProcessErrors(scope, data, status, null,
|
||||
{ hdr: 'Error!', msg: 'Failed to related cloud credential. GET returned status: ' + status });
|
||||
.error(function (data, status) {
|
||||
ProcessErrors(scope, data, status, null, {
|
||||
hdr: 'Error!',
|
||||
msg: 'Failed to related cloud credential. GET returned status: ' + status
|
||||
});
|
||||
});
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
scope.$emit('jobTemplateLoadFinished');
|
||||
}
|
||||
});
|
||||
@ -285,7 +309,7 @@ function JobsEdit ($scope, $rootScope, $compile, $location, $log, $routeParams,
|
||||
if (scope.removeJobTemplateLoadFinished) {
|
||||
scope.removeJobTemplateLoadFinished();
|
||||
}
|
||||
scope.removeJobTemplateLoadFinished = scope.$on('jobTemplateLoadFinished', function() {
|
||||
scope.removeJobTemplateLoadFinished = scope.$on('jobTemplateLoadFinished', function () {
|
||||
loadingFinishedCount++;
|
||||
if (loadingFinishedCount >= 3) {
|
||||
// The initial template load finished. Now load related jobs, which
|
||||
@ -295,16 +319,27 @@ function JobsEdit ($scope, $rootScope, $compile, $location, $log, $routeParams,
|
||||
});
|
||||
|
||||
// Our job type options
|
||||
scope.job_type_options = [{ value: 'run', label: 'Run' }, { value: 'check', label: 'Check' }];
|
||||
scope.verbosity_options = [
|
||||
{ value: '0', label: 'Default' },
|
||||
{ value: '1', label: 'Verbose' },
|
||||
{ value: '3', label: 'Debug' }
|
||||
];
|
||||
scope.job_type_options = [{
|
||||
value: 'run',
|
||||
label: 'Run'
|
||||
}, {
|
||||
value: 'check',
|
||||
label: 'Check'
|
||||
}];
|
||||
scope.verbosity_options = [{
|
||||
value: '0',
|
||||
label: 'Default'
|
||||
}, {
|
||||
value: '1',
|
||||
label: 'Verbose'
|
||||
}, {
|
||||
value: '3',
|
||||
label: 'Debug'
|
||||
}];
|
||||
scope.playbook_options = null;
|
||||
scope.playbook = null;
|
||||
|
||||
function calcRows (content) {
|
||||
function calcRows(content) {
|
||||
var n = content.match(/\n/g),
|
||||
rows = (n) ? n.length : 1;
|
||||
return (rows > 15) ? 15 : rows;
|
||||
@ -313,8 +348,8 @@ function JobsEdit ($scope, $rootScope, $compile, $location, $log, $routeParams,
|
||||
// Retrieve detail record and prepopulate the form
|
||||
Wait('start');
|
||||
Rest.setUrl(defaultUrl + ':id/');
|
||||
Rest.get({ params: {id: id} })
|
||||
.success( function(data) {
|
||||
Rest.get({ params: { id: id } })
|
||||
.success(function (data) {
|
||||
//LoadBreadCrumbs({ path: '/jobs/' + id, title: data.id + ' - ' + data.summary_fields.job_template.name });
|
||||
var i, cDate, fld, json_obj, related, set;
|
||||
LoadBreadCrumbs();
|
||||
@ -322,23 +357,21 @@ function JobsEdit ($scope, $rootScope, $compile, $location, $log, $routeParams,
|
||||
if (fld !== 'variables' && data[fld] !== null && data[fld] !== undefined) {
|
||||
if (form.fields[fld].type === 'select') {
|
||||
if (scope[fld + '_options'] && scope[fld + '_options'].length > 0) {
|
||||
for (i=0; i < scope[fld + '_options'].length; i++) {
|
||||
for (i = 0; i < scope[fld + '_options'].length; i++) {
|
||||
if (data[fld] === scope[fld + '_options'][i].value) {
|
||||
scope[fld] = scope[fld + '_options'][i];
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
scope[fld] = data[fld];
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
scope[fld] = data[fld];
|
||||
}
|
||||
master[fld] = scope[fld];
|
||||
}
|
||||
|
||||
|
||||
scope.id = data.id;
|
||||
scope.name = (data.summary_fields && data.summary_fields.job_template) ? data.summary_fields.job_template.name : '';
|
||||
|
||||
@ -347,8 +380,7 @@ function JobsEdit ($scope, $rootScope, $compile, $location, $log, $routeParams,
|
||||
if ($.isEmptyObject(data.extra_vars) || data.extra_vars === "{}" || data.extra_vars === "null" ||
|
||||
data.extra_vars === "" || data.extra_vars === null) {
|
||||
scope.variables = "---";
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
json_obj = JSON.parse(data.extra_vars);
|
||||
scope.variables = jsyaml.safeDump(json_obj);
|
||||
}
|
||||
@ -360,23 +392,22 @@ function JobsEdit ($scope, $rootScope, $compile, $location, $log, $routeParams,
|
||||
master[form.fields[fld].sourceModel + '_' + form.fields[fld].sourceField] =
|
||||
scope[form.fields[fld].sourceModel + '_' + form.fields[fld].sourceField];
|
||||
}
|
||||
|
||||
|
||||
for (fld in form.statusFields) {
|
||||
if (data[fld] !== null && data[fld] !== undefined) {
|
||||
if (fld === 'created') {
|
||||
// Convert created date to local time zone
|
||||
cDate = new Date(data.created);
|
||||
scope.created = FormatDate(cDate);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
scope[fld] = data[fld];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
scope.statusToolTip = JobStatusToolTip(data.status);
|
||||
|
||||
$('form[name="jobs_form"] input[type="text"], form[name="jobs_form"] jobs_form textarea').attr('readonly','readonly');
|
||||
|
||||
$('form[name="jobs_form"] input[type="text"], form[name="jobs_form"] jobs_form textarea').attr('readonly', 'readonly');
|
||||
$('form[name="jobs_form"] select').prop('disabled', 'disabled');
|
||||
$('form[name="jobs_form"] .lookup-btn').prop('disabled', 'disabled');
|
||||
$('form[name="jobs_form"] .buttons, form[name="jobs_form"] hr').hide();
|
||||
@ -385,12 +416,15 @@ function JobsEdit ($scope, $rootScope, $compile, $location, $log, $routeParams,
|
||||
related = data.related;
|
||||
for (set in form.related) {
|
||||
if (related[set]) {
|
||||
relatedSets[set] = { url: related[set], iterator: form.related[set].iterator };
|
||||
relatedSets[set] = {
|
||||
url: related[set],
|
||||
iterator: form.related[set].iterator
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
scope.stdout_rows = calcRows(scope.result_stdout);
|
||||
|
||||
|
||||
scope.traceback_rows = calcRows(scope.result_traceback);
|
||||
|
||||
LookUpInit({
|
||||
@ -418,21 +452,30 @@ function JobsEdit ($scope, $rootScope, $compile, $location, $log, $routeParams,
|
||||
});
|
||||
|
||||
// Initialize related search functions. Doing it here to make sure relatedSets object is populated.
|
||||
RelatedSearchInit({ scope: scope, form: form, relatedSets: relatedSets });
|
||||
RelatedPaginateInit({ scope: scope, relatedSets: relatedSets });
|
||||
RelatedSearchInit({
|
||||
scope: scope,
|
||||
form: form,
|
||||
relatedSets: relatedSets
|
||||
});
|
||||
RelatedPaginateInit({
|
||||
scope: scope,
|
||||
relatedSets: relatedSets
|
||||
});
|
||||
scope.template_url = data.related.job_template;
|
||||
scope.$emit('jobLoaded', data.related.cloud_credential);
|
||||
})
|
||||
.error( function(data, status) {
|
||||
ProcessErrors(scope, data, status, form,
|
||||
{ hdr: 'Error!', msg: 'Failed to retrieve job: ' + $routeParams.id + '. GET status: ' + status });
|
||||
.error(function (data, status) {
|
||||
ProcessErrors(scope, data, status, form, {
|
||||
hdr: 'Error!',
|
||||
msg: 'Failed to retrieve job: ' + $routeParams.id + '. GET status: ' + status
|
||||
});
|
||||
});
|
||||
|
||||
scope.refresh = function() {
|
||||
scope.refresh = function () {
|
||||
Wait('start');
|
||||
Rest.setUrl(defaultUrl + id + '/');
|
||||
Rest.get()
|
||||
.success( function(data) {
|
||||
.success(function (data) {
|
||||
scope.status = data.status;
|
||||
scope.result_stdout = data.result_stdout;
|
||||
scope.result_traceback = data.result_traceback;
|
||||
@ -440,25 +483,26 @@ function JobsEdit ($scope, $rootScope, $compile, $location, $log, $routeParams,
|
||||
scope.traceback_rows = calcRows(scope.result_traceback);
|
||||
Wait('stop');
|
||||
})
|
||||
.error( function(data, status) {
|
||||
.error(function (data, status) {
|
||||
Wait('stop');
|
||||
ProcessErrors(scope, data, status, null,
|
||||
{ hdr: 'Error!', msg: 'Attempt to load job failed. GET returned status: ' + status });
|
||||
ProcessErrors(scope, data, status, null, {
|
||||
hdr: 'Error!',
|
||||
msg: 'Attempt to load job failed. GET returned status: ' + status
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
scope.jobSummary = function() {
|
||||
scope.jobSummary = function () {
|
||||
$location.path('/jobs/' + id + '/job_host_summaries');
|
||||
};
|
||||
|
||||
scope.jobEvents = function() {
|
||||
scope.jobEvents = function () {
|
||||
$location.path('/jobs/' + id + '/job_events');
|
||||
};
|
||||
}
|
||||
|
||||
JobsEdit.$inject = [ '$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'JobForm',
|
||||
'GenerateForm', 'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'RelatedSearchInit',
|
||||
'RelatedPaginateInit', 'ReturnToCaller', 'ClearScope', 'InventoryList', 'CredentialList',
|
||||
'ProjectList', 'LookUpInit', 'PromptPasswords', 'GetBasePath', 'md5Setup', 'FormatDate',
|
||||
'JobStatusToolTip', 'Wait'
|
||||
];
|
||||
JobsEdit.$inject = ['$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'JobForm',
|
||||
'GenerateForm', 'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'RelatedSearchInit', 'RelatedPaginateInit',
|
||||
'ReturnToCaller', 'ClearScope', 'InventoryList', 'CredentialList', 'ProjectList', 'LookUpInit', 'PromptPasswords',
|
||||
'GetBasePath', 'md5Setup', 'FormatDate', 'JobStatusToolTip', 'Wait'
|
||||
];
|
||||
|
@ -3,276 +3,327 @@
|
||||
*
|
||||
*
|
||||
* Organizations.js
|
||||
*
|
||||
*
|
||||
* Controller functions for Organization model.
|
||||
*
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
function OrganizationsList ($routeParams, $scope, $rootScope, $location, $log, Rest, Alert, LoadBreadCrumbs, Prompt,
|
||||
GenerateList, OrganizationList, SearchInit, PaginateInit, ClearScope, ProcessErrors,
|
||||
GetBasePath, SelectionInit, Wait, Stream)
|
||||
{
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
function OrganizationsList($routeParams, $scope, $rootScope, $location, $log, Rest, Alert, LoadBreadCrumbs, Prompt,
|
||||
GenerateList, OrganizationList, SearchInit, PaginateInit, ClearScope, ProcessErrors, GetBasePath, SelectionInit, Wait, Stream) {
|
||||
|
||||
ClearScope('htmlTemplate');
|
||||
|
||||
var list = OrganizationList;
|
||||
var generate = GenerateList;
|
||||
var paths = $location.path().replace(/^\//,'').split('/');
|
||||
var mode = (paths[0] == 'organizations') ? 'edit' : 'select'; // if base path 'users', we're here to add/edit users
|
||||
var scope = generate.inject(OrganizationList, { mode: mode }); // Inject our view
|
||||
var defaultUrl = GetBasePath('organizations');
|
||||
var iterator = list.iterator;
|
||||
var list = OrganizationList,
|
||||
generate = GenerateList,
|
||||
paths = $location.path().replace(/^\//, '').split('/'),
|
||||
mode = (paths[0] === 'organizations') ? 'edit' : 'select', // if base path 'users', we're here to add/edit users
|
||||
scope = generate.inject(OrganizationList, { mode: mode }),
|
||||
defaultUrl = GetBasePath('organizations'),
|
||||
url;
|
||||
|
||||
$rootScope.flashMessage = null;
|
||||
|
||||
LoadBreadCrumbs();
|
||||
|
||||
var url = GetBasePath('projects') + $routeParams.project_id + '/organizations/';
|
||||
SelectionInit({ scope: scope, list: list, url: url, returnToCaller: 1 });
|
||||
|
||||
url = GetBasePath('projects') + $routeParams.project_id + '/organizations/';
|
||||
SelectionInit({
|
||||
scope: scope,
|
||||
list: list,
|
||||
url: url,
|
||||
returnToCaller: 1
|
||||
});
|
||||
|
||||
if (scope.removePostRefresh) {
|
||||
scope.removePostRefresh();
|
||||
scope.removePostRefresh();
|
||||
}
|
||||
scope.removePostRefresh = scope.$on('PostRefresh', function() {
|
||||
scope.removePostRefresh = scope.$on('PostRefresh', function () {
|
||||
// Cleanup after a delete
|
||||
Wait('stop');
|
||||
$('#prompt-modal').off();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
// Initialize search and paginate pieces and load data
|
||||
SearchInit({ scope: scope, set: list.name, list: list, url: defaultUrl });
|
||||
PaginateInit({ scope: scope, list: list, url: defaultUrl });
|
||||
SearchInit({
|
||||
scope: scope,
|
||||
set: list.name,
|
||||
list: list,
|
||||
url: defaultUrl
|
||||
});
|
||||
PaginateInit({
|
||||
scope: scope,
|
||||
list: list,
|
||||
url: defaultUrl
|
||||
});
|
||||
scope.search(list.iterator);
|
||||
|
||||
scope.showActivity = function() { Stream({ scope: scope }); }
|
||||
scope.showActivity = function () {
|
||||
Stream({
|
||||
scope: scope
|
||||
});
|
||||
};
|
||||
|
||||
scope.addOrganization = function() {
|
||||
$location.path($location.path() + '/add');
|
||||
}
|
||||
scope.addOrganization = function () {
|
||||
$location.path($location.path() + '/add');
|
||||
};
|
||||
|
||||
scope.editOrganization = function(id) {
|
||||
$location.path($location.path() + '/' + id);
|
||||
}
|
||||
|
||||
scope.deleteOrganization = function(id, name) {
|
||||
|
||||
var action = function() {
|
||||
$('#prompt-modal').on('hidden.bs.modal', function(){ Wait('start'); });
|
||||
$('#prompt-modal').modal('hide');
|
||||
var url = defaultUrl + id + '/';
|
||||
Rest.setUrl(url);
|
||||
Rest.destroy()
|
||||
.success( function(data, status, headers, config) {
|
||||
scope.search(list.iterator);
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
ProcessErrors(scope, data, status, null,
|
||||
{ hdr: 'Error!', msg: 'Call to ' + url + ' failed. DELETE returned status: ' + status });
|
||||
});
|
||||
};
|
||||
scope.editOrganization = function (id) {
|
||||
$location.path($location.path() + '/' + id);
|
||||
};
|
||||
|
||||
Prompt({ hdr: 'Delete',
|
||||
body: 'Are you sure you want to delete ' + name + '?',
|
||||
action: action
|
||||
scope.deleteOrganization = function (id, name) {
|
||||
|
||||
var action = function () {
|
||||
$('#prompt-modal').on('hidden.bs.modal', function () {
|
||||
Wait('start');
|
||||
});
|
||||
$('#prompt-modal').modal('hide');
|
||||
var url = defaultUrl + id + '/';
|
||||
Rest.setUrl(url);
|
||||
Rest.destroy()
|
||||
.success(function () {
|
||||
scope.search(list.iterator);
|
||||
})
|
||||
.error(function (data, status) {
|
||||
Wait('stop');
|
||||
ProcessErrors(scope, data, status, null, {
|
||||
hdr: 'Error!',
|
||||
msg: 'Call to ' + url + ' failed. DELETE returned status: ' + status
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
Prompt({
|
||||
hdr: 'Delete',
|
||||
body: 'Are you sure you want to delete ' + name + '?',
|
||||
action: action
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
OrganizationsList.$inject=[ '$routeParams', '$scope', '$rootScope', '$location', '$log', 'Rest', 'Alert', 'LoadBreadCrumbs', 'Prompt',
|
||||
'GenerateList', 'OrganizationList', 'SearchInit', 'PaginateInit', 'ClearScope', 'ProcessErrors',
|
||||
'GetBasePath', 'SelectionInit', 'Wait', 'Stream'];
|
||||
OrganizationsList.$inject = ['$routeParams', '$scope', '$rootScope', '$location', '$log', 'Rest', 'Alert', 'LoadBreadCrumbs', 'Prompt',
|
||||
'GenerateList', 'OrganizationList', 'SearchInit', 'PaginateInit', 'ClearScope', 'ProcessErrors',
|
||||
'GetBasePath', 'SelectionInit', 'Wait', 'Stream'
|
||||
];
|
||||
|
||||
|
||||
function OrganizationsAdd ($scope, $rootScope, $compile, $location, $log, $routeParams, OrganizationForm,
|
||||
GenerateForm, Rest, Alert, ProcessErrors, LoadBreadCrumbs, ClearScope, GetBasePath,
|
||||
ReturnToCaller, Wait)
|
||||
{
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
function OrganizationsAdd($scope, $rootScope, $compile, $location, $log, $routeParams, OrganizationForm,
|
||||
GenerateForm, Rest, Alert, ProcessErrors, LoadBreadCrumbs, ClearScope, GetBasePath,
|
||||
ReturnToCaller, Wait) {
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
|
||||
// Inject dynamic view
|
||||
var generator = GenerateForm;
|
||||
var form = OrganizationForm;
|
||||
var scope = generator.inject(form, {mode: 'add', related: false});
|
||||
var base = $location.path().replace(/^\//,'').split('/')[0];
|
||||
var defaultUrl = GetBasePath('organizations');
|
||||
generator.reset();
|
||||
// Inject dynamic view
|
||||
var generator = GenerateForm,
|
||||
form = OrganizationForm,
|
||||
scope = generator.inject(form, { mode: 'add', related: false }),
|
||||
base = $location.path().replace(/^\//, '').split('/')[0];
|
||||
|
||||
generator.reset();
|
||||
|
||||
LoadBreadCrumbs();
|
||||
LoadBreadCrumbs();
|
||||
|
||||
// Save
|
||||
scope.formSave = function() {
|
||||
generator.clearApiErrors();
|
||||
Wait('start');
|
||||
var url = GetBasePath(base);
|
||||
url += (base != 'organizations') ? $routeParams['project_id'] + '/organizations/' : '';
|
||||
Rest.setUrl(url);
|
||||
Rest.post({ name: $scope.name,
|
||||
description: $scope.description })
|
||||
.success( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
if (base == 'organizations') {
|
||||
$rootScope.flashMessage = "New organization successfully created!";
|
||||
$location.path('/organizations/' + data.id);
|
||||
}
|
||||
else {
|
||||
ReturnToCaller(1);
|
||||
}
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
ProcessErrors(scope, data, status, form,
|
||||
{ hdr: 'Error!', msg: 'Failed to add new organization. Post returned status: ' + status });
|
||||
});
|
||||
};
|
||||
|
||||
// Cancel
|
||||
scope.formReset = function() {
|
||||
$rootScope.flashMessage = null;
|
||||
generator.reset();
|
||||
};
|
||||
}
|
||||
|
||||
OrganizationsAdd.$inject = [ '$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'OrganizationForm',
|
||||
'GenerateForm', 'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'ClearScope', 'GetBasePath',
|
||||
'ReturnToCaller', 'Wait'];
|
||||
|
||||
|
||||
function OrganizationsEdit ($scope, $rootScope, $compile, $location, $log, $routeParams, OrganizationForm,
|
||||
GenerateForm, Rest, Alert, ProcessErrors, LoadBreadCrumbs, RelatedSearchInit,
|
||||
RelatedPaginateInit, Prompt, ClearScope, GetBasePath, Wait, Stream)
|
||||
{
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
|
||||
// Inject dynamic view
|
||||
var form = OrganizationForm;
|
||||
var generator = GenerateForm;
|
||||
var scope = GenerateForm.inject(form, {mode: 'edit', related: true});
|
||||
generator.reset();
|
||||
|
||||
var defaultUrl = GetBasePath('organizations');
|
||||
var base = $location.path().replace(/^\//,'').split('/')[0];
|
||||
var master = {};
|
||||
var id = $routeParams.organization_id;
|
||||
var relatedSets = {};
|
||||
|
||||
// After the Organization is loaded, retrieve each related set
|
||||
if (scope.organizationLoadedRemove) {
|
||||
scope.organizationLoadedRemove();
|
||||
}
|
||||
scope.organizationLoadedRemove = scope.$on('organizationLoaded', function() {
|
||||
for (var set in relatedSets) {
|
||||
scope.search(relatedSets[set].iterator);
|
||||
}
|
||||
Wait('stop');
|
||||
});
|
||||
|
||||
// Retrieve detail record and prepopulate the form
|
||||
Wait('start');
|
||||
Rest.setUrl(defaultUrl + id + '/');
|
||||
Rest.get()
|
||||
.success( function(data, status, headers, config) {
|
||||
LoadBreadCrumbs({ path: '/organizations/' + id, title: data.name });
|
||||
for (var fld in form.fields) {
|
||||
if (data[fld]) {
|
||||
scope[fld] = data[fld];
|
||||
master[fld] = data[fld];
|
||||
}
|
||||
}
|
||||
var related = data.related;
|
||||
for (var set in form.related) {
|
||||
if (related[set]) {
|
||||
relatedSets[set] = { url: related[set], iterator: form.related[set].iterator };
|
||||
}
|
||||
}
|
||||
// Initialize related search functions. Doing it here to make sure relatedSets object is populated.
|
||||
RelatedSearchInit({ scope: scope, form: form, relatedSets: relatedSets });
|
||||
RelatedPaginateInit({ scope: scope, relatedSets: relatedSets });
|
||||
scope.$emit('organizationLoaded');
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
ProcessErrors(scope, data, status, form,
|
||||
{ hdr: 'Error!', msg: 'Failed to retrieve organization: ' + $routeParams.id + '. GET status: ' + status });
|
||||
});
|
||||
|
||||
|
||||
// Save changes to the parent
|
||||
scope.formSave = function() {
|
||||
generator.clearApiErrors();
|
||||
Wait('start');
|
||||
var params = {};
|
||||
for (var fld in form.fields) {
|
||||
params[fld] = scope[fld];
|
||||
}
|
||||
Rest.setUrl(defaultUrl + id + '/');
|
||||
Rest.put(params)
|
||||
.success( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
master = params;
|
||||
$rootScope.flashMessage = "Your changes were successfully saved!";
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
ProcessErrors(scope, data, status, OrganizationForm,
|
||||
{ hdr: 'Error!', msg: 'Failed to update organization: ' + id + '. PUT status: ' + status });
|
||||
});
|
||||
};
|
||||
|
||||
scope.showActivity = function() { Stream({ scope: scope }); }
|
||||
|
||||
// Reset the form
|
||||
scope.formReset = function() {
|
||||
$rootScope.flashMessage = null;
|
||||
generator.reset();
|
||||
for (var fld in master) {
|
||||
scope[fld] = master[fld];
|
||||
}
|
||||
};
|
||||
|
||||
// Related set: Add button
|
||||
scope.add = function(set) {
|
||||
$rootScope.flashMessage = null;
|
||||
$location.path('/' + base + '/' + $routeParams.organization_id + '/' + set);
|
||||
};
|
||||
|
||||
// Related set: Edit button
|
||||
scope.edit = function(set, id, name) {
|
||||
$rootScope.flashMessage = null;
|
||||
$location.path('/' + set + '/' + id);
|
||||
};
|
||||
|
||||
// Related set: Delete button
|
||||
scope['delete'] = function(set, itm_id, name, title) {
|
||||
$rootScope.flashMessage = null;
|
||||
|
||||
var action = function() {
|
||||
Wait('start');
|
||||
var url = defaultUrl + $routeParams.organization_id + '/' + set + '/';
|
||||
Rest.setUrl(url);
|
||||
Rest.post({ id: itm_id, disassociate: 1 })
|
||||
.success( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
$('#prompt-modal').modal('hide');
|
||||
scope.search(form.related[set].iterator);
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
$('#prompt-modal').modal('hide');
|
||||
ProcessErrors(scope, data, status, null,
|
||||
{ hdr: 'Error!', msg: 'Call to ' + url + ' failed. POST returned status: ' + status });
|
||||
});
|
||||
};
|
||||
|
||||
Prompt({ hdr: 'Delete',
|
||||
body: 'Are you sure you want to remove ' + name + ' from ' + scope.name + ' ' + title + '?',
|
||||
action: action
|
||||
// Save
|
||||
scope.formSave = function () {
|
||||
generator.clearApiErrors();
|
||||
Wait('start');
|
||||
var url = GetBasePath(base);
|
||||
url += (base !== 'organizations') ? $routeParams.project_id + '/organizations/' : '';
|
||||
Rest.setUrl(url);
|
||||
Rest.post({
|
||||
name: $scope.name,
|
||||
description: $scope.description
|
||||
})
|
||||
.success(function (data) {
|
||||
Wait('stop');
|
||||
if (base === 'organizations') {
|
||||
$rootScope.flashMessage = "New organization successfully created!";
|
||||
$location.path('/organizations/' + data.id);
|
||||
} else {
|
||||
ReturnToCaller(1);
|
||||
}
|
||||
})
|
||||
.error(function (data, status) {
|
||||
ProcessErrors(scope, data, status, form, {
|
||||
hdr: 'Error!',
|
||||
msg: 'Failed to add new organization. Post returned status: ' + status
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Cancel
|
||||
scope.formReset = function () {
|
||||
$rootScope.flashMessage = null;
|
||||
generator.reset();
|
||||
};
|
||||
}
|
||||
|
||||
OrganizationsEdit.$inject = [ '$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'OrganizationForm',
|
||||
'GenerateForm', 'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'RelatedSearchInit',
|
||||
'RelatedPaginateInit', 'Prompt', 'ClearScope', 'GetBasePath', 'Wait', 'Stream'];
|
||||
OrganizationsAdd.$inject = ['$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'OrganizationForm',
|
||||
'GenerateForm', 'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'ClearScope', 'GetBasePath',
|
||||
'ReturnToCaller', 'Wait'
|
||||
];
|
||||
|
||||
|
||||
function OrganizationsEdit($scope, $rootScope, $compile, $location, $log, $routeParams, OrganizationForm,
|
||||
GenerateForm, Rest, Alert, ProcessErrors, LoadBreadCrumbs, RelatedSearchInit,
|
||||
RelatedPaginateInit, Prompt, ClearScope, GetBasePath, Wait, Stream) {
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
|
||||
// Inject dynamic view
|
||||
var form = OrganizationForm,
|
||||
generator = GenerateForm,
|
||||
scope = GenerateForm.inject(form, { mode: 'edit', related: true }),
|
||||
defaultUrl = GetBasePath('organizations'),
|
||||
base = $location.path().replace(/^\//, '').split('/')[0],
|
||||
master = {},
|
||||
id = $routeParams.organization_id,
|
||||
relatedSets = {};
|
||||
|
||||
generator.reset();
|
||||
|
||||
// After the Organization is loaded, retrieve each related set
|
||||
if (scope.organizationLoadedRemove) {
|
||||
scope.organizationLoadedRemove();
|
||||
}
|
||||
scope.organizationLoadedRemove = scope.$on('organizationLoaded', function () {
|
||||
for (var set in relatedSets) {
|
||||
scope.search(relatedSets[set].iterator);
|
||||
}
|
||||
Wait('stop');
|
||||
});
|
||||
|
||||
// Retrieve detail record and prepopulate the form
|
||||
Wait('start');
|
||||
Rest.setUrl(defaultUrl + id + '/');
|
||||
Rest.get()
|
||||
.success(function (data) {
|
||||
var fld, related, set;
|
||||
LoadBreadCrumbs({ path: '/organizations/' + id, title: data.name });
|
||||
for (fld in form.fields) {
|
||||
if (data[fld]) {
|
||||
scope[fld] = data[fld];
|
||||
master[fld] = data[fld];
|
||||
}
|
||||
}
|
||||
related = data.related;
|
||||
for (set in form.related) {
|
||||
if (related[set]) {
|
||||
relatedSets[set] = {
|
||||
url: related[set],
|
||||
iterator: form.related[set].iterator
|
||||
};
|
||||
}
|
||||
}
|
||||
// Initialize related search functions. Doing it here to make sure relatedSets object is populated.
|
||||
RelatedSearchInit({
|
||||
scope: scope,
|
||||
form: form,
|
||||
relatedSets: relatedSets
|
||||
});
|
||||
RelatedPaginateInit({
|
||||
scope: scope,
|
||||
relatedSets: relatedSets
|
||||
});
|
||||
scope.$emit('organizationLoaded');
|
||||
})
|
||||
.error(function (data, status) {
|
||||
ProcessErrors(scope, data, status, form, {
|
||||
hdr: 'Error!',
|
||||
msg: 'Failed to retrieve organization: ' + $routeParams.id + '. GET status: ' + status
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
// Save changes to the parent
|
||||
scope.formSave = function () {
|
||||
var fld, params = {};
|
||||
generator.clearApiErrors();
|
||||
Wait('start');
|
||||
for (fld in form.fields) {
|
||||
params[fld] = scope[fld];
|
||||
}
|
||||
Rest.setUrl(defaultUrl + id + '/');
|
||||
Rest.put(params)
|
||||
.success(function () {
|
||||
Wait('stop');
|
||||
master = params;
|
||||
$rootScope.flashMessage = "Your changes were successfully saved!";
|
||||
})
|
||||
.error(function (data, status) {
|
||||
Wait('stop');
|
||||
ProcessErrors(scope, data, status, OrganizationForm, {
|
||||
hdr: 'Error!',
|
||||
msg: 'Failed to update organization: ' + id + '. PUT status: ' + status
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
scope.showActivity = function () {
|
||||
Stream({
|
||||
scope: scope
|
||||
});
|
||||
};
|
||||
|
||||
// Reset the form
|
||||
scope.formReset = function () {
|
||||
$rootScope.flashMessage = null;
|
||||
generator.reset();
|
||||
for (var fld in master) {
|
||||
scope[fld] = master[fld];
|
||||
}
|
||||
};
|
||||
|
||||
// Related set: Add button
|
||||
scope.add = function (set) {
|
||||
$rootScope.flashMessage = null;
|
||||
$location.path('/' + base + '/' + $routeParams.organization_id + '/' + set);
|
||||
};
|
||||
|
||||
// Related set: Edit button
|
||||
scope.edit = function (set, id) {
|
||||
$rootScope.flashMessage = null;
|
||||
$location.path('/' + set + '/' + id);
|
||||
};
|
||||
|
||||
// Related set: Delete button
|
||||
scope['delete'] = function (set, itm_id, name, title) {
|
||||
$rootScope.flashMessage = null;
|
||||
|
||||
var action = function () {
|
||||
Wait('start');
|
||||
var url = defaultUrl + $routeParams.organization_id + '/' + set + '/';
|
||||
Rest.setUrl(url);
|
||||
Rest.post({
|
||||
id: itm_id,
|
||||
disassociate: 1
|
||||
})
|
||||
.success(function () {
|
||||
Wait('stop');
|
||||
$('#prompt-modal').modal('hide');
|
||||
scope.search(form.related[set].iterator);
|
||||
})
|
||||
.error(function (data, status) {
|
||||
Wait('stop');
|
||||
$('#prompt-modal').modal('hide');
|
||||
ProcessErrors(scope, data, status, null, {
|
||||
hdr: 'Error!',
|
||||
msg: 'Call to ' + url + ' failed. POST returned status: ' + status
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
Prompt({
|
||||
hdr: 'Delete',
|
||||
body: 'Are you sure you want to remove ' + name + ' from ' + scope.name + ' ' + title + '?',
|
||||
action: action
|
||||
});
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
OrganizationsEdit.$inject = ['$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'OrganizationForm',
|
||||
'GenerateForm', 'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'RelatedSearchInit',
|
||||
'RelatedPaginateInit', 'Prompt', 'ClearScope', 'GetBasePath', 'Wait', 'Stream'
|
||||
];
|
@ -3,310 +3,331 @@
|
||||
*
|
||||
*
|
||||
* Permissions.js
|
||||
*
|
||||
*
|
||||
* Controller functions for Permissions model.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
'use strict';
|
||||
|
||||
function PermissionsList ($scope, $rootScope, $location, $log, $routeParams, Rest, Alert, PermissionList,
|
||||
GenerateList, LoadBreadCrumbs, Prompt, SearchInit, PaginateInit, ReturnToCaller,
|
||||
ClearScope, ProcessErrors, GetBasePath, CheckAccess, Wait)
|
||||
{
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
var list = PermissionList;
|
||||
var base = $location.path().replace(/^\//,'').split('/')[0];
|
||||
var defaultUrl = GetBasePath(base);
|
||||
defaultUrl += ($routeParams['user_id'] !== undefined) ? $routeParams['user_id'] : $routeParams['team_id'];
|
||||
function PermissionsList($scope, $rootScope, $location, $log, $routeParams, Rest, Alert, PermissionList,
|
||||
GenerateList, LoadBreadCrumbs, Prompt, SearchInit, PaginateInit, ReturnToCaller, ClearScope, ProcessErrors,
|
||||
GetBasePath, CheckAccess, Wait) {
|
||||
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
|
||||
//scope.
|
||||
var list = PermissionList,
|
||||
base = $location.path().replace(/^\//, '').split('/')[0],
|
||||
defaultUrl = GetBasePath(base),
|
||||
view = GenerateList,
|
||||
scope = view.inject(list, { mode: 'edit' }); // Inject our view
|
||||
|
||||
defaultUrl += ($routeParams.user_id !== undefined) ? $routeParams.user_id : $routeParams.team_id;
|
||||
defaultUrl += '/permissions/';
|
||||
|
||||
var view = GenerateList;
|
||||
var scope = view.inject(list, { mode: 'edit' }); // Inject our view
|
||||
|
||||
scope.selected = [];
|
||||
|
||||
CheckAccess({ scope: scope });
|
||||
|
||||
|
||||
CheckAccess({
|
||||
scope: scope
|
||||
});
|
||||
|
||||
if (scope.removePostRefresh) {
|
||||
scope.removePostRefresh();
|
||||
}
|
||||
scope.removePostRefresh = scope.$on('PostRefresh', function() {
|
||||
scope.removePostRefresh = scope.$on('PostRefresh', function () {
|
||||
// Cleanup after a delete
|
||||
Wait('stop');
|
||||
$('#prompt-modal').off();
|
||||
});
|
||||
});
|
||||
|
||||
SearchInit({ scope: scope, set: 'permissions', list: list, url: defaultUrl });
|
||||
PaginateInit({ scope: scope, list: list, url: defaultUrl });
|
||||
SearchInit({
|
||||
scope: scope,
|
||||
set: 'permissions',
|
||||
list: list,
|
||||
url: defaultUrl
|
||||
});
|
||||
PaginateInit({
|
||||
scope: scope,
|
||||
list: list,
|
||||
url: defaultUrl
|
||||
});
|
||||
scope.search(list.iterator);
|
||||
|
||||
LoadBreadCrumbs();
|
||||
|
||||
scope.addPermission = function() {
|
||||
if (scope.PermissionAddAllowed) {
|
||||
$location.path($location.path() + '/add');
|
||||
}
|
||||
}
|
||||
scope.addPermission = function () {
|
||||
if (scope.PermissionAddAllowed) {
|
||||
$location.path($location.path() + '/add');
|
||||
}
|
||||
};
|
||||
|
||||
scope.editPermission = function(id) {
|
||||
$location.path($location.path() + '/' + id);
|
||||
}
|
||||
|
||||
scope.deletePermission = function(id, name) {
|
||||
var action = function() {
|
||||
$('#prompt-modal').on('hidden.bs.modal', function(){ Wait('start'); });
|
||||
$('#prompt-modal').modal('hide');
|
||||
var url = GetBasePath('base') + 'permissions/' + id + '/';
|
||||
Rest.setUrl(url);
|
||||
Rest.destroy()
|
||||
.success( function(data, status, headers, config) {
|
||||
scope.search(list.iterator);
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
ProcessErrors(scope, data, status, null,
|
||||
{ hdr: 'Error!', msg: 'Call to ' + url + ' failed. DELETE returned status: ' + status });
|
||||
});
|
||||
};
|
||||
|
||||
if (scope.PermissionAddAllowed) {
|
||||
Prompt({ hdr: 'Delete',
|
||||
body: 'Are you sure you want to delete ' + name + '?',
|
||||
action: action
|
||||
scope.editPermission = function (id) {
|
||||
$location.path($location.path() + '/' + id);
|
||||
};
|
||||
|
||||
scope.deletePermission = function (id, name) {
|
||||
var action = function () {
|
||||
$('#prompt-modal').on('hidden.bs.modal', function () {
|
||||
Wait('start');
|
||||
});
|
||||
$('#prompt-modal').modal('hide');
|
||||
var url = GetBasePath('base') + 'permissions/' + id + '/';
|
||||
Rest.setUrl(url);
|
||||
Rest.destroy()
|
||||
.success(function () {
|
||||
scope.search(list.iterator);
|
||||
})
|
||||
.error(function (data, status) {
|
||||
Wait('stop');
|
||||
ProcessErrors(scope, data, status, null, {
|
||||
hdr: 'Error!',
|
||||
msg: 'Call to ' + url + ' failed. DELETE returned status: ' + status
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
if (scope.PermissionAddAllowed) {
|
||||
Prompt({
|
||||
hdr: 'Delete',
|
||||
body: 'Are you sure you want to delete ' + name + '?',
|
||||
action: action
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
PermissionsList.$inject = [ '$scope', '$rootScope', '$location', '$log', '$routeParams', 'Rest', 'Alert', 'PermissionList',
|
||||
'GenerateList', 'LoadBreadCrumbs', 'Prompt', 'SearchInit', 'PaginateInit', 'ReturnToCaller',
|
||||
'ClearScope', 'ProcessErrors', 'GetBasePath', 'CheckAccess', 'Wait'
|
||||
];
|
||||
PermissionsList.$inject = ['$scope', '$rootScope', '$location', '$log', '$routeParams', 'Rest', 'Alert', 'PermissionList',
|
||||
'GenerateList', 'LoadBreadCrumbs', 'Prompt', 'SearchInit', 'PaginateInit', 'ReturnToCaller',
|
||||
'ClearScope', 'ProcessErrors', 'GetBasePath', 'CheckAccess', 'Wait'
|
||||
];
|
||||
|
||||
|
||||
function PermissionsAdd ($scope, $rootScope, $compile, $location, $log, $routeParams, PermissionsForm,
|
||||
GenerateForm, Rest, Alert, ProcessErrors, LoadBreadCrumbs, ClearScope,
|
||||
GetBasePath, ReturnToCaller, InventoryList, ProjectList, LookUpInit, CheckAccess,
|
||||
Wait, PermissionCategoryChange)
|
||||
{
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
function PermissionsAdd($scope, $rootScope, $compile, $location, $log, $routeParams, PermissionsForm,
|
||||
GenerateForm, Rest, Alert, ProcessErrors, LoadBreadCrumbs, ClearScope,
|
||||
GetBasePath, ReturnToCaller, InventoryList, ProjectList, LookUpInit, CheckAccess,
|
||||
Wait, PermissionCategoryChange) {
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
|
||||
// Inject dynamic view
|
||||
var form = PermissionsForm;
|
||||
var generator = GenerateForm;
|
||||
var id = ($routeParams.user_id !== undefined) ? $routeParams.user_id : $routeParams.team_id;
|
||||
var base = $location.path().replace(/^\//,'').split('/')[0];
|
||||
var defaultUrl = GetBasePath(base) + id + '/permissions';
|
||||
var scope = generator.inject(form, {mode: 'add', related: false});
|
||||
var master = {};
|
||||
|
||||
CheckAccess({ scope: scope })
|
||||
generator.reset();
|
||||
LoadBreadCrumbs();
|
||||
|
||||
scope['inventoryrequired'] = true;
|
||||
scope['projectrequired'] = false;
|
||||
scope.category = 'Inventory';
|
||||
master.category = 'Inventory';
|
||||
master.inventoryrequired = true;
|
||||
master.projectrequired = false;
|
||||
|
||||
LookUpInit({
|
||||
scope: scope,
|
||||
form: form,
|
||||
current_item: null,
|
||||
list: InventoryList,
|
||||
field: 'inventory'
|
||||
});
|
||||
// Inject dynamic view
|
||||
var form = PermissionsForm,
|
||||
generator = GenerateForm,
|
||||
id = ($routeParams.user_id !== undefined) ? $routeParams.user_id : $routeParams.team_id,
|
||||
base = $location.path().replace(/^\//, '').split('/')[0],
|
||||
scope = generator.inject(form, { mode: 'add', related: false }),
|
||||
master = {};
|
||||
|
||||
LookUpInit({
|
||||
scope: scope,
|
||||
form: form,
|
||||
current_item: null,
|
||||
list: ProjectList,
|
||||
field: 'project'
|
||||
});
|
||||
CheckAccess({ scope: scope });
|
||||
generator.reset();
|
||||
LoadBreadCrumbs();
|
||||
|
||||
// Save
|
||||
scope.formSave = function() {
|
||||
generator.clearApiErrors();
|
||||
Wait('start');
|
||||
if (scope.PermissionAddAllowed) {
|
||||
var data = {};
|
||||
for (var fld in form.fields) {
|
||||
data[fld] = scope[fld];
|
||||
}
|
||||
var url = (base == 'teams') ? GetBasePath('teams') + id + '/permissions/' : GetBasePath('users') + id + '/permissions/';
|
||||
Rest.setUrl(url);
|
||||
Rest.post(data)
|
||||
.success( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
ReturnToCaller(1);
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
ProcessErrors(scope, data, status, PermissionsForm,
|
||||
{ hdr: 'Error!', msg: 'Failed to create new permission. Post returned status: ' + status });
|
||||
});
|
||||
}
|
||||
else {
|
||||
Alert('Access Denied', 'You do not have access to create new permission objects. Please contact a system administrator.', 'alert-danger');
|
||||
}
|
||||
};
|
||||
scope.inventoryrequired = true;
|
||||
scope.projectrequired = false;
|
||||
scope.category = 'Inventory';
|
||||
master.category = 'Inventory';
|
||||
master.inventoryrequired = true;
|
||||
master.projectrequired = false;
|
||||
|
||||
// Cancel
|
||||
scope.formReset = function() {
|
||||
$rootScope.flashMessage = null;
|
||||
generator.reset();
|
||||
for (var fld in master) {
|
||||
scope[fld] = master[fld];
|
||||
}
|
||||
scope.selectCategory();
|
||||
};
|
||||
|
||||
scope.selectCategory = function() { PermissionCategoryChange({ scope: scope, reset: true }); };
|
||||
|
||||
LookUpInit({
|
||||
scope: scope,
|
||||
form: form,
|
||||
current_item: null,
|
||||
list: InventoryList,
|
||||
field: 'inventory'
|
||||
});
|
||||
|
||||
scope.selectCategory();
|
||||
LookUpInit({
|
||||
scope: scope,
|
||||
form: form,
|
||||
current_item: null,
|
||||
list: ProjectList,
|
||||
field: 'project'
|
||||
});
|
||||
|
||||
// Save
|
||||
scope.formSave = function () {
|
||||
var fld, url, data = {};
|
||||
generator.clearApiErrors();
|
||||
Wait('start');
|
||||
if (scope.PermissionAddAllowed) {
|
||||
data = {};
|
||||
for (fld in form.fields) {
|
||||
data[fld] = scope[fld];
|
||||
}
|
||||
url = (base === 'teams') ? GetBasePath('teams') + id + '/permissions/' : GetBasePath('users') + id + '/permissions/';
|
||||
Rest.setUrl(url);
|
||||
Rest.post(data)
|
||||
.success(function () {
|
||||
Wait('stop');
|
||||
ReturnToCaller(1);
|
||||
})
|
||||
.error(function (data, status) {
|
||||
Wait('stop');
|
||||
ProcessErrors(scope, data, status, PermissionsForm, {
|
||||
hdr: 'Error!',
|
||||
msg: 'Failed to create new permission. Post returned status: ' + status
|
||||
});
|
||||
});
|
||||
} else {
|
||||
Alert('Access Denied', 'You do not have access to create new permission objects. Please contact a system administrator.',
|
||||
'alert-danger');
|
||||
}
|
||||
};
|
||||
|
||||
// Cancel
|
||||
scope.formReset = function () {
|
||||
$rootScope.flashMessage = null;
|
||||
generator.reset();
|
||||
for (var fld in master) {
|
||||
scope[fld] = master[fld];
|
||||
}
|
||||
scope.selectCategory();
|
||||
};
|
||||
|
||||
scope.selectCategory = function () {
|
||||
PermissionCategoryChange({
|
||||
scope: scope,
|
||||
reset: true
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
scope.selectCategory();
|
||||
|
||||
}
|
||||
|
||||
PermissionsAdd.$inject = [ '$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'PermissionsForm',
|
||||
'GenerateForm', 'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'ClearScope', 'GetBasePath',
|
||||
'ReturnToCaller', 'InventoryList', 'ProjectList', 'LookUpInit', 'CheckAccess', 'Wait',
|
||||
'PermissionCategoryChange'
|
||||
];
|
||||
PermissionsAdd.$inject = ['$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'PermissionsForm',
|
||||
'GenerateForm', 'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'ClearScope', 'GetBasePath', 'ReturnToCaller',
|
||||
'InventoryList', 'ProjectList', 'LookUpInit', 'CheckAccess', 'Wait', 'PermissionCategoryChange'
|
||||
];
|
||||
|
||||
|
||||
function PermissionsEdit ($scope, $rootScope, $compile, $location, $log, $routeParams, PermissionsForm,
|
||||
GenerateForm, Rest, Alert, ProcessErrors, LoadBreadCrumbs, ReturnToCaller,
|
||||
ClearScope, Prompt, GetBasePath, InventoryList, ProjectList, LookUpInit, CheckAccess,
|
||||
Wait, PermissionCategoryChange)
|
||||
{
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
function PermissionsEdit($scope, $rootScope, $compile, $location, $log, $routeParams, PermissionsForm,
|
||||
GenerateForm, Rest, Alert, ProcessErrors, LoadBreadCrumbs, ReturnToCaller,
|
||||
ClearScope, Prompt, GetBasePath, InventoryList, ProjectList, LookUpInit, CheckAccess,
|
||||
Wait, PermissionCategoryChange) {
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
|
||||
var generator = GenerateForm;
|
||||
var form = PermissionsForm;
|
||||
var scope = generator.inject(form, {mode: 'edit', related: true});
|
||||
var base_id = ($routeParams.user_id !== undefined) ? $routeParams.user_id : $routeParams.team_id;
|
||||
var base = $location.path().replace(/^\//,'').split('/')[0];
|
||||
var id = $routeParams.permission_id;
|
||||
var defaultUrl = GetBasePath('base') + 'permissions/' + id + '/';
|
||||
generator.reset();
|
||||
var generator = GenerateForm,
|
||||
form = PermissionsForm,
|
||||
scope = generator.inject(form, { mode: 'edit', related: true }),
|
||||
base_id = ($routeParams.user_id !== undefined) ? $routeParams.user_id : $routeParams.team_id,
|
||||
id = $routeParams.permission_id,
|
||||
defaultUrl = GetBasePath('base') + 'permissions/' + id + '/',
|
||||
master = {};
|
||||
|
||||
var master = {};
|
||||
var relatedSets = {};
|
||||
|
||||
CheckAccess({ scope: scope });
|
||||
generator.reset();
|
||||
|
||||
scope.selectCategory = function(resetIn) {
|
||||
var reset = (resetIn == false) ? false : true;
|
||||
PermissionCategoryChange({ scope: scope, reset: reset }); }
|
||||
|
||||
CheckAccess({
|
||||
scope: scope
|
||||
});
|
||||
|
||||
// Retrieve detail record and prepopulate the form
|
||||
Wait('start');
|
||||
Rest.setUrl(defaultUrl);
|
||||
Rest.get()
|
||||
.success( function(data, status, headers, config) {
|
||||
|
||||
LoadBreadCrumbs({ path: '/users/' + base_id + '/permissions/' + id, title: data.name });
|
||||
scope.selectCategory = function (resetIn) {
|
||||
var reset = (resetIn === false) ? false : true;
|
||||
PermissionCategoryChange({ scope: scope, reset: reset });
|
||||
};
|
||||
|
||||
for (var fld in form.fields) {
|
||||
if (data[fld]) {
|
||||
if (form.fields[fld].sourceModel) {
|
||||
var sourceModel = form.fields[fld].sourceModel;
|
||||
var sourceField = form.fields[fld].sourceField;
|
||||
scope[sourceModel + '_' + sourceField] = data.summary_fields[sourceModel][sourceField];
|
||||
master[sourceModel + '_' + sourceField] = data.summary_fields[sourceModel][sourceField];
|
||||
}
|
||||
scope[fld] = data[fld];
|
||||
master[fld] = scope[fld];
|
||||
}
|
||||
}
|
||||
// Retrieve detail record and prepopulate the form
|
||||
Wait('start');
|
||||
Rest.setUrl(defaultUrl);
|
||||
Rest.get()
|
||||
.success(function (data) {
|
||||
var fld, sourceModel, sourceField;
|
||||
LoadBreadCrumbs({ path: '/users/' + base_id + '/permissions/' + id, title: data.name });
|
||||
for (fld in form.fields) {
|
||||
if (data[fld]) {
|
||||
if (form.fields[fld].sourceModel) {
|
||||
sourceModel = form.fields[fld].sourceModel;
|
||||
sourceField = form.fields[fld].sourceField;
|
||||
scope[sourceModel + '_' + sourceField] = data.summary_fields[sourceModel][sourceField];
|
||||
master[sourceModel + '_' + sourceField] = data.summary_fields[sourceModel][sourceField];
|
||||
}
|
||||
scope[fld] = data[fld];
|
||||
master[fld] = scope[fld];
|
||||
}
|
||||
}
|
||||
|
||||
scope.category = 'Deploy';
|
||||
if (data['permission_type'] != 'run' && data['permission_type'] != 'check' ) {
|
||||
scope.category = 'Inventory';
|
||||
}
|
||||
master['category'] = scope.category;
|
||||
scope.selectCategory(false); //call without resetting scope.category value
|
||||
scope.category = 'Deploy';
|
||||
if (data.permission_type !== 'run' && data.permission_type !== 'check') {
|
||||
scope.category = 'Inventory';
|
||||
}
|
||||
master.category = scope.category;
|
||||
scope.selectCategory(false); //call without resetting scope.category value
|
||||
|
||||
LookUpInit({
|
||||
scope: scope,
|
||||
form: form,
|
||||
current_item: data.inventory,
|
||||
list: InventoryList,
|
||||
field: 'inventory'
|
||||
});
|
||||
LookUpInit({
|
||||
scope: scope,
|
||||
form: form,
|
||||
current_item: data.inventory,
|
||||
list: InventoryList,
|
||||
field: 'inventory'
|
||||
});
|
||||
|
||||
LookUpInit({
|
||||
scope: scope,
|
||||
form: form,
|
||||
current_item: data.project,
|
||||
list: ProjectList,
|
||||
field: 'project'
|
||||
});
|
||||
LookUpInit({
|
||||
scope: scope,
|
||||
form: form,
|
||||
current_item: data.project,
|
||||
list: ProjectList,
|
||||
field: 'project'
|
||||
});
|
||||
|
||||
if (!scope.PermissionAddAllowed) {
|
||||
// If not a privileged user, disable access
|
||||
$('form[name="permission_form"]').find('select, input, button').each(function(index){
|
||||
if ($(this).is('input') || $(this).is('select')) {
|
||||
$(this).attr('readonly','readonly');
|
||||
}
|
||||
if ( $(this).is('input[type="checkbox"]') ||
|
||||
$(this).is('input[type="radio"]') ||
|
||||
$(this).is('button') ) {
|
||||
$(this).attr('disabled','disabled');
|
||||
}
|
||||
});
|
||||
}
|
||||
Wait('stop');
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
ProcessErrors(scope, data, status, form,
|
||||
{ hdr: 'Error!', msg: 'Failed to retrieve Permission: ' + id + '. GET status: ' + status });
|
||||
});
|
||||
if (!scope.PermissionAddAllowed) {
|
||||
// If not a privileged user, disable access
|
||||
$('form[name="permission_form"]').find('select, input, button').each(function () {
|
||||
if ($(this).is('input') || $(this).is('select')) {
|
||||
$(this).attr('readonly', 'readonly');
|
||||
}
|
||||
if ($(this).is('input[type="checkbox"]') ||
|
||||
$(this).is('input[type="radio"]') ||
|
||||
$(this).is('button')) {
|
||||
$(this).attr('disabled', 'disabled');
|
||||
}
|
||||
});
|
||||
}
|
||||
Wait('stop');
|
||||
})
|
||||
.error(function (data, status) {
|
||||
ProcessErrors(scope, data, status, form, { hdr: 'Error!',
|
||||
msg: 'Failed to retrieve Permission: ' + id + '. GET status: ' + status });
|
||||
});
|
||||
|
||||
|
||||
// Save changes to the parent
|
||||
scope.formSave = function() {
|
||||
generator.clearApiErrors();
|
||||
Wait('start');
|
||||
var data = {}
|
||||
for (var fld in form.fields) {
|
||||
data[fld] = scope[fld];
|
||||
}
|
||||
Rest.setUrl(defaultUrl);
|
||||
Rest.put(data)
|
||||
.success( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
ReturnToCaller(1);
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
ProcessErrors(scope, data, status, form,
|
||||
{ hdr: 'Error!', msg: 'Failed to update Permission: ' + $routeParams.id + '. PUT status: ' + status });
|
||||
});
|
||||
};
|
||||
// Save changes to the parent
|
||||
scope.formSave = function () {
|
||||
var fld, data = {};
|
||||
generator.clearApiErrors();
|
||||
Wait('start');
|
||||
for (fld in form.fields) {
|
||||
data[fld] = scope[fld];
|
||||
}
|
||||
Rest.setUrl(defaultUrl);
|
||||
Rest.put(data)
|
||||
.success(function () {
|
||||
Wait('stop');
|
||||
ReturnToCaller(1);
|
||||
})
|
||||
.error(function (data, status) {
|
||||
Wait('stop');
|
||||
ProcessErrors(scope, data, status, form, { hdr: 'Error!', msg: 'Failed to update Permission: ' +
|
||||
$routeParams.id + '. PUT status: ' + status });
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
// Cancel
|
||||
scope.formReset = function() {
|
||||
generator.reset();
|
||||
for (var fld in master) {
|
||||
scope[fld] = master[fld];
|
||||
}
|
||||
scope.selectCategory(false);
|
||||
};
|
||||
// Cancel
|
||||
scope.formReset = function () {
|
||||
generator.reset();
|
||||
for (var fld in master) {
|
||||
scope[fld] = master[fld];
|
||||
}
|
||||
scope.selectCategory(false);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
PermissionsEdit.$inject = [ '$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'PermissionsForm',
|
||||
'GenerateForm', 'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'ReturnToCaller',
|
||||
'ClearScope', 'Prompt', 'GetBasePath', 'InventoryList', 'ProjectList', 'LookUpInit', 'CheckAccess',
|
||||
'Wait', 'PermissionCategoryChange'
|
||||
];
|
||||
|
||||
PermissionsEdit.$inject = ['$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'PermissionsForm',
|
||||
'GenerateForm', 'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'ReturnToCaller', 'ClearScope', 'Prompt', 'GetBasePath',
|
||||
'InventoryList', 'ProjectList', 'LookUpInit', 'CheckAccess', 'Wait', 'PermissionCategoryChange'
|
||||
];
|
File diff suppressed because it is too large
Load Diff
@ -3,353 +3,383 @@
|
||||
*
|
||||
*
|
||||
* Teams.js
|
||||
*
|
||||
*
|
||||
* Controller functions for the Team model.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
'use strict';
|
||||
|
||||
function TeamsList ($scope, $rootScope, $location, $log, $routeParams, Rest, Alert, TeamList,
|
||||
GenerateList, LoadBreadCrumbs, Prompt, SearchInit, PaginateInit, ReturnToCaller,
|
||||
ClearScope, ProcessErrors, SetTeamListeners, GetBasePath, SelectionInit, Wait, Stream)
|
||||
{
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
var list = TeamList;
|
||||
var defaultUrl = GetBasePath('teams');
|
||||
var view = GenerateList;
|
||||
var paths = $location.path().replace(/^\//,'').split('/');
|
||||
var mode = (paths[0] == 'teams') ? 'edit' : 'select'; // if base path 'teams', we're here to add/edit teams
|
||||
var scope = view.inject(list, { mode: mode }); // Inject our view
|
||||
scope.selected = [];
|
||||
function TeamsList($scope, $rootScope, $location, $log, $routeParams, Rest, Alert, TeamList, GenerateList, LoadBreadCrumbs,
|
||||
Prompt, SearchInit, PaginateInit, ReturnToCaller, ClearScope, ProcessErrors, SetTeamListeners, GetBasePath, SelectionInit, Wait,
|
||||
Stream) {
|
||||
|
||||
var url = GetBasePath('base') + $location.path() + '/';
|
||||
SelectionInit({ scope: scope, list: list, url: url, returnToCaller: 1 });
|
||||
|
||||
if (scope.removePostRefresh) {
|
||||
scope.removePostRefresh();
|
||||
}
|
||||
scope.removePostRefresh = scope.$on('PostRefresh', function() {
|
||||
// After a refresh, populate the organization name on each row
|
||||
if (scope.teams) {
|
||||
for ( var i=0; i < scope.teams.length; i++) {
|
||||
scope.teams[i].organization_name = scope.teams[i].summary_fields.organization.name;
|
||||
}
|
||||
}
|
||||
});
|
||||
ClearScope('htmlTemplate');
|
||||
|
||||
SearchInit({ scope: scope, set: 'teams', list: list, url: defaultUrl });
|
||||
PaginateInit({ scope: scope, list: list, url: defaultUrl });
|
||||
var list = TeamList,
|
||||
defaultUrl = GetBasePath('teams'),
|
||||
view = GenerateList,
|
||||
paths = $location.path().replace(/^\//, '').split('/'),
|
||||
mode = (paths[0] === 'teams') ? 'edit' : 'select', // if base path 'teams', we're here to add/edit teams
|
||||
scope = view.inject(list, { mode: mode }),
|
||||
url;
|
||||
|
||||
scope.selected = [];
|
||||
|
||||
url = GetBasePath('base') + $location.path() + '/';
|
||||
SelectionInit({
|
||||
scope: scope,
|
||||
list: list,
|
||||
url: url,
|
||||
returnToCaller: 1
|
||||
});
|
||||
|
||||
if (scope.removePostRefresh) {
|
||||
scope.removePostRefresh();
|
||||
}
|
||||
scope.removePostRefresh = scope.$on('PostRefresh', function () {
|
||||
// After a refresh, populate the organization name on each row
|
||||
var i;
|
||||
if (scope.teams) {
|
||||
for (i = 0; i < scope.teams.length; i++) {
|
||||
scope.teams[i].organization_name = scope.teams[i].summary_fields.organization.name;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
SearchInit({
|
||||
scope: scope,
|
||||
set: 'teams',
|
||||
list: list,
|
||||
url: defaultUrl
|
||||
});
|
||||
PaginateInit({
|
||||
scope: scope,
|
||||
list: list,
|
||||
url: defaultUrl
|
||||
});
|
||||
scope.search(list.iterator);
|
||||
|
||||
LoadBreadCrumbs();
|
||||
|
||||
scope.showActivity = function() { Stream({ scope: scope }); }
|
||||
|
||||
scope.addTeam = function() {
|
||||
$location.path($location.path() + '/add');
|
||||
}
|
||||
scope.showActivity = function () {
|
||||
Stream({
|
||||
scope: scope
|
||||
});
|
||||
};
|
||||
|
||||
scope.editTeam = function(id) {
|
||||
$location.path($location.path() + '/' + id);
|
||||
}
|
||||
|
||||
scope.deleteTeam = function(id, name) {
|
||||
|
||||
var action = function() {
|
||||
Wait('start');
|
||||
var url = defaultUrl + id + '/';
|
||||
Rest.setUrl(url);
|
||||
Rest.destroy()
|
||||
.success( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
$('#prompt-modal').modal('hide');
|
||||
scope.search(list.iterator);
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
$('#prompt-modal').modal('hide');
|
||||
ProcessErrors(scope, data, status, null,
|
||||
{ hdr: 'Error!', msg: 'Call to ' + url + ' failed. DELETE returned status: ' + status });
|
||||
});
|
||||
};
|
||||
scope.addTeam = function () {
|
||||
$location.path($location.path() + '/add');
|
||||
};
|
||||
|
||||
Prompt({ hdr: 'Delete',
|
||||
body: 'Are you sure you want to delete ' + name + '?',
|
||||
action: action
|
||||
scope.editTeam = function (id) {
|
||||
$location.path($location.path() + '/' + id);
|
||||
};
|
||||
|
||||
scope.deleteTeam = function (id, name) {
|
||||
|
||||
var action = function () {
|
||||
Wait('start');
|
||||
var url = defaultUrl + id + '/';
|
||||
Rest.setUrl(url);
|
||||
Rest.destroy()
|
||||
.success(function () {
|
||||
Wait('stop');
|
||||
$('#prompt-modal').modal('hide');
|
||||
scope.search(list.iterator);
|
||||
})
|
||||
.error(function (data, status) {
|
||||
Wait('stop');
|
||||
$('#prompt-modal').modal('hide');
|
||||
ProcessErrors(scope, data, status, null, {
|
||||
hdr: 'Error!',
|
||||
msg: 'Call to ' + url + ' failed. DELETE returned status: ' + status
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
scope.lookupOrganization = function(organization_id) {
|
||||
Rest.setUrl(GetBasePath('organizations') + organization_id + '/');
|
||||
Rest.get()
|
||||
.success( function(data, status, headers, config) {
|
||||
return data.name;
|
||||
});
|
||||
}
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
Prompt({
|
||||
hdr: 'Delete',
|
||||
body: 'Are you sure you want to delete ' + name + '?',
|
||||
action: action
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
TeamsList.$inject = [ '$scope', '$rootScope', '$location', '$log', '$routeParams', 'Rest', 'Alert', 'TeamList', 'GenerateList',
|
||||
'LoadBreadCrumbs', 'Prompt', 'SearchInit', 'PaginateInit', 'ReturnToCaller', 'ClearScope', 'ProcessErrors',
|
||||
'SetTeamListeners', 'GetBasePath', 'SelectionInit', 'Wait', 'Stream' ];
|
||||
TeamsList.$inject = ['$scope', '$rootScope', '$location', '$log', '$routeParams', 'Rest', 'Alert', 'TeamList', 'GenerateList',
|
||||
'LoadBreadCrumbs', 'Prompt', 'SearchInit', 'PaginateInit', 'ReturnToCaller', 'ClearScope', 'ProcessErrors',
|
||||
'SetTeamListeners', 'GetBasePath', 'SelectionInit', 'Wait', 'Stream'
|
||||
];
|
||||
|
||||
|
||||
function TeamsAdd ($scope, $rootScope, $compile, $location, $log, $routeParams, TeamForm, GenerateForm,
|
||||
Rest, Alert, ProcessErrors, LoadBreadCrumbs, ReturnToCaller, ClearScope, GenerateList,
|
||||
OrganizationList, SearchInit, PaginateInit, GetBasePath, LookUpInit, Wait)
|
||||
{
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
function TeamsAdd($scope, $rootScope, $compile, $location, $log, $routeParams, TeamForm, GenerateForm,
|
||||
Rest, Alert, ProcessErrors, LoadBreadCrumbs, ReturnToCaller, ClearScope, GenerateList,
|
||||
OrganizationList, SearchInit, PaginateInit, GetBasePath, LookUpInit, Wait) {
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
|
||||
// Inject dynamic view
|
||||
var defaultUrl = GetBasePath('teams');
|
||||
var form = TeamForm;
|
||||
var generator = GenerateForm;
|
||||
var scope = generator.inject(form, {mode: 'add', related: false});
|
||||
$rootScope.flashMessage = null;
|
||||
generator.reset();
|
||||
LoadBreadCrumbs();
|
||||
|
||||
LookUpInit({
|
||||
scope: scope,
|
||||
form: form,
|
||||
current_item: null,
|
||||
list: OrganizationList,
|
||||
field: 'organization'
|
||||
});
|
||||
|
||||
// Save
|
||||
scope.formSave = function() {
|
||||
generator.clearApiErrors();
|
||||
Wait('start');
|
||||
Rest.setUrl(defaultUrl);
|
||||
var data = {}
|
||||
for (var fld in form.fields) {
|
||||
data[fld] = scope[fld];
|
||||
}
|
||||
Rest.post(data)
|
||||
.success( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
$rootScope.flashMessage = "New team successfully created!";
|
||||
$location.path('/teams/' + data.id);
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
ProcessErrors(scope, data, status, form,
|
||||
{ hdr: 'Error!', msg: 'Failed to add new team. Post returned status: ' + status });
|
||||
});
|
||||
};
|
||||
// Inject dynamic view
|
||||
var defaultUrl = GetBasePath('teams'),
|
||||
form = TeamForm,
|
||||
generator = GenerateForm,
|
||||
scope = generator.inject(form, { mode: 'add', related: false });
|
||||
|
||||
$rootScope.flashMessage = null;
|
||||
generator.reset();
|
||||
LoadBreadCrumbs();
|
||||
|
||||
// Reset
|
||||
scope.formReset = function() {
|
||||
// Defaults
|
||||
generator.reset();
|
||||
};
|
||||
LookUpInit({
|
||||
scope: scope,
|
||||
form: form,
|
||||
current_item: null,
|
||||
list: OrganizationList,
|
||||
field: 'organization'
|
||||
});
|
||||
|
||||
// Save
|
||||
scope.formSave = function () {
|
||||
var fld, data;
|
||||
generator.clearApiErrors();
|
||||
Wait('start');
|
||||
Rest.setUrl(defaultUrl);
|
||||
data = {};
|
||||
for (fld in form.fields) {
|
||||
data[fld] = scope[fld];
|
||||
}
|
||||
Rest.post(data)
|
||||
.success(function (data) {
|
||||
Wait('stop');
|
||||
$rootScope.flashMessage = "New team successfully created!";
|
||||
$location.path('/teams/' + data.id);
|
||||
})
|
||||
.error(function (data, status) {
|
||||
Wait('stop');
|
||||
ProcessErrors(scope, data, status, form, { hdr: 'Error!', msg: 'Failed to add new team. Post returned status: ' +
|
||||
status });
|
||||
});
|
||||
};
|
||||
|
||||
// Reset
|
||||
scope.formReset = function () {
|
||||
// Defaults
|
||||
generator.reset();
|
||||
};
|
||||
}
|
||||
|
||||
TeamsAdd.$inject = [ '$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'TeamForm', 'GenerateForm',
|
||||
'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'ReturnToCaller', 'ClearScope', 'GenerateList',
|
||||
'OrganizationList', 'SearchInit', 'PaginateInit', 'GetBasePath', 'LookUpInit', 'Wait'];
|
||||
TeamsAdd.$inject = ['$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'TeamForm', 'GenerateForm',
|
||||
'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'ReturnToCaller', 'ClearScope', 'GenerateList',
|
||||
'OrganizationList', 'SearchInit', 'PaginateInit', 'GetBasePath', 'LookUpInit', 'Wait'
|
||||
];
|
||||
|
||||
|
||||
function TeamsEdit ($scope, $rootScope, $compile, $location, $log, $routeParams, TeamForm,
|
||||
GenerateForm, Rest, Alert, ProcessErrors, LoadBreadCrumbs, RelatedSearchInit,
|
||||
RelatedPaginateInit, ReturnToCaller, ClearScope, LookUpInit, Prompt,
|
||||
GetBasePath, CheckAccess, OrganizationList, Wait, Stream)
|
||||
{
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
function TeamsEdit($scope, $rootScope, $compile, $location, $log, $routeParams, TeamForm,
|
||||
GenerateForm, Rest, Alert, ProcessErrors, LoadBreadCrumbs, RelatedSearchInit,
|
||||
RelatedPaginateInit, ReturnToCaller, ClearScope, LookUpInit, Prompt,
|
||||
GetBasePath, CheckAccess, OrganizationList, Wait, Stream) {
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
|
||||
var defaultUrl=GetBasePath('teams');
|
||||
var generator = GenerateForm;
|
||||
var form = TeamForm;
|
||||
var scope = generator.inject(form, {mode: 'edit', related: true});
|
||||
generator.reset();
|
||||
|
||||
var base = $location.path().replace(/^\//,'').split('/')[0];
|
||||
var master = {};
|
||||
var id = $routeParams.team_id;
|
||||
var relatedSets = {};
|
||||
var defaultUrl = GetBasePath('teams'),
|
||||
generator = GenerateForm,
|
||||
form = TeamForm,
|
||||
scope = generator.inject(form, { mode: 'edit', related: true }),
|
||||
base = $location.path().replace(/^\//, '').split('/')[0],
|
||||
master = {},
|
||||
id = $routeParams.team_id,
|
||||
relatedSets = {};
|
||||
|
||||
scope.PermissionAddAllowed = false;
|
||||
|
||||
// Retrieve each related set and any lookups
|
||||
if (scope.teamLoadedRemove) {
|
||||
scope.teamLoadedRemove();
|
||||
}
|
||||
scope.teamLoadedRemove = scope.$on('teamLoaded', function() {
|
||||
CheckAccess({ scope: scope });
|
||||
Rest.setUrl(scope['organization_url']);
|
||||
Rest.get()
|
||||
.success( function(data, status, headers, config) {
|
||||
scope['organization_name'] = data.name;
|
||||
master['organization_name'] = data.name;
|
||||
Wait('stop');
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
ProcessErrors(scope, data, status, null,
|
||||
{ hdr: 'Error!', msg: 'Failed to retrieve organization: ' + scope.orgnization_url + '. GET status: ' + status });
|
||||
});
|
||||
for (var set in relatedSets) {
|
||||
scope.search(relatedSets[set].iterator);
|
||||
}
|
||||
});
|
||||
generator.reset();
|
||||
|
||||
// Retrieve detail record and prepopulate the form
|
||||
Wait('start');
|
||||
Rest.setUrl(defaultUrl + ':id/');
|
||||
Rest.get({ params: {id: id} })
|
||||
.success( function(data, status, headers, config) {
|
||||
LoadBreadCrumbs({ path: '/teams/' + id, title: data.name });
|
||||
for (var fld in form.fields) {
|
||||
if (data[fld]) {
|
||||
scope[fld] = data[fld];
|
||||
master[fld] = scope[fld];
|
||||
}
|
||||
}
|
||||
var related = data.related;
|
||||
for (var set in form.related) {
|
||||
if (related[set]) {
|
||||
relatedSets[set] = { url: related[set], iterator: form.related[set].iterator };
|
||||
}
|
||||
}
|
||||
// Initialize related search functions. Doing it here to make sure relatedSets object is populated.
|
||||
RelatedSearchInit({ scope: scope, form: form, relatedSets: relatedSets });
|
||||
RelatedPaginateInit({ scope: scope, relatedSets: relatedSets });
|
||||
scope.PermissionAddAllowed = false;
|
||||
|
||||
LookUpInit({
|
||||
scope: scope,
|
||||
form: form,
|
||||
current_item: data['organization'],
|
||||
list: OrganizationList,
|
||||
field: 'organization'
|
||||
});
|
||||
// Retrieve each related set and any lookups
|
||||
if (scope.teamLoadedRemove) {
|
||||
scope.teamLoadedRemove();
|
||||
}
|
||||
scope.teamLoadedRemove = scope.$on('teamLoaded', function () {
|
||||
CheckAccess({ scope: scope });
|
||||
Rest.setUrl(scope.organization_url);
|
||||
Rest.get()
|
||||
.success(function (data) {
|
||||
scope.organization_name = data.name;
|
||||
master.organization_name = data.name;
|
||||
Wait('stop');
|
||||
})
|
||||
.error(function (data, status) {
|
||||
ProcessErrors(scope, data, status, null, { hdr: 'Error!', msg: 'Failed to retrieve organization: ' +
|
||||
scope.orgnization_url + '. GET status: ' + status });
|
||||
});
|
||||
for (var set in relatedSets) {
|
||||
scope.search(relatedSets[set].iterator);
|
||||
}
|
||||
});
|
||||
|
||||
scope['organization_url'] = data.related.organization;
|
||||
scope.$emit('teamLoaded');
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
ProcessErrors(scope, data, status, form,
|
||||
{ hdr: 'Error!', msg: 'Failed to retrieve team: ' + $routeParams.team_id + '. GET status: ' + status });
|
||||
});
|
||||
// Retrieve detail record and prepopulate the form
|
||||
Wait('start');
|
||||
Rest.setUrl(defaultUrl + ':id/');
|
||||
Rest.get({
|
||||
params: {
|
||||
id: id
|
||||
}
|
||||
})
|
||||
.success(function (data) {
|
||||
var fld, related, set;
|
||||
LoadBreadCrumbs({ path: '/teams/' + id, title: data.name });
|
||||
for (fld in form.fields) {
|
||||
if (data[fld]) {
|
||||
scope[fld] = data[fld];
|
||||
master[fld] = scope[fld];
|
||||
}
|
||||
}
|
||||
related = data.related;
|
||||
for (set in form.related) {
|
||||
if (related[set]) {
|
||||
relatedSets[set] = {
|
||||
url: related[set],
|
||||
iterator: form.related[set].iterator
|
||||
};
|
||||
}
|
||||
}
|
||||
// Initialize related search functions. Doing it here to make sure relatedSets object is populated.
|
||||
RelatedSearchInit({
|
||||
scope: scope,
|
||||
form: form,
|
||||
relatedSets: relatedSets
|
||||
});
|
||||
RelatedPaginateInit({
|
||||
scope: scope,
|
||||
relatedSets: relatedSets
|
||||
});
|
||||
|
||||
scope.showActivity = function() { Stream({ scope: scope }); }
|
||||
|
||||
// Save changes to the parent
|
||||
scope.formSave = function() {
|
||||
generator.clearApiErrors();
|
||||
Wait('start');
|
||||
$rootScope.flashMessage = null;
|
||||
Rest.setUrl(defaultUrl + $routeParams.team_id +'/');
|
||||
var data = {}
|
||||
for (var fld in form.fields) {
|
||||
data[fld] = scope[fld];
|
||||
}
|
||||
Rest.put(data)
|
||||
.success( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
var base = $location.path().replace(/^\//,'').split('/')[0];
|
||||
(base == 'teams') ? ReturnToCaller() : ReturnToCaller(1);
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
ProcessErrors(scope, data, status, form,
|
||||
{ hdr: 'Error!', msg: 'Failed to update team: ' + $routeParams.team_id + '. PUT status: ' + status });
|
||||
});
|
||||
};
|
||||
LookUpInit({
|
||||
scope: scope,
|
||||
form: form,
|
||||
current_item: data.organization,
|
||||
list: OrganizationList,
|
||||
field: 'organization'
|
||||
});
|
||||
|
||||
// Cancel
|
||||
scope.formReset = function() {
|
||||
$rootScope.flashMessage = null;
|
||||
generator.reset();
|
||||
for (var fld in master) {
|
||||
scope[fld] = master[fld];
|
||||
}
|
||||
};
|
||||
scope.organization_url = data.related.organization;
|
||||
scope.$emit('teamLoaded');
|
||||
})
|
||||
.error(function (data, status) {
|
||||
ProcessErrors(scope, data, status, form, { hdr: 'Error!', msg: 'Failed to retrieve team: ' + $routeParams.team_id +
|
||||
'. GET status: ' + status });
|
||||
});
|
||||
|
||||
// Related set: Add button
|
||||
scope.add = function(set) {
|
||||
$rootScope.flashMessage = null;
|
||||
if (set == 'permissions') {
|
||||
if (scope.PermissionAddAllowed) {
|
||||
$location.path('/' + base + '/' + $routeParams.team_id + '/' + set + '/add');
|
||||
}
|
||||
else {
|
||||
Alert('Access Denied', 'You do not have access to this function. Please contact your system administrator.');
|
||||
}
|
||||
}
|
||||
else {
|
||||
$location.path('/' + base + '/' + $routeParams.team_id + '/' + set);
|
||||
}
|
||||
};
|
||||
scope.showActivity = function () {
|
||||
Stream({
|
||||
scope: scope
|
||||
});
|
||||
};
|
||||
|
||||
// Related set: Edit button
|
||||
scope.edit = function(set, id, name) {
|
||||
$rootScope.flashMessage = null;
|
||||
if (set == 'permissions') {
|
||||
$location.path('/' + base + '/' + $routeParams.team_id + '/' + set + '/' + id);
|
||||
}
|
||||
else {
|
||||
$location.path('/' + set + '/' + id);
|
||||
}
|
||||
};
|
||||
// Save changes to the parent
|
||||
scope.formSave = function () {
|
||||
var data = {}, fld;
|
||||
generator.clearApiErrors();
|
||||
Wait('start');
|
||||
$rootScope.flashMessage = null;
|
||||
Rest.setUrl(defaultUrl + $routeParams.team_id + '/');
|
||||
for (fld in form.fields) {
|
||||
data[fld] = scope[fld];
|
||||
}
|
||||
Rest.put(data)
|
||||
.success(function () {
|
||||
Wait('stop');
|
||||
var base = $location.path().replace(/^\//, '').split('/')[0];
|
||||
if (base === 'teams') {
|
||||
ReturnToCaller();
|
||||
}
|
||||
ReturnToCaller(1);
|
||||
})
|
||||
.error(function (data, status) {
|
||||
Wait('stop');
|
||||
ProcessErrors(scope, data, status, form, { hdr: 'Error!',
|
||||
msg: 'Failed to update team: ' + $routeParams.team_id + '. PUT status: ' + status });
|
||||
});
|
||||
};
|
||||
|
||||
// Related set: Delete button
|
||||
scope['delete'] = function(set, itm_id, name, title) {
|
||||
$rootScope.flashMessage = null;
|
||||
|
||||
var action = function() {
|
||||
var url;
|
||||
if (set == 'permissions') {
|
||||
if (scope.PermissionAddAllowed) {
|
||||
url = GetBasePath('base') + 'permissions/' + itm_id + '/';
|
||||
Rest.setUrl(url);
|
||||
Rest.destroy()
|
||||
.success( function(data, status, headers, config) {
|
||||
$('#prompt-modal').modal('hide');
|
||||
scope.search(form.related[set].iterator);
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
$('#prompt-modal').modal('hide');
|
||||
ProcessErrors(scope, data, status, null,
|
||||
{ hdr: 'Error!', msg: 'Call to ' + url + ' failed. DELETE returned status: ' + status });
|
||||
// Cancel
|
||||
scope.formReset = function () {
|
||||
$rootScope.flashMessage = null;
|
||||
generator.reset();
|
||||
for (var fld in master) {
|
||||
scope[fld] = master[fld];
|
||||
}
|
||||
};
|
||||
|
||||
// Related set: Add button
|
||||
scope.add = function (set) {
|
||||
$rootScope.flashMessage = null;
|
||||
if (set === 'permissions') {
|
||||
if (scope.PermissionAddAllowed) {
|
||||
$location.path('/' + base + '/' + $routeParams.team_id + '/' + set + '/add');
|
||||
} else {
|
||||
Alert('Access Denied', 'You do not have access to this function. Please contact your system administrator.');
|
||||
}
|
||||
} else {
|
||||
$location.path('/' + base + '/' + $routeParams.team_id + '/' + set);
|
||||
}
|
||||
};
|
||||
|
||||
// Related set: Edit button
|
||||
scope.edit = function (set, id) {
|
||||
$rootScope.flashMessage = null;
|
||||
if (set === 'permissions') {
|
||||
$location.path('/' + base + '/' + $routeParams.team_id + '/' + set + '/' + id);
|
||||
} else {
|
||||
$location.path('/' + set + '/' + id);
|
||||
}
|
||||
};
|
||||
|
||||
// Related set: Delete button
|
||||
scope['delete'] = function (set, itm_id, name, title) {
|
||||
$rootScope.flashMessage = null;
|
||||
|
||||
var action = function () {
|
||||
var url;
|
||||
if (set === 'permissions') {
|
||||
if (scope.PermissionAddAllowed) {
|
||||
url = GetBasePath('base') + 'permissions/' + itm_id + '/';
|
||||
Rest.setUrl(url);
|
||||
Rest.destroy()
|
||||
.success(function () {
|
||||
$('#prompt-modal').modal('hide');
|
||||
scope.search(form.related[set].iterator);
|
||||
})
|
||||
.error(function (data, status) {
|
||||
$('#prompt-modal').modal('hide');
|
||||
ProcessErrors(scope, data, status, null, { hdr: 'Error!', msg: 'Call to ' + url +
|
||||
' failed. DELETE returned status: ' + status });
|
||||
});
|
||||
}
|
||||
else {
|
||||
Alert('Access Denied', 'You do not have access to this function. Please contact your system administrator.');
|
||||
}
|
||||
}
|
||||
else {
|
||||
var url = defaultUrl + $routeParams.team_id + '/' + set + '/';
|
||||
Rest.setUrl(url);
|
||||
Rest.post({ id: itm_id, disassociate: 1 })
|
||||
.success( function(data, status, headers, config) {
|
||||
$('#prompt-modal').modal('hide');
|
||||
scope.search(form.related[set].iterator);
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
$('#prompt-modal').modal('hide');
|
||||
ProcessErrors(scope, data, status, null,
|
||||
{ hdr: 'Error!', msg: 'Call to ' + url + ' failed. POST returned status: ' + status });
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
Prompt({ hdr: 'Delete',
|
||||
body: 'Are you sure you want to remove ' + name + ' from ' + scope.name + ' ' + title + '?',
|
||||
action: action
|
||||
});
|
||||
}
|
||||
} else {
|
||||
Alert('Access Denied', 'You do not have access to this function. Please contact your system administrator.');
|
||||
}
|
||||
} else {
|
||||
url = defaultUrl + $routeParams.team_id + '/' + set + '/';
|
||||
Rest.setUrl(url);
|
||||
Rest.post({ id: itm_id, disassociate: 1 })
|
||||
.success(function () {
|
||||
$('#prompt-modal').modal('hide');
|
||||
scope.search(form.related[set].iterator);
|
||||
})
|
||||
.error(function (data, status) {
|
||||
$('#prompt-modal').modal('hide');
|
||||
ProcessErrors(scope, data, status, null, { hdr: 'Error!', msg: 'Call to ' + url +
|
||||
' failed. POST returned status: ' + status });
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
Prompt({
|
||||
hdr: 'Delete',
|
||||
body: 'Are you sure you want to remove ' + name + ' from ' + scope.name + ' ' + title + '?',
|
||||
action: action
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
TeamsEdit.$inject = [ '$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'TeamForm',
|
||||
'GenerateForm', 'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'RelatedSearchInit',
|
||||
'RelatedPaginateInit', 'ReturnToCaller', 'ClearScope', 'LookUpInit', 'Prompt',
|
||||
'GetBasePath', 'CheckAccess', 'OrganizationList', 'Wait', 'Stream'
|
||||
];
|
||||
|
||||
TeamsEdit.$inject = ['$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'TeamForm',
|
||||
'GenerateForm', 'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'RelatedSearchInit', 'RelatedPaginateInit',
|
||||
'ReturnToCaller', 'ClearScope', 'LookUpInit', 'Prompt', 'GetBasePath', 'CheckAccess', 'OrganizationList', 'Wait', 'Stream'
|
||||
];
|
@ -3,453 +3,480 @@
|
||||
*
|
||||
*
|
||||
* Users.js
|
||||
*
|
||||
*
|
||||
* Controller functions for User model.
|
||||
*
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
function UsersList ($scope, $rootScope, $location, $log, $routeParams, Rest, Alert, UserList,
|
||||
GenerateList, LoadBreadCrumbs, Prompt, SearchInit, PaginateInit, ReturnToCaller,
|
||||
ClearScope, ProcessErrors, GetBasePath, SelectionInit, Wait, Stream)
|
||||
{
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
function UsersList($scope, $rootScope, $location, $log, $routeParams, Rest, Alert, UserList, GenerateList, LoadBreadCrumbs,
|
||||
Prompt, SearchInit, PaginateInit, ReturnToCaller, ClearScope, ProcessErrors, GetBasePath, SelectionInit, Wait, Stream) {
|
||||
|
||||
ClearScope('htmlTemplate');
|
||||
|
||||
var list = UserList,
|
||||
defaultUrl = GetBasePath('users'),
|
||||
view = GenerateList,
|
||||
base = $location.path().replace(/^\//, '').split('/')[0],
|
||||
mode = (base === 'users') ? 'edit' : 'select', // if base path 'users', we're here to add/edit users
|
||||
scope = view.inject(UserList, { mode: mode }),
|
||||
url = (base === 'organizations') ? GetBasePath('organizations') + $routeParams.organization_id + '/users/' :
|
||||
GetBasePath('teams') + $routeParams.team_id + '/users/';
|
||||
|
||||
var list = UserList;
|
||||
var defaultUrl = GetBasePath('users');
|
||||
var view = GenerateList;
|
||||
var base = $location.path().replace(/^\//,'').split('/')[0];
|
||||
var mode = (base == 'users') ? 'edit' : 'select'; // if base path 'users', we're here to add/edit users
|
||||
var scope = view.inject(UserList, { mode: mode }); // Inject our view
|
||||
scope.selected = [];
|
||||
|
||||
var url = (base == 'organizations') ? GetBasePath('organizations') + $routeParams.organization_id + '/users/' :
|
||||
GetBasePath('teams') + $routeParams.team_id + '/users/';
|
||||
SelectionInit({ scope: scope, list: list, url: url, returnToCaller: 1 });
|
||||
SelectionInit({
|
||||
scope: scope,
|
||||
list: list,
|
||||
url: url,
|
||||
returnToCaller: 1
|
||||
});
|
||||
|
||||
if (scope.removePostRefresh) {
|
||||
scope.removePostRefresh();
|
||||
scope.removePostRefresh();
|
||||
}
|
||||
scope.removePostRefresh = scope.$on('PostRefresh', function() {
|
||||
scope.removePostRefresh = scope.$on('PostRefresh', function () {
|
||||
// Cleanup after a delete
|
||||
Wait('stop');
|
||||
$('#prompt-modal').off();
|
||||
});
|
||||
});
|
||||
|
||||
$rootScope.flashMessage = null;
|
||||
SearchInit({ scope: scope, set: 'users', list: list, url: defaultUrl });
|
||||
PaginateInit({ scope: scope, list: list, url: defaultUrl });
|
||||
SearchInit({
|
||||
scope: scope,
|
||||
set: 'users',
|
||||
list: list,
|
||||
url: defaultUrl
|
||||
});
|
||||
PaginateInit({
|
||||
scope: scope,
|
||||
list: list,
|
||||
url: defaultUrl
|
||||
});
|
||||
scope.search(list.iterator);
|
||||
|
||||
LoadBreadCrumbs();
|
||||
|
||||
scope.showActivity = function() { Stream({ scope: scope }); }
|
||||
|
||||
scope.addUser = function() {
|
||||
$location.path($location.path() + '/add');
|
||||
}
|
||||
|
||||
scope.editUser = function(id) {
|
||||
$location.path($location.path() + '/' + id);
|
||||
}
|
||||
|
||||
scope.deleteUser = function(id, name) {
|
||||
|
||||
var action = function() {
|
||||
$('#prompt-modal').on('hidden.bs.modal', function(){ Wait('start'); });
|
||||
$('#prompt-modal').modal('hide');
|
||||
var url = defaultUrl + id + '/';
|
||||
Rest.setUrl(url);
|
||||
Rest.destroy()
|
||||
.success( function(data, status, headers, config) {
|
||||
scope.search(list.iterator);
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
ProcessErrors(scope, data, status, null,
|
||||
{ hdr: 'Error!', msg: 'Call to ' + url + ' failed. DELETE returned status: ' + status });
|
||||
});
|
||||
};
|
||||
scope.showActivity = function () {
|
||||
Stream({
|
||||
scope: scope
|
||||
});
|
||||
};
|
||||
|
||||
Prompt({ hdr: 'Delete',
|
||||
body: 'Are you sure you want to delete ' + name + '?',
|
||||
action: action
|
||||
scope.addUser = function () {
|
||||
$location.path($location.path() + '/add');
|
||||
};
|
||||
|
||||
scope.editUser = function (id) {
|
||||
$location.path($location.path() + '/' + id);
|
||||
};
|
||||
|
||||
scope.deleteUser = function (id, name) {
|
||||
|
||||
var action = function () {
|
||||
$('#prompt-modal').on('hidden.bs.modal', function () {
|
||||
Wait('start');
|
||||
});
|
||||
$('#prompt-modal').modal('hide');
|
||||
var url = defaultUrl + id + '/';
|
||||
Rest.setUrl(url);
|
||||
Rest.destroy()
|
||||
.success(function () {
|
||||
scope.search(list.iterator);
|
||||
})
|
||||
.error(function (data, status) {
|
||||
Wait('stop');
|
||||
ProcessErrors(scope, data, status, null, { hdr: 'Error!', msg: 'Call to ' + url + ' failed. DELETE returned status: ' +
|
||||
status });
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
Prompt({
|
||||
hdr: 'Delete',
|
||||
body: 'Are you sure you want to delete ' + name + '?',
|
||||
action: action
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
UsersList.$inject = [ '$scope', '$rootScope', '$location', '$log', '$routeParams', 'Rest', 'Alert', 'UserList', 'GenerateList',
|
||||
'LoadBreadCrumbs', 'Prompt', 'SearchInit', 'PaginateInit', 'ReturnToCaller', 'ClearScope', 'ProcessErrors',
|
||||
'GetBasePath', 'SelectionInit', 'Wait', 'Stream'];
|
||||
UsersList.$inject = ['$scope', '$rootScope', '$location', '$log', '$routeParams', 'Rest', 'Alert', 'UserList', 'GenerateList',
|
||||
'LoadBreadCrumbs', 'Prompt', 'SearchInit', 'PaginateInit', 'ReturnToCaller', 'ClearScope', 'ProcessErrors', 'GetBasePath',
|
||||
'SelectionInit', 'Wait', 'Stream'
|
||||
];
|
||||
|
||||
|
||||
function UsersAdd ($scope, $rootScope, $compile, $location, $log, $routeParams, UserForm,
|
||||
GenerateForm, Rest, Alert, ProcessErrors, LoadBreadCrumbs, ReturnToCaller, ClearScope,
|
||||
GetBasePath, LookUpInit, OrganizationList, ResetForm, Wait)
|
||||
{
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
function UsersAdd($scope, $rootScope, $compile, $location, $log, $routeParams, UserForm, GenerateForm, Rest, Alert, ProcessErrors,
|
||||
LoadBreadCrumbs, ReturnToCaller, ClearScope, GetBasePath, LookUpInit, OrganizationList, ResetForm, Wait) {
|
||||
|
||||
ClearScope('htmlTemplate');
|
||||
|
||||
// Inject dynamic view
|
||||
var defaultUrl = GetBasePath('organizations');
|
||||
var form = UserForm;
|
||||
ResetForm();
|
||||
var generator = GenerateForm;
|
||||
var scope = generator.inject(form, {mode: 'add', related: false});
|
||||
|
||||
scope.ldap_user = false;
|
||||
scope.not_ldap_user = !scope.ldap_user;
|
||||
scope.ldap_dn = null;
|
||||
// Inject dynamic view
|
||||
var defaultUrl = GetBasePath('organizations'),
|
||||
form = UserForm,
|
||||
generator = GenerateForm,
|
||||
scope = generator.inject(form, { mode: 'add', related: false });
|
||||
|
||||
ResetForm();
|
||||
|
||||
scope.ldap_user = false;
|
||||
scope.not_ldap_user = !scope.ldap_user;
|
||||
scope.ldap_dn = null;
|
||||
|
||||
generator.reset();
|
||||
generator.reset();
|
||||
|
||||
LoadBreadCrumbs();
|
||||
LoadBreadCrumbs();
|
||||
|
||||
// Configure the lookup dialog. If we're adding a user through the Organizations tab,
|
||||
// default the Organization value.
|
||||
LookUpInit({
|
||||
scope: scope,
|
||||
form: form,
|
||||
current_item: ($routeParams.organization_id !== undefined) ? $routeParams.organization_id : null,
|
||||
list: OrganizationList,
|
||||
field: 'organization'
|
||||
});
|
||||
// Configure the lookup dialog. If we're adding a user through the Organizations tab,
|
||||
// default the Organization value.
|
||||
LookUpInit({
|
||||
scope: scope,
|
||||
form: form,
|
||||
current_item: ($routeParams.organization_id !== undefined) ? $routeParams.organization_id : null,
|
||||
list: OrganizationList,
|
||||
field: 'organization'
|
||||
});
|
||||
|
||||
if ($routeParams.organization_id) {
|
||||
scope.organization = $routeParams.organization_id;
|
||||
Rest.setUrl(GetBasePath('organizations') + $routeParams.organization_id + '/');
|
||||
Rest.get()
|
||||
.success( function(data, status, headers, config) {
|
||||
scope['organization_name'] = data.name;
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
ProcessErrors(scope, data, status, form,
|
||||
{ hdr: 'Error!', msg: 'Failed to lookup Organization: ' + data.id + '. GET returned status: ' + status });
|
||||
});
|
||||
}
|
||||
if ($routeParams.organization_id) {
|
||||
scope.organization = $routeParams.organization_id;
|
||||
Rest.setUrl(GetBasePath('organizations') + $routeParams.organization_id + '/');
|
||||
Rest.get()
|
||||
.success(function (data) {
|
||||
scope.organization_name = data.name;
|
||||
})
|
||||
.error(function (data, status) {
|
||||
ProcessErrors(scope, data, status, form, {
|
||||
hdr: 'Error!',
|
||||
msg: 'Failed to lookup Organization: ' + data.id + '. GET returned status: ' + status
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Save
|
||||
scope.formSave = function() {
|
||||
generator.clearApiErrors();
|
||||
if (scope.organization !== undefined && scope.organization !== null && scope.organization !== '') {
|
||||
Rest.setUrl(defaultUrl + scope.organization + '/users/');
|
||||
var data = {}
|
||||
for (var fld in form.fields) {
|
||||
if (form.fields[fld].realName) {
|
||||
data[form.fields[fld].realName] = scope[fld];
|
||||
}
|
||||
else {
|
||||
data[fld] = scope[fld];
|
||||
}
|
||||
}
|
||||
|
||||
data.is_superuser = (data.is_superuser == null || data.is_superuser == undefined || data.is_superuser == '') ? false :
|
||||
data.is_superuser;
|
||||
Wait('start');
|
||||
Rest.post(data)
|
||||
.success( function(data, status, headers, config) {
|
||||
var base = $location.path().replace(/^\//,'').split('/')[0];
|
||||
if (base == 'users') {
|
||||
$rootScope.flashMessage = 'New user successfully created!';
|
||||
$location.path('/users/' + data.id);
|
||||
}
|
||||
else {
|
||||
ReturnToCaller(1);
|
||||
}
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
ProcessErrors(scope, data, status, form,
|
||||
{ hdr: 'Error!', msg: 'Failed to add new user. POST returned status: ' + status });
|
||||
});
|
||||
}
|
||||
else {
|
||||
scope.organization_name_api_error = 'A value is required';
|
||||
}
|
||||
};
|
||||
// Save
|
||||
scope.formSave = function () {
|
||||
generator.clearApiErrors();
|
||||
var fld, data = {};
|
||||
if (scope.organization !== undefined && scope.organization !== null && scope.organization !== '') {
|
||||
Rest.setUrl(defaultUrl + scope.organization + '/users/');
|
||||
for (fld in form.fields) {
|
||||
if (form.fields[fld].realName) {
|
||||
data[form.fields[fld].realName] = scope[fld];
|
||||
} else {
|
||||
data[fld] = scope[fld];
|
||||
}
|
||||
}
|
||||
data.is_superuser = data.is_superuser || false;
|
||||
Wait('start');
|
||||
Rest.post(data)
|
||||
.success(function (data) {
|
||||
var base = $location.path().replace(/^\//, '').split('/')[0];
|
||||
if (base === 'users') {
|
||||
$rootScope.flashMessage = 'New user successfully created!';
|
||||
$location.path('/users/' + data.id);
|
||||
}
|
||||
ReturnToCaller(1);
|
||||
})
|
||||
.error(function (data, status) {
|
||||
Wait('stop');
|
||||
ProcessErrors(scope, data, status, form, { hdr: 'Error!', msg: 'Failed to add new user. POST returned status: ' + status });
|
||||
});
|
||||
} else {
|
||||
scope.organization_name_api_error = 'A value is required';
|
||||
}
|
||||
};
|
||||
|
||||
// Cancel
|
||||
scope.formReset = function() {
|
||||
// Defaults
|
||||
generator.reset();
|
||||
scope.ldap_user = false;
|
||||
};
|
||||
// Cancel
|
||||
scope.formReset = function () {
|
||||
// Defaults
|
||||
generator.reset();
|
||||
scope.ldap_user = false;
|
||||
};
|
||||
|
||||
// Password change
|
||||
scope.clearPWConfirm = function(fld) {
|
||||
// If password value changes, make sure password_confirm must be re-entered
|
||||
scope[fld] = '';
|
||||
scope[form.name + '_form'][fld].$setValidity('awpassmatch', false);
|
||||
}
|
||||
// Password change
|
||||
scope.clearPWConfirm = function (fld) {
|
||||
// If password value changes, make sure password_confirm must be re-entered
|
||||
scope[fld] = '';
|
||||
scope[form.name + '_form'][fld].$setValidity('awpassmatch', false);
|
||||
};
|
||||
}
|
||||
|
||||
UsersAdd.$inject = [ '$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'UserForm', 'GenerateForm',
|
||||
'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'ReturnToCaller', 'ClearScope', 'GetBasePath',
|
||||
'LookUpInit', 'OrganizationList', 'ResetForm', 'Wait' ];
|
||||
UsersAdd.$inject = ['$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'UserForm', 'GenerateForm',
|
||||
'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'ReturnToCaller', 'ClearScope', 'GetBasePath',
|
||||
'LookUpInit', 'OrganizationList', 'ResetForm', 'Wait'
|
||||
];
|
||||
|
||||
|
||||
function UsersEdit ($scope, $rootScope, $compile, $location, $log, $routeParams, UserForm,
|
||||
GenerateForm, Rest, Alert, ProcessErrors, LoadBreadCrumbs, RelatedSearchInit,
|
||||
RelatedPaginateInit, ReturnToCaller, ClearScope, GetBasePath, Prompt, CheckAccess,
|
||||
ResetForm, Wait, Stream)
|
||||
{
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
function UsersEdit($scope, $rootScope, $compile, $location, $log, $routeParams, UserForm,
|
||||
GenerateForm, Rest, Alert, ProcessErrors, LoadBreadCrumbs, RelatedSearchInit,
|
||||
RelatedPaginateInit, ReturnToCaller, ClearScope, GetBasePath, Prompt, CheckAccess,
|
||||
ResetForm, Wait, Stream) {
|
||||
ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior
|
||||
//scope.
|
||||
|
||||
var defaultUrl=GetBasePath('users');
|
||||
var generator = GenerateForm;
|
||||
var form = UserForm;
|
||||
var base = $location.path().replace(/^\//,'').split('/')[0];
|
||||
var master = {};
|
||||
var id = $routeParams.user_id;
|
||||
var relatedSets = {};
|
||||
var defaultUrl = GetBasePath('users'),
|
||||
generator = GenerateForm,
|
||||
form = UserForm,
|
||||
base = $location.path().replace(/^\//, '').split('/')[0],
|
||||
master = {},
|
||||
id = $routeParams.user_id,
|
||||
relatedSets = {};
|
||||
|
||||
if ($scope.removeFormReady) {
|
||||
$scope.removeFormReady();
|
||||
}
|
||||
$scope.removeFormReady = $scope.$on('formReady', function () {
|
||||
var scope = generator.inject(form, { mode: 'edit', related: true });
|
||||
generator.reset();
|
||||
|
||||
if ($scope.removeFormReady) {
|
||||
$scope.removeFormReady();
|
||||
}
|
||||
$scope.removeFormReady = $scope.$on('formReady', function() {
|
||||
var scope = generator.inject(form, {mode: 'edit', related: true});
|
||||
generator.reset();
|
||||
|
||||
if (scope.removePostRefresh) {
|
||||
scope.removePostRefresh();
|
||||
scope.removePostRefresh();
|
||||
}
|
||||
|
||||
scope.PermissionAddAllowed = false;
|
||||
scope.PermissionAddAllowed = false;
|
||||
|
||||
// After the Organization is loaded, retrieve each related set
|
||||
if (scope.removeUserLoaded) {
|
||||
scope.removeUserLoaded();
|
||||
}
|
||||
scope.removeUserLoaded = scope.$on('userLoaded', function() {
|
||||
for (var set in relatedSets) {
|
||||
scope.search(relatedSets[set].iterator);
|
||||
}
|
||||
CheckAccess({ scope: scope }); //Does the user have access to add/edit Permissions?
|
||||
Wait('stop');
|
||||
});
|
||||
// After the Organization is loaded, retrieve each related set
|
||||
if (scope.removeUserLoaded) {
|
||||
scope.removeUserLoaded();
|
||||
}
|
||||
scope.removeUserLoaded = scope.$on('userLoaded', function () {
|
||||
for (var set in relatedSets) {
|
||||
scope.search(relatedSets[set].iterator);
|
||||
}
|
||||
CheckAccess({
|
||||
scope: scope
|
||||
}); //Does the user have access to add/edit Permissions?
|
||||
Wait('stop');
|
||||
});
|
||||
|
||||
// Retrieve detail record and prepopulate the form
|
||||
Rest.setUrl(defaultUrl + ':id/');
|
||||
Rest.get({ params: {id: id} })
|
||||
.success( function(data, status, headers, config) {
|
||||
LoadBreadCrumbs({ path: '/users/' + id, title: data.username });
|
||||
for (var fld in form.fields) {
|
||||
if (data[fld]) {
|
||||
if (fld == 'is_superuser') {
|
||||
scope[fld] = (data[fld] == 'true' || data[fld] == true) ? 'true' : 'false';
|
||||
}
|
||||
else {
|
||||
scope[fld] = data[fld];
|
||||
}
|
||||
master[fld] = scope[fld];
|
||||
}
|
||||
}
|
||||
var related = data.related;
|
||||
for (var set in form.related) {
|
||||
if (related[set]) {
|
||||
relatedSets[set] = { url: related[set], iterator: form.related[set].iterator };
|
||||
}
|
||||
}
|
||||
|
||||
scope.ldap_user = (data.ldap_dn !== null && data.ldap_dn !== undefined && data.ldap_dn !== '') ? true : false;
|
||||
scope.not_ldap_user = !scope.ldap_user;
|
||||
master.ldap_user = scope.ldap_user;
|
||||
|
||||
// Initialize related search functions. Doing it here to make sure relatedSets object is populated.
|
||||
RelatedSearchInit({ scope: scope, form: form, relatedSets: relatedSets });
|
||||
RelatedPaginateInit({ scope: scope, relatedSets: relatedSets });
|
||||
scope.$emit('userLoaded');
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
ProcessErrors(scope, data, status, form,
|
||||
{ hdr: 'Error!', msg: 'Failed to retrieve user: ' + $routeParams.id + '. GET status: ' + status });
|
||||
});
|
||||
|
||||
// Save changes to the parent
|
||||
scope.formSave = function() {
|
||||
generator.clearApiErrors();
|
||||
$rootScope.flashMessage = null;
|
||||
Rest.setUrl(defaultUrl + id + '/');
|
||||
var data = {}
|
||||
for (var fld in form.fields) {
|
||||
if (form.fields[fld].realName) {
|
||||
data[form.fields[fld].realName] = scope[fld];
|
||||
}
|
||||
else {
|
||||
data[fld] = scope[fld];
|
||||
}
|
||||
}
|
||||
// Retrieve detail record and prepopulate the form
|
||||
Rest.setUrl(defaultUrl + ':id/');
|
||||
Rest.get({ params: { id: id } })
|
||||
.success(function (data) {
|
||||
LoadBreadCrumbs({ path: '/users/' + id, title: data.username });
|
||||
var fld, related, set;
|
||||
for (fld in form.fields) {
|
||||
if (data[fld]) {
|
||||
if (fld === 'is_superuser') {
|
||||
scope[fld] = (data[fld] === 'true' || data[fld] === true) ? 'true' : 'false';
|
||||
} else {
|
||||
scope[fld] = data[fld];
|
||||
}
|
||||
master[fld] = scope[fld];
|
||||
}
|
||||
}
|
||||
related = data.related;
|
||||
for (set in form.related) {
|
||||
if (related[set]) {
|
||||
relatedSets[set] = {
|
||||
url: related[set],
|
||||
iterator: form.related[set].iterator
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
data.is_superuser = (data.is_superuser == null || data.is_superuser == undefined || data.is_superuser == '') ? false :
|
||||
data.is_superuser;
|
||||
|
||||
Wait('start');
|
||||
Rest.put(data)
|
||||
.success( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
var base = $location.path().replace(/^\//,'').split('/')[0];
|
||||
(base == 'users') ? ReturnToCaller() : ReturnToCaller(1);
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
Wait('stop');
|
||||
ProcessErrors(scope, data, status, form,
|
||||
{ hdr: 'Error!', msg: 'Failed to update users: ' + $routeParams.id + '. PUT status: ' + status });
|
||||
});
|
||||
};
|
||||
scope.ldap_user = (data.ldap_dn !== null && data.ldap_dn !== undefined && data.ldap_dn !== '') ? true : false;
|
||||
scope.not_ldap_user = !scope.ldap_user;
|
||||
master.ldap_user = scope.ldap_user;
|
||||
|
||||
scope.showActivity = function() { Stream({ scope: scope }); }
|
||||
// Initialize related search functions. Doing it here to make sure relatedSets object is populated.
|
||||
RelatedSearchInit({
|
||||
scope: scope,
|
||||
form: form,
|
||||
relatedSets: relatedSets
|
||||
});
|
||||
RelatedPaginateInit({
|
||||
scope: scope,
|
||||
relatedSets: relatedSets
|
||||
});
|
||||
scope.$emit('userLoaded');
|
||||
})
|
||||
.error(function (data, status) {
|
||||
ProcessErrors(scope, data, status, null, { hdr: 'Error!', msg: 'Failed to retrieve user: ' +
|
||||
$routeParams.id + '. GET status: ' + status });
|
||||
});
|
||||
|
||||
// Cancel
|
||||
scope.formReset = function() {
|
||||
$rootScope.flashMessage = null;
|
||||
generator.reset();
|
||||
for (var fld in master) {
|
||||
scope[fld] = master[fld];
|
||||
}
|
||||
scope['password_confirm'] = scope['password'];
|
||||
};
|
||||
// Save changes to the parent
|
||||
scope.formSave = function () {
|
||||
var data = {}, fld;
|
||||
generator.clearApiErrors();
|
||||
$rootScope.flashMessage = null;
|
||||
Rest.setUrl(defaultUrl + id + '/');
|
||||
for (fld in form.fields) {
|
||||
if (form.fields[fld].realName) {
|
||||
data[form.fields[fld].realName] = scope[fld];
|
||||
} else {
|
||||
data[fld] = scope[fld];
|
||||
}
|
||||
}
|
||||
|
||||
// Password change
|
||||
scope.clearPWConfirm = function(fld) {
|
||||
// If password value changes, make sure password_confirm must be re-entered
|
||||
scope[fld] = '';
|
||||
scope[form.name + '_form'][fld].$setValidity('awpassmatch', false);
|
||||
$rootScope.flashMessage = null;
|
||||
}
|
||||
data.is_superuser = data.is_superuser || false;
|
||||
|
||||
Wait('start');
|
||||
Rest.put(data)
|
||||
.success(function () {
|
||||
Wait('stop');
|
||||
var base = $location.path().replace(/^\//, '').split('/')[0];
|
||||
if (base === 'users') {
|
||||
ReturnToCaller();
|
||||
}
|
||||
ReturnToCaller(1);
|
||||
})
|
||||
.error(function (data, status) {
|
||||
Wait('stop');
|
||||
ProcessErrors(scope, data, status, form, { hdr: 'Error!', msg: 'Failed to update users: ' + $routeParams.id +
|
||||
'. PUT status: ' + status });
|
||||
});
|
||||
};
|
||||
|
||||
scope.showActivity = function () {
|
||||
Stream({
|
||||
scope: scope
|
||||
});
|
||||
};
|
||||
|
||||
// Cancel
|
||||
scope.formReset = function () {
|
||||
$rootScope.flashMessage = null;
|
||||
generator.reset();
|
||||
for (var fld in master) {
|
||||
scope[fld] = master[fld];
|
||||
}
|
||||
scope.password_confirm = scope.password;
|
||||
};
|
||||
|
||||
// Password change
|
||||
scope.clearPWConfirm = function (fld) {
|
||||
// If password value changes, make sure password_confirm must be re-entered
|
||||
scope[fld] = '';
|
||||
scope[form.name + '_form'][fld].$setValidity('awpassmatch', false);
|
||||
$rootScope.flashMessage = null;
|
||||
};
|
||||
|
||||
|
||||
// Related set: Add button
|
||||
scope.add = function(set) {
|
||||
$rootScope.flashMessage = null;
|
||||
if (set == 'permissions') {
|
||||
if (scope.PermissionAddAllowed) {
|
||||
$location.path('/' + base + '/' + $routeParams.user_id + '/' + set + '/add');
|
||||
}
|
||||
else {
|
||||
Alert('Access Denied', 'You do not have access to this function. Please contact your system administrator.');
|
||||
}
|
||||
}
|
||||
else {
|
||||
$location.path('/' + base + '/' + $routeParams.user_id + '/' + set);
|
||||
}
|
||||
};
|
||||
// Related set: Add button
|
||||
scope.add = function (set) {
|
||||
$rootScope.flashMessage = null;
|
||||
if (set === 'permissions') {
|
||||
if (scope.PermissionAddAllowed) {
|
||||
$location.path('/' + base + '/' + $routeParams.user_id + '/' + set + '/add');
|
||||
} else {
|
||||
Alert('Access Denied', 'You do not have access to this function. Please contact your system administrator.');
|
||||
}
|
||||
} else {
|
||||
$location.path('/' + base + '/' + $routeParams.user_id + '/' + set);
|
||||
}
|
||||
};
|
||||
|
||||
// Related set: Edit button
|
||||
scope.edit = function(set, id, name) {
|
||||
$rootScope.flashMessage = null;
|
||||
if (set == 'permissions') {
|
||||
$location.path('/users/' + $routeParams.user_id + '/permissions/' + id);
|
||||
}
|
||||
else {
|
||||
$location.path('/' + set + '/' + id);
|
||||
}
|
||||
};
|
||||
// Related set: Edit button
|
||||
scope.edit = function (set, id) {
|
||||
$rootScope.flashMessage = null;
|
||||
if (set === 'permissions') {
|
||||
$location.path('/users/' + $routeParams.user_id + '/permissions/' + id);
|
||||
} else {
|
||||
$location.path('/' + set + '/' + id);
|
||||
}
|
||||
};
|
||||
|
||||
// Related set: Delete button
|
||||
scope['delete'] = function(set, itm_id, name, title) {
|
||||
$rootScope.flashMessage = null;
|
||||
|
||||
var action = function() {
|
||||
var url;
|
||||
if (set == 'permissions') {
|
||||
if (scope.PermissionAddAllowed) {
|
||||
url = GetBasePath('base') + 'permissions/' + itm_id + '/';
|
||||
// Related set: Delete button
|
||||
scope['delete'] = function (set, itm_id, name, title) {
|
||||
$rootScope.flashMessage = null;
|
||||
|
||||
var action = function () {
|
||||
var url;
|
||||
if (set === 'permissions') {
|
||||
if (scope.PermissionAddAllowed) {
|
||||
url = GetBasePath('base') + 'permissions/' + itm_id + '/';
|
||||
Rest.setUrl(url);
|
||||
Rest.destroy()
|
||||
.success(function () {
|
||||
$('#prompt-modal').modal('hide');
|
||||
scope.search(form.related[set].iterator);
|
||||
})
|
||||
.error(function (data, status) {
|
||||
$('#prompt-modal').modal('hide');
|
||||
ProcessErrors(scope, data, status, null, { hdr: 'Error!',
|
||||
msg: 'Call to ' + url + ' failed. DELETE returned status: ' + status });
|
||||
});
|
||||
} else {
|
||||
Alert('Access Denied', 'You do not have access to this function. Please contact your system administrator.');
|
||||
}
|
||||
} else {
|
||||
url = defaultUrl + $routeParams.user_id + '/' + set + '/';
|
||||
Rest.setUrl(url);
|
||||
Rest.destroy()
|
||||
.success( function(data, status, headers, config) {
|
||||
Rest.post({
|
||||
id: itm_id,
|
||||
disassociate: 1
|
||||
})
|
||||
.success(function () {
|
||||
$('#prompt-modal').modal('hide');
|
||||
scope.search(form.related[set].iterator);
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
})
|
||||
.error(function (data, status) {
|
||||
$('#prompt-modal').modal('hide');
|
||||
ProcessErrors(scope, data, status, null,
|
||||
{ hdr: 'Error!', msg: 'Call to ' + url + ' failed. DELETE returned status: ' + status });
|
||||
ProcessErrors(scope, data, status, null, {
|
||||
hdr: 'Error!',
|
||||
msg: 'Call to ' + url + ' failed. POST returned status: ' + status
|
||||
});
|
||||
}
|
||||
else {
|
||||
Alert('Access Denied', 'You do not have access to this function. Please contact your system administrator.');
|
||||
}
|
||||
}
|
||||
else {
|
||||
url = defaultUrl + $routeParams.user_id + '/' + set + '/';
|
||||
Rest.setUrl(url);
|
||||
Rest.post({ id: itm_id, disassociate: 1 })
|
||||
.success( function(data, status, headers, config) {
|
||||
$('#prompt-modal').modal('hide');
|
||||
scope.search(form.related[set].iterator);
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
$('#prompt-modal').modal('hide');
|
||||
ProcessErrors(scope, data, status, null,
|
||||
{ hdr: 'Error!', msg: 'Call to ' + url + ' failed. POST returned status: ' + status });
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
Prompt({ hdr: 'Delete',
|
||||
body: 'Are you sure you want to remove ' + name + ' from ' + scope.username + ' ' + title + '?',
|
||||
action: action
|
||||
});
|
||||
}
|
||||
|
||||
}); // $scope.$on
|
||||
|
||||
// Put form back to its original state
|
||||
ResetForm();
|
||||
|
||||
|
||||
if ($scope.removeModifyForm) {
|
||||
$scope.removeModifyForm();
|
||||
}
|
||||
$scope.removeModifyForm = $scope.$on('modifyForm', function() {
|
||||
// Modify form based on LDAP settings
|
||||
Rest.setUrl(GetBasePath('config'));
|
||||
Rest.get()
|
||||
.success( function(data, status, headers, config) {
|
||||
if (data['user_ldap_fields']) {
|
||||
var fld;
|
||||
for (var i=0; i < data['user_ldap_fields'].length; i++) {
|
||||
fld = data['user_ldap_fields'][i];
|
||||
if (form.fields[fld]) {
|
||||
form.fields[fld]['readonly'] = true;
|
||||
form.fields[fld]['editRequired'] = false;
|
||||
if (form.fields[fld].awRequiredWhen) {
|
||||
delete form.fields[fld].awRequiredWhen;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$scope.$emit('formReady');
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
ProcessErrors($scope, data, status, null,
|
||||
{ hdr: 'Error!', msg: 'Failed to retrieve application config. GET status: ' + status });
|
||||
});
|
||||
});
|
||||
|
||||
Wait('start');
|
||||
Rest.setUrl(defaultUrl + id + '/');
|
||||
Rest.get()
|
||||
.success( function(data, status, headers, config) {
|
||||
if (data.ldap_dn !== null && data.ldap_dn !== undefined && data.ldap_dn !== '') {
|
||||
//this is an LDAP user
|
||||
$scope.$emit('modifyForm');
|
||||
}
|
||||
else {
|
||||
$scope.$emit('formReady');
|
||||
}
|
||||
})
|
||||
.error( function(data, status, headers, config) {
|
||||
ProcessErrors($scope, data, status, null,
|
||||
{ hdr: 'Error!', msg: 'Failed to retrieve user: ' + id + '. GET status: ' + status });
|
||||
Prompt({
|
||||
hdr: 'Delete',
|
||||
body: 'Are you sure you want to remove ' + name + ' from ' + scope.username + ' ' + title + '?',
|
||||
action: action
|
||||
});
|
||||
};
|
||||
}); // $scope.$on
|
||||
|
||||
// Put form back to its original state
|
||||
ResetForm();
|
||||
|
||||
|
||||
if ($scope.removeModifyForm) {
|
||||
$scope.removeModifyForm();
|
||||
}
|
||||
$scope.removeModifyForm = $scope.$on('modifyForm', function () {
|
||||
// Modify form based on LDAP settings
|
||||
Rest.setUrl(GetBasePath('config'));
|
||||
Rest.get()
|
||||
.success(function (data) {
|
||||
var i, fld;
|
||||
if (data.user_ldap_fields) {
|
||||
for (i = 0; i < data.user_ldap_fields.length; i++) {
|
||||
fld = data.user_ldap_fields[i];
|
||||
if (form.fields[fld]) {
|
||||
form.fields[fld].readonly = true;
|
||||
form.fields[fld].editRequired = false;
|
||||
if (form.fields[fld].awRequiredWhen) {
|
||||
delete form.fields[fld].awRequiredWhen;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$scope.$emit('formReady');
|
||||
})
|
||||
.error(function (data, status) {
|
||||
ProcessErrors($scope, data, status, null, { hdr: 'Error!', msg: 'Failed to retrieve application config. GET status: ' + status });
|
||||
});
|
||||
});
|
||||
|
||||
Wait('start');
|
||||
Rest.setUrl(defaultUrl + id + '/');
|
||||
Rest.get()
|
||||
.success(function (data) {
|
||||
if (data.ldap_dn !== null && data.ldap_dn !== undefined && data.ldap_dn !== '') {
|
||||
//this is an LDAP user
|
||||
$scope.$emit('modifyForm');
|
||||
} else {
|
||||
$scope.$emit('formReady');
|
||||
}
|
||||
})
|
||||
.error(function (data, status) {
|
||||
ProcessErrors($scope, data, status, null, { hdr: 'Error!', msg: 'Failed to retrieve user: ' + id + '. GET status: ' + status });
|
||||
});
|
||||
}
|
||||
|
||||
UsersEdit.$inject = [ '$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'UserForm',
|
||||
'GenerateForm', 'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'RelatedSearchInit',
|
||||
'RelatedPaginateInit', 'ReturnToCaller', 'ClearScope', 'GetBasePath', 'Prompt', 'CheckAccess',
|
||||
'ResetForm', 'Wait', 'Stream'];
|
||||
|
||||
UsersEdit.$inject = ['$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'UserForm', 'GenerateForm',
|
||||
'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'RelatedSearchInit', 'RelatedPaginateInit', 'ReturnToCaller', 'ClearScope',
|
||||
'GetBasePath', 'Prompt', 'CheckAccess', 'ResetForm', 'Wait', 'Stream'
|
||||
];
|
Loading…
Reference in New Issue
Block a user