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

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

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

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

function CreateUpdateArchive($UpdaterFile){
	$arPath = pathinfo($UpdaterFile);
	if(preg_match('#^updater([\d.]+)\.php$#',$arPath['basename'],$M)) {
		$UpdatePath = $arPath['dirname'];
		$arPath = pathinfo($UpdatePath);
		$ModuleID = $arPath['basename'];
		$Version = $M[1];
		$ArcFileName = $_SERVER['DOCUMENT_ROOT'].'/_updates/'.$ModuleID.'/'.$Version.'.tar.gz';
		@unlink($ArcFileName);
		require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/classes/general/tar_gz.php');
		$Arc = CBXArchive::GetArchive($ArcFileName, 'TAR.GZ');
		if ($Arc instanceof IBXArchive) {
			$Arc->SetOptions(array(
				'COMPRESS' => true, 
				'ADD_PATH' => false, 
				'REMOVE_PATH' => $_SERVER['DOCUMENT_ROOT'].$UpdatePath, 
				'CHECK_PERMISSIONS' => false 
			));
			$arPackFiles = array($_SERVER['DOCUMENT_ROOT'].$UpdatePath);
			$pRes = $Arc->Pack($arPackFiles, '');
		}
	}
}

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

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

CUpdateClientPartner::AddMessage2Log("Run updater '".$updaterName."'", "CSURUS1");

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

CreateUpdateArchive($updaterName);

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

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

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

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

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


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


Статья Вам помогла? Вы можете поблагодарить нас!

Комментарии

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





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

Наверх