43 if ($strQuery ==
'' || $strError_tmp <>
'')
52 $stime = microtime(
true);
57 if ($strError_tmp ==
'')
58 $strError_tmp =
"[GNSU02] ".GetMessage(
"SUPZ_EMPTY_ANSWER").
". ";
63 if ($strError_tmp ==
'')
65 if (!($fp1 = fopen(
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/updates/update_archive.gz",
"wb")))
66 $strError_tmp .=
"[URV02] ".GetMessage(
"SUPP_RV_ER_TEMP_FILE", [
"#FILE#" =>
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/updates"]).
". ";
69 if ($strError_tmp ==
'')
72 $strError_tmp .=
"[URV03] ".GetMessage(
"SUPP_RV_WRT_TEMP_FILE", [
"#FILE#" =>
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/updates/update_archive.gz"]).
". ";
77 if ($strError_tmp ==
'')
81 $strError_tmp .=
"[URV04] ".GetMessage(
"SUPP_RV_BREAK").
". ";
84 if ($strError_tmp ==
'')
86 $updatesDirFull =
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/updates/".$updatesDirTmp;
87 if (!file_exists($updatesDirFull.
"/update_info.xml") || !is_file($updatesDirFull.
"/update_info.xml"))
88 $strError_tmp .=
"[URV05] ".GetMessage(
"SUPP_RV_ER_DESCR_FILE", [
"#FILE#" => $updatesDirFull.
"/update_info.xml"]).
". ";
91 if ($strError_tmp ==
'')
93 if (!is_readable($updatesDirFull.
"/update_info.xml"))
94 $strError_tmp .=
"[URV06] ".GetMessage(
"SUPP_RV_READ_DESCR_FILE", [
"#FILE#" => $updatesDirFull.
"/update_info.xml"]).
". ";
97 if ($strError_tmp ==
'')
98 $content = file_get_contents($updatesDirFull.
"/update_info.xml");
102 if ($strError_tmp ==
'')
108 if ($strError_tmp ==
'')
110 if (!empty(
$arRes[
"DATA"][
"#"][
"ERROR"]) && is_array(
$arRes[
"DATA"][
"#"][
"ERROR"]))
114 if (
$arRes[
"DATA"][
"#"][
"ERROR"][
$i][
"@"][
"TYPE"] <>
'')
115 $strError_tmp .=
"[".$arRes[
"DATA"][
"#"][
"ERROR"][
$i][
"@"][
"TYPE"].
"] ";
117 $strError_tmp .=
$arRes[
"DATA"][
"#"][
"ERROR"][
$i][
"#"].
". ";
122 if ($strError_tmp ==
'')
124 $handle = @opendir($updatesDirFull);
132 if (file_exists(
$_SERVER[
"DOCUMENT_ROOT"].US_SHARED_KERNEL_PATH.
"/modules/".
$dir))
136 if ($strError_tmp1 <>
'')
137 $strError_tmp .= $strError_tmp1;
144 if ($strError_tmp ==
'')
150 if ($strError_tmp <>
'')
163 $arUpdateDescription =
array();
167 if ($loadResult ==
"S")
172 elseif ($loadResult ==
"E")
177 return "ERR".$errorMessage;
179 elseif ($loadResult ==
"F")
185 $temporaryUpdatesDir =
"";
188 $errorMessage .=
"[LM4W04] ".GetMessage(
"SUPC_ME_PACK").
". ";
190 return "ERR".$errorMessage;
195 $errorMessage .=
"[LM4W05] ".GetMessage(
"SUPC_ME_CHECK").
". ";
197 return "ERR".$errorMessage;
200 $arStepUpdateInfo = $arUpdateDescription;
202 if (isset($arStepUpdateInfo[
"DATA"][
"#"][
"ERROR"]))
204 for (
$i = 0, $cnt =
count($arStepUpdateInfo[
"DATA"][
"#"][
"ERROR"]);
$i < $cnt;
$i++)
205 $errorMessage .=
"[".$arStepUpdateInfo[
"DATA"][
"#"][
"ERROR"][
$i][
"@"][
"TYPE"].
"] ".$arStepUpdateInfo[
"DATA"][
"#"][
"ERROR"][
$i][
"#"];
206 return "ERR".$errorMessage;
209 if (isset($arStepUpdateInfo[
"DATA"][
"#"][
"NOUPDATES"]))
219 $errorMessage .=
"[LM4W07] ".GetMessage(
"SUPC_ME_UPDATE").
". ";
221 return "ERR".$errorMessage;
232 $temporaryUpdatesDir =
'';
236 $stableVersionsOnly = (($stableVersionsOnly ==
"N") ?
"N" :
"Y");
242 if ($strQuery ==
'' || $strError_tmp <>
'')
244 if ($strError_tmp ==
'')
245 $strError_tmp =
"[GNSU01] ".GetMessage(
"SUPZ_NO_QSTRING").
". ";
248 if ($strError_tmp ==
'')
252 $stime = microtime(
true);
256 if ($strError_tmp ==
'')
257 $strError_tmp =
"[GNSU02] ".GetMessage(
"SUPZ_EMPTY_ANSWER").
". ";
263 if ($strError_tmp ==
'')
265 if (!($fp1 = fopen(
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/updates/update_archive.gz",
"wb")))
266 $strError_tmp =
"[GNSU03] ".GetMessage(
"SUPP_RV_ER_TEMP_FILE", [
"#FILE#" =>
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/updates"]).
". ";
269 if ($strError_tmp ==
'')
275 if ($strError_tmp ==
'')
279 $strError_tmp .=
"[CL02] ".GetMessage(
"SUPC_ME_PACK").
". ";
284 $arStepUpdateInfo =
array();
285 if ($strError_tmp ==
'')
288 if ($strError_tmp ==
'')
290 if (isset($arStepUpdateInfo[
"DATA"][
"#"][
"ERROR"]))
292 for (
$i = 0, $cnt =
count($arStepUpdateInfo[
"DATA"][
"#"][
"ERROR"]);
$i < $cnt;
$i++)
293 $strError_tmp .=
"[".$arStepUpdateInfo[
"DATA"][
"#"][
"ERROR"][
$i][
"@"][
"TYPE"].
"] ".$arStepUpdateInfo[
"DATA"][
"#"][
"ERROR"][
$i][
"#"];
297 if ($strError_tmp ==
'')
301 $strError_tmp .=
"[CL04] ".GetMessage(
"SUPC_ME_UPDATE").
". ";
306 if ($strError_tmp <>
'')
322 $arOrderKeys = array_keys($arOrder);
330 "search_module_id" =>
$arFilter[
"ID"] ??
'',
331 "search_module" =>
$arFilter[
"NAME"] ??
'',
334 "search_order" => $arOrder[$arOrderKeys[0]] ??
'',
335 "search_order_by" => $arOrderKeys[0] ??
'',
336 "search_page" => $searchPage
339 if ($strQuery ==
'' || $strError_tmp <>
'')
348 $stime = microtime(
true);
354 if ($strError_tmp ==
'')
357 if ($strError_tmp ==
'')
360 $strError_tmp .=
"[UGAUT01] ".GetMessage(
"SUPP_GAUT_SYSERR").
". ";
363 if ($strError_tmp ==
'')
367 $strError_tmp .=
"[UGAUT01] ".GetMessage(
"SUPP_GAUT_SYSERR").
". ";
376 if ($strError_tmp <>
'')
397 array(
"search_module" => $searchModule)
399 if ($strQuery ==
'' || $strError_tmp <>
'')
407 $stime = microtime(
true);
413 if ($strError_tmp ==
'')
416 if ($strError_tmp ==
'')
419 $strError_tmp .=
"[UGAUT01] ".GetMessage(
"SUPP_GAUT_SYSERR").
". ";
422 if ($strError_tmp ==
'')
426 $strError_tmp .=
"[UGAUT01] ".GetMessage(
"SUPP_GAUT_SYSERR").
". ";
429 if ($strError_tmp <>
'')
440 $MAX_LOG_SIZE = 1000000;
442 $LOG_FILE =
$_SERVER[
"DOCUMENT_ROOT"].US_SHARED_KERNEL_PATH.
"/modules/updater_partner.log";
443 $LOG_FILE_TMP =
$_SERVER[
"DOCUMENT_ROOT"].US_SHARED_KERNEL_PATH.
"/modules/updater_partner_tmp1.log";
445 if ($sText <>
'' || $sErrorCode <>
'')
447 $old_abort_status = ignore_user_abort(
true);
449 if (file_exists($LOG_FILE))
451 $log_size = @filesize($LOG_FILE);
452 $log_size = intval($log_size);
454 if ($log_size > $MAX_LOG_SIZE)
456 if (!($fp = @fopen($LOG_FILE,
"rb")))
458 ignore_user_abort($old_abort_status);
462 if (!($fp1 = @fopen($LOG_FILE_TMP,
"wb")))
464 ignore_user_abort($old_abort_status);
468 $iSeekLen = intval($log_size-$MAX_LOG_SIZE/2.0);
469 fseek($fp, $iSeekLen);
473 $data = fread($fp, $READ_PSIZE);
477 @fwrite($fp1,
$data);
484 @copy($LOG_FILE_TMP, $LOG_FILE);
485 @unlink($LOG_FILE_TMP);
490 if ($fp = @fopen($LOG_FILE,
"ab+"))
492 if (flock($fp, LOCK_EX))
494 @fwrite($fp, date(
"Y-m-d H:i:s").
" - ".$sErrorCode.
" - ".$sText.
"\n");
496 @flock($fp, LOCK_UN);
500 ignore_user_abort($old_abort_status);
507 $arRequestedModules =
array();
510 if ($strError_tmp ==
'')
512 if (!empty($arClientModules))
514 foreach ($arClientModules as
$key => $value)
516 if (str_contains(
$key,
"."))
517 $arRequestedModules[] =
$key;
522 if ($strAddModule <>
'')
524 $arAddModule = explode(
",", $strAddModule);
525 foreach ($arAddModule as $value)
527 $value = trim($value);
528 if ($value <>
'' && str_contains($value,
"."))
529 $arRequestedModules[] = $value;
533 return $arRequestedModules;
541 $license = Application::getInstance()->getLicense();
549 $updatesDirFull =
'';
552 $stime = microtime(
true);
554 $archiveFileName =
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/updates/update_archive.gz";
556 if (!file_exists($archiveFileName) || !is_file($archiveFileName))
557 $strError_tmp .=
"[UUGZA01] ".GetMessage(
"SUPP_UGA_NO_TMP_FILE", [
"#FILE#" => $archiveFileName]).
". ";
559 if ($strError_tmp ==
'')
561 if (!is_readable($archiveFileName))
562 $strError_tmp .=
"[UUGZA02] ".GetMessage(
"SUPP_UGA_NO_READ_FILE", [
"#FILE#" => $archiveFileName]).
". ";
565 if ($strError_tmp ==
'')
567 $updatesDir =
"update_m".time();
568 $updatesDirFull =
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/updates/".$updatesDir;
571 if (!file_exists($updatesDirFull) || !is_dir($updatesDirFull))
572 $strError_tmp .=
"[UUGZA03] ".GetMessage(
"SUPP_UGA_NO_TMP_CAT", [
"#FILE#" => $updatesDirFull]).
". ";
573 elseif (!is_writable($updatesDirFull))
574 $strError_tmp .=
"[UUGZA04] ".GetMessage(
"SUPP_UGA_WRT_TMP_CAT", [
"#FILE#" => $updatesDirFull]).
". ";
577 if ($strError_tmp ==
'')
579 $bCompressionUsed =
true;
581 $fd = fopen($archiveFileName,
"rb");
582 $flabel = fread($fd, mb_strlen(
"BITRIX"));
585 if ($flabel ==
"BITRIX")
586 $bCompressionUsed =
false;
589 if ($strError_tmp ==
'')
591 if ($bCompressionUsed)
592 $zp = gzopen($archiveFileName,
"rb9f");
594 $zp = fopen($archiveFileName,
"rb");
597 $strError_tmp .=
"[UUGZA05] ".GetMessage(
"SUPP_UGA_CANT_OPEN", [
"#FILE#" => $archiveFileName]).
". ";
600 if ($strError_tmp ==
'')
602 if ($bCompressionUsed)
603 $flabel = gzread($zp, mb_strlen(
"BITRIX"));
605 $flabel = fread($zp, mb_strlen(
"BITRIX"));
607 if ($flabel !=
"BITRIX")
609 $strError_tmp .=
"[UUGZA06] ".GetMessage(
"SUPP_UGA_BAD_FORMAT", [
"#FILE#" => $archiveFileName]).
". ";
611 if ($bCompressionUsed)
618 if ($strError_tmp ==
'')
620 $strongUpdateCheck = COption::GetOptionString(
"main",
"strong_update_check",
"Y");
624 if ($bCompressionUsed)
625 $add_info_size = gzread($zp, 5);
627 $add_info_size = fread($zp, 5);
629 $add_info_size = trim($add_info_size);
630 if (intval($add_info_size) > 0 && intval($add_info_size).
"!"==$add_info_size.
"!")
632 $add_info_size = intval($add_info_size);
636 if ($add_info_size !=
"RTIBE")
637 $strError_tmp .=
"[UUGZA071] ".GetMessage(
"SUPP_UGA_BAD_FORMAT", [
"#FILE#" => $archiveFileName]).
". ";
642 if ($bCompressionUsed)
643 $add_info = gzread($zp, $add_info_size);
645 $add_info = fread($zp, $add_info_size);
647 $add_info_arr = explode(
"|", $add_info);
648 if (
count($add_info_arr) != 3)
650 $strError_tmp .=
"[UUGZA072] ".GetMessage(
"SUPP_UGA_BAD_FORMAT", [
"#FILE#" => $archiveFileName]).
". ";
654 $size = $add_info_arr[0];
655 $curpath = $add_info_arr[1];
656 $crc32 = $add_info_arr[2];
659 if (intval($size) > 0)
661 if ($bCompressionUsed)
669 if ($crc32_new != $crc32)
671 $strError_tmp .=
"[UUGZA073] ".GetMessage(
"SUPP_UGA_FILE_CRUSH", [
"#FILE#" => $curpath]).
". ";
678 if (!($fp1 = fopen($updatesDirFull.$curpath,
"wb")))
680 $strError_tmp .=
"[UUGZA074] ".GetMessage(
"SUPP_UGA_CANT_OPEN_WR", [
"#FILE#" => $updatesDirFull.$curpath]).
". ";
686 $strError_tmp .=
"[UUGZA075] ".GetMessage(
"SUPP_UGA_CANT_WRITE_F", [
"#FILE#" => $updatesDirFull.$curpath]).
". ";
692 if ($strongUpdateCheck ==
"Y")
694 $crc32_new = dechex(crc32(file_get_contents($updatesDirFull.$curpath)));
695 if ($crc32_new != $crc32)
697 $strError_tmp .=
"[UUGZA0761] ".GetMessage(
"SUPP_UGA_FILE_CRUSH", [
"#FILE#", $curpath]).
". ";
704 if ($bCompressionUsed)
710 if ($strError_tmp ==
'')
713 @unlink($archiveFileName);
718 if ($strError_tmp <>
'')
733 $updatesDirFull =
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/updates/".$updatesDir;
734 if (!file_exists($updatesDirFull) || !is_dir($updatesDirFull))
735 $strError_tmp .=
"[UCU01] ".GetMessage(
"SUPP_CU_NO_TMP_CAT", [
"#FILE#" => $updatesDirFull]).
". ";
737 if ($strError_tmp ==
'')
738 if (!is_readable($updatesDirFull))
739 $strError_tmp .=
"[UCU02] ".GetMessage(
"SUPP_CU_RD_TMP_CAT", [
"#FILE#" => $updatesDirFull]).
". ";
741 if (
$handle = @opendir($updatesDirFull))
743 while (($file = readdir(
$handle)) !==
false)
745 if ($file ==
"." || $file ==
"..")
748 if (is_dir($updatesDirFull.
"/".$file))
752 elseif (is_file($updatesDirFull.
"/".$file))
754 $strRealPath =
$_SERVER[
"DOCUMENT_ROOT"].US_SHARED_KERNEL_PATH.
"/modules/".mb_substr($updatesDir.
"/".$file, mb_strpos($updatesDir.
"/".$file,
"/"));
755 if (file_exists($strRealPath))
757 if (!is_writeable($strRealPath))
758 $strError_tmp .=
"[UCU03] ".GetMessage(
"SUPP_CU_MAIN_ERR_FILE", [
"#FILE#" => $strRealPath]).
". ";
763 $strRealPath = mb_substr($strRealPath, 0,
$p);
765 if (mb_strlen($strRealPath) > 1)
766 $strRealPath = rtrim($strRealPath,
"/");
771 if (file_exists($strRealPath) && is_dir($strRealPath))
773 if (!is_writable($strRealPath))
774 $strError_tmp .=
"[UCU04] ".GetMessage(
"SUPP_CU_MAIN_ERR_CAT", [
"#FILE#" => $strRealPath]).
". ";
778 $strRealPath = mb_substr($strRealPath, 0,
$p);
787 if ($strError_tmp <>
'')
805 $updatesDirFull =
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/updates/".$updatesDir;
806 if (!file_exists($updatesDirFull) || !is_dir($updatesDirFull))
807 $strError_tmp .=
"[UGLMU01] ".GetMessage(
"SUPP_CU_NO_TMP_CAT", [
"#FILE#" => $updatesDirFull]).
". ";
809 if ($strError_tmp ==
'')
810 if (!is_readable($updatesDirFull))
811 $strError_tmp .=
"[UGLMU02] ".GetMessage(
"SUPP_CU_RD_TMP_CAT", [
"#FILE#" => $updatesDirFull]).
". ";
813 if ($strError_tmp ==
'')
814 if (!file_exists($updatesDirFull.
"/update_info.xml") || !is_file($updatesDirFull.
"/update_info.xml"))
815 $strError_tmp .=
"[UGLMU03] ".GetMessage(
"SUPP_RV_ER_DESCR_FILE", [
"#FILE#" => $updatesDirFull.
"/update_info.xml"]).
". ";
817 if ($strError_tmp ==
'')
818 if (!is_readable($updatesDirFull.
"/update_info.xml"))
819 $strError_tmp .=
"[UGLMU04] ".GetMessage(
"SUPP_RV_READ_DESCR_FILE", [
"#FILE#" => $updatesDirFull.
"/update_info.xml"]).
". ";
821 if ($strError_tmp ==
'')
822 $content = file_get_contents($updatesDirFull.
"/update_info.xml");
824 if ($strError_tmp ==
'')
830 if ($strError_tmp ==
'')
833 $strError_tmp .=
"[UGSMU01] ".GetMessage(
"SUPP_GAUT_SYSERR").
". ";
836 if ($strError_tmp <>
'')
853 $stableVersionsOnly = (($stableVersionsOnly ==
"N") ?
"N" :
"Y");
861 if ($strError_tmp ==
'')
863 $license = Application::getInstance()->getLicense();
865 $dbv =
$GLOBALS[
"DB"]->GetVersion();
867 $strResult =
"utf=Y".
868 "&lang=".urlencode(
$lang).
869 "&stable=".urlencode($stableVersionsOnly).
871 "&SUPD_DBS=".urlencode(
$GLOBALS[
"DB"]->type).
872 "&XE=".urlencode((isset(
$GLOBALS[
"DB"]->XE) &&
$GLOBALS[
"DB"]->XE) ?
"Y" :
"N").
873 "&CLIENT_SITE=".urlencode(
$_SERVER[
"SERVER_NAME"]).
874 "&LICENSE_KEY=".urlencode(
$license->getHashLicenseKey()).
876 "&SUPD_URS=".urlencode(
$license->getActiveUsersCount()).
877 "&TYPENC=".($license->isDemo() ?
"D" : (
$license->isEncoded() ?
"E" : (
$license->isTimeBound() ?
"T" :
"F"))).
878 "&CLIENT_PHPVER=".urlencode(phpversion()).
879 "&NGINX=".urlencode(COption::GetOptionString(
"main",
"update_use_nginx",
"Y")).
880 "&dbv=".urlencode($dbv ?:
"");
883 if (!empty($arClientModules))
885 foreach ($arClientModules as
$key => $value)
887 if ($strResultTmp <>
'')
888 $strResultTmp .=
";";
889 $strResultTmp .=
$key.
",".$value[
"VERSION"].
",".$value[
"IS_DEMO"];
892 if ($strResultTmp <>
'')
893 $strResult .=
"&instm=".urlencode($strResultTmp);
896 if (!empty($arRequestedModules))
898 for (
$i = 0, $cnt =
count($arRequestedModules);
$i < $cnt;
$i++)
900 if ($strResultTmp <>
'')
901 $strResultTmp .=
",";
902 $strResultTmp .= $arRequestedModules[
$i];
905 if ($strResultTmp <>
'')
906 $strResult .=
"&reqm=".urlencode($strResultTmp);
909 $strResult .=
"&lim=Y";
912 if (!empty($arAdditionalData))
914 foreach ($arAdditionalData as
$key => $value)
916 if ($strResultTmp <>
'')
917 $strResultTmp .=
"&";
918 $strResultTmp .=
$key.
"=".urlencode($value);
921 if ($strResultTmp <>
'')
922 $strResult .=
"&".$strResultTmp;
924 if (CModule::IncludeModule(
"cluster") && class_exists(
"CCluster"))
927 $strResult .=
"&SUPD_SRS=".urlencode(
"RU");
929 if (method_exists(
"CHTMLPagesCache",
"IsOn") && method_exists(
"CHTMLPagesCache",
"IsCompositeEnabled") && CHTMLPagesCache::IsOn() && CHTMLPagesCache::IsCompositeEnabled())
930 $strResult .=
"&SUPD_CMP=".urlencode(
"Y");
932 $strResult .=
"&SUPD_CMP=".urlencode(
"N");
945 $arClientModules =
array();
947 if (file_exists(
$_SERVER[
"DOCUMENT_ROOT"].US_SHARED_KERNEL_PATH.
"/modules/main/classes/general/version.php")
948 && is_file(
$_SERVER[
"DOCUMENT_ROOT"].US_SHARED_KERNEL_PATH.
"/modules/main/classes/general/version.php"))
950 $p = file_get_contents(
$_SERVER[
"DOCUMENT_ROOT"].US_SHARED_KERNEL_PATH.
"/modules/main/classes/general/version.php");
952 preg_match(
"/define\s*\(\s*\"SM_VERSION\"\s*,\s*\"(\d+\.\d+\.\d+)\"\s*\)\s*/im",
$p, $arVers);
953 $arClientModules[
"main"] =
array(
"VERSION" => $arVers[1],
"IS_DEMO" => ((defined(
"DEMO") && DEMO ==
"Y") ?
"Y" :
"N"));
956 if (!array_key_exists(
"main", $arClientModules) || $arClientModules[
"main"][
"VERSION"] ==
'')
959 $strError .=
"[Ux09] ".GetMessage(
"SUPP_GM_ERR_DMAIN").
". ";
963 if (
$handle = @opendir(
$_SERVER[
"DOCUMENT_ROOT"].US_SHARED_KERNEL_PATH.
"/modules"))
967 if (is_dir(
$_SERVER[
"DOCUMENT_ROOT"].US_SHARED_KERNEL_PATH.
"/modules/".
$dir)
970 $module_dir =
$_SERVER[
"DOCUMENT_ROOT"].US_SHARED_KERNEL_PATH.
"/modules/".
$dir;
971 if (file_exists($module_dir.
"/install/index.php"))
974 if (!isset($arInfo[
"VERSION"]) || $arInfo[
"VERSION"] ==
'')
977 $strError .=
"[Ux11] ".GetMessage(
"SUPP_GM_ERR_DMOD", [
"#MODULE#" =>
$dir]).
". ";
983 if($arInfo[
"ACTIVE"] ==
"Y")
984 $arClientModules[
$dir] =
array(
"VERSION" => $arInfo[
"VERSION"],
"IS_DEMO" => $arInfo[
"IS_DEMO"]);
998 $strError .=
"[Ux15] ".GetMessage(
"SUPP_GM_NO_KERNEL").
". ";
1003 return $arClientModules;
1014 if ($strQuery ==
'' || $strError_tmp <>
'')
1023 $stime = microtime(
true);
1029 if ($strError_tmp ==
'')
1032 if ($strError_tmp ==
'')
1035 $strError_tmp .=
"[UGAUT01] ".GetMessage(
"SUPP_GAUT_SYSERR").
". ";
1038 if ($strError_tmp ==
'')
1042 $strError_tmp .=
"[UGAUT01] ".GetMessage(
"SUPP_GAUT_SYSERR").
". ";
1045 if ($strError_tmp <>
'')
1062 $arUpdateDescription =
array();
1063 $updateServerQueryString =
"";
1066 $timeout = COption::GetOptionString(
"main",
"update_load_timeout",
"30");
1080 $arUpdateDescription =
array();
1094 if (empty($arUpdateDescription))
1102 $errorMessage =
"[GNSU01] ".GetMessage(
"SUPZ_NO_QSTRING").
". ";
1109 preg_replace(
"/LICENSE_KEY=[^&]*/i",
"LICENSE_KEY=X", $updateServerQueryString)
1112 $stime = microtime(
true);
1118 $errorMessage =
"[GNSU02] ".GetMessage(
"SUPZ_EMPTY_ANSWER").
". ";
1125 "TIME LoadModulesUpdates(request) ".round(microtime(
true) - $stime,3).
" sec"
1136 if (isset($arUpdateDescription[
"DATA"][
"#"][
"ERROR"]))
1138 for (
$i = 0, $cnt =
count($arUpdateDescription[
"DATA"][
"#"][
"ERROR"]);
$i < $cnt;
$i++)
1139 $errorMessage .=
"[".$arUpdateDescription[
"DATA"][
"#"][
"ERROR"][
$i][
"@"][
"TYPE"].
"] ".$arUpdateDescription[
"DATA"][
"#"][
"ERROR"][
$i][
"#"];
1149 if (isset($arUpdateDescription[
"DATA"][
"#"][
"NOUPDATES"]))
1156 if (!($fp1 = fopen(
$filename.
".log",
"wb")))
1158 $errorMessage =
"[GNSU03] ".GetMessage(
"SUPP_RV_ER_TEMP_FILE", [
"#FILE#" =>
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/updates"]).
". ";
1172 if (isset($arUpdateDescription[
"DATA"][
"#"][
"FILE"][0][
"@"][
"NAME"]))
1174 if ($updateServerQueryString ==
"")
1182 $errorMessage =
"[GNSU01] ".GetMessage(
"SUPZ_NO_QSTRING").
". ";
1190 $r = static::loadFileBx(
1191 $arUpdateDescription[
"DATA"][
"#"][
"FILE"][0][
"@"][
"NAME"],
1192 $arUpdateDescription[
"DATA"][
"#"][
"FILE"][0][
"@"][
"SIZE"],
1195 $updateServerQueryString,
1199 elseif ($arUpdateDescription[
"DATA"][
"#"][
"FILE"][0][
"@"][
"URL"])
1202 $r = static::loadFile(
1203 $arUpdateDescription[
"DATA"][
"#"][
"FILE"][0][
"@"][
"URL"],
1204 $arUpdateDescription[
"DATA"][
"#"][
"FILE"][0][
"@"][
"SIZE"],
1231 private static function getAddr()
1233 $serverIp = COption::GetOptionString(
"main",
"update_site", DEFAULT_UPDATE_SERVER);
1234 $https = COption::GetOptionString(
"main",
"update_use_https",
"N") ==
"Y";
1235 $proxyAddr = COption::GetOptionString(
"main",
"update_site_proxy_addr",
"");
1236 $proxyPort = COption::GetOptionString(
"main",
"update_site_proxy_port",
"");
1237 $proxyUserName = COption::GetOptionString(
"main",
"update_site_proxy_user",
"");
1238 $proxyPassword = COption::GetOptionString(
"main",
"update_site_proxy_pass",
"");
1240 $useProxy = ($proxyAddr <>
'' && $proxyPort <>
'');
1243 "USE_PROXY" => $useProxy,
1245 "SOCKET_IP" => ($https ?
'tls://' :
'') . $serverIp,
1246 "SOCKET_PORT" => ($https ? 443 : 80),
1251 $proxyPort = intval($proxyPort);
1252 if ($proxyPort <= 0)
1255 $result[
"SOCKET_IP"] = $proxyAddr;
1256 $result[
"SOCKET_PORT"] = $proxyPort;
1257 $result[
"PROXY_USERNAME"] = $proxyUserName;
1258 $result[
"PROXY_PASSWORD"] = $proxyPassword;
1264 private static function getSocketError($errstr, $errno, $addrParams)
1267 if (intval($errno) <= 0)
1271 "Error connecting to ".$addrParams[
"SOCKET_IP"].
": [".$errno.
"] ".$errstr,
"ERRCONN1"
1277 private static function loadFileBx($requestedUrl, $realSize, $outputFilename, $timeout, $requestQueryString, &
$errorMessage)
1279 $timeout = intval($timeout);
1284 $addrParams = static::getAddr();
1286 $socketHandler = fsockopen($addrParams[
"SOCKET_IP"], $addrParams[
"SOCKET_PORT"], $errorNum,
$errorMsg, 30);
1287 if (!$socketHandler)
1294 if ($addrParams[
"USE_PROXY"])
1296 $request .=
"POST http://".$addrParams[
"IP"].
"/bitrix/updates/smp_updater_modules.php HTTP/1.0\r\n";
1297 if ($addrParams[
"PROXY_USERNAME"])
1298 $request .=
"Proxy-Authorization: Basic ".base64_encode(
1299 $addrParams[
"PROXY_USERNAME"].
":".$addrParams[
"PROXY_PASSWORD"]
1304 $request .=
"POST /bitrix/updates/smp_updater_modules.php HTTP/1.0\r\n";
1307 $requestQueryString .=
"&UFILE=".$requestedUrl;
1308 $startSize = (file_exists($outputFilename.
".tmp") ? filesize($outputFilename.
".tmp") : 0);
1309 $requestQueryString .=
"&USTART=".$startSize.
"&verfix=2";
1311 $request .=
"User-Agent: BitrixSMUpdater\r\n";
1313 $request .=
"Host: ".$addrParams[
"IP"].
"\r\n";
1314 $request .=
"Accept-Language: en\r\n";
1315 $request .=
"Content-type: application/x-www-form-urlencoded\r\n";
1316 $request .=
"Content-length: ".strlen($requestQueryString).
"\r\n\r\n";
1323 while ((
$result = fgets($socketHandler, 4096)) &&
$result !=
"\r\n")
1326 $replyHeaderArray = preg_split(
"#\r\n#", $replyHeader);
1329 for (
$i = 0, $cnt =
count($replyHeaderArray);
$i < $cnt;
$i++)
1331 if (str_contains($replyHeaderArray[
$i],
"Content-Length"))
1333 $pos = mb_strpos($replyHeaderArray[
$i],
":");
1334 $contentLength = intval(trim(mb_substr($replyHeaderArray[
$i], $pos + 1, mb_strlen($replyHeaderArray[
$i]) - $pos + 1)));
1338 if (($contentLength + $startSize) != $realSize)
1340 $errorMessage .=
"[ELVL001] ".GetMessage(
"ELVL001_SIZE_ERROR").
". ";
1344 @unlink($outputFilename.
".tmp1");
1346 if (file_exists($outputFilename.
".tmp"))
1348 if (@rename($outputFilename.
".tmp", $outputFilename.
".tmp1"))
1350 $fileHandler = fopen($outputFilename.
".tmp",
"wb");
1353 $fh1 = fopen($outputFilename.
".tmp1",
"rb");
1356 $data = fread($fh1, 8192);
1359 fwrite($fileHandler,
$data);
1364 @unlink($outputFilename.
".tmp1");
1368 $errorMessage .=
"[JUHYT002] ".GetMessage(
"JUHYT002_ERROR_FILE").
". ";
1374 $errorMessage .=
"[JUHYT003] ".GetMessage(
"JUHYT003_ERROR_FILE").
". ";
1380 $fileHandler = fopen($outputFilename.
".tmp",
"wb");
1383 $errorMessage .=
"[JUHYT004] ".GetMessage(
"JUHYT004_ERROR_FILE").
". ";
1391 if ($timeout > 0 && (microtime(
true) -
$startTime) > $timeout)
1393 $isFinished =
false;
1397 $result = fread($socketHandler, 40960);
1401 fwrite($fileHandler,
$result);
1404 fclose($fileHandler);
1405 fclose($socketHandler);
1409 $sizeTmp = (file_exists($outputFilename.
".tmp") ? filesize($outputFilename.
".tmp") : 0);
1410 if ($sizeTmp == $realSize)
1417 @unlink($outputFilename);
1418 if (!@rename($outputFilename.
".tmp", $outputFilename))
1420 $errorMessage .=
"[JUHYT005] ".GetMessage(
"JUHYT005_ERROR_FILE").
". ";
1423 @unlink($outputFilename.
".tmp");
1433 private static function loadFile($requestedUrl, $realSize, $outputFilename, $timeout, &
$errorMessage)
1435 $timeout = intval($timeout);
1440 $startSize = file_exists($outputFilename.
".tmp") ? filesize($outputFilename.
".tmp") : 0;
1442 $addrParams = static::getAddr();
1444 $socketHandler = fsockopen($addrParams[
"SOCKET_IP"], $addrParams[
"SOCKET_PORT"], $errorNum,
$errorMsg, 30);
1445 if (!$socketHandler)
1452 $requestedUrl =
"/";
1455 if (!$addrParams[
"USE_PROXY"])
1457 $request .=
"GET ".$requestedUrl.
" HTTP/1.0\r\n";
1458 $request .=
"Host: ".$addrParams[
"IP"].
"\r\n";
1462 $request .=
"GET http://".$addrParams[
"IP"].$requestedUrl.
" HTTP/1.0\r\n";
1463 $request .=
"Host: ".$addrParams[
"IP"].
"\r\n";
1464 if ($addrParams[
"PROXY_USERNAME"])
1465 $request .=
"Proxy-Authorization: Basic ".base64_encode($addrParams[
"PROXY_USERNAME"].
":".$addrParams[
"PROXY_PASSWORD"]).
"\r\n";
1468 $request .=
"User-Agent: BitrixSMUpdater\r\n";
1470 $request .=
"Range: bytes=".$startSize.
"-\r\n";
1477 while ((
$result = fgets($socketHandler, 4096)) &&
$result!=
"\r\n")
1480 $replyHeaderArray = preg_split(
"#\r\n#", $replyHeader);
1484 if (preg_match(
"#([A-Z]{4})/([0-9.]{3}) ([0-9]{3})#", $replyHeaderArray[0], $regs))
1486 $replycode = intval($regs[3]);
1487 $replymsg = mb_substr($replyHeaderArray[0], mb_strpos($replyHeaderArray[0], $replycode) + mb_strlen($replycode) + 1, mb_strlen($replyHeaderArray[0]) - mb_strpos($replyHeaderArray[0], $replycode) + 1);
1490 if ($replycode != 200 && $replycode != 204 && $replycode != 302 && $replycode != 206)
1496 $replyContentRange =
"";
1497 $replyContentLength = 0;
1500 if (str_contains($replyHeaderArray[
$i],
"Content-Range"))
1501 $replyContentRange = trim(mb_substr($replyHeaderArray[
$i], mb_strpos($replyHeaderArray[
$i],
":") + 1, mb_strlen($replyHeaderArray[
$i]) - mb_strpos($replyHeaderArray[
$i],
":") + 1));
1502 elseif (str_contains($replyHeaderArray[
$i],
"Content-Length"))
1503 $replyContentLength = doubleval(trim(mb_substr($replyHeaderArray[
$i], mb_strpos($replyHeaderArray[
$i],
":") + 1, mb_strlen($replyHeaderArray[
$i]) - mb_strpos($replyHeaderArray[
$i],
":") + 1)));
1506 $shouldReloadFile =
true;
1507 if ($replyContentRange <> '')
1509 if (preg_match(
"# *bytes +([0-9]*) *- *([0-9]*) */ *([0-9]*)#i", $replyContentRange, $regs))
1511 $startBytesTmp = doubleval($regs[1]);
1512 $endBytesTmp = doubleval($regs[2]);
1513 $sizeBytesTmp = doubleval($regs[3]);
1514 if (($startBytesTmp == $startSize) && ($endBytesTmp == ($realSize - 1)) && ($sizeBytesTmp == $realSize))
1516 $shouldReloadFile =
false;
1521 if ($shouldReloadFile)
1523 @unlink($outputFilename.
".tmp");
1527 if (($replyContentLength + $startSize) != $realSize)
1529 $errorMessage .=
"[ELVL010] ".GetMessage(
"ELVL001_SIZE_ERROR").
". ";
1533 $fileHandler = fopen($outputFilename.
".tmp",
"ab");
1536 $errorMessage .=
"[JUHYT010] ".GetMessage(
"JUHYT002_ERROR_FILE").
". ";
1543 if ($timeout > 0 && (microtime(
true) -
$startTime) > $timeout)
1545 $isFinished =
false;
1549 $result = fread($socketHandler, 256 * 1024);
1553 fwrite($fileHandler,
$result);
1556 fclose($fileHandler);
1557 fclose($socketHandler);
1559 $sizeTmp = (file_exists($outputFilename.
".tmp") ? filesize($outputFilename.
".tmp") : 0);
1560 if ($sizeTmp == $realSize)
1567 @unlink($outputFilename);
1568 if (!@rename($outputFilename.
".tmp", $outputFilename))
1570 $errorMessage .=
"[JUHYT010] ".GetMessage(
"JUHYT005_ERROR_FILE").
". ";
1573 @unlink($outputFilename.
".tmp");
1588 if (!defined(
"US_SAVE_UPDATERS_DIR") || US_SAVE_UPDATERS_DIR ==
'')
1589 $bSaveUpdaters =
false;
1591 $stime = microtime(
true);
1593 $updatesDirFull =
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/updates/".$updatesDir;
1595 if (!file_exists($updatesDirFull) || !is_dir($updatesDirFull))
1596 $strError_tmp .=
"[UUK01] ".GetMessage(
"SUPP_CU_NO_TMP_CAT", [
"#FILE#" => $updatesDirFull]).
". ";
1598 if ($strError_tmp ==
'')
1599 if (!is_readable($updatesDirFull))
1600 $strError_tmp .=
"[UUK03] ".GetMessage(
"SUPP_CU_RD_TMP_CAT", [
"#FILE#" => $updatesDirFull]).
". ";
1602 $arModules =
array();
1603 if ($strError_tmp ==
'')
1605 $handle = @opendir($updatesDirFull);
1612 if (is_dir($updatesDirFull.
"/".
$dir))
1613 $arModules[] =
$dir;
1619 if (!is_array($arModules) || empty($arModules))
1620 $strError_tmp .=
"[UUK02] ".GetMessage(
"SUPP_UK_NO_MODS").
". ";
1622 if ($strError_tmp ==
'')
1624 for (
$i = 0, $cnt =
count($arModules);
$i < $cnt;
$i++)
1626 $strError_tmp1 =
"";
1628 $updateDirFrom = $updatesDirFull.
"/".$arModules[
$i];
1629 $updateDirTo =
$_SERVER[
"DOCUMENT_ROOT"].US_SHARED_KERNEL_PATH.
"/modules/".$arModules[
$i];
1633 if (!file_exists($updateDirTo) || !is_dir($updateDirTo))
1634 $strError_tmp1 .=
"[UUK04] ".GetMessage(
"SUPP_UK_NO_MODIR", [
"#MODULE_DIR#" => $updateDirTo]).
". ";
1636 if ($strError_tmp1 ==
'')
1637 if (!is_writable($updateDirTo))
1638 $strError_tmp1 .=
"[UUK05] ".GetMessage(
"SUPP_UK_WR_MODIR", [
"#MODULE_DIR#" => $updateDirTo]).
". ";
1640 if ($strError_tmp1 ==
'')
1641 if (!file_exists($updateDirFrom) || !is_dir($updateDirFrom))
1642 $strError_tmp1 .=
"[UUK06] ".GetMessage(
"SUPP_UK_NO_FDIR", [
"#DIR#" => $updateDirFrom]).
". ";
1644 if ($strError_tmp1 ==
'')
1645 if (!is_readable($updateDirFrom))
1646 $strError_tmp1 .=
"[UUK07] ".GetMessage(
"SUPP_UK_READ_FDIR", [
"#DIR#" => $updateDirFrom]).
". ";
1648 $arUpdaters =
array();
1649 if ($strError_tmp1 ==
'')
1651 $handle = @opendir($updateDirFrom);
1656 if (str_starts_with(
$dir,
"updater"))
1658 $bPostUpdater =
"N";
1659 if (is_file($updateDirFrom.
"/".
$dir))
1661 $num = mb_substr(
$dir, 7, mb_strlen(
$dir) - 11);
1662 if (mb_substr(
$dir, mb_strlen(
$dir) - 9) ==
"_post.php")
1664 $bPostUpdater =
"Y";
1665 $num = mb_substr(
$dir, 7, mb_strlen(
$dir) - 16);
1667 $arUpdaters[] =
array(
"/".
$dir, trim($num), $bPostUpdater);
1669 elseif (file_exists($updateDirFrom.
"/".
$dir.
"/index.php"))
1671 $num = mb_substr(
$dir, 7);
1672 if (mb_substr(
$dir, mb_strlen(
$dir) - 5) ==
"_post")
1674 $bPostUpdater =
"Y";
1675 $num = mb_substr(
$dir, 7, mb_strlen(
$dir) - 12);
1677 $arUpdaters[] =
array(
"/".
$dir.
"/index.php", trim($num), $bPostUpdater);
1688 for ($i1 = 0; $i1 <
$n - 1; $i1++)
1690 for ($j1 = $i1 + 1; $j1 <
$n; $j1++)
1694 $tmp1 = $arUpdaters[$i1];
1695 $arUpdaters[$i1] = $arUpdaters[$j1];
1696 $arUpdaters[$j1] = $tmp1;
1702 if ($strError_tmp1 ==
'')
1704 if (
$DB->type ==
"MYSQL" && defined(
"MYSQL_TABLE_TYPE") && MYSQL_TABLE_TYPE <>
'')
1706 $DB->Query(
"SET storage_engine = '".MYSQL_TABLE_TYPE.
"'",
true);
1710 if ($strError_tmp1 ==
'')
1712 for ($i1 = 0,
$n =
count($arUpdaters); $i1 <
$n; $i1++)
1714 if ($arUpdaters[$i1][2] ==
"N")
1716 $strError_tmp2 =
"";
1718 if ($strError_tmp2 <>
'')
1720 $strError_tmp1 .=
GetMessage(
"SUPP_UK_UPDN_ERR", [
1721 "#VER#" => $arUpdaters[$i1][1],
1722 "#MODULE#", $arModules[
$i],
1727 .
GetMessage(
"SUPP_UK_UPDN_ERR_BREAK", [
"#MODULE#" => $arModules[
$i]])
1735 if ($strError_tmp1 ==
'')
1738 if ($strError_tmp1 ==
'')
1740 for ($i1 = 0,
$n =
count($arUpdaters); $i1 <
$n; $i1++)
1742 if ($arUpdaters[$i1][2]==
"Y")
1744 $strError_tmp2 =
"";
1746 if ($strError_tmp2 <>
'')
1748 $strError_tmp1 .=
GetMessage(
"SUPP_UK_UPDY_ERR", [
1749 "#VER#" => $arUpdaters[$i1][1],
1750 "#MODULE#" => $arModules[
$i],
1755 .
GetMessage(
"SUPP_UK_UPDN_ERR_BREAK", [
"#MODULE#" => $arModules[
$i]])
1763 if ($strError_tmp1 <>
'')
1764 $strError_tmp .= $strError_tmp1;
1771 if ($strError_tmp <>
'')
1793 if ($strQuery ==
'' || $strError_tmp <>
'')
1795 if ($strError_tmp ==
'')
1796 $strError_tmp =
"[RV01] ".GetMessage(
"SUPZ_NO_QSTRING").
". ";
1799 if (CModule::IncludeModule(
"rest") && !\
Bitrix\Rest\OAuthService::getEngine()->isRegistered())
1806 catch(\
Bitrix\Main\SystemException)
1811 if ($strError_tmp ==
'')
1813 $strQuery .=
"&coupon=".UrlEncode($coupon).
"&query_type=coupon";
1821 $stime = microtime(
true);
1825 if ($strError_tmp ==
'')
1826 $strError_tmp =
"[GNSU02] ".GetMessage(
"SUPZ_EMPTY_ANSWER").
". ";
1832 if ($strError_tmp ==
'')
1838 if ($strError_tmp ==
'')
1840 if (!empty(
$arRes[
"DATA"][
"#"][
"ERROR"]) && is_array(
$arRes[
"DATA"][
"#"][
"ERROR"]))
1844 if (
$arRes[
"DATA"][
"#"][
"ERROR"][
$i][
"@"][
"TYPE"] <>
'')
1845 $strError_tmp .=
"[".$arRes[
"DATA"][
"#"][
"ERROR"][
$i][
"@"][
"TYPE"].
"] ";
1847 $strError_tmp .=
$arRes[
"DATA"][
"#"][
"ERROR"][
$i][
"#"].
". ";
1852 if ($strError_tmp <>
'')
1867 if (!isset(
$GLOBALS[
"UPDATE_STRONG_UPDATE_CHECK"])
1868 || (
$GLOBALS[
"UPDATE_STRONG_UPDATE_CHECK"] !=
"Y" &&
$GLOBALS[
"UPDATE_STRONG_UPDATE_CHECK"] !=
"N"))
1870 $GLOBALS[
"UPDATE_STRONG_UPDATE_CHECK"] = ((US_CALL_TYPE !=
"DB") ? COption::GetOptionString(
"main",
"strong_update_check",
"Y") :
"Y");
1872 $strongUpdateCheck =
$GLOBALS[
"UPDATE_STRONG_UPDATE_CHECK"];
1877 $updaterPath = dirname(
$path);
1878 $updaterPath = mb_substr($updaterPath, mb_strlen(
$_SERVER[
"DOCUMENT_ROOT"]));
1879 $updaterPath = trim($updaterPath,
" \t\n\r\0\x0B/\\");
1880 if ($updaterPath <>
'')
1881 $updaterPath =
"/".$updaterPath;
1883 $updaterName = mb_substr(
$path, mb_strlen(
$_SERVER[
"DOCUMENT_ROOT"]));
1888 $updater->Init($updaterPath,
$DB->type, $updaterName, $updateDirFrom,
$moduleID, US_CALL_TYPE);
1896 if (is_array($updater->errorMessage) && !empty($updater->errorMessage))
1897 $strError .= implode(
"\n", $updater->errorMessage);
1908 $strVers1 = trim($strVers1);
1909 $strVers2 = trim($strVers2);
1911 if ($strVers1 == $strVers2)
1914 $arVers1 = explode(
".", $strVers1);
1915 $arVers2 = explode(
".", $strVers2);
1917 if (intval($arVers1[0]) > intval($arVers2[0])
1918 || intval($arVers1[0]) == intval($arVers2[0]) && intval($arVers1[1]) > intval($arVers2[1])
1919 || intval($arVers1[0]) == intval($arVers2[0]) && intval($arVers1[1]) == intval($arVers2[1]) && intval($arVers1[2]) > intval($arVers2[2]))
1924 if (intval($arVers1[0]) == intval($arVers2[0]) && intval($arVers1[1]) == intval($arVers2[1]) && intval($arVers1[2]) == intval($arVers2[2]))
1941 if (
$page ==
"LIST")
1942 $page =
"smp_updater_list.php";
1944 $page =
"smp_updater_modules.php";
1946 $page =
"smp_updater_search.php";
1948 $page =
"smp_updater_actions.php";
1950 $page =
"smp_updater_register.php";
1952 $page =
"us_updater_actions.php";
1954 $page =
"smp_updater_search_new.php";
1956 $strVars .=
"&product=".(IsModuleInstalled(
"intranet") ?
"CORPORTAL" :
"BSM").
"&verfix=2";
1958 $addrParams = static::getAddr();
1960 $FP = fsockopen($addrParams[
"SOCKET_IP"], $addrParams[
"SOCKET_PORT"], $errno, $errstr, 120);
1966 if ($addrParams[
"USE_PROXY"])
1968 $strRequest .=
"POST http://".$addrParams[
"IP"].
"/bitrix/updates/".
$page.
" HTTP/1.0\r\n";
1969 if ($addrParams[
"PROXY_USERNAME"] <>
'')
1970 $strRequest .=
"Proxy-Authorization: Basic ".base64_encode($addrParams[
"PROXY_USERNAME"].
":".$addrParams[
"PROXY_PASSWORD"]).
"\r\n";
1974 $strRequest .=
"POST /bitrix/updates/".$page.
" HTTP/1.0\r\n";
1977 $strRequest .=
"User-Agent: BitrixSMUpdater\r\n";
1978 $strRequest .=
"Accept: */*\r\n";
1979 $strRequest .=
"Host: ".$addrParams[
"IP"].
"\r\n";
1980 $strRequest .=
"Accept-Language: en\r\n";
1981 $strRequest .=
"Content-type: application/x-www-form-urlencoded\r\n";
1982 $strRequest .=
"Content-length: ".strlen($strVars).
"\r\n\r\n";
1983 $strRequest .= $strVars;
1984 $strRequest .=
"\r\n";
1986 fputs($FP, $strRequest);
1991 $line = fgets($FP, 4096);
1992 if ($line !=
"\r\n")
1994 if (preg_match(
"/Transfer-Encoding: +chunked/i", $line))
2006 $maxReadSize = 4096;
2008 $line = fgets($FP, $maxReadSize);
2009 $line = mb_strtolower($line);
2013 while (
$i < mb_strlen($line) && in_array($line[
$i],
array(
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"a",
"b",
"c",
"d",
"e",
"f")))
2015 $strChunkSize .= $line[
$i];
2019 $chunkSize = hexdec($strChunkSize);
2021 while ($chunkSize > 0)
2024 $readSize = (($chunkSize > $maxReadSize) ? $maxReadSize : $chunkSize);
2026 while ($readSize > 0 && $line = fread($FP, $readSize))
2029 $processedSize += mb_strlen($line);
2030 $newSize = $chunkSize - $processedSize;
2031 $readSize = (($newSize > $maxReadSize) ? $maxReadSize : $newSize);
2034 fgets($FP, $maxReadSize);
2036 $line = fgets($FP, $maxReadSize);
2037 $line = strtolower($line);
2041 while (
$i < strlen($line) && in_array($line[
$i],
array(
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"a",
"b",
"c",
"d",
"e",
"f")))
2043 $strChunkSize .= $line[
$i];
2047 $chunkSize = hexdec($strChunkSize);
2052 while ($line = fread($FP, 4096))
2083 if ($strServerOutput ==
'')
2084 $strError_tmp .=
"[UPSD01] ".GetMessage(
"SUPP_AS_EMPTY_RESP").
". ";
2086 if ($strError_tmp ==
'')
2089 $strServerOutput = @gzuncompress($strServerOutput);
2090 if (!str_starts_with($strServerOutput,
"<DATA>"))
2093 $strError_tmp .=
"[UPSD02] ".GetMessage(
"SUPP_PSD_BAD_RESPONSE").
". ";
2100 if ($strError_tmp ==
'')
2105 $objXML->LoadString($strServerOutput);
2106 $arRes = $objXML->GetArray();
2109 $strError_tmp .=
"[UPSD03] ".GetMessage(
"SUPP_PSD_BAD_TRANS").
". ";
2112 if ($strError_tmp ==
'')
2114 if (isset(
$arRes[
"DATA"][
"#"][
"RESPONSE"]))
2116 $CRCCode =
$arRes[
"DATA"][
"#"][
"RESPONSE"][0][
"@"][
"CRC_CODE"];
2118 COption::SetOptionString(US_BASE_MODULE,
"crc_code", $CRCCode);
2120 if (isset(
$arRes[
"DATA"][
"#"][
"CLIENT"][0][
"@"][
"DATE_TO_SOURCE"]))
2121 COption::SetOptionString(US_BASE_MODULE,
"~support_finish_date",
$arRes[
"DATA"][
"#"][
"CLIENT"][0][
"@"][
"DATE_TO_SOURCE"]);
2124 if ($strError_tmp <>
'')
2137 if (function_exists(
"gzcompress"))
2138 return COption::GetOptionString(
"main",
"update_is_gzip_installed",
"Y") ==
"Y";
2145 $db = CLang::GetList(
"",
"",
array(
"ACTIVE" =>
"Y"));
2147 while ($db->Fetch())
2175 if (!is_writable(
$path))
2176 @chmod(
$path, BX_DIR_PERMISSIONS);
2180 $badDirs[] = mb_substr(
$path,
$p + 1);
2188 @mkdir(
$path, BX_DIR_PERMISSIONS);
2197 while (mb_strlen($path_from) > 1 && $path_from[mb_strlen($path_from) - 1] ==
"/")
2198 $path_from = mb_substr($path_from, 0, mb_strlen($path_from) - 1);
2200 while (mb_strlen($path_to) > 1 && $path_to[mb_strlen($path_to) - 1] ==
"/")
2201 $path_to = mb_substr($path_to, 0, mb_strlen($path_to) - 1);
2203 if (mb_strpos($path_to.
"/", $path_from.
"/") === 0)
2204 $strError_tmp .=
"[UCDF01] ".GetMessage(
"SUPP_CDF_SELF_COPY").
". ";
2206 if ($strError_tmp ==
'')
2208 if (!file_exists($path_from))
2209 $strError_tmp .=
"[UCDF02] ".GetMessage(
"SUPP_CDF_NO_PATH", [
"#FILE#" => $path_from]).
". ";
2212 if ($strError_tmp ==
'')
2214 $strongUpdateCheck = COption::GetOptionString(
"main",
"strong_update_check",
"Y");
2216 if (is_dir($path_from))
2220 if (!file_exists($path_to) || !is_dir($path_to))
2221 $strError_tmp .=
"[UCDF03] ".GetMessage(
"SUPP_CDF_CANT_CREATE", [
"#FILE#" => $path_to]).
". ";
2222 elseif (!is_writable($path_to))
2223 $strError_tmp .=
"[UCDF04] ".GetMessage(
"SUPP_CDF_CANT_WRITE", [
"#FILE#" => $path_to]).
". ";
2225 if ($strError_tmp ==
'')
2227 if (
$handle = @opendir($path_from))
2229 while (($file = readdir(
$handle)) !==
false)
2231 if ($file ==
"." || $file ==
"..")
2234 if ($bSkipUpdater && str_starts_with($file,
"updater"))
2237 if (is_dir($path_from.
"/".$file))
2241 elseif (is_file($path_from.
"/".$file))
2243 if (file_exists($path_to.
"/".$file) && !is_writable($path_to.
"/".$file))
2245 $strError_tmp .=
"[UCDF05] ".GetMessage(
"SUPP_CDF_CANT_FILE", [
"#FILE#" => $path_to.
"/".$file]).
". ";
2249 if ($strongUpdateCheck ==
"Y")
2250 $crc32_old = dechex(crc32(file_get_contents($path_from.
"/".$file)));
2252 @copy($path_from.
"/".$file, $path_to.
"/".$file);
2253 @chmod($path_to.
"/".$file, BX_FILE_PERMISSIONS);
2255 if ($strongUpdateCheck ==
"Y")
2257 $crc32_new = dechex(crc32(file_get_contents($path_to.
"/".$file)));
2258 if ($crc32_new != $crc32_old)
2260 $strError_tmp .=
"[UCDF061] ".GetMessage(
"SUPP_UGA_FILE_CRUSH", [
"#FILE#" => $path_to.
"/".$file]).
". ";
2273 $path_to_dir = mb_substr($path_to, 0,
$p);
2276 if (!file_exists($path_to_dir) || !is_dir($path_to_dir))
2277 $strError_tmp .=
"[UCDF06] ".GetMessage(
"SUPP_CDF_CANT_FOLDER", [
"#FILE#" => $path_to_dir]).
". ";
2278 elseif (!is_writable($path_to_dir))
2279 $strError_tmp .=
"[UCDF07] ".GetMessage(
"SUPP_CDF_CANT_FOLDER_WR", [
"#FILE#" => $path_to_dir]).
". ";
2281 if ($strError_tmp ==
'')
2283 if ($strongUpdateCheck ==
"Y")
2284 $crc32_old = dechex(crc32(file_get_contents($path_from)));
2286 @copy($path_from, $path_to);
2287 @chmod($path_to, BX_FILE_PERMISSIONS);
2289 if ($strongUpdateCheck ==
"Y")
2291 $crc32_new = dechex(crc32(file_get_contents($path_to)));
2292 if ($crc32_new != $crc32_old)
2294 $strError_tmp .=
"[UCDF0611] ".GetMessage(
"SUPP_UGA_FILE_CRUSH", [
"#FILE#" => $path_to]).
". ";
2301 if ($strError_tmp <>
'')
2314 if (!file_exists(
$path))
2325 while (($file = readdir(
$handle)) !==
false)
2327 if ($file ==
"." || $file ==
"..")
continue;
2329 if (is_dir(
$path.
"/".$file))
2335 @unlink(
$path.
"/".$file);
2346 $index = mb_strpos(strrev($haystack), strrev($needle));
2347 if($index ===
false)
2349 $index = mb_strlen($haystack) - mb_strlen($needle) - $index;
2356 $module_code = basename(
$path);
2357 $class_name = str_replace(
".",
"_", $module_code);
2359 if (!($cls = CModule::CreateModuleObject($module_code)))
2364 if (!method_exists($cls,
'__construct') && method_exists($cls, $class_name))
2367 $cls->$class_name();
2371 "VERSION" => $cls->MODULE_VERSION,
2372 "VERSION_DATE" => $cls->MODULE_VERSION_DATE,
2373 "IS_DEMO" => ((defined($class_name.
"_DEMO") && constant($class_name.
"_DEMO")) ?
"Y" :
"N"),
2388 return microtime(
true);
if(!defined('SITE_ID')) $lang
if(file_exists(( $_fname=__DIR__ . "/classes/general/update_db_updater.php"))) if(($_fname=getLocalPath("init.php")) !==false) if(( $_fname=getLocalPath("php_interface/init.php", BX_PERSONAL_ROOT)) !==false) if(($_fname=getLocalPath("php_interface/" . SITE_ID . "/init.php", BX_PERSONAL_ROOT)) !==false) if((!(defined("STATISTIC_ONLY") &&STATISTIC_ONLY &&!str_starts_with( $GLOBALS["APPLICATION"]->GetCurPage(), BX_ROOT . "/admin/"))) &&COption::GetOptionString("main", "include_charset", "Y")=="Y" &&LANG_CHARSET !='') if(COption::GetOptionString("main", "set_p3p_header", "Y")=="Y") $license
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)