diff --git a/application/datamodel.application.xml b/application/datamodel.application.xml index 6d65b0f498..9616b1b990 100644 --- a/application/datamodel.application.xml +++ b/application/datamodel.application.xml @@ -258,6 +258,66 @@ + + + + attcode + true + + allow + + + + + + + + string + false + + + attcode + false + + allow + + + + + + + + + + + + attcode + true + + allow + + + + + + + + string + false + + + attcode + false + + allow + + + + + + + + @@ -409,30 +469,6 @@ - - - - reference - true - - - - - - - reference - true - - - - - - - reference - true - - - diff --git a/core/dbobject.class.php b/core/dbobject.class.php index ec5a242454..b3bbc59c89 100644 --- a/core/dbobject.class.php +++ b/core/dbobject.class.php @@ -4061,6 +4061,58 @@ abstract class DBObject implements iDisplay return true; } + /** + * Helper to set a date computed from another date with extra logic + * + * @api + * + * @param string $sAttCode attribute code of a date or date-time which will be set + * @param string $sModifier string specifying how to modify the date time + * @param string $sAttCodeSource attribute code of a date or date-time used as source + * + * @throws \CoreException + * @throws \CoreUnexpectedValue + * @since 3.0.0 + */ + public function SetComputedDate($sAttCode, $sModifier = '', $sAttCodeSource = '') + { + $oDate = new DateTime(); // Use now if no Source provided + if ($sAttCodeSource != "") { + $oAttDef = MetaModel::GetAttributeDef(get_class($this), $sAttCodeSource); + $oSourceValue = $this->Get($sAttCodeSource); + if (!$oAttDef->IsNull($oSourceValue)) { + // Use the existing value as the Source date + $oDate = new DateTime($oSourceValue); + } + } + $oDate->modify($sModifier); + $this->Set($sAttCode, $oDate->format('Y-m-d H:i:s')); + } + + /** + * Helper to set a date computed from another date with extra logic + * Call SetComputedDate() only of the internal representation of the attribute is null. + * + * @api + * @see SetComputedDate() + * + * @param string $sAttCode attribute code which will be set + * @param string $sModifier string specifying how to modify the date time + * @param string $sAttCodeSource attribute code used as source + * + * @throws \CoreException + * @throws \CoreUnexpectedValue + * @since 3.0.0 + */ + public function SetComputedDateIfNull($sAttCode, $sModifier = '', $sAttCodeSource = '') + { + $oAttDef = MetaModel::GetAttributeDef(get_class($this), $sAttCode); + $oCurrentValue = $this->Get($sAttCode); + if ($oAttDef->IsNull($oCurrentValue)) { + $this->SetComputedDate($sAttCode, $sModifier, $sAttCodeSource); + } + } + /** * Helper to set a value only if it is currently undefined * @@ -4079,40 +4131,35 @@ abstract class DBObject implements iDisplay { $oAttDef = MetaModel::GetAttributeDef(get_class($this), $sAttCode); $oCurrentValue = $this->Get($sAttCode); - if ($oAttDef->IsNull($oCurrentValue)) - { + if ($oAttDef->IsNull($oCurrentValue)) { $this->SetCurrentDate($sAttCode); } } - /** - * Helper to set the current logged in user for the given attribute - * Suitable for use as a lifecycle action - * - * @api - * - * @param string $sAttCode - * - * @return bool - * - * @throws CoreException - * @throws CoreUnexpectedValue - */ + + /** + * Helper to set the current logged in user for the given attribute + * Suitable for use as a lifecycle action + * + * @api + * + * @param string $sAttCode + * + * @return bool + * + * @throws CoreException + * @throws CoreUnexpectedValue + */ public function SetCurrentUser($sAttCode) { $oAttDef = MetaModel::GetAttributeDef(get_class($this), $sAttCode); - if ($oAttDef instanceof AttributeString) - { + if ($oAttDef instanceof AttributeString) { // Note: the user friendly name is the contact friendly name if a contact is attached to the logged in user $this->Set($sAttCode, UserRights::GetUserFriendlyName()); - } - else - { - if ($oAttDef->IsExternalKey()) - { + } else { + if ($oAttDef->IsExternalKey()) { /** @var \AttributeExternalKey $oAttDef */ - if ($oAttDef->GetTargetClass() != 'User') - { + if ($oAttDef->GetTargetClass() != 'User') { throw new Exception("SetCurrentUser: the attribute $sAttCode must be an external key to 'User', found '".$oAttDef->GetTargetClass()."'"); } } diff --git a/dictionaries/en.dictionary.itop.ui.php b/dictionaries/en.dictionary.itop.ui.php index 30fa480bf1..610ee68c77 100644 --- a/dictionaries/en.dictionary.itop.ui.php +++ b/dictionaries/en.dictionary.itop.ui.php @@ -341,10 +341,10 @@ Dict::Add('EN US', 'English', 'English', array( 'BooleanLabel:yes' => 'yes', 'BooleanLabel:no' => 'no', 'UI:Login:Title' => ITOP_APPLICATION_SHORT.' login', - 'Menu:WelcomeMenu' => 'Welcome', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:WelcomeMenu+' => 'Welcome to '.ITOP_APPLICATION_SHORT, // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:WelcomeMenuPage' => 'Welcome', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:WelcomeMenuPage+' => 'Welcome to '.ITOP_APPLICATION_SHORT, // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:WelcomeMenu' => 'Welcome',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:WelcomeMenu+' => 'Welcome to '.ITOP_APPLICATION_SHORT,// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:WelcomeMenuPage' => 'Welcome',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:WelcomeMenuPage+' => 'Welcome to '.ITOP_APPLICATION_SHORT,// Duplicated into itop-welcome-itil (will be removed from here...) 'UI:WelcomeMenu:Title' => 'Welcome to '.ITOP_APPLICATION_SHORT, 'UI:WelcomeMenu:LeftBlock' => '

'.ITOP_APPLICATION_SHORT.' is a complete, OpenSource, IT Operational Portal.

@@ -563,43 +563,43 @@ We hope you’ll enjoy this version as much as we enjoyed imagining and creating 'UI:ResetPwd-Ready' => 'The password has been changed.', 'UI:ResetPwd-Login' => 'Click here to login...', - 'UI:Login:About' => ITOP_APPLICATION.' Powered by Combodo', - 'UI:Login:ChangeYourPassword' => 'Change Your Password', - 'UI:Login:OldPasswordPrompt' => 'Old password', - 'UI:Login:NewPasswordPrompt' => 'New password', - 'UI:Login:RetypeNewPasswordPrompt' => 'Retype new password', - 'UI:Login:IncorrectOldPassword' => 'Error: the old password is incorrect', - 'UI:LogOffMenu' => 'Log off', - 'UI:LogOff:ThankYou' => 'Thank you for using '.ITOP_APPLICATION, - 'UI:LogOff:ClickHereToLoginAgain' => 'Click here to login again...', - 'UI:ChangePwdMenu' => 'Change Password...', - 'UI:Login:PasswordChanged' => 'Password successfully set!', - 'UI:AccessRO-All' => ITOP_APPLICATION.' is read-only', - 'UI:AccessRO-Users' => ITOP_APPLICATION.' is read-only for end-users', - 'UI:ApplicationEnvironment' => 'Application environment: %1$s', - 'UI:Login:RetypePwdDoesNotMatch' => 'New password and retyped new password do not match!', - 'UI:Button:Login' => 'Enter '.ITOP_APPLICATION, - 'UI:Login:Error:AccessRestricted' => ITOP_APPLICATION_SHORT.' access is restricted. Please, contact an '.ITOP_APPLICATION_SHORT.' administrator.', - 'UI:Login:Error:AccessAdmin' => 'Access restricted to people having administrator privileges. Please, contact an '.ITOP_APPLICATION_SHORT.' administrator.', - 'UI:Login:Error:WrongOrganizationName' => 'Unknown organization', + 'UI:Login:About' => ITOP_APPLICATION.' Powered by Combodo', + 'UI:Login:ChangeYourPassword' => 'Change Your Password', + 'UI:Login:OldPasswordPrompt' => 'Old password', + 'UI:Login:NewPasswordPrompt' => 'New password', + 'UI:Login:RetypeNewPasswordPrompt' => 'Retype new password', + 'UI:Login:IncorrectOldPassword' => 'Error: the old password is incorrect', + 'UI:LogOffMenu' => 'Log off', + 'UI:LogOff:ThankYou' => 'Thank you for using '.ITOP_APPLICATION, + 'UI:LogOff:ClickHereToLoginAgain' => 'Click here to login again...', + 'UI:ChangePwdMenu' => 'Change Password...', + 'UI:Login:PasswordChanged' => 'Password successfully set!', + 'UI:AccessRO-All' => ITOP_APPLICATION.' is read-only', + 'UI:AccessRO-Users' => ITOP_APPLICATION.' is read-only for end-users', + 'UI:ApplicationEnvironment' => 'Application environment: %1$s', + 'UI:Login:RetypePwdDoesNotMatch' => 'New password and retyped new password do not match!', + 'UI:Button:Login' => 'Enter '.ITOP_APPLICATION, + 'UI:Login:Error:AccessRestricted' => ITOP_APPLICATION_SHORT.' access to this page is restricted. Please, contact an '.ITOP_APPLICATION_SHORT.' administrator.', + 'UI:Login:Error:AccessAdmin' => 'Access restricted to people having administrator privileges. Please, contact an '.ITOP_APPLICATION_SHORT.' administrator.', + 'UI:Login:Error:WrongOrganizationName' => 'Unknown organization', 'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Multiple contacts have the same e-mail', - 'UI:Login:Error:NoValidProfiles' => 'No valid profile provided', - 'UI:CSVImport:MappingSelectOne' => '-- select one --', - 'UI:CSVImport:MappingNotApplicable' => '-- ignore this field --', - 'UI:CSVImport:NoData' => 'Empty data set..., please provide some data!', - 'UI:Title:DataPreview' => 'Data Preview', - 'UI:CSVImport:ErrorOnlyOneColumn' => 'Error: The data contains only one column. Did you select the appropriate separator character?', - 'UI:CSVImport:FieldName' => 'Field %1$d', - 'UI:CSVImport:DataLine1' => 'Data Line 1', - 'UI:CSVImport:DataLine2' => 'Data Line 2', - 'UI:CSVImport:idField' => 'id (Primary Key)', - 'UI:Title:BulkImport' => ITOP_APPLICATION_SHORT.' - Bulk import', - 'UI:Title:BulkImport+' => 'CSV Import Wizard', - 'UI:Title:BulkSynchro_nbItem_ofClass_class' => 'Synchronization of %1$d objects of class %2$s', - 'UI:CSVImport:ClassesSelectOne' => '-- select one --', - 'UI:CSVImport:ErrorExtendedAttCode' => 'Internal error: "%1$s" is an incorrect code because "%2$s" is NOT an external key of the class "%3$s"', - 'UI:CSVImport:ObjectsWillStayUnchanged' => '%1$d objects(s) will stay unchanged.', - 'UI:CSVImport:ObjectsWillBeModified' => '%1$d objects(s) will be modified.', + 'UI:Login:Error:NoValidProfiles' => 'No valid profile provided', + 'UI:CSVImport:MappingSelectOne' => '-- select one --', + 'UI:CSVImport:MappingNotApplicable' => '-- ignore this field --', + 'UI:CSVImport:NoData' => 'Empty data set..., please provide some data!', + 'UI:Title:DataPreview' => 'Data Preview', + 'UI:CSVImport:ErrorOnlyOneColumn' => 'Error: The data contains only one column. Did you select the appropriate separator character?', + 'UI:CSVImport:FieldName' => 'Field %1$d', + 'UI:CSVImport:DataLine1' => 'Data Line 1', + 'UI:CSVImport:DataLine2' => 'Data Line 2', + 'UI:CSVImport:idField' => 'id (Primary Key)', + 'UI:Title:BulkImport' => ITOP_APPLICATION_SHORT.' - Bulk import', + 'UI:Title:BulkImport+' => 'CSV Import Wizard', + 'UI:Title:BulkSynchro_nbItem_ofClass_class' => 'Synchronization of %1$d objects of class %2$s', + 'UI:CSVImport:ClassesSelectOne' => '-- select one --', + 'UI:CSVImport:ErrorExtendedAttCode' => 'Internal error: "%1$s" is an incorrect code because "%2$s" is NOT an external key of the class "%3$s"', + 'UI:CSVImport:ObjectsWillStayUnchanged' => '%1$d objects(s) will stay unchanged.', + 'UI:CSVImport:ObjectsWillBeModified' => '%1$d objects(s) will be modified.', 'UI:CSVImport:ObjectsWillBeAdded' => '%1$d objects(s) will be added.', 'UI:CSVImport:ObjectsWillHaveErrors' => '%1$d objects(s) will have errors.', 'UI:CSVImport:ObjectsRemainedUnchanged' => '%1$d objects(s) remained unchanged.', @@ -925,9 +925,9 @@ We hope you’ll enjoy this version as much as we enjoyed imagining and creating 'UI:UserManagement:NoLifeCycleApplicable+' => 'No lifecycle has been defined for this class', 'UI:UserManagement:GrantMatrix' => 'Grant Matrix', - 'Menu:AdminTools' => 'Administration', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:AdminTools+' => 'Administration tools', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:AdminTools?' => 'Tools accessible only to users having the administrator profile', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:AdminTools' => 'Administration',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:AdminTools+' => 'Administration tools',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:AdminTools?' => 'Tools accessible only to users having the administrator profile',// Duplicated into itop-welcome-itil (will be removed from here...) 'Menu:SystemTools' => 'System', 'UI:ChangeManagementMenu' => 'Change Management', @@ -973,17 +973,17 @@ We hope you’ll enjoy this version as much as we enjoyed imagining and creating 'UI-ContactsMenu-ContactsByType' => 'Contacts by type', 'UI-ContactsMenu-ContactsByStatus' => 'Contacts by status', - 'Menu:CSVImportMenu' => 'CSV import', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:CSVImportMenu+' => 'Bulk creation or update', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:CSVImportMenu' => 'CSV import',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:CSVImportMenu+' => 'Bulk creation or update',// Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:DataModelMenu' => 'Data Model', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:DataModelMenu+' => 'Overview of the Data Model', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:DataModelMenu' => 'Data Model',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:DataModelMenu+' => 'Overview of the Data Model',// Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:ExportMenu' => 'Export', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:ExportMenu+' => 'Export the results of any query in HTML, CSV or XML', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:ExportMenu' => 'Export',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:ExportMenu+' => 'Export the results of any query in HTML, CSV or XML',// Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:NotificationsMenu' => 'Notifications', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:NotificationsMenu+' => 'Configuration of the Notifications', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:NotificationsMenu' => 'Notifications',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:NotificationsMenu+' => 'Configuration of the Notifications',// Duplicated into itop-welcome-itil (will be removed from here...) 'UI:NotificationsMenu:Title' => 'Configuration of the Notifications', 'UI:NotificationsMenu:Help' => 'Help', 'UI:NotificationsMenu:HelpContent' => '

In '.ITOP_APPLICATION_SHORT.' the notifications are fully customizable. They are based on two sets of objects: triggers and actions.

@@ -1015,27 +1015,27 @@ When associated with a trigger, each action is given an "order" number, specifyi 'UI:TagAdminMenu:NoTags' => 'No Tag field configured', 'UI:TagSetFieldData:Error' => 'Error: %1$s', - 'Menu:AuditCategories' => 'Audit Categories', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:AuditCategories+' => 'Audit Categories', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:Notifications:Title' => 'Audit Categories', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:AuditCategories' => 'Audit Categories',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:AuditCategories+' => 'Audit Categories',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:Notifications:Title' => 'Audit Categories',// Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:RunQueriesMenu' => 'Run Queries', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:RunQueriesMenu+' => 'Run any query', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:RunQueriesMenu' => 'Run Queries',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:RunQueriesMenu+' => 'Run any query',// Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:QueryMenu' => 'Query phrasebook', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:QueryMenu+' => 'Query phrasebook', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:QueryMenu' => 'Query phrasebook',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:QueryMenu+' => 'Query phrasebook',// Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:DataAdministration' => 'Data Administration', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:DataAdministration+' => 'Data Administration', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:DataAdministration' => 'Data Administration',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:DataAdministration+' => 'Data Administration',// Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:UniversalSearchMenu' => 'Universal Search', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:UniversalSearchMenu+' => 'Search for anything...', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:UniversalSearchMenu' => 'Universal Search',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:UniversalSearchMenu+' => 'Search for anything...',// Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:UserManagementMenu' => 'User Management', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:UserManagementMenu+' => 'User management', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:UserManagementMenu' => 'User Management',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:UserManagementMenu+' => 'User management',// Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:ProfilesMenu' => 'Profiles', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:ProfilesMenu+' => 'Profiles', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:ProfilesMenu' => 'Profiles',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:ProfilesMenu+' => 'Profiles',// Duplicated into itop-welcome-itil (will be removed from here...) 'Menu:ProfilesMenu:Title' => 'Profiles', // Duplicated into itop-welcome-itil (will be removed from here...) @@ -1376,13 +1376,13 @@ When associated with a trigger, each action is given an "order" number, specifyi 'Month-10-Short' => 'Oct', 'Month-11-Short' => 'Nov', 'Month-12-Short' => 'Dec', - 'Calendar-FirstDayOfWeek' => 0, // 0 = Sunday, 1 = Monday, etc... + 'Calendar-FirstDayOfWeek' => 0,// 0 = Sunday, 1 = Monday, etc... 'UI:Menu:ShortcutList' => 'Create a Shortcut...', 'UI:ShortcutRenameDlg:Title' => 'Rename the shortcut', 'UI:ShortcutListDlg:Title' => 'Create a shortcut for the list', 'UI:ShortcutDelete:Confirm' => 'Please confirm that wou wish to delete the shortcut(s).', - 'Menu:MyShortcuts' => 'My Shortcuts', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:MyShortcuts' => 'My Shortcuts',// Duplicated into itop-welcome-itil (will be removed from here...) 'Class:Shortcut' => 'Shortcut', 'Class:Shortcut+' => '', 'Class:Shortcut/Attribute:name' => 'Name', @@ -1562,12 +1562,12 @@ When associated with a trigger, each action is given an "order" number, specifyi 'UI:Search:Criteria:Operator:String:EndsWith' => 'Ends with', 'UI:Search:Criteria:Operator:String:RegExp' => 'Regular exp.', // - Numeric widget - 'UI:Search:Criteria:Operator:Numeric:Equals' => 'Equals', // => '=', - 'UI:Search:Criteria:Operator:Numeric:GreaterThan' => 'Greater', // => '>', - 'UI:Search:Criteria:Operator:Numeric:GreaterThanOrEquals' => 'Greater / equals', // > '>=', - 'UI:Search:Criteria:Operator:Numeric:LessThan' => 'Less', // => '<', - 'UI:Search:Criteria:Operator:Numeric:LessThanOrEquals' => 'Less / equals', // > '<=', - 'UI:Search:Criteria:Operator:Numeric:Different' => 'Different', // => '≠', + 'UI:Search:Criteria:Operator:Numeric:Equals' => 'Equals',// => '=', + 'UI:Search:Criteria:Operator:Numeric:GreaterThan' => 'Greater',// => '>', + 'UI:Search:Criteria:Operator:Numeric:GreaterThanOrEquals' => 'Greater / equals',// > '>=', + 'UI:Search:Criteria:Operator:Numeric:LessThan' => 'Less',// => '<', + 'UI:Search:Criteria:Operator:Numeric:LessThanOrEquals' => 'Less / equals',// > '<=', + 'UI:Search:Criteria:Operator:Numeric:Different' => 'Different',// => '≠', // - Tag Set Widget 'UI:Search:Criteria:Operator:TagSet:Matches' => 'Matches', diff --git a/dictionaries/fr.dictionary.itop.ui.php b/dictionaries/fr.dictionary.itop.ui.php index d4ac892444..61fb813f38 100644 --- a/dictionaries/fr.dictionary.itop.ui.php +++ b/dictionaries/fr.dictionary.itop.ui.php @@ -325,10 +325,10 @@ Dict::Add('FR FR', 'French', 'Français', array( 'BooleanLabel:yes' => 'oui', 'BooleanLabel:no' => 'non', 'UI:Login:Title' => ITOP_APPLICATION_SHORT.' login', - 'Menu:WelcomeMenu' => 'Bienvenue', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:WelcomeMenu+' => 'Bienvenue dans '.ITOP_APPLICATION_SHORT, // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:WelcomeMenuPage' => 'Bienvenue', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:WelcomeMenuPage+' => 'Bienvenue dans '.ITOP_APPLICATION_SHORT, // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:WelcomeMenu' => 'Bienvenue',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:WelcomeMenu+' => 'Bienvenue dans '.ITOP_APPLICATION_SHORT,// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:WelcomeMenuPage' => 'Bienvenue',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:WelcomeMenuPage+' => 'Bienvenue dans '.ITOP_APPLICATION_SHORT,// Duplicated into itop-welcome-itil (will be removed from here...) 'UI:WelcomeMenu:Title' => 'Bienvenue dans '.ITOP_APPLICATION_SHORT, 'UI:WelcomeMenu:LeftBlock' => '

'.ITOP_APPLICATION_SHORT.' est un portail opérationnel complet et libre pour gérer votre SI.

@@ -547,43 +547,43 @@ Nous espérons que vous aimerez cette version autant que nous avons eu du plaisi 'UI:ResetPwd-Ready' => 'Le mot de passe a bien été changé.', 'UI:ResetPwd-Login' => 'Cliquez ici pour vous connecter...', - 'UI:Login:About' => '~~', - 'UI:Login:ChangeYourPassword' => 'Changer de mot de passe', - 'UI:Login:OldPasswordPrompt' => 'Ancien mot de passe', - 'UI:Login:NewPasswordPrompt' => 'Nouveau mot de passe', - 'UI:Login:RetypeNewPasswordPrompt' => 'Resaisir le nouveau mot de passe', - 'UI:Login:IncorrectOldPassword' => 'Erreur: l\'ancien mot de passe est incorrect', - 'UI:LogOffMenu' => 'Déconnexion', - 'UI:LogOff:ThankYou' => 'Merci d\'avoir utilisé '.ITOP_APPLICATION_SHORT, - 'UI:LogOff:ClickHereToLoginAgain' => 'Cliquez ici pour vous reconnecter...', - 'UI:ChangePwdMenu' => 'Changer de mot de passe...', - 'UI:Login:PasswordChanged' => 'Mot de passe mis à jour !', - 'UI:AccessRO-All' => ITOP_APPLICATION_SHORT.' est en lecture seule', - 'UI:AccessRO-Users' => ITOP_APPLICATION_SHORT.' est en lecture seule pour les utilisateurs finaux', - 'UI:ApplicationEnvironment' => 'Environnement applicatif: %1$s', - 'UI:Login:RetypePwdDoesNotMatch' => 'Les deux saisies du nouveau mot de passe ne sont pas identiques !', - 'UI:Button:Login' => 'Entrer dans '.ITOP_APPLICATION_SHORT, - 'UI:Login:Error:AccessRestricted' => 'L\'accès à '.ITOP_APPLICATION_SHORT.' est soumis à autorisation. Merci de contacter votre administrateur '.ITOP_APPLICATION_SHORT.'.', - 'UI:Login:Error:AccessAdmin' => 'Accès restreint aux utilisateurs possédant le profil Administrateur.', - 'UI:Login:Error:WrongOrganizationName' => 'Organisation inconnue', + 'UI:Login:About' => '~~', + 'UI:Login:ChangeYourPassword' => 'Changer de mot de passe', + 'UI:Login:OldPasswordPrompt' => 'Ancien mot de passe', + 'UI:Login:NewPasswordPrompt' => 'Nouveau mot de passe', + 'UI:Login:RetypeNewPasswordPrompt' => 'Resaisir le nouveau mot de passe', + 'UI:Login:IncorrectOldPassword' => 'Erreur: l\'ancien mot de passe est incorrect', + 'UI:LogOffMenu' => 'Déconnexion', + 'UI:LogOff:ThankYou' => 'Merci d\'avoir utilisé '.ITOP_APPLICATION_SHORT, + 'UI:LogOff:ClickHereToLoginAgain' => 'Cliquez ici pour vous reconnecter...', + 'UI:ChangePwdMenu' => 'Changer de mot de passe...', + 'UI:Login:PasswordChanged' => 'Mot de passe mis à jour !', + 'UI:AccessRO-All' => ITOP_APPLICATION_SHORT.' est en lecture seule', + 'UI:AccessRO-Users' => ITOP_APPLICATION_SHORT.' est en lecture seule pour les utilisateurs finaux', + 'UI:ApplicationEnvironment' => 'Environnement applicatif: %1$s', + 'UI:Login:RetypePwdDoesNotMatch' => 'Les deux saisies du nouveau mot de passe ne sont pas identiques !', + 'UI:Button:Login' => 'Entrer dans '.ITOP_APPLICATION_SHORT, + 'UI:Login:Error:AccessRestricted' => 'L\'accès à cette page '.ITOP_APPLICATION_SHORT.' est soumis à autorisation. Merci de contacter votre administrateur '.ITOP_APPLICATION_SHORT.'.', + 'UI:Login:Error:AccessAdmin' => 'Accès restreint aux utilisateurs possédant le profil Administrateur.', + 'UI:Login:Error:WrongOrganizationName' => 'Organisation inconnue', 'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Email partagé par plusieurs contacts', - 'UI:Login:Error:NoValidProfiles' => 'Pas de profil valide', - 'UI:CSVImport:MappingSelectOne' => '-- choisir une valeur --', - 'UI:CSVImport:MappingNotApplicable' => '-- ignorer ce champ --', - 'UI:CSVImport:NoData' => 'Aucune donnée... merci de fournir des données !', - 'UI:Title:DataPreview' => 'Aperçu des données', - 'UI:CSVImport:ErrorOnlyOneColumn' => 'Erreur: Les données semblent ne contenir qu\'une seule colonne. Avez-vous choisi le bon séparateur ?', - 'UI:CSVImport:FieldName' => 'Champ n°%1$d', - 'UI:CSVImport:DataLine1' => 'Données Ligne 1', - 'UI:CSVImport:DataLine2' => 'Données Ligne 2', - 'UI:CSVImport:idField' => 'id (Clef primaire)', - 'UI:Title:BulkImport' => ITOP_APPLICATION_SHORT.' - Import massif', - 'UI:Title:BulkImport+' => 'Assistant d\'import CSV', - 'UI:Title:BulkSynchro_nbItem_ofClass_class' => 'Synchronisation de %1$d éléments de type %2$s', - 'UI:CSVImport:ClassesSelectOne' => '-- choisir une valeur --', - 'UI:CSVImport:ErrorExtendedAttCode' => 'Erreur interne: "%1$s" n\'est pas une code correct car "%2$s" n\'est pas une clef externe de la classe "%3$s"', - 'UI:CSVImport:ObjectsWillStayUnchanged' => '%1$d objets(s) resteront inchangés.', - 'UI:CSVImport:ObjectsWillBeModified' => '%1$d objets(s) seront modifiés.', + 'UI:Login:Error:NoValidProfiles' => 'Pas de profil valide', + 'UI:CSVImport:MappingSelectOne' => '-- choisir une valeur --', + 'UI:CSVImport:MappingNotApplicable' => '-- ignorer ce champ --', + 'UI:CSVImport:NoData' => 'Aucune donnée... merci de fournir des données !', + 'UI:Title:DataPreview' => 'Aperçu des données', + 'UI:CSVImport:ErrorOnlyOneColumn' => 'Erreur: Les données semblent ne contenir qu\'une seule colonne. Avez-vous choisi le bon séparateur ?', + 'UI:CSVImport:FieldName' => 'Champ n°%1$d', + 'UI:CSVImport:DataLine1' => 'Données Ligne 1', + 'UI:CSVImport:DataLine2' => 'Données Ligne 2', + 'UI:CSVImport:idField' => 'id (Clef primaire)', + 'UI:Title:BulkImport' => ITOP_APPLICATION_SHORT.' - Import massif', + 'UI:Title:BulkImport+' => 'Assistant d\'import CSV', + 'UI:Title:BulkSynchro_nbItem_ofClass_class' => 'Synchronisation de %1$d éléments de type %2$s', + 'UI:CSVImport:ClassesSelectOne' => '-- choisir une valeur --', + 'UI:CSVImport:ErrorExtendedAttCode' => 'Erreur interne: "%1$s" n\'est pas une code correct car "%2$s" n\'est pas une clef externe de la classe "%3$s"', + 'UI:CSVImport:ObjectsWillStayUnchanged' => '%1$d objets(s) resteront inchangés.', + 'UI:CSVImport:ObjectsWillBeModified' => '%1$d objets(s) seront modifiés.', 'UI:CSVImport:ObjectsWillBeAdded' => '%1$d objets(s) seront créés.', 'UI:CSVImport:ObjectsWillHaveErrors' => '%1$d objets(s) seront en erreur.', 'UI:CSVImport:ObjectsRemainedUnchanged' => '%1$d objets(s) n\'ont pas changé.', @@ -908,9 +908,9 @@ Nous espérons que vous aimerez cette version autant que nous avons eu du plaisi 'UI:UserManagement:NoLifeCycleApplicable+' => 'Aucun cycle de vie n\'est défini pour ce type d\'objets.', 'UI:UserManagement:GrantMatrix' => 'Matrice des droits', - 'Menu:AdminTools' => 'Administration', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:AdminTools+' => 'Outils d\'administration', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:AdminTools?' => 'Ces outils sont accessibles uniquement aux utilisateurs possédant le profil Administrateur.', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:AdminTools' => 'Administration',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:AdminTools+' => 'Outils d\'administration',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:AdminTools?' => 'Ces outils sont accessibles uniquement aux utilisateurs possédant le profil Administrateur.',// Duplicated into itop-welcome-itil (will be removed from here...) 'Menu:SystemTools' => 'Système', 'UI:ChangeManagementMenu' => 'Gestion du Changement', @@ -956,17 +956,17 @@ Nous espérons que vous aimerez cette version autant que nous avons eu du plaisi 'UI-ContactsMenu-ContactsByType' => 'Contacts par type', 'UI-ContactsMenu-ContactsByStatus' => 'Contacts par état', - 'Menu:CSVImportMenu' => 'Import CSV', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:CSVImportMenu+' => 'Import ou mise à jour en masse', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:CSVImportMenu' => 'Import CSV',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:CSVImportMenu+' => 'Import ou mise à jour en masse',// Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:DataModelMenu' => 'Modèle de Données', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:DataModelMenu+' => 'Résumé du Modèle de Données', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:DataModelMenu' => 'Modèle de Données',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:DataModelMenu+' => 'Résumé du Modèle de Données',// Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:ExportMenu' => 'Export', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:ExportMenu+' => 'Export des résultats d\'une requête en HTML, CSV ou XML', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:ExportMenu' => 'Export',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:ExportMenu+' => 'Export des résultats d\'une requête en HTML, CSV ou XML',// Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:NotificationsMenu' => 'Notifications', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:NotificationsMenu+' => 'Configuration des Notifications', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:NotificationsMenu' => 'Notifications',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:NotificationsMenu+' => 'Configuration des Notifications',// Duplicated into itop-welcome-itil (will be removed from here...) 'UI:NotificationsMenu:Title' => 'Configuration des Notifications', 'UI:NotificationsMenu:Help' => 'Aide', 'UI:NotificationsMenu:HelpContent' => '

Dans iTop les notifications sont totalement configurables. Elles sont basées sur deux types d\'objets: déclencheurs et actions.

@@ -997,27 +997,27 @@ Lors de l\'association à un déclencheur, on attribue à chaque action un numé 'UI:TagAdminMenu:NoTags' => 'Pas de champ étiquette configuré', 'UI:TagSetFieldData:Error' => 'Erreur: %1$s', - 'Menu:AuditCategories' => 'Catégories d\'audit', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:AuditCategories+' => 'Catégories d\'audit', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:Notifications:Title' => 'Catégories d\'audit', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:AuditCategories' => 'Catégories d\'audit',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:AuditCategories+' => 'Catégories d\'audit',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:Notifications:Title' => 'Catégories d\'audit',// Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:RunQueriesMenu' => 'Requêtes OQL', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:RunQueriesMenu+' => 'Executer une requête OQL', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:RunQueriesMenu' => 'Requêtes OQL',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:RunQueriesMenu+' => 'Executer une requête OQL',// Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:QueryMenu' => 'Livre des requêtes', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:QueryMenu+' => 'Livre des requêtes', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:QueryMenu' => 'Livre des requêtes',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:QueryMenu+' => 'Livre des requêtes',// Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:DataAdministration' => 'Administration des données', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:DataAdministration+' => 'Administration des données', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:DataAdministration' => 'Administration des données',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:DataAdministration+' => 'Administration des données',// Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:UniversalSearchMenu' => 'Recherche Universelle', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:UniversalSearchMenu+' => 'Rechercher n\'importe quel objet...', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:UniversalSearchMenu' => 'Recherche Universelle',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:UniversalSearchMenu+' => 'Rechercher n\'importe quel objet...',// Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:UserManagementMenu' => 'Gestion des Utilisateurs', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:UserManagementMenu+' => 'Gestion des Utilisateurs', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:UserManagementMenu' => 'Gestion des Utilisateurs',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:UserManagementMenu+' => 'Gestion des Utilisateurs',// Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:ProfilesMenu' => 'Profils', // Duplicated into itop-welcome-itil (will be removed from here...) - 'Menu:ProfilesMenu+' => 'Profils', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:ProfilesMenu' => 'Profils',// Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:ProfilesMenu+' => 'Profils',// Duplicated into itop-welcome-itil (will be removed from here...) 'Menu:ProfilesMenu:Title' => 'Profils', // Duplicated into itop-welcome-itil (will be removed from here...) @@ -1357,13 +1357,13 @@ Lors de l\'association à un déclencheur, on attribue à chaque action un numé 'Month-10-Short' => 'Oct', 'Month-11-Short' => 'Nov', 'Month-12-Short' => 'Déc', - 'Calendar-FirstDayOfWeek' => '1', // 0 = Sunday, 1 = Monday, etc... + 'Calendar-FirstDayOfWeek' => '1',// 0 = Sunday, 1 = Monday, etc... 'UI:Menu:ShortcutList' => 'Créer un Raccourci...', 'UI:ShortcutRenameDlg:Title' => 'Renommer le raccourci', 'UI:ShortcutListDlg:Title' => 'Créer un raccourci pour la liste', 'UI:ShortcutDelete:Confirm' => 'Veuillez confirmer la suppression du ou des raccourci(s)', - 'Menu:MyShortcuts' => 'Mes raccourcis', // Duplicated into itop-welcome-itil (will be removed from here...) + 'Menu:MyShortcuts' => 'Mes raccourcis',// Duplicated into itop-welcome-itil (will be removed from here...) 'Class:Shortcut' => 'Raccourci', 'Class:Shortcut+' => '', 'Class:Shortcut/Attribute:name' => 'Nom', @@ -1543,12 +1543,12 @@ Lors de l\'association à un déclencheur, on attribue à chaque action un numé 'UI:Search:Criteria:Operator:String:EndsWith' => 'Fini par', 'UI:Search:Criteria:Operator:String:RegExp' => 'Exp. rég.', // - Numeric widget - 'UI:Search:Criteria:Operator:Numeric:Equals' => 'Egal', // => '=', - 'UI:Search:Criteria:Operator:Numeric:GreaterThan' => 'Supérieur', // => '>', - 'UI:Search:Criteria:Operator:Numeric:GreaterThanOrEquals' => 'Sup. / égal', // > '>=', - 'UI:Search:Criteria:Operator:Numeric:LessThan' => 'Inférieur', // => '<', - 'UI:Search:Criteria:Operator:Numeric:LessThanOrEquals' => 'Inf. / égal', // > '<=', - 'UI:Search:Criteria:Operator:Numeric:Different' => 'Différent', // => '≠', + 'UI:Search:Criteria:Operator:Numeric:Equals' => 'Egal',// => '=', + 'UI:Search:Criteria:Operator:Numeric:GreaterThan' => 'Supérieur',// => '>', + 'UI:Search:Criteria:Operator:Numeric:GreaterThanOrEquals' => 'Sup. / égal',// > '>=', + 'UI:Search:Criteria:Operator:Numeric:LessThan' => 'Inférieur',// => '<', + 'UI:Search:Criteria:Operator:Numeric:LessThanOrEquals' => 'Inf. / égal',// > '<=', + 'UI:Search:Criteria:Operator:Numeric:Different' => 'Différent',// => '≠', // - Tag Set Widget 'UI:Search:Criteria:Operator:TagSet:Matches' => 'Contient',