MOON
Server: Apache
System: Linux server1.studioinfinity.com.br 2.6.32-954.3.5.lve1.4.90.el6.x86_64 #1 SMP Tue Feb 21 12:26:30 UTC 2023 x86_64
User: artinside (517)
PHP: 7.4.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/artinside/www/lhh/vendor/frenet/frenet-php/src/ObjectType/EntityAbstract.php
<?php

namespace Frenet\ObjectType;

use Frenet\Framework\Data\DataObject;

/**
 * Class EntityAbstract
 *
 * @package Frenet\ObjectType
 */
abstract class EntityAbstract extends DataObject implements EntityInterface
{
    /**
     * @var \Frenet\Framework\Data\SerializerInterface
     */
    protected $serializer;

    /**
     * @var array
     */
    protected $fieldMapping = [];

    /**
     * EntityAbstract constructor.
     *
     * @param \Frenet\Framework\Data\SerializerInterface $serializer
     * @param array                                      $data
     */
    public function __construct(
        \Frenet\Framework\Data\SerializerInterface $serializer,
        array $data = []
    ) {
        $this->serializer = $serializer;
        parent::__construct($data);
        $this->applyMappings();
    }

    /**
     * {@inheritdoc}
     */
    public function __toString()
    {
        return $this->serializer->serialize($this->data);
    }

    /**
     * @return void
     */
    private function applyMappings()
    {
        $data = $this->getData();
        $newData = [];

        foreach ($data as $key => $value) {
            if (!$this->isMappingKeyAvailable($key)) {
                continue;
            }

            $field = $this->fieldMapping[$key];
            $newData[$field] = $value;
        }

        $this->setData($newData);
    }

    /**
     * @param string $key
     * @return bool
     */
    private function isMappingKeyAvailable($key)
    {
        $key = $this->normalizeKey($key);
        $fieldMapping = $this->convertArrayKeysToLowercase($this->fieldMapping);

        if (array_key_exists($key, $fieldMapping) || !empty($fieldMapping[$key])) {
            return true;
        }

        return false;
    }

    /**
     * @param array $data
     * @return array
     */
    private function convertArrayKeysToLowercase(array $data)
    {
        foreach ($data as $key => $value) {
            unset($data[$key]);
            $data[$this->normalizeKey($key)] = $value;
        }

        return $data;
    }

    /**
     * @param string $key
     * @return string
     */
    private function normalizeKey($key)
    {
        return trim(strtolower($key));
    }
}