yaroslavbr
9/22/2016 - 2:11 PM

IndexEntityEvent.php

<?php

namespace Oro\Bundle\WebsiteSearchBundle\Event;

use Oro\Bundle\WebsiteSearchBundle\Provider\IndexDataProvider;

use Symfony\Component\EventDispatcher\Event;

class IndexEntityEvent extends Event
{
    const NAME = 'oro_website_search.event.index_entity';

    /**
     * @var string
     */
    private $entityClass;

    /**
     * @var array
     */
    private $entities;

    /**
     * @var array
     */
    private $context;

    /**
     * @var array
     */
    private $entitiesData = [];

    /**
     * @param string $entityClass
     * @param object[] $entities
     * @param array $context
     */
    public function __construct($entityClass, array $entities, array $context)
    {
        $this->context = $context;
        $this->entities = $entities;
        $this->entityClass = $entityClass;
    }

    /**
     * @return string
     */
    public function getEntityClass()
    {
        return $this->entityClass;
    }

    /**
     * @return array
     */
    public function getEntities()
    {
        return $this->entities;
    }

    /**
     * @return array
     */
    public function getContext()
    {
        return $this->context;
    }

    /**
     * @param int $entityId
     * @param string $fieldName
     * @param string|int|float $value
     * @return $this
     */
    public function addField($entityId, $fieldName, $value)
    {
        $this->entitiesData[$entityId][IndexDataProvider::STANDARD_VALUES_KEY][$fieldName] = $value;

        return $this;
    }

    /**
     * @param int $entityId
     * @param string $fieldName
     * @param string|int|float|array $value If array passed this means batch of fields data needed to "all_text"
     * @param int $localeId
     * @return $this
     */
    public function addLocalizedField($entityId, $fieldName, $value, $localeId)
    {
        $this->entitiesData[$entityId][IndexDataProvider::LOCALIZED_VALUES_KEY][$fieldName][$localeId] = $value;

        return $this;
    }

    /**
     * @param int $entityId
     * @param array $fields
     * @param int $localeId
     * @return $this
     */
    public function addAllTextField($entityId, $fields, $localeId)
    {
        if (isset($this->entitiesData[$entityId][IndexDataProvider::ALL_TEXT_FIELD][$localeId])) {
            $this->entitiesData[$entityId][IndexDataProvider::ALL_TEXT_FIELD][$localeId] = array_merge(
                $this->entitiesData[$entityId][IndexDataProvider::ALL_TEXT_FIELD][$localeId],
                $fields
            );
        } else {
            $this->entitiesData[$entityId][IndexDataProvider::ALL_TEXT_FIELD][$localeId] = $fields;
        }

        return $this;
    }

    /**
     * @return array
     */
    public function getEntitiesData()
    {
        return $this->entitiesData;
    }
}