Source for file linker.php

Documentation is available at linker.php

  1. <?php
  2.     /**
  3.     * LoginZone linker script.
  4.     *
  5.     * Allows an in-world LoginZone to communicate with the main server
  6.     *
  7.     * @package sloodleregenrol
  8.     * @copyright Copyright (c) 2007 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.     
  17.     // This script is expected to be accessed by objects from in-world.
  18.     // The following parameters are required at all times:
  19.     //
  20.     //   sloodlecontrollerid = integer ID of a Sloodle controller
  21.     //   sloodlepwd = password for authentication
  22.     //
  23.     // There are two modes of operation.
  24.     // In Mode 1, a LoginZone is reporting its own size and position. That requires the following parameters:
  25.     //
  26.     //   sloodlepos = a vector "<x,y,z>" indicating the position of the loginzone
  27.     //   sloodlesize = a vector "<x,y,z>" indicating the size of the loginzone
  28.     //   sloodleregion = the name of the region where the loginzone is located
  29.     //
  30.     // In Mode 2, a LoginZone is reporting that a user has teleported in to authenticate their avatar, requiring the following parameters:
  31.     //
  32.     //   sloodlepos = the position at which the avatar has appeared
  33.     //   sloodleavname = the name of the avatar
  34.     //   sloodleuuid = the UUID of the avatar
  35.     //
  36.     // ***** Note: the script assumes Mode 2 if either the avatar name or the UUID is specified *****
  37.  
  38.     // In either mode, the success response status code will be 1 ("OK").
  39.     // Various errors codes may also be used.
  40.     // The avatar UUID (if specified) will be returned in the request for Mode 2, according to the communications specification.
  41.  
  42.     /** Get the Sloodle configuration. */
  43.     require_once('../../sl_config.php');
  44.     /** Get the Sloodle API. */
  45.     require_once(SLOODLE_LIBROOT.'/sloodle_session.php');
  46.     
  47.     // Start handling the request
  48.     $sloodle new SloodleSession();
  49.     $sloodle->authenticate_request();
  50.     
  51.     // Are we using Mode 1?
  52.     if ($sloodle->request->get_avatar_name(false== null && $sloodle->request->get_avatar_uuid(false== null{
  53.         // Mode 1
  54.         
  55.         // We require therefore that position, size and region are all specified
  56.         $sloodlepos $sloodle->request->required_param('sloodlepos'PARAM_TEXT);
  57.         $sloodlesize $sloodle->request->required_param('sloodlesize'PARAM_TEXT);
  58.         $sloodleregion $sloodle->request->required_param('sloodleregion'PARAM_TEXT);
  59.         
  60.         // Remove the decimal places
  61.         $sloodlepos sloodle_round_vector($sloodlepos);
  62.         $sloodlesize sloodle_round_vector($sloodlesize);
  63.         
  64.         // Add all the data
  65.         $sloodle->course->set_loginzone_position($sloodlepos);
  66.         $sloodle->course->set_loginzone_size($sloodlesize);
  67.         $sloodle->course->set_loginzone_region($sloodleregion);
  68.         $sloodle->course->set_loginzone_time_updated();
  69.         
  70.         // Attempt to update the database
  71.         if ($sloodle->course->write()) {
  72.             $sloodle->response->set_status_code(1);
  73.             $sloodle->response->set_status_descriptor('OK');
  74.         else {
  75.             $sloodle->response->set_status_code(-101);
  76.             $sloodle->response->set_status_descriptor('SYSTEM');
  77.             $sloodle->response->add_data_line('Failed to store LoginZone data');
  78.         }
  79.         
  80.     else {
  81.         // Mode 2
  82.         
  83.         // We require therefore that position is specified
  84.         $sloodlepos $sloodle->request->required_param('sloodlepos'PARAM_TEXT);
  85.         // Remove the decimal places
  86.         $sloodlepos sloodle_round_vector($sloodlepos);
  87.         
  88.         // Make sure the avatar name and UUID were specified
  89.         $sloodleuuid $sloodle->request->get_avatar_uuid();
  90.         $sloodleavname $sloodle->request->get_avatar_name();
  91.         
  92.         // Check to see if the user identified in the request is already in the database
  93.         $sloodle_user_exists $sloodle->user->load_avatar($sloodleuuid$sloodleavname);
  94.         if ($sloodle_user_exists{
  95.             // Nothing we need to do - just stop here
  96.             $sloodle->response->set_status_code(301);
  97.             $sloodle->response->set_status_descriptor('MISC_REGISTER');
  98.             $sloodle->response->add_data_line('Avatar already registered');
  99.             $sloodle->response->render_to_output();
  100.             exit();
  101.         }
  102.         
  103.         // Attempt to find the Sloodle user specified by login position in the request
  104.         if ($sloodle->course->load_user_by_loginzone($sloodlepos$sloodle->user)) {
  105.             // Success
  106.             
  107.             // Make sure the user has permission to register their avatar
  108.             $sloodle->user->login();
  109.             if (!has_capability('mod/sloodle:registeravatar'get_context_instance(CONTEXT_SYSTEM))) {
  110.                 $sloodle->response->set_status_code(-331);
  111.                 $sloodle->response->set_status_descriptor('USER_AUTH');
  112.                 $sloodle->response->add_data_line('User does not have permission to register an avatar.');
  113.                 
  114.             else {
  115.                 // Add the avatar to our database
  116.                 if ($sloodle->user->add_linked_avatar($sloodle->user->get_user_id()$sloodleuuid$sloodleavname)) {
  117.                     // Delete the LoginZone allocation now
  118.                     $sloodle->course->delete_loginzone_allocation($sloodle->user);
  119.                     // We've been successful
  120.                     $sloodle->response->set_status_code(1);
  121.                     $sloodle->response->set_status_descriptor('OK');
  122.                 else {
  123.                     // Failed to add the avatar
  124.                     $sloodle->response->set_status_code(-102);
  125.                     $sloodle->response->set_status_descriptor('SYSTEM');
  126.                     $sloodle->response->add_data_line('Failed to add avatar to database');
  127.                 }
  128.             }
  129.             
  130.         else {
  131.             // Report the problem back in the response
  132.             $sloodle->response->set_status_code(-301);
  133.             $sloodle->response->set_status_descriptor('USER_AUTH');
  134.             $sloodle->response->add_data_line('No user found with specified Login Position.');
  135.         }
  136.         
  137.     }
  138.     
  139.     // Output the response
  140.     sloodle_debug("<pre>");
  141.     $sloodle->response->render_to_output();
  142.     sloodle_debug("</pre>");
  143.     exit();
  144.  
  145. ?>

Documentation generated on Mon, 07 Jul 2008 12:32:38 +0100 by phpDocumentor 1.4.0