Your IP : 216.73.216.86


Current Path : /var/www/homesaver/www/bitrix/modules/pull/install/
Upload File :
Current File : /var/www/homesaver/www/bitrix/modules/pull/install/index.php

<?php

if (class_exists("pull"))
{
	return;
}

use Bitrix\Main\Localization\Loc;

class pull extends \CModule
{
	public $MODULE_ID = 'pull';
	public $MODULE_GROUP_RIGHTS = 'Y';

	private $errors = [];

	public function __construct()
	{
		$arModuleVersion = [];

		include (__DIR__.'/version.php');

		if (is_array($arModuleVersion) && array_key_exists('VERSION', $arModuleVersion))
		{
			$this->MODULE_VERSION = $arModuleVersion['VERSION'];
			$this->MODULE_VERSION_DATE = $arModuleVersion['VERSION_DATE'];
		}

		$this->MODULE_NAME = Loc::getMessage('PULL_MODULE_NAME');
		$this->MODULE_DESCRIPTION = Loc::getMessage('PULL_MODULE_DESCRIPTION');
	}

	public function DoInstall()
	{
		global $APPLICATION;
		$this->InstallFiles();
		$this->InstallDB();
		$APPLICATION->IncludeAdminFile(Loc::getMessage('PULL_INSTALL_TITLE'), $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/pull/install/step1.php');
	}

	public function InstallDB()
	{
		global $DB, $APPLICATION;
		$connection = \Bitrix\Main\Application::getConnection();
		$this->errors = false;

		if (!$connection->isTableExists('b_pull_stack'))
		{
			$this->errors = $DB->RunSQLBatch($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/pull/install/db/' . $connection->getType() . '/install.sql');
		}

		if ($this->errors !== false)
		{
			$APPLICATION->ThrowException(implode('', $this->errors));
			return false;
		}

		\Bitrix\Main\ModuleManager::registerModule("pull");

		$eventManager = \Bitrix\Main\EventManager::getInstance();

		$eventManager->registerEventHandlerCompatible("main", "OnBeforeProlog", "main", "", "", 50, "/modules/pull/ajax_hit_before.php");
		$eventManager->registerEventHandlerCompatible("main", "OnProlog", "main", "", "", 3, "/modules/pull/ajax_hit.php");
		$eventManager->registerEventHandlerCompatible("main", "OnProlog", "pull", "CPullOptions", "OnProlog");
		$eventManager->registerEventHandlerCompatible("main", "OnEpilog", "pull", "CPullOptions", "OnEpilog");
		$eventManager->registerEventHandlerCompatible("main", "OnAfterEpilog", "pull", "\Bitrix\Pull\Event", "onAfterEpilog");
		$eventManager->registerEventHandlerCompatible("main", "OnAfterEpilog", "pull", "CPullWatch", "DeferredSql");

		$eventManager->registerEventHandlerCompatible("perfmon", "OnGetTableSchema", "pull", "CPullTableSchema", "OnGetTableSchema");
		$eventManager->registerEventHandlerCompatible("main", "OnAfterRegisterModule", "pull", "CPullOptions", "ClearCheckCache");
		$eventManager->registerEventHandlerCompatible("main", "OnAfterUnRegisterModule", "pull", "CPullOptions", "ClearCheckCache");
		$eventManager->registerEventHandlerCompatible("socialnetwork", "OnSonetLogCounterClear", "pull", "\Bitrix\Pull\MobileCounter", "onSonetLogCounterClear");

		$eventManager->registerEventHandler('rest', 'OnRestServiceBuildDescription', 'pull', '\Bitrix\Pull\Rest', 'onRestServiceBuildDescription');
		$eventManager->registerEventHandler('rest', 'onRestCheckAuth', 'pull', '\Bitrix\Pull\Rest\GuestAuth', 'onRestCheckAuth');

		\CAgent::AddAgent("CPullOptions::ClearAgent();", "pull", "N", 30, "", "Y", ConvertTimeStamp(time()+CTimeZone::GetOffset()+30, "FULL"));

		return true;
	}

	public function InstallFiles()
	{
		\CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/pull/install/js", $_SERVER["DOCUMENT_ROOT"]."/bitrix/js", true, true);
		\CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/pull/install/components", $_SERVER["DOCUMENT_ROOT"]."/bitrix/components", true, true);

		return true;
	}

	public function DoUninstall()
	{
		global $APPLICATION;

		$step = (int)($_REQUEST['step'] ?? 1);
		if ($step < 2)
		{
			$APPLICATION->IncludeAdminFile(Loc::getMessage("PULL_UNINSTALL_TITLE"), $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/pull/install/unstep1.php");
		}
		elseif ($step == 2)
		{
			$this->UnInstallDB(["savedata" => $_REQUEST["savedata"]]);
			$this->UnInstallFiles();
			$APPLICATION->IncludeAdminFile(Loc::getMessage("PULL_UNINSTALL_TITLE"), $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/pull/install/unstep2.php");
		}
	}

	public function UnInstallDB($arParams = [])
	{
		global $APPLICATION, $DB;

		$connection = \Bitrix\Main\Application::getConnection();
		$this->errors = false;

		if (!$arParams['savedata'])
		{
			$this->errors = $DB->RunSQLBatch($_SERVER['DOCUMENT_ROOT']."/bitrix/modules/pull/install/db/".$connection->getType()."/uninstall.sql");
		}

		$arSQLErrors = [];
		if (is_array($this->errors))
		{
			$arSQLErrors = array_merge($arSQLErrors, $this->errors);
		}

		if (!empty($arSQLErrors))
		{
			$this->errors = $arSQLErrors;
			$APPLICATION->ThrowException(implode("", $arSQLErrors));
			return false;
		}

		$eventManager = \Bitrix\Main\EventManager::getInstance();

		$eventManager->unRegisterEventHandler("main", "OnAfterRegisterModule", "pull", "CPullOptions", "ClearCheckCache");
		$eventManager->unRegisterEventHandler("main", "OnAfterUnRegisterModule", "pull", "CPullOptions", "ClearCheckCache");
		$eventManager->unRegisterEventHandler("perfmon", "OnGetTableSchema", "pull", "CPullTableSchema", "OnGetTableSchema");
		$eventManager->unRegisterEventHandler("main", "OnProlog", "main", "", "", "/modules/pull/ajax_hit.php");
		$eventManager->unRegisterEventHandler("main", "OnProlog", "pull", "CPullOptions", "OnProlog");
		$eventManager->unRegisterEventHandler("main", "OnEpilog", "pull", "CPullOptions", "OnEpilog");
		$eventManager->unRegisterEventHandler("main", "OnAfterEpilog", "pull", "\Bitrix\Pull\Event", "onAfterEpilog");
		$eventManager->unRegisterEventHandler("main", "OnAfterEpilog", "pull", "CPullWatch", "DeferredSql");
		$eventManager->unRegisterEventHandler("main", "OnBeforeProlog", "main", "", "", "/modules/pull/ajax_hit_before.php");
		$eventManager->unRegisterEventHandler("socialnetwork", "OnSonetLogCounterClear", "pull", "\Bitrix\Pull\MobileCounter", "onSonetLogCounterClear");

		$eventManager->unRegisterEventHandler('rest', 'OnRestServiceBuildDescription', 'pull', '\Bitrix\Pull\Rest', 'onRestServiceBuildDescription');
		$eventManager->unRegisterEventHandler('rest', 'onRestCheckAuth', 'pull', '\Bitrix\Pull\Rest\GuestAuth', 'onRestCheckAuth');

		\Bitrix\Main\ModuleManager::unRegisterModule('pull');

		return true;
	}
}