Compare commits

...

96 Commits

Author SHA1 Message Date
Denis Flaven
89e98a4ad7 (retrofit from trunk) Security: prevent grouping on password fields since it may lead to disclosure of the encrypted version of the password.
SVN:2.1.0[4247]
2016-06-22 14:01:45 +00:00
Denis Flaven
649a9833e9 (retrofit from trunk) Properly sanitize the "switch_env" parameter and take it into account only if it contains a valid value.
SVN:2.1.0[4241]
2016-06-22 12:16:20 +00:00
Romain Quetiez
b3c2396da8 #1209 Setup or Backup failing with french error message 'Effacement du fichier ...' Regression introduced in [r3868]. Occurs when a backup fails and prevents users from seeing the mysql error report.
SVN:2.1.0[4012]
2016-04-22 09:42:05 +00:00
Denis Flaven
5717ae1889 (retrofit from trunk) Optimization/bug (!): Never use the whole object as a placeholder in ApplyParams !!
SVN:2.1.0[3934]
2016-02-29 16:27:17 +00:00
Denis Flaven
823b33b0f5 Use one-way encryption for storing the token used for the "Forgotten password" feature.
SVN:2.1.0[3923]
2016-02-19 18:21:54 +00:00
Denis Flaven
9561ae6292 (retrofit from trunk) #1202: Fix for a security vulnerability in the Configuration Editor.
SVN:2.1.0[3906]
2016-02-11 10:32:53 +00:00
Romain Quetiez
e25a89dac1 #1174 Support HTML fields in the bulk modify form (capability to disable/enable) the field live (retrofit from trunk)
SVN:2.1.0[3893]
2016-02-01 15:22:49 +00:00
Romain Quetiez
cc7f3d46a6 #1165 backup with errors fills up tmp-directories with lots of backup-files (retrofit from trunk)
SVN:2.1.0[3892]
2016-02-01 14:57:54 +00:00
Denis Flaven
95d6b640b1 #1150: Spurious message "A restore is running..." - FIXED !
SVN:2.1.0[3867]
2016-01-20 16:08:12 +00:00
Denis Flaven
4ee0c62701 Support of derived classes in "add_remove" edition mode for AttributeLinkSet fields (the search form was not refreshing / loading properly when toggling the class to search for).
SVN:2.1.0[3825]
2015-11-20 14:29:30 +00:00
Denis Flaven
15f521d470 Make ReloadSearchForm work properly when the "submit" event handler is declared either with or without a "namespace" portion (e.g. 'submit.itop' vs 'submit') - retrofit from trunk
SVN:2.1.0[3819]
2015-11-09 10:52:45 +00:00
Romain Quetiez
86e6c8295f Instrumented the code to help in solving the "restore runing" issue. Retrofit from trunk of [3733] and [3595]: better error handling... check error.log!
SVN:2.1.0[3738]
2015-09-09 09:44:39 +00:00
Romain Quetiez
9f1338ee2a #1130 CAS authentication security leak when cas_memberof is left empty
SVN:2.1.0[3684]
2015-08-18 13:42:47 +00:00
Denis Flaven
96c8ee5e4d Retrofit of file based "transactions" as an alternative to session based ones.
SVN:2.1.0[3669]
2015-08-05 14:12:34 +00:00
Denis Flaven
8e863d4890 Fixed a potential XSS vulnerability.
SVN:2.1.0[3664]
2015-07-30 09:12:42 +00:00
Denis Flaven
cd769d5e49 Bug fix: typo causing the generation of invalid SQL queries (in some rare cases). - fix for the 2.1.0 branch.
SVN:2.1.0[3654]
2015-07-28 12:29:03 +00:00
Denis Flaven
04677fc2c7 Better error reporting (thanks to Stefan Goethals for suggesting it).
SVN:2.1.0[3624]
2015-07-06 17:07:07 +00:00
Denis Flaven
ed6a464d8b Bug fix: don't accept attachments (like images) via Chrome's copy/paste since it may duplicate the text content of a normal copy/paste and moreover causes troubles because there is no file name associated with the pasted content.
SVN:2.1.0[3622]
2015-07-06 14:33:21 +00:00
Denis Flaven
5794f7d1ca #1107: Make sure that all settings are preserved upon update.
SVN:2.1.0[3614]
2015-07-01 08:43:10 +00:00
Denis Flaven
7d42aa48cd Bug fix: make Excel export work on results of the global search.
SVN:2.1.0[3603]
2015-06-22 10:03:30 +00:00
Denis Flaven
614dd21aa9 Added an alternate implementation for storing "transaction" identifiers on disk instead of inside the $_SESSION variable.
SVN:2.1.0[3599]
2015-06-20 13:40:17 +00:00
Denis Flaven
706e6c56ff Mutex instrumentation for troubleshooting...
SVN:2.1.0[3596]
2015-06-19 14:48:13 +00:00
Romain Quetiez
f048c6cb1f JSON/REST: When specifying a case log entry (or the whole), it was not possible to set the user name without knowing a valid user id -retrofit from trunk
SVN:2.1.0[3594]
2015-06-16 09:51:51 +00:00
Romain Quetiez
1804903ee4 Make sure that the SQL mutexes are specific to the current iTop instance, but still preserving the capability for the setup to detect an already running cron job with or without a valid config file -reintegrated from trunk
SVN:2.1.0[3592]
2015-06-15 09:55:31 +00:00
Denis Flaven
17a8a896dc Bug fix: do NOT display the call stack in case of error/exception since it may contain sensitive information.
SVN:2.1.0[3589]
2015-06-05 13:52:07 +00:00
Romain Quetiez
ed85260bb3 Implemented GetForJSON and FromJSONToValue for AttributeLinkedSet (though this is not used for the Rest/JSON services which are doing much more)
SVN:2.1.0[3586]
2015-05-26 11:56:14 +00:00
Romain Quetiez
3c7fac7504 Make it possible to overload RestUtils (static methods called with static:: instead of self::) - iTop NOW REQUIRES PHP 5.3: we have verified, there are very installations of iTop made on PHP 5.2. It is worth to note that PHP 5.3 is already end of life (5.4 will become end of life in 8 months) -retrofit from trunk
SVN:2.1.0[3585]
2015-05-26 11:46:49 +00:00
Romain Quetiez
93feb700e8 ormStopWatch::GetElapsedTime not working in case of queries containing :this-> parameters (the prototype of GetElapsedTime has changed and is NOT compatible with the previous one) -reintegrated from trunk
SVN:2.1.0[3565]
2015-04-27 09:27:00 +00:00
Denis Flaven
48456082a9 Bug fix: prevent a crash of the web services when trying to log a non scalar paramater value...
SVN:2.1.0[3551]
2015-04-16 15:36:09 +00:00
Romain Quetiez
fbc0456496 Modules implementing a lifecycle written in PHP (and having actions executed on transitions) do not work until 2.1.0. The compatibility patch had been implemented but it was not working. Retrofitted from trunk
SVN:2.1.0[3548]
2015-04-16 13:53:02 +00:00
Denis Flaven
0fc3ee12b1 #1088: support of HTMLEditor in the PortalWebPage, for example if the description of a ticket is in HTML.
SVN:2.1.0[3540]
2015-04-07 15:56:16 +00:00
Denis Flaven
ce5f8c93cd Bug fix: properly compute the URLs/URIs for the soap server (and its extensions)
SVN:2.1.0[3537]
2015-04-07 09:59:53 +00:00
Denis Flaven
b38eb97323 Enhancement: allow the API to create entries with a specified user_login.
SVN:2.1.0[3516]
2015-03-24 17:09:51 +00:00
Denis Flaven
e6eb32cd21 #594: properly display attachments inside "properties" by closing the span and the fieldset in non-edit mode.
SVN:2.1.0[3512]
2015-03-23 17:56:40 +00:00
Denis Flaven
c2429f2d05 - Properly handle "suggested" attachments
- Properly pass the name of the uploaded file to the internal JS event

SVN:2.1.0[3497]
2015-02-12 18:03:36 +00:00
Romain Quetiez
4e4f2b4db9 #1060 Internal: improved the symptoms when calling MetaModel::GetAttributeDef with an invalid attribute code (feedback on the class name and no more FATAL errors) -retrofit from trunk
SVN:2.1.0[3493]
2015-02-09 13:15:21 +00:00
Romain Quetiez
2d7f963316 Branching on the revision used to build the official release 2.1.0
SVN:2.1.0[3485]
2015-01-06 08:57:15 +00:00
Denis Flaven
546d181ea9 Addition of the Danish localization contributed by Erik Bøg
SVN:trunk[3480]
2014-12-18 08:56:23 +00:00
Denis Flaven
143cefe4e3 #1041 Protect against some XSS injections
SVN:trunk[3479]
2014-12-18 08:50:04 +00:00
Romain Quetiez
ece152173f Advanced customization: a stop watch can be started in the past (incident ticket created from an alarm)
SVN:trunk[3478]
2014-12-18 08:37:00 +00:00
Denis Flaven
b08de31b3c Prevent duplicate declaration of the "Data Admin" menu (both in XML and PHP) which makes it impossible to customize.
SVN:trunk[3477]
2014-12-17 17:40:01 +00:00
Denis Flaven
0f967a41df Prevent a PHP crash when the icon tag is missing from a highlight_code definition in the XML.
SVN:trunk[3476]
2014-12-17 17:27:24 +00:00
Romain Quetiez
4c3bf70cc4 Completing [3423]: Problem/ev_assign still invoking the legacy verb SetAssignedDate
SVN:trunk[3475]
2014-12-17 08:55:02 +00:00
Romain Quetiez
35dd3f9610 The very final version (removed a misleading header in the readme file)
SVN:trunk[3473]
2014-12-16 15:13:09 +00:00
Romain Quetiez
a7f7424e54 #1039 Continuation of the fix implemented in [3465] that introduced a stopper regression (Fatal Error)
SVN:trunk[3472]
2014-12-16 13:54:40 +00:00
Denis Flaven
83e2974b10 #1040 Graphical display of "impact/depends on" is not consistent with the "list" tab
SVN:trunk[3471]
2014-12-16 13:40:51 +00:00
Romain Quetiez
715ba066d3 Adjusted dictionary entries (meta information about the lifecycle actions)
SVN:trunk[3470]
2014-12-16 09:02:03 +00:00
Romain Quetiez
9502003ff4 Updated the readme file with the latest changes
SVN:trunk[3469]
2014-12-15 16:11:15 +00:00
Romain Quetiez
57c827bb1a Updated the readme file with the latest changes
SVN:trunk[3468]
2014-12-15 16:08:50 +00:00
Denis Flaven
690ac9be75 #1038: dictionary cleanup to avoid misleading/duplicate names when importing Service Subcategories.
SVN:trunk[3467]
2014-12-15 16:08:10 +00:00
Romain Quetiez
4c3c31c44d Injectable methods: labels/descriptions given in the dictionary
SVN:trunk[3466]
2014-12-15 15:49:44 +00:00
Denis Flaven
3c9ace5b53 #1039: prevent concurrent executions of either synchro_import.php or synchro_exec.php for a given data source, since it would lead to unpredictable results.
SVN:trunk[3465]
2014-12-15 15:04:43 +00:00
Denis Flaven
bd5268dc42 Addition of the Ducth translation, thanks to Remie Malik.
SVN:trunk[3464]
2014-12-15 14:34:34 +00:00
Denis Flaven
133b6d4d29 #1037: refresh "priority" when either "impact" or "urgency" changes.
SVN:trunk[3463]
2014-12-15 14:09:17 +00:00
Denis Flaven
fba3990c61 - Proper handling of the validation hierarchy in property sheets.
- Correct behavior for animated submits...

SVN:trunk[3462]
2014-12-12 16:38:17 +00:00
Romain Quetiez
53e997cfba Instrumented Model Factory with means to keep track of touched nodes
SVN:trunk[3461]
2014-12-12 12:17:43 +00:00
Denis Flaven
e738ba35b7 The FormSelectorField now has its own widget to properly cope with its "subfields" in "property sheet" mode (continued).
SVN:trunk[3460]
2014-12-10 17:11:45 +00:00
Romain Quetiez
0773455ebc Cosmetics on the module names (consistency)
SVN:trunk[3459]
2014-12-10 10:48:47 +00:00
Denis Flaven
cafc6a8baf The FormSelectorField now has its own widget to properly cope with its "subfields" in "property sheet" mode.
SVN:trunk[3458]
2014-12-10 10:44:26 +00:00
Romain Quetiez
48f222df0b When adding a case log, existing objects could not be displayed anymore!
SVN:trunk[3457]
2014-12-09 16:07:06 +00:00
Denis Flaven
88726a0634 Support for some (optional) feedback during submit.
SVN:trunk[3456]
2014-12-08 13:19:09 +00:00
Denis Flaven
0ac522fc4c Support for some (optional) feedback during uploads.
SVN:trunk[3455]
2014-12-08 13:18:06 +00:00
Denis Flaven
aa97703b64 Add the appropriate "type" to the parameters passed to the actions on transitions.
SVN:trunk[3454]
2014-12-05 11:02:32 +00:00
Romain Quetiez
30af416394 Rework of the dictionaries: moved menu related entries to the module itop-welcome-itil (which does create most of those menus), while preserving the original copy of the entries so as to be compatible with customizations made with a copy of an older version of itop-welcome-itil
SVN:trunk[3453]
2014-12-04 16:05:11 +00:00
Denis Flaven
1f2ad9ecdb Demo mode: prevent the deletion of Users...
SVN:trunk[3452]
2014-12-04 10:02:14 +00:00
Romain Quetiez
d1f1889c42 Updated the release note with the changes made since the beta release
SVN:trunk[3451]
2014-12-03 16:43:28 +00:00
Romain Quetiez
ca7ee0f138 #1020 Restrict dashboard/shortcut refresh interval
SVN:trunk[3448]
2014-12-03 11:38:19 +00:00
Denis Flaven
909729e9f1 #1028: drop the support of non-numeric primary keys for DBObjects. This makes the queries related to the history (and the indexes) much more efficient. Beware, conversion time at setup can be long if the priv_changeop table is big.
SVN:trunk[3447]
2014-12-03 11:01:29 +00:00
Denis Flaven
a222ba998d Enhanced reporting during the setup: all the queries (create table / alter table) are now logged into "setup.log" along with their execution time.
SVN:trunk[3446]
2014-12-03 10:58:39 +00:00
Romain Quetiez
aedddf9dcc #1026 CSV import of tickets with impact = '', issuing a Notice
SVN:trunk[3445]
2014-12-02 14:45:19 +00:00
Denis Flaven
74de0d33ab #1021: fix alignment of multiple header dashlets in the same cell.
SVN:trunk[3444]
2014-12-02 13:10:44 +00:00
Romain Quetiez
8d8510a412 #1030 Missing values in the history tab (TTO/TTR)
The regression has been introduced in iTop 2.0.2 with the fix for #703 (escape HTML entities). There is no data loss: changes were correctly made and all the changes already recorded will be correctly displayed with the current fix.
The current change consists in a little rework: GetAsHTMLForHistory has been renamed DescribeChange, and it now calls oAttDef->GetAsHTMLForHistory instead of calling oAttDef->GetAsHTML, thus allowing for the factorization of the code that format the change description. AttributeSubitem does not overload DescribeChange. Rather, it simply overloads GetAsHTMLForHistory (viewing the diff may be confusing here).

SVN:trunk[3443]
2014-12-02 10:53:59 +00:00
Denis Flaven
4dd83a0eb6 #985: preserve the displayed sort order when refreshing a table.
SVN:trunk[3442]
2014-12-02 10:26:26 +00:00
Romain Quetiez
671ee353e8 #1027 Regression introduced in [3148] thus in 2.0.3 (cache the reconciliation for external keys on the CSV import) a cache hit on an ambiguous external key was not correctly handled
SVN:trunk[3440]
2014-12-01 19:12:19 +00:00
Denis Flaven
d714235d67 #1016: record the displayed value of the database_table_name field in the database.
This happens:
- when creating a new Synchro Data Source
- when modifying an "old" Synchro Data Source for which the field was empty.

SVN:trunk[3439]
2014-12-01 17:33:38 +00:00
Romain Quetiez
c4b039c9c6 #975 Continuation of the fix implemented in [r3431] - Renaming an enum requires to call RenameEnumValueInDB
SVN:trunk[3438]
2014-12-01 15:19:48 +00:00
Romain Quetiez
29e751278e #1029 Got rid of tags <format> that were not used at all and that were really misleading extension developers
SVN:trunk[3437]
2014-12-01 11:43:12 +00:00
Denis Flaven
87ed5d4a05 Fix for a regression introduced by [r3394] while fixing #1000: handling of OPT_ATT_MUSTCHANGE. The fix was not working when the original value contained several lines.
SVN:trunk[3436]
2014-11-28 17:03:13 +00:00
Denis Flaven
c8a20d01da Bug fix: proper handling of the validation of subforms...
SVN:trunk[3435]
2014-11-28 14:03:21 +00:00
Erwan Taloc
47add0eeea Allow linkage of organization to a Delivery model, directly from the tab "Customers"
SVN:trunk[3434]
2014-11-28 10:28:36 +00:00
Denis Flaven
2a9f69d70e More meta information about the interfaces.
SVN:trunk[3433]
2014-11-27 16:22:05 +00:00
Romain Quetiez
e90e570469 Datamodel version is now 2.1.0
SVN:trunk[3432]
2014-11-27 15:23:51 +00:00
Erwan Taloc
b0e56e5897 modify enumerated list for model type in order to manage Phone CIs : tack #975
SVN:trunk[3431]
2014-11-26 18:56:51 +00:00
Erwan Taloc
c96842d82c replace provider_name by provider_id in the search form of service-subcategories
SVN:trunk[3430]
2014-11-26 18:34:51 +00:00
Erwan Taloc
bc79aecd73 Improve french translation
SVN:trunk[3429]
2014-11-26 18:33:40 +00:00
Erwan Taloc
99755ad7e8 update highlight scale for request-management modules
SVN:trunk[3428]
2014-11-26 18:32:38 +00:00
Erwan Taloc
4867461f69 Add tab to link a problem to incidents
SVN:trunk[3427]
2014-11-26 17:38:53 +00:00
Erwan Taloc
3d21eecbba Translate missing tabs translation related_requests_list
SVN:trunk[3426]
2014-11-26 17:35:32 +00:00
Romain Quetiez
b822cff269 Instrumented the code to ease the troubleshooting of the computing of working hours
SVN:trunk[3425]
2014-11-25 15:25:28 +00:00
Romain Quetiez
3aa0b77751 Cosmetic on the XML: identify lifecycle functions parameters
SVN:trunk[3424]
2014-11-19 14:15:10 +00:00
Romain Quetiez
f4b10d3e81 #1022 Do cascade the resolution of an incident to its child requests + rework of the lifecycle/actions to ease the extensibility (New handlers: Rest, Copy, SetCurrentDate, SetCurrentUser, SetElapsedTime)
SVN:trunk[3423]
2014-11-19 09:44:52 +00:00
Denis Flaven
ca90f9b32a Oops, typo in "Prevent the JS validation (on focus) to create multiple entries for the same field, since it breaks the validation."
SVN:trunk[3422]
2014-11-18 17:25:08 +00:00
Denis Flaven
9ca051d9d0 Prevent the JS validation (on focus) to create multiple entries for the same field, since it breaks the validation.
SVN:trunk[3421]
2014-11-18 15:31:51 +00:00
Romain Quetiez
291f05683c New function: ormStopWatch::GetElapsedTime to compute the cumulated elapsed time on a stop watch still running -not used yet (but tested!)
SVN:trunk[3420]
2014-11-18 14:54:10 +00:00
Denis Flaven
4889ed5ac2 Read-only mode for icon selector widget: display at least the icon.
SVN:trunk[3419]
2014-11-18 09:22:48 +00:00
Denis Flaven
3fa354d00d Predefined objects are now handled by RuntimeEnvironment
SVN:trunk[3418]
2014-11-14 10:43:24 +00:00
178 changed files with 16692 additions and 1304 deletions

View File

@@ -271,6 +271,19 @@ class URP_UserProfile extends UserRightsBaseClassGUI
{
return Dict::Format('UI:UserManagement:LinkBetween_User_And_Profile', $this->Get('userlogin'), $this->Get('profile'));
}
public function CheckToDelete(&$oDeletionPlan)
{
if (MetaModel::GetConfig()->Get('demo_mode'))
{
// Users deletion is NOT allowed in demo mode
$oDeletionPlan->AddToDelete($this, null);
$oDeletionPlan->SetDeletionIssues($this, array('deletion not allowed in demo mode.'), true);
$oDeletionPlan->ComputeResults();
return false;
}
return parent::CheckToDelete($oDeletionPlan);
}
}
class URP_UserOrg extends UserRightsBaseClassGUI

View File

@@ -1,5 +1,5 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
// Copyright (C) 2010-2015 Combodo SARL
//
// This file is part of iTop.
//
@@ -781,8 +781,12 @@ class RestUtils
$oSearch = new DBObjectSearch($sClass);
foreach ($oCriteria as $sAttCode => $value)
{
$realValue = self::MakeValue($sClass, $sAttCode, $value);
$realValue = static::MakeValue($sClass, $sAttCode, $value);
$oSearch->AddCondition($sAttCode, $realValue, '=');
if (is_object($value) || is_array($value))
{
$value = json_encode($value);
}
$aCriteriaReport[] = "$sAttCode: $value ($realValue)";
}
$oSet = new DBObjectSet($oSearch);
@@ -814,7 +818,7 @@ class RestUtils
{
if (is_object($key))
{
$res = self::FindObjectFromCriteria($sClass, $key);
$res = static::FindObjectFromCriteria($sClass, $key);
}
elseif (is_numeric($key))
{
@@ -878,7 +882,7 @@ class RestUtils
$oSearch = new DBObjectSearch($sClass);
foreach ($key as $sAttCode => $value)
{
$realValue = self::MakeValue($sClass, $sAttCode, $value);
$realValue = static::MakeValue($sClass, $sAttCode, $value);
$oSearch->AddCondition($sAttCode, $realValue, '=');
}
}
@@ -922,7 +926,7 @@ class RestUtils
$oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode);
if ($oAttDef instanceof AttributeExternalKey)
{
$oExtKeyObject = self::FindObjectFromKey($oAttDef->GetTargetClass(), $value, true /* allow null */);
$oExtKeyObject = static::FindObjectFromKey($oAttDef->GetTargetClass(), $value, true /* allow null */);
$value = ($oExtKeyObject != null) ? $oExtKeyObject->GetKey() : 0;
}
elseif ($oAttDef instanceof AttributeLinkedSet)
@@ -935,7 +939,7 @@ class RestUtils
$aLinks = array();
foreach($value as $oValues)
{
$oLnk = self::MakeObjectFromFields($sLnkClass, $oValues);
$oLnk = static::MakeObjectFromFields($sLnkClass, $oValues);
$aLinks[] = $oLnk;
}
$value = DBObjectSet::FromArray($sLnkClass, $aLinks);
@@ -966,7 +970,7 @@ class RestUtils
$oObject = MetaModel::NewObject($sClass);
foreach ($aFields as $sAttCode => $value)
{
$realValue = self::MakeValue($sClass, $sAttCode, $value);
$realValue = static::MakeValue($sClass, $sAttCode, $value);
try
{
$oObject->Set($sAttCode, $realValue);
@@ -993,7 +997,7 @@ class RestUtils
$sClass = get_class($oObject);
foreach ($aFields as $sAttCode => $value)
{
$realValue = self::MakeValue($sClass, $sAttCode, $value);
$realValue = static::MakeValue($sClass, $sAttCode, $value);
try
{
$oObject->Set($sAttCode, $realValue);

View File

@@ -1522,7 +1522,7 @@ abstract class cmdbAbstractObject extends CMDBObject implements iDisplay
{
if (is_scalar($sValue))
{
$sHtml .= "<input type=\"hidden\" name=\"$sName\" value=\"$sValue\" />\n";
$sHtml .= "<input type=\"hidden\" name=\"$sName\" value=\"".htmlentities($sValue, ENT_QUOTES, 'UTF-8')."\" />\n";
}
}
$sHtml .= "<input type=\"hidden\" name=\"class\" value=\"$sClassName\" />\n";
@@ -1854,7 +1854,7 @@ abstract class cmdbAbstractObject extends CMDBObject implements iDisplay
{
$sNullValue = "'$sNullValue'"; // Add quotes to turn this into a JS string if it's not a number
}
$sOriginalValue = ($iFlags & OPT_ATT_MUSTCHANGE) ? "'".addslashes($value)."'" : 'undefined';
$sOriginalValue = ($iFlags & OPT_ATT_MUSTCHANGE) ? json_encode($value) : 'undefined';
$oPage->add_ready_script("$('#$iId').bind('".implode(' ', $aEventsList)."', function(evt, sFormId) { return ValidateField('$iId', '$sPattern', $bMandatory, sFormId, $sNullValue, $sOriginalValue) } );\n"); // Bind to a custom event: validate
}
$aDependencies = MetaModel::GetDependentAttributes($sClass, $sAttCode); // List of attributes that depend on the current one

View File

@@ -91,7 +91,7 @@ abstract class Dashboard
}
if ($oAutoReloadInterval = $oAutoReloadNode->getElementsByTagName('interval')->item(0))
{
$this->iAutoReloadSec = max(5, (int)$oAutoReloadInterval->textContent);
$this->iAutoReloadSec = max(MetaModel::GetConfig()->Get('min_reload_interval'), (int)$oAutoReloadInterval->textContent);
}
}
@@ -235,7 +235,7 @@ abstract class Dashboard
$this->sLayoutClass = $aParams['layout_class'];
$this->sTitle = $aParams['title'];
$this->bAutoReload = $aParams['auto_reload'] == 'true';
$this->iAutoReloadSec = max(5, (int) $aParams['auto_reload_sec']);
$this->iAutoReloadSec = max(MetaModel::GetConfig()->Get('min_reload_interval'), (int) $aParams['auto_reload_sec']);
foreach($aParams['cells'] as $aCell)
{
@@ -300,7 +300,7 @@ abstract class Dashboard
public function SetAutoReloadInterval($iAutoReloadSec)
{
$this->iAutoReloadSec = max(5, (int)$iAutoReloadSec);
$this->iAutoReloadSec = max(MetaModel::GetConfig()->Get('min_reload_interval'), (int)$iAutoReloadSec);
}
public function AddDashlet($oDashlet)
@@ -312,7 +312,7 @@ abstract class Dashboard
public function Render($oPage, $bEditMode = false, $aExtraParams = array())
{
$oPage->add('<h1>'.Dict::S($this->sTitle).'</h1>');
$oPage->add('<h1>'.htmlentities(Dict::S($this->sTitle), ENT_QUOTES, 'UTF-8', false).'</h1>');
$oLayout = new $this->sLayoutClass;
$oLayout->Render($oPage, $this->aCells, $bEditMode, $aExtraParams);
if (!$bEditMode)
@@ -357,16 +357,17 @@ abstract class Dashboard
$oField = new DesignerBooleanField('auto_reload', Dict::S('UI:DashboardEdit:AutoReload'), $this->bAutoReload);
$oForm->AddField($oField);
$oField = new DesignerTextField('auto_reload_sec', Dict::S('UI:DashboardEdit:AutoReloadSec'), $this->iAutoReloadSec);
$oField->SetValidationPattern('^$|^0*([5-9]|[1-9][0-9]+)$'); // Can be empty, or a number > 4
$oField = new DesignerIntegerField('auto_reload_sec', Dict::S('UI:DashboardEdit:AutoReloadSec'), $this->iAutoReloadSec);
$oField->SetBoundaries(MetaModel::GetConfig()->Get('min_reload_interval'), null); // no upper limit
$oForm->AddField($oField);
$this->SetFormParams($oForm);
$oForm->RenderAsPropertySheet($oPage, false, '.itop-dashboard');
$oPage->add('</div>');
$sRateTitle = addslashes(Dict::S('UI:DashboardEdit:AutoReloadSec+'));
$sRateTitle = addslashes(Dict::Format('UI:DashboardEdit:AutoReloadSec+', MetaModel::GetConfig()->Get('min_reload_interval')));
$oPage->add_ready_script(
<<<EOF
// Note: the title gets deleted by the validation mechanism

View File

@@ -733,7 +733,8 @@ abstract class DashletGroupBy extends Dashlet
if (is_subclass_of($sAttType, 'AttributeFriendlyName')) continue;
if ($sAttType == 'AttributeExternalField') continue;
if (is_subclass_of($sAttType, 'AttributeExternalField')) continue;
if ($sAttType == 'AttributeOneWayPassword') continue;
$sLabel = $this->oModelReflection->GetLabel($sClass, $sAttCode);
$aGroupBy[$sAttCode] = $sLabel;

View File

@@ -226,7 +226,7 @@ class DisplayBlock
if (is_numeric($aExtraParams['auto_reload']) && ($aExtraParams['auto_reload'] > 0))
{
$bAutoReload = true;
$iReloadInterval = max(5, $aExtraParams['auto_reload'])*1000;
$iReloadInterval = max(MetaModel::GetConfig()->Get('min_reload_interval'), $aExtraParams['auto_reload'])*1000;
}
else
{
@@ -393,7 +393,7 @@ class DisplayBlock
{
if (isset($aExtraParams['group_by_label']))
{
$oGroupByExp = Expression::FromOQL($aExtraParams['group_by']);
$oGroupByExp = Expression::FromOQL($aExtraParams['group_by']);
$sGroupByLabel = $aExtraParams['group_by_label'];
}
else
@@ -404,6 +404,21 @@ class DisplayBlock
$sGroupByLabel = MetaModel::GetLabel($this->m_oFilter->GetClass(), $aExtraParams['group_by']);
}
// Security filtering
$aFields = $oGroupByExp->ListRequiredFields();
foreach($aFields as $sFieldAlias)
{
if (preg_match('/^([^.]+)\\.([^.]+)$/', $sFieldAlias, $aMatches))
{
$sFieldClass = $this->m_oFilter->GetClassName($aMatches[1]);
$oAttDef = MetaModel::GetAttributeDef($sFieldClass, $aMatches[2]);
if ($oAttDef instanceof AttributeOneWayPassword)
{
throw new Exception('Grouping on password fields is not supported.');
}
}
}
$aGroupBy = array();
$aGroupBy['grouped_by_1'] = $oGroupByExp;
$sSql = MetaModel::MakeGroupByQuery($this->m_oFilter, $aQueryParams, $aGroupBy, true);
@@ -765,6 +780,7 @@ class DisplayBlock
$sHyperlink = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=search&'.$oAppContext->GetForLink().'&filter='.urlencode($this->m_oFilter->serialize());
$sHtml .= '<h1>'.Dict::S(str_replace('_', ':', $sTitle)).'</h1>';
$sHtml .= '<a class="summary" href="'.$sHyperlink.'">'.Dict::Format(str_replace('_', ':', $sLabel), $iCount).'</a>';
$sHtml .= '<div style="clear:both;"></div>';
break;
case 'csv':

View File

@@ -84,15 +84,14 @@ class DesignerForm
public function Render($oP, $bReturnHTML = false)
{
$sFormId = $this->GetFormId();
if ($this->oParentForm == null)
{
$sFormId = $this->sFormId;
$sReturn = '<form id="'.$sFormId.'">';
}
else
{
$sReturn = '';
$sFormId = $this->oParentForm->sFormId;
}
$sHiddenFields = '';
foreach($this->aFieldSets as $sLabel => $aFields)
@@ -108,7 +107,7 @@ class DesignerForm
$aRow = $oField->Render($oP, $sFormId);
if ($oField->IsVisible())
{
$sValidation = '&nbsp;<span class="prop_apply">'.$this->GetValidationArea($oField->GetCode()).'</span>';
$sValidation = '&nbsp;<span class="prop_apply">'.$this->GetValidationArea($oField->GetFieldId()).'</span>';
$sField = $aRow['value'].$sValidation;
$aDetails[] = array('label' => $aRow['label'], 'value' => $sField);
}
@@ -207,17 +206,14 @@ class DesignerForm
$sReturn = '';
$sActionUrl = addslashes($this->sSubmitTo);
$sJSSubmitParams = json_encode($this->aSubmitParams);
$sFormId = $this->GetFormId();
if ($this->oParentForm == null)
{
$sFormId = $this->sFormId;
$sReturn = '<form id="'.$sFormId.'" onsubmit="return false;">';
$sReturn .= '<table class="prop_table">';
$sReturn .= '<thead><tr><th class="prop_header">'.Dict::S('UI:Form:Property').'</th><th class="prop_header">'.Dict::S('UI:Form:Value').'</th><th colspan="2" class="prop_header">&nbsp;</th></tr></thead><tbody>';
}
else
{
$sFormId = $this->oParentForm->sFormId;
}
$sHiddenFields = '';
foreach($this->aFieldSets as $sLabel => $aFields)
{
@@ -234,7 +230,7 @@ class DesignerForm
if ($oField->IsVisible())
{
$sFieldId = $this->GetFieldId($oField->GetCode());
$sValidation = $this->GetValidationArea($oField->GetCode(), '<span title="Apply" class="ui-icon ui-icon-circle-check"/>');
$sValidation = $this->GetValidationArea($sFieldId, '<span title="Apply" class="ui-icon ui-icon-circle-check"/>');
$sValidationFields = '</td><td class="prop_icon prop_apply">'.$sValidation.'</td><td class="prop_icon prop_cancel"><span title="Revert" class="ui-icon ui-icon-circle-close"/></td>'.$this->EndRow();
$sPath = $this->GetHierarchyPath().'/'.$oField->GetCode();
@@ -255,9 +251,21 @@ class DesignerForm
$sAutoApply = $oField->IsAutoApply() ? 'true' : 'false';
$sHandlerEquals = $oField->GetHandlerEquals();
$sHandlerGetValue = $oField->GetHandlerGetValue();
$sWidgetClass = $oField->GetWidgetClass();
$sJSExtraParams = '';
if (count($oField->GetWidgetExtraParams()) > 0)
{
$aExtraParams = array();
foreach($oField->GetWidgetExtraParams() as $key=> $value)
{
$aExtraParams[] = "'$key': ".json_encode($value);
}
$sJSExtraParams = ', '.implode(', ', $aExtraParams);
}
$this->AddReadyScript(
<<<EOF
$('#row_$sFieldId').property_field({parent_selector: $sNotifyParentSelectorJS, field_id: '$sFieldId', equals: $sHandlerEquals, get_field_value: $sHandlerGetValue, auto_apply: $sAutoApply, value: '', submit_to: '$sActionUrl', submit_parameters: $sJSSubmitParams });
$('#row_$sFieldId').$sWidgetClass({parent_selector: $sNotifyParentSelectorJS, field_id: '$sFieldId', equals: $sHandlerEquals, get_field_value: $sHandlerGetValue, auto_apply: $sAutoApply, value: '', submit_to: '$sActionUrl', submit_parameters: $sJSSubmitParams $sJSExtraParams });
EOF
);
}
@@ -358,6 +366,14 @@ $('#$sDialogId').dialog({
{ text: "$sOkButtonLabel", click: function() {
var oForm = $(this).closest('.ui-dialog').find('form');
oForm.submit();
if (AnimateDlgButtons)
{
sFormId = oForm.attr('id');
if (oFormValidation[sFormId].length == 0)
{
AnimateDlgButtons(this);
}
}
} },
{ text: "$sCancelButtonLabel", click: function() { KillAllMenus(); $(this).dialog( "close" ); $(this).remove(); } },
],
@@ -475,6 +491,15 @@ EOF
return $this->oParentForm;
}
public function GetFormId()
{
if ($this->oParentForm)
{
$this->oParentForm->GetFormId();
}
return $this->sFormId;
}
public function SetDisplayed($bDisplayed)
{
$this->bDisplayed = $bDisplayed;
@@ -517,9 +542,9 @@ EOF
return 'attr_'.$sCode.$this->GetSuffix();
}
public function GetValidationArea($sCode, $sContent = '')
public function GetValidationArea($sId, $sContent = '')
{
return "<span style=\"display:inline-block;width:20px;\" id=\"v_{$this->sFormPrefix}attr_$sCode\"><span class=\"ui-icon ui-icon-alert\"></span>$sContent</span>";
return "<span style=\"display:inline-block;width:20px;\" id=\"v_{$sId}\"><span class=\"ui-icon ui-icon-alert\"></span>$sContent</span>";
}
public function GetAsyncActionClass()
{
@@ -660,6 +685,7 @@ class DesignerFormField
protected $bAutoApply;
protected $aCSSClasses;
protected $bDisplayed;
protected $aWidgetExtraParams;
public function __construct($sCode, $sLabel, $defaultValue)
{
@@ -671,6 +697,7 @@ class DesignerFormField
$this->bAutoApply = false;
$this->aCSSClasses = array();
$this->bDisplayed = true;
$this->aWidgetExtraParams = array();
}
public function GetCode()
@@ -724,6 +751,16 @@ class DesignerFormField
return $this->oForm->GetFieldId($this->sCode);
}
public function GetWidgetClass()
{
return 'property_field';
}
public function GetWidgetExtraParams()
{
return $this->aWidgetExtraParams;
}
public function Render(WebPage $oP, $sFormId, $sRenderMode='dialog')
{
$sId = $this->oForm->GetFieldId($this->sCode);
@@ -884,7 +921,7 @@ class DesignerTextField extends DesignerFormField
$sMandatory = $this->bMandatory ? 'true' : 'false';
$oP->add_ready_script(
<<<EOF
$('#$sId').bind('change keyup validate', function() { ValidateWithPattern('$sId', $sMandatory, '$sPattern', '$sFormId', $sForbiddenValues, '$sExplainForbiddenValues'); } );
$('#$sId').bind('change keyup validate', function() { ValidateWithPattern('$sId', $sMandatory, '$sPattern', $(this).closest('form').attr('id'), $sForbiddenValues, '$sExplainForbiddenValues'); } );
{
var myTimer = null;
$('#$sId').bind('keyup', function() { clearTimeout(myTimer); myTimer = setTimeout(function() { $('#$sId').trigger('change', {} ); }, 100); });
@@ -938,7 +975,7 @@ class DesignerLongTextField extends DesignerTextField
$sReadOnly = $this->IsReadOnly() ? 'readonly' : '';
$oP->add_ready_script(
<<<EOF
$('#$sId').bind('change keyup validate', function() { ValidateWithPattern('$sId', $sMandatory, '$sPattern', '$sFormId', $sForbiddenValues, '$sExplainForbiddenValues'); } );
$('#$sId').bind('change keyup validate', function() { ValidateWithPattern('$sId', $sMandatory, '$sPattern', $(this).closest('form').attr('id'), $sForbiddenValues, '$sExplainForbiddenValues'); } );
{
var myTimer = null;
$('#$sId').bind('keyup', function() { clearTimeout(myTimer); myTimer = setTimeout(function() { $('#$sId').trigger('change', {} ); }, 100); });
@@ -954,6 +991,74 @@ EOF
}
}
class DesignerIntegerField extends DesignerFormField
{
protected $iMin; // Lower boundary, inclusive
protected $iMax; // Higher boundary, inclusive
public function __construct($sCode, $sLabel = '', $defaultValue = '')
{
parent::__construct($sCode, $sLabel, $defaultValue);
$this->iMin = 0; // Positive integer is the default
$this->iMax = null;
}
public function SetBoundaries($iMin = null, $iMax = null)
{
$this->iMin = $iMin;
$this->iMax = $iMax;
}
public function Render(WebPage $oP, $sFormId, $sRenderMode='dialog')
{
$sId = $this->oForm->GetFieldId($this->sCode);
$sName = $this->oForm->GetFieldName($this->sCode);
if ($this->IsReadOnly())
{
$sHtmlValue = "<span>".htmlentities($this->defaultValue, ENT_QUOTES, 'UTF-8')."<input type=\"hidden\" id=\"$sId\" name=\"$sName\" value=\"".htmlentities($this->defaultValue, ENT_QUOTES, 'UTF-8')."\"/></span>";
}
else
{
$sMin = json_encode($this->iMin);
$sMax = json_encode($this->iMax);
$sMandatory = $this->bMandatory ? 'true' : 'false';
$oP->add_ready_script(
<<<EOF
$('#$sId').bind('change keyup validate', function() { ValidateInteger('$sId', $sMandatory, $(this).closest('form').attr('id'), $sMin, $sMax); } );
{
var myTimer = null;
$('#$sId').bind('keyup', function() { clearTimeout(myTimer); myTimer = setTimeout(function() { $('#$sId').trigger('change', {} ); }, 100); });
}
EOF
);
$sCSSClasses = '';
if (count($this->aCSSClasses) > 0)
{
$sCSSClasses = 'class="'.implode(' ', $this->aCSSClasses).'"';
}
$sHtmlValue = "<input type=\"text\" $sCSSClasses id=\"$sId\" name=\"$sName\" value=\"".htmlentities($this->defaultValue, ENT_QUOTES, 'UTF-8')."\">";
}
return array('label' => $this->sLabel, 'value' => $sHtmlValue);
}
public function ReadParam(&$aValues)
{
parent::ReadParam($aValues);
if (!is_null($this->iMin) && ($aValues[$this->sCode] < $this->iMin))
{
// Reject the value...
$aValues[$this->sCode] = $this->defaultValue;
}
if (!is_null($this->iMax) && ($aValues[$this->sCode] > $this->iMax))
{
// Reject the value...
$aValues[$this->sCode] = $this->defaultValue;
}
}
}
class DesignerComboField extends DesignerFormField
{
protected $aAllowedValues;
@@ -1067,7 +1172,7 @@ class DesignerComboField extends DesignerFormField
}
$oP->add_ready_script(
<<<EOF
$('#$sId').bind('change validate', function() { ValidateWithPattern('$sId', $sMandatory, '', '$sFormId', null, null); } );
$('#$sId').bind('change validate', function() { ValidateWithPattern('$sId', $sMandatory, '', $(this).closest('form').attr('id'), null, null); } );
EOF
);
}
@@ -1205,14 +1310,19 @@ class DesignerIconSelectionField extends DesignerFormField
$sPostUploadTo = ($this->sUploadUrl == null) ? 'null' : "'{$this->sUploadUrl}'";
if (!$this->IsReadOnly())
{
$sValue = "<input type=\"hidden\" id=\"$sId\" name=\"$sName\" value=\"{$this->defaultValue}\"/>";
$oP->add_ready_script(
<<<EOF
$('#$sId').icon_select({current_idx: $idx, items: $sJSItems, post_upload_to: $sPostUploadTo});
EOF
);
}
else
{
$sValue = '<img src="'.$this->MakeFileUrl($this->defaultValue).'" />';
}
$sReadOnly = $this->IsReadOnly() ? 'disabled' : '';
return array('label' =>$this->sLabel, 'value' => "<input type=\"hidden\" id=\"$sId\" name=\"$sName\" value=\"{$this->defaultValue}\"/>");
return array('label' => $this->sLabel, 'value' => $sValue);
}
}
@@ -1325,6 +1435,11 @@ class DesignerFormSelectorField extends DesignerFormField
$this->aSubForms = array();
}
public function GetWidgetClass()
{
return 'selector_property_field';
}
public function AddSubForm($oSubForm, $sLabel, $sValue)
{
$idx = count($this->aSubForms);
@@ -1443,7 +1558,7 @@ class DesignerFormSelectorField extends DesignerFormField
if ($sRenderMode == 'property')
{
$sSelector = $this->oForm->GetHierarchyPath().'/'.$this->sCode.$this->oForm->GetSuffix();
$oP->add_ready_script("InitFormSelectorField('$sId', '$sSelector');");
$this->aWidgetExtraParams['data_selector'] = $sSelector;
}
else
{

View File

@@ -305,16 +305,20 @@ class LoginWebPage extends NiceWebPage
{
$this->add("<p>".Dict::Format('UI:ResetPwd-Error-WrongLogin', $sAuthUser)."</p>\n");
}
elseif ($oUser->Get('reset_pwd_token') != $sToken)
{
$this->add("<p>".Dict::S('UI:ResetPwd-Error-InvalidToken')."</p>\n");
}
else
{
$this->add("<p>".Dict::Format('UI:ResetPwd-Error-EnterPassword', $oUser->GetFriendlyName())."</p>\n");
$sInconsistenPwdMsg = Dict::S('UI:Login:RetypePwdDoesNotMatch');
$this->add_script(
$oEncryptedToken = $oUser->Get('reset_pwd_token');
if (!$oEncryptedToken->CheckPassword($sToken))
{
$this->add("<p>".Dict::S('UI:ResetPwd-Error-InvalidToken')."</p>\n");
}
else
{
$this->add("<p>".Dict::Format('UI:ResetPwd-Error-EnterPassword', $oUser->GetFriendlyName())."</p>\n");
$sInconsistenPwdMsg = Dict::S('UI:Login:RetypePwdDoesNotMatch');
$this->add_script(
<<<EOF
function DoCheckPwd()
{
@@ -326,18 +330,19 @@ function DoCheckPwd()
return true;
}
EOF
);
$this->add("<form method=\"post\">\n");
$this->add("<table>\n");
$this->add("<tr><td style=\"text-align:right\"><label for=\"new_pwd\">".Dict::S('UI:Login:NewPasswordPrompt').":</label></td><td style=\"text-align:left\"><input type=\"password\" id=\"new_pwd\" name=\"new_pwd\" value=\"\" /></td></tr>\n");
$this->add("<tr><td style=\"text-align:right\"><label for=\"retype_new_pwd\">".Dict::S('UI:Login:RetypeNewPasswordPrompt').":</label></td><td style=\"text-align:left\"><input type=\"password\" id=\"retype_new_pwd\" name=\"retype_new_pwd\" value=\"\" /></td></tr>\n");
$this->add("<tr><td colspan=\"2\" class=\"center v-spacer\"><span class=\"btn_border\"><input type=\"submit\" onClick=\"return DoCheckPwd();\" value=\"".Dict::S('UI:Button:ChangePassword')."\" /></span></td></tr>\n");
$this->add("</table>\n");
$this->add("<input type=\"hidden\" name=\"loginop\" value=\"do_reset_pwd\" />\n");
$this->add("<input type=\"hidden\" name=\"auth_user\" value=\"".htmlentities($sAuthUser, ENT_QUOTES, 'UTF-8')."\" />\n");
$this->add("<input type=\"hidden\" name=\"token\" value=\"".htmlentities($sToken, ENT_QUOTES, 'UTF-8')."\" />\n");
$this->add("</form>\n");
$this->add("</div\n");
);
$this->add("<form method=\"post\">\n");
$this->add("<table>\n");
$this->add("<tr><td style=\"text-align:right\"><label for=\"new_pwd\">".Dict::S('UI:Login:NewPasswordPrompt').":</label></td><td style=\"text-align:left\"><input type=\"password\" id=\"new_pwd\" name=\"new_pwd\" value=\"\" /></td></tr>\n");
$this->add("<tr><td style=\"text-align:right\"><label for=\"retype_new_pwd\">".Dict::S('UI:Login:RetypeNewPasswordPrompt').":</label></td><td style=\"text-align:left\"><input type=\"password\" id=\"retype_new_pwd\" name=\"retype_new_pwd\" value=\"\" /></td></tr>\n");
$this->add("<tr><td colspan=\"2\" class=\"center v-spacer\"><span class=\"btn_border\"><input type=\"submit\" onClick=\"return DoCheckPwd();\" value=\"".Dict::S('UI:Button:ChangePassword')."\" /></span></td></tr>\n");
$this->add("</table>\n");
$this->add("<input type=\"hidden\" name=\"loginop\" value=\"do_reset_pwd\" />\n");
$this->add("<input type=\"hidden\" name=\"auth_user\" value=\"".htmlentities($sAuthUser, ENT_QUOTES, 'UTF-8')."\" />\n");
$this->add("<input type=\"hidden\" name=\"token\" value=\"".htmlentities($sToken, ENT_QUOTES, 'UTF-8')."\" />\n");
$this->add("</form>\n");
$this->add("</div\n");
}
}
}
@@ -357,21 +362,25 @@ EOF
{
$this->add("<p>".Dict::Format('UI:ResetPwd-Error-WrongLogin', $sAuthUser)."</p>\n");
}
elseif ($oUser->Get('reset_pwd_token') != $sToken)
{
$this->add("<p>".Dict::S('UI:ResetPwd-Error-InvalidToken')."</p>\n");
}
else
{
// Trash the token and change the password
$oUser->Set('reset_pwd_token', '');
$oUser->SetPassword($sNewPwd); // Does record the change into the DB
$this->add("<p>".Dict::S('UI:ResetPwd-Ready')."</p>");
$sUrl = utils::GetAbsoluteUrlAppRoot();
$this->add("<p><a href=\"$sUrl\">".Dict::S('UI:ResetPwd-Login')."</a></p>");
$oEncryptedPassword = $oUser->Get('reset_pwd_token');
if (!$oEncryptedPassword->CheckPassword($sToken))
{
$this->add("<p>".Dict::S('UI:ResetPwd-Error-InvalidToken')."</p>\n");
}
else
{
// Trash the token and change the password
$oUser->Set('reset_pwd_token', '');
$oUser->SetPassword($sNewPwd); // Does record the change into the DB
$this->add("<p>".Dict::S('UI:ResetPwd-Ready')."</p>");
$sUrl = utils::GetAbsoluteUrlAppRoot();
$this->add("<p><a href=\"$sUrl\">".Dict::S('UI:ResetPwd-Login')."</a></p>");
}
$this->add("</div\n");
}
$this->add("</div\n");
}
public function DisplayChangePwdForm($bFailedLogin = false)

View File

@@ -90,6 +90,8 @@ class PortalWebPage extends NiceWebPage
$this->add_linked_script("../js/jquery.qtip-1.0.min.js");
$this->add_linked_script('../js/jquery.multiselect.min.js');
$this->add_linked_script("../js/ajaxfileupload.js");
$this->add_linked_script("../js/ckeditor/ckeditor.js");
$this->add_linked_script("../js/ckeditor/adapters/jquery.js");
$this->add_ready_script(
<<<EOF
try
@@ -231,6 +233,20 @@ EOF
var next_step = $('input[id=next_step]');
next_step.val(sStep);
}
// For disabling the CKEditor at init time when the corresponding textarea is disabled !
CKEDITOR.plugins.add( 'disabler',
{
init : function( editor )
{
editor.on( 'instanceReady', function(e)
{
e.removeListener();
$('#'+ editor.name).trigger('update');
});
}
});
EOF
);
@@ -826,7 +842,7 @@ EOF
}
$sStepHistory = implode(',', $aPreviousSteps);
$this->add("<input type=\"hidden\" id=\"step_history\" name=\"step_history\" value=\"$sStepHistory\">");
$this->add("<input type=\"hidden\" id=\"step_history\" name=\"step_history\" value=\"".htmlentities($sStepHistory, ENT_QUOTES, 'UTF-8')."\">");
if (!is_null($sNextStep))
{

View File

@@ -254,8 +254,8 @@ class ShortcutOQL extends Shortcut
$oField = new DesignerBooleanField('auto_reload', Dict::S('Class:ShortcutOQL/Attribute:auto_reload'), false);
$oForm->AddField($oField);
$oField = new DesignerTextField('auto_reload_sec', Dict::S('Class:ShortcutOQL/Attribute:auto_reload_sec'), MetaModel::GetConfig()->GetStandardReloadInterval());
$oField->SetValidationPattern('^$|^0*([5-9]|[1-9][0-9]+)$'); // Can be empty, or a number > 4
$oField = new DesignerIntegerField('auto_reload_sec', Dict::S('Class:ShortcutOQL/Attribute:auto_reload_sec'), MetaModel::GetConfig()->GetStandardReloadInterval());
$oField->SetBoundaries(MetaModel::GetConfig()->Get('min_reload_interval'), null); // no upper limit
$oField->SetMandatory(false);
$oForm->AddField($oField);
@@ -284,7 +284,7 @@ class ShortcutOQL extends Shortcut
$oAppContext = new ApplicationContext();
$sContext = $oAppContext->GetForLink();
$sRateTitle = addslashes(Dict::S('Class:ShortcutOQL/Attribute:auto_reload_sec+'));
$sRateTitle = addslashes(Dict::Format('Class:ShortcutOQL/Attribute:auto_reload_sec/tip', MetaModel::GetConfig()->Get('min_reload_interval')));
$oPage->add_ready_script(
<<<EOF

View File

@@ -28,10 +28,11 @@ require_once(APPROOT.'/core/cmdbobject.class.inc.php');
require_once(APPROOT.'/application/utils.inc.php');
session_name('itop-'.md5(APPROOT));
session_start();
if (isset($_REQUEST['switch_env']))
$sSwitchEnv = utils::ReadParam('switch_env', null);
if (($sSwitchEnv != null) && (file_exists(APPCONF.$sSwitchEnv.'/'.ITOP_CONFIG_FILE)))
{
$sEnv = $_REQUEST['switch_env'];
$_SESSION['itop_env'] = $sEnv;
$_SESSION['itop_env'] = $sSwitchEnv;
$sEnv = $sSwitchEnv;
// TODO: reset the credentials as well ??
}
else if (isset($_SESSION['itop_env']))

View File

@@ -1,5 +1,5 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
// Copyright (C) 2010-2015 Combodo SARL
//
// This file is part of iTop.
//
@@ -19,7 +19,8 @@
/**
* This class records the pending "transactions" corresponding to forms that have not been
* submitted yet, in order to prevent double submissions. When created a transaction remains valid
* until the user's session expires
* until the user's session expires. This class is actually a wrapper to the underlying implementation
* which choice is configured via the parameter 'transaction_storage'
*
* @package iTop
* @copyright Copyright (C) 2010-2012 Combodo SARL
@@ -28,6 +29,81 @@
class privUITransaction
{
/**
* Create a new transaction id, store it in the session and return its id
* @param void
* @return int The identifier of the new transaction
*/
public static function GetNewTransactionId()
{
$bTransactionsEnabled = MetaModel::GetConfig()->Get('transactions_enabled');
if (!$bTransactionsEnabled)
{
return 'notransactions'; // Any value will do
}
$sClass = 'privUITransaction'.MetaModel::GetConfig()->Get('transaction_storage');
if (!class_exists($sClass, false))
{
IssueLog::Error("Incorrect value '".MetaModel::GetConfig()->Get('transaction_storage')."' for 'transaction_storage', the class '$sClass' does not exists. Using privUITransactionSession instead for storing sessions.");
$sClass = 'privUITransactionSession';
}
return (string)$sClass::GetNewTransactionId();
}
/**
* Check whether a transaction is valid or not and (optionally) remove the valid transaction from
* the session so that another call to IsTransactionValid for the same transaction id
* will return false
* @param int $id Identifier of the transaction, as returned by GetNewTransactionId
* @param bool $bRemoveTransaction True if the transaction must be removed
* @return bool True if the transaction is valid, false otherwise
*/
public static function IsTransactionValid($id, $bRemoveTransaction = true)
{
$bTransactionsEnabled = MetaModel::GetConfig()->Get('transactions_enabled');
if (!$bTransactionsEnabled)
{
return true; // All values are valid
}
$sClass = 'privUITransaction'.MetaModel::GetConfig()->Get('transaction_storage');
if (!class_exists($sClass, false))
{
$sClass = 'privUITransactionSession';
}
return $sClass::IsTransactionValid($id, $bRemoveTransaction);
}
/**
* Removes the transaction specified by its id
* @param int $id The Identifier (as returned by GetNewTranscationId) of the transaction to be removed.
* @return void
*/
public static function RemoveTransaction($id)
{
$bTransactionsEnabled = MetaModel::GetConfig()->Get('transactions_enabled');
if (!$bTransactionsEnabled)
{
return; // Nothing to do
}
$sClass = 'privUITransaction'.MetaModel::GetConfig()->Get('transaction_storage');
if (!class_exists($sClass, false))
{
$sClass = 'privUITransactionSession';
}
$sClass::RemoveTransaction($id);
}
}
/**
* The original (and by default) mechanism for storing transaction information
* as an array in the $_SESSION variable
*
*/
class privUITransactionSession
{
/**
* Create a new transaction id, store it in the session and return its id
@@ -99,4 +175,178 @@ class privUITransaction
}
}
}
?>
/**
* An alternate implementation for storing the transactions as temporary files
* Useful when using an in-memory storage for the session which do not
* guarantee mutual exclusion for writing
*/
class privUITransactionFile
{
/**
* Create a new transaction id, store it in the session and return its id
* @param void
* @return int The identifier of the new transaction
*/
public static function GetNewTransactionId()
{
if (!is_dir(APPROOT.'data/transactions'))
{
if (!is_writable(APPROOT.'data'))
{
throw new Exception('The directory "'.APPROOT.'data" must be writable to the application.');
}
if (!@mkdir(APPROOT.'data/transactions'))
{
throw new Exception('Failed to create the directory "'.APPROOT.'data/transactions". Ajust the rights on the parent directory or let an administrator create the transactions directory and give the web sever enough rights to write into it.');
}
}
if (!is_writable(APPROOT.'data/transactions'))
{
throw new Exception('The directory "'.APPROOT.'data/transactions" must be writable to the application.');
}
self::CleanupOldTransactions();
$id = basename(tempnam(APPROOT.'data/transactions', self::GetUserPrefix()));
self::Info('GetNewTransactionId: Created transaction: '.$id);
return (string)$id;
}
/**
* Check whether a transaction is valid or not and (optionally) remove the valid transaction from
* the session so that another call to IsTransactionValid for the same transaction id
* will return false
* @param int $id Identifier of the transaction, as returned by GetNewTransactionId
* @param bool $bRemoveTransaction True if the transaction must be removed
* @return bool True if the transaction is valid, false otherwise
*/
public static function IsTransactionValid($id, $bRemoveTransaction = true)
{
$sFilepath = APPROOT.'data/transactions/'.$id;
clearstatcache(true, $sFilepath);
$bResult = file_exists($sFilepath);
if ($bResult)
{
if ($bRemoveTransaction)
{
$bResult = @unlink($sFilepath);
if (!$bResult)
{
self::Error('IsTransactionValid: FAILED to remove transaction '.$id);
}
else
{
self::Info('IsTransactionValid: OK. Removed transaction: '.$id);
}
}
}
else
{
self::Info("IsTransactionValid: Transaction '$id' not found. Pending transactions for this user:\n".implode("\n", self::GetPendingTransactions()));
}
return $bResult;
}
/**
* Removes the transaction specified by its id
* @param int $id The Identifier (as returned by GetNewTransactionId) of the transaction to be removed.
* @return void
*/
public static function RemoveTransaction($id)
{
$bSuccess = true;
$sFilepath = APPROOT.'data/transactions/'.$id;
clearstatcache(true, $sFilepath);
if(!file_exists($sFilepath))
{
$bSuccess = false;
self::Error("RemoveTransaction: Transaction '$id' not found. Pending transactions for this user:\n".implode("\n", self::GetPendingTransactions()));
}
$bSuccess = @unlink($sFilepath);
if (!$bSuccess)
{
self::Error('RemoveTransaction: FAILED to remove transaction '.$id);
}
else
{
self::Info('RemoveTransaction: OK '.$id);
}
return $bSuccess;
}
/**
* Cleanup old transactions which have been pending since more than 24 hours
* Use filemtime instead of filectime since filectime may be affected by operations on the directory (like changing the access rights)
*/
protected static function CleanupOldTransactions()
{
$iLimit = time() - 24*3600;
clearstatcache();
$aTransactions = glob(APPROOT.'data/transactions/*-*');
foreach($aTransactions as $sFileName)
{
if (filemtime($sFileName) < $iLimit)
{
@unlink($sFileName);
self::Info('CleanupOldTransactions: Deleted transaction: '.$sFileName);
}
}
}
/**
* For debugging purposes: gets the pending transactions of the current user
* as an array, with the date of the creation of the transaction file
*/
protected static function GetPendingTransactions()
{
clearstatcache();
$aResult = array();
$aTransactions = glob(APPROOT.'data/transactions/'.self::GetUserPrefix().'*');
foreach($aTransactions as $sFileName)
{
$aResult[] = date('Y-m-d H:i:s', filemtime($sFileName)).' - '.basename($sFileName);
}
sort($aResult);
return $aResult;
}
protected static function GetUserPrefix()
{
$sPrefix = substr(UserRights::GetUser(), 0, 10);
$sPrefix = preg_replace('/[^a-zA-Z0-9-_]/', '_', $sPrefix);
return $sPrefix.'-';
}
protected static function Info($sText)
{
self::Write('Info | '.$sText);
}
protected static function Warning($sText)
{
self::Write('Warning | '.$sText);
}
protected static function Error($sText)
{
self::Write('Error | '.$sText);
}
protected static function Write($sText)
{
$bLogEnabled = MetaModel::GetConfig()->Get('log_transactions');
if ($bLogEnabled)
{
$hLogFile = @fopen(APPROOT.'log/transactions.log', 'a');
if ($hLogFile !== false)
{
flock($hLogFile, LOCK_EX);
$sDate = date('Y-m-d H:i:s');
fwrite($hLogFile, "$sDate | $sText\n");
fflush($hLogFile);
flock($hLogFile, LOCK_UN);
fclose($hLogFile);
}
}
}
}

View File

@@ -259,7 +259,7 @@ EOF
$sHTMLValue .= "<img id=\"mini_search_{$this->iId}\" style=\"border:0;vertical-align:middle;cursor:pointer;\" src=\"../images/mini_search.gif\" onClick=\"oACWidget_{$this->iId}.Search();\"/>&nbsp;";
// another hidden input to store & pass the object's Id
$sHTMLValue .= "<input type=\"hidden\" id=\"$this->iId\" name=\"{$sAttrFieldPrefix}{$sFieldName}\" value=\"$value\" />\n";
$sHTMLValue .= "<input type=\"hidden\" id=\"$this->iId\" name=\"{$sAttrFieldPrefix}{$sFieldName}\" value=\"".htmlentities($value, ENT_QUOTES, 'UTF-8')."\" />\n";
$JSSearchMode = $this->bSearchMode ? 'true' : 'false';
// Scripts to start the autocomplete and bind some events to it

View File

@@ -80,7 +80,7 @@ class UIHTMLEditorWidget
// Could also be bound to 'instanceReady.ckeditor'
$oPage->add_ready_script("$('#$iId').bind('validate', function(evt, sFormId) { return ValidateCKEditField('$iId', '', {$this->m_sMandatory}, sFormId, '') } );\n");
$oPage->add_ready_script("$('#$iId').bind('update', function() { BlockField('cke_$iId', $('#$iId').attr('disabled')); } );\n");
$oPage->add_ready_script("$('#$iId').bind('update', function() { BlockField('cke_$iId', $('#$iId').attr('disabled')); $(this).data('ckeditorInstance').setReadOnly($(this).prop('disabled')); } );\n");
return $sHtmlValue;
}

View File

@@ -294,7 +294,7 @@ class UILinksWidgetDirect
$valuesDef = $oLinksetDef->GetValuesDef();
if ($valuesDef === null)
{
$oFilter = new DBObjectSearch($this->sLinkedClass);
$oFilter = new DBObjectSearch($sRemoteClass);
}
else
{

View File

@@ -130,7 +130,7 @@ class appUserPreferences extends DBObject
/**
* Call this function if the user has changed (like when doing a logoff...)
*/
static public function Reset()
static public function ResetPreferences()
{
self::$oUserPrefs = null;
}

View File

@@ -480,6 +480,14 @@ abstract class AttributeDefinition
return (string)$sValue;
}
/**
* Override to differentiate a value displayed in the UI or in the history
*/
public function GetAsHTMLForHistory($sValue, $oHostObject = null, $bLocalize = true)
{
return $this->GetAsHTML($sValue, $oHostObject, $bLocalize);
}
public function GetAllowedValues($aArgs = array(), $sContains = '')
{
$oValSetDef = $this->GetValuesDef();
@@ -487,15 +495,18 @@ abstract class AttributeDefinition
return $oValSetDef->GetValues($aArgs, $sContains);
}
public function GetAsHTMLForHistory($sOldValue, $sNewValue, $sLabel = null)
/**
* Explain the change of the attribute (history)
*/
public function DescribeChangeAsHTML($sOldValue, $sNewValue, $sLabel = null)
{
if (is_null($sLabel))
{
$sLabel = $this->GetLabel();
}
$sNewValueHtml = $this->GetAsHTML($sNewValue);
$sOldValueHtml = $this->GetAsHTML($sOldValue);
$sNewValueHtml = $this->GetAsHTMLForHistory($sNewValue);
$sOldValueHtml = $this->GetAsHTMLForHistory($sOldValue);
if($this->IsExternalKey())
{
@@ -881,6 +892,106 @@ class AttributeLinkedSet extends AttributeDefinition
return $oSet;
}
/**
* Helper to get a value that will be JSON encoded
* The operation is the opposite to FromJSONToValue
*/
public function GetForJSON($value)
{
$aRet = array();
if (is_object($value) && ($value instanceof DBObjectSet))
{
$value->Rewind();
while ($oObj = $value->Fetch())
{
$sObjClass = get_class($oObj);
// Show only relevant information (hide the external key to the current object)
$aAttributes = array();
foreach(MetaModel::ListAttributeDefs($sObjClass) as $sAttCode => $oAttDef)
{
if ($sAttCode == 'finalclass')
{
if ($sObjClass == $this->GetLinkedClass())
{
// Simplify the output if the exact class could be determined implicitely
continue;
}
}
if ($sAttCode == $this->GetExtKeyToMe()) continue;
if ($oAttDef->IsExternalField()) continue;
if (!$oAttDef->IsDirectField()) continue;
if (!$oAttDef->IsScalar()) continue;
$attValue = $oObj->Get($sAttCode);
$aAttributes[$sAttCode] = $oAttDef->GetForJSON($attValue);
}
$aRet[] = $aAttributes;
}
}
return $aRet;
}
/**
* Helper to form a value, given JSON decoded data
* The operation is the opposite to GetForJSON
*/
public function FromJSONToValue($json)
{
$sTargetClass = $this->Get('linked_class');
$aLinks = array();
foreach($json as $aValues)
{
if (isset($aValues['finalclass']))
{
$sLinkClass = $aValues['finalclass'];
if (!is_subclass_of($sLinkClass, $sTargetClass))
{
throw new CoreException('Wrong class for link attribute specification', array('requested_class' => $sLinkClass, 'expected_class' => $sTargetClass));
}
}
elseif (MetaModel::IsAbstract($sTargetClass))
{
throw new CoreException('Missing finalclass for link attribute specification');
}
else
{
$sLinkClass = $sTargetClass;
}
$oLink = MetaModel::NewObject($sLinkClass);
foreach ($aValues as $sAttCode => $sValue)
{
$oLink->Set($sAttCode, $sValue);
}
// Check (roughly) if such a link is valid
$aErrors = array();
foreach(MetaModel::ListAttributeDefs($sTargetClass) as $sAttCode => $oAttDef)
{
if ($oAttDef->IsExternalKey())
{
if (($oAttDef->GetTargetClass() == $this->GetHostClass()) || (is_subclass_of($this->GetHostClass(), $oAttDef->GetTargetClass())))
{
continue; // Don't check the key to self
}
}
if ($oAttDef->IsWritable() && $oAttDef->IsNull($oLink->Get($sAttCode)) && !$oAttDef->IsNullAllowed())
{
$aErrors[] = $sAttCode;
}
}
if (count($aErrors) > 0)
{
throw new CoreException("Missing value for mandatory attribute(s): ".implode(', ', $aErrors));
}
$aLinks[] = $oLink;
}
$oSet = DBObjectSet::FromArray($sTargetClass, $aLinks);
return $oSet;
}
public function Equals($val1, $val2)
{
if ($val1 === $val2) return true;
@@ -1982,7 +2093,7 @@ class AttributeCaseLog extends AttributeLongText
public function FromSQLToValue($aCols, $sPrefix = '')
{
if (!isset($aCols[$sPrefix]))
if (!array_key_exists($sPrefix, $aCols))
{
$sAvailable = implode(', ', array_keys($aCols));
throw new MissingColumnException("Missing column '$sPrefix' from {$sAvailable}");
@@ -3981,19 +4092,17 @@ class AttributeStopWatch extends AttributeDefinition
return Dict::S('BooleanLabel:'.$sDictKey, 'def:'.$sDictKey);
}
public function GetSubItemAsHTMLForHistory($sItemCode, $sOldValue, $sNewValue, $sLabel)
public function GetSubItemAsHTMLForHistory($sItemCode, $sValue)
{
switch($sItemCode)
{
case 'timespent':
$sHtmlOld = (int)$sOldValue ? AttributeDuration::FormatDuration($sOldValue) : null;
$sHtmlNew = (int)$sNewValue ? AttributeDuration::FormatDuration($sNewValue) : null;
$sHtml = (int)$sValue ? Str::pure2html(AttributeDuration::FormatDuration($sValue)) : null;
break;
case 'started':
case 'laststart':
case 'stopped':
$sHtmlOld = (int)$sOldValue ? date(self::GetDateFormat(), (int)$sOldValue) : null;
$sHtmlNew = (int)$sNewValue ? date(self::GetDateFormat(), (int)$sNewValue) : null;
$sHtml = (int)$sValue ? date(self::GetDateFormat(), (int)$sValue) : null;
break;
default:
@@ -4007,26 +4116,21 @@ class AttributeStopWatch extends AttributeDefinition
switch($sThresholdCode)
{
case 'deadline':
$sHtmlOld = (int)$sOldValue ? date(self::GetDateFormat(true /*full*/), (int)$sOldValue) : null;
$sHtmlNew = (int)$sNewValue ? date(self::GetDateFormat(true /*full*/), (int)$sNewValue) : null;
$sHtml = (int)$sValue ? date(self::GetDateFormat(true /*full*/), (int)$sValue) : null;
break;
case 'passed':
$sHtmlOld = $this->GetBooleanLabel((int)$sOldValue);
$sHtmlNew = $this->GetBooleanLabel((int)$sNewValue);
$sHtml = $this->GetBooleanLabel((int)$sValue);
break;
case 'triggered':
$sHtmlOld = $this->GetBooleanLabel((int)$sOldValue);
$sHtmlNew = $this->GetBooleanLabel((int)$sNewValue);
$sHtml = $this->GetBooleanLabel((int)$sValue);
break;
case 'overrun':
$sHtmlOld = (int)$sOldValue > 0 ? AttributeDuration::FormatDuration((int)$sOldValue) : '';
$sHtmlNew = (int)$sNewValue > 0 ? AttributeDuration::FormatDuration((int)$sNewValue) : '';
$sHtml = (int)$sValue > 0 ? Str::pure2html(AttributeDuration::FormatDuration((int)$sValue)) : '';
}
}
}
}
$sRes = parent::GetAsHTMLForHistory($sHtmlOld, $sHtmlNew, $sLabel);
return $sRes;
return $sHtml;
}
static protected function GetDateFormat($bFull = false)
@@ -4341,6 +4445,13 @@ class AttributeSubItem extends AttributeDefinition
return $res;
}
public function GetAsHTMLForHistory($value, $oHostObject = null, $bLocalize = true)
{
$oParent = $this->GetTargetAttDef();
$res = $oParent->GetSubItemAsHTMLForHistory($this->Get('item_code'), $value);
return $res;
}
public function GetAsCSV($value, $sSeparator = ',', $sTextQualifier = '"', $oHostObject = null, $bLocalize = true)
{
$oParent = $this->GetTargetAttDef();
@@ -4355,15 +4466,6 @@ class AttributeSubItem extends AttributeDefinition
return $res;
}
public function GetAsHTMLForHistory($sOldValue, $sNewValue, $sLabel = null)
{
$sLabel = $this->GetLabel();
$oParent = $this->GetTargetAttDef();
$sValue = $oParent->GetSubItemAsHTMLForHistory($this->Get('item_code'), $sOldValue, $sNewValue, $sLabel);
return $sValue;
}
/**
* As of now, this function must be implemented to have the value in spreadsheet format
*/
@@ -4923,7 +5025,7 @@ class AttributeFriendlyName extends AttributeComputedFieldVoid
}
// Do not display friendly names in the history of change
public function GetAsHTMLForHistory($sOldValue, $sNewValue, $sLabel = null)
public function DescribeChangeAsHTML($sOldValue, $sNewValue, $sLabel = null)
{
return '';
}

View File

@@ -432,7 +432,7 @@ class BulkChange
break;
default:
$aErrors[$sAttCode] = Dict::Format('UI:CSVReport-Value-Issue-FoundMany', $oExtObjects->Count());
$aErrors[$sAttCode] = Dict::Format('UI:CSVReport-Value-Issue-FoundMany', $iCount);
$aResults[$sAttCode]= new CellStatus_Ambiguous($oTargetObj->Get($sAttCode), $iCount, $sOQL);
}
}

View File

@@ -55,7 +55,7 @@ class CMDBChangeOp extends DBObject
MetaModel::Init_AddAttribute(new AttributeExternalField("date", array("allowed_values"=>null, "extkey_attcode"=>"change", "target_attcode"=>"date")));
MetaModel::Init_AddAttribute(new AttributeExternalField("userinfo", array("allowed_values"=>null, "extkey_attcode"=>"change", "target_attcode"=>"userinfo")));
MetaModel::Init_AddAttribute(new AttributeString("objclass", array("allowed_values"=>null, "sql"=>"objclass", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
MetaModel::Init_AddAttribute(new AttributeString("objkey", array("allowed_values"=>null, "sql"=>"objkey", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
MetaModel::Init_AddAttribute(new AttributeInteger("objkey", array("allowed_values"=>null, "sql"=>"objkey", "default_value"=>0, "is_null_allowed"=>false, "depends_on"=>array())));
MetaModel::Init_SetZListItems('details', array('change', 'date', 'userinfo')); // Attributes to be displayed for the complete details
MetaModel::Init_SetZListItems('list', array('change', 'date', 'userinfo')); // Attributes to be displayed for the complete details
@@ -237,7 +237,7 @@ class CMDBChangeOpSetAttributeScalar extends CMDBChangeOpSetAttribute
$sAttName = $oAttDef->GetLabel();
$sNewValue = $this->Get('newvalue');
$sOldValue = $this->Get('oldvalue');
$sResult = $oAttDef->GetAsHTMLForHistory($sOldValue, $sNewValue);
$sResult = $oAttDef->DescribeChangeAsHTML($sOldValue, $sNewValue);
}
return $sResult;
}

View File

@@ -1,5 +1,5 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
// Copyright (C) 2010-2014 Combodo SARL
//
// This file is part of iTop.
//
@@ -96,11 +96,19 @@ class DefaultWorkingTimeComputer implements iWorkingTimeComputer
*/
public function GetDeadline($oObject, $iDuration, DateTime $oStartDate)
{
if (class_exists('WorkingTimeRecorder'))
{
WorkingTimeRecorder::Trace(WorkingTimeRecorder::TRACE_DEBUG, __class__.'::'.__function__);
}
//echo "GetDeadline - default: ".$oStartDate->format('Y-m-d H:i:s')." + $iDuration<br/>\n";
// Default implementation: 24x7, no holidays: to compute the deadline, just add
// the specified duration to the given date/time
$oResult = clone $oStartDate;
$oResult->modify('+'.$iDuration.' seconds');
if (class_exists('WorkingTimeRecorder'))
{
WorkingTimeRecorder::SetValues($oStartDate->format('U'), $oResult->format('U'), $iDuration, WorkingTimeRecorder::COMPUTED_END);
}
return $oResult;
}
@@ -113,8 +121,17 @@ class DefaultWorkingTimeComputer implements iWorkingTimeComputer
*/
public function GetOpenDuration($oObject, DateTime $oStartDate, DateTime $oEndDate)
{
if (class_exists('WorkingTimeRecorder'))
{
WorkingTimeRecorder::Trace(WorkingTimeRecorder::TRACE_DEBUG, __class__.'::'.__function__);
}
//echo "GetOpenDuration - default: ".$oStartDate->format('Y-m-d H:i:s')." to ".$oEndDate->format('Y-m-d H:i:s')."<br/>\n";
return abs($oEndDate->format('U') - $oStartDate->format('U'));
$iDuration = abs($oEndDate->format('U') - $oStartDate->format('U'));
if (class_exists('WorkingTimeRecorder'))
{
WorkingTimeRecorder::SetValues($oStartDate->format('U'), $oEndDate->format('U'), $iDuration, WorkingTimeRecorder::COMPUTED_DURATION);
}
return $iDuration;
}
}

View File

@@ -792,7 +792,47 @@ class Config
'value' => '',
'source_of_value' => '',
'show_in_conf_sample' => false,
),
),
'min_reload_interval' => array(
'type' => 'integer',
'description' => 'Minimum refresh interval (seconds) for dashboards, shortcuts, etc. Even if the interval is set programmatically, it is forced to that minimum',
'default' => 5, // In iTop 2.0.3, this was the hardcoded value
'value' => '',
'source_of_value' => '',
'show_in_conf_sample' => false,
),
'relations_max_depth' => array(
'type' => 'integer',
'description' => 'Maximum number of successive levels (depth) to explore when displaying the impact/depends on relations.',
'default' => 20, // In iTop 2.0.3, this was the hardcoded value
'value' => '',
'source_of_value' => '',
'show_in_conf_sample' => false,
),
'transaction_storage' => array(
'type' => 'string',
'description' => 'The type of mechanism to use for storing the unique identifiers for transactions (Session|File).',
'default' => 'Session',
'value' => '',
'source_of_value' => '',
'show_in_conf_sample' => false,
),
'transactions_enabled' => array(
'type' => 'bool',
'description' => 'Whether or not the whole mechanism to prevent multiple submissions of a page is enabled.',
'default' => true,
'value' => '',
'source_of_value' => '',
'show_in_conf_sample' => false,
),
'log_transactions' => array(
'type' => 'bool',
'description' => 'Whether or not to enable the debug log for the transactions.',
'default' => false,
'value' => '',
'source_of_value' => '',
'show_in_conf_sample' => false,
),
);
public function IsProperty($sPropCode)
@@ -1446,6 +1486,8 @@ class Config
$aSettings['log_notification'] = $this->m_bLogNotification;
$aSettings['log_issue'] = $this->m_bLogIssue;
$aSettings['log_web_service'] = $this->m_bLogWebService;
$aSettings['log_queries'] = $this->m_bLogQueries;
$aSettings['query_cache_enabled'] = $this->m_bQueryCacheEnabled;
$aSettings['min_display_limit'] = $this->m_iMinDisplayLimit;
$aSettings['max_display_limit'] = $this->m_iMaxDisplayLimit;
$aSettings['standard_reload_interval'] = $this->m_iStandardReloadInterval;
@@ -1453,6 +1495,7 @@ class Config
$aSettings['secure_connection_required'] = $this->m_bSecureConnectionRequired;
$aSettings['default_language'] = $this->m_sDefaultLanguage;
$aSettings['allowed_login_types'] = $this->m_sAllowedLoginTypes;
$aSettings['ext_auth_variable'] = $this->m_sExtAuthVariable;
$aSettings['encryption_key'] = $this->m_sEncryptionKey;
$aSettings['csv_import_charsets'] = $this->m_aCharsets;
@@ -1518,6 +1561,8 @@ class Config
'log_notification' => $this->m_bLogNotification,
'log_issue' => $this->m_bLogIssue,
'log_web_service' => $this->m_bLogWebService,
'log_queries' => $this->m_bLogQueries,
'query_cache_enabled' => $this->m_bQueryCacheEnabled,
'secure_connection_required' => $this->m_bSecureConnectionRequired,
);
foreach($aBoolValues as $sKey => $bValue)
@@ -1556,6 +1601,7 @@ class Config
'db_collation' => $this->m_sDBCollation,
'default_language' => $this->m_sDefaultLanguage,
'allowed_login_types' => $this->m_sAllowedLoginTypes,
'ext_auth_variable' => $this->m_sExtAuthVariable,
'encryption_key' => $this->m_sEncryptionKey,
'csv_import_charsets' => $this->m_aCharsets,
);

View File

@@ -96,6 +96,7 @@ abstract class DBObject implements iDisplay
protected $m_aModifiedAtt = array(); // list of (potentially) modified sAttCodes
protected $m_aSynchroData = null; // Set of Synch data related to this object
protected $m_sHighlightCode = null;
protected $m_aCallbacks = array();
// Use the MetaModel::NewObject to build an object (do we have to force it?)
public function __construct($aRow = null, $sClassAlias = '', $aAttToLoad = null, $aExtendedDataSpec = null)
@@ -338,7 +339,7 @@ abstract class DBObject implements iDisplay
if ($sAttCode == 'finalclass')
{
// Ignore it - this attribute is set upon object creation and that's it
return;
return false;
}
$oAttDef = MetaModel::GetAttributeDef(get_class($this), $sAttCode);
@@ -416,6 +417,9 @@ abstract class DBObject implements iDisplay
// Make sure we do not reload it anymore... before saving it
$this->RegisterAsDirty();
// This function is eligible as a lifecycle action: returning true upon success is a must
return true;
}
public function GetLabel($sAttCode)
@@ -1222,7 +1226,7 @@ abstract class DBObject implements iDisplay
}
}
final public function CheckToDelete(&$oDeletionPlan)
public function CheckToDelete(&$oDeletionPlan)
{
$this->MakeDeletionPlan($oDeletionPlan);
$oDeletionPlan->ComputeResults();
@@ -1581,6 +1585,15 @@ abstract class DBObject implements iDisplay
$oTrigger->DoActivate($this->ToArgs('this'));
}
// Callbacks registered with RegisterCallback
if (isset($this->m_aCallbacks[self::CALLBACK_AFTERINSERT]))
{
foreach ($this->m_aCallbacks[self::CALLBACK_AFTERINSERT] as $aCallBackData)
{
call_user_func_array($aCallBackData['callback'], $aCallBackData['params']);
}
}
$this->RecordObjCreation();
return $this->m_iKey;
@@ -2075,12 +2088,12 @@ abstract class DBObject implements iDisplay
{
if (is_string($actionHandler))
{
// Old (pre-2.0.4) action definition without any parameter
$aActionCallSpec = array($this, $sActionHandler);
// Old (pre-2.1.0 modules) action definition without any parameter
$aActionCallSpec = array($this, $actionHandler);
if (!is_callable($aActionCallSpec))
{
throw new CoreException("Unable to call action: ".get_class($this)."::$sActionHandler");
throw new CoreException("Unable to call action: ".get_class($this)."::$actionHandler");
return;
}
$bRet = call_user_func($aActionCallSpec, $sStimulusCode);
@@ -2183,6 +2196,80 @@ abstract class DBObject implements iDisplay
$this->Set($sAttCode, $oSW);
}
/**
* Lifecycle action: Recover the default value (aka when an object is being created)
*/
public function Reset($sAttCode)
{
$oAttDef = MetaModel::GetAttributeDef(get_class($this), $sAttCode);
$this->Set($sAttCode, $oAttDef->GetDefaultValue());
return true;
}
/**
* Lifecycle action: Copy an attribute to another
*/
public function Copy($sDestAttCode, $sSourceAttCode)
{
$this->Set($sDestAttCode, $this->Get($sSourceAttCode));
return true;
}
/**
* Lifecycle action: Set the current date/time for the given attribute
*/
public function SetCurrentDate($sAttCode)
{
$this->Set($sAttCode, time());
return true;
}
/**
* Lifecycle action: Set the current logged in user for the given attribute
*/
public function SetCurrentUser($sAttCode)
{
$this->Set($sAttCode, UserRights::GetUserId());
return true;
}
/**
* Lifecycle action: Set the time elapsed since a reference point
*/
public function SetElapsedTime($sAttCode, $sRefAttCode, $sWorkingTimeComputer = null)
{
if (is_null($sWorkingTimeComputer))
{
$sWorkingTimeComputer = class_exists('SLAComputation') ? 'SLAComputation' : 'DefaultWorkingTimeComputer';
}
$oComputer = new $sWorkingTimeComputer();
$aCallSpec = array($oComputer, 'GetOpenDuration');
if (!is_callable($aCallSpec))
{
throw new CoreException("Unknown class/verb '$sWorkingTimeComputer/GetOpenDuration'");
}
$iStartTime = AttributeDateTime::GetAsUnixSeconds($this->Get($sRefAttCode));
$oStartDate = new DateTime('@'.$iStartTime); // setTimestamp not available in PHP 5.2
$oEndDate = new DateTime(); // now
if (class_exists('WorkingTimeRecorder'))
{
$sClass = get_class($this);
WorkingTimeRecorder::Start($this, time(), "DBObject-SetElapsedTime-$sAttCode-$sRefAttCode", 'Core:ExplainWTC:ElapsedTime', array("Class:$sClass/Attribute:$sAttCode"));
}
$iElapsed = call_user_func($aCallSpec, $this, $oStartDate, $oEndDate);
if (class_exists('WorkingTimeRecorder'))
{
WorkingTimeRecorder::End();
}
$this->Set($sAttCode, $iElapsed);
return true;
}
/*
* Create query parameters (SELECT ... WHERE service = :this->service_id)
* to be used with the APIs DBObjectSearch/DBObjectSet
@@ -2733,6 +2820,28 @@ abstract class DBObject implements iDisplay
}
$oPage->details($aValues);
}
const CALLBACK_AFTERINSERT = 0;
/**
* Register a call back that will be called when some internal event happens
*
* @param $iType string Any of the CALLBACK_x constants
* @param $callback callable Call specification like a function name, or array('<class>', '<method>') or array($object, '<method>')
* @param $aParameters Array Values that will be passed to the callback, after $this
*/
public function RegisterCallback($iType, $callback, $aParameters = array())
{
$sCallBackName = '';
if (!is_callable($callback, false, $sCallBackName))
{
throw new Exception('Registering an unknown/protected function or wrong syntax for the call spec: '.$sCallBackName);
}
$this->m_aCallbacks[$iType][] = array(
'callback' => $callback,
'params' => $aParameters
);
}
}

View File

@@ -53,9 +53,8 @@ class DBObjectSearch
public function __construct($sClass, $sClassAlias = null)
{
if (is_null($sClassAlias)) $sClassAlias = $sClass;
assert('is_string($sClass)');
assert('MetaModel::IsValidClass($sClass)'); // #@# could do better than an assert, or at least give the caller's reference
// => idee d'un assert avec call stack (autre utilisation = echec sur query SQL)
if(!is_string($sClass)) throw new Exception('DBObjectSearch::__construct called with a non-string parameter: $sClass = '.print_r($sClass, true));
if(!MetaModel::IsValidClass($sClass)) throw new Exception('DBObjectSearch::__construct called for an invalid class: "'.$sClass.'"');
$this->m_aSelectedClasses = array($sClassAlias => $sClass);
$this->m_aClasses = array($sClassAlias => $sClass);
@@ -449,7 +448,7 @@ class DBObjectSearch
public function AddCondition($sFilterCode, $value, $sOpCode = null)
{
MyHelpers::CheckKeyInArray('filter code', $sFilterCode, MetaModel::GetClassFilterDefs($this->GetClass()));
MyHelpers::CheckKeyInArray('filter code in class: '.$this->GetClass(), $sFilterCode, MetaModel::GetClassFilterDefs($this->GetClass()));
$oFilterDef = MetaModel::GetClassFilterDef($this->GetClass(), $sFilterCode);
$oField = new FieldExpression($sFilterCode, $this->GetClassAlias());

View File

@@ -59,8 +59,11 @@ class FileLog
$hLogFile = @fopen($this->m_sFile, 'a');
if ($hLogFile !== false)
{
flock($hLogFile, LOCK_EX);
$sDate = date('Y-m-d H:i:s');
fwrite($hLogFile, "$sDate | $sText\n");
fflush($hLogFile);
flock($hLogFile, LOCK_UN);
fclose($hLogFile);
}
}

View File

@@ -836,6 +836,10 @@ abstract class MetaModel
final static public function GetAttributeDef($sClass, $sAttCode)
{
self::_check_subclass($sClass);
if (!isset(self::$m_aAttribDefs[$sClass][$sAttCode]))
{
throw new Exception("Unknown attribute $sAttCode from class $sClass");
}
return self::$m_aAttribDefs[$sClass][$sAttCode];
}
@@ -3075,7 +3079,7 @@ abstract class MetaModel
$sExtAttCode = $oAtt->GetExtAttCode();
// Translate mainclass.extfield => remoteclassalias.remotefieldcode
$oRemoteAttDef = self::GetAttributeDef($sKeyClass, $sExtAttCode);
foreach ($oRemoteAttDef->GetSQLExpressions() as $sColID => $sRemoteAttExpr)
foreach ($oRemoteAttDef->GetSQLExpressions() as $sColId => $sRemoteAttExpr)
{
$aTranslateNow[$sTargetAlias][$sAttCode.$sColId] = new FieldExpression($sExtAttCode, $sKeyClassAlias);
//echo "<p><b>aTranslateNow[$sTargetAlias][$sAttCode.$sColId] = new FieldExpression($sExtAttCode, $sKeyClassAlias);</b></p>\n";
@@ -3801,7 +3805,7 @@ abstract class MetaModel
}
public static function DBCreate()
public static function DBCreate($aCallback = null)
{
// Note: we have to check if the DB does exist, because we may share the DB
// with other applications (in which case the DB does exist, not the tables with the given prefix)
@@ -3809,18 +3813,24 @@ abstract class MetaModel
{
CMDBSource::CreateDB(self::$m_sDBName);
}
self::DBCreateTables();
self::DBCreateTables($aCallback);
self::DBCreateViews();
}
protected static function DBCreateTables()
protected static function DBCreateTables($aCallback = null)
{
list($aErrors, $aSugFix, $aCondensedQueries) = self::DBCheckFormat();
//$sSQL = implode('; ', $aCondensedQueries); Does not work - multiple queries not allowed
foreach($aCondensedQueries as $sQuery)
{
$fStart = microtime(true);
CMDBSource::CreateTable($sQuery);
$fDuration = microtime(true) - $fStart;
if ($aCallback != null)
{
call_user_func($aCallback, $sQuery, $fDuration);
}
}
}
@@ -5422,9 +5432,11 @@ abstract class MetaModel
{
// Some environment parameters are objects, we just need scalars
if (is_object($replace)) continue;
$aSearches[] = '$'.$sSearch.'$';
$aReplacements[] = (string) $replace;
else
{
$aSearches[] = '$'.$sSearch.'$';
$aReplacements[] = (string) $replace;
}
}
return str_replace($aSearches, $aReplacements, $aInput);
}

View File

@@ -1,5 +1,5 @@
<?php
// Copyright (C) 2013 Combodo SARL
// Copyright (C) 2013-2016 Combodo SARL
//
// This file is part of iTop.
//
@@ -24,7 +24,7 @@
* Relies on MySQL locks because the API sem_get is not always present in the
* installed PHP.
*
* @copyright Copyright (C) 2013 Combodo SARL
* @copyright Copyright (C) 2013-2016 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*/
class iTopMutex
@@ -37,8 +37,19 @@ class iTopMutex
public function __construct($sName, $sDBHost = null, $sDBUser = null, $sDBPwd = null)
{
// Compute the name of a lock for mysql
// Note: the name is server-wide!!!
// Note: names are server-wide!!! So let's make the name specific to this iTop instance
$oConfig = utils::GetConfig(); // Will return an empty config when called during the setup
$sDBName = $oConfig->GetDBName();
$sDBSubname = $oConfig->GetDBSubname();
$this->sName = 'itop.'.$sName;
if (substr($sName, -strlen($sDBName.$sDBSubname)) != $sDBName.$sDBSubname)
{
// If the name supplied already ends with the expected suffix
// don't add it twice, since the setup may try to detect an already
// running cron job by its mutex, without knowing if the config already exists or not
$this->sName .= $sDBName.$sDBSubname;
}
$this->bLocked = false; // Not yet locked
if (!array_key_exists($this->sName, self::$aAcquiredLocks))
@@ -48,7 +59,6 @@ class iTopMutex
// It is a MUST to create a dedicated session each time a lock is required, because
// using GET_LOCK anytime on the same session will RELEASE the current and unique session lock (known issue)
$oConfig = utils::GetConfig();
$sDBHost = is_null($sDBHost) ? $oConfig->GetDBHost() : $sDBHost;
$sDBUser = is_null($sDBUser) ? $oConfig->GetDBUser() : $sDBUser;
$sDBPwd = is_null($sDBPwd) ? $oConfig->GetDBPwd() : $sDBPwd;
@@ -121,7 +131,43 @@ class iTopMutex
$this->bLocked = true;
self::$aAcquiredLocks[$this->sName]++;
}
return ($res === '1');
if (($res !== '1') && ($res !== '0'))
{
$sMsg = 'GET_LOCK('.$this->sName.', 0) returned: '.var_export($res, true).'. Expected values are: 0, 1 or null';
IssueLog::Error($sMsg);
throw new Exception($sMsg);
}
return ($res !== '0');
}
/**
* Check if the mutex is locked WITHOUT TRYING TO ACQUIRE IT
* @returns bool True if the mutex is in use, false otherwise
*/
public function IsLocked()
{
if ($this->bLocked)
{
return true; // Already acquired
}
if (self::$aAcquiredLocks[$this->sName] > 0)
{
return true;
}
$res = $this->QueryToScalar("SELECT IS_FREE_LOCK('".$this->sName."')"); // IS_FREE_LOCK detects some error cases that IS_USED_LOCK do not detect
if (is_null($res))
{
$sMsg = "MySQL Error, IS_FREE_LOCK('".$this->sName."') returned null. Error (".mysqli_errno($this->hDBLink).") = '".mysqli_error($this->hDBLink)."'";
IssueLog::Error($sMsg);
throw new Exception($sMsg);
}
else if ($res == '1')
{
// Lock is free
return false;
}
return true;
}
/**

View File

@@ -1,5 +1,5 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
// Copyright (C) 2010-2015 Combodo SARL
//
// This file is part of iTop.
//
@@ -23,7 +23,7 @@ define('CASELOG_SEPARATOR', "\n".'========== %1$s : %2$s (%3$d) ============'."\
/**
* Class to store a "case log" in a structured way, keeping track of its successive entries
*
* @copyright Copyright (C) 2010-2012 Combodo SARL
* @copyright Copyright (C) 2010-2015 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*/
class ormCaseLog {
@@ -384,7 +384,7 @@ class ormCaseLog {
}
public function AddLogEntryFromJSON($oJson)
public function AddLogEntryFromJSON($oJson, $bCheckUserId = true)
{
$sText = isset($oJson->message) ? $oJson->message : '';
@@ -394,16 +394,24 @@ class ormCaseLog {
{
throw new Exception("Only administrators can set the user id", RestResult::UNAUTHORIZED);
}
try
if ($bCheckUserId && ($oJson->user_id != 0))
{
$oUser = RestUtils::FindObjectFromKey('User', $oJson->user_id);
try
{
$oUser = RestUtils::FindObjectFromKey('User', $oJson->user_id);
}
catch(Exception $e)
{
throw new Exception('user_id: '.$e->getMessage(), $e->getCode());
}
$iUserId = $oUser->GetKey();
$sOnBehalfOf = $oUser->GetFriendlyName();
}
catch(Exception $e)
else
{
throw new Exception('user_id: '.$e->getMessage(), $e->getCode());
$iUserId = $oJson->user_id;
$sOnBehalfOf = $oJson->user_login;
}
$iUserId = $oUser->GetKey();
$sOnBehalfOf = $oUser->GetFriendlyName();
}
else
{

View File

@@ -1,5 +1,5 @@
<?php
// Copyright (C) 2010-2013 Combodo SARL
// Copyright (C) 2010-2014 Combodo SARL
//
// This file is part of iTop.
//
@@ -82,6 +82,26 @@ class ormStopWatch
return $this->iTimeSpent;
}
/**
* Get the working elapsed time since the start of the stop watch
* even if it is currently running
* @param oAttDef AttributeDefinition Attribute hosting the stop watch
* @param oObject Hosting object (used for query parameters)
*/
public function GetElapsedTime($oAttDef, $oObject)
{
if (is_null($this->iLastStart))
{
return $this->GetTimeSpent();
}
else
{
$iElapsed = $this->ComputeDuration($oObject, $oAttDef, $this->iLastStart, time());
return $this->iTimeSpent + $iElapsed;
}
}
public function GetStartDate()
{
return $this->iStarted;
@@ -311,7 +331,7 @@ class ormStopWatch
* It is the responsibility of the caller to compute the deadlines
* (to avoid computing twice for the same result)
*/
public function Start($oObject, $oAttDef)
public function Start($oObject, $oAttDef, $iNow = null)
{
if (!is_null($this->iLastStart))
{
@@ -319,11 +339,16 @@ class ormStopWatch
return false;
}
if (is_null($iNow))
{
$iNow = time();
}
if (is_null($this->iStarted))
{
$this->iStarted = time();
$this->iStarted = $iNow;
}
$this->iLastStart = time();
$this->iLastStart = $iNow;
$this->iStopped = null;
return true;
@@ -339,8 +364,9 @@ class ormStopWatch
// Currently stopped - do nothing
return false;
}
$iDurationGoal = $this->ComputeGoal($oObject, $oAttDef);
$iComputationRefTime = time();
foreach ($this->aThresholds as $iPercent => &$aThresholdData)
{
if (is_null($iDurationGoal))
@@ -351,9 +377,20 @@ class ormStopWatch
else
{
$iThresholdDuration = round($iPercent * $iDurationGoal / 100);
if (class_exists('WorkingTimeRecorder'))
{
$sClass = get_class($oObject);
$sAttCode = $oAttDef->GetCode();
WorkingTimeRecorder::Start($oObject, $iComputationRefTime, "ormStopWatch-Deadline-$iPercent-$sAttCode", 'Core:ExplainWTC:StopWatch-Deadline', array("Class:$sClass/Attribute:$sAttCode", $iPercent));
}
$aThresholdData['deadline'] = $this->ComputeDeadline($oObject, $oAttDef, $this->iLastStart, $iThresholdDuration - $this->iTimeSpent);
// OR $aThresholdData['deadline'] = $this->ComputeDeadline($oObject, $oAttDef, $this->iStarted, $iThresholdDuration);
if (class_exists('WorkingTimeRecorder'))
{
WorkingTimeRecorder::End();
}
}
if (is_null($aThresholdData['deadline']) || ($aThresholdData['deadline'] > time()))
{
@@ -383,8 +420,18 @@ class ormStopWatch
return false;
}
if (class_exists('WorkingTimeRecorder'))
{
$sClass = get_class($oObject);
$sAttCode = $oAttDef->GetCode();
WorkingTimeRecorder::Start($oObject, time(), "ormStopWatch-TimeSpent-$sAttCode", 'Core:ExplainWTC:StopWatch-TimeSpent', array("Class:$sClass/Attribute:$sAttCode"), true /*cumulative*/);
}
$iElapsed = $this->ComputeDuration($oObject, $oAttDef, $this->iLastStart, time());
$this->iTimeSpent = $this->iTimeSpent + $iElapsed;
if (class_exists('WorkingTimeRecorder'))
{
WorkingTimeRecorder::End();
}
foreach ($this->aThresholds as $iPercent => &$aThresholdData)
{
@@ -459,7 +506,7 @@ class CheckStopWatchThresholds implements iBackgroundProcess
{
if (is_string($def))
{
// Old method (pre-2.0.4) non typed parameters
// Old method (pre-2.1.0) non typed parameters
$aValues[] = $def;
}
else // if(is_array($def))

View File

@@ -347,6 +347,29 @@ abstract class User extends cmdbAbstractObject
}
}
}
public function CheckToDelete(&$oDeletionPlan)
{
if (MetaModel::GetConfig()->Get('demo_mode'))
{
// Users deletion is NOT allowed in demo mode
$oDeletionPlan->AddToDelete($this, null);
$oDeletionPlan->SetDeletionIssues($this, array('deletion not allowed in demo mode.'), true);
$oDeletionPlan->ComputeResults();
return false;
}
return parent::CheckToDelete($oDeletionPlan);
}
protected function DBDeleteSingleObject()
{
if (MetaModel::GetConfig()->Get('demo_mode'))
{
// Users deletion is NOT allowed in demo mode
return;
}
parent::DBDeleteSingleObject();
}
}
/**
@@ -377,7 +400,7 @@ abstract class UserInternal extends User
MetaModel::Init_InheritAttributes();
// When set, this token allows for password reset
MetaModel::Init_AddAttribute(new AttributeString("reset_pwd_token", array("allowed_values"=>null, "sql"=>"reset_pwd_token", "default_value"=>null, "is_null_allowed"=>true, "depends_on"=>array())));
MetaModel::Init_AddAttribute(new AttributeOneWayPassword("reset_pwd_token", array("allowed_values"=>null, "default_value"=>null, "is_null_allowed"=>true, "depends_on"=>array())));
// Display lists
MetaModel::Init_SetZListItems('details', array('contactid', 'first_name', 'email', 'login', 'language', 'profile_list', 'allowed_org_list')); // Attributes to be displayed for the complete details
@@ -1280,8 +1303,9 @@ class CAS_SelfRegister implements iSelfRegister
}
else
{
// No membership required, anybody will pass
$bFound = true;
// No membership: no way to create the user that should exist prior to authentication
phpCAS::log("User ".phpCAS::getUser().": missing user account in iTop (or iTop badly configured, Cf setting cas_memberof)");
$bFound = false;
}
if (!$bFound)

View File

@@ -206,6 +206,11 @@ legend.transparent {
padding-left:14px;
background: url(../images/mini-arrow-orange.gif) no-repeat left;
}
.ui-widget-content td a.cke_toolbox_collapser {
padding-left: 0;
}
p a:hover, td a:hover {
text-decoration:underline;
color:#EB8F00;

View File

@@ -22,7 +22,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="item_class"/>
<attribute id="temp_id"/>

View File

@@ -17,7 +17,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ref"/>
</attributes>
@@ -1205,7 +1204,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ref"/>
</attributes>
@@ -2166,7 +2164,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ref"/>
</attributes>
@@ -3124,7 +3121,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ref"/>
</attributes>
@@ -4246,7 +4242,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ref"/>
</attributes>

View File

@@ -17,7 +17,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -116,7 +115,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -289,7 +287,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field>finalclass</db_final_class_field>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -487,7 +484,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="first_name"/>
<attribute id="name"/>
@@ -626,7 +622,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -745,7 +740,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="team_id"/>
</attributes>
@@ -865,7 +859,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field>finalclass</db_final_class_field>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1031,7 +1024,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1140,7 +1132,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1248,7 +1239,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1371,7 +1361,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1540,7 +1529,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s / %2$s</format>
<attributes>
<attribute id="ip"/>
<attribute id="ip_mask"/>
@@ -1700,7 +1688,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1821,7 +1808,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field>finalclass</db_final_class_field>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1887,7 +1873,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1952,7 +1937,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -2018,7 +2002,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="patch_id"/>
</attributes>
@@ -2110,7 +2093,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field>finalclass</db_final_class_field>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -2297,7 +2279,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s - %2$s</format>
<attributes>
<attribute id="name"/>
<attribute id="device_id_friendlyname"/>
@@ -2496,7 +2477,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s - %2$s</format>
<attributes>
<attribute id="name"/>
<attribute id="device_id_friendlyname"/>
@@ -2645,7 +2625,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s - %2$s</format>
<attributes>
<attribute id="name"/>
<attribute id="device_id_friendlyname"/>
@@ -2785,7 +2764,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s - %2$s</format>
<attributes>
<attribute id="name"/>
<attribute id="db_server_instance_id_friendlyname"/>
@@ -2945,7 +2923,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -3092,7 +3069,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -3222,7 +3198,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -3373,7 +3348,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s - %2$s</format>
<attributes>
<attribute id="device_id_friendlyname"/>
<attribute id="name"/>
@@ -3737,7 +3711,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -3905,7 +3878,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -4097,7 +4069,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -4220,7 +4191,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -4374,7 +4344,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -4562,7 +4531,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -4772,7 +4740,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -4993,7 +4960,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -5201,7 +5167,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -5345,7 +5310,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="group_id"/>
</attributes>
@@ -5452,7 +5416,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ci_id"/>
</attributes>
@@ -5565,7 +5528,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ci_id"/>
</attributes>
@@ -5682,7 +5644,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="solution_id"/>
</attributes>
@@ -5789,7 +5750,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="solution_id"/>
</attributes>

View File

@@ -17,7 +17,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ref"/>
</attributes>
@@ -1042,7 +1041,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ticket_id"/>
</attributes>

View File

@@ -14,7 +14,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -224,7 +223,6 @@
<db_key_field>link_id</db_key_field>
<db_final_class_field/>
<naming>
<format>lnkInfraError</format>
<attributes/>
</naming>
<display_template/>
@@ -326,7 +324,6 @@
<db_key_field>link_id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="link_type"/>
</attributes>

View File

@@ -17,7 +17,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ref"/>
</attributes>
@@ -539,7 +538,11 @@
3 => 3,
),
);
$iPriority = $aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')];
$iPriority = 1;
if (isset($aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')]))
{
$iPriority = $aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')];
}
return $iPriority;
}]]></code>
</method>

View File

@@ -37,7 +37,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ref"/>
</attributes>

View File

@@ -17,7 +17,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field>finalclass</db_final_class_field>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -201,7 +200,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -376,7 +374,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -567,7 +564,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="customer_contract_id"/>
</attributes>
@@ -670,7 +666,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="contract_id"/>
</attributes>
@@ -777,7 +772,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="contract_id"/>
</attributes>
@@ -886,7 +880,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="contract_id"/>
</attributes>
@@ -996,7 +989,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="contract_id"/>
</attributes>
@@ -1091,7 +1083,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1271,7 +1262,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1372,7 +1362,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1455,7 +1444,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1588,7 +1576,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="sla_id"/>
</attributes>
@@ -1723,7 +1710,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="service_id"/>
</attributes>
@@ -1832,7 +1818,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="service_id"/>
</attributes>
@@ -1941,7 +1926,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="service_id"/>
</attributes>

View File

@@ -17,7 +17,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field>finalclass</db_final_class_field>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ref"/>
</attributes>
@@ -162,7 +161,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ref"/>
</attributes>
@@ -1157,7 +1155,11 @@
3 => 3,
),
);
$iPriority = $aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')];
$iPriority = 1;
if (isset($aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')]))
{
$iPriority = $aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')];
}
return $iPriority;
}]]></code>
</method>
@@ -1484,7 +1486,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ticket_id"/>
</attributes>
@@ -1567,7 +1568,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ticket_id"/>
</attributes>
@@ -1677,7 +1677,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ticket_id"/>
</attributes>

View File

@@ -0,0 +1,30 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
//
// This file is part of iTop.
//
// iTop is free software; you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// iTop is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with iTop. If not, see <http://www.gnu.org/licenses/>
/**
* @author Erik Bøg <erik@boegmoeller.dk>
* @copyright Copyright (C) 2010-2012 Combodo SARL
* @licence http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:UserExternal' => 'Extern Bruger',
'Class:UserExternal+' => 'Bruger udenfor iTop',
));
?>

View File

@@ -0,0 +1,32 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
//
// This file is part of iTop.
//
// iTop is free software; you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// iTop is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with iTop. If not, see <http://www.gnu.org/licenses/>
/**
* @author Erik Bøg <erik@boegmoeller.dk>
* @copyright Copyright (C) 2010-2012 Combodo SARL
* @licence http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:UserLDAP' => 'LDAP-Bruger',
'Class:UserLDAP+' => 'Bruger der godkendes via LDAP',
'Class:UserLDAP/Attribute:password' => 'Password',
'Class:UserLDAP/Attribute:password+' => 'Brugerens password',
));
?>

View File

@@ -0,0 +1,32 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
//
// This file is part of iTop.
//
// iTop is free software; you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// iTop is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with iTop. If not, see <http://www.gnu.org/licenses/>
/**
* @author Erik Bøg <erik@boegmoeller.dk>
* @copyright Copyright (C) 2010-2012 Combodo SARL
* @licence http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:UserLocal' => 'iTop-Bruger',
'Class:UserLocal+' => 'Bruger der godkendes af iTop',
'Class:UserLocal/Attribute:password' => 'Password',
'Class:UserLocal/Attribute:password+' => 'Brugerens password',
));
?>

View File

@@ -0,0 +1,40 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
//
// This file is part of iTop.
//
// iTop is free software; you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// iTop is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with iTop. If not, see <http://www.gnu.org/licenses/>
/**
* @author Erik Bøg <erik@boegmoeller.dk>
* @copyright Copyright (C) 2010-2012 Combodo SARL
* @licence http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Attachments:TabTitle_Count' => 'Vedhæftninger (%1$d)',
'Attachments:EmptyTabTitle' => 'Vedhæftninger',
'Attachments:FieldsetTitle' => 'Vedhæftninger',
'Attachments:DeleteBtn' => 'Slet',
'Attachments:History_File_Added' => 'Vedhæftning %1$s tilføjet.',
'Attachments:History_File_Removed' => 'Vedhæftning %1$s fjernet.',
'Attachments:AddAttachment' => 'Vedhæft: ',
'Attachments:UploadNotAllowedOnThisSystem' => 'Upload IKKE tilladt i dette system.',
'Attachment:Max_Go' => '(Maksimal størrelse: %1$s GB)',
'Attachment:Max_Mo' => '(Maksimal størrelse: %1$s MB)',
'Attachment:Max_Ko' => '(Maksimal størrelse: %1$s KB)',
'Attachments:NoAttachment' => 'Intet vedhæftet. ',
));
?>

View File

@@ -22,7 +22,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="item_class"/>
<attribute id="temp_id"/>

View File

@@ -1,5 +1,5 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
// Copyright (C) 2010-2015 Combodo SARL
//
// This file is part of iTop.
//
@@ -250,6 +250,7 @@ EOF
$('#attachment_plugin').trigger('remove_attachment', [att_id]);
return false; // Do not submit the form !
}
function ajaxFileUpload()
{
//starting setting some animation when the ajax starts and completes
@@ -347,7 +348,7 @@ EOF
$sIcon = utils::GetAbsoluteUrlAppRoot().AttachmentPlugIn::GetFileIcon($sFileName);
$sDownloadLink = utils::GetAbsoluteUrlAppRoot().'pages/ajax.render.php?operation=download_document&class=Attachment&id='.$iAttId.'&field=contents';
$sPreview = $oDoc->IsPreviewAvailable() ? 'true' : 'false';
$oPage->add('<div class="attachment" id="display_attachment_'.$iAttId.'"><a data-preview="'.$sPreview.'" href="'.$sDownloadLink.'"><img src="'.$sIcon.'"><br/>'.$sFileName.'<input id="attachment_'+data.result.att_id+'" type="hidden" name="attachments[]" value="'.$iAttId.'"/></a><br/>&nbsp;<input id="btn_remove_'.$iAttId.'" type="button" class="btn_hidden" value="Delete" onClick="RemoveAttachment('.$iAttId.');"/>&nbsp;</div>');
$oPage->add('<div class="attachment" id="display_attachment_'.$iAttId.'"><a data-preview="'.$sPreview.'" href="'.$sDownloadLink.'"><img src="'.$sIcon.'"><br/>'.$sFileName.'<input id="attachment_'.$iAttId.'" type="hidden" name="attachments[]" value="'.$iAttId.'"/></a><br/>&nbsp;<input id="btn_remove_'.$iAttId.'" type="button" class="btn_hidden" value="Delete" onClick="RemoveAttachment('.$iAttId.');"/>&nbsp;</div>');
$oPage->add_ready_script("$('#attachment_plugin').trigger('add_attachment', [$iAttId, '".addslashes($sFileName)."']);");
}
}
@@ -368,6 +369,7 @@ $oPage->add_ready_script(
url: GetAbsoluteUrlModulesRoot()+'itop-attachments/ajax.attachment.php',
formData: { operation: 'add', temp_id: '$sTempId', obj_class: '$sClass' },
dataType: 'json',
pasteZone: null, // Don't accept files via Chrome's copy/paste
done: function (e, data) {
if(typeof(data.result.error) != 'undefined')
{
@@ -383,7 +385,7 @@ $oPage->add_ready_script(
{
$('#display_attachment_'+data.result.att_id).hover( function() { $(this).children(':button').toggleClass('btn_hidden'); } );
}
$('#attachment_plugin').trigger('add_attachment', [data.result.att_id, data.msg]);
$('#attachment_plugin').trigger('add_attachment', [data.result.att_id, data.result.msg]);
}
}
},
@@ -440,7 +442,6 @@ EOF
);
$oPage->p('<span style="display:none;" id="attachment_loading">Loading, please wait...</span>');
$oPage->p('<input type="hidden" id="attachment_plugin" name="attachment_plugin"/>');
$oPage->add('</fieldset>');
if ($this->m_bDeleteEnabled)
{
$oPage->add_ready_script('$(".attachment").hover( function() {$(this).children(":button").toggleClass("btn_hidden"); } );');
@@ -466,7 +467,9 @@ EOF
$oPage->add('<div class="attachment" id="attachment_'.$iAttId.'"><a data-preview="'.$sPreview.'" href="'.$sDownloadLink.'"><img src="'.$sIcon.'"><br/>'.$sFileName.'</a><input type="hidden" name="attachments[]" value="'.$iAttId.'"/><br/>&nbsp;&nbsp;</div>');
}
}
$oPage->add('</span>');
}
$oPage->add('</fieldset>');
$sPreviewNotAvailable = addslashes(Dict::S('Attachments:PreviewNotAvailable'));
$iMaxWidth = MetaModel::GetModuleSetting('itop-attachments', 'preview_max_width', 290);
$oPage->add_ready_script("$(document).tooltip({ items: '.attachment a', position: { my: 'left top', at: 'right top', using: function( position, feedback ) { $( this ).css( position ); }}, content: function() { if ($(this).attr('data-preview') == 'true') { return('<img style=\"max-width:{$iMaxWidth}px\" src=\"'+$(this).attr('href')+'\"></img>');} else { return '$sPreviewNotAvailable'; }}});");

View File

@@ -23,7 +23,7 @@ SetupWebPage::AddModule(
array(
// Identification
//
'label' => 'Tickets attachments',
'label' => 'Tickets Attachments',
'category' => 'business',
// Setup

View File

@@ -0,0 +1,48 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
//
// This file is part of iTop.
//
// iTop is free software; you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// iTop is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with iTop. If not, see <http://www.gnu.org/licenses/>
/**
* @author LinProfs <info@linprofs.com>
*
* Linux & Open Source Professionals
* http://www.linprofs.com
*
* @copyright Copyright (C) 2010-2012 Combodo SARL
* @licence http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'Attachments:TabTitle_Count' => 'Bijlagen (%1$d)',
'Attachments:EmptyTabTitle' => 'Bijlagen',
'Attachments:FieldsetTitle' => 'Bijlagen',
'Attachments:DeleteBtn' => 'Verwijder',
'Attachments:History_File_Added' => 'Bijlage %1$s toegevoegd.',
'Attachments:History_File_Removed' => 'Bijlage %1$s verwijderd.',
'Attachments:AddAttachment' => 'Voeg bijlage toe: ',
'Attachments:UploadNotAllowedOnThisSystem' => 'Bestand upload is NIET toegestaan op dit systeem.',
'Attachment:Max_Go' => '(Maximum bestandsgrootte: %1$s Go)',
'Attachment:Max_Mo' => '(Maximum bestandsgrootte: %1$s Mo)',
'Attachment:Max_Ko' => '(Maximum bestandsgrootte: %1$s Ko)',
'Attachments:NoAttachment' => 'Geen bijlage. ',
'Attachments:PreviewNotAvailable' => 'Een voorbeeld is niet beschikbaar voor dit type bijlage.',
'Class:Attachment' => 'Bijlage',
'Class:Attachment+' => '',
));
?>

View File

@@ -1,5 +1,5 @@
<?php
// Copyright (C) 2014 Combodo SARL
// Copyright (C) 2013-2016 Combodo SARL
//
// This file is part of iTop.
//
@@ -19,7 +19,7 @@
/**
* Backup from an interactive session
*
* @copyright Copyright (C) 2013 Combodo SARL
* @copyright Copyright (C) 2013-2016 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*/
@@ -77,9 +77,8 @@ try
$sEnvironment = utils::ReadParam('environment', 'production', false, 'raw_data');
$oRestoreMutex = new iTopMutex('restore.'.$sEnvironment);
if ($oRestoreMutex->TryLock())
if (!$oRestoreMutex->IsLocked())
{
$oRestoreMutex->Unlock();
$sFile = utils::ReadParam('file', '', false, 'raw_data');
$sToken = str_replace(' ', '', (string)microtime());
$sTokenFile = APPROOT.'/data/restore.'.$sToken.'.tok';
@@ -119,7 +118,9 @@ EOF
{
$sEnvironment = utils::ReadParam('environment', 'production', false, 'raw_data');
$oRestoreMutex = new iTopMutex('restore.'.$sEnvironment);
IssueLog::Info("Backup Restore - Acquiring the LOCK 'restore.$sEnvironment'");
$oRestoreMutex->Lock();
IssueLog::Info('Backup Restore - LOCK acquired, executing...');
try
{
set_time_limit(0);
@@ -144,6 +145,7 @@ EOF
$sBackupFile = $sBackupDir.$sFile;
$sRes = $oDBRS->RestoreFromZip($sBackupFile, $sEnvironment);
IssueLog::Info('Backup Restore - Done, releasing the LOCK');
$oRestoreMutex->Unlock();
}
catch (Exception $e)

View File

@@ -1,5 +1,5 @@
<?php
// Copyright (C) 2014 Combodo SARL
// Copyright (C) 2014-2016 Combodo SARL
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
@@ -26,35 +26,19 @@ class BackupHandler extends ModuleHandlerAPI
{
public static function OnMetaModelStarted()
{
try
{
$oBackupMutex = new iTopMutex('backup.'.utils::GetCurrentEnvironment());
if ($oBackupMutex->TryLock())
{
$oBackupMutex->Unlock();
}
else
{
// Not needed: the DB dump is done in a single transaction
//MetaModel::GetConfig()->Set('access_mode', ACCESS_READONLY, 'itop-backup');
//MetaModel::GetConfig()->Set('access_message', ' - '.dict::S('bkp-backup-running'), 'itop-backup');
}
$oRestoreMutex = new iTopMutex('restore.'.utils::GetCurrentEnvironment());
if ($oRestoreMutex->TryLock())
{
$oRestoreMutex->Unlock();
}
else
if ($oRestoreMutex->IsLocked())
{
IssueLog::Info(__class__.'::'.__function__.' A user is trying to use iTop while a restore is running. The requested page is in read-only mode.');
MetaModel::GetConfig()->Set('access_mode', ACCESS_READONLY, 'itop-backup');
MetaModel::GetConfig()->Set('access_message', ' - '.dict::S('bkp-restore-running'), 'itop-backup');
}
}
catch(Exception $e)
{
IssueLog::Error(__class__.'::'.__function__.' Failed to check if a backup/restore is running: '.$e->getMessage());
}
}
}

View File

@@ -1,5 +1,5 @@
<?php
// Copyright (C) 2014 Combodo SARL
// Copyright (C) 2016 Combodo SARL
//
// This file is part of iTop.
//
@@ -20,7 +20,7 @@
/**
* Monitor the backup
*
* @copyright Copyright (C) 2013 Combodo SARL
* @copyright Copyright (C) 2016 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*/
@@ -169,14 +169,13 @@ try
}
$oRestoreMutex = new iTopMutex('restore.'.utils::GetCurrentEnvironment());
if ($oRestoreMutex->TryLock())
if ($oRestoreMutex->IsLocked())
{
$oRestoreMutex->Unlock();
$sDisableRestore = '';
$sDisableRestore = 'disabled="disabled"';
}
else
{
$sDisableRestore = 'disabled="disabled"';
$sDisableRestore = '';
}
// 1st table: list the backups made in the background
@@ -271,20 +270,12 @@ try
// Ongoing operation ?
//
$oBackupMutex = new iTopMutex('backup.'.utils::GetCurrentEnvironment());
if ($oBackupMutex->TryLock())
{
$oBackupMutex->Unlock();
}
else
if ($oBackupMutex->IsLocked())
{
$oP->p(Dict::S('bkp-backup-running'));
}
$oRestoreMutex = new iTopMutex('restore.'.utils::GetCurrentEnvironment());
if ($oRestoreMutex->TryLock())
{
$oRestoreMutex->Unlock();
}
else
if ($oRestoreMutex->IsLocked())
{
$oP->p(Dict::S('bkp-restore-running'));
}

View File

@@ -12,7 +12,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="volume_id"/>
</attributes>

View File

@@ -0,0 +1,247 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
//
// This file is part of iTop.
//
// iTop is free software; you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// iTop is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with iTop. If not, see <http://www.gnu.org/licenses/>
/**
* @author Erik Bøg <erik@boegmoeller.dk>
* @copyright Copyright (C) 2010-2012 Combodo SARL
* @licence http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:RoutineChange' => 'Rutine Ændring',
'Class:RoutineChange+' => '',
'Class:RoutineChange/Stimulus:ev_assign' => 'Tildel',
'Class:RoutineChange/Stimulus:ev_assign+' => '',
'Class:RoutineChange/Stimulus:ev_reopen' => 'Genåben',
'Class:RoutineChange/Stimulus:ev_reopen+' => '',
'Class:RoutineChange/Stimulus:ev_plan' => 'Planlæg',
'Class:RoutineChange/Stimulus:ev_plan+' => '',
'Class:RoutineChange/Stimulus:ev_approve' => 'Godkend',
'Class:RoutineChange/Stimulus:ev_approve+' => '',
'Class:RoutineChange/Stimulus:ev_replan' => 'Genplanlæg',
'Class:RoutineChange/Stimulus:ev_replan+' => '',
'Class:RoutineChange/Stimulus:ev_notapprove' => 'Godkend Ikke',
'Class:RoutineChange/Stimulus:ev_notapprove+' => '',
'Class:RoutineChange/Stimulus:ev_implement' => 'Implementer',
'Class:RoutineChange/Stimulus:ev_implement+' => '',
'Class:RoutineChange/Stimulus:ev_monitor' => 'Overvåg',
'Class:RoutineChange/Stimulus:ev_monitor+' => '',
'Class:RoutineChange/Stimulus:ev_finish' => 'Afslut',
'Class:RoutineChange/Stimulus:ev_finish+' => '',
'Class:NormalChange' => 'Normal Ændring',
'Class:NormalChange+' => '',
'Class:NormalChange/Attribute:acceptance_date' => 'Dato for accept',
'Class:NormalChange/Attribute:acceptance_date+' => '',
'Class:NormalChange/Attribute:acceptance_comment' => 'Kommentar til accept',
'Class:NormalChange/Attribute:acceptance_comment+' => '',
'Class:NormalChange/Stimulus:ev_validate' => 'Valider',
'Class:NormalChange/Stimulus:ev_validate+' => '',
'Class:NormalChange/Stimulus:ev_reject' => 'Afslå',
'Class:NormalChange/Stimulus:ev_reject+' => '',
'Class:NormalChange/Stimulus:ev_assign' => 'Tildel',
'Class:NormalChange/Stimulus:ev_assign+' => '',
'Class:NormalChange/Stimulus:ev_reopen' => 'Genåben',
'Class:NormalChange/Stimulus:ev_reopen+' => '',
'Class:NormalChange/Stimulus:ev_plan' => 'Planlæg',
'Class:NormalChange/Stimulus:ev_plan+' => '',
'Class:NormalChange/Stimulus:ev_approve' => 'Godkend',
'Class:NormalChange/Stimulus:ev_approve+' => '',
'Class:NormalChange/Stimulus:ev_replan' => 'Genplanlæg',
'Class:NormalChange/Stimulus:ev_replan+' => '',
'Class:NormalChange/Stimulus:ev_notapprove' => 'Godkent Ikke',
'Class:NormalChange/Stimulus:ev_notapprove+' => '',
'Class:NormalChange/Stimulus:ev_implement' => 'Implementer',
'Class:NormalChange/Stimulus:ev_implement+' => '',
'Class:NormalChange/Stimulus:ev_monitor' => 'Overvåg',
'Class:NormalChange/Stimulus:ev_monitor+' => '',
'Class:NormalChange/Stimulus:ev_finish' => 'Afslut',
'Class:NormalChange/Stimulus:ev_finish+' => '',
'Class:EmergencyChange' => 'Emergency Ændring',
'Class:EmergencyChange+' => '',
'Class:EmergencyChange/Stimulus:ev_assign' => 'Tildel',
'Class:EmergencyChange/Stimulus:ev_assign+' => '',
'Class:EmergencyChange/Stimulus:ev_reopen' => 'Genåben',
'Class:EmergencyChange/Stimulus:ev_reopen+' => '',
'Class:EmergencyChange/Stimulus:ev_plan' => 'Planlæg',
'Class:EmergencyChange/Stimulus:ev_plan+' => '',
'Class:EmergencyChange/Stimulus:ev_approve' => 'Godkend',
'Class:EmergencyChange/Stimulus:ev_approve+' => '',
'Class:EmergencyChange/Stimulus:ev_replan' => 'Genplanlæg',
'Class:EmergencyChange/Stimulus:ev_replan+' => '',
'Class:EmergencyChange/Stimulus:ev_notapprove' => 'Godkend Ikke',
'Class:EmergencyChange/Stimulus:ev_notapprove+' => '',
'Class:EmergencyChange/Stimulus:ev_implement' => 'Implementer',
'Class:EmergencyChange/Stimulus:ev_implement+' => '',
'Class:EmergencyChange/Stimulus:ev_monitor' => 'Overvåg',
'Class:EmergencyChange/Stimulus:ev_monitor+' => '',
'Class:EmergencyChange/Stimulus:ev_finish' => 'Afslut',
'Class:EmergencyChange/Stimulus:ev_finish+' => '',
'Menu:ChangeManagement' => 'Change Management',
'Menu:Change:Overview' => 'Oversigt',
'Menu:Change:Overview+' => '',
'Menu:NewChange' => 'Ny Change',
'Menu:NewChange+' => 'Opret en ny Change ticket',
'Menu:SearchChanges' => 'Søg efter Changes',
'Menu:SearchChanges+' => 'Søg efter Change Tickets',
'Menu:Change:Shortcuts' => 'Genveje',
'Menu:Change:Shortcuts+' => '',
'Menu:WaitingAcceptance' => 'Changes, som afventer accept',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => 'Changes, som afventer godkendelse',
'Menu:WaitingApproval+' => '',
'Menu:Changes' => 'Offene Changes',
'Menu:Changes+' => 'Alle åbne Changes',
'Menu:MyChanges' => 'Mine Changes',
'Menu:MyChanges+' => 'Changes som er tildelt mig',
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Changes de sidste 7 dage, efter kategori',
'UI-ChangeManagementOverview-Last-7-days' => 'Antal Changes de sidste 7 dage',
'UI-ChangeManagementOverview-ChangeByDomain-last-7-days' => 'Changes de sidste 7 dage efter type',
'UI-ChangeManagementOverview-ChangeByStatus-last-7-days' => 'Changes de sidste 7 dage efter status',
'Class:Change' => 'Change',
'Class:Change+' => '',
'Class:Change/Attribute:status' => 'Status',
'Class:Change/Attribute:status+' => '',
'Class:Change/Attribute:status/Value:new' => 'Ny',
'Class:Change/Attribute:status/Value:new+' => '',
'Class:Change/Attribute:status/Value:validated' => 'Valideret',
'Class:Change/Attribute:status/Value:validated+' => '',
'Class:Change/Attribute:status/Value:rejected' => 'Afslået',
'Class:Change/Attribute:status/Value:rejected+' => '',
'Class:Change/Attribute:status/Value:assigned' => 'Tildelt',
'Class:Change/Attribute:status/Value:assigned+' => '',
'Class:Change/Attribute:status/Value:plannedscheduled' => 'Planlagt og tidssat',
'Class:Change/Attribute:status/Value:plannedscheduled+' => '',
'Class:Change/Attribute:status/Value:approved' => 'Godkendt',
'Class:Change/Attribute:status/Value:approved+' => '',
'Class:Change/Attribute:status/Value:notapproved' => 'Ikke Godkendt',
'Class:Change/Attribute:status/Value:notapproved+' => '',
'Class:Change/Attribute:status/Value:implemented' => 'Implementeret',
'Class:Change/Attribute:status/Value:implemented+' => '',
'Class:Change/Attribute:status/Value:monitored' => 'Overvåget',
'Class:Change/Attribute:status/Value:monitored+' => '',
'Class:Change/Attribute:status/Value:closed' => 'Lukket',
'Class:Change/Attribute:status/Value:closed+' => '',
'Class:Change/Attribute:reason' => 'Årsag',
'Class:Change/Attribute:reason+' => '',
'Class:Change/Attribute:requestor_id' => 'Rekvirent',
'Class:Change/Attribute:requestor_id+' => '',
'Class:Change/Attribute:requestor_email' => 'Rekvirent e-mail',
'Class:Change/Attribute:requestor_email+' => '',
'Class:Change/Attribute:creation_date' => 'Oprettet dato',
'Class:Change/Attribute:creation_date+' => '',
'Class:Change/Attribute:impact' => 'Indvirkning',
'Class:Change/Attribute:impact+' => '',
'Class:Change/Attribute:supervisor_group_id' => 'Supervisor-Team',
'Class:Change/Attribute:supervisor_group_id+' => '',
'Class:Change/Attribute:supervisor_group_name' => 'Supervisor-Teamnavn',
'Class:Change/Attribute:supervisor_group_name+' => '',
'Class:Change/Attribute:supervisor_id' => 'Supervisor',
'Class:Change/Attribute:supervisor_id+' => '',
'Class:Change/Attribute:supervisor_email' => 'Supervisor e-mail',
'Class:Change/Attribute:supervisor_email+' => '',
'Class:Change/Attribute:manager_group_id' => 'Manager-Team',
'Class:Change/Attribute:manager_group_id+' => '',
'Class:Change/Attribute:manager_group_name' => 'Manager-Team',
'Class:Change/Attribute:manager_group_name+' => '',
'Class:Change/Attribute:manager_id' => 'Manager',
'Class:Change/Attribute:manager_id+' => '',
'Class:Change/Attribute:manager_email' => 'Manager',
'Class:Change/Attribute:manager_email+' => '',
'Class:Change/Attribute:outage' => 'Nedetid',
'Class:Change/Attribute:outage+' => '',
'Class:Change/Attribute:outage/Value:no' => 'Nej',
'Class:Change/Attribute:outage/Value:no+' => '',
'Class:Change/Attribute:outage/Value:yes' => 'Ja',
'Class:Change/Attribute:outage/Value:yes+' => '',
'Class:Change/Attribute:fallback' => 'Fallback-Plan',
'Class:Change/Attribute:fallback+' => '',
'Class:Change/Attribute:parent_id' => 'Parent Change',
'Class:Change/Attribute:parent_id+' => '',
'Class:Change/Attribute:parent_name' => 'Parent Change Ref',
'Class:Change/Attribute:parent_name+' => '',
'Class:Change/Attribute:related_request_list' => 'Relaterede Requests',
'Class:Change/Attribute:related_request_list+' => '',
'Class:Change/Attribute:related_problems_list' => 'Relaterede Problemer',
'Class:Change/Attribute:related_problems_list+' => '',
'Class:Change/Attribute:child_changes_list' => 'Afledte Changes',
'Class:Change/Attribute:child_changes_list+' => '',
'Class:Change/Attribute:parent_id_friendlyname' => 'Parent Friendly Name',
'Class:Change/Attribute:parent_id_friendlyname+' => '',
'Class:Change/Attribute:parent_id_finalclass_recall' => 'Change-Type',
'Class:Change/Attribute:parent_id_finalclass_recall+' => '',
'Class:Change/Stimulus:ev_validate' => 'Valider',
'Class:Change/Stimulus:ev_validate+' => '',
'Class:Change/Stimulus:ev_reject' => 'Afslå',
'Class:Change/Stimulus:ev_reject+' => '',
'Class:Change/Stimulus:ev_assign' => 'Tildel',
'Class:Change/Stimulus:ev_assign+' => '',
'Class:Change/Stimulus:ev_reopen' => 'Genåben',
'Class:Change/Stimulus:ev_reopen+' => '',
'Class:Change/Stimulus:ev_plan' => 'Planlæg',
'Class:Change/Stimulus:ev_plan+' => '',
'Class:Change/Stimulus:ev_approve' => 'Godkend',
'Class:Change/Stimulus:ev_approve+' => '',
'Class:Change/Stimulus:ev_replan' => 'Genplanlæg',
'Class:Change/Stimulus:ev_replan+' => '',
'Class:Change/Stimulus:ev_notapprove' => 'Afslå',
'Class:Change/Stimulus:ev_notapprove+' => '',
'Class:Change/Stimulus:ev_implement' => 'Implementer',
'Class:Change/Stimulus:ev_implement+' => '',
'Class:Change/Stimulus:ev_monitor' => 'Overvåg',
'Class:Change/Stimulus:ev_monitor+' => '',
'Class:Change/Stimulus:ev_finish' => 'Afslut',
'Class:Change/Stimulus:ev_finish+' => '',
'Class:RoutineChange/Stimulus:ev_validate' => 'Valider',
'Class:RoutineChange/Stimulus:ev_validate+' => '',
'Class:RoutineChange/Stimulus:ev_reject' => 'Afslå',
'Class:RoutineChange/Stimulus:ev_reject+' => '',
'Class:ApprovedChange' => 'Godkendte Changes',
'Class:ApprovedChange+' => '',
'Class:ApprovedChange/Attribute:approval_date' => 'Dato for godkendelse',
'Class:ApprovedChange/Attribute:approval_date+' => '',
'Class:ApprovedChange/Attribute:approval_comment' => 'Kommentar til godkendelsen',
'Class:ApprovedChange/Attribute:approval_comment+' => '',
'Class:ApprovedChange/Stimulus:ev_validate' => 'Valider',
'Class:ApprovedChange/Stimulus:ev_validate+' => '',
'Class:ApprovedChange/Stimulus:ev_reject' => 'Afslå',
'Class:ApprovedChange/Stimulus:ev_reject+' => '',
'Class:ApprovedChange/Stimulus:ev_assign' => 'Tildel',
'Class:ApprovedChange/Stimulus:ev_assign+' => '',
'Class:ApprovedChange/Stimulus:ev_reopen' => 'Genåben',
'Class:ApprovedChange/Stimulus:ev_reopen+' => '',
'Class:ApprovedChange/Stimulus:ev_plan' => 'Planlæg',
'Class:ApprovedChange/Stimulus:ev_plan+' => '',
'Class:ApprovedChange/Stimulus:ev_approve' => 'Godkend',
'Class:ApprovedChange/Stimulus:ev_approve+' => '',
'Class:ApprovedChange/Stimulus:ev_replan' => 'Genplanlæg',
'Class:ApprovedChange/Stimulus:ev_replan+' => '',
'Class:ApprovedChange/Stimulus:ev_notapprove' => 'Tilbagekald godkendelse',
'Class:ApprovedChange/Stimulus:ev_notapprove+' => '',
'Class:ApprovedChange/Stimulus:ev_implement' => 'Implementer',
'Class:ApprovedChange/Stimulus:ev_implement+' => '',
'Class:ApprovedChange/Stimulus:ev_monitor' => 'Overvåg',
'Class:ApprovedChange/Stimulus:ev_monitor+' => '',
'Class:ApprovedChange/Stimulus:ev_finish' => 'Afslut',
'Class:ApprovedChange/Stimulus:ev_finish+' => '',
'Class:EmergencyChange/Stimulus:ev_validate' => 'Valider',
'Class:EmergencyChange/Stimulus:ev_validate+' => '',
'Class:EmergencyChange/Stimulus:ev_reject' => 'Afslå',
'Class:EmergencyChange/Stimulus:ev_reject+' => '',
));
?>

View File

@@ -17,7 +17,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ref"/>
</attributes>
@@ -902,6 +901,10 @@
</lifecycle>
<methods>
<method id="SetClosureDate">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentDate() instead
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>StimulusUserAction</type>
@@ -912,6 +915,10 @@
}]]></code>
</method>
<method id="ResetRejectReason">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentDate() instead
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
@@ -1204,7 +1211,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ref"/>
</attributes>
@@ -1679,7 +1685,10 @@
<target>closed</target>
<actions>
<action>
<verb>SetClosureDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">close_date</param>
</params>
</action>
</actions>
</transition>
@@ -1713,7 +1722,10 @@
<target>closed</target>
<actions>
<action>
<verb>SetClosureDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">close_date</param>
</params>
</action>
</actions>
</transition>
@@ -1989,7 +2001,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ref"/>
</attributes>
@@ -2984,7 +2995,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ref"/>
</attributes>
@@ -3099,7 +3109,10 @@
<target>validated</target>
<actions>
<action>
<verb>ResetRejectReason</verb>
<verb>Reset</verb>
<params>
<param xsi:type="attcode">reason</param>
</params>
</action>
</actions>
</transition>
@@ -3236,7 +3249,10 @@
<target>approved</target>
<actions>
<action>
<verb>ResetRejectReason</verb>
<verb>Reset</verb>
<params>
<param xsi:type="attcode">reason</param>
</params>
</action>
</actions>
</transition>
@@ -3336,7 +3352,10 @@
<target>closed</target>
<actions>
<action>
<verb>SetClosureDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">close_date</param>
</params>
</action>
</actions>
</transition>
@@ -3369,7 +3388,10 @@
<target>closed</target>
<actions>
<action>
<verb>SetClosureDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">close_date</param>
</params>
</action>
</actions>
</transition>
@@ -3662,7 +3684,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ref"/>
</attributes>
@@ -3985,7 +4006,10 @@
<target>approved</target>
<actions>
<action>
<verb>ResetRejectReason</verb>
<verb>Reset</verb>
<params>
<param xsi:type="attcode">reason</param>
</params>
</action>
</actions>
</transition>
@@ -4085,7 +4109,10 @@
<target>closed</target>
<actions>
<action>
<verb>SetClosureDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">close_date</param>
</params>
</action>
</actions>
</transition>
@@ -4119,7 +4146,10 @@
<target>closed</target>
<actions>
<action>
<verb>SetClosureDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">close_date</param>
</params>
</action>
</actions>
</transition>

View File

@@ -0,0 +1,115 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
//
// This file is part of iTop.
//
// iTop is free software; you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// iTop is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with iTop. If not, see <http://www.gnu.org/licenses/>
/**
* @author Erik Bøg <erik@boegmoeller.dk>
* @copyright Copyright (C) 2010-2012 Combodo SARL
* @licence http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:Change' => 'Change',
'Class:Change+' => '',
'Class:Change/Attribute:status' => 'Status',
'Class:Change/Attribute:status+' => 'Status for emnet',
'Class:Change/Attribute:status/Value:new' => 'Ny',
'Class:Change/Attribute:status/Value:new+' => 'Opret ny',
'Class:Change/Attribute:status/Value:assigned' => 'Tildelt',
'Class:Change/Attribute:status/Value:assigned+' => '',
'Class:Change/Attribute:status/Value:planned' => 'Planlagt',
'Class:Change/Attribute:status/Value:planned+' => '',
'Class:Change/Attribute:status/Value:rejected' => 'Afslået',
'Class:Change/Attribute:status/Value:rejected+' => '',
'Class:Change/Attribute:status/Value:approved' => 'Godkendt',
'Class:Change/Attribute:status/Value:approved+' => '',
'Class:Change/Attribute:status/Value:closed' => 'Lukket',
'Class:Change/Attribute:status/Value:closed+' => '',
'Class:Change/Attribute:category' => 'Kategori',
'Class:Change/Attribute:category+' => '',
'Class:Change/Attribute:category/Value:application' => 'Applikation',
'Class:Change/Attribute:category/Value:application+' => '',
'Class:Change/Attribute:category/Value:hardware' => 'Hardware',
'Class:Change/Attribute:category/Value:hardware+' => '',
'Class:Change/Attribute:category/Value:network' => 'Netværk',
'Class:Change/Attribute:category/Value:network+' => '',
'Class:Change/Attribute:category/Value:other' => 'Andet',
'Class:Change/Attribute:category/Value:other+' => '',
'Class:Change/Attribute:category/Value:software' => 'Software',
'Class:Change/Attribute:category/Value:software+' => '',
'Class:Change/Attribute:category/Value:system' => 'System',
'Class:Change/Attribute:category/Value:system+' => '',
'Class:Change/Attribute:reject_reason' => 'Årsag til afslag',
'Class:Change/Attribute:reject_reason+' => '',
'Class:Change/Attribute:changemanager_id' => 'Change Manager',
'Class:Change/Attribute:changemanager_id+' => '',
'Class:Change/Attribute:parent_id' => 'Parent Change',
'Class:Change/Attribute:parent_id+' => '',
'Class:Change/Attribute:creation_date' => 'Oprettelsesdato',
'Class:Change/Attribute:creation_date+' => '',
'Class:Change/Attribute:approval_date' => 'Godkendelsesdato',
'Class:Change/Attribute:approval_date+' => '',
'Class:Change/Attribute:fallback_plan' => 'Fallback-Plan',
'Class:Change/Attribute:fallback_plan+' => '',
'Class:Change/Attribute:related_request_list' => 'Relaterede Requests',
'Class:Change/Attribute:related_request_list+' => '',
'Class:Change/Attribute:child_changes_list' => 'Afledte Changes',
'Class:Change/Attribute:child_changes_list+' => '',
'Class:Change/Stimulus:ev_assign' => 'Tildel',
'Class:Change/Stimulus:ev_assign+' => '',
'Class:Change/Stimulus:ev_plan' => 'Planlæg',
'Class:Change/Stimulus:ev_plan+' => '',
'Class:Change/Stimulus:ev_reject' => 'Afslåp',
'Class:Change/Stimulus:ev_reject+' => '',
'Class:Change/Stimulus:ev_reopen' => 'Genåben',
'Class:Change/Stimulus:ev_reopen+' => '',
'Class:Change/Stimulus:ev_approve' => 'Godkend',
'Class:Change/Stimulus:ev_approve+' => '',
'Class:Change/Stimulus:ev_finish' => 'Luk',
'Class:Change/Stimulus:ev_finish+' => '',
'Menu:ChangeManagement' => 'Change Management',
'Menu:Change:Overview' => 'Oversigt',
'Menu:Change:Overview+' => '',
'Menu:NewChange' => 'Ny Change',
'Menu:NewChange+' => '',
'Menu:SearchChanges' => 'Søg efter Changes',
'Menu:SearchChanges+' => '',
'Menu:Change:Shortcuts' => 'Genveje',
'Menu:Change:Shortcuts+' => '',
'Menu:WaitingAcceptance' => 'Changes der afventer accept',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => 'Changes der afventer godkendelse',
'Menu:WaitingApproval+' => '',
'Menu:Changes' => 'Åbne Changes',
'Menu:Changes+' => '',
'Menu:MyChanges' => 'Changes tildelt til mig',
'Menu:MyChanges+' => '',
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Changes de sidste 7 dage efter kategori',
'UI-ChangeManagementOverview-Last-7-days' => 'Antal Changes i de sidste 7 dage',
'UI-ChangeManagementOverview-ChangeByDomain-last-7-days' => 'Changes de sidste 7 dage efter type',
'UI-ChangeManagementOverview-ChangeByStatus-last-7-days' => 'Changes de sidste 7 dage efter status',
'Class:Change/Attribute:changemanager_email' => 'Change Manager Email',
'Class:Change/Attribute:changemanager_email+' => '',
'Class:Change/Attribute:parent_name' => 'Parent Change ref',
'Class:Change/Attribute:parent_name+' => '',
'Class:Change/Attribute:related_incident_list' => 'Relaterede Incidents',
'Class:Change/Attribute:related_incident_list+' => '',
'Class:Change/Attribute:parent_id_friendlyname' => 'Parent Change Friendly Name',
'Class:Change/Attribute:parent_id_friendlyname+' => '',
));
?>

View File

@@ -17,7 +17,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ref"/>
</attributes>
@@ -280,10 +279,16 @@
<target>approved</target>
<actions>
<action>
<verb>SetApprovalDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">approval_date</param>
</params>
</action>
<action>
<verb>ResetRejectReason</verb>
<verb>Reset</verb>
<params>
<param xsi:type="attcode">reject_reason</param>
</params>
</action>
</actions>
</transition>
@@ -408,7 +413,10 @@
<target>closed</target>
<actions>
<action>
<verb>SetClosureDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">close_date</param>
</params>
</action>
</actions>
</transition>
@@ -445,6 +453,10 @@
</lifecycle>
<methods>
<method id="SetApprovalDate">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentDate() instead
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
@@ -455,6 +467,10 @@
}]]></code>
</method>
<method id="ResetRejectReason">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentDate() instead
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
@@ -465,6 +481,10 @@
}]]></code>
</method>
<method id="SetClosureDate">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentDate() instead
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>

View File

@@ -0,0 +1,146 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
//
// This file is part of iTop.
//
// iTop is free software; you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// iTop is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with iTop. If not, see <http://www.gnu.org/licenses/>
/**
* @author LinProfs <info@linprofs.com>
*
* Linux & Open Source Professionals
* http://www.linprofs.com
*
* @copyright Copyright (C) 2010-2012 Combodo SARL
* @licence http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'Menu:ChangeManagement' => 'Change management',
'Menu:Change:Overview' => 'Overzicht',
'Menu:Change:Overview+' => '',
'Menu:NewChange' => 'Nieuwe change',
'Menu:NewChange+' => 'Maak een nieuwe change ticket aan',
'Menu:SearchChanges' => 'Zoek voor changes',
'Menu:SearchChanges+' => 'Zoek voor change tickets',
'Menu:Change:Shortcuts' => 'Snelkoppelingen',
'Menu:Change:Shortcuts+' => '',
'Menu:WaitingAcceptance' => 'Changes die nog acceptatie vereisen',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => 'Changes die nog goedkeuring vereisen',
'Menu:WaitingApproval+' => '',
'Menu:Changes' => 'Open changes',
'Menu:Changes+' => 'Alle open changes',
'Menu:MyChanges' => 'Changes toegewezen aan mij',
'Menu:MyChanges+' => 'Changes toegewezen door mij (als Agent)',
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Changes per categorie van de afgelopen 7 dagen',
'UI-ChangeManagementOverview-Last-7-days' => 'Aantal changes van de afgelopen 7 dagen',
'UI-ChangeManagementOverview-ChangeByDomain-last-7-days' => 'Changes per domein van de afgelopen 7 dagen',
'UI-ChangeManagementOverview-ChangeByStatus-last-7-days' => 'Changes per status van de afgelopen 7 dagen',
));
// Dictionnay conventions
// Class:<class_name>
// Class:<class_name>+
// Class:<class_name>/Attribute:<attribute_code>
// Class:<class_name>/Attribute:<attribute_code>+
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
// Class:<class_name>/Stimulus:<stimulus_code>
// Class:<class_name>/Stimulus:<stimulus_code>+
//
// Class: Change
//
Dict::Add('NL NL', "Dutch", "Nederlands", array(
'Class:Change' => 'Change',
'Class:Change+' => '',
'Class:Change/Attribute:status' => 'Status',
'Class:Change/Attribute:status+' => '',
'Class:Change/Attribute:status/Value:new' => 'Nieuw',
'Class:Change/Attribute:status/Value:new+' => '',
'Class:Change/Attribute:status/Value:assigned' => 'Toegewezen',
'Class:Change/Attribute:status/Value:assigned+' => '',
'Class:Change/Attribute:status/Value:planned' => 'Gepland',
'Class:Change/Attribute:status/Value:planned+' => '',
'Class:Change/Attribute:status/Value:rejected' => 'Rejected',
'Class:Change/Attribute:status/Value:rejected+' => '',
'Class:Change/Attribute:status/Value:approved' => 'Goedgekeurd',
'Class:Change/Attribute:status/Value:approved+' => '',
'Class:Change/Attribute:status/Value:closed' => 'Gesloten',
'Class:Change/Attribute:status/Value:closed+' => '',
'Class:Change/Attribute:category' => 'Categorie',
'Class:Change/Attribute:category+' => '',
'Class:Change/Attribute:category/Value:application' => 'applicatie',
'Class:Change/Attribute:category/Value:application+' => 'applicatie',
'Class:Change/Attribute:category/Value:hardware' => 'hardware',
'Class:Change/Attribute:category/Value:hardware+' => 'hardware',
'Class:Change/Attribute:category/Value:network' => 'netwerk',
'Class:Change/Attribute:category/Value:network+' => 'netwerk',
'Class:Change/Attribute:category/Value:other' => 'anders',
'Class:Change/Attribute:category/Value:other+' => 'anders',
'Class:Change/Attribute:category/Value:software' => 'software',
'Class:Change/Attribute:category/Value:software+' => 'software',
'Class:Change/Attribute:category/Value:system' => 'systeem',
'Class:Change/Attribute:category/Value:system+' => 'systeem',
'Class:Change/Attribute:reject_reason' => 'Reden van afwijzing',
'Class:Change/Attribute:reject_reason+' => '',
'Class:Change/Attribute:changemanager_id' => 'Change manager',
'Class:Change/Attribute:changemanager_id+' => '',
'Class:Change/Attribute:changemanager_email' => 'Change manager email',
'Class:Change/Attribute:changemanager_email+' => '',
'Class:Change/Attribute:parent_id' => 'Hoofd change',
'Class:Change/Attribute:parent_id+' => '',
'Class:Change/Attribute:parent_name' => 'Hoofd change ref',
'Class:Change/Attribute:parent_name+' => '',
'Class:Change/Attribute:creation_date' => 'Creatie datum',
'Class:Change/Attribute:creation_date+' => '',
'Class:Change/Attribute:approval_date' => 'Goedkeuring datum',
'Class:Change/Attribute:approval_date+' => '',
'Class:Change/Attribute:fallback_plan' => 'Backup plan',
'Class:Change/Attribute:fallback_plan+' => '',
'Class:Change/Attribute:related_request_list' => 'Gerelateerde verzoeken',
'Class:Change/Attribute:related_request_list+' => 'Alle gebruikersverzoeken gelinkt aan deze change',
'Class:Change/Attribute:related_incident_list' => 'Gerelateerde incidenten',
'Class:Change/Attribute:related_incident_list+' => 'Alle incidenten die gelinkt zijn aan deze change',
'Class:Change/Attribute:related_problems_list' => 'Gerelateerde problemen',
'Class:Change/Attribute:related_problems_list+' => 'Alle problemen gelinkt aan deze change',
'Class:Change/Attribute:child_changes_list' => 'Sub changes',
'Class:Change/Attribute:child_changes_list+' => 'Alle sub changes gelinkt aan deze change',
'Class:Change/Attribute:parent_id_friendlyname' => 'Hoofd change friendly name',
'Class:Change/Attribute:parent_id_friendlyname+' => '',
'Class:Change/Stimulus:ev_assign' => 'Wijs toe',
'Class:Change/Stimulus:ev_assign+' => '',
'Class:Change/Stimulus:ev_plan' => 'Plan',
'Class:Change/Stimulus:ev_plan+' => '',
'Class:Change/Stimulus:ev_reject' => 'Wijs af',
'Class:Change/Stimulus:ev_reject+' => '',
'Class:Change/Stimulus:ev_reopen' => 'Heropen',
'Class:Change/Stimulus:ev_reopen+' => '',
'Class:Change/Stimulus:ev_approve' => 'Keur goed',
'Class:Change/Stimulus:ev_approve+' => '',
'Class:Change/Stimulus:ev_finish' => 'Sluit',
'Class:Change/Stimulus:ev_finish+' => '',
'Class:Change/Attribute:outage' => 'Storing',
'Class:Change/Attribute:outage+' => '',
'Class:Change/Attribute:outage/Value:no' => 'Nee',
'Class:Change/Attribute:outage/Value:no+' => '',
'Class:Change/Attribute:outage/Value:yes' => 'Yes',
'Class:Change/Attribute:outage/Value:yes+' => '',
));
?>

File diff suppressed because it is too large Load Diff

View File

@@ -17,7 +17,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -121,7 +120,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -283,7 +281,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field>finalclass</db_final_class_field>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -442,7 +439,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="first_name"/>
<attribute id="name"/>
@@ -664,7 +660,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -786,7 +781,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field>finalclass</db_final_class_field>
<naming>
<format>Document</format>
<attributes/>
</naming>
<display_template/>
@@ -949,7 +943,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1073,7 +1066,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1178,7 +1170,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1281,7 +1272,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field>finalclass</db_final_class_field>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1495,7 +1485,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1718,7 +1707,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1913,7 +1901,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -2212,7 +2199,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -2504,7 +2490,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -2843,7 +2828,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -3000,7 +2984,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -3133,7 +3116,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="name"/>
<attribute id="system_name"/>
@@ -3328,7 +3310,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="name"/>
<attribute id="system_name"/>
@@ -3484,7 +3465,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="name"/>
<attribute id="system_name"/>
@@ -3640,7 +3620,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="name"/>
<attribute id="system_name"/>
@@ -3796,7 +3775,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="name"/>
<attribute id="system_name"/>
@@ -3913,7 +3891,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="name"/>
<attribute id="system_name"/>
@@ -4030,7 +4007,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -4170,7 +4146,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -4308,7 +4283,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -4455,7 +4429,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
<attribute id="version"/>
@@ -4601,7 +4574,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field>finalclass</db_final_class_field>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -4678,7 +4650,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -4767,7 +4738,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -4856,7 +4826,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field>finalclass</db_final_class_field>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -5020,7 +4989,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -5159,7 +5127,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -5291,7 +5258,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="licence_id"/>
<attribute id="document_id"/>
@@ -5372,7 +5338,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field>finalclass</db_final_class_field>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -5427,7 +5392,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -5495,7 +5459,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -5544,7 +5507,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -5593,7 +5555,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -5642,7 +5603,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -5703,7 +5663,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -5740,7 +5699,7 @@
<value id="Enclosure">Enclosure</value>
<value id="PC">PC</value>
<value id="Tablet">Tablet</value>
<value id="Telephone">Telephone</value>
<value id="Phone">Phone</value>
<value id="MobilePhone">MobilePhone</value>
<value id="Printer">Printer</value>
<value id="DiskArray">DiskArray</value>
@@ -5818,7 +5777,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -5879,7 +5837,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="brand_name"/>
<attribute id="name"/>
@@ -5949,7 +5906,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="patch_id"/>
<attribute id="document_id"/>
@@ -6031,7 +5987,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="softwarepatch_id"/>
<attribute id="softwareinstance_id"/>
@@ -6113,7 +6068,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="ospatch_id"/>
<attribute id="functionalci_id"/>
@@ -6195,7 +6149,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="software_id"/>
<attribute id="document_id"/>
@@ -6277,7 +6230,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="functionalci_id"/>
<attribute id="contact_id"/>
@@ -6359,7 +6311,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="functionalci_id"/>
<attribute id="document_id"/>
@@ -6440,7 +6391,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="ip"/>
<attribute id="ip_mask"/>
@@ -6627,7 +6577,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="vlan_tag"/>
</attributes>
@@ -6735,7 +6684,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="subnet_id"/>
<attribute id="vlan_id"/>
@@ -6823,7 +6771,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field>finalclass</db_final_class_field>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -6878,7 +6825,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -7008,7 +6954,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="name"/>
<attribute id="connectableci_name"/>
@@ -7128,7 +7073,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="physicalinterface_id"/>
<attribute id="vlan_id"/>
@@ -7218,7 +7162,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="networkdevice_id"/>
<attribute id="connectableci_id"/>
@@ -7476,7 +7419,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="applicationsolution_id"/>
<attribute id="functionalci_id"/>
@@ -7558,7 +7500,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="businessprocess_id"/>
<attribute id="applicationsolution_id"/>
@@ -7640,7 +7581,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="team_id"/>
<attribute id="person_id"/>
@@ -7740,7 +7680,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -7885,7 +7824,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="group_id"/>
</attributes>
@@ -7978,6 +7916,11 @@
<enable_permission>UR_ALLOWED_YES</enable_permission>
<enable_stimulus/>
</menu>
<menu id="CSVImport" xsi:type="WebPageMenuNode" _delta="define">
<rank>10</rank>
<parent>DataAdministration</parent>
<url>$pages/csvimport.php</url>
</menu>
<menu id="Audit" xsi:type="WebPageMenuNode" _delta="define">
<rank>33</rank>
<parent>DataAdministration</parent>

View File

@@ -289,8 +289,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Model/Attribute:type/Value:Tablet+' => '',
'Class:Model/Attribute:type/Value:TapeLibrary' => 'Tape-Library',
'Class:Model/Attribute:type/Value:TapeLibrary+' => '',
'Class:Model/Attribute:type/Value:Telephone' => 'Telefon',
'Class:Model/Attribute:type/Value:Telephone+' => '',
'Class:Model/Attribute:type/Value:Phone' => 'Telefon',
'Class:Model/Attribute:type/Value:Phone+' => '',
'Class:Model/Attribute:physicaldevices_list' => 'Phyische Geräte',
'Class:Model/Attribute:physicaldevices_list+' => '',
'Class:NetworkDeviceType' => 'Netzerkgerätetyp',
@@ -1019,10 +1019,14 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:lnkGroupToCI/Attribute:group_name+' => '',
'Class:lnkGroupToCI/Attribute:ci_name' => 'Name',
'Class:lnkGroupToCI/Attribute:ci_name+' => '',
'Menu:DataAdministration' => 'Data Management',
'Menu:DataAdministration+' => 'Data Management',
'Menu:Catalogs' => 'Kataloge',
'Menu:Catalogs+' => 'Datentypen',
'Menu:Audit' => 'Audit',
'Menu:Audit+' => 'Audit',
'Menu:CSVImport' => 'CSV-Import',
'Menu:CSVImport+' => 'Massenerstellung oder -aktualisierung',
'Menu:Organization' => 'Organisationen',
'Menu:Organization+' => 'Alle Organisationen',
'Menu:Application' => 'Anwendungen',

View File

@@ -1327,8 +1327,8 @@ Dict::Add('EN US', 'English', 'English', array(
'Class:Model/Attribute:type/Value:Tablet+' => 'Tablet',
'Class:Model/Attribute:type/Value:TapeLibrary' => 'Tape Library',
'Class:Model/Attribute:type/Value:TapeLibrary+' => 'Tape Library',
'Class:Model/Attribute:type/Value:Telephone' => 'Telephone',
'Class:Model/Attribute:type/Value:Telephone+' => 'Telephone',
'Class:Model/Attribute:type/Value:Phone' => 'Telephone',
'Class:Model/Attribute:type/Value:Phone+' => 'Telephone',
'Class:Model/Attribute:physicaldevices_list' => 'Physical devices',
'Class:Model/Attribute:physicaldevices_list+' => 'All the physical devices corresponding to this model',
));
@@ -1770,10 +1770,14 @@ Dict::Add('EN US', 'English', 'English', array(
//
Dict::Add('EN US', 'English', 'English', array(
'Menu:DataAdministration' => 'Data administration',
'Menu:DataAdministration+' => 'Data administration',
'Menu:Catalogs' => 'Catalogs',
'Menu:Catalogs+' => 'Data types',
'Menu:Audit' => 'Audit',
'Menu:Audit+' => 'Audit',
'Menu:CSVImport' => 'CSV import',
'Menu:CSVImport+' => 'Bulk creation or update',
'Menu:Organization' => 'Organizations',
'Menu:Organization+' => 'All organizations',
'Menu:Application' => 'Applications',

View File

@@ -1331,8 +1331,8 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
'Class:Model/Attribute:type/Value:Tablet+' => 'Tableta',
'Class:Model/Attribute:type/Value:TapeLibrary' => 'Librería de Cinta',
'Class:Model/Attribute:type/Value:TapeLibrary+' => 'Librería de Cinta',
'Class:Model/Attribute:type/Value:Telephone' => 'Teléfono',
'Class:Model/Attribute:type/Value:Telephone+' => 'Teléfono',
'Class:Model/Attribute:type/Value:Phone' => 'Teléfono',
'Class:Model/Attribute:type/Value:Phone+' => 'Teléfono',
'Class:Model/Attribute:physicaldevices_list' => 'Dispositivo Físico',
'Class:Model/Attribute:physicaldevices_list+' => 'Dispositivo Físico',
));
@@ -1768,10 +1768,14 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
//
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
'Menu:DataAdministration' => 'Administración de Datos',
'Menu:DataAdministration+' => 'Administración de Datos',
'Menu:Catalogs' => 'Catálogos',
'Menu:Catalogs+' => 'Tipos de Datos',
'Menu:Audit' => 'Auditoría',
'Menu:Audit+' => 'Auditoría',
'Menu:CSVImport' => 'Importar CSV',
'Menu:CSVImport+' => 'Creación o Actualización Másiva',
'Menu:Organization' => 'Organizaciones',
'Menu:Organization+' => 'Organizaciones',
'Menu:Application' => 'Aplicaciones',

View File

@@ -1269,8 +1269,8 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:Model/Attribute:type/Value:Tablet+' => 'Tablette',
'Class:Model/Attribute:type/Value:TapeLibrary' => 'Bandothèque',
'Class:Model/Attribute:type/Value:TapeLibrary+' => 'Bandothèque',
'Class:Model/Attribute:type/Value:Telephone' => 'Téléphone',
'Class:Model/Attribute:type/Value:Telephone+' => 'Téléphone',
'Class:Model/Attribute:type/Value:Phone' => 'Téléphone',
'Class:Model/Attribute:type/Value:Phone+' => 'Téléphone',
'Class:Model/Attribute:physicaldevices_list' => 'Matériels',
'Class:Model/Attribute:physicaldevices_list+' => '',
));
@@ -1717,10 +1717,14 @@ Dict::Add('FR FR', 'French', 'Français', array(
Dict::Add('FR FR', 'French', 'Français', array(
'Menu:DataAdministration' => 'Administration des données',
'Menu:DataAdministration+' => 'Administration des données',
'Menu:Catalogs' => 'Catalogues',
'Menu:Catalogs+' => 'Types de données',
'Menu:Audit' => 'Audit',
'Menu:Audit+' => 'Audit',
'Menu:CSVImport' => 'Import CSV',
'Menu:CSVImport+' => 'Import ou mise à jour en masse',
'Menu:Organization' => 'Organisations',
'Menu:Organization+' => 'Toutes les organisations',
'Menu:Application' => 'Logiciels',

View File

@@ -641,10 +641,14 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
'Class:Subnet/Tab:FreeIPs' => 'Szabad IP-k',
'Class:Subnet/Tab:FreeIPs-count' => 'Szabad IP-k: %1$s',
'Class:Subnet/Tab:FreeIPs-explain' => '10 szabad IP cím kivonata',
'Menu:DataAdministration' => 'Adat adminisztráció',
'Menu:DataAdministration+' => '',
'Menu:Catalogs' => 'Katalógusok',
'Menu:Catalogs+' => '',
'Menu:Audit' => 'Audit',
'Menu:Audit+' => '',
'Menu:CSVImport' => 'CSV import',
'Menu:CSVImport+' => '',
'Menu:Organization' => 'Szervezet',
'Menu:Organization+' => '',
'Menu:Application' => 'Alkalmazások',

View File

@@ -641,10 +641,14 @@ Dict::Add('IT IT', 'Italian', 'Italiano', array(
'Class:Subnet/Tab:FreeIPs' => 'IP liberi',
'Class:Subnet/Tab:FreeIPs-count' => 'IP liberi: %1$s',
'Class:Subnet/Tab:FreeIPs-explain' => 'Qui c\'è un estratto di 10 indirizzi IP liberi',
'Menu:DataAdministration' => 'Dati di amministrazione',
'Menu:DataAdministration+' => '',
'Menu:Catalogs' => 'Cataloghi',
'Menu:Catalogs+' => 'Tipi di dato',
'Menu:Audit' => 'Audit',
'Menu:Audit+' => 'Audit',
'Menu:CSVImport' => 'Importazione CSV',
'Menu:CSVImport+' => '',
'Menu:Organization' => 'Organizzazioni',
'Menu:Organization+' => 'Tutte le organizzazioni',
'Menu:Application' => 'Applicazioni',

View File

@@ -294,8 +294,8 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:Model/Attribute:type/Value:Tablet+' => 'タブレット',
'Class:Model/Attribute:type/Value:TapeLibrary' => 'テープライブラリ',
'Class:Model/Attribute:type/Value:TapeLibrary+' => 'テープライブラリ',
'Class:Model/Attribute:type/Value:Telephone' => '電話',
'Class:Model/Attribute:type/Value:Telephone+' => '電話',
'Class:Model/Attribute:type/Value:Phone' => '電話',
'Class:Model/Attribute:type/Value:Phone+' => '電話',
'Class:Model/Attribute:physicaldevices_list' => '物理デバイス',
'Class:Model/Attribute:physicaldevices_list+' => '',
'Class:NetworkDeviceType' => 'ネットワークデバイスタイプ',
@@ -1012,10 +1012,14 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Class:lnkGroupToCI/Attribute:group_name+' => '',
'Class:lnkGroupToCI/Attribute:ci_name' => '名前',
'Class:lnkGroupToCI/Attribute:ci_name+' => '',
'Menu:DataAdministration' => 'データ管理',
'Menu:DataAdministration+' => 'データ管理',
'Menu:Catalogs' => 'カタログ',
'Menu:Catalogs+' => 'データタイプ',
'Menu:Audit' => '監査',
'Menu:Audit+' => '監査',
'Menu:CSVImport' => 'CSV インポート',
'Menu:CSVImport+' => '一括作成/一括更新',
'Menu:Organization' => '組織',
'Menu:Organization+' => '全組織',
'Menu:Application' => 'アプリケーション',
@@ -1085,6 +1089,8 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Menu:Typology+' => 'トポロジー構成',
'Menu:Software' => 'ソフトウエアカタログ',
'Menu:Software+' => 'ソフトウエアカタログ',
'Menu:OSVersion' => 'OS バージョン',
'Menu:OSVersion+' => '',
'UI_WelcomeMenu_AllConfigItems' => 'サマリー',
'Menu:ConfigManagement:Typology' => '分類構成',
'Server:baseinfo' => '基本情報',

View File

@@ -89,6 +89,7 @@ if (!class_exists('ConfigMgmtInstaller'))
self::RenameEnumValueInDB('Software', 'type', 'Webserver', 'WebServer');
self::RenameEnumValueInDB('Model', 'type', 'SANswitch', 'SANSwitch');
self::RenameEnumValueInDB('Model', 'type', 'IpPhone', 'IPPhone');
self::RenameEnumValueInDB('Model', 'type', 'Telephone', 'Phone');
self::RenameClassInDB('DBserver', 'DBServer');
self::RenameClassInDB('OSfamily', 'OSFamily');
self::RenameClassInDB('OSversion', 'OSVersion');

File diff suppressed because it is too large Load Diff

View File

@@ -1322,8 +1322,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Class:Model/Attribute:type/Value:Tablet+' => 'Tablet',
'Class:Model/Attribute:type/Value:TapeLibrary' => 'Tape Library',
'Class:Model/Attribute:type/Value:TapeLibrary+' => 'Tape Library',
'Class:Model/Attribute:type/Value:Telephone' => 'Telefone',
'Class:Model/Attribute:type/Value:Telephone+' => 'Telefone',
'Class:Model/Attribute:type/Value:Phone' => 'Telefone',
'Class:Model/Attribute:type/Value:Phone+' => 'Telefone',
'Class:Model/Attribute:physicaldevices_list' => 'Dispositivo físico',
'Class:Model/Attribute:physicaldevices_list+' => 'Todos os dispositivos físicos correspondentes a esse modelo',
));
@@ -1764,17 +1764,20 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Menu:DataAdministration' => 'Administração Dados',
'Menu:DataAdministration+' => 'Administração Dados',
'Menu:Catalogs' => 'Catálogos',
'Menu:Catalogs+' => 'Tipos dados',
'Menu:Audit' => 'Auditoria',
'Menu:Audit+' => 'Auditoria',
'Menu:CSVImport' => 'Importar CSV',
'Menu:CSVImport+' => 'Criação ou atualização em massa',
'Menu:Organization' => 'Organizações',
'Menu:Organization+' => 'Todas organizações',
'Menu:Application' => 'Applicações',
'Menu:Application+' => 'Todas aplicações',
'Menu:DBServer' => 'Serviços Banco de Dados',
'Menu:DBServer+' => 'Serviços Banco de Dados',
'Menu:Audit' => 'Auditoria',
'Menu:ConfigManagement' => 'Gerenciamento Configurações',
'Menu:ConfigManagement+' => 'Gerenciamento Configurações',
'Menu:ConfigManagementOverview' => 'Visão geral',

View File

@@ -1322,8 +1322,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:Model/Attribute:type/Value:Tablet+' => 'Планшет',
'Class:Model/Attribute:type/Value:TapeLibrary' => 'Ленточная библиотека',
'Class:Model/Attribute:type/Value:TapeLibrary+' => 'Ленточная библиотека',
'Class:Model/Attribute:type/Value:Telephone' => 'Телефон',
'Class:Model/Attribute:type/Value:Telephone+' => 'Телефон',
'Class:Model/Attribute:type/Value:Phone' => 'Телефон',
'Class:Model/Attribute:type/Value:Phone+' => 'Телефон',
'Class:Model/Attribute:physicaldevices_list' => 'Устройства',
'Class:Model/Attribute:physicaldevices_list+' => 'Устройства',
));
@@ -1765,10 +1765,14 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
'Menu:DataAdministration' => 'Административные данные',
'Menu:DataAdministration+' => 'Административные данные',
'Menu:Catalogs' => 'Каталоги',
'Menu:Catalogs+' => 'Каталоги',
'Menu:Audit' => 'Аудит',
'Menu:Audit+' => 'Аудит',
'Menu:CSVImport' => 'Импорт CSV',
'Menu:CSVImport+' => 'Пакетное создание или обновление',
'Menu:Organization' => 'Организации',
'Menu:Organization+' => 'Все организации',
'Menu:Application' => 'Приложения',

View File

@@ -990,10 +990,14 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Menu:DataAdministration' => 'Veri Yönetimi',
'Menu:DataAdministration+' => 'Veri Yönetimi',
'Menu:Catalogs' => 'Kataloglar',
'Menu:Catalogs+' => 'Veri tipleri',
'Menu:Audit' => 'Denetleme',
'Menu:Audit+' => 'Denetleme',
'Menu:CSVImport' => 'CSV dışardan al',
'Menu:CSVImport+' => 'Çoklu yaratım veya güncelleme',
'Menu:Organization' => 'Kurumlar',
'Menu:Organization+' => 'Tüm Kurumlar',
'Menu:Application' => 'Uygulamalar',

View File

@@ -992,10 +992,14 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Menu:DataAdministration' => '数据管理',
'Menu:DataAdministration+' => '数据管理',
'Menu:Catalogs' => '目录',
'Menu:Catalogs+' => '数据类别',
'Menu:Audit' => '审计',
'Menu:Audit+' => '审计',
'Menu:CSVImport' => 'CSV 导入',
'Menu:CSVImport+' => '大批量创建或修改',
'Menu:Organization' => '组织',
'Menu:Organization+' => '所有组织',
'Menu:Application' => '应用程序',

View File

@@ -1,5 +1,5 @@
<?php
// Copyright (C) 2014 Combodo SARL
// Copyright (C) 2014-2016 Combodo SARL
//
// This file is part of iTop.
//
@@ -105,6 +105,10 @@ try
{
$oP->add("<div class=\"header_message message_info\">Sorry, iTop is in <b>demonstration mode</b>: the configuration file cannot be edited.</div>");
}
if (MetaModel::GetModuleSetting('itop-config', 'config_editor', '') == 'disabled')
{
$oP->add("<div class=\"header_message message_info\">iTop interactive edition of the configuration as been disabled. See <tt>'config_editor' => 'disabled'</tt> in the configuration file.</div>");
}
else
{
$oP->add_style(
@@ -129,27 +133,50 @@ EOF
if ($sOperation == 'save')
{
$sConfig = utils::ReadParam('new_config', '', false, 'raw_data');
$sTransactionId = utils::ReadParam('transaction_id', '');
$sOrginalConfig = utils::ReadParam('prev_config', '', false, 'raw_data');
if ($sConfig == $sOrginalConfig)
if (!utils::IsTransactionValid($sTransactionId, true))
{
$oP->add('<div id="save_result" class="header_message">'.Dict::S('config-no-change').'</div>');
$oP->add("<div class=\"header_message message_info\">Error: invalid Transaction ID. The configuration was <b>NOT</b> modified.</div>");
}
else
{
try
if ($sConfig == $sOrginalConfig)
{
TestConfig($sConfig, $oP); // throws exceptions
@chmod($sConfigFile, 0770); // Allow overwriting the file
file_put_contents($sConfigFile, $sConfig);
@chmod($sConfigFile, 0444); // Read-only
$oP->p('<div id="save_result" class="header_message message_ok">'.Dict::S('Successfully recorded.').'</div>');
$sOrginalConfig = str_replace("\r\n", "\n", file_get_contents($sConfigFile));
$oP->add('<div id="save_result" class="header_message">'.Dict::S('config-no-change').'</div>');
}
catch (Exception $e)
else
{
$oP->p('<div id="save_result" class="header_message message_error">'.$e->getMessage().'</div>');
try
{
TestConfig($sConfig, $oP); // throws exceptions
@chmod($sConfigFile, 0770); // Allow overwriting the file
$sTmpFile = tempnam(SetupUtils::GetTmpDir(), 'itop-cfg-');
// Don't write the file as-is since it would allow to inject any kind of PHP code.
// Instead write the interpreted version of the file
// Note:
// The actual raw PHP code will anyhow be interpreted exactly twice: once in TestConfig() above
// and a second time during the load of the Config object below.
// If you are really concerned about an iTop administrator crafting some malicious
// PHP code inside the config file, then turn off the interactive configuration
// editor by adding the configuration parameter:
// 'itop-config' => array(
// 'config_editor' => 'disabled',
// )
file_put_contents($sTmpFile, $sConfig);
$oTempConfig = new Config($sTmpFile, true);
$oTempConfig->WriteToFile($sConfigFile);
@unlink($sTmpFile);
@chmod($sConfigFile, 0444); // Read-only
$oP->p('<div id="save_result" class="header_message message_ok">'.Dict::S('Successfully recorded.').'</div>');
$sOrginalConfig = str_replace("\r\n", "\n", file_get_contents($sConfigFile));
}
catch (Exception $e)
{
$oP->p('<div id="save_result" class="header_message message_error">'.$e->getMessage().'</div>');
}
}
}
}
@@ -164,6 +191,7 @@ EOF
$oP->p(Dict::S('config-edit-intro'));
$oP->add("<form method=\"POST\">");
$oP->add("<input type=\"hidden\" name=\"operation\" value=\"save\">");
$oP->add("<input type=\"hidden\" name=\"transaction_id\" value=\"".utils::GetNewTransactionId()."\">");
$oP->add("<input type=\"submit\" value=\"".Dict::S('config-apply')."\"><button onclick=\"ResetConfig(); return false;\">".Dict::S('config-cancel')."</button>");
$oP->add("<span class=\"current_line\">".Dict::Format('config-current-line', "<span class=\"line_number\"></span>")."</span>");
$oP->add("<input type=\"hidden\" id=\"prev_config\" name=\"prev_config\" value=\"$sOriginalConfigEscaped\">");

View File

@@ -11,7 +11,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -194,7 +193,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -399,7 +397,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -580,7 +577,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -744,7 +740,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>

View File

@@ -11,7 +11,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -164,7 +163,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -320,7 +318,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -499,7 +496,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -655,7 +651,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -808,7 +803,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1063,7 +1057,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1252,7 +1245,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>

View File

@@ -29,7 +29,7 @@ SetupWebPage::AddModule(
array(
// Identification
//
'label' => 'End User Devices management',
'label' => 'End-user Devices Management',
'category' => 'business',
// Setup

View File

@@ -0,0 +1,217 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
//
// This file is part of iTop.
//
// iTop is free software; you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// iTop is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with iTop. If not, see <http://www.gnu.org/licenses/>
/**
* @author Erik Bøg <erik@boegmoeller.dk>
* @copyright Copyright (C) 2010-2012 Combodo SARL
* @licence http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:Incident' => 'Incident',
'Class:Incident+' => '',
'Class:Incident/Attribute:status' => 'Status',
'Class:Incident/Attribute:status+' => '',
'Class:Incident/Attribute:status/Value:new' => 'Ny',
'Class:Incident/Attribute:status/Value:new+' => '',
'Class:Incident/Attribute:status/Value:escalated_tto' => 'Eskaleret TTO',
'Class:Incident/Attribute:status/Value:escalated_tto+' => '',
'Class:Incident/Attribute:status/Value:assigned' => 'Tildelt',
'Class:Incident/Attribute:status/Value:assigned+' => '',
'Class:Incident/Attribute:status/Value:escalated_ttr' => 'Eskaleret TTR',
'Class:Incident/Attribute:status/Value:escalated_ttr+' => '',
'Class:Incident/Attribute:status/Value:pending' => 'Afventer',
'Class:Incident/Attribute:status/Value:pending+' => '',
'Class:Incident/Attribute:status/Value:resolved' => 'Løst',
'Class:Incident/Attribute:status/Value:resolved+' => '',
'Class:Incident/Attribute:status/Value:closed' => 'Lukket',
'Class:Incident/Attribute:status/Value:closed+' => '',
'Class:Incident/Attribute:impact' => 'Påvirkning',
'Class:Incident/Attribute:impact+' => '',
'Class:Incident/Attribute:impact/Value:1' => 'Afdeling',
'Class:Incident/Attribute:impact/Value:1+' => 'En afdeling er påvirket',
'Class:Incident/Attribute:impact/Value:2' => 'Service',
'Class:Incident/Attribute:impact/Value:2+' => 'En service er påvirket',
'Class:Incident/Attribute:impact/Value:3' => 'Person',
'Class:Incident/Attribute:impact/Value:3+' => 'En person er påvirket',
'Class:Incident/Attribute:priority' => 'Prioritet',
'Class:Incident/Attribute:priority+' => '',
'Class:Incident/Attribute:priority/Value:1' => 'Kritisk',
'Class:Incident/Attribute:priority/Value:1+' => '',
'Class:Incident/Attribute:priority/Value:2' => 'Høj',
'Class:Incident/Attribute:priority/Value:2+' => '',
'Class:Incident/Attribute:priority/Value:3' => 'Middel',
'Class:Incident/Attribute:priority/Value:3+' => '',
'Class:Incident/Attribute:priority/Value:4' => 'Lav',
'Class:Incident/Attribute:priority/Value:4+' => '',
'Class:Incident/Attribute:urgency' => 'Vigtighed',
'Class:Incident/Attribute:urgency+' => '',
'Class:Incident/Attribute:urgency/Value:1' => 'Kritisk',
'Class:Incident/Attribute:urgency/Value:1+' => '',
'Class:Incident/Attribute:urgency/Value:2' => 'Høj',
'Class:Incident/Attribute:urgency/Value:2+' => '',
'Class:Incident/Attribute:urgency/Value:3' => 'Middel',
'Class:Incident/Attribute:urgency/Value:3+' => '',
'Class:Incident/Attribute:urgency/Value:4' => 'Lav',
'Class:Incident/Attribute:urgency/Value:4+' => '',
'Class:Incident/Attribute:origin' => 'Oprindelse',
'Class:Incident/Attribute:origin+' => '',
'Class:Incident/Attribute:origin/Value:mail' => 'Mail',
'Class:Incident/Attribute:origin/Value:mail+' => '',
'Class:Incident/Attribute:origin/Value:monitoring' => 'Monitoring',
'Class:Incident/Attribute:origin/Value:monitoring+' => '',
'Class:Incident/Attribute:origin/Value:phone' => 'Telefon',
'Class:Incident/Attribute:origin/Value:phone+' => '',
'Class:Incident/Attribute:origin/Value:portal' => 'Portal',
'Class:Incident/Attribute:origin/Value:portal+' => '',
'Class:Incident/Attribute:service_id' => 'Ydelse',
'Class:Incident/Attribute:service_id+' => '',
'Class:Incident/Attribute:servicesubcategory_id' => 'Ydelse underkategori',
'Class:Incident/Attribute:servicesubcategory_id+' => '',
'Class:Incident/Attribute:escalation_flag' => 'Eskalations Flag',
'Class:Incident/Attribute:escalation_flag+' => '',
'Class:Incident/Attribute:escalation_flag/Value:no' => 'Nej',
'Class:Incident/Attribute:escalation_flag/Value:no+' => '',
'Class:Incident/Attribute:escalation_flag/Value:yes' => 'Ja',
'Class:Incident/Attribute:escalation_flag/Value:yes+' => '',
'Class:Incident/Attribute:escalation_reason' => 'Eskalationsgrund',
'Class:Incident/Attribute:escalation_reason+' => '',
'Class:Incident/Attribute:assignment_date' => 'Tildelt dato',
'Class:Incident/Attribute:assignment_date+' => '',
'Class:Incident/Attribute:resolution_date' => 'Løsnings dato',
'Class:Incident/Attribute:resolution_date+' => '',
'Class:Incident/Attribute:last_pending_date' => 'Sidste udsættelse dato',
'Class:Incident/Attribute:last_pending_date+' => '',
'Class:Incident/Attribute:cumulatedpending' => 'Akkumuleret ventetid',
'Class:Incident/Attribute:cumulatedpending+' => '',
'Class:Incident/Attribute:tto' => 'TTO (Time To Own)',
'Class:Incident/Attribute:tto+' => '',
'Class:Incident/Attribute:ttr' => 'TTR (Time To Resolve)',
'Class:Incident/Attribute:ttr+' => '',
'Class:Incident/Attribute:tto_escalation_deadline' => 'TTO-Deadline',
'Class:Incident/Attribute:tto_escalation_deadline+' => '',
'Class:Incident/Attribute:sla_tto_passed' => 'SLA TTO overskredet',
'Class:Incident/Attribute:sla_tto_passed+' => '',
'Class:Incident/Attribute:sla_tto_over' => 'Overskridelse SLA TTO',
'Class:Incident/Attribute:sla_tto_over+' => '',
'Class:Incident/Attribute:ttr_escalation_deadline' => 'TTR-Deadline',
'Class:Incident/Attribute:ttr_escalation_deadline+' => '',
'Class:Incident/Attribute:sla_ttr_passed' => 'SLA TTR overskredet',
'Class:Incident/Attribute:sla_ttr_passed+' => '',
'Class:Incident/Attribute:sla_ttr_over' => 'Overskridelse SLA TTR',
'Class:Incident/Attribute:sla_ttr_over+' => '',
'Class:Incident/Attribute:time_spent' => 'Tid forbrugt til løsning',
'Class:Incident/Attribute:time_spent+' => '',
'Class:Incident/Attribute:resolution_code' => 'Løsningskode',
'Class:Incident/Attribute:resolution_code+' => '',
'Class:Incident/Attribute:resolution_code/Value:assistance' => 'Assistance',
'Class:Incident/Attribute:resolution_code/Value:assistance+' => '',
'Class:Incident/Attribute:resolution_code/Value:bug fixed' => 'Bugfix',
'Class:Incident/Attribute:resolution_code/Value:bug fixed+' => '',
'Class:Incident/Attribute:resolution_code/Value:hardware repair' => 'Hardware Reparation',
'Class:Incident/Attribute:resolution_code/Value:hardware repair+' => '',
'Class:Incident/Attribute:resolution_code/Value:other' => 'Andet',
'Class:Incident/Attribute:resolution_code/Value:other+' => '',
'Class:Incident/Attribute:resolution_code/Value:software patch' => 'Software Patch',
'Class:Incident/Attribute:resolution_code/Value:software patch+' => '',
'Class:Incident/Attribute:resolution_code/Value:system update' => 'System Update',
'Class:Incident/Attribute:resolution_code/Value:system update+' => '',
'Class:Incident/Attribute:resolution_code/Value:training' => 'Uddannelse',
'Class:Incident/Attribute:resolution_code/Value:training+' => '',
'Class:Incident/Attribute:solution' => 'Løsning',
'Class:Incident/Attribute:solution+' => '',
'Class:Incident/Attribute:pending_reason' => 'Årsag til afventer',
'Class:Incident/Attribute:pending_reason+' => '',
'Class:Incident/Attribute:parent_incident_id' => 'Parent Incident',
'Class:Incident/Attribute:parent_incident_id+' => '',
'Class:Incident/Attribute:parent_change_id' => 'Parent Change',
'Class:Incident/Attribute:parent_change_id+' => '',
'Class:Incident/Attribute:child_incidents_list' => 'Afledte Incidents',
'Class:Incident/Attribute:child_incidents_list+' => '',
'Class:Incident/Attribute:public_log' => 'Offentlig Log',
'Class:Incident/Attribute:public_log+' => '',
'Class:Incident/Attribute:user_satisfaction' => 'Bruger tilfredshed',
'Class:Incident/Attribute:user_satisfaction+' => '',
'Class:Incident/Attribute:user_satisfaction/Value:1' => 'Meget tilfreds',
'Class:Incident/Attribute:user_satisfaction/Value:1+' => '',
'Class:Incident/Attribute:user_satisfaction/Value:2' => 'Tilfreds',
'Class:Incident/Attribute:user_satisfaction/Value:2+' => '',
'Class:Incident/Attribute:user_satisfaction/Value:3' => 'Nogenlunde tilfreds',
'Class:Incident/Attribute:user_satisfaction/Value:3+' => '',
'Class:Incident/Attribute:user_satisfaction/Value:4' => 'Meget utilfreds',
'Class:Incident/Attribute:user_satisfaction/Value:4+' => '',
'Class:Incident/Attribute:user_comment' => 'Bruger kommentar',
'Class:Incident/Attribute:user_comment+' => '',
'Class:Incident/Stimulus:ev_assign' => 'Tildelt',
'Class:Incident/Stimulus:ev_assign+' => '',
'Class:Incident/Stimulus:ev_reassign' => 'Forny tildeling',
'Class:Incident/Stimulus:ev_reassign+' => '',
'Class:Incident/Stimulus:ev_pending' => 'Afventer',
'Class:Incident/Stimulus:ev_pending+' => '',
'Class:Incident/Stimulus:ev_timeout' => 'Timeout',
'Class:Incident/Stimulus:ev_timeout+' => '',
'Class:Incident/Stimulus:ev_autoresolve' => 'Automatisk løst',
'Class:Incident/Stimulus:ev_autoresolve+' => '',
'Class:Incident/Stimulus:ev_autoclose' => 'Automatisk lukket',
'Class:Incident/Stimulus:ev_autoclose+' => '',
'Class:Incident/Stimulus:ev_resolve' => 'Marker som løst',
'Class:Incident/Stimulus:ev_resolve+' => '',
'Class:Incident/Stimulus:ev_close' => 'Luk denne Request',
'Class:Incident/Stimulus:ev_close+' => '',
'Class:Incident/Stimulus:ev_reopen' => 'Genåben',
'Class:Incident/Stimulus:ev_reopen+' => '',
'Menu:IncidentManagement' => 'Incident Management',
'Menu:IncidentManagement+' => '',
'Menu:Incident:Overview' => 'Oversigt',
'Menu:Incident:Overview+' => '',
'Menu:NewIncident' => 'Ny Incident',
'Menu:NewIncident+' => '',
'Menu:SearchIncidents' => 'Søg efter Incidents',
'Menu:SearchIncidents+' => '',
'Menu:Incident:Shortcuts' => 'Genveje',
'Menu:Incident:Shortcuts+' => '',
'Menu:Incident:MyIncidents' => 'Mine Incidents',
'Menu:Incident:MyIncidents+' => '',
'Menu:Incident:EscalatedIncidents' => 'Eskalerede Incidents',
'Menu:Incident:EscalatedIncidents+' => '',
'Menu:Incident:OpenIncidents' => 'Alle åbne Incidents',
'Menu:Incident:OpenIncidents+' => '',
'Menu:Incident:UnassignedIncidents' => 'Ikke tildelte Incidents',
'Menu:Incident:UnassignedIncidents+' => '',
'Menu:Incident:HelpdeskIncidents' => 'Level2 tildelte Incidents',
'Menu:Incident:HelpdeskIncidents+' => '',
'UI-IncidentManagementOverview-IncidentByPriority-last-14-days' => 'Incidents de sidste 14 dage efter prioritet',
'UI-IncidentManagementOverview-Last-14-days' => 'Antal Incidents de sidste 14 dage',
'UI-IncidentManagementOverview-OpenIncidentByStatus' => 'Åbne Incidents efter status',
'UI-IncidentManagementOverview-OpenIncidentByAgent' => 'Åbne Incidents efter tildelt til',
'UI-IncidentManagementOverview-OpenIncidentByCustomer' => 'Åbne Incidents efter bruger',
'Class:Incident/Attribute:status/Value:waiting_for_approval' => 'Afventer godkendelse',
'Class:Incident/Attribute:status/Value:waiting_for_approval+' => '',
'Class:Incident/Attribute:service_name' => 'Ydelsesnavn',
'Class:Incident/Attribute:service_name+' => '',
'Class:Incident/Attribute:servicesubcategory_name' => 'Ydelses underkategorinavn',
'Class:Incident/Attribute:servicesubcategory_name+' => '',
'Class:Incident/Attribute:parent_incident_ref' => 'Parent-Incident-Reference',
'Class:Incident/Attribute:parent_incident_ref+' => '',
'Class:Incident/Attribute:parent_change_ref' => 'Parent-Change-Reference',
'Class:Incident/Attribute:parent_change_ref+' => '',
'Class:Incident/Attribute:parent_incident_id_friendlyname' => 'Parent-Incident-Friendly Name',
'Class:Incident/Attribute:parent_incident_id_friendlyname+' => '',
));
?>

View File

@@ -29,7 +29,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ref"/>
</attributes>
@@ -82,6 +81,10 @@
<value id="3">3</value>
<value id="4">4</value>
</values>
<dependencies>
<attribute id="impact"/>
<attribute id="urgency"/>
</dependencies>
<sql>priority</sql>
<default_value>4</default_value>
<is_null_allowed>false</is_null_allowed>
@@ -485,7 +488,10 @@
<target>assigned</target>
<actions>
<action>
<verb>SetAssignedDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">assignment_date</param>
</params>
</action>
</actions>
</transition>
@@ -497,10 +503,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -560,7 +578,10 @@
<target>pending</target>
<actions>
<action>
<verb>SetLastPendingDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">last_pending_date</param>
</params>
</action>
</actions>
</transition>
@@ -568,10 +589,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -587,10 +620,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -607,7 +652,10 @@
<target>pending</target>
<actions>
<action>
<verb>SetLastPendingDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">last_pending_date</param>
</params>
</action>
</actions>
</transition>
@@ -615,10 +663,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -630,10 +690,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -669,10 +741,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -766,7 +850,10 @@
<target>closed</target>
<actions>
<action>
<verb>SetClosureDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">close_date</param>
</params>
</action>
</actions>
</transition>
@@ -779,10 +866,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -838,6 +937,10 @@
</lifecycle>
<methods>
<method id="SetAssignedDate">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentDate() instead
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
@@ -848,6 +951,10 @@
}]]></code>
</method>
<method id="SetLastPendingDate">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentDate() instead
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
@@ -858,6 +965,10 @@
}]]></code>
</method>
<method id="SetResolveDate">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentDate() and SetElapsedTime() instead
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
@@ -870,6 +981,10 @@
}]]></code>
</method>
<method id="SetClosureDate">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentDate() instead
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
@@ -925,7 +1040,11 @@
4 => 4,
),
);
$iPriority = $aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')];
$iPriority = 1;
if (isset($aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')]))
{
$iPriority = $aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')];
}
return $iPriority;
}]]></code>
</method>
@@ -973,20 +1092,17 @@
}]]></code>
</method>
<method id="resolveChilds">
<comment><![CDATA[/**
* To be deprecated: use ResolveChildTickets() instead
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
<code><![CDATA[ public function resolveChilds($sStimulusCode)
{
$oMyChange = MetaModel::NewObject("CMDBChange");
$oMyChange->Set("date", time());
$sUserString = CMDBChange::GetCurrentUserName();
$oMyChange->Set("userinfo", $sUserString."(automatic resolution)");
$iChangeId = $oMyChange->DBInsert();
if (MetaModel::IsValidClass('UserRequest'))
{
$sOQL = "SELECT UserRequest WHERE parent_request_id=:ticket";
$sOQL = "SELECT UserRequest WHERE parent_incident_id=:ticket";
$oChildRequestSet = new DBObjectSet(DBObjectSearch::FromOQL($sOQL),
array(),
array(
@@ -1005,7 +1121,7 @@
$oRequest->set('resolution_code',$this->Get('resolution_code'));
$oRequest->set('solution','Automatically resolved by incident:[[Incident:'.$this->Get('ref').']]');
$oRequest->ApplyStimulus('ev_autoresolve');
$oRequest->DBUpdateTracked($oMyChange);
$oRequest->DBUpdate();
}
}
}
@@ -1029,13 +1145,70 @@
$oIncident->set('resolution_code',$this->Get('resolution_code'));
$oIncident->set('solution','Automatically resolved by incident:[[Incident:'.$this->Get('ref').']]');
$oIncident->ApplyStimulus('ev_autoresolve');
$oIncident->DBUpdateTracked($oMyChange);
$oIncident->DBUpdate();
}
}
return true;
}]]></code>
</method>
<method id="ResolveChildTickets">
<comment><![CDATA[/**
* Cascade the resolution to child User Request and Incidents
* @return true (returning false would stop the ongoing transition)
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
<arguments>
</arguments>
<code><![CDATA[ public function ResolveChildTickets()
{
if (MetaModel::IsValidClass('UserRequest'))
{
// Automatically resolve child requests
$sOQL = "SELECT UserRequest WHERE parent_incident_id = :ticket AND status != 'resolved'";
$oChildRequestSet = new DBObjectSet(DBObjectSearch::FromOQL($sOQL), array(), array('ticket' => $this->GetKey()));
while($oRequest = $oChildRequestSet->Fetch())
{
$oRequest->ResolveFrom($this);
}
}
// Automatically resolve child incidents
$sOQL = "SELECT Incident WHERE parent_incident_id = :ticket AND status != 'resolved'";
$oChildIncidentSet = new DBObjectSet(DBObjectSearch::FromOQL($sOQL), array(), array('ticket' => $this->GetKey()));
while($oIncident = $oChildIncidentSet->Fetch())
{
$oIncident->ResolveFrom($this);
}
return true;
}]]></code>
</method>
<method id="ResolveFrom">
<comment><![CDATA[/**
* Resolve the ticket from another resolved ticket
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>Internal</type>
<code><![CDATA[ public function ResolveFrom($oParentTicket)
{
if ($this->Get('status') != 'resolved')
{
$this->Set('servicesubcategory_id', $oParentTicket->Get('servicesubcategory_id'));
$this->Set('service_id', $oParentTicket->Get('service_id'));
$this->Set('team_id', $oParentTicket->Get('team_id'));
$this->Set('agent_id', $oParentTicket->Get('agent_id'));
$this->Set('resolution_code', $oParentTicket->Get('resolution_code'));
$sParent = '[['.get_class($oParentTicket).':'.$oParentTicket->Get('ref').']]';
$this->Set('solution', Dict::Format('Tickets:ResolvedFrom', $sParent, MetaModel::GetName(get_class($oParentTicket))));
$this->ApplyStimulus('ev_autoresolve');
$this->DBUpdate();
}
}]]></code>
</method>
<method id="UpdateChildRequestLog">
<static>false</static>
<access>public</access>

View File

@@ -1,5 +1,5 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
// Copyright (C) 2010-2014 Combodo SARL
//
// This file is part of iTop.
//
@@ -198,6 +198,8 @@ Dict::Add('EN US', 'English', 'English', array(
'Class:Incident/Attribute:parent_change_id+' => '',
'Class:Incident/Attribute:parent_change_ref' => 'Parent change ref',
'Class:Incident/Attribute:parent_change_ref+' => '',
'Class:Incident/Attribute:related_request_list' => 'Child requests',
'Class:Incident/Attribute:related_request_list+' => '',
'Class:Incident/Attribute:child_incidents_list' => 'Child incidents',
'Class:Incident/Attribute:child_incidents_list+' => 'All the child incidents related to this incident',
'Class:Incident/Attribute:public_log' => 'Public log',
@@ -235,7 +237,7 @@ Dict::Add('EN US', 'English', 'English', array(
'Class:Incident/Stimulus:ev_reopen' => 'Re-open',
'Class:Incident/Stimulus:ev_reopen+' => '',
'Class:Incident/Error:CannotAssignParentIncidentIdToSelf' => 'Cannot assign the Parent incident to the incident itself',
'Class:Incident/Method:ResolveChildTickets' => 'ResolveChildTickets',
'Class:Incident/Method:ResolveChildTickets+' => 'Cascade the resolution to child ticket (ev_autoresolve), and align the following characteristics: service, team, agent, resolution info',
));
?>

View File

@@ -1,5 +1,5 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
// Copyright (C) 2010-2014 Combodo SARL
//
// This file is part of iTop.
//
@@ -218,5 +218,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'UI-IncidentManagementOverview-OpenIncidentByStatus' => 'Incidents ouverts par statut',
'UI-IncidentManagementOverview-OpenIncidentByAgent' => 'Incidents ouverts par agent',
'UI-IncidentManagementOverview-OpenIncidentByCustomer' => 'Incidents ouverts par client',
'Class:Incident/Method:ResolveChildTickets' => 'ResolveChildTickets (résoudre les tickets fils)',
'Class:Incident/Method:ResolveChildTickets+' => 'Cascader l\'action de résolution du ticket (ev_autoresolve) vers les requêtes et incidents fils, et aligner les caractéristiques suivantes : service, équipe, agent, information de résolution',
));
?>

View File

@@ -7,7 +7,7 @@ SetupWebPage::AddModule(
array(
// Identification
//
'label' => 'Incident Management ITIL V3',
'label' => 'Incident Management ITIL',
'category' => 'business',
// Setup

View File

@@ -0,0 +1,126 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
//
// This file is part of iTop.
//
// iTop is free software; you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// iTop is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with iTop. If not, see <http://www.gnu.org/licenses/>
/**
* @author Erik Bøg <erik@boegmoeller.dk>
* @copyright Copyright (C) 2010-2012 Combodo SARL
* @licence http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:KnownError' => 'Known Error',
'Class:KnownError+' => 'Dokumenterede fejl for et bestående Issue',
'Class:KnownError/Attribute:name' => 'Navn',
'Class:KnownError/Attribute:name+' => '',
'Class:KnownError/Attribute:org_id' => 'Kunde',
'Class:KnownError/Attribute:org_id+' => '',
'Class:KnownError/Attribute:problem_id' => 'Tilhørende problem',
'Class:KnownError/Attribute:problem_id+' => '',
'Class:KnownError/Attribute:symptom' => 'Symptom',
'Class:KnownError/Attribute:symptom+' => '',
'Class:KnownError/Attribute:root_cause' => 'Grund årsag',
'Class:KnownError/Attribute:root_cause+' => '',
'Class:KnownError/Attribute:workaround' => 'Workaround',
'Class:KnownError/Attribute:workaround+' => '',
'Class:KnownError/Attribute:solution' => 'Løsning',
'Class:KnownError/Attribute:solution+' => '',
'Class:KnownError/Attribute:error_code' => 'Fejlkode',
'Class:KnownError/Attribute:error_code+' => '',
'Class:KnownError/Attribute:domain' => 'Område',
'Class:KnownError/Attribute:domain+' => '',
'Class:KnownError/Attribute:domain/Value:Application' => 'Anvendelse',
'Class:KnownError/Attribute:domain/Value:Application+' => 'Anvendelse',
'Class:KnownError/Attribute:domain/Value:Desktop' => 'Desktop',
'Class:KnownError/Attribute:domain/Value:Desktop+' => 'Desktop',
'Class:KnownError/Attribute:domain/Value:Network' => 'Netværk',
'Class:KnownError/Attribute:domain/Value:Network+' => 'Netværk',
'Class:KnownError/Attribute:domain/Value:Server' => 'Server',
'Class:KnownError/Attribute:domain/Value:Server+' => 'Server',
'Class:KnownError/Attribute:vendor' => 'Leverandør',
'Class:KnownError/Attribute:vendor+' => '',
'Class:KnownError/Attribute:model' => 'Model',
'Class:KnownError/Attribute:model+' => '',
'Class:KnownError/Attribute:version' => 'Version',
'Class:KnownError/Attribute:version+' => '',
'Class:KnownError/Attribute:ci_list' => 'CIs',
'Class:KnownError/Attribute:ci_list+' => '',
'Class:KnownError/Attribute:document_list' => 'Dokumenter',
'Class:KnownError/Attribute:document_list+' => '',
'Class:lnkErrorToFunctionalCI' => 'Sammenhæng Fejl/FunctionalCI',
'Class:lnkErrorToFunctionalCI+' => '',
'Class:lnkErrorToFunctionalCI/Attribute:functionalci_id' => 'CI',
'Class:lnkErrorToFunctionalCI/Attribute:functionalci_id+' => '',
'Class:lnkErrorToFunctionalCI/Attribute:error_id' => 'Fejl',
'Class:lnkErrorToFunctionalCI/Attribute:error_id+' => '',
'Class:lnkErrorToFunctionalCI/Attribute:reason' => 'Årsag',
'Class:lnkErrorToFunctionalCI/Attribute:reason+' => '',
'Class:lnkDocumentToError' => 'Sammenhæng Dokumenter/Fejl',
'Class:lnkDocumentToError+' => '',
'Class:lnkDocumentToError/Attribute:document_id' => 'Dokument',
'Class:lnkDocumentToError/Attribute:document_id+' => '',
'Class:lnkDocumentToError/Attribute:error_id' => 'Fejl',
'Class:lnkDocumentToError/Attribute:error_id+' => '',
'Class:lnkDocumentToError/Attribute:link_type' => 'Sammenhængstype',
'Class:lnkDocumentToError/Attribute:link_type+' => '',
'Class:FAQ' => 'FAQ',
'Class:FAQ+' => '',
'Class:FAQ/Attribute:title' => 'Titel',
'Class:FAQ/Attribute:title+' => '',
'Class:FAQ/Attribute:summary' => 'Sammenfatning',
'Class:FAQ/Attribute:summary+' => '',
'Class:FAQ/Attribute:description' => 'Beskrivelse',
'Class:FAQ/Attribute:description+' => '',
'Class:FAQ/Attribute:category_id' => 'Kategori',
'Class:FAQ/Attribute:category_id+' => '',
'Class:FAQ/Attribute:error_code' => 'Fejlkode',
'Class:FAQ/Attribute:error_code+' => '',
'Class:FAQ/Attribute:key_words' => 'Nøgleord',
'Class:FAQ/Attribute:key_words+' => '',
'Class:FAQCategory' => 'FAQ-Kategori',
'Class:FAQCategory+' => '',
'Class:FAQCategory/Attribute:name' => 'Navn',
'Class:FAQCategory/Attribute:name+' => '',
'Class:FAQCategory/Attribute:faq_list' => 'FAQs',
'Class:FAQCategory/Attribute:faq_list+' => '',
'Class:KnownError/Attribute:cust_name' => 'Kundennavn',
'Class:KnownError/Attribute:cust_name+' => '',
'Class:KnownError/Attribute:problem_ref' => 'Reference',
'Class:KnownError/Attribute:problem_ref+' => '',
'Class:lnkErrorToFunctionalCI/Attribute:functionalci_name' => 'CI-Navn',
'Class:lnkErrorToFunctionalCI/Attribute:functionalci_name+' => '',
'Class:lnkErrorToFunctionalCI/Attribute:error_name' => 'Fejlnavn',
'Class:lnkErrorToFunctionalCI/Attribute:error_name+' => '',
'Class:lnkDocumentToError/Attribute:document_name' => 'Dokumentnavn',
'Class:lnkDocumentToError/Attribute:document_name+' => '',
'Class:lnkDocumentToError/Attribute:error_name' => 'Fejlnavn',
'Class:lnkDocumentToError/Attribute:error_name+' => '',
'Class:FAQ/Attribute:category_name' => 'Kategorinavn',
'Class:FAQ/Attribute:category_name+' => '',
'Menu:NewError' => 'Ny kendt fejl',
'Menu:NewError+' => '',
'Menu:SearchError' => 'Søg efter kendte fejl',
'Menu:SearchError+' => '',
'Menu:Problem:KnownErrors' => 'Alle kendte Fejl',
'Menu:Problem:KnownErrors+' => 'Alle kendte Fejl',
'Menu:FAQCategory' => 'FAQ-Kategorier',
'Menu:FAQCategory+' => '',
'Menu:FAQ' => 'FAQs',
'Menu:FAQ+' => '',
));
?>

View File

@@ -14,7 +14,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -225,7 +224,6 @@
<db_key_field>link_id</db_key_field>
<db_final_class_field/>
<naming>
<format>lnkErrorToFunctionalCI</format>
<attributes/>
</naming>
<display_template/>
@@ -318,7 +316,6 @@
<db_key_field>link_id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="link_type"/>
</attributes>
@@ -399,7 +396,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="title"/>
</attributes>
@@ -517,7 +513,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>

View File

@@ -0,0 +1,193 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
//
// This file is part of iTop.
//
// iTop is free software; you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// iTop is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with iTop. If not, see <http://www.gnu.org/licenses/>
/**
* @author LinProfs <info@linprofs.com>
*
* Linux & Open Source Professionals
* http://www.linprofs.com
*
* @copyright Copyright (C) 2010-2012 Combodo SARL
* @licence http://opensource.org/licenses/AGPL-3.0
*/
// Dictionnay conventions
// Class:<class_name>
// Class:<class_name>+
// Class:<class_name>/Attribute:<attribute_code>
// Class:<class_name>/Attribute:<attribute_code>+
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
// Class:<class_name>/Stimulus:<stimulus_code>
// Class:<class_name>/Stimulus:<stimulus_code>+
//////////////////////////////////////////////////////////////////////
// Classes in 'bizmodel'
//////////////////////////////////////////////////////////////////////
//
// Dictionnay conventions
// Class:<class_name>
// Class:<class_name>+
// Class:<class_name>/Attribute:<attribute_code>
// Class:<class_name>/Attribute:<attribute_code>+
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
// Class:<class_name>/Stimulus:<stimulus_code>
// Class:<class_name>/Stimulus:<stimulus_code>+
//
// Class: KnownError
//
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'Class:KnownError' => 'Bekende Fout',
'Class:KnownError+' => 'Error documented for a known issue',
'Class:KnownError/Attribute:name' => 'Naam',
'Class:KnownError/Attribute:name+' => '',
'Class:KnownError/Attribute:org_id' => 'Klant',
'Class:KnownError/Attribute:org_id+' => '',
'Class:KnownError/Attribute:cust_name' => 'Klant Naam',
'Class:KnownError/Attribute:cust_name+' => '',
'Class:KnownError/Attribute:problem_id' => 'Gerelateerde Probleem',
'Class:KnownError/Attribute:problem_id+' => '',
'Class:KnownError/Attribute:problem_ref' => 'Gerelateerde Probleem Ref',
'Class:KnownError/Attribute:problem_ref+' => '',
'Class:KnownError/Attribute:symptom' => 'Symptoon',
'Class:KnownError/Attribute:symptom+' => '',
'Class:KnownError/Attribute:root_cause' => 'Hoofd Oorzaak',
'Class:KnownError/Attribute:root_cause+' => '',
'Class:KnownError/Attribute:workaround' => 'Work around',
'Class:KnownError/Attribute:workaround+' => '',
'Class:KnownError/Attribute:solution' => 'Oplossing',
'Class:KnownError/Attribute:solution+' => '',
'Class:KnownError/Attribute:error_code' => 'Fout Code',
'Class:KnownError/Attribute:error_code+' => '',
'Class:KnownError/Attribute:domain' => 'Domein',
'Class:KnownError/Attribute:domain+' => '',
'Class:KnownError/Attribute:domain/Value:Application' => 'Applicatie',
'Class:KnownError/Attribute:domain/Value:Application+' => 'Applicatie',
'Class:KnownError/Attribute:domain/Value:Desktop' => 'Desktop',
'Class:KnownError/Attribute:domain/Value:Desktop+' => 'Desktop',
'Class:KnownError/Attribute:domain/Value:Network' => 'Netwerk',
'Class:KnownError/Attribute:domain/Value:Network+' => 'Netwerk',
'Class:KnownError/Attribute:domain/Value:Server' => 'Server',
'Class:KnownError/Attribute:domain/Value:Server+' => 'Server',
'Class:KnownError/Attribute:vendor' => 'Verkoper',
'Class:KnownError/Attribute:vendor+' => '',
'Class:KnownError/Attribute:model' => 'Model',
'Class:KnownError/Attribute:model+' => '',
'Class:KnownError/Attribute:version' => 'Versie',
'Class:KnownError/Attribute:version+' => '',
'Class:KnownError/Attribute:ci_list' => 'CIs',
'Class:KnownError/Attribute:ci_list+' => 'Alle configuratie items die gerelateerd zijn aan deze bekende fout',
'Class:KnownError/Attribute:document_list' => 'Documenten',
'Class:KnownError/Attribute:document_list+' => 'Alle documenten die gelinkt zijn aan deze bekende fout',
));
//
// Class: lnkErrorToFunctionalCI
//
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'Class:lnkErrorToFunctionalCI' => 'Link Error / FunctionalCI',
'Class:lnkErrorToFunctionalCI+' => 'Infra gerelateerd aan een bekende fout',
'Class:lnkErrorToFunctionalCI/Attribute:functionalci_id' => 'CI',
'Class:lnkErrorToFunctionalCI/Attribute:functionalci_id+' => '',
'Class:lnkErrorToFunctionalCI/Attribute:functionalci_name' => 'CI naam',
'Class:lnkErrorToFunctionalCI/Attribute:functionalci_name+' => '',
'Class:lnkErrorToFunctionalCI/Attribute:error_id' => 'Fout',
'Class:lnkErrorToFunctionalCI/Attribute:error_id+' => '',
'Class:lnkErrorToFunctionalCI/Attribute:error_name' => 'Fout naam',
'Class:lnkErrorToFunctionalCI/Attribute:error_name+' => '',
'Class:lnkErrorToFunctionalCI/Attribute:reason' => 'Reden',
'Class:lnkErrorToFunctionalCI/Attribute:reason+' => '',
));
//
// Class: lnkDocumentToError
//
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'Class:lnkDocumentToError' => 'Link Documenten / Fouten',
'Class:lnkDocumentToError+' => 'Een link tussen een document en een bekende fout',
'Class:lnkDocumentToError/Attribute:document_id' => 'Document',
'Class:lnkDocumentToError/Attribute:document_id+' => '',
'Class:lnkDocumentToError/Attribute:document_name' => 'Document Naam',
'Class:lnkDocumentToError/Attribute:document_name+' => '',
'Class:lnkDocumentToError/Attribute:error_id' => 'Fout',
'Class:lnkDocumentToError/Attribute:error_id+' => '',
'Class:lnkDocumentToError/Attribute:error_name' => 'Fout naam',
'Class:lnkDocumentToError/Attribute:error_name+' => '',
'Class:lnkDocumentToError/Attribute:link_type' => 'link_type',
'Class:lnkDocumentToError/Attribute:link_type+' => '',
));
//
// Class: FAQ
//
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'Class:FAQ' => 'FAQ',
'Class:FAQ+' => 'Frequently asked questions',
'Class:FAQ/Attribute:title' => 'Titel',
'Class:FAQ/Attribute:title+' => '',
'Class:FAQ/Attribute:summary' => 'Samenvatting',
'Class:FAQ/Attribute:summary+' => '',
'Class:FAQ/Attribute:description' => 'Omschrijving',
'Class:FAQ/Attribute:description+' => '',
'Class:FAQ/Attribute:category_id' => 'Categorie',
'Class:FAQ/Attribute:category_id+' => '',
'Class:FAQ/Attribute:category_name' => 'Categorie naam',
'Class:FAQ/Attribute:category_name+' => '',
'Class:FAQ/Attribute:error_code' => 'Fout code',
'Class:FAQ/Attribute:error_code+' => '',
'Class:FAQ/Attribute:key_words' => 'Zoek termen',
'Class:FAQ/Attribute:key_words+' => '',
));
//
// Class: FAQCategory
//
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'Class:FAQCategory' => 'FAQ Categorie',
'Class:FAQCategory+' => 'Categoryie voor de FAQ',
'Class:FAQCategory/Attribute:name' => 'Naam',
'Class:FAQCategory/Attribute:name+' => '',
'Class:FAQCategory/Attribute:faq_list' => 'FAQs',
'Class:FAQCategory/Attribute:faq_list+' => 'Alle frequently asked questions gerelateerd aan deze categorie',
));
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'Menu:ProblemManagement' => 'Probleem Management',
'Menu:ProblemManagement+' => 'Probleem Management',
'Menu:Problem:Shortcuts' => 'Snelkoppelingen',
'Menu:NewError' => 'Nieuwe bekende fout',
'Menu:NewError+' => 'Creatie van een nieuwe bekende fout',
'Menu:SearchError' => 'Zoek naar bekende fouten',
'Menu:SearchError+' => 'Zoek naar bekende fouten',
'Menu:Problem:KnownErrors' => 'Alle bekende fouten',
'Menu:Problem:KnownErrors+' => 'Alle bekende fouten',
'Menu:FAQCategory' => 'FAQ categorieen',
'Menu:FAQCategory+' => 'Alle FAQ categorieen',
'Menu:FAQ' => 'FAQs',
'Menu:FAQ+' => 'Alle FAQs',
));
?>

View File

@@ -0,0 +1,119 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
//
// This file is part of iTop.
//
// iTop is free software; you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// iTop is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with iTop. If not, see <http://www.gnu.org/licenses/>
/**
* @author Erik Bøg <erik@boegmoeller.dk>
* @copyright Copyright (C) 2010-2012 Combodo SARL
* @licence http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:Problem' => 'Problem',
'Class:Problem+' => '',
'Class:Problem/Attribute:status' => 'Status',
'Class:Problem/Attribute:status+' => '',
'Class:Problem/Attribute:status/Value:new' => 'Ny',
'Class:Problem/Attribute:status/Value:new+' => '',
'Class:Problem/Attribute:status/Value:assigned' => 'Tildelt',
'Class:Problem/Attribute:status/Value:assigned+' => '',
'Class:Problem/Attribute:status/Value:resolved' => 'Løst',
'Class:Problem/Attribute:status/Value:resolved+' => '',
'Class:Problem/Attribute:status/Value:closed' => 'Lukket',
'Class:Problem/Attribute:status/Value:closed+' => '',
'Class:Problem/Attribute:service_id' => 'Service',
'Class:Problem/Attribute:service_id+' => '',
'Class:Problem/Attribute:servicesubcategory_id' => 'Service Kategori',
'Class:Problem/Attribute:servicesubcategory_id+' => '',
'Class:Problem/Attribute:product' => 'Produkt',
'Class:Problem/Attribute:product+' => '',
'Class:Problem/Attribute:impact' => 'Påvirkning',
'Class:Problem/Attribute:impact+' => '',
'Class:Problem/Attribute:impact/Value:1' => 'Afdeling',
'Class:Problem/Attribute:impact/Value:1+' => 'En afdeling er påvirket',
'Class:Problem/Attribute:impact/Value:2' => 'Service',
'Class:Problem/Attribute:impact/Value:2+' => 'En service er påvirket',
'Class:Problem/Attribute:impact/Value:3' => 'Person',
'Class:Problem/Attribute:impact/Value:3+' => 'En person er påvirket',
'Class:Problem/Attribute:urgency' => 'Vigtighed',
'Class:Problem/Attribute:urgency+' => '',
'Class:Problem/Attribute:urgency/Value:1' => 'Lav',
'Class:Problem/Attribute:urgency/Value:1+' => 'Lav',
'Class:Problem/Attribute:urgency/Value:2' => 'Middel',
'Class:Problem/Attribute:urgency/Value:2+' => 'Middel',
'Class:Problem/Attribute:urgency/Value:3' => 'Høj',
'Class:Problem/Attribute:urgency/Value:3+' => 'Høj',
'Class:Problem/Attribute:urgency/Value:4' => '',
'Class:Problem/Attribute:urgency/Value:4+' => '',
'Class:Problem/Attribute:priority' => 'Prioritet',
'Class:Problem/Attribute:priority+' => '',
'Class:Problem/Attribute:priority/Value:1' => 'Lav',
'Class:Problem/Attribute:priority/Value:1+' => '',
'Class:Problem/Attribute:priority/Value:2' => 'Middel',
'Class:Problem/Attribute:priority/Value:2+' => '',
'Class:Problem/Attribute:priority/Value:3' => 'Høj',
'Class:Problem/Attribute:priority/Value:3+' => '',
'Class:Problem/Attribute:priority/Value:4' => '',
'Class:Problem/Attribute:priority/Value:4+' => '',
'Class:Problem/Attribute:related_change_id' => 'Relateret Change',
'Class:Problem/Attribute:related_change_id+' => '',
'Class:Problem/Attribute:assignment_date' => 'Dato tildelt',
'Class:Problem/Attribute:assignment_date+' => '',
'Class:Problem/Attribute:resolution_date' => 'Dato løst',
'Class:Problem/Attribute:resolution_date+' => '',
'Class:Problem/Attribute:knownerrors_list' => 'Known Errors',
'Class:Problem/Attribute:knownerrors_list+' => '',
'Class:Problem/Attribute:related_request_list' => 'Relateret Requests',
'Class:Problem/Attribute:related_request_list+' => '',
'Class:Problem/Stimulus:ev_assign' => 'Tildel',
'Class:Problem/Stimulus:ev_assign+' => '',
'Class:Problem/Stimulus:ev_reassign' => 'Forny tildeling',
'Class:Problem/Stimulus:ev_reassign+' => '',
'Class:Problem/Stimulus:ev_resolve' => 'Løs',
'Class:Problem/Stimulus:ev_resolve+' => '',
'Class:Problem/Stimulus:ev_close' => 'Luk',
'Class:Problem/Stimulus:ev_close+' => '',
'Menu:ProblemManagement' => 'Problem Management',
'Menu:ProblemManagement+' => 'Problem Management',
'Menu:Problem:Overview' => 'Oversigt',
'Menu:Problem:Overview+' => 'Oversigt',
'Menu:NewProblem' => 'Nyt Problem',
'Menu:NewProblem+' => 'Nyt Problem',
'Menu:SearchProblems' => 'Søg efter problem',
'Menu:SearchProblems+' => 'Søg efter problem',
'Menu:Problem:Shortcuts' => 'Genvej',
'Menu:Problem:MyProblems' => 'Mine Problemer',
'Menu:Problem:MyProblems+' => 'Mine Problemer',
'Menu:Problem:OpenProblems' => 'Alle uløste problemer',
'Menu:Problem:OpenProblems+' => 'Alle uløste problemer',
'UI-ProblemManagementOverview-ProblemByService' => 'Problemer efter ydelse',
'UI-ProblemManagementOverview-ProblemByService+' => 'Problemer efter ydelse',
'UI-ProblemManagementOverview-ProblemByPriority' => 'Problemer efter prioritet',
'UI-ProblemManagementOverview-ProblemByPriority+' => 'Problemer efter prioritet',
'UI-ProblemManagementOverview-ProblemUnassigned' => 'Ikke tildelte problemer',
'UI-ProblemManagementOverview-ProblemUnassigned+' => 'Ikke tildelte problemer',
'UI:ProblemMgmtMenuOverview:Title' => 'Dashboard for problem Management',
'UI:ProblemMgmtMenuOverview:Title+' => 'Dashboard for problem Management',
'Class:Problem/Attribute:service_name' => 'Navn',
'Class:Problem/Attribute:service_name+' => '',
'Class:Problem/Attribute:servicesubcategory_name' => 'Navn',
'Class:Problem/Attribute:servicesubcategory_name+' => '',
'Class:Problem/Attribute:related_change_ref' => 'Ref',
'Class:Problem/Attribute:related_change_ref+' => '',
));
?>

View File

@@ -17,7 +17,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ref"/>
</attributes>
@@ -153,6 +152,13 @@
<count_min>0</count_min>
<count_max>0</count_max>
</field>
<field id="related_incident_list" xsi:type="AttributeLinkedSet">
<linked_class>Incident</linked_class>
<ext_key_to_me>parent_problem_id</ext_key_to_me>
<edit_mode>add_remove</edit_mode>
<count_min>0</count_min>
<count_max>0</count_max>
</field>
</fields>
<lifecycle>
<attribute>status</attribute>
@@ -222,7 +228,10 @@
<target>assigned</target>
<actions>
<action>
<verb>SetAssignedDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">assignment_date</param>
</params>
</action>
</actions>
</transition>
@@ -259,7 +268,10 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
</actions>
</transition>
@@ -311,7 +323,10 @@
<target>closed</target>
<actions>
<action>
<verb>SetClosureDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">close_date</param>
</params>
</action>
</actions>
</transition>
@@ -345,6 +360,10 @@
</lifecycle>
<methods>
<method id="SetAssignedDate">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentDate() instead
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
@@ -355,6 +374,10 @@
}]]></code>
</method>
<method id="SetResolveDate">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentDate() instead
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
@@ -365,6 +388,10 @@
}]]></code>
</method>
<method id="SetClosureDate">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentDate() instead
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
@@ -407,7 +434,11 @@
4 => 4,
),
);
$iPriority = $aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')];
$iPriority = 1;
if (isset($aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')]))
{
$iPriority = $aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')];
}
return $iPriority;
}]]></code>
</method>
@@ -459,6 +490,9 @@
<item id="related_request_list">
<rank>50</rank>
</item>
<item id="related_incident_list">
<rank>50</rank>
</item>
<item id="col:col1">
<rank>60</rank>
<items>

View File

@@ -143,6 +143,8 @@ Dict::Add('EN US', 'English', 'English', array(
'Class:Problem/Attribute:knownerrors_list+' => 'All the known errors that are linked to this problem',
'Class:Problem/Attribute:related_request_list' => 'Related requests',
'Class:Problem/Attribute:related_request_list+' => 'All the requests that are related to this problem',
'Class:Problem/Attribute:related_incident_list' => 'Related incidents',
'Class:Problem/Attribute:related_incident_list+' => 'All the incidents that are related to this problem',
'Class:Problem/Stimulus:ev_assign' => 'Assign',
'Class:Problem/Stimulus:ev_assign+' => '',
'Class:Problem/Stimulus:ev_reassign' => 'Reassign',

View File

@@ -88,6 +88,8 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:Problem/Attribute:knownerrors_list+' => '',
'Class:Problem/Attribute:related_request_list' => 'Requêtes liées',
'Class:Problem/Attribute:related_request_list+' => '',
'Class:Problem/Attribute:related_incident_list' => 'Incidents liés',
'Class:Problem/Attribute:related_incident_list+' => '',
'Class:Problem/Stimulus:ev_assign' => 'Assigner',
'Class:Problem/Stimulus:ev_assign+' => '',
'Class:Problem/Stimulus:ev_reassign' => 'Réaassigner',

View File

@@ -0,0 +1,168 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
//
// This file is part of iTop.
//
// iTop is free software; you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// iTop is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with iTop. If not, see <http://www.gnu.org/licenses/>
/**
* @author LinProfs <info@linprofs.com>
*
* Linux & Open Source Professionals
* http://www.linprofs.com
*
* @copyright Copyright (C) 2010-2012 Combodo SARL
* @licence http://opensource.org/licenses/AGPL-3.0
*/
// Dictionnay conventions
// Class:<class_name>
// Class:<class_name>+
// Class:<class_name>/Attribute:<attribute_code>
// Class:<class_name>/Attribute:<attribute_code>+
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
// Class:<class_name>/Stimulus:<stimulus_code>
// Class:<class_name>/Stimulus:<stimulus_code>+
//////////////////////////////////////////////////////////////////////
// Classes in 'bizmodel'
//////////////////////////////////////////////////////////////////////
//
// Dictionnay conventions
// Class:<class_name>
// Class:<class_name>+
// Class:<class_name>/Attribute:<attribute_code>
// Class:<class_name>/Attribute:<attribute_code>+
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
// Class:<class_name>/Stimulus:<stimulus_code>
// Class:<class_name>/Stimulus:<stimulus_code>+
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'Menu:ProblemManagement' => 'Probleem Management',
'Menu:ProblemManagement+' => 'Probleem Management',
'Menu:Problem:Shortcuts' => 'Snelkoppelingen',
'Menu:NewError' => 'Nieuwe bekende fout',
'Menu:NewError+' => 'Creatie van een nieuwe bekende fout',
'Menu:SearchError' => 'Zoek naar bekende fouten',
'Menu:SearchError+' => 'Zoek naar bekende fouten',
'Menu:Problem:KnownErrors' => 'Alle bekende fouten',
'Menu:Problem:KnownErrors+' => 'Alle bekende fouten',
'Menu:FAQCategory' => 'FAQ categorieen',
'Menu:FAQCategory+' => 'Alle FAQ categorieen',
'Menu:FAQ' => 'FAQs',
'Menu:FAQ+' => 'Alle FAQs',
'Menu:Problem:Overview' => 'Overzicht',
'Menu:Problem:Overview+' => 'Overzicht',
'Menu:NewProblem' => 'Nieuw probleem',
'Menu:NewProblem+' => 'Nieuw probleem',
'Menu:SearchProblems' => 'Zoek naar problemen',
'Menu:SearchProblems+' => 'Zoek naar problemen',
'Menu:Problem:MyProblems' => 'Mijn problemen',
'Menu:Problem:MyProblems+' => 'Mijn problemen',
'Menu:Problem:OpenProblems' => 'Alle open problemen',
'Menu:Problem:OpenProblems+' => 'Alle open problemen',
'UI-ProblemManagementOverview-ProblemByService' => 'Problemen per dienst',
'UI-ProblemManagementOverview-ProblemByService+' => 'Problemen per dienst',
'UI-ProblemManagementOverview-ProblemByPriority' => 'Problemen per prioriteit',
'UI-ProblemManagementOverview-ProblemByPriority+' => 'Problemen per prioriteit',
'UI-ProblemManagementOverview-ProblemUnassigned' => 'Niet toegewezen problemen',
'UI-ProblemManagementOverview-ProblemUnassigned+' => 'Niet toegewezen problemen',
'UI:ProblemMgmtMenuOverview:Title' => 'Dashboard voor Probleem Management',
'UI:ProblemMgmtMenuOverview:Title+' => 'Dashboard voor Probleem Management',
));
//
// Class: Problem
//
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'Class:Problem' => 'Probleem',
'Class:Problem+' => '',
'Class:Problem/Attribute:status' => 'Status',
'Class:Problem/Attribute:status+' => '',
'Class:Problem/Attribute:status/Value:new' => 'Nieuw',
'Class:Problem/Attribute:status/Value:new+' => '',
'Class:Problem/Attribute:status/Value:assigned' => 'Toegewezen',
'Class:Problem/Attribute:status/Value:assigned+' => '',
'Class:Problem/Attribute:status/Value:resolved' => 'Opgelost',
'Class:Problem/Attribute:status/Value:resolved+' => '',
'Class:Problem/Attribute:status/Value:closed' => 'Gesloten',
'Class:Problem/Attribute:status/Value:closed+' => '',
'Class:Problem/Attribute:service_id' => 'Dienst',
'Class:Problem/Attribute:service_id+' => '',
'Class:Problem/Attribute:service_name' => 'Dienst naam',
'Class:Problem/Attribute:service_name+' => '',
'Class:Problem/Attribute:servicesubcategory_id' => 'Dienst subcategorie',
'Class:Problem/Attribute:servicesubcategory_id+' => '',
'Class:Problem/Attribute:servicesubcategory_name' => 'Dienst subcategorie',
'Class:Problem/Attribute:servicesubcategory_name+' => '',
'Class:Problem/Attribute:product' => 'Product',
'Class:Problem/Attribute:product+' => '',
'Class:Problem/Attribute:impact' => 'Impact',
'Class:Problem/Attribute:impact+' => '',
'Class:Problem/Attribute:impact/Value:1' => 'Een afdeling',
'Class:Problem/Attribute:impact/Value:1+' => '',
'Class:Problem/Attribute:impact/Value:2' => 'Een dienst',
'Class:Problem/Attribute:impact/Value:2+' => '',
'Class:Problem/Attribute:impact/Value:3' => 'Een persoon',
'Class:Problem/Attribute:impact/Value:3+' => '',
'Class:Problem/Attribute:urgency' => 'Urgentie',
'Class:Problem/Attribute:urgency+' => '',
'Class:Problem/Attribute:urgency/Value:1' => 'kritiek',
'Class:Problem/Attribute:urgency/Value:1+' => 'kritiek',
'Class:Problem/Attribute:urgency/Value:2' => 'hoog',
'Class:Problem/Attribute:urgency/Value:2+' => 'hoog',
'Class:Problem/Attribute:urgency/Value:3' => 'normaal',
'Class:Problem/Attribute:urgency/Value:3+' => 'normaal',
'Class:Problem/Attribute:urgency/Value:4' => 'laag',
'Class:Problem/Attribute:urgency/Value:4+' => 'laag',
'Class:Problem/Attribute:priority' => 'Prioriteit',
'Class:Problem/Attribute:priority+' => '',
'Class:Problem/Attribute:priority/Value:1' => 'Kritisch',
'Class:Problem/Attribute:priority/Value:1+' => 'Kritisch',
'Class:Problem/Attribute:priority/Value:2' => 'Hoog',
'Class:Problem/Attribute:priority/Value:2+' => 'Hoog',
'Class:Problem/Attribute:priority/Value:3' => 'Normaal',
'Class:Problem/Attribute:priority/Value:3+' => 'Normaal',
'Class:Problem/Attribute:priority/Value:4' => 'Laag',
'Class:Problem/Attribute:priority/Value:4+' => 'Laag',
'Class:Problem/Attribute:related_change_id' => 'Gerelateerde Change',
'Class:Problem/Attribute:related_change_id+' => '',
'Class:Problem/Attribute:related_change_ref' => 'Gerelateerde Change ref',
'Class:Problem/Attribute:related_change_ref+' => '',
'Class:Problem/Attribute:assignment_date' => 'Toegewezen Datum',
'Class:Problem/Attribute:assignment_date+' => '',
'Class:Problem/Attribute:resolution_date' => 'Resolutie Datum',
'Class:Problem/Attribute:resolution_date+' => '',
'Class:Problem/Attribute:knownerrors_list' => 'Bekende fouten',
'Class:Problem/Attribute:knownerrors_list+' => 'Alle bekende fouten die gelinkt zijn aan dit probleem',
'Class:Problem/Attribute:related_request_list' => 'Gerelateerde verzoeken',
'Class:Problem/Attribute:related_request_list+' => 'Alle verzoeken die gerelateerd zijn aan dit probleem',
'Class:Problem/Stimulus:ev_assign' => 'Wijs toe',
'Class:Problem/Stimulus:ev_assign+' => '',
'Class:Problem/Stimulus:ev_reassign' => 'Wijs opnieuw toe',
'Class:Problem/Stimulus:ev_reassign+' => '',
'Class:Problem/Stimulus:ev_resolve' => 'Los het op',
'Class:Problem/Stimulus:ev_resolve+' => '',
'Class:Problem/Stimulus:ev_close' => 'Sluit',
'Class:Problem/Stimulus:ev_close+' => '',
));
?>

View File

@@ -0,0 +1,244 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
//
// This file is part of iTop.
//
// iTop is free software; you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// iTop is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with iTop. If not, see <http://www.gnu.org/licenses/>
/**
* @author Erik Bøg <erik@boegmoeller.dk>
* @copyright Copyright (C) 2010-2012 Combodo SARL
* @licence http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:UserRequest' => 'Brugerhenvendelse',
'Class:UserRequest+' => '',
'Class:UserRequest/Attribute:status' => 'Status',
'Class:UserRequest/Attribute:status+' => '',
'Class:UserRequest/Attribute:status/Value:new' => 'Ny',
'Class:UserRequest/Attribute:status/Value:new+' => '',
'Class:UserRequest/Attribute:status/Value:escalated_tto' => 'Eskaleret TTO',
'Class:UserRequest/Attribute:status/Value:escalated_tto+' => '',
'Class:UserRequest/Attribute:status/Value:assigned' => 'Tildelt',
'Class:UserRequest/Attribute:status/Value:assigned+' => '',
'Class:UserRequest/Attribute:status/Value:escalated_ttr' => 'Eskaleret TTR',
'Class:UserRequest/Attribute:status/Value:escalated_ttr+' => '',
'Class:UserRequest/Attribute:status/Value:waiting_for_approval' => 'Afventer godkendelse',
'Class:UserRequest/Attribute:status/Value:waiting_for_approval+' => '',
'Class:UserRequest/Attribute:status/Value:approved' => 'Godkendt',
'Class:UserRequest/Attribute:status/Value:approved+' => '',
'Class:UserRequest/Attribute:status/Value:rejected' => 'Afslået',
'Class:UserRequest/Attribute:status/Value:rejected+' => '',
'Class:UserRequest/Attribute:status/Value:pending' => 'Nedetid',
'Class:UserRequest/Attribute:status/Value:pending+' => '',
'Class:UserRequest/Attribute:status/Value:resolved' => 'Løst',
'Class:UserRequest/Attribute:status/Value:resolved+' => '',
'Class:UserRequest/Attribute:status/Value:closed' => 'Lukket',
'Class:UserRequest/Attribute:status/Value:closed+' => '',
'Class:UserRequest/Attribute:request_type' => 'Brugerhenvendelse type',
'Class:UserRequest/Attribute:request_type+' => '',
'Class:UserRequest/Attribute:request_type/Value:service_request' => 'Service anmodning',
'Class:UserRequest/Attribute:request_type/Value:service_request+' => '',
'Class:UserRequest/Attribute:impact' => 'Påvirkning',
'Class:UserRequest/Attribute:impact+' => '',
'Class:UserRequest/Attribute:impact/Value:1' => 'Afdeling',
'Class:UserRequest/Attribute:impact/Value:1+' => 'En afdeling er påvirket',
'Class:UserRequest/Attribute:impact/Value:2' => 'Service',
'Class:UserRequest/Attribute:impact/Value:2+' => 'En service er påvirket',
'Class:UserRequest/Attribute:impact/Value:3' => 'Person',
'Class:UserRequest/Attribute:impact/Value:3+' => 'En person er påvirket',
'Class:UserRequest/Attribute:priority' => 'Prioritet',
'Class:UserRequest/Attribute:priority+' => '',
'Class:UserRequest/Attribute:priority/Value:1' => 'Kritisk',
'Class:UserRequest/Attribute:priority/Value:1+' => '',
'Class:UserRequest/Attribute:priority/Value:2' => 'Høj',
'Class:UserRequest/Attribute:priority/Value:2+' => '',
'Class:UserRequest/Attribute:priority/Value:3' => 'Middel',
'Class:UserRequest/Attribute:priority/Value:3+' => '',
'Class:UserRequest/Attribute:priority/Value:4' => 'Lav',
'Class:UserRequest/Attribute:priority/Value:4+' => '',
'Class:UserRequest/Attribute:urgency' => 'Vigtighed',
'Class:UserRequest/Attribute:urgency+' => '',
'Class:UserRequest/Attribute:urgency/Value:1' => 'Kritisk',
'Class:UserRequest/Attribute:urgency/Value:1+' => '',
'Class:UserRequest/Attribute:urgency/Value:2' => 'Høj',
'Class:UserRequest/Attribute:urgency/Value:2+' => '',
'Class:UserRequest/Attribute:urgency/Value:3' => 'Middel',
'Class:UserRequest/Attribute:urgency/Value:3+' => '',
'Class:UserRequest/Attribute:urgency/Value:4' => 'Lav',
'Class:UserRequest/Attribute:urgency/Value:4+' => '',
'Class:UserRequest/Attribute:origin' => 'Oprindelse',
'Class:UserRequest/Attribute:origin+' => '',
'Class:UserRequest/Attribute:origin/Value:mail' => 'Mail',
'Class:UserRequest/Attribute:origin/Value:mail+' => '',
'Class:UserRequest/Attribute:origin/Value:phone' => 'Telefon',
'Class:UserRequest/Attribute:origin/Value:phone+' => '',
'Class:UserRequest/Attribute:origin/Value:portal' => 'Portal',
'Class:UserRequest/Attribute:origin/Value:portal+' => '',
'Class:UserRequest/Attribute:approver_id' => 'Godkender',
'Class:UserRequest/Attribute:approver_id+' => '',
'Class:UserRequest/Attribute:service_id' => 'Ydelse',
'Class:UserRequest/Attribute:service_id+' => '',
'Class:UserRequest/Attribute:servicesubcategory_id' => 'Ydelse underkategori',
'Class:UserRequest/Attribute:servicesubcategory_id+' => '',
'Class:UserRequest/Attribute:escalation_flag' => 'Eskalations Flag',
'Class:UserRequest/Attribute:escalation_flag+' => '',
'Class:UserRequest/Attribute:escalation_flag/Value:no' => 'Nej',
'Class:UserRequest/Attribute:escalation_flag/Value:no+' => '',
'Class:UserRequest/Attribute:escalation_flag/Value:yes' => 'Ja',
'Class:UserRequest/Attribute:escalation_flag/Value:yes+' => '',
'Class:UserRequest/Attribute:escalation_reason' => 'Eskalationsgrund',
'Class:UserRequest/Attribute:escalation_reason+' => '',
'Class:UserRequest/Attribute:assignment_date' => 'Tildelings dato',
'Class:UserRequest/Attribute:assignment_date+' => '',
'Class:UserRequest/Attribute:resolution_date' => 'Løst dato',
'Class:UserRequest/Attribute:resolution_date+' => '',
'Class:UserRequest/Attribute:last_pending_date' => 'Sidste udsættelsesdato',
'Class:UserRequest/Attribute:last_pending_date+' => '',
'Class:UserRequest/Attribute:cumulatedpending' => 'Akkumuleret nedetid',
'Class:UserRequest/Attribute:cumulatedpending+' => '',
'Class:UserRequest/Attribute:tto' => 'TTO (Time To Own)',
'Class:UserRequest/Attribute:tto+' => '',
'Class:UserRequest/Attribute:ttr' => 'TTR (Time To Resolve)',
'Class:UserRequest/Attribute:ttr+' => '',
'Class:UserRequest/Attribute:tto_escalation_deadline' => 'TTO Deadline',
'Class:UserRequest/Attribute:tto_escalation_deadline+' => '',
'Class:UserRequest/Attribute:sla_tto_passed' => 'SLA TTO overskredet',
'Class:UserRequest/Attribute:sla_tto_passed+' => '',
'Class:UserRequest/Attribute:sla_tto_over' => 'Overskridelse SLA TTO',
'Class:UserRequest/Attribute:sla_tto_over+' => '',
'Class:UserRequest/Attribute:ttr_escalation_deadline' => 'TTR Deadline',
'Class:UserRequest/Attribute:ttr_escalation_deadline+' => '',
'Class:UserRequest/Attribute:sla_ttr_passed' => 'SLA TTR overskredet',
'Class:UserRequest/Attribute:sla_ttr_passed+' => '',
'Class:UserRequest/Attribute:sla_ttr_over' => 'Overskridelse SLA TTR',
'Class:UserRequest/Attribute:sla_ttr_over+' => '',
'Class:UserRequest/Attribute:time_spent' => 'Tid forbrugt til løsning',
'Class:UserRequest/Attribute:time_spent+' => '',
'Class:UserRequest/Attribute:resolution_code' => 'Løsningskode',
'Class:UserRequest/Attribute:resolution_code+' => '',
'Class:UserRequest/Attribute:resolution_code/Value:assistance' => 'Assistance',
'Class:UserRequest/Attribute:resolution_code/Value:assistance+' => '',
'Class:UserRequest/Attribute:resolution_code/Value:bug fixed' => 'Bugfix',
'Class:UserRequest/Attribute:resolution_code/Value:bug fixed+' => '',
'Class:UserRequest/Attribute:resolution_code/Value:hardware repair' => 'Hardware reparation',
'Class:UserRequest/Attribute:resolution_code/Value:hardware repair+' => '',
'Class:UserRequest/Attribute:resolution_code/Value:other' => 'Andet',
'Class:UserRequest/Attribute:resolution_code/Value:other+' => '',
'Class:UserRequest/Attribute:resolution_code/Value:software patch' => 'Software Patch',
'Class:UserRequest/Attribute:resolution_code/Value:software patch+' => '',
'Class:UserRequest/Attribute:resolution_code/Value:system update' => 'System Update',
'Class:UserRequest/Attribute:resolution_code/Value:system update+' => '',
'Class:UserRequest/Attribute:resolution_code/Value:training' => 'Uddannelse',
'Class:UserRequest/Attribute:resolution_code/Value:training+' => '',
'Class:UserRequest/Attribute:solution' => 'Løsning',
'Class:UserRequest/Attribute:solution+' => '',
'Class:UserRequest/Attribute:pending_reason' => 'Årsag til afventer',
'Class:UserRequest/Attribute:pending_reason+' => '',
'Class:UserRequest/Attribute:parent_request_id' => 'Parent Anmodning',
'Class:UserRequest/Attribute:parent_request_id+' => '',
'Class:UserRequest/Attribute:parent_problem_id' => 'Parent Problem',
'Class:UserRequest/Attribute:parent_problem_id+' => '',
'Class:UserRequest/Attribute:parent_change_id' => 'Parent Change',
'Class:UserRequest/Attribute:parent_change_id+' => '',
'Class:UserRequest/Attribute:related_request_list' => 'Afledte Anmodninger',
'Class:UserRequest/Attribute:related_request_list+' => '',
'Class:UserRequest/Attribute:public_log' => 'Offentlig Log',
'Class:UserRequest/Attribute:public_log+' => '',
'Class:UserRequest/Attribute:user_satisfaction' => 'Brugertilfredshed',
'Class:UserRequest/Attribute:user_satisfaction+' => '',
'Class:UserRequest/Attribute:user_satisfaction/Value:1' => 'Meget tilfreds',
'Class:UserRequest/Attribute:user_satisfaction/Value:1+' => '',
'Class:UserRequest/Attribute:user_satisfaction/Value:2' => 'Tilfreds',
'Class:UserRequest/Attribute:user_satisfaction/Value:2+' => '',
'Class:UserRequest/Attribute:user_satisfaction/Value:3' => 'Nogenlunde tilfreds',
'Class:UserRequest/Attribute:user_satisfaction/Value:3+' => '',
'Class:UserRequest/Attribute:user_satisfaction/Value:4' => 'Meget utilfreds',
'Class:UserRequest/Attribute:user_satisfaction/Value:4+' => '',
'Class:UserRequest/Attribute:user_comment' => 'Bruger kommentar',
'Class:UserRequest/Attribute:user_comment+' => '',
'Class:UserRequest/Stimulus:ev_assign' => 'Tildelt',
'Class:UserRequest/Stimulus:ev_assign+' => '',
'Class:UserRequest/Stimulus:ev_reassign' => 'Forny tildeling',
'Class:UserRequest/Stimulus:ev_reassign+' => '',
'Class:UserRequest/Stimulus:ev_approve' => 'Godkend',
'Class:UserRequest/Stimulus:ev_approve+' => '',
'Class:UserRequest/Stimulus:ev_reject' => 'Afslå',
'Class:UserRequest/Stimulus:ev_reject+' => '',
'Class:UserRequest/Stimulus:ev_pending' => 'Afventer',
'Class:UserRequest/Stimulus:ev_pending+' => '',
'Class:UserRequest/Stimulus:ev_timeout' => 'Timeout',
'Class:UserRequest/Stimulus:ev_timeout+' => '',
'Class:UserRequest/Stimulus:ev_autoresolve' => 'Automatisk løst',
'Class:UserRequest/Stimulus:ev_autoresolve+' => '',
'Class:UserRequest/Stimulus:ev_autoclose' => 'Automatisk lukket',
'Class:UserRequest/Stimulus:ev_autoclose+' => '',
'Class:UserRequest/Stimulus:ev_resolve' => 'Marker som løst',
'Class:UserRequest/Stimulus:ev_resolve+' => '',
'Class:UserRequest/Stimulus:ev_close' => 'Luk denne Anmodning',
'Class:UserRequest/Stimulus:ev_close+' => '',
'Class:UserRequest/Stimulus:ev_reopen' => 'Genåben',
'Class:UserRequest/Stimulus:ev_reopen+' => '',
'Class:UserRequest/Stimulus:ev_wait_for_approval' => 'Afventer godkendelse',
'Class:UserRequest/Stimulus:ev_wait_for_approval+' => '',
'Menu:RequestManagement' => 'Helpdesk',
'Menu:RequestManagement+' => '',
'Menu:RequestManagementProvider' => 'Helpdesk Leverandør',
'Menu:RequestManagementProvider+' => '',
'Menu:UserRequest:Provider' => 'Åbne brugerhenvendelser ved leverandør',
'Menu:UserRequest:Provider+' => '',
'Menu:UserRequest:Overview' => 'Oversigt',
'Menu:UserRequest:Overview+' => '',
'Menu:NewUserRequest' => 'Ny Bruger henvendelse',
'Menu:NewUserRequest+' => '',
'Menu:SearchUserRequests' => 'Søg efter brugerhenvendelser',
'Menu:SearchUserRequests+' => '',
'Menu:UserRequest:Shortcuts' => 'Genveje',
'Menu:UserRequest:Shortcuts+' => '',
'Menu:UserRequest:MyRequests' => 'Mine henvendelser',
'Menu:UserRequest:MyRequests+' => '',
'Menu:UserRequest:MySupportRequests' => 'Mine Support henvendelser',
'Menu:UserRequest:MySupportRequests+' => '',
'Menu:UserRequest:EscalatedRequests' => 'Eskalerede Brugerhenvendelser',
'Menu:UserRequest:EscalatedRequests+' => '',
'Menu:UserRequest:OpenRequests' => 'Alle åbne brugerhenvendelser',
'Menu:UserRequest:OpenRequests+' => '',
'UI:WelcomeMenu:MyAssignedCalls' => 'Mine tildelte henvendelser',
'UI-RequestManagementOverview-RequestByType-last-14-days' => 'Brugerhenvendelser de sidste 14 dage efter type',
'UI-RequestManagementOverview-Last-14-days' => 'Antal Brugerhenvendelser de sidste 14 dage',
'UI-RequestManagementOverview-OpenRequestByStatus' => 'Åbne brugerhenvendelser efter status',
'UI-RequestManagementOverview-OpenRequestByAgent' => 'Åbne brugerhenvendelser efter tildelt til',
'UI-RequestManagementOverview-OpenRequestByType' => 'Åbne brugerhenvendelser efter type',
'UI-RequestManagementOverview-OpenRequestByCustomer' => 'Åbne brugerhenvendelser efter bruger',
'Class:UserRequest:KnownErrorList' => 'Known Errors',
'Class:UserRequest/Attribute:origin/Value:monitoring' => 'Monitoring',
'Class:UserRequest/Attribute:origin/Value:monitoring+' => '',
'Class:UserRequest/Attribute:approver_email' => 'Godkender Email',
'Class:UserRequest/Attribute:approver_email+' => '',
'Class:UserRequest/Attribute:service_name' => 'Ydelses navn',
'Class:UserRequest/Attribute:service_name+' => '',
'Class:UserRequest/Attribute:servicesubcategory_name' => 'Ydelse underkategori navn',
'Class:UserRequest/Attribute:servicesubcategory_name+' => '',
'Class:UserRequest/Attribute:parent_request_ref' => 'Parent Brugerhenvendelse Reference',
'Class:UserRequest/Attribute:parent_request_ref+' => '',
'Class:UserRequest/Attribute:parent_problem_ref' => 'Parent Incident Reference',
'Class:UserRequest/Attribute:parent_problem_ref+' => '',
'Class:UserRequest/Attribute:parent_change_ref' => 'Parent Change Reference',
'Class:UserRequest/Attribute:parent_change_ref+' => '',
'Class:UserRequest/Attribute:parent_request_id_friendlyname' => 'Parent Brugerhenvendelse Id Friendly Name',
'Class:UserRequest/Attribute:parent_request_id_friendlyname+' => '',
));
?>

View File

@@ -29,7 +29,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ref"/>
</attributes>
@@ -93,6 +92,10 @@
<value id="3">3</value>
<value id="4">4</value>
</values>
<dependencies>
<attribute id="impact"/>
<attribute id="urgency"/>
</dependencies>
<sql>priority</sql>
<default_value>4</default_value>
<is_null_allowed>false</is_null_allowed>
@@ -213,10 +216,18 @@
<goal>ResponseTicketTTO</goal>
<thresholds>
<threshold id="75">
<highlight>
<code>warning</code>
<persistent>false</persistent>
</highlight>
<actions>
</actions>
</threshold>
<threshold id="100">
<highlight>
<code>critical</code>
<persistent>false</persistent>
</highlight>
<actions>
<action>
<verb>ApplyStimulus</verb>
@@ -241,10 +252,18 @@
<goal>ResponseTicketTTR</goal>
<thresholds>
<threshold id="75">
<highlight>
<code>warning</code>
<persistent>false</persistent>
</highlight>
<actions>
</actions>
</threshold>
<threshold id="100">
<highlight>
<code>critical</code>
<persistent>false</persistent>
</highlight>
<actions>
<action>
<verb>ApplyStimulus</verb>
@@ -509,7 +528,10 @@
<target>assigned</target>
<actions>
<action>
<verb>SetAssignedDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">assignment_date</param>
</params>
</action>
</actions>
</transition>
@@ -525,10 +547,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -547,7 +581,10 @@
<target>assigned</target>
<actions>
<action>
<verb>SetAssignedDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">assignment_date</param>
</params>
</action>
</actions>
</transition>
@@ -591,7 +628,10 @@
<target>pending</target>
<actions>
<action>
<verb>SetLastPendingDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">last_pending_date</param>
</params>
</action>
</actions>
</transition>
@@ -599,10 +639,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -618,10 +670,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -638,7 +702,10 @@
<target>pending</target>
<actions>
<action>
<verb>SetLastPendingDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">last_pending_date</param>
</params>
</action>
</actions>
</transition>
@@ -646,10 +713,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -661,10 +740,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -705,7 +796,10 @@
<target>assigned</target>
<actions>
<action>
<verb>SetAssignedDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">assignment_date</param>
</params>
</action>
</actions>
</transition>
@@ -713,10 +807,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -761,10 +867,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -857,7 +975,10 @@
<target>closed</target>
<actions>
<action>
<verb>SetClosureDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">close_date</param>
</params>
</action>
</actions>
</transition>
@@ -870,10 +991,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -929,6 +1062,10 @@
</lifecycle>
<methods>
<method id="SetAssignedDate">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentDate() instead
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
@@ -939,6 +1076,10 @@
}]]></code>
</method>
<method id="SetLastPendingDate">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentDate() instead
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
@@ -949,6 +1090,10 @@
}]]></code>
</method>
<method id="SetResolveDate">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentDate() and SetElapsedTime() instead
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
@@ -961,6 +1106,10 @@
}]]></code>
</method>
<method id="SetClosureDate">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentDate() instead
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
@@ -971,6 +1120,10 @@
}]]></code>
</method>
<method id="SetApprover">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentUser() instead
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
@@ -1026,7 +1179,11 @@
4 => 4,
),
);
$iPriority = $aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')];
$iPriority = 1;
if (isset($aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')]))
{
$iPriority = $aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')];
}
return $iPriority;
}]]></code>
</method>
@@ -1075,6 +1232,9 @@
}]]></code>
</method>
<method id="resolveChilds">
<comment><![CDATA[/**
* To be deprecated: use ResolveChildTickets() instead
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
@@ -1106,6 +1266,52 @@
}]]></code>
</method>
<method id="ResolveChildTickets">
<comment><![CDATA[/**
* Cascade the resolution to child User Request
* @return true (returning false would stop the ongoing transition)
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
<arguments>
</arguments>
<code><![CDATA[ public function ResolveChildTickets()
{
// Automatically resolve child requests
$sOQL = "SELECT UserRequest WHERE parent_request_id = :ticket AND status != 'resolved'";
$oChildRequestSet = new DBObjectSet(DBObjectSearch::FromOQL($sOQL), array(), array('ticket' => $this->GetKey()));
while($oRequest = $oChildRequestSet->Fetch())
{
$oRequest->ResolveFrom($this);
}
return true;
}]]></code>
</method>
<method id="ResolveFrom">
<comment><![CDATA[/**
* Resolve the ticket from another resolved ticket
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>Internal</type>
<code><![CDATA[ public function ResolveFrom($oParentTicket)
{
if ($this->Get('status') != 'resolved')
{
$this->Set('servicesubcategory_id', $oParentTicket->Get('servicesubcategory_id'));
$this->Set('service_id', $oParentTicket->Get('service_id'));
$this->Set('team_id', $oParentTicket->Get('team_id'));
$this->Set('agent_id', $oParentTicket->Get('agent_id'));
$this->Set('resolution_code', $oParentTicket->Get('resolution_code'));
$sParent = '[['.get_class($oParentTicket).':'.$oParentTicket->Get('ref').']]';
$this->Set('solution', Dict::Format('Tickets:ResolvedFrom', $sParent, MetaModel::GetName(get_class($oParentTicket))));
$this->ApplyStimulus('ev_autoresolve');
$this->DBUpdate();
}
}]]></code>
</method>
<method id="UpdateChildRequestLog">
<static>false</static>
<access>public</access>

View File

@@ -1,5 +1,5 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
// Copyright (C) 2010-2014 Combodo SARL
//
// This file is part of iTop.
//
@@ -261,8 +261,7 @@ Dict::Add('EN US', 'English', 'English', array(
'Class:UserRequest/Stimulus:ev_wait_for_approval' => 'Wait for approval',
'Class:UserRequest/Stimulus:ev_wait_for_approval+' => '',
'Class:UserRequest/Error:CannotAssignParentRequestIdToSelf' => 'Cannot assign the Parent request to the request itself',
'Class:UserRequest/Method:ResolveChildTickets' => 'ResolveChildTickets',
'Class:UserRequest/Method:ResolveChildTickets+' => 'Cascade the resolution to child requests (ev_autoresolve), and align the following characteristics of the request: service, team, agent, resolution info',
));
?>

View File

@@ -1,5 +1,5 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
// Copyright (C) 2010-2014 Combodo SARL
//
// This file is part of iTop.
//
@@ -36,7 +36,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:UserRequest/Attribute:status/Value:escalated_tto+' => '',
'Class:UserRequest/Attribute:status/Value:assigned' => 'Assignée',
'Class:UserRequest/Attribute:status/Value:assigned+' => '',
'Class:UserRequest/Attribute:status/Value:escalated_ttr' => 'Escalate ttr',
'Class:UserRequest/Attribute:status/Value:escalated_ttr' => 'Escalade ttr',
'Class:UserRequest/Attribute:status/Value:escalated_ttr+' => '',
'Class:UserRequest/Attribute:status/Value:waiting_for_approval' => 'En attente d`approbation',
'Class:UserRequest/Attribute:status/Value:waiting_for_approval+' => '',
@@ -267,6 +267,8 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Portal:UserRequest:MoreInfo' => 'Informations complémentaires',
'Portal:Details-Service-Element' => 'Eléments de service',
'Portal:NoClosedTicket' => 'Pas de requête fermée',
'Portal:NoService' => ''
'Portal:NoService' => '',
'Class:UserRequest/Method:ResolveChildTickets' => 'ResolveChildTickets (résoudre les tickets fils)',
'Class:UserRequest/Method:ResolveChildTickets+' => 'Cascader l\'action de résolution de la demande (ev_autoresolve), et aligner les caractéristiques suivantes : service, équipe, agent, information de résolution',
));
?>

View File

@@ -7,7 +7,7 @@ SetupWebPage::AddModule(
array(
// Identification
//
'label' => 'User request management ITIL V3',
'label' => 'User request Management ITIL',
'category' => 'business',
// Setup

View File

@@ -0,0 +1,272 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
//
// This file is part of iTop.
//
// iTop is free software; you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// iTop is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with iTop. If not, see <http://www.gnu.org/licenses/>
/**
* @author Erik Bøg <erik@boegmoeller.dk>
* @copyright Copyright (C) 2010-2012 Combodo SARL
* @licence http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:UserRequest' => 'Brugerhenvendelse',
'Class:UserRequest+' => '',
'Class:UserRequest/Attribute:status' => 'Status',
'Class:UserRequest/Attribute:status+' => '',
'Class:UserRequest/Attribute:status/Value:new' => 'Ny',
'Class:UserRequest/Attribute:status/Value:new+' => '',
'Class:UserRequest/Attribute:status/Value:escalated_tto' => 'Eskaleret TTO',
'Class:UserRequest/Attribute:status/Value:escalated_tto+' => '',
'Class:UserRequest/Attribute:status/Value:assigned' => 'Tildelt',
'Class:UserRequest/Attribute:status/Value:assigned+' => '',
'Class:UserRequest/Attribute:status/Value:escalated_ttr' => 'Eskaleret TTR',
'Class:UserRequest/Attribute:status/Value:escalated_ttr+' => '',
'Class:UserRequest/Attribute:status/Value:waiting_for_approval' => 'Afventer godkendelse',
'Class:UserRequest/Attribute:status/Value:waiting_for_approval+' => '',
'Class:UserRequest/Attribute:status/Value:approved' => 'Godkendt',
'Class:UserRequest/Attribute:status/Value:approved+' => '',
'Class:UserRequest/Attribute:status/Value:rejected' => 'Afslået',
'Class:UserRequest/Attribute:status/Value:rejected+' => '',
'Class:UserRequest/Attribute:status/Value:pending' => 'Nedetid',
'Class:UserRequest/Attribute:status/Value:pending+' => '',
'Class:UserRequest/Attribute:status/Value:resolved' => 'Løst',
'Class:UserRequest/Attribute:status/Value:resolved+' => '',
'Class:UserRequest/Attribute:status/Value:closed' => 'Lukket',
'Class:UserRequest/Attribute:status/Value:closed+' => '',
'Class:UserRequest/Attribute:request_type' => 'Request-Type',
'Class:UserRequest/Attribute:request_type+' => '',
'Class:UserRequest/Attribute:request_type/Value:incident' => 'Incident',
'Class:UserRequest/Attribute:request_type/Value:incident+' => '',
'Class:UserRequest/Attribute:request_type/Value:service_request' => 'Service Anmodning',
'Class:UserRequest/Attribute:request_type/Value:service_request+' => '',
'Class:UserRequest/Attribute:impact' => 'Påvirkning',
'Class:UserRequest/Attribute:impact+' => '',
'Class:UserRequest/Attribute:impact/Value:1' => 'Afdeling',
'Class:UserRequest/Attribute:impact/Value:1+' => 'En afdeling er påvirket',
'Class:UserRequest/Attribute:impact/Value:2' => 'Service',
'Class:UserRequest/Attribute:impact/Value:2+' => 'En service er påvirket',
'Class:UserRequest/Attribute:impact/Value:3' => 'Person',
'Class:UserRequest/Attribute:impact/Value:3+' => 'En person er påvirket',
'Class:UserRequest/Attribute:priority' => 'Prioritet',
'Class:UserRequest/Attribute:priority+' => '',
'Class:UserRequest/Attribute:priority/Value:1' => 'Kritisk',
'Class:UserRequest/Attribute:priority/Value:1+' => '',
'Class:UserRequest/Attribute:priority/Value:2' => 'Høj',
'Class:UserRequest/Attribute:priority/Value:2+' => '',
'Class:UserRequest/Attribute:priority/Value:3' => 'Middel',
'Class:UserRequest/Attribute:priority/Value:3+' => '',
'Class:UserRequest/Attribute:priority/Value:4' => 'Lav',
'Class:UserRequest/Attribute:priority/Value:4+' => '',
'Class:UserRequest/Attribute:urgency' => 'Vigtighed',
'Class:UserRequest/Attribute:urgency+' => '',
'Class:UserRequest/Attribute:urgency/Value:1' => 'Kritisk',
'Class:UserRequest/Attribute:urgency/Value:1+' => '',
'Class:UserRequest/Attribute:urgency/Value:2' => 'Høj',
'Class:UserRequest/Attribute:urgency/Value:2+' => '',
'Class:UserRequest/Attribute:urgency/Value:3' => 'Middel',
'Class:UserRequest/Attribute:urgency/Value:3+' => '',
'Class:UserRequest/Attribute:urgency/Value:4' => 'Lav',
'Class:UserRequest/Attribute:urgency/Value:4+' => '',
'Class:UserRequest/Attribute:origin' => 'Oprindelse',
'Class:UserRequest/Attribute:origin+' => '',
'Class:UserRequest/Attribute:origin/Value:mail' => 'Mail',
'Class:UserRequest/Attribute:origin/Value:mail+' => '',
'Class:UserRequest/Attribute:origin/Value:monitoring' => 'Monitoring',
'Class:UserRequest/Attribute:origin/Value:monitoring+' => '',
'Class:UserRequest/Attribute:origin/Value:phone' => 'Telefon',
'Class:UserRequest/Attribute:origin/Value:phone+' => '',
'Class:UserRequest/Attribute:origin/Value:portal' => 'Portal',
'Class:UserRequest/Attribute:origin/Value:portal+' => '',
'Class:UserRequest/Attribute:approver_id' => 'Godkender',
'Class:UserRequest/Attribute:approver_id+' => '',
'Class:UserRequest/Attribute:service_id' => 'Service',
'Class:UserRequest/Attribute:service_id+' => '',
'Class:UserRequest/Attribute:servicesubcategory_id' => 'Service Underkategori',
'Class:UserRequest/Attribute:servicesubcategory_id+' => '',
'Class:UserRequest/Attribute:escalation_flag' => 'Eskalations Flag',
'Class:UserRequest/Attribute:escalation_flag+' => '',
'Class:UserRequest/Attribute:escalation_flag/Value:no' => 'Nej',
'Class:UserRequest/Attribute:escalation_flag/Value:no+' => '',
'Class:UserRequest/Attribute:escalation_flag/Value:yes' => 'Ja',
'Class:UserRequest/Attribute:escalation_flag/Value:yes+' => '',
'Class:UserRequest/Attribute:escalation_reason' => 'Eskalationsgrund',
'Class:UserRequest/Attribute:escalation_reason+' => '',
'Class:UserRequest/Attribute:assignment_date' => 'Tildelt dato',
'Class:UserRequest/Attribute:assignment_date+' => '',
'Class:UserRequest/Attribute:resolution_date' => 'Løsningsdato',
'Class:UserRequest/Attribute:resolution_date+' => '',
'Class:UserRequest/Attribute:last_pending_date' => 'Sidste udsættelses dato',
'Class:UserRequest/Attribute:last_pending_date+' => '',
'Class:UserRequest/Attribute:cumulatedpending' => 'Akkumuleret nedetid',
'Class:UserRequest/Attribute:cumulatedpending+' => '',
'Class:UserRequest/Attribute:tto' => 'TTO (Time To Own)',
'Class:UserRequest/Attribute:tto+' => '',
'Class:UserRequest/Attribute:ttr' => 'TTR (Time To Resolve)',
'Class:UserRequest/Attribute:ttr+' => '',
'Class:UserRequest/Attribute:tto_escalation_deadline' => 'TTO Deadline',
'Class:UserRequest/Attribute:tto_escalation_deadline+' => '',
'Class:UserRequest/Attribute:sla_tto_passed' => 'SLA TTO passeret',
'Class:UserRequest/Attribute:sla_tto_passed+' => '',
'Class:UserRequest/Attribute:sla_tto_over' => 'SLA TTO overskredet',
'Class:UserRequest/Attribute:sla_tto_over+' => '',
'Class:UserRequest/Attribute:ttr_escalation_deadline' => 'TTR Deadline',
'Class:UserRequest/Attribute:ttr_escalation_deadline+' => '',
'Class:UserRequest/Attribute:sla_ttr_passed' => 'SLA TTR passeret',
'Class:UserRequest/Attribute:sla_ttr_passed+' => '',
'Class:UserRequest/Attribute:sla_ttr_over' => 'SLA TTR overskredet',
'Class:UserRequest/Attribute:sla_ttr_over+' => '',
'Class:UserRequest/Attribute:time_spent' => 'Løsningstid forbrugt',
'Class:UserRequest/Attribute:time_spent+' => '',
'Class:UserRequest/Attribute:resolution_code' => 'Løsnings Kode',
'Class:UserRequest/Attribute:resolution_code+' => '',
'Class:UserRequest/Attribute:resolution_code/Value:assistance' => 'Assistance',
'Class:UserRequest/Attribute:resolution_code/Value:assistance+' => '',
'Class:UserRequest/Attribute:resolution_code/Value:bug fixed' => 'Bugfix',
'Class:UserRequest/Attribute:resolution_code/Value:bug fixed+' => '',
'Class:UserRequest/Attribute:resolution_code/Value:hardware repair' => 'Hardware Reparation',
'Class:UserRequest/Attribute:resolution_code/Value:hardware repair+' => '',
'Class:UserRequest/Attribute:resolution_code/Value:other' => 'Andet',
'Class:UserRequest/Attribute:resolution_code/Value:other+' => '',
'Class:UserRequest/Attribute:resolution_code/Value:software patch' => 'Software Patch',
'Class:UserRequest/Attribute:resolution_code/Value:software patch+' => '',
'Class:UserRequest/Attribute:resolution_code/Value:system update' => 'System Update',
'Class:UserRequest/Attribute:resolution_code/Value:system update+' => '',
'Class:UserRequest/Attribute:resolution_code/Value:training' => 'Uddannelse',
'Class:UserRequest/Attribute:resolution_code/Value:training+' => '',
'Class:UserRequest/Attribute:solution' => 'Løsning',
'Class:UserRequest/Attribute:solution+' => '',
'Class:UserRequest/Attribute:pending_reason' => 'Udsættelsesgrund',
'Class:UserRequest/Attribute:pending_reason+' => '',
'Class:UserRequest/Attribute:parent_request_id' => 'Parent Anmodning',
'Class:UserRequest/Attribute:parent_request_id+' => '',
'Class:UserRequest/Attribute:parent_change_id' => 'Parent-Change',
'Class:UserRequest/Attribute:parent_change_id+' => '',
'Class:UserRequest/Attribute:related_request_list' => 'Afledte Anmodninger',
'Class:UserRequest/Attribute:related_request_list+' => '',
'Class:UserRequest/Attribute:public_log' => 'Offentlig Log',
'Class:UserRequest/Attribute:public_log+' => '',
'Class:UserRequest/Attribute:user_satisfaction' => 'Brugertilfredshed',
'Class:UserRequest/Attribute:user_satisfaction+' => '',
'Class:UserRequest/Attribute:user_satisfaction/Value:1' => 'Meget tilfreds',
'Class:UserRequest/Attribute:user_satisfaction/Value:1+' => '',
'Class:UserRequest/Attribute:user_satisfaction/Value:2' => 'Tilfreds',
'Class:UserRequest/Attribute:user_satisfaction/Value:2+' => '',
'Class:UserRequest/Attribute:user_satisfaction/Value:3' => 'Nogenlunde tilfreds',
'Class:UserRequest/Attribute:user_satisfaction/Value:3+' => '',
'Class:UserRequest/Attribute:user_satisfaction/Value:4' => 'Meget utilfreds',
'Class:UserRequest/Attribute:user_satisfaction/Value:4+' => '',
'Class:UserRequest/Attribute:user_comment' => 'Brugerkommentar',
'Class:UserRequest/Attribute:user_comment+' => '',
'Class:UserRequest/Stimulus:ev_assign' => 'Tildelt',
'Class:UserRequest/Stimulus:ev_assign+' => '',
'Class:UserRequest/Stimulus:ev_reassign' => 'Forny tildeling',
'Class:UserRequest/Stimulus:ev_reassign+' => '',
'Class:UserRequest/Stimulus:ev_approve' => 'Godkent',
'Class:UserRequest/Stimulus:ev_approve+' => '',
'Class:UserRequest/Stimulus:ev_reject' => 'Afslå',
'Class:UserRequest/Stimulus:ev_reject+' => '',
'Class:UserRequest/Stimulus:ev_pending' => 'Afventer',
'Class:UserRequest/Stimulus:ev_pending+' => '',
'Class:UserRequest/Stimulus:ev_timeout' => 'Timeout',
'Class:UserRequest/Stimulus:ev_timeout+' => '',
'Class:UserRequest/Stimulus:ev_autoresolve' => 'Automatisk løst',
'Class:UserRequest/Stimulus:ev_autoresolve+' => '',
'Class:UserRequest/Stimulus:ev_autoclose' => 'Automatisk lukket',
'Class:UserRequest/Stimulus:ev_autoclose+' => '',
'Class:UserRequest/Stimulus:ev_resolve' => 'Marker som løst',
'Class:UserRequest/Stimulus:ev_resolve+' => '',
'Class:UserRequest/Stimulus:ev_close' => 'Luk denne Request',
'Class:UserRequest/Stimulus:ev_close+' => '',
'Class:UserRequest/Stimulus:ev_reopen' => 'Genåben',
'Class:UserRequest/Stimulus:ev_reopen+' => '',
'Class:UserRequest/Stimulus:ev_wait_for_approval' => 'Afventer godkendelse',
'Class:UserRequest/Stimulus:ev_wait_for_approval+' => '',
'Menu:RequestManagement' => 'Helpdesk',
'Menu:RequestManagement+' => '',
'Menu:RequestManagementProvider' => 'Helpdesk Leverandør',
'Menu:RequestManagementProvider+' => '',
'Menu:UserRequest:Provider' => 'Åbne brugerhenvendelser ved leverandør',
'Menu:UserRequest:Provider+' => '',
'Menu:UserRequest:Overview' => 'Oversigt',
'Menu:UserRequest:Overview+' => '',
'Menu:NewUserRequest' => 'Ny Bruger henvendelse',
'Menu:NewUserRequest+' => '',
'Menu:SearchUserRequests' => 'Søg efter brugerhenvendelser',
'Menu:SearchUserRequests+' => '',
'Menu:UserRequest:Shortcuts' => 'Genveje',
'Menu:UserRequest:Shortcuts+' => '',
'Menu:UserRequest:MyRequests' => 'Mine henvendelser',
'Menu:UserRequest:MyRequests+' => '',
'Menu:UserRequest:MySupportRequests' => 'Mine Support-henvendelser',
'Menu:UserRequest:MySupportRequests+' => '',
'Menu:UserRequest:EscalatedRequests' => 'Eskalerede Brugerhenvendelser',
'Menu:UserRequest:EscalatedRequests+' => '',
'Menu:UserRequest:OpenRequests' => 'Alle åbne brugerhenvendelser',
'Menu:UserRequest:OpenRequests+' => '',
'UI:WelcomeMenu:MyAssignedCalls' => 'Mine tildelte henvendelser',
'UI-RequestManagementOverview-RequestByType-last-14-days' => 'Brugerhenvendelser de sidste 14 dage efter type',
'UI-RequestManagementOverview-Last-14-days' => 'Antal Brugerhenvendelser de sidste 14 dage',
'UI-RequestManagementOverview-OpenRequestByStatus' => 'Åbne brugerhenvendelser efter status',
'UI-RequestManagementOverview-OpenRequestByAgent' => 'Åbne brugerhenvendelser efter tildelt til',
'UI-RequestManagementOverview-OpenRequestByType' => 'Åbne brugerhenvendelser efter type',
'UI-RequestManagementOverview-OpenRequestByCustomer' => 'Åbne brugerhenvendelser efter bruger',
'Class:UserRequest:KnownErrorList' => 'KEndte fejl (Known Errors)',
'Menu:UserRequest:MyWorkOrders' => 'Mine tildelte arbejdsordre',
'Menu:UserRequest:MyWorkOrders+' => '',
'Class:Problem:KnownProblemList' => 'Kendte problemer',
'Class:UserRequest/Attribute:approver_email' => 'Godkender Email',
'Class:UserRequest/Attribute:approver_email+' => '',
'Class:UserRequest/Attribute:service_name' => 'Service Name',
'Class:UserRequest/Attribute:service_name+' => '',
'Class:UserRequest/Attribute:servicesubcategory_name' => 'Service Underkategori navn',
'Class:UserRequest/Attribute:servicesubcategory_name+' => '',
'Class:UserRequest/Attribute:parent_request_ref' => 'Reference Brugerhenvendelse',
'Class:UserRequest/Attribute:parent_request_ref+' => '',
'Class:UserRequest/Attribute:parent_problem_id' => 'Parent-Problem',
'Class:UserRequest/Attribute:parent_problem_id+' => '',
'Class:UserRequest/Attribute:parent_problem_ref' => 'Reference Problem',
'Class:UserRequest/Attribute:parent_problem_ref+' => '',
'Class:UserRequest/Attribute:parent_change_ref' => 'Reference Change',
'Class:UserRequest/Attribute:parent_change_ref+' => '',
'Class:UserRequest/Attribute:parent_request_id_friendlyname' => 'Parent Request ID Friendly Name',
'Class:UserRequest/Attribute:parent_request_id_friendlyname+' => '',
'Portal:TitleDetailsFor_Request' => 'Dealjer for Brugerhenvendelser',
'Portal:ButtonUpdate' => 'Opdater',
'Portal:ButtonClose' => 'Luk',
'Portal:ButtonReopen' => 'Genåben',
'Portal:ShowServices' => 'Service-Katalog',
'Portal:SelectRequestType' => 'Vælg henvendelses type',
'Portal:SelectServiceElementFrom_Service' => 'Vælg et Service-Element for %1$s',
'Portal:SelectRequestTemplate' => 'Vælg en skabelon for %1$s',
'Portal:ListServices' => 'Liste over ydelser',
'Portal:TitleDetailsFor_Service' => 'Detaljer for ydelser',
'Portal:Button:CreateRequestFromService' => 'Opret henvendelse fra Service',
'Portal:ListOpenRequests' => 'List åbne brugerhenvendelser',
'Portal:UserRequest:MoreInfo' => 'Yderligere informationer',
'Portal:Details-Service-Element' => 'Service Elementer',
'Portal:NoClosedTicket' => 'Ingen lukkede brugerhenvendelser',
'Portal:NoService' => 'Ingen ydelse',
'Portal:ListOpenProblems' => 'Åbne problemer',
'Portal:ShowProblem' => 'Problemer',
'Portal:ShowFaqs' => 'FAQs',
'Portal:NoOpenProblem' => 'Ingen åbne problemer',
'Portal:SelectLanguage' => 'Skift sprogindstilling',
'Portal:LanguageChangedTo_Lang' => 'Sprogindstilling ændres til: ',
'Portal:ChooseYourFavoriteLanguage' => 'Vælg dit foretrukne sprog',
));
?>

View File

@@ -28,7 +28,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="ref"/>
</attributes>
@@ -93,6 +92,10 @@
<value id="3">3</value>
<value id="4">4</value>
</values>
<dependencies>
<attribute id="impact"/>
<attribute id="urgency"/>
</dependencies>
<sql>priority</sql>
<default_value>4</default_value>
<is_null_allowed>false</is_null_allowed>
@@ -255,7 +258,7 @@
<thresholds>
<threshold id="75">
<highlight>
<code>critical</code>
<code>warning</code>
<persistent>false</persistent>
</highlight>
<actions>
@@ -522,7 +525,10 @@
<target>assigned</target>
<actions>
<action>
<verb>SetAssignedDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">assignment_date</param>
</params>
</action>
</actions>
</transition>
@@ -538,10 +544,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -560,7 +578,10 @@
<target>assigned</target>
<actions>
<action>
<verb>SetAssignedDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">assignment_date</param>
</params>
</action>
</actions>
</transition>
@@ -607,7 +628,10 @@
<target>pending</target>
<actions>
<action>
<verb>SetLastPendingDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">last_pending_date</param>
</params>
</action>
</actions>
</transition>
@@ -615,10 +639,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -634,10 +670,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -654,7 +702,10 @@
<target>pending</target>
<actions>
<action>
<verb>SetLastPendingDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">last_pending_date</param>
</params>
</action>
</actions>
</transition>
@@ -662,10 +713,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -677,10 +740,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -721,7 +796,10 @@
<target>assigned</target>
<actions>
<action>
<verb>SetAssignedDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">assignment_date</param>
</params>
</action>
</actions>
</transition>
@@ -729,10 +807,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -777,10 +867,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -876,7 +978,10 @@
<target>closed</target>
<actions>
<action>
<verb>SetClosureDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">close_date</param>
</params>
</action>
</actions>
</transition>
@@ -889,10 +994,22 @@
<target>resolved</target>
<actions>
<action>
<verb>SetResolveDate</verb>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>resolveChilds</verb>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
@@ -948,6 +1065,10 @@
</lifecycle>
<methods>
<method id="SetAssignedDate">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentDate() instead
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
@@ -958,6 +1079,10 @@
}]]></code>
</method>
<method id="SetLastPendingDate">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentDate() instead
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
@@ -968,6 +1093,10 @@
}]]></code>
</method>
<method id="SetResolveDate">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentDate() and SetElapsedTime() instead
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
@@ -980,6 +1109,10 @@
}]]></code>
</method>
<method id="SetClosureDate">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentDate() instead
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
@@ -990,6 +1123,10 @@
}]]></code>
</method>
<method id="SetApprover">
<comment><![CDATA[/**
* To be deprecated: use SetCurrentUser() instead
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
@@ -1045,7 +1182,11 @@
4 => 4,
),
);
$iPriority = $aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')];
$iPriority = 1;
if (isset($aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')]))
{
$iPriority = $aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')];
}
return $iPriority;
}]]></code>
</method>
@@ -1093,6 +1234,9 @@
}]]></code>
</method>
<method id="resolveChilds">
<comment><![CDATA[/**
* To be deprecated: use ResolveChildTickets() instead
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
@@ -1124,6 +1268,52 @@
}]]></code>
</method>
<method id="ResolveChildTickets">
<comment><![CDATA[/**
* Cascade the resolution to child User Request
* @return true (returning false would stop the ongoing transition)
*/]]></comment>
<static>false</static>
<access>public</access>
<type>LifecycleAction</type>
<arguments>
</arguments>
<code><![CDATA[ public function ResolveChildTickets()
{
// Automatically resolve child requests
$sOQL = "SELECT UserRequest WHERE parent_request_id = :ticket AND status != 'resolved'";
$oChildRequestSet = new DBObjectSet(DBObjectSearch::FromOQL($sOQL), array(), array('ticket' => $this->GetKey()));
while($oRequest = $oChildRequestSet->Fetch())
{
$oRequest->ResolveFrom($this);
}
return true;
}]]></code>
</method>
<method id="ResolveFrom">
<comment><![CDATA[/**
* Resolve the ticket from another resolved ticket
* @return void
*/]]></comment>
<static>false</static>
<access>public</access>
<type>Internal</type>
<code><![CDATA[ public function ResolveFrom($oParentTicket)
{
if ($this->Get('status') != 'resolved')
{
$this->Set('servicesubcategory_id', $oParentTicket->Get('servicesubcategory_id'));
$this->Set('service_id', $oParentTicket->Get('service_id'));
$this->Set('team_id', $oParentTicket->Get('team_id'));
$this->Set('agent_id', $oParentTicket->Get('agent_id'));
$this->Set('resolution_code', $oParentTicket->Get('resolution_code'));
$sParent = '[['.get_class($oParentTicket).':'.$oParentTicket->Get('ref').']]';
$this->Set('solution', Dict::Format('Tickets:ResolvedFrom', $sParent, MetaModel::GetName(get_class($oParentTicket))));
$this->ApplyStimulus('ev_autoresolve');
$this->DBUpdate();
}
}]]></code>
</method>
<method id="UpdateChildRequestLog">
<static>false</static>
<access>public</access>

View File

@@ -1,5 +1,5 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
// Copyright (C) 2010-2014 Combodo SARL
//
// This file is part of iTop.
//
@@ -290,6 +290,7 @@ Dict::Add('EN US', 'English', 'English', array(
'Portal:SelectLanguage' => "Change you language",
'Portal:LanguageChangedTo_Lang' => 'Language changed to',
'Portal:ChooseYourFavoriteLanguage' => 'Choose your favorite language',
));
?>
'Class:UserRequest/Method:ResolveChildTickets' => 'ResolveChildTickets',
'Class:UserRequest/Method:ResolveChildTickets+' => 'Cascade the resolution to child requests (ev_autoresolve), and align the following characteristics of the request: service, team, agent, resolution info',
));

View File

@@ -1,5 +1,5 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
// Copyright (C) 2010-2014 Combodo SARL
//
// This file is part of iTop.
//
@@ -280,5 +280,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Portal:SelectLanguage' => "Changer ma langue",
'Portal:LanguageChangedTo_Lang' => 'Langue changée en',
'Portal:ChooseYourFavoriteLanguage' => 'Choisissez votre langue',
'Class:UserRequest/Method:ResolveChildTickets' => 'ResolveChildTickets (résoudre les tickets fils)',
'Class:UserRequest/Method:ResolveChildTickets+' => 'Cascader l\'action de résolution de la demande (ev_autoresolve), et aligner les caractéristiques suivantes : service, équipe, agent, information de résolution',
));
?>

View File

@@ -0,0 +1,298 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
//
// This file is part of iTop.
//
// iTop is free software; you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// iTop is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with iTop. If not, see <http://www.gnu.org/licenses/>
/**
* @author LinProfs <info@linprofs.com>
*
* Linux & Open Source Professionals
* http://www.linprofs.com
*
* @copyright Copyright (C) 2010-2012 Combodo SARL
* @licence http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'Menu:RequestManagement' => 'Helpdesk',
'Menu:RequestManagement+' => 'Helpdesk',
'Menu:RequestManagementProvider' => 'Helpdesk leverancier',
'Menu:RequestManagementProvider+' => 'Helpdesk leverancier',
'Menu:UserRequest:Provider' => 'Open verzoeken Open requests overgebracht naar leverancier',
'Menu:UserRequest:Provider+' => 'Open verzoeken Open requests overgebracht naar leverancier',
'Menu:UserRequest:Overview' => 'Overzicht',
'Menu:UserRequest:Overview+' => 'Overzicht',
'Menu:NewUserRequest' => 'Nieuw gebruikersverzoek',
'Menu:NewUserRequest+' => 'Maak een nieuwe gebruikersverzoek ticket aan',
'Menu:SearchUserRequests' => 'Zoek naar gebruikersverzoeken',
'Menu:SearchUserRequests+' => 'Zoek naar gebruikersverzoeken',
'Menu:UserRequest:Shortcuts' => 'Snelkoppelingen',
'Menu:UserRequest:Shortcuts+' => '',
'Menu:UserRequest:MyRequests' => 'Verzoeken toegewezen aan mij',
'Menu:UserRequest:MyRequests+' => 'Verzoeken toegewezen aan mij (als Agent)',
'Menu:UserRequest:MySupportRequests' => 'Mijn support gesprekken',
'Menu:UserRequest:MySupportRequests+' => 'Mijn support gesprekken',
'Menu:UserRequest:EscalatedRequests' => 'Hot requests',
'Menu:UserRequest:EscalatedRequests+' => 'Hot requests',
'Menu:UserRequest:OpenRequests' => 'Alle open verzoeken',
'Menu:UserRequest:OpenRequests+' => 'Alle open verzoeken',
'UI:WelcomeMenu:MyAssignedCalls' => 'Verzoeken toegewezen aan mij',
'UI-RequestManagementOverview-RequestByType-last-14-days' => 'Verzoeken van de afgelopen 14 dagen (per type)',
'UI-RequestManagementOverview-Last-14-days' => 'Verzoeken van de afgelopen 14 dagen (per dag)',
'UI-RequestManagementOverview-OpenRequestByStatus' => 'Open verzoeken per status',
'UI-RequestManagementOverview-OpenRequestByAgent' => 'Open verzoeken per medewerker',
'UI-RequestManagementOverview-OpenRequestByType' => 'Open verzoeken per type',
'UI-RequestManagementOverview-OpenRequestByCustomer' => 'Open verzoeken per organisatie',
'Class:UserRequest:KnownErrorList' => 'Bekende fouten',
'Menu:UserRequest:MyWorkOrders' => 'Work orders toegewezen aan mij',
'Menu:UserRequest:MyWorkOrders+' => 'Alle work orders toegewezen aan mij',
'Class:Problem:KnownProblemList' => 'Bekende fouten',
));
// Dictionnay conventions
// Class:<class_name>
// Class:<class_name>+
// Class:<class_name>/Attribute:<attribute_code>
// Class:<class_name>/Attribute:<attribute_code>+
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
// Class:<class_name>/Stimulus:<stimulus_code>
// Class:<class_name>/Stimulus:<stimulus_code>+
//
// Class: UserRequest
//
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'Class:UserRequest' => 'Gebruikersverzoek',
'Class:UserRequest+' => '',
'Class:UserRequest/Attribute:status' => 'Status',
'Class:UserRequest/Attribute:status+' => '',
'Class:UserRequest/Attribute:status/Value:new' => 'Nieuw',
'Class:UserRequest/Attribute:status/Value:new+' => '',
'Class:UserRequest/Attribute:status/Value:escalated_tto' => 'Geëscaleerde TTO',
'Class:UserRequest/Attribute:status/Value:escalated_tto+' => '',
'Class:UserRequest/Attribute:status/Value:assigned' => 'Toegewezen',
'Class:UserRequest/Attribute:status/Value:assigned+' => '',
'Class:UserRequest/Attribute:status/Value:escalated_ttr' => 'Geëscaleerde TTR',
'Class:UserRequest/Attribute:status/Value:escalated_ttr+' => '',
'Class:UserRequest/Attribute:status/Value:waiting_for_approval' => 'Wacht voor goedkeuring',
'Class:UserRequest/Attribute:status/Value:waiting_for_approval+' => '',
'Class:UserRequest/Attribute:status/Value:approved' => 'Goedgekeurd',
'Class:UserRequest/Attribute:status/Value:approved+' => '',
'Class:UserRequest/Attribute:status/Value:rejected' => 'Afgewezen',
'Class:UserRequest/Attribute:status/Value:rejected+' => '',
'Class:UserRequest/Attribute:status/Value:pending' => 'In afwachting van',
'Class:UserRequest/Attribute:status/Value:pending+' => '',
'Class:UserRequest/Attribute:status/Value:resolved' => 'Opgelost',
'Class:UserRequest/Attribute:status/Value:resolved+' => '',
'Class:UserRequest/Attribute:status/Value:closed' => 'Gesloten',
'Class:UserRequest/Attribute:status/Value:closed+' => '',
'Class:UserRequest/Attribute:request_type' => 'Verzoek Type',
'Class:UserRequest/Attribute:request_type+' => '',
'Class:UserRequest/Attribute:request_type/Value:incident' => 'Incident',
'Class:UserRequest/Attribute:request_type/Value:incident+' => 'Incident',
'Class:UserRequest/Attribute:request_type/Value:service_request' => 'Service request',
'Class:UserRequest/Attribute:request_type/Value:service_request+' => 'Service request',
'Class:UserRequest/Attribute:impact' => 'Impact',
'Class:UserRequest/Attribute:impact+' => '',
'Class:UserRequest/Attribute:impact/Value:1' => 'Een afdeling',
'Class:UserRequest/Attribute:impact/Value:1+' => '',
'Class:UserRequest/Attribute:impact/Value:2' => 'Een dienst',
'Class:UserRequest/Attribute:impact/Value:2+' => '',
'Class:UserRequest/Attribute:impact/Value:3' => 'Een persoon',
'Class:UserRequest/Attribute:impact/Value:3+' => '',
'Class:UserRequest/Attribute:priority' => 'Prioriteit',
'Class:UserRequest/Attribute:priority+' => '',
'Class:UserRequest/Attribute:priority/Value:1' => 'kritisch',
'Class:UserRequest/Attribute:priority/Value:1+' => 'kritisch',
'Class:UserRequest/Attribute:priority/Value:2' => 'hoog',
'Class:UserRequest/Attribute:priority/Value:2+' => 'hoog',
'Class:UserRequest/Attribute:priority/Value:3' => 'normaal',
'Class:UserRequest/Attribute:priority/Value:3+' => 'normaal',
'Class:UserRequest/Attribute:priority/Value:4' => 'laag',
'Class:UserRequest/Attribute:priority/Value:4+' => 'laag',
'Class:UserRequest/Attribute:urgency' => 'Urgentie',
'Class:UserRequest/Attribute:urgency+' => '',
'Class:UserRequest/Attribute:urgency/Value:1' => 'kritisch',
'Class:UserRequest/Attribute:urgency/Value:1+' => 'kritisch',
'Class:UserRequest/Attribute:urgency/Value:2' => 'hoog',
'Class:UserRequest/Attribute:urgency/Value:2+' => 'hoog',
'Class:UserRequest/Attribute:urgency/Value:3' => 'normaal',
'Class:UserRequest/Attribute:urgency/Value:3+' => 'normaal',
'Class:UserRequest/Attribute:urgency/Value:4' => 'laag',
'Class:UserRequest/Attribute:urgency/Value:4+' => 'laag',
'Class:UserRequest/Attribute:origin' => 'Afkomst',
'Class:UserRequest/Attribute:origin+' => '',
'Class:UserRequest/Attribute:origin/Value:mail' => 'mail',
'Class:UserRequest/Attribute:origin/Value:mail+' => 'mail',
'Class:UserRequest/Attribute:origin/Value:monitoring' => 'monitoring',
'Class:UserRequest/Attribute:origin/Value:monitoring+' => 'monitoring',
'Class:UserRequest/Attribute:origin/Value:phone' => 'telefoon',
'Class:UserRequest/Attribute:origin/Value:phone+' => 'telefoon',
'Class:UserRequest/Attribute:origin/Value:portal' => 'portal',
'Class:UserRequest/Attribute:origin/Value:portal+' => 'portal',
'Class:UserRequest/Attribute:approver_id' => 'Goedkeurder',
'Class:UserRequest/Attribute:approver_id+' => '',
'Class:UserRequest/Attribute:approver_email' => 'Goedkeurder Email',
'Class:UserRequest/Attribute:approver_email+' => '',
'Class:UserRequest/Attribute:service_id' => 'Dienst',
'Class:UserRequest/Attribute:service_id+' => '',
'Class:UserRequest/Attribute:service_name' => 'Dienst naam',
'Class:UserRequest/Attribute:service_name+' => '',
'Class:UserRequest/Attribute:servicesubcategory_id' => 'Dienst subcategorie',
'Class:UserRequest/Attribute:servicesubcategory_id+' => '',
'Class:UserRequest/Attribute:servicesubcategory_name' => 'Dienst subcategorie naam',
'Class:UserRequest/Attribute:servicesubcategory_name+' => '',
'Class:UserRequest/Attribute:escalation_flag' => 'Hot Flag',
'Class:UserRequest/Attribute:escalation_flag+' => '',
'Class:UserRequest/Attribute:escalation_flag/Value:no' => 'Nee',
'Class:UserRequest/Attribute:escalation_flag/Value:no+' => 'Nee',
'Class:UserRequest/Attribute:escalation_flag/Value:yes' => 'Ja',
'Class:UserRequest/Attribute:escalation_flag/Value:yes+' => 'Ja',
'Class:UserRequest/Attribute:escalation_reason' => 'Hot reason',
'Class:UserRequest/Attribute:escalation_reason+' => '',
'Class:UserRequest/Attribute:assignment_date' => 'Toegewezen datum',
'Class:UserRequest/Attribute:assignment_date+' => '',
'Class:UserRequest/Attribute:resolution_date' => 'Resolutie datum',
'Class:UserRequest/Attribute:resolution_date+' => '',
'Class:UserRequest/Attribute:last_pending_date' => 'Laatste pending date',
'Class:UserRequest/Attribute:last_pending_date+' => '',
'Class:UserRequest/Attribute:cumulatedpending' => 'cumulatedpending',
'Class:UserRequest/Attribute:cumulatedpending+' => '',
'Class:UserRequest/Attribute:tto' => 'TTO',
'Class:UserRequest/Attribute:tto+' => '',
'Class:UserRequest/Attribute:ttr' => 'TTR',
'Class:UserRequest/Attribute:ttr+' => '',
'Class:UserRequest/Attribute:tto_escalation_deadline' => 'TTO Deadline',
'Class:UserRequest/Attribute:tto_escalation_deadline+' => '',
'Class:UserRequest/Attribute:sla_tto_passed' => 'SLA tto gepasseerd',
'Class:UserRequest/Attribute:sla_tto_passed+' => '',
'Class:UserRequest/Attribute:sla_tto_over' => 'SLA tto over',
'Class:UserRequest/Attribute:sla_tto_over+' => '',
'Class:UserRequest/Attribute:ttr_escalation_deadline' => 'TTR Deadline',
'Class:UserRequest/Attribute:ttr_escalation_deadline+' => '',
'Class:UserRequest/Attribute:sla_ttr_passed' => 'SLA ttr gepasseerd',
'Class:UserRequest/Attribute:sla_ttr_passed+' => '',
'Class:UserRequest/Attribute:sla_ttr_over' => 'SLA ttr over',
'Class:UserRequest/Attribute:sla_ttr_over+' => '',
'Class:UserRequest/Attribute:time_spent' => 'Resolutie vertraging',
'Class:UserRequest/Attribute:time_spent+' => '',
'Class:UserRequest/Attribute:resolution_code' => 'Resolutie code',
'Class:UserRequest/Attribute:resolution_code+' => '',
'Class:UserRequest/Attribute:resolution_code/Value:assistance' => 'assistentie',
'Class:UserRequest/Attribute:resolution_code/Value:assistance+' => 'assistentie',
'Class:UserRequest/Attribute:resolution_code/Value:bug fixed' => 'bug opgelost',
'Class:UserRequest/Attribute:resolution_code/Value:bug fixed+' => 'bug opgelost',
'Class:UserRequest/Attribute:resolution_code/Value:hardware repair' => 'hardware gerepareerd',
'Class:UserRequest/Attribute:resolution_code/Value:hardware repair+' => 'hardware gerepareerd',
'Class:UserRequest/Attribute:resolution_code/Value:other' => 'anders',
'Class:UserRequest/Attribute:resolution_code/Value:other+' => 'anders',
'Class:UserRequest/Attribute:resolution_code/Value:software patch' => 'software patch',
'Class:UserRequest/Attribute:resolution_code/Value:software patch+' => 'software patch',
'Class:UserRequest/Attribute:resolution_code/Value:system update' => 'systeem update',
'Class:UserRequest/Attribute:resolution_code/Value:system update+' => 'systeem update',
'Class:UserRequest/Attribute:resolution_code/Value:training' => 'training',
'Class:UserRequest/Attribute:resolution_code/Value:training+' => 'training',
'Class:UserRequest/Attribute:solution' => 'Oplossing',
'Class:UserRequest/Attribute:solution+' => '',
'Class:UserRequest/Attribute:pending_reason' => 'Reden waarvoor het in afwachting staat',
'Class:UserRequest/Attribute:pending_reason+' => '',
'Class:UserRequest/Attribute:parent_request_id' => 'Hoofd aanvraag',
'Class:UserRequest/Attribute:parent_request_id+' => '',
'Class:UserRequest/Attribute:parent_request_ref' => 'Ref request',
'Class:UserRequest/Attribute:parent_request_ref+' => '',
'Class:UserRequest/Attribute:parent_problem_id' => 'Hoofd probleem',
'Class:UserRequest/Attribute:parent_problem_id+' => '',
'Class:UserRequest/Attribute:parent_problem_ref' => 'Ref problem',
'Class:UserRequest/Attribute:parent_problem_ref+' => '',
'Class:UserRequest/Attribute:parent_change_id' => 'Hoofd change',
'Class:UserRequest/Attribute:parent_change_id+' => '',
'Class:UserRequest/Attribute:parent_change_ref' => 'Ref change',
'Class:UserRequest/Attribute:parent_change_ref+' => '',
'Class:UserRequest/Attribute:related_request_list' => 'Sub Verzoeken',
'Class:UserRequest/Attribute:related_request_list+' => 'Alle verzoeken die gelinkt zijn aan dit hoofdverzoek',
'Class:UserRequest/Attribute:public_log' => 'Publieke log',
'Class:UserRequest/Attribute:public_log+' => '',
'Class:UserRequest/Attribute:user_satisfaction' => 'Klant tevredenheid',
'Class:UserRequest/Attribute:user_satisfaction+' => '',
'Class:UserRequest/Attribute:user_satisfaction/Value:1' => 'Erg tevreden',
'Class:UserRequest/Attribute:user_satisfaction/Value:1+' => 'Erg tevreden',
'Class:UserRequest/Attribute:user_satisfaction/Value:2' => 'Tevreden',
'Class:UserRequest/Attribute:user_satisfaction/Value:2+' => 'Tevreden',
'Class:UserRequest/Attribute:user_satisfaction/Value:3' => 'Ontevreden',
'Class:UserRequest/Attribute:user_satisfaction/Value:3+' => 'Ontevreden',
'Class:UserRequest/Attribute:user_satisfaction/Value:4' => 'Erg ontevreden',
'Class:UserRequest/Attribute:user_satisfaction/Value:4+' => 'Erg ontevreden',
'Class:UserRequest/Attribute:user_comment' => 'Gebruikersreactie',
'Class:UserRequest/Attribute:user_comment+' => '',
'Class:UserRequest/Attribute:parent_request_id_friendlyname' => 'parent_request_id_friendlyname',
'Class:UserRequest/Attribute:parent_request_id_friendlyname+' => '',
'Class:UserRequest/Stimulus:ev_assign' => 'Wijs toe',
'Class:UserRequest/Stimulus:ev_assign+' => '',
'Class:UserRequest/Stimulus:ev_reassign' => 'Wijs opnieuw toe',
'Class:UserRequest/Stimulus:ev_reassign+' => '',
'Class:UserRequest/Stimulus:ev_approve' => 'Keur goed',
'Class:UserRequest/Stimulus:ev_approve+' => '',
'Class:UserRequest/Stimulus:ev_reject' => 'Keur af',
'Class:UserRequest/Stimulus:ev_reject+' => '',
'Class:UserRequest/Stimulus:ev_pending' => 'In afwachting',
'Class:UserRequest/Stimulus:ev_pending+' => '',
'Class:UserRequest/Stimulus:ev_timeout' => 'Timeout',
'Class:UserRequest/Stimulus:ev_timeout+' => '',
'Class:UserRequest/Stimulus:ev_autoresolve' => 'Automatisch oplossen',
'Class:UserRequest/Stimulus:ev_autoresolve+' => '',
'Class:UserRequest/Stimulus:ev_autoclose' => 'Automatisch sluiten',
'Class:UserRequest/Stimulus:ev_autoclose+' => '',
'Class:UserRequest/Stimulus:ev_resolve' => 'Markeren als opgelost',
'Class:UserRequest/Stimulus:ev_resolve+' => '',
'Class:UserRequest/Stimulus:ev_close' => 'Sluit dit verzoek',
'Class:UserRequest/Stimulus:ev_close+' => '',
'Class:UserRequest/Stimulus:ev_reopen' => 'Her-open',
'Class:UserRequest/Stimulus:ev_reopen+' => '',
'Class:UserRequest/Stimulus:ev_wait_for_approval' => 'Wacht op goedkeuring',
'Class:UserRequest/Stimulus:ev_wait_for_approval+' => '',
'Class:UserRequest/Error:CannotAssignParentRequestIdToSelf' => 'Kan niet toewijzen aan hoofdverzoek en aan het verzoek zelf',
));
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'Portal:TitleDetailsFor_Request' => 'Details van het verzoek',
'Portal:ButtonUpdate' => 'Update',
'Portal:ButtonClose' => 'Sluit',
'Portal:ButtonReopen' => 'Heropen',
'Portal:ShowServices' => 'Dienst catalogus',
'Portal:SelectRequestType' => 'Selecteer een type verzoek',
'Portal:SelectServiceElementFrom_Service' => 'Selecteer een dienst voor %1$s',
'Portal:ListServices' => 'Lijst met diensten',
'Portal:TitleDetailsFor_Service' => 'Details van de Dienst',
'Portal:Button:CreateRequestFromService' => 'Maak een verzoek aan voor deze dienst',
'Portal:ListOpenRequests' => 'Lijst met open verzoeken',
'Portal:UserRequest:MoreInfo' => 'Meer informatie',
'Portal:Details-Service-Element' => 'Dienst elementen',
'Portal:NoClosedTicket' => 'Geen gesloten verzoeken',
'Portal:NoService' => '',
'Portal:ListOpenProblems' => 'Openstaande problemen',
'Portal:ShowProblem' => 'Problemen',
'Portal:ShowFaqs' => 'FAQs',
'Portal:NoOpenProblem' => 'Geen open probleem',
'Portal:SelectLanguage' => 'Verander je Taal',
'Portal:LanguageChangedTo_Lang' => 'Taal veranderd naar',
'Portal:ChooseYourFavoriteLanguage' => 'Kies je favoriete taal',
));
?>

View File

@@ -0,0 +1,347 @@
<?php
// Copyright (C) 2010-2012 Combodo SARL
//
// This file is part of iTop.
//
// iTop is free software; you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// iTop is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with iTop. If not, see <http://www.gnu.org/licenses/>
/**
* @author Erik Bøg <erik@boegmoeller.dk>
* @copyright Copyright (C) 2010-2012 Combodo SARL
* @licence http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:ContractType' => 'Kontrakt-Type',
'Class:ContractType+' => '',
'Class:CustomerContract' => 'Kundekontrakt',
'Class:CustomerContract+' => '',
'Class:CustomerContract/Attribute:services_list' => 'Ydelser',
'Class:CustomerContract/Attribute:services_list+' => '',
'Class:CustomerContract/Attribute:functionalcis_list' => 'CIs',
'Class:CustomerContract/Attribute:functionalcis_list+' => '',
'Class:CustomerContract/Attribute:providercontracts_list' => 'Leverandørkontrakter',
'Class:CustomerContract/Attribute:providercontracts_list+' => '',
'Class:ProviderContract' => 'Leverandørkontrakt',
'Class:ProviderContract+' => '',
'Class:ProviderContract/Attribute:functionalcis_list' => 'CIs',
'Class:ProviderContract/Attribute:functionalcis_list+' => '',
'Class:ProviderContract/Attribute:sla' => 'SLA',
'Class:ProviderContract/Attribute:sla+' => '',
'Class:ProviderContract/Attribute:coverage' => 'Servicetider',
'Class:ProviderContract/Attribute:coverage+' => '',
'Class:lnkContactToContract' => 'Sammenhæng Kontakt/Kontrakt',
'Class:lnkContactToContract+' => '',
'Class:lnkContactToContract/Attribute:contract_id' => 'Kontrakt',
'Class:lnkContactToContract/Attribute:contract_id+' => '',
'Class:lnkContactToContract/Attribute:contact_id' => 'Kontakt',
'Class:lnkContactToContract/Attribute:contact_id+' => '',
'Class:lnkContractToDocument' => 'Sammenhæng Kontrakt/Dokument',
'Class:lnkContractToDocument+' => '',
'Class:lnkContractToDocument/Attribute:contract_id' => 'Kontrakt',
'Class:lnkContractToDocument/Attribute:contract_id+' => '',
'Class:lnkContractToDocument/Attribute:document_id' => 'Dokument',
'Class:lnkContractToDocument/Attribute:document_id+' => '',
'Class:lnkFunctionalCIToProviderContract' => 'Sammenhæng FunctionalCI/Leverandørkontrakt',
'Class:lnkFunctionalCIToProviderContract+' => '',
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id' => 'Leverandørkontrakt',
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id+' => '',
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_id' => 'CI',
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_id+' => '',
'Class:ServiceFamily' => 'Ydelsesfamilie',
'Class:ServiceFamily+' => '',
'Class:ServiceFamily/Attribute:name' => 'Navn',
'Class:ServiceFamily/Attribute:name+' => '',
'Class:ServiceFamily/Attribute:services_list' => 'Ydelser',
'Class:ServiceFamily/Attribute:services_list+' => '',
'Class:Service' => 'Ydelse',
'Class:Service+' => '',
'Class:Service/Attribute:name' => 'Navn',
'Class:Service/Attribute:name+' => '',
'Class:Service/Attribute:org_id' => 'Organisation',
'Class:Service/Attribute:org_id+' => '',
'Class:Service/Attribute:description' => 'Beskrivelse',
'Class:Service/Attribute:description+' => '',
'Class:Service/Attribute:documents_list' => 'Dokument',
'Class:Service/Attribute:documents_list+' => '',
'Class:Service/Attribute:contacts_list' => 'Kontakt',
'Class:Service/Attribute:contacts_list+' => '',
'Class:Service/Attribute:status' => 'Status',
'Class:Service/Attribute:status+' => '',
'Class:Service/Attribute:status/Value:implementation' => 'Implementering',
'Class:Service/Attribute:status/Value:implementation+' => '',
'Class:Service/Attribute:status/Value:obsolete' => 'Forældet',
'Class:Service/Attribute:status/Value:obsolete+' => '',
'Class:Service/Attribute:status/Value:production' => 'Produktion',
'Class:Service/Attribute:status/Value:production+' => '',
'Class:Service/Attribute:customercontracts_list' => 'Kundekontrakt',
'Class:Service/Attribute:customercontracts_list+' => '',
'Class:Service/Attribute:servicesubcategories_list' => 'Ydelses underkategorier',
'Class:Service/Attribute:servicesubcategories_list+' => '',
'Class:lnkDocumentToService' => 'Sammenhæng Dokument/Ydelse',
'Class:lnkDocumentToService+' => '',
'Class:lnkDocumentToService/Attribute:service_id' => 'Ydelse',
'Class:lnkDocumentToService/Attribute:service_id+' => '',
'Class:lnkDocumentToService/Attribute:document_id' => 'Dokument',
'Class:lnkDocumentToService/Attribute:document_id+' => '',
'Class:lnkContactToService' => 'Sammenhæng Kontakt/Ydelse',
'Class:lnkContactToService+' => '',
'Class:lnkContactToService/Attribute:service_id' => 'Ydelse',
'Class:lnkContactToService/Attribute:service_id+' => '',
'Class:lnkContactToService/Attribute:contact_id' => 'Kontakt',
'Class:lnkContactToService/Attribute:contact_id+' => '',
'Class:ServiceSubcategory' => 'Ydelses underkategori',
'Class:ServiceSubcategory+' => '',
'Class:ServiceSubcategory/Attribute:name' => 'Navn',
'Class:ServiceSubcategory/Attribute:name+' => '',
'Class:ServiceSubcategory/Attribute:description' => 'Beskrivelse',
'Class:ServiceSubcategory/Attribute:description+' => '',
'Class:ServiceSubcategory/Attribute:service_id' => 'Ydelse',
'Class:ServiceSubcategory/Attribute:service_id+' => '',
'Class:ServiceSubcategory/Attribute:request_type' => 'Anmodnings type',
'Class:ServiceSubcategory/Attribute:request_type+' => '',
'Class:ServiceSubcategory/Attribute:request_type/Value:incident' => 'Incident',
'Class:ServiceSubcategory/Attribute:request_type/Value:incident+' => '',
'Class:ServiceSubcategory/Attribute:request_type/Value:service_request' => 'Service Anmodning',
'Class:ServiceSubcategory/Attribute:request_type/Value:service_request+' => '',
'Class:ServiceSubcategory/Attribute:status' => 'Status',
'Class:ServiceSubcategory/Attribute:status+' => '',
'Class:ServiceSubcategory/Attribute:status/Value:implementation' => 'Implementering',
'Class:ServiceSubcategory/Attribute:status/Value:implementation+' => '',
'Class:ServiceSubcategory/Attribute:status/Value:obsolete' => 'Forældet',
'Class:ServiceSubcategory/Attribute:status/Value:obsolete+' => '',
'Class:ServiceSubcategory/Attribute:status/Value:production' => 'Produktion',
'Class:ServiceSubcategory/Attribute:status/Value:production+' => '',
'Class:SLA' => 'SLA',
'Class:SLA+' => '',
'Class:SLA/Attribute:name' => 'Navn',
'Class:SLA/Attribute:name+' => '',
'Class:SLA/Attribute:description' => 'Beskrivelse',
'Class:SLA/Attribute:description+' => '',
'Class:SLA/Attribute:org_id' => 'Organisation',
'Class:SLA/Attribute:org_id+' => '',
'Class:SLA/Attribute:slts_list' => 'SLTs',
'Class:SLA/Attribute:slts_list+' => '',
'Class:SLA/Attribute:customercontracts_list' => 'Kundekontrakt',
'Class:SLA/Attribute:customercontracts_list+' => '',
'Class:SLT' => 'SLT',
'Class:SLT+' => '',
'Class:SLT/Attribute:name' => 'Navn',
'Class:SLT/Attribute:name+' => '',
'Class:SLT/Attribute:priority' => 'Prioritet',
'Class:SLT/Attribute:priority+' => '',
'Class:SLT/Attribute:priority/Value:1' => 'Kritisk',
'Class:SLT/Attribute:priority/Value:1+' => '',
'Class:SLT/Attribute:priority/Value:2' => 'Høj',
'Class:SLT/Attribute:priority/Value:2+' => '',
'Class:SLT/Attribute:priority/Value:3' => 'Middel',
'Class:SLT/Attribute:priority/Value:3+' => '',
'Class:SLT/Attribute:priority/Value:4' => 'Lav',
'Class:SLT/Attribute:priority/Value:4+' => '',
'Class:SLT/Attribute:request_type' => 'Anmodnings type',
'Class:SLT/Attribute:request_type+' => '',
'Class:SLT/Attribute:request_type/Value:incident' => 'Incident',
'Class:SLT/Attribute:request_type/Value:incident+' => '',
'Class:SLT/Attribute:request_type/Value:service_request' => 'Service Anmodning',
'Class:SLT/Attribute:request_type/Value:service_request+' => '',
'Class:SLT/Attribute:metric' => 'Metrisk',
'Class:SLT/Attribute:metric+' => '',
'Class:SLT/Attribute:metric/Value:tto' => 'TTO (Time To Own)',
'Class:SLT/Attribute:metric/Value:tto+' => '',
'Class:SLT/Attribute:metric/Value:ttr' => 'TTR (Time To Resolve)',
'Class:SLT/Attribute:metric/Value:ttr+' => '',
'Class:SLT/Attribute:value' => 'Værdi',
'Class:SLT/Attribute:value+' => '',
'Class:SLT/Attribute:unit' => 'Enhed',
'Class:SLT/Attribute:unit+' => '',
'Class:SLT/Attribute:unit/Value:hours' => 'Timer',
'Class:SLT/Attribute:unit/Value:hours+' => '',
'Class:SLT/Attribute:unit/Value:minutes' => 'Minutter',
'Class:SLT/Attribute:unit/Value:minutes+' => '',
'Class:lnkSLAToSLT' => 'Sammenhæng SLA/SLT',
'Class:lnkSLAToSLT+' => '',
'Class:lnkSLAToSLT/Attribute:sla_id' => 'SLA',
'Class:lnkSLAToSLT/Attribute:sla_id+' => '',
'Class:lnkSLAToSLT/Attribute:slt_id' => 'SLT',
'Class:lnkSLAToSLT/Attribute:slt_id+' => '',
'Class:lnkCustomerContractToService' => 'Sammenhæng Kundekontrakt/Ydelse',
'Class:lnkCustomerContractToService+' => '',
'Class:lnkCustomerContractToService/Attribute:customercontract_id' => 'Kundekontrakt',
'Class:lnkCustomerContractToService/Attribute:customercontract_id+' => '',
'Class:lnkCustomerContractToService/Attribute:service_id' => 'Ydelse',
'Class:lnkCustomerContractToService/Attribute:service_id+' => '',
'Class:lnkCustomerContractToService/Attribute:sla_id' => 'SLA',
'Class:lnkCustomerContractToService/Attribute:sla_id+' => '',
'Class:lnkCustomerContractToProviderContract' => 'Sammenhæng Kundekontrakt/Leverandørkontrakt',
'Class:lnkCustomerContractToProviderContract+' => '',
'Class:lnkCustomerContractToProviderContract/Attribute:customercontract_id' => 'Kundekontrakt',
'Class:lnkCustomerContractToProviderContract/Attribute:customercontract_id+' => '',
'Class:lnkCustomerContractToProviderContract/Attribute:providercontract_id' => 'Leverandørkontrakt',
'Class:lnkCustomerContractToProviderContract/Attribute:providercontract_id+' => '',
'Class:lnkCustomerContractToFunctionalCI' => 'Sammenhæng Kundekontrakt/FunctionalCI',
'Class:lnkCustomerContractToFunctionalCI+' => '',
'Class:lnkCustomerContractToFunctionalCI/Attribute:customercontract_id' => 'Kundekontrakt',
'Class:lnkCustomerContractToFunctionalCI/Attribute:customercontract_id+' => '',
'Class:lnkCustomerContractToFunctionalCI/Attribute:functionalci_id' => 'CI',
'Class:lnkCustomerContractToFunctionalCI/Attribute:functionalci_id+' => '',
'Class:DeliveryModel' => 'Leverings model',
'Class:DeliveryModel+' => '',
'Class:DeliveryModel/Attribute:name' => 'Navn',
'Class:DeliveryModel/Attribute:name+' => '',
'Class:DeliveryModel/Attribute:org_id' => 'Organisation',
'Class:DeliveryModel/Attribute:org_id+' => '',
'Class:DeliveryModel/Attribute:description' => 'Beskrivelse',
'Class:DeliveryModel/Attribute:description+' => '',
'Class:DeliveryModel/Attribute:contacts_list' => 'Kontakt',
'Class:DeliveryModel/Attribute:contacts_list+' => '',
'Class:DeliveryModel/Attribute:customers_list' => 'Kunde',
'Class:DeliveryModel/Attribute:customers_list+' => '',
'Class:lnkDeliveryModelToContact' => 'Sammenhæng Leveringsmodel/Kontakt',
'Class:lnkDeliveryModelToContact+' => '',
'Class:lnkDeliveryModelToContact/Attribute:deliverymodel_id' => 'Leverings model',
'Class:lnkDeliveryModelToContact/Attribute:deliverymodel_id+' => '',
'Class:lnkDeliveryModelToContact/Attribute:contact_id' => 'Kontakt',
'Class:lnkDeliveryModelToContact/Attribute:contact_id+' => '',
'Class:lnkDeliveryModelToContact/Attribute:role_id' => 'Rolle',
'Class:lnkDeliveryModelToContact/Attribute:role_id+' => '',
'Menu:ServiceManagement' => 'Service-Management',
'Menu:ServiceManagement+' => '',
'Menu:Service:Overview' => 'Oversigt',
'Menu:Service:Overview+' => '',
'UI-ServiceManagementMenu-ContractsBySrvLevel' => 'Kontrakter efter Service Level',
'UI-ServiceManagementMenu-ContractsByStatus' => 'Kontrakter efter Status',
'UI-ServiceManagementMenu-ContractsEndingIn30Days' => 'Kontrakter som udløber om mindre end 30 dage',
'Menu:ServiceType' => 'Ydelsestype',
'Menu:ServiceType+' => '',
'Menu:ProviderContract' => 'Leverandørkontrakter',
'Menu:ProviderContract+' => '',
'Menu:CustomerContract' => 'Kundekontrakter',
'Menu:CustomerContract+' => '',
'Menu:ServiceSubcategory' => 'Ydelses underkategori',
'Menu:ServiceSubcategory+' => '',
'Menu:Service' => 'Ydelser',
'Menu:Service+' => '',
'Menu:ServiceElement' => 'Ydelses elementer',
'Menu:ServiceElement+' => '',
'Menu:SLA' => 'SLAs',
'Menu:SLA+' => '',
'Menu:SLT' => 'SLTs',
'Menu:SLT+' => '',
'Menu:DeliveryModel' => 'Leveringsmodel',
'Menu:DeliveryModel+' => '',
'Class:Contract' => 'Kontrakt',
'Class:Contract+' => '',
'Class:Contract/Attribute:name' => 'Navn',
'Class:Contract/Attribute:name+' => '',
'Class:Contract/Attribute:org_id' => 'Organisation',
'Class:Contract/Attribute:org_id+' => '',
'Class:Contract/Attribute:organization_name' => 'Organisations navn',
'Class:Contract/Attribute:organization_name+' => '',
'Class:Contract/Attribute:contacts_list' => 'Kontakter',
'Class:Contract/Attribute:contacts_list+' => '',
'Class:Contract/Attribute:documents_list' => 'Dokumenter',
'Class:Contract/Attribute:documents_list+' => '',
'Class:Contract/Attribute:description' => 'Beskrivelse',
'Class:Contract/Attribute:description+' => '',
'Class:Contract/Attribute:start_date' => 'Startdato',
'Class:Contract/Attribute:start_date+' => '',
'Class:Contract/Attribute:end_date' => 'Slutdato',
'Class:Contract/Attribute:end_date+' => '',
'Class:Contract/Attribute:cost' => 'Omkostninger',
'Class:Contract/Attribute:cost+' => '',
'Class:Contract/Attribute:cost_currency' => 'Valuta',
'Class:Contract/Attribute:cost_currency+' => '',
'Class:Contract/Attribute:cost_currency/Value:dollars' => 'Dollar',
'Class:Contract/Attribute:cost_currency/Value:dollars+' => '',
'Class:Contract/Attribute:cost_currency/Value:euros' => 'Euro',
'Class:Contract/Attribute:cost_currency/Value:euros+' => '',
'Class:Contract/Attribute:cost_currency/Value:kroner' => 'Kroner',
'Class:Contract/Attribute:cost_currency/Value:kroner+' => 'Danske kroner',
'Class:Contract/Attribute:contracttype_id' => 'Kontrakttype',
'Class:Contract/Attribute:contracttype_id+' => '',
'Class:Contract/Attribute:contracttype_name' => 'Kontrakt type navn',
'Class:Contract/Attribute:contracttype_name+' => '',
'Class:Contract/Attribute:billing_frequency' => 'Afregnings frekvens',
'Class:Contract/Attribute:billing_frequency+' => '',
'Class:Contract/Attribute:cost_unit' => 'Enhedsomkostninger',
'Class:Contract/Attribute:cost_unit+' => '',
'Class:Contract/Attribute:provider_id' => 'Leverandør',
'Class:Contract/Attribute:provider_id+' => '',
'Class:Contract/Attribute:provider_name' => 'Leverandør navn',
'Class:Contract/Attribute:provider_name+' => '',
'Class:Contract/Attribute:status' => 'Status',
'Class:Contract/Attribute:status+' => '',
'Class:Contract/Attribute:status/Value:implementation' => 'Implementering',
'Class:Contract/Attribute:status/Value:implementation+' => '',
'Class:Contract/Attribute:status/Value:obsolete' => 'Forældet',
'Class:Contract/Attribute:status/Value:obsolete+' => '',
'Class:Contract/Attribute:status/Value:production' => 'Produktion',
'Class:Contract/Attribute:status/Value:production+' => '',
'Class:Contract/Attribute:finalclass' => 'Kontrakttype',
'Class:Contract/Attribute:finalclass+' => '',
'Class:lnkContactToContract/Attribute:contract_name' => 'Kontrakt navn',
'Class:lnkContactToContract/Attribute:contract_name+' => '',
'Class:lnkContactToContract/Attribute:contact_name' => 'Kontakt navn',
'Class:lnkContactToContract/Attribute:contact_name+' => '',
'Class:lnkContractToDocument/Attribute:contract_name' => 'Kontrakt navn',
'Class:lnkContractToDocument/Attribute:contract_name+' => '',
'Class:lnkContractToDocument/Attribute:document_name' => 'Dokument navn',
'Class:lnkContractToDocument/Attribute:document_name+' => '',
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_name' => 'Leverandørkontrakt navn',
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_name+' => '',
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_name' => 'CI navn',
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_name+' => '',
'Class:Service/Attribute:organization_name' => 'Navn',
'Class:Service/Attribute:organization_name+' => '',
'Class:lnkDocumentToService/Attribute:service_name' => 'Ydelses navn',
'Class:lnkDocumentToService/Attribute:service_name+' => '',
'Class:lnkDocumentToService/Attribute:document_name' => 'Dokument navn',
'Class:lnkDocumentToService/Attribute:document_name+' => '',
'Class:lnkContactToService/Attribute:service_name' => 'Ydelses navn',
'Class:lnkContactToService/Attribute:service_name+' => '',
'Class:lnkContactToService/Attribute:contact_name' => 'Kontakt navn',
'Class:lnkContactToService/Attribute:contact_name+' => '',
'Class:ServiceSubcategory/Attribute:service_name' => 'Ydelses navn',
'Class:ServiceSubcategory/Attribute:service_name+' => '',
'Class:SLA/Attribute:organization_name' => 'Organisations navn',
'Class:SLA/Attribute:organization_name+' => '',
'Class:lnkSLAToSLT/Attribute:sla_name' => 'SLA navn',
'Class:lnkSLAToSLT/Attribute:sla_name+' => '',
'Class:lnkSLAToSLT/Attribute:slt_name' => 'SLT navn',
'Class:lnkSLAToSLT/Attribute:slt_name+' => '',
'Class:lnkCustomerContractToService/Attribute:customercontract_name' => 'Kundekontrakt navn',
'Class:lnkCustomerContractToService/Attribute:customercontract_name+' => '',
'Class:lnkCustomerContractToService/Attribute:service_name' => 'Ydelses navn',
'Class:lnkCustomerContractToService/Attribute:service_name+' => '',
'Class:lnkCustomerContractToService/Attribute:sla_name' => 'SLA-Navn',
'Class:lnkCustomerContractToService/Attribute:sla_name+' => '',
'Class:lnkCustomerContractToProviderContract/Attribute:customercontract_name' => 'Kundekontrakt navn',
'Class:lnkCustomerContractToProviderContract/Attribute:customercontract_name+' => '',
'Class:lnkCustomerContractToProviderContract/Attribute:providercontract_name' => 'Leverandørkontrakt navn',
'Class:lnkCustomerContractToProviderContract/Attribute:providercontract_name+' => '',
'Class:lnkCustomerContractToFunctionalCI/Attribute:customercontract_name' => 'Kundekontrakt navn',
'Class:lnkCustomerContractToFunctionalCI/Attribute:customercontract_name+' => '',
'Class:lnkCustomerContractToFunctionalCI/Attribute:functionalci_name' => 'CI navn',
'Class:lnkCustomerContractToFunctionalCI/Attribute:functionalci_name+' => '',
'Class:DeliveryModel/Attribute:organization_name' => 'Organisations navn',
'Class:DeliveryModel/Attribute:organization_name+' => '',
'Class:lnkDeliveryModelToContact/Attribute:deliverymodel_name' => 'Leveringsmodel navn',
'Class:lnkDeliveryModelToContact/Attribute:deliverymodel_name+' => '',
'Class:lnkDeliveryModelToContact/Attribute:contact_name' => 'Kontaktnavn',
'Class:lnkDeliveryModelToContact/Attribute:contact_name+' => '',
'Class:lnkDeliveryModelToContact/Attribute:role_name' => 'Rolle navn',
'Class:lnkDeliveryModelToContact/Attribute:role_name+' => '',
));
?>

View File

@@ -56,7 +56,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field>finalclass</db_final_class_field>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -298,7 +297,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -347,7 +345,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -517,7 +514,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -694,7 +690,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="contract_id"/>
<attribute id="contact_id"/>
@@ -776,7 +771,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="contract_id"/>
<attribute id="document_id"/>
@@ -858,7 +852,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="providercontract_id"/>
<attribute id="functionalci_id"/>
@@ -939,7 +932,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1005,7 +997,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1173,7 +1164,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="service_id"/>
<attribute id="document_id"/>
@@ -1255,7 +1245,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="service_id"/>
<attribute id="contact_id"/>
@@ -1336,7 +1325,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1444,7 +1432,7 @@
<item id="request_type">
<rank>50</rank>
</item>
<item id="service_provider">
<item id="service_org_id">
<rank>60</rank>
</item>
</items>
@@ -1477,7 +1465,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1586,7 +1573,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -1734,7 +1720,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="sla_id"/>
<attribute id="slt_id"/>
@@ -1856,7 +1841,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="customercontract_id"/>
<attribute id="service_id"/>
@@ -1954,7 +1938,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="customercontract_id"/>
<attribute id="providercontract_id"/>
@@ -2036,7 +2019,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="customercontract_id"/>
<attribute id="functionalci_id"/>
@@ -2117,7 +2099,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s</format>
<attributes>
<attribute id="name"/>
</attributes>
@@ -2164,7 +2145,7 @@
<field id="customers_list" xsi:type="AttributeLinkedSet">
<linked_class>Organization</linked_class>
<ext_key_to_me>deliverymodel_id</ext_key_to_me>
<edit_mode>none</edit_mode>
<edit_mode>add_remove</edit_mode>
<count_min>0</count_min>
<count_max>0</count_max>
<duplicates/>
@@ -2224,7 +2205,6 @@
<db_key_field>id</db_key_field>
<db_final_class_field/>
<naming>
<format>%1$s %2$s</format>
<attributes>
<attribute id="deliverymodel_id"/>
<attribute id="contact_id"/>

Some files were not shown because too many files have changed in this diff Show More