MDL-53957 form: Support frontpage for selection in course element
This commit is contained in:
committed by
Andrew Nicols
parent
45b9207d7e
commit
440b4c54ca
@@ -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'),
|
||||
|
||||
@@ -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
@@ -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)}}});
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user