Your IP : 216.73.216.86


Current Path : /var/www/homesaver/www/bitrix/modules/seo/lib/leadads/response/builder/
Upload File :
Current File : /var/www/homesaver/www/bitrix/modules/seo/lib/leadads/response/builder/vkontakteformbuilder.php

<?php

namespace Bitrix\Seo\LeadAds\Response\Builder;

use Bitrix\Main\Localization\Loc;
use Bitrix\Seo\LeadAds;
use Bitrix\Seo\LeadAds\LeadAdsForm;

Loc::loadMessages(__FILE__);

class VkontakteFormBuilder implements FormBuilderInterface
{
	protected const PAGE_TYPE_QUESTION = 'question';
	/**@var LeadAds\Mapper $mapper*/
	private $mapper;

	private const EMPTY_FIELD_NAME = null;

	/**
	 * @param LeadAds\Mapper $mapper
	 */
	public function __construct(LeadAds\Mapper $mapper)
	{
		$this->mapper = $mapper;
	}

	/**
	 * build Leadads form
	 * @param array $form
	 *
	 * @return LeadAdsForm
	 */
	public function buildForm(array $form): LeadAdsForm
	{
		$fields = $this->buildFields($form['CONTACT_FIELDS'] ?? []);
		$questions = $this->buildQuestions($form['PAGES'] ?? []);
		return new LeadAdsForm(
			[
				"id" => $form['ID'],
				"name" => $form['NAME'],
				// "description" => $form['DESCRIPTION'],
				"title" => $form['NAME'],
				"fields" => array_merge($fields, $questions)
				// "message" => $form['CONFIRMATION'],
				// "link" => $form['URL'],
			]
		);
	}

	/**
	 * @param array $questions
	 *
	 * @return LeadAds\Field[]
	 */
	private function buildFields(array $questions) : array
	{
		foreach ($questions  as $key => $externalField)
		{
			if ($fieldName = $this->mapper->getCrmName($externalField))
			{
				$questions[$key] = new LeadAds\Field(
					$fieldName,
					self::EMPTY_FIELD_NAME,
					$this->getFormLabel($fieldName),
					$externalField
				);
			}
			else
			{
				unset($questions[$key]);
			}
		}

		return $questions;
	}

	/**
	 * @param string $type
	 * @return string
	 */
	private function getFormLabel(string $type) : string
	{
		if (!$phrase = Loc::getMessage("SEO_VKONTAKTE_FORM_BUILDER_TYPE_{$type}"))
		{
			$phrase = Loc::getMessage("SEO_VKONTAKTE_FORM_BUILDER_UNKNOWN_TYPE");
		}

		return $phrase;
	}

	private function buildQuestions(array $pages)
	{
		$result = [];
		foreach ($pages as $page)
		{
			if ( ! (isset($page['blocks']) && is_array($page['blocks'])))
			{
				continue;
			}

			foreach ($page['blocks'] as $block)
			{
				if (
					! (isset($block['block_data']) && is_array($block['block_data']))
					&& $block['type'] !== self::PAGE_TYPE_QUESTION
					&& ! (isset($block['block_data']['data']) && is_array($block['block_data']['data']))
				)
				{
					continue;
				}


				if ($fieldName = $this->mapper->getCrmName(self::PAGE_TYPE_QUESTION))
				{
					$result[] = new LeadAds\Field(
						$fieldName,
						self::EMPTY_FIELD_NAME,
						$block['block_data']['data']['text'],
						$block['id']
					);
				}
			}
		}

		return $result;
	}
}