Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.0.x will end 8 May 2023 (12 months).
  • Bug fixes for security issues in 4.0.x will end 13 November 2023 (18 months).
  • PHP version: minimum PHP 7.3.0 Note: the minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is also supported.
   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  * @package    backup-convert
  18  * @copyright  2011 Darko Miletic <dmiletic@moodlerooms.com>
  19  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  20  */
  21  
  22  require_once  'cc_general.php';
  23  
  24  class basicltil1_resurce_file extends general_cc_file {
  25      const deafultname = 'basiclti.xml';
  26  
  27      protected $rootns   = 'xmlns';
  28      protected $rootname = 'cartridge_basiclti_link';
  29      protected $ccnamespaces = array('xmlns' => 'http://www.imsglobal.org/xsd/imslticc_v1p0',
  30                                      'blti'  => 'http://www.imsglobal.org/xsd/imsbasiclti_v1p0',
  31                                      'lticm' => 'http://www.imsglobal.org/xsd/imslticm_v1p0',
  32                                      'lticp' => 'http://www.imsglobal.org/xsd/imslticp_v1p0',
  33                                      'xsi'   => 'http://www.w3.org/2001/XMLSchema-instance');
  34      protected $ccnsnames = array('xmlns' => 'http://www.imsglobal.org/xsd/lti/ltiv1p0/imslticc_v1p0.xsd',
  35                                   'blti'  => 'http://www.imsglobal.org/xsd/lti/ltiv1p0/imsbasiclti_v1p0p1.xsd',
  36                                   'lticm' => 'http://www.imsglobal.org/xsd/lti/ltiv1p0/imslticm_v1p0.xsd',
  37                                   'lticp' => 'http://www.imsglobal.org/xsd/lti/ltiv1p0/imslticp_v1p0.xsd');
  38  
  39      protected $title = 'Untitled';
  40      protected $description = 'description';
  41      protected $custom_properties = array();
  42      protected $extension_properties = array();
  43      protected $extension_platform = null;
  44      protected $launch_url = null;
  45      protected $secure_launch_url = null;
  46      protected $icon = null;
  47      protected $secure_icon = null;
  48      protected $vendor = false;
  49      protected $vendor_code = 'I';
  50      protected $vendor_name = null;
  51      protected $vendor_description = null;
  52      protected $vendor_url = null;
  53      protected $vendor_contact = null;
  54      protected $cartridge_bundle = null;
  55      protected $cartridge_icon = null;
  56  
  57      public function set_title($title) {
  58          $this->title = self::safexml($title);
  59      }
  60      public function set_description($description) {
  61          $this->description = self::safexml($description);
  62      }
  63      public function set_launch_url ($url) {
  64          $this->launch_url = $url;
  65      }
  66      public function set_secure_launch_url ($url) {
  67          $this->secure_launch_url = $url;
  68      }
  69      public function set_launch_icon ($icon) {
  70          $this->icon = $icon;
  71      }
  72      public function set_secure_launch_icon ($icon) {
  73          $this->secure_icon = $icon;
  74      }
  75      public function set_vendor_code ($code) {
  76          $this->vendor_code = $code;
  77          $this->vendor = true;
  78      }
  79      public function set_vendor_name ($name) {
  80          $this->vendor_name = self::safexml($name);
  81          $this->vendor = true;
  82      }
  83      public function set_vendor_description ($desc) {
  84          $this->vendor_description = self::safexml($desc);
  85          $this->vendor = true;
  86      }
  87      public function set_vendor_url ($url) {
  88          $this->vendor_url = $url;
  89          $this->vendor = true;
  90      }
  91      public function set_vendor_contact ($email) {
  92          $this->vendor_contact = array('email' => $email);
  93          $this->vendor = true;
  94      }
  95      public function add_custom_property ($property, $value) {
  96          $this->custom_properties[$property] = $value;
  97      }
  98      public function add_extension ($extension, $value) {
  99          $this->extension_properties[$extension] = $value;
 100      }
 101      public function set_extension_platform ($value) {
 102          $this->extension_platform = $value;
 103      }
 104  
 105      public function set_cartridge_bundle($value) {
 106          $this->cartridge_bundle = $value;
 107      }
 108  
 109      public function set_cartridge_icon($value) {
 110          $this->cartridge_icon = $value;
 111      }
 112  
 113      protected function on_save() {
 114          //this has to be done like this since order of apearance of the tags is also mandatory
 115          //and specified in basiclti schema files
 116  
 117          //main items
 118          $rns = $this->ccnamespaces['blti'];
 119          $this->append_new_element_ns($this->root, $rns, 'title'      , $this->title      );
 120          $this->append_new_element_ns($this->root, $rns, 'description', $this->description);
 121  
 122          //custom properties
 123          if (!empty($this->custom_properties)) {
 124              $custom = $this->append_new_element_ns($this->root, $rns, 'custom');
 125              foreach ($this->custom_properties as $property => $value) {
 126                  $node = $this->append_new_element_ns($custom, $this->ccnamespaces['lticm'], 'property' , $value);
 127                  $this->append_new_attribute_ns($node, $this->ccnamespaces['xmlns'],'name', $property);
 128              }
 129          }
 130  
 131          //extension properties
 132          if (!empty($this->extension_properties)) {
 133              $extension = $this->append_new_element_ns($this->root, $rns, 'extensions');
 134              if (!empty($this->extension_platform)) {
 135                  $this->append_new_attribute_ns($extension, $this->ccnamespaces['xmlns'], 'platform', $this->extension_platform);
 136              }
 137              foreach ($this->extension_properties as $property => $value) {
 138                  $node = $this->append_new_element_ns($extension, $this->ccnamespaces['lticm'], 'property' , $value);
 139                  $this->append_new_attribute_ns($node, $this->ccnamespaces['xmlns'], 'name', $property);
 140              }
 141          }
 142  
 143          $this->append_new_element_ns($this->root, $rns, 'launch_url' , $this->launch_url );
 144          if (!empty($this->secure_launch_url)) {
 145              $this->append_new_element_ns($this->root, $rns, 'secure_launch_url' , $this->secure_launch_url);
 146          }
 147          $this->append_new_element_ns($this->root, $rns, 'icon'       , $this->icon       );
 148          if (!empty($this->secure_icon)) {
 149              $this->append_new_element_ns($this->root, $rns, 'secure_icon' , $this->secure_icon);
 150          }
 151  
 152          //vendor info
 153          $vendor = $this->append_new_element_ns($this->root, $rns, 'vendor');
 154          $vcode = empty($this->vendor_code) ? 'I' : $this->vendor_code;
 155          $this->append_new_element_ns($vendor, $this->ccnamespaces['lticp'], 'code', $vcode);
 156          $this->append_new_element_ns($vendor, $this->ccnamespaces['lticp'], 'name', $this->vendor_name);
 157          if (!empty($this->vendor_description)) {
 158              $this->append_new_element_ns($vendor, $this->ccnamespaces['lticp'], 'description', $this->vendor_description);
 159          }
 160          if (!empty($this->vendor_url)) {
 161              $this->append_new_element_ns($vendor, $this->ccnamespaces['lticp'], 'url', $this->vendor_url);
 162          }
 163          if (!empty($this->vendor_contact)) {
 164              $vcontact = $this->append_new_element_ns($vendor, $this->ccnamespaces['lticp'], 'contact');
 165              $this->append_new_element_ns($vcontact, $this->ccnamespaces['lticp'], 'email', $this->vendor_contact['email']);
 166          }
 167  
 168          //cartridge bundle and icon
 169          if (!empty($this->cartridge_bundle)) {
 170              $cbundle = $this->append_new_element_ns($this->root, $this->ccnamespaces['xmlns'], 'cartridge_bundle');
 171              $this->append_new_attribute_ns($cbundle, $this->ccnamespaces['xmlns'], 'identifierref', $this->cartridge_bundle);
 172          }
 173          if (!empty($this->cartridge_icon)) {
 174              $cicon = $this->append_new_element_ns($this->root, $this->ccnamespaces['xmlns'], 'cartridge_icon');
 175              $this->append_new_attribute_ns($cicon, $this->ccnamespaces['xmlns'], 'identifierref', $this->cartridge_icon);
 176          }
 177  
 178          return true;
 179      }
 180  
 181  }