• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/taskfilterctrl.php
  • Класс: CTaskFilterCtrl
  • Вызов: CTaskFilterCtrl::addOrReplacePreset
private function addOrReplacePreset($arPresetData, $presetId = null)
{
	global $DB, $CACHE_MANAGER;

	if ( ! (
		isset($arPresetData['Name'])
		&& (mb_strlen($arPresetData['Name']) <= 100)
		&& isset($arPresetData['Parent'])
		&& isset($arPresetData['Condition'])
		&& is_array($arPresetData['Condition'])
		&& ($arPresetData['Parent'] === self::ROOT_PRESET)
	) )
	{
		throw new MainArgumentException('Invalid preset data');
	}

	// Remove CHECK_PERMISSIONS keys from arFilter, because CTasks::GetList() eat it
	$arSafeCondition = self::removeArrayKeyRecursively($arPresetData['Condition'], 'CHECK_PERMISSIONS');

	$arFields = array(
		'NAME'              => $arPresetData['Name'],
		'PARENT'            => (int) $arPresetData['Parent'],
		'SERIALIZED_FILTER' => serialize($arSafeCondition)
	);

	$arBinds = array('SERIALIZED_FILTER');

	// Replace existing preset?
	if ($presetId !== null)
	{
		CTaskAssert::assertLaxIntegers($presetId);
		CTaskAssert::assert($presetId > 0);

		$strUpdate = $DB->PrepareUpdate('b_tasks_filters', $arFields, 'tasks');
		$strSql = "UPDATE b_tasks_filters SET " . $strUpdate
			. " WHERE ID=" . (int) $presetId . " AND USER_ID=" . (int) $this->userId;

		$DB->QueryBind($strSql, $arBinds, true);
		$rc = $presetId;
	}
	else
	{
		$arFields['USER_ID'] = (int) $this->userId;
		$rc = $DB->Add('b_tasks_filters', $arFields, $arBinds, 'tasks');
	}

	$this->reloadPresetsCache();
	$CACHE_MANAGER->ClearByTag('tasks_filters_presets_' . $this->userId);

	return ($rc);
}