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 plugin is used to access the content bank files. 19 * 20 * @package repository_contentbank 21 * @copyright 2020 Mihail Geshoski <mihail@moodle.com> 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 defined('MOODLE_INTERNAL') || die(); 26 27 require_once($CFG->dirroot . '/repository/lib.php'); 28 29 /** 30 * repository_contentbank class is used to browse the content bank files 31 * 32 * @package repository_contentbank 33 * @copyright 2020 Mihail Geshoski <mihail@moodle.com> 34 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 35 */ 36 class repository_contentbank extends repository { 37 38 /** 39 * Get file listing. 40 * 41 * @param string $encodedpath 42 * @param string $page 43 * @return array 44 */ 45 public function get_listing($encodedpath = '', $page = '') { 46 global $SITE; 47 48 $ret = []; 49 $ret['dynload'] = true; 50 $ret['nosearch'] = false; 51 $ret['nologin'] = true; 52 53 // Return the parameters from the encoded path if the encoded path is not empty. 54 if (!empty($encodedpath)) { 55 $params = json_decode(base64_decode($encodedpath), true); 56 if (is_array($params) && isset($params['contextid'])) { 57 $context = context::instance_by_id(clean_param($params['contextid'], PARAM_INT)); 58 } 59 } 60 // Return the current context if the context was not specified in the encoded path. 61 // The current context should be an instance of context_system, context_coursecat or course related contexts. 62 if (empty($context) && !empty($this->context)) { 63 if ($this->context instanceof \context_system || $this->context instanceof \context_coursecat) { 64 $context = $this->context; 65 } else if ($coursecontext = $this->context->get_course_context(false)) { 66 // Skip if front page context. 67 if ($coursecontext->instanceid !== $SITE->id) { 68 $context = $coursecontext; 69 } 70 } 71 } 72 // If not, return the system context as a default context. 73 if (empty($context)) { 74 $context = context_system::instance(); 75 } 76 77 $ret['list'] = []; 78 $ret['path'] = []; 79 80 // Get the content bank browser for the specified context. 81 if ($browser = \repository_contentbank\helper::get_contentbank_browser($context)) { 82 $manageurl = new moodle_url('/contentbank/index.php', ['contextid' => $context->id]); 83 $canaccesscontent = has_capability('moodle/contentbank:access', $context); 84 $ret['manage'] = $canaccesscontent ? $manageurl->out() : ''; 85 $ret['list'] = $browser->get_content(); 86 $ret['path'] = $browser->get_navigation(); 87 } 88 89 return $ret; 90 } 91 92 /** 93 * Is this repository used to browse moodle files? 94 * 95 * @return boolean 96 */ 97 public function has_moodle_files() { 98 return true; 99 } 100 101 /** 102 * Tells how the file can be picked from this repository. 103 * 104 * @return int 105 */ 106 public function supported_returntypes() { 107 return FILE_INTERNAL | FILE_REFERENCE; 108 } 109 110 /** 111 * Which return type should be selected by default. 112 * 113 * @return int 114 */ 115 public function default_returntype() { 116 return FILE_REFERENCE; 117 } 118 119 /** 120 * Is this repository accessing private data? 121 * 122 * @return bool 123 */ 124 public function contains_private_data() { 125 return false; 126 } 127 128 /** 129 * Repository method to make sure that user can access particular file. 130 * 131 * This is checked when user tries to pick the file from repository to deal with 132 * potential parameter substitutions in request 133 * 134 * @param string $source 135 * @return bool whether the file is accessible by current user 136 */ 137 public function file_is_accessible($source) { 138 global $DB; 139 140 $fileparams = json_decode(base64_decode($source)); 141 $itemid = clean_param($fileparams->itemid, PARAM_INT); 142 $contextid = clean_param($fileparams->contextid, PARAM_INT); 143 144 $contentbankfile = $DB->get_record('contentbank_content', ['id' => $itemid]); 145 $plugin = \core_plugin_manager::instance()->get_plugin_info($contentbankfile->contenttype); 146 147 $managerclass = "\\$contentbankfile->contenttype\\content"; 148 if ($plugin && $plugin->is_enabled() && class_exists($managerclass)) { 149 $context = \context::instance_by_id($contextid); 150 $browser = \repository_contentbank\helper::get_contentbank_browser($context); 151 return $browser->can_access_content(); 152 } 153 154 return false; 155 } 156 157 /** 158 * Return search results. 159 * 160 * @param string $search 161 * @param int $page 162 * @return array 163 */ 164 public function search($search, $page = 0) { 165 $ret = []; 166 $ret['nologin'] = true; 167 $ret['list'] = \repository_contentbank\contentbank_search::get_search_contents($search); 168 169 return $ret; 170 } 171 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body