• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/module.php
  • Класс: CModule
  • Вызов: CModule::InstallTasks
public function InstallTasks()
{
	global $DB, $CACHE_MANAGER;

	$sqlMODULE_ID = $DB->ForSQL($this->MODULE_ID, 50);

	$arDBOperations = array();
	$rsOperations = $DB->Query("SELECT NAME FROM b_operation WHERE MODULE_ID = '$sqlMODULE_ID'");
	while($ar = $rsOperations->Fetch())
		$arDBOperations[$ar["NAME"]] = $ar["NAME"];

	$arDBTasks = array();
	$rsTasks = $DB->Query("SELECT NAME FROM b_task WHERE MODULE_ID = '$sqlMODULE_ID' AND SYS = 'Y'");
	while($ar = $rsTasks->Fetch())
		$arDBTasks[$ar["NAME"]] = $ar["NAME"];

	$arModuleTasks = $this->GetModuleTasks();
	foreach($arModuleTasks as $task_name => $arTask)
	{
		$sqlBINDING = isset($arTask["BINDING"]) && $arTask["BINDING"] <> ''? $DB->ForSQL($arTask["BINDING"], 50): 'module';
		$sqlTaskOperations = array();

		if(isset($arTask["OPERATIONS"]) && is_array($arTask["OPERATIONS"]))
		{
			foreach($arTask["OPERATIONS"] as $operation_name)
			{
				$operation_name = mb_substr($operation_name, 0, 50);

				if(!isset($arDBOperations[$operation_name]))
				{
					$DB->Query("
						INSERT INTO b_operation
						(NAME, MODULE_ID, BINDING)
						VALUES
						('".$DB->ForSQL($operation_name)."', '$sqlMODULE_ID', '$sqlBINDING')
					", false, "FILE: ".__FILE__."
LINE: ".__LINE__); $arDBOperations[$operation_name] = $operation_name; } $sqlTaskOperations[] = $DB->ForSQL($operation_name); } } $task_name = mb_substr($task_name, 0, 100); $sqlTaskName = $DB->ForSQL($task_name); if(!isset($arDBTasks[$task_name]) && $task_name <> '') { $DB->Query(" INSERT INTO b_task (NAME, LETTER, MODULE_ID, SYS, BINDING) VALUES ('$sqlTaskName', '".$DB->ForSQL($arTask["LETTER"], 1)."', '$sqlMODULE_ID', 'Y', '$sqlBINDING') ", false, "FILE: ".__FILE__."
LINE: ".__LINE__); } if(!empty($sqlTaskOperations) && $task_name <> '') { $DB->Query(" INSERT INTO b_task_operation (TASK_ID,OPERATION_ID) SELECT T.ID TASK_ID, O.ID OPERATION_ID FROM b_task T ,b_operation O WHERE T.SYS='Y' AND T.NAME='$sqlTaskName' AND O.NAME in ('".implode("','", $sqlTaskOperations)."') AND O.NAME not in ( SELECT O2.NAME FROM b_task T2 inner join b_task_operation TO2 on TO2.TASK_ID = T2.ID inner join b_operation O2 on O2.ID = TO2.OPERATION_ID WHERE T2.SYS='Y' AND T2.NAME='$sqlTaskName' ) ", false, "FILE: ".__FILE__."
LINE: ".__LINE__); } } if(is_object($CACHE_MANAGER)) { $CACHE_MANAGER->CleanDir("b_task"); $CACHE_MANAGER->CleanDir("b_task_operation"); } }