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