diff --git a/pandora_console/godmode/servers/plugin.php b/pandora_console/godmode/servers/plugin.php new file mode 100644 index 0000000000..08c29b92e2 --- /dev/null +++ b/pandora_console/godmode/servers/plugin.php @@ -0,0 +1,1210 @@ + $id_plugin]); + $preload = io_safe_output($description); + $preload = str_replace("\n", '
', $preload); + + echo $preload; + return; + } + + if ($get_list_modules_and_component_locked_plugin) { + $id_plugin = (int) get_parameter('id_plugin', 0); + + $network_components = db_get_all_rows_filter( + 'tnetwork_component', + ['id_plugin' => $id_plugin] + ); + if (empty($network_components)) { + $network_components = []; + } + + $modules = db_get_all_rows_filter( + 'tagente_modulo', + [ + 'delete_pending' => 0, + 'id_plugin' => $id_plugin, + ] + ); + if (empty($modules)) { + $modules = []; + } + + $table = null; + $table->width = '100%'; + $table->head[0] = __('Network Components'); + $table->data = []; + foreach ($network_components as $net_comp) { + $table->data[] = [$net_comp['name']]; + } + + if (!empty($table->data)) { + html_print_table($table); + + echo '
'; + } + + $table = null; + $table->width = '100%'; + $table->head[0] = __('Agent'); + $table->head[1] = __('Module'); + foreach ($modules as $mod) { + $agent_name = ''.modules_get_agentmodule_agent_name( + $mod['id_agente_modulo'] + ).''; + + + $table->data[] = [ + $agent_name, + $mod['nombre'], + ]; + } + + if (!empty($table->data)) { + html_print_table($table); + } + + return; + } +} + + +require_once $config['homedir'].'/include/functions_filemanager.php'; + +check_login(); + +if (! check_acl($config['id_user'], 0, 'PM')) { + db_pandora_audit( + 'ACL Violation', + 'Trying to access Plugin Management' + ); + include 'general/noaccess.php'; + return; +} + +enterprise_include_once('meta/include/functions_components_meta.php'); + +$view = get_parameter('view', ''); +$create = get_parameter('create', ''); +$filemanager = (bool) get_parameter('filemanager', false); +$edit_file = get_parameter('edit_file', false); +$update_file = get_parameter('update_file', false); +$plugin_command = get_parameter('plugin_command', ''); +$tab = get_parameter('tab', ''); +$deploy_plugin = get_parameter('deploy_plugin', 0); + +if ($view != '') { + $form_id = $view; + $plugin = db_get_row('tplugin', 'id', $form_id); + $form_name = $plugin['name']; + $form_description = $plugin['description']; + $form_max_timeout = $plugin['max_timeout']; + $form_max_retries = $plugin['max_retries']; + if (empty($plugin_command)) { + $form_execute = $plugin['execute']; + } else { + $form_execute = $plugin_command; + } + + $form_plugin_type = $plugin['plugin_type']; + $macros = $plugin['macros']; + $parameters = $plugin['parameters']; +} + +if ($create != '') { + $form_id = 0; + $form_name = ''; + $form_description = ''; + $form_max_timeout = 15; + $form_max_retries = 1; + $form_execute = $plugin_command; + $form_plugin_type = 0; + $form_parameters = ''; + $macros = ''; + $parameters = ''; +} + +// END LOAD VALUES +// ===================================================================== +// INIT FILEMANAGER +// ===================================================================== +if ($filemanager) { + if ($edit_file) { + $location_file = get_parameter('location_file', ''); + $filename = array_pop(explode('/', $location_file)); + $file = file_get_contents($location_file); + echo '

'.__('Edit file').' '.$filename.'

'; + // echo "" . __('Back to file explorer') . ""; + echo "
"; + // html_print_input_hidden('location_file', $locationFile); + echo ""; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ""; + echo ''; + echo ''; + echo '
'.__('Edit').'
'; + echo "'; + echo '
'; + html_print_input_hidden('location_file', $location_file); + + echo __('Compatibility mode').':'; + $options = [ + 'unix' => 'Unix', + 'windows' => 'Windows', + ]; + html_print_select($options, 'compatibility', $compatibility); + echo " "; + echo '
'; + echo '
'; + } else { + if ($update_file) { + $location_file = get_parameter('location_file', ''); + $contentFile = io_safe_output(get_parameter('content_file', '')); + $compatibility = get_parameter('compatibility', 'unix'); + $is_win_compatible = strpos($contentFile, "\r\n"); + // If is win compatible and the compatibility must be unix + if ($is_win_compatible !== false && $compatibility == 'unix') { + $contentFile = str_replace("\r\n", "\n", $contentFile); + } else if ($is_win_compatible === false && $compatibility == 'windows') { + // If is unix compatible and the compatibility must be win + $contentFile = str_replace("\n", "\r\n", $contentFile); + } + + $result = file_put_contents($location_file, $contentFile); + } + + $id_plugin = (int) get_parameter('id_plugin', 0); + + // Add custom directories here + $fallback_directory = 'attachment/plugin'; + + $directory = (string) get_parameter('directory', $fallback_directory); + $directory = str_replace('\\', '/', $directory); + + // A miminal security check to avoid directory traversal + if (preg_match('/\.\./', $directory)) { + $directory = $fallback_directory; + } + + if (preg_match('/^\//', $directory)) { + $directory = $fallback_directory; + } + + if (preg_match('/^manager/', $directory)) { + $directory = $fallback_directory; + } + + $banned_directories['include'] = true; + $banned_directories['godmode'] = true; + $banned_directories['operation'] = true; + $banned_directories['reporting'] = true; + $banned_directories['general'] = true; + $banned_directories[ENTERPRISE_DIR] = true; + + if (isset($banned_directories[$directory])) { + $directory = $fallback_directory; + } + + $real_directory = realpath($config['homedir'].'/'.$directory); + + echo '

'.__('Index of %s', $directory).'

'; + + $chunck_url = '&view='.$id_plugin; + if ($id_plugin == 0) { + $chunck_url = '&create=1'; + } + + $homedir_filemanager = isset($config['homedir_filemanager']) ? $config['homedir_filemanager'] : false; + filemanager_file_explorer( + $real_directory, + $directory, + 'index.php?sec=gservers&sec2=godmode/servers/plugin&filemanager=1&id_plugin='.$id_plugin, + $fallback_directory, + true, + false, + 'index.php?sec=gservers&sec2=godmode/servers/plugin'.$chunck_url.'&plugin_command=[FILE_FULLPATH]&id_plugin='.$id_plugin, + true, + 0775, + $homedir_filemanager + ); + } + + return; +} + +// ===================================================================== +// END FILEMANAGER +// ===================================================================== +// ===================================================================== +// SHOW THE FORM +// ===================================================================== +$sec = 'gservers'; + +if (($create != '') || ($view != '')) { + enterprise_hook('open_meta_frame'); + + if (defined('METACONSOLE')) { + components_meta_print_header(); + $sec = 'advanced'; + $management_allowed = is_management_allowed(); + if (!$management_allowed) { + ui_print_warning_message(__('To manage plugin you must activate centralized management')); + } + } else { + if ($create != '') { + ui_print_page_header( + __('Plugin creation'), + 'images/gm_servers.png', + false, + 'plugin_definition', + true + ); + } else { + ui_print_page_header( + __('Plugin update'), + 'images/gm_servers.png', + false, + 'plugin_definition', + true + ); + } + + $management_allowed = !is_central_policies_on_node(); + if (!$management_allowed) { + ui_print_warning_message( + __( + 'This console is not manager of this environment, + please manage this feature from centralized manager console (Metaconsole).' + ) + ); + } + } + + + if ($create == '') { + $plugin_id = get_parameter('view', ''); + echo "
"; + } else { + echo ""; + } + + $table = new stdClass(); + $table->width = '100%'; + $table->id = 'table-form'; + $table->class = 'databox filters'; + $table->style = []; + $table->style[0] = 'font-weight: bold'; + $table->style[2] = 'font-weight: bold'; + $table->data = []; + + $data = []; + $data[0] = __('Name'); + $data[1] = ''; + $table->colspan['plugin_name'][1] = 3; + $table->data['plugin_name'] = $data; + + $data = []; + $data[0] = __('Plugin type'); + $fields[0] = __('Standard'); + $fields[1] = __('Nagios'); + $data[1] = html_print_select($fields, 'form_plugin_type', $form_plugin_type, '', '', 0, true); + $table->data['plugin_type'] = $data; + $table->colspan['plugin_type'][1] = 3; + + $data[0] = __('Max. timeout').ui_print_help_tip(__('This value only will be applied if is minor than the server general configuration plugin timeout').'.

'.__('If you set a 0 seconds timeout, the server plugin timeout will be used'), true); + $data[1] = html_print_extended_select_for_time('form_max_timeout', $form_max_timeout, '', '', '0', false, true); + + $table->data['plugin_timeout'] = $data; + + $data = []; + $data[0] = __('Description'); + $data[1] = ''; + $table->colspan['plugin_desc'][1] = 3; + $table->data['plugin_desc'] = $data; + + // if (!defined("METACONSOLE")) { + // echo '
'; + // echo ''; + } + + enterprise_hook('close_meta_frame'); +} else { + enterprise_hook('open_meta_frame'); + + if (defined('METACONSOLE')) { + components_meta_print_header(); + $sec = 'advanced'; + $management_allowed = is_management_allowed(); + if (!$management_allowed) { + ui_print_warning_message(__('To manage plugin you must activate centralized management')); + } + + if (!$config['metaconsole_deploy_plugin_server'] && $management_allowed) { + $deploy_plugin_server = true; + + echo ''; + ?> + + '; + echo __('You need to create your own plugins with Windows compatibility'); + echo ''; + } + } + + + // Update plugin. + if (isset($_GET['update_plugin'])) { + $plugin_id = get_parameter('update_plugin', 0); + $plugin_name = get_parameter('form_name', ''); + $plugin_description = get_parameter('form_description', ''); + $plugin_max_timeout = get_parameter('form_max_timeout', ''); + $plugin_execute = get_parameter('form_execute', ''); + $plugin_plugin_type = get_parameter('form_plugin_type', '0'); + $parameters = get_parameter('form_parameters', ''); + + // Get macros + $i = 1; + $macros = []; + while (1) { + $macro = (string) get_parameter('field'.$i.'_macro'); + if ($macro == '') { + break; + } + + $desc = (string) get_parameter('field'.$i.'_desc'); + $help = (string) get_parameter('field'.$i.'_help'); + $value = (string) get_parameter('field'.$i.'_value'); + $hide = get_parameter('field'.$i.'_hide'); + + $macros[$i]['macro'] = $macro; + $macros[$i]['desc'] = $desc; + $macros[$i]['help'] = $help; + if ($hide == 1) { + $macros[$i]['value'] = io_input_password($value); + } else { + $macros[$i]['value'] = $value; + } + + $macros[$i]['hide'] = $hide; + + $i++; + } + + $macros = io_json_mb_encode($macros); + + $values = [ + 'name' => $plugin_name, + 'description' => $plugin_description, + 'max_timeout' => $plugin_max_timeout, + 'execute' => $plugin_execute, + 'plugin_type' => $plugin_plugin_type, + 'parameters' => $parameters, + 'macros' => $macros, + ]; + + $result = false; + if ($values['name'] != '' && $values['execute'] != '') { + $result = db_process_sql_update( + 'tplugin', + $values, + ['id' => $plugin_id] + ); + } + + if (! $result) { + ui_print_error_message(__('Problem updating plugin')); + } else { + ui_print_success_message(__('Plugin updated successfully')); + } + } + + // Create plugin + if (isset($_GET['create_plugin'])) { + $plugin_name = get_parameter('form_name', ''); + $plugin_description = get_parameter('form_description', ''); + $plugin_max_timeout = get_parameter('form_max_timeout', ''); + $plugin_execute = get_parameter('form_execute', ''); + $plugin_plugin_type = get_parameter('form_plugin_type', '0'); + $plugin_parameters = get_parameter('form_parameters', ''); + + // Get macros + $i = 1; + $macros = []; + while (1) { + $macro = (string) get_parameter('field'.$i.'_macro'); + if ($macro == '') { + break; + } + + $desc = (string) get_parameter('field'.$i.'_desc'); + $help = (string) get_parameter('field'.$i.'_help'); + $value = (string) get_parameter('field'.$i.'_value'); + $hide = get_parameter('field'.$i.'_hide'); + + $macros[$i]['macro'] = $macro; + $macros[$i]['desc'] = $desc; + $macros[$i]['help'] = $help; + if ($hide == 1) { + $macros[$i]['value'] = io_input_password($value); + } else { + $macros[$i]['value'] = $value; + } + + $macros[$i]['hide'] = $hide; + $i++; + } + + $macros = io_json_mb_encode($macros); + + $values = [ + 'name' => $plugin_name, + 'description' => $plugin_description, + 'max_timeout' => $plugin_max_timeout, + 'execute' => $plugin_execute, + 'plugin_type' => $plugin_plugin_type, + 'parameters' => $plugin_parameters, + 'macros' => $macros, + ]; + + $result = false; + if ($values['name'] != '' && $values['execute'] != '') { + $result = db_process_sql_insert('tplugin', $values); + } + + if (! $result) { + ui_print_error_message(__('Problem creating plugin')); + } else { + ui_print_success_message(__('Plugin created successfully')); + } + } + + if (isset($_GET['kill_plugin'])) { + // if delete alert + $plugin_id = get_parameter('kill_plugin', 0); + + $result = db_process_sql_delete('tplugin', ['id' => $plugin_id]); + + if (!is_metaconsole()) { + if (!$result) { + ui_print_error_message(__('Problem deleting plugin')); + } else { + ui_print_success_message(__('Plugin deleted successfully')); + } + } + + + if ($plugin_id != 0) { + // Delete all the modules with this plugin + $plugin_modules = db_get_all_rows_filter( + 'tagente_modulo', + ['id_plugin' => $plugin_id] + ); + + if (empty($plugin_modules)) { + $plugin_modules = []; + } + + foreach ($plugin_modules as $pm) { + modules_delete_agent_module($pm['id_agente_modulo']); + } + + if (enterprise_installed()) { + enterprise_include_once('include/functions_policies.php'); + $policies_ids = db_get_all_rows_filter('tpolicy_modules', ['id_plugin' => $plugin_id]); + foreach ($policies_ids as $policies_id) { + policies_change_delete_pending_module($policies_id['id']); + } + } + + if (is_metaconsole()) { + enterprise_include_once('include/functions_plugins.php'); + $result = plugins_delete_plugin($plugin_id); + if (!$result) { + ui_print_error_message(__('Problem deleting plugin')); + } else { + ui_print_success_message(__('Plugin deleted successfully')); + } + } + } + } + + if ($deploy_plugin) { + if (is_metaconsole()) { + enterprise_include_once('include/functions_plugins.php'); + $result = plugins_deploy_plugin($deploy_plugin); + if (!$result) { + ui_print_error_message(__('Problem deploying plugin')); + } else { + ui_print_success_message(__('Plugin deployed successfully')); + } + } + } + + if ($deploy_plugin_server) { + $setup = db_get_all_rows_in_table('tmetaconsole_setup'); + // recorremos todos los nodos. + foreach ($setup as $key => $value) { + // Obtenemos los plugins de la meta. + $all_plugin_meta = db_get_all_rows_sql('SELECT SQL_NO_CACHE * FROM tplugin', false, false); + // Conectamos con el nodo. + if (metaconsole_connect($value) == NOERR) { + $values = []; + // Obtenemos los plugin del nodo. + $node_plugin_server = db_get_all_rows_sql('SELECT SQL_NO_CACHE * FROM tplugin', false, false); + foreach ($node_plugin_server as $key2 => $plugin) { + // Comprobamos si el id esta meta y nodo al mismo tiempo. + $key_exists = array_search($plugin['id'], array_column($all_plugin_meta, 'id')); + if ($key_exists !== false) { + // Si el plugin tiene el mismo id pero diferentes datos. + if ($all_plugin_meta[$key_exists] != $plugin) { + $old_id = $plugin['id']; + $new_id = ($plugin['id'] + (1000 * $value['id'])); + + // El plugin del nodo pasa a tener otro id y otro nombre. + $plugin['id'] = $new_id; + $plugin['name'] = $plugin['name'].'_'.$value['server_name']; + $result_update = db_process_sql_update( + 'tplugin', + [ + 'id' => $new_id, + 'name' => $plugin['name'], + ], + ['id' => $old_id] + ); + + if ($result_update) { + db_process_sql_update( + 'tagente_modulo', + ['id_plugin' => $new_id], + ['id_plugin' => $old_id] + ); + + db_process_sql_update( + 'tnetwork_component', + ['id_plugin' => $new_id], + ['id_plugin' => $old_id] + ); + + db_process_sql_update( + 'tpolicy_modules', + ['id_plugin' => $new_id], + ['id_plugin' => $old_id] + ); + } + + // New plugins to insert in the metaconsole. + $values[$plugin['id']] = $plugin; + } + } else { + // Exists in the node, but does not exist in the metaconsole. + $values[$plugin['id']] = $plugin; + } + } + + // Restore to metaconsole. + metaconsole_restore_db(); + + // Insert in metaconsole. + if (!empty($values)) { + foreach ($values as $key2 => $val) { + // Insert into metaconsole. + $result_insert = db_process_sql_insert('tplugin', $val); + } + } + } + } + + $all_plugin_meta = db_get_all_rows_sql('SELECT SQL_NO_CACHE * FROM tplugin', false, false); + + foreach ($setup as $key => $value) { + if (metaconsole_connect($value) == NOERR) { + $all_plugin_node = db_get_all_rows_sql('SELECT SQL_NO_CACHE * FROM tplugin', false, false); + + $array_diff = array_diff(array_column($all_plugin_meta, 'id'), array_column($all_plugin_node, 'id')); + foreach ($array_diff as $key2 => $pluginid) { + $other = []; + $plugin_meta = $all_plugin_meta[$key2]; + + unset($plugin_meta['id']); + $other['name'] = urlencode($plugin_meta['name']); + $other['description'] = urlencode($plugin_meta['description']); + $other['max_timeout'] = $plugin_meta['max_timeout']; + $other['max_retries'] = $plugin_meta['max_retries']; + $other['execute'] = urlencode($plugin_meta['execute']); + $other['net_dst_opt'] = $plugin_meta['net_dst_opt']; + $other['net_port_opt'] = $plugin_meta['net_port_opt']; + $other['user_opt'] = $plugin_meta['user_opt']; + $other['pass_opt'] = $plugin_meta['pass_opt']; + $other['plugin_type'] = $plugin_meta['plugin_type']; + $other['macros'] = urlencode($plugin_meta['macros']); + $other['parameters'] = urlencode($plugin_meta['parameters']); + $other = implode('%7C', $other); + + $auth_token = json_decode($value['auth_token']); + $url = $value['server_url'].'include/api.php?op=set&op2=push_plugin'.'&id='.$pluginid.'&other_mode=url_encode_separator_%7C&other='.$other."&apipass=$auth_token->api_password"."&user=$auth_token->console_user&pass=$auth_token->console_password"; + $file_path = realpath($plugin_meta['execute']); + $post = ''; + if (file_exists($file_path)) { + $post = ['file' => curl_file_create($file_path)]; + } + + $curlObj = curl_init(); + curl_setopt($curlObj, CURLOPT_URL, $url); + curl_setopt($curlObj, CURLOPT_POST, 1); + curl_setopt($curlObj, CURLOPT_POSTFIELDS, $post); + curl_setopt($curlObj, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($curlObj, CURLOPT_SSL_VERIFYPEER, false); + + $api_result = curl_exec($curlObj); + curl_close($curlObj); + } + } + + // restore to metaconsole + metaconsole_restore_db(); + } + } + + // If not edition or insert, then list available plugins + $rows = db_get_all_rows_sql('SELECT * FROM tplugin ORDER BY name'); + + if ($rows !== false) { + if (defined('METACONSOLE')) { + echo '
'; + // } + $table->width = '100%'; + $table->class = 'databox filters'; + + if (defined('METACONSOLE')) { + $table->head[0] = __('General'); + $table->head_colspan[0] = 4; + $table->headstyle[0] = 'text-align: center'; + html_print_table($table); + } else { + echo '
'.__('General').''; + html_print_table($table); + echo '
'; + } + + $table->data = []; + + $plugin_id = get_parameter('view', 0); + + $locked = true; + + // If we have plugin id (update mode) and this plugin used by any module or component + // The command configuration will be locked + if ($plugin_id > 0) { + $modules_using_plugin = db_get_value_filter('count(*)', 'tagente_modulo', ['delete_pending' => 0, 'id_plugin' => $plugin_id]); + $components_using_plugin = db_get_value_filter('count(*)', 'tnetwork_component', ['id_plugin' => $plugin_id]); + if (($components_using_plugin + $modules_using_plugin) == 0) { + $locked = false; + } + } else { + $locked = false; + } + + $disabled = ''; + if ($locked) { + $disabled = 'readonly="readonly"'; + } + + $data = []; + $data[0] = __('Plugin command'); + $data[1] = ''; + if ($locked) { + $data[1] .= html_print_image('images/lock.png', true, ['class' => 'command_advanced_conf lock']); + } + + $data[1] .= ' '; + $data[1] .= html_print_image('images/file.png', true); + $data[1] .= ''; + $table->data['plugin_command'] = $data; + + $data = []; + $data[0] = __('Plug-in parameters').ui_print_help_icon('plugin_parameters', true); + $data[1] = ''; + if ($locked) { + $data[1] .= html_print_image('images/lock.png', true, ['class' => 'command_advanced_conf lock']); + } + + $table->data['plugin_parameters'] = $data; + + $data = []; + $data[0] = __('Command preview'); + $data[1] = '
'; + $table->data['plugin_preview'] = $data; + + $table->width = '100%'; + $table->class = 'databox filters'; + if (defined('METACONSOLE')) { + $table->head[0] = __('Command'); + $table->head_colspan[0] = 4; + $table->headstyle[0] = 'text-align: center'; + html_print_table($table); + } else { + echo '
'.__('Command').''; + html_print_table($table); + echo '
'; + } + + $data = []; + + $table->data = []; + + $macros = json_decode($macros, true); + + // The next row number is plugin_9 + $next_name_number = 9; + $i = 1; + while (1) { + // Always print at least one macro + if ((!isset($macros[$i]) || $macros[$i]['desc'] == '') && $i > 1) { + break; + } + + $macro_desc_name = 'field'.$i.'_desc'; + $macro_desc_value = ''; + $macro_help_name = 'field'.$i.'_help'; + $macro_help_value = ''; + $macro_value_name = 'field'.$i.'_value'; + $macro_value_value = ''; + $macro_name_name = 'field'.$i.'_macro'; + $macro_name = '_field'.$i.'_'; + $macro_hide_value_name = 'field'.$i.'_hide'; + $macro_hide_value_value = 0; + + if (isset($macros[$i]['desc'])) { + $macro_desc_value = $macros[$i]['desc']; + } + + if (isset($macros[$i]['help'])) { + $macro_help_value = $macros[$i]['help']; + } + + if (isset($macros[$i]['value'])) { + $macro_value_value = $macros[$i]['value']; + } + + if (isset($macros[$i]['hide'])) { + $macro_hide_value_value = $macros[$i]['hide']; + + // Decrypt hidden macros. + $macro_value_value = io_output_password($macro_value_value); + } + + $datam = []; + $datam[0] = __('Description')." ($macro_name)"; + $datam[0] .= html_print_input_hidden($macro_name_name, $macro_name, true); + $datam[1] = html_print_input_text_extended($macro_desc_name, $macro_desc_value, 'text-'.$macro_desc_name, '', 30, 255, $locked, '', "class='command_macro'", true); + if ($locked) { + $datam[1] .= html_print_image('images/lock.png', true, ['class' => 'command_macro lock']); + } + + $datam[2] = __('Default value')." ($macro_name)"; + $datam[3] = html_print_input_text_extended($macro_value_name, $macro_value_value, 'text-'.$macro_value_name, '', 30, 255, $locked, '', "class='command_component command_macro'", true); + if ($locked) { + $datam[3] .= html_print_image('images/lock.png', true, ['class' => 'command_macro lock']); + } + + $table->data['plugin_'.$next_name_number] = $datam; + + $next_name_number++; + + $table->colspan['plugin_'.$next_name_number][1] = 3; + + $datam = []; + $datam[0] = __('Hide value').ui_print_help_tip(__('This field will show up as dots like a password'), true); + $datam[1] = html_print_checkbox_extended($macro_hide_value_name, 1, $macro_hide_value_value, 0, '', ['class' => 'command_macro'], true, 'checkbox-'.$macro_hide_value_name); + + $table->data['plugin_'.$next_name_number] = $datam; + $next_name_number++; + + $table->colspan['plugin_'.$next_name_number][1] = 3; + + $datam = []; + $datam[0] = __('Help')." ($macro_name)


"; + $tadisabled = $locked === true ? ' disabled' : ''; + $datam[1] = html_print_textarea($macro_help_name, 6, 100, $macro_help_value, 'class="command_macro" style="width: 97%;"'.$tadisabled, true); + + if ($locked) { + $datam[1] .= html_print_image('images/lock.png', true, ['class' => 'command_macro lock']); + } + + $datam[1] .= '


'; + + $table->data['plugin_'.$next_name_number] = $datam; + $next_name_number++; + $i++; + } + + // Add/Delete buttons + $datam = []; + $datam[0] = ''.''.__('Add macro').''.' '.html_print_image('images/add.png', true).''; + $datam[0] .= ''; + $datam[0] .= ''; + + if (!$locked) { + $delete_macro_style = ''; + if ($i <= 2) { + $delete_macro_style = 'display:none;'; + } + + $datam[2] = ''; + + $table->colspan['plugin_action'][0] = 2; + $table->colspan['plugin_action'][2] = 2; + } else { + $table->colspan['plugin_action'][0] = 4; + } + + $table->rowstyle['plugin_action'] = 'text-align:center'; + $table->data['plugin_action'] = $datam; + + + if (defined('METACONSOLE')) { + $table->head[0] = __('Parameters macros'); + $table->head_colspan[0] = 4; + $table->headstyle[0] = 'text-align: center'; + html_print_table($table); + } else { + echo '
'.''.__('Parameters macros').ui_print_help_icon('macros', true).''; + html_print_table($table); + echo '
'; + } + + echo ''; + + echo '
'; + + if ($create != '') { + echo ""; + } else { + echo ""; + } + + echo '
'; + + if (defined('METACONSOLE')) { + echo '
'; + } else { + echo '
'; + } + + echo ''; + echo ''; + echo ''; + echo ''; + if ($management_allowed) { + echo "'; + } + + echo ''; + + $color = 0; + + foreach ($rows as $row) { + if ($color == 1) { + $tdcolor = 'datos'; + $color = 0; + } else { + $tdcolor = 'datos2'; + $color = 1; + } + + echo ''; + echo "'; + echo "'; + if ($management_allowed) { + echo "'; + } + + echo ''; + } + + echo '
'.__('Name').''.__('Type').''.__('Command').'".''.__('Op.').''.'
"; + if ($management_allowed) { + echo ""; + } + + echo $row['name']; + echo '"; + if ($row['plugin_type'] == 0) { + echo __('Standard'); + } else { + echo __('Nagios'); + } + + echo ""; + echo $row['execute']; + echo '"; + + // Show it is locket + $modules_using_plugin = db_get_value_filter( + 'count(*)', + 'tagente_modulo', + [ + 'delete_pending' => 0, + 'id_plugin' => $row['id'], + ] + ); + $components_using_plugin = db_get_value_filter( + 'count(*)', + 'tnetwork_component', + ['id_plugin' => $row['id']] + ); + if (($components_using_plugin + $modules_using_plugin) > 0) { + echo ''; + html_print_image('images/lock.png'); + echo ''; + } + + echo "".html_print_image('images/config.png', true, ['title' => __('Edit')]).'  '; + echo "".html_print_image('images/cross.png', true, ['border' => '0']).''; + if (is_metaconsole()) { + echo "   ".html_print_image('images/deploy.png', true, ['title' => __('Deploy'), 'width' => '21 px']).'  '; + } + + echo '
'; + } else { + ui_print_info_message(['no_close' => true, 'message' => __('There are no plugins in the system') ]); + } + + if ($management_allowed) { + echo ""; + + echo '
'; + echo "
"; + echo ""; + echo '
'; + echo '