/** * Return list of marked submissions that have not been mailed out for currently enrolled students */ function facetoface_get_unmailed_reminders() { global $CFG, $DB; $submissions = $DB->get_records_sql(" SELECT su.*, f.course, f.id as facetofaceid, f.name as facetofacename, se.duration, se.normalcost, se.discountcost, se.details, se.datetimeknown FROM {facetoface_signups} su INNER JOIN {facetoface_signups_status} sus ON su.id = sus.signupid AND sus.superceded = 0 AND sus.statuscode = ? JOIN {facetoface_sessions} se ON su.sessionid = se.id JOIN {facetoface} f ON se.facetoface = f.id WHERE su.mailedreminder = 0 AND se.datetimeknown = 1 ", array(MDL_F2F_STATUS_BOOKED)); if ($submissions) { foreach ($submissions as $key => $value) { $submissions[$key]->duration = facetoface_minutes_to_hours($submissions[$key]->duration); $submissions[$key]->sessiondates = facetoface_get_session_dates($value->sessionid); } } return $submissions; }
/** * Import user and signup to session * * @access public * @param object $course Record from the course table * @param object $facetoface Record from the facetoface table * @param object $session Session to signup user to * @param mixed $userid User to signup (normally int) * @param array $params Optional suppressemail, ignoreconflicts, bulkaddsource, discountcode, notificationtype * boolean $suppressemail Suppress notifications flag * boolean $ignoreconflicts Ignore booking conflicts flag * string $bulkaddsource Flag to indicate if $userid is actually another field * string $discountcode Optional A user may specify a discount code * integer $notificationtype Optional A user may choose the type of notifications they will receive * @return array */ function facetoface_user_import($course, $facetoface, $session, $userid, $params = array()) { global $DB, $CFG, $USER; $result = array(); $result['id'] = $userid; $suppressemail = (isset($params['suppressemail']) ? $params['suppressemail'] : false); $ignoreconflicts = (isset($params['ignoreconflicts']) ? $params['ignoreconflicts'] : false); $bulkaddsource = (isset($params['bulkaddsource']) ? $params['bulkaddsource'] : 'bulkaddsourceuserid'); $discountcode = (isset($params['discountcode']) ? $params['discountcode'] : ''); $notificationtype = (isset($params['notificationtype']) ? $params['notificationtype'] : MDL_F2F_BOTH); if (isset($params['approvalreqd'])) { // Overwrite default behaviour as bulkadd_* is requested $facetoface->approvalreqd = $params['approvalreqd']; $facetoface->ccmanager = (isset($params['ccmanager']) ? $params['ccmanager'] : 0); } // Check parameters. if ($bulkaddsource == 'bulkaddsourceuserid') { if (!is_int($userid) && !ctype_digit($userid)) { $result['name'] = ''; $result['result'] = get_string('error:userimportuseridnotanint', 'facetoface', $userid); return $result; } } // Get user. switch ($bulkaddsource) { case 'bulkaddsourceuserid': $user = $DB->get_record('user', array('id' => $userid)); break; case 'bulkaddsourceidnumber': $user = $DB->get_record('user', array('idnumber' => $userid)); break; case 'bulkaddsourceusername': $user = $DB->get_record('user', array('username' => $userid)); break; } if (!$user) { $result['name'] = ''; $a = array('fieldname' => get_string($bulkaddsource, 'facetoface'), 'value' => $userid); $result['result'] = get_string('userdoesnotexist', 'facetoface', $a); return $result; } $result['name'] = fullname($user); if (isguestuser($user)) { $a = array('fieldname' => get_string($bulkaddsource, 'facetoface'), 'value' => $userid); $result['result'] = get_string('cannotsignupguest', 'facetoface', $a); return $result; } // Make sure that the user is enroled in the course $context = context_course::instance($course->id); if (!is_enrolled($context, $user)) { $defaultlearnerrole = $DB->get_record('role', array('id' => $CFG->learnerroleid)); if (!enrol_try_internal_enrol($course->id, $user->id, $defaultlearnerrole->id, time())) { $result['result'] = get_string('error:enrolmentfailed', 'facetoface', fullname($user)); return $result; } } // Check if they are already signed up $minimumstatus = ($session->datetimeknown) ? MDL_F2F_STATUS_BOOKED : MDL_F2F_STATUS_REQUESTED; // If multiple sessions are allowed then just check against this session // Otherwise check against all sessions $multisessionid = ($facetoface->multiplesessions ? $session->id : null); if (facetoface_get_user_submissions($facetoface->id, $user->id, $minimumstatus, MDL_F2F_STATUS_FULLY_ATTENDED, $multisessionid)) { if ($user->id == $USER->id) { $result['result'] = get_string('error:addalreadysignedupattendeeaddself', 'facetoface'); } else { $result['result'] = get_string('error:addalreadysignedupattendee', 'facetoface'); } return $result; } if (!facetoface_session_has_capacity($session, $context)) { if ($session->allowoverbook) { $status = MDL_F2F_STATUS_WAITLISTED; } else { $result['result'] = get_string('full', 'facetoface'); return $result; } } // Check if we are waitlisting or booking if ($session->datetimeknown) { if (!isset($status)) { $status = MDL_F2F_STATUS_BOOKED; } // Check if there are any date conflicts if (!$ignoreconflicts) { $dates = facetoface_get_session_dates($session->id); if ($availability = facetoface_get_sessions_within($dates, $user->id)) { $result['result'] = facetoface_get_session_involvement($user, $availability); $result['conflict'] = true; return $result; } } } else { $status = MDL_F2F_STATUS_WAITLISTED; } // Finally attempt to enrol if (!facetoface_user_signup( $session, $facetoface, $course, $discountcode, $notificationtype, $status, $user->id, !$suppressemail)) { $result['result'] = get_string('error:addattendee', 'facetoface', fullname($user)); return $result; } $result['result'] = true; return $result; }
function simple_template_for_batches($facetofaceid,$session_cancel=0){ global $DB,$CFG,$USER,$SITE; $sentby_name=fullname($DB->get_record('user',array('id'=>$USER->id))); $sentby_id=$USER->id; $facetoface=$DB->get_record_sql("SELECT * FROM {facetoface} where id=$facetofaceid"); if($session_cancel==0 || $session_cancel==2){ $facetofacesessions=$DB->get_records_sql("SELECT * FROM {facetoface_sessions} fss JOIN {facetoface_sessions_dates} as fsd ON fsd.sessionid=fss.id where facetoface=$facetoface->id"); } //print_object($facetofacesessions); $facetoface_users=$DB->get_records_sql("SELECT * FROM {local_batch_users} where f2fid=$facetoface->id"); $facetoface_course=$DB->get_record_sql("SELECT * FROM {local_batch_courses} where batchid=$facetoface->id"); if((!empty($facetoface)) && (!empty($facetoface_users))){ $mail=new stdClass(); switch($facetoface->active){ case 1: if($session_cancel==0){ $mailsubject=get_string('subject_active', 'facetoface'); }elseif($session_cancel==2){ $mailsubject=get_string('subject_active_session_cancel', 'facetoface'); } $mail->batch_status=get_string('batch_active', 'facetoface'); break; case 8: $mailsubject=get_string('subject_complete', 'facetoface'); $mail->batch_status=get_string('batch_complete', 'facetoface'); break; case 2: $mailsubject=get_string('subject_cancel', 'facetoface'); $mail->batch_status=get_string('batch_cancel', 'facetoface'); break; case 0: $batch_cousre=$DB->get_record('course',array('id'=>$facetoface_course->courseid)); $tataaia = new stdclass(); $tataaia->picture3 = $CFG->wwwroot.'/mod/facetoface/pix/Picture3.png'; $tataaia->picture2 = $CFG->wwwroot.'/mod/facetoface/pix/Picture2.png'; $tataaia->programname = $batch_cousre->fullname; $tataaia->date = date("d M, Y ",$facetoface->startdate); $tataaia->time = date("g:i a",$facetoface->startdate);; $tataaia->venue = 'Thane Training Room'; $tataaia->summary =strip_tags($batch_cousre->summary); $tataaia->summary2 = 'Request you to please discuss with your supervisor, plan your work and make sure that you attend this program'; $tataaia->senderfullname = 'Jagadeep M.P'; $tataaia->designation = 'Manager-Training & Development'; $tataaia->mobileno = '9000 469 5151'; $mailsubject="Batch Start Invitation"; $mail->batch_status=get_string('batch_active', 'facetoface'); } $mail->batch_name=$facetoface->name; $mail->batch_startdate=date("d M, Y ",$facetoface->startdate); $mail->batch_enddate=date("d M, Y ",$facetoface->enddate); $tariner_name=$DB->get_record('user',array('id'=>$facetoface->trainerid)); $mail->tariner_name=fullname($tariner_name); if($facetoface_course){ if($facetoface_course->courseid!=0){ $batch_cousre=$DB->get_field('course','fullname',array('id'=>$facetoface_course->courseid)); $mail->batch_course=$batch_cousre; }else{ $mail->batch_course="-----"; } if($facetoface_course->testid!=0){ $quiz=$DB->get_record('quiz',array('id'=>$facetoface_course->testid)); $mail->test_name=$quiz->name; $course_completion_check=$DB->record_exists_sql("SELECT * FROM {course_completion_criteria} cc, {course} c Where c.id=$facetoface_course->courseid and c.id=cc.course and c.enablecompletion=1 AND cc.module IS NOT NULL AND cc.moduleinstance in (SELECT id FROM {course_modules} where course=$facetoface_course->courseid and instance=$facetoface_course->testid)"); if($course_completion_check==1){ $mail->test_status=get_string('test_completed', 'facetoface'); }else{ $mail->test_status=get_string('test_not_completed', 'facetoface'); } }else{ $mail->test_name="-----"; $mail->test_status="-----"; } } if($facetofacesessions && ($session_cancel==0 || $session_cancel==2)){ $session_mail='<h2 style="text-align:center;font-weight:bold;">SESSION DETAILS</h2>'; $session_mail.='<table style="border:1px solid #333;">'; $i=1; foreach($facetofacesessions as $sessiondate){ //print_object($sessiondate); $sessiondates=new stdClass(); $timenow = time(); if (!empty($html)) { $html= html_writer::empty_tag('br'); } $sessionobj = facetoface_format_session_times($sessiondate->timestart, $sessiondate->timefinish, $sessiondate->sessiontimezone); if ($sessionobj->startdate == $sessionobj->enddate) { $html .= $sessionobj->startdate . ', '; } else { $html .= $sessionobj->startdate . ' - ' . $sessionobj->enddate . ', '; } $html .= $sessionobj->starttime . ' - ' . $sessionobj->endtime . ' ' . $sessionobj->timezone; $duration=round(($sessiondate->duration/60),2); $session_mail.='<tr>'; $session_mail.='<td style="border:1px solid #333;">Session '.$i.' '.'Timings : </td>'; $session_mail.='<td style="border:1px solid #333;"><b>'.$html.'</b></td>'; $session_mail.='<td style="border:1px solid #333;">Duration : </td>'; $session_mail.='<td style="border:1px solid #333;"><b>'.$duration.' Hours </b></td>'; if ($sessiondate->roomid) { $room = $DB->get_record('facetoface_room', array('id' => $sessiondate->roomid)); $sessionroom = $room->name." ". $room->building." ".$room->address; }else{ $sessionroom = "----"; } $sessiondates->datetimeknown=$sessiondate->datetimeknown; $sessiondates->sessiondates=facetoface_get_session_dates($sessiondate->id); //print_object($sessiondates); $session_cancel=$DB->get_record_sql("SELECT * FROM {facetoface_signups} as fsg JOIN {facetoface_signups_status} as fsst on fsst.signupid=fsg.id where fsg.sessionid=$sessiondate->id group by fsg.sessionid"); if($session_cancel->statuscode==10){ $status = get_string('sessionincancel', 'facetoface'); }else{ if ($sessiondate->datetimeknown && facetoface_has_session_started($sessiondates, $timenow) && !facetoface_is_session_in_progress($sessiondates, $timenow)) { $status = get_string('sessioninprogress', 'facetoface'); } else if ($sessiondate->datetimeknown && facetoface_has_session_started($sessiondates, $timenow)&&facetoface_is_session_in_progress($sessiondates, $timenow)) { $status = get_string('sessionover', 'facetoface'); } } $session_mail.='<td style="border:1px solid #333;">Room : </td>'; $session_mail.='<td style="border:1px solid #333;"><b>'.$sessionroom.'</b></td>'; $session_mail.='<td style="border:1px solid #333;">Status : </td>'; $session_mail.='<td style="border:1px solid #333;"><b>'.$status.'</b></td>'; $session_mail.='</tr>'; $i++; } $session_mail.='</table>'; $mail->sessions_details=$session_mail; }else{ $mail->sessions_details=""; } $userenrolments=array(); foreach($facetoface_users as $facetoface_user){ $user=$DB->get_record('user',array('id'=>$facetoface_user->userid)); if($facetoface_course){ $userenrolments[]=$DB->get_record_sql("SELECT * FROM {user_enrolments} where userid=$facetoface_user->userid and enrolid in (SELECT id FROM {enrol} where courseid=$facetoface_course->courseid and enrol='manual')"); } } $emai_users=email_send_users_list($userenrolments,$facetoface_course->courseid,$facetoface->trainerid); $to_emailid=$emai_users[0]; $to_userid=$emai_users[1]; //print_object($emai_users); $from = $DB->get_record('user',array('id'=>2)); $messagetext='Batch'; if($facetoface->active==0){ $messagetext_fr=get_string('first_time_notify', 'facetoface',$tataaia); $messagehtml=text_to_html($messagetext_fr); }else{ $messagetext_fr=get_string('batch_mail', 'facetoface',$mail); $messagehtml=text_to_html($messagetext_fr); } if((!empty($to_emailid))&&(!empty($to_userid))){ $sucess=email_logs_insert_table($to_emailid,$to_userid,$from->email,$from->id,$mailsubject,$messagehtml,$sentby_id,$sentby_name,$facetoface_course->courseid,$facetofaceid); return $sucess; } } }
/** * Return list of marked submissions that have not been mailed out for currently enrolled students */ function facetoface_get_unmailed_reminders() { global $CFG, $DB; $submissions = $DB->get_records_sql("\n SELECT\n su.*,\n f.course,\n f.id as facetofaceid,\n f.name as facetofacename,\n f.reminderperiod,\n se.duration,\n se.normalcost,\n se.discountcost,\n se.details,\n se.datetimeknown\n FROM\n {facetoface_signups} su\n INNER JOIN\n {facetoface_signups_status} sus\n ON su.id = sus.signupid\n AND sus.superceded = 0\n AND sus.statuscode = ?\n JOIN\n {facetoface_sessions} se\n ON su.sessionid = se.id\n JOIN\n {facetoface} f\n ON se.facetoface = f.id\n WHERE\n su.mailedreminder = 0\n AND se.datetimeknown = 1\n ", array(MDL_F2F_STATUS_BOOKED)); if ($submissions) { foreach ($submissions as $key => $value) { $submissions[$key]->duration = facetoface_minutes_to_hours($submissions[$key]->duration); $submissions[$key]->sessiondates = facetoface_get_session_dates($value->sessionid); } } return $submissions; }
// Get signups from the DB $bookings = $DB->get_records_sql("SELECT ss.timecreated, ss.statuscode, ss.grade, ss.note, c.id as courseid, c.fullname AS coursename, f.name, f.id as facetofaceid, s.id as sessionid, d.id, d.timestart, d.timefinish, d.sessiontimezone FROM {facetoface_sessions_dates} d JOIN {facetoface_sessions} s ON s.id = d.sessionid JOIN {facetoface} f ON f.id = s.facetoface JOIN {facetoface_signups} su ON su.sessionid = s.id JOIN {facetoface_signups_status} ss ON ss.signupid = su.id JOIN {course} c ON f.course = c.id WHERE su.userid = ? AND su.sessionid = ? AND f.id = ? ORDER BY ss.timecreated ASC", array($user->id, $session->id, $session->facetoface)); // Get session times $sessiontimes = facetoface_get_session_dates($session->id); if ($user->id != $USER->id) { $fullname = html_writer::link(new moodle_url('/user/view.php', array('id' => $user->id, 'course' => $course->id)), fullname($user)); $heading = get_string('bookinghistoryfor', 'block_facetoface', $fullname); echo $OUTPUT->heading($heading); } else { echo html_writer::empty_tag('br'); } echo $OUTPUT->heading(get_string('sessiondetails', 'block_facetoface')); // print the session information $cm = get_coursemodule_from_instance('facetoface', $facetoface->id, $course->id); $contextmodule = context_module::instance($cm->id); $viewattendees = has_capability('mod/facetoface:viewattendees', $contextmodule);
function facetoface_get_custom_sessions($facetofaceid, $location='') { global $CFG,$DB,$USER; $fromclause = "FROM {facetoface} fa,{facetoface_sessions} s"; $locationwhere = ''; $locationparams = array(); if (!empty($location)) { $fromclause = "FROM {facetoface_session_data} d JOIN {facetoface_sessions} s ON s.id = d.sessionid"; $locationwhere .= " AND d.data = ?"; $locationparams[] = $location; } $sessions = $DB->get_records_sql("SELECT s.*,fa.name $fromclause LEFT OUTER JOIN (SELECT sessionid, min(timestart) AS mintimestart FROM {facetoface_sessions_dates} GROUP BY sessionid) m ON m.sessionid = s.id LEFT JOIN {facetoface_signups} fs ON fs.sessionid=s.id WHERE s.facetoface=fa.id AND fs.userid={$USER->id} $locationwhere ORDER BY s.datetimeknown, m.mintimestart"); if ($sessions) { foreach ($sessions as $key => $value) { $sessions[$key]->duration = facetoface_minutes_to_hours($sessions[$key]->duration); $sessions[$key]->sessiondates = facetoface_get_session_dates($value->id); } } return $sessions; }
function test_facetoface_get_session_dates() { // Test variables. $sessionid1 = 1; $sessionid2 = 10; // Test for valid case. $this->assertTrue((bool)facetoface_get_session_dates($sessionid1), $this->msgtrue); // Test for invalid case. $this->assertFalse((bool)facetoface_get_session_dates($sessionid2), $this->msgfalse); $this->resetAfterTest(true); }