CRM-17570 - CRM_Core_Menu - Fire `alterMenu` hook
authorTim Otten <totten@civicrm.org>
Sat, 27 Feb 2016 00:59:05 +0000 (16:59 -0800)
committerTim Otten <totten@civicrm.org>
Fri, 1 Apr 2016 16:12:48 +0000 (09:12 -0700)
The `xmlMenu` hook requires a literal XML file.  The `alterMenu` exposes the
live data structure, so that you can more easily mix in data from other
sources.

CRM/Core/Menu.php
CRM/Utils/Hook.php

index e100d996c9e2187758738e52a90dd7f0ffcd0a0b..588bac05dbd4f7deca35ae09ca8685b9efc26a11 100644 (file)
@@ -94,6 +94,8 @@ class CRM_Core_Menu {
       foreach ($files as $file) {
         self::read($file, self::$_items);
       }
+
+      CRM_Utils_Hook::alterMenu(self::$_items);
     }
 
     return self::$_items;
index b06a0607f8e580a8811160961e7d9839df12909c..4123e7971dbe6a2eda150020e63457a73d3ea214 100644 (file)
@@ -518,6 +518,21 @@ abstract class CRM_Utils_Hook {
     );
   }
 
+  /**
+   * (Experimental) This hook is called when build the menu table.
+   *
+   * @param array $items
+   *   List of records to include in menu table.
+   * @return null
+   *   the return value is ignored
+   */
+  public static function alterMenu(&$items) {
+    return self::singleton()->invoke(1, $items,
+      self::$_nullObject, self::$_nullObject, self::$_nullObject, self::$_nullObject, self::$_nullObject,
+      'civicrm_alterMenu'
+    );
+  }
+
   /**
    * This hook is called for declaring managed entities via API.
    *