From 51e7d2d4233f70a1c37b8d6ed41f2d3896231171 Mon Sep 17 00:00:00 2001
From: Jonathan <jonathan.leon@pandorafms.com>
Date: Tue, 20 Feb 2024 12:54:35 +0100
Subject: [PATCH] #12497 dots

---
 pandora_console/godmode/setup/setup.php    | 26 ++++++-
 pandora_console/include/functions_html.php | 42 ++++++++++++
 pandora_console/include/functions_ui.php   | 23 +++++--
 pandora_console/include/styles/pandora.css | 80 ++++++++++++++++++++++
 4 files changed, 165 insertions(+), 6 deletions(-)

diff --git a/pandora_console/godmode/setup/setup.php b/pandora_console/godmode/setup/setup.php
index df6dcc1eb6..fb1741ed62 100644
--- a/pandora_console/godmode/setup/setup.php
+++ b/pandora_console/godmode/setup/setup.php
@@ -386,6 +386,28 @@ switch ($section) {
     break;
 }
 
+$menu_tabs = [];
+// Agent details.
+$menu_tab_url = '<a href="index.php?sec=gsetup&sec2=godmode/setup/setup&section=general">'.__('General setup').'</a>';
+array_push($menu_tabs, $menu_tab_url);
+// Agent details.
+$menu_tab_url = '<a href="index.php?sec=view&sec2=operation/agentes/estado_agente">'.__('Agent detail').'</a>';
+array_push($menu_tabs, $menu_tab_url);
+
+// Manage agents.
+$menu_tab_url = '<a href="index.php?sec=gagente&sec2=godmode/agentes/modificar_agente">'.__('Manage agents').'</a>';
+array_push($menu_tabs, $menu_tab_url);
+
+// Events.
+$menu_tab_url = '<a href="index.php?sec=eventos&sec2=operation/events/events">'.__('View events').'</a>';
+array_push($menu_tabs, $menu_tab_url);
+
+// Events.
+$menu_tab_url = '<a href="index.php?sec=reporting&sec2=godmode/reporting/reporting_builder">'.__('Custom reports').'</a>';
+array_push($menu_tabs, $menu_tab_url);
+
+$dots = dot_tab($menu_tabs);
+
 // Header.
 ui_print_standard_header(
     __('Setup').' &raquo; '.$subpage,
@@ -403,7 +425,9 @@ ui_print_standard_header(
             'link'  => '',
             'label' => $subpage,
         ],
-    ]
+    ],
+    [],
+    $dots
 );
 
 if (isset($config['error_config_update_config'])) {
diff --git a/pandora_console/include/functions_html.php b/pandora_console/include/functions_html.php
index 3a4ca01ebb..16ba7204d7 100644
--- a/pandora_console/include/functions_html.php
+++ b/pandora_console/include/functions_html.php
@@ -7740,3 +7740,45 @@ function print_email_test_modal_window($id)
 
     echo '<div id="email_test_'.$id.'" title="'.__('Check mail configuration').'" class="invisible">'.html_print_table($table_mail_test, true).$submitButton.'</div>';
 }
+
+
+function dot_tab(array $tabs=[], array $jump_to=[])
+{
+    $tabs_link = '<div class="dot-tab-link">';
+    if (isset($tabs) === true) {
+        foreach ($tabs as $value) {
+            $tabs_link .= $value;
+        }
+    }
+
+    $tabs_link .= '</div>';
+
+    $tabs_jump_to = '';
+    if (isset($jump_to) === true) {
+        foreach ($jump_to as $value) {
+            $tabs_jump_to .= $value;
+        }
+    }
+
+    $output = '
+		<div class="dot-tab">
+			<div></div>
+			<div></div>
+			<div></div>
+			<div class="dot-tab-menu-overlay">
+				<div class="dot-tab-menu">
+					'.$tabs_link;
+    if ($tabs_jump_to !== '') {
+        $output .= '<div class="dot-tab-jump-to">
+					<span class="muted-text ml15">'.__('Jump to').':</span>
+					'.$tabs_jump_to.'
+					</div>';
+    }
+
+    $output .= '</div>
+			</div>
+		</div>
+	';
+
+    return $output;
+}
\ No newline at end of file
diff --git a/pandora_console/include/functions_ui.php b/pandora_console/include/functions_ui.php
index 45aa64df22..8e95a32a45 100755
--- a/pandora_console/include/functions_ui.php
+++ b/pandora_console/include/functions_ui.php
@@ -5230,7 +5230,8 @@ function ui_print_standard_header(
     bool $godmode=false,
     array $options=[],
     array $breadcrumbs=[],
-    array $fav_menu_config=[]
+    array $fav_menu_config=[],
+    string $dots='',
 ) {
     // For standard breadcrumbs.
     ui_require_css_file('discovery');
@@ -5269,7 +5270,8 @@ function ui_print_standard_header(
         '',
         $headerInformation->printHeader(true),
         false,
-        $fav_menu_config
+        $fav_menu_config,
+        $dots
     );
     if ($return !== true) {
         echo $output;
@@ -5310,7 +5312,8 @@ function ui_print_page_header(
     $alias='',
     $breadcrumbs='',
     $hide_left_small=false,
-    $fav_menu_config=[]
+    $fav_menu_config=[],
+    $dots='',
 ) {
     global $config;
 
@@ -5441,12 +5444,22 @@ function ui_print_page_header(
             }
         }
 
-        $buffer .= '</ul></div>';
+        $buffer .= '</ul>';
+        if (isset($dots) === true) {
+            $buffer .= '<div id="menu_dots">'.$dots.'</div>';
+        }
+
+        $buffer .= '</div>';
     } else {
         if ($options != '') {
             $buffer .= '<div id="menu_tab"><ul class="mn"><li>';
             $buffer .= $options;
-            $buffer .= '</li></ul></div>';
+            $buffer .= '</li></ul>';
+            if (isset($dots) === true) {
+                $buffer .= '<div id="menu_dots">'.$dots.'</div>';
+            }
+
+            $buffer .= '</div>';
         }
     }
 
diff --git a/pandora_console/include/styles/pandora.css b/pandora_console/include/styles/pandora.css
index 2b347fd81a..2ef8ce690e 100644
--- a/pandora_console/include/styles/pandora.css
+++ b/pandora_console/include/styles/pandora.css
@@ -2003,6 +2003,7 @@ div.title_line {
 #menu_tab {
   margin-right: 20px;
   margin-top: 50px;
+  display: flex;
 }
 
 #menu_tab .mn,
@@ -13592,3 +13593,82 @@ button.disabled {
 .ui-draggable-handle {
   z-index: 2 !important;
 }
+
+/* Dot tab */
+#menu_dots {
+  margin-left: 10px;
+}
+
+.dot-tab {
+  width: 24px;
+  height: 24px;
+  margin-top: 12px;
+  display: flex;
+  flex-direction: column;
+  flex-wrap: nowrap;
+  justify-content: space-between;
+  align-items: center;
+  padding: 2px;
+  box-sizing: border-box;
+  cursor: pointer;
+  position: relative;
+}
+
+.dot-tab:hover {
+  background-color: var(--background-main-color);
+}
+
+.dot-tab > div:nth-child(1),
+.dot-tab > div:nth-child(2),
+.dot-tab > div:nth-child(3) {
+  background-color: var(--text-color);
+  width: 4px;
+  height: 4px;
+}
+
+.dot-tab-menu-overlay {
+  position: absolute;
+  top: -5px;
+  right: -5px;
+  padding: 30px 10px 10px 10px;
+}
+
+.dot-tab-menu {
+  background-color: var(--secondary-color);
+  border: 1px solid var(--border-color-4);
+  border-radius: 6px;
+  min-width: 170px;
+  min-height: 20px;
+  box-shadow: 0 3px 6px 0 rgba(0, 0, 0, 0.13);
+  padding: 10px 0px;
+  display: none;
+}
+
+.dot-tab:hover .dot-tab-menu {
+  display: block;
+}
+
+.dot-tab-menu a {
+  font-size: 14px;
+  line-height: 23px;
+  padding: 5px 15px;
+  display: block;
+  white-space: nowrap;
+}
+
+.dot-tab-menu a:hover {
+  background-color: var(--table-hover-background);
+  color: var(--text-color);
+  text-decoration: none;
+}
+
+.dot-tab-menu .dot-tab-link > a {
+  font-weight: 900;
+  color: black;
+}
+
+.dot-tab-menu .dot-tab-jump-to {
+  border-top: 1px solid var(--border-color-4);
+  margin-top: 10px;
+  padding-top: 15px;
+}