MDL-67812 repository_contentbank: Create content bank files repository
This commit is contained in:
@@ -0,0 +1,167 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Utility class for browsing of content bank files.
|
||||
*
|
||||
* @package repository_contentbank
|
||||
* @copyright 2020 Mihail Geshoski <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace repository_contentbank\browser;
|
||||
|
||||
/**
|
||||
* Base class for the content bank browsers.
|
||||
*
|
||||
* @package repository_contentbank
|
||||
* @copyright 2020 Mihail Geshoski <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
abstract class contentbank_browser {
|
||||
|
||||
/** @var \context The current context. */
|
||||
protected $context;
|
||||
|
||||
/**
|
||||
* Get all content nodes in the current context which can be viewed/accessed by the user.
|
||||
*
|
||||
* @return array[] The array containing all nodes which can be viewed/accessed by the user in the current context
|
||||
*/
|
||||
public function get_content(): array {
|
||||
return array_merge($this->get_context_folders(), $this->get_contentbank_content());
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate the full navigation to the current node.
|
||||
*
|
||||
* @return array[] The array containing the path to each node in the navigation.
|
||||
* Each navigation node is an array with keys: name, path.
|
||||
*/
|
||||
public function get_navigation(): array {
|
||||
// Get the current navigation node.
|
||||
$currentnavigationnode = \repository_contentbank\helper::create_navigation_node($this->context);
|
||||
$navigationnodes = [$currentnavigationnode];
|
||||
// Get the parent content bank browser.
|
||||
$parent = $this->get_parent();
|
||||
// Prepend parent navigation node in the navigation nodes array until there is no existing parent.
|
||||
while ($parent !== null) {
|
||||
$parentnavigationnode = \repository_contentbank\helper::create_navigation_node($parent->context);
|
||||
array_unshift($navigationnodes, $parentnavigationnode);
|
||||
$parent = $parent->get_parent();
|
||||
}
|
||||
return $navigationnodes;
|
||||
}
|
||||
|
||||
/**
|
||||
* The required condition to enable the user to view/access the content bank content in this context.
|
||||
*
|
||||
* @return bool Whether the user can view/access the content bank content in the context
|
||||
*/
|
||||
abstract public function can_access_content(): bool;
|
||||
|
||||
/**
|
||||
* Define the allowed child context levels.
|
||||
*
|
||||
* @return int[] The array containing the relevant child context levels
|
||||
*/
|
||||
abstract protected function allowed_child_context_levels(): array;
|
||||
|
||||
/**
|
||||
* Get the relevant child contexts.
|
||||
*
|
||||
* @return \context[] The array containing the relevant, next-level children contexts
|
||||
*/
|
||||
protected function get_child_contexts(): array {
|
||||
global $DB;
|
||||
|
||||
if (empty($allowedcontextlevels = $this->allowed_child_context_levels())) {
|
||||
// Early return if there aren't any defined child context levels.
|
||||
return [];
|
||||
}
|
||||
|
||||
list($contextlevelsql, $params) = $DB->get_in_or_equal($allowedcontextlevels, SQL_PARAMS_NAMED);
|
||||
$pathsql = $DB->sql_like('path', ':path', false, false);
|
||||
|
||||
$select = "contextlevel {$contextlevelsql}
|
||||
AND {$pathsql}
|
||||
AND depth = :depth";
|
||||
|
||||
$params['path'] = "{$this->context->path}/%";
|
||||
$params['depth'] = $this->context->depth + 1;
|
||||
|
||||
$childcontexts = $DB->get_records_select('context', $select, $params);
|
||||
|
||||
return array_map(function($childcontext) {
|
||||
return \context::instance_by_id($childcontext->id);
|
||||
}, $childcontexts);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the content bank browser class of the parent context. Currently used to generate the navigation path.
|
||||
*
|
||||
* @return contentbank_browser|null The content bank browser of the parent context
|
||||
*/
|
||||
private function get_parent(): ?self {
|
||||
if ($parentcontext = $this->context->get_parent_context()) {
|
||||
return \repository_contentbank\helper::get_contentbank_browser($parentcontext);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate folder nodes for the relevant child contexts which can be accessed/viewed by the user.
|
||||
*
|
||||
* @return array[] The array containing the context folder nodes where each folder node is an array with keys:
|
||||
* title, datemodified, datecreated, path, thumbnail, children.
|
||||
*/
|
||||
private function get_context_folders(): array {
|
||||
// Get all relevant child contexts.
|
||||
$children = $this->get_child_contexts();
|
||||
// Return all child context folder nodes which can be accessed by the user following the defined conditions
|
||||
// in can_access_content().
|
||||
return array_reduce($children, function ($list, $child) {
|
||||
$browser = \repository_contentbank\helper::get_contentbank_browser($child);
|
||||
if ($browser->can_access_content()) {
|
||||
$name = $child->get_context_name(false);
|
||||
$path = base64_encode(json_encode(['contextid' => $child->id]));
|
||||
$list[] = \repository_contentbank\helper::create_context_folder_node($name, $path);
|
||||
}
|
||||
return $list;
|
||||
}, []);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate nodes for the content bank content in the current context which can be accessed/viewed by the user.
|
||||
*
|
||||
* @return array[] The array containing the content nodes where each content node is an array with keys:
|
||||
* shorttitle, title, datemodified, datecreated, author, license, isref, source, icon, thumbnail.
|
||||
*/
|
||||
private function get_contentbank_content(): array {
|
||||
$cb = new \core_contentbank\contentbank();
|
||||
// Get all content bank files in the current context.
|
||||
$contents = $cb->search_contents(null, $this->context->id);
|
||||
// Return all content bank content nodes from the current context which can be accessed by the user following
|
||||
// the defined conditions in can_access_content().
|
||||
return array_reduce($contents, function($list, $content) {
|
||||
if ($this->can_access_content() &&
|
||||
$contentnode = \repository_contentbank\helper::create_contentbank_content_node($content)) {
|
||||
$list[] = $contentnode;
|
||||
}
|
||||
return $list;
|
||||
}, []);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Utility class for browsing of content bank files in the course context.
|
||||
*
|
||||
* @package repository_contentbank
|
||||
* @copyright 2020 Mihail Geshoski <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace repository_contentbank\browser;
|
||||
|
||||
/**
|
||||
* Represents the content bank browser in the course context.
|
||||
*
|
||||
* @package repository_contentbank
|
||||
* @copyright 2020 Mihail Geshoski <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class contentbank_browser_context_course extends contentbank_browser {
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param \context_course $context The current context
|
||||
*/
|
||||
public function __construct(\context_course $context) {
|
||||
$this->context = $context;
|
||||
}
|
||||
|
||||
/**
|
||||
* Define the allowed child context levels.
|
||||
*
|
||||
* @return int[] The array containing the relevant child context levels
|
||||
*/
|
||||
protected function allowed_child_context_levels(): array {
|
||||
// The course context is the last relevant context level, therefore child context levels are not being returned.
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* The required condition to enable the user to view/access the content bank content in this context.
|
||||
*
|
||||
* @return bool Whether the user can view/access the content bank content in the context
|
||||
*/
|
||||
public function can_access_content(): bool {
|
||||
// When the following conditions are met, the user would be able to share the content created in the course
|
||||
// context level all over the site.
|
||||
// The content from the course context level should be available to:
|
||||
// * Every user which has capability to access the content of a given course.
|
||||
|
||||
return has_capability('repository/contentbank:accesscoursecontent', $this->context);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Utility class for browsing of content bank files in the course category context.
|
||||
*
|
||||
* @package repository_contentbank
|
||||
* @copyright 2020 Mihail Geshoski <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace repository_contentbank\browser;
|
||||
|
||||
/**
|
||||
* Represents the content bank browser in the course category context.
|
||||
*
|
||||
* @package repository_contentbank
|
||||
* @copyright 2020 Mihail Geshoski <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class contentbank_browser_context_coursecat extends contentbank_browser {
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param \context_coursecat $context The current context
|
||||
*/
|
||||
public function __construct(\context_coursecat $context) {
|
||||
$this->context = $context;
|
||||
}
|
||||
|
||||
/**
|
||||
* Define the allowed child context levels.
|
||||
*
|
||||
* @return int[] The array containing the relevant child context levels
|
||||
*/
|
||||
protected function allowed_child_context_levels(): array {
|
||||
// The expected child contexts in the course category context level are the course category context
|
||||
// (ex. subcategories) and the course context.
|
||||
return [\CONTEXT_COURSECAT, \CONTEXT_COURSE];
|
||||
}
|
||||
|
||||
/**
|
||||
* The required condition to enable the user to view/access the content bank content in this context.
|
||||
*
|
||||
* @return bool Whether the user can view/access the content bank content in the context
|
||||
*/
|
||||
public function can_access_content(): bool {
|
||||
// When the following conditions are met, the user would be able to share the content created in the course
|
||||
// category context level all over the site.
|
||||
// The content from the course category context level should be available to either:
|
||||
// * Every user which has a capability to access the 'general' content and has capability to access the
|
||||
// content of any child course of the given course category.
|
||||
// * Users that have capability to access content at a course category context level.
|
||||
|
||||
if (has_capability('repository/contentbank:accesscoursecategorycontent', $this->context)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$canaccesschildcontent = false;
|
||||
foreach ($this->get_child_contexts() as $childcontext) {
|
||||
$browser = \repository_contentbank\helper::get_contentbank_browser($childcontext);
|
||||
if ($canaccesschildcontent = $browser->can_access_content()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $canaccesschildcontent && has_capability('repository/contentbank:accessgeneralcontent',
|
||||
$this->context);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Utility class for browsing of content bank files in the system context.
|
||||
*
|
||||
* @package repository_contentbank
|
||||
* @copyright 2020 Mihail Geshoski <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace repository_contentbank\browser;
|
||||
|
||||
/**
|
||||
* Represents the content bank browser in the system context.
|
||||
*
|
||||
* @package repository_contentbank
|
||||
* @copyright 2020 Mihail Geshoski <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class contentbank_browser_context_system extends contentbank_browser {
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param \context_system $context The current context
|
||||
*/
|
||||
public function __construct(\context_system $context) {
|
||||
$this->context = $context;
|
||||
}
|
||||
|
||||
/**
|
||||
* Define the allowed child context levels.
|
||||
*
|
||||
* @return int[] The array containing the relevant child context levels
|
||||
*/
|
||||
protected function allowed_child_context_levels(): array {
|
||||
// The expected child context in the system context level is the course category context.
|
||||
return [\CONTEXT_COURSECAT];
|
||||
}
|
||||
|
||||
/**
|
||||
* The required condition to enable the user to view/access the content bank content in this context.
|
||||
*
|
||||
* @return bool Whether the user can view/access the content bank content in the context
|
||||
*/
|
||||
public function can_access_content(): bool {
|
||||
// When the following conditions are met, the user would be able to share the content created in the system
|
||||
// context level all over the site.
|
||||
// The content from the system context level should be available to:
|
||||
// * Every user that has a capability to access the 'general' content.
|
||||
|
||||
return has_capability('repository/contentbank:accessgeneralcontent', $this->context);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,133 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Content bank files repository helpers.
|
||||
*
|
||||
* @package repository_contentbank
|
||||
* @copyright 2020 Mihail Geshoski <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace repository_contentbank;
|
||||
|
||||
use repository_contentbank\browser\contentbank_browser;
|
||||
|
||||
/**
|
||||
* Helper class for content bank files repository.
|
||||
*
|
||||
* @package repository_contentbank
|
||||
* @copyright 2020 Mihail Geshoski <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class helper {
|
||||
|
||||
/**
|
||||
* Get the content bank repository browser for a certain context.
|
||||
*
|
||||
* @param \context $context The context
|
||||
* @return \repository_contentbank\browser\contentbank_browser|null The content bank repository browser
|
||||
*/
|
||||
public static function get_contentbank_browser(\context $context): ?contentbank_browser {
|
||||
switch ($context->contextlevel) {
|
||||
case CONTEXT_SYSTEM:
|
||||
return new \repository_contentbank\browser\contentbank_browser_context_system($context);
|
||||
case CONTEXT_COURSECAT:
|
||||
return new \repository_contentbank\browser\contentbank_browser_context_coursecat($context);
|
||||
case CONTEXT_COURSE:
|
||||
return new \repository_contentbank\browser\contentbank_browser_context_course($context);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the context folder node.
|
||||
*
|
||||
* @param string $name The name of the context folder node
|
||||
* @param string $path The path to the context folder node
|
||||
* @return array The context folder node
|
||||
*/
|
||||
public static function create_context_folder_node(string $name, string $path): array {
|
||||
global $OUTPUT;
|
||||
|
||||
return [
|
||||
'title' => $name,
|
||||
'datemodified' => '',
|
||||
'datecreated' => '',
|
||||
'path' => $path,
|
||||
'thumbnail' => $OUTPUT->image_url(file_folder_icon(90))->out(false),
|
||||
'children' => []
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the content bank content node.
|
||||
*
|
||||
* @param \core_contentbank\content $content The content bank content
|
||||
* @return array|null The content bank content node
|
||||
*/
|
||||
public static function create_contentbank_content_node(\core_contentbank\content $content): ?array {
|
||||
global $OUTPUT;
|
||||
// Only content files are currently supported, but should be able to create content folder nodes in the future.
|
||||
// Early return if the content is not a stored file.
|
||||
if (!$file = $content->get_file()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$params = [
|
||||
'contextid' => $file->get_contextid(),
|
||||
'component' => $file->get_component(),
|
||||
'filearea' => $file->get_filearea(),
|
||||
'itemid' => $file->get_itemid(),
|
||||
'filepath' => $file->get_filepath(),
|
||||
'filename' => $file->get_filename()
|
||||
];
|
||||
|
||||
$encodedpath = base64_encode(json_encode($params));
|
||||
|
||||
$node = [
|
||||
'shorttitle' => $content->get_name(),
|
||||
'title' => $file->get_filename(),
|
||||
'datemodified' => $file->get_timemodified(),
|
||||
'datecreated' => $file->get_timecreated(),
|
||||
'author' => $file->get_author(),
|
||||
'license' => $file->get_license(),
|
||||
'isref' => $file->is_external_file(),
|
||||
'source' => $encodedpath,
|
||||
'icon' => $OUTPUT->image_url(file_file_icon($file, 24))->out(false),
|
||||
'thumbnail' => $OUTPUT->image_url(file_file_icon($file, 90))->out(false)
|
||||
];
|
||||
|
||||
if ($file->get_status() == 666) {
|
||||
$node['originalmissing'] = true;
|
||||
}
|
||||
|
||||
return $node;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a navigation node.
|
||||
*
|
||||
* @param \context $context The context
|
||||
* @return array The navigation node
|
||||
*/
|
||||
public static function create_navigation_node(\context $context): array {
|
||||
return [
|
||||
'path' => base64_encode(json_encode(['contextid' => $context->id])),
|
||||
'name' => $context->get_context_name(false)
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Privacy Subsystem implementation for repository_contentbank.
|
||||
*
|
||||
* @package repository_contentbank
|
||||
* @copyright 2020 Mihail Geshoski <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace repository_contentbank\privacy;
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for repository_contentbank implementing null_provider.
|
||||
*
|
||||
* @copyright 2020 Mihail Geshoski <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class provider implements \core_privacy\local\metadata\null_provider {
|
||||
|
||||
/**
|
||||
* Get the language string identifier with the component's language
|
||||
* file to explain why this plugin stores no data.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function get_reason() : string {
|
||||
return 'privacy:metadata';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Plugin capabilities.
|
||||
*
|
||||
* @package repository_contentbank
|
||||
* @copyright 2020 Mihail Geshoski
|
||||
* @author Mihail Geshoski <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$capabilities = [
|
||||
'repository/contentbank:view' => [
|
||||
'captype' => 'read',
|
||||
'contextlevel' => CONTEXT_MODULE,
|
||||
'archetypes' => [
|
||||
'coursecreator' => CAP_ALLOW,
|
||||
'editingteacher' => CAP_ALLOW,
|
||||
'manager' => CAP_ALLOW
|
||||
]
|
||||
],
|
||||
'repository/contentbank:accesscoursecontent' => [
|
||||
'captype' => 'read',
|
||||
'contextlevel' => CONTEXT_COURSE,
|
||||
'archetypes' => [
|
||||
'coursecreator' => CAP_ALLOW,
|
||||
'editingteacher' => CAP_ALLOW,
|
||||
'manager' => CAP_ALLOW
|
||||
]
|
||||
],
|
||||
'repository/contentbank:accesscoursecategorycontent' => [
|
||||
'captype' => 'read',
|
||||
'contextlevel' => CONTEXT_COURSECAT,
|
||||
'archetypes' => [
|
||||
'coursecreator' => CAP_ALLOW,
|
||||
'manager' => CAP_ALLOW
|
||||
]
|
||||
],
|
||||
'repository/contentbank:accessgeneralcontent' => [
|
||||
'captype' => 'read',
|
||||
'contextlevel' => CONTEXT_COURSECAT,
|
||||
'archetypes' => [
|
||||
'user' => CAP_ALLOW
|
||||
]
|
||||
]
|
||||
];
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Installation file for the content bank repository
|
||||
*
|
||||
* @package repository_contentbank
|
||||
* @copyright 2020 Mihail Geshoski <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Create a default instance of the content bank repository
|
||||
*
|
||||
* @return bool A status indicating success or failure
|
||||
*/
|
||||
function xmldb_repository_contentbank_install() {
|
||||
global $CFG;
|
||||
$result = true;
|
||||
require_once($CFG->dirroot.'/repository/lib.php');
|
||||
$userplugin = new repository_type('contentbank', [], true);
|
||||
if (!$id = $userplugin->create(true)) {
|
||||
$result = false;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Strings for component 'repository_contentbank', language 'en'.
|
||||
*
|
||||
* @package repository_contentbank
|
||||
* @copyright 2020 Mihail Geshoski
|
||||
* @author Mihail Geshoski <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
$string['configplugin'] = 'Configuration for content bank repository';
|
||||
$string['pluginname_help'] = 'Files in content bank';
|
||||
$string['pluginname'] = 'Content bank';
|
||||
$string['emptyfilelist'] = 'There are no files to show';
|
||||
$string['contentbank:view'] = 'View content bank repository';
|
||||
$string['contentbank:accesscoursecontent'] = 'Access course content bank files';
|
||||
$string['contentbank:accesscoursecategorycontent'] = 'Access course category content bank files';
|
||||
$string['contentbank:accessgeneralcontent'] = 'Access system content bank files and content bank files from course categories which have an accessible course';
|
||||
$string['privacy:metadata'] = 'The Content bank repository plugin does not store or transmit any personal data.';
|
||||
@@ -0,0 +1,147 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* This plugin is used to access the content bank files.
|
||||
*
|
||||
* @package repository_contentbank
|
||||
* @copyright 2020 Mihail Geshoski <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
require_once($CFG->dirroot . '/repository/lib.php');
|
||||
|
||||
/**
|
||||
* repository_contentbank class is used to browse the content bank files
|
||||
*
|
||||
* @package repository_contentbank
|
||||
* @copyright 2020 Mihail Geshoski <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class repository_contentbank extends repository {
|
||||
|
||||
/**
|
||||
* Get file listing.
|
||||
*
|
||||
* @param string $encodedpath
|
||||
* @param string $page
|
||||
* @return array
|
||||
*/
|
||||
public function get_listing($encodedpath = '', $page = '') {
|
||||
global $SITE;
|
||||
|
||||
$ret = [];
|
||||
$ret['dynload'] = true;
|
||||
$ret['nosearch'] = true;
|
||||
$ret['nologin'] = true;
|
||||
|
||||
// Return the parameters from the encoded path if the encoded path is not empty.
|
||||
if (!empty($encodedpath)) {
|
||||
$params = json_decode(base64_decode($encodedpath), true);
|
||||
if (is_array($params) && isset($params['contextid'])) {
|
||||
$context = context::instance_by_id(clean_param($params['contextid'], PARAM_INT));
|
||||
}
|
||||
}
|
||||
// Return the current context if the context was not specified in the encoded path.
|
||||
// The current context should be an instance of context_system, context_coursecat or course related contexts.
|
||||
if (empty($context) && !empty($this->context)) {
|
||||
if ($this->context instanceof \context_system || $this->context instanceof \context_coursecat) {
|
||||
$context = $this->context;
|
||||
} else if ($coursecontext = $this->context->get_course_context(false)) {
|
||||
// Skip if front page context.
|
||||
if ($coursecontext->instanceid !== $SITE->id) {
|
||||
$context = $coursecontext;
|
||||
}
|
||||
}
|
||||
}
|
||||
// If not, return the system context as a default context.
|
||||
if (empty($context)) {
|
||||
$context = context_system::instance();
|
||||
}
|
||||
|
||||
$ret['list'] = [];
|
||||
$ret['path'] = [];
|
||||
|
||||
// Get the content bank browser for the specified context.
|
||||
if ($browser = \repository_contentbank\helper::get_contentbank_browser($context)) {
|
||||
$manageurl = new moodle_url('/contentbank/index.php', ['contextid' => $context->id]);
|
||||
$canaccesscontent = has_capability('moodle/contentbank:access', $context);
|
||||
$ret['manage'] = $canaccesscontent ? $manageurl->out() : '';
|
||||
$ret['list'] = $browser->get_content();
|
||||
$ret['path'] = $browser->get_navigation();
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this repository used to browse moodle files?
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function has_moodle_files() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tells how the file can be picked from this repository.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function supported_returntypes() {
|
||||
return FILE_INTERNAL | FILE_REFERENCE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this repository accessing private data?
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function contains_private_data() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Repository method to make sure that user can access particular file.
|
||||
*
|
||||
* This is checked when user tries to pick the file from repository to deal with
|
||||
* potential parameter substitutions in request
|
||||
*
|
||||
* @param string $source
|
||||
* @return bool whether the file is accessible by current user
|
||||
*/
|
||||
public function file_is_accessible($source) {
|
||||
global $DB;
|
||||
|
||||
$fileparams = json_decode(base64_decode($source));
|
||||
$itemid = clean_param($fileparams->itemid, PARAM_INT);
|
||||
$contextid = clean_param($fileparams->contextid, PARAM_INT);
|
||||
|
||||
$contentbankfile = $DB->get_record('contentbank_content', ['id' => $itemid]);
|
||||
$plugin = \core_plugin_manager::instance()->get_plugin_info($contentbankfile->contenttype);
|
||||
|
||||
$managerclass = "\\$contentbankfile->contenttype\\content";
|
||||
if ($plugin && $plugin->is_enabled() && class_exists($managerclass)) {
|
||||
$context = \context::instance_by_id($contextid);
|
||||
$browser = \repository_contentbank\helper::get_contentbank_browser($context);
|
||||
return $browser->can_access_content();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 7.2 KiB |
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 23.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 74 51" style="enable-background:new 0 0 74 51;" xml:space="preserve" preserveAspectRatio="xMinYMid meet">
|
||||
<style type="text/css">
|
||||
.st0{fill:#F98012;}
|
||||
.st1{fill:#333333;}
|
||||
</style>
|
||||
<g>
|
||||
<path class="st0" d="M61.9,50.3V27.4c0-4.8-2-7.2-5.9-7.2c-4,0-5.9,2.4-5.9,7.2v22.9H38.4V27.4c0-4.8-1.9-7.2-5.8-7.2
|
||||
c-4,0-5.9,2.4-5.9,7.2v22.9H15V26.1c0-5,1.7-8.8,5.2-11.3c3-2.3,7.2-3.4,12.4-3.4c5.3,0,9.2,1.4,11.6,4.1c2.2-2.7,6.1-4.1,11.8-4.1
|
||||
c5.2,0,9.3,1.1,12.4,3.4c3.5,2.6,5.2,6.3,5.2,11.3v24.3H61.9z"/>
|
||||
<path class="st1" d="M37.6,9.5l11.6-8.5L49,0.6C28.1,3.1,18.6,4.9,0.7,15.4l0.2,0.5l1.4,0c-0.1,1.4-0.4,5-0.1,10.4
|
||||
c-2,5.8,0,9.7,1.8,14c0.3-4.4,0.3-9.3-1.1-14.1c-0.3-5.3,0-8.8,0.1-10.2L14.9,16c0,0-0.1,3.6,0.4,7c10.7,3.7,21.4,0,27.1-9.2
|
||||
C40.7,11.9,37.6,9.5,37.6,9.5z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Content bank files repository data generator
|
||||
*
|
||||
* @package repository_contentbank
|
||||
* @category test
|
||||
* @copyright 2020 Mihail Geshoski
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
/**
|
||||
* Content bank files repository data generator class
|
||||
*
|
||||
* @package repository_contentbank
|
||||
* @category test
|
||||
* @copyright 2020 Mihail Geshoski
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class repository_contentbank_generator extends testing_repository_generator {
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Version details
|
||||
*
|
||||
* @package repository_contentbank
|
||||
* @copyright 2020 Mihail Geshoski
|
||||
* @author Mihail Geshoski <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$plugin->version = 2020042700; // The current plugin version (Date: YYYYMMDDXX).
|
||||
$plugin->requires = 2020041500.00; // Requires this Moodle version.
|
||||
$plugin->component = 'repository_contentbank'; // Full name of the plugin (used for diagnostics).
|
||||
Reference in New Issue
Block a user