• Модуль: socialservices
  • Путь к файлу: ~/bitrix/modules/socialservices/lib/contact.php
  • Класс: BitrixSocialservicesContactTable
  • Вызов: ContactTable::processPossibleContacts
static function processPossibleContacts($owner, array $contactsList)
{
	if(!MainLoader::includeModule('rest'))
	{
		return;
	}

	$existedContacts = array();
	$dbRes = UserLinkTable::getList(array(
		'filter' => array(
			'=SOCSERV_USER_ID' => $owner["ID"],
			'=SOCSERV_USER.EXTERNAL_AUTH_ID' => CSocServBitrix24Net::ID,
		),
		'select' => array('ID', 'LINK_UID')
	));
	while($existedContact = $dbRes->fetch())
	{
		$existedContacts[$existedContact['LINK_UID']] = $existedContact['ID'];
	}

	foreach($contactsList as $contact)
	{
		$contactFields = array(
			"USER_ID" => $owner["USER_ID"],
			"SOCSERV_USER_ID" => $owner["ID"],
			"LINK_UID" => $contact["CONTACT_ID"],
			"LINK_NAME" => $contact["NAME"],
			"LINK_LAST_NAME" => $contact["LAST_NAME"],
			"LINK_PICTURE" => $contact["PHOTO"],
		);

		$linkId = false;
		if(isset($existedContacts[$contactFields["LINK_UID"]]))
		{
			$linkId = $existedContacts[$contactFields["LINK_UID"]];
			UserLinkTable::update($linkId, $contactFields);
		}
		else
		{
			$result = UserLinkTable::add($contactFields);
			if($result->isSuccess())
			{
				$linkId = $result->getId();
			}
		}

		if(
			$linkId !== false
			&& isset($contact["profile"])
			&& count($contact["profile"]) > 0
		)
		{
			if(isset($existedContacts[$contactFields["LINK_UID"]]))
			{
				ContactConnectTable::deleteByLink($linkId);
			}

			foreach($contact["profile"] as $profile)
			{
				$result = ContactConnectTable::add(array(
					'LINK_ID' => $linkId,
					'CONTACT_PROFILE_ID' => $profile['PROFILE_ID'],
					'CONTACT_PORTAL' => $profile['PORTAL'],
					'CONNECT_TYPE' => $profile['TYPE'],
					'LAST_AUTHORIZE' => DateTime::createFromUserTime(CRestUtil::unConvertDateTime($profile['LAST_AUTHORIZE'])),
				));
			}
		}
	}
}