MDL-45828 cache: definitions now sorted in the admin UI

This commit is contained in:
Sam Hemelryk 2014-06-10 09:41:30 +12:00
parent ec36fafc0f
commit 6e247996ea
3 changed files with 84 additions and 0 deletions

2
cache/renderer.php vendored
View File

@ -235,6 +235,8 @@ class core_cache_renderer extends plugin_renderer_base {
);
$table->data = array();
core_collator::asort_array_of_arrays_by_key($definitions, 'name');
$none = new lang_string('none', 'cache');
foreach ($definitions as $id => $definition) {
$actions = cache_administration_helper::get_definition_actions($context, $definition);

View File

@ -284,6 +284,46 @@ class core_collator {
return $result;
}
/**
* Locale aware sort of array of arrays.
*
* Given an array like:
* $array = array(
* array('name' => 'bravo'),
* array('name' => 'charlie'),
* array('name' => 'alpha')
* );
*
* If you call:
* core_collator::asort_array_of_arrays_by_key($array, 'name')
*
* You will be returned $array sorted by the name key of the subarrays. e.g.
* $array = array(
* array('name' => 'alpha'),
* array('name' => 'bravo'),
* array('name' => 'charlie')
* );
*
* @param array $array An array of objects to sort (handled by reference)
* @param string $key The key to use for comparison
* @param int $sortflag One of
* core_collator::SORT_NUMERIC,
* core_collator::SORT_STRING,
* core_collator::SORT_NATURAL,
* core_collator::SORT_REGULAR
* optionally "|" core_collator::CASE_SENSITIVE
* @return bool True on success
*/
public static function asort_array_of_arrays_by_key(array &$array, $key, $sortflag = core_collator::SORT_STRING) {
$original = $array;
foreach ($array as $initkey => $item) {
$array[$initkey] = $item[$key];
}
$result = self::asort($array, $sortflag);
self::restore_array($array, $original);
return $result;
}
/**
* Locale aware sorting, the key associations are kept, keys are sorted alphabetically.
*

View File

@ -198,6 +198,48 @@ class core_collator_testcase extends advanced_testcase {
$this->assertTrue($result);
}
/**
* Tests the sorting of an array of arrays by key.
*/
public function test_asort_array_of_arrays_by_key() {
$array = array(
'a' => array('name' => 'bravo'),
'b' => array('name' => 'charlie'),
'c' => array('name' => 'alpha')
);
$this->assertSame(array('a', 'b', 'c'), array_keys($array));
$this->assertTrue(core_collator::asort_array_of_arrays_by_key($array, 'name'));
$this->assertSame(array('c', 'a', 'b'), array_keys($array));
$array = array(
'a' => array('name' => 'b'),
'b' => array('name' => 1),
'c' => array('name' => 0)
);
$this->assertSame(array('a', 'b', 'c'), array_keys($array));
$this->assertTrue(core_collator::asort_array_of_arrays_by_key($array, 'name'));
$this->assertSame(array('c', 'b', 'a'), array_keys($array));
$array = array(
'a' => array('name' => 'áb'),
'b' => array('name' => 'ab'),
1 => array('name' => 'aa'),
'd' => array('name' => 'cc'),
0 => array('name' => 'Áb')
);
$this->assertSame(array('a', 'b', 1, 'd', 0), array_keys($array));
$this->assertTrue(core_collator::asort_array_of_arrays_by_key($array, 'name'));
$this->assertSame(array(1, 'b', 'a', 0, 'd'), array_keys($array));
$this->assertSame(array(
1 => array('name' => 'aa'),
'b' => array('name' => 'ab'),
'a' => array('name' => 'áb'),
0 => array('name' => 'Áb'),
'd' => array('name' => 'cc')
), $array);
}
/**
* Returns an array of sorted names.
* @param array $objects