regenrol_linker.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. // This script is part of the Sloodle project
  3. /**
  4. * Registration and enrolment linker script.
  5. * Allows scripts in-world to initiate manual registration and enrolment.
  6. *
  7. * @package sloodleregenrol
  8. * @copyright Copyright (c) 2007-8 Sloodle (various contributors)
  9. * @license http://www.gnu.org/licenses/gpl-3.0.html GNU GPL v3
  10. *
  11. * @contributor Edmund Edgar
  12. * @contributor Peter R. Bloomfield
  13. *
  14. */
  15. /*
  16. * The following parameters are required:
  17. *
  18. * sloodlecontrollerid = the ID of the controller to connect to
  19. * sloodlepwd = password for authentication (either a prim password or an object-specific session key)
  20. * sloodlemode = indicates the mode: "reg", "enrol", or "regenrol"
  21. * sloodleuuid = UUID of the avatar
  22. * sloodleavname = name of the avatar
  23. *
  24. * If successful, the status code returned will be 1 and the data line will contain a URL to forward the user to.
  25. * If nothing needs done because the user is already registered, then status code 301 is returned.
  26. * If nothing needs done because the user is already enrolled, then status code 401 is returned.
  27. * If the user cannot be enrolled because they are not yet registered, then status code -321.
  28. */
  29. /** Lets Sloodle know we are in a linker script. */
  30. define('SLOODLE_LINKER_SCRIPT', true);
  31. /** Grab the Sloodle/Moodle configuration. */
  32. require_once('../init.php');
  33. /** Include the Sloodle PHP API. */
  34. require_once(SLOODLE_LIBROOT.'/sloodle_session.php');
  35. // Authenticate the request
  36. $sloodle = new SloodleSession();
  37. $sloodle->authenticate_request();
  38. // Attempt to authenticate the user, but do not allow auto-registration/enrolment
  39. $sloodle->validate_user(false, true, true);
  40. $is_registered = $sloodle->user->is_user_loaded();
  41. $is_enrolled = false;
  42. if ($is_registered) {
  43. $is_enrolled = $sloodle->user->is_enrolled($sloodle->course->get_course_id());
  44. }
  45. // Make sure UUID and avatar name were specified
  46. $sloodleuuid = $sloodle->request->get_avatar_uuid(TRUE);
  47. $sloodleavname = $sloodle->request->get_avatar_name(TRUE);
  48. // Get the mode value
  49. $sloodlemode = $sloodle->request->required_param('sloodlemode');
  50. // If the mode is 'regenrol', but the user is already registered,
  51. // then just do enrolment
  52. if ($sloodlemode == 'regenrol' && $is_registered) $sloodlemode = 'enrol';
  53. // What mode has been requested?
  54. switch ($sloodlemode)
  55. {
  56. case 'reg': case 'regenrol':
  57. // Is the user already registered?
  58. if ($is_registered) {
  59. $sloodle->response->set_status_code(301);
  60. $sloodle->response->set_status_descriptor('MISC_REGISTER');
  61. } else {
  62. // Add a pending avatar
  63. $pa = $sloodle->user->add_pending_avatar($sloodleuuid, $sloodleavname);
  64. if (!$pa) {
  65. $sloodle->response->set_status_code(-322);
  66. $sloodle->response->set_status_descriptor('MISC_REGISTER');
  67. $sloodle->response->add_data_line('Failed to add pending avatar details.');
  68. } else {
  69. // Construct and return a registration URL
  70. $url = SLOODLE_WWWROOT."/login/sl_welcome_reg.php?sloodleuuid=$sloodleuuid&sloodlelst={$pa->lst}";
  71. if ($sloodlemode == 'regenrol') $url .= '&sloodlecourseid='.$sloodle->course->get_course_id();
  72. $sloodle->response->set_status_code(1);
  73. $sloodle->response->set_status_descriptor('OK');
  74. $sloodle->response->add_data_line($url);
  75. }
  76. }
  77. break;
  78. case 'enrol':
  79. // Is the user registered?
  80. if (!$is_registered) {
  81. $sloodle->response->set_status_code(-321);
  82. $sloodle->response->set_status_descriptor('MISC_REGISTER');
  83. $sloodle->response->add_data_line('Enrolment failed -- user is not yet registered.');
  84. } else {
  85. // Is the user already enrolled?
  86. if ($is_enrolled) {
  87. $sloodle->response->set_status_code(401);
  88. $sloodle->response->set_status_descriptor('MISC_ENROL');
  89. } else {
  90. // Construct and return an enrolment URL
  91. $sloodle->response->set_status_code(1);
  92. $sloodle->response->set_status_descriptor('OK');
  93. $sloodle->response->add_data_line("{$CFG->wwwroot}/course/enrol.php?id=".$sloodle->course->get_course_id());
  94. }
  95. }
  96. break;
  97. default:
  98. $sloodle->response->set_status_code(-811);
  99. $sloodle->response->set_status_descriptor('REQUEST');
  100. $sloodle->response->add_data_line("Mode '$sloodlemode' unrecognised.");
  101. break;
  102. }
  103. // Render the response
  104. $sloodle->response->render_to_output();
  105. exit();
  106. ?>