• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/kanban.php
  • Класс: Bitrix\Crm\Kanban
  • Вызов: Kanban::getItems
public function getItems(array $filter = [], int $blockPage = 1, array $params = []): array
{
	$this->blockPage = $blockPage;

	static $path = null;
	static $currency = null;
	static $columns = null;

	$select = $this->getSelect();
	if ($this->requiredFields)
	{
		$select = array_merge($select, array_keys($this->requiredFields));
	}

	$type = $this->entity->getTypeName();
	$runtime = [];
	$filterCommon = ($type === \CCrmOwnerType::OrderName ? $this->getOrderFilter($runtime) : $this->getFilter($params['filter'] ?? []));

	// remove conflict keys and merge filters
	$filter = array_merge($filterCommon, $filter);

	if ($path === null)
	{
		$path = $this->getEntityPath($type);
	}

	if ($currency === null)
	{
		$currency = $this->currency;
	}

	if ($columns === null)
	{
		$columns = $this->getColumns(false, false, $this->params);
	}

	$parameters = [
		'filter' => $filter,
		'select' => $select,
		'order' => $this->getOrder(),
		'limit' => static::BLOCK_SIZE,
		'offset' => static::BLOCK_SIZE * ($this->blockPage - 1),
	];

	if(!empty($runtime))
	{
		$parameters['runtime'] = $runtime;
	}

	// Pass symantic param to the deadlines view for correct filter works
	if (
		$this->viewMode === ViewMode::MODE_DEADLINES &&
		!empty($this->allowSemantics) &&
		is_array($this->allowSemantics) &&
		$this->entity instanceof \Bitrix\Crm\Kanban\Entity\Dynamic
	) {
		$parameters['filter']['STAGE_SEMANTIC_ID'] = $this->allowSemantics;
	}
	$res = $this->entity->getItems($parameters);

	$rows = [];
	while ($row = $res->fetch())
	{
		$row = $this->entity->prepareItemCommonFields($row);
		$rows[$row['ID']] = $row;
	}

	$addSelect = array_keys($this->additionalSelect);
	$rows = $this->entity->appendRelatedEntitiesValues($rows, $addSelect);

	$displayOptions = new \Bitrix\Crm\Service\Display\Options();
	$restriction = \Bitrix\Crm\Restriction\RestrictionManager::getWebFormResultsRestriction();
	$restrictedItemIds = [];

	$restrictedValueClickCallback = null;
	if (!$restriction->hasPermission())
	{
		$itemIds = array_keys($rows);
		$restriction->prepareDisplayOptions($this->entity->getTypeId(), $itemIds, $displayOptions);
		$restrictedItemIds = $displayOptions->getRestrictedItemIds();
		$restrictedValueClickCallback = $restriction->prepareInfoHelperScript();
	}

	$displayedFields = $this->getDisplayedFieldsList();
	$display = new \Bitrix\Crm\Service\Display($this->entity->getTypeId(), $displayedFields, $displayOptions);
	$display->setItems($rows);
	$renderedRows = $display->getAllValues();

	$inlineFieldTypes = $this->getInlineFieldTypes();
	$specialReqKeys = $this->getSpecialReqKeys();
	$result = [];

	$lastActivityInfo = $this->getEntity()->prepareMultipleItemsLastActivity($rows);

	$activeAutomationDebugEntityIds = \CCrmBizProcHelper::getActiveDebugEntityIds($this->entity->getTypeId());

	foreach($rows as $rowId => $row)
	{
		if (is_array($renderedRows[$rowId]))
		{
			$row = $this->mergeItemFieldsValues($row, $renderedRows[$rowId]);
		}

		if (isset($row['CONTACT_ID']) && $row['CONTACT_ID'] > 0)
		{
			$row['CONTACT_TYPE'] = 'CRM_CONTACT';
		}

		if (isset($row['COMPANY_ID']) && $row['COMPANY_ID'] > 0)
		{
			$row['CONTACT_TYPE'] = 'CRM_COMPANY';
		}

		//additional fields
		$fields = [];
		foreach ($addSelect as $code)
		{
			if (array_key_exists($code, $row) && array_key_exists($code, $displayedFields))
			{
				$displayedField = $displayedFields[$code];
				if ($this->shouldShowField($displayedField, $row[$code]))
				{
					$field = [
						'code' => $code,
						'title' => $this->sanitizeString($displayedField->getTitle()),
						'type' => $displayedField->getType(),
						'valueDelimiter' => in_array($displayedField->getType(), $inlineFieldTypes) ? ', ' : '
', 'icon' => $displayedField->getDisplayParam('icon'), 'html' => $displayedField->wasRenderedAsHtml(), 'isMultiple' => $displayedField->isMultiple(), ]; $this->prepareField($field, $row[$code], $renderedRows[$rowId]); $fields[] = $field; } } } $returnCustomer = (isset($row['IS_RETURN_CUSTOMER']) && $row['IS_RETURN_CUSTOMER'] === 'Y'); // collect required $required = []; $requiredFm = []; if ($this->requiredFields && $this->viewMode === ViewMode::MODE_STAGES) { // fm fields check later foreach ($this->getAllowedFmTypes() as $fm) { $fmUp = mb_strtoupper($fm); $requiredFm[$fmUp] = true; $row[$fmUp] = ''; } // check each key foreach ($row as $fieldName => $fieldValue) { if ($returnCustomer && isset($this->exclusiveFieldsReturnCustomer[$fieldName])) { continue; } if ( isset($this->requiredFields[$fieldName]) && !$fieldValue && $fieldValue !== '0' && $fieldValue !== 0 && $fieldValue !== 0.0 ) { foreach ($this->requiredFields[$fieldName] as $stageId) { if (!isset($required[$stageId])) { $required[$stageId] = []; } $required[$stageId][] = $fieldName; } } } // special keys foreach ($specialReqKeys as $reqKeyOrig => $reqKey) { if( isset($this->requiredFields[$reqKey]) && $reqKey === 'CLIENT' && (!empty($row['COMPANY_ID']) || !empty($row['CONTACT_ID'])) ) { continue; } if ( isset($this->requiredFields[$reqKey]) && (!$row[$reqKeyOrig] || ($reqKeyOrig === 'OPPORTUNITY' && $row['OPPORTUNITY_ACCOUNT'] <= 0)) ) { foreach ($this->requiredFields[$reqKey] as $status) { if (!isset($required[$status])) { $required[$status] = []; } $required[$status][] = $reqKey; } } } } //add $columnId = $this->sanitizeString((string)$row[$this->getStatusKey()]); $rowId = $row['ID']; $result[$rowId] = [ 'id' => $rowId, 'name' => $this->sanitizeString($this->getItemTitle($row) ?: '#' . $rowId), 'link' => $row['LINK'] ?? str_replace($this->getPathMarkers(), $rowId, $path), 'columnId' => $columnId, 'columnColor' => $columns[$columnId]['color'] ?? '', 'price' => $row['PRICE'], 'price_formatted' => $row['PRICE_FORMATTED'], 'entity_price' => $row['OPPORTUNITY_VALUE'], 'currency' => $row['CURRENCY_ID'], 'entity_currency' => $row['ENTITY_CURRENCY_ID'], 'date' => $row['DATE_FORMATTED'], 'dateCreate' => $row['DATE_CREATE'] ?? '', 'contactId' => (int)$row['CONTACT_ID'], 'companyId' => (!empty($row['COMPANY_ID']) ? (int)$row['COMPANY_ID'] : null), 'contactType' => $row['CONTACT_TYPE'], 'modifyById' => ($row['MODIFY_BY_ID'] ?? 0), 'modifyByAvatar' => '', 'activityStageId' => ($row['ACTIVITY_STAGE_ID'] ?? null), 'activityShow' => 1, 'activityIncomingTotal' => 0, 'activityCounterTotal' => 0, 'activityProgress' => 0, 'activityTotal' => 0, 'activitiesByUser' => [], 'badges' => [], 'page' => $this->blockPage, 'fields' => $fields, 'return' => $returnCustomer, 'returnApproach' => (isset($row['IS_REPEATED_APPROACH']) && $row['IS_REPEATED_APPROACH'] === 'Y'), 'assignedBy' => $row['ASSIGNED_BY'], 'required' => $required, 'required_fm' => $requiredFm, 'sort' => $this->getEntity()->prepareItemSort($rows[$rowId]), 'lastActivity' => $lastActivityInfo[$row['ID']] ?? null, ]; $result[$rowId] = array_merge($result[$rowId], $this->prepareAdditionalFields($row)); $isRestricted = (!empty($restrictedItemIds) && in_array($row['ID'], $restrictedItemIds)); if ($isRestricted) { $result[$row['ID']]['updateRestrictionCallback'] = $restriction->prepareInfoHelperScript(); } if ($this->entity->hasClientFields()) { foreach ($this->getClientFields() as $clientField) { if (isset($row[$clientField]) && $row[$clientField]) { $result[$row['ID']][$clientField] = ( $isRestricted ? $displayOptions->getRestrictedValueHtmlReplacer() : $row[$clientField] ); } } } $isAutomationDebugItem = !empty($activeAutomationDebugEntityIds) && in_array($row['ID'], $activeAutomationDebugEntityIds) ; $result[$row['ID']]['isAutomationDebugItem'] = $isAutomationDebugItem; } if ($this->getEntity()->getSortSettings()->isUserSortSupported()) { $result = $this->sort($result); } return [ 'ITEMS' => $result, 'RESTRICTED_VALUE_CLICK_CALLBACK' => $restrictedValueClickCallback, ]; }