- Модуль: 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());
}