mirror of
https://github.com/pandorafms/pandorafms.git
synced 2025-07-29 00:34:46 +02:00
Merge branch 'ent-8540-contel-nuevo-informe-custom-render' into 'develop'
add new report custom render pandora_enterprise#8540 See merge request artica/pandorafms!4793
This commit is contained in:
commit
2471bbf1d4
@ -22,5 +22,8 @@ CREATE TABLE IF NOT EXISTS `tbackup` (
|
|||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
|
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
|
||||||
|
|
||||||
|
ALTER TABLE `treport_content` ADD COLUMN `macros_definition` TEXT;
|
||||||
|
ALTER TABLE `treport_content` ADD COLUMN `render_definition` TEXT;
|
||||||
|
ALTER TABLE `treport_content_template` ADD COLUMN `macros_definition` TEXT;
|
||||||
|
ALTER TABLE `treport_content_template` ADD COLUMN `render_definition` TEXT;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
@ -176,6 +176,8 @@ $unknown_checks = true;
|
|||||||
$agent_max_value = true;
|
$agent_max_value = true;
|
||||||
$agent_min_value = true;
|
$agent_min_value = true;
|
||||||
$uncompressed_module = true;
|
$uncompressed_module = true;
|
||||||
|
$macros_definition = '';
|
||||||
|
$render_definition = '';
|
||||||
|
|
||||||
$only_data = false;
|
$only_data = false;
|
||||||
|
|
||||||
@ -724,6 +726,12 @@ switch ($action) {
|
|||||||
$graph_render = $item['graph_render'];
|
$graph_render = $item['graph_render'];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'custom_render':
|
||||||
|
$description = $item['description'];
|
||||||
|
$macros_definition = $item['macros_definition'];
|
||||||
|
$render_definition = $item['render_definition'];
|
||||||
|
break;
|
||||||
|
|
||||||
case 'top_n':
|
case 'top_n':
|
||||||
$description = $item['description'];
|
$description = $item['description'];
|
||||||
$period = $item['period'];
|
$period = $item['period'];
|
||||||
@ -2441,6 +2449,38 @@ $class = 'databox filters';
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
<tr id="row_macros_definition" class="datos">
|
||||||
|
<td class="bolder">
|
||||||
|
<?php
|
||||||
|
echo __('Macros definition');
|
||||||
|
?>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<?php echo get_table_custom_macros_report($macros_definition); ?>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr id="row_render_definition" class="datos">
|
||||||
|
<td class="bolder">
|
||||||
|
<?php
|
||||||
|
echo __('Render definition').ui_print_help_tip(
|
||||||
|
__('Be aware because not all CSS inline styles are supported in the pdf library'),
|
||||||
|
true
|
||||||
|
);
|
||||||
|
?>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<?php
|
||||||
|
echo html_print_textarea(
|
||||||
|
'render_definition',
|
||||||
|
3,
|
||||||
|
25,
|
||||||
|
$render_definition
|
||||||
|
);
|
||||||
|
?>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
<tr id="row_fullscale" class="datos">
|
<tr id="row_fullscale" class="datos">
|
||||||
<td class="bolder">
|
<td class="bolder">
|
||||||
<?php
|
<?php
|
||||||
@ -4593,6 +4633,9 @@ ui_require_javascript_file(
|
|||||||
'pandora_inventory',
|
'pandora_inventory',
|
||||||
ENTERPRISE_DIR.'/include/javascript/'
|
ENTERPRISE_DIR.'/include/javascript/'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
ui_require_javascript_file('tiny_mce', 'include/javascript/tiny_mce/');
|
||||||
|
ui_require_javascript_file('pandora');
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
@ -4830,6 +4873,14 @@ $(document).ready (function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var added_config = {
|
||||||
|
"elements": "textarea_render_definition",
|
||||||
|
"plugins": "preview, print, table, searchreplace, nonbreaking, xhtmlxtras, noneditable",
|
||||||
|
"theme_advanced_buttons1": "bold,italic,underline,|,justifyleft,justifycenter,justifyright,justifyfull,|,formatselect,fontselect,fontsizeselect",
|
||||||
|
"theme_advanced_buttons2": "search,replace,|,bullist,numlist,|,undo,redo,|,link,unlink,image,|,cleanup,code,preview,|,forecolor,backcolor"
|
||||||
|
}
|
||||||
|
defineTinyMCE(added_config);
|
||||||
|
|
||||||
$("#checkbox-select_by_group").change(function () {
|
$("#checkbox-select_by_group").change(function () {
|
||||||
var select_by_group = $('#checkbox-select_by_group').prop('checked');
|
var select_by_group = $('#checkbox-select_by_group').prop('checked');
|
||||||
|
|
||||||
@ -5453,7 +5504,7 @@ function addSLARow() {
|
|||||||
var slaMax = $("input[name=sla_max]").val();
|
var slaMax = $("input[name=sla_max]").val();
|
||||||
var slaLimit = $("input[name=sla_limit]").val();
|
var slaLimit = $("input[name=sla_limit]").val();
|
||||||
var serviceId = $("select#id_service>option:selected").val();
|
var serviceId = $("select#id_service>option:selected").val();
|
||||||
if(serviceId != '' && serviceId.split('|').length > 1 ) {
|
if(serviceId != undefined && serviceId != '' && serviceId.split('|').length > 1 ) {
|
||||||
var ids = serviceId.split('|');
|
var ids = serviceId.split('|');
|
||||||
serverId = ids[0];
|
serverId = ids[0];
|
||||||
serviceId = ids[1];
|
serviceId = ids[1];
|
||||||
@ -5895,6 +5946,8 @@ function chooseType() {
|
|||||||
$("#row_max_min_avg").hide();
|
$("#row_max_min_avg").hide();
|
||||||
$("#row_fullscale").hide();
|
$("#row_fullscale").hide();
|
||||||
$("#row_graph_render").hide();
|
$("#row_graph_render").hide();
|
||||||
|
$("#row_macros_definition").hide();
|
||||||
|
$("#row_render_definition").hide();
|
||||||
$("#row_time_compare_overlapped").hide();
|
$("#row_time_compare_overlapped").hide();
|
||||||
$("#row_quantity").hide();
|
$("#row_quantity").hide();
|
||||||
$("#row_exception_condition_value").hide();
|
$("#row_exception_condition_value").hide();
|
||||||
@ -6441,6 +6494,11 @@ function chooseType() {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'custom_render':
|
||||||
|
$("#row_macros_definition").show();
|
||||||
|
$("#row_render_definition").show();
|
||||||
|
break;
|
||||||
|
|
||||||
case 'top_n':
|
case 'top_n':
|
||||||
$("#row_description").show();
|
$("#row_description").show();
|
||||||
$("#row_period").show();
|
$("#row_period").show();
|
||||||
@ -6767,6 +6825,98 @@ function chooseType() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function addCustomFieldRow() {
|
||||||
|
var array_tr = $("tr.tr-macros-definition");
|
||||||
|
var last_tr = array_tr[array_tr.length - 1];
|
||||||
|
var array_id = /(\d)+$/.exec($(last_tr).attr('id'));
|
||||||
|
var max = (parseInt(array_id[0]) + 1);
|
||||||
|
|
||||||
|
var clone = $("#table-macros-definition #table-macros-definition-0")
|
||||||
|
.clone()
|
||||||
|
.prop("id", "table-macros-definition-" + max);
|
||||||
|
|
||||||
|
clone
|
||||||
|
.find("#macro_custom_name")
|
||||||
|
.prop("id", "macro_custom_name_" + max)
|
||||||
|
.val("");
|
||||||
|
|
||||||
|
clone
|
||||||
|
.find("#macro_custom_key")
|
||||||
|
.prop("id", "macro_custom_key_" + max)
|
||||||
|
.val(max);
|
||||||
|
|
||||||
|
clone
|
||||||
|
.find("#macro_custom_type")
|
||||||
|
.prop("id", "macro_custom_type" + max)
|
||||||
|
.attr("onchange", "change_custom_fields_macros_report(" + max + ")");
|
||||||
|
|
||||||
|
clone
|
||||||
|
.find("#table-macros-definition-0-value")
|
||||||
|
.prop("id", "table-macros-definition-"+max+"-value");
|
||||||
|
|
||||||
|
clone
|
||||||
|
.find("#macro_custom_value")
|
||||||
|
.prop("id", "macro_custom_value_" + max)
|
||||||
|
.val('');
|
||||||
|
|
||||||
|
clone
|
||||||
|
.find(".icon-clean-custom-macro")
|
||||||
|
.attr("onclick", "cleanCustomFieldRow(" + max + ")");
|
||||||
|
|
||||||
|
clone
|
||||||
|
.find(".icon-delete-custom-macro")
|
||||||
|
.attr("onclick", "removeCustomFieldRow(" + max + ")")
|
||||||
|
.css("display", "inline-block");
|
||||||
|
|
||||||
|
clone
|
||||||
|
.appendTo("#table-macros-definition");
|
||||||
|
}
|
||||||
|
|
||||||
|
function cleanCustomFieldRow(row) {
|
||||||
|
if(row === 0) {
|
||||||
|
// Default value.
|
||||||
|
$("#macro_custom_name").val('');
|
||||||
|
$("#macro_custom_value").val('');
|
||||||
|
$("#macro_custom_width").val('');
|
||||||
|
} else {
|
||||||
|
$("#macro_custom_name_"+row).val('');
|
||||||
|
$("#macro_custom_value_"+row).val('');
|
||||||
|
$("#macro_custom_width_"+row).val('');
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#macro_custom_height_"+row).val('');
|
||||||
|
$("#macro_custom_period_"+row).val('');
|
||||||
|
$("#text-macro_custom_value_agent_name_"+row).val('');
|
||||||
|
$("#macro_custom_value"+row+"id_agent_module")
|
||||||
|
.val('')
|
||||||
|
.trigger('change');
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeCustomFieldRow(row) {
|
||||||
|
if(row !== 0) {
|
||||||
|
$("tr#table-macros-definition-"+row).remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function change_custom_fields_macros_report(id) {
|
||||||
|
var new_type = this.event.target.value;
|
||||||
|
jQuery.post (
|
||||||
|
"ajax.php",
|
||||||
|
{
|
||||||
|
"page" : "include/ajax/reporting.ajax",
|
||||||
|
"change_custom_fields_macros_report" : 1,
|
||||||
|
"macro_type": new_type,
|
||||||
|
"macro_id": id
|
||||||
|
},
|
||||||
|
function (data, status) {
|
||||||
|
console.log(id);
|
||||||
|
$("td#table-macros-definition-"+id+"-value").empty();
|
||||||
|
$("td#table-macros-definition-"+id+"-value").append(data);
|
||||||
|
},
|
||||||
|
"html"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function event_change_id_agent_inventory() {
|
function event_change_id_agent_inventory() {
|
||||||
agent_changed_by_multiple_agents_inventory(
|
agent_changed_by_multiple_agents_inventory(
|
||||||
{"data" : {
|
{"data" : {
|
||||||
|
@ -1852,6 +1852,33 @@ switch ($action) {
|
|||||||
$good_format = true;
|
$good_format = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'custom_render':
|
||||||
|
$macro_custom_name = get_parameter('macro_custom_name', []);
|
||||||
|
$macro_custom_type = get_parameter('macro_custom_type', []);
|
||||||
|
$macro_custom_value = get_parameter('macro_custom_value', []);
|
||||||
|
$macro_custom_key = get_parameter('macro_custom_key', []);
|
||||||
|
$macros_definition = [];
|
||||||
|
|
||||||
|
foreach ($macro_custom_name as $key_macro => $value_macro) {
|
||||||
|
$kl = (empty($macro_custom_key[$key_macro]) === true) ? 0 : $macro_custom_key[$key_macro];
|
||||||
|
$macros_definition[$key_macro]['name'] = $value_macro;
|
||||||
|
$macros_definition[$key_macro]['type'] = $macro_custom_type[$key_macro];
|
||||||
|
|
||||||
|
|
||||||
|
if (is_array($macro_custom_value[$kl]) === true) {
|
||||||
|
foreach ($macro_custom_value[$kl] as $k => $v) {
|
||||||
|
$macros_definition[$key_macro][$k] = $v;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$macros_definition[$key_macro]['value'] = $macro_custom_value[$key_macro];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$values['macros_definition'] = json_encode($macros_definition);
|
||||||
|
$values['render_definition'] = get_parameter('render_definition', '');
|
||||||
|
$good_format = true;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'min_value':
|
case 'min_value':
|
||||||
case 'max_value':
|
case 'max_value':
|
||||||
case 'avg_value':
|
case 'avg_value':
|
||||||
@ -2602,6 +2629,33 @@ switch ($action) {
|
|||||||
$good_format = true;
|
$good_format = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'custom_render':
|
||||||
|
$macro_custom_name = get_parameter('macro_custom_name', []);
|
||||||
|
$macro_custom_type = get_parameter('macro_custom_type', []);
|
||||||
|
$macro_custom_value = get_parameter('macro_custom_value', []);
|
||||||
|
$macro_custom_key = get_parameter('macro_custom_key', []);
|
||||||
|
$macros_definition = [];
|
||||||
|
|
||||||
|
foreach ($macro_custom_name as $key_macro => $value_macro) {
|
||||||
|
$kl = (empty($macro_custom_key[$key_macro]) === true) ? 0 : $macro_custom_key[$key_macro];
|
||||||
|
$macros_definition[$key_macro]['name'] = $value_macro;
|
||||||
|
$macros_definition[$key_macro]['type'] = $macro_custom_type[$key_macro];
|
||||||
|
|
||||||
|
|
||||||
|
if (is_array($macro_custom_value[$kl]) === true) {
|
||||||
|
foreach ($macro_custom_value[$kl] as $k => $v) {
|
||||||
|
$macros_definition[$key_macro][$k] = $v;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$macros_definition[$key_macro]['value'] = $macro_custom_value[$key_macro];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$values['macros_definition'] = json_encode($macros_definition);
|
||||||
|
$values['render_definition'] = get_parameter('render_definition', '');
|
||||||
|
$good_format = true;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'min_value':
|
case 'min_value':
|
||||||
case 'max_value':
|
case 'max_value':
|
||||||
case 'avg_value':
|
case 'avg_value':
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 775 B |
@ -34,6 +34,10 @@ $id = get_parameter('id', 0);
|
|||||||
$truncate_text = get_parameter('truncate_text', 0);
|
$truncate_text = get_parameter('truncate_text', 0);
|
||||||
$get_metaconsole_hash_data = get_parameter('get_metaconsole_hash_data', 0);
|
$get_metaconsole_hash_data = get_parameter('get_metaconsole_hash_data', 0);
|
||||||
$get_metaconsole_server_url = get_parameter('get_metaconsole_server_url', 0);
|
$get_metaconsole_server_url = get_parameter('get_metaconsole_server_url', 0);
|
||||||
|
$change_custom_fields_macros_report = (bool) get_parameter(
|
||||||
|
'change_custom_fields_macros_report',
|
||||||
|
0
|
||||||
|
);
|
||||||
|
|
||||||
if ($delete_sla_item) {
|
if ($delete_sla_item) {
|
||||||
$result = db_process_sql_delete('treport_content_sla_combined', ['id' => (int) $id]);
|
$result = db_process_sql_delete('treport_content_sla_combined', ['id' => (int) $id]);
|
||||||
@ -218,3 +222,25 @@ if ($get_metaconsole_server_url) {
|
|||||||
echo $server['server_url'];
|
echo $server['server_url'];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($change_custom_fields_macros_report === true) {
|
||||||
|
include_once $config['homedir'].'/include/functions_reports.php';
|
||||||
|
$macro_type = get_parameter('macro_type', '');
|
||||||
|
$macro_id = get_parameter('macro_id', 0);
|
||||||
|
|
||||||
|
$macro = [
|
||||||
|
'name' => '',
|
||||||
|
'type' => $macro_type,
|
||||||
|
'value' => '',
|
||||||
|
];
|
||||||
|
$custom_fields = custom_fields_macros_report($macro, $macro_id);
|
||||||
|
$custom_field_draw = '';
|
||||||
|
if (empty($custom_fields) === false) {
|
||||||
|
foreach ($custom_fields as $key => $value) {
|
||||||
|
$custom_field_draw .= $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo $custom_field_draw;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
@ -4194,7 +4194,7 @@ function generator_chart_to_pdf(
|
|||||||
) {
|
) {
|
||||||
$width_img = 650;
|
$width_img = 650;
|
||||||
$height_img = ($params['height'] + 50);
|
$height_img = ($params['height'] + 50);
|
||||||
} else if ($type_graph_pdf === 'hbar') {
|
} else if ($type_graph_pdf === 'hbar' || $type_graph_pdf === 'pie_chart') {
|
||||||
$width_img = ($params['width'] ?? 550);
|
$width_img = ($params['width'] ?? 550);
|
||||||
$height_img = $params['height'];
|
$height_img = $params['height'];
|
||||||
} else {
|
} else {
|
||||||
|
@ -808,7 +808,7 @@ function html_print_select(
|
|||||||
$output .= '<div class="flex-row-center">';
|
$output .= '<div class="flex-row-center">';
|
||||||
}
|
}
|
||||||
|
|
||||||
$output .= '<select '.$required.' onclick="'.$script.'" id="'.$id.'" name="'.$name.'"'.$attributes.' '.$styleText.'>';
|
$output .= '<select '.$required.' id="'.$id.'" name="'.$name.'"'.$attributes.' '.$styleText.'>';
|
||||||
|
|
||||||
if ($nothing !== false) {
|
if ($nothing !== false) {
|
||||||
if ($nothing != '' || empty($fields)) {
|
if ($nothing != '' || empty($fields)) {
|
||||||
@ -4766,10 +4766,15 @@ function html_print_input($data, $wrapper='div', $input_only=false)
|
|||||||
|
|
||||||
enterprise_include_once('include/functions_metaconsole.php');
|
enterprise_include_once('include/functions_metaconsole.php');
|
||||||
|
|
||||||
|
$style = '';
|
||||||
if ($config['style'] === 'pandora_black' && !is_metaconsole()) {
|
if ($config['style'] === 'pandora_black' && !is_metaconsole()) {
|
||||||
$style = 'style="color: white"';
|
$style = 'style="color: white"';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($data['label_class']) === false) {
|
||||||
|
$data['label_class'] = '';
|
||||||
|
}
|
||||||
|
|
||||||
$output = '';
|
$output = '';
|
||||||
|
|
||||||
if (($data['label'] ?? false) && $input_only === false) {
|
if (($data['label'] ?? false) && $input_only === false) {
|
||||||
|
@ -688,6 +688,15 @@ function reporting_make_reporting_data(
|
|||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'custom_render':
|
||||||
|
$report['contents'][] = reporting_custom_render(
|
||||||
|
$report,
|
||||||
|
$content,
|
||||||
|
$type,
|
||||||
|
$pdf
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
|
||||||
case 'group_configuration':
|
case 'group_configuration':
|
||||||
$report['contents'][] = reporting_group_configuration(
|
$report['contents'][] = reporting_group_configuration(
|
||||||
$report,
|
$report,
|
||||||
@ -4675,6 +4684,294 @@ function reporting_network_interfaces_report($report, $content, $type='dinamic',
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function reporting_custom_render($report, $content, $type='dinamic', $pdf=0)
|
||||||
|
{
|
||||||
|
global $config;
|
||||||
|
|
||||||
|
$return['type'] = 'custom_render';
|
||||||
|
|
||||||
|
if (empty($content['name'])) {
|
||||||
|
$content['name'] = __('Custom render report');
|
||||||
|
}
|
||||||
|
|
||||||
|
$return['title'] = $content['name'];
|
||||||
|
$return['landscape'] = $content['landscape'];
|
||||||
|
$return['pagebreak'] = $content['pagebreak'];
|
||||||
|
$return['subtitle'] = '';
|
||||||
|
$return['description'] = $content['description'];
|
||||||
|
$return['date'] = reporting_get_date_text($report, $content);
|
||||||
|
$return['failed'] = null;
|
||||||
|
|
||||||
|
$macros = [];
|
||||||
|
$patterns = [];
|
||||||
|
$substitutions = [];
|
||||||
|
if (isset($content['macros_definition']) === true
|
||||||
|
&& empty($content['macros_definition']) === false
|
||||||
|
) {
|
||||||
|
$macros = json_decode(
|
||||||
|
io_safe_output($content['macros_definition']),
|
||||||
|
true
|
||||||
|
);
|
||||||
|
if (empty($macros) === false && is_array($macros) === true) {
|
||||||
|
foreach ($macros as $key_macro => $data_macro) {
|
||||||
|
switch ($data_macro['type']) {
|
||||||
|
case 0:
|
||||||
|
// Type: String.
|
||||||
|
$patterns[] = addslashes(
|
||||||
|
'/_'.$data_macro['name'].'_/'
|
||||||
|
);
|
||||||
|
$substitutions[] = $data_macro['value'];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
// Type Sql value.
|
||||||
|
$patterns[] = addslashes(
|
||||||
|
'/_'.$data_macro['name'].'_/'
|
||||||
|
);
|
||||||
|
|
||||||
|
$regex = '/(UPDATE|INSERT INTO|DELETE FROM|TRUNCATE|DROP|ALTER|CREATE|GRANT|REVOKE)\s+(.*?)\s+/i';
|
||||||
|
if (preg_match($regex, $data_macro['value']) > 0) {
|
||||||
|
$value_query = __('This query is insecure, it could apply unwanted modiffications on the schema');
|
||||||
|
} else {
|
||||||
|
$error_reporting = error_reporting();
|
||||||
|
error_reporting(0);
|
||||||
|
$value_query = db_get_value_sql(
|
||||||
|
trim($data_macro['value'], ';')
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($value_query === false) {
|
||||||
|
$value_query = __('Error: %s', $config['dbconnection']->error);
|
||||||
|
}
|
||||||
|
|
||||||
|
error_reporting($error_reporting);
|
||||||
|
}
|
||||||
|
|
||||||
|
$substitutions[] = $value_query;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
// Type: SQL graph.
|
||||||
|
$patterns[] = addslashes(
|
||||||
|
'/_'.$data_macro['name'].'_/'
|
||||||
|
);
|
||||||
|
|
||||||
|
$regex = '/(UPDATE|INSERT INTO|DELETE FROM|TRUNCATE|DROP|ALTER|CREATE|GRANT|REVOKE)\s+(.*?)\s+/i';
|
||||||
|
if (preg_match($regex, $data_macro['value']) > 0) {
|
||||||
|
$value_query = __('This query is insecure, it could apply unwanted modiffications on the schema');
|
||||||
|
} else {
|
||||||
|
$error_reporting = error_reporting();
|
||||||
|
error_reporting(0);
|
||||||
|
$data_query = db_get_all_rows_sql(
|
||||||
|
trim($data_macro['value'], ';')
|
||||||
|
);
|
||||||
|
|
||||||
|
error_reporting($error_reporting);
|
||||||
|
|
||||||
|
if ($data_query === false) {
|
||||||
|
$value_query = __('Error: %s', $config['dbconnection']->error);
|
||||||
|
} else {
|
||||||
|
$width = 210;
|
||||||
|
if (isset($data_macro['width']) === true
|
||||||
|
&& empty($data_macro['width']) === false
|
||||||
|
) {
|
||||||
|
$width = $data_macro['width'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$height = 210;
|
||||||
|
if (isset($data_macro['height']) === true
|
||||||
|
&& empty($data_macro['height']) === false
|
||||||
|
) {
|
||||||
|
$height = $data_macro['height'];
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Allow to paint horizontal and vertical bar graphs for the moment only pie graphs.
|
||||||
|
$type = 'sql_graph_pie';
|
||||||
|
|
||||||
|
$SQL_GRAPH_MAX_LABEL_SIZE = 5;
|
||||||
|
|
||||||
|
$count = 0;
|
||||||
|
$flagOther = false;
|
||||||
|
foreach ($data_query as $data_item) {
|
||||||
|
$count++;
|
||||||
|
$value = 0;
|
||||||
|
if (empty($data_item['value']) === false) {
|
||||||
|
$value = $data_item['value'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($count <= 5) {
|
||||||
|
$label = __('Data');
|
||||||
|
if (empty($data_item['label']) === false) {
|
||||||
|
$label = io_safe_output($data_item['label']);
|
||||||
|
if (strlen($label) > $SQL_GRAPH_MAX_LABEL_SIZE) {
|
||||||
|
$first_label = $label;
|
||||||
|
$label = substr(
|
||||||
|
$first_label,
|
||||||
|
0,
|
||||||
|
floor($SQL_GRAPH_MAX_LABEL_SIZE / 2)
|
||||||
|
);
|
||||||
|
$label .= '...<br>';
|
||||||
|
$label .= substr(
|
||||||
|
$first_label,
|
||||||
|
floor(-$SQL_GRAPH_MAX_LABEL_SIZE / 2)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ($type) {
|
||||||
|
case 'sql_graph_vbar':
|
||||||
|
default:
|
||||||
|
// Vertical bar.
|
||||||
|
$data[] = [
|
||||||
|
'tick' => $label.'_'.$count,
|
||||||
|
'data' => $value,
|
||||||
|
];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'sql_graph_hbar':
|
||||||
|
// Horizontal bar.
|
||||||
|
$data[$label.'_'.$count]['g'] = $value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'sql_graph_pie':
|
||||||
|
// Pie.
|
||||||
|
$data[$label.'_'.$count] = $value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch ($type) {
|
||||||
|
case 'sql_graph_vbar':
|
||||||
|
default:
|
||||||
|
// Vertical bar.
|
||||||
|
if ($flagOther === false) {
|
||||||
|
$data[] = [
|
||||||
|
'tick' => __('Other'),
|
||||||
|
'data' => $value,
|
||||||
|
];
|
||||||
|
|
||||||
|
$flagOther = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$data[(count($data) - 1)]['data'] += $value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'sql_graph_hbar':
|
||||||
|
// Horizontal bar.
|
||||||
|
if (isset($data[__('Other')]['g']) === false) {
|
||||||
|
$data[__('Other')]['g'] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$data[__('Other')]['g'] += $value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'sql_graph_pie':
|
||||||
|
// Pie.
|
||||||
|
if (isset($data[__('Other')]) === false) {
|
||||||
|
$data[__('Other')] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$data[__('Other')] += $value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$value_query = pie_graph(
|
||||||
|
$data,
|
||||||
|
$width,
|
||||||
|
$height,
|
||||||
|
__('other'),
|
||||||
|
ui_get_full_url(false, false, false, false),
|
||||||
|
'',
|
||||||
|
$config['fontpath'],
|
||||||
|
$config['font_size'],
|
||||||
|
($pdf === true) ? 2 : 1,
|
||||||
|
'hidden',
|
||||||
|
'',
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$substitutions[] = $value_query;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
// Type: Simple graph.
|
||||||
|
$patterns[] = addslashes(
|
||||||
|
'/_'.$data_macro['name'].'_/'
|
||||||
|
);
|
||||||
|
|
||||||
|
$height = $config['graph_image_height'];
|
||||||
|
if (isset($data_macro['height']) === true
|
||||||
|
&& empty($data_macro['height']) === false
|
||||||
|
) {
|
||||||
|
$height = $data_macro['height'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$period = SECONDS_1DAY;
|
||||||
|
if (isset($data_macro['period']) === true
|
||||||
|
&& empty($data_macro['period']) === false
|
||||||
|
) {
|
||||||
|
$period = $data_macro['period'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_metaconsole() === true) {
|
||||||
|
$server = db_get_row(
|
||||||
|
'tmetaconsole_setup',
|
||||||
|
'id',
|
||||||
|
$data_macro['server_id']
|
||||||
|
);
|
||||||
|
if (metaconsole_connect($server) != NOERR) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$params = [
|
||||||
|
'agent_module_id' => $data_macro['id_agent_module'],
|
||||||
|
'period' => $period,
|
||||||
|
'title' => '',
|
||||||
|
'label' => '',
|
||||||
|
'pure' => false,
|
||||||
|
'only_image' => true,
|
||||||
|
'homeurl' => ui_get_full_url(
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
false
|
||||||
|
),
|
||||||
|
'ttl' => ($pdf === true) ? 2 : 1,
|
||||||
|
'show_unknown' => true,
|
||||||
|
'height' => $height,
|
||||||
|
'backgroundColor' => 'transparent',
|
||||||
|
'return_img_base_64' => true,
|
||||||
|
'server_id' => (is_metaconsole() === true) ? $data_macro['server_id'] : 0,
|
||||||
|
];
|
||||||
|
|
||||||
|
$substitutions[] = '<img style="max-width:100%;" src="data:image/png;base64,'.grafico_modulo_sparse($params).'" />';
|
||||||
|
|
||||||
|
if (is_metaconsole() === true) {
|
||||||
|
metaconsole_restore_db();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
// Not possible.
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$return['data'] = preg_replace(
|
||||||
|
$patterns,
|
||||||
|
$substitutions,
|
||||||
|
$content['render_definition']
|
||||||
|
);
|
||||||
|
|
||||||
|
return reporting_check_structure_content($return);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function agents_get_network_interfaces_array(
|
function agents_get_network_interfaces_array(
|
||||||
$network_interfaces_by_agents,
|
$network_interfaces_by_agents,
|
||||||
$return,
|
$return,
|
||||||
@ -9961,10 +10258,12 @@ function reporting_get_date_text($report=null, $content=null)
|
|||||||
if (!empty($report) && !empty($content)) {
|
if (!empty($report) && !empty($content)) {
|
||||||
if ($content['period'] == 0) {
|
if ($content['period'] == 0) {
|
||||||
$es = json_decode($content['external_source'], true);
|
$es = json_decode($content['external_source'], true);
|
||||||
if ($es['date'] == 0) {
|
if (empty($es) === false) {
|
||||||
$return['period'] = 0;
|
if ($es['date'] == 0) {
|
||||||
} else {
|
$return['period'] = 0;
|
||||||
$return['date'] = $es['date'];
|
} else {
|
||||||
|
$return['date'] = $es['date'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$return['period'] = $content['period'];
|
$return['period'] = $content['period'];
|
||||||
|
@ -350,6 +350,10 @@ function reporting_html_print_report($report, $mini=false, $report_info=1)
|
|||||||
reporting_html_network_interfaces_report($table, $item);
|
reporting_html_network_interfaces_report($table, $item);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'custom_render':
|
||||||
|
reporting_html_custom_render($table, $item);
|
||||||
|
break;
|
||||||
|
|
||||||
case 'group_configuration':
|
case 'group_configuration':
|
||||||
reporting_html_group_configuration($table, $item);
|
reporting_html_group_configuration($table, $item);
|
||||||
break;
|
break;
|
||||||
@ -3060,6 +3064,47 @@ function reporting_html_network_interfaces_report($table, $item, $pdf=0)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This type of report element will generate the interface graphs
|
||||||
|
* of all those devices that belong to the selected group.
|
||||||
|
*
|
||||||
|
* @param object $table Head table or false if it comes from pdf.
|
||||||
|
* @param array $item Items data.
|
||||||
|
* @param boolean $pdf If it comes from pdf.
|
||||||
|
*
|
||||||
|
* @return string HTML code.
|
||||||
|
*/
|
||||||
|
function reporting_html_custom_render($table, $item, $pdf=0)
|
||||||
|
{
|
||||||
|
$return_pdf = '';
|
||||||
|
if (empty($item['failed']) === false) {
|
||||||
|
if ($pdf === 0) {
|
||||||
|
$table->colspan['interfaces']['cell'] = 3;
|
||||||
|
$table->cellstyle['interfaces']['cell'] = 'text-align: left;';
|
||||||
|
$table->data['interfaces']['cell'] = $item['failed'];
|
||||||
|
} else {
|
||||||
|
$return_pdf .= $item['failed'];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$output = '<div id="reset-styles">';
|
||||||
|
$output .= $item['data'];
|
||||||
|
$output .= '</div>';
|
||||||
|
|
||||||
|
if ($pdf === 1) {
|
||||||
|
$return_pdf .= $output;
|
||||||
|
} else {
|
||||||
|
$id = uniqid();
|
||||||
|
$table->colspan[$id][0] = 3;
|
||||||
|
$table->data[$id] = $output;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($pdf !== 0) {
|
||||||
|
return $return_pdf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unified alert report HTML
|
* Unified alert report HTML
|
||||||
*/
|
*/
|
||||||
|
@ -818,6 +818,13 @@ function reports_get_report_types($template=false, $not_editor=false)
|
|||||||
'optgroup' => __('Grouped'),
|
'optgroup' => __('Grouped'),
|
||||||
'name' => __('Network interfaces'),
|
'name' => __('Network interfaces'),
|
||||||
];
|
];
|
||||||
|
if (!$template) {
|
||||||
|
$types['custom_render'] = [
|
||||||
|
'optgroup' => __('Grouped'),
|
||||||
|
'name' => __('Custom Render'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
$types['availability'] = [
|
$types['availability'] = [
|
||||||
'optgroup' => __('Grouped'),
|
'optgroup' => __('Grouped'),
|
||||||
'name' => __('Availability'),
|
'name' => __('Availability'),
|
||||||
@ -1031,3 +1038,366 @@ function reports_copy_report($id_report)
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Table custom macros.
|
||||||
|
*
|
||||||
|
* @param string $data JSON.
|
||||||
|
*
|
||||||
|
* @return string Html output.
|
||||||
|
*/
|
||||||
|
function get_table_custom_macros_report($data)
|
||||||
|
{
|
||||||
|
$table = new StdClass();
|
||||||
|
$table->data = [];
|
||||||
|
$table->width = '100%';
|
||||||
|
$table->class = 'databox data fullwidth';
|
||||||
|
$table->id = 'table-macros-definition';
|
||||||
|
$table->rowclass = [];
|
||||||
|
|
||||||
|
$table->size = [];
|
||||||
|
$table->size['name'] = '20%';
|
||||||
|
$table->size['type'] = '20%';
|
||||||
|
$table->size['value'] = '50%';
|
||||||
|
$table->size['op'] = '10%';
|
||||||
|
|
||||||
|
$table->head = [];
|
||||||
|
$table->head['name'] = __('Macro');
|
||||||
|
$table->head['type'] = __('Type');
|
||||||
|
$table->head['value'] = __('Value');
|
||||||
|
$table->head['op'] = html_print_image(
|
||||||
|
'images/add.png',
|
||||||
|
true,
|
||||||
|
[
|
||||||
|
'class' => 'invert_filter btn_debugModule',
|
||||||
|
'style' => 'cursor: pointer; filter: invert(100%);',
|
||||||
|
'onclick' => 'addCustomFieldRow();',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
$list_macro_custom_type = [
|
||||||
|
0 => __('String'),
|
||||||
|
1 => __('Sql'),
|
||||||
|
2 => __('Graph Sql'),
|
||||||
|
3 => __('Simple graph'),
|
||||||
|
];
|
||||||
|
|
||||||
|
$data = json_decode($data, true);
|
||||||
|
if (is_array($data) === false || empty($data) === true) {
|
||||||
|
$data = [];
|
||||||
|
$data[0] = [
|
||||||
|
'name' => '',
|
||||||
|
'type' => 0,
|
||||||
|
'value' => '',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
$table->data = [];
|
||||||
|
foreach ($data as $key_macro => $value_data_macro) {
|
||||||
|
$table->rowclass[$key_macro] = 'tr-macros-definition';
|
||||||
|
$table->data[$key_macro]['name'] = html_print_input_text_extended(
|
||||||
|
'macro_custom_name[]',
|
||||||
|
$value_data_macro['name'],
|
||||||
|
($key_macro === 0) ? 'macro_custom_name' : 'macro_custom_name_'.$key_macro,
|
||||||
|
'',
|
||||||
|
15,
|
||||||
|
255,
|
||||||
|
false,
|
||||||
|
'',
|
||||||
|
'class="fullwidth"',
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
$table->data[$key_macro]['name'] .= html_print_input_hidden(
|
||||||
|
'macro_custom_key[]',
|
||||||
|
$key_macro,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
($key_macro === 0) ? 'macro_custom_key' : 'macro_custom_key_'.$key_macro
|
||||||
|
);
|
||||||
|
|
||||||
|
$table->data[$key_macro]['type'] = html_print_select(
|
||||||
|
$list_macro_custom_type,
|
||||||
|
'macro_custom_type[]',
|
||||||
|
$value_data_macro['type'],
|
||||||
|
'change_custom_fields_macros_report('.$key_macro.')',
|
||||||
|
'',
|
||||||
|
0,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
'fullwidth',
|
||||||
|
false,
|
||||||
|
'height: 32px;',
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
'',
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
|
$custom_fields = custom_fields_macros_report(
|
||||||
|
$value_data_macro,
|
||||||
|
$key_macro
|
||||||
|
);
|
||||||
|
|
||||||
|
$custom_field_draw = '';
|
||||||
|
if (empty($custom_fields) === false) {
|
||||||
|
foreach ($custom_fields as $key => $value) {
|
||||||
|
$custom_field_draw .= $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$table->data[$key_macro]['value'] = $custom_field_draw;
|
||||||
|
|
||||||
|
$table->data[$key_macro]['op'] = html_print_image(
|
||||||
|
'images/clean.png',
|
||||||
|
true,
|
||||||
|
[
|
||||||
|
'class' => 'invert_filter icon-clean-custom-macro',
|
||||||
|
'style' => 'cursor: pointer;',
|
||||||
|
'onclick' => 'cleanCustomFieldRow('.$key_macro.')',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
$styles_remove = 'cursor: pointer; margin-right:10px;';
|
||||||
|
if ($key_macro === 0) {
|
||||||
|
$styles_remove .= 'display:none';
|
||||||
|
}
|
||||||
|
|
||||||
|
$table->data[$key_macro]['op'] .= html_print_image(
|
||||||
|
'images/delete.png',
|
||||||
|
true,
|
||||||
|
[
|
||||||
|
'class' => 'invert_filter icon-delete-custom-macro',
|
||||||
|
'style' => $styles_remove,
|
||||||
|
'onclick' => 'removeCustomFieldRow('.$key_macro.')',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return html_print_table(
|
||||||
|
$table,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom field macros report
|
||||||
|
*
|
||||||
|
* @param array $macro Info macro.
|
||||||
|
* @param string $key_macro Key.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
function custom_fields_macros_report($macro, $key_macro)
|
||||||
|
{
|
||||||
|
$result = [];
|
||||||
|
|
||||||
|
switch ($macro['type']) {
|
||||||
|
case 0:
|
||||||
|
case 1:
|
||||||
|
$result['value'] = '<div class="custom-field-macro-report">';
|
||||||
|
$result['value'] .= '<label>';
|
||||||
|
$result['value'] .= ($macro['type'] == 0) ? __('String') : __('Sql');
|
||||||
|
$result['value'] .= '</label>';
|
||||||
|
$result['value'] .= html_print_input_text_extended(
|
||||||
|
'macro_custom_value[]',
|
||||||
|
$macro['value'],
|
||||||
|
($key_macro === 0) ? 'macro_custom_value' : 'macro_custom_value_'.$key_macro,
|
||||||
|
'',
|
||||||
|
15,
|
||||||
|
255,
|
||||||
|
false,
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
true
|
||||||
|
);
|
||||||
|
$result['value'] .= '</div>';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
$result['value'] = '<div class="custom-field-macro-report mb10">';
|
||||||
|
$result['value'] .= '<label>';
|
||||||
|
$result['value'] .= __('Sql');
|
||||||
|
$result['value'] .= '</label>';
|
||||||
|
$result['value'] .= html_print_input_text_extended(
|
||||||
|
'macro_custom_value['.$key_macro.'][value]',
|
||||||
|
$macro['value'],
|
||||||
|
($key_macro === 0) ? 'macro_custom_value' : 'macro_custom_value_'.$key_macro,
|
||||||
|
'',
|
||||||
|
15,
|
||||||
|
255,
|
||||||
|
false,
|
||||||
|
'',
|
||||||
|
'class="fullwidth"',
|
||||||
|
true
|
||||||
|
);
|
||||||
|
$result['value'] .= '</div>';
|
||||||
|
|
||||||
|
$result['size'] = '<div class="custom-field-macro-report">';
|
||||||
|
$result['size'] .= '<label>';
|
||||||
|
$result['size'] .= __('Width');
|
||||||
|
$result['size'] .= '</label>';
|
||||||
|
$result['size'] .= html_print_input_text_extended(
|
||||||
|
'macro_custom_value['.$key_macro.'][width]',
|
||||||
|
$macro['width'],
|
||||||
|
($key_macro === 0) ? 'macro_custom_width' : 'macro_custom_width_'.$key_macro,
|
||||||
|
'',
|
||||||
|
5,
|
||||||
|
255,
|
||||||
|
false,
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
$result['size'] .= '<label>';
|
||||||
|
$result['size'] .= __('Height');
|
||||||
|
$result['size'] .= '</label>';
|
||||||
|
$result['size'] .= html_print_input_text_extended(
|
||||||
|
'macro_custom_value['.$key_macro.'][height]',
|
||||||
|
$macro['height'],
|
||||||
|
($key_macro === 0) ? 'macro_custom_height' : 'macro_custom_height_'.$key_macro,
|
||||||
|
'',
|
||||||
|
5,
|
||||||
|
255,
|
||||||
|
false,
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
true
|
||||||
|
);
|
||||||
|
$result['size'] .= '</div>';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
$params = [];
|
||||||
|
$params['show_helptip'] = true;
|
||||||
|
$params['input_name'] = 'macro_custom_value_agent_name_'.$key_macro;
|
||||||
|
$params['print_hidden_input_idagent'] = true;
|
||||||
|
$params['hidden_input_idagent_id'] = 'macro_custom_value_agent_id_'.$key_macro;
|
||||||
|
$params['hidden_input_idagent_name'] = 'macro_custom_value['.$key_macro.'][agent_id]';
|
||||||
|
$params['hidden_input_idagent_value'] = $macro['agent_id'];
|
||||||
|
$params['javascript_is_function_select'] = true;
|
||||||
|
$params['selectbox_id'] = 'macro_custom_value'.$key_macro.'id_agent_module';
|
||||||
|
$params['add_none_module'] = false;
|
||||||
|
$params['return'] = true;
|
||||||
|
$params['disabled_javascript_on_blur_function'] = true;
|
||||||
|
|
||||||
|
if (is_metaconsole() === true) {
|
||||||
|
$params['print_input_id_server'] = true;
|
||||||
|
$params['metaconsole_enabled'] = true;
|
||||||
|
$params['input_id_server_id'] = 'macro_custom_value_id_server_'.$key_macro;
|
||||||
|
$params['input_id_server_name'] = 'macro_custom_value['.$key_macro.'][server_id]';
|
||||||
|
$params['input_id_server_value'] = $macro['server_id'];
|
||||||
|
$params['value'] = agents_meta_get_alias(
|
||||||
|
$macro['agent_id'],
|
||||||
|
'none',
|
||||||
|
$macro['server_id'],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$params['value'] = agents_get_alias($macro['agent_id']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$result['size'] = '<div class="custom-field-macro-report mb10">';
|
||||||
|
$result['size'] .= '<label>';
|
||||||
|
$result['size'] .= __('Agent');
|
||||||
|
$result['size'] .= '</label>';
|
||||||
|
$result['size'] .= ui_print_agent_autocomplete_input($params);
|
||||||
|
|
||||||
|
$modules = [];
|
||||||
|
if (isset($macro['agent_id']) === true
|
||||||
|
&& empty($macro['agent_id']) === false
|
||||||
|
) {
|
||||||
|
if (is_metaconsole() === true) {
|
||||||
|
$server = db_get_row(
|
||||||
|
'tmetaconsole_setup',
|
||||||
|
'id',
|
||||||
|
$macro['server_id']
|
||||||
|
);
|
||||||
|
if (metaconsole_connect($server) != NOERR) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$modules = agents_get_modules(
|
||||||
|
$macro['agent_id'],
|
||||||
|
false,
|
||||||
|
['delete_pending' => 0]
|
||||||
|
);
|
||||||
|
|
||||||
|
if (is_metaconsole() === true) {
|
||||||
|
metaconsole_restore_db();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$result['size'] .= '<label>';
|
||||||
|
$result['size'] .= __('Module');
|
||||||
|
$result['size'] .= '</label>';
|
||||||
|
$result['size'] .= html_print_select(
|
||||||
|
$modules,
|
||||||
|
'macro_custom_value['.$key_macro.'][id_agent_module]',
|
||||||
|
$macro['id_agent_module'],
|
||||||
|
true,
|
||||||
|
__('Select'),
|
||||||
|
0,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
'',
|
||||||
|
(empty($macro['agent_id']) === true),
|
||||||
|
'min-width: 250px;margin-right: 0.5em;'
|
||||||
|
);
|
||||||
|
$result['size'] .= '</div>';
|
||||||
|
|
||||||
|
$result['size'] .= '<div class="custom-field-macro-report">';
|
||||||
|
$result['size'] .= '<label>';
|
||||||
|
$result['size'] .= __('Height');
|
||||||
|
$result['size'] .= '</label>';
|
||||||
|
$result['size'] .= html_print_input_text_extended(
|
||||||
|
'macro_custom_value['.$key_macro.'][height]',
|
||||||
|
$macro['height'],
|
||||||
|
($key_macro === 0) ? 'macro_custom_height' : 'macro_custom_height_'.$key_macro,
|
||||||
|
'',
|
||||||
|
5,
|
||||||
|
255,
|
||||||
|
false,
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
$result['size'] .= '<label>';
|
||||||
|
$result['size'] .= __('Period ');
|
||||||
|
$result['size'] .= '</label>';
|
||||||
|
$result['size'] .= html_print_input_text_extended(
|
||||||
|
'macro_custom_value['.$key_macro.'][period]',
|
||||||
|
$macro['period'],
|
||||||
|
($key_macro === 0) ? 'macro_custom_period' : 'macro_custom_period_'.$key_macro,
|
||||||
|
'',
|
||||||
|
5,
|
||||||
|
255,
|
||||||
|
false,
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
true
|
||||||
|
);
|
||||||
|
$result['size'] .= '</div>';
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
// Not possible.
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
@ -104,7 +104,7 @@ function pandoraFlotPie(
|
|||||||
'<div style="font-size:' +
|
'<div style="font-size:' +
|
||||||
font_size +
|
font_size +
|
||||||
"pt;" +
|
"pt;" +
|
||||||
'text-align:center;padding:2px;color:white;">' +
|
'text-align:center;padding:2px;color:#4a4a4a;">' +
|
||||||
label +
|
label +
|
||||||
"<br/>" +
|
"<br/>" +
|
||||||
series.percent.toFixed(2) +
|
series.percent.toFixed(2) +
|
||||||
|
@ -8572,3 +8572,446 @@ div#err_msg_centralised {
|
|||||||
width: 90%;
|
width: 90%;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.custom-field-macro-report {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
align-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-field-macro-report label {
|
||||||
|
flex: 0;
|
||||||
|
margin-right: 10px;
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-field-macro-report input {
|
||||||
|
flex: 2;
|
||||||
|
}
|
||||||
|
.mb10 {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#reset-styles {
|
||||||
|
font-size: 9pt;
|
||||||
|
line-height: 16pt;
|
||||||
|
padding: 0px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
/*page-break-after: always;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
#reset-styles a:link {
|
||||||
|
text-decoration: underline;
|
||||||
|
cursor: auto;
|
||||||
|
}
|
||||||
|
#reset-styles a:visited {
|
||||||
|
text-decoration: underline;
|
||||||
|
cursor: auto;
|
||||||
|
}
|
||||||
|
#reset-styles address {
|
||||||
|
display: block;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
#reset-styles area {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#reset-styles article {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
#reset-styles aside {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
#reset-styles b {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
#reset-styles bdo {
|
||||||
|
unicode-bidi: bidi-override;
|
||||||
|
}
|
||||||
|
#reset-styles blockquote {
|
||||||
|
display: block;
|
||||||
|
margin-top: 1em;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
margin-left: 40px;
|
||||||
|
margin-right: 40px;
|
||||||
|
}
|
||||||
|
#reset-styles body {
|
||||||
|
display: block;
|
||||||
|
margin: 8px;
|
||||||
|
}
|
||||||
|
#reset-styles body:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
#reset-styles caption {
|
||||||
|
display: table-caption;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
#reset-styles cite {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
#reset-styles code {
|
||||||
|
font-family: monospace;
|
||||||
|
}
|
||||||
|
#reset-styles col {
|
||||||
|
display: table-column;
|
||||||
|
}
|
||||||
|
#reset-styles colgroup {
|
||||||
|
display: table-column-group;
|
||||||
|
}
|
||||||
|
#reset-styles datalist {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#reset-styles dd {
|
||||||
|
display: block;
|
||||||
|
margin-left: 40px;
|
||||||
|
}
|
||||||
|
#reset-styles del {
|
||||||
|
text-decoration: line-through;
|
||||||
|
}
|
||||||
|
#reset-styles details {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
#reset-styles dfn {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
#reset-styles div {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
#reset-styles dl {
|
||||||
|
display: block;
|
||||||
|
margin-top: 1em;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
#reset-styles dt {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
#reset-styles em {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
#reset-styles embed:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
#reset-styles fieldset {
|
||||||
|
display: block;
|
||||||
|
margin-left: 2px;
|
||||||
|
margin-right: 2px;
|
||||||
|
padding-top: 0.35em;
|
||||||
|
padding-bottom: 0.625em;
|
||||||
|
padding-left: 0.75em;
|
||||||
|
padding-right: 0.75em;
|
||||||
|
border: 2px groove;
|
||||||
|
}
|
||||||
|
#reset-styles figcaption {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
#reset-styles figure {
|
||||||
|
display: block;
|
||||||
|
margin-top: 1em;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
margin-left: 40px;
|
||||||
|
margin-right: 40px;
|
||||||
|
}
|
||||||
|
#reset-styles footer {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
#reset-styles form {
|
||||||
|
display: block;
|
||||||
|
margin-top: 0em;
|
||||||
|
}
|
||||||
|
#reset-styles h1 {
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 2em;
|
||||||
|
margin-top: 0.67em;
|
||||||
|
margin-bottom: 0.67em;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-block-start: 0.67em;
|
||||||
|
margin-block-end: 0.67em;
|
||||||
|
margin-inline-start: 0px;
|
||||||
|
margin-inline-end: 0px;
|
||||||
|
font-weight: bold;
|
||||||
|
text-transform: uppercase;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
#reset-styles h2 {
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 1.5em;
|
||||||
|
margin-top: 0.83em;
|
||||||
|
margin-bottom: 0.83em;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-block-start: 0.83em;
|
||||||
|
margin-block-end: 0.83em;
|
||||||
|
margin-inline-start: 0px;
|
||||||
|
margin-inline-end: 0px;
|
||||||
|
font-weight: bold;
|
||||||
|
text-transform: uppercase;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
#reset-styles h3 {
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 1.17em;
|
||||||
|
margin-top: 1em;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-block-start: 1em;
|
||||||
|
margin-block-end: 1em;
|
||||||
|
margin-inline-start: 0px;
|
||||||
|
margin-inline-end: 0px;
|
||||||
|
font-weight: bold;
|
||||||
|
text-transform: uppercase;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
#reset-styles h4 {
|
||||||
|
display: inline-block;
|
||||||
|
margin-top: 1.33em;
|
||||||
|
margin-bottom: 1.33em;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-block-start: 1.33em;
|
||||||
|
margin-block-end: 1.33em;
|
||||||
|
margin-inline-start: 0px;
|
||||||
|
margin-inline-end: 0px;
|
||||||
|
font-weight: bold;
|
||||||
|
text-transform: uppercase;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
#reset-styles h5 {
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 0.83em;
|
||||||
|
margin-top: 1.67em;
|
||||||
|
margin-bottom: 1.67em;
|
||||||
|
margin-block-start: 1.67em;
|
||||||
|
margin-block-end: 1.67em;
|
||||||
|
margin-inline-start: 0px;
|
||||||
|
margin-inline-end: 0px;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
font-weight: bold;
|
||||||
|
text-transform: uppercase;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
#reset-styles h6 {
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 0.67em;
|
||||||
|
margin-top: 2.33em;
|
||||||
|
margin-bottom: 2.33em;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
font-weight: bold;
|
||||||
|
text-transform: uppercase;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
#reset-styles head {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#reset-styles header {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
#reset-styles hr {
|
||||||
|
display: block;
|
||||||
|
margin-top: 0.5em;
|
||||||
|
margin-bottom: 0.5em;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
border-style: inset;
|
||||||
|
border-width: 1px;
|
||||||
|
}
|
||||||
|
#reset-styles html {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
#reset-styles html:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
#reset-styles i {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
#reset-styles iframe:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
#reset-styles iframe[seamless] {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
#reset-styles img {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
#reset-styles ins {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
#reset-styles kbd {
|
||||||
|
font-family: monospace;
|
||||||
|
}
|
||||||
|
#reset-styles label {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
#reset-styles legend {
|
||||||
|
display: block;
|
||||||
|
padding-left: 2px;
|
||||||
|
padding-right: 2px;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
#reset-styles li {
|
||||||
|
display: list-item;
|
||||||
|
}
|
||||||
|
#reset-styles link {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#reset-styles map {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
#reset-styles mark {
|
||||||
|
background-color: yellow;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
#reset-styles menu {
|
||||||
|
display: block;
|
||||||
|
list-style-type: disc;
|
||||||
|
margin-top: 1em;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
padding-left: 40px;
|
||||||
|
}
|
||||||
|
#reset-styles nav {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
#reset-styles object:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
#reset-styles ol {
|
||||||
|
display: block;
|
||||||
|
list-style-type: decimal;
|
||||||
|
margin-top: 1em;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
padding-left: 40px;
|
||||||
|
}
|
||||||
|
#reset-styles output {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
#reset-styles p {
|
||||||
|
display: block;
|
||||||
|
margin-top: 1em;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
#reset-styles param {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#reset-styles pre {
|
||||||
|
display: block;
|
||||||
|
font-family: monospace;
|
||||||
|
white-space: pre;
|
||||||
|
margin: 1em 0;
|
||||||
|
}
|
||||||
|
#reset-styles q {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
#reset-styles q::before {
|
||||||
|
content: open-quote;
|
||||||
|
}
|
||||||
|
#reset-styles q::after {
|
||||||
|
content: close-quote;
|
||||||
|
}
|
||||||
|
#reset-styles rt {
|
||||||
|
line-height: normal;
|
||||||
|
}
|
||||||
|
#reset-styles s {
|
||||||
|
text-decoration: line-through;
|
||||||
|
}
|
||||||
|
#reset-styles samp {
|
||||||
|
font-family: monospace;
|
||||||
|
}
|
||||||
|
#reset-styles script {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#reset-styles section {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
#reset-styles small {
|
||||||
|
font-size: smaller;
|
||||||
|
}
|
||||||
|
#reset-styles strike {
|
||||||
|
text-decoration: line-through;
|
||||||
|
}
|
||||||
|
#reset-styles strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
#reset-styles style {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#reset-styles sub {
|
||||||
|
vertical-align: sub;
|
||||||
|
font-size: smaller;
|
||||||
|
}
|
||||||
|
#reset-styles summary {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
#reset-styles sup {
|
||||||
|
vertical-align: super;
|
||||||
|
font-size: smaller;
|
||||||
|
}
|
||||||
|
#reset-styles table {
|
||||||
|
display: table;
|
||||||
|
border-collapse: separate;
|
||||||
|
border-spacing: 2px;
|
||||||
|
border-color: gray;
|
||||||
|
}
|
||||||
|
#reset-styles tbody {
|
||||||
|
display: table-row-group;
|
||||||
|
vertical-align: middle;
|
||||||
|
border-color: inherit;
|
||||||
|
}
|
||||||
|
#reset-styles td {
|
||||||
|
display: table-cell;
|
||||||
|
vertical-align: inherit;
|
||||||
|
text-align: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
#reset-styles tfoot {
|
||||||
|
display: table-footer-group;
|
||||||
|
vertical-align: middle;
|
||||||
|
border-color: inherit;
|
||||||
|
}
|
||||||
|
#reset-styles thead tr th {
|
||||||
|
display: table-cell;
|
||||||
|
vertical-align: inherit;
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: center;
|
||||||
|
background-color: initial;
|
||||||
|
color: initial;
|
||||||
|
}
|
||||||
|
#reset-styles thead {
|
||||||
|
display: table-header-group;
|
||||||
|
vertical-align: middle;
|
||||||
|
border-color: inherit;
|
||||||
|
}
|
||||||
|
#reset-styles title {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#reset-styles tr {
|
||||||
|
display: table-row;
|
||||||
|
vertical-align: inherit;
|
||||||
|
border-color: inherit;
|
||||||
|
}
|
||||||
|
#reset-styles u {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
#reset-styles ul {
|
||||||
|
display: block;
|
||||||
|
list-style-type: disc;
|
||||||
|
margin-top: 1em;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
padding-left: 40px;
|
||||||
|
}
|
||||||
|
#reset-styles var {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
@ -1610,6 +1610,8 @@ CREATE TABLE IF NOT EXISTS `treport_content` (
|
|||||||
`ipam_network_filter` INT UNSIGNED DEFAULT 0,
|
`ipam_network_filter` INT UNSIGNED DEFAULT 0,
|
||||||
`ipam_alive_ips` TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
`ipam_alive_ips` TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
`ipam_ip_not_assigned_to_agent` TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
`ipam_ip_not_assigned_to_agent` TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
`macros_definition` TEXT,
|
||||||
|
`render_definition` TEXT,
|
||||||
PRIMARY KEY(`id_rc`),
|
PRIMARY KEY(`id_rc`),
|
||||||
FOREIGN KEY (`id_report`) REFERENCES treport(`id_report`)
|
FOREIGN KEY (`id_report`) REFERENCES treport(`id_report`)
|
||||||
ON UPDATE CASCADE ON DELETE CASCADE
|
ON UPDATE CASCADE ON DELETE CASCADE
|
||||||
@ -3244,6 +3246,8 @@ CREATE TABLE IF NOT EXISTS `treport_content_template` (
|
|||||||
`ipam_network_filter` INT UNSIGNED DEFAULT 0,
|
`ipam_network_filter` INT UNSIGNED DEFAULT 0,
|
||||||
`ipam_alive_ips` TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
`ipam_alive_ips` TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
`ipam_ip_not_assigned_to_agent` TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
`ipam_ip_not_assigned_to_agent` TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
||||||
|
`macros_definition` TEXT,
|
||||||
|
`render_definition` TEXT,
|
||||||
PRIMARY KEY(`id_rc`)
|
PRIMARY KEY(`id_rc`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
|
) ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user