X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FCore%2FMenu.php;h=c7376b2d345382f76542b2372ad0238ea02c1198;hb=af056369b8e3d2c5a248dfd8a72934ccdf262e86;hp=390d6a2a7c1b6e113c33836d49f3ca31d8917745;hpb=52465a830795bd700893f12610914505b9417f0c;p=civicrm-core.git diff --git a/CRM/Core/Menu.php b/CRM/Core/Menu.php index 390d6a2a7c..c7376b2d34 100644 --- a/CRM/Core/Menu.php +++ b/CRM/Core/Menu.php @@ -16,8 +16,6 @@ * @copyright CiviCRM LLC https://civicrm.org/licensing */ -require_once 'CRM/Core/I18n.php'; - /** * Class CRM_Core_Menu. */ @@ -37,13 +35,13 @@ class CRM_Core_Menu { */ public static $_permissionedItems = NULL; - public static $_serializedElements = array( + public static $_serializedElements = [ 'access_arguments', 'access_callback', 'page_arguments', 'page_callback', 'breadcrumb', - ); + ]; public static $_menuCache = NULL; const MENU_ITEM = 1; @@ -58,8 +56,6 @@ class CRM_Core_Menu { */ public static function &xmlItems($fetchFromXML = FALSE) { if (!self::$_items || $fetchFromXML) { - $config = CRM_Core_Config::singleton(); - // We needs this until Core becomes a component $coreMenuFilesNamespace = 'CRM_Core_xml_Menu'; $coreMenuFilesPath = str_replace('_', DIRECTORY_SEPARATOR, $coreMenuFilesNamespace); @@ -121,7 +117,7 @@ class CRM_Core_Menu { if ($item->ids_arguments) { $ids = []; - foreach (array('json' => 'json', 'html' => 'html', 'exception' => 'exceptions') as $tag => $attr) { + foreach (['json' => 'json', 'html' => 'html', 'exception' => 'exceptions'] as $tag => $attr) { $ids[$attr] = []; foreach ($item->ids_arguments->{$tag} as $value) { $ids[$attr][] = (string) $value; @@ -158,10 +154,10 @@ class CRM_Core_Menu { foreach ($elements as $element) { $items[] = $element; } - $value = array($items, $op); + $value = [$items, $op]; } else { - $value = array(array($value), 'and'); + $value = [[$value], 'and']; } } elseif ($key == 'is_public' || $key == 'is_ssl') { @@ -191,8 +187,8 @@ class CRM_Core_Menu { * * @return bool */ - public static function isArrayTrue(&$values) { - foreach ($values as $name => $value) { + public static function isArrayTrue($values) { + foreach ($values as $value) { if (!$value) { return FALSE; } @@ -209,13 +205,13 @@ class CRM_Core_Menu { * @throws CRM_Core_Exception */ public static function fillMenuValues(&$menu, $path) { - $fieldsToPropagate = array( + $fieldsToPropagate = [ 'access_callback', 'access_arguments', 'page_callback', 'page_arguments', 'is_ssl', - ); + ]; $fieldsPresent = []; foreach ($fieldsToPropagate as $field) { $fieldsPresent[$field] = isset($menu[$path][$field]); @@ -265,14 +261,19 @@ class CRM_Core_Menu { */ public static function build(&$menu) { foreach ($menu as $path => $menuItems) { - self::buildBreadcrumb($menu, $path); - self::fillMenuValues($menu, $path); - self::fillComponentIds($menu, $path); - self::buildReturnUrl($menu, $path); - - // add add page_type if not present - if (!isset($menu[$path]['page_type'])) { - $menu[$path]['page_type'] = 0; + try { + self::buildBreadcrumb($menu, $path); + self::fillMenuValues($menu, $path); + self::fillComponentIds($menu, $path); + self::buildReturnUrl($menu, $path); + + // add add page_type if not present + if (!isset($menu[$path]['page_type'])) { + $menu[$path]['page_type'] = 0; + } + } + catch (CRM_Core_Exception $e) { + Civi::log()->error('Menu path skipped:' . $e->getMessage()); } } @@ -350,16 +351,16 @@ class CRM_Core_Menu { $query = !empty($item['path_arguments']) ? str_replace(',', '&', $item['path_arguments']) . '&reset=1' : 'reset=1'; - $value = array( + $value = [ 'title' => $item['title'], 'desc' => $item['desc'] ?? NULL, - 'id' => strtr($item['title'], array( + 'id' => strtr($item['title'], [ '(' => '_', ')' => '', ' ' => '', ',' => '_', '/' => '_', - )), + ]), 'url' => CRM_Utils_System::url($path, $query, FALSE, NULL, @@ -370,7 +371,7 @@ class CRM_Core_Menu { ), 'icon' => $item['icon'] ?? NULL, 'extra' => $item['extra'] ?? NULL, - ); + ]; if (!array_key_exists($item['adminGroup'], $values)) { $values[$item['adminGroup']] = []; $values[$item['adminGroup']]['fields'] = []; @@ -383,25 +384,17 @@ class CRM_Core_Menu { ksort($values[$group]); } - $menu['admin'] = array('breadcrumb' => $values); + $menu['admin'] = ['breadcrumb' => $values]; } /** * Get admin links. * - * @return null + * @return array|null */ - public static function &getAdminLinks() { + public static function getAdminLinks() { $links = self::get('admin'); - - if (!$links || - !isset($links['breadcrumb']) - ) { - return NULL; - } - - $values = &$links['breadcrumb']; - return $values; + return $links['breadcrumb'] ?? NULL; } /** @@ -436,7 +429,7 @@ class CRM_Core_Menu { isset($menu[$currentPath]['title']) ) { $urlVar = !empty($menu[$currentPath]['path_arguments']) ? '&' . $menu[$currentPath]['path_arguments'] : ''; - $crumbs[] = array( + $crumbs[] = [ 'title' => $menu[$currentPath]['title'], 'url' => CRM_Utils_System::url($currentPath, 'reset=1' . $urlVar, @@ -451,7 +444,7 @@ class CRM_Core_Menu { // forceBackend; CRM-14439 work-around; acceptable for now because we don't display breadcrumbs on frontend TRUE ), - ); + ]; } } $menu[$path]['breadcrumb'] = $crumbs; @@ -460,12 +453,12 @@ class CRM_Core_Menu { } /** - * @param $menu - * @param $path + * @param array $menu + * @param string|int $path */ public static function buildReturnUrl(&$menu, $path) { if (!isset($menu[$path]['return_url'])) { - list($menu[$path]['return_url'], $menu[$path]['return_url_args']) = self::getReturnUrl($menu, $path); + [$menu[$path]['return_url'], $menu[$path]['return_url_args']] = self::getReturnUrl($menu, $path); } } @@ -481,21 +474,17 @@ class CRM_Core_Menu { array_pop($pathElements); if (empty($pathElements)) { - return array(NULL, NULL); + return [NULL, NULL]; } $newPath = implode('/', $pathElements); return self::getReturnUrl($menu, $newPath); } else { - return array( - CRM_Utils_Array::value('return_url', - $menu[$path] - ), - CRM_Utils_Array::value('return_url_args', - $menu[$path] - ), - ); + return [ + $menu[$path]['return_url'] ?? NULL, + $menu[$path]['return_url_args'] ?? NULL, + ]; } } @@ -539,16 +528,13 @@ class CRM_Core_Menu { } /** - * @param $path string + * @param string $path * Path of menu item to retrieve. * * @return array * Menu entry array. */ public static function get($path) { - // return null if menu rebuild - $config = CRM_Core_Config::singleton(); - $args = explode('/', $path); $elements = []; @@ -617,20 +603,10 @@ UNION ( } } - // *FIXME* : hack for 4.1 -> 4.2 upgrades. if (preg_match('/^civicrm\/(upgrade\/)?queue\//', $path)) { CRM_Queue_Menu::alter($path, $menuPath); } - // Part of upgrade framework but not run inside main upgrade because it deletes data - // Once we have another example of a 'cleanup' we should generalize the clause below so it grabs string - // which follows upgrade/ and checks for existence of a function in Cleanup class. - if ($path == 'civicrm/upgrade/cleanup425') { - $menuPath['page_callback'] = array('CRM_Upgrade_Page_Cleanup', 'cleanup425'); - $menuPath['access_arguments'][0][] = 'administer CiviCRM'; - $menuPath['access_callback'] = array('CRM_Core_Permission', 'checkMenu'); - } - if (!empty($menuPath)) { $i18n = CRM_Core_I18n::singleton(); $i18n->localizeTitles($menuPath); @@ -647,7 +623,7 @@ UNION ( if (!is_string($pathArgs)) { return; } - $args = []; + $arr = []; $elements = explode(',', $pathArgs); foreach ($elements as $keyVal) {