Source for file sl_enrol_linker.php

Documentation is available at sl_enrol_linker.php

  1. <?php
  2.     
  3.     // This file is part of the Sloodle project (www.sloodle.org) and is released under the GNU GPL v3.
  4.     
  5.     /**
  6.     * Sloodle enrolment linker.
  7.     *
  8.     * Allows SL objects in-world to query and initiate student enrolment in courses.
  9.     *
  10.     * @package sloodlelogin
  11.     * @copyright Copyright (c) 2007-8 Sloodle (various contributors)
  12.     * @license http://www.gnu.org/licenses/gpl-3.0.html GNU GPL v3
  13.     *
  14.     * @contributor Edmund Edgar
  15.     * @contributor Peter R. Bloomfield
  16.     *
  17.     */
  18.     
  19.     // This script is expected to be called from an LSL script in-world
  20.     // The following parameters (GET or POST) are required in all circumstances:
  21.     //
  22.     //   sloodlepwd = the prim password
  23.     //   sloodlemode = name of the mode of this query (can be: 'enrol', 'check-enrolled', 'list-enrolled', 'list-unenrolled', 'list-enrollable', 'list-all')
  24.     //
  25.     // Some modes require or can accept additional parameters:
  26.     //
  27.     //   sloodlecourseid = ID of a Moodle course
  28.     //   sloodlecategoryid = ID of the category to which results should be limited (leave blank or set to 'all' to retrieve all categories)
  29.     //   sloodleuuid = UUID of the avatar (note: optional if sloodleavname is provided, but best to provide both)
  30.     //   sloodleavname = name of the avatar (note: optional if sloodleuuid is provided, but best to provide both)
  31.     //   
  32.     //
  33.     // Mode 'enrol' is used to fetch an enrolment URL for the identified user in the specified course.
  34.     // This mode requires 'sloodlecourseid', and 'sloodleuuid' and/or 'sloodleavname'.
  35.     // If successful, the return code is 1, and the data line is the enrolment URL (to which the user should be forwarded).
  36.     // If the user is already enrolled, then the status code is 401, and there is no data line.
  37.     //
  38.     // Mode 'check-enrolled' checks if a user is enrolled in a specific course.
  39.     // This mode requires 'sloodlecourseid', and 'sloodleuuid' and/or 'sloodleavname'.
  40.     // If successful, the return code is 1. A single data line contains a 1 or a 0 (1 = enrolled, 0 = not enrolled).
  41.     // 
  42.     // Mode 'list-enrolled' fetches a list of all courses a particular user is enrolled in.
  43.     // This mode requires the 'sloodleuuid' and/or 'sloodleavname' parameters. 'sloodlecategoryid' is optional.
  44.     // If successful, the return code is 1. Each data line gives data about a course, in format "<id>|<shortname>|<longname>".
  45.     // 
  46.     // Mode 'list-unenrolled' fetches a list of all courses a particular user is *not* enrolled in
  47.     // This mode requires the 'sloodleuuid' and/or 'sloodleavname' parameters. 'sloodlecategoryid' is optional.
  48.     // If successful, the return code is 1. Each data line gives data about a course, in format "<id>|<shortname>|<longname>".
  49.     //
  50.     // Mode 'list-enrollable' fetches a list of all courses a particular user is not enrolled in, but in which they may enrol
  51.     // This mode requires the 'sloodleuuid' and/or 'sloodleavname' parameters. 'sloodlecategoryid' is optional.
  52.     // If successful, the return code is 1. Each data line gives data about the course, in format "<id>|<shortname>|<longname>".
  53.     //
  54.     // Mode 'list-all' fetches a list of all courses
  55.     // No additional parameters required. 'sloodlecategoryid' is optional.
  56.     // If successful, the return code is 1. Each data line gives data about the course, in format "<id>|<shortname>|<longname>".
  57.     //
  58.     
  59.     
  60.     require_once('../config.php');
  61.     require_once(SLOODLE_DIRROOT.'/sl_debug.php');
  62.     require_once(SLOODLE_DIRROOT.'/lib/sl_lsllib.php');
  63.     
  64.     sloodle_debug_output('<br/>');
  65.     
  66.     // Construct the LSL handler, and process the basic request data
  67.     sloodle_debug_output('Constructing LSL handler...<br/>');
  68.     $lsl new SloodleLSLHandler();
  69.     sloodle_debug_output('Processing basic request data...<br/>');
  70.     $lsl->request->process_request_data();
  71.     
  72.     // Ensure the request is authenticated
  73.     sloodle_debug_output('Authenticating request...<br/>');
  74.     $lsl->request->authenticate_request();
  75.     
  76.     // Fetch other additional parameters
  77.     sloodle_debug_output('Fetching additional parameters...<br/>');
  78.     $sloodlemode strtolower($lsl->request->required_param('sloodlemode'PARAM_RAW));
  79.     $sloodlecategoryid optional_param('sloodlecategoryid'NULLPARAM_INT);
  80.     if ($sloodlecategoryid == NULL$sloodlecategoryid 'all';
  81.     
  82.     
  83.     // Fetch a list of all courses (just their ID's, short names, and long names)
  84.     sloodle_debug_output("Fetching list of all courses (category: $sloodlecategoryid)...<br/>");
  85.     // N.B.: ought to make this query more efficient by reducing number of retrieved fields
  86.     $courses get_courses($sloodlecategoryid);
  87.     $numcourses count($courses);
  88.     sloodle_debug_output("-&gt;Number of courses retrieved: $numcourses.<br/>");
  89.     
  90.     
  91.     // Check which mode it is
  92.     sloodle_debug_output('Checking mode...<br/>');
  93.     sloodle_debug_output("***** Mode '$sloodlemode' *****<br/>");
  94.     switch ($sloodlemode{
  95.     
  96.     case 'enrol':
  97.         // Login the user
  98.         sloodle_debug_output('Logging-in user...<br/>');
  99.         $lsl->login_by_request();
  100.         // Make sure the course was specified
  101.         sloodle_debug_output('Ensuring course ID was specified...<br/>');
  102.         $lsl->request->required_param('sloodlecourseid'PARAM_INT);
  103.         
  104.         // Add an enrolment link to the response (if the user is not already enrolled)
  105.         sloodle_debug_output('Constructing response...<br/>');
  106.         // Is the user already enrolled?
  107.         sloodle_debug_output('Checking if user is enrolled in course #'.$lsl->request->get_course_id().'...<br/>');
  108.         if (isadmin(|| $lsl->user->is_user_in_course($lsl->request->get_course_id()) === TRUE{
  109.             // Yes - nothing much to do
  110.             $lsl->response->set_status_code(401);
  111.             $lsl->response->set_status_descriptor('MISC_ENROL');
  112.             sloodle_debug_output('-&gt; User is enrolled in course.<br/>');
  113.         else {
  114.             // No - provide the URL
  115.             $lsl->response->set_status_code(1);
  116.             $lsl->response->set_status_descriptor('OK');
  117.             sloodle_debug_output('-&gt; User is not enrolled in course.<br/>');
  118.             $lsl->response->add_data_line($CFG->wwwroot.'/mod/sloodle/login/sl_enrolment.php?sloodlecourseid='.$lsl->request->get_course_id());
  119.         }        
  120.         break;
  121.         
  122.         
  123.     case 'check-enrolled':
  124.         // Login the user
  125.         sloodle_debug_output('Logging-in user...<br/>');
  126.         $lsl->login_by_request();        
  127.         // Make sure the course was specified
  128.         sloodle_debug_output('Ensuring course ID was specified...<br/>');
  129.         $lsl->request->required_param('sloodlecourseid'PARAM_INT);        
  130.         // Is the user in that course?
  131.         sloodle_debug_output('Checking if user is enrolled in course #'.$lsl->request->get_course_id().'...<br/>');
  132.         if ($lsl->user->is_user_in_course($lsl->request->get_course_id()) === TRUE{
  133.             sloodle_debug_output('-&gt; User is enrolled in course.<br/>');
  134.             $in_course '1';
  135.         else {
  136.             sloodle_debug_output('-&gt; User is not enrolled in course.<br/>');
  137.             $in_course '0';
  138.         }
  139.         
  140.         // Add an enrolment link to the response
  141.         sloodle_debug_output('Constructing response...<br/>');
  142.         $lsl->response->set_status_code(1);
  143.         $lsl->response->set_status_descriptor('OK');
  144.         $lsl->response->add_data_line($in_course);
  145.         break;
  146.         
  147.         
  148.     case 'list-enrolled':
  149.         // Login the user
  150.         sloodle_debug_output('Logging-in user...<br/>');
  151.         $lsl->login_by_request();
  152.         // Get a list of courses the user is enrolled in
  153.         sloodle_debug_output('Fetching list of enrolled courses...<br/>');
  154.         if ($lsl->user->update_enrolled_courses_cache_from_db(!== TRUE{
  155.             sloodle_debug_output('-&gt;Failed.<br/>');
  156.             $lsl->response->set_status_code(-103);
  157.             $lsl->response->set_status_descriptor('SYSTEM');
  158.             $lsl->response->add_data_line('Failed to retrieve list of courses which the user is enrolled in.');
  159.             break;
  160.         }
  161.         
  162.         // Setup the response
  163.         sloodle_debug_output('Constructing response...<br/>');
  164.         $lsl->response->set_status_code(1);
  165.         $lsl->response->set_status_descriptor('OK');
  166.         // Go through each course
  167.         sloodle_debug_output('Iterating through all available courses...<br/>');
  168.         foreach ($courses as $c{
  169.             // Ignore the front-page course
  170.             if ((int)$c->id == 1continue;
  171.             // Is the user enrolled in this course?
  172.             if (in_array((int)$c->id$lsl->user->enrolled_courses_cache)) {
  173.                 // Yes - add it to the response
  174.                 $lsl->response->add_data_line(array($c->id$c->shortname$c->fullname));
  175.             }
  176.         }        
  177.         
  178.         break;
  179.         
  180.         
  181.     case 'list-unenrolled':
  182.         // Login the user
  183.         sloodle_debug_output('Logging-in user...<br/>');
  184.         $lsl->login_by_request();
  185.         // Get a list of courses the user is enrolled in
  186.         sloodle_debug_output('Fetching list of enrolled courses...<br/>');
  187.         if ($lsl->user->update_enrolled_courses_cache_from_db(!== TRUE{
  188.             sloodle_debug_output('-&gt;Failed.<br/>');
  189.             $lsl->response->set_status_code(-103);
  190.             $lsl->response->set_status_descriptor('SYSTEM');
  191.             $lsl->response->add_data_line('Failed to retrieve list of courses which the user is enrolled in.');
  192.             break;
  193.         }
  194.         
  195.         // Setup the response
  196.         sloodle_debug_output('Constructing response...<br/>');
  197.         $lsl->response->set_status_code(1);
  198.         $lsl->response->set_status_descriptor('OK');
  199.         // Go through each course
  200.         sloodle_debug_output('Iterating through all available courses...<br/>');
  201.         foreach ($courses as $c{
  202.             // Ignore the front-page course
  203.             if ((int)$c->id == 1continue;
  204.             // Is the user enrolled in this course?
  205.             if (in_array((int)$c->id$lsl->user->enrolled_courses_cache== FALSE{
  206.                 // No - add it to the response
  207.                 $lsl->response->add_data_line(array($c->id$c->shortname$c->fullname));
  208.             }
  209.         }
  210.         break;
  211.         
  212.         
  213.     case 'list-enrollable':
  214.         // Login the user
  215.         sloodle_debug_output('Logging-in user...<br/>');
  216.         $lsl->login_by_request();
  217.         // Get a list of courses the user is enrolled in
  218.         sloodle_debug_output('Fetching list of enrolled courses...<br/>');
  219.         if ($lsl->user->update_enrolled_courses_cache_from_db(!== TRUE{
  220.             sloodle_debug_output('-&gt;Failed.<br/>');
  221.             $lsl->response->set_status_code(-103);
  222.             $lsl->response->set_status_descriptor('SYSTEM');
  223.             $lsl->response->add_data_line('Failed to retrieve list of courses which the user is enrolled in.');
  224.             break;
  225.         }
  226.         
  227.         // Setup the response
  228.         sloodle_debug_output('Constructing response...<br/>');
  229.         $lsl->response->set_status_code(1);
  230.         $lsl->response->set_status_descriptor('OK');
  231.         // Go through each course
  232.         sloodle_debug_output('Iterating through all available courses...<br/>');
  233.         foreach ($courses as $c{
  234.             // Ignore the front-page course
  235.             if ((int)$c->id == 1continue;
  236.             // Is this course enrollable?
  237.             if (!(!$c->enrollable || ($c->enrollable == && $c->enrolstartdate && $c->enrolstartdate time()) || ($c->enrollable == && $c->enrolenddate && $c->enrolenddate <= time()))) // These checks were copied from course/enrol.php. Sorry about the confusing double-negative...
  238.                 // Yes - add it to the response
  239.                 $lsl->response->add_data_line(array($c->id$c->shortname$c->fullname));
  240.             }
  241.         }
  242.         break;
  243.         
  244.         
  245.     case 'list-all':
  246.         // Setup the response
  247.         sloodle_debug_output('Constructing response...<br/>');
  248.         $lsl->response->set_status_code(1);
  249.         $lsl->response->set_status_descriptor('OK');
  250.         // Go through each course
  251.         sloodle_debug_output('Iterating through all available courses...<br/>');
  252.         foreach ($courses as $c{
  253.             // We're adding all courses to the response
  254.             $lsl->response->add_data_line(array($c->id$c->shortname$c->fullname));
  255.         }
  256.         break;
  257.         
  258.         
  259.         
  260.     default:
  261.         // Mode not recognised
  262.         sloodle_debug_output("ERROR: unrecognised mode, '$sloodlemode'<br/>");
  263.         $lsl->response->set_status_code(-811);
  264.         $lsl->response->set_status_descriptor('REQUEST');
  265.         $lsl->response->add_data_line("Mode '$sloodlemode' not recognised.");
  266.         break;
  267.     }
  268.     
  269.     // Output the response, and finish
  270.     sloodle_debug_output('Outputting response...<br/>');
  271.     sloodle_debug_output('<pre>');
  272.     $lsl->response->render_to_output();
  273.     sloodle_debug_output('</pre>');
  274.     exit();
  275. ?>

Documentation generated on Tue, 04 Mar 2008 15:08:40 +0000 by phpDocumentor 1.4.0