70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
<?php
 | 
						|
 | 
						|
namespace BookStack\Sorting;
 | 
						|
 | 
						|
use BookStack\Entities\Models\Chapter;
 | 
						|
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
 | 
						|
{
 | 
						|
    public static function nameAsc(Entity $a, Entity $b): int
 | 
						|
    {
 | 
						|
        return $a->name <=> $b->name;
 | 
						|
    }
 | 
						|
 | 
						|
    public static function nameDesc(Entity $a, Entity $b): int
 | 
						|
    {
 | 
						|
        return $b->name <=> $a->name;
 | 
						|
    }
 | 
						|
 | 
						|
    public static function nameNumericAsc(Entity $a, Entity $b): int
 | 
						|
    {
 | 
						|
        $numRegex = '/^\d+(\.\d+)?/';
 | 
						|
        $aMatches = [];
 | 
						|
        $bMatches = [];
 | 
						|
        preg_match($numRegex, $a, $aMatches);
 | 
						|
        preg_match($numRegex, $b, $bMatches);
 | 
						|
        return ($aMatches[0] ?? 0) <=> ($bMatches[0] ?? 0);
 | 
						|
    }
 | 
						|
 | 
						|
    public static function nameNumericDesc(Entity $a, Entity $b): int
 | 
						|
    {
 | 
						|
        return -(static::nameNumericAsc($a, $b));
 | 
						|
    }
 | 
						|
 | 
						|
    public static function createdDateAsc(Entity $a, Entity $b): int
 | 
						|
    {
 | 
						|
        return $a->created_at->unix() <=> $b->created_at->unix();
 | 
						|
    }
 | 
						|
 | 
						|
    public static function createdDateDesc(Entity $a, Entity $b): int
 | 
						|
    {
 | 
						|
        return $b->created_at->unix() <=> $a->created_at->unix();
 | 
						|
    }
 | 
						|
 | 
						|
    public static function updatedDateAsc(Entity $a, Entity $b): int
 | 
						|
    {
 | 
						|
        return $a->updated_at->unix() <=> $b->updated_at->unix();
 | 
						|
    }
 | 
						|
 | 
						|
    public static function updatedDateDesc(Entity $a, Entity $b): int
 | 
						|
    {
 | 
						|
        return $b->updated_at->unix() <=> $a->updated_at->unix();
 | 
						|
    }
 | 
						|
 | 
						|
    public static function chaptersFirst(Entity $a, Entity $b): int
 | 
						|
    {
 | 
						|
        return ($b instanceof Chapter ? 1 : 0) - (($a instanceof Chapter) ? 1 : 0);
 | 
						|
    }
 | 
						|
 | 
						|
    public static function chaptersLast(Entity $a, Entity $b): int
 | 
						|
    {
 | 
						|
        return ($a instanceof Chapter ? 1 : 0) - (($b instanceof Chapter) ? 1 : 0);
 | 
						|
    }
 | 
						|
}
 |