Skip to content

Commit b222202

Browse files
committed
[spalenque] - #13528 * add resend invitation feature to CCLA team admin
1 parent b5d542d commit b222202

6 files changed

Lines changed: 121 additions & 14 deletions

File tree

ICLA/code/interfaces/restfull_api/ICLARestfulAPI.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ public function __construct(){
7979
$this->addBeforeFilter('deleteInvitation','check_delete_invitation',function() use($this_var){
8080
return $this_var->checkCCLAdmin();
8181
});
82+
$this->addBeforeFilter('resendInvitation','check_resend_invitation',function() use($this_var){
83+
return $this_var->checkCCLAdmin();
84+
});
8285
}
8386

8487
/**
@@ -119,6 +122,7 @@ protected function authorize()
119122
'POST teams' => 'addTeam',
120123
'DELETE teams/$TEAM_ID' => 'deleteTeam',
121124
'PUT teams/$TEAM_ID' => 'updateTeamName',
125+
'PUT invitations/$ID' => 'resendInvitation',
122126
);
123127

124128
/**
@@ -134,6 +138,7 @@ protected function authorize()
134138
'addTeam',
135139
'deleteTeam',
136140
'updateTeamName',
141+
'resendInvitation',
137142
);
138143

139144
public function addInvitation(){
@@ -165,6 +170,28 @@ public function addInvitation(){
165170
if (!$data) return $this->serverError();
166171
}
167172

173+
public function resendInvitation(){
174+
$id = (int)$this->request->param('ID');
175+
176+
try{
177+
$invitation = $this->team_manager->resendInvitation($id, new TeamInvitationEmailSender());
178+
return $this->created(date('M jS Y', strtotime($invitation->Created)));
179+
}
180+
catch(NotFoundEntityException $ex1){
181+
SS_Log::log($ex1,SS_Log::NOTICE);
182+
return $this->notFound($ex1->getMessage());
183+
}
184+
catch(TeamMemberAlreadyExistsException $ex3){
185+
SS_Log::log($ex3,SS_Log::NOTICE);
186+
return $this->validationError(array( array('attribute'=>'error', 'message' => $ex3->getMessage())));
187+
}
188+
catch(Exception $ex){
189+
SS_Log::log($ex,SS_Log::ERR);
190+
return $this->serverError();
191+
}
192+
if (!$data) return $this->serverError();
193+
}
194+
168195
public function resignMembership(){
169196

170197
$id = (int)$this->request->param('ID');

ICLA/code/model/CCLATeamManager.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,39 @@ public function sendInvitation(array $data, ITeamInvitationSender $invitation_se
116116
});
117117
}
118118

119+
/**
120+
* @param int $id
121+
* @param ITeamInvitationSender $invitation_sender
122+
* @return ITeamInvitation
123+
*/
124+
public function resendInvitation($id, ITeamInvitationSender $invitation_sender){
125+
126+
$invitation_repository = $this->invitation_repository;
127+
128+
return $this->tx_manager->transaction(function() use($id, $invitation_repository, $invitation_sender){
129+
$invitation = $invitation_repository->getById($id);
130+
if(!$invitation) throw new NotFoundEntityException('TeamInvitation',sprintf('id %s',$id));
131+
132+
if ($invitation->isConfirmed) {
133+
throw new TeamMemberAlreadyExistsException('This member has already accepted the invitation.');
134+
}
135+
136+
$token = null;
137+
if($invitation->isInviteRegisteredAsUser()){
138+
do {
139+
$token = $invitation->generateConfirmationToken();
140+
} while ($invitation_repository->existsConfirmationToken($token));
141+
}
142+
143+
$invitation->Created = date('Y-m-d H:i:s');
144+
145+
$invitation_sender->sendInvitation($invitation, $token);
146+
147+
return $invitation;
148+
149+
});
150+
}
151+
119152
public function verifyInvitations($member_id, ITeamInvitationSender $invitation_sender){
120153

121154
return $this->tx_manager->transaction(function() use($member_id, $invitation_sender){

ICLA/code/ui/frontend/TeamMemberViewModel.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public function __construct($first_name, $last_name, $email, $team_id, $team_nam
6666
$this->team_id = $team_id;
6767
$this->status = $status;
6868
$this->id = $id;
69-
$this->date_added = $date_added;
69+
$this->date_added = date('M jS Y', strtotime($date_added));
7070
}
7171

7272
/**

ICLA/js/edit.profile.ccla.teams.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,38 @@ jQuery(document).ready(function($) {
143143
return false;
144144
});
145145

146+
$(document).on("click", ".resend_invitation", function (event) {
147+
event.preventDefault();
148+
event.stopPropagation();
149+
150+
var button = $(this);
151+
if(button.prop('disabled')){
152+
return false;
153+
}
154+
155+
button.prop('disabled',true);
156+
157+
var id = button.attr('data-id');
158+
159+
$.ajax({
160+
type: 'PUT',
161+
url: 'api/v1/ccla/invitations/'+id,
162+
contentType: "application/json; charset=utf-8",
163+
dataType: "json",
164+
success: function (data,textStatus,jqXHR) {
165+
var row = button.parent().parent();
166+
$('.invitation-date', row).html(data);
167+
swal('Invitation resent successfully.');
168+
},
169+
error: function (jqXHR, textStatus, errorThrown) {
170+
ajaxError(jqXHR, textStatus, errorThrown);
171+
button.prop('disabled',false);
172+
}
173+
});
174+
175+
return false;
176+
});
177+
146178
$('#add_member').click(function(event){
147179
event.preventDefault();
148180
event.stopPropagation();

ICLA/templates/Layout/Includes/EditProfilePage_TeamMembers.ss

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<div style="float:left" class="status-base needs-confirmation"></div><div class="status-legend">Needs Confirmation</div>
77
<div style="float:left" class="status-base member"></div><div class="status-legend">Is Member</div>
88
</div>
9-
<table id="ccla_teams">
9+
<table id="ccla_teams" class="table table-stripped">
1010
<thead>
1111
<tr>
1212
<th>First Name</th>
@@ -15,24 +15,24 @@
1515
<th>Team</th>
1616
<th>Date Added</th>
1717
<th>&nbsp;</th>
18-
<th>&nbsp;</th>
18+
<th width="125px">&nbsp;</th>
1919
</tr>
2020
<tr id="add_member_row">
2121
<td>
22-
<input type="text" id="add_member_fname" name="add_member_fname">
22+
<input type="text" id="add_member_fname" name="add_member_fname" class="form-control">
2323
</td>
2424
<td>
25-
<input type="text" id="add_member_lname" name="add_member_lname">
25+
<input type="text" id="add_member_lname" name="add_member_lname" class="form-control">
2626
</td>
2727

2828
<td>
29-
<input type="text" id="add_member_email" name="add_member_email">
29+
<input type="text" id="add_member_email" name="add_member_email" class="form-control">
3030
</td>
3131
<td>
3232
$TeamsDLL
3333
</td>
3434
<td colspan="3">
35-
<button id="add_member">Add</button>
35+
<button id="add_member" class="btn btn-default">Add</button>
3636
</td>
3737
</tr>
3838
</thead>
@@ -46,9 +46,18 @@
4646
<td>$LastName</td>
4747
<td>$Email</td>
4848
<td>$TeamName</td>
49-
<td>$DateAdded</td>
49+
<td class="invitation-date">$DateAdded</td>
5050
<td><div class="status-base {$Status}" title="{$Status}"></div></td>
51-
<td><button class="delete_member" data-team-id="{$TeamId}" data-id="{$Id}" data-status="{$Status}">Delete</button></td>
51+
<td>
52+
<% if $Status != 'member' %>
53+
<button class="resend_invitation btn btn-default btn-xs" data-id="{$Id}">
54+
Resend
55+
</button>
56+
<% end_if %>
57+
<button class="delete_member btn btn-danger btn-xs" data-team-id="{$TeamId}" data-id="{$Id}" data-status="{$Status}">
58+
Delete
59+
</button>
60+
</td>
5261
</tr>
5362
<% end_loop %>
5463
<% end_if %>
Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
<h2>$CompanyName Teams Administration</h2>
2-
<input type="text" name="edit_team_name" id="edit_team_name">
3-
<button id="add_team" >Add</button>
4-
<button id="save_team" style="display:none;">Save</button>
5-
<button id="delete_team" style="display:none;">Delete</button>
6-
$getTeamsDLL('select_edit_team')
2+
<div class="row">
3+
<div class="col-md-4">
4+
$getTeamsDLL('select_edit_team')
5+
</div>
6+
<div class="form-inline col-md-6">
7+
<input type="text" class="form-control" name="edit_team_name" id="edit_team_name">
8+
<button id="add_team" class="btn btn-default" >Add</button>
9+
<button id="save_team" class="btn btn-primary" style="display:none;">Save</button>
10+
<button id="delete_team" class="btn btn-danger" style="display:none;">Delete</button>
11+
</div>
12+
</div>

0 commit comments

Comments
 (0)