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

	$existedContacts = array();
	$dbRes = ContactTable::getList(array(
		'filter' => array(
			'=USER_ID' => $owner["USER_ID"],
		),
		'select' => array('ID', 'CONTACT_XML_ID')
	));
	while($existedContact = $dbRes->fetch())
	{
		$existedContacts[$existedContact['CONTACT_XML_ID']] = $existedContact['ID'];
	}

	foreach($contactsList as $contact)
	{
		$contactFields = array(
			"USER_ID" => $owner["USER_ID"],
			"CONTACT_XML_ID" => $contact["CONTACT_ID"],
			"CONTACT_NAME" => $contact["NAME"],
			"CONTACT_LAST_NAME" => $contact["LAST_NAME"],
			"CONTACT_PHOTO" => $contact["PHOTO"],
			"NOTIFY" => $contact["NOTIFY"],
			"LAST_AUTHORIZE" => DateTime::createFromUserTime(CRestUtil::unConvertDateTime($contact['LAST_AUTHORIZE'])),
		);

		$contactId = false;
		if(isset($existedContacts[$contactFields["CONTACT_XML_ID"]]))
		{
			$contactId = $existedContacts[$contactFields["CONTACT_XML_ID"]];
			$result = static::update($contactId, $contactFields);
			if(!$result->isSuccess())
			{
				AddMessage2Log($result->getErrorMessages());
			}
		}
		else
		{
			$result = static::add($contactFields);
			if($result->isSuccess())
			{
				$contactId = $result->getId();
			}
			else
			{
				AddMessage2Log($result->getErrorMessages());
			}
		}

		if(
			$contactId > 0
			&& isset($contact["profile"])
			&& count($contact["profile"]) > 0
		)
		{
			if(isset($existedContacts[$contactFields["CONTACT_XML_ID"]]))
			{
				ContactConnectTable::deleteByContact($contactId);
			}

			foreach($contact["profile"] as $profile)
			{
				$connectFields = array(
					'CONTACT_ID' => $contactId,
					'CONTACT_PROFILE_ID' => $profile['PROFILE_ID'],
					'CONTACT_PORTAL' => $profile['PORTAL'],
					'CONNECT_TYPE' => $profile['TYPE'],
					'LAST_AUTHORIZE' => DateTime::createFromUserTime(CRestUtil::unConvertDateTime($profile['LAST_AUTHORIZE'])),
				);

				$r = ContactConnectTable::add($connectFields);
				if($r->isSuccess())
				{
					if(!isset($contactFields["CONNECT"]))
					{
						$contactFields["CONNECT"] = array($connectFields);
					}
					else
					{
						$contactFields["CONNECT"][] = $connectFields;
					}
				}
			}

			if(!isset($existedContacts[$contactFields["CONTACT_XML_ID"]]))
			{
				static::notifyJoin($contactId, $contactFields);
			}
		}
	}

	static::notifyJoinFinish($owner["USER_ID"]);
}