Your IP : 18.191.154.36


Current Path : /home/bitrix/ext_www/crm.klimatlend.ua/bitrix/modules/statistic/install/
Upload File :
Current File : /home/bitrix/ext_www/crm.klimatlend.ua/bitrix/modules/statistic/install/index.php

<?
IncludeModuleLangFile(__FILE__);

if(class_exists("statistic")) return;
Class statistic extends CModule
{
	var $MODULE_ID = "statistic";
	var $MODULE_VERSION;
	var $MODULE_VERSION_DATE;
	var $MODULE_NAME;
	var $MODULE_DESCRIPTION;
	var $MODULE_CSS;
	var $MODULE_GROUP_RIGHTS = "Y";

	var $errors;

	function statistic()
	{
		$arModuleVersion = array();

		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"];
		}
		else
		{
			$this->MODULE_VERSION = $STATISTIC_VERSION;
			$this->MODULE_VERSION_DATE = $STATISTIC_VERSION_DATE;
		}

		$this->MODULE_NAME = GetMessage("STAT_MODULE_NAME");
		$this->MODULE_DESCRIPTION = GetMessage("STAT_MODULE_DESCRIPTION");
		$this->MODULE_CSS = "/bitrix/modules/statistic/statistic.css";
	}

	function InstallDB($arParams = array())
	{
		global $DBType, $APPLICATION;

		$node_id = $arParams["DATABASE"] <> ''? intval($arParams["DATABASE"]): false;

		if($node_id !== false)
			$DB = $GLOBALS["DB"]->GetDBNodeConnection($node_id);
		else
			$DB = $GLOBALS["DB"];

		$this->errors = false;
		$arAllErrors = array();

		// check if module was deinstalled without table save
		$DATE_INSTALL_TABLES = "";
		$no_tables = "N";
		if(!$DB->Query("SELECT count('x') FROM b_stat_day WHERE 1=0", true))
		{
			// last installation date have to be current
			$DATE_INSTALL_TABLES = date("d.m.Y H:i:s",time());
			$no_tables = "Y";
		}

		if($no_tables == "Y")
		{
			$this->errors = $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/install/db/".mb_strtolower($DB->type)."/install.sql");
		}

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

		RegisterModule("statistic");

		RegisterModuleDependences("main", "OnPageStart", "statistic", "CStopList", "Check", "100");
		RegisterModuleDependences("main", "OnBeforeProlog", "statistic", "CStatistics", "Keep", "100");
		RegisterModuleDependences("main", "OnEpilog", "statistic", "CStatistics", "Set404", "100");
		RegisterModuleDependences("main", "OnBeforeProlog", "statistic", "CStatistics", "StartBuffer", "1000");
		RegisterModuleDependences("main", "OnEndBufferContent", "statistic", "CStatistics", "EndBuffer", "900");
		RegisterModuleDependences("main", "OnEventLogGetAuditTypes", "statistic", "CStatistics", "GetAuditTypes", 10);

		RegisterModuleDependences("statistic", "OnCityLookup", "statistic", "CCityLookup_geoip_mod", "OnCityLookup", "100");
		RegisterModuleDependences("statistic", "OnCityLookup", "statistic", "CCityLookup_geoip_extension", "OnCityLookup", "200");
		RegisterModuleDependences("statistic", "OnCityLookup", "statistic", "CCityLookup_geoip_pure", "OnCityLookup", "300");
		RegisterModuleDependences("statistic", "OnCityLookup", "statistic", "CCityLookup_stat_table", "OnCityLookup", "400");

		RegisterModuleDependences("cluster", "OnGetTableList", "statistic", "statistic", "OnGetTableList");

		if ($DATE_INSTALL_TABLES <> '')
			COption::SetOptionString("main", "INSTALL_STATISTIC_TABLES", $DATE_INSTALL_TABLES, "Date of installation of statistics module tables");

		if($node_id !== false)
		{
			COption::SetOptionString("statistic", "dbnode_id", $node_id);
			if(CModule::IncludeModule('cluster'))
				CClusterDBNode::SetOnline($node_id);
		}
		else
		{
			COption::SetOptionString("statistic", "dbnode_id", "N");
		}
		COption::SetOptionString("statistic", "dbnode_status", "ok");

		// init counters
		if(array_key_exists("allow_initial", $arParams) && ($arParams["allow_initial"] == "Y"))
		{
			$strSql = "SELECT ID FROM b_stat_day";
			$e = $DB->Query($strSql, false, $err_mess.__LINE__);
			if (!($er = $e->Fetch()))
			{
				if (intval($arParams["START_HITS"])>0 || intval($arParams["START_HOSTS"])>0 || intval($arParams["START_GUESTS"])>0)
				{
					$arFields = Array(
						"DATE_STAT"	=> $DB->GetNowDate(),
						"HITS"		=> intval($arParams["START_HITS"]),
						"C_HOSTS"	=> intval($arParams["START_HOSTS"]),
						"GUESTS"	=> intval($arParams["START_GUESTS"]),
						"NEW_GUESTS"	=> intval($arParams["START_GUESTS"]),
						);
					$DB->Insert("b_stat_day",$arFields, $err_mess.__LINE__);
				}
			}
		}

		$arr = getdate();

		$ndate = mktime(0, 1, 0, $arr["mon"], $arr["mday"], $arr["year"]);
		CAgent::AddAgent("CStatistics::SetNewDay();","statistic", "Y", 86400, "", "Y", ConvertTimeStamp($ndate+CTimeZone::GetOffset(), "FULL"), 200);
		$ndate = mktime(3, 0, 0, $arr["mon"], $arr["mday"], $arr["year"]);
		CAgent::AddAgent("CStatistics::CleanUpStatistics_1();","statistic", "Y", 86400, "", "Y", ConvertTimeStamp($ndate+CTimeZone::GetOffset(), "FULL"), 50);
		$ndate = mktime(4, 0, 0, $arr["mon"], $arr["mday"], $arr["year"]);
		CAgent::AddAgent("CStatistics::CleanUpStatistics_2();","statistic", "Y", 86400, "", "Y", ConvertTimeStamp($ndate+CTimeZone::GetOffset(), "FULL"), 30);
		CAgent::AddAgent("CStatistics::CleanUpSessionData();","statistic","N",7200);
		CAgent::AddAgent("CStatistics::CleanUpPathCache();","statistic", "N", 3600);

		CAgent::RemoveAgent("SendDailyStatistics();","statistic");
		if(mb_strpos($_SERVER["SERVER_SOFTWARE"], "(Win32)") <= 0)
		{
			$ndate = mktime(9, 0, 0, $arr["mon"], $arr["mday"], $arr["year"]);
			CAgent::AddAgent("SendDailyStatistics();", "statistic", "Y", 86400, "", "Y", ConvertTimeStamp($ndate+CTimeZone::GetOffset(), "FULL"), 25);
		}

		if($no_tables=="Y")
		{
			$arAllErrors[] = $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/install/db/".mb_strtolower($DB->type)."/searchers.sql");
			$arAllErrors[] = $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/install/db/".mb_strtolower($DB->type)."/browsers.sql");
			$arAllErrors[] = $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/install/db/".mb_strtolower($DB->type)."/adv.sql");
		}

		// ip-to-country
		require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/ip_tools.php");
		i2c_load_countries();
		if(!array_key_exists("CREATE_I2C_INDEX", $arParams) || ($arParams["CREATE_I2C_INDEX"] == "Y"))
			i2c_create_db($total_reindex, $reindex_success, $step_reindex, $int_prev);

		$fname = $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/install/db/".mb_strtolower($DB->type)."/optimize.sql";
		if(file_exists($fname))
		{
			$arAllErrors[] = $DB->RunSQLBatch($fname);
		}

		$this->errors = array();
		foreach($arAllErrors as $ar)
		{
			if(is_array($ar))
			{
				foreach($ar as $strError)
					$this->errors[] = $strError;
			}
		}
		if(count($this->errors) < 1)
			$this->errors = false;

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

		return true;
	}

	function UnInstallDB($arParams = array())
	{
		global $DBType, $APPLICATION;

		$DB = CDatabase::GetModuleConnection('statistic', true);

		$this->errors = false;

		if(is_object($DB))
		{
			if(!array_key_exists("savedata", $arParams) || ($arParams["savedata"] != "Y"))
			{
				$this->errors = $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/install/db/".mb_strtolower($DB->type)."/uninstall.sql");
				COption::RemoveOption("main","INSTALL_STATISTIC_TABLES");

				$db_res = $GLOBALS["DB"]->Query("SELECT ID FROM b_file WHERE MODULE_ID = 'statistic'");
				while($arRes = $db_res->Fetch())
					CFile::Delete($arRes["ID"]);
			}
		}

		UnRegisterModuleDependences("main", "OnPageStart", "statistic", "CStopList", "Check");
		UnRegisterModuleDependences("main", "OnBeforeProlog", "statistic", "CStatistics", "Keep");
		UnRegisterModuleDependences("main", "OnEpilog", "statistic", "CStatistics", "Set404");
		UnRegisterModuleDependences("main", "OnEventLogGetAuditTypes", "statistic", "CStatistics", "GetAuditTypes");
		UnRegisterModuleDependences("main", "OnBeforeProlog", "statistic", "CStatistics", "StartBuffer");
		UnRegisterModuleDependences("main", "OnEndBufferContent", "statistic", "CStatistics", "EndBuffer");
		UnRegisterModuleDependences("cluster", "OnGetTableList", "statistic", "statistic", "OnGetTableList");

		UnRegisterModule("statistic");

		COption::SetOptionString("statistic", "dbnode_id", "N");
		COption::SetOptionString("statistic", "dbnode_status", "ok");

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

		return true;
	}

	function InstallEvents()
	{
		global $DB;
		$sIn = "'STATISTIC_DAILY_REPORT', 'STATISTIC_ACTIVITY_EXCEEDING'";
		$rs = $DB->Query("SELECT count(*) C FROM b_event_type WHERE EVENT_NAME IN (".$sIn.") ", false, "File: ".__FILE__."<br>Line: ".__LINE__);
		$ar = $rs->Fetch();
		if($ar["C"] <= 0)
		{
			include($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/install/events/set_events.php");
		}
		return true;
	}

	function UnInstallEvents()
	{
		global $DB;
		$sIn = "'STATISTIC_DAILY_REPORT', 'STATISTIC_ACTIVITY_EXCEEDING'";
		$DB->Query("DELETE FROM b_event_message WHERE EVENT_NAME IN (".$sIn.") ", false, "File: ".__FILE__."<br>Line: ".__LINE__);
		$DB->Query("DELETE FROM b_event_type WHERE EVENT_NAME IN (".$sIn.") ", false, "File: ".__FILE__."<br>Line: ".__LINE__);
		return true;
	}

	function InstallFiles()
	{
		if($_ENV["COMPUTERNAME"]!='BX')
		{
			CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/install/public/bitrix", $_SERVER["DOCUMENT_ROOT"]."/bitrix", true, true);//all from bitrix
			CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/install/components/bitrix", $_SERVER["DOCUMENT_ROOT"]."/bitrix/components/bitrix", true, true);
			CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/install/gadgets/bitrix", $_SERVER["DOCUMENT_ROOT"]."/bitrix/gadgets/bitrix", true, true);
		}
		return true;
	}

	function UnInstallFiles()
	{
		if($_ENV["COMPUTERNAME"]!='BX')
		{
			DeleteDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/install/public/bitrix/admin", $_SERVER["DOCUMENT_ROOT"]."/bitrix/admin");
			DeleteDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/install/public/bitrix/themes/.default/", $_SERVER["DOCUMENT_ROOT"]."/bitrix/themes/.default");//css
			DeleteDirFilesEx("/bitrix/themes/.default/icons/statistic/");//icons
			DeleteDirFilesEx("/bitrix/images/statistic/");//images
		}
		return true;
	}

	function DoInstall()
	{
		global $APPLICATION, $step;
		$STAT_RIGHT = $APPLICATION->GetGroupRight("statistic");
		$step = intval($step);

		if($STAT_RIGHT < "W")
			return;

		if(!CBXFeatures::IsFeatureEditable("Analytics"))
		{
			$this->errors = array(GetMessage("MAIN_FEATURE_ERROR_EDITABLE"));
			$GLOBALS["errors"] = $this->errors;
			$APPLICATION->ThrowException(implode("<br>", $this->errors));
			$APPLICATION->IncludeAdminFile(GetMessage("STAT_INSTALL_TITLE"), $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/install/step2.php");
		}
		elseif($step < 2)
		{
			$APPLICATION->IncludeAdminFile(GetMessage("STAT_INSTALL_TITLE"), $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/install/step1.php");
		}
		elseif($step == 2)
		{
			$db_install_ok = $this->InstallDB(array(
				"allow_initial" => $_REQUEST["allow_initial"],
				"START_HITS" => $_REQUEST["START_HITS"],
				"START_HOSTS" => $_REQUEST["START_HOSTS"],
				"START_GUESTS" => $_REQUEST["START_GUESTS"],
				"CREATE_I2C_INDEX" => $_REQUEST["CREATE_I2C_INDEX"],
				"DATABASE" => $_REQUEST["DATABASE"],
			));
			if($db_install_ok)
			{
				$this->InstallEvents();
				$this->InstallFiles();
				CBXFeatures::SetFeatureEnabled("Analytics", true);
			}
			$GLOBALS["errors"] = $this->errors;
			$APPLICATION->IncludeAdminFile(GetMessage("STAT_INSTALL_TITLE"), $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/install/step2.php");
		}
	}

	function DoUninstall()
	{
		global $APPLICATION, $step;
		$STAT_RIGHT = $APPLICATION->GetGroupRight("statistic");
		if ($STAT_RIGHT>="W")
		{
			$step = intval($step);
			if($step < 2)
			{
				$APPLICATION->IncludeAdminFile(GetMessage("STAT_UNINSTALL_TITLE"), $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/install/unstep1.php");
			}
			elseif($step == 2)
			{
				$this->UnInstallDB(array(
					"savedata" => $_REQUEST["savedata"],
				));
				//message types and templates
				if($_REQUEST["save_templates"] != "Y")
				{
					$this->UnInstallEvents();
				}
				$this->UnInstallFiles();
				CBXFeatures::SetFeatureEnabled("Analytics", false);
				$GLOBALS["errors"] = $this->errors;
				$APPLICATION->IncludeAdminFile(GetMessage("STAT_UNINSTALL_TITLE"), $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/install/unstep2.php");
			}
		}
	}

	function GetModuleRightList()
	{
		$arr = array(
			"reference_id" => array("D","M","R","W"),
			"reference" => array(
				"[D] ".GetMessage("STAT_DENIED"),
				"[M] ".GetMessage("STAT_VIEW_WITHOUT_MONEY"),
				"[R] ".GetMessage("STAT_VIEW"),
				"[W] ".GetMessage("STAT_ADMIN"))
			);
		return $arr;
	}

	public static function OnGetTableList()
	{
		return array(
			"MODULE" => new statistic,
			"TABLES" => array(
				"b_stat_adv_searcher" =>"ID",
				"b_stat_adv" =>"ID",
				"b_stat_adv_event" =>"ID",
				"b_stat_adv_guest" =>"ID",
				"b_stat_adv_page" =>"ID",
				"b_stat_day" =>"ID",
				"b_stat_day_site" =>"ID",
				"b_stat_event" =>"ID",
				"b_stat_event_day" =>"ID",
				"b_stat_event_list" =>"ID",
				"b_stat_guest" =>"ID",
				"b_stat_hit" =>"ID",
				"b_stat_searcher_hit" =>"ID",
				"b_stat_phrase_list" =>"ID",
				"b_stat_referer" =>"ID",
				"b_stat_referer_list" =>"ID",
				"b_stat_searcher" =>"ID",
				"b_stat_searcher_params" =>"ID",
				"b_stat_session" =>"ID",
				"b_stat_page" =>"ID",
				"b_stop_list" =>"ID",
				"b_stat_browser" =>"ID",
				"b_stat_adv_day" =>"ID",
				"b_stat_adv_event_day" =>"ID",
				"b_stat_searcher_day" =>"ID",
				"b_stat_country" =>"ID",
				"b_stat_city" =>"ID",
				"b_stat_city_day" =>"ID",
				"b_stat_city_ip" =>"START_IP",
				"b_stat_session_data" =>"ID",
				"b_stat_country_day" =>"ID",
				"b_stat_path" =>"ID",
				"b_stat_path_adv" =>"ID",
				"b_stat_path_cache" =>"ID",
				"b_stat_page_adv" =>"ID",
				"b_stat_ddl" =>"ID",
			),
		);
	}
}
?>