• Модуль: rest
  • Путь к файлу: ~/bitrix/modules/rest/lib/api/user.php
  • Класс: BitrixRestApiUser
  • Вызов: User::userAdd
static function userAdd($userFields, $nav = 0, CRestServer $server = null)
{
	if (!is_null($server) && !static::isMainScope($server))
	{
		return static::getErrorScope();
	}

	global $APPLICATION, $USER;

	static::checkAllowedFields();

	$bB24 = ModuleManager::isModuleInstalled('bitrix24');
	$res = false;

	if(
		(
			$bB24 && $USER->canDoOperation('bitrix24_invite')
			|| $USER->canDoOperation('edit_all_users')
		)
		&& Loader::includeModule('intranet'))
	{
		$userFields = array_change_key_case($userFields, CASE_UPPER);

		$bExtranet = false;

		if (
			isset($userFields["EXTRANET"])
			&& $userFields["EXTRANET"] == "Y"
		)
		{
			if (IsModuleInstalled('extranet'))
			{
				$bExtranet = true;
				$userFields["UF_DEPARTMENT"] = array();

				if (!empty($userFields["SONET_GROUP_ID"]))
				{
					$sonetGroupId = $userFields["SONET_GROUP_ID"];
					if (!is_array($sonetGroupId))
					{
						$sonetGroupId = array($sonetGroupId);
					}

					unset($userFields["SONET_GROUP_ID"]);
				}
				else
				{
					throw new Exception('no_sonet_group_for_extranet');
				}
			}

			unset($userFields["EXTRANET"]);
		}

		$inviteFields = self::prepareSaveData($userFields);

		$userFields["EMAIL"] = trim($userFields["EMAIL"]);
		if(check_email($userFields["EMAIL"]))
		{
			$siteId = self::getDefaultSite();

			if(CIntranetInviteDialog::checkUsersCount(1))
			{
				if (
					IsModuleInstalled('extranet')
					&& empty($inviteFields["UF_DEPARTMENT"])
					&& !$bExtranet
				)
				{
					throw new Exception('no_extranet_field');
				}

				$inviteFields['EMAIL'] = $userFields["EMAIL"];
				$inviteFields['ACTIVE'] = (isset($inviteFields['ACTIVE'])? $inviteFields['ACTIVE'] : 'Y');
				$inviteFields['GROUP_ID'] = CIntranetInviteDialog::getUserGroups($siteId, $bExtranet);
				$inviteFields["CONFIRM_CODE"] = randString(8);

				$ID = CIntranetInviteDialog::RegisterUser($inviteFields);
				if(is_array($ID))
				{
					throw new Exception(implode("n", $ID));
				}
				elseif($ID > 0)
				{
					$obUser = new CUser;
					if(!$obUser->update($ID, $inviteFields))
					{
						throw new Exception($obUser->LAST_ERROR);
					}

					$inviteFields['ID'] = $ID;

					Invitation::add([
						'USER_ID' => $ID,
						'TYPE' => Invitation::TYPE_EMAIL
					]);

					CIntranetInviteDialog::InviteUser(
						$inviteFields,
						(isset($userFields["MESSAGE_TEXT"])) ? htmlspecialcharsbx($userFields["MESSAGE_TEXT"]) : GetMessage("BX24_INVITE_DIALOG_INVITE_MESSAGE_TEXT_1")
					);

					if (
						isset($sonetGroupId)
						&& is_array($sonetGroupId)
						&& CModule::IncludeModule('socialnetwork')
					)
					{
						foreach($sonetGroupId as $groupId)
						{
							if (!CSocNetUserToGroup::SendRequestToJoinGroup($USER->GetID(), $ID, $groupId, "", false))
							{
								if ($e = $APPLICATION->GetException())
								{
									throw new Exception($e->GetString());
								}
							}
						}
					}

					$res = $ID;
				}
			}
			else
			{
				throw new Exception('user_count_exceeded');
			}
		}
		else
		{
			throw new Exception('wrong_email');
		}
	}
	else
	{
		throw new Exception('access_denied');
	}

	return $res;
}