mirror of
				https://github.com/BookStackApp/BookStack.git
				synced 2025-10-25 06:37:36 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			50 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace BookStack\Sorting;
 | |
| 
 | |
| /**
 | |
|  * Generate a URL with multiple parameters for sorting purposes.
 | |
|  * Works out the logic to set the correct sorting direction
 | |
|  * Discards empty parameters and allows overriding.
 | |
|  */
 | |
| class SortUrl
 | |
| {
 | |
|     public function __construct(
 | |
|         protected string $path,
 | |
|         protected array $data,
 | |
|         protected array $overrideData = []
 | |
|     ) {
 | |
|     }
 | |
| 
 | |
|     public function withOverrideData(array $overrideData = []): self
 | |
|     {
 | |
|         return new self($this->path, $this->data, $overrideData);
 | |
|     }
 | |
| 
 | |
|     public function build(): string
 | |
|     {
 | |
|         $queryStringSections = [];
 | |
|         $queryData = array_merge($this->data, $this->overrideData);
 | |
| 
 | |
|         // Change sorting direction if already sorted on current attribute
 | |
|         if (isset($this->overrideData['sort']) && $this->overrideData['sort'] === $this->data['sort']) {
 | |
|             $queryData['order'] = ($this->data['order'] === 'asc') ? 'desc' : 'asc';
 | |
|         } elseif (isset($this->overrideData['sort'])) {
 | |
|             $queryData['order'] = 'asc';
 | |
|         }
 | |
| 
 | |
|         foreach ($queryData as $name => $value) {
 | |
|             $trimmedVal = trim($value);
 | |
|             if ($trimmedVal !== '') {
 | |
|                 $queryStringSections[] = urlencode($name) . '=' . urlencode($trimmedVal);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         if (count($queryStringSections) === 0) {
 | |
|             return url($this->path);
 | |
|         }
 | |
| 
 | |
|         return url($this->path . '?' . implode('&', $queryStringSections));
 | |
|     }
 | |
| }
 |