Files
dokuwiki-plugins/lib/plugins/nspages/printers/sorters.php

71 lines
1.6 KiB
PHP
Raw Normal View History

2025-10-09 15:04:29 +11:00
<?php
/**
* Plugin nspages : Displays nicely a list of the pages of a namespace
*
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*/
if(!defined('DOKU_INC')) die();
abstract class nspages_sorter {
protected $reverse;
function __construct($reverse){
$this->reverse = $reverse;
}
function sort(&$array){
$this->actualSort($array);
if ($this->reverse) {
$array = array_reverse($array);
}
}
protected function actualSort(&$array){
usort($array, array($this, 'comparator'));
}
abstract function comparator($item1, $item2);
}
class nspages_default_sorter extends nspages_sorter {
function __construct($reverse){
parent::__construct($reverse);
}
function comparator($item1, $item2){
return strcasecmp($item1['sort'], $item2['sort']);
}
}
class nspages_naturalOrder_sorter extends nspages_sorter {
function __construct($reverse){
parent::__construct($reverse);
}
function comparator($item1, $item2){
return strnatcasecmp($item1['sort'], $item2['sort']);
}
}
class nspages_dictOrder_sorter extends nspages_sorter {
private $dictOrder;
function __construct($reverse, $dictOrder){
parent::__construct($reverse);
$this->dictOrder = $dictOrder;
}
function actualSort(&$array){
$oldLocale=setlocale(LC_ALL, 0);
setlocale(LC_COLLATE, $this->dictOrder);
usort($array, array($this, "comparator"));
setlocale(LC_COLLATE, $oldLocale);
}
function comparator($item1, $item2){
return strcoll($item1['sort'], $item2['sort']);
}
}