- Модуль: 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");
}
}