• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/crm/replacementusercode.php
  • Класс: BitrixImOpenLinesCrmReplacementUserCode
  • Вызов: ReplacementUserCode::execute
public function execute(array &$result): bool
{
	$return = false;

	if (
		Loader::includeModule(self::$moduleId)
		&& Loader::includeModule(self::$moduleIdCrm)
	)
	{
		[$oldUserCode, $newUserCode] = $this->outerParams;

		$optionName = self::OPTION_NAME . md5($oldUserCode . $newUserCode);
		$count = 0;

		$params = Option::get(self::$moduleId, $optionName, '');
		$params = ($params !== '' ? @unserialize($params, ['allowed_classes' => false]) : []);
		$params = (is_array($params) ? $params : []);
		if (empty($params))
		{
			$params = [
				'activity' => false,
			];
		}

		if ($params['activity'] !== true)
		{
			$sessions = SessionTable::getList([
				'select' => [
					'CRM_ACTIVITY_ID',
				],
				'filter' => [
					'=USER_CODE' => $newUserCode
				]
			]);

			while ($session = $sessions->fetch())
			{
				if (!empty($session['CRM_ACTIVITY_ID']))
				{
					CrmActivity::update($session['CRM_ACTIVITY_ID'], ['USER_CODE' => $newUserCode]);

					$communications = CCrmActivity::GetCommunications($session['CRM_ACTIVITY_ID']);

					$isEditCommunications = false;

					foreach ($communications as $idCommunication=>$communication)
					{
						if(
							!empty($communication['VALUE'])
							&& mb_strpos($communication['VALUE'], 'imol|') === 0
						)
						{
							$communications[$idCommunication]['VALUE'] = 'imol|' . $newUserCode;
							$isEditCommunications = true;
						}
					}

					if($isEditCommunications === true)
					{
						CAllCrmActivity::SaveCommunications($session['CRM_ACTIVITY_ID'], $communications);
					}

					$count++;
				}

				if ($count >= self::$stepSize)
				{
					break;
				}
			}
		}

		if (!($count >= self::$stepSize))
		{
			$params['activity'] = true;

			$res = FieldMultiTable::getList([
				'select' => [
					'ID',
					'VALUE_TYPE',
				],
				'filter' => [
					'=TYPE_ID' => 'IM',
					'=VALUE' => 'imol|' . $oldUserCode,
				]
			]);

			$multiFields = new CCrmFieldMulti();
			while (
				($row = $res->fetch())
				&& $count < self::$stepSize
			)
			{
				$multiFields->Update($row['ID'], [
					'TYPE_ID' => 'IM',
					'VALUE_TYPE' => $row['VALUE_TYPE'],
					'VALUE' => 'imol|' . $newUserCode,
				]);

				$count++;
			}
		}

		if ($count > 0)
		{
			Option::set(self::$moduleId, $optionName, serialize($params));
			$return = true;
		}
		else
		{
			Option::delete(self::$moduleId, ['name' => $optionName]);
		}
	}

	return $return;
}