Skip to content

Commit

Permalink
Added buttons for adding/removing users
Browse files Browse the repository at this point in the history
  • Loading branch information
rmathis committed Mar 9, 2022
1 parent 7ae003d commit 49096bf
Show file tree
Hide file tree
Showing 3 changed files with 162 additions and 43 deletions.
5 changes: 3 additions & 2 deletions Lib/GrouperApiAccess.php
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,9 @@ public function getGrouperMemberOfGroups(array $queryData) {

//Build request logic
$userId = $queryData['userId'];
$connectionUrl = "{$this->config['fullUrl']}/subjects/$userId/groups?";
$connectionUrl .= "wsLiteObjectType=WsRestGetGroupsLiteRequest&actAsSubjectSourceId=ldap&actAsSubjectId=$userId";
$connectionUrl = "{$this->config['fullUrl']}/subjects/$userId/groups";
// $connectionUrl = "{$this->config['fullUrl']}/subjects/$userId/groups?";
// $connectionUrl .= "wsLiteObjectType=WsRestGetGroupsLiteRequest&actAsSubjectSourceId=ldap&actAsSubjectId=$userId";

try {
$results = $this->http->sendRequest('GET', $connectionUrl);
Expand Down
5 changes: 5 additions & 0 deletions Lib/lang.php
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,11 @@
'pl.grouperlite.action.members' => 'Members',
'pl.grouperlite.action.close' => 'Close',
'pl.grouperlite.action.clear' => 'Clear',
'pl.grouperlite.action.add-user' => 'Add',
'pl.grouperlite.action.remove-user' => 'Remove',
'pl.grouperlite.message.user-not-found-error' => 'Error: User not found.',
'pl.grouperlite.message.user-not-added-error' => 'Error: Unable to add user.',
'pl.grouperlite.message.user-not-removed-error' => 'Error: Unable to remove user.',

'pl.grouperlite.form.group.template.label' => 'Select a template',
'pl.grouperlite.form.group.template.empty' => '(choose one)',
Expand Down
195 changes: 154 additions & 41 deletions View/Elements/Components/subscriberList.ctp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<div class="modal modal-members modal-primary fade" tabindex="-1" id="subscribers" aria-labelledby="modal-title">
<div class="modal-dialog modal-dialog-scrollable">
<div class="modal-dialog modal-dialog-scrollable modal-lg">
<div class="modal-content">
<div class="modal-header">
<h3 class="modal-title h5" id="modal-title"><?php echo _txt('pl.grouperlite.group.info.members-heading'); ?></h3>
Expand All @@ -16,57 +16,170 @@
<p>There was an error retrieving the subscribers.</p>
</div>
<div class="modal-body subs">
<form class="add-user-form" id="add-user-form">
<div class="d-flex mb-4">
<label class="sr-only" for="addUser"><?php echo _txt('pl.grouperlite.search.tags.text'); ?></label>
<div class="input-group">
<?php echo $this->Form->input("addUser", array('label' => false, 'class' => 'form-control', 'value' => isset($searchcriteria) ? $searchcriteria : '')) ?>
<!--<input type="text" name="search" class="form-control" value="<?php echo isset($searchcriteria) ? $searchcriteria : ''; ?>" /> -->
<div class="input-group-append">
<button class="btn btn-grouper btn-primary px-4" type="submit" value="Submit">
<i class="fa fa-plus"></i>
<span class="ml-2"><?php echo _txt('pl.grouperlite.action.add-user'); ?></span>
</button>
</div>
</div>
</div>
</form>
<table class="table table-striped">
<tbody id="sub-body"></tbody>
</table>
</div>
<div class="modal-footer">
<div class="modal-footer d-flex justify-content-between">
<div>
<p class="alert alert-danger error"></p>
</div>
<button type="button" class="btn btn-grouper btn-link" data-dismiss="modal"><?php echo _txt('pl.grouperlite.action.close'); ?></button>
</div>
</div>
</div>
</div>
<script>
var url = '<?php print $this->Html->url(
array(
'plugin' => "grouper_lite",
'controller' => 'grouper_groups',
'action' => 'groupSubscribers.json'
)
); ?>';
$('.members-btn').click(function(ev) {
var $this = $(this);
var id = $this.data('id');
var modal = $('#subscribers');
modal.addClass('loading');
modal.modal('toggle');
(function($) {
var load, modal;
var loadUrl = '<?php print $this->Html->url(
array(
'plugin' => "grouper_lite",
'controller' => 'grouper_groups',
'action' => 'groupSubscribers.json'
)
); ?>';

$.ajax({
url: url + '?groupname=' + id,
dataType: 'json',
success: function(data) {
$('#sub-body').html(data.reduce(function (table, item) {
var row = [
'<tr>',
'<td>',
item.name,
'</td>',
'<td>',
item.id,
'</td>',
'</tr>'
].join('');
var removeUrl = '<?php print $this->Html->url(
array(
'plugin' => "grouper_lite",
'controller' => 'grouper_groups',
'action' => 'removeSubscriber.json'
)
); ?>';

table += row;
return table;
}, ''))
},
error: function() {
modal.addClass('error');
},
complete: function() {
modal.removeClass('loading');
var removeUrl = '<?php print $this->Html->url(
array(
'plugin' => "grouper_lite",
'controller' => 'grouper_groups',
'action' => 'addSubscriber.json'
)
); ?>';
$('.members-btn').click(function(ev) {
var $this = $(this);
var group = $this.data('id');
modal = $('#subscribers');
modal.modal('toggle');

modal.find('#add-user-form').submit(function(ev) {
ev.preventDefault();
var field = $(ev.target).find('#addUser');
var user = field.val();
onAddUser(user, group, field);
});

load = loadModalData(group);
load();
});

function loadModalData(id) {
return function() {
modal.addClass('loading');
clean();
$.ajax({
method: 'GET',
url: loadUrl + '?groupname=' + id,
dataType: 'json',
success: function(data) {
createModalContent(data);
},
error: function() {
modal.addClass('error');
},
complete: function() {
modal.removeClass('loading');
}
});
}
})
});
}

function createModalContent(data) {
$('#sub-body').html(data.reduce(function(table, item) {
var row = [
'<tr>',
'<td>',
item.name,
'</td>',
'<td>',
item.id,
'</td>',
'<td>',
'<button data-user="' + item.id + '" class="btn btn-grouper btn-block btn-primary btn-sm m-1 text-nowrap member-del-btn">',
'<?php echo _txt('pl.grouperlite.action.remove-user'); ?>',
'</button>',
'</td>',
'</tr>'
].join('');

table += row;
return table;
}, ''));

$('.member-del-btn').on('click', onRemoveUser);
}

function clean() {
$('#subscribers .error').hide();
$('#add-user-form #addUser').val('');
$('.member-del-btn').off('click', onRemoveUser);
}

function onRemoveUser(ev) {
var user = $(ev.target).data('user');
$.ajax({
method: 'DELETE',
url: removeUrl + '?userId=' + user,
dataType: 'json',
success: function(data) {
load();
},
error: function() {
$(ev.target).attr('disabled', 'disabled');
var err = $('#subscribers .error');
err.text('<?php echo _txt('pl.grouperlite.message.user-not-removed-error'); ?>').show();
},
complete: function() {

}
});
}

function onAddUser(user, group, field) {
$.ajax({
method: 'POST',
url: removeUrl + '?group=' + group + '&userId=' + user,
dataType: 'json',
success: function(data) {
load();
},
error: function(ev) {
var msg = ev.status === 404 ?
'<?php echo _txt('pl.grouperlite.message.user-not-found-error'); ?>' :
'<?php echo _txt('pl.grouperlite.message.user-not-added-error'); ?>';

var err = $('#subscribers .error');
err.text(msg).show();
},
complete: function() {

}
});
}

})(jQuery);
</script>

0 comments on commit 49096bf

Please sign in to comment.