%PDF- %PDF-
| Direktori : /home/graphicd/public_html/vebto/vendor/ongr/elasticsearch-dsl/src/Serializer/ |
| Current File : /home/graphicd/public_html/vebto/vendor/ongr/elasticsearch-dsl/src/Serializer/OrderedSerializer.php |
<?php
/*
* This file is part of the ONGR package.
*
* (c) NFQ Technologies UAB <info@nfq.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace ONGR\ElasticsearchDSL\Serializer;
use ONGR\ElasticsearchDSL\Serializer\Normalizer\OrderedNormalizerInterface;
use Symfony\Component\Serializer\Serializer;
/**
* Custom serializer which orders data before normalization.
*/
class OrderedSerializer extends Serializer
{
/**
* {@inheritdoc}
*/
public function normalize($data, $format = null, array $context = [])
{
return parent::normalize(
is_array($data) ? $this->order($data) : $data,
$format,
$context
);
}
/**
* {@inheritdoc}
*/
public function denormalize($data, $type, $format = null, array $context = [])
{
return parent::denormalize(
is_array($data) ? $this->order($data) : $data,
$type,
$format,
$context
);
}
/**
* Orders objects if can be done.
*
* @param array $data Data to order.
*
* @return array
*/
private function order(array $data)
{
$filteredData = $this->filterOrderable($data);
if (!empty($filteredData)) {
uasort(
$filteredData,
function (OrderedNormalizerInterface $a, OrderedNormalizerInterface $b) {
return $a->getOrder() > $b->getOrder();
}
);
return array_merge($filteredData, array_diff_key($data, $filteredData));
}
return $data;
}
/**
* Filters out data which can be ordered.
*
* @param array $array Data to filter out.
*
* @return array
*/
private function filterOrderable($array)
{
return array_filter(
$array,
function ($value) {
return $value instanceof OrderedNormalizerInterface;
}
);
}
}