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')), 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, $exerciseId = 0,
$courseId = 0, $courseId = 0,
$sessionId = 0, $sessionId = 0,
$count = false) $count = false,
{ $toUsers = []
) {
$data = []; $data = [];
$sessionId = empty($sessionId) ? api_get_session_id() : (int) $sessionId; $sessionId = empty($sessionId) ? api_get_session_id() : (int) $sessionId;
$courseId = empty($courseId) ? api_get_course_id() : (int) $courseId; $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); $tblSessionRelUser = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$tblQuiz = Database::get_course_table(TABLE_QUIZ_TEST); $tblQuiz = Database::get_course_table(TABLE_QUIZ_TEST);
$countSelect = " count(*) as total"; $countSelect = " count(*) as total";
$sqlToUsers = '';
if (0 == $sessionId) { if (0 == $sessionId) {
// Courses // Courses
if (false === $count) { if (false === $count) {
@ -10998,12 +11003,15 @@ class Exercise
INNER JOIN $tblCourse as c ON ( cru.c_id = c.id ) INNER JOIN $tblCourse as c ON ( cru.c_id = c.id )
INNER JOIN $tblQuiz as cq ON ( cq.c_id = c.id ) INNER JOIN $tblQuiz as cq ON ( cq.c_id = c.id )
WHERE WHERE
cru.is_tutor = 0 cru.is_tutor is null
AND ( cq.session_id = 0 or cq.session_id is null) AND ( cq.session_id = 0 or cq.session_id is null)
AND cq.active > 0 AND cq.active > 0
AND cq.c_id = $courseId AND cq.c_id = $courseId
AND cq.iid = $exerciseId AND cq.iid = $exerciseId
ORDER BY cq.c_id"; ";
if (!empty($toUsers)) {
$sqlToUsers = ' AND cru.user_id IN ('.implode(',', $toUsers).') ';
}
} else { } else {
//Sessions //Sessions
if (false === $count) { if (false === $count) {
@ -11012,12 +11020,15 @@ class Exercise
cq.iid as quiz_id, cq.iid as quiz_id,
sru.user_id as user_id, sru.user_id as user_id,
cq.c_id as course_id, cq.c_id as course_id,
cq.session_id as session_id, sru.session_id as session_id,
c.title as title, c.title as title,
c.`code` as 'code', c.`code` as 'code',
cq.active as active cq.active as active
"; ";
} }
if (!empty($toUsers)) {
$sqlToUsers = ' AND sru.user_id IN ('.implode(',', $toUsers).') ';
}
$sql = " $sql = "
SELECT SELECT
$countSelect $countSelect
@ -11030,9 +11041,9 @@ class Exercise
AND cq.c_id = $courseId AND cq.c_id = $courseId
AND sru.session_id = $sessionId AND sru.session_id = $sessionId
AND cq.iid = $exerciseId AND cq.iid = $exerciseId
ORDER BY ";
cq.c_id";
} }
$sql .= " $sqlToUsers ORDER BY cq.c_id ";
$result = Database::query($sql); $result = Database::query($sql);
$data = Database::store_result($result); $data = Database::store_result($result);
@ -11040,7 +11051,16 @@ class Exercise
if (true === $count) { if (true === $count) {
return (isset($data[0]) && isset($data[0]['total'])) ? $data[0]['total'] : 0; 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; return $data;
} }
@ -11055,12 +11075,15 @@ class Exercise
public static function notifyUsersOfTheExercise( public static function notifyUsersOfTheExercise(
$exerciseId = 0, $exerciseId = 0,
$courseId = 0, $courseId = 0,
$sessionId = 0 $sessionId = 0,
$toUsers = []
) { ) {
$users = self::getUsersInExercise( $users = self::getUsersInExercise(
$exerciseId, $exerciseId,
$courseId, $courseId,
$sessionId $sessionId,
false,
$toUsers
); );
$totalUsers = count($users); $totalUsers = count($users);
$usersArray = []; $usersArray = [];

@ -19,6 +19,81 @@ $this_section = SECTION_COURSES;
$htmlHeadXtra[] = api_get_asset('qtip2/jquery.qtip.min.js'); $htmlHeadXtra[] = api_get_asset('qtip2/jquery.qtip.min.js');
$htmlHeadXtra[] = api_get_css_asset('qtip2/jquery.qtip.min.css'); $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); api_protect_course_script(true);
@ -411,18 +486,39 @@ if ($is_allowedToEdit) {
'confirmation' 'confirmation'
)); ));
break; 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': case 'send_reminder':
api_set_more_memory_and_time_limits();
$objExerciseTmp->notifyUsersOfTheExercise( $users = Exercise::getUsersInExercise(
$exerciseId, $objExerciseTmp->id,
$courseId, $courseId,
$sessionId $sessionId
); );
echo json_encode($users);
exit();
Display::addFlash(Display::return_message(
get_lang('AnnounceSentByEmail'),
'confirmation'
));
break; break;
} }
header('Location: '.$currentUrl); header('Location: '.$currentUrl);

Loading…
Cancel
Save