Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Plugins bot
moodle-plugins-snapshots
Commits
bb72d319
Commit
bb72d319
authored
Jan 17, 2017
by
Dan Poltawski
Browse files
Merge branch 'MDL-57515-master' of
https://github.com/sammarshallou/moodle
parents
5bd052f8
66234de2
Changes
4
Hide whitespace changes
Inline
Side-by-side
lib/filestorage/file_storage.php
View file @
bb72d319
...
...
@@ -799,10 +799,12 @@ class file_storage {
* @param string $sort A fragment of SQL to use for sorting
* @param bool $includedirs whether or not include directories
* @param int $updatedsince return files updated since this time
* @param int $limitfrom return a subset of records, starting at this point (optional).
* @param int $limitnum return a subset comprising this many records in total (optional, required if $limitfrom is set).
* @return stored_file[] array of stored_files indexed by pathanmehash
*/
public
function
get_area_files
(
$contextid
,
$component
,
$filearea
,
$itemid
=
false
,
$sort
=
"itemid, filepath, filename"
,
$includedirs
=
true
,
$updatedsince
=
0
)
{
$includedirs
=
true
,
$updatedsince
=
0
,
$limitfrom
=
0
,
$limitnum
=
0
)
{
global
$DB
;
list
(
$areasql
,
$conditions
)
=
$DB
->
get_in_or_equal
(
$filearea
,
SQL_PARAMS_NAMED
);
...
...
@@ -824,6 +826,16 @@ class file_storage {
$updatedsincesql
=
'AND f.timemodified > :time'
;
}
$includedirssql
=
''
;
if
(
!
$includedirs
)
{
$includedirssql
=
'AND f.filename != :dot'
;
$conditions
[
'dot'
]
=
'.'
;
}
if
(
$limitfrom
&&
!
$limitnum
)
{
throw
new
coding_exception
(
'If specifying $limitfrom you must also specify $limitnum'
);
}
$sql
=
"SELECT "
.
self
::
instance_sql_fields
(
'f'
,
'r'
)
.
"
FROM
{
files
}
f
LEFT JOIN
{
files_reference
}
r
...
...
@@ -831,6 +843,7 @@ class file_storage {
WHERE f.contextid = :contextid
AND f.component = :component
AND f.filearea
$areasql
$includedirssql
$updatedsincesql
$itemidsql
"
;
if
(
!
empty
(
$sort
))
{
...
...
@@ -838,11 +851,8 @@ class file_storage {
}
$result
=
array
();
$filerecords
=
$DB
->
get_records_sql
(
$sql
,
$conditions
);
$filerecords
=
$DB
->
get_records_sql
(
$sql
,
$conditions
,
$limitfrom
,
$limitnum
);
foreach
(
$filerecords
as
$filerecord
)
{
if
(
!
$includedirs
and
$filerecord
->
filename
===
'.'
)
{
continue
;
}
$result
[
$filerecord
->
pathnamehash
]
=
$this
->
get_file_instance
(
$filerecord
);
}
return
$result
;
...
...
lib/filestorage/tests/file_storage_test.php
View file @
bb72d319
...
...
@@ -466,6 +466,17 @@ class core_files_file_storage_testcase extends advanced_testcase {
$this
->
assertEquals
(
$key
,
$file
->
get_pathnamehash
());
}
// Test the limit feature to retrieve each individual file.
$limited
=
$fs
->
get_area_files
(
$user
->
ctxid
,
'user'
,
'private'
,
false
,
'filename'
,
false
,
0
,
0
,
1
);
$mapfunc
=
function
(
$f
)
{
return
$f
->
get_filename
();
};
$this
->
assertEquals
(
array
(
'1.txt'
),
array_values
(
array_map
(
$mapfunc
,
$limited
)));
$limited
=
$fs
->
get_area_files
(
$user
->
ctxid
,
'user'
,
'private'
,
false
,
'filename'
,
false
,
0
,
1
,
50
);
$this
->
assertEquals
(
array
(
'2.txt'
,
'3.txt'
),
array_values
(
array_map
(
$mapfunc
,
$limited
)));
// Test with an itemid with no files.
$areafiles
=
$fs
->
get_area_files
(
$user
->
ctxid
,
'user'
,
'private'
,
666
,
'sortorder'
,
false
);
// Should be none.
...
...
mod/resource/lib.php
View file @
bb72d319
...
...
@@ -213,8 +213,10 @@ function resource_get_coursemodule_info($coursemodule) {
$info
->
icon
=
'i/invalid'
;
return
$info
;
}
// See if there is at least one file.
$fs
=
get_file_storage
();
$files
=
$fs
->
get_area_files
(
$context
->
id
,
'mod_resource'
,
'content'
,
0
,
'sortorder DESC, id ASC'
,
false
);
// TODO: this is not very efficient!!
$files
=
$fs
->
get_area_files
(
$context
->
id
,
'mod_resource'
,
'content'
,
0
,
'sortorder DESC, id ASC'
,
false
,
0
,
0
,
1
);
if
(
count
(
$files
)
>=
1
)
{
$mainfile
=
reset
(
$files
);
$info
->
icon
=
file_file_icon
(
$mainfile
,
24
);
...
...
mod/resource/tests/lib_test.php
View file @
bb72d319
...
...
@@ -89,4 +89,66 @@ class mod_resource_lib_testcase extends advanced_testcase {
$this
->
assertEquals
(
1
,
$completiondata
->
completionstate
);
}
/**
* Tests the resource_get_coursemodule_info function.
*
* Note: This currently doesn't test every aspect of the function, mainly focusing on the icon.
*/
public
function
test_get_coursemodule_info
()
{
global
$DB
,
$USER
;
$this
->
resetAfterTest
();
$this
->
setAdminUser
();
// Create course.
$generator
=
$this
->
getDataGenerator
();
$course
=
$generator
->
create_course
();
// Create a resource with no files.
$draftid
=
file_get_unused_draft_itemid
();
$resource1
=
$generator
->
create_module
(
'resource'
,
array
(
'course'
=>
$course
->
id
,
'name'
=>
'R1'
,
'files'
=>
$draftid
));
// Create a resource with one file.
$draftid
=
file_get_unused_draft_itemid
();
$contextid
=
context_user
::
instance
(
$USER
->
id
)
->
id
;
$filerecord
=
array
(
'component'
=>
'user'
,
'filearea'
=>
'draft'
,
'contextid'
=>
$contextid
,
'itemid'
=>
$draftid
,
'filename'
=>
'r2.txt'
,
'filepath'
=>
'/'
);
$fs
=
get_file_storage
();
$fs
->
create_file_from_string
(
$filerecord
,
'Test'
);
$resource2
=
$generator
->
create_module
(
'resource'
,
array
(
'course'
=>
$course
->
id
,
'name'
=>
'R2'
,
'files'
=>
$draftid
));
// Create a resource with two files.
$draftid
=
file_get_unused_draft_itemid
();
$filerecord
=
array
(
'component'
=>
'user'
,
'filearea'
=>
'draft'
,
'contextid'
=>
$contextid
,
'itemid'
=>
$draftid
,
'filename'
=>
'r3.txt'
,
'filepath'
=>
'/'
,
'sortorder'
=>
1
);
$fs
->
create_file_from_string
(
$filerecord
,
'Test'
);
$filerecord
[
'filename'
]
=
'r3.doc'
;
$filerecord
[
'sortorder'
]
=
2
;
$fs
->
create_file_from_string
(
$filerecord
,
'Test'
);
$resource3
=
$generator
->
create_module
(
'resource'
,
array
(
'course'
=>
$course
->
id
,
'name'
=>
'R3'
,
'files'
=>
$draftid
));
// Try get_coursemodule_info for first one.
$info
=
resource_get_coursemodule_info
(
$DB
->
get_record
(
'course_modules'
,
array
(
'id'
=>
$resource1
->
cmid
)));
// The name should be set. There is no overridden icon.
$this
->
assertEquals
(
'R1'
,
$info
->
name
);
$this
->
assertEmpty
(
$info
->
icon
);
// For second one, there should be an overridden icon.
$info
=
resource_get_coursemodule_info
(
$DB
->
get_record
(
'course_modules'
,
array
(
'id'
=>
$resource2
->
cmid
)));
$this
->
assertEquals
(
'R2'
,
$info
->
name
);
$this
->
assertEquals
(
'f/text-24'
,
$info
->
icon
);
// For third one, it should use the highest sortorder icon.
$info
=
resource_get_coursemodule_info
(
$DB
->
get_record
(
'course_modules'
,
array
(
'id'
=>
$resource3
->
cmid
)));
$this
->
assertEquals
(
'R3'
,
$info
->
name
);
$this
->
assertEquals
(
'f/document-24'
,
$info
->
icon
);
}
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment