- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/task.php
- Класс: CAllTask
- Вызов: CAllTask::SetOperations
static function SetOperations($ID, $arr, $bOpNames=false)
{
global $DB, $CACHE_MANAGER;
$ID = intval($ID);
//get old operations
$aPrevOp = array();
$res = $DB->Query("
SELECT O.NAME
FROM b_operation O
INNER JOIN b_task_operation T_OP ON O.ID = T_OP.OPERATION_ID
WHERE T_OP.TASK_ID = ".$ID."
ORDER BY O.ID
");
while(($res_arr = $res->Fetch()))
$aPrevOp[] = $res_arr["NAME"];
$sql_str = 'DELETE FROM b_task_operation WHERE TASK_ID='.$ID;
$DB->Query($sql_str, false, "FILE: ".__FILE__."
LINE: ".__LINE__);
if(is_array($arr) && !empty($arr))
{
if($bOpNames)
{
$sID = "";
foreach($arr as $op_id)
$sID .= ",'".$DB->ForSQL($op_id)."'";
$sID = LTrim($sID, ",");
$DB->Query(
"INSERT INTO b_task_operation (TASK_ID, OPERATION_ID) ".
"SELECT '".$ID."', O.ID ".
"FROM b_operation O, b_task T ".
"WHERE O.NAME IN (".$sID.") AND T.MODULE_ID=O.MODULE_ID AND T.ID=".$ID." "
, false, "File: ".__FILE__."
Line: ".__LINE__
);
}
else
{
$sID = "0";
foreach($arr as $op_id)
$sID .= ",".intval($op_id);
$DB->Query(
"INSERT INTO b_task_operation (TASK_ID, OPERATION_ID) ".
"SELECT '".$ID."', ID ".
"FROM b_operation ".
"WHERE ID IN (".$sID.") "
, false, "File: ".__FILE__."
Line: ".__LINE__
);
}
}
unset(static::$TASK_OPERATIONS_CACHE[$ID]);
if(CACHED_b_task_operation !== false)
$CACHE_MANAGER->CleanDir("b_task_operation");
//get new operations
$aNewOp = array();
$res = $DB->Query("
SELECT O.NAME
FROM b_operation O
INNER JOIN b_task_operation T_OP ON O.ID = T_OP.OPERATION_ID
WHERE T_OP.TASK_ID = ".$ID."
ORDER BY O.ID
");
while(($res_arr = $res->Fetch()))
$aNewOp[] = $res_arr["NAME"];
//compare with old one
$aDiff = array_diff($aNewOp, $aPrevOp);
if(empty($aDiff))
$aDiff = array_diff($aPrevOp, $aNewOp);
if(!empty($aDiff))
{
if(COption::GetOptionString("main", "event_log_task", "N") === "Y")
CEventLog::Log("SECURITY", "TASK_CHANGED", "main", $ID, "(".implode(", ", $aPrevOp).") => (".implode(", ", $aNewOp).")");
foreach(GetModuleEvents("main", "OnTaskOperationsChanged", true) as $arEvent)
ExecuteModuleEventEx($arEvent, array($ID, $aPrevOp, $aNewOp));
}
}