CBPVirtualDocument::getList

  1. Bitrix24 API (v. 23.675.0)
  2. bizproc
  3. CBPVirtualDocument
  4. getList
  • Модуль: bizproc
  • Путь к файлу: ~/bitrix/modules/bizproc/classes/general/virtualdocument.php
  • Класс: CBPVirtualDocument
  • Вызов: CBPVirtualDocument::getList
static function getList($arOrder = array("SORT" => "ASC"), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields=array())
{
	$arFilter["SHOW_NEW"] = "Y";
	$arFilter["ACTIVE"] = "Y";

	if (count($arSelectFields) > 0)
	{
		if (!in_array("ID", $arSelectFields))
			$arSelectFields[] = "ID";
		if (!in_array("IBLOCK_ID", $arSelectFields))
			$arSelectFields[] = "IBLOCK_ID";
		if (!in_array("CREATED_BY", $arSelectFields))
			$arSelectFields[] = "CREATED_BY";
	}

	$arResultList = array();

	$arIDMap = array();

	$dbTasksList = CIBlockElement::GetList(
		$arOrder,
		$arFilter,
		$arGroupBy,
		$arNavStartParams,
		$arSelectFields
	);
	while ($obTask = $dbTasksList->GetNextElement())
	{
		$arResult = array();

		$arFields = $obTask->GetFields();
		foreach ($arFields as $fieldKey => $fieldValue)
		{
			if (mb_substr($fieldKey, 0, 1) != "~")
				continue;
			$fieldKey = mb_substr($fieldKey, 1);

			$arResult[$fieldKey] = $fieldValue;
			$arResult[$fieldKey."_PRINTABLE"] = $fieldValue;

			if (in_array($fieldKey, array("MODIFIED_BY", "CREATED_BY")))
			{
				$arResult[$fieldKey] = "user_".$fieldValue;
				$arResult[$fieldKey."_PRINTABLE"] = self::PrepareUserForPrint($fieldValue);
			}
		}

		$arProperties = $obTask->GetProperties();
		foreach ($arProperties as $propertyKey => $propertyValue)
		{
			$arResult["PROPERTY_".$propertyKey] = $propertyValue["~VALUE"];
			$arResult["PROPERTY_".$propertyKey."_PRINTABLE"] = $propertyValue["~VALUE"];

			if ($propertyValue["USER_TYPE"] <> '')
			{
				if ($propertyValue["USER_TYPE"] == "UserID")
				{
					if (is_array($propertyValue["VALUE"]))
					{
						$arResult["PROPERTY_".$propertyKey] = array();
						foreach ($propertyValue["VALUE"] as $v)
						{
							$v = intval($v);
							if ($v > 0)
								$arResult["PROPERTY_".$propertyKey][] = "user_".$v;
						}
					}
					else
					{
						$arResult["PROPERTY_".$propertyKey] = "";
						if (intval($propertyValue["VALUE"]) > 0)
							$arResult["PROPERTY_".$propertyKey] = "user_".intval($propertyValue["VALUE"]);
					}
					$arResult["PROPERTY_".$propertyKey."_PRINTABLE"] = self::PrepareUserForPrint($propertyValue["VALUE"]);
				}
			}
			elseif ($propertyValue["PROPERTY_TYPE"] == "G")
			{
				$arResult["PROPERTY_".$propertyKey."_PRINTABLE"] = array();
				$vx = self::PrepareSectionForPrint($propertyValue["VALUE"], $propertyValue["LINK_IBLOCK_ID"]);
				foreach ($vx as $vx1 => $vx2)
					$arResult["PROPERTY_".$propertyKey."_PRINTABLE"][$vx1] = $vx2["NAME"];
			}
			elseif ($propertyValue["PROPERTY_TYPE"] == "L")
			{
				$arResult["PROPERTY_".$propertyKey] = array();

				$arPropertyValue = $propertyValue["VALUE"];
				$arPropertyKey = $propertyValue["VALUE_ENUM_ID"];
				if (!is_array($arPropertyValue))
				{
					$arPropertyValue = array($arPropertyValue);
					$arPropertyKey = array($arPropertyKey);
				}

				for ($i = 0, $cnt = count($arPropertyValue); $i < $cnt; $i++)
					$arResult["PROPERTY_".$propertyKey][$arPropertyKey[$i]] = $arPropertyValue[$i];

				$arResult["PROPERTY_".$propertyKey."_PRINTABLE"] = $arResult["PROPERTY_".$propertyKey];
			}
		}

		if (array_key_exists($arFields["ID"], $arIDMap))
		{
			foreach ($arResultList[$arIDMap[$arFields["ID"]]] as $key => &$value)
			{
				if ($value != $arResult[$key])
				{
					if (!is_array($value))
						$value = array($value);
					$value[] = $arResult[$key];
				}
			}
		}
		else
		{
			$index = count($arResultList);
			$arResultList[$index] = $arResult;
			$arIDMap[$arFields["ID"]] = $index;
		}
	}

	$dbTasksList1 = new CDBResult();
	$dbTasksList1->InitFromArray($arResultList);

	return array($dbTasksList1, $dbTasksList);
}

Добавить комментарий