• Модуль: report
  • Путь к файлу: ~/bitrix/modules/report/lib/visualconstructor/controller/widget.php
  • Класс: BitrixReportVisualConstructorControllerWidget
  • Вызов: Widget::createWidgetByParams
private function createWidgetByParams($params)
{
	$widgetGid = $params['widgetId'];

	$viewController = ViewProvider::getViewByViewKey($params['widget'][$widgetGid]['configurations']['new']['view_type']);
	if (!$viewController)
	{
		$this->addError(new Error('No such view controller.'));
		return false;
	}

	global $USER;
	$userId = $USER->getId();
	if (!$userId)
	{
		$this->addError(new Error('Can't create widget because current user has not id'));
		return false;
	}

	$dashboardForUser = DashboardHelper::getDashboardByKeyForCurrentUser($params['boardId']);
	if (!$dashboardForUser)
	{
		$this->addError(new Error('Can't create widget because current user has not board to edit'));
		return false;
	}


	$isPattern = false;
	if (!empty($params['isPattern']))
	{
		$isPattern = $params['isPattern'] === 'on' ? true : false;
	}

	$categoryKey = !empty($params['categoryKey']) ? $params['categoryKey']: '';
	$widgetHandler = $viewController->buildWidgetHandlerForBoard($params['boardId']);


	$widgetPositions = array('cell_' . rand(999, 99999));

	try
	{
		$row = BitrixReportVisualConstructorHelperRow::getRowDefaultEntity(array(
			'cellIds' => $widgetPositions
		));
	}
	catch (ArgumentException $e)
	{
		$this->addError(new Error($e->getMessage()));
		return false;
	}

	$dashboardForUser->addRows($row);


	/** @var BitrixReportVisualConstructorEntityWidget $widget */
	$widget = $widgetHandler->getWidget();
	$widget->setCategoryKey($categoryKey);
	$widget->setWeight($widgetPositions[0]);
	$widget->setOwnerId($userId);
	$widget->setGId(Util::generateUserUniqueId());
	$row->addWidgets($widget);
	$dashboardForUser->save();


	$widgetGId = $params['widgetId'];
	$widgetConfigurations = $params['widget'][$widgetGId]['configurations'];
	$reportsConfigurationsFromForm = $params['widget'][$widgetGId]['reports'];

	$widgetHandler = $widget->getWidgetHandler();
	$this->setConfigurableEntityConfiguration($widget, $widgetHandler, $widgetConfigurations);
	//save report configurations
	foreach ($reportsConfigurationsFromForm as $reportId => $configurationFromForm)
	{
		$configuration = $configurationFromForm['configurations'];

		if (is_array($params['deletedReports']) && in_array($reportId, $params['deletedReports']))
		{
			continue;
		}

		if ($this->isReportPseudo($reportId))
		{
			$this->addReportToWidget($widget, $configuration);
		}
	}

	if ($isPattern)
	{
		BitrixReportVisualConstructorHelperWidget::saveWidgetAsCurrentUserPattern($widget, $widget->getCategoryKey());
	}

	return $widget;
}