MDL-53957 form: Support frontpage for selection in course element

This commit is contained in:
Frederic Massart
2016-05-06 09:27:31 +08:00
committed by Andrew Nicols
parent 45b9207d7e
commit 440b4c54ca
6 changed files with 46 additions and 14 deletions
+2
View File
@@ -431,6 +431,7 @@ class core_course_external extends external_api {
$courseinfo['id'] = $course->id;
$courseinfo['fullname'] = $course->fullname;
$courseinfo['shortname'] = $course->shortname;
$courseinfo['displayname'] = external_format_string(get_course_display_name_for_list($course), $context->id);
$courseinfo['categoryid'] = $course->category;
list($courseinfo['summary'], $courseinfo['summaryformat']) =
external_format_text($course->summary, $course->summaryformat, $context->id, 'course', 'summary', 0);
@@ -498,6 +499,7 @@ class core_course_external extends external_api {
'categorysortorder' => new external_value(PARAM_INT,
'sort order into the category', VALUE_OPTIONAL),
'fullname' => new external_value(PARAM_TEXT, 'full name'),
'displayname' => new external_value(PARAM_TEXT, 'course display name'),
'idnumber' => new external_value(PARAM_RAW, 'id number', VALUE_OPTIONAL),
'summary' => new external_value(PARAM_RAW, 'summary'),
'summaryformat' => new external_format_value('summary'),
+1
View File
@@ -561,6 +561,7 @@ class core_course_externallib_testcase extends externallib_advanced_testcase {
$dbcourse = $generatedcourses[$course['id']];
$this->assertEquals($course['idnumber'], $dbcourse->idnumber);
$this->assertEquals($course['fullname'], $dbcourse->fullname);
$this->assertEquals($course['displayname'], get_course_display_name_for_list($dbcourse));
// Summary was converted to the HTML format.
$this->assertEquals($course['summary'], format_text($dbcourse->summary, FORMAT_MOODLE, array('para' => false)));
$this->assertEquals($course['summaryformat'], FORMAT_HTML);
+1 -1
View File
@@ -1 +1 @@
define(["core/ajax","jquery"],function(a,b){return{processResults:function(a,c){var d=[],e=0,f=String(b(a).data("exclude")).split(",");for(e=0;e<c.courses.length;e++)-1===f.indexOf(String(c.courses[e].id))&&d.push({value:c.courses[e].id,label:c.courses[e].displayname});return d},transport:function(c,d,e,f){var g=b(c).data("requiredcapabilities");g=""!==g.trim()?g.split(","):[];var h=b(c).data("limittoenrolled"),i=null;"undefined"==typeof d&&(d="");var j={criterianame:"search",criteriavalue:d,page:0,perpage:100,requiredcapabilities:g,limittoenrolled:h};return i=a.call([{methodname:"core_course_search_courses",args:j}]),i[0].done(e),i[0].fail(f),i}}});
define(["core/ajax","jquery"],function(a,b){return{processResults:function(a,c){var d=[],e=0,f=String(b(a).data("exclude")).split(",");for(e=0;e<c.courses.length;e++)-1===f.indexOf(String(c.courses[e].id))&&d.push({value:c.courses[e].id,label:c.courses[e].displayname});return d},transport:function(c,d,e,f){var g=b(c),h=g.data("requiredcapabilities");h=""!==h.trim()?h.split(","):[];var i=g.data("limittoenrolled"),j=g.data("includefrontpage"),k=null;"undefined"==typeof d&&(d="");var l={criterianame:"search",criteriavalue:d,page:0,perpage:100,requiredcapabilities:h,limittoenrolled:i},m=[{methodname:"core_course_search_courses",args:l}];j&&m.push({methodname:"core_course_get_courses",args:{options:{ids:[j]}}}),k=a.call(m),b.when.apply(b.when,k).done(function(a,b){if(b&&1==b.length){var c=b.pop(),f=""===d||c.fullname.toUpperCase().indexOf(d.toUpperCase())>-1||c.shortname.toUpperCase().indexOf(d.toUpperCase())>-1;f&&a.courses.splice(0,0,c)}e(a)}).fail(f)}}});
+33 -10
View File
@@ -41,18 +41,21 @@ define(['core/ajax', 'jquery'], function(ajax, $) {
},
transport: function(selector, query, success, failure) {
var el = $(selector);
// Parse some data-attributes from the form element.
var requiredcapabilities = $(selector).data('requiredcapabilities');
var requiredcapabilities = el.data('requiredcapabilities');
if (requiredcapabilities.trim() !== "") {
requiredcapabilities = requiredcapabilities.split(',');
} else {
requiredcapabilities = [];
}
var limittoenrolled = $(selector).data('limittoenrolled');
var limittoenrolled = el.data('limittoenrolled');
var includefrontpage = el.data('includefrontpage');
// Build the query.
var promise = null;
var promises = null;
if (typeof query === "undefined") {
query = '';
@@ -66,15 +69,35 @@ define(['core/ajax', 'jquery'], function(ajax, $) {
requiredcapabilities: requiredcapabilities,
limittoenrolled: limittoenrolled
};
// Go go go!
promise = ajax.call([{
var calls = [{
methodname: 'core_course_search_courses', args: searchargs
}]);
}];
if (includefrontpage) {
calls.push({
methodname: 'core_course_get_courses',
args: {
options: {
ids: [includefrontpage]
}
}
});
}
promise[0].done(success);
promise[0].fail(failure);
return promise;
// Go go go!
promises = ajax.call(calls);
$.when.apply($.when, promises).done(function(data, site) {
if (site && site.length == 1) {
var frontpage = site.pop();
var matches = query === ''
|| frontpage.fullname.toUpperCase().indexOf(query.toUpperCase()) > -1
|| frontpage.shortname.toUpperCase().indexOf(query.toUpperCase()) > -1;
if (matches) {
data.courses.splice(0, 0, frontpage);
}
}
success(data);
}).fail(failure);
}
};
});
+8 -2
View File
@@ -69,6 +69,8 @@ class MoodleQuickForm_course extends MoodleQuickForm_autocomplete {
* 'multiple' - boolean multi select
* 'exclude' - array or int, list of course ids to never show
* 'requiredcapabilities' - array of capabilities. Uses ANY to combine them.
* 'limittoenrolled' - boolean Limits to enrolled courses.
* 'includefrontpage' - boolean Enables the frontpage to be selected.
*/
public function __construct($elementname = null, $elementlabel = null, $options = array()) {
if (isset($options['multiple'])) {
@@ -102,6 +104,9 @@ class MoodleQuickForm_course extends MoodleQuickForm_autocomplete {
if (isset($options['placeholder'])) {
$validattributes['placeholder'] = $options['placeholder'];
}
if (!empty($options['includefrontpage'])) {
$validattributes['data-includefrontpage'] = SITEID;
}
parent::__construct($elementname, $elementlabel, array(), $validattributes);
}
@@ -144,11 +149,12 @@ class MoodleQuickForm_course extends MoodleQuickForm_autocomplete {
$coursestoselect = array();
foreach ($list as $course) {
context_helper::preload_from_record($course);
$context = context_course::instance($course->id);
// Make sure we can see the course.
if (!$course->visible && !has_capability('moodle/course:viewhiddencourses', context_course::instance($course->id))) {
if (!$course->visible && !has_capability('moodle/course:viewhiddencourses', $context)) {
continue;
}
$label = get_course_display_name_for_list($course);
$label = format_string(get_course_display_name_for_list($course), true, ['context' => $context]);
$this->addOption($label, $course->id);
array_push($coursestoselect, $course->id);
}
+1 -1
View File
@@ -40,7 +40,7 @@ class mod_feedback_course_map_form extends moodleform {
$mform->addElement('hidden', 'id');
$mform->setType('id', PARAM_INT);
$options = array('multiple' => true);
$options = array('multiple' => true, 'includefrontpage' => true);
$mform->addElement('course', 'mappedcourses', get_string('courses'), $options);
$this->add_action_buttons();