diff --git a/resources/classes/menu.php b/resources/classes/menu.php index c3542855d8..3ab7b1372f 100644 --- a/resources/classes/menu.php +++ b/resources/classes/menu.php @@ -26,10 +26,6 @@ /** * menu class - * - * @method null delete - * @method null toggle - * @method null copy */ if (!class_exists('menu')) { class menu { @@ -43,7 +39,6 @@ if (!class_exists('menu')) { private $table; private $toggle_field; private $toggle_values; - private $description_field; private $location; public $menu_uuid; public $menu_language; @@ -55,6 +50,24 @@ if (!class_exists('menu')) { */ private $database; + /** + * Settings object set in the constructor. Must be a settings object and cannot be null. + * @var settings Settings Object + */ + private $settings; + + /** + * User UUID set in the constructor. This can be passed in through the $settings_array associative array or set in the session global array + * @var string + */ + private $user_uuid; + + /** + * Domain UUID set in the constructor. This can be passed in through the $settings_array associative array or set in the session global array + * @var string + */ + private $domain_uuid; + /** * called when the object is created */ @@ -64,12 +77,25 @@ if (!class_exists('menu')) { $this->app_uuid = 'f4b3b3d2-6287-489c-2a00-64529e46f2d7'; $this->location = 'menus.php'; + $this->domain_uuid = $setting_array['domain_uuid'] ?? $_SESSION['domain_uuid'] ?? ''; + $this->user_uuid = $setting_array['user_uuid'] ?? $_SESSION['user_uuid'] ?? ''; + //open a database connection if (empty($setting_array['database'])) { $this->database = database::new(); } else { $this->database = $setting_array['database']; } + + //load the settings + if (empty($setting_array['settings'])) { + $this->settings = new settings(['database' => $this->database, 'domain_uuid' => $this->domain_uuid, 'user_uuid' => $this->user_uuid]); + } else { + $this->settings = $setting_array['settings']; + } + + //add multi-lingual support + $this->text = (new text)->get(); } /** @@ -82,14 +108,10 @@ if (!class_exists('menu')) { if (permission_exists($this->name.'_delete')) { - //add multi-lingual support - $language = new text; - $text = $language->get(); - //validate the token $token = new token; if (!$token->validate($_SERVER['PHP_SELF'])) { - message::add($text['message-invalid_token'],'negative'); + message::add($this->text['message-invalid_token'],'negative'); header('Location: '.$this->location); exit; } @@ -137,7 +159,7 @@ if (!class_exists('menu')) { $p->delete('menu_language_delete', 'temp'); //set message - message::add($text['message-delete']); + message::add($this->text['message-delete']); } unset($records); } @@ -151,14 +173,10 @@ if (!class_exists('menu')) { if (permission_exists($this->name.'_delete')) { - //add multi-lingual support - $language = new text; - $text = $language->get(); - //validate the token $token = new token; if (!$token->validate('/core/menu/menu_item_list.php')) { - message::add($text['message-invalid_token'],'negative'); + message::add($this->text['message-invalid_token'],'negative'); header('Location: '.$this->location); exit; } @@ -220,7 +238,7 @@ if (!class_exists('menu')) { $p->delete('menu_item_group_delete', 'temp'); //set message - message::add($text['message-delete']); + message::add($this->text['message-delete']); } unset($records); } @@ -239,14 +257,10 @@ if (!class_exists('menu')) { if (permission_exists($this->name.'_edit')) { - //add multi-lingual support - $language = new text; - $text = $language->get(); - //validate the token $token = new token; if (!$token->validate('/core/menu/menu_item_list.php')) { - message::add($text['message-invalid_token'],'negative'); + message::add($this->text['message-invalid_token'],'negative'); header('Location: '.$this->location); exit; } @@ -294,7 +308,7 @@ if (!class_exists('menu')) { unset($array); //set message - message::add($text['message-toggle']); + message::add($this->text['message-toggle']); } unset($records, $states); } @@ -756,7 +770,7 @@ if (!class_exists('menu')) { $sql .= "and menu_item_uuid is not null "; $sql .= ") "; $sql .= "order by i.menu_item_order asc "; - $parameters['menu_language'] = $_SESSION['domain']['language']['code'] ?? null; + $parameters['menu_language'] = $this->settings->get('domain', 'language', 'en-us'); $parameters['menu_uuid'] = $this->menu_uuid; $result = $this->database->select($sql, $parameters, 'all'); unset($sql, $parameters); @@ -791,7 +805,7 @@ if (!class_exists('menu')) { private function menu_child_array($menu_item_level, $menu_item_uuid) { //set the level - $menu_item_level = $menu_item_level + 1; + $menu_item_level++; //if there are no groups then set the public group if (!isset($_SESSION['groups'][0]['group_name'])) { @@ -824,7 +838,7 @@ if (!class_exists('menu')) { } $sql .= ") "; $sql .= "order by l.menu_item_title, i.menu_item_order asc "; - $parameters['menu_language'] = $_SESSION['domain']['language']['code']; + $parameters['menu_language'] = $this->settings->get('domain', 'language', 'en-us'); $parameters['menu_uuid'] = $this->menu_uuid; $parameters['menu_item_parent_uuid'] = $menu_item_uuid; $sub_result = $this->database->select($sql, $parameters, 'all'); @@ -902,20 +916,16 @@ if (!class_exists('menu')) { //add the menu items $this->restore(); } - unset($sql, $parameters, $result, $row); } /** * build the fixed, static or inline horizontal menu html + * @param array $menu_array Associative array of menu items */ public function menu_horizontal($menu_array) { - //add multi-lingual support - $language = new text; - $text = $language->get(); - //determine menu behavior - $menu_style = !empty($_SESSION['theme']['menu_style']['text']) ? $_SESSION['theme']['menu_style']['text'] : 'fixed'; + $menu_style = $this->settings->get('theme', 'menu_style', 'fixed'); switch ($menu_style) { case 'inline': $menu_type = 'default'; @@ -931,9 +941,9 @@ if (!class_exists('menu')) { break; case 'fixed': default: - $menu_type = 'fixed-'.(!empty($_SESSION['theme']['menu_position']['text']) ? $_SESSION['theme']['menu_position']['text'] : 'top'); + $menu_type = 'fixed-'.$this->settings->get('theme', 'menu_position', 'top'); if (!http_user_agent('mobile')) { - $menu_width = !empty($_SESSION['theme']['menu_width_fixed']['text']) ? $_SESSION['theme']['menu_width_fixed']['text'] : 'calc(90% - 20px)'; + $menu_width = $this->settings->get('theme', 'menu_width_fixed', 'calc(90% - 20px)'); } $menu_brand = true; $menu_corners = null; @@ -946,17 +956,17 @@ if (!class_exists('menu')) { if ($menu_brand) { //define menu brand mark - $menu_brand_text = (!empty($_SESSION['theme']['menu_brand_text']['text'])) ? escape($_SESSION['theme']['menu_brand_text']['text']) : "FusionPBX"; - switch ($_SESSION['theme']['menu_brand_type']['text'] ?? null) { + $menu_brand_text = escape($this->settings->get('theme', 'menu_brand_text', 'FusionPBX')); + switch ($this->settings->get('theme', 'menu_brand_type', '')) { case 'text': $html .= " ".$menu_brand_text."\n"; break; case 'image_text': - $menu_brand_image = (!empty($_SESSION['theme']['menu_brand_image']['text'])) ? escape($_SESSION['theme']['menu_brand_image']['text']) : PROJECT_PATH."/themes/default/images/logo.png"; + $menu_brand_image = escape($this->settings->get('theme', 'menu_brand_image', PROJECT_PATH.'/themes/default/images/logo.png')); $html .= " "; $html .= " "; - if (!empty($_SESSION['theme']['menu_brand_image_hover']['text'])) { - $html .= ""; + if (!empty($this->settings->get('theme', 'menu_brand_image_hover'))) { + $html .= ""; } $html .= "\n"; $html .= " ".$menu_brand_text."\n"; @@ -965,11 +975,11 @@ if (!class_exists('menu')) { break; case 'image': default: - $menu_brand_image = !empty($_SESSION['theme']['menu_brand_image']['text']) ? escape($_SESSION['theme']['menu_brand_image']['text']) : PROJECT_PATH."/themes/default/images/logo.png"; + $menu_brand_image = escape($this->settings->get('theme', 'menu_brand_image', PROJECT_PATH.'/themes/default/images/logo.png')); $html .= " "; $html .= " "; - if (isset($_SESSION['theme']['menu_brand_image_hover']['text']) && !empty($_SESSION['theme']['menu_brand_image_hover']['text'])) { - $html .= ""; + if (!empty($this->settings->get('theme', 'menu_brand_image_hover', ''))) { + $html .= ""; } $html .= "\n"; $html .= " \n"; @@ -997,7 +1007,7 @@ if (!class_exists('menu')) { } $mod_a_2 = (!empty($menu_parent['menu_item_link']) && !$submenu) ? $menu_parent['menu_item_link'] : '#'; $mod_a_3 = ($menu_parent['menu_item_category'] == 'external') ? "target='_blank' " : null; - if (isset($_SESSION['theme']['menu_main_icons']['boolean']) && $_SESSION['theme']['menu_main_icons']['boolean'] == 'true') { + if ($this->settings->get('theme', 'menu_main_icons', true) === true) { if (!empty($menu_parent['menu_item_icon']) && substr($menu_parent['menu_item_icon'], 0, 3) == 'fa-') { // font awesome icon $menu_main_icon = ""; } @@ -1030,7 +1040,7 @@ if (!class_exists('menu')) { } $mod_a_3 = ($menu_sub['menu_item_category'] == 'external') ? "target='_blank' " : null; $menu_sub_icon = null; - if ($_SESSION['theme']['menu_sub_icons']['boolean'] != 'false') { + if ($this->settings->get('theme', 'menu_sub_icons', true) !== false) { if (!empty($menu_sub['menu_item_icon']) && substr($menu_sub['menu_item_icon'], 0, 3) == 'fa-') { // font awesome icon $menu_sub_icon = ""; } @@ -1038,7 +1048,7 @@ if (!class_exists('menu')) { $menu_sub_icon = null; } } - $html .= " \n"; + $html .= " \n"; if ($columns > 1 && $column_current == 1 && ($index_sub+1) > (ceil(@sizeof($menu_parent['menu_items'])/2)-1)) { $html .= " \n"; $html .= " \n"; @@ -1064,34 +1074,30 @@ if (!class_exists('menu')) { //current user (latter condition for backward compatibility) if ( !empty($_SESSION['username']) && - ( - isset($_SESSION['theme']['header_user_visible']['text']) && - $_SESSION['theme']['header_user_visible']['text'] == 'true' - ) || ( - isset($_SESSION['theme']['user_visible']['text']) && - $_SESSION['theme']['user_visible']['text'] == 'true' - )) { + $this->settings->get('theme', 'header_user_visible', 'true') == 'true' && //app_defaults schema data type is 'text' but should be boolean here + $this->settings->get('theme', 'user_visible', 'true') == 'true' //app_defaults schema data type is 'text' but should be boolean here + ) { //set (default) user graphic size and icon - $user_graphic = ""; + $user_graphic = ""; //overwrite user graphic with image from session, if exists - if ($_SESSION['theme']['body_header_user_image']['boolean'] == true && !empty($_SESSION['user']['contact_image']) && is_uuid($_SESSION['user']['contact_image'])) { + if ($this->settings->get('theme', 'body_header_user_image', true) == true && !empty($_SESSION['user']['contact_image']) && is_uuid($_SESSION['user']['contact_image'])) { $user_graphic = ""; } $html .= " \n"; } //domain name/selector - if (!empty($_SESSION['username']) && permission_exists('domain_select') && count($_SESSION['domains']) > 1 && $_SESSION['theme']['domain_visible']['text'] == 'true') { + if (!empty($_SESSION['username']) && permission_exists('domain_select') && count($_SESSION['domains']) > 1 && $this->settings->get('theme', 'domain_visible', 'true') == 'true') { $html .= " \n"; } //logout icon - if (!empty($_SESSION['username']) && isset($_SESSION['theme']['logout_icon_visible']) && $_SESSION['theme']['logout_icon_visible']['text'] == "true") { + if (!empty($_SESSION['username']) && isset($_SESSION['theme']['logout_icon_visible']) && $this->settings->get('theme', 'logout_icon_visible', 'false') == "true") { $username_full = $_SESSION['username'].((count($_SESSION['domains']) > 1) ? "@".$_SESSION["user_context"] : null); $html .= "