RemedialCourse: :Added modal to select users to send reminder #18221 - refs BT#18221

pull/3886/head
Carlos Alvarado 5 years ago committed by Angel Fernando Quiroz Campos
parent c64b2582ca
commit 20753e5af1
  1. 45
      main/exercise/exercise.class.php
  2. 110
      main/exercise/exercise.php

@ -9659,7 +9659,10 @@ class Exercise
Display::return_icon('announce.png', get_lang('EmailNotifySubscription')),
'',
[
'href' => 'exercise.php?'.api_get_cidreq().'&choice=send_reminder&sec_token='.$token.'&exerciseId='.$row['id'],
'href' => '#!',
'onclick' => 'showUserToSendNotificacion(this)',
'data-link' => 'exercise.php?'.api_get_cidreq().'&choice=send_reminder&sec_token='.$token.'&exerciseId='.$row['id'],
]
);
}
@ -10961,8 +10964,9 @@ class Exercise
$exerciseId = 0,
$courseId = 0,
$sessionId = 0,
$count = false)
{
$count = false,
$toUsers = []
) {
$data = [];
$sessionId = empty($sessionId) ? api_get_session_id() : (int) $sessionId;
$courseId = empty($courseId) ? api_get_course_id() : (int) $courseId;
@ -10975,6 +10979,7 @@ class Exercise
$tblSessionRelUser = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$tblQuiz = Database::get_course_table(TABLE_QUIZ_TEST);
$countSelect = " count(*) as total";
$sqlToUsers = '';
if (0 == $sessionId) {
// Courses
if (false === $count) {
@ -10998,12 +11003,15 @@ class Exercise
INNER JOIN $tblCourse as c ON ( cru.c_id = c.id )
INNER JOIN $tblQuiz as cq ON ( cq.c_id = c.id )
WHERE
cru.is_tutor = 0
cru.is_tutor is null
AND ( cq.session_id = 0 or cq.session_id is null)
AND cq.active > 0
AND cq.c_id = $courseId
AND cq.iid = $exerciseId
ORDER BY cq.c_id";
";
if (!empty($toUsers)) {
$sqlToUsers = ' AND cru.user_id IN ('.implode(',', $toUsers).') ';
}
} else {
//Sessions
if (false === $count) {
@ -11012,12 +11020,15 @@ class Exercise
cq.iid as quiz_id,
sru.user_id as user_id,
cq.c_id as course_id,
cq.session_id as session_id,
sru.session_id as session_id,
c.title as title,
c.`code` as 'code',
cq.active as active
";
}
if (!empty($toUsers)) {
$sqlToUsers = ' AND sru.user_id IN ('.implode(',', $toUsers).') ';
}
$sql = "
SELECT
$countSelect
@ -11030,9 +11041,9 @@ class Exercise
AND cq.c_id = $courseId
AND sru.session_id = $sessionId
AND cq.iid = $exerciseId
ORDER BY
cq.c_id";
";
}
$sql .= " $sqlToUsers ORDER BY cq.c_id ";
$result = Database::query($sql);
$data = Database::store_result($result);
@ -11040,7 +11051,16 @@ class Exercise
if (true === $count) {
return (isset($data[0]) && isset($data[0]['total'])) ? $data[0]['total'] : 0;
}
$usersArray = [];
foreach($data as $index =>$item){
if(isset($item['user_id'])){
if(!isset($usersArray[$item['user_id']])){
$usersArray[$item['user_id']] = api_get_user_info($item['user_id']);
}
$userData = $usersArray[$item['user_id']];
$data[$index]['user_name']=$userData['complete_name'];
}
}
return $data;
}
@ -11055,12 +11075,15 @@ class Exercise
public static function notifyUsersOfTheExercise(
$exerciseId = 0,
$courseId = 0,
$sessionId = 0
$sessionId = 0,
$toUsers = []
) {
$users = self::getUsersInExercise(
$exerciseId,
$courseId,
$sessionId
$sessionId,
false,
$toUsers
);
$totalUsers = count($users);
$usersArray = [];

@ -19,6 +19,81 @@ $this_section = SECTION_COURSES;
$htmlHeadXtra[] = api_get_asset('qtip2/jquery.qtip.min.js');
$htmlHeadXtra[] = api_get_css_asset('qtip2/jquery.qtip.min.css');
$htmlHeadXtra[] = "
<div class=\"modal fade\" id=\"NotificarUsuarios\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\">
<div class=\"modal-dialog\" role=\"document\">
<div class=\"modal-content\">
<div class=\"modal-header\">
<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">
<span aria-hidden=\"true\">&times;</span></button>
<h4 class=\"modal-title\" id=\"myModalLabel\">
</h4>
</div>
<div class=\"modal-body\">
<form action=\"#\" class=\"form-horizontal\">
<div class='col-md-6'>
".get_lang('EmailNotifySubscription')."
</div>
<div class='col-md-6'>
<select
class=\"selectpicker form-control\"
multiple=\"multiple\"
id=\"toUsers\"
name=\"toUsers\"
>
<option value=\"\">-</option>
</select>
</div>
<input class='hidden' id='urlTo' type='hidden'>
</form>
<div class='clearfix clear-fix'></div>
</div>
<div class=\"modal-footer\">
<button type=\"button\" class=\"btn btn-default\" onclick='sendNotificationToUsers()' data-dismiss=\"modal\">".get_lang('SendMailToUsers')."
</button>
<button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">".get_lang('Close')."
</button>
</div>
</div>
</div>
</div>";
$htmlHeadXtra[] = '<script>
function sendNotificationToUsers(){
var sendTo = $("#toUsers").val().join(",");
var url = $("#urlTo").val() + sendTo;
$("#toUsers").find("option").remove().end().selectpicker("refresh");
$.ajax({
url: url,
dataType: "json"
}).done(function(response) {
$("#cm-tools").html(response.message);
}).always(function() {
$("#toUsers").find("option").remove().end().selectpicker("refresh");
$("#urlTo").val("");
});
}
function showUserToSendNotificacion(element){
var url = $(element).data("link");
$("#toUsers").find("option").remove().end().selectpicker("refresh");
$("#urlTo").val("");
$.ajax({
url: url,
dataType: "json",
}).done(function(response) {
$("#toUsers").find("option").remove().end().selectpicker("refresh");
$.each(response,function(a,b){
$("#toUsers").append($("<option>", {
value: b.user_id,
text: b.user_name
}));
});
$("#urlTo").val($(element).data("link").replace("send_reminder","send_reminder_to") + "&users=")
$("#toUsers").selectpicker("refresh");
$("#NotificarUsuarios").modal()
});
}
</script>';
api_protect_course_script(true);
@ -411,18 +486,39 @@ if ($is_allowedToEdit) {
'confirmation'
));
break;
case 'send_reminder_to':
$toUsers = isset($_GET['users'])?$_GET['users']:null;
if(
!empty($toUsers) &&
!empty($exerciseId)
) {
$toUsers = explode(',',$toUsers);
api_set_more_memory_and_time_limits();
Exercise::notifyUsersOfTheExercise(
$exerciseId,
$courseId,
$sessionId,
$toUsers
);
echo json_encode([
'message'=>Display::return_message(
get_lang('AnnounceSentByEmail'),
'confirmation'
),
]);
}
exit();
break;
case 'send_reminder':
api_set_more_memory_and_time_limits();
$objExerciseTmp->notifyUsersOfTheExercise(
$exerciseId,
$users = Exercise::getUsersInExercise(
$objExerciseTmp->id,
$courseId,
$sessionId
);
echo json_encode($users);
exit();
Display::addFlash(Display::return_message(
get_lang('AnnounceSentByEmail'),
'confirmation'
));
break;
}
header('Location: '.$currentUrl);

Loading…
Cancel
Save