From db232bb0f46469592b7a0088aa38c73bfd960451 Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Mon, 17 Sep 2012 15:22:45 +0800 Subject: [PATCH 1/2] MDL-34607 File API: Natural sort on area tree files --- lib/filestorage/file_storage.php | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/lib/filestorage/file_storage.php b/lib/filestorage/file_storage.php index 917705b4493..11065452023 100644 --- a/lib/filestorage/file_storage.php +++ b/lib/filestorage/file_storage.php @@ -398,7 +398,7 @@ class file_storage { * @param bool $includedirs whether or not include directories * @return array of stored_files indexed by pathanmehash */ - public function get_area_files($contextid, $component, $filearea, $itemid = false, $sort = "sortorder, itemid, filepath, filename", $includedirs = true) { + public function get_area_files($contextid, $component, $filearea, $itemid = false, $sort = "itemid, filepath, filename", $includedirs = true) { global $DB; $conditions = array('contextid'=>$contextid, 'component'=>$component, 'filearea'=>$filearea); @@ -443,7 +443,7 @@ class file_storage { */ public function get_area_tree($contextid, $component, $filearea, $itemid) { $result = array('dirname'=>'', 'dirfile'=>null, 'subdirs'=>array(), 'files'=>array()); - $files = $this->get_area_files($contextid, $component, $filearea, $itemid, "sortorder, itemid, filepath, filename", true); + $files = $this->get_area_files($contextid, $component, $filearea, $itemid, '', true); // first create directory structure foreach ($files as $hash=>$dir) { if (!$dir->is_directory()) { @@ -480,9 +480,28 @@ class file_storage { $pointer['files'][$file->get_filename()] = $file; unset($pointer); } + $result = $this->sort_area_tree($result); return $result; } + /** + * Sorts the result of {@link file_storage::get_area_tree()}. + * + * @param array of results provided by {@link file_storage::get_area_tree()} + * @return array of sorted results + */ + protected function sort_area_tree($tree) { + foreach ($tree as $key => &$value) { + if ($key == 'subdirs') { + $value = $this->sort_area_tree($value); + collatorlib::ksort($value, collatorlib::SORT_NATURAL); + } else if ($key == 'files') { + collatorlib::ksort($value, collatorlib::SORT_NATURAL); + } + } + return $tree; + } + /** * Returns all files and optionally directories * From 0f764c023e08bddcce17ae48bf059de18981a6b6 Mon Sep 17 00:00:00 2001 From: Frederic Massart Date: Mon, 17 Sep 2012 17:05:56 +0800 Subject: [PATCH 2/2] MDL-34607 Folder: Remove any sort order during upgrade --- lib/db/upgrade.php | 10 ++++++++++ version.php | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php index 4fc23fc1b38..9de60d5407a 100644 --- a/lib/db/upgrade.php +++ b/lib/db/upgrade.php @@ -1206,5 +1206,15 @@ function xmldb_main_upgrade($oldversion) { upgrade_main_savepoint(true, 2012090700.01); } + if ($oldversion < 2012092000.01) { + // Some folders still have a sortorder set, which is used for main files but is not + // supported by the folder resource. We reset the value here. + $sql = 'UPDATE {files} SET sortorder = ? WHERE component = ? AND filearea = ? AND sortorder <> ?'; + $DB->execute($sql, array(0, 'mod_folder', 'content', 0)); + + // Main savepoint reached. + upgrade_main_savepoint(true, 2012092000.01); + } + return true; } diff --git a/version.php b/version.php index a7954241884..593815a66c9 100644 --- a/version.php +++ b/version.php @@ -30,7 +30,7 @@ defined('MOODLE_INTERNAL') || die(); -$version = 2012092000.00; // YYYYMMDD = weekly release date of this DEV branch +$version = 2012092000.01; // YYYYMMDD = weekly release date of this DEV branch // RR = release increments - 00 in DEV branches // .XX = incremental changes