iflrandevu/engine/Api/V1/Processors/Sort.php

98 lines
2.6 KiB
PHP
Raw Normal View History

<?php
/* ----------------------------------------------------------------------------
* Easy!Appointments - Open Source Web Scheduler
*
* @package EasyAppointments
* @author A.Tselegidis <alextselegidis@gmail.com>
* @copyright Copyright (c) 2013 - 2020, Alex Tselegidis
* @license http://opensource.org/licenses/GPL-3.0 - GPLv3
* @link http://easyappointments.org
* @since v1.2.0
* ---------------------------------------------------------------------------- */
namespace EA\Engine\Api\V1\Processors;
/**
* Sort Processor
*
* This class will sort the response array with the provided GET parameters. Make sure that the
* response parameter is a sequential array and not a single entry by the time this processor is
* executed.
*/
class Sort implements ProcessorsInterface {
/**
* Supports up to 3 columns for sorting.
*
* Example:
* http://ea-installation.com/api/v1/appointments?sort=-start,+notes,-hash
*
* @param array &$response The response array to be processed.
*/
public static function process(array &$response)
{
if ( ! isset($_GET['sort']) || empty($response))
{
return;
}
$sort = explode(',', (string)$_GET['sort']);
$sortDirection1 = substr($sort[0], 0, 1) === '-' ? SORT_DESC : SORT_ASC;
if (isset($sort[1]))
{
$sortDirection2 = substr($sort[1], 0, 1) === '-' ? SORT_DESC : SORT_ASC;
2018-01-23 12:08:37 +03:00
}
else
{
$sortDirection2 = NULL;
}
if (isset($sort[2]))
{
$sortDirection3 = substr($sort[2], 0, 1) === '-' ? SORT_DESC : SORT_ASC;
2018-01-23 12:08:37 +03:00
}
else
{
$sortDirection3 = NULL;
}
foreach ($response as $index => $entry)
{
$sortOrder1[$index] = $entry[substr($sort[0], 1)];
if ($sortDirection2)
{
$sortOrder2[$index] = $entry[substr($sort[1], 1)];
}
if ($sortDirection3)
{
$sortOrder3[$index] = $entry[substr($sort[2], 1)];
}
}
$arguments = [
2016-07-10 11:37:11 +03:00
&$sortOrder1,
&$sortDirection1
];
if ($sortDirection2)
{
$arguments[] = $sortOrder2;
2016-07-10 11:37:11 +03:00
$arguments[] = $sortDirection2;
}
if ($sortDirection3)
{
$arguments[] = $sortOrder3;
2016-07-10 11:37:11 +03:00
$arguments[] = $sortDirection3;
}
2016-07-10 11:37:11 +03:00
$arguments[] = &$response;
call_user_func_array('array_multisort', $arguments);
}
}