Постарался разобрать и за комментировать файл(index.php) установки модуля, поправьте пожалуйста, если что не так понял:
global $MESS;
// заменяем слеши в пути
$strPath2Lang = str_replace("\\", "/", __FILE__);
// высчитываем папку модуля
$strPath2Lang = substr($strPath2Lang, 0, strlen($strPath2Lang)-strlen("/install/index.php");
// подгружаем языковый файл для этого файла
include(GetLangFileName($strPath2Lang."/lang/", "/install/index.php");
Class start extends CModule
{
// свойства класса
var $MODULE_ID = "start";
var $MODULE_VERSION;
var $MODULE_VERSION_DATE;
var $MODULE_NAME;
var $MODULE_DESCRIPTION;
var $MODULE_CSS;
var $errors;
// конструктор класса
function start()
{
$arModuleVersion = array();
// заменяем пути в файле на /
$path = str_replace("\\", "/", __FILE__);
// получаем путь к директории файла index.php
$path = substr($path, 0, strlen($path) - strlen("/index.php");
// подгружаем файо версии модуля
include($path."/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 = START_VERSION;
$this->MODULE_VERSION_DATE = START_VERSION_DATE;
}
// определяем название и описание модуля
$this->MODULE_NAME = GetMessage("START_MODULE_NAME";
$this->MODULE_DESCRIPTION = GetMessage("START_MODULE_DESC";
}
// создаем таблицы модуля
function InstallDB($arParams = array())
{
global $DB, $DBType, $APPLICATION;
$this->errors = false;
// проверяем создана ли таблица b_start_course
if(!$DB->Query("SELECT 'x' FROM b_start_course WHERE 1=0", true))
{
// выполняет пакет запросов из файла, возвращаем false в случае успеха или масив ошибок
$this->errors = $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/db/".strtolower($DB->type)."/install.sql" ;
}
// если при выполнении запроса были ошибки выдаем их в сообщении
if($this->errors !== false)
{
$APPLICATION->ThrowException(implode("<br>", $this->errors));
return false;
}
// иначе если запросы были выполненны успешно, регистрируем модуль и оброботчики события
else
{
RegisterModule("start" ;
RegisterModuleDependences("main", "OnGroupDelete", "start", "CCourse", "OnGroupDelete" ;
RegisterModuleDependences("main", "OnBeforeLangDelete", "start", "CCourse", "OnBeforeLangDelete" ;
RegisterModuleDependences("main", "OnUserDelete", "start", "CCourse", "OnUserDelete" ;
RegisterModuleDependences("main", "OnSiteDelete", "start", "CSitePath", "DeleteBySiteID" ;
RegisterModuleDependences("search", "OnReindex", "start", "CCourse", "OnSearchReindex" ;
RegisterModuleDependences("main", "OnGetRatingContentOwner", "start", "CRatingsComponentsLearning", "OnGetRatingContentOwner", 200);
RegisterModuleDependences("main", "OnAddRatingVote", "start", "CRatingsComponentsLearning", "OnAddRatingVote", 200);
RegisterModuleDependences("main", "OnCancelRatingVote", "start", "CRatingsComponentsLearning", "OnCancelRatingVote", 200);
// если запрос не выдал ошибок(таблица b_start_site_path существует)
if ($DB->Query("SELECT 'x' FROM b_start_site_path WHERE 1=0", true))
{
// возвращает список параметров сайта
$sites = CLang::GetList($by, $order, Array("ACTIVE"=>"Y" );
// если удалось извлечь языки из результирующего набора
while($site = $sites->Fetch())
{
$path = "/start/";
// если $_REQUEST["copy_s1"] == Y и не пустая переменная $_REQUEST["path_s1]"]
if($_REQUEST["copy_".$site["LID"]] == "Y" && !empty($_REQUEST["path_".$site["LID"]] )
{
// path = $_REQUEST["path_s1"];
$path = $_REQUEST["path_".$site["LID"]];
}
// записываем в таблицу b_start_site_path ID = NULL, SITE_ID = s_1, PATH = course/...., TYPE = C...
$DB->Query(
"INSERT INTO b_start_site_path(ID, SITE_ID, PATH,TYPE) ".
"VALUES".
"(NULL , '".$site["LID"]."', '".$path."course/index.php?COURSE_ID=#COURSE_ID#&INDEX=Y', 'C'),".
"(NULL , '".$site["LID"]."', '".$path."course/index.php?COURSE_ID=#COURSE_ID#&CHAPTER_ID=#CHAPTER_ID#', 'H'),".
"(NULL , '".$site["LID"]."', '".$path."course/index.php?COURSE_ID=#COURSE_ID#&LESSON_ID=#LESSON_ID#', 'L')"
, true);
}
}
// возвращаем TRUE
return true;
}
}
// Удаляем таблицы модуля
function UnInstallDB($arParams = array())
{
global $DB, $DBType, $APPLICATION;
$this->errors = false;
// если не отключен chexbox сохранения таблиц модуля в DB
// или ключ savedata отсутствует в массиве arParams
if(!array_key_exists("savedata", $arParams) || $arParams["savedata"] != "Y"
{
// удаляем все таблицы модуля
$this->errors = $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/db/".strtolower($DB->type)."/uninstall.sql";
}
//delete agents
CAgent::RemoveModuleAgents("start";
if (CModule::IncludeModule("search")
CSearch:eleteIndex("start";
UnRegisterModuleDependences("search", "OnReindex", "start", "CCourse", "OnSearchReindex";
UnRegisterModuleDependences("main", "OnGroupDelete", "start", "CCourse", "OnGroupDelete";
UnRegisterModuleDependences("main", "OnBeforeLangDelete", "start", "CCourse", "OnBeforeLangDelete";
UnRegisterModuleDependences("main", "OnUserDelete", "start", "CCourse", "OnUserDelete";
UnRegisterModuleDependences("main", "OnGetRatingContentOwner", "start", "CRatingsComponentsLearning", "OnGetRatingContentOwner";
UnRegisterModuleDependences("main", "OnAddRatingVote", "start", "CRatingsComponentsLearning", "OnAddRatingVote";
UnRegisterModuleDependences("main", "OnCancelRatingVote", "start", "CRatingsComponentsLearning", "OnCancelRatingVote";
UnRegisterModule("start";
if($this->errors !== false)
{
$APPLICATION->ThrowException(implode("<br>", $this->errors));
return false;
}
return true;
}
// установка события
function InstallEvents()
{
global $DB;
$sIn = "'NEW_START_TEXT_ANSWER'";
$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/start/install/events/set_events.php";
}
return true;
}
// удаление события
function UnInstallEvents()
{
// подгружаем файл удаления типа почтового события и почтового шаблона
global $DB;
include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/events/del_events.php";
return true;
}
// установка файлов
function InstallFiles($arParams = array())
{
global $DB;
// копируем административные файлы, изображения модуля, js скрипты модуля
CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/admin/", $_SERVER["DOCUMENT_ROOT"]."/bitrix/admin", false);
CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/images/", $_SERVER["DOCUMENT_ROOT"]."/bitrix/images/start", true, true);
CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/public/js", $_SERVER["DOCUMENT_ROOT"]."/bitrix/js", true, true);
// копируем темы и компоненты в разделы тем и компонентов сайта
CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/themes/", $_SERVER["DOCUMENT_ROOT"]."/bitrix/themes/", true, true);
CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/components", $_SERVER["DOCUMENT_ROOT"]."/bitrix/components", True, True);
//copy public scripts
$arSITE_ID = Array();
// получаем список активных языков сайта
$sites = CLang::GetList($by, $order, Array("ACTIVE"=>"Y");
while($site = $sites->Fetch())
{
// если post, get, cookie содержут ключ copy_s1 == Y и ключ path_s1 имеет значение
if($_REQUEST["copy_".$site["LID"]] == "Y" && !empty($_REQUEST["path_".$site["LID"]])
{
$arSITE_ID[] = $site["LID"];
// если $site["DOC_ROOT"] меньше или равен 0, тогда DOC_ROOT $site["DOC_ROOT"] иначе равен $site["DOC_ROOT"]
$DOC_ROOT = (strlen($site["DOC_ROOT"]<=0) ? $_SERVER["DOCUMENT_ROOT"] : $site["DOC_ROOT"];
// папка языков равна ru, если $site["LANGUAGE_ID"] = ru иначе равна en
$ldir = $site['LANGUAGE_ID'] == 'ru' ? 'ru' : 'en';
// копируем публичные файлы в зависимости от языка сайта
CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/public/site/$ldir/", $DOC_ROOT.$_REQUEST["path_".$site["LID"]], true,true);
}
}
// если нет папки шаблона
if (!file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/templates/start/")
{
// копируем шаблон публичных файлов в папку шаблона /bitrix/templates/start/
CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/public/template/", $_SERVER["DOCUMENT_ROOT"]."/bitrix/templates/start/", true, true);
}
// если пустой масив языков сайта
if(!empty($arSITE_ID))
{
// если значение ключа template_id post,get,cookie меньше или равно 0
if (strlen($_REQUEST["template_id"]<=0)
// присваиваем значение start
$_REQUEST["template_id"] = "start";
// копируем шаблон из файлов установки модуля в каталог start находящигося в директории шаблона сайта
CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/public/template/", $_SERVER["DOCUMENT_ROOT"]."/bitrix/templates/".$_REQUEST["template_id"]."/", true, true);
// получаем список ID сайтов
foreach($arSITE_ID as $SITE_ID)
{
// если path меньше или равен 0
// прерывает интерацию цыкла
$path = $_REQUEST["path_".$SITE_ID];
if (strlen($path)<=0)
continue;
// если путь равен корню
if(substr($path,-1,1)!="/"
$path .= "/";
// получаем путь к курсу относительно корня сайта
$cond = "CSite::InDir('".$path."course/')";
// заносим в таблицу b_site_template ID сайта, CONDITION (состояние), индекс сортировки и шаблон сайта
$DB->Query(
"INSERT INTO b_site_template(SITE_ID, ".CMain::__GetConditionFName().", SORT, TEMPLATE) ".
"VALUES('".$DB->ForSQL($SITE_ID)."', '".$DB->ForSQL($cond, 255)."', '100', '".$DB->ForSQL(trim($_REQUEST["template_id"], 255)."')", true);
}
}
// возвращяем true
return true;
}
// удаление файлов
function UnInstallFiles()
{
DeleteDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/admin/", $_SERVER["DOCUMENT_ROOT"]."/bitrix/admin";
DeleteDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/themes/.default/", $_SERVER["DOCUMENT_ROOT"]."/bitrix/themes/.default";//css
DeleteDirFilesEx("/bitrix/themes/.default/icons/start/";//icons
DeleteDirFilesEx("/bitrix/images/start/";//images
DeleteDirFilesEx("/bitrix/js/start/";//scripts
return true;
}
// устанавливаем модуль пошагово, а так же запускаем создание таблиц в DB и копирование файлов
function DoInstall()
{
global $DB, $DOCUMENT_ROOT, $APPLICATION, $step;
$step = IntVal($step);
if($step < 2)
{
$APPLICATION->IncludeAdminFile(GetMessage("START_INSTALL_TITLE", $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/step1.php";
}
elseif($step==2)
{
$this->InstallFiles();
$this->InstallDB();
$GLOBALS["errors"] = $this->errors;
$APPLICATION->IncludeAdminFile(GetMessage("START_INSTALL_TITLE", $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/step2.php";
}
}
// удаляем модуль пошагово, так же запускаем удаление таблиц в DB и удаляем файлы
function DoUninstall()
{
global $DB, $DOCUMENT_ROOT, $APPLICATION, $step;
$step = IntVal($step);
if($step < 2)
{
$APPLICATION->IncludeAdminFile(GetMessage("START_UNINSTALL_TITLE", $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/unstep1.php";
}
elseif($step == 2)
{
// в качестве аргумента метода UnInstallDB указываем масив ключ которого savedata а значение $_REQUEST["savedata"]
// которое приходит из формы файла unstep2.php
$this->UnInstallDB(array(
"savedata" => $_REQUEST["savedata"],
));
// вызываем метод удаления файлов
$this->UnInstallFiles();
// передаем ошибки в свойство класса errors
$GLOBALS["errors"] = $this->errors;
// подгружаем файл 2 шага удаления
$APPLICATION->IncludeAdminFile(GetMessage("START_UNINSTALL_TITLE", $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/unstep2.php";
}
}
// массив прав на чтение и полный доступ
function GetModuleRightList()
{
$arr = array(
"reference_id" => array("D", "W",
"reference" => array(
"[D] ".GetMessage("START_PERM_D",
"[W] ".GetMessage("START_PERM_W"
)
);
return $arr;
}
}
global $MESS;
// заменяем слеши в пути
$strPath2Lang = str_replace("\\", "/", __FILE__);
// высчитываем папку модуля
$strPath2Lang = substr($strPath2Lang, 0, strlen($strPath2Lang)-strlen("/install/index.php");
// подгружаем языковый файл для этого файла
include(GetLangFileName($strPath2Lang."/lang/", "/install/index.php");
Class start extends CModule
{
// свойства класса
var $MODULE_ID = "start";
var $MODULE_VERSION;
var $MODULE_VERSION_DATE;
var $MODULE_NAME;
var $MODULE_DESCRIPTION;
var $MODULE_CSS;
var $errors;
// конструктор класса
function start()
{
$arModuleVersion = array();
// заменяем пути в файле на /
$path = str_replace("\\", "/", __FILE__);
// получаем путь к директории файла index.php
$path = substr($path, 0, strlen($path) - strlen("/index.php");
// подгружаем файо версии модуля
include($path."/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 = START_VERSION;
$this->MODULE_VERSION_DATE = START_VERSION_DATE;
}
// определяем название и описание модуля
$this->MODULE_NAME = GetMessage("START_MODULE_NAME";
$this->MODULE_DESCRIPTION = GetMessage("START_MODULE_DESC";
}
// создаем таблицы модуля
function InstallDB($arParams = array())
{
global $DB, $DBType, $APPLICATION;
$this->errors = false;
// проверяем создана ли таблица b_start_course
if(!$DB->Query("SELECT 'x' FROM b_start_course WHERE 1=0", true))
{
// выполняет пакет запросов из файла, возвращаем false в случае успеха или масив ошибок
$this->errors = $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/db/".strtolower($DB->type)."/install.sql" ;
}
// если при выполнении запроса были ошибки выдаем их в сообщении
if($this->errors !== false)
{
$APPLICATION->ThrowException(implode("<br>", $this->errors));
return false;
}
// иначе если запросы были выполненны успешно, регистрируем модуль и оброботчики события
else
{
RegisterModule("start" ;
RegisterModuleDependences("main", "OnGroupDelete", "start", "CCourse", "OnGroupDelete" ;
RegisterModuleDependences("main", "OnBeforeLangDelete", "start", "CCourse", "OnBeforeLangDelete" ;
RegisterModuleDependences("main", "OnUserDelete", "start", "CCourse", "OnUserDelete" ;
RegisterModuleDependences("main", "OnSiteDelete", "start", "CSitePath", "DeleteBySiteID" ;
RegisterModuleDependences("search", "OnReindex", "start", "CCourse", "OnSearchReindex" ;
RegisterModuleDependences("main", "OnGetRatingContentOwner", "start", "CRatingsComponentsLearning", "OnGetRatingContentOwner", 200);
RegisterModuleDependences("main", "OnAddRatingVote", "start", "CRatingsComponentsLearning", "OnAddRatingVote", 200);
RegisterModuleDependences("main", "OnCancelRatingVote", "start", "CRatingsComponentsLearning", "OnCancelRatingVote", 200);
// если запрос не выдал ошибок(таблица b_start_site_path существует)
if ($DB->Query("SELECT 'x' FROM b_start_site_path WHERE 1=0", true))
{
// возвращает список параметров сайта
$sites = CLang::GetList($by, $order, Array("ACTIVE"=>"Y" );
// если удалось извлечь языки из результирующего набора
while($site = $sites->Fetch())
{
$path = "/start/";
// если $_REQUEST["copy_s1"] == Y и не пустая переменная $_REQUEST["path_s1]"]
if($_REQUEST["copy_".$site["LID"]] == "Y" && !empty($_REQUEST["path_".$site["LID"]] )
{
// path = $_REQUEST["path_s1"];
$path = $_REQUEST["path_".$site["LID"]];
}
// записываем в таблицу b_start_site_path ID = NULL, SITE_ID = s_1, PATH = course/...., TYPE = C...
$DB->Query(
"INSERT INTO b_start_site_path(ID, SITE_ID, PATH,TYPE) ".
"VALUES".
"(NULL , '".$site["LID"]."', '".$path."course/index.php?COURSE_ID=#COURSE_ID#&INDEX=Y', 'C'),".
"(NULL , '".$site["LID"]."', '".$path."course/index.php?COURSE_ID=#COURSE_ID#&CHAPTER_ID=#CHAPTER_ID#', 'H'),".
"(NULL , '".$site["LID"]."', '".$path."course/index.php?COURSE_ID=#COURSE_ID#&LESSON_ID=#LESSON_ID#', 'L')"
, true);
}
}
// возвращаем TRUE
return true;
}
}
// Удаляем таблицы модуля
function UnInstallDB($arParams = array())
{
global $DB, $DBType, $APPLICATION;
$this->errors = false;
// если не отключен chexbox сохранения таблиц модуля в DB
// или ключ savedata отсутствует в массиве arParams
if(!array_key_exists("savedata", $arParams) || $arParams["savedata"] != "Y"
{
// удаляем все таблицы модуля
$this->errors = $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/db/".strtolower($DB->type)."/uninstall.sql";
}
//delete agents
CAgent::RemoveModuleAgents("start";
if (CModule::IncludeModule("search")
CSearch:eleteIndex("start";
UnRegisterModuleDependences("search", "OnReindex", "start", "CCourse", "OnSearchReindex";
UnRegisterModuleDependences("main", "OnGroupDelete", "start", "CCourse", "OnGroupDelete";
UnRegisterModuleDependences("main", "OnBeforeLangDelete", "start", "CCourse", "OnBeforeLangDelete";
UnRegisterModuleDependences("main", "OnUserDelete", "start", "CCourse", "OnUserDelete";
UnRegisterModuleDependences("main", "OnGetRatingContentOwner", "start", "CRatingsComponentsLearning", "OnGetRatingContentOwner";
UnRegisterModuleDependences("main", "OnAddRatingVote", "start", "CRatingsComponentsLearning", "OnAddRatingVote";
UnRegisterModuleDependences("main", "OnCancelRatingVote", "start", "CRatingsComponentsLearning", "OnCancelRatingVote";
UnRegisterModule("start";
if($this->errors !== false)
{
$APPLICATION->ThrowException(implode("<br>", $this->errors));
return false;
}
return true;
}
// установка события
function InstallEvents()
{
global $DB;
$sIn = "'NEW_START_TEXT_ANSWER'";
$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/start/install/events/set_events.php";
}
return true;
}
// удаление события
function UnInstallEvents()
{
// подгружаем файл удаления типа почтового события и почтового шаблона
global $DB;
include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/events/del_events.php";
return true;
}
// установка файлов
function InstallFiles($arParams = array())
{
global $DB;
// копируем административные файлы, изображения модуля, js скрипты модуля
CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/admin/", $_SERVER["DOCUMENT_ROOT"]."/bitrix/admin", false);
CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/images/", $_SERVER["DOCUMENT_ROOT"]."/bitrix/images/start", true, true);
CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/public/js", $_SERVER["DOCUMENT_ROOT"]."/bitrix/js", true, true);
// копируем темы и компоненты в разделы тем и компонентов сайта
CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/themes/", $_SERVER["DOCUMENT_ROOT"]."/bitrix/themes/", true, true);
CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/components", $_SERVER["DOCUMENT_ROOT"]."/bitrix/components", True, True);
//copy public scripts
$arSITE_ID = Array();
// получаем список активных языков сайта
$sites = CLang::GetList($by, $order, Array("ACTIVE"=>"Y");
while($site = $sites->Fetch())
{
// если post, get, cookie содержут ключ copy_s1 == Y и ключ path_s1 имеет значение
if($_REQUEST["copy_".$site["LID"]] == "Y" && !empty($_REQUEST["path_".$site["LID"]])
{
$arSITE_ID[] = $site["LID"];
// если $site["DOC_ROOT"] меньше или равен 0, тогда DOC_ROOT $site["DOC_ROOT"] иначе равен $site["DOC_ROOT"]
$DOC_ROOT = (strlen($site["DOC_ROOT"]<=0) ? $_SERVER["DOCUMENT_ROOT"] : $site["DOC_ROOT"];
// папка языков равна ru, если $site["LANGUAGE_ID"] = ru иначе равна en
$ldir = $site['LANGUAGE_ID'] == 'ru' ? 'ru' : 'en';
// копируем публичные файлы в зависимости от языка сайта
CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/public/site/$ldir/", $DOC_ROOT.$_REQUEST["path_".$site["LID"]], true,true);
}
}
// если нет папки шаблона
if (!file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/templates/start/")
{
// копируем шаблон публичных файлов в папку шаблона /bitrix/templates/start/
CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/public/template/", $_SERVER["DOCUMENT_ROOT"]."/bitrix/templates/start/", true, true);
}
// если пустой масив языков сайта
if(!empty($arSITE_ID))
{
// если значение ключа template_id post,get,cookie меньше или равно 0
if (strlen($_REQUEST["template_id"]<=0)
// присваиваем значение start
$_REQUEST["template_id"] = "start";
// копируем шаблон из файлов установки модуля в каталог start находящигося в директории шаблона сайта
CopyDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/public/template/", $_SERVER["DOCUMENT_ROOT"]."/bitrix/templates/".$_REQUEST["template_id"]."/", true, true);
// получаем список ID сайтов
foreach($arSITE_ID as $SITE_ID)
{
// если path меньше или равен 0
// прерывает интерацию цыкла
$path = $_REQUEST["path_".$SITE_ID];
if (strlen($path)<=0)
continue;
// если путь равен корню
if(substr($path,-1,1)!="/"
$path .= "/";
// получаем путь к курсу относительно корня сайта
$cond = "CSite::InDir('".$path."course/')";
// заносим в таблицу b_site_template ID сайта, CONDITION (состояние), индекс сортировки и шаблон сайта
$DB->Query(
"INSERT INTO b_site_template(SITE_ID, ".CMain::__GetConditionFName().", SORT, TEMPLATE) ".
"VALUES('".$DB->ForSQL($SITE_ID)."', '".$DB->ForSQL($cond, 255)."', '100', '".$DB->ForSQL(trim($_REQUEST["template_id"], 255)."')", true);
}
}
// возвращяем true
return true;
}
// удаление файлов
function UnInstallFiles()
{
DeleteDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/admin/", $_SERVER["DOCUMENT_ROOT"]."/bitrix/admin";
DeleteDirFiles($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/themes/.default/", $_SERVER["DOCUMENT_ROOT"]."/bitrix/themes/.default";//css
DeleteDirFilesEx("/bitrix/themes/.default/icons/start/";//icons
DeleteDirFilesEx("/bitrix/images/start/";//images
DeleteDirFilesEx("/bitrix/js/start/";//scripts
return true;
}
// устанавливаем модуль пошагово, а так же запускаем создание таблиц в DB и копирование файлов
function DoInstall()
{
global $DB, $DOCUMENT_ROOT, $APPLICATION, $step;
$step = IntVal($step);
if($step < 2)
{
$APPLICATION->IncludeAdminFile(GetMessage("START_INSTALL_TITLE", $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/step1.php";
}
elseif($step==2)
{
$this->InstallFiles();
$this->InstallDB();
$GLOBALS["errors"] = $this->errors;
$APPLICATION->IncludeAdminFile(GetMessage("START_INSTALL_TITLE", $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/step2.php";
}
}
// удаляем модуль пошагово, так же запускаем удаление таблиц в DB и удаляем файлы
function DoUninstall()
{
global $DB, $DOCUMENT_ROOT, $APPLICATION, $step;
$step = IntVal($step);
if($step < 2)
{
$APPLICATION->IncludeAdminFile(GetMessage("START_UNINSTALL_TITLE", $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/unstep1.php";
}
elseif($step == 2)
{
// в качестве аргумента метода UnInstallDB указываем масив ключ которого savedata а значение $_REQUEST["savedata"]
// которое приходит из формы файла unstep2.php
$this->UnInstallDB(array(
"savedata" => $_REQUEST["savedata"],
));
// вызываем метод удаления файлов
$this->UnInstallFiles();
// передаем ошибки в свойство класса errors
$GLOBALS["errors"] = $this->errors;
// подгружаем файл 2 шага удаления
$APPLICATION->IncludeAdminFile(GetMessage("START_UNINSTALL_TITLE", $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/start/install/unstep2.php";
}
}
// массив прав на чтение и полный доступ
function GetModuleRightList()
{
$arr = array(
"reference_id" => array("D", "W",
"reference" => array(
"[D] ".GetMessage("START_PERM_D",
"[W] ".GetMessage("START_PERM_W"
)
);
return $arr;
}
}