/** * Add a record to the facetoface submissions table and sends out an * email confirmation * * @param class $session record from the facetoface_sessions table * @param class $facetoface record from the facetoface table * @param class $course record from the course table * @param string $discountcode code entered by the user * @param integer $notificationtype type of notifications to send to user * @see {{MDL_F2F_INVITE}} * @param integer $statuscode Status code to set * @param integer $userid user to signup * @param bool $notifyuser whether or not to send an email confirmation * @param bool $displayerrors whether or not to return an error page on errors */ function facetoface_user_signup($session, $facetoface, $course, $discountcode, $notificationtype, $statuscode, $userid = false, $notifyuser = true) { global $CFG, $DB; // Get user ID. if (!$userid) { global $USER; $userid = $USER->id; } $return = false; $timenow = time(); // Check to see if a signup already exists. if ($existingsignup = $DB->get_record('facetoface_signups', array('sessionid' => $session->id, 'userid' => $userid))) { $usersignup = $existingsignup; } else { // Otherwise, prepare a signup object. $usersignup = new stdclass(); $usersignup->sessionid = $session->id; $usersignup->userid = $userid; } $usersignup->mailedreminder = 0; $usersignup->notificationtype = $notificationtype; $usersignup->discountcode = trim(strtoupper($discountcode)); if (empty($usersignup->discountcode)) { $usersignup->discountcode = null; } // Update/insert the signup record. if (!empty($usersignup->id)) { $success = $DB->update_record('facetoface_signups', $usersignup); } else { $usersignup->id = $DB->insert_record('facetoface_signups', $usersignup); $success = (bool) $usersignup->id; } if (!$success) { print_error('error:couldnotupdatef2frecord', 'facetoface'); return false; } // Work out which status to use. // If approval not required. if (!$facetoface->approvalreqd) { $newstatus = $statuscode; } else { // If approval required. // Get current status (if any). $currentstatus = $DB->get_field('facetoface_signups_status', 'statuscode', array('signupid' => $usersignup->id, 'superceded' => 0)); // If approved, then no problem. if ($currentstatus == MDL_F2F_STATUS_APPROVED) { $newstatus = $statuscode; } else { if ($session->datetimeknown) { // Otherwise, send manager request. $newstatus = MDL_F2F_STATUS_REQUESTED; } else { $newstatus = MDL_F2F_STATUS_WAITLISTED; } } } // Update status. if (!facetoface_update_signup_status($usersignup->id, $newstatus, $userid)) { print_error('error:f2ffailedupdatestatus', 'facetoface'); return false; } // Add to user calendar -- if facetoface usercalentry is set to true. if ($facetoface->usercalentry) { if (in_array($newstatus, array(MDL_F2F_STATUS_BOOKED, MDL_F2F_STATUS_WAITLISTED))) { facetoface_add_session_to_calendar($session, $facetoface, 'user', $userid, 'booking'); } } // Course completion. if (in_array($newstatus, array(MDL_F2F_STATUS_BOOKED, MDL_F2F_STATUS_WAITLISTED))) { $completion = new completion_info($course); if ($completion->is_enabled()) { $ccdetails = array('course' => $course->id, 'userid' => $userid); $cc = new completion_completion($ccdetails); $cc->mark_inprogress($timenow); } } // If session has already started, do not send a notification. if (facetoface_has_session_started($session, $timenow)) { $notifyuser = false; } // Send notification. if ($notifyuser) { // If booked/waitlisted. switch ($newstatus) { case MDL_F2F_STATUS_BOOKED: $error = facetoface_send_confirmation_notice($facetoface, $session, $userid, $notificationtype, false); break; case MDL_F2F_STATUS_WAITLISTED: $error = facetoface_send_confirmation_notice($facetoface, $session, $userid, $notificationtype, true); break; case MDL_F2F_STATUS_REQUESTED: $error = facetoface_send_request_notice($facetoface, $session, $userid); break; } if (!empty($error)) { print_error($error, 'facetoface'); return false; } if (!$DB->update_record('facetoface_signups', $usersignup)) { print_error('error:couldnotupdatef2frecord', 'facetoface'); return false; } } return true; }
/** * Add a record to the facetoface submissions table and sends out an * email confirmation * * @param class $session record from the facetoface_sessions table * @param class $facetoface record from the facetoface table * @param class $course record from the course table * @param string $discountcode code entered by the user * @param integer $notificationtype type of notifications to send to user * @see {{MDL_F2F_INVITE}} * @param integer $statuscode Status code to set * @param integer $userid user to signup * @param bool $notifyuser whether or not to send an email confirmation * @param bool $displayerrors whether or not to return an error page on errors */ function facetoface_user_signup($session, $facetoface, $course, $discountcode, $notificationtype, $statuscode, $userid = false, $notifyuser = true) { global $DB, $OUTPUT, $USER; // Get user id if (!$userid) { $userid = $USER->id; } $return = false; $timenow = time(); // Check to see if a signup already exists if ($existingsignup = $DB->get_record('facetoface_signups', array('sessionid' => $session->id, 'userid' => $userid))) { $usersignup = $existingsignup; } else { // Otherwise, prepare a signup object $usersignup = new stdClass(); $usersignup->sessionid = $session->id; $usersignup->userid = $userid; } $usersignup->mailedreminder = 0; $usersignup->notificationtype = $notificationtype; $usersignup->discountcode = trim(strtoupper($discountcode)); if (empty($usersignup->discountcode)) { $usersignup->discountcode = null; } // Update/insert the signup record if (!empty($usersignup->id)) { $success = $DB->update_record('facetoface_signups', $usersignup); } else { $usersignup->id = $DB->insert_record('facetoface_signups', $usersignup); $success = (bool)$usersignup->id; } if (!$success) { print_error('error:couldnotupdatef2frecord', 'facetoface'); } // Work out which status to use // If approval not required if (!$facetoface->approvalreqd) { $new_status = $statuscode; } else { // If approval required // Get current status (if any) $current_status = $DB->get_field('facetoface_signups_status', 'statuscode', array('signupid' => $usersignup->id, 'superceded' => 0)); // If approved, then no problem if ($current_status == MDL_F2F_STATUS_APPROVED) { $new_status = $statuscode; } else if ($session->datetimeknown) { // If currently on the waitlist they have already been approved, no need to approve them again. if ($current_status == MDL_F2F_STATUS_WAITLISTED) { $new_status = $statuscode; } else { // Otherwise, send manager request. $new_status = MDL_F2F_STATUS_REQUESTED; } } else { $new_status = MDL_F2F_STATUS_WAITLISTED; } } // Update status. if (!facetoface_update_signup_status($usersignup->id, $new_status, $USER->id)) { print_error('error:f2ffailedupdatestatus', 'facetoface'); } // Add to user calendar -- if facetoface usercalentry is set to true if ($facetoface->usercalentry && in_array($new_status, array(MDL_F2F_STATUS_BOOKED, MDL_F2F_STATUS_WAITLISTED))) { facetoface_add_session_to_calendar($session, $facetoface, 'user', $userid, 'booking'); } // If session has already started, do not send a notification if (facetoface_has_session_started($session, $timenow)) { $notifyuser = false; } // Send notification. $notifytype = ((int)$notificationtype == MDL_F2F_NONE ? false : true); $session->notifyuser = $notifyuser && $notifytype; switch ($new_status) { case MDL_F2F_STATUS_BOOKED: $error = facetoface_send_confirmation_notice($facetoface, $session, $userid, $notificationtype, false); break; case MDL_F2F_STATUS_WAITLISTED: $error = facetoface_send_confirmation_notice($facetoface, $session, $userid, $notificationtype, true); break; case MDL_F2F_STATUS_REQUESTED: $error = facetoface_send_request_notice($facetoface, $session, $userid); break; } if (!empty($error)) { if ($error == 'userdoesnotexist') { print_error($error, 'facetoface'); } else { // Don't fail if email isn't sent, just display a warning echo $OUTPUT->notification(get_string($error, 'facetoface'), 'notifyproblem'); } } if ($session->notifyuser) { if (!$DB->update_record('facetoface_signups', $usersignup)) { print_error('error:couldnotupdatef2frecord', 'facetoface'); } } // Update course completion. if (in_array($new_status, array(MDL_F2F_STATUS_BOOKED, MDL_F2F_STATUS_WAITLISTED))) { $completion = new completion_info($course); if ($completion->is_enabled()) { $ccdetails = array( 'course' => $course->id, 'userid' => $userid, ); $cc = new completion_completion($ccdetails); $cc->mark_inprogress($timenow); } } return true; }
function test_facetoface_send_request_notice() { // Set managerroleid to make sure that it // matches the role id defined in the unit test // role table, as the local install may have a different // manager role id set_config('managerroleid', 1); // Test variables. $session1 = $this->sessions['sess0']; $sess0 = $this->array_to_object($session1); $facetoface1 = $this->facetoface['f2f0']; $f2f = $this->array_to_object($facetoface1); $userid1 = 1; $userid2 = 25; // Test for valid case. -- need to set manager //$this->assertEquals(facetoface_send_request_notice($f2f, $sess0, $userid1), ''); // Test for invalid case. $this->assertEquals(get_string(facetoface_send_request_notice($f2f, $sess0, $userid2), 'facetoface'), 'No manager email is set'); $this->resetAfterTest(true); }