From 14984faaaad147a2d08841a1b72d86cfd02c582b Mon Sep 17 00:00:00 2001 From: Daniel Barbero Date: Thu, 19 Dec 2019 20:42:29 +0100 Subject: [PATCH] Fixed errors Form VC --- pandora_console/include/functions_html.php | 144 ++++++--- pandora_console/include/javascript/pandora.js | 16 +- .../javascript/pandora_visual_console.js | 11 +- pandora_console/include/rest-api/index.php | 27 +- .../rest-api/models/VisualConsole/Item.php | 28 +- .../VisualConsole/Items/ModuleGraph.php | 208 ++++++++++++- .../models/VisualConsole/Items/Percentile.php | 278 ++++++++++++++++-- .../VisualConsole/Items/StaticGraph.php | 18 +- .../rest-api/models/VisualConsole/View.php | 175 ++++++++--- 9 files changed, 747 insertions(+), 158 deletions(-) diff --git a/pandora_console/include/functions_html.php b/pandora_console/include/functions_html.php index 391df1b30d..f32aee6a67 100644 --- a/pandora_console/include/functions_html.php +++ b/pandora_console/include/functions_html.php @@ -3640,35 +3640,34 @@ function html_print_input($data, $wrapper='div', $input_only=false) break; case 'autocomplete_agent': - /* - if (is_metaconsole() === true) { - $connection = metaconsole_get_connection($server_name); - $agent_name = ''; - - if (metaconsole_load_external_db($connection) == NOERR) { - $agent_name = db_get_value_filter( - 'alias', - 'tagente', - ['id_agente' => $idAgent] - ); - } - - // Append server name. - if (!empty($agent_name)) { - $agent_name .= ' ('.$server_name.')'; - } - - // Restore db connection. - metaconsole_restore_db(); - } else { - - } - */ $agent_name = ''; if (isset($data['id_agent_hidden']) === true && empty($data['id_agent_hidden']) === false ) { - $agent_name = agents_get_alias($data['id_agent_hidden']); + if (is_metaconsole() === true) { + $connection = metaconsole_get_connection_by_id( + $data['server_id_hidden'] + ); + $agent_name = ''; + + if (metaconsole_load_external_db($connection) == NOERR) { + $agent_name = db_get_value_filter( + 'alias', + 'tagente', + ['id_agente' => $data['id_agent_hidden']] + ); + } + + // Append server name. + if (!empty($agent_name)) { + $agent_name .= ' ('.$connection['server_name'].')'; + } + + // Restore db connection. + metaconsole_restore_db(); + } else { + $agent_name = agents_get_alias($data['id_agent_hidden']); + } } $params = []; @@ -3677,36 +3676,107 @@ function html_print_input($data, $wrapper='div', $input_only=false) $params['input_name'] = $data['name']; $params['value'] = $agent_name; $params['javascript_is_function_select'] = true; - // $params['selectbox_id'] = 'id_agent_module'; - // $params['add_none_module'] = true; + + if (isset($data['module_input']) === true + && $data['module_input'] === true + ) { + $params['selectbox_id'] = $data['module_name']; + $params['add_none_module'] = $data['module_none']; + } + $params['use_hidden_input_idagent'] = true; $params['hidden_input_idagent_id'] = 'hidden-'.$data['name_agent_hidden']; - /* - if (is_metaconsole()) { + if (is_metaconsole()) { $params['use_input_id_server'] = true; - $params['input_id_server_id'] = 'hidden-server_id'; + $params['input_id_server_id'] = 'hidden-'.$data['name_server_hidden']; $params['metaconsole_enabled'] = true; - $params['input_id'] = 'agent_autocomplete_events'; - $params['javascript_page'] = 'include/ajax/agent'; - $params['input_name'] = 'agent_text'; - } - */ + } $output .= html_print_input_hidden( $data['name_agent_hidden'], $data['id_agent_hidden'], $data['return'] ); - // $output .= html_print_input_hidden('server_name', $server_name); + $output .= html_print_input_hidden( $data['name_server_hidden'], $data['server_id_hidden'], $data['return'] ); - // $output .= html_print_input_hidden('id_server', ''); + $output .= ui_print_agent_autocomplete_input($params); break; + case 'autocomplete_module': + // Module. + if (isset($data['selected']) === false || $data['selected'] === 0) { + $fields = [ + 0 => __('Select an Agent first'), + ]; + } else { + $sql = sprintf( + 'SELECT id_agente_modulo, nombre + FROM tagente_modulo + WHERE id_agente = %d + AND delete_pending = 0', + $data['agent_id'] + ); + + if (is_metaconsole() === true) { + $connection = metaconsole_get_connection_id( + $data['metaconsole_id'] + ); + + if (metaconsole_load_external_db($connection) == NOERR) { + $modules_agent = db_get_all_rows_sql($sql); + + if ($modules_agent === false) { + $modules_agent = []; + } + } + + // Restore db connection. + metaconsole_restore_db(); + } else { + $modules_agent = db_get_all_rows_sql($sql); + } + + $fields = []; + if (isset($modules_agent) === true + && is_array($modules_agent) === true + ) { + $fields = array_reduce( + $modules_agent, + function ($carry, $item) { + $carry[$item['id_agente_modulo']] = $item['nombre']; + return $carry; + }, + [] + ); + } + } + + $output .= html_print_select( + $fields, + $data['name'], + ((isset($data['selected']) === true) ? $data['selected'] : ''), + ((isset($data['script']) === true) ? $data['script'] : ''), + ((isset($data['nothing']) === true) ? $data['nothing'] : ''), + ((isset($data['nothing_value']) === true) ? $data['nothing_value'] : 0), + ((isset($data['return']) === true) ? $data['return'] : false), + ((isset($data['multiple']) === true) ? $data['multiple'] : false), + ((isset($data['sort']) === true) ? $data['sort'] : true), + ((isset($data['class']) === true) ? $data['class'] : ''), + ((isset($data['disabled']) === true) ? $data['disabled'] : false), + ((isset($data['style']) === true) ? $data['style'] : false), + ((isset($data['option_style']) === true) ? $data['option_style'] : false), + ((isset($data['size']) === true) ? $data['size'] : false), + ((isset($data['modal']) === true) ? $data['modal'] : false), + ((isset($data['message']) === true) ? $data['message'] : ''), + ((isset($data['select_all']) === true) ? $data['select_all'] : false) + ); + break; + default: // Ignore. break; diff --git a/pandora_console/include/javascript/pandora.js b/pandora_console/include/javascript/pandora.js index 22ae4ffc3c..8fae6354f2 100644 --- a/pandora_console/include/javascript/pandora.js +++ b/pandora_console/include/javascript/pandora.js @@ -2161,7 +2161,13 @@ function load_modal(settings) { formdata.append(this.name, $(this).prop("files")[0]); } } else { - formdata.append(this.name, $(this).val()); + if ($(this).attr("type") == "checkbox") { + if (this.checked) { + formdata.append(this.name, "on"); + } + } else { + formdata.append(this.name, $(this).val()); + } } }); } else { @@ -2172,7 +2178,13 @@ function load_modal(settings) { formdata.append(this.name, $(this).prop("files")[0]); } } else { - formdata.append(this.name, $(this).val()); + if ($(this).attr("type") == "checkbox") { + if (this.checked) { + formdata.append(this.name, "on"); + } + } else { + formdata.append(this.name, $(this).val()); + } } }); }); diff --git a/pandora_console/include/javascript/pandora_visual_console.js b/pandora_console/include/javascript/pandora_visual_console.js index ddc0918eac..930107a4a8 100755 --- a/pandora_console/include/javascript/pandora_visual_console.js +++ b/pandora_console/include/javascript/pandora_visual_console.js @@ -353,9 +353,6 @@ function createVisualConsole( } }, createItem: function(typeString) { - //TODO:XXX - console.log(typeString); - var type; switch (typeString) { case "STATIC_GRAPH": @@ -1467,12 +1464,16 @@ function createOrUpdateVisualConsoleItem( }, extradata: [ { - name: "item", - value: item + name: "type", + value: item.itemProps.type }, { name: "vCId", value: visualConsole.props.id + }, + { + name: "itemId", + value: item.itemProps.id ? item.itemProps.id : 0 } /*{ name: "elementsVc", diff --git a/pandora_console/include/rest-api/index.php b/pandora_console/include/rest-api/index.php index 32bae6db56..a2503accef 100644 --- a/pandora_console/include/rest-api/index.php +++ b/pandora_console/include/rest-api/index.php @@ -484,32 +484,7 @@ if ($getVisualConsole === true) { echo json_encode($result); return; } else if ($getCustomGraphVisualConsoleItem) { - include_once 'include/functions_custom_graphs.php'; - enterprise_include_once('include/functions_metaconsole.php'); - $data = []; - if (is_metaconsole()) { - $data = metaconsole_get_custom_graphs(true); - } else { - $data = custom_graphs_get_user( - $config['id_user'], - false, - true, - 'RR' - ); - } - - $result = array_map( - function ($id) use ($data) { - return [ - 'value' => $id, - 'text' => is_metaconsole() ? io_safe_output($data[$id]) : io_safe_output($data[$id]['name']), - ]; - }, - array_keys($data) - ); - - echo json_encode($result); - return; + // Remove. } else if ($serviceListVisualConsole) { if (!enterprise_installed()) { echo json_encode(false); diff --git a/pandora_console/include/rest-api/models/VisualConsole/Item.php b/pandora_console/include/rest-api/models/VisualConsole/Item.php index 32def05cb9..9c22b4cd3e 100644 --- a/pandora_console/include/rest-api/models/VisualConsole/Item.php +++ b/pandora_console/include/rest-api/models/VisualConsole/Item.php @@ -1887,15 +1887,15 @@ class Item extends CachedModel /** * Generates inputs for form (global, common). * - * @param object $values Default values. + * @param array $values Default values. * * @return array Of inputs. */ - public static function getFormInputs(object $values): array + public static function getFormInputs(array $values): array { $inputs = []; - switch ($values->tabSelected) { + switch ($values['tabSelected']) { case 'label': // Label. // TODO tinyMCE. @@ -1905,7 +1905,7 @@ class Item extends CachedModel 'arguments' => [ 'name' => 'label', 'type' => 'text', - 'value' => $values->label, + 'value' => $values['label'], 'return' => true, ], ]; @@ -1926,7 +1926,7 @@ class Item extends CachedModel 'arguments' => [ 'name' => 'width', 'type' => 'number', - 'value' => $values->width, + 'value' => $values['width'], 'return' => true, ], ], @@ -1935,7 +1935,7 @@ class Item extends CachedModel 'arguments' => [ 'name' => 'height', 'type' => 'number', - 'value' => $values->height, + 'value' => $values['height'], 'return' => true, ], ], @@ -1956,7 +1956,7 @@ class Item extends CachedModel 'arguments' => [ 'name' => 'x', 'type' => 'number', - 'value' => $values->x, + 'value' => $values['x'], 'return' => true, ], ], @@ -1965,7 +1965,7 @@ class Item extends CachedModel 'arguments' => [ 'name' => 'y', 'type' => 'number', - 'value' => $values->y, + 'value' => $values['y'], 'return' => true, ], ], @@ -1979,7 +1979,7 @@ class Item extends CachedModel 'name' => 'isLinkEnabled', 'id' => 'isLinkEnabled', 'type' => 'switch', - 'value' => $values->isLinkEnabled, + 'value' => $values['isLinkEnabled'], ], ]; @@ -1990,7 +1990,7 @@ class Item extends CachedModel 'name' => 'isOnTop', 'id' => 'isOnTop', 'type' => 'switch', - 'value' => $values->isOnTop, + 'value' => $values['isOnTop'], ], ]; @@ -2005,7 +2005,7 @@ class Item extends CachedModel 'type' => 'select', 'fields' => $fields, 'name' => 'parentId', - 'selected' => $values->parentId, + 'selected' => $values['parentId'], 'return' => true, ], ]; @@ -2017,8 +2017,8 @@ class Item extends CachedModel 'type' => 'select_groups', 'name' => 'aclGroupId', 'returnAllGroup' => true, - 'privilege' => $values->access, - 'selected' => $values->aclGroupId, + 'privilege' => $values['access'], + 'selected' => $values['aclGroupId'], 'return' => true, ], ]; @@ -2029,7 +2029,7 @@ class Item extends CachedModel 'arguments' => [ 'name' => 'cacheExpiration', 'type' => 'interval', - 'value' => $values->cacheExpiration, + 'value' => $values['cacheExpiration'], 'nothing' => __('None'), 'nothing_value' => 0, ], diff --git a/pandora_console/include/rest-api/models/VisualConsole/Items/ModuleGraph.php b/pandora_console/include/rest-api/models/VisualConsole/Items/ModuleGraph.php index a804e29b02..7287b5170a 100644 --- a/pandora_console/include/rest-api/models/VisualConsole/Items/ModuleGraph.php +++ b/pandora_console/include/rest-api/models/VisualConsole/Items/ModuleGraph.php @@ -209,10 +209,18 @@ final class ModuleGraph extends Item if (empty($customGraphId) === false) { $customGraph = \db_get_row('tgraph', 'id_graph', $customGraphId); + if ($data['width'] < 440) { + $data['width'] = 440; + } + + if ($data['height'] < 220) { + $data['height'] = 220; + } + $params = [ 'period' => $period, 'width' => (int) $data['width'], - 'height' => ($data['height'] - 30), + 'height' => ($data['height'] - 40), 'title' => '', 'unit_name' => null, 'show_alerts' => false, @@ -241,12 +249,20 @@ final class ModuleGraph extends Item throw new \InvalidArgumentException('missing module Id'); } + if ($data['width'] < 440) { + $data['width'] = 440; + } + + if ($data['height'] < 220) { + $data['height'] = 220; + } + $params = [ 'agent_module_id' => $moduleId, 'period' => $period, 'show_events' => false, 'width' => (int) $data['width'], - 'height' => ($data['height'] - 30), + 'height' => ($data['height'] - 40), 'title' => \modules_get_agentmodule_name($moduleId), 'unit' => \modules_get_unit($moduleId), 'only_image' => $imageOnly, @@ -269,4 +285,192 @@ final class ModuleGraph extends Item } + /** + * Return List custom graph. + * + * @return array + */ + public function getListCustomGraph():array + { + include_once 'include/functions_custom_graphs.php'; + enterprise_include_once('include/functions_metaconsole.php'); + $data = []; + if (is_metaconsole() === true) { + $data = metaconsole_get_custom_graphs(true); + } else { + $data = custom_graphs_get_user( + $config['id_user'], + false, + true, + 'RR' + ); + } + + $data[0] = __('None'); + + return array_reverse($data); + } + + + /** + * Generates inputs for form (specific). + * + * @param array $values Default values. + * + * @return array Of inputs. + * + * @throws Exception On error. + */ + public static function getFormInputs(array $values): array + { + // Retrieve global - common inputs. + $inputs = Item::getFormInputs($values); + + if (is_array($inputs) !== true) { + throw new Exception( + '[ModuleGraph]::getFormInputs parent class return is not an array' + ); + } + + if ($values['tabSelected'] === 'specific') { + // Type percentile. + $fields = [ + 'white' => __('White'), + 'black' => __('Black'), + 'transparent' => __('Transparent'), + ]; + + $inputs[] = [ + 'label' => __('Background color'), + 'arguments' => [ + 'type' => 'select', + 'fields' => $fields, + 'name' => 'backgroundType', + 'selected' => $values['backgroundType'], + 'return' => true, + 'sort' => false, + ], + ]; + + $classModule = ''; + $classCustom = 'displayNone'; + $checkedModule = true; + $checkedCustom = false; + if (isset($values['customGraphId']) === true + && $values['customGraphId'] !== 0 + ) { + $classModule = 'displayNone'; + $classCustom = ''; + $checkedModule = false; + $checkedCustom = true; + } + + // Choose Type module graph if graph normal or custom. + $inputs[] = [ + 'wrapper' => 'div', + 'class' => 'flex-row-vcenter', + 'direct' => 1, + 'block_content' => [ + [ + 'arguments' => [ + 'label' => __('Module Graph'), + 'type' => 'radio_button', + 'attributes' => 'class="btn"', + 'name' => 'choosetype', + 'value' => 'module', + 'checkedvalue' => $checkedModule, + 'script' => 'typeModuleGraph(\'module\')', + 'return' => true, + ], + ], + [ + 'arguments' => [ + 'label' => __('Custom Graph'), + 'type' => 'radio_button', + 'attributes' => 'class="btn"', + 'name' => 'choosetype', + 'value' => 'custom', + 'checkedvalue' => $checkedCustom, + 'script' => 'typeModuleGraph(\'custom\')', + 'return' => true, + ], + ], + ], + ]; + + // Autocomplete agents. + $inputs[] = [ + 'id' => 'MGautoCompleteAgent', + 'class' => $classModule, + 'label' => __('Agent'), + 'arguments' => [ + 'type' => 'autocomplete_agent', + 'name' => 'agentAlias', + 'id_agent_hidden' => $values['agentId'], + 'name_agent_hidden' => 'agentId', + 'server_id_hidden' => $values['metaconsoleId'], + 'name_server_hidden' => 'metaconsoleId', + 'return' => true, + 'module_input' => true, + 'module_name' => 'moduleId', + 'module_none' => 'false', + ], + ]; + + // Autocomplete module. + $inputs[] = [ + 'id' => 'MGautoCompleteModule', + 'class' => $classModule, + 'label' => __('Module'), + 'arguments' => [ + 'type' => 'autocomplete_module', + 'fields' => $fields, + 'name' => 'moduleId', + 'selected' => $values['moduleId'], + 'return' => true, + 'sort' => false, + 'agent_id' => $values['agentId'], + 'metaconsole_id' => $values['metaconsoleId'], + ], + ]; + + // Custom graph. + $fields = self::getListCustomGraph(); + $inputs[] = [ + 'id' => 'MGcustomGraph', + 'class' => $classCustom, + 'label' => __('Custom graph'), + 'arguments' => [ + 'type' => 'select', + 'fields' => $fields, + 'name' => 'customGraphId', + 'selected' => $values['customGraphId'], + 'return' => true, + ], + ]; + + // Graph Type. + $fields = [ + 'line' => __('Line'), + 'area' => __('Area'), + ]; + + $inputs[] = [ + 'label' => __('Graph Type'), + 'arguments' => [ + 'type' => 'select', + 'fields' => $fields, + 'name' => 'graphType', + 'selected' => $values['graphType'], + 'return' => true, + ], + ]; + + // TODO:XXXX LinkConsoleInputGroup + } + + return $inputs; + } + + } diff --git a/pandora_console/include/rest-api/models/VisualConsole/Items/Percentile.php b/pandora_console/include/rest-api/models/VisualConsole/Items/Percentile.php index 24860f3168..4ece421327 100644 --- a/pandora_console/include/rest-api/models/VisualConsole/Items/Percentile.php +++ b/pandora_console/include/rest-api/models/VisualConsole/Items/Percentile.php @@ -94,6 +94,68 @@ final class Percentile extends Item } + /** + * Encode type item. + * + * @param array $data Data for encode. + * + * @return string Return 'PERCENTILE_BAR', 'PERCENTILE_BUBBLE', + * 'CIRCULAR_PROGRESS_BAR' or 'CIRCULAR_INTERIOR_PROGRESS_BAR'. + * 'PERCENTILE_BAR' by default. + */ + protected function encodeLabelColor(array $data): ?string + { + $labelColor = null; + if (isset($data['labelColor']) === true) { + switch ($data['labelColor']) { + case 'fillColor': + case 'fill_color': + case 'labelColor': + $labelColor = $data['labelColor']; + break; + + default: + $labelColor = '#444444'; + break; + } + } + + return $labelColor; + } + + + /** + * Encode type item. + * + * @param array $data Data for encode. + * + * @return string Return 'PERCENTILE_BAR', 'PERCENTILE_BUBBLE', + * 'CIRCULAR_PROGRESS_BAR' or 'CIRCULAR_INTERIOR_PROGRESS_BAR'. + * 'PERCENTILE_BAR' by default. + */ + protected function encodeColor(array $data): ?string + { + $color = null; + if (isset($data['color']) === true) { + switch ($data['color']) { + case 'borderColor': + case 'border_color': + case 'gridColor': + case 'color': + case 'legendBackgroundColor': + $color = $data['color']; + break; + + default: + $color = '#F0F0F0'; + break; + } + } + + return $color; + } + + /** * Return a valid representation of a record in database. * @@ -126,6 +188,16 @@ final class Percentile extends Item $return['image'] = (string) $valueType; } + $color = static::encodeColor($data); + if ($border_color !== null) { + $result['border_color'] = $color; + } + + $labelColor = static::encodeLabelColor($data); + if ($labelColor !== null) { + $result['fill_color'] = $labelColor; + } + return $return; } @@ -302,30 +374,30 @@ final class Percentile extends Item // Get the value type. $valueType = static::extractValueType($data); - if ($moduleId === null) { - throw new \InvalidArgumentException('missing module Id'); - } + if ($moduleId !== null && $moduleId !== 0) { + // Maybe connect to node. + $nodeConnected = false; + if (\is_metaconsole() === true && $metaconsoleId !== null) { + $nodeConnected = \metaconsole_connect( + null, + $metaconsoleId + ) === NOERR; - // Maybe connect to node. - $nodeConnected = false; - if (\is_metaconsole() === true && $metaconsoleId !== null) { - $nodeConnected = \metaconsole_connect( - null, - $metaconsoleId - ) === NOERR; + if ($nodeConnected === false) { + throw new \InvalidArgumentException( + 'error connecting to the node' + ); + } + } - if ($nodeConnected === false) { + $moduleValue = \modules_get_last_value($moduleId); + if ($moduleValue === false) { throw new \InvalidArgumentException( - 'error connecting to the node' + 'error fetching the module value' ); } - } - - $moduleValue = \modules_get_last_value($moduleId); - if ($moduleValue === false) { - throw new \InvalidArgumentException( - 'error fetching the module value' - ); + } else { + $moduleValue = 0; } // Store the module value. @@ -335,9 +407,12 @@ final class Percentile extends Item '.', '' ); - $unit = \modules_get_unit($moduleId); - if (empty($unit) === false) { - $data['unit'] = \io_safe_output($unit); + $unit = ''; + if ($moduleId !== null && $moduleId !== 0) { + $unit = \modules_get_unit($moduleId); + if (empty($unit) === false) { + $data['unit'] = \io_safe_output($unit); + } } // Restore connection. @@ -349,4 +424,163 @@ final class Percentile extends Item } + /** + * Generates inputs for form (specific). + * + * @param array $values Default values. + * + * @return array Of inputs. + * + * @throws Exception On error. + */ + public static function getFormInputs(array $values): array + { + // Retrieve global - common inputs. + $inputs = Item::getFormInputs($values); + + if (is_array($inputs) !== true) { + throw new Exception( + '[Percentile]::getFormInputs parent class return is not an array' + ); + } + + if ($values['tabSelected'] === 'specific') { + // Type percentile. + $fields = [ + 'progress-bar' => __('Percentile'), + 'bubble' => __('Bubble'), + 'circular-progress-bar' => __('Circular porgress bar'), + 'circular-progress-bar-alt' => __( + 'Circular progress bar (interior)' + ), + ]; + + $inputs[] = [ + 'label' => __('Type'), + 'arguments' => [ + 'type' => 'select', + 'fields' => $fields, + 'name' => 'percentileType', + 'selected' => $values['percentileType'], + 'return' => true, + 'sort' => false, + ], + ]; + + // TODO: QUIT WIDTH FORM GENERAL PAGE. + // Diameter. + $diameter = (isset($values['width']) === true) ? $values['width'] : 200; + $inputs[] = [ + 'label' => __('Diameter'), + 'arguments' => [ + 'name' => 'width', + 'type' => 'number', + 'value' => $diameter, + 'return' => true, + ], + ]; + + // TODO: ADD bbdd. + // Min Value. + $inputs[] = [ + 'label' => __('Min. Value'), + 'arguments' => [ + 'name' => 'minValue', + 'type' => 'number', + 'value' => $values['minValue'], + 'return' => true, + ], + ]; + + // TODO: ADD bbdd. + // Max Value. + $inputs[] = [ + 'label' => __('Max. Value'), + 'arguments' => [ + 'name' => 'maxValue', + 'type' => 'number', + 'value' => $values['maxValue'], + 'return' => true, + ], + ]; + + // Value to show. + $fields = [ + 'percent' => __('Percent'), + 'value' => __('Value'), + ]; + + $inputs[] = [ + 'label' => __('Value to show'), + 'arguments' => [ + 'type' => 'select', + 'fields' => $fields, + 'name' => 'valueType', + 'selected' => $values['valueType'], + 'return' => true, + 'sort' => false, + ], + ]; + + // Element color. + $inputs[] = [ + 'label' => __('Element color'), + 'arguments' => [ + 'name' => 'color', + 'type' => 'color', + 'value' => $values['color'], + 'return' => true, + ], + ]; + + // Value color. + $inputs[] = [ + 'label' => __('Value color'), + 'arguments' => [ + 'name' => 'labelColor', + 'type' => 'color', + 'value' => $values['labelColor'], + 'return' => true, + ], + ]; + + // Autocomplete agents. + $inputs[] = [ + 'label' => __('Agent'), + 'arguments' => [ + 'type' => 'autocomplete_agent', + 'name' => 'agentAlias', + 'id_agent_hidden' => $values['agentId'], + 'name_agent_hidden' => 'agentId', + 'server_id_hidden' => $values['metaconsoleId'], + 'name_server_hidden' => 'metaconsoleId', + 'return' => true, + 'module_input' => true, + 'module_name' => 'moduleId', + 'module_none' => 'false', + ], + ]; + + // Autocomplete module. + $inputs[] = [ + 'label' => __('Module'), + 'arguments' => [ + 'type' => 'autocomplete_module', + 'fields' => $fields, + 'name' => 'moduleId', + 'selected' => $values['moduleId'], + 'return' => true, + 'sort' => false, + 'agent_id' => $values['agentId'], + 'metaconsole_id' => $values['metaconsoleId'], + ], + ]; + + // TODO:XXXX LinkConsoleInputGroup + } + + return $inputs; + } + + } diff --git a/pandora_console/include/rest-api/models/VisualConsole/Items/StaticGraph.php b/pandora_console/include/rest-api/models/VisualConsole/Items/StaticGraph.php index 23c1ebf8bb..5475faac04 100644 --- a/pandora_console/include/rest-api/models/VisualConsole/Items/StaticGraph.php +++ b/pandora_console/include/rest-api/models/VisualConsole/Items/StaticGraph.php @@ -244,13 +244,13 @@ final class StaticGraph extends Item /** * Generates inputs for form (specific). * - * @param object $values Default values. + * @param array $values Default values. * * @return array Of inputs. * * @throws Exception On error. */ - public static function getFormInputs(object $values): array + public static function getFormInputs(array $values): array { // Retrieve global - common inputs. $inputs = Item::getFormInputs($values); @@ -261,7 +261,7 @@ final class StaticGraph extends Item ); } - if ($values->tabSelected === 'specific') { + if ($values['tabSelected'] === 'specific') { // List images VC. // TODO: Show images. $inputs[] = [ @@ -270,7 +270,7 @@ final class StaticGraph extends Item 'type' => 'select', 'fields' => self::getListImagesVC(), 'name' => 'imageSrc', - 'selected' => $values->imageSrc, + 'selected' => $values['imageSrc'], 'return' => true, ], ]; @@ -281,31 +281,33 @@ final class StaticGraph extends Item 'arguments' => [ 'type' => 'autocomplete_agent', 'name' => 'agentAlias', - 'id_agent_hidden' => $values->agentId, + 'id_agent_hidden' => $values['agentId'], 'name_agent_hidden' => 'agentId', - 'server_id_hidden' => $values->metaconsoleId, + 'server_id_hidden' => $values['metaconsoleId'], 'name_server_hidden' => 'metaconsoleId', 'return' => true, ], ]; + // Show Last Value. $fields = [ 'default' => __('Hide last value on boolean modules'), 'disabled' => __('Disabled'), 'enabled' => __('Enabled'), ]; - // Show Last Value. $inputs[] = [ 'label' => __('Show Last Value'), 'arguments' => [ 'type' => 'select', 'fields' => $fields, 'name' => 'showLastValueTooltip', - 'selected' => $values->showLastValueTooltip, + 'selected' => $values['showLastValueTooltip'], 'return' => true, ], ]; + + // TODO:XXXX LinkConsoleInputGroup } return $inputs; diff --git a/pandora_console/include/rest-api/models/VisualConsole/View.php b/pandora_console/include/rest-api/models/VisualConsole/View.php index 95dc0d3be3..5a65bb5919 100644 --- a/pandora_console/include/rest-api/models/VisualConsole/View.php +++ b/pandora_console/include/rest-api/models/VisualConsole/View.php @@ -32,6 +32,7 @@ use Models\VisualConsole\Container as VisualConsole; global $config; require_once $config['homedir'].'/include/class/HTML.class.php'; +enterprise_include_once('include/functions_metaconsole.php'); /** * Global HTML generic class. @@ -42,10 +43,14 @@ class View extends \HTML public function loadTabs() { + $type = get_parameter('type', 0); + $itemId = (int) get_parameter('itemId', 0); + $url = ui_get_full_url(false, false, false, false); $url .= 'ajax.php?page=include/rest-api/index'; $url .= '&loadtabs=1'; - $url .= '&item='.get_parameter('item', null); + $url .= '&type='.$type; + $url .= '&itemId='.$itemId; $tabs = [ [ @@ -83,10 +88,11 @@ class View extends \HTML }); ui.jqXHR.fail(function () { ui.panel.html( - "Couldn\'t load Data. Plz Reload Page or Try Again Later."); + "Couldn\'t load Data. Plz Reload Page or Try Again Later." + ); }); - } - + }, + active: 2 });'; $js .= '});'; $js .= ''; @@ -106,18 +112,9 @@ class View extends \HTML { // Load desired form based on item type. $values = []; - $item = null; - $item_json = get_parameter('item', null); - $item = json_decode(io_safe_output($item_json)); - - $type = null; - if (isset($item) === true) { - $values = $item->itemProps; - $values->tabSelected = get_parameter('tabSelected', 'label'); - $type = $values->type; - } - - hd($values->tabSelected, true); + $type = get_parameter('type', null); + $tabSelected = get_parameter('tabSelected', 'label'); + $itemId = (int) get_parameter('itemId', 0); $itemClass = VisualConsole::getItemClass($type); @@ -132,10 +129,19 @@ class View extends \HTML $form = [ 'action' => '#', 'method' => 'POST', - 'id' => 'itemForm-'.$values->tabSelected, + 'id' => 'itemForm-'.$tabSelected, 'class' => 'discovery modal', ]; + if ($itemId !== 0) { + $item = VisualConsole::getItemFromDB($itemId); + $values = $item->toArray(); + } else { + $values['type'] = $type; + } + + $values['tabSelected'] = $tabSelected; + // Retrieve inputs. $inputs = $itemClass::getFormInputs($values); @@ -148,7 +154,24 @@ class View extends \HTML true ); - return $form; + // TODO:XXX very ugly. + $jsforms = ''; + + return $form.$jsforms; } @@ -161,28 +184,24 @@ class View extends \HTML public function processForm() { global $config; - - hd('++++++++++++++++++++++++++++++++++++', true); - hd($_POST, true); - hd('++++++++++++++++++++++++++++++++++++', true); - - $item = json_decode(io_safe_output(\get_parameter('item')), true); - // Inserted data in new item. $vCId = \get_parameter('vCId', 0); + $type = get_parameter('type', null); + $itemId = (int) get_parameter('itemId', 0); - $data['type'] = $item['itemProps']['type']; + // Type. + $data['type'] = $type; - // Page Label. + // Page Label for each item. $data['label'] = \get_parameter('label'); - // Page general. + // Page general for each item. $data['width'] = \get_parameter('width'); $data['height'] = \get_parameter('height'); $data['x'] = \get_parameter('x'); $data['y'] = \get_parameter('y'); - $data['isLinkEnabled'] = \get_parameter('isLinkEnabled'); - $data['isOnTop'] = \get_parameter('isOnTop'); + $data['isLinkEnabled'] = \get_parameter_switch('isLinkEnabled', 0); + $data['isOnTop'] = \get_parameter_switch('isOnTop', 0); $data['parentId'] = \get_parameter('parentId'); $data['aclGroupId'] = \get_parameter('aclGroupId'); $data['cacheExpiration_select'] = \get_parameter( @@ -194,21 +213,97 @@ class View extends \HTML 'cacheExpiration_units' ); - // Page specific. - $data['imageSrc'] = \get_parameter('imageSrc'); - $data['agentId'] = \get_parameter('agentId'); - $data['metaconsoleId'] = \get_parameter('metaconsoleId'); - $data['agentAlias'] = \get_parameter('agentAlias'); - $data['showLastValueTooltip'] = \get_parameter('showLastValueTooltip'); + // Page specific data for each item. + switch ($type) { + case STATIC_GRAPH: + $data['imageSrc'] = \get_parameter('imageSrc'); + $data['agentId'] = \get_parameter('agentId'); + $data['metaconsoleId'] = \get_parameter('metaconsoleId'); + $data['agentAlias'] = \get_parameter('agentAlias'); + $data['showLastValueTooltip'] = \get_parameter( + 'showLastValueTooltip' + ); + break; - if (isset($item['itemProps']['id']) === false) { + case MODULE_GRAPH: + $data['backgroundType'] = \get_parameter('backgroundType'); + $data['agentId'] = \get_parameter('agentId'); + $data['metaconsoleId'] = \get_parameter('metaconsoleId'); + $data['agentAlias'] = \get_parameter('agentAlias'); + $data['moduleId'] = \get_parameter('moduleId'); + $data['customGraphId'] = \get_parameter('customGraphId'); + $data['graphType'] = \get_parameter('graphType'); + break; + + case SIMPLE_VALUE: + case SIMPLE_VALUE_MAX: + case SIMPLE_VALUE_MIN: + case SIMPLE_VALUE_AVG: + break; + + case PERCENTILE_BAR: + case PERCENTILE_BUBBLE: + case CIRCULAR_PROGRESS_BAR: + case CIRCULAR_INTERIOR_PROGRESS_BAR: + $data['percentileType'] = \get_parameter('percentileType'); + $data['width'] = \get_parameter('width'); + $data['minValue'] = \get_parameter('minValue'); + $data['maxValue'] = \get_parameter('maxValue'); + $data['valueType'] = \get_parameter('valueType'); + $data['color'] = \get_parameter('color'); + $data['labelColor'] = \get_parameter('labelColor'); + $data['agentId'] = \get_parameter('agentId'); + $data['metaconsoleId'] = \get_parameter('metaconsoleId'); + $data['agentAlias'] = \get_parameter('agentAlias'); + $data['moduleId'] = \get_parameter('moduleId'); + break; + + case LABEL: + break; + + case ICON: + break; + + // Enterprise item. It may not exist. + case SERVICE: + break; + + case GROUP_ITEM: + break; + + case BOX_ITEM: + break; + + case LINE_ITEM: + break; + + case AUTO_SLA_GRAPH: + break; + + case DONUT_GRAPH: + break; + + case BARS_GRAPH: + break; + + case CLOCK: + break; + + case COLOR_CLOUD: + break; + + default: + break; + } + + if (isset($itemId) === false || $itemId === 0) { + // TODO: ACL. // CreateVC. $class = VisualConsole::getItemClass((int) $data['type']); try { // Save the new item. $data['id_layout'] = $vCId; $itemId = $class::save($data); - hd('he creado:'.$itemId, true); } catch (\Throwable $th) { // Bad params. http_response_code(400); @@ -226,8 +321,6 @@ class View extends \HTML } } else { // UpdateVC. - $itemId = $item['itemProps']['id']; - try { $item = VisualConsole::getItemFromDB($itemId); } catch (Throwable $e) { @@ -278,7 +371,6 @@ class View extends \HTML $data['id_layout'] = $vCId; $data['id'] = $itemId; $item->save($data); - hd('he actualizado: '.$itemId, true); $result = $item->toArray(); } catch (\Throwable $th) { // There is no item in the database. @@ -288,7 +380,6 @@ class View extends \HTML } } - hd($result, true); return json_encode($result); }