В общем смысл моего скрипта такой, добавлять нового пользователя в наблюдатели в закрытых задачах определенного пользователя. По факту у меня стоит фильтр задач где пользователь является ответственным или же постановщиком в закрытой задаче, но есть проблема с фильтром, он ищет чисто по первому субфильтру, второй ни как не подставляется
Весь код
global $USER;
if (empty($_POST["OLDUSER"]) || empty($_POST["NEWUSER"])) {
echo "Не указаны ID пользователей.";
exit;
}
$oldUserId = intval($_POST["OLDUSER"]);
$newUserId = intval($_POST["NEWUSER"]);
$creationDateFrom = $_POST['CREATION_DATE_FROM'];
$creationDateTo = $_POST['CREATION_DATE_TO'];
$oldUser = CUser::GetByID($oldUserId)->Fetch();
$newUser = CUser::GetByID($newUserId)->Fetch();
if (!$oldUser) {
echo "Не найден старый пользователь с таким ID";
exit;
} elseif (!$newUser) {
echo "Не найден новый пользователь с таким ID";
exit;
}
$creationDateFrom = !empty($creationDateFrom) ? ConvertTimeStamp(strtotime($creationDateFrom), "FULL") : null;
$creationDateTo = !empty($creationDateTo) ? ConvertTimeStamp(strtotime($creationDateTo) + 86400, "FULL") : null;
if (!$creationDateFrom || !$creationDateTo) {
echo "Не указаны даты создания задач.";
exit;
}
$filter = array(
'::LOGIC' => 'AND',
'>=CREATED_DATE' => $creationDateFrom,
'<=CREATED_DATE' => $creationDateTo,
'::SUBFILTER-1' => array(
'::LOGIC' => 'OR',
'RESPONSIBLE_ID' => $oldUserId,
'REAL_STATUS' => array(CTasks::STATE_COMPLETED),
),
'::SUBFILTER-2' => array(
'CREATED_BY' => $oldUserId,
'REAL_STATUS' => array(CTasks::STATE_COMPLETED),
),
);
$res = CTasks::GetList([], $filter);
$tasksUpdated = 0;
$messages = [];
while ($arTask = $res->GetNext()) {
$taskId = $arTask["ID"];
$taskItem = new CTaskItem($taskId, $USER->GetID());
$taskData = $taskItem->getData();
$auditors = $taskData["AUDITORS"] ?? [];
if (!in_array($newUserId, $auditors)) {
$auditors[] = $newUserId;
$obTask = new CTasks;
$updateFields = [
"AUDITORS" => $auditors
];
$success = $obTask->Update($taskId, $updateFields);
if ($success) {
$messages[] = "Задача с ID $taskId: Новый наблюдатель добавлен.";
$tasksUpdated++;
} else {
if ($e = $APPLICATION->GetException()) {
$messages[] = "Ошибка при обновлении задачи ID $taskId: " . htmlspecialchars($e->GetString());
}
}
} else {
$messages[] = "Задача с ID $taskId: Наблюдатель с ID $newUserId уже существует.";
}
}
if ($tasksUpdated === 0) {
$messages[] = "Не найдено задач для обновления.";
}
echo implode("<br>", $messages);
пробовал разным подходом, например так делаю но долго грузит и добавляет наблюдателя абсолютно во всех задачах не важно что там пользователь $olduser является ли постановщик/ответственным
$filter = array(
'::LOGIC' => 'AND',
'>=CREATED_DATE' => $creationDateFrom,
'<=CREATED_DATE' => $creationDateTo,
'::SUBFILTER' => array(
'::LOGIC' => 'OR',
'::SUBFILTER-1' => array(
'RESPONSIBLE_ID' => $oldUserId,
'>=CREATED_DATE' => $creationDateFrom,
'<=CREATED_DATE' => $creationDateTo,
'REAL_STATUS' => array(CTasks::STATE_COMPLETED),
),
'::SUBFILTER-2' => array(
'CREATED_BY' => $oldUserId,
'>=CREATED_DATE' => $creationDateFrom,
'<=CREATED_DATE' => $creationDateTo,
'REAL_STATUS' => array(CTasks::STATE_COMPLETED),
),
),
);