• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/classes/general/cml2.php
  • Класс: CUserCMLImport
  • Вызов: CUserCMLImport::ImportUsers
function ImportUsers($xml_root_id = false, $start_time = false, $interval = 0)
{
	global $DB;

	$this->__user = new CUser();

	if (null == $this->__ibxml)
		$this->__ibxml = new CIBlockXMLFile();

	if ($start_time === false)
		$start_time = time();

	$counter = array(
		"ADD" => 0,
		"UPD" => 0,
		"DEL" => 0,
		"DEA" => 0,
		"ERR" => 0,
	);

	if(!$this->next_step["XML_ELEMENTS_PARENT"])
	{
		if ($xml_root_id <= 0)
		{
			$rs = $DB->Query("SELECT MIN(PARENT_ID) MIN_ID FROM b_xml_tree WHERE NAME='".GetMessage('IBLOCK_XML2_USER_TAG_STRUCTURE')."'");
			$ar = $rs->Fetch();
			$xml_root_id = $ar["MIN_ID"];
		}

		$query = "SELECT ID, ATTRIBUTES FROM b_xml_tree WHERE PARENT_ID = ".intval($xml_root_id)." AND NAME='".GetMessage('IBLOCK_XML2_USER_TAG_STRUCTURE')."'";
		$rs = $DB->Query($query);
		if($ar = $rs->Fetch())
		{
			if($ar["ATTRIBUTES"] <> '')
			{
				$attrs = unserialize($ar["ATTRIBUTES"], ["allowed_classes" => false]);
				if(is_array($attrs))
				{
					if(array_key_exists(GetMessage('IBLOCK_XML2_USER_ATTR_UPDATE_ONLY'), $attrs))
					{
						$this->bUpdateOnly =
							($attrs[GetMessage('IBLOCK_XML2_USER_ATTR_UPDATE_ONLY')] == 'true') ||
							(intval($attrs[GetMessage('IBLOCK_XML2_USER_ATTR_UPDATE_ONLY')]) ? true : false);
						$this->next_step['bUpdateOnly'] = $this->bUpdateOnly;
					}
				}
			}

			$rs = $DB->Query("SELECT ID, ATTRIBUTES FROM b_xml_tree WHERE PARENT_ID = ".intval($ar['ID'])." AND NAME='".GetMessage('IBLOCK_XML2_USER_TAG_USERS')."'");
			if ($ar = $rs->Fetch())
			{
				$this->next_step["XML_ELEMENTS_PARENT"] = $ar['ID'];
			}
		}
	}

	if($this->next_step["XML_ELEMENTS_PARENT"])
	{
		$rsParents = $DB->Query("SELECT ID, LEFT_MARGIN, RIGHT_MARGIN FROM b_xml_tree WHERE PARENT_ID = ".intval($this->next_step["XML_ELEMENTS_PARENT"])." AND ID > ".intval($this->next_step["XML_LAST_ID"])." ORDER BY ID");

		$q = 0;
		while($arParent = $rsParents->Fetch())
		{
			$arXMLElement = $this->__ibxml->GetAllChildrenArray($arParent);

			$ID = $this->LoadUser($arXMLElement, $counter);

			$this->next_step["XML_LAST_ID"] = $arParent["ID"];

			if($interval > 0 && (time()-$start_time) > $interval)
				break;
		}
	}

	unset($this->__user);

	//$this->CleanTempFiles();
	return $counter;
}