32 $arMsg[] = [
"id" =>
"NAME",
"text" =>
GetMessage(
'MAIN_ERROR_STRING_ID_EMPTY')];
40 if (TaskTable::getList([
'select' => [
'ID'],
'filter' =>
$filter])->fetch())
42 $arMsg[] = [
"id" =>
"NAME",
"text" =>
GetMessage(
'MAIN_ERROR_STRING_ID_DOUBLE')];
49 $arMsg[] = [
"id" =>
"LETTER",
"text" =>
GetMessage(
'MAIN_TASK_WRONG_LETTER')];
78 $entity = TaskTable::getEntity();
123 $sql =
"SELECT GT.GROUP_ID
125 WHERE GT.TASK_ID=" . intval($id);
126 $z =
$DB->Query($sql);
129 while ($r =
$z->Fetch())
131 $g = intval($r[
'GROUP_ID']);
145 "DELETE FROM b_module_group
149 GROUP_ID IN (" . $str_groups .
")"
154 $letter =
$DB->ForSQL($letter);
156 "INSERT INTO b_module_group (MODULE_ID, GROUP_ID, G_ACCESS, SITE_ID) " .
159 "WHERE G.ID IN (" . $str_groups .
")"
163 ModuleGroupTable::cleanCache();
165 return ($letter !=
'');
175 $delete = TaskTable::getList([
'select' => [
'ID'],
'filter' => [
'=ID' =>
$ID,
'=SYS' =>
'N']])->fetch();
180 TaskTable::delete(
$ID);
181 TaskOperationTable::deleteByFilter([
'=TASK_ID' =>
$ID]);
185 public static function GetList($arOrder = [
'MODULE_ID' =>
'asc',
'LETTER' =>
'asc'],
$arFilter = [])
187 $arOrder = static::getOwnFields((
array)$arOrder);
193 if ((
string)$value ==
'' || (
string)$value ==
'NOT_REF')
197 if (is_string($value) && str_contains($value,
'|'))
199 $value = explode(
'|', $value);
201 $filter[
'=' . $field] = $value;
207 $order[strtoupper($field)] = (strtoupper(
$direction) ==
'DESC' ?
'DESC' :
'ASC');
210 $res = TaskTable::getList([
213 'cache' => [
'ttl' => 3600],
234 if (!isset(static::$TASK_OPERATIONS_CACHE[
$ID]))
236 static::$TASK_OPERATIONS_CACHE[
$ID] = [];
238 $operations = TaskOperationTable::getList([
239 'select' => [
'OPERATION_ID',
'NAME' =>
'OPERATION.NAME'],
240 'filter' => [
'=TASK_ID' =>
$ID],
241 'cache' => [
'ttl' => 3600,
'cache_joins' =>
true],
244 while ($operation = $operations->fetch())
246 static::$TASK_OPERATIONS_CACHE[
$ID][
'ids'][] = $operation[
'OPERATION_ID'];
247 static::$TASK_OPERATIONS_CACHE[
$ID][
'names'][] = $operation[
'NAME'];
251 return static::$TASK_OPERATIONS_CACHE[
$ID][$return_names ?
'names' :
'ids'] ?? [];
262 $operations = TaskOperationTable::getList([
263 'select' => [
'NAME' =>
'OPERATION.NAME'],
264 'filter' => [
'=TASK_ID' =>
$ID],
265 'order' => [
'OPERATION_ID' =>
'ASC'],
267 while ($operation = $operations->fetch())
269 $aPrevOp[] = $operation[
'NAME'];
272 TaskOperationTable::deleteByFilter([
'=TASK_ID' =>
$ID]);
279 foreach (
$arr as $op_id)
281 $sID .= ($sID !=
'' ?
', ' :
'') .
"'" .
$DB->ForSQL($op_id) .
"'";
285 "INSERT INTO b_task_operation (TASK_ID, OPERATION_ID) " .
286 "SELECT '" .
$ID .
"', O.ID " .
287 "FROM b_operation O, b_task T " .
288 "WHERE O.NAME IN (" . $sID .
") AND T.MODULE_ID=O.MODULE_ID AND T.ID=" .
$ID
293 foreach (
$arr as $op_id)
295 $sID .= ($sID !=
'' ?
', ' :
'') . intval($op_id);
299 "INSERT INTO b_task_operation (TASK_ID, OPERATION_ID) " .
300 "SELECT '" .
$ID .
"', ID " .
301 "FROM b_operation " .
302 "WHERE ID IN (" . $sID .
") "
307 unset(static::$TASK_OPERATIONS_CACHE[
$ID]);
309 TaskOperationTable::cleanCache();
313 $operations = TaskOperationTable::getList([
314 'select' => [
'NAME' =>
'OPERATION.NAME'],
315 'filter' => [
'=TASK_ID' =>
$ID],
316 'order' => [
'OPERATION_ID' =>
'ASC'],
318 while ($operation = $operations->fetch())
320 $aNewOp[] = $operation[
'NAME'];
324 $aDiff = array_diff($aNewOp, $aPrevOp);
327 $aDiff = array_diff($aPrevOp, $aNewOp);
331 if (COption::GetOptionString(
"main",
"event_log_task",
"N") ===
"Y")
335 foreach (
GetModuleEvents(
"main",
"OnTaskOperationsChanged",
true) as $arEvent)
349 if ($binding !==
false)
354 $z = static::GetList(
356 "MODULE_ID" =>
"asc",
365 while ($r =
$z->Fetch())
367 $arr[$r[
'MODULE_ID']][
'reference_id'][] = $r[
'ID'];
368 $arr[$r[
'MODULE_ID']][
'reference'][] =
'[' . ($r[
'LETTER'] ?:
'..') .
'] ' . static::GetLangTitle($r[
'NAME'], $r[
'MODULE_ID']);
373 while ($r =
$z->Fetch())
375 $arr[$r[
'MODULE_ID']][] = $r;
383 return static::GetList([], [
"ID" => intval(
$ID)]);
388 static $descriptions = [];
390 if (preg_match(
"/[^a-z0-9._]/i", $module))
395 if (!isset($descriptions[$module]))
397 if ((
$path =
getLocalPath(
"modules/" . $module .
"/admin/task_description.php")) !==
false)
399 $descriptions[$module] = include(
$_SERVER[
"DOCUMENT_ROOT"] .
$path);
403 $descriptions[$module] = [];
407 return $descriptions[$module];
412 $descriptions = static::GetDescriptions($module);
414 $nameUpper = strtoupper(
$name);
416 if (isset($descriptions[$nameUpper][
"title"]))
418 return $descriptions[$nameUpper][
"title"];
426 $descriptions = static::GetDescriptions($module);
428 $nameUpper = strtoupper(
$name);
430 if (isset($descriptions[$nameUpper][
"description"]))
432 return $descriptions[$nameUpper][
"description"];
440 $z = static::GetById(
$ID);
441 if ($r =
$z->Fetch())
453 static $TASK_LETTER_CACHE = [];
459 $k = strtoupper($letter .
'_' . $module .
'_' . $binding);
460 if (isset($TASK_LETTER_CACHE[
$k]))
462 return $TASK_LETTER_CACHE[
$k];
465 $z = static::GetList(
469 "MODULE_ID" => $module,
470 "BINDING" => $binding,
475 if ($r =
$z->Fetch())
477 $TASK_LETTER_CACHE[
$k] = $r[
'ID'];
491 $existingOperations = [];
492 $records = OperationTable::getList([
493 'select' => [
'NAME'],
494 'filter' => [
'=MODULE_ID' => $module],
496 while ($record = $records->fetch())
498 $existingOperations[$record[
'NAME']] = $record[
'NAME'];
502 $records = TaskTable::getList([
503 'select' => [
'NAME'],
504 'filter' => [
'=MODULE_ID' => $module,
'=SYS' =>
'Y'],
506 while ($record = $records->fetch())
508 $existingTasks[$record[
'NAME']] = $record[
'NAME'];
511 foreach ($tasks as $taskName => $arTask)
513 $binding = empty($arTask[
"BINDING"]) ?
'module' : $arTask[
"BINDING"];
514 $sqlTaskOperations = [];
516 if (isset($arTask[
"OPERATIONS"]) && is_array($arTask[
"OPERATIONS"]))
518 foreach ($arTask[
"OPERATIONS"] as $operationName)
520 $operationName = mb_substr($operationName, 0, 50);
522 if (!isset($existingOperations[$operationName]))
524 OperationTable::add([
525 'NAME' => $operationName,
526 'MODULE_ID' => $module,
527 'BINDING' => $binding,
529 $existingOperations[$operationName] = $operationName;
532 $sqlTaskOperations[] =
$DB->ForSQL($operationName);
536 $taskName = mb_substr($taskName, 0, 100);
538 if (!isset($existingTasks[$taskName]) && $taskName !=
'')
542 'LETTER' => $arTask[
"LETTER"] ??
null,
543 'MODULE_ID' => $module,
545 'BINDING' => $binding,
549 if (!empty($sqlTaskOperations) && $taskName !=
'')
551 $sqlTaskName =
$DB->ForSQL($taskName);
554 INSERT INTO b_task_operation (TASK_ID, OPERATION_ID)
555 SELECT T.ID TASK_ID, O.ID OPERATION_ID
556 FROM b_task T, b_operation O
558 AND T.NAME='$sqlTaskName'
559 AND O.NAME in ('" . implode(
"','", $sqlTaskOperations) .
"')
563 inner join b_task_operation TO2 on TO2.TASK_ID = T2.ID
564 inner join b_operation O2 on O2.ID = TO2.OPERATION_ID
566 AND T2.NAME='$sqlTaskName'
572 TaskOperationTable::cleanCache();
static GetLangTitle($name, $module="main")
static Update($arFields, $ID)
static GetOperations($ID, $return_names=false)
static GetTasksInModules($mode=false, $module_id=false, $binding=false)
static CheckFields(&$arFields, $ID=false)
static GetLangDescription($name, $desc, $module="main")
static AddFromArray(string $module, array $tasks)
static GetIdByLetter($letter, $module, $binding='module')
static SetOperations($ID, $arr, $bOpNames=false)
static UpdateModuleRights($id, $moduleId, $letter, $site_id=false)
static getOwnFields(array $arFields)
static $TASK_OPERATIONS_CACHE
static Delete($ID, $protect=true)
static GetDescriptions($module)
static GetList($arOrder=['MODULE_ID'=> 'asc', 'LETTER'=> 'asc'], $arFilter=[])
static Log($SEVERITY, $AUDIT_TYPE_ID, $MODULE_ID, $ITEM_ID, $DESCRIPTION=false, $SITE_ID=false)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
$_SERVER["DOCUMENT_ROOT"]
ExecuteModuleEventEx($arEvent, $arParams=[])
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
GetMessage($name, $aReplace=null)
getLocalPath($path, $baseFolder="/bitrix")
if(mb_strlen($order)< 6) $desc