• Модуль: report
  • Путь к файлу: ~/bitrix/modules/report/lib/visualconstructor/helper/widget.php
  • Класс: BitrixReportVisualConstructorHelperWidget
  • Вызов: Widget::constructPseudoWidgetByParams
static function constructPseudoWidgetByParams($params)
{
	if (!isset($params['viewType']))
	{
		throw new ArgumentException('viewType argument not exist');
	}

	if (!isset($params['widgetId']))
	{
		throw new ArgumentException('widgetId argument not exist');
	}

	if (!isset($params['boardId']))
	{
		throw new ArgumentException('boardId argument not exist');
	}

	if (!isset($params['categoryKey']) || $params['categoryKey'] === 'myWidgets')
	{
		$categoryKey = '';
	}
	else
	{
		$categoryKey = $params['categoryKey'];
	}

	$viewKey = $params['viewType'];
	$widgetGId = $params['widgetId'];
	$boardId = $params['boardId'];
	$widgetConfigurations = !empty($params['widget'][$widgetGId]['configurations']) ? $params['widget'][$widgetGId]['configurations'] : array();
	$reportsConfigurationsFromForm = !empty($params['widget'][$widgetGId]['reports']) ? $params['widget'][$widgetGId]['reports'] : array();

	$viewController = ViewProvider::getViewByViewKey($viewKey);
	$widgetHandler = $viewController->buildWidgetHandlerForBoard($boardId);
	$widget = $widgetHandler->getWidget();
	$widget->setCategoryKey($categoryKey);

	if (!empty($widgetConfigurations['old']))
	{
		foreach ($widgetConfigurations['old'] as $configurationGid => $configuration)
		{
			foreach ($configuration as $key => $value)
			{
				$widgetHandler->getFormElement($key)->setValue($value);
			}
		}
	}

	if (!empty($widgetConfigurations['new']))
	{
		foreach ($widgetConfigurations['new'] as $key => $value)
		{
			$widgetHandler->getFormElement($key)->setValue($value);
		}
	}

	foreach ($reportsConfigurationsFromForm as $reportId=> $report)
	{
		if (!empty($params['deletedReports']) && in_array($reportId, $params['deletedReports']))
		{
			continue;
		}

		if (!empty($report['configurations']['new']['reportHandler']))
		{
			/** @var BaseReport $reportHandler */
			$reportHandler = $viewController->getReportHandler($report['configurations']['new']['reportHandler'], $widgetHandler);
		}
		elseif (!empty($report['configurations']['old']))
		{
			foreach ($report['configurations']['old'] as $configuration)
			{
				foreach ($configuration as $key => $value)
				{
					if ($key === 'reportHandler')
					{
						/** @var BaseReport $reportHandler */
						$reportHandler = $viewController->getReportHandler($value, $widgetHandler);
						break 2;
					}
				}
			}
		}
		else
		{
			continue;
		}

		if (isset($reportHandler) && $reportHandler instanceof BaseReport)
		{
			if (!empty($report['configurations']['old']))
			{
				foreach ($report['configurations']['old'] as $configuration)
				{
					foreach ($configuration as $key => $value)
					{
						$reportHandler->getFormElement($key)->setValue($value);
					}
				}
			}

			if (!empty($report['configurations']['new']))
			{
				foreach ($report['configurations']['new'] as $key => $value)
				{
					$reportHandler->getFormElement($key)->setValue($value);
				}
			}

			$widgetHandler->addReportHandler($reportHandler);
			$reportHandler->getReport()->setConfigurations($reportHandler->getConfigurations());
			$reportHandler->getReport()->setWidget($widget);
		}
	}
	$widget->setConfigurations($widgetHandler->getConfigurations());
	$widget->setGId('pseudo_' . randString(4));
	return $widget;
}