Skip to content

Commit 79440f2

Browse files
committed
Merge branch 'dev'
2 parents ba60bb5 + fbc8b74 commit 79440f2

21 files changed

+13026
-156
lines changed

package-lock.json

Lines changed: 11378 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@
22
"name": "support-admin-app",
33
"version": "2.3.0",
44
"dependencies": {
5-
"pace-js": "~1.0.2",
65
"angular": "~1.4.4",
76
"angular-animate": "~1.4.4",
8-
"angular-ui-bootstrap": "~2.5.0",
7+
"angular-bootstrap-multiselect": "git+https://github.com/bentorfs/angular-bootstrap-multiselect.git#master",
98
"angular-clipboard": "~1.2.1",
109
"angular-cookies": "~1.4.4",
1110
"angular-footable": "~0.0.3",
@@ -15,7 +14,7 @@
1514
"angular-sanitize": "~1.4.4",
1615
"angular-storage": "~0.0.11",
1716
"angular-touch": "~1.4.4",
18-
"angular-bootstrap-multiselect": "git+https://github.com/bentorfs/angular-bootstrap-multiselect.git#master",
17+
"angular-ui-bootstrap": "~2.5.0",
1918
"angular-ui-router": "~0.2.13",
2019
"auth0-angular": "~4.0.4",
2120
"auth0-js": "~6.4.2",
@@ -30,9 +29,12 @@
3029
"metismenu": "~2.0.2",
3130
"moment": "~2.11.2",
3231
"moment-timezone": "~0.5.0",
33-
"ng-file-model": "~0.0.4"
32+
"ng-file-model": "~0.0.4",
33+
"pace-js": "~1.0.2",
34+
"shortid": "^2.2.8"
3435
},
3536
"devDependencies": {
37+
"angular-mocks": "~1.4.4",
3638
"brfs": "1.4.3",
3739
"browser-sync": "~2.18.8",
3840
"browserify": "^9.0.3",
@@ -41,7 +43,7 @@
4143
"chalk": "~0.5.1",
4244
"del": "~2.2.2",
4345
"ejsify": "1.0.0",
44-
"gulp": "~3.8.10",
46+
"gulp": "^3.8.11",
4547
"gulp-angular-filesort": "~1.0.4",
4648
"gulp-angular-templatecache": "~1.4.2",
4749
"gulp-autoprefixer": "~2.0.0",
@@ -70,12 +72,11 @@
7072
"jshint": "~2.9.4",
7173
"jshint-stylish": "~1.0.0",
7274
"protractor": "~5.1.1",
73-
"require-dir": "~0.1.0",
75+
"require-dir": "~0.3.2",
7476
"uglify-save-license": "~0.4.1",
7577
"vinyl-buffer": "1.0.0",
7678
"vinyl-source-stream": "1.1.0",
77-
"wiredep": "~4.0.0",
78-
"angular-mocks": "~1.4.4"
79+
"wiredep": "~4.0.0"
7980
},
8081
"engines": {
8182
"node": ">=0.10.0"

src/app/addmembers/add.controller.js

Lines changed: 197 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,207 @@
22

33
var module = angular.module('supportAdminApp');
44

5-
module.controller('addmembers.AddMemberController', ['$log', '$scope', '$parse', 'MemberService', function ($log, $scope, $parse, $memberService) {
5+
module.controller('addmembers.AddMemberController', [
6+
'$log',
7+
'$scope',
8+
'$filter',
9+
'$timeout',
10+
'$uibModal',
11+
'Alert',
12+
'MemberService',
13+
'GroupService',
14+
'GroupMemberService',
15+
function ($log, $scope, $filter, $timeout, $modal, $alert, $memberService, GroupService, GroupMemberService) {
616

717
$scope.errors = [];
818
$scope.response = [];
9-
$scope.save = function() {
10-
$log.debug($scope.jsonInput);
19+
$scope.selectAll = true;
20+
$scope.importCounter = 0;
21+
$scope.filter = {
22+
status: ""
1123
};
1224

13-
$scope.add = function() {
14-
$log.debug($scope.jsonInput);
15-
16-
if($scope.activate) {
17-
$scope.activate = true;
18-
} else {
19-
$scope.activate = false;
20-
}
21-
22-
for ( var i=0, len = $scope.jsonInput.length; i<len; i++) {
23-
$memberService.addMember($scope.jsonInput[i], $scope.activate, $scope.showFullResponse).then(
24-
function(response) {
25-
$scope.response.push(response);
26-
},
27-
function(error) {
28-
$scope.errors.push(error);
29-
}
30-
);
25+
// footable
26+
angular
27+
.element(document)
28+
.ready(function () {
29+
$('.footable').footable({addRowToggle: true});
30+
});
31+
32+
$scope.$on('users.TableDataUpdated', function (event) {
33+
$timeout(function () {
34+
$('.footable').trigger('footable_redraw');
35+
}, 100);
36+
});
37+
38+
// Get all groups.
39+
GroupService
40+
.fetch()
41+
.then(function (result) {
42+
$scope.allGroups = result.content;
43+
})
44+
.catch(function (error) {
45+
$alert.error(error.error, $scope);
46+
});
47+
48+
$scope.save = function () {
49+
$log.debug($scope.users);
50+
};
51+
52+
$scope.add = function () {
53+
var usersToAdd = $filter('filter')($scope.users, {
54+
isSelected: true,
55+
importStatus: $scope.filter.status
56+
});
57+
_.each(usersToAdd, function (user) {
58+
$scope.addUser(user);
59+
})
60+
};
61+
62+
$scope.addUser = function (user) {
63+
var theUser = angular.copy(user);
64+
// Delete not needed properties as the API will consider it a Bad Request.
65+
delete theUser.isSelected;
66+
delete theUser.importStatus;
67+
delete theUser.importDetails;
68+
delete theUser.group;
69+
delete theUser.ssoProviderType;
70+
delete theUser.ssoProvider;
71+
delete theUser.ssoUserId;
72+
73+
$scope.importCounter++;
74+
$memberService
75+
.addMember(theUser, $scope.activate, $scope.showFullResponse)
76+
.then(function (response) {
77+
user.importStatus = response.status;
78+
user.importDetails = response.message;
79+
$scope.importCounter--;
80+
if (user.importStatus == "Success") {
81+
user.id = response.content.id;
82+
$scope.addUserToGroup(user, user.group);
83+
}
84+
}, function (error) {
85+
user.importStatus = error.status;
86+
user.importDetails = error.message;
87+
$scope.importCounter--;
88+
});
89+
}
90+
91+
/**
92+
* Assign a user to the specified group.
93+
* @param user the user.
94+
* @param group the group to assign the user to.
95+
*/
96+
$scope.addUserToGroup = function (user, group) {
97+
$scope.importCounter++;
98+
GroupMemberService
99+
.addMember(group.id, {
100+
memberId: user.id,
101+
membershipType: 'user'
102+
})
103+
.then(function (response) {
104+
105+
user.importStatus = "Success";
106+
user.importDetails = "";
107+
if (response.result && response.result.status === 200) {
108+
user.importStatus = "Fail";
109+
user.importDetails = "Error when adding user to Group:" + response.result.content;
110+
}
111+
})
112+
.catch(function (error) {
113+
user.importStatus = "Fail";
114+
user.importDetails = "Error when adding user to Group:" + error.error;
115+
})
116+
. finally(function () {
117+
$scope.importCounter--;
118+
});
119+
}
120+
121+
$scope.importCallback = function (jsonArray) {
122+
// transform the csv file data into a proper user object.
123+
_
124+
.each(jsonArray, function (user) {
125+
user.country = {
126+
name: user.country
127+
};
128+
// if password is missing, generate a random one; has to contain a number.
129+
user.credential = {
130+
password: user.password || (shortid.generate() + Math.floor(Math.random() * 10 + 1))
131+
};
132+
user.profiles = [
133+
{
134+
providerType: user.ssoProviderType,
135+
provider: user.ssoProvider,
136+
userId: user.ssoUserId
137+
}
138+
];
139+
user.group = _.find($scope.allGroups, function (group) {
140+
return group.id == user.group;
141+
});
142+
143+
// by default all records are selected.
144+
user.isSelected = true;
145+
// default status to empty so that it works properly when filtering.
146+
user.importStatus = "";
147+
user.importDetails = "";
148+
});
149+
150+
$scope.$broadcast('users.TableDataUpdated');
151+
}
152+
153+
$scope.selectAllUsers = function () {
154+
_
155+
.each($scope.users, function (user) {
156+
user.isSelected = $scope.selectAll
157+
});
158+
}
159+
160+
$scope.openBulkEditDialog = function (index) {
161+
var modalInstance = $modal.open({
162+
size: 'md',
163+
templateUrl: 'app/addmembers/bulk-edit-dialog.html',
164+
controller: 'users.BulkEditDialogController',
165+
resolve: {
166+
users: function () {
167+
return $filter('filter')($scope.users, {
168+
isSelected: true,
169+
importStatus: $scope.filter.status
170+
});
171+
},
172+
groups: function () {
173+
return $scope.allGroups;
174+
}
31175
}
176+
});
32177
};
33-
}]);
178+
179+
$scope.export = function () {
180+
var content = 'handle,firstName,lastName,email,country,ssoProviderType,ssoProvider,ssoUserId,gr' +
181+
'oup,importStatus,importDetails';
182+
var filteredUsers = $filter('filter')($scope.users, {
183+
isSelected: true,
184+
importStatus: $scope.filter.status
185+
});
186+
_.each(filteredUsers, function (user) {
187+
var properties = [
188+
user.handle,
189+
user.firstName,
190+
user.lastName,
191+
user.email,
192+
user.country.name,
193+
user.profiles[0].providerType,
194+
user.profiles[0].provider,
195+
user.profiles[0].userId,
196+
user.group.id,
197+
user.importStatus,
198+
user.importDetails
199+
];
200+
201+
content += '\n' + properties.join(',');
202+
});
203+
204+
var blob = new Blob([content], {type: 'text/csv'});
205+
$scope.usersUrl = (window.URL || window.webkitURL).createObjectURL(blob);
206+
}
207+
}
208+
]);

0 commit comments

Comments
 (0)