• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/taskplannermaintance.php
  • Класс: CTaskPlannerMaintance
  • Вызов: CTaskPlannerMaintance::plannerActions
static function plannerActions($arActions, $site_id = SITE_ID)
{
	global $CACHE_MANAGER;

	self::$SITE_ID = $site_id;
	self::$USER_ID = BitrixTasksUtilUser::getId(); // todo: need to remove this, use $userId instead, to be able to manage other users planner

	$lastTaskId = 0;

	$arTasks = self::getCurrentTasksList();

	if (!is_array($arTasks))
		$arTasks = array();

	if (($arActions['name'] ?? null) <> '')
	{
		$ID = false;
		try
		{
			$prevOccurAsUserId = BitrixTasksUtilUser::getOccurAsId(); // null or positive integer
			BitrixTasksUtilUser::setOccurAsId(self::$USER_ID);

			$task = CTaskItem::add(array(
				'RESPONSIBLE_ID' => self::$USER_ID,
				'CREATED_BY' => self::$USER_ID,
				'TITLE' => $arActions['name'],
				'TAGS' => array(),
				'STATUS' => 2,
				'SITE_ID' => self::$SITE_ID,
				'ALLOW_TIME_TRACKING' => 'Y',
			), BitrixTasksUtilUser::getAdminId()); // todo: why admin?
			$ID = $task->getId();

			BitrixTasksUtilUser::setOccurAsId($prevOccurAsUserId);
		}
		catch(TasksException $e) // todo: when refactor exceptions, replace with somewhat like BitrixTasksException
		{
		}

		if ($ID)
		{
			if (!is_array($arActions['add']))
			{
				$arActions['add'] = array($ID);
			}
			else
			{
				$arActions['add'][] = $ID;
			}
		}
	}

	if (is_array($arActions['add']))
	{
		$task_id = $lastTaskId;

		foreach ($arActions['add'] as $task_id)
		{
			$arTasks[] = intval($task_id);
		}

		$lastTaskId = $task_id;
	}

	$arTasks = array_unique($arTasks);

	if (is_array($arActions['remove'] ?? null))
	{
		$arActions['remove'] = array_unique($arActions['remove']);

		foreach ($arActions['remove'] as $task_id)
		{
			$task_id = intval($task_id);

			if (($key = array_search($task_id, $arTasks)) !== false)
			{
				unset($arTasks[$key]);
			}
		}
	}

	$CACHE_MANAGER->ClearByTag('tasks_user_'.self::$USER_ID);

	self::setCurrentTasksList($arTasks);

	return $lastTaskId;
}