浏览代码

Added ticket module (prerequiste to incident etc.) and change the declaration of a menu : made by an identifier

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@510 a333f486-631f-4898-b8df-5754b55c2be0
romainq 15 年之前
父节点
当前提交
ff3c512519

+ 12 - 12
application/itopwebpage.class.inc.php

@@ -230,23 +230,23 @@ EOF
 		 *		Data Model
 		 *		Universal Search
 		 */
-		$oWelcomeMenu = new MenuGroup('UI:WelcomeMenu', 0 /* fRank */);
-		new TemplateMenuNode('UI:WelcomeMenuPage', '../business/templates/welcome_menu.html', $oWelcomeMenu->GetIndex() /* oParent */, 1 /* fRank */);
+		$oWelcomeMenu = new MenuGroup('WelcomeMenu', 0 /* fRank */);
+		new TemplateMenuNode('WelcomeMenuPage', '../business/templates/welcome_menu.html', $oWelcomeMenu->GetIndex() /* oParent */, 1 /* fRank */);
 		
-		$oToolsMenu = new MenuGroup('UI:AdvancedToolsMenu', 2 /* fRank */);
-		new WebPageMenuNode('UI:CSVImportMenu', '../pages/csvimport.php', $oToolsMenu->GetIndex(), 1 /* fRank */);
+		$oToolsMenu = new MenuGroup('AdvancedToolsMenu', 2 /* fRank */);
+		new WebPageMenuNode('CSVImportMenu', '../pages/csvimport.php', $oToolsMenu->GetIndex(), 1 /* fRank */);
 
 		if (userRights::IsAdministrator())
 		{
 			// Add the admin menus
-			$oAdminMenu = new MenuGroup('UI:AdminToolsMenu', 999 /* fRank */);
-			new OQLMenuNode('UI:UserAccountsMenu', 'UI:UserAccountsMenu:Title', 'SELECT URP_Users', $oAdminMenu->GetIndex(), 1 /* fRank */);
-			new OQLMenuNode('UI:ProfilesMenu', 'UI:ProfilesMenu:Title', 'SELECT URP_Profiles', $oAdminMenu->GetIndex(), 2 /* fRank */);
-			new TemplateMenuNode('UI:NotificationsMenu', '../business/templates/notifications_menu.html', $oAdminMenu->GetIndex(), 3 /* fRank */);
-			new WebPageMenuNode('UI:RunQueriesMenu', '../pages/run_query.php', $oAdminMenu->GetIndex(), 8 /* fRank */);
-			new WebPageMenuNode('UI:ExportMenu', '../webservices/export.php', $oAdminMenu->GetIndex(), 9 /* fRank */);
-			new WebPageMenuNode('UI:DataModelMenu', '../pages/schema.php', $oAdminMenu->GetIndex(), 10 /* fRank */);
-			new WebPageMenuNode('UI:UniversalSearchMenu', '../pages/UniversalSearch.php', $oAdminMenu->GetIndex(), 11 /* fRank */);
+			$oAdminMenu = new MenuGroup('AdminTools', 999 /* fRank */);
+			new OQLMenuNode('UserAccountsMenu', 'SELECT URP_Users', $oAdminMenu->GetIndex(), 1 /* fRank */);
+			new OQLMenuNode('ProfilesMenu', 'SELECT URP_Profiles', $oAdminMenu->GetIndex(), 2 /* fRank */);
+			new TemplateMenuNode('NotificationsMenu', '../business/templates/notifications_menu.html', $oAdminMenu->GetIndex(), 3 /* fRank */);
+			new WebPageMenuNode('RunQueriesMenu', '../pages/run_query.php', $oAdminMenu->GetIndex(), 8 /* fRank */);
+			new WebPageMenuNode('ExportMenu', '../webservices/export.php', $oAdminMenu->GetIndex(), 9 /* fRank */);
+			new WebPageMenuNode('DataModelMenu', '../pages/schema.php', $oAdminMenu->GetIndex(), 10 /* fRank */);
+			new WebPageMenuNode('UniversalSearchMenu', '../pages/UniversalSearch.php', $oAdminMenu->GetIndex(), 11 /* fRank */);
 		}
 	}
 	

+ 38 - 40
application/menunode.class.inc.php

@@ -47,15 +47,13 @@ require_once('../application/template.class.inc.php');
  *			+ Teams								>> Plain list (OQL based)
  *
  * // Create the top-level group. fRank = 1, means it will be inserted after the group '0', which is usually 'Welcome'
- * $oConfigMgmtMenu = new MenuGroup('UI:ConfigurationManagementMenu', 1);
+ * $oConfigMgmtMenu = new MenuGroup('ConfigurationManagementMenu', 1);
  * // Create an entry, based on a custom template, for the Configuration management overview, under the top-level group
- * new TemplateMenuNode('UI:ConfigurationManagementMenu', '../business/templates/configuration_management_menu.html', $oConfigMgmtMenu->GetIndex(), 0);
+ * new TemplateMenuNode('ConfigurationManagementMenu', '../business/templates/configuration_management_menu.html', $oConfigMgmtMenu->GetIndex(), 0);
  * // Create an entry (template based) for the overview of contacts
- * $oContactsMenu = new TemplateMenuNode('UI:ContactsMenu', '../business/templates/configuration_management_menu.html',$oConfigMgmtMenu->GetIndex(), 1);
+ * $oContactsMenu = new TemplateMenuNode('ContactsMenu', '../business/templates/configuration_management_menu.html',$oConfigMgmtMenu->GetIndex(), 1);
  * // Plain list of persons
- * new OQLMenuNode('UI:PersonsMenu', 'UI:PersonsMenu:Title', 'SELECT bizPerson', $oContactsMenu->GetIndex(), 0);
- * // Plain list of teams
- * new OQLMenuNode('UI:TeamsMenu', 'UI:TeamsMenu:Title', 'SELECT bizTeam', $oContactsMenu->GetIndex(), 1);
+ * new OQLMenuNode('PersonsMenu', 'SELECT bizPerson', $oContactsMenu->GetIndex(), 0);
  *
  */
  
@@ -70,20 +68,20 @@ class ApplicationMenu
 	 */
 	static public function InsertMenu(MenuNode $oMenuNode, $iParentIndex = -1, $fRank)
 	{
-		$index = self::GetMenuIndexByTitle($oMenuNode->GetRawTitle());
+		$index = self::GetMenuIndexById($oMenuNode->GetMenuId());
 		if ($index == -1)
 		{
 			// The menu does not already exist, insert it
-		$index = count(self::$aMenusIndex);
-		self::$aMenusIndex[$index] = array( 'node' => $oMenuNode, 'children' => array());
-		if ($iParentIndex == -1)
-		{
-			self::$aRootMenus[] = array ('rank' => $fRank, 'index' => $index);
-		}
-		else
-		{
-			self::$aMenusIndex[$iParentIndex]['children'][] = array ('rank' => $fRank, 'index' => $index);
-		}
+			$index = count(self::$aMenusIndex);
+			self::$aMenusIndex[$index] = array( 'node' => $oMenuNode, 'children' => array());
+			if ($iParentIndex == -1)
+			{
+				self::$aRootMenus[] = array ('rank' => $fRank, 'index' => $index);
+			}
+			else
+			{
+				self::$aMenusIndex[$iParentIndex]['children'][] = array ('rank' => $fRank, 'index' => $index);
+			}
 		}
 		return $index;
 	}
@@ -185,12 +183,12 @@ class ApplicationMenu
 	 * @param string $sTitle Title of the menu (as passed when creating the menu)
 	 * @return integer ID of the menu, or -1 if not found
 	 */
-	static public function GetMenuIndexByTitle($sTitle)
+	static public function GetMenuIndexById($sTitle)
 	{
 		$index = -1;
 		foreach(self::$aMenusIndex as $aMenu)
 		{
-			if ($aMenu['node']->GetRawTitle() == $sTitle)
+			if ($aMenu['node']->GetMenuId() == $sTitle)
 			{
 				$index = $aMenu['node']->GetIndex();
 				break;
@@ -247,35 +245,35 @@ class ApplicationMenu
  */
 abstract class MenuNode
 {
-	protected $sTitle;
+	protected $sMenuId;
 	protected $index = null;
 	
 	/**
 	 * Create a menu item and inserts it into the application's main menu
-	 * @param string $sTitle Title of the menu (will be looked-up in the dictionnary, for translation)
+	 * @param string $sMenuId Unique identifier of the menu (used to identify the menu for bookmarking, and for getting the labels from the dictionary)
 	 * @param integer $iParentIndex ID of the parent menu, pass -1 for top level (group) items
 	 * @param float $fRank Number used to order the list, any number will do, but for a given level (i.e same parent) all menus are sorted based on this value
 	 * @return MenuNode
 	 */
-	public function __construct($sTitle, $iParentIndex = -1, $fRank = 0)
+	public function __construct($sMenuId, $iParentIndex = -1, $fRank = 0)
 	{
-		$this->sTitle = $sTitle;
+		$this->sMenuId = $sMenuId;
 		$this->index = ApplicationMenu::InsertMenu($this, $iParentIndex, $fRank);
 	}
 	
-	public function GetRawTitle()
+	public function GetMenuId()
 	{
-		return $this->sTitle;
+		return $this->sMenuId;
 	}
 	
 	public function GetTitle()
 	{
-		return Dict::S($this->sTitle);
+		return Dict::S("Menu:$this->sMenuId+");
 	}
 	
 	public function GetLabel()
 	{
-		return Dict::S($this->sTitle);
+		return Dict::S("Menu:$this->sMenuId");
 	}
 	
 	public function GetIndex()
@@ -319,13 +317,13 @@ class MenuGroup extends MenuNode
 {
 	/**
 	 * Create a top-level menu group and inserts it into the application's main menu
-	 * @param string $sTitle Title of the menu (will be looked-up in the dictionnary for translation)
+	 * @param string $sMenuId Unique identifier of the menu (used to identify the menu for bookmarking, and for getting the labels from the dictionary)
 	 * @param float $fRank Number used to order the list, the groups are sorted based on this value
 	 * @return MenuGroup
 	 */
-	public function __construct($sTitle, $fRank)
+	public function __construct($sMenuId, $fRank)
 	{
-		parent::__construct($sTitle, -1 /* no parent, groups are at root level */, $fRank);
+		parent::__construct($sMenuId, -1 /* no parent, groups are at root level */, $fRank);
 	}
 	
 	public function RenderContent(WebPage $oPage, $aExtraParams = array())
@@ -344,15 +342,15 @@ class TemplateMenuNode extends MenuNode
 	
 	/**
 	 * Create a menu item based on a custom template and inserts it into the application's main menu
-	 * @param string $sTitle Title of the menu (will be looked-up in the dictionnary for translation)
+	 * @param string $sMenuId Unique identifier of the menu (used to identify the menu for bookmarking, and for getting the labels from the dictionary)
 	 * @param string $sTemplateFile Path (or URL) to the file that will be used as a template for displaying the page's content
 	 * @param integer $iParentIndex ID of the parent menu
 	 * @param float $fRank Number used to order the list, any number will do, but for a given level (i.e same parent) all menus are sorted based on this value
 	 * @return MenuNode
 	 */
-	public function __construct($sTitle, $sTemplateFile, $iParentIndex, $fRank = 0)
+	public function __construct($sMenuId, $sTemplateFile, $iParentIndex, $fRank = 0)
 	{
-		parent::__construct($sTitle, $iParentIndex, $fRank);
+		parent::__construct($sMenuId, $iParentIndex, $fRank);
 		$this->sTemplateFile = $sTemplateFile;
 	}
 	
@@ -382,16 +380,16 @@ class OQLMenuNode extends MenuNode
 	
 	/**
 	 * Create a menu item based on an OQL query and inserts it into the application's main menu
-	 * @param string $sTitle Title of the menu (will be looked-up in the dictionnary for translation)
+	 * @param string $sMenuId Unique identifier of the menu (used to identify the menu for bookmarking, and for getting the labels from the dictionary)
 	 * @param string $sPageTitle Title displayed into the page's content (will be looked-up in the dictionnary for translation)
 	 * @param integer $iParentIndex ID of the parent menu
 	 * @param float $fRank Number used to order the list, any number will do, but for a given level (i.e same parent) all menus are sorted based on this value
 	 * @return MenuNode
 	 */
-	public function __construct($sTitle, $sPageTitle, $sOQL, $iParentIndex, $fRank = 0)
+	public function __construct($sMenuId, $sOQL, $iParentIndex, $fRank = 0)
 	{
-		parent::__construct($sTitle, $iParentIndex, $fRank);
-		$this->sPageTitle = $sPageTitle;
+		parent::__construct($sMenuId, $iParentIndex, $fRank);
+		$this->sPageTitle = "Menu:$sMenuId+";
 		$this->sOQL = $sOQL;
 	}
 	
@@ -430,15 +428,15 @@ class WebPageMenuNode extends MenuNode
 	
 	/**
 	 * Create a menu item that points to any web page (not only UI.php)
-	 * @param string $sTitle Title of the menu (will be looked-up in the dictionnary for translation)
+	 * @param string $sMenuId Unique identifier of the menu (used to identify the menu for bookmarking, and for getting the labels from the dictionary)
 	 * @param string $sHyperlink URL to the page to load. Use relative URL if you want to keep the application portable !
 	 * @param integer $iParentIndex ID of the parent menu
 	 * @param float $fRank Number used to order the list, any number will do, but for a given level (i.e same parent) all menus are sorted based on this value
 	 * @return MenuNode
 	 */
-	public function __construct($sTitle, $sHyperlink, $iParentIndex, $fRank = 0)
+	public function __construct($sMenuId, $sHyperlink, $iParentIndex, $fRank = 0)
 	{
-		parent::__construct($sTitle, $iParentIndex, $fRank);
+		parent::__construct($sMenuId, $iParentIndex, $fRank);
 		$this->sHyperlink = $sHyperlink;
 	}
 

+ 3 - 3
business/itop.business.class.inc.php

@@ -1839,10 +1839,10 @@ class lnkKnownErrorToProblem extends cmdbAbstractObject
 
 $oAdminMenu = new MenuGroup('UI:AdminToolsMenu', 999);
 $iAdminGroup = $oAdminMenu->GetIndex();
-new OQLMenuNode('Menu:Class:Organization/Name', 'Menu:Class:Organization/Title', 'SELECT Organization', $iAdminGroup, 10 /* fRank */);
-new OQLMenuNode('Menu:Class:Application/Name', 'Menu:Class:Application/Title', 'SELECT Application', $iAdminGroup, 20 /* fRank */);
+new OQLMenuNode('Organization', 'SELECT Organization', $iAdminGroup, 10 /* fRank */);
+new OQLMenuNode('Application', 'SELECT Application', $iAdminGroup, 20 /* fRank */);
 
-$oToolsMenu = new MenuGroup('UI:AdvancedToolsMenu', 998);
+$oToolsMenu = new MenuGroup('AdvancedToolsMenu', 998);
 $iToolsGroup = $oToolsMenu->GetIndex();
 new WebPageMenuNode('Menu:Audit', '../pages/audit.php', $iToolsGroup, 33 /* fRank */);
 

+ 35 - 134
dictionaries/dictionary.itop.ui.php

@@ -296,9 +296,10 @@ Dict::Add('EN US', 'English', 'English', array(
 //
 
 Dict::Add('EN US', 'English', 'English', array(
-	'UI:WelcomeMenu' => 'Welcome',
-	'UI:WelcomeMenuPage' => 'Welcome',
-	'UI:WelcomeMenu+' => 'Welcome to iTop',
+	'Menu:WelcomeMenu' => 'Welcome',
+	'Menu:WelcomeMenu+' => 'Welcome to iTop',
+	'Menu:WelcomeMenuPage' => 'Welcome',
+	'Menu:WelcomeMenuPage+' => 'Welcome to iTop',
 	'UI:WelcomeMenu:Title' => 'Welcome to iTop',
 
 	'UI:WelcomeMenu:LeftBlock' => '<p>iTop is a complete, OpenSource, IT Operational Portal.</p>
@@ -685,14 +686,10 @@ Dict::Add('EN US', 'English', 'English', array(
 	'UI:UserManagement:GrantMatrix' => 'Grant Matrix',
 	'UI:UserManagement:LinkBetween_User_And_Profile' => 'Link between %1$s and %2$s',
 	
-	'UI:AdminToolsMenu' => 'Admin tools',
-	'UI:AdminToolsMenu+' => 'Admin tools',
-	'UI:AdminToolsMenu:Title' => 'Administration tools',
-	'UI:AdminToolsMenu:Text' => 'Tools accessible only to users having the administrator profile',
+	'Menu:AdminTools' => 'Admin tools',
+	'Menu:AdminTools+' => 'Administration tools',
+	'Menu:AdminTools?' => 'Tools accessible only to users having the administrator profile',
 
-	'UI:AuditMenu' => 'Audit',
-	'UI:AuditMenu+' => 'Audit',
-	
 	'UI:ChangeManagementMenu' => 'Change Management',
 	'UI:ChangeManagementMenu+' => 'Change Management',
 	'UI:ChangeManagementMenu:Title' => 'Changes Overview',
@@ -722,25 +719,17 @@ Dict::Add('EN US', 'English', 'English', array(
 	'UI-ContactsMenu-ContactsByType' => 'Contacts by type',
 	'UI-ContactsMenu-ContactsByStatus' => 'Contacts by status',
 
-	'UI:CSVImportMenu' => 'CSV import',
-	'UI:CSVImportMenu+' => 'Bulk creation or update',
-	
-	'UI:DataModelMenu' => 'Data Model',
-	'UI:DataModelMenu+' => 'Overview of the Data Model',
+	'Menu:CSVImportMenu' => 'CSV import',
+	'Menu:CSVImportMenu+' => 'Bulk creation or update',
 	
-	'UI:ExportMenu' => 'Export',
-	'UI:ExportMenu+' => 'Export the results of any query in HTML, CSV or XML',
+	'Menu:DataModelMenu' => 'Data Model',
+	'Menu:DataModelMenu+' => 'Overview of the Data Model',
 	
-	'UI:IncidentManagementMenu' => 'Incident Management',
-	'UI:IncidentManagementMenu+' => 'Incident Management',
-	'UI:IncidentManagementMenu:Title' => 'Incident Overview',
-	'UI-IncidentManagementMenu-IncidentsByType' => 'Incidents by type',
-	'UI-IncidentManagementMenu-IncidentsByStatus' => 'Incidents by status',
-	'UI-IncidentManagementMenu-IncidentsByWorkgroup' => 'Incidents by workgroup',
-	'UI-IncidentManagementMenu-IncidentsNotYetAssigned' => 'Incidents not yet assigned',
+	'Menu:ExportMenu' => 'Export',
+	'Menu:ExportMenu+' => 'Export the results of any query in HTML, CSV or XML',
 	
-	'UI:NotificationsMenu' => 'Notifications',
-	'UI:NotificationsMenu+' => 'Configuration of the Notifications',
+	'Menu:NotificationsMenu' => 'Notifications',
+	'Menu:NotificationsMenu+' => 'Configuration of the Notifications',
 	'UI:NotificationsMenu:Title' => 'Configuration of the <span class="hilite">Notifications</span>',
 	'UI:NotificationsMenu:Help' => 'Help',
 	'UI:NotificationsMenu:HelpContent' => '<p>In iTop the notifications are fully customizable. They are based on two sets of objects: <i>triggers and actions</i>.</p>
@@ -766,117 +755,29 @@ When associated with a trigger, each action is given an "order" number, specifyi
 	'UI:NotificationsMenu:Actions' => 'Actions',
 	'UI:NotificationsMenu:AvailableActions' => 'Available actions',
 	
-	'UI:RunQueriesMenu' => 'Run Queries',
-	'UI:RunQueriesMenu+' => 'Run any query',
-	
-	'UI:ServiceDeskMenu' => 'Service Desk',
-	'UI:ServiceDeskMenu+' => 'Service Desk',
-	'UI:ServiceDeskMenu:Title' => 'Service Calls Overview',
-	'UI-ServiceDeskMenu-CallsByType' => 'Calls by type',
-	'UI-ServiceDeskMenu-CallsByStatus' => 'Calls by status',
-	'UI-ServiceDeskMenu-CallsBySeverity' => 'Calls by severity',
-	'UI-ServiceDeskMenu-CallsNotYetAssigned' => 'Calls not yet assigned',
-	
-	'UI:ServiceManagementMenu' => 'Service Management',
-	'UI:ServiceManagementMenu+' => 'Service Management',
-	'UI:ServiceManagementMenu:Title' => 'Service Management Overview',
-	'UI-ServiceManagementMenu-ContractsBySrvLevel' => 'Contracts by service level',
-	'UI-ServiceManagementMenu-ContractsByStatus' => 'Contracts by status',
-	'UI-ServiceManagementMenu-ContractsEndingIn30Days' => 'Contracts ending in less then 30 days',
+	'Menu:RunQueriesMenu' => 'Run Queries',
+	'Menu:RunQueriesMenu+' => 'Run any query',
 	
-	'UI:AdvancedToolsMenu' => 'Tools',
-	'UI:AdvancedToolsMenu+' => 'Advanced tools',
+	'Menu:AdvancedToolsMenu' => 'Tools',
+	'Menu:AdvancedToolsMenu+' => 'Advanced tools',
 	
-	'UI:UniversalSearchMenu' => 'Universal Search',
-	'UI:UniversalSearchMenu+' => 'Search for anything...',
+	'Menu:UniversalSearchMenu' => 'Universal Search',
+	'Menu:UniversalSearchMenu+' => 'Search for anything...',
 	
-	'UI:UserManagementMenu' => 'User Management',
-	'UI:UserManagementMenu+' => 'User management',
-	
-	'UI:ApplicationsMenu' => 'Applications',
-	'UI:ApplicationsMenu+' => 'Applications',
-	'UI:ApplicationsMenu:Title' => 'Applications',
-	'UI:CircuitsMenu' => 'Circuits',
-	'UI:CircuitsMenu+' => 'Circuits',
-	'UI:CircuitsMenu:Title' => 'Circuits',
-	'UI:ContractsMenu' => 'Contracts',
-	'UI:ContractsMenu+' => 'Contracts',
-	'UI:ContractsMenu:Title' => 'Contracts',
-	'UI:InterfacesMenu' => 'Interfaces',
-	'UI:InterfacesMenu+' => 'Interfaces',
-	'UI:InterfacesMenu:Title' => 'Interfaces',
-	'UI:NetworkDevicesMenu' => 'Network Devices',
-	'UI:NetworkDevicesMenu+' => 'Network Devices',
-	'UI:NetworkDevicesMenu:Title' => 'Network Devices',
-	'UI:PatchesMenu' => 'Patches',
-	'UI:PatchesMenu+' => 'Patches',
-	'UI:PatchesMenu:Title' => 'Patches',
-	'UI:PCsMenu' => 'PCs',
-	'UI:PCsMenu+' => 'PCs',
-	'UI:PCsMenu:Title' => 'PCs',
-	'UI:ServersMenu' => 'Servers',
-	'UI:ServersMenu+' => 'Servers',
-	'UI:ServersMenu:Title' => 'Servers',
-	'UI:ServicesMenu' => 'Services',
-	'UI:ServicesMenu+' => 'Services',
-	'UI:ServicesMenu:Title' => 'Services',
-	'UI:SubnetsMenu' => 'Subnets',
-	'UI:SubnetsMenu+' => 'Subnets',
-	'UI:SubnetsMenu:Title' => 'Subnets',
-	'UI:ApplicationLogMenu' => 'Application Log',
-	'UI:ApplicationLogMenu+' => 'Application Log',
-	'UI:ApplicationLogMenu:Title' => 'Application Log',
-	'UI:ClosedChangesMenu' => 'Closed Changes',
-	'UI:ClosedChangesMenu+' => 'Closed Changes',
-	'UI:ClosedChangesMenu:Title' => 'Closed Changes',
-	'UI:ClosedIncidentsMenu' => 'Closed Incidents',
-	'UI:ClosedIncidentsMenu+' => 'Closed Incidents',
-	'UI:ClosedIncidentsMenu:Title' => 'Closed Incidents',
-	'UI:DocumentsMenu' => 'Documents',
-	'UI:DocumentsMenu+' => 'Documents',
-	'UI:DocumentsMenu:Title' => 'Documents',
-	'UI:GroupingMenu' => 'Groups',
-	'UI:GroupingMenu+' => 'Groups',
-	'UI:GroupingMenu:Title' => 'Groups',
-	'UI:KnownErrorsMenu' => 'Known Errors',
-	'UI:KnownErrorsMenu+' => 'Known Errors',
-	'UI:KnownErrorsMenu:Title' => 'Known Errors',
-	'UI:LocationsMenu' => 'Locations',
-	'UI:LocationsMenu+' => 'Locations',
-	'UI:LocationsMenu:Title' => 'Locations',
-	'UI:MyChangesMenu' => 'My Changes',
-	'UI:MyChangesMenu+' => 'My Changes',
-	'UI:MyChangesMenu:Title' => 'My Changes',
-	'UI:MyIncidentsMenu' => 'My Incidents',
-	'UI:MyIncidentsMenu+' => 'My Incidents',
-	'UI:MyIncidentsMenu:Title' => 'My Incidents',
-	'UI:MyServiceCallsMenu' => 'My Service Calls',
-	'UI:MyServiceCallsMenu+' => 'My Service Calls',
-	'UI:MyServiceCallsMenu:Title' => 'My Service Calls',
-	'UI:OpenChangesMenu' => 'Open Changes',
-	'UI:OpenChangesMenu+' => 'Open Changes',
-	'UI:OpenChangesMenu:Title' => 'Open Changes',
-	'UI:OpenIncidentsMenu' => 'Open Incidents',
-	'UI:OpenIncidentsMenu+' => 'Open Incidents',
-	'UI:OpenIncidentsMenu:Title' => 'Open Incidents',
-	'UI:OpenServiceCallsMenu' => 'Open Service Calls',
-	'UI:OpenServiceCallsMenu+' => 'Open Service Calls',
-	'UI:OpenServiceCallsMenu:Title' => 'Open Service Calls',
-	'UI:PersonsMenu' => 'Persons',
-	'UI:PersonsMenu+' => 'Persons',
-	'UI:PersonsMenu:Title' => 'Persons',
-	'UI:ProfilesMenu' => 'Profiles',
-	'UI:ProfilesMenu+' => 'Profiles',
-	'UI:ProfilesMenu:Title' => 'Profiles',
-	'UI:ScheduledOutagesMenu' => 'Scheduled Outages',
-	'UI:ScheduledOutagesMenu+' => 'Scheduled Outages',
-	'UI:ScheduledOutagesMenu:Title' => 'Scheduled Outages',
-	'UI:TeamsMenu' => 'Teams',
-	'UI:TeamsMenu+' => 'Teams',
-	'UI:TeamsMenu:Title' => 'Teams',
-	'UI:UserAccountsMenu' => 'User Accounts',
-	'UI:UserAccountsMenu+' => 'User Accounts',
-	'UI:UserAccountsMenu:Title' => 'User Accounts',	
+	'Menu:ApplicationLogMenu' => 'Log de l\'application',
+	'Menu:ApplicationLogMenu+' => 'Log de l\'application',
+	'Menu:ApplicationLogMenu:Title' => 'Log de l\'application',
+
+	'Menu:UserManagementMenu' => 'User Management',
+	'Menu:UserManagementMenu+' => 'User management',
+
+	'Menu:ProfilesMenu' => 'Profils',
+	'Menu:ProfilesMenu+' => 'Profils',
+	'Menu:ProfilesMenu:Title' => 'Profils',
+
+	'Menu:UserAccountsMenu' => 'User Accounts',
+	'Menu:UserAccountsMenu+' => 'User Accounts',
+	'Menu:UserAccountsMenu:Title' => 'User Accounts',	
 
 	'UI:iTopVersion:Short' => 'iTop version %1$s',
 	'UI:iTopVersion:Long' => 'iTop version %1$s-%2$s built on %3$s',

+ 31 - 113
dictionaries/fr.dictionary.itop.ui.php

@@ -680,10 +680,9 @@ Dict::Add('FR FR', 'French', 'Français', array(
 	'UI:UserManagement:GrantMatrix' => 'Matrice des droits',
 	'UI:USerManagement:LinkBetween_User_And_Profile' => 'Lien entre %1$s et %2$s',
 
-	'UI:AdminToolsMenu' => 'Outils d\'admin',
-	'UI:AdminToolsMenu+' => 'Outils d\'administration',
-	'UI:AdminToolsMenu:Title' => 'Outils d\'administration',
-	'UI:AdminToolsMenu:Text' => 'Ces outils sont accessibles uniquement aux utilisateur possédant le profil Administrateur.',
+	'Menu:AdminTools' => 'Outils d\'admin',
+	'Menu:AdminTools+' => 'Outils d\'administration',
+	'Menu:AdminTools?' => 'Ces outils sont accessibles uniquement aux utilisateur possédant le profil Administrateur.',
 
 	'UI:AuditMenu' => 'Audit',
 	'UI:AuditMenu+' => 'Audit',
@@ -718,17 +717,17 @@ Dict::Add('FR FR', 'French', 'Français', array(
 	'UI-ContactsMenu-ContactsByStatus' => 'Contacts par état',
 
 
-	'UI:CSVImportMenu' => 'Import CSV',
-	'UI:CSVImportMenu+' => 'Import ou mise à jour en masse',
+	'Menu:CSVImportMenu' => 'Import CSV',
+	'Menu:CSVImportMenu+' => 'Import ou mise à jour en masse',
 	
-	'UI:DataModelMenu' => 'Modèle de Données',
-	'UI:DataModelMenu+' => 'Résumé du Modèle de Données',
+	'Menu:DataModelMenu' => 'Modèle de Données',
+	'Menu:DataModelMenu+' => 'Résumé du Modèle de Données',
 	
-	'UI:ExportMenu' => 'Exportation',
-	'UI:ExportMenu+' => 'Exportation des résultats d\'une requête en HTML, CSV ou XML',
+	'Menu:ExportMenu' => 'Exportation',
+	'Menu:ExportMenu+' => 'Exportation des résultats d\'une requête en HTML, CSV ou XML',
 	
-	'UI:IncidentManagementMenu' => 'Gestion des Incidents',
-	'UI:IncidentManagementMenu+' => 'Gestion des Incidents',
+	'Menu:IncidentManagementMenu' => 'Gestion des Incidents',
+	'Menu:IncidentManagementMenu+' => 'Gestion des Incidents',
 	'UI:IncidentManagementMenu:Title' => 'Résumé des incidents',
 	'UI-IncidentManagementMenu-IncidentsByType' => 'Incidents par type',
 	'UI-IncidentManagementMenu-IncidentsByStatus' => 'Incidents par état',
@@ -762,17 +761,9 @@ Lors de l\'association à un déclencheur, on attribue à chaque action un numé
 	'UI:NotificationsMenu:AvailableActions' => 'Actions existantes',
 
 	
-	'UI:RunQueriesMenu' => 'Requêtes OQL',
-	'UI:RunQueriesMenu+' => 'Executer une requête OQL',
+	'Menu:RunQueriesMenu' => 'Requêtes OQL',
+	'Menu:RunQueriesMenu+' => 'Executer une requête OQL',
 	
-	'UI:ServiceDeskMenu' => 'Service Desk',
-	'UI:ServiceDeskMenu+' => 'Service Desk',
-	'UI:ServiceDeskMenu:Title' => 'Résumé des demandes utilisateur',
-	'UI-ServiceDeskMenu-CallsByType' => 'Demandes par type',
-	'UI-ServiceDeskMenu-CallsByStatus' => 'Demandes par état',
-	'UI-ServiceDeskMenu-CallsBySeverity' => 'Demandes par sévérité',
-	'UI-ServiceDeskMenu-CallsNotYetAssigned' => 'Demandes en attente d\'assignation',
-		
 	'UI:ServiceManagementMenu' => 'Gestion des Services',
 	'UI:ServiceManagementMenu+' => 'Gestion des Services',
 	'UI:ServiceManagementMenu:Title' => 'Résumé des services & contrats',
@@ -780,99 +771,26 @@ Lors de l\'association à un déclencheur, on attribue à chaque action un numé
 	'UI-ServiceManagementMenu-ContractsByStatus' => 'Contrats par état',
 	'UI-ServiceManagementMenu-ContractsEndingIn30Days' => 'Contrats se terminant dans moins de 30 jours',
 		
-	'UI:AdvancedToolsMenu' => 'Outils',
-	'UI:AdvancedToolsMenu+' => 'Outils Avancés',
-	
-	'UI:UniversalSearchMenu' => 'Recherche Universelle',
-	'UI:UniversalSearchMenu+' => 'Rechercher n\'importe quel objet...',
+	'Menu:AdvancedToolsMenu' => 'Outils',
+	'Menu:AdvancedToolsMenu+' => 'Outils Avancés',
 	
-	'UI:UserManagementMenu' => 'Gestion des Utilisateurs',
-	'UI:UserManagementMenu+' => 'Gestion des Utilisateurs',
+	'Menu:UniversalSearchMenu' => 'Recherche Universelle',
+	'Menu:UniversalSearchMenu+' => 'Rechercher n\'importe quel objet...',
 	
-	'UI:ApplicationsMenu' => 'Applications',
-	'UI:ApplicationsMenu+' => 'Applications',
-	'UI:ApplicationsMenu:Title' => 'Applications',
-	'UI:CircuitsMenu' => 'Circuits',
-	'UI:CircuitsMenu+' => 'Circuits',
-	'UI:CircuitsMenu:Title' => 'Circuits',
-	'UI:ContractsMenu' => 'Contrats',
-	'UI:ContractsMenu+' => 'Contrats',
-	'UI:ContractsMenu:Title' => 'Contrats',
-	'UI:InterfacesMenu' => 'Interfaces',
-	'UI:InterfacesMenu+' => 'Interfaces',
-	'UI:InterfacesMenu:Title' => 'Interfaces',
-	'UI:NetworkDevicesMenu' => 'Equipements Réseau',
-	'UI:NetworkDevicesMenu+' => 'Equipements Réseau',
-	'UI:NetworkDevicesMenu:Title' => 'Equipements Réseau',
-	'UI:PatchesMenu' => 'Patches',
-	'UI:PatchesMenu+' => 'Patches',
-	'UI:PatchesMenu:Title' => 'Patches',
-	'UI:PCsMenu' => 'PCs',
-	'UI:PCsMenu+' => 'PCs',
-	'UI:PCsMenu:Title' => 'PCs',
-	'UI:ServersMenu' => 'Serveurs',
-	'UI:ServersMenu+' => 'Serveurs',
-	'UI:ServersMenu:Title' => 'Serveurs',
-	'UI:ServicesMenu' => 'Services',
-	'UI:ServicesMenu+' => 'Services',
-	'UI:ServicesMenu:Title' => 'Services',
-	'UI:SubnetsMenu' => 'Subnets',
-	'UI:SubnetsMenu+' => 'Subnets',
-	'UI:SubnetsMenu:Title' => 'Subnets',
-	'UI:ApplicationLogMenu' => 'Log Applicatif',
-	'UI:ApplicationLogMenu+' => 'Log Applicatif',
-	'UI:ApplicationLogMenu:Title' => 'Log Applicatif',
-	'UI:ClosedChangesMenu' => 'Changements Terminés',
-	'UI:ClosedChangesMenu+' => 'Changements Terminés',
-	'UI:ClosedChangesMenu:Title' => 'Changements Terminés',
-	'UI:ClosedIncidentsMenu' => 'Incidents Clôts',
-	'UI:ClosedIncidentsMenu+' => 'Incidents Clôts',
-	'UI:ClosedIncidentsMenu:Title' => 'Incidents Clôts',
-	'UI:DocumentsMenu' => 'Documents',
-	'UI:DocumentsMenu+' => 'Documents',
-	'UI:DocumentsMenu:Title' => 'Documents',
-	'UI:GroupingMenu' => 'Groupes',
-	'UI:GroupingMenu+' => 'Groupes',
-	'UI:GroupingMenu:Title' => 'Groupes',
-	'UI:KnownErrorsMenu' => 'Erreurs Connues',
-	'UI:KnownErrorsMenu+' => 'Erreurs Connues',
-	'UI:KnownErrorsMenu:Title' => 'Erreurs Connues',
-	'UI:LocationsMenu' => 'Emplacements',
-	'UI:LocationsMenu+' => 'Emplacements',
-	'UI:LocationsMenu:Title' => 'Emplacements',
-	'UI:MyChangesMenu' => 'Mes Changements',
-	'UI:MyChangesMenu+' => 'Mes Changements',
-	'UI:MyChangesMenu:Title' => 'Mes Changements',
-	'UI:MyIncidentsMenu' => 'Mes Incidents',
-	'UI:MyIncidentsMenu+' => 'Mes Incidents',
-	'UI:MyIncidentsMenu:Title' => 'Mes Incidents',
-	'UI:MyServiceCallsMenu' => 'Mes Demandes de Service',
-	'UI:MyServiceCallsMenu+' => 'Mes Demandes de Service',
-	'UI:MyServiceCallsMenu:Title' => 'Mes Demandes de Service',
-	'UI:OpenChangesMenu' => 'Changements En Cours',
-	'UI:OpenChangesMenu+' => 'Changements En Cours',
-	'UI:OpenChangesMenu:Title' => 'Changements En Cours',
-	'UI:OpenIncidentsMenu' => 'Incidents En Cours',
-	'UI:OpenIncidentsMenu+' => 'Incidents En Cours',
-	'UI:OpenIncidentsMenu:Title' => 'Incidents En Cours',
-	'UI:OpenServiceCallsMenu' => 'Demandes de Service En Cours',
-	'UI:OpenServiceCallsMenu+' => 'Demandes de Service En Cours',
-	'UI:OpenServiceCallsMenu:Title' => 'Demandes de Service En Cours',
-	'UI:PersonsMenu' => 'Personnes',
-	'UI:PersonsMenu+' => 'Personnes',
-	'UI:PersonsMenu:Title' => 'Personnes',
-	'UI:ProfilesMenu' => 'Profils',
-	'UI:ProfilesMenu+' => 'Profils',
-	'UI:ProfilesMenu:Title' => 'Profils',
-	'UI:ScheduledOutagesMenu' => 'Maintenance Plannifiée',
-	'UI:ScheduledOutagesMenu+' => 'Maintenance Plannifiée',
-	'UI:ScheduledOutagesMenu:Title' => 'Maintenance Plannifiée',
-	'UI:TeamsMenu' => 'Equipes',
-	'UI:TeamsMenu+' => 'Equipes',
-	'UI:TeamsMenu:Title' => 'Equipes',
-	'UI:UserAccountsMenu' => 'Comptes Utilisateur',
-	'UI:UserAccountsMenu+' => 'Comptes Utilisateur',
-	'UI:UserAccountsMenu:Title' => 'Comptes Utilisateur',	
+	'Menu:ApplicationLogMenu' => 'Application Log',
+	'Menu:ApplicationLogMenu+' => 'Application Log',
+	'Menu:ApplicationLogMenu:Title' => 'Application Log',
+
+	'Menu:UserManagementMenu' => 'Gestion des Utilisateurs',
+	'Menu:UserManagementMenu+' => 'Gestion des Utilisateurs',
+
+	'Menu:ProfilesMenu' => 'Profils',
+	'Menu:ProfilesMenu+' => 'Profils',
+	'Menu:ProfilesMenu:Title' => 'Profils',
+
+	'Menu:UserAccountsMenu' => 'Comptes Utilisateur',
+	'Menu:UserAccountsMenu+' => 'Comptes Utilisateur',
+	'MenuUI:UserAccountsMenu:Title' => 'Comptes Utilisateur',	
 
 	'UI:iTopVersion:Short' => 'iTop version %1$s',
 	'UI:iTopVersion:Long' => 'iTop version %1$s-%2$s du %3$s',

+ 1 - 0
modules/itop-change-mgmt-1.0.0/module.itop-change-mgmt.php

@@ -12,6 +12,7 @@ SetupWebPage::AddModule(
 		//
 		'dependencies' => array(
 			'itop-config-mgmt/1.0.0',
+			'itop-ticket/1.0.0',
 		),
 		'mandatory' => false,
 		'visible' => true,

+ 47 - 41
modules/itop-config-mgmt-1.0.0/en.dict.itop-config-mgmt.php

@@ -771,48 +771,54 @@ Dict::Add('EN US', 'English', 'English', array(
 //
 
 Dict::Add('EN US', 'English', 'English', array(
-'Menu:Class:Organization/Name' => 'Organizations',
-'Menu:Class:Organization/Title' => 'ALl Organizations',
-'Menu:Class:Application/Name' => 'Applications',
-'Menu:Class:Application/Title' => 'All Applications',
+'Menu:Audit' => 'Audit',
+'Menu:Audit+' => 'Audit',
+'Menu:Organization' => 'Organizations',
+'Menu:Organization+' => 'ALl Organizations',
+'Menu:Application' => 'Applications',
+'Menu:Application+' => 'All Applications',
 'Menu:Audit' => 'Audit',
 'Menu:ConfigManagement' => 'Configuration Management',
-'Menu:ConfigManagement/Overview' => 'Overview',
-'Menu:Class:Contact/Name' => 'Contacts',
-'Menu:Class:Person/Name' => 'Persons',
-'Menu:Class:Person/Title' => 'All Persons',
-'Menu:Class:Team/Name' => 'Teams',
-'Menu:Class:Team/Title' => 'All Teams',
-'Menu:Class:FileDoc/Name' => 'Documents',
-'Menu:Class:FileDoc/Title' => 'All Documents',
-'Menu:Class:Location/Name' => 'Locations',
-'Menu:Class:Location/Title' => 'All Locations',
-'Menu:ConfigManagement:CI' => 'Configuration Items',
-'Menu:Class:BusinessProcess/Name' => 'Business Processes',
-'Menu:Class:BusinessProcess/Title' => 'All Business Processes',
-'Menu:Class:ApplicationSolution/Name' => 'Application Solutions',
-'Menu:Class:ApplicationSolution/Title' => 'All Application Solutions',
-'Menu:ConfigManagement:Software' => 'Software',
-'Menu:Class:Licence/Name' => 'Licences',
-'Menu:Class:Licence/Title' => 'All Licences',
-'Menu:Class:Patch/Name' => 'Patches',
-'Menu:Class:Patch/Title' => 'ALl Patches',
-'Menu:Class:ApplicationInstance/Name' => 'Installed Applications',
-'Menu:Class:ApplicationInstance/Title' => 'All Installed Applications',
-'Menu:Class:DatabaseInstance/Name' => 'Database Instances',
-'Menu:Class:DatabaseInstance/Title' => 'All Database Instances',
-'Menu:ConfigManagement:Hardware' => 'Hardware',
-'Menu:Class:Subnet/Name' => 'Subnets',
-'Menu:Class:Subnet/Title' => 'All Subnets',
-'Menu:Class:NetworkDevice/Name' => 'Network Devices',
-'Menu:Class:NetworkDevice/Title' => 'All Network Devices',
-'Menu:Class:Server/Name' => 'Servers',
-'Menu:Class:Server/Title' => 'All Servers',
-'Menu:Class:Printer/Name' => 'Printers',
-'Menu:Class:Printer/Title' => 'All Printers',
-'Menu:Class:MobilePhone/Name' => 'Mobile Phones',
-'Menu:Class:MobilePhone/Title' => 'All Mobile Phones',
-'Menu:Class:PC/Name' => 'Personal Computers',
-'Menu:Class:PC/Title' => 'All Personal Computers',
+'Menu:ConfigManagement+' => 'Configuration Management',
+'Menu:ConfigManagementOverview' => 'Overview',
+'Menu:ConfigManagementOverview+' => 'Overview',
+'Menu:Contact' => 'Contacts',
+'Menu:Contact+' => 'Contacts',
+'Menu:Person' => 'Persons',
+'Menu:Person+' => 'All Persons',
+'Menu:Team' => 'Teams',
+'Menu:Team+' => 'All Teams',
+'Menu:FileDoc' => 'Documents',
+'Menu:FileDoc+' => 'All Documents',
+'Menu:Location' => 'Locations',
+'Menu:Location+' => 'All Locations',
+'Menu:ConfigManagementCI' => 'Configuration Items',
+'Menu:ConfigManagementCI+' => 'Configuration Items',
+'Menu:BusinessProcess' => 'Business Processes',
+'Menu:BusinessProcess+' => 'All Business Processes',
+'Menu:ApplicationSolution' => 'Application Solutions',
+'Menu:ApplicationSolution+' => 'All Application Solutions',
+'Menu:ConfigManagementSoftware' => 'Software',
+'Menu:Licence' => 'Licences',
+'Menu:Licence+' => 'All Licences',
+'Menu:Patch' => 'Patches',
+'Menu:Patch+' => 'ALl Patches',
+'Menu:ApplicationInstance' => 'Installed Applications',
+'Menu:ApplicationInstance+' => 'All Installed Applications',
+'Menu:DatabaseInstance' => 'Database Instances',
+'Menu:DatabaseInstance+' => 'All Database Instances',
+'Menu:ConfigManagementHardware' => 'Hardware',
+'Menu:Subnet' => 'Subnets',
+'Menu:Subnet+' => 'All Subnets',
+'Menu:NetworkDevice' => 'Network Devices',
+'Menu:NetworkDevice+' => 'All Network Devices',
+'Menu:Server' => 'Servers',
+'Menu:Server+' => 'All Servers',
+'Menu:Printer' => 'Printers',
+'Menu:Printer+' => 'All Printers',
+'Menu:MobilePhone' => 'Mobile Phones',
+'Menu:MobilePhone+' => 'All Mobile Phones',
+'Menu:PC' => 'Personal Computers',
+'Menu:PC+' => 'All Personal Computers',
 ));
 ?>

+ 27 - 27
modules/itop-config-mgmt-1.0.0/model.itop-config-mgmt.php

@@ -1102,48 +1102,48 @@ class lnkProcessToSolution extends cmdbAbstractObject
 ////////////////////////////////////////////////////////////////////////////////////
 // Create the top-level group. fRank = 1, means it will be inserted after the group '0', which is usually 'Welcome'
 
-$oAdminMenu = new MenuGroup('UI:AdminToolsMenu', 999);
+$oAdminMenu = new MenuGroup('AdminTools', 999);
 $iAdminGroup = $oAdminMenu->GetIndex();
-new OQLMenuNode('Menu:Class:Organization/Name', 'Menu:Class:Organization/Title', 'SELECT Organization', $iAdminGroup, 10 /* fRank */);
-new OQLMenuNode('Menu:Class:Application/Name', 'Menu:Class:Application/Title', 'SELECT Application', $iAdminGroup, 20 /* fRank */);
+new OQLMenuNode('Organization', 'SELECT Organization', $iAdminGroup, 10 /* fRank */);
+new OQLMenuNode('Application', 'SELECT Application', $iAdminGroup, 20 /* fRank */);
 
-$oToolsMenu = new MenuGroup('UI:AdvancedToolsMenu', 998);
+$oToolsMenu = new MenuGroup('AdvancedToolsMenu', 998);
 $iToolsGroup = $oToolsMenu->GetIndex();
-new WebPageMenuNode('Menu:Audit', '../pages/audit.php', $iToolsGroup, 33 /* fRank */);
+new WebPageMenuNode('Audit', '../pages/audit.php', $iToolsGroup, 33 /* fRank */);
 
 
-$oConfigManagementGroup = new MenuGroup('Menu:ConfigManagement', 1 /* fRank */);
+$oConfigManagementGroup = new MenuGroup('ConfigManagement', 1 /* fRank */);
 
 // Create an entry, based on a custom template, for the Configuration management overview, under the top-level group
-new TemplateMenuNode('Menu:ConfigManagement/Overview', '../business/templates/configuration_management_menu.html', $oConfigManagementGroup->GetIndex(), 0 /* fRank */);
+new TemplateMenuNode('ConfigManagementOverview', '../business/templates/configuration_management_menu.html', $oConfigManagementGroup->GetIndex(), 0 /* fRank */);
 
 
-$oContactNode = new TemplateMenuNode('Menu:Class:Contact/Name', '../business/templates/contacts_menu.html', $oConfigManagementGroup->GetIndex(), 1 /* fRank */);
-new OQLMenuNode('Menu:Class:Person/Name', 'Menu:Class:Person/Title', 'SELECT Person', $oContactNode->GetIndex(), 1 /* fRank */);
-new OQLMenuNode('Menu:Class:Team/Name', 'Menu:Class:Team/Title', 'SELECT Team', $oContactNode->GetIndex(), 2 /* fRank */);
+$oContactNode = new TemplateMenuNode('Contact', '../business/templates/contacts_menu.html', $oConfigManagementGroup->GetIndex(), 1 /* fRank */);
+new OQLMenuNode('Person', 'SELECT Person', $oContactNode->GetIndex(), 1 /* fRank */);
+new OQLMenuNode('Team', 'SELECT Team', $oContactNode->GetIndex(), 2 /* fRank */);
 
-new OQLMenuNode('Menu:Class:FileDoc/Name', 'Menu:Class:FileDoc/Title', 'SELECT FileDoc', $oConfigManagementGroup->GetIndex(), 2 /* fRank */);
-new OQLMenuNode('Menu:Class:Location/Name', 'Menu:Class:Location/Title', 'SELECT Location', $oConfigManagementGroup->GetIndex(), 3 /* fRank */);
+new OQLMenuNode('FileDoc', 'SELECT FileDoc', $oConfigManagementGroup->GetIndex(), 2 /* fRank */);
+new OQLMenuNode('Location', 'SELECT Location', $oConfigManagementGroup->GetIndex(), 3 /* fRank */);
 
 
-$oCINode = new TemplateMenuNode('Menu:ConfigManagement:CI', '../business/templates/configuration_items_menu.html', $oConfigManagementGroup->GetIndex(), 2 /* fRank */);
+$oCINode = new TemplateMenuNode('ConfigManagementCI', '../business/templates/configuration_items_menu.html', $oConfigManagementGroup->GetIndex(), 2 /* fRank */);
 
-new OQLMenuNode('Menu:Class:BusinessProcess/Name', 'Menu:Class:BusinessProcess/Title', 'SELECT BusinessProcess', $oCINode->GetIndex(), 0 /* fRank */);
-new OQLMenuNode('Menu:Class:ApplicationSolution/Name', 'Menu:Class:ApplicationSolution/Title', 'SELECT ApplicationSolution', $oCINode->GetIndex(), 1 /* fRank */);
+new OQLMenuNode('BusinessProcess', 'SELECT BusinessProcess', $oCINode->GetIndex(), 0 /* fRank */);
+new OQLMenuNode('ApplicationSolution', 'SELECT ApplicationSolution', $oCINode->GetIndex(), 1 /* fRank */);
 
-$oSWNode = new TemplateMenuNode('Menu:ConfigManagement:Software', '', $oCINode->GetIndex(), 2 /* fRank */);
-new OQLMenuNode('Menu:Class:Licence/Name', 'Menu:Class:Licence/Title', 'SELECT Licence', $oSWNode->GetIndex(), 0 /* fRank */);
-new OQLMenuNode('Menu:Class:Patch/Name', 'Menu:Class:Patch/Title', 'SELECT Patch', $oSWNode->GetIndex(), 1 /* fRank */);
-new OQLMenuNode('Menu:Class:ApplicationInstance/Name', 'Menu:Class:ApplicationInstance/Title', 'SELECT ApplicationInstance', $oSWNode->GetIndex(), 2 /* fRank */);
-new OQLMenuNode('Menu:Class:DatabaseInstance/Name', 'Menu:Class:DatabaseInstance/Title', 'SELECT DatabaseInstance', $oSWNode->GetIndex(), 3 /* fRank */);
+$oSWNode = new TemplateMenuNode('ConfigManagementSoftware', '', $oCINode->GetIndex(), 2 /* fRank */);
+new OQLMenuNode('Licence', 'SELECT Licence', $oSWNode->GetIndex(), 0 /* fRank */);
+new OQLMenuNode('Patch', 'SELECT Patch', $oSWNode->GetIndex(), 1 /* fRank */);
+new OQLMenuNode('ApplicationInstance', 'SELECT ApplicationInstance', $oSWNode->GetIndex(), 2 /* fRank */);
+new OQLMenuNode('DatabaseInstance', 'SELECT DatabaseInstance', $oSWNode->GetIndex(), 3 /* fRank */);
 
-$oHWNode = new TemplateMenuNode('Menu:ConfigManagement:Hardware', '', $oCINode->GetIndex(), 3 /* fRank */);
-new OQLMenuNode('Menu:Class:Subnet/Name', 'Menu:Class:Subnet/Title', 'SELECT Subnet', $oHWNode->GetIndex(), 0 /* fRank */);
-new OQLMenuNode('Menu:Class:NetworkDevice/Name', 'Menu:Class:NetworkDevice/Title', 'SELECT NetworkDevice', $oHWNode->GetIndex(), 1 /* fRank */);
-new OQLMenuNode('Menu:Class:Server/Name', 'Menu:Class:Server/Title', 'SELECT Server', $oHWNode->GetIndex(), 2 /* fRank */);
-new OQLMenuNode('Menu:Class:Printer/Name', 'Menu:Class:Printer/Title', 'SELECT Printer', $oHWNode->GetIndex(), 3 /* fRank */);
-new OQLMenuNode('Menu:Class:MobilePhone/Name', 'Menu:Class:MobilePhone/Title', 'SELECT MobilePhone', $oHWNode->GetIndex(), 4 /* fRank */);
-new OQLMenuNode('Menu:Class:PC/Name', 'Menu:Class:PC/Title', 'SELECT PC', $oHWNode->GetIndex(), 5 /* fRank */);
+$oHWNode = new TemplateMenuNode('ConfigManagementHardware', '', $oCINode->GetIndex(), 3 /* fRank */);
+new OQLMenuNode('Subnet', 'SELECT Subnet', $oHWNode->GetIndex(), 0 /* fRank */);
+new OQLMenuNode('NetworkDevice', 'SELECT NetworkDevice', $oHWNode->GetIndex(), 1 /* fRank */);
+new OQLMenuNode('Server', 'SELECT Server', $oHWNode->GetIndex(), 2 /* fRank */);
+new OQLMenuNode('Printer', 'SELECT Printer', $oHWNode->GetIndex(), 3 /* fRank */);
+new OQLMenuNode('MobilePhone', 'SELECT MobilePhone', $oHWNode->GetIndex(), 4 /* fRank */);
+new OQLMenuNode('PC', 'SELECT PC', $oHWNode->GetIndex(), 5 /* fRank */);
 
 
 ?>

+ 1 - 0
modules/itop-incident-mgmt-1.0.0/module.itop-incident-mgmt.php

@@ -12,6 +12,7 @@ SetupWebPage::AddModule(
 		//
 		'dependencies' => array(
 			'itop-config-mgmt/1.0.0',
+			'itop-tickets/1.0.0',
 		),
 		'mandatory' => false,
 		'visible' => true,

+ 1 - 0
modules/itop-knownerror-mgmt-1.0.0/module.itop-knownerror-mgmt.php

@@ -12,6 +12,7 @@ SetupWebPage::AddModule(
 		//
 		'dependencies' => array(
 			'itop-config-mgmt/1.0.0',
+			'itop-tickets/1.0.0',
 		),
 		'mandatory' => false,
 		'visible' => true,

+ 1 - 0
modules/itop-problem-mgmt-1.0.0/module.itop-problem-mgmt.php

@@ -12,6 +12,7 @@ SetupWebPage::AddModule(
 		//
 		'dependencies' => array(
 			'itop-config-mgmt/1.0.0',
+			'itop-tickets/1.0.0',
 		),
 		'mandatory' => false,
 		'visible' => true,

+ 1 - 0
modules/itop-request-mgmt-1.0.0/module.itop-request-mgmt.php

@@ -12,6 +12,7 @@ SetupWebPage::AddModule(
 		//
 		'dependencies' => array(
 			'itop-config-mgmt/1.0.0',
+			'itop-tickets/1.0.0',
 		),
 		'mandatory' => false,
 		'visible' => true,

+ 9 - 0
modules/itop-service-mgmt-1.0.0/en.dict.itop-service-mgmt.php

@@ -48,4 +48,13 @@
 // Class:<class_name>/Stimulus:<stimulus_code>
 // Class:<class_name>/Stimulus:<stimulus_code>+
 
+Dict::Add('EN US', 'English', 'English', array(
+'Menu:ServiceManagement' => 'Service Management',
+'Menu:ServiceManagement+' => 'Service Management Overview',
+'UI-ServiceManagementMenu-ContractsBySrvLevel' => 'Contracts by service level',
+'UI-ServiceManagementMenu-ContractsByStatus' => 'Contracts by status',
+'UI-ServiceManagementMenu-ContractsEndingIn30Days' => 'Contracts ending in less then 30 days',
+));
+
+
 ?>

+ 22 - 39
modules/itop-service-mgmt-1.0.0/model.itop-service-mgmt.php

@@ -378,12 +378,13 @@ class ServiceLevel extends cmdbAbstractObject
 		MetaModel::Init_AddAttribute(new AttributeString("ticket_type", array("allowed_values"=>null, "sql"=>"ticket_type", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
 		MetaModel::Init_AddAttribute(new AttributeString("ticket_priorities", array("allowed_values"=>null, "sql"=>"ticket_priorities", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
 		MetaModel::Init_AddAttribute(new AttributeInteger("value", array("allowed_values"=>null, "sql"=>"value", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeString("value_unit", array("allowed_values"=>null, "sql"=>"value_unit", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
 		MetaModel::Init_AddAttribute(new AttributeLinkedSetIndirect("sla_list", array("linked_class"=>"lnkLevelToSLA", "ext_key_to_me"=>"servicelevel_id", "ext_key_to_remote"=>"sla_id", "allowed_values"=>null, "count_min"=>0, "count_max"=>0, "depends_on"=>array())));
 
-		MetaModel::Init_SetZListItems('details', array('name', 'metric', 'ticket_type', 'ticket_priorities', 'value', 'sla_list'));
-		MetaModel::Init_SetZListItems('advanced_search', array('name', 'metric', 'ticket_type', 'ticket_priorities', 'value'));
-		MetaModel::Init_SetZListItems('standard_search', array('name', 'metric', 'ticket_type', 'ticket_priorities', 'value'));
-		MetaModel::Init_SetZListItems('list', array('name', 'metric', 'ticket_type', 'ticket_priorities', 'value'));
+		MetaModel::Init_SetZListItems('details', array('name', 'metric', 'ticket_type', 'ticket_priorities', 'value', 'value_unit', 'sla_list'));
+		MetaModel::Init_SetZListItems('advanced_search', array('name', 'metric', 'ticket_type', 'ticket_priorities', 'value', 'value_unit'));
+		MetaModel::Init_SetZListItems('standard_search', array('name', 'metric', 'ticket_type', 'ticket_priorities', 'value', 'value_unit'));
+		MetaModel::Init_SetZListItems('list', array('name', 'metric', 'ticket_type', 'ticket_priorities', 'value', 'value_unit'));
 	}
 }
 class lnkLevelToSLA extends cmdbAbstractObject
@@ -410,11 +411,14 @@ class lnkLevelToSLA extends cmdbAbstractObject
 		MetaModel::Init_AddAttribute(new AttributeExternalField("sla_name", array("allowed_values"=>null, "extkey_attcode"=>"sla_id", "target_attcode"=>"name", "is_null_allowed"=>true, "depends_on"=>array())));
 		MetaModel::Init_AddAttribute(new AttributeExternalKey("servicelevel_id", array("targetclass"=>"ServiceLevel", "jointype"=>null, "allowed_values"=>null, "sql"=>"servicelevel_id", "is_null_allowed"=>false, "on_target_delete"=>DEL_AUTO, "depends_on"=>array())));
 		MetaModel::Init_AddAttribute(new AttributeExternalField("servicelevel_name", array("allowed_values"=>null, "extkey_attcode"=>"servicelevel_id", "target_attcode"=>"name", "is_null_allowed"=>true, "depends_on"=>array())));
-
-		MetaModel::Init_SetZListItems('details', array('sla_id', 'servicelevel_id'));
-		MetaModel::Init_SetZListItems('advanced_search', array('sla_id', 'servicelevel_id'));
-		MetaModel::Init_SetZListItems('standard_search', array('sla_id', 'servicelevel_id'));
-		MetaModel::Init_SetZListItems('list', array('sla_id', 'servicelevel_id'));
+		MetaModel::Init_AddAttribute(new AttributeExternalField("servicelevel_metric", array("allowed_values"=>null, "extkey_attcode"=>"servicelevel_id", "target_attcode"=>"metric", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeExternalField("servicelevel_value", array("allowed_values"=>null, "extkey_attcode"=>"servicelevel_id", "target_attcode"=>"value", "is_null_allowed"=>true, "depends_on"=>array())));
+		MetaModel::Init_AddAttribute(new AttributeExternalField("servicelevel_value_unit", array("allowed_values"=>null, "extkey_attcode"=>"servicelevel_id", "target_attcode"=>"value_unit", "is_null_allowed"=>true, "depends_on"=>array())));
+
+		MetaModel::Init_SetZListItems('details', array('sla_id', 'servicelevel_id', 'servicelevel_metric', 'servicelevel_value', 'servicelevel_value_unit'));
+		MetaModel::Init_SetZListItems('advanced_search', array('sla_id', 'servicelevel_id', 'servicelevel_metric', 'servicelevel_value', 'servicelevel_value_unit'));
+		MetaModel::Init_SetZListItems('standard_search', array('sla_id', 'servicelevel_id', 'servicelevel_metric', 'servicelevel_value', 'servicelevel_value_unit'));
+		MetaModel::Init_SetZListItems('list', array('sla_id', 'servicelevel_id', 'servicelevel_metric', 'servicelevel_value', 'servicelevel_value_unit'));
 	}
 }
 //////////////////////////////////////////////////////////////////////////////
@@ -426,41 +430,20 @@ class lnkLevelToSLA extends cmdbAbstractObject
 //			+ ...
 //			+ ...
 ////////////////////////////////////////////////////////////////////////////////////
-// Create the top-level group. fRank = 1, means it will be inserted after the group '0', which is usually 'Welcome'
-$oMyMenuGroup = new MenuGroup('Menu:MyModule', 1 /* fRank */);
-
-// Create an entry, based on a custom template, for the Configuration management overview, under the top-level group
-$oMyMenuNode = new TemplateMenuNode('Menu:MyModule', '../business/templates/configuration_management_menu.html', $oMyMenuGroup->GetIndex(), 0 /* fRank */);
-// By default, one entry per class
-new OQLMenuNode('Menu:Class:Contract/Name', 'Menu:Class:Contract/Title', 'SELECT Contract', $oMyMenuNode->GetIndex(), 0 /* fRank */);
-new OQLMenuNode('Menu:Class:ProviderContract/Name', 'Menu:Class:ProviderContract/Title', 'SELECT ProviderContract', $oMyMenuNode->GetIndex(), 1 /* fRank */);
-new OQLMenuNode('Menu:Class:CustomerContract/Name', 'Menu:Class:CustomerContract/Title', 'SELECT CustomerContract', $oMyMenuNode->GetIndex(), 2 /* fRank */);
-new OQLMenuNode('Menu:Class:lnkProviderToCustomer/Name', 'Menu:Class:lnkProviderToCustomer/Title', 'SELECT lnkProviderToCustomer', $oMyMenuNode->GetIndex(), 3 /* fRank */);
-new OQLMenuNode('Menu:Class:lnkContractToSLA/Name', 'Menu:Class:lnkContractToSLA/Title', 'SELECT lnkContractToSLA', $oMyMenuNode->GetIndex(), 4 /* fRank */);
-new OQLMenuNode('Menu:Class:lnkContractToDoc/Name', 'Menu:Class:lnkContractToDoc/Title', 'SELECT lnkContractToDoc', $oMyMenuNode->GetIndex(), 5 /* fRank */);
-new OQLMenuNode('Menu:Class:lnkContractToContact/Name', 'Menu:Class:lnkContractToContact/Title', 'SELECT lnkContractToContact', $oMyMenuNode->GetIndex(), 6 /* fRank */);
-new OQLMenuNode('Menu:Class:lnkContractToCI/Name', 'Menu:Class:lnkContractToCI/Title', 'SELECT lnkContractToCI', $oMyMenuNode->GetIndex(), 7 /* fRank */);
-new OQLMenuNode('Menu:Class:ServiceType/Name', 'Menu:Class:ServiceType/Title', 'SELECT ServiceType', $oMyMenuNode->GetIndex(), 8 /* fRank */);
-new OQLMenuNode('Menu:Class:Service/Name', 'Menu:Class:Service/Title', 'SELECT Service', $oMyMenuNode->GetIndex(), 9 /* fRank */);
-new OQLMenuNode('Menu:Class:SLA/Name', 'Menu:Class:SLA/Title', 'SELECT SLA', $oMyMenuNode->GetIndex(), 10 /* fRank */);
-new OQLMenuNode('Menu:Class:ServiceLevel/Name', 'Menu:Class:ServiceLevel/Title', 'SELECT ServiceLevel', $oMyMenuNode->GetIndex(), 11 /* fRank */);
-new OQLMenuNode('Menu:Class:lnkLevelToSLA/Name', 'Menu:Class:lnkLevelToSLA/Title', 'SELECT lnkLevelToSLA', $oMyMenuNode->GetIndex(), 12 /* fRank */);
-
-
 
+$oAdminMenu = new MenuGroup('AdminTools', 999);
+$iAdminGroup = $oAdminMenu->GetIndex();
+new OQLMenuNode('ServiceType', 'SELECT ServiceType', $iAdminGroup, 25 /* fRank */);
 
 
+$oServiceManagementGroup = new MenuGroup('ServiceManagement', 2 /* fRank */);
 
-$oAdminMenu = new MenuGroup('UI:AdminToolsMenu', 999);
-$iAdminGroup = $oAdminMenu->GetIndex();
-new OQLMenuNode('Menu:Class:ServiceType/Name', 'Menu:Class:ServiceType/Title', 'SELECT ServiceType', $iAdminGroup, 20 /* fRank */);
 
-$oServiceManagementGroup = new MenuGroup('Menu:ServiceManagement', 2 /* fRank */);
 
-new OQLMenuNode('Menu:Class:ProviderContract/Name', 'Menu:Class:ProviderContract/Title', 'SELECT ProviderContract', $oServiceManagementGroup->GetIndex(), 1 /* fRank */);
-new OQLMenuNode('Menu:Class:ProviderContract/Name', 'Menu:Class:ProviderContract/Title', 'SELECT ProviderContract', $oServiceManagementGroup->GetIndex(), 2 /* fRank */);
-new OQLMenuNode('Menu:Class:ProviderContract/Name', 'Menu:Class:ProviderContract/Title', 'SELECT Service', $oServiceManagementGroup->GetIndex(), 3 /* fRank */);
-new OQLMenuNode('Menu:Class:SLA/Name', 'Menu:Class:SLA/Title', 'SELECT SLA', $oServiceManagementGroup->GetIndex(), 4 /* fRank */);
-new OQLMenuNode('Menu:Class:ServiceLevel/Name', 'Menu:Class:ServiceLevel/Title', 'SELECT ServiceLevel', $oServiceManagementGroup->GetIndex(), 5 /* fRank */);
+new OQLMenuNode('ProviderContract', 'SELECT ProviderContract', $oServiceManagementGroup->GetIndex(), 1 /* fRank */);
+new OQLMenuNode('CustomerContract', 'SELECT CustomerContract', $oServiceManagementGroup->GetIndex(), 2 /* fRank */);
+new OQLMenuNode('Service', 'SELECT Service', $oServiceManagementGroup->GetIndex(), 3 /* fRank */);
+new OQLMenuNode('SLA', 'SELECT SLA', $oServiceManagementGroup->GetIndex(), 4 /* fRank */);
+new OQLMenuNode('ServiceLevel', 'SELECT ServiceLevel', $oServiceManagementGroup->GetIndex(), 5 /* fRank */);
 
 ?>