[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/lib/ajax/ -> getnavbranch.php (source)

   1  <?php
   2  
   3  // This file is part of Moodle - http://moodle.org/
   4  //
   5  // Moodle is free software: you can redistribute it and/or modify
   6  // it under the terms of the GNU General Public License as published by
   7  // the Free Software Foundation, either version 3 of the License, or
   8  // (at your option) any later version.
   9  //
  10  // Moodle is distributed in the hope that it will be useful,
  11  // but WITHOUT ANY WARRANTY; without even the implied warranty of
  12  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13  // GNU General Public License for more details.
  14  //
  15  // You should have received a copy of the GNU General Public License
  16  // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
  17  
  18  /**
  19   * This file is used to deliver a branch from the navigation structure
  20   * in XML format back to a page from an AJAX call
  21   *
  22   * @since Moodle 2.0
  23   * @package core
  24   * @copyright 2009 Sam Hemelryk
  25   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  26   */
  27  
  28  define('AJAX_SCRIPT', true);
  29  
  30  /** Include config */
  31  require_once(__DIR__ . '/../../config.php');
  32  /** Include course lib for its functions */
  33  require_once($CFG->dirroot.'/course/lib.php');
  34  
  35  if (!empty($CFG->forcelogin)) {
  36      require_login();
  37  }
  38  
  39  try {
  40      // Start buffer capture so that we can `remove` any errors
  41      ob_start();
  42      // Require id This is the key for whatever branch we want to get.
  43      // This accepts alphanum because the courses and my courses branches don't have numerical keys.
  44      // For those branches we return the alphanum key, courses and mycourses.
  45      $branchid = required_param('id', PARAM_ALPHANUM);
  46      // This identifies the type of the branch we want to get
  47      $branchtype = required_param('type', PARAM_INT);
  48      // This identifies the block instance requesting AJAX extension
  49      $instanceid = optional_param('instance', null, PARAM_INT);
  50  
  51      $PAGE->set_context(context_system::instance());
  52  
  53      // Create a global nav object
  54      $navigation = new global_navigation_for_ajax($PAGE, $branchtype, $branchid);
  55  
  56      $linkcategories = false;
  57  
  58      if ($instanceid!==null) {
  59          // Get the db record for the block instance
  60          $blockrecord = $DB->get_record('block_instances', array('id'=>$instanceid,'blockname'=>'navigation'));
  61          if ($blockrecord!=false) {
  62  
  63              // Instantiate a block_instance object so we can access config
  64              $block = block_instance('navigation', $blockrecord);
  65  
  66              $trimmode = block_navigation::TRIM_RIGHT;
  67              $trimlength = 50;
  68  
  69              // Set the trim mode
  70              if (!empty($block->config->trimmode)) {
  71                  $trimmode = (int)$block->config->trimmode;
  72              }
  73              // Set the trim length
  74              if (!empty($block->config->trimlength)) {
  75                  $trimlength = (int)$block->config->trimlength;
  76              }
  77              if (!empty($block->config->linkcategories) && $block->config->linkcategories == 'yes') {
  78                  $linkcategories = true;
  79              }
  80          }
  81      }
  82  
  83      // Create a navigation object to use, we can't guarantee PAGE will be complete
  84      if (!isloggedin()) {
  85          $navigation->set_expansion_limit(navigation_node::TYPE_COURSE);
  86      } else {
  87          if (isset($block) && !empty($block->config->expansionlimit)) {
  88              $navigation->set_expansion_limit($block->config->expansionlimit);
  89          }
  90      }
  91      if (isset($block)) {
  92          $block->trim($navigation, $trimmode, $trimlength, ceil($trimlength/2));
  93      }
  94      $converter = new navigation_json();
  95  
  96      // Find the actual branch we are looking for
  97      if ($branchtype != 0) {
  98          $branch = $navigation->find($branchid, $branchtype);
  99      } else if ($branchid === 'mycourses' || $branchid === 'courses') {
 100          $branch = $navigation->find($branchid, navigation_node::TYPE_ROOTNODE);
 101      } else {
 102          throw new coding_exception('Invalid branch type/id passed to AJAX call to load branches.');
 103      }
 104  
 105      // Remove links to categories if required.
 106      if (!$linkcategories) {
 107          foreach ($branch->find_all_of_type(navigation_node::TYPE_CATEGORY) as $category) {
 108              $category->action = null;
 109          }
 110          foreach ($branch->find_all_of_type(navigation_node::TYPE_MY_CATEGORY) as $category) {
 111              $category->action = null;
 112          }
 113      }
 114  
 115      // Stop buffering errors at this point
 116      $html = ob_get_contents();
 117      ob_end_clean();
 118  } catch (Exception $e) {
 119      throw new coding_exception('Error: '.$e->getMessage());
 120  }
 121  
 122  // Check if the buffer contianed anything if it did ERROR!
 123  if (trim($html) !== '') {
 124      throw new coding_exception('Errors were encountered while producing the navigation branch'."\n\n\n".$html);
 125  }
 126  // Check that branch isn't empty... if it is ERROR!
 127  if (empty($branch) || ($branch->nodetype !== navigation_node::NODETYPE_BRANCH && !$branch->isexpandable)) {
 128      throw new coding_exception('No further information available for this branch');
 129  }
 130  
 131  // Prepare an XML converter for the branch
 132  $converter->set_expandable($navigation->get_expandable());
 133  // Set XML headers
 134  header('Content-type: text/plain; charset=utf-8');
 135  // Convert and output the branch as XML
 136  echo $converter->convert($branch);


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1