• Модуль: report
  • Путь к файлу: ~/bitrix/modules/report/lib/visualconstructor/controller/widget.php
  • Класс: BitrixReportVisualConstructorControllerWidget
  • Вызов: Widget::saveConfigurationFormAction
public function saveConfigurationFormAction($formParams)
{
	if (!empty($formParams['boardId']))
	{
		$boardKey = $formParams['boardId'];
	}
	else
	{
		$this->addError(new Error('Argument boardId not exist'));
		return false;
	}


	$dashboardForUser = DashboardHelper::getDashboardByKeyForCurrentUser($boardKey);

	if (!$dashboardForUser)
	{
		$this->addError(new Error('Can't save configuration because current user has not dashboard to edit'));
		return false;
	}

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

	$categoryKey = !empty($formParams['categoryKey']) ? $formParams['categoryKey']: '';

	$widgetGId = $formParams['widgetId'];
	$originalWidgetGId = $formParams['originalWidgetGId'];
	$widgetConfigurations = $formParams['widget'][$widgetGId]['configurations'];
	$reportsConfigurationsFromForm = $formParams['widget'][$widgetGId]['reports'];
	$deletedReportIds = !empty($formParams['deletedReports']) ? $formParams['deletedReports'] : array();


	if ($widgetGId !== $originalWidgetGId)
	{
		$widget = BitrixReportVisualConstructorEntityWidget::getCurrentUserWidgetByGId($originalWidgetGId);
	}
	else
	{
		$widget = BitrixReportVisualConstructorEntityWidget::getCurrentUserWidgetByGId($widgetGId);
	}

	if (!$widget)
	{
		$this->addError(new Error('Can't save configuration because widget with this id not exist'));
		return false;
	}
	else
	{
		if ($widgetGId !== $originalWidgetGId)
		{
			$newWidget = $this->createWidgetByParams($formParams);
			$newWidget->setWeight($widget->getWeight());
			$newWidget->setGId($widget->getGId());
			$newWidget->setRowId((int)$widget->getRowId());
			$newWidget->setCategoryKey($widget->getCategoryKey());
			$newWidget->save();

			$widget->delete();
			return array('widgetId' => $newWidget->getGId());
		}
		else
		{
			$widget->loadAttribute('reports');
			$widgetHandler = $widget->getWidgetHandler();
			$this->setConfigurableEntityConfiguration($widget, $widgetHandler, $widgetConfigurations);
			$widget->setViewKey($widget->getWidgetHandler()->getConfiguration('view_type')->getValue());
			$widget->setBoardId($boardKey);
			$widget->setCategoryKey($categoryKey);
			$widget->save();
		}
	}


	$widgetReports = $widget->getReportsGidKeyed();


	//delete reports, which mark as deleted in form
	foreach ($deletedReportIds as $deletedReportId)
	{
		if (!empty($widgetReports[$deletedReportId]))
		{
			$widgetReports[$deletedReportId]->delete();
		}
		unset($reportsConfigurationsFromForm[$deletedReportId]);
	}

	//save report configurations
	foreach ($reportsConfigurationsFromForm as $reportId => $configurationFromForm)
	{
		$configuration = $configurationFromForm['configurations'];

		if ($this->isReportPseudo($reportId))
		{
			$this->addReportToWidget($widget, $configuration);
		}
		else
		{
			$report = $widgetReports[$reportId];
			$reportHandler = $report->getReportHandler();
			$this->setConfigurableEntityConfiguration($report, $reportHandler, $configuration);
		}
	}

	$widget->save();

	if ($isPattern)
	{
		BitrixReportVisualConstructorHelperWidget::saveWidgetAsCurrentUserPattern($widget);
	}

	return array('widgetId' => $widget->getGId());
}