mirror of
https://github.com/moodle/moodle.git
synced 2025-04-21 08:22:07 +02:00
Merge branch 'MDL-49453-master' of git://github.com/jleyva/moodle
Conflicts: lib/db/services.php
This commit is contained in:
commit
7c5dbf0396
@ -2046,6 +2046,70 @@ class core_course_external extends external_api {
|
||||
public static function delete_modules_returns() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns description of method parameters
|
||||
*
|
||||
* @return external_function_parameters
|
||||
* @since Moodle 2.9
|
||||
*/
|
||||
public static function view_course_parameters() {
|
||||
return new external_function_parameters(
|
||||
array(
|
||||
'courseid' => new external_value(PARAM_INT, 'id of the course'),
|
||||
'sectionnumber' => new external_value(PARAM_INT, 'section number', VALUE_DEFAULT, 0)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Simulate the view.php web interface page, logging events, completion, etc...
|
||||
*
|
||||
* @param int $courseid id of course
|
||||
* @param int $sectionnumber sectionnumber (0, 1, 2...)
|
||||
* @return array of warnings and status result
|
||||
* @since Moodle 2.9
|
||||
* @throws moodle_exception
|
||||
*/
|
||||
public static function view_course($courseid, $sectionnumber = 0) {
|
||||
global $CFG;
|
||||
require_once($CFG->dirroot . "/course/lib.php");
|
||||
|
||||
$params = self::validate_parameters(self::view_course_parameters(),
|
||||
array(
|
||||
'courseid' => $courseid,
|
||||
'sectionnumber' => $sectionnumber
|
||||
));
|
||||
|
||||
$warnings = array();
|
||||
|
||||
$course = get_course($params['courseid']);
|
||||
$context = context_course::instance($course->id);
|
||||
self::validate_context($context);
|
||||
|
||||
course_view($context, $params['sectionnumber']);
|
||||
|
||||
$result = array();
|
||||
$result['status'] = true;
|
||||
$result['warnings'] = $warnings;
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns description of method result value
|
||||
*
|
||||
* @return external_description
|
||||
* @since Moodle 2.9
|
||||
*/
|
||||
public static function view_course_returns() {
|
||||
return new external_single_structure(
|
||||
array(
|
||||
'status' => new external_value(PARAM_BOOL, 'status: true if success'),
|
||||
'warnings' => new external_warnings()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -3756,3 +3756,23 @@ function course_change_sortorder_after_course($courseorid, $moveaftercourseid) {
|
||||
cache_helper::purge_by_event('changesincourse');
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Trigger course viewed event. This API function is used when course view actions happens,
|
||||
* usually in course/view.php but also in external functions.
|
||||
*
|
||||
* @param stdClass $context course context object
|
||||
* @param int $sectionnumber section number
|
||||
* @since Moodle 2.9
|
||||
*/
|
||||
function course_view($context, $sectionnumber = 0) {
|
||||
|
||||
$eventdata = array('context' => $context);
|
||||
|
||||
if (!empty($sectionnumber)) {
|
||||
$eventdata['other']['coursesectionnumber'] = $sectionnumber;
|
||||
}
|
||||
|
||||
$event = \core\event\course_viewed::create($eventdata);
|
||||
$event->trigger();
|
||||
}
|
||||
|
@ -1386,4 +1386,39 @@ class core_course_externallib_testcase extends externallib_advanced_testcase {
|
||||
// Import from course1 to course2, with invalid option
|
||||
core_course_external::import_course($course1->id, $course2->id, -1);;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test view_course function
|
||||
*/
|
||||
public function test_view_course() {
|
||||
|
||||
$this->resetAfterTest();
|
||||
|
||||
// Course without sections.
|
||||
$course = $this->getDataGenerator()->create_course(array('numsections' => 5), array('createsections' => true));
|
||||
$this->setAdminUser();
|
||||
|
||||
// Redirect events to the sink, so we can recover them later.
|
||||
$sink = $this->redirectEvents();
|
||||
|
||||
core_course_external::view_course($course->id, 1);
|
||||
$events = $sink->get_events();
|
||||
$event = reset($events);
|
||||
|
||||
// Check the event details are correct.
|
||||
$this->assertInstanceOf('\core\event\course_viewed', $event);
|
||||
$this->assertEquals(context_course::instance($course->id), $event->get_context());
|
||||
$this->assertEquals(1, $event->other['coursesectionnumber']);
|
||||
|
||||
core_course_external::view_course($course->id);
|
||||
$events = $sink->get_events();
|
||||
$event = array_pop($events);
|
||||
$sink->close();
|
||||
|
||||
// Check the event details are correct.
|
||||
$this->assertInstanceOf('\core\event\course_viewed', $event);
|
||||
$this->assertEquals(context_course::instance($course->id), $event->get_context());
|
||||
$this->assertEmpty($event->other);
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -285,12 +285,7 @@
|
||||
// Trigger course viewed event.
|
||||
// We don't trust $context here. Course format inclusion above executes in the global space. We can't assume
|
||||
// anything after that point.
|
||||
$eventdata = array('context' => context_course::instance($course->id));
|
||||
if (!empty($section) && (int)$section == $section) {
|
||||
$eventdata['other'] = array('coursesectionnumber' => $section);
|
||||
}
|
||||
$event = \core\event\course_viewed::create($eventdata);
|
||||
$event->trigger();
|
||||
course_view(context_course::instance($course->id), $section);
|
||||
|
||||
// Include course AJAX
|
||||
include_course_ajax($course, $modnamesused);
|
||||
|
@ -78,9 +78,8 @@ if (get_home_page() != HOMEPAGE_SITE) {
|
||||
}
|
||||
}
|
||||
|
||||
$eventparams = array('context' => context_course::instance(SITEID));
|
||||
$event = \core\event\course_viewed::create($eventparams);
|
||||
$event->trigger();
|
||||
// Trigger event.
|
||||
course_view(context_course::instance(SITEID));
|
||||
|
||||
// If the hub plugin is installed then we let it take over the homepage here.
|
||||
if (file_exists($CFG->dirroot.'/local/hub/lib.php') and get_config('local_hub', 'hubenabled')) {
|
||||
|
@ -670,6 +670,15 @@ $functions = array(
|
||||
'capabilities'=> 'moodle/course:update,moodle/course:changecategory,moodle/course:changefullname,moodle/course:changeshortname,moodle/course:changeidnumber,moodle/course:changesummary,moodle/course:visibility',
|
||||
),
|
||||
|
||||
'core_course_view_course' => array(
|
||||
'classname' => 'core_course_external',
|
||||
'methodname' => 'view_course',
|
||||
'classpath' => 'course/externallib.php',
|
||||
'description' => 'Log that the course was viewed',
|
||||
'type' => 'write'
|
||||
),
|
||||
|
||||
|
||||
// === course category related functions ===
|
||||
|
||||
'core_course_get_categories' => array(
|
||||
@ -1036,6 +1045,7 @@ $services = array(
|
||||
'mod_data_get_databases_by_courses',
|
||||
'core_comment_get_comments',
|
||||
'mod_forum_view_forum',
|
||||
'core_course_view_course',
|
||||
),
|
||||
'enabled' => 0,
|
||||
'restrictedusers' => 0,
|
||||
|
Loading…
x
Reference in New Issue
Block a user