• Модуль: imconnector
  • Путь к файлу: ~/bitrix/modules/imconnector/lib/connector.php
  • Класс: BitrixImConnectorConnector
  • Вызов: Connector::update
static function update($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__,
			array
			('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_UPDATE_NOT_EXISTING_CONNECTOR'),
				Library::ERROR_UPDATE_NOT_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->update($params))
							$result->addError(new Error(
								Loc::getMessage('IMCONNECTOR_FAILED_TO_UPDATE_CONNECTOR'),
								Library::ERROR_FAILED_TO_UPDATE_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
						));
					}

					if (!$result->isSuccess())
					{
						$status->setConnection(false);
						$status->setRegister(false);
					}
					break;

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

						if ($resultUpdate->isSuccess())
						{
							$dataStatus = $status->getData();
							$dataStatus = array_merge($dataStatus, $params);
							$status->setData($dataStatus);
						}
						else
						{
							$result->addError(new Error(
								Loc::getMessage('IMCONNECTOR_FAILED_TO_UPDATE_CONNECTOR'),
								 Library::ERROR_FAILED_TO_UPDATE_CONNECTOR,
								__METHOD__,
								$connector
							));
							$result->addErrors($resultUpdate->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
						));
					}

					if(!$result->isSuccess())
					{
						$status->setConnection(false);
						$status->setRegister(false);
					}
					break;

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

					if ($saved->isSuccess())
					{
						$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());

								$status->setRegister(false);
							}
						}
						else
						{
							$result->addError(new Error(
								Loc::getMessage('IMCONNECTOR_FAILED_TO_TEST_CONNECTOR'),
								 Library::ERROR_FAILED_TO_TEST_CONNECTOR,
								__METHOD__,
								$connector
							));
							$result->addErrors($testConnect->getErrors());

							$status->setConnection(false);
						}
					}
					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());

						$status->setConnection(false);
						$status->setRegister(false);
					}
					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);
		}

		$status->setError(false);
		$status->save();

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

	return $result;
}