• Модуль: dav
  • Путь к файлу: ~/bitrix/modules/dav/classes/general/exchangetasks.php
  • Класс: CDavExchangeTasks
  • Вызов: CDavExchangeTasks::DataSync
static function DataSync($paramUserId = 0)
{
	$exchangeScheme = COption::GetOptionString("dav", "exchange_scheme", "http");
	$exchangeServer = COption::GetOptionString("dav", "exchange_server", "");
	$exchangePort = COption::GetOptionString("dav", "exchange_port", "80");
	$exchangeUsername = COption::GetOptionString("dav", "exchange_username", "");
	$exchangePassword = COption::GetOptionString("dav", "exchange_password", "");

	if (empty($exchangeServer)/* || (COption::GetOptionString("dav", "agent_tasks", "N") != "Y")*/)
	{
		CAgent::RemoveAgent("CDavExchangeTasks::DataSync();", "dav");
		COption::SetOptionString("dav", "agent_tasks", "N");
		return "";
	}

	$exchange = new CDavExchangeTasks($exchangeScheme, $exchangeServer, $exchangePort, $exchangeUsername, $exchangePassword);

	$exchangeMailbox = COption::GetOptionString("dav", "exchange_mailbox", "");
	$exchangeUseLogin = COption::GetOptionString("dav", "exchange_use_login", "Y");

	self::InitUserEntity();

	$maxNumber = COption::GetOptionString("dav", "users_by_step", "5");
	$index = 0;

	$paramUserId = (int)$paramUserId;
	$arUserFilter = array("ACTIVE" => "Y", "!UF_DEPARTMENT" => false);
	if ($paramUserId > 0)
	{
		$arUserFilter["ID_EQUAL_EXACT"] = $paramUserId;
	}
	if ($exchangeUseLogin === "N")
	{
		$arUserFilter["!UF_BXDAVEX_MAILBOX"] = false;
	}

	$arAdditionalExtendedProperties = array(
		array(
			'DistinguishedPropertySetId' => 'PublicStrings',
			'PropertyName'               => 'BX_TASKS_GUID',
			'PropertyType'               => 'String'
		),
		array(
			'DistinguishedPropertySetId' => 'PublicStrings',
			'PropertyName'               => 'BX_TASKS_SERIALIZED_DATA',
			'PropertyType'               => 'String'
		),
	);

	$dbUserList = CUser::GetList("UF_BXDAVEX_TSKSYNC", "asc", $arUserFilter, array("SELECT" => array("ID", "LOGIN", "UF_BXDAVEX_MAILBOX", "UF_BXDAVEX_TSKSYNC")));
	while ($arUser = $dbUserList->Fetch())
	{
		$index++;
		if ($index > $maxNumber)
		{
			break;
		}

		$GLOBALS["USER_FIELD_MANAGER"]->Update("USER", $arUser["ID"], array("UF_BXDAVEX_TSKSYNC" => ConvertTimeStamp(time(), "FULL")));

		$mailbox = (($exchangeUseLogin === "Y") ? $arUser["LOGIN"].$exchangeMailbox : $arUser["UF_BXDAVEX_MAILBOX"]);
		if (empty($mailbox))
		{
			continue;
		}

		$arFoldersList = $exchange->GetFoldersList(array("mailbox" => $mailbox));
		if ( ! is_array($arFoldersList) )
		{
			if (DAV_CALDAV_DEBUG)
			{
				CDav::WriteToLog('Error during tasks exchange: $exchange->GetFoldersList() returns unexpected result', '');
			}
			continue;
		}

		$arUserFolders = array("tasks" => GetMessage("DAV_EC_TASKS"));
		foreach ($arFoldersList as $value)
		{
			$arUserFolders[$value["XML_ID"]] = $value["NAME"];
		}

		$arUserTaskItems = array();
		$arUserTaskItemsFolder = array();
		foreach ($arUserFolders as $userFolderXmlId => $userFolder)
		{
			$arTaskItemsList = $exchange->GetList(
				array("mailbox" => $mailbox, "FolderId" => $userFolderXmlId),
				array("ItemShape" => "IdOnly"),
				$arAdditionalExtendedProperties
			);
			if ( ! is_array($arTaskItemsList) )
			{
				if (DAV_CALDAV_DEBUG)
				{
					CDav::WriteToLog('Error during tasks exchange: $exchange->GetList() returns unexpected result', '');
				}
				continue;
			}

			foreach ($arTaskItemsList as $value)
			{
				$arUserTaskItems[] = array(
					"XML_ID" => $value["XML_ID"],
					"MODIFICATION_LABEL" => $value["MODIFICATION_LABEL"],
				);
				$arUserTaskItemsFolder[$value["XML_ID"]] = $userFolderXmlId;
			}
		}

		$arModifiedUserTaskItems = CTaskSync::SyncTaskItems("exchange", $arUser["ID"], $arUserTaskItems);

		foreach ($arModifiedUserTaskItems as $value)
		{
			$arModifiedTaskItem = $exchange->GetById($value["XML_ID"], $arAdditionalExtendedProperties);
			if (is_array($arModifiedTaskItem) && !empty($arModifiedTaskItem))
			{
				$arModifiedTaskItem = $arModifiedTaskItem[0];

				$arModifyEventArray = array_merge(
					$arModifiedTaskItem,
					array(
						"ID" => $value["ID"],
						"USER_ID" => $arUser["ID"],
						"FOLDER_ID" => $arUserFolders[$arUserTaskItemsFolder[$arModifiedTaskItem["XML_ID"]]]
					)
				);

				//XML_ID, MODIFICATION_LABEL, SUBJECT, BODY, BODY_TYPE, DATE_CREATE, IMPORTANCE, REMINDER_MINUTES_BEFORE_START, ACTUAL_WORK, BILLING_INFORMATION, MILEAGE, START_DATE, DUE_DATE, IS_COMPLETE, IS_RECURRING, PERCENT_COMPLETE, STATUS, STATUS_DESCRIPTION, TOTAL_WORK, OWNER, RECURRING_TYPE, RECURRING_INTERVAL, RECURRING_DAYOFMONTH, RECURRING_DAYSOFWEEK, RECURRING_DAYOFWEEKINDEX, RECURRING_MONTH, RECURRING_STARTDATE, RECURRING_NUMBEROFOCCURRENCES, RECURRING_ENDDATE

				CTaskSync::SyncModifyTaskItem($arModifyEventArray);
			}
		}
	}

	return "CDavExchangeTasks::DataSync();";
}