Reporting - Add filters by extra field and send emails for user list in reporting - refs BT#19503

pull/4107/head
Christian 4 years ago
parent 84f53a6a95
commit 49cd80e7b2
  1. 7
      main/inc/lib/tracking.lib.php
  2. 129
      main/mySpace/student.php

@ -6406,7 +6406,7 @@ class Tracking
*
* @return mixed
*/
public static function setUserSearchForm($form)
public static function setUserSearchForm($form, $displayExtraFields = false)
{
global $_configuration;
$form->addElement('text', 'keyword', get_lang('Keyword'));
@ -6433,6 +6433,11 @@ class Tracking
]
);
if ($displayExtraFields) {
$extraField = new ExtraField('user');
$extraField->addElements($form, 0, [], true, false);
}
$form->addButtonSearch(get_lang('Search'));
return $form;

@ -128,11 +128,47 @@ function get_users($from, $limit, $column, $direction)
$url = $webCodePath.'mySpace/myStudents.php';
// Filter by Extra Fields
$useExtraFields = false;
$extraFieldResult = [];
foreach ($_GET as $key => $value) {
if (substr($key, 0, 6) == 'extra_') {
$variable = substr($key, 6);
if (UserManager::is_extra_field_available($variable) && !empty($value)) {
$useExtraFields = true;
$extraFieldResult[] = UserManager::get_extra_user_data_by_value(
$variable,
$value,
true
);
}
}
}
$filterUsers = [];
if ($useExtraFields) {
if (count($extraFieldResult) > 1) {
for ($i = 0; $i < count($extraFieldResult) - 1; $i++) {
if (is_array($extraFieldResult[$i + 1])) {
$filterUsers = array_intersect($extraFieldResult[$i], $extraFieldResult[$i + 1]);
}
}
} else {
$filterUsers = $extraFieldResult[0];
}
}
$all_datas = [];
foreach ($students as $student_data) {
$student_id = $student_data['user_id'];
$student_data = api_get_user_info($student_id);
if ($useExtraFields) {
if (!in_array($student_id, $filterUsers)) {
continue;
}
}
if (isset($_GET['id_session'])) {
$courses = Tracking :: get_course_list_in_session_from_student($student_id, $sessionId);
}
@ -176,6 +212,7 @@ function get_users($from, $limit, $column, $direction)
}
$row = [];
$row[] = $student_id;
if ($is_western_name_order) {
$first = Display::url($student_data['firstname'], $urlDetails);
$last = Display::url($student_data['lastname'], $urlDetails);
@ -323,17 +360,24 @@ $params = [
];
$table->set_additional_parameters($params);
$table->set_header(0, '&nbsp;', false);
if ($is_western_name_order) {
$table->set_header(0, get_lang('FirstName'), false);
$table->set_header(1, get_lang('LastName'), false);
$table->set_header(1, get_lang('FirstName'), false);
$table->set_header(2, get_lang('LastName'), false);
} else {
$table->set_header(0, get_lang('LastName'), false);
$table->set_header(2, get_lang('LastName'), false);
$table->set_header(1, get_lang('FirstName'), false);
}
$table->set_header(2, get_lang('FirstLogin'), false);
$table->set_header(3, get_lang('LastConnexion'), false);
$table->set_header(4, get_lang('Details'), false);
$table->set_header(3, get_lang('FirstLogin'), false);
$table->set_header(4, get_lang('LastConnexion'), false);
$table->set_header(5, get_lang('Details'), false);
// Only show empty actions bar if delete users has been blocked
$actionsList = [];
$actionsList['send_emails'] = get_lang('SendEmail');
$table->set_form_actions($actionsList);
if ($export_csv) {
if ($is_western_name_order) {
@ -358,7 +402,7 @@ $form = new FormValidator(
'get',
$webCodePath.'mySpace/student.php'
);
$form = Tracking::setUserSearchForm($form);
$form = Tracking::setUserSearchForm($form, true);
$form->setDefaults($params);
if ($export_csv) {
@ -372,7 +416,60 @@ if ($export_csv) {
Export::arrayToCsv($csv_content, 'reporting_student_list');
exit;
} else {
// It sends the email to selected users
if (isset($_POST['action']) && 'send_message' == $_POST['action']) {
$subject = isset($_POST['subject']) ? $_POST['subject'] : '';
$message = isset($_POST['message']) ? $_POST['message'] : '';
$users = isset($_POST['uid']) ? $_POST['uid'] : '';
if (!empty($subject) && !empty($message) && !empty($users)) {
foreach ($users as $uid) {
$userInfo = api_get_user_info($uid);
MessageManager::sendMessageAboutUser(
$userInfo,
api_get_user_info(),
$subject,
$message
);
}
Display::addFlash(Display::return_message(get_lang('MessageSent')));
}
}
$script = '<script>
$(function() {
$("#form_tracking_student_id input[type=\"checkbox\"]").on("click", function() {
$("#compose_message").hide();
});
});
function action_click(element, table_id) {
this.event.preventDefault();
var amIChecked = false;
$(".hd-users").remove();
$("#form_tracking_student_id input[type=\"checkbox\"]").each(function() {
if (this.checked) {
amIChecked = true;
var input = $("<input>", {
type: "hidden",
name: "uid[]",
value: this.value,
class: "hd-users",
});
$("#students_messages").append(input);
}
});
if (!amIChecked) {
alert("'.get_lang('YouMustSelectAtLeastOneDestinee').'");
return false;
}
$("#compose_message").show();
return false;
}
</script>
';
Display::display_header($nameTools);
$token = Security::get_token();
echo $toolbar;
echo Display::page_subheader($nameTools);
if (isset($active)) {
@ -385,6 +482,24 @@ if ($export_csv) {
}
$form->display();
$table->display();
$frmMessage = new FormValidator(
'students_messages',
'post',
api_get_self(),
);
$frmMessage->addHtml('<div id="compose_message" style="display:none;">');
$frmMessage->addText('subject', get_lang('Subject'));
$frmMessage->addRule('subject', 'obligatorio', 'required');
$frmMessage->addHtmlEditor('message', get_lang('Message'));
$frmMessage->addButtonSend(get_lang('Send'));
$frmMessage->addHidden('sec_token', $token);
$frmMessage->addHidden('action', 'send_message');
$frmMessage->addHtml('</div>');
$frmMessage->display();
echo $script;
}
Display::display_footer();

Loading…
Cancel
Save