MDL-49423 tool_mobile: New setting for disabling features
authorJuan Leyva <juanleyvadelgado@gmail.com>
Fri, 30 Dec 2016 17:11:50 +0000 (18:11 +0100)
committerJuan Leyva <juanleyvadelgado@gmail.com>
Fri, 20 Jan 2017 12:10:49 +0000 (13:10 +0100)
admin/tool/mobile/classes/api.php
admin/tool/mobile/classes/external.php
admin/tool/mobile/lang/en/tool_mobile.php
admin/tool/mobile/settings.php
admin/tool/mobile/tests/externallib_test.php
admin/tool/mobile/version.php

index c04bba3..dee797a 100644 (file)
@@ -29,9 +29,10 @@ use core_plugin_manager;
 use context_system;
 use moodle_url;
 use moodle_exception;
+use lang_string;
 
 /**
- * API exposed by tool_mobile, to be used mostly by external functions.
+ * API exposed by tool_mobile, to be used mostly by external functions and the plugin settings.
  *
  * @copyright  2016 Juan Leyva
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
@@ -127,6 +128,7 @@ class api {
             'maintenanceenabled' => $CFG->maintenance_enabled,
             'maintenancemessage' => $maintenancemessage,
             'mobilecssurl' => !empty($CFG->mobilecssurl) ? $CFG->mobilecssurl : '',
+            'tool_mobile_disabledfeatures' => get_config('tool_mobile', 'disabledfeatures'),
         );
 
         $typeoflogin = get_config('tool_mobile', 'typeoflogin');
@@ -207,6 +209,7 @@ class api {
         if (empty($section) or $section == 'mobileapp') {
             $settings->tool_mobile_forcelogout = get_config('tool_mobile', 'forcelogout');
             $settings->tool_mobile_customlangstrings = get_config('tool_mobile', 'customlangstrings');
+            $settings->tool_mobile_disabledfeatures = get_config('tool_mobile', 'disabledfeatures');
         }
 
         return $settings;
@@ -251,4 +254,87 @@ class api {
         $validuntil = time() + self::LOGIN_KEY_TTL;
         return create_user_key('tool_mobile', $USER->id, null, $iprestriction, $validuntil);
     }
+
+    /**
+     * Get a list of the Mobile app features.
+     *
+     * @return array array with the features grouped by theirs ubication in the app.
+     * @since Moodle 3.3
+     */
+    public static function get_features_list() {
+        global $CFG;
+
+        $general = new lang_string('general');
+        $mainmenu = new lang_string('mainmenu', 'tool_mobile');
+        $course = new lang_string('course');
+        $modules = new lang_string('managemodules');
+        $user = new lang_string('user');
+        $files = new lang_string('files');
+        $remoteaddons = new lang_string('remoteaddons', 'tool_mobile');
+
+        $availablemods = core_plugin_manager::instance()->get_plugins_of_type('mod');
+        $coursemodules = array();
+        $appsupportedmodules = array('assign', 'book', 'chat', 'choice', 'folder', 'forum', 'glossary', 'imscp', 'label',
+                                        'lti', 'page', 'quiz', 'resource', 'scorm', 'survey', 'url', 'wiki');
+        foreach ($availablemods as $mod) {
+            if (in_array($mod->name, $appsupportedmodules)) {
+                $coursemodules['$mmCourseDelegate_mmaMod' . ucfirst($mod->name)] = $mod->displayname;
+            }
+        }
+
+        $remoteaddonslist = array();
+        $mobileplugins = self::get_plugins_supporting_mobile();
+        foreach ($mobileplugins as $plugin) {
+            $displayname = core_plugin_manager::instance()->plugin_name($plugin['component']) . " - " . $plugin['addon'];
+            $remoteaddonslist['remoteAddOn_' . $plugin['component'] . '_' . $plugin['addon']] = $displayname;
+
+        }
+
+        $features = array(
+            '$mmLoginEmailSignup' => new lang_string('startsignup'),
+            "$mainmenu" => array(
+                '$mmSideMenuDelegate_mmCourses' => new lang_string('mycourses'),
+                '$mmSideMenuDelegate_mmaFrontpage' => new lang_string('sitehome'),
+                '$mmSideMenuDelegate_mmaGrades' => new lang_string('grades', 'grades'),
+                '$mmSideMenuDelegate_mmaCompetency' => new lang_string('myplans', 'tool_lp'),
+                '$mmSideMenuDelegate_mmaNotifications' => new lang_string('notifications', 'message'),
+                '$mmSideMenuDelegate_mmaMessages' => new lang_string('messages', 'message'),
+                '$mmSideMenuDelegate_mmaCalendar' => new lang_string('calendar', 'calendar'),
+                '$mmSideMenuDelegate_mmaFiles' => new lang_string('files'),
+                '$mmSideMenuDelegate_website' => new lang_string('webpage'),
+                '$mmSideMenuDelegate_help' => new lang_string('help'),
+            ),
+            "$course" => array(
+                '$mmCoursesDelegate_search' => new lang_string('search'),
+                '$mmCoursesDelegate_mmaCompetency' => new lang_string('competencies', 'competency'),
+                '$mmCoursesDelegate_mmaParticipants' => new lang_string('participants'),
+                '$mmCoursesDelegate_mmaGrades' => new lang_string('grades', 'grades'),
+                '$mmCoursesDelegate_mmaCourseCompletion' => new lang_string('coursecompletion', 'completion'),
+                '$mmCoursesDelegate_mmaNotes' => new lang_string('notes', 'notes'),
+            ),
+            "$user" => array(
+                '$mmUserDelegate_mmaBadges' => new lang_string('badges', 'badges'),
+                '$mmUserDelegate_mmaCompetency:learningPlan' => new lang_string('competencies', 'competency'),
+                '$mmUserDelegate_mmaCourseCompletion:viewCompletion' => new lang_string('coursecompletion', 'completion'),
+                '$mmUserDelegate_mmaGrades:viewGrades' => new lang_string('grades', 'grades'),
+                '$mmUserDelegate_mmaMessages:sendMessage' => new lang_string('sendmessage', 'message'),
+                '$mmUserDelegate_mmaMessages:addContact' => new lang_string('addcontact', 'message'),
+                '$mmUserDelegate_mmaMessages:blockContact' => new lang_string('blockcontact', 'message'),
+                '$mmUserDelegate_mmaNotes:addNote' => new lang_string('addnewnote', 'notes'),
+                '$mmUserDelegate_picture' => new lang_string('userpic'),
+            ),
+            "$files" => array(
+                'files_privatefiles' => new lang_string('privatefiles'),
+                'files_sitefiles' => new lang_string('sitefiles'),
+                'files_upload' => new lang_string('upload'),
+            ),
+            "$modules" => $coursemodules,
+        );
+
+        if (!empty($remoteaddonslist)) {
+            $features["$remoteaddons"] = $remoteaddonslist;
+        }
+
+        return $features;
+    }
 }
index b527a49..d56966e 100644 (file)
@@ -149,6 +149,7 @@ class external extends external_api {
                 'typeoflogin' => new external_value(PARAM_INT, 'The type of login. 1 for app, 2 for browser, 3 for embedded.'),
                 'launchurl' => new external_value(PARAM_URL, 'SSO login launch URL. Empty if it won\'t be used.', VALUE_OPTIONAL),
                 'mobilecssurl' => new external_value(PARAM_URL, 'Mobile custom CSS theme', VALUE_OPTIONAL),
+                'tool_mobile_disabledfeatures' => new external_value(PARAM_RAW, 'Disabled features in the app', VALUE_OPTIONAL),
                 'warnings' => new external_warnings(),
             )
         );
index 2979bad..fca608f 100644 (file)
@@ -33,6 +33,8 @@ mm.user.student|Learner|en
 mm.user.student|Aprendiz|es
 </pre>
 For a complete list of string identifiers and more information, see the <a href="{$a}">documentation page</a>.';
+$string['disabledfeatures'] = 'Disabled features';
+$string['disabledfeatures_desc'] = 'Select here the features you want to disable in the Mobile app for your site. Please note that some features listed here could be already disabled via other site settings. You will have to log out and log in again in the app to see the changes.';
 $string['enablesmartappbanners'] = 'Enable Smart App Banners';
 $string['enablesmartappbanners_desc'] = 'This will display a banner promoting the Moodle Mobile app when visiting the site in Mobile Safari.';
 $string['forcedurlscheme'] = 'If you want to allow only your custom branded app to be opened via a browser window, then specify its URL scheme here; otherwise leave the field empty.';
@@ -46,6 +48,7 @@ $string['iosappid_desc'] = 'This setting may be left as default unless you have
 $string['loginintheapp'] = 'Via the app';
 $string['logininthebrowser'] = 'Via a browser window (for SSO plugins)';
 $string['loginintheembeddedbrowser'] = 'Via an embedded browser (for SSO plugins)';
+$string['mainmenu'] = 'Main menu';
 $string['mobileapp'] = 'Mobile app';
 $string['mobileappearance'] = 'Mobile appearance';
 $string['mobileauthentication'] = 'Mobile authentication';
@@ -55,5 +58,6 @@ $string['mobilesettings'] = 'Mobile settings';
 $string['pluginname'] = 'Moodle Mobile tools';
 $string['smartappbanners'] = 'Smart App Banners (iOS only)';
 $string['pluginnotenabledorconfigured'] = 'Plugin not enabled or configured.';
+$string['remoteaddons'] = 'Remote add-ons';
 $string['typeoflogin'] = 'Type of login';
 $string['typeoflogin_desc'] = 'Choose the type of login.';
index d129e5a..c55e368 100644 (file)
@@ -92,6 +92,14 @@ if ($hassiteconfig) {
                     new lang_string('forcelogout', 'tool_mobile'),
                     new lang_string('forcelogout_desc', 'tool_mobile'), 0));
 
+        $temp->add(new admin_setting_heading('tool_mobile/features',
+                    new lang_string('mobilefeatures', 'tool_mobile'), ''));
+
+        $options = tool_mobile\api::get_features_list();
+        $temp->add(new admin_setting_configmultiselect('tool_mobile/disabledfeatures',
+                    new lang_string('disabledfeatures', 'tool_mobile'),
+                    new lang_string('disabledfeatures_desc', 'tool_mobile'), array(), $options));
+
         $temp->add(new admin_setting_heading('tool_mobile/language',
                     new lang_string('language'), ''));
 
index 9b3c49d..d8e6aa4 100644 (file)
@@ -84,6 +84,7 @@ class tool_mobile_external_testcase extends externallib_advanced_testcase {
             'maintenancemessage' => $maintenancemessage,
             'typeoflogin' => api::LOGIN_VIA_APP,
             'mobilecssurl' => '',
+            'tool_mobile_disabledfeatures' => '',
             'warnings' => array()
         );
         $this->assertEquals($expected, $result);
@@ -146,6 +147,7 @@ class tool_mobile_external_testcase extends externallib_advanced_testcase {
             array('name' => 'mygradesurl', 'value' => user_mygrades_url()->out(false)),
             array('name' => 'tool_mobile_forcelogout', 'value' => 0),
             array('name' => 'tool_mobile_customlangstrings', 'value' => ''),
+            array('name' => 'tool_mobile_disabledfeatures', 'value' => ''),
         );
         $this->assertCount(0, $result['warnings']);
         $this->assertEquals($expected, $result['settings']);
index a0ea73c..5fdb190 100644 (file)
@@ -23,7 +23,7 @@
  */
 
 defined('MOODLE_INTERNAL') || die();
-$plugin->version   = 2016120502; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->version   = 2016120503; // The current plugin version (Date: YYYYMMDDXX).
 $plugin->requires  = 2016112900; // Requires this Moodle version.
 $plugin->component = 'tool_mobile'; // Full name of the plugin (used for diagnostics).
 $plugin->dependencies = array(