. /** * Class for Moodle Mobile tools. * * @package tool_mobile * @copyright 2016 Juan Leyva * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @since Moodle 3.1 */ namespace tool_mobile; use core_component; use core_plugin_manager; use context_system; use moodle_url; /** * API exposed by tool_mobile * * @copyright 2016 Juan Leyva * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @since Moodle 3.1 */ class api { /** @var int to identify the login via app. */ const LOGIN_VIA_APP = 1; /** @var int to identify the login via browser. */ const LOGIN_VIA_BROWSER = 2; /** @var int to identify the login via an embedded browser. */ const LOGIN_VIA_EMBEDDED_BROWSER = 3; /** * Returns a list of Moodle plugins supporting the mobile app. * * @return array an array of objects containing the plugin information */ public static function get_plugins_supporting_mobile() { global $CFG; require_once($CFG->libdir . '/adminlib.php'); $pluginsinfo = []; $plugintypes = core_component::get_plugin_types(); foreach ($plugintypes as $plugintype => $unused) { // We need to include files here. $pluginswithfile = core_component::get_plugin_list_with_file($plugintype, 'db' . DIRECTORY_SEPARATOR . 'mobile.php'); foreach ($pluginswithfile as $plugin => $notused) { $path = core_component::get_plugin_directory($plugintype, $plugin); $component = $plugintype . '_' . $plugin; $version = get_component_version($component); require_once("$path/db/mobile.php"); foreach ($addons as $addonname => $addoninfo) { $plugininfo = array( 'component' => $component, 'version' => $version, 'addon' => $addonname, 'dependencies' => !empty($addoninfo['dependencies']) ? $addoninfo['dependencies'] : array(), 'fileurl' => '', 'filehash' => '', 'filesize' => 0 ); // All the mobile packages must be under the plugin mobile directory. $package = $path . DIRECTORY_SEPARATOR . 'mobile' . DIRECTORY_SEPARATOR . $addonname . '.zip'; if (file_exists($package)) { $plugininfo['fileurl'] = $CFG->wwwroot . '' . str_replace($CFG->dirroot, '', $package); $plugininfo['filehash'] = sha1_file($package); $plugininfo['filesize'] = filesize($package); } $pluginsinfo[] = $plugininfo; } } } return $pluginsinfo; } /** * Returns a list of the site public settings, those not requiring authentication. * * @return array with the settings and warnings */ public static function get_public_config() { global $CFG, $SITE, $PAGE; $context = context_system::instance(); // We need this to make work the format text functions. $PAGE->set_context($context); $settings = array( 'wwwroot' => $CFG->wwwroot, 'httpswwwroot' => $CFG->httpswwwroot, 'sitename' => external_format_string($SITE->fullname, $context->id, true), 'guestlogin' => $CFG->guestloginbutton, 'rememberusername' => $CFG->rememberusername, 'authloginviaemail' => $CFG->authloginviaemail, 'registerauth' => $CFG->registerauth, 'forgottenpasswordurl' => $CFG->forgottenpasswordurl, 'authinstructions' => format_text($CFG->auth_instructions), 'authnoneenabled' => (int) is_enabled_auth('none'), 'enablewebservices' => $CFG->enablewebservices, 'enablemobilewebservice' => $CFG->enablemobilewebservice, 'maintenanceenabled' => $CFG->maintenance_enabled, 'maintenancemessage' => format_text($CFG->maintenance_message), ); $typeoflogin = get_config('tool_mobile', 'typeoflogin'); // Not found, edge case. if ($typeoflogin === false) { $typeoflogin = self::LOGIN_VIA_APP; // Defaults to via app. } $settings['typeoflogin'] = $typeoflogin; if ($typeoflogin == self::LOGIN_VIA_BROWSER or $typeoflogin == self::LOGIN_VIA_EMBEDDED_BROWSER) { $url = new moodle_url("/$CFG->admin/tool/mobile/launch.php"); $settings['launchurl'] = $url->out(false); } return $settings; } /** * Returns a list of site configurations, filtering by section. * * @param string $section section name * @return stdClass object containing the settings */ public static function get_config($section) { global $CFG, $SITE; $settings = new \stdClass; $context = context_system::instance(); $isadmin = has_capability('moodle/site:config', $context); if (empty($section) or $section == 'frontpagesettings') { require_once($CFG->dirroot . '/course/format/lib.php'); // First settings that anyone can deduce. $settings->fullname = $SITE->fullname; $settings->shortname = $SITE->shortname; $settings->summary = $SITE->summary; $settings->frontpage = $CFG->frontpage; $settings->frontpageloggedin = $CFG->frontpageloggedin; $settings->maxcategorydepth = $CFG->maxcategorydepth; $settings->frontpagecourselimit = $CFG->frontpagecourselimit; $settings->numsections = course_get_format($SITE)->get_course()->numsections; $settings->newsitems = $SITE->newsitems; $settings->commentsperpage = $CFG->commentsperpage; // Now, admin settings. if ($isadmin) { $settings->defaultfrontpageroleid = $CFG->defaultfrontpageroleid; } } if (empty($section) or $section == 'sitepolicies') { $settings->disableuserimages = $CFG->disableuserimages; } if (empty($section) or $section == 'gradessettings') { require_once($CFG->dirroot . '/user/lib.php'); $settings->mygradesurl = user_mygrades_url()->out(false); } return $settings; } }