Merge branch 'wip-MDL-33857-master' of git://github.com/marinaglancy/moodle
This commit is contained in:
+67
-8
@@ -492,20 +492,79 @@ class data_file_info_container extends file_info {
|
||||
* @return array of file_info instances
|
||||
*/
|
||||
public function get_children() {
|
||||
global $DB;
|
||||
return $this->get_filtered_children('*', false, true);
|
||||
}
|
||||
|
||||
$children = array();
|
||||
$itemids = $DB->get_records('files', array('contextid' => $this->context->id, 'component' => $this->component,
|
||||
'filearea' => $this->filearea), 'itemid DESC', "DISTINCT itemid");
|
||||
foreach ($itemids as $itemid => $unused) {
|
||||
if ($child = $this->browser->get_file_info($this->context, 'mod_data', $this->filearea, $itemid)) {
|
||||
$children[] = $child;
|
||||
}
|
||||
/**
|
||||
* Help function to return files matching extensions or their count
|
||||
*
|
||||
* @param string|array $extensions, either '*' or array of lowercase extensions, i.e. array('.gif','.jpg')
|
||||
* @param bool|int $countonly if false returns the children, if an int returns just the
|
||||
* count of children but stops counting when $countonly number of children is reached
|
||||
* @param bool $returnemptyfolders if true returns items that don't have matching files inside
|
||||
* @return array|int array of file_info instances or the count
|
||||
*/
|
||||
private function get_filtered_children($extensions = '*', $countonly = false, $returnemptyfolders = false) {
|
||||
global $DB;
|
||||
$params = array('contextid' => $this->context->id,
|
||||
'component' => $this->component,
|
||||
'filearea' => $this->filearea);
|
||||
$sql = 'SELECT DISTINCT itemid
|
||||
FROM {files}
|
||||
WHERE contextid = :contextid
|
||||
AND component = :component
|
||||
AND filearea = :filearea';
|
||||
if (!$returnemptyfolders) {
|
||||
$sql .= ' AND filename <> :emptyfilename';
|
||||
$params['emptyfilename'] = '.';
|
||||
}
|
||||
list($sql2, $params2) = $this->build_search_files_sql($extensions);
|
||||
$sql .= ' '.$sql2;
|
||||
$params = array_merge($params, $params2);
|
||||
if ($countonly === false) {
|
||||
$sql .= ' ORDER BY itemid DESC';
|
||||
}
|
||||
|
||||
$rs = $DB->get_recordset_sql($sql, $params);
|
||||
$children = array();
|
||||
foreach ($rs as $record) {
|
||||
if ($child = $this->browser->get_file_info($this->context, 'mod_data', $this->filearea, $record->itemid)) {
|
||||
$children[] = $child;
|
||||
}
|
||||
if ($countonly !== false && count($children) >= $countonly) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
$rs->close();
|
||||
if ($countonly !== false) {
|
||||
return count($children);
|
||||
}
|
||||
return $children;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns list of children which are either files matching the specified extensions
|
||||
* or folders that contain at least one such file.
|
||||
*
|
||||
* @param string|array $extensions, either '*' or array of lowercase extensions, i.e. array('.gif','.jpg')
|
||||
* @return array of file_info instances
|
||||
*/
|
||||
public function get_non_empty_children($extensions = '*') {
|
||||
return $this->get_filtered_children($extensions, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of children which are either files matching the specified extensions
|
||||
* or folders containing at least one such file.
|
||||
*
|
||||
* @param string|array $extensions, for example '*' or array('.gif','.jpg')
|
||||
* @param int $limit stop counting after at least $limit non-empty children are found
|
||||
* @return int
|
||||
*/
|
||||
public function count_non_empty_children($extensions = '*', $limit = 1) {
|
||||
return $this->get_filtered_children($extensions, $limit);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns parent file_info instance
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user