Visual console

This commit is contained in:
Jose Gonzalez 2023-03-02 12:59:40 +01:00
parent c508daf560
commit d65852e9aa
6 changed files with 240 additions and 210 deletions

View File

@ -14,7 +14,7 @@
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2007-2021 Artica Soluciones Tecnologicas
* Copyright (c) 2007-2023 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -62,18 +62,18 @@ if ($is_metaconsole === false) {
$pure = (int) get_parameter('pure', 0);
$hack_metaconsole = '';
if (defined('METACONSOLE')) {
if (is_metaconsole() === true) {
$hack_metaconsole = '../../';
}
$buttons['visual_console'] = [
'active' => true,
'text' => '<a href="'.$url_visual_console.'">'.html_print_image(
'images/visual_console.png',
'images/logs@svg.svg',
true,
[
'title' => __('Visual Console List'),
'class' => 'invert_filter',
'class' => 'main_menu_icon invert_filter',
]
).'</a>',
];
@ -81,11 +81,11 @@ $buttons['visual_console'] = [
$buttons['visual_console_favorite'] = [
'active' => false,
'text' => '<a href="'.$url_visual_console_favorite.'">'.html_print_image(
'images/list.png',
'images/star@svg.svg',
true,
[
'title' => __('Visual Favourite Console'),
'class' => 'invert_filter',
'class' => 'main_menu_icon invert_filter',
]
).'</a>',
];
@ -94,11 +94,11 @@ if ($is_enterprise !== ENTERPRISE_NOT_HOOK && $vconsoles_manage) {
$buttons['visual_console_template'] = [
'active' => false,
'text' => '<a href="'.$url_visual_console_template.'">'.html_print_image(
'images/templates.png',
'images/groups@svg.svg',
true,
[
'title' => __('Visual Console Template'),
'class' => 'invert_filter',
'class' => 'main_menu_icon invert_filter',
]
).'</a>',
];
@ -106,11 +106,11 @@ if ($is_enterprise !== ENTERPRISE_NOT_HOOK && $vconsoles_manage) {
$buttons['visual_console_template_wizard'] = [
'active' => false,
'text' => '<a href="'.$url_visual_console_template_wizard.'">'.html_print_image(
'images/wand.png',
'images/wizard@svg.svg',
true,
[
'title' => __('Visual Console Template Wizard'),
'class' => 'invert_filter',
'class' => 'main_menu_icon invert_filter',
]
).'</a>',
];
@ -328,24 +328,6 @@ if ($ag_group > 0) {
}
}
echo "<table class='databox filters bolder mrgn_btn_10px' width='100%'>
<tr>";
if (is_metaconsole() === false) {
echo "<form method='post'
action='index.php?sec=network&amp;sec2=godmode/reporting/map_builder'>";
} else {
echo "<form method='post'
action='index.php?sec=screen&sec2=screens/screens&action=visualmap'>";
}
echo "<td class='w33p'>";
echo __('Search').'&nbsp;';
html_print_input_text('search', $search, '', 50);
echo '</td>';
echo "<td class='w25p'>";
echo __('Group').'&nbsp;';
$own_info = get_user_info($config['id_user']);
if (!$own_info['is_admin'] && !check_acl($config['id_user'], 0, 'VR')) {
$return_all_group = false;
@ -353,26 +335,69 @@ if (!$own_info['is_admin'] && !check_acl($config['id_user'], 0, 'VR')) {
$return_all_group = true;
}
echo '<div class="w250px inline">';
html_print_select_groups(false, 'AR', $return_all_group, 'ag_group', $ag_group, 'this.form.submit();', '', 0, false, false, true, '', false);
echo '</div>';
echo "<td class='w25p'>";
echo __('Group Recursion').'&nbsp;';
html_print_checkbox('recursion', 1, $recursion, false, false, 'this.form.submit()');
$filterTable = new stdClass();
$filterTable->id = 'map_buider_filter';
$filterTable->class = 'filter-table-adv';
$filterTable->width = '100%';
$filterTable->size = [];
$filterTable->size[0] = '33%';
$filterTable->size[1] = '33%';
echo "</td><td class='w22p'>";
html_print_submit_button(
$filterTable->data = [];
$filterTable->data[0][] = html_print_label_input_block(
__('Search'),
'search_visual_console',
false,
[
'icon' => 'search',
'mode' => 'secondary mini',
]
html_print_input_text('search', $search, '', 50, 255, true)
);
$filterTable->data[0][] = html_print_label_input_block(
__('Group'),
html_print_select_groups(false, 'AR', $return_all_group, 'ag_group', $ag_group, 'this.form.submit();', '', 0, true, false, true, '', false)
);
$filterTable->data[0][] = html_print_label_input_block(
__('Group Recursion'),
html_print_checkbox_switch('recursion', 1, $recursion, true, false, 'this.form.submit()')
);
if (is_metaconsole() === false) {
$actionUrl = 'index.php?sec=network&amp;sec2=godmode/reporting/map_builder';
} else {
$actionUrl = 'index.php?sec=screen&sec2=screens/screens&action=visualmap';
}
$searchForm = [];
$searchForm[] = '<form method="POST" action="'.$actionUrl.'">';
$searchForm[] = html_print_table($filterTable, true);
$searchForm[] = html_print_div(
[
'class' => 'action-buttons',
'content' => html_print_submit_button(
__('Filter'),
'search_visual_console',
false,
[
'icon' => 'search',
'mode' => 'mini',
],
true
),
],
true
);
$searchForm[] = '</form>';
ui_toggle(
implode('', $searchForm),
'<span class="subsection_header_title">'.__('Filters').'</span>',
'filter_form',
'',
true,
false,
'',
'white-box-content',
'box-flat white_table_graph fixed_filter_bar'
);
echo '</form>';
echo '</td>';
echo '</tr></table>';
$table = new stdClass();
$table->width = '100%';
@ -471,7 +496,6 @@ if (!$maps && is_metaconsole() === false) {
);
}
} else {
ui_pagination($total_maps, $url, $offset, $pagination);
foreach ($maps as $map) {
// ACL for the visual console permission.
$vconsole_write = false;
@ -505,25 +529,25 @@ if (!$maps && is_metaconsole() === false) {
4 => 'table_action_buttons',
];
$data[3] = '<a class="copy_visualmap" href="index.php?sec=network&amp;sec2=godmode/reporting/map_builder&amp;id_layout='.$map['id'].'&amp;copy_layout=1">'.html_print_image(
'images/copy.png',
'images/copy.svg',
true,
['class' => 'invert_filter']
['class' => 'main_menu_icon invert_filter']
).'</a>';
$data[4] = '<a class="delete_visualmap" href="index.php?sec=network&amp;sec2=godmode/reporting/map_builder&amp;id_layout='.$map['id'].'&amp;delete_layout=1" onclick="javascript: if (!confirm(\''.__('Are you sure?').'\n'.__('Delete').': '.$map['name'].'\')) return false;">'.html_print_image(
'images/cross.png',
'images/delete.svg',
true,
['class' => 'invert_filter']
['class' => 'main_menu_icon invert_filter']
).'</a>';
} else {
$data[3] = '<a class="copy_visualmap" href="index.php?sec=screen&sec2=screens/screens&action=visualmap&pure='.$pure.'&id_layout='.$map['id'].'&amp;copy_layout=1">'.html_print_image(
'images/copy.png',
'images/copy.svg',
true,
['class' => 'invert_filter']
['class' => 'main_menu_icon invert_filter']
).'</a>';
$data[4] = '<a class="delete_visualmap" href="index.php?sec=screen&sec2=screens/screens&action=visualmap&pure='.$pure.'&id_layout='.$map['id'].'&amp;delete_layout=1" onclick="javascript: if (!confirm(\''.__('Are you sure?').'\n'.__('Delete').': '.$map['name'].'\')) return false;">'.html_print_image(
'images/cross.png',
'images/delete.svg',
true,
['class' => 'invert_filter']
['class' => 'main_menu_icon invert_filter']
).'</a>';
}
} else {
@ -535,42 +559,31 @@ if (!$maps && is_metaconsole() === false) {
}
html_print_table($table);
ui_pagination($total_maps, $url, $offset, $pagination, false, 'offset', true, 'pagination-bottom');
}
if ($maps) {
if (is_metaconsole() === false) {
echo '<div class="action-buttons w100p right_align">';
} else {
echo '<div class="w100p right right_align mrgn_btn_20px">';
}
$tablePagination = ui_pagination($total_maps, $url, $offset, $pagination, true, 'offset', false);
}
if ($maps || is_metaconsole() === true) {
if ($vconsoles_write || $vconsoles_manage) {
if (is_metaconsole() === false) {
echo '<form action="index.php?sec=network&amp;sec2=godmode/reporting/visual_console_builder" method="post">';
$actionUrl = 'index.php?sec=network&amp;sec2=godmode/reporting/visual_console_builder';
} else {
echo '<form action="index.php?sec=screen&sec2=screens/screens&action=visualmap&action2=new&operation=new_visualmap&tab=data&pure='.$pure.'" method="post">';
$actionUrl = 'index.php?sec=screen&sec2=screens/screens&action=visualmap&action2=new&operation=new_visualmap&tab=data&pure='.$pure;
}
echo '<form action="'.$actionUrl.'" method="post">';
html_print_input_hidden('edit_layout', 1);
html_print_div(
[
'class' => 'action-buttons',
'content' => html_print_submit_button(
__('Create'),
'',
false,
[ 'icon' => 'next'],
true
),
]
html_print_action_buttons(
html_print_submit_button(
__('Create'),
'',
false,
[ 'icon' => 'next'],
true
),
[ 'right_content' => $tablePagination ]
);
echo '</form>';
}
echo '</div>';
}

View File

@ -15,7 +15,7 @@
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
* Copyright (c) 2005-2023 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License

View File

@ -82,7 +82,7 @@ require_once $config['homedir'].'/include/functions_agents.php';
$table = new stdClass();
$table->id = 'wizard_table';
$table->head = [];
if (!is_metaconsole()) {
if (is_metaconsole() === false) {
$metaconsole_hack = '';
$table->width = '100%';
$table->class = 'databox filters';

View File

@ -14,7 +14,7 @@
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2007-2022 Artica Soluciones Tecnologicas
* Copyright (c) 2007-2023 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -33,15 +33,14 @@ require_once $config['homedir'].'/include/functions_visual_map.php';
// Breadcrumb.
require_once $config['homedir'].'/include/class/HTML.class.php';
ui_require_css_file('discovery');
// ACL for the general permission
$vconsoles_read = check_acl($config['id_user'], 0, 'VR');
$vconsoles_write = check_acl($config['id_user'], 0, 'VW');
$vconsoles_manage = check_acl($config['id_user'], 0, 'VM');
// ACL for the general permission.
$vconsoles_read = (bool) check_acl($config['id_user'], 0, 'VR');
$vconsoles_write = (bool) check_acl($config['id_user'], 0, 'VW');
$vconsoles_manage = (bool) check_acl($config['id_user'], 0, 'VM');
$is_enterprise = enterprise_include_once('include/functions_policies.php');
$is_metaconsole = is_metaconsole();
if (!$vconsoles_read && !$vconsoles_write && !$vconsoles_manage) {
if ($vconsoles_read === false && $vconsoles_write === false && $vconsoles_manage === false) {
db_pandora_audit(
AUDIT_LOG_ACL_VIOLATION,
'Trying to access map builder'
@ -50,8 +49,7 @@ if (!$vconsoles_read && !$vconsoles_write && !$vconsoles_manage) {
exit;
}
if ($is_metaconsole === false) {
if (is_metaconsole() === false) {
$url_visual_console = 'index.php?sec=network&sec2=godmode/reporting/map_builder';
$url_visual_console_favorite = 'index.php?sec=network&sec2=godmode/reporting/visual_console_favorite';
$url_visual_console_template = 'index.php?sec=network&sec2=enterprise/godmode/reporting/visual_console_template';
@ -63,14 +61,16 @@ if ($is_metaconsole === false) {
$url_visual_console_template_wizard = 'index.php?sec=screen&sec2=screens/screens&action=visualmap_wizard';
}
$buttons = [];
$buttons['visual_console'] = [
'active' => false,
'text' => '<a href="'.$url_visual_console.'">'.html_print_image(
'images/visual_console.png',
'images/logs@svg.svg',
true,
[
'title' => __('Visual Console List'),
'class' => 'invert_filter',
'class' => 'main_menu_icon invert_filter',
]
).'</a>',
];
@ -78,11 +78,11 @@ $buttons['visual_console'] = [
$buttons['visual_console_favorite'] = [
'active' => true,
'text' => '<a href="'.$url_visual_console_favorite.'">'.html_print_image(
'images/list.png',
'images/star@svg.svg',
true,
[
'title' => __('Visual Favourite Console'),
'class' => 'invert_filter',
'class' => 'main_menu_icon invert_filter',
]
).'</a>',
];
@ -91,11 +91,11 @@ if ($is_enterprise !== ENTERPRISE_NOT_HOOK && $vconsoles_manage) {
$buttons['visual_console_template'] = [
'active' => false,
'text' => '<a href="'.$url_visual_console_template.'">'.html_print_image(
'images/templates.png',
'images/groups@svg.svg',
true,
[
'title' => __('Visual Console Template'),
'class' => 'invert_filter',
'class' => 'main_menu_icon invert_filter',
]
).'</a>',
];
@ -103,11 +103,11 @@ if ($is_enterprise !== ENTERPRISE_NOT_HOOK && $vconsoles_manage) {
$buttons['visual_console_template_wizard'] = [
'active' => false,
'text' => '<a href="'.$url_visual_console_template_wizard.'">'.html_print_image(
'images/wand.png',
'images/wizard@svg.svg',
true,
[
'title' => __('Visual Console Template Wizard'),
'class' => 'invert_filter',
'class' => 'main_menu_icon invert_filter',
]
).'</a>',
];
@ -136,115 +136,132 @@ $search = (string) get_parameter('search', '');
$ag_group = (int) get_parameter('ag_group', 0);
$recursion = (int) get_parameter('recursion', 0);
if (is_metaconsole() === false) {
echo "<form method='post'
action='index.php?sec=network&amp;sec2=godmode/reporting/visual_console_favorite'>";
} else {
echo "<form method='post'
action='index.php?sec=screen&sec2=screens/screens&action=visualmap_favorite'>";
$returnAllGroups = 0;
$filters = [];
if (empty($search) === false) {
$filters['name'] = io_safe_input($search);
}
echo "<ul class='form_flex'><li class='first_elements'>";
echo '<ul><li>';
echo __('Search').'&nbsp;';
html_print_input_text('search', $search, '', 50);
echo '</li><li>';
echo __('Group').'&nbsp;';
$own_info = get_user_info($config['id_user']);
if ($ag_group > 0) {
$ag_groups = [];
$ag_groups = (array) $ag_group;
if ($recursion) {
$ag_groups = groups_get_children_ids($ag_group, true);
}
} else if ($own_info['is_admin']) {
$returnAllGroups = 1;
}
if ($ag_group) {
$filters['group'] = array_flip($ag_groups);
}
$own_info = get_user_info($config['id_user']);
if (!$own_info['is_admin'] && !check_acl($config['id_user'], 0, 'AW')) {
$return_all_group = false;
} else {
$return_all_group = true;
}
html_print_select_groups(
false,
'AR',
$return_all_group,
'ag_group',
$ag_group,
'',
'',
0,
false,
false,
true,
'',
false
);
echo "</li></ul></li><li class='second_elements'><ul><li>";
echo __('Group Recursion');
html_print_checkbox('recursion', 1, $recursion, false, false, '');
echo '</li><li>';
html_print_submit_button(
__('Search'),
$filterTable = new stdClass();
$filterTable->id = 'visual_console_favorite_filter';
$filterTable->class = 'filter-table-adv';
$filterTable->width = '100%';
$filterTable->size = [];
$filterTable->size[0] = '33%';
$filterTable->size[1] = '33%';
$filterTable->data = [];
$filterTable->data[0][] = html_print_label_input_block(
__('Search'),
html_print_input_text('search', $search, '', 50, 255, true)
);
$filterTable->data[0][] = html_print_label_input_block(
__('Group'),
html_print_select_groups(false, 'AR', $return_all_group, 'ag_group', $ag_group, '', '', 0, true, false, true, '', false)
);
$filterTable->data[0][] = html_print_label_input_block(
__('Group Recursion'),
html_print_checkbox_switch('recursion', 1, $recursion, true, false, '')
);
if (is_metaconsole() === false) {
$actionUrl = 'index.php?sec=network&amp;sec2=godmode/reporting/visual_console_favorite';
} else {
$actionUrl = 'index.php?sec=screen&sec2=screens/screens&action=visualmap_favorite';
}
// exit;
$searchForm = '<form method="POST" action="'.$actionUrl.'">';
$searchForm .= html_print_table($filterTable, true);
$searchForm .= html_print_div(
[
'class' => 'action-buttons',
'content' => html_print_submit_button(
__('Filter'),
'search_visual_console',
false,
[
'icon' => 'search',
'mode' => 'secondary mini',
]
);
echo '</li></ul></li></ul>';
echo '</form>';
$returnAllGroups = 0;
$filters = [];
if (!empty($search)) {
$filters['name'] = io_safe_input($search);
}
if ($ag_group > 0) {
$ag_groups = [];
$ag_groups = (array) $ag_group;
if ($recursion) {
$ag_groups = groups_get_children_ids($ag_group, true);
}
} else if ($own_info['is_admin']) {
$returnAllGroups = 1;
}
if ($ag_group) {
$filters['group'] = array_flip($ag_groups);
}
$favorite_array = visual_map_get_user_layouts(
$config['id_user'],
false,
$filters,
$returnAllGroups,
'mode' => 'mini',
],
true
);
),
],
true
);
$searchForm .= '</form>';
echo "<div id='is_favourite'>";
if ($favorite_array == false) {
ui_print_info_message(__('No favourite consoles defined'));
ui_toggle(
$searchForm,
'<span class="subsection_header_title">'.__('Filters').'</span>',
'filter_form',
'',
true,
false,
'',
'white-box-content',
'box-flat white_table_graph fixed_filter_bar'
);
$favorite_array = visual_map_get_user_layouts(
$config['id_user'],
false,
$filters,
$returnAllGroups,
true
);
echo "<div id='is_favourite'>";
if ($favorite_array == false) {
ui_print_info_message(__('No favourite consoles defined'));
} else {
echo "<ul class='container'>";
foreach ($favorite_array as $favorite_k => $favourite_v) {
if (is_metaconsole() === true) {
$url = 'index.php?sec=screen&sec2=screens/screens&action=visualmap&pure=0&id_visualmap='.$favourite_v['id'];
} else {
echo "<ul class='container'>";
foreach ($favorite_array as $favorite_k => $favourite_v) {
if (is_metaconsole() === true) {
$url = 'index.php?sec=screen&sec2=screens/screens&action=visualmap&pure=0&id_visualmap='.$favourite_v['id'];
} else {
$url = 'index.php?sec=network&sec2=operation/visual_console/render_view&id='.$favourite_v['id'];
}
echo "<a href='".$url."' title='Visual console".$favourite_v['name']."' alt='".$favourite_v['name']."'><li>";
echo "<div class='icon_img'>";
echo html_print_image(
'images/'.groups_get_icon($favourite_v['id_group']).'.png',
true,
['style' => '']
);
echo '</div>';
echo "<div class='text'>";
echo $favourite_v['name'];
echo '</div>';
echo '</li></a>';
}
echo '</ul>';
$url = 'index.php?sec=network&sec2=operation/visual_console/render_view&id='.$favourite_v['id'];
}
echo '</div>';
echo "<a href='".$url."' title='Visual console".$favourite_v['name']."' alt='".$favourite_v['name']."'><li>";
echo "<div class='icon_img'>";
echo html_print_image(
'images/'.groups_get_icon($favourite_v['id_group']).'.png',
true,
['style' => '']
);
echo '</div>';
echo "<div class='text'>";
echo $favourite_v['name'];
echo '</div>';
echo '</li></a>';
}
echo '</ul>';
}
echo '</div>';

View File

@ -138,13 +138,13 @@ div.arrow_box:before {
#menu_tab_frame_view_bc .breadcrumbs_container {
align-self: flex-start;
}
/*
.breadcrumbs_container {
padding-top: 4px;
text-indent: 0.25em;
padding-left: 2.5em;
}
*/
.breadcrumb_link {
color: #848484;
font-size: 10pt;

View File

@ -14,7 +14,7 @@
* |___| |___._|__|__|_____||_____|__| |___._| |___| |__|_|__|_______|
*
* ============================================================================
* Copyright (c) 2005-2021 Artica Soluciones Tecnologicas
* Copyright (c) 2005-2023 Artica Soluciones Tecnologicas
* Please see http://pandorafms.org for full contribution list
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -121,11 +121,11 @@ if ($aclRead === false && $aclWrite === false && $aclManage === false) {
$options = [];
$options['consoles_list']['text'] = '<a href="index.php?sec=network&sec2=godmode/reporting/map_builder">'.html_print_image(
'images/visual_console.png',
'images/logs@svg.svg',
true,
[
'title' => __('Visual consoles list'),
'class' => 'invert_filter',
'class' => 'main_menu_icon invert_filter',
]
).'</a>';
@ -149,29 +149,29 @@ if ($aclWrite === true || $aclManage === true) {
$options['public_link']['text'] = '<a href="'.ui_get_full_url(
'operation/visual_console/public_console.php?hash='.$hash.'&id_layout='.$visualConsoleId.'&refr='.$refr.'&id_user='.$config['id_user']
).'" target="_blank">'.html_print_image(
'images/camera_mc.png',
'images/item-icon.svg',
true,
[
'title' => __('Show link to public Visual Console'),
'class' => 'invert_filter',
'class' => 'main_menu_icon invert_filter',
]
).'</a>';
$options['public_link']['active'] = false;
$options['data']['text'] = '<a href="'.$baseUrl.'&tab=data&id_visual_console='.$visualConsoleId.'">'.html_print_image(
'images/op_reporting.png',
'images/bars-graph.svg',
true,
[
'title' => __('Main data'),
'class' => 'invert_filter',
'class' => 'main_menu_icon invert_filter',
]
).'</a>';
$options['list_elements']['text'] = '<a href="'.$baseUrl.'&tab=list_elements&id_visual_console='.$visualConsoleId.'">'.html_print_image(
'images/list.png',
'images/edit_columns@svg.svg',
true,
[
'title' => __('List elements'),
'class' => 'invert_filter',
'class' => 'main_menu_icon invert_filter',
]
).'</a>';
@ -181,27 +181,27 @@ if ($aclWrite === true || $aclManage === true) {
true,
[
'title' => __('Services wizard'),
'class' => 'invert_filter',
'class' => 'main_menu_icon invert_filter',
]
).'</a>';
}
$options['wizard']['text'] = '<a href="'.$baseUrl.'&tab=wizard&id_visual_console='.$visualConsoleId.'">'.html_print_image(
'images/wand.png',
'images/wizard@svg.svg',
true,
[
'title' => __('Wizard'),
'class' => 'invert_filter',
'class' => 'main_menu_icon invert_filter',
]
).'</a>';
}
$options['view']['text'] = '<a href="index.php?sec=network&sec2=operation/visual_console/render_view&id='.$visualConsoleId.'&refr='.$refr.'">'.html_print_image(
'images/eye.png',
'images/enable.svg',
true,
[
'title' => __('View'),
'class' => 'invert_filter',
'class' => 'main_menu_icon invert_filter',
]
).'</a>';
$options['view']['active'] = true;
@ -209,11 +209,11 @@ $options['view']['active'] = true;
if (is_metaconsole() === false) {
if (!$config['pure']) {
$options['pure']['text'] = '<a id ="full_screen" href="index.php?sec=network&sec2=operation/visual_console/render_view&id='.$visualConsoleId.'&pure=1&refr='.$refr.'">'.html_print_image(
'images/full_screen.png',
'images/fullscreen@svg.svg',
true,
[
'title' => __('Full screen mode'),
'class' => 'invert_filter',
'class' => 'main_menu_icon invert_filter',
]
).'</a>';