• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/update_client_partner.php
  • Класс: CUpdateClientPartner
  • Вызов: CUpdateClientPartner::LoadModulesUpdates
static function LoadModulesUpdates(&$errorMessage, &$arUpdateDescription, $lang = false, $stableVersionsOnly = "Y", $arRequestedModules = array(), $bStrongList = false)
{
	$arUpdateDescription = array();
	$updateServerQueryString = "";

	$filename = $_SERVER["DOCUMENT_ROOT"]."/bitrix/updates/update_archive.gz";
	$timeout = COption::GetOptionString("main", "update_load_timeout", "30");
	if ($timeout < 5)
		$timeout = 5;

	CUpdateClientPartner::AddMessage2Log("exec CUpdateClientPartner::LoadModulesUpdates");

	if (file_exists($filename.".log"))
	{
		$content = file_get_contents($filename.".log");
		CUpdateClientPartner::__ParseServerData($content, $arUpdateDescription, $strError_tmp);
	}

	if (empty($arUpdateDescription) || $errorMessage <> '')
	{
		$arUpdateDescription = array();
		if (file_exists($filename.".tmp"))
			@unlink($filename.".tmp");
		if (file_exists($filename.".log"))
			@unlink($filename.".log");

		if ($errorMessage <> '')
		{
			CUpdateClientPartner::AddMessage2Log($errorMessage, "LMU001");

			return "E";
		}
	}

	if (empty($arUpdateDescription))
	{
		$updateServerQueryString = CUpdateClientPartner::__CollectRequestData(
			$errorMessage, $lang, $stableVersionsOnly, $arRequestedModules, array(), $bStrongList
		);
		if (empty($updateServerQueryString) || $errorMessage <> '')
		{
			if ($errorMessage == '')
				$errorMessage = "[GNSU01] ".GetMessage("SUPZ_NO_QSTRING").". ";
			CUpdateClientPartner::AddMessage2Log($errorMessage, "LMU002");

			return "E";
		}

		CUpdateClientPartner::AddMessage2Log(
			preg_replace("/LICENSE_KEY=[^&]*/i", "LICENSE_KEY=X", $updateServerQueryString)
		);

		$stime = microtime(true);

		$content = CUpdateClientPartner::__GetHTTPPage("STEPM", $updateServerQueryString, $errorMessage);
		if ($content == '')
		{
			if ($errorMessage == '')
				$errorMessage = "[GNSU02] ".GetMessage("SUPZ_EMPTY_ANSWER").". ";
			CUpdateClientPartner::AddMessage2Log($errorMessage, "LMU003");

			return "E";
		}

		CUpdateClientPartner::AddMessage2Log(
			"TIME LoadModulesUpdates(request) ".Round(microtime(true) - $stime, 3)." sec"
		);

		CUpdateClientPartner::__ParseServerData($content, $arUpdateDescription, $errorMessage);
		if ($errorMessage <> '')
		{
			CUpdateClientPartner::AddMessage2Log($errorMessage, "LMU004");

			return "E";
		}

		if (isset($arUpdateDescription["DATA"]["#"]["ERROR"]))
		{
			for ($i = 0, $cnt = count($arUpdateDescription["DATA"]["#"]["ERROR"]); $i < $cnt; $i++)
				$errorMessage .= "[".$arUpdateDescription["DATA"]["#"]["ERROR"][$i]["@"]["TYPE"]."] ".$arUpdateDescription["DATA"]["#"]["ERROR"][$i]["#"];
		}

		if ($errorMessage <> '')
		{
			CUpdateClientPartner::AddMessage2Log($errorMessage, "LMU005");

			return "E";
		}

		if (isset($arUpdateDescription["DATA"]["#"]["NOUPDATES"]))
		{
			CUpdateClientPartner::AddMessage2Log("Finish - NOUPDATES", "STEP");

			return "F";
		}

		if (!($fp1 = fopen($filename.".log", "wb")))
		{
			$errorMessage = "[GNSU03] ".str_replace(
					"#FILE#", $_SERVER["DOCUMENT_ROOT"]."/bitrix/updates", GetMessage("SUPP_RV_ER_TEMP_FILE")
				).". ";
			CUpdateClientPartner::AddMessage2Log($errorMessage, "LMU006");

			return "E";
		}

		fwrite($fp1, $content);
		fclose($fp1);

		CUpdateClientPartner::AddMessage2Log("STEP", "S");

		return "S";
	}

	if (isset($arUpdateDescription["DATA"]["#"]["FILE"][0]["@"]["NAME"]))
	{
		if ($updateServerQueryString == "")
		{
			$updateServerQueryString = CUpdateClientPartner::__CollectRequestData(
				$errorMessage, $lang, $stableVersionsOnly, $arRequestedModules, array(), $bStrongList
			);
			if (empty($updateServerQueryString) || $errorMessage <> '')
			{
				if ($errorMessage == '')
					$errorMessage = "[GNSU01] ".GetMessage("SUPZ_NO_QSTRING").". ";
				CUpdateClientPartner::AddMessage2Log($errorMessage, "LMU002");

				return "E";
			}
		}

		CUpdateClientPartner::AddMessage2Log("loadFileBx");
		$r = static::loadFileBx(
			$arUpdateDescription["DATA"]["#"]["FILE"][0]["@"]["NAME"],
			$arUpdateDescription["DATA"]["#"]["FILE"][0]["@"]["SIZE"],
			$filename,
			$timeout,
			$updateServerQueryString,
			$errorMessage
		);
	}
	elseif ($arUpdateDescription["DATA"]["#"]["FILE"][0]["@"]["URL"])
	{
		CUpdateClientPartner::AddMessage2Log("loadFile");
		$r = static::loadFile(
			$arUpdateDescription["DATA"]["#"]["FILE"][0]["@"]["URL"],
			$arUpdateDescription["DATA"]["#"]["FILE"][0]["@"]["SIZE"],
			$filename,
			$timeout,
			$errorMessage
		);
	}
	else
	{
		$r = "E";
		$errorMessage .= GetMessage("SUPP_PSD_BAD_RESPONSE");
	}

	if ($r == "E")
	{
		CUpdateClientPartner::AddMessage2Log($errorMessage, "GNSU001");
		$errorMessage .= $errorMessage;
	}
	elseif ($r == "U")
	{
		@unlink($filename.".log");
	}

	CUpdateClientPartner::AddMessage2Log("RETURN", $r);

	return $r;
}