Search moodle.org's
Developer Documentation


Long Term Support Release

  • Bug fixes for general core bugs in 3.9.x will end* 10 May 2021 (12 months).
  • Bug fixes for security issues in 3.9.x will end* 8 May 2023 (36 months).
  • PHP version: minimum PHP 7.2.0 Note: minimum PHP version has increased since Moodle 3.8. PHP 7.3.x and 7.4.x are supported too.
  • Differences Between: [Versions 32 and 39] [Versions 33 and 39] [Versions 34 and 39] [Versions 35 and 39] [Versions 36 and 39]

       1  <?php
       2  // This file is part of Moodle - http://moodle.org/
       3  //
       4  // Moodle is free software: you can redistribute it and/or modify
       5  // it under the terms of the GNU General Public License as published by
       6  // the Free Software Foundation, either version 3 of the License, or
       7  // (at your option) any later version.
       8  //
       9  // Moodle is distributed in the hope that it will be useful,
      10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
      11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      12  // GNU General Public License for more details.
      13  //
      14  // You should have received a copy of the GNU General Public License
      15  // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
      16  
      17  /**
      18   * This file contains a controller for receiving LTI service requests
      19   *
      20   * @package    mod_lti
      21   * @copyright  2014 Vital Source Technologies http://vitalsource.com
      22   * @author     Stephen Vickers
      23   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
      24   */
      25  
      26  define('NO_DEBUG_DISPLAY', true);
      27  define('NO_MOODLE_COOKIES', true);
      28  
      29  require_once(__DIR__ . '/../../config.php');
      30  require_once($CFG->dirroot . '/mod/lti/locallib.php');
      31  
      32  
      33  $response = new \mod_lti\local\ltiservice\response();
      34  
      35  $isget = $response->get_request_method() === mod_lti\local\ltiservice\resource_base::HTTP_GET;
      36  $isdelete = $response->get_request_method() === mod_lti\local\ltiservice\resource_base::HTTP_DELETE;
      37  
      38  if ($isget) {
      39      $response->set_accept(isset($_SERVER['HTTP_ACCEPT']) ? $_SERVER['HTTP_ACCEPT'] : '');
      40  } else {
      41      $response->set_content_type(isset($_SERVER['CONTENT_TYPE']) ? explode(';', $_SERVER['CONTENT_TYPE'], 2)[0] : '');
      42  }
      43  
      44  $ok = false;
      45  $path = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '';
      46  
      47  $accept = $response->get_accept();
      48  $contenttype = $response->get_content_type();
      49  
      50  $services = lti_get_services();
      51  foreach ($services as $service) {
      52      $resources = $service->get_resources();
      53      foreach ($resources as $resource) {
      54          if (($isget && !empty($accept) && (strpos($accept, '*/*') === false) &&
      55               !in_array($accept, $resource->get_formats())) ||
      56              ((!$isget && !$isdelete) && !in_array($contenttype, $resource->get_formats()))) {
      57              continue;
      58          }
      59          $template = $resource->get_template();
      60          $template = preg_replace('/{config_type}/', '(toolproxy|tool)', $template);
      61          $template = preg_replace('/\{[a-zA-Z_]+\}/', '[^/]+', $template);
      62          $template = preg_replace('/\(([0-9a-zA-Z_\-,\/]+)\)/', '(\\1|)', $template);
      63          $template = str_replace('/', '\/', $template);
      64          if (preg_match("/^{$template}$/", $path) === 1) {
      65              $ok = true;
      66              break 2;
      67          }
      68      }
      69  }
      70  if (!$ok) {
      71      $response->set_code(400);
      72      $response->set_reason("No handler found for {$path} {$accept} {$contenttype}");
      73  } else {
      74      $body = file_get_contents('php://input');
      75      $response->set_request_data($body);
      76      if (in_array($response->get_request_method(), $resource->get_methods())) {
      77          $resource->execute($response);
      78      } else {
      79          $response->set_code(405);
      80      }
      81  }
      82  $response->send();
    

    Search This Site: