1
0
mirror of https://github.com/moodle/moodle.git synced 2025-04-07 09:23:31 +02:00

Merge branch 'MDL-73226-401' of https://github.com/jleyva/moodle into MOODLE_401_STABLE

This commit is contained in:
Sara Arjona 2023-03-27 16:08:26 +02:00
commit f32c46bf0c
3 changed files with 62 additions and 0 deletions

@ -1191,6 +1191,7 @@ class core_user_external extends external_api {
* Copy files from a draft area to users private files area.
*
* @throws invalid_parameter_exception
* @throws moodle_exception
* @param int $draftid Id of a draft area containing files.
* @return array An array of warnings
* @since Moodle 2.6
@ -1213,6 +1214,15 @@ class core_user_external extends external_api {
if (has_capability('moodle/user:ignoreuserquota', $context)) {
$maxbytes = USER_CAN_IGNORE_FILE_SIZE_LIMITS;
$maxareabytes = FILE_AREA_MAX_BYTES_UNLIMITED;
} else {
// Get current used space for this user.
$usedspace = file_get_user_used_space();
// Get the total size of the new files we want to add to private files.
$newfilesinfo = file_get_draft_area_info($params['draftid']);
if (($newfilesinfo['filesize_without_references'] + $usedspace) > $maxareabytes) {
throw new moodle_exception('maxareabytes');
}
}
$options = array('subdirs' => 1,

@ -1013,6 +1013,54 @@ class externallib_test extends externallib_advanced_testcase {
$this->assertNotEmpty($file);
}
/**
* Test add_user_private_files quota
*/
public function test_add_user_private_files_quota() {
global $USER, $CFG, $DB;
$this->resetAfterTest(true);
$context = \context_system::instance();
$roleid = $this->assignUserCapability('moodle/user:manageownfiles', $context->id);
$context = \context_user::instance($USER->id);
$contextid = $context->id;
$component = "user";
$filearea = "draft";
$itemid = 0;
$filepath = "/";
$filename = "Simple.txt";
$filecontent = base64_encode("Let us create a nice simple file");
$contextlevel = null;
$instanceid = null;
$browser = get_file_browser();
// Call the files api to create a file.
$draftfile = core_files_external::upload($contextid, $component, $filearea, $itemid, $filepath,
$filename, $filecontent, $contextlevel, $instanceid);
$draftfile = \external_api::clean_returnvalue(core_files_external::upload_returns(), $draftfile);
$draftid = $draftfile['itemid'];
// Call the external function to add the file to private files.
core_user_external::add_user_private_files($draftid);
// Force the quota so we are sure it won't be space to add the new file.
$CFG->userquota = file_get_user_used_space() + 1;
// Generate a new draftitemid for the same testfile.
$draftfile = core_files_external::upload($contextid, $component, $filearea, $itemid, $filepath,
$filename, $filecontent, $contextlevel, $instanceid);
$draftid = $draftfile['itemid'];
$this->expectException('moodle_exception');
$this->expectExceptionMessage(get_string('maxareabytes', 'error'));
// Call the external function to include the new file.
core_user_external::add_user_private_files($draftid);
}
/**
* Test add user device
*/

@ -1,5 +1,9 @@
This files describes API changes for code that uses the user API.
=== 4.1.3 ===
* External function core_user_external::add_user_private_files() now returns moodle_exception when the user quota is exceeded
=== 4.1.2 ===
* New method `core_user::is_current_user`, useful for components implementing permission callbacks for their preferences