mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-06-19 11:41:23 +08:00
Sorting: Fixes during testing of sort rules
- Fixed name numeric sorting not working as expected due to bad comparison. - Added name numeric desc operation option. - Added test to ensure each operating has a comparison function.
This commit is contained in:
@ -10,6 +10,7 @@ enum SortRuleOperation: string
|
||||
case NameAsc = 'name_asc';
|
||||
case NameDesc = 'name_desc';
|
||||
case NameNumericAsc = 'name_numeric_asc';
|
||||
case NameNumericDesc = 'name_numeric_desc';
|
||||
case CreatedDateAsc = 'created_date_asc';
|
||||
case CreatedDateDesc = 'created_date_desc';
|
||||
case UpdateDateAsc = 'updated_date_asc';
|
||||
|
@ -8,7 +8,6 @@ use BookStack\Entities\Models\Entity;
|
||||
/**
|
||||
* Sort comparison function for each of the possible SortSetOperation values.
|
||||
* Method names should be camelCase names for the SortSetOperation enum value.
|
||||
* TODO - Test to cover each SortSetOperation enum value is covered.
|
||||
*/
|
||||
class SortSetOperationComparisons
|
||||
{
|
||||
@ -27,9 +26,12 @@ class SortSetOperationComparisons
|
||||
$numRegex = '/^\d+(\.\d+)?/';
|
||||
$aMatches = [];
|
||||
$bMatches = [];
|
||||
preg_match($numRegex, $a, $aMatches);
|
||||
preg_match($numRegex, $b, $bMatches);
|
||||
return ($aMatches[0] ?? 0) <=> ($bMatches[0] ?? 0);
|
||||
preg_match($numRegex, $a->name, $aMatches);
|
||||
preg_match($numRegex, $b->name, $bMatches);
|
||||
$aVal = floatval(($aMatches[0] ?? 0));
|
||||
$bVal = floatval(($bMatches[0] ?? 0));
|
||||
|
||||
return $aVal <=> $bVal;
|
||||
}
|
||||
|
||||
public static function nameNumericDesc(Entity $a, Entity $b): int
|
||||
|
Reference in New Issue
Block a user