Your IP : 216.73.216.86


Current Path : /var/www/homesaver/www/bitrix/modules/seo/lib/retargeting/services/
Upload File :
Current File : /var/www/homesaver/www/bitrix/modules/seo/lib/retargeting/services/responsefacebook.php

<?php

namespace Bitrix\Seo\Retargeting\Services;

use \Bitrix\Main\Error;
use \Bitrix\Main\Localization\Loc;
use \Bitrix\Main\Web\Json;
use Bitrix\Seo\Retargeting\PagingInterface;
use \Bitrix\Seo\Retargeting\Response;

Loc::loadMessages(__FILE__);

class ResponseFacebook extends Response implements PagingInterface
{
	public const TYPE_CODE = 'facebook';

	/** @var array $pagingData */
	protected $pagingData;

	/**
	 * Parse response.
	 *
	 * @param array|string $data Data.
	 * @throws \Bitrix\Main\ArgumentException
	 */
	public function parse($data) : void
	{
		$parsed = is_array($data) ? $data : Json::decode($data);

		if ($parsed['error'])
		{
			$errorText = (isset($parsed['error']['error_user_msg']) && $parsed['error']['error_user_msg'])
				? $parsed['error']['error_user_msg']
				: $parsed['error']['message']
			;

			if ($errorText === '(#100) The parameter follow_up_action_url is required')
			{
				$errorText = Loc::getMessage('SEO_RETARGETING_SERVICE_RESPONSE_FACEBOOK_ERROR_URL_REQUIRED');
			}
			if ($errorText === 'To create or edit a Custom Audience made from a customer list, your admin needs to add this ad account to a business.')
			{
				$errorText = Loc::getMessage('SEO_RETARGETING_SERVICE_RESPONSE_FACEBOOK_ERROR_ADD_TO_BUSINESS');
			}

			$this->addError(
				new Error(
					Loc::getMessage('SEO_RETARGETING_SERVICE_RESPONSE_FACEBOOK_ERROR') . ': ' . $errorText,
					$parsed['error']['code']
				)
			);
		}

		if ($parsed['data'])
		{
			$this->setData($parsed['data']);
		}
		elseif (!isset($parsed['error']))
		{
			$this->setData($parsed);
		}

		if (isset($parsed['paging']))
		{
			$this->pagingData = $parsed['paging'];
		}
	}

	/**
	 * @inherit
	 * @param array $params
	 *
	 * @return array|null
	 */
	public function prepareRequestParams(array $params) : ?array
	{
		if (isset($this->pagingData['next'], $this->pagingData['cursors']['after']))
		{
			$params['parameters']['params']['after'] = $this->pagingData['cursors']['after'];

			return $params;
		}

		return null;
	}
}