addValidationRules([ 'dynamic_hostid' => 'db hosts.hostid' ]); } protected function doAction(): void { $error = null; // Editing template dashboard? if ($this->isTemplateDashboard() && !$this->hasInput('dynamic_hostid')) { $error = _('No data.'); } else { $is_dynamic_item = $this->isTemplateDashboard() || $this->fields_values['dynamic'] == CWidget::DYNAMIC_ITEM; $dynamic_hostid = $this->getInput('dynamic_hostid', '0'); if ($is_dynamic_item && $dynamic_hostid == 0) { $error = _('No host selected.'); } else { $resolved_url = CMacrosResolverHelper::resolveWidgetURL([ 'config' => $is_dynamic_item ? 'widgetURL' : 'widgetURLUser', 'url' => $this->fields_values['url'], 'hostid' => $is_dynamic_item ? $dynamic_hostid : '0' ]); if ($resolved_url) { $this->fields_values['url'] = $resolved_url; } } if (!$error && !CHtmlUrlValidator::validate($this->fields_values['url'], ['allow_user_macro' => false])) { $error = _s('Provided URL "%1$s" is invalid.', $this->fields_values['url']); } } $this->setResponse(new CControllerResponseData([ 'name' => $this->getInput('name', $this->widget->getDefaultName()), 'url' => [ 'url' => $this->fields_values['url'], 'error' => $error ], 'user' => [ 'debug_mode' => $this->getDebugMode() ], 'config' => [ 'iframe_sandboxing_enabled' => CSettingsHelper::get(CSettingsHelper::IFRAME_SANDBOXING_ENABLED), 'iframe_sandboxing_exceptions' => CSettingsHelper::get(CSettingsHelper::IFRAME_SANDBOXING_EXCEPTIONS) ] ])); } }