diff --git a/gulliver/system/class.menu.php b/gulliver/system/class.menu.php index a9acbad63..82ce5fa03 100755 --- a/gulliver/system/class.menu.php +++ b/gulliver/system/class.menu.php @@ -82,6 +82,7 @@ class Menu public function Load($strMenuName) { global $G_TMP_MENU; + $G_TMP_MENU = null; $G_TMP_MENU = new Menu(); $fMenu = G::ExpandPath("menus") . $strMenuName . ".php"; @@ -104,11 +105,23 @@ class Menu //this line will add options to current menu. $oPluginRegistry = & PMPluginRegistry::getSingleton(); $oPluginRegistry->getMenus($strMenuName); - + + $oMenuFromPlugin = array(); + $oMenuFromPlugin = $oPluginRegistry->getMenuOptionsToReplace($strMenuName); + //? $c = 0; for ($i = 0; $i < count($G_TMP_MENU->Options); $i++) { if ($G_TMP_MENU->Enabled[$i] == 1) { + + if(sizeof($oMenuFromPlugin)) { + $menId = $G_TMP_MENU->Id[$i]; + if(array_key_exists($menId,$oMenuFromPlugin)) { + $G_TMP_MENU->Labels[$i] = $oMenuFromPlugin[$menId][0]['label']; + $G_TMP_MENU->Options[$i] = $oMenuFromPlugin[$menId][0]['href']; + } + } + $this->Options[$c] = $G_TMP_MENU->Options[$i]; $this->Labels[$c] = $G_TMP_MENU->Labels[$i]; $this->Icons[$c] = (isset($G_TMP_MENU->Icons[$i]))? $G_TMP_MENU->Icons[$i] : ""; diff --git a/workflow/engine/classes/class.plugin.php b/workflow/engine/classes/class.plugin.php index b1d6ff200..6bc8052f6 100755 --- a/workflow/engine/classes/class.plugin.php +++ b/workflow/engine/classes/class.plugin.php @@ -396,6 +396,25 @@ class PMPlugin throw $e; } } + + /** + * Changes the menu properties from the given processmaker section and menu id + * + * @param array $from + * + * @param array $options + * + * @return void + */ + public function registerMenuOptionsToReplace($from = array(), $options = array()) + { + try { + $oPluginRegistry =& PMPluginRegistry::getSingleton(); + $oPluginRegistry->registerMenuOptionsToReplace($this->sNamespace, $from, $options); + } catch (Exception $e) { + throw $e; + } + } } class menuDetail @@ -735,4 +754,3 @@ class cronFile $this->cronFile = $cronFile; } } - diff --git a/workflow/engine/classes/class.pluginRegistry.php b/workflow/engine/classes/class.pluginRegistry.php index f577bd279..8cd899128 100755 --- a/workflow/engine/classes/class.pluginRegistry.php +++ b/workflow/engine/classes/class.pluginRegistry.php @@ -102,6 +102,7 @@ class PMPluginRegistry private $_aDashboardPages = array (); private $_aCronFiles = array (); private $_arrayDesignerMenu = array(); + private $_aMenuOptionsToReplace = array (); /** * Registry a plugin javascript to include with js core at same runtime @@ -403,7 +404,11 @@ class PMPluginRegistry unset($this->_arrayDesignerMenu[$key]); } } - + + if(sizeof( $this->_aMenuOptionsToReplace )){ + unset( $this->_aMenuOptionsToReplace ); + } + //unregistering javascripts from this plugin $this->unregisterJavascripts( $sNamespace ); //unregistering rest services from this plugin @@ -1659,5 +1664,43 @@ class PMPluginRegistry throw $e; } } + + /** + * Replace new options to menu + * + * @param unknown_type $namespace + * + * @param array $from + * + * @param array $options + * + * @return void + */ + public function registerMenuOptionsToReplace ($namespace, $from, $options) + { + if(isset($from["section"]) && isset($from["menuId"])) { + $section = $from["section"]; + $oMenuFromPlugin = $this->_aMenuOptionsToReplace; + if(array_key_exists($section,$oMenuFromPlugin)) { + unset($this->_aMenuOptionsToReplace[$from["section"]]); + } + $this->_aMenuOptionsToReplace[$from["section"]][$from["menuId"]][] = $options; + } + } + + /** + * Return all menu Options from a specific section + * + * @return array + */ + public function getMenuOptionsToReplace($strMenuName) + { + $oMenuFromPlugin = $this->_aMenuOptionsToReplace; + if(sizeof($oMenuFromPlugin)) { + if(array_key_exists($strMenuName,$oMenuFromPlugin)) { + return $oMenuFromPlugin[$strMenuName]; + } + } + } }