• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/ical/usercontroller.php
  • Класс: BitrixCalendarICalUserController
  • Вызов: UserController::inviteUser
static function inviteUser($userId, $params)
{
	$eventFields = $params['arFields'];
	$invitedUser = $params['userIndex'][$userId];
	$email = $invitedUser['EMAIL'];

	$nameFormatted = str_replace(['<', '>', '"'], '', CCalendar::GetUserName($invitedUser));
	$mailMessageId = "";
	$mailMessageInReplyTo = "";
	$siteId = SITE_ID;
	$fromName = Loc::getMessage('CALENDAR_SERVICE_NAME');
	$responseEmailAddress = "CALENDAR_INVITE_".$eventFields["PARENT_ID"]."@".$GLOBALS["SERVER_NAME"];

	$res = BitrixMailUser::getReplyTo(
		$siteId,
		$userId,
		'CALENDAR_EVENT',
		$eventFields["PARENT_ID"],
		self::getPublicUrl()
	);

	if (is_array($res))
	{
		list($replyTo, $backUrl) = $res;

		if (
			$replyTo
			&& $backUrl
		)
		{
			$icsAttachment = self::getIcsFileAttachment($eventFields,
			[
				'attendees' => self::prepareAttendeesData(
					$eventFields['ATTENDEES'],
					$params['currentAttendees'],
					$params['userIndex'],
					$params['userId']
				),
				'responseEmailAddress' => $responseEmailAddress
			]);
			$attachments = [$icsAttachment];
			// 1. create ical-content
			// 2. save file ($APPLICATION->SaveFileContent($abs_path, $filesrc_for_save))
			// 3. add b_file entry
			// 4. clear file after sending

			$fromName = str_replace(['<', '>', '"'], '', $fromName);
			$id = CEvent::Send(
				self::$MAIL_TYPE_EXTERNAL,
				$siteId,
				[
					"=Reply-To" => $fromName.' <'.$replyTo.'>',
					"=Message-Id" => $mailMessageId,
					"=In-Reply-To" => $mailMessageInReplyTo == $mailMessageId ? '' : $mailMessageInReplyTo,
					"EMAIL_FROM" => $fromName.' <'.BitrixMailUser::getDefaultEmailFrom().'>',
					"EMAIL_TO" => (!empty($nameFormatted) ? ''.$nameFormatted.' <'.$email.'>' : $email),
					"RECIPIENT_ID" => $userId,
					"COMMENT_ID" => '',
					"POST_ID" => intval($eventFields["PARENT_ID"]),
					"POST_TITLE" => 'calendar invitation',
					"URL" => self::getPublicUrl()
				],
				'Y',
				'',
				$attachments
			);
		}
	}
}