diff --git a/admin/classes/local/externalpage/accesscallback.php b/admin/classes/local/externalpage/accesscallback.php new file mode 100644 index 00000000000..05fb07fde7d --- /dev/null +++ b/admin/classes/local/externalpage/accesscallback.php @@ -0,0 +1,71 @@ +. + +/** + * External admin page class that allows a callback to be provided to determine whether page can be accessed + * + * @package core_admin + * @copyright 2019 Marina Glancy + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace core_admin\local\externalpage; + +use admin_externalpage; + +defined('MOODLE_INTERNAL') || die(); + +require_once("{$CFG->libdir}/adminlib.php"); + +/** + * Admin externalpage class + * + * @package core_admin + * @copyright 2019 Marina Glancy + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class accesscallback extends admin_externalpage { + + /** @var callable $accesscheckcallback */ + protected $accesscheckcallback; + + /** + * Class constructor + * + * @param string $name + * @param string $visiblename + * @param string $url + * @param callable $accesscheckcallback The callback method that will be executed to check whether user has access to + * this page. The setting instance ($this) is passed as an argument to the callback. Should return boolean value + * @param bool $hidden + */ + public function __construct(string $name, string $visiblename, string $url, callable $accesscheckcallback, + bool $hidden = false) { + + $this->accesscheckcallback = $accesscheckcallback; + + parent::__construct($name, $visiblename, $url, [], $hidden); + } + + /** + * Determines if the current user has access to this external page based on access callback + * + * @return bool + */ + public function check_access() { + return ($this->accesscheckcallback)($this); + } +} diff --git a/lib/upgrade.txt b/lib/upgrade.txt index c5fe41f75e1..c5b16ddf044 100644 --- a/lib/upgrade.txt +++ b/lib/upgrade.txt @@ -52,6 +52,8 @@ information provided here is intended especially for developers. renamed to `is_listed()` and `get_not_listed()` respectively. * Method `mustache_helper_collection::strip_blacklisted_helpers()` has been deprecated and renamed to `strip_disallowed_helpers()`. +* A new admin externalpage type `\core_admin\local\externalpage\accesscallback` for use in plugin settings is available that allows + a callback to be provided to determine whether page can be accessed. === 3.9 === * Following function has been deprecated, please use \core\task\manager::run_from_cli().