Skip to content

Commit de5623b

Browse files
Internal: Add button to show last 10 registered users in user group and session pages - refs BT#22048
1 parent 52afec0 commit de5623b

File tree

2 files changed

+196
-9
lines changed

2 files changed

+196
-9
lines changed

main/admin/add_users_to_usergroup.php

+79-7
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,44 @@ function change_select(reset) {
112112
});
113113
}
114114
115+
</script>';
116+
$htmlHeadXtra[] = '
117+
<script>
118+
$(document).ready(function() {
119+
function showLastTenUsers() {
120+
var selectedUsers = [];
121+
$("#elements_in option").each(function() {
122+
selectedUsers.push($(this).val());
123+
});
124+
125+
var groupId = "'.$id.'";
126+
$.ajax({
127+
type: "POST",
128+
url: "'.api_get_self().'",
129+
data: {
130+
action: "get_last_ten_users",
131+
excludedUsers: selectedUsers,
132+
id: groupId
133+
},
134+
dataType: "json",
135+
success: function(data) {
136+
var select = document.getElementById("elements_not_in");
137+
select.innerHTML = "";
138+
139+
$.each(data, function(index, user) {
140+
select.append(new Option(user.username + " - " + user.firstname + " " + user.lastname, user.id));
141+
});
142+
},
143+
error: function(xhr, status, error) {
144+
console.error("Error en la solicitud AJAX: " + status + " - " + error);
145+
}
146+
});
147+
}
148+
149+
$("#show_last_ten_users_button").click(function() {
150+
showLastTenUsers();
151+
});
152+
});
115153
</script>';
116154

117155
$form_sent = 0;
@@ -133,6 +171,35 @@ function change_select(reset) {
133171
api_not_allowed(true);
134172
}
135173

174+
if (ChamiloApi::isAjaxRequest() && $_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'get_last_ten_users') {
175+
$excludedUsers = isset($_POST['excludedUsers']) ? $_POST['excludedUsers'] : [];
176+
$id = isset($_POST['id']) ? intval($_POST['id']) : 0;
177+
178+
$excludedIds = !empty($excludedUsers) ? implode(",", array_map('intval', $excludedUsers)) : '0';
179+
$sql = 'SELECT id, username, firstname, lastname
180+
FROM user
181+
WHERE status != '.ANONYMOUS.'
182+
AND id NOT IN ('.$excludedIds.')
183+
ORDER BY id DESC
184+
LIMIT 10';
185+
186+
$result = Database::query($sql);
187+
$users = [];
188+
189+
while ($user = Database::fetch_array($result)) {
190+
$users[] = [
191+
'id' => $user['id'],
192+
'username' => $user['username'],
193+
'firstname' => $user['firstname'],
194+
'lastname' => $user['lastname']
195+
];
196+
}
197+
198+
header('Content-Type: application/json');
199+
echo json_encode($users);
200+
die();
201+
}
202+
136203
$first_letter_user = '';
137204

138205
if ((isset($_POST['form_sent']) && $_POST['form_sent']) || isset($_REQUEST['firstLetterUser'])) {
@@ -453,13 +520,18 @@ function formatCompleteName(array $userInfo, bool $orderListByOfficialCode): str
453520
placeholder="<?php echo get_lang('Search'); ?>"
454521
onkeydown="return 13 !== event.keyCode;">
455522
<span class="input-group-btn">
456-
<button class="btn btn-default" type="button" onclick="change_select();">
457-
<?php echo get_lang('Filter'); ?>
458-
</button>
459-
<button class="btn btn-default" type="button" onclick="change_select(true);">
460-
<?php echo get_lang('Reset'); ?>
461-
</button>
462-
</span>
523+
<button class="btn btn-default" type="button" onclick="change_select();">
524+
<?php echo get_lang('Filter'); ?>
525+
</button>
526+
<button class="btn btn-default" type="button" onclick="change_select(true);">
527+
<?php echo get_lang('Reset'); ?>
528+
</button>
529+
</span>
530+
<span class="input-group-btn">
531+
<button class="btn btn-default" type="button" id="show_last_ten_users_button" title="<?php echo get_lang('ShowLastTenUsers') ?>">
532+
<i class="fa fa-clock-o"></i>
533+
</button>
534+
</span>
463535
</div>
464536
</div>
465537
<?php

main/session/add_users_to_session.php

+117-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
* @package chamilo.admin
66
*/
77
// resetting the course id
8+
use Chamilo\CoreBundle\Component\Utils\ChamiloApi;
9+
810
$cidReset = true;
911

1012
require_once __DIR__.'/../inc/global.inc.php';
@@ -14,8 +16,8 @@
1416
// setting the section (for the tabs)
1517
$this_section = SECTION_PLATFORM_ADMIN;
1618

17-
$id_session = isset($_GET['id_session']) ? (int) $_GET['id_session'] : 0;
18-
$addProcess = isset($_GET['add']) && 'true' === $_GET['add'] ? 'true' : null;
19+
$id_session = isset($_REQUEST['id_session']) ? (int) $_REQUEST['id_session'] : 0;
20+
$addProcess = isset($_REQUEST['add']) && 'true' === $_REQUEST['add'] ? 'true' : null;
1921

2022
SessionManager::protectSession($id_session);
2123

@@ -65,6 +67,40 @@
6567
}
6668
}
6769

70+
if (ChamiloApi::isAjaxRequest() && isset($_POST['action'])) {
71+
$id_session = isset($_POST['id_session']) ? (int) $_POST['id_session'] : 0;
72+
$excludedUsers = isset($_POST['excludedUsers']) ? $_POST['excludedUsers'] : [];
73+
74+
$excludedUsersList = count($excludedUsers) > 0 ? implode(",", array_map('intval', $excludedUsers)) : '0';
75+
76+
if ($_POST['action'] == 'get_last_ten_users') {
77+
$sql = "SELECT u.id, u.username, u.firstname, u.lastname
78+
FROM $tbl_user u
79+
LEFT JOIN $tbl_session_rel_user sru ON (u.id = sru.user_id AND sru.session_id = $id_session)
80+
WHERE sru.user_id IS NULL
81+
AND u.id NOT IN ($excludedUsersList)
82+
ORDER BY u.id DESC
83+
LIMIT 10";
84+
} elseif ($_POST['action'] == 'get_all_users') {
85+
$sql = "SELECT u.id, u.username, u.firstname, u.lastname
86+
FROM $tbl_user u
87+
LEFT JOIN $tbl_session_rel_user sru ON (u.id = sru.user_id AND sru.session_id = $id_session)
88+
WHERE sru.user_id IS NULL
89+
AND u.id NOT IN ($excludedUsersList)
90+
ORDER BY u.lastname ASC, u.firstname ASC";
91+
}
92+
93+
$result = Database::query($sql);
94+
$users = [];
95+
while ($row = Database::fetch_assoc($result)) {
96+
$users[] = $row;
97+
}
98+
99+
header('Content-Type: application/json');
100+
echo json_encode($users);
101+
die();
102+
}
103+
68104
function search_users($needle, $type)
69105
{
70106
global $id_session;
@@ -304,6 +340,77 @@ function change_select(val) {
304340
xajax_search_users(val,"multiple");
305341
}
306342
</script>';
343+
$htmlHeadXtra[] = '
344+
<script>
345+
function showLastTenUsers() {
346+
var selectedUsers = [];
347+
$("#destination_users option").each(function() {
348+
selectedUsers.push($(this).val());
349+
});
350+
351+
if (selectedUsers.length === 0) {
352+
selectedUsers.push(0);
353+
}
354+
355+
var idSession = "'.(int) $id_session.'";
356+
$.post("'.api_get_self().'",
357+
{
358+
action: "get_last_ten_users",
359+
excludedUsers: selectedUsers,
360+
id_session: idSession,
361+
add: "",
362+
add_type: "multiple"
363+
}, function(data) {
364+
console.log(data);
365+
var select = document.getElementById("origin_users");
366+
select.innerHTML = "";
367+
$.each(data, function(index, user) {
368+
select.append(new Option(user.username + " - " + user.firstname + " " + user.lastname, user.id));
369+
});
370+
}, "json").fail(function(xhr, status, error) {
371+
console.error("Error en la solicitud AJAX: " + error);
372+
console.log(xhr.responseText);
373+
});
374+
}
375+
376+
function loadAllUsers() {
377+
var selectedUsers = [];
378+
379+
$("#destination_users option").each(function() {
380+
selectedUsers.push($(this).val());
381+
});
382+
383+
if (selectedUsers.length === 0) {
384+
selectedUsers.push(0);
385+
}
386+
387+
var idSession = "'.(int) $id_session.'";
388+
$.post("'.api_get_self().'",
389+
{
390+
action: "get_all_users",
391+
excludedUsers: selectedUsers,
392+
id_session: idSession,
393+
add: "",
394+
add_type: "multiple"
395+
}, function(data) {
396+
var select = document.getElementById("origin_users");
397+
select.innerHTML = "";
398+
399+
$.each(data, function(index, user) {
400+
select.append(new Option(user.username + " - " + user.firstname + " " + user.lastname, user.id));
401+
});
402+
}, "json").fail(function(xhr, status, error) {
403+
console.error("Error en la solicitud AJAX: " + error);
404+
});
405+
}
406+
407+
$(document).ready(function() {
408+
loadAllUsers();
409+
$("#show_last_ten_users_button").on("click", showLastTenUsers);
410+
$("#reset_users_button").on("click", loadAllUsers);
411+
});
412+
</script>
413+
';
307414

308415
$form_sent = 0;
309416
$errorMsg = $firstLetterUser = $firstLetterSession = '';
@@ -691,6 +798,14 @@ class="form-control">
691798
<?php
692799
echo Display::get_alphabet_options(); ?>
693800
</select>
801+
<span class="input-group-btn">
802+
<button class="btn btn-default" type="button" id="show_last_ten_users_button" title="<?php echo get_lang('ShowLastTenUsers') ?>">
803+
<i class="fa fa-clock-o"></i>
804+
</button>
805+
<button class="btn btn-default" type="button" id="reset_users_button" title="<?php echo get_lang('Reset') ?>">
806+
<i class="fa fa-refresh"></i>
807+
</button>
808+
</span>
694809
<br/>
695810
<br/>
696811
<?php

0 commit comments

Comments
 (0)