private function addField(array $properties, FieldInterface $field)
    {
        $fieldName = $field->getName();
        $fieldRoot = &$properties;

        // Read property config from the field.
        $property = $field->getMappingPropertyConfig();

        $fieldPathArray   = explode('.', $fieldName);
        $currentPathArray = [];
        $fieldPathSize    = count($fieldPathArray);

        for ($i = 0; $i < $fieldPathSize - 1; $i++) {
            $currentPathArray[] = $fieldPathArray[$i];
            $currentPath        = implode('.', $currentPathArray);

            if ($field->isNested() && $field->getNestedPath() == $currentPath && !isset($fieldRoot[$fieldPathArray[$i]])) {
                $fieldRoot[$fieldPathArray[$i]] = ['type' => FieldInterface::FIELD_TYPE_NESTED, 'properties' => []];
            } elseif (!isset($fieldRoot[$fieldPathArray[$i]])) {
                $fieldRoot[$fieldPathArray[$i]] = ['type' => FieldInterface::FIELD_TYPE_OBJECT, 'properties' => []];
            }

            $fieldRoot = &$fieldRoot[$fieldPathArray[$i]]['properties'];
        }

        /*
         * Retrieving location where the property has to be copied to.
         * Ex : searchable fields are copied to default "search" field.
         */
        $copyToProperties = $this->getFieldCopyToProperties($field);

        if (!empty($copyToProperties)) {
            // For normal fields, copy_to is append at the property root.
            $copyToRoot = &$property;
            $copyToRoot['copy_to'] = $copyToProperties;
        }

        $fieldRoot[end($fieldPathArray)] = $property;

        return $properties;
    }
private function addField(array $properties, FieldInterface $field)
    {
        $fieldName = $field->getName();
        $fieldRoot = &$properties;

        // Read property config from the field.
        $property = $field->getMappingPropertyConfig();

        $fieldPathArray   = explode('.', $fieldName);
        $currentPathArray = [];
        $fieldPathSize    = count($fieldPathArray);

        for ($i = 0; $i < $fieldPathSize - 1; $i++) {
            $currentPathArray[] = $fieldPathArray[$i];
            $currentPath        = implode('.', $currentPathArray);

            if ($field->isNested() && $field->getNestedPath() == $currentPath && !isset($fieldRoot[$fieldPathArray[$i]])) {
                $fieldRoot[$fieldPathArray[$i]] = ['type' => FieldInterface::FIELD_TYPE_NESTED, 'properties' => []];
            } elseif (!isset($fieldRoot[$fieldPathArray[$i]])) {
                $fieldRoot[$fieldPathArray[$i]] = ['type' => FieldInterface::FIELD_TYPE_OBJECT, 'properties' => []];
            }

            $fieldRoot = &$fieldRoot[$fieldPathArray[$i]]['properties'];
        }

        /*
         * Retrieving location where the property has to be copied to.
         * Ex : searchable fields are copied to default "search" field.
         */
        $copyToProperties = $this->getFieldCopyToProperties($field);

        if (!empty($copyToProperties)) {
            // For normal fields, copy_to is append at the property root.
            $copyToRoot = &$property;
            $copyToRoot['copy_to'] = $copyToProperties;
        }

        $fieldRoot[end($fieldPathArray)] = $property;

        return $properties;
    }
private function addField ( array $ properties , FieldInterface $ field ) { $ fieldName = $ field -> getName ( ) ; $ fieldRoot = & $ properties ; // Read property config from the field. $ property = $ field -> getMappingPropertyConfig ( ) ; $ fieldPathArray = explode ( '.' , $ fieldName ) ; $ currentPathArray = [ ] ; $ fieldPathSize = count ( $ fieldPathArray ) ; for ( $ i = 0 ; $ i < $ fieldPathSize - 1 ; $ i ++ ) { $ currentPathArray [ ] = $ fieldPathArray [ $ i ] ; $ currentPath = implode ( '.' , $ currentPathArray ) ; if ( $ field -> isNested ( ) && $ field -> getNestedPath ( ) == $ currentPath && ! isset ( $ fieldRoot [ $ fieldPathArray [ $ i ] ] ) ) { $ fieldRoot [ $ fieldPathArray [ $ i ] ] = [ 'type' => FieldInterface :: FIELD_TYPE_NESTED , 'properties' => [ ] ] ; } elseif ( ! isset ( $ fieldRoot [ $ fieldPathArray [ $ i ] ] ) ) { $ fieldRoot [ $ fieldPathArray [ $ i ] ] = [ 'type' => FieldInterface :: FIELD_TYPE_OBJECT , 'properties' => [ ] ] ; } $ fieldRoot = & $ fieldRoot [ $ fieldPathArray [ $ i ] ] [ 'properties' ] ; } /*
         * Retrieving location where the property has to be copied to.
         * Ex : searchable fields are copied to default "search" field.
         */ $ copyToProperties = $ this -> getFieldCopyToProperties ( $ field ) ; if ( ! empty ( $ copyToProperties ) ) { // For normal fields, copy_to is append at the property root. $ copyToRoot = & $ property ; $ copyToRoot [ 'copy_to' ] = $ copyToProperties ; } $ fieldRoot [ end ( $ fieldPathArray ) ] = $ property ; return $ properties ; }
Append a field to a mapping properties list.
The field is append and the new properties list is returned.

@param array          $properties Initial properties map.
@param FieldInterface $field      Field to be added.

@return array
Append a field to a mapping properties list . The field is append and the new properties list is returned .