- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/control/member.php
- Класс: BitrixTasksControlMember
- Вызов: Member::set
public function set(array $data)
{
$this->loadTask();
$members = $this->getCurrentMembers();
$curMembersIds = $this->getMembersIds($members);
// $membersToRemove = array_diff($curMembersIds, $newMembersIds);
// $this->transferTags($membersToRemove);
$this->deleteByTask();
if (
array_key_exists(self::FIELD_RESPONSIBLE_ID, $data)
&& (int)$data[self::FIELD_RESPONSIBLE_ID] > 0
)
{
$members[MemberTable::MEMBER_TYPE_RESPONSIBLE] = [];
$members[MemberTable::MEMBER_TYPE_RESPONSIBLE][] = [
'USER_ID' => (int)$data[self::FIELD_RESPONSIBLE_ID],
'TYPE' => MemberTable::MEMBER_TYPE_RESPONSIBLE,
];
}
if (
array_key_exists(self::FIELD_CREATED_BY, $data)
&& (int)$data[self::FIELD_CREATED_BY] > 0
)
{
$members[MemberTable::MEMBER_TYPE_ORIGINATOR] = [];
$members[MemberTable::MEMBER_TYPE_ORIGINATOR][] = [
'USER_ID' => (int)$data[self::FIELD_CREATED_BY],
'TYPE' => MemberTable::MEMBER_TYPE_ORIGINATOR,
];
}
if (array_key_exists(self::FIELD_ACCOMPLICES, $data))
{
$members[MemberTable::MEMBER_TYPE_ACCOMPLICE] = [];
foreach ($data[self::FIELD_ACCOMPLICES] as $userId)
{
$userId = (int)$userId;
if ($userId < 1)
{
continue;
}
$members[MemberTable::MEMBER_TYPE_ACCOMPLICE][] = [
'USER_ID' => $userId,
'TYPE' => MemberTable::MEMBER_TYPE_ACCOMPLICE,
];
}
}
if (array_key_exists(self::FIELD_AUDITORS, $data))
{
$members[MemberTable::MEMBER_TYPE_AUDITOR] = [];
foreach ($data[self::FIELD_AUDITORS] as $userId)
{
$userId = (int)$userId;
if ($userId < 1)
{
continue;
}
$members[MemberTable::MEMBER_TYPE_AUDITOR][] = [
'USER_ID' => $userId,
'TYPE' => MemberTable::MEMBER_TYPE_AUDITOR,
];
}
}
if (empty($members))
{
return;
}
$newMembersIds = $this->getMembersIds($members);
$membersToRemove = array_diff($curMembersIds, $newMembersIds);
// $this->transferTags($membersToRemove);
$connection = Application::getConnection();
$sqlHelper = $connection->getSqlHelper();
$insertRows = [];
foreach ($members as $type => $list)
{
$insertRows = array_merge(
$insertRows,
array_map(function ($el) use ($sqlHelper) {
$implode = (int)$el['USER_ID'];
$implode .= ',' . $this->taskId;
$implode .= ','' . $sqlHelper->forSql($el['TYPE']) . ''';
return $implode;
}, $list)
);
}
$sql = "
INSERT INTO " . MemberTable::getTableName() . "
(USER_ID, TASK_ID, TYPE)
VALUES
(" . implode("),(", $insertRows) . ")
";
Application::getConnection()->query($sql);
}