. */ require_once('SortTransform.php'); require_once('CFDBPermittedFunctions.php'); class SortByFunctionAndField extends SortTransform { var $functionName; var $fieldName; var $reverse; var $functionPermitted; /** * @param $functionName string name of sort function such as strcmp, strcasecmp, strnatcmp * @param $fieldName * @param $ascDesc string 'ASC' or 'DESC' */ function __construct($functionName, $fieldName, $ascDesc = 'ASC') { $this->functionName = $functionName; $this->fieldName = $fieldName; $this->reverse = strtoupper($ascDesc) == 'DESC'; $this->functionPermitted = CFDBPermittedFunctions::getInstance()->isFunctionPermitted($functionName); } /** * @param $a array associative containing $this->field_name * @param $b array associative containing $this->field_name * @return int -1 if $a>$b, 0 if equal, 1 if $a<$b */ public function sort($a, $b) { if (!$this->functionPermitted) { trigger_error('Function not permitted by CFDB: ' . $this->functionName, E_USER_NOTICE); return 0; } if (!isset($a[$this->fieldName]) || !isset($b[$this->fieldName])) { return 0; // ambiguous due to field missing } $result = call_user_func_array($this->functionName, array($a[$this->fieldName], $b[$this->fieldName])); if ($this->reverse) { $result *= -1; } return $result; } }