- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/update_class.php
- Класс: CUpdateSystem
- Вызов: CUpdateSystem::CheckVersions
static function CheckVersions(&$arRes, &$strError, $arSelectedModules = false)
{
$strError_tmp = "";
$stime = CUpdateSystem::getmicrotime();
if (!is_array($arRes)
|| !isset($arRes["MODULES"])
|| !is_array($arRes["MODULES"])
)
{
$strError_tmp .= "[UCV01] ".GetMessage("SUPP_CV_ERR_ARR").".
";
}
if ($arSelectedModules!==false && (!is_array($arSelectedModules) || empty($arSelectedModules)))
{
$strError_tmp .= "[UCV011] ".GetMessage("SUPP_CV_NO_SELECTED").".
";
}
if ($strError_tmp == '')
{
$arModulesList = $arRes["MODULES"]["#"]["MODULE"];
if (!is_array($arModulesList) || empty($arModulesList))
{
$strError_tmp .= "[UCV02] ".GetMessage("SUPP_CV_EMPTY_MODS").".
";
}
}
if ($strError_tmp == '')
{
for ($i = 0, $ni = count($arModulesList); $i < $ni; $i++)
{
if ($arSelectedModules===false || in_array($arModulesList[$i]["@"]["ID"], $arSelectedModules))
{
if (isset($arModulesList[$i]["#"]["VERSION_CONTROL"])
&& !empty($arModulesList[$i]["#"]["VERSION_CONTROL"]))
{
for ($j = 0, $nj = count($arModulesList[$i]["#"]["VERSION_CONTROL"]); $j < $nj; $j++)
{
$strModule_tmp = $arModulesList[$i]["#"]["VERSION_CONTROL"][$j]["@"]["MODUL"];
$bNeedInstall = true;
for ($k = 0, $nk = count($arModulesList); $k < $nk; $k++)
{
if ($arModulesList[$k]["@"]["ID"]==$strModule_tmp
&& ($arSelectedModules===false
|| in_array($arModulesList[$k]["@"]["ID"], $arSelectedModules)))
{
if (CUpdateSystem::CompareVersions(
$arModulesList[$k]["@"]["VERSION"],
$arModulesList[$i]["#"]["VERSION_CONTROL"][$j]["@"]["VERSION"]
) >= 0)
{
$bNeedInstall = false;
break;
}
}
}
if ($bNeedInstall)
{
$strModule_tmp_dir = $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/".$strModule_tmp;
if (file_exists($strModule_tmp_dir) && is_dir($strModule_tmp_dir))
{
if ($strModule_tmp!="main")
{
if (file_exists($strModule_tmp_dir."/install/index.php"))
{
$arModule_tmp_info = CUpdateSystem::GetModuleInfo($strModule_tmp_dir);
if (CUpdateSystem::CompareVersions(
$arModule_tmp_info["VERSION"],
$arModulesList[$i]["#"]["VERSION_CONTROL"][$j]["@"]["VERSION"]
) >= 0)
{
$bNeedInstall = false;
}
}
}
else
{
if (CUpdateSystem::CompareVersions(
SM_VERSION,
$arModulesList[$i]["#"]["VERSION_CONTROL"][$j]["@"]["VERSION"]
) >= 0)
{
$bNeedInstall = false;
}
}
}
else
{
$bNeedInstall = false;
}
}
if ($bNeedInstall)
{
$strError_tmp .= "[UCV_MER01] ".str_replace("#VERS#", $arModulesList[$i]["#"]["VERSION_CONTROL"][$j]["@"]["VERSION"], str_replace("#MODULE2#", $strModule_tmp, str_replace("#MODULE1#", $arModulesList[$i]["@"]["ID"], GetMessage("SUPP_CV_RES_ERR")))).".
";
}
}
}
}
}
}
CUpdateSystem::AddMessage2Log("TIME CheckVersions ".Round(CUpdateSystem::getmicrotime()-$stime, 3)." sec");
if ($strError_tmp <> '')
{
CUpdateSystem::AddMessage2Log($strError_tmp, "CUCV");
$strError .= $strError_tmp;
return false;
}
else
return true;
}