• Модуль: imconnector
  • Путь к файлу: ~/bitrix/modules/imconnector/lib/connector.php
  • Класс: BitrixImConnectorConnector
  • Вызов: Connector::add
static function add($line, $connector, $params = [])
{
	$result = new Result();

	if (
		empty($line)
		|| empty($connector)
	)
	{
		$result->addError(new Error(
			Loc::getMessage('IMCONNECTOR_EMPTY_PARAMETRS'),
			Library::ERROR_IMCONNECTOR_EMPTY_PARAMETRS,
			__METHOD__,
			['line' => $line, 'connector' => $connector, 'params' => $params]
		));
	}
	elseif (!self::isConnector($connector))
	{
		$result->addError(new Error(
			Loc::getMessage('IMCONNECTOR_NOT_AVAILABLE_CONNECTOR'),
			Library::ERROR_NOT_AVAILABLE_CONNECTOR,
			__METHOD__,
			$connector
		));
	}
	else
	{
		$status = Status::getInstance($connector, (int)$line);
		$cacheId = self::getCacheIdConnector($line, $connector);

		if ($status->getActive())
		{
			$result->addError(new Error(
				Loc::getMessage('IMCONNECTOR_ADD_EXISTING_CONNECTOR'),
				Library::ERROR_ADD_EXISTING_CONNECTOR,
				__METHOD__,
				$connector
			));
		}

		if ($result->isSuccess())
		{
			switch ($connector)
			{
				case 'livechat':
					if (Loader::includeModule(Library::MODULE_ID_OPEN_LINES))
					{
						$liveChatManager = new LiveChatManager($line);
						if (!$liveChatManager->add($params))
						{
							$result->addError(new Error(
								Loc::getMessage('IMCONNECTOR_FAILED_TO_ADD_CONNECTOR'),
								Library::ERROR_FAILED_TO_ADD_CONNECTOR,
								__METHOD__,
								$connector
							));
						}
					}
					else
					{
						$result->addError(new Error(
							Loc::getMessage('IMCONNECTOR_FAILED_TO_LOAD_MODULE_OPEN_LINES'),
							Library::ERROR_FAILED_TO_LOAD_MODULE_OPEN_LINES,
							__METHOD__,
							$connector
						));
					}
					break;

				case 'network':
					if (Loader::includeModule(Library::MODULE_ID_OPEN_LINES))
					{
						$output = new Output($connector, $line);
						$resultRegister = $output->register($params);

						if ($resultRegister->isSuccess())
						{
							$status->setData($resultRegister->getResult());
						}
						else
						{
							$result->addError(new Error(
								Loc::getMessage('IMCONNECTOR_FAILED_TO_ADD_CONNECTOR'),
								Library::ERROR_FAILED_TO_ADD_CONNECTOR,
								__METHOD__,
								$connector
							));
							$result->addErrors($resultRegister->getErrors());
						}

					}
					else
					{
						$result->addError(new Error(
							Loc::getMessage('IMCONNECTOR_FAILED_TO_LOAD_MODULE_OPEN_LINES'),
							Library::ERROR_FAILED_TO_LOAD_MODULE_OPEN_LINES,
							__METHOD__,
							$connector
						));
					}
					break;

				case 'telegrambot':
				case 'botframework':
				case 'ok':
					$output = new Output($connector, $line);
					$saved = $output->saveSettings($params);

					if ($saved->isSuccess())
					{
						$status->setActive(true);

						$testConnect = $output->testConnect();
						if($testConnect->isSuccess())
						{
							$status->setConnection(true);

							$register = $output->register();
							if(!$register->isSuccess())
							{
								$result->addError(new Error(
									Loc::getMessage('IMCONNECTOR_FAILED_REGISTER_CONNECTOR'),
									Library::ERROR_FAILED_REGISTER_CONNECTOR,
									__METHOD__,
									$connector
								));
								$result->addErrors($testConnect->getErrors());
							}
						}
						else
						{
							$result->addError(new Error(
								Loc::getMessage('IMCONNECTOR_FAILED_TO_TEST_CONNECTOR'),
								Library::ERROR_FAILED_TO_TEST_CONNECTOR,
								__METHOD__,
								$connector
							));
							$result->addErrors($testConnect->getErrors());
						}
					}
					else
					{
						$result->addError(new Error(
							Loc::getMessage('IMCONNECTOR_FAILED_TO_SAVE_SETTINGS_CONNECTOR'),
							Library::ERROR_FAILED_TO_SAVE_SETTINGS_CONNECTOR,
							__METHOD__,
							$connector
						));
						$result->addErrors($saved->getErrors());
					}
					break;

				case 'vkgroup':
				case 'facebook':
				case Library::ID_FBINSTAGRAMDIRECT_CONNECTOR:
				case 'facebookcomments':
				case Library::ID_FBINSTAGRAM_CONNECTOR:
				default:
					$result->addError(new Error(
						Loc::getMessage('IMCONNECTOR_FEATURE_IS_NOT_SUPPORTED'),
						Library::ERROR_FEATURE_IS_NOT_SUPPORTED,
						__METHOD__,
						$connector
					));
					break;
			}
		}

		if ($result->isSuccess())
		{
			$status
				->setActive(true)
				->setConnection(true)
				->setRegister(true)
				->setError(false)
				->save()
			;
		}

		self::cleanCacheConnector($line, $cacheId);
	}

	return $result;
}