Сбор файлов обновления модулей

Недавно мне понадобилось, во что бы то ни стало, получить файлы устанаваемых на сайт обновлений модулей..

В целом, механизм обновлений штука довольно понятная, тем более что ее код почти полностью открыт.

Поэтому решение моей задачи оказалось довольно простым. Привожу код:

function CreateUpdateArchive($strUpdaterDir){
	if(is_file($strUpdaterDir.'/install/version.php')){
		require $strUpdaterDir.'/install/version.php';
		$strModuleID = end(explode('/',$strUpdaterDir));
		$strDir = $_SERVER['DOCUMENT_ROOT'].'/_updates/'.$strModuleID;
		if(!is_dir($strDir)){
			mkdir($strDir, BX_DIR_PERMISSIONS, true);
		}
		$strArcFileName = $strDir.'/'.$arModuleVersion['VERSION'].'.tar.gz';
		@unlink($strArcFileName);
		require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/classes/general/tar_gz.php');
		$obArc = CBXArchive::GetArchive($strArcFileName, 'TAR.GZ');
		if($obArc instanceof IBXArchive) {
			$obArc->SetOptions(array(
				'COMPRESS' => true, 
				'ADD_PATH' => false, 
				'REMOVE_PATH' => $strUpdaterDir, 
				'CHECK_PERMISSIONS' => false 
			));
			$arPackFiles = array($strUpdaterDir);
			$obArc->pack($arPackFiles, '');
		}
		unset($obArc);
	}
}

Этот код необходимо добавить в /bitrix/php_interface/init.php

Далее, необходимо в файле /bitrix/modules/main/classes/general/update_client_partner.php найти строку:

$updateDirTo = $_SERVER["DOCUMENT_ROOT"].US_SHARED_KERNEL_PATH."/modules/".$arModules[$i];

И сразу после этого вставить строку:

CreateUpdateArchive($updateDirFrom);

Все! Теперь все обновления будут складываться в папку /_updates/ в виде tar.gz-архивов, откуда их можно скачивать и изучать.

Имейте ввиду, что добавление этой единственной строки в данный файл считается модифицированием файла ядра. Конечно, это не беда, но монитор качества при проверке модифицированных файлов ядра на эту проблему укажет.

Еще замечание: данный архив не является тем архивом, который закачивает разработчик в Маркетплейс в качестве обновления, это немного модифицированный архив, где, во-первых, отсутствуют языковые файлы (description.ru, description.en), а файл updater.php в названии содержит версию обновления, например, updater1.2.1.php.

Благодаря этому посту у Вас появляется возможность максимально подробно отслеживать изменения в версиях, а также сохранять файлы разных версий.

А в случае чего, можно немного модифицировать код так, чтобы установить модули из маркетплейса точно определенной версии. Однако, это сработает только если обновления загружаются поочередно, а если же модуль изначально скачивается актуальной версией, то отследить любое предыдущее обновление уже невозможно.


Автор: Денис Сон
Дата публикации: 05.04.2017
Просмотров: 1529

Комментарии

111111111
04.06.2017 11:06:43
Автор, спасибо. Не сразу понял как посмотреть исходники обновлений модулей.





По всем вопросам обращайтесь по нашим контактным данным:

Наверх