in classes/webservices/read_assignments.php [91:299]
public static function assignments_read($courseids = [], $assignmentids = [], $capabilities = [],
$includenotenrolledcourses = false) {
global $USER, $DB, $CFG;
$params = self::validate_parameters(
self::assignments_read_parameters(),
array(
'courseids' => $courseids,
'assignmentids' => $assignmentids,
'capabilities' => $capabilities,
'includenotenrolledcourses' => $includenotenrolledcourses
)
);
$assignmentids = array_flip($params['assignmentids']);
$warnings = array();
$courses = array();
$fields = 'sortorder,shortname,fullname,timemodified';
// If the courseids list is empty, we return only the courses where the user is enrolled in.
if (empty($params['courseids'])) {
$courses = enrol_get_users_courses($USER->id, true, $fields);
$courseids = array_keys($courses);
} else if ($includenotenrolledcourses) {
// In this case, we don't have to check here for enrolmnents. Maybe the user can see the course even if is not enrolled.
$courseids = $params['courseids'];
} else {
// We need to check for enrolments.
$mycourses = enrol_get_users_courses($USER->id, true, $fields);
$mycourseids = array_keys($mycourses);
foreach ($params['courseids'] as $courseid) {
if (!in_array($courseid, $mycourseids)) {
unset($courses[$courseid]);
$warnings[] = array(
'item' => 'course',
'itemid' => $courseid,
'warningcode' => '2',
'message' => 'User is not enrolled or does not have requested capability'
);
} else {
$courses[$courseid] = $mycourses[$courseid];
}
}
$courseids = array_keys($courses);
}
foreach ($courseids as $cid) {
try {
$context = \context_course::instance($cid);
self::validate_context($context);
// Check if this course was already loaded (by enrol_get_users_courses).
if (!isset($courses[$cid])) {
$courses[$cid] = get_course($cid);
}
} catch (Exception $e) {
unset($courses[$cid]);
$warnings[] = array(
'item' => 'course',
'itemid' => $cid,
'warningcode' => '1',
'message' => 'No access rights in course context ' . $e->getMessage()
);
continue;
}
if (count($params['capabilities']) > 0 && !has_all_capabilities($params['capabilities'], $context)) {
unset($courses[$cid]);
}
}
$extrafields = 'm.id as assignmentid, ' .
'm.course, ' .
'm.nosubmissions, ' .
'm.submissiondrafts, ' .
'm.sendnotifications, '.
'm.sendlatenotifications, ' .
'm.sendstudentnotifications, ' .
'm.duedate, ' .
'm.allowsubmissionsfromdate, '.
'm.grade, ' .
'm.timemodified, '.
'm.completionsubmit, ' .
'm.cutoffdate, ' .
'm.teamsubmission, ' .
'm.requireallteammemberssubmit, '.
'm.teamsubmissiongroupingid, ' .
'm.blindmarking, ' .
'm.revealidentities, ' .
'm.attemptreopenmethod, '.
'm.maxattempts, ' .
'm.markingworkflow, ' .
'm.markingallocation, ' .
'm.requiresubmissionstatement, '.
'm.intro, '.
'm.introformat';
$coursearray = array();
foreach ($courses as $id => $course) {
$assignmentarray = array();
// Get a list of assignments for the course.
if ($modules = get_coursemodules_in_course('assign', $courses[$id]->id, $extrafields)) {
foreach ($modules as $module) {
// Check assignment ID filter.
if (!empty($assignmentids) && !isset($assignmentids[$module->assignmentid])) {
continue;
}
$context = \context_module::instance($module->id);
try {
self::validate_context($context);
require_capability('mod/assign:view', $context);
} catch (Exception $e) {
$warnings[] = array(
'item' => 'module',
'itemid' => $module->id,
'warningcode' => '1',
'message' => 'No access rights in module context'
);
continue;
}
$configrecords = $DB->get_recordset('assign_plugin_config', array('assignment' => $module->assignmentid));
$configarray = array();
foreach ($configrecords as $configrecord) {
$configarray[] = array(
'id' => $configrecord->id,
'assignment' => $configrecord->assignment,
'plugin' => $configrecord->plugin,
'subtype' => $configrecord->subtype,
'name' => $configrecord->name,
'value' => $configrecord->value
);
}
$configrecords->close();
$assignment = array(
'id' => $module->assignmentid,
'cmid' => $module->id,
'course' => $module->course,
'name' => $module->name,
'nosubmissions' => $module->nosubmissions,
'submissiondrafts' => $module->submissiondrafts,
'sendnotifications' => $module->sendnotifications,
'sendlatenotifications' => $module->sendlatenotifications,
'sendstudentnotifications' => $module->sendstudentnotifications,
'duedate' => $module->duedate,
'allowsubmissionsfromdate' => $module->allowsubmissionsfromdate,
'grade' => $module->grade,
'timemodified' => $module->timemodified,
'completionsubmit' => $module->completionsubmit,
'cutoffdate' => $module->cutoffdate,
'teamsubmission' => $module->teamsubmission,
'requireallteammemberssubmit' => $module->requireallteammemberssubmit,
'teamsubmissiongroupingid' => $module->teamsubmissiongroupingid,
'blindmarking' => $module->blindmarking,
'revealidentities' => $module->revealidentities,
'attemptreopenmethod' => $module->attemptreopenmethod,
'maxattempts' => $module->maxattempts,
'markingworkflow' => $module->markingworkflow,
'markingallocation' => $module->markingallocation,
'requiresubmissionstatement' => $module->requiresubmissionstatement,
'configs' => $configarray
);
// Return or not intro and file attachments depending on the plugin settings.
$assign = new \assign($context, null, null);
if ($assign->show_intro()) {
list($assignment['intro'], $assignment['introformat']) = external_format_text($module->intro,
$module->introformat, $context->id, 'mod_assign', 'intro', null);
$fs = get_file_storage();
if ($files = $fs->get_area_files($context->id, 'mod_assign', ASSIGN_INTROATTACHMENT_FILEAREA,
0, 'timemodified', false)) {
$assignment['introattachments'] = array();
foreach ($files as $file) {
$filename = $file->get_filename();
$assignment['introattachments'][] = array(
'filename' => $filename,
'mimetype' => $file->get_mimetype(),
'fileurl' => \moodle_url::make_webservice_pluginfile_url(
$context->id, 'mod_assign', ASSIGN_INTROATTACHMENT_FILEAREA, 0, '/', $filename)->out(false)
);
}
}
}
$assignmentarray[] = $assignment;
}
}
$coursearray[] = array(
'id' => $courses[$id]->id,
'fullname' => $courses[$id]->fullname,
'shortname' => $courses[$id]->shortname,
'timemodified' => $courses[$id]->timemodified,
'assignments' => $assignmentarray
);
}
$result = array(
'courses' => $coursearray,
'warnings' => $warnings
);
return $result;
}