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();";
}