• Модуль: imbot
  • Путь к файлу: ~/bitrix/modules/imbot/lib/bot/marta.php
  • Класс: BitrixImBotBotMarta
  • Вызов: Marta::notifyAboutPlans
static function notifyAboutPlans($dialogId, $userId)
{
	if (!BitrixMainLoader::includeModule('im'))
		return false;

	$userData = BitrixImUser::getInstance($userId);
	if (!$userData || $userData->isExtranet())
		return false;

	$dateNow = new BitrixMainTypeDateTime();
	if (self::getBotOption($userId, 'planner_message', 0) < $dateNow->format('Ymd'))
	{
		self::setBotOption($userId, 'planner_message', $dateNow->format('Ymd'));
	}
	else
	{
		return false;
	}

	$language = null;
	$botData = BitrixImBot::getCache(self::getBotId());
	if ($botData['LANG'])
	{
		$language = $botData['LANG'];
		Loc::loadLanguageFile(__FILE__, $language);
	}

	$welcomeMessage = '';

	$dateNow = new BitrixMainTypeDateTime();
	if (self::getBotOption($userId, 'last_message', 0) < $dateNow->format('Ymd'))
	{
		$welcomeMessage = self::getHelloMessage($userId, $language).' :) [br]';
	}

	$answer = '';
	$attaches = Array();
	if (BitrixMainLoader::includeModule('intranet') && BitrixMainLoader::includeModule('calendar'))
	{
		$calendarEventUrl = CCalendar::GetPath('user', $userId, true);
		$attach = new CIMMessageParamAttach(1, CIMMessageParamAttach::CHAT);
		$events = CCalendarEventHandlers::OnPlannerInit(Array(
			'FULL' => true,
			'USER_ID' => $userId
		));
		$eventsForMessage = [];
		if (is_array($events['DATA']['EVENTS']))
		{
			foreach ($events['DATA']['EVENTS'] as $event)
			{
				if ($event['TIME_FROM'] == $event['TIME_TO'] && $event['TIME_FROM'] == '00:00')
				{
					$eventTimeFormatted = Loc::getMessage('IMBOT_BOT_MESSAGE_CALEND_4', null, $language);
				}
				else
				{
					$eventTimeFormatted = Loc::getMessage('IMBOT_BOT_MESSAGE_CALEND_3', Array('#TIME_1#' => $event['TIME_FROM'], '#TIME_2#' => $event['TIME_TO']), $language);
				}
				// if (count($eventsForMessage) <= 10)
				// {
				// 	$eventsForMessage[] = $eventTimeFormatted . ' - ' .$event['NAME'];
				// }
				$attach->AddGrid(Array(
					Array(
						"VALUE" => $eventTimeFormatted,
						"LINK" => CHTTP::urlAddParams(
							$calendarEventUrl,
							[
								'EVENT_ID' => (int)$event['ID'],
								'EVENT_DATE' => urlencode($event['DATE_FROM'])
							]),
						"DISPLAY" => "LINE",
						"WIDTH" => 120,
					),
					Array(
						"VALUE" => $event['NAME'],
						"DISPLAY" => "LINE"
					),
				));
			}
		}
		if (!$attach->IsEmpty())
		{
			$answer .= Loc::getMessage('IMBOT_BOT_MESSAGE_CALEND_1_'.mt_rand(1, 4), null, $language);
			// if (!empty($eventsForMessage))
			// {
			// 	$attach->SetDescription(implode(', ', $eventsForMessage));
			// }
			$attaches[] = $attach;
		}
	}

	if (BitrixMainLoader::includeModule('tasks'))
	{
		try
		{
			$tasksCounter = CTaskListCtrl::getMainCounterForUser($userId);
			if ($tasksCounter > 0)
			{
				$tasksUrl = CTaskCountersNotifier::getTasksListLink($userId);

				$pluralForm = CTasksTools::getPluralForm($tasksCounter, true);
				if ($pluralForm !== false)
					$taskMessage = 'IMBOT_BOT_MESSAGE_TASKS_'.($pluralForm+1);
				else
					$taskMessage = 'IMBOT_BOT_MESSAGE_TASKS_2';

				$answer = $answer.Loc::getMessage($taskMessage, Array('#TASKS_COUNT#' => $tasksCounter, '#URL_START#' => '[URL='.$tasksUrl.']', '#URL_END#' => '[/URL]'), $language);
			}
		}
		catch (Exception $e)
		{}
	}

	if ($answer)
	{
		$answer = $welcomeMessage.'[br]'.$answer;

		BitrixImBot::startWriting(Array('BOT_ID' => self::getBotId()), $dialogId);

		BitrixImBot::addMessage(Array('BOT_ID' => self::getBotId()), Array(
			'DIALOG_ID' => $dialogId,
			'MESSAGE' => $answer,
			'ATTACH' => $attaches,
			'URL_PREVIEW' => 'N'
		));
	}

	return true;
}