. /** * 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); } }