setTitle(_('Scripts')) ->setControls((new CTag('nav', true, (new CList()) ->addItem(new CRedirectButton(_('Create script'), 'zabbix.php?action=script.edit')) )) ->setAttribute('aria-label', _('Content controls')) ) ->addItem((new CFilter()) ->setResetUrl((new CUrl('zabbix.php'))->setArgument('action', 'script.list')) ->setProfile($data['profileIdx']) ->setActiveTab($data['active_tab']) ->addFilterTab(_('Filter'), [ (new CFormList())->addRow(_('Name'), (new CTextBox('filter_name', $data['filter']['name'])) ->setWidth(ZBX_TEXTAREA_FILTER_SMALL_WIDTH) ->setAttribute('autofocus', 'autofocus') ), (new CFormList())->addRow(_('Scope'), (new CRadioButtonList('filter_scope', (int) $data['filter']['scope'])) ->addValue(_('Any'), -1) ->addValue(_('Action operation'), ZBX_SCRIPT_SCOPE_ACTION) ->addValue(_('Manual host action'), ZBX_SCRIPT_SCOPE_HOST) ->addValue(_('Manual event action'), ZBX_SCRIPT_SCOPE_EVENT) ->setModern(true) ) ]) ->addVar('action', 'script.list') ); $scriptsForm = (new CForm()) ->setName('scriptsForm') ->setId('scripts'); $url = (new CUrl('zabbix.php')) ->setArgument('action', 'script.list') ->getUrl(); $scriptsTable = (new CTableInfo()) ->setHeader([ (new CColHeader( (new CCheckBox('all_scripts')) ->onClick("checkAll('".$scriptsForm->getName()."', 'all_scripts', 'scriptids');") ))->addClass(ZBX_STYLE_CELL_WIDTH), make_sorting_header(_('Name'), 'name', $data['sort'], $data['sortorder'], $url), _('Scope'), _('Used in actions'), _('Type'), _('Execute on'), make_sorting_header(_('Commands'), 'command', $data['sort'], $data['sortorder'], $url), _('User group'), _('Host group'), _('Host access') ]); foreach ($data['scripts'] as $script) { $actions = []; switch ($script['scope']) { case ZBX_SCRIPT_SCOPE_ACTION: $scope = _('Action operation'); if ($script['actions']) { $i = 0; foreach ($script['actions'] as $action) { $i++; if ($i > $data['config']['max_in_table']) { $actions[] = [' ', HELLIP()]; break; } if ($actions) { $actions[] = ', '; } $has_access = $action['eventsource'] == EVENT_SOURCE_SERVICE ? CWebUser::checkAccess(CRoleHelper::UI_SERVICES_ACTIONS) : CWebUser::checkAccess(CRoleHelper::UI_CONFIGURATION_ACTIONS); if ($has_access) { $url = (new CUrl('actionconf.php')) ->setArgument('eventsource', $action['eventsource']) ->setArgument('form', 'update') ->setArgument('actionid', $action['actionid']); $actions[] = (new CLink($action['name'], $url)) ->addClass(ZBX_STYLE_LINK_ALT) ->addClass(ZBX_STYLE_GREY); } else { $actions[] = (new CSpan($action['name']))->addClass(ZBX_STYLE_GREY); } } } break; case ZBX_SCRIPT_SCOPE_HOST: $scope = _('Manual host action'); break; case ZBX_SCRIPT_SCOPE_EVENT: $scope = _('Manual event action'); break; } switch ($script['type']) { case ZBX_SCRIPT_TYPE_CUSTOM_SCRIPT: $type = _('Script'); break; case ZBX_SCRIPT_TYPE_IPMI: $type = _('IPMI'); break; case ZBX_SCRIPT_TYPE_SSH: $type = _('SSH'); break; case ZBX_SCRIPT_TYPE_TELNET: $type = _('Telnet'); break; case ZBX_SCRIPT_TYPE_WEBHOOK: $type = _('Webhook'); break; } if ($script['type'] == ZBX_SCRIPT_TYPE_CUSTOM_SCRIPT) { switch ($script['execute_on']) { case ZBX_SCRIPT_EXECUTE_ON_AGENT: $execute_on = _('Agent'); break; case ZBX_SCRIPT_EXECUTE_ON_SERVER: $execute_on = _('Server'); break; case ZBX_SCRIPT_EXECUTE_ON_PROXY: $execute_on = _('Server (proxy)'); break; } } else { $execute_on = ''; } $link = new CLink($script['name'], (new CUrl('zabbix.php')) ->setArgument('action', 'script.edit') ->setArgument('scriptid', $script['scriptid']) ); $scriptsTable->addRow([ new CCheckBox('scriptids['.$script['scriptid'].']', $script['scriptid']), (new CCol($script['menu_path'] === '' ? $link : [$script['menu_path'].'/', $link]))->addClass(ZBX_STYLE_NOWRAP), $scope, $actions, $type, $execute_on, (new CCol(zbx_nl2br($script['command'])))->addClass(ZBX_STYLE_MONOSPACE_FONT), $script['userGroupName'] === null ? _('All') : $script['userGroupName'], $script['hostGroupName'] === null ? _('All') : $script['hostGroupName'], $script['host_access'] == PERM_READ_WRITE ? _('Write') : _('Read') ]); } // append table to form $scriptsForm->addItem([ $scriptsTable, $data['paging'], new CActionButtonList('action', 'scriptids', [ 'script.delete' => ['name' => _('Delete'), 'confirm' => _('Delete selected scripts?')] ], 'script') ]); // append form to widget $widget ->addItem($scriptsForm) ->show();