mirror of
https://github.com/moodle/moodle.git
synced 2025-04-21 16:32:18 +02:00
Merge branch 'MDL-68662' of https://github.com/Chocolate-lightning/moodle
This commit is contained in:
commit
56287073d5
@ -61,12 +61,6 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) {
|
||||
array('moodle/restore:restorecourse')
|
||||
)
|
||||
);
|
||||
$ADMIN->add('courses',
|
||||
new admin_externalpage('activitychooser', new lang_string('activitychooserrecommendations', 'course'),
|
||||
new moodle_url('/course/recommendations.php'),
|
||||
array('moodle/course:recommendactivity')
|
||||
)
|
||||
);
|
||||
|
||||
// Course Default Settings Page.
|
||||
// NOTE: these settings must be applied after all other settings because they depend on them.
|
||||
@ -187,6 +181,30 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) {
|
||||
$CFG->wwwroot . '/course/pending.php', array('moodle/site:approvecourse')));
|
||||
}
|
||||
|
||||
// Add a category for the Activity Chooser.
|
||||
$ADMIN->add('courses', new admin_category('activitychooser', new lang_string('activitychoosercategory', 'course')));
|
||||
$temp = new admin_settingpage('activitychoosersettings', new lang_string('activitychoosersettings', 'course'));
|
||||
$temp->add(
|
||||
new admin_setting_configselect(
|
||||
'activitychoosertabmode',
|
||||
new lang_string('activitychoosertabmode', 'course'),
|
||||
new lang_string('activitychoosertabmode_desc', 'course'),
|
||||
0,
|
||||
[
|
||||
0 => new lang_string('activitychoosertabmodeone', 'course'),
|
||||
1 => new lang_string('activitychoosertabmodetwo', 'course'),
|
||||
2 => new lang_string('activitychoosertabmodethree', 'course'),
|
||||
]
|
||||
)
|
||||
);
|
||||
$ADMIN->add('activitychooser', $temp);
|
||||
$ADMIN->add('activitychooser',
|
||||
new admin_externalpage('activitychooserrecommended', new lang_string('activitychooserrecommendations', 'course'),
|
||||
new moodle_url('/course/recommendations.php'),
|
||||
array('moodle/course:recommendactivity')
|
||||
)
|
||||
);
|
||||
|
||||
// Add a category for backups.
|
||||
$ADMIN->add('courses', new admin_category('backups', new lang_string('backups','admin')));
|
||||
|
||||
|
2
course/amd/build/activitychooser.min.js
vendored
2
course/amd/build/activitychooser.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,2 +1,2 @@
|
||||
define ("core_course/local/activitychooser/selectors",["exports"],function(a){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;var b=function(a,b){return"[data-".concat(a,"=\"").concat(b,"\"]")},c={regions:{chooser:b("region","chooser-container"),getSectionChooserOptions:function getSectionChooserOptions(a){return"".concat(a," ").concat(b("region","chooser-options-container"))},chooserOption:{container:b("region","chooser-option-container"),actions:b("region","chooser-option-actions-container"),info:b("region","chooser-option-info-container")},chooserSummary:{container:b("region","chooser-option-summary-container"),content:b("region","chooser-option-summary-content-container"),header:b("region","summary-header"),actions:b("region","chooser-option-summary-actions-container")},carousel:b("region","carousel"),help:b("region","help"),modules:b("region","modules"),favouriteTabNav:b("region","favourite-tab-nav"),recommendedTabNav:b("region","recommended-tab-nav"),defaultTabNav:b("region","default-tab-nav"),favouriteTab:b("region","favourites"),recommendedTab:b("region","recommended"),defaultTab:b("region","default"),getModuleSelector:function getModuleSelector(a){return"[role=\"menuitem\"][data-modname=\"".concat(a,"\"]")},searchResults:b("region","search-results-container"),searchResultItems:b("region","search-result-items-container")},actions:{optionActions:{showSummary:b("action","show-option-summary"),manageFavourite:b("action","manage-module-favourite")},addChooser:b("action","add-chooser-option"),closeOption:b("action","close-chooser-option-summary"),hide:b("action","hide"),search:b("action","search"),clearSearch:b("action","clearsearch")},render:{favourites:b("render","favourites-area")},elements:{section:".section",sectionmodchooser:"button.section-modchooser-link",sitemenu:".block_site_main_menu",sitetopic:"div.sitetopic",tab:"a[data-toggle=\"tab\"]",activetab:"a[data-toggle=\"tab\"][aria-selected=\"true\"]",visibletabs:"a[data-toggle=\"tab\"]:not(.d-none)",searchicon:".input-group-append .search-icon",clearsearch:".input-group-append .clear"}};a.default=c;return a.default});
|
||||
define ("core_course/local/activitychooser/selectors",["exports"],function(a){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;var b=function(a,b){return"[data-".concat(a,"=\"").concat(b,"\"]")},c={regions:{chooser:b("region","chooser-container"),getSectionChooserOptions:function getSectionChooserOptions(a){return"".concat(a," ").concat(b("region","chooser-options-container"))},chooserOption:{container:b("region","chooser-option-container"),actions:b("region","chooser-option-actions-container"),info:b("region","chooser-option-info-container")},chooserSummary:{container:b("region","chooser-option-summary-container"),content:b("region","chooser-option-summary-content-container"),header:b("region","summary-header"),actions:b("region","chooser-option-summary-actions-container")},carousel:b("region","carousel"),help:b("region","help"),modules:b("region","modules"),favouriteTabNav:b("region","favourite-tab-nav"),recommendedTabNav:b("region","recommended-tab-nav"),defaultTabNav:b("region","default-tab-nav"),activityTabNav:b("region","activity-tab-nav"),resourceTabNav:b("region","resources-tab-nav"),favouriteTab:b("region","favourites"),recommendedTab:b("region","recommended"),defaultTab:b("region","default"),activityTab:b("region","activity"),resourceTab:b("region","resources"),getModuleSelector:function getModuleSelector(a){return"[role=\"menuitem\"][data-modname=\"".concat(a,"\"]")},searchResults:b("region","search-results-container"),searchResultItems:b("region","search-result-items-container")},actions:{optionActions:{showSummary:b("action","show-option-summary"),manageFavourite:b("action","manage-module-favourite")},addChooser:b("action","add-chooser-option"),closeOption:b("action","close-chooser-option-summary"),hide:b("action","hide"),search:b("action","search"),clearSearch:b("action","clearsearch")},render:{favourites:b("render","favourites-area")},elements:{section:".section",sectionmodchooser:"button.section-modchooser-link",sitemenu:".block_site_main_menu",sitetopic:"div.sitetopic",tab:"a[data-toggle=\"tab\"]",activetab:"a[data-toggle=\"tab\"][aria-selected=\"true\"]",visibletabs:"a[data-toggle=\"tab\"]:not(.d-none)",searchicon:".input-group-append .search-icon",clearsearch:".input-group-append .clear"}};a.default=c;return a.default});
|
||||
//# sourceMappingURL=selectors.min.js.map
|
||||
|
File diff suppressed because one or more lines are too long
@ -31,16 +31,28 @@ import * as ModalFactory from 'core/modal_factory';
|
||||
import {get_string as getString} from 'core/str';
|
||||
import Pending from 'core/pending';
|
||||
|
||||
// Set up some JS module wide constants that can be added to in the future.
|
||||
|
||||
// Tab config options.
|
||||
const ALLACTIVITIESRESOURCES = 0;
|
||||
const ONLYALL = 1;
|
||||
const ACTIVITIESRESOURCES = 2;
|
||||
|
||||
// Module types.
|
||||
const ACTIVITY = 0;
|
||||
const RESOURCE = 1;
|
||||
|
||||
/**
|
||||
* Set up the activity chooser.
|
||||
*
|
||||
* @method init
|
||||
* @param {Number} courseId Course ID to use later on in fetchModules()
|
||||
* @param {Object} chooserConfig Any PHP config settings that we may need to reference
|
||||
*/
|
||||
export const init = courseId => {
|
||||
export const init = (courseId, chooserConfig) => {
|
||||
const pendingPromise = new Pending();
|
||||
|
||||
registerListenerEvents(courseId);
|
||||
registerListenerEvents(courseId, chooserConfig);
|
||||
|
||||
pendingPromise.resolve();
|
||||
};
|
||||
@ -50,8 +62,9 @@ export const init = courseId => {
|
||||
*
|
||||
* @method registerListenerEvents
|
||||
* @param {Number} courseId
|
||||
* @param {Object} chooserConfig Any PHP config settings that we may need to reference
|
||||
*/
|
||||
const registerListenerEvents = (courseId) => {
|
||||
const registerListenerEvents = (courseId, chooserConfig) => {
|
||||
const events = [
|
||||
'click',
|
||||
CustomEvents.events.activate,
|
||||
@ -108,7 +121,7 @@ const registerListenerEvents = (courseId) => {
|
||||
|
||||
bodyPromiseResolver(await Templates.render(
|
||||
'core_course/activitychooser',
|
||||
templateDataBuilder(builtModuleData)
|
||||
templateDataBuilder(builtModuleData, chooserConfig)
|
||||
));
|
||||
}
|
||||
});
|
||||
@ -138,28 +151,57 @@ const sectionIdMapper = (webServiceData, id) => {
|
||||
*
|
||||
* @method templateDataBuilder
|
||||
* @param {Array} data our modules to manipulate into a Templatable object
|
||||
* @param {Object} chooserConfig Any PHP config settings that we may need to reference
|
||||
* @return {Object} Our built object ready to render out
|
||||
*/
|
||||
const templateDataBuilder = (data) => {
|
||||
const templateDataBuilder = (data, chooserConfig) => {
|
||||
// Setup of various bits and pieces we need to mutate before throwing it to the wolves.
|
||||
let activities = [];
|
||||
let resources = [];
|
||||
let showAll = true;
|
||||
let showActivities = false;
|
||||
let showResources = false;
|
||||
|
||||
// Tab mode can be the following [All, Resources & Activities, All & Activities & Resources].
|
||||
const tabMode = parseInt(chooserConfig.tabmode);
|
||||
|
||||
// Filter the incoming data to find favourite & recommended modules.
|
||||
const favourites = data.filter(mod => mod.favourite === true);
|
||||
const recommended = data.filter(mod => mod.recommended === true);
|
||||
|
||||
// Given the results of the above filters lets figure out what tab to set active.
|
||||
// Both of these modes need Activity & Resource tabs.
|
||||
if ((tabMode === ALLACTIVITIESRESOURCES || tabMode === ACTIVITIESRESOURCES) && tabMode !== ONLYALL) {
|
||||
// Filter the incoming data to find activities then resources.
|
||||
activities = data.filter(mod => mod.archetype === ACTIVITY);
|
||||
resources = data.filter(mod => mod.archetype === RESOURCE);
|
||||
showActivities = true;
|
||||
showResources = true;
|
||||
|
||||
// We want all of the previous information but no 'All' tab.
|
||||
if (tabMode === ACTIVITIESRESOURCES) {
|
||||
showAll = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Given the results of the above filters lets figure out what tab to set active.
|
||||
// We have some favourites.
|
||||
const favouritesFirst = !!favourites.length;
|
||||
// Check if we have no favourites but have some recommended.
|
||||
const recommendedFirst = !!(recommended.length && favouritesFirst === false);
|
||||
// We are in tabMode 2 without any favourites.
|
||||
const activitiesFirst = showAll === false && favouritesFirst === false;
|
||||
// We have nothing fallback to show all modules.
|
||||
const fallback = favouritesFirst === false && recommendedFirst === false;
|
||||
const fallback = showAll === true && favouritesFirst === false;
|
||||
|
||||
return {
|
||||
'default': data,
|
||||
showAll: showAll,
|
||||
activities: activities,
|
||||
showActivities: showActivities,
|
||||
activitiesFirst: activitiesFirst,
|
||||
resources: resources,
|
||||
showResources: showResources,
|
||||
favourites: favourites,
|
||||
recommended: recommended,
|
||||
favouritesFirst: favouritesFirst,
|
||||
recommendedFirst: recommendedFirst,
|
||||
fallback: fallback,
|
||||
};
|
||||
};
|
||||
@ -204,22 +246,22 @@ const nullFavouriteDomManager = (favouriteTabNav, modalBody) => {
|
||||
favouriteTabNav.setAttribute('aria-selected', 'false');
|
||||
const favouriteTab = modalBody.querySelector(selectors.regions.favouriteTab);
|
||||
favouriteTab.classList.remove('active');
|
||||
const recommendedTabNav = modalBody.querySelector(selectors.regions.recommendedTabNav);
|
||||
const defaultTabNav = modalBody.querySelector(selectors.regions.defaultTabNav);
|
||||
if (recommendedTabNav.classList.contains('d-none') === false) {
|
||||
recommendedTabNav.classList.add('active');
|
||||
recommendedTabNav.setAttribute('aria-selected', 'true');
|
||||
recommendedTabNav.tabIndex = 0;
|
||||
recommendedTabNav.focus();
|
||||
const recommendedTab = modalBody.querySelector(selectors.regions.recommendedTab);
|
||||
recommendedTab.classList.add('active');
|
||||
} else {
|
||||
const activitiesTabNav = modalBody.querySelector(selectors.regions.activityTabNav);
|
||||
if (defaultTabNav.classList.contains('d-none') === false) {
|
||||
defaultTabNav.classList.add('active');
|
||||
defaultTabNav.setAttribute('aria-selected', 'true');
|
||||
defaultTabNav.tabIndex = 0;
|
||||
defaultTabNav.focus();
|
||||
const defaultTab = modalBody.querySelector(selectors.regions.defaultTab);
|
||||
defaultTab.classList.add('active');
|
||||
} else {
|
||||
activitiesTabNav.classList.add('active');
|
||||
activitiesTabNav.setAttribute('aria-selected', 'true');
|
||||
activitiesTabNav.tabIndex = 0;
|
||||
activitiesTabNav.focus();
|
||||
const activitiesTab = modalBody.querySelector(selectors.regions.activityTab);
|
||||
activitiesTab.classList.add('active');
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -194,9 +194,11 @@ const registerListenerEvents = (modal, mappedModules, partialFavourite) => {
|
||||
const activeSectionId = body.querySelector(selectors.elements.activetab).getAttribute("href");
|
||||
const sectionChooserOptions = body.querySelector(selectors.regions.getSectionChooserOptions(activeSectionId));
|
||||
const firstChooserOption = sectionChooserOptions.querySelector(selectors.regions.chooserOption.container);
|
||||
|
||||
toggleFocusableChooserOption(firstChooserOption, true);
|
||||
initTabsKeyboardNavigation(body);
|
||||
initChooserOptionsKeyboardNavigation(body, mappedModules, sectionChooserOptions);
|
||||
|
||||
return body;
|
||||
})
|
||||
.catch();
|
||||
@ -214,7 +216,9 @@ const initTabsKeyboardNavigation = (body) => {
|
||||
const favTabNav = body.querySelector(selectors.regions.favouriteTabNav);
|
||||
const recommendedTabNav = body.querySelector(selectors.regions.recommendedTabNav);
|
||||
const defaultTabNav = body.querySelector(selectors.regions.defaultTabNav);
|
||||
const tabNavArray = [favTabNav, recommendedTabNav, defaultTabNav];
|
||||
const activityTabNav = body.querySelector(selectors.regions.activityTabNav);
|
||||
const resourceTabNav = body.querySelector(selectors.regions.resourceTabNav);
|
||||
const tabNavArray = [favTabNav, recommendedTabNav, defaultTabNav, activityTabNav, resourceTabNav];
|
||||
tabNavArray.forEach((element) => {
|
||||
return element.addEventListener('keydown', (e) => {
|
||||
// The first visible navigation tab link.
|
||||
@ -556,6 +560,5 @@ export const displayChooser = (modalPromise, sectionModules, partialFavourite) =
|
||||
});
|
||||
|
||||
return modal;
|
||||
})
|
||||
.catch();
|
||||
}).catch();
|
||||
};
|
||||
|
@ -54,9 +54,13 @@ export default {
|
||||
favouriteTabNav: getDataSelector('region', 'favourite-tab-nav'),
|
||||
recommendedTabNav: getDataSelector('region', 'recommended-tab-nav'),
|
||||
defaultTabNav: getDataSelector('region', 'default-tab-nav'),
|
||||
activityTabNav: getDataSelector('region', 'activity-tab-nav'),
|
||||
resourceTabNav: getDataSelector('region', 'resources-tab-nav'),
|
||||
favouriteTab: getDataSelector('region', 'favourites'),
|
||||
recommendedTab: getDataSelector('region', 'recommended'),
|
||||
defaultTab: getDataSelector('region', 'default'),
|
||||
activityTab: getDataSelector('region', 'activity'),
|
||||
resourceTab: getDataSelector('region', 'resources'),
|
||||
getModuleSelector: modname => `[role="menuitem"][data-modname="${modname}"]`,
|
||||
searchResults: getDataSelector('region', 'search-results-container'),
|
||||
searchResultItems: getDataSelector('region', 'search-result-items-container'),
|
||||
|
@ -158,7 +158,11 @@ class core_course_renderer extends plugin_renderer_base {
|
||||
return '';
|
||||
}
|
||||
|
||||
$this->page->requires->js_call_amd('core_course/activitychooser', 'init', [$courseid]);
|
||||
// Build an object of config settings that we can then hook into in the Activity Chooser.
|
||||
$chooserconfig = (object) [
|
||||
'tabmode' => get_config('core', 'activitychoosertabmode'),
|
||||
];
|
||||
$this->page->requires->js_call_amd('core_course/activitychooser', 'init', [$courseid, $chooserconfig]);
|
||||
|
||||
return '';
|
||||
}
|
||||
|
@ -55,20 +55,7 @@
|
||||
>
|
||||
{{#str}} favourites, core {{/str}}
|
||||
</a>
|
||||
<a class="nav-item nav-link {{#recommendedFirst}}active{{/recommendedFirst}} {{^recommended}}d-none{{/recommended}}"
|
||||
id="recommended-tab-{{uniqid}}"
|
||||
data-region="recommended-tab-nav"
|
||||
data-toggle="tab"
|
||||
href="#recommended-{{uniqid}}"
|
||||
role="tab"
|
||||
aria-label="{{#str}} aria:recommendedtab, core_course {{/str}}"
|
||||
aria-controls="recommended-{{uniqid}}"
|
||||
aria-selected="{{#recommendedFirst}}true{{/recommendedFirst}}{{^recommendedFirst}}false{{/recommendedFirst}}"
|
||||
tabindex="{{#recommendedFirst}}0{{/recommendedFirst}}{{^recommendedFirst}}-1{{/recommendedFirst}}"
|
||||
>
|
||||
{{#str}} recommended, core {{/str}}
|
||||
</a>
|
||||
<a class="nav-item nav-link {{#fallback}}active{{/fallback}}"
|
||||
<a class="nav-item nav-link {{#fallback}}active{{/fallback}} {{^showAll}}d-none{{/showAll}}"
|
||||
id="all-tab-{{uniqid}}"
|
||||
data-toggle="tab"
|
||||
data-region="default-tab-nav"
|
||||
@ -78,9 +65,48 @@
|
||||
aria-controls="all-{{uniqid}}"
|
||||
aria-selected="{{#fallback}}true{{/fallback}}{{^fallback}}false{{/fallback}}"
|
||||
tabindex="{{#fallback}}0{{/fallback}}{{^fallback}}-1{{/fallback}}"
|
||||
>
|
||||
{{#str}} all, core {{/str}}
|
||||
</a>
|
||||
<a class="nav-item nav-link {{#activitiesFirst}}active{{/activitiesFirst}} {{^showActivities}}d-none{{/showActivities}}"
|
||||
id="activity-tab-{{uniqid}}"
|
||||
data-toggle="tab"
|
||||
data-region="activity-tab-nav"
|
||||
href="#activity-{{uniqid}}"
|
||||
role="tab"
|
||||
aria-label="{{#str}} activities, core {{/str}}"
|
||||
aria-controls="activity-{{uniqid}}"
|
||||
aria-selected="{{#activitiesFirst}}true{{/activitiesFirst}}{{^activitiesFirst}}false{{/activitiesFirst}}"
|
||||
tabindex="{{#activitiesFirst}}0{{/activitiesFirst}}{{^activitiesFirst}}-1{{/activitiesFirst}}"
|
||||
>
|
||||
{{#str}} activities, core {{/str}}
|
||||
</a>
|
||||
<a class="nav-item nav-link {{^showResources}}d-none{{/showResources}}"
|
||||
id="resources-tab-{{uniqid}}"
|
||||
data-toggle="tab"
|
||||
data-region="resources-tab-nav"
|
||||
href="#resources-{{uniqid}}"
|
||||
role="tab"
|
||||
aria-label="{{#str}} resources, core {{/str}}"
|
||||
aria-controls="resources-{{uniqid}}"
|
||||
aria-selected="false"
|
||||
tabindex="-1"
|
||||
>
|
||||
{{#str}} resources, core {{/str}}
|
||||
</a>
|
||||
<a class="nav-item nav-link {{^recommended}}d-none{{/recommended}}"
|
||||
id="recommended-tab-{{uniqid}}"
|
||||
data-region="recommended-tab-nav"
|
||||
data-toggle="tab"
|
||||
href="#recommended-{{uniqid}}"
|
||||
role="tab"
|
||||
aria-label="{{#str}} aria:recommendedtab, core_course {{/str}}"
|
||||
aria-controls="recommended-{{uniqid}}"
|
||||
aria-selected="false"
|
||||
tabindex="-1"
|
||||
>
|
||||
{{#str}} recommended, core {{/str}}
|
||||
</a>
|
||||
</div>
|
||||
<div class="tab-content" id="tabbed-activities-{{uniqid}}">
|
||||
<div class="tab-pane {{#favouritesFirst}}active{{/favouritesFirst}}" id="starred-{{uniqid}}" data-region="favourites" role="tabpanel" aria-labelledby="starred-tab-{{uniqid}}">
|
||||
@ -88,20 +114,34 @@
|
||||
{{>core_course/local/activitychooser/favourites}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane {{#recommendedFirst}}active{{/recommendedFirst}}" id="recommended-{{uniqid}}" data-region="recommended" role="tabpanel" aria-labelledby="recommended-tab-{{uniqid}}">
|
||||
<div class="optionscontainer d-flex flex-wrap p-1 mw-100 position-relative" role="menubar" data-region="chooser-options-container">
|
||||
{{#recommended}}
|
||||
{{>core_course/local/activitychooser/item}}
|
||||
{{/recommended}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane {{#fallback}}active{{/fallback}}" id="all-{{uniqid}}" data-region="default" role="tabpanel" aria-labelledby="all-tab-{{uniqid}}">
|
||||
<div class="tab-pane {{#fallback}}active{{/fallback}} {{^showAll}}d-none{{/showAll}}" id="all-{{uniqid}}" data-region="default" role="tabpanel" aria-labelledby="all-tab-{{uniqid}}">
|
||||
<div class="optionscontainer d-flex flex-wrap p-1 mw-100 position-relative" role="menubar" data-region="chooser-options-container">
|
||||
{{#default}}
|
||||
{{>core_course/local/activitychooser/item}}
|
||||
{{/default}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane {{#activitiesFirst}}active{{/activitiesFirst}}" id="activity-{{uniqid}}" data-region="activity" role="tabpanel" aria-labelledby="activity-tab-{{uniqid}}">
|
||||
<div class="optionscontainer d-flex flex-wrap p-1 mw-100 position-relative" role="menubar" data-region="chooser-options-container">
|
||||
{{#activities}}
|
||||
{{>core_course/local/activitychooser/item}}
|
||||
{{/activities}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane" id="resources-{{uniqid}}" data-region="resources" role="tabpanel" aria-labelledby="resources-tab-{{uniqid}}">
|
||||
<div class="optionscontainer d-flex flex-wrap p-1 mw-100 position-relative" role="menubar" data-region="chooser-options-container">
|
||||
{{#resources}}
|
||||
{{>core_course/local/activitychooser/item}}
|
||||
{{/resources}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane" id="recommended-{{uniqid}}" data-region="recommended" role="tabpanel" aria-labelledby="recommended-tab-{{uniqid}}">
|
||||
<div class="optionscontainer d-flex flex-wrap p-1 mw-100 position-relative" role="menubar" data-region="chooser-options-container">
|
||||
{{#recommended}}
|
||||
{{>core_course/local/activitychooser/item}}
|
||||
{{/recommended}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -58,7 +58,7 @@ Feature: Display and choose from the available activities in course
|
||||
When I log out
|
||||
And I log in as "admin"
|
||||
And I am on site homepage
|
||||
And I navigate to "Courses > Recommended activities" in site administration
|
||||
And I navigate to "Courses > Activity chooser > Recommended activities" in site administration
|
||||
And I click on ".activity-recommend-checkbox" "css_element" in the "Book" "table_row"
|
||||
# Setup done, lets check it works with a teacher.
|
||||
And I log out
|
||||
@ -148,3 +148,40 @@ Feature: Display and choose from the available activities in course
|
||||
Then I should not see "Search query"
|
||||
And ".searchresultscontainer" "css_element" should not exist
|
||||
And ".optionscontainer" "css_element" should exist
|
||||
|
||||
Scenario: Teacher gets the base case for the Activity Chooser tab mode
|
||||
Given I click on "Add an activity" "button" in the "Topic 1" "section"
|
||||
And I should see "Activities" in the "Add an activity" "dialogue"
|
||||
When I click on "Activities" "link" in the "Add an activity" "dialogue"
|
||||
Then I should not see "Book" in the "activity" "core_course > Activity chooser tab"
|
||||
And I click on "Resources" "link" in the "Add an activity" "dialogue"
|
||||
And I should not see "Assignment" in the "resources" "core_course > Activity chooser tab"
|
||||
|
||||
Scenario: Teacher gets the simple case for the Activity Chooser tab mode
|
||||
Given I log out
|
||||
And I log in as "admin"
|
||||
And I am on site homepage
|
||||
When I navigate to "Courses > Activity chooser > Activity chooser settings" in site administration
|
||||
And I select "Starred, All, Recommended" from the "Activity chooser tabs" singleselect
|
||||
And I press "Save changes"
|
||||
And I log out
|
||||
And I log in as "teacher"
|
||||
And I am on "Course" course homepage with editing mode on
|
||||
And I click on "Add an activity" "button" in the "Topic 1" "section"
|
||||
Then I should not see "Activities" in the "Add an activity" "dialogue"
|
||||
And I should not see "Resources" in the "Add an activity" "dialogue"
|
||||
|
||||
Scenario: Teacher gets the final case for the Activity Chooser tab mode
|
||||
Given I log out
|
||||
And I log in as "admin"
|
||||
And I am on site homepage
|
||||
When I navigate to "Courses > Activity chooser > Activity chooser settings" in site administration
|
||||
And I select "Starred, Activities, Resources, Recommended" from the "Activity chooser tabs" singleselect
|
||||
And I press "Save changes"
|
||||
And I log out
|
||||
And I log in as "teacher"
|
||||
And I am on "Course" course homepage with editing mode on
|
||||
And I click on "Add an activity" "button" in the "Topic 1" "section"
|
||||
Then I should not see "All" in the "Add an activity" "dialogue"
|
||||
And I should see "Activities" in the "Add an activity" "dialogue"
|
||||
And I should see "Resources" in the "Add an activity" "dialogue"
|
||||
|
@ -5,24 +5,24 @@ Feature: Recommending activities
|
||||
Scenario: As an admin I can recommend activities from an admin setting page.
|
||||
Given I log in as "admin"
|
||||
And I am on site homepage
|
||||
And I navigate to "Courses > Recommended activities" in site administration
|
||||
And I navigate to "Courses > Activity chooser > Recommended activities" in site administration
|
||||
And I click on ".activity-recommend-checkbox" "css" in the "Assignment" "table_row"
|
||||
And I navigate to "Courses > Add a new course" in site administration
|
||||
When I navigate to "Courses > Recommended activities" in site administration
|
||||
When I navigate to "Courses > Activity chooser > Recommended activities" in site administration
|
||||
Then "input[aria-label=\"Recommend activity: Assignment\"][checked=checked]" "css_element" should exist
|
||||
And "input[aria-label=\"Recommend activity: Book\"]:not([checked=checked])" "css_element" should exist
|
||||
|
||||
Scenario: As an admin I can remove recommend activities from an admin setting page.
|
||||
Given I log in as "admin"
|
||||
And I am on site homepage
|
||||
And I navigate to "Courses > Recommended activities" in site administration
|
||||
And I navigate to "Courses > Activity chooser > Recommended activities" in site administration
|
||||
And I click on ".activity-recommend-checkbox" "css" in the "Assignment" "table_row"
|
||||
And I navigate to "Courses > Add a new course" in site administration
|
||||
And I navigate to "Courses > Recommended activities" in site administration
|
||||
And I navigate to "Courses > Activity chooser > Recommended activities" in site administration
|
||||
And "input[aria-label=\"Recommend activity: Assignment\"][checked=checked]" "css_element" should exist
|
||||
And "input[aria-label=\"Recommend activity: Book\"]:not([checked=checked])" "css_element" should exist
|
||||
And I click on ".activity-recommend-checkbox" "css" in the "Assignment" "table_row"
|
||||
And I navigate to "Courses > Add a new course" in site administration
|
||||
When I navigate to "Courses > Recommended activities" in site administration
|
||||
When I navigate to "Courses > Activity chooser > Recommended activities" in site administration
|
||||
Then "input[aria-label=\"Recommend activity: Assignment\"]:not([checked=checked])" "css_element" should exist
|
||||
And "input[aria-label=\"Recommend activity: Book\"]:not([checked=checked])" "css_element" should exist
|
||||
|
@ -5,7 +5,7 @@ Feature: Search recommended activities
|
||||
Scenario: Search results are returned if the search query matches any activity names
|
||||
Given I log in as "admin"
|
||||
And I am on site homepage
|
||||
And I navigate to "Courses > Recommended activities" in site administration
|
||||
And I navigate to "Courses > Activity chooser > Recommended activities" in site administration
|
||||
When I set the field "search" to "assign"
|
||||
And I click on "Submit search" "button"
|
||||
Then I should see "Search results: 1"
|
||||
@ -15,7 +15,7 @@ Feature: Search recommended activities
|
||||
Scenario: Search results are not returned if the search query does not match with any activity names
|
||||
Given I log in as "admin"
|
||||
And I am on site homepage
|
||||
And I navigate to "Courses > Recommended activities" in site administration
|
||||
And I navigate to "Courses > Activity chooser > Recommended activities" in site administration
|
||||
When I set the field "search" to "random query"
|
||||
And I click on "Submit search" "button"
|
||||
Then I should see "Search results: 0"
|
||||
|
@ -22,7 +22,14 @@
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
$string['activitychoosercategory'] = 'Activity chooser';
|
||||
$string['activitychooserrecommendations'] = 'Recommended activities';
|
||||
$string['activitychoosersettings'] = 'Activity chooser settings';
|
||||
$string['activitychoosertabmode'] = 'Activity chooser tabs';
|
||||
$string['activitychoosertabmode_desc'] = "The activity chooser enables a teacher to easily select activities and resources to add to their course. This setting determines which tabs should be displayed in it. Note that the starred tab is only displayed for a user if they have starred one or more activities and the recommended tab is only displayed if a site administrator has specified some recommended activities.";
|
||||
$string['activitychoosertabmodeone'] = 'Starred, All, Activities, Resources, Recommended';
|
||||
$string['activitychoosertabmodetwo'] = 'Starred, All, Recommended';
|
||||
$string['activitychoosertabmodethree'] = 'Starred, Activities, Resources, Recommended';
|
||||
$string['aria:coursecategory'] = 'Course category';
|
||||
$string['aria:courseimage'] = 'Course image';
|
||||
$string['aria:courseshortname'] = 'Course short name';
|
||||
|
Loading…
x
Reference in New Issue
Block a user