22
33var 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