From abf9620b9444deff7658d93c7c115a9b76c4799d Mon Sep 17 00:00:00 2001 From: ebremner <ebremner@uwaterloo.ca> Date: Tue, 2 Mar 2021 10:50:53 -0500 Subject: [PATCH] ISTWCMS-4653: checking children of menu items to ensure that they are published --- src/Service/UWService.php | 42 ++++++++++++++++++++---------- src/Service/UWServiceInterface.php | 8 ++++++ 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/src/Service/UWService.php b/src/Service/UWService.php index cb0d6fcf..c6be1b05 100644 --- a/src/Service/UWService.php +++ b/src/Service/UWService.php @@ -293,20 +293,43 @@ class UWService implements UWServiceInterface { */ public function uwGetMenu(string $menu_name = 'main', bool $count_menu_items = FALSE, bool $include_parent_in_count = FALSE): array { - // The base path, need this for removing when on subfoldered sites, - // for example d8/fdsu5/, we need to remove the fdsu5 from the path - // alias. - global $base_path; - // Get the main menu from the simplify menu module. $menu = $this->simplifyMenu->getMenuTree($menu_name); // Set it to the menu_tree which is done by simplify menu. $menu = $menu['menu_tree']; + // Ensure that we only get the published menu items. + $this->uwCheckPublishedMenuItems($menu); + + // If we want to have the count of menu items, then count them. + if ($count_menu_items) { + + // Add the count of the menu items. + $menu = $this->uwSetMenuItems($menu, $include_parent_in_count); + } + + return $menu; + } + + /** + * {@inheritDoc} + */ + public function uwCheckPublishedMenuItems(&$menu): void { + + // The base path, need this for removing when on subfoldered sites, + // for example d8/fdsu5/, we need to remove the fdsu5 from the path + // alias. + global $base_path; + // Step through each menu and ensure that it is published. foreach ($menu as $key => $m) { + // If there is a submenu (i.e. children), process it first. + if (isset($m['submenu'])) { + $this->uwCheckPublishedMenuItems($menu[$key]['submenu']); + } + // Remove the base path from the url so that we can get // the actual content from the path alias. $alias = str_replace($base_path, '', $m['url']); @@ -326,15 +349,6 @@ class UWService implements UWServiceInterface { } } } - - // If we want to have the count of menu items, then count them. - if ($count_menu_items) { - - // Add the count of the menu items. - $menu = $this->uwSetMenuItems($menu, $include_parent_in_count); - } - - return $menu; } /** diff --git a/src/Service/UWServiceInterface.php b/src/Service/UWServiceInterface.php index 93714b1b..c837c74d 100644 --- a/src/Service/UWServiceInterface.php +++ b/src/Service/UWServiceInterface.php @@ -98,6 +98,14 @@ interface UWServiceInterface { */ public function uwGetMenu(string $menu_name = 'main', bool $count_menu_items = FALSE, bool $include_parent_in_count = FALSE): array; + /** + * Function to check that all menu links are published. + * + * @param $menu + * The array of menus. + */ + public function uwCheckPublishedMenuItems(&$menu): void; + /** * A function to setup the menu for UW display. * -- GitLab