$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'; } 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, false ); } 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'); $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').''; 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 '