mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-19 18:34:12 +01:00
Compare commits
260 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b8892e9651 | ||
|
|
8cde0ce5c5 | ||
|
|
2fd9523c16 | ||
|
|
48c4e2d13d | ||
|
|
a4f6f6e877 | ||
|
|
6042e7f74d | ||
|
|
94c604a6af | ||
|
|
f84e2060be | ||
|
|
6995a3c641 | ||
|
|
4ee70cb95a | ||
|
|
9865bf0779 | ||
|
|
f63f3bb547 | ||
|
|
d5449cca42 | ||
|
|
181c180824 | ||
|
|
5d38d22c50 | ||
|
|
974c155855 | ||
|
|
99d69493d1 | ||
|
|
c9bb628c30 | ||
|
|
08e8d15d78 | ||
|
|
bed1db9c51 | ||
|
|
7e3e8e43a8 | ||
|
|
7b59df216b | ||
|
|
cb5eab812e | ||
|
|
484a0bb6b6 | ||
|
|
c9b73a7fe2 | ||
|
|
6f1de11c59 | ||
|
|
e02b6ee14a | ||
|
|
3b2da39469 | ||
|
|
c5b43f3157 | ||
|
|
fc22d91232 | ||
|
|
3068a6a360 | ||
|
|
083a0b79bf | ||
|
|
e22220b4fe | ||
|
|
b10bcb976d | ||
|
|
154a20b757 | ||
|
|
79c24dfc96 | ||
|
|
b9d960e89e | ||
|
|
8540ec644a | ||
|
|
5b19593ede | ||
|
|
0915081f50 | ||
|
|
a23d629e31 | ||
|
|
47ccd7589f | ||
|
|
7521fc3006 | ||
|
|
c955fe00b7 | ||
|
|
5a43448644 | ||
|
|
a2b9583379 | ||
|
|
77409eed99 | ||
|
|
09be84f69d | ||
|
|
d9bdcfeae3 | ||
|
|
d725ba3d84 | ||
|
|
8a3d81c430 | ||
|
|
83a70daf68 | ||
|
|
cbb37f27d7 | ||
|
|
e21dc4d21c | ||
|
|
a49a4e6c2b | ||
|
|
8fa9336568 | ||
|
|
15148f7d1d | ||
|
|
7e8589ba95 | ||
|
|
fba668207f | ||
|
|
798cd10d6b | ||
|
|
442721bcb5 | ||
|
|
1a9049d277 | ||
|
|
c0931af91a | ||
|
|
29e9a06dc1 | ||
|
|
d6415042ae | ||
|
|
90006667fe | ||
|
|
fd351df08b | ||
|
|
7419749ba6 | ||
|
|
73bed04555 | ||
|
|
8893cdac1d | ||
|
|
7f245a15be | ||
|
|
b5c46ccd4a | ||
|
|
7fbc211c43 | ||
|
|
cf774cdb90 | ||
|
|
722a58491c | ||
|
|
037dfe1df6 | ||
|
|
0b26d45014 | ||
|
|
b9c566238a | ||
|
|
4fd8177165 | ||
|
|
0cc0f39d9e | ||
|
|
a2cdf214f0 | ||
|
|
4f75d012e5 | ||
|
|
013173019f | ||
|
|
fadfd94bac | ||
|
|
9469681a0c | ||
|
|
da27ddba82 | ||
|
|
c72cb7e70e | ||
|
|
9df92665e0 | ||
|
|
3647291475 | ||
|
|
6dc6392fab | ||
|
|
e793b02f8b | ||
|
|
fc6e98b534 | ||
|
|
8ecebee511 | ||
|
|
2690fa3315 | ||
|
|
35cd965360 | ||
|
|
83a5b98f82 | ||
|
|
e5dd51f637 | ||
|
|
4923418f58 | ||
|
|
0a6c82dfe1 | ||
|
|
2dd7f5cada | ||
|
|
24c0f4950f | ||
|
|
d4dbbc59d4 | ||
|
|
dc0cd44c79 | ||
|
|
f3c4fcb0f5 | ||
|
|
6046f44f56 | ||
|
|
6c6131ce03 | ||
|
|
343e87a8d4 | ||
|
|
e76728b2bf | ||
|
|
f65c690462 | ||
|
|
ecf8bc42fa | ||
|
|
ea8509db1f | ||
|
|
df25ce76b6 | ||
|
|
e946fc65fc | ||
|
|
dbe2f66539 | ||
|
|
0d8ff7bbac | ||
|
|
61a9a4ac65 | ||
|
|
1f4dcc4f9e | ||
|
|
e86309669e | ||
|
|
6ebcd44bb1 | ||
|
|
bf768311c2 | ||
|
|
d130959692 | ||
|
|
a8c689c6c0 | ||
|
|
1990ccb5d8 | ||
|
|
e107be56e4 | ||
|
|
f6653e1594 | ||
|
|
65bb76b9e3 | ||
|
|
d951d3b872 | ||
|
|
ccceb870e3 | ||
|
|
ed6df77cbb | ||
|
|
1ad28312ec | ||
|
|
f002aa04cd | ||
|
|
b86d70623e | ||
|
|
fe3467309d | ||
|
|
851ab9c356 | ||
|
|
aef3c2e609 | ||
|
|
f04fc546b5 | ||
|
|
13ad98b9b3 | ||
|
|
4be54fdd65 | ||
|
|
6d13397ba1 | ||
|
|
d64a91d4ce | ||
|
|
c0c8a13864 | ||
|
|
d2eef06276 | ||
|
|
880a824f2f | ||
|
|
7aa478d6ff | ||
|
|
734a788340 | ||
|
|
e5b6e2eb8c | ||
|
|
1682a85cc0 | ||
|
|
cd9beec313 | ||
|
|
8295eaed90 | ||
|
|
829b648dd2 | ||
|
|
5475b9fbbe | ||
|
|
6f8e7c7002 | ||
|
|
772368ef8a | ||
|
|
a57b6471c9 | ||
|
|
bc7c1b4744 | ||
|
|
046e857768 | ||
|
|
4d8246c4d8 | ||
|
|
5c61d725e1 | ||
|
|
00b070b3cf | ||
|
|
2c4cad4dac | ||
|
|
89145593ef | ||
|
|
b2e80d37dd | ||
|
|
6432678de9 | ||
|
|
71ed784c60 | ||
|
|
da45651121 | ||
|
|
d388ce9a06 | ||
|
|
47e71d8838 | ||
|
|
2b5973ec67 | ||
|
|
78396d8e4a | ||
|
|
40d63a2fa4 | ||
|
|
556b9ad89a | ||
|
|
9afc22bd8f | ||
|
|
a010239efb | ||
|
|
264a8cd70a | ||
|
|
aa1834170b | ||
|
|
f94d67ab35 | ||
|
|
3048c8c41f | ||
|
|
246e4a9f50 | ||
|
|
8907525b78 | ||
|
|
6d58adb6dd | ||
|
|
764a170cd0 | ||
|
|
5a33fb7a6a | ||
|
|
2cca57c7fa | ||
|
|
52820925b1 | ||
|
|
1824111de8 | ||
|
|
5a0b5364d6 | ||
|
|
76eed2eba0 | ||
|
|
5d5589dd64 | ||
|
|
1ec671ef61 | ||
|
|
b8199a6e2c | ||
|
|
9f38eec40a | ||
|
|
5f5537b8b9 | ||
|
|
72716b7ec8 | ||
|
|
e288af4ddb | ||
|
|
4f999de844 | ||
|
|
f47133bc28 | ||
|
|
ea49c0a87c | ||
|
|
6cc971849b | ||
|
|
0fbd41a884 | ||
|
|
70e6f707c4 | ||
|
|
e76ada641f | ||
|
|
2405810864 | ||
|
|
fff46d99fc | ||
|
|
3a891f707c | ||
|
|
8b6ea43ebe | ||
|
|
90cf7502e8 | ||
|
|
c596fa2967 | ||
|
|
a45177410e | ||
|
|
b8f61362f5 | ||
|
|
e3ba826e5d | ||
|
|
17d22219d2 | ||
|
|
a49025f371 | ||
|
|
9e96ea2873 | ||
|
|
1172159745 | ||
|
|
cdcc069099 | ||
|
|
8c639fc23a | ||
|
|
da5a825c7e | ||
|
|
b9230ad402 | ||
|
|
959ac7e3be | ||
|
|
1884596ecd | ||
|
|
584cfa8cbf | ||
|
|
eebc61385d | ||
|
|
3c15186685 | ||
|
|
fa038ded3d | ||
|
|
e7ea1b831c | ||
|
|
f15ac75f8f | ||
|
|
e28dbebbd5 | ||
|
|
4aff65f98b | ||
|
|
8aba578cfa | ||
|
|
7e7f8577e8 | ||
|
|
3c94974d9d | ||
|
|
d6e5069dd5 | ||
|
|
f839638e0b | ||
|
|
740ff8c649 | ||
|
|
cfe227e0c7 | ||
|
|
ed79c8f099 | ||
|
|
4560f751d1 | ||
|
|
fbd72b2783 | ||
|
|
778118cfb4 | ||
|
|
096ed9a63a | ||
|
|
06eb79d4f4 | ||
|
|
4e95ca3c7b | ||
|
|
4c626d0782 | ||
|
|
1114ed9562 | ||
|
|
1ddfaf0b61 | ||
|
|
c6fb03547f | ||
|
|
34368fe795 | ||
|
|
db46298cb8 | ||
|
|
424e7b37d7 | ||
|
|
8ffddeff01 | ||
|
|
21d37fb237 | ||
|
|
fca4006811 | ||
|
|
c3b00939dd | ||
|
|
75df33f606 | ||
|
|
78d8829d65 | ||
|
|
307edd3f7a | ||
|
|
6bf906a72f | ||
|
|
0f016d7511 | ||
|
|
d782987f50 | ||
|
|
0001e8ffc4 |
6
.gitignore
vendored
6
.gitignore
vendored
@@ -37,7 +37,9 @@ tests/*/vendor/*
|
||||
|
||||
# iTop extensions
|
||||
/extensions/**
|
||||
!/extensions/.htaccess
|
||||
!/extensions/readme.txt
|
||||
!/extensions/web.config
|
||||
|
||||
# all logs but listing prevention
|
||||
/log/**
|
||||
@@ -45,8 +47,10 @@ tests/*/vendor/*
|
||||
!/log/index.php
|
||||
!/log/web.config
|
||||
|
||||
# PHPUnit cache file
|
||||
# PHPUnit: Cache file, local XML working copies
|
||||
/tests/php-unit-tests/.phpunit.result.cache
|
||||
/tests/php-unit-tests/phpunit.xml
|
||||
/tests/php-unit-tests/postbuild_integration.xml
|
||||
|
||||
|
||||
# Jetbrains
|
||||
|
||||
@@ -19,17 +19,24 @@
|
||||
* The target license file path is in `$xmlFilePath`
|
||||
*/
|
||||
|
||||
$iTopFolder = __DIR__ . "/../../" ;
|
||||
$xmlFilePath = $iTopFolder . "setup/licenses/community-licenses.xml";
|
||||
$iTopFolder = __DIR__."/../../";
|
||||
$xmlFilePath = $iTopFolder."setup/licenses/community-licenses.xml";
|
||||
|
||||
function get_scope($product_node)
|
||||
{
|
||||
$jqExec = shell_exec("jq -V"); // a param is mandatory otherwise the script will freeze
|
||||
if ((null === $jqExec) || (false === $jqExec)) {
|
||||
echo "/!\ JQ is required but cannot be launched :( \n";
|
||||
echo "Check this script PHPDoc block for instructions\n";
|
||||
die(-1);
|
||||
}
|
||||
|
||||
|
||||
function get_scope($product_node) {
|
||||
$scope = $product_node->getAttribute("scope");
|
||||
|
||||
if ($scope === "")
|
||||
{ //put iTop first
|
||||
if ($scope === "") { //put iTop first
|
||||
return "aaaaaaaaa";
|
||||
}
|
||||
|
||||
return $scope;
|
||||
}
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ iTop also offers mass import tools to help you being even more efficient.
|
||||
- [iTop Forums][1]: community support
|
||||
- [iTop Tickets][2]: for feature requests and bug reports
|
||||
- [Releases download][3]
|
||||
- [Software requirements][4]
|
||||
- [iTop requirements][4]
|
||||
- [Documentation][5] covering both iTop and its official extensions
|
||||
- [iTop Hub][6] : discover and install extensions !
|
||||
|
||||
@@ -45,7 +45,7 @@ iTop also offers mass import tools to help you being even more efficient.
|
||||
[1]: https://sourceforge.net/p/itop/discussion/
|
||||
[2]: https://sourceforge.net/p/itop/tickets/
|
||||
[3]: https://sourceforge.net/projects/itop/files/itop/
|
||||
[4]: https://www.itophub.io/wiki/page?id=latest:install:upgrading_itop
|
||||
[4]: https://www.itophub.io/wiki/page?id=latest:install:requirements
|
||||
[5]: https://www.itophub.io/wiki
|
||||
[6]: https://store.itophub.io/en_US/
|
||||
|
||||
@@ -102,7 +102,8 @@ We would like to give a special thank you 🤗 to the people from the community
|
||||
- Rosenke, Stephan
|
||||
- Seki, Shoji
|
||||
- Shilov, Vladimir
|
||||
- Stukalov, Ilya (a.k.a [@ilya](https://www.github.com/ilya)-stukalov)
|
||||
- Stukalov, Ilya (a.k.a [@ilya](https://www.github.com/ilya-stukalov))
|
||||
- Tarjányi, Csaba (a.k.a [@tacsaby](https://github.com/tacsaby))
|
||||
- Tulio, Marco
|
||||
- Turrubiates, Miguel
|
||||
|
||||
|
||||
@@ -432,6 +432,12 @@ class UserRightsProfile extends UserRightsAddOnAPI
|
||||
UR_ACTION_BULK_DELETE => 'bd',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array $aUsersProfilesList Cache of users' profiles. Hash array of user ID => [profile ID => profile friendlyname, profile ID => profile friendlyname, ...]
|
||||
* @since 2.7.10 3.0.4 3.1.1 3.2.0 N°6887
|
||||
*/
|
||||
private $aUsersProfilesList = [];
|
||||
|
||||
// Installation: create the very first user
|
||||
public function CreateAdministrator($sAdminUser, $sAdminPwd, $sLanguage = 'EN US')
|
||||
{
|
||||
@@ -490,6 +496,7 @@ class UserRightsProfile extends UserRightsAddOnAPI
|
||||
}
|
||||
|
||||
protected $m_aUserOrgs = array(); // userid -> array of orgid
|
||||
protected $m_aAdministrators = null; // [user id]
|
||||
|
||||
// Built on demand, could be optimized if necessary (doing a query for each attribute that needs to be read)
|
||||
protected $m_aObjectActionGrants = array();
|
||||
@@ -546,6 +553,7 @@ class UserRightsProfile extends UserRightsAddOnAPI
|
||||
|
||||
// Cache
|
||||
$this->m_aObjectActionGrants = array();
|
||||
$this->m_aAdministrators = null;
|
||||
}
|
||||
|
||||
public function LoadCache()
|
||||
@@ -688,12 +696,10 @@ class UserRightsProfile extends UserRightsAddOnAPI
|
||||
*/
|
||||
private function GetAdministrators()
|
||||
{
|
||||
static $aAdministrators = null;
|
||||
|
||||
if ($aAdministrators === null)
|
||||
if ($this->m_aAdministrators === null)
|
||||
{
|
||||
// Find all administrators
|
||||
$aAdministrators = array();
|
||||
$this->m_aAdministrators = array();
|
||||
$oAdministratorsFilter = new DBObjectSearch('User');
|
||||
$oLnkFilter = new DBObjectSearch('URP_UserProfile');
|
||||
$oExpression = new FieldExpression('profileid', 'URP_UserProfile');
|
||||
@@ -706,10 +712,10 @@ class UserRightsProfile extends UserRightsAddOnAPI
|
||||
$oSet->OptimizeColumnLoad(array('User' => array('login')));
|
||||
while($oUser = $oSet->Fetch())
|
||||
{
|
||||
$aAdministrators[] = $oUser->GetKey();
|
||||
$this->m_aAdministrators[] = $oUser->GetKey();
|
||||
}
|
||||
}
|
||||
return $aAdministrators;
|
||||
return $this->m_aAdministrators;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -746,8 +752,12 @@ class UserRightsProfile extends UserRightsAddOnAPI
|
||||
$sAction = self::$m_aActionCodes[$iActionCode];
|
||||
|
||||
$bStatus = null;
|
||||
// Cache user's profiles
|
||||
if(false === array_key_exists($iUser, $this->aUsersProfilesList)){
|
||||
$this->aUsersProfilesList[$iUser] = UserRights::ListProfiles($oUser);
|
||||
}
|
||||
// Call the API of UserRights because it caches the list for us
|
||||
foreach(UserRights::ListProfiles($oUser) as $iProfile => $oProfile)
|
||||
foreach($this->aUsersProfilesList[$iUser] as $iProfile => $oProfile)
|
||||
{
|
||||
$bGrant = $this->GetProfileActionGrant($iProfile, $sClass, $sAction);
|
||||
if (!is_null($bGrant))
|
||||
@@ -873,11 +883,16 @@ class UserRightsProfile extends UserRightsAddOnAPI
|
||||
// Note: this code is VERY close to the code of IsActionAllowed()
|
||||
$iUser = $oUser->GetKey();
|
||||
|
||||
// Cache user's profiles
|
||||
if(false === array_key_exists($iUser, $this->aUsersProfilesList)){
|
||||
$this->aUsersProfilesList[$iUser] = UserRights::ListProfiles($oUser);
|
||||
}
|
||||
|
||||
// Note: The object set is ignored because it was interesting to optimize for huge data sets
|
||||
// and acceptable to consider only the root class of the object set
|
||||
$bStatus = null;
|
||||
// Call the API of UserRights because it caches the list for us
|
||||
foreach(UserRights::ListProfiles($oUser) as $iProfile => $oProfile)
|
||||
foreach($this->aUsersProfilesList[$iUser] as $iProfile => $oProfile)
|
||||
{
|
||||
$bGrant = $this->GetClassStimulusGrant($iProfile, $sClass, $sStimulusCode);
|
||||
if (!is_null($bGrant))
|
||||
@@ -906,8 +921,9 @@ class UserRightsProfile extends UserRightsAddOnAPI
|
||||
}
|
||||
|
||||
/**
|
||||
* Find out which attribute is corresponding the the dimension 'owner org'
|
||||
* returns null if no such attribute has been found (no filtering should occur)
|
||||
* @param string $sClass
|
||||
* @return string|null Find out which attribute is corresponding the dimension 'owner org'
|
||||
* returns null if no such attribute has been found (no filtering should occur)
|
||||
*/
|
||||
public static function GetOwnerOrganizationAttCode($sClass)
|
||||
{
|
||||
|
||||
@@ -586,10 +586,10 @@ class UserRightsProfile extends UserRightsAddOnAPI
|
||||
/**
|
||||
* Read and cache organizations allowed to the given user
|
||||
*
|
||||
* @param $oUser
|
||||
* @param $sClass (not used here but can be used in overloads)
|
||||
* @param User $oUser
|
||||
* @param string $sClass (not used here but can be used in overloads)
|
||||
*
|
||||
* @return array
|
||||
* @return array keys of the User allowed org
|
||||
* @throws \CoreException
|
||||
* @throws \Exception
|
||||
*/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* @deprecated will be removed in 3.1.0 - moved to sources/application/WebPage/AjaxPage.php, now loadable using autoloader
|
||||
* @deprecated 3.0.0 will be removed in 3.1.0 - moved to sources/application/WebPage/AjaxPage.php, now loadable using autoloader
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
*/
|
||||
|
||||
@@ -1949,6 +1949,8 @@ class RestUtils
|
||||
*
|
||||
* @return DBObject The object found
|
||||
* @throws Exception If the input structure is not valid or it could not find exactly one object
|
||||
*
|
||||
* @see DBObject::CheckChangedExtKeysValues() generic method to check that we can access the linked object isn't used in that use case because values can be literal, OQL, friendlyname
|
||||
*/
|
||||
public static function FindObjectFromKey($sClass, $key, $bAllowNullValue = false)
|
||||
{
|
||||
@@ -2185,4 +2187,28 @@ class RestUtils
|
||||
interface iModuleExtension
|
||||
{
|
||||
public function __construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* KPI logging extensibility point
|
||||
*
|
||||
* KPI Logger extension
|
||||
*/
|
||||
interface iKPILoggerExtension
|
||||
{
|
||||
/**
|
||||
* Init the statistics collected
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function InitStats();
|
||||
|
||||
/**
|
||||
* Add a new KPI to the stats
|
||||
*
|
||||
* @param \Combodo\iTop\Core\Kpi\KpiLogData $oKpiLogData
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function LogOperation($oKpiLogData);
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* @deprecated will be removed in 3.1.0 - moved to sources/application/WebPage/CaptureWebPage.php, now loadable using autoloader
|
||||
* @deprecated 3.0.0 will be removed in 3.1.0 - moved to sources/application/WebPage/CaptureWebPage.php, now loadable using autoloader
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
*/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* @deprecated will be removed in 3.1.0 - moved to sources/application/WebPage/CLIPage.php, now loadable using autoloader
|
||||
* @deprecated 3.0.0 will be removed in 3.1.0 - moved to sources/application/WebPage/CLIPage.php, now loadable using autoloader
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
*/
|
||||
|
||||
@@ -1234,7 +1234,7 @@ HTML
|
||||
/**
|
||||
* @param \WebPage $oPage
|
||||
* @param \CMDBObjectSet $oSet
|
||||
* @param array $aExtraParams
|
||||
* @param array $aExtraParams See possible values in {@see DataTableUIBlockFactory::RenderDataTable()}
|
||||
*
|
||||
* @throws \ApplicationException
|
||||
* @throws \CoreException
|
||||
@@ -3054,11 +3054,23 @@ EOF
|
||||
|
||||
// Hook the cancel button via jQuery so that it can be unhooked easily as well if needed
|
||||
$sDefaultUrl = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=search_form&class='.$sClass.'&'.$oAppContext->GetForLink();
|
||||
$oPage->add_ready_script("$('#form_{$this->m_iFormId} button.cancel').on('click', function() { BackToDetails('$sClass', $iKey, '$sDefaultUrl', $sJSToken)} );");
|
||||
|
||||
$sCancelButtonOnClickScript = "let fOnClick{$this->m_iFormId}CancelButton = ";
|
||||
if(isset($aExtraParams['js_handlers']['cancel_button_on_click'])){
|
||||
$sCancelButtonOnClickScript .= $aExtraParams['js_handlers']['cancel_button_on_click'];
|
||||
} else {
|
||||
$sCancelButtonOnClickScript .= "function() { BackToDetails('$sClass', $iKey, '$sDefaultUrl', $sJSToken)};";
|
||||
}
|
||||
$sCancelButtonOnClickScript .= "$('#form_{$this->m_iFormId} button.cancel').on('click', fOnClick{$this->m_iFormId}CancelButton);";
|
||||
$oPage->add_ready_script($sCancelButtonOnClickScript);
|
||||
|
||||
|
||||
$iFieldsCount = count($aFieldsMap);
|
||||
$sJsonFieldsMap = json_encode($aFieldsMap);
|
||||
$sState = $this->GetState();
|
||||
$sLifecycleStateForWizardHelper = '';
|
||||
if (MetaModel::HasLifecycle($sClass)) {
|
||||
$sLifecycleStateForWizardHelper = $this->GetState();
|
||||
}
|
||||
$sSessionStorageKey = $sClass.'_'.$iKey;
|
||||
$sTempId = utils::GetUploadTempId($iTransactionId);
|
||||
$oPage->add_ready_script(InlineImage::EnableCKEditorImageUpload($this, $sTempId));
|
||||
@@ -3068,7 +3080,7 @@ EOF
|
||||
sessionStorage.removeItem('$sSessionStorageKey');
|
||||
|
||||
// Create the object once at the beginning of the page...
|
||||
var oWizardHelper$sPrefix = new WizardHelper('$sClass', '$sPrefix', '$sState');
|
||||
var oWizardHelper$sPrefix = new WizardHelper('$sClass', '$sPrefix', '$sLifecycleStateForWizardHelper');
|
||||
oWizardHelper$sPrefix.SetFieldsMap($sJsonFieldsMap);
|
||||
oWizardHelper$sPrefix.SetFieldsCount($iFieldsCount);
|
||||
EOF
|
||||
@@ -4481,7 +4493,9 @@ HTML;
|
||||
/** @var \iApplicationObjectExtension $oExtensionInstance */
|
||||
foreach(MetaModel::EnumPlugins('iApplicationObjectExtension') as $oExtensionInstance)
|
||||
{
|
||||
$oExtensionInstance->OnDBInsert($this, self::GetCurrentChange());
|
||||
$oKPI = new ExecutionKPI();
|
||||
$oExtensionInstance->OnDBInsert($this, self::GetCurrentChange());
|
||||
$oKPI->ComputeStatsForExtension($oExtensionInstance, 'OnDBInsert');
|
||||
}
|
||||
|
||||
return $res;
|
||||
@@ -4498,13 +4512,16 @@ HTML;
|
||||
|
||||
protected function DBCloneTracked_Internal($newKey = null)
|
||||
{
|
||||
$oNewObj = parent::DBCloneTracked_Internal($newKey);
|
||||
/** @var cmdbAbstractObject $oNewObj */
|
||||
$oNewObj = MetaModel::GetObject(get_class($this), parent::DBCloneTracked_Internal($newKey));
|
||||
|
||||
// Invoke extensions after insertion (the object must exist, have an id, etc.)
|
||||
/** @var \iApplicationObjectExtension $oExtensionInstance */
|
||||
foreach(MetaModel::EnumPlugins('iApplicationObjectExtension') as $oExtensionInstance)
|
||||
{
|
||||
$oKPI = new ExecutionKPI();
|
||||
$oExtensionInstance->OnDBInsert($oNewObj, self::GetCurrentChange());
|
||||
$oKPI->ComputeStatsForExtension($oExtensionInstance, 'OnDBInsert');
|
||||
}
|
||||
|
||||
return $oNewObj;
|
||||
@@ -4532,7 +4549,9 @@ HTML;
|
||||
/** @var \iApplicationObjectExtension $oExtensionInstance */
|
||||
foreach (MetaModel::EnumPlugins('iApplicationObjectExtension') as $oExtensionInstance)
|
||||
{
|
||||
$oKPI = new ExecutionKPI();
|
||||
$oExtensionInstance->OnDBUpdate($this, self::GetCurrentChange());
|
||||
$oKPI->ComputeStatsForExtension($oExtensionInstance, 'OnDBUpdate');
|
||||
}
|
||||
}
|
||||
catch (Exception $e)
|
||||
@@ -4578,7 +4597,9 @@ HTML;
|
||||
/** @var \iApplicationObjectExtension $oExtensionInstance */
|
||||
foreach(MetaModel::EnumPlugins('iApplicationObjectExtension') as $oExtensionInstance)
|
||||
{
|
||||
$oKPI = new ExecutionKPI();
|
||||
$oExtensionInstance->OnDBDelete($this, self::GetCurrentChange());
|
||||
$oKPI->ComputeStatsForExtension($oExtensionInstance, 'OnDBDelete');
|
||||
}
|
||||
|
||||
return parent::DBDeleteTracked_Internal($oDeletionPlan);
|
||||
@@ -4596,7 +4617,10 @@ HTML;
|
||||
/** @var \iApplicationObjectExtension $oExtensionInstance */
|
||||
foreach(MetaModel::EnumPlugins('iApplicationObjectExtension') as $oExtensionInstance)
|
||||
{
|
||||
if ($oExtensionInstance->OnIsModified($this))
|
||||
$oKPI = new ExecutionKPI();
|
||||
$bIsModified = $oExtensionInstance->OnIsModified($this);
|
||||
$oKPI->ComputeStatsForExtension($oExtensionInstance, 'OnIsModified');
|
||||
if ($bIsModified)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@@ -4650,7 +4674,9 @@ HTML;
|
||||
/** @var \iApplicationObjectExtension $oExtensionInstance */
|
||||
foreach(MetaModel::EnumPlugins('iApplicationObjectExtension') as $oExtensionInstance)
|
||||
{
|
||||
$oKPI = new ExecutionKPI();
|
||||
$aNewIssues = $oExtensionInstance->OnCheckToWrite($this);
|
||||
$oKPI->ComputeStatsForExtension($oExtensionInstance, 'OnCheckToWrite');
|
||||
if (is_array($aNewIssues) && (count($aNewIssues) > 0)) // Some extensions return null instead of an empty array
|
||||
{
|
||||
$this->m_aCheckIssues = array_merge($this->m_aCheckIssues, $aNewIssues);
|
||||
@@ -4698,7 +4724,9 @@ HTML;
|
||||
/** @var \iApplicationObjectExtension $oExtensionInstance */
|
||||
foreach(MetaModel::EnumPlugins('iApplicationObjectExtension') as $oExtensionInstance)
|
||||
{
|
||||
$oKPI = new ExecutionKPI();
|
||||
$aNewIssues = $oExtensionInstance->OnCheckToDelete($this);
|
||||
$oKPI->ComputeStatsForExtension($oExtensionInstance, 'OnCheckToDelete');
|
||||
if (is_array($aNewIssues) && count($aNewIssues) > 0)
|
||||
{
|
||||
$this->m_aDeleteIssues = array_merge($this->m_aDeleteIssues, $aNewIssues);
|
||||
@@ -5253,6 +5281,11 @@ EOF
|
||||
'errors' => '<p>'.($bResult ? '' : implode('</p><p>', $aErrorsToDisplay)).'</p>',
|
||||
);
|
||||
if ($bResult && (!$bPreview)) {
|
||||
// doing the check will load multiple times same objects :/
|
||||
// but it shouldn't cost too much on execution time
|
||||
// user can mitigate by selecting less extkeys/lnk to set and/or less objects to update 🤷♂️
|
||||
$oObj->CheckChangedExtKeysValues();
|
||||
|
||||
$oObj->DBUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* @deprecated will be removed in 3.1.0 - moved to sources/application/WebPage/CSVPage.php, now loadable using autoloader
|
||||
* @deprecated 3.0.0 will be removed in 3.1.0 - moved to sources/application/WebPage/CSVPage.php, now loadable using autoloader
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
*/
|
||||
|
||||
@@ -918,6 +918,11 @@ class RuntimeDashboard extends Dashboard
|
||||
{
|
||||
$bCustomized = false;
|
||||
|
||||
$sDashboardFileSanitized = utils::RealPath(APPROOT.$sDashboardFile, APPROOT);
|
||||
if (false === $sDashboardFileSanitized) {
|
||||
throw new SecurityException('Invalid dashboard file !');
|
||||
}
|
||||
|
||||
// Search for an eventual user defined dashboard
|
||||
$oUDSearch = new DBObjectSearch('UserDashboard');
|
||||
$oUDSearch->AddCondition('user_id', UserRights::GetUserId(), '=');
|
||||
@@ -929,7 +934,7 @@ class RuntimeDashboard extends Dashboard
|
||||
$sDashboardDefinition = $oUserDashboard->Get('contents');
|
||||
$bCustomized = true;
|
||||
} else {
|
||||
$sDashboardDefinition = @file_get_contents($sDashboardFile);
|
||||
$sDashboardDefinition = @file_get_contents($sDashboardFileSanitized);
|
||||
}
|
||||
|
||||
|
||||
@@ -937,7 +942,7 @@ class RuntimeDashboard extends Dashboard
|
||||
$oDashboard = new RuntimeDashboard($sDashBoardId);
|
||||
$oDashboard->FromXml($sDashboardDefinition);
|
||||
$oDashboard->SetCustomFlag($bCustomized);
|
||||
$oDashboard->SetDefinitionFile($sDashboardFile);
|
||||
$oDashboard->SetDefinitionFile($sDashboardFileSanitized);
|
||||
} else {
|
||||
$oDashboard = null;
|
||||
}
|
||||
@@ -1136,7 +1141,7 @@ JS
|
||||
$oToolbar->AddSubBlock($oActionButton);
|
||||
|
||||
$aActions = array();
|
||||
$sFile = addslashes($this->sDefinitionFile);
|
||||
$sFile = addslashes(utils::LocalPath($this->sDefinitionFile));
|
||||
$sJSExtraParams = json_encode($aExtraParams);
|
||||
if ($this->HasCustomDashboard()) {
|
||||
$oEdit = new JSPopupMenuItem('UI:Dashboard:Edit', Dict::S('UI:Dashboard:EditCustom'), "return EditDashboard('{$this->sId}', '$sFile', $sJSExtraParams)");
|
||||
@@ -1259,12 +1264,12 @@ EOF
|
||||
$sOkButtonLabel = Dict::S('UI:Button:Save');
|
||||
$sCancelButtonLabel = Dict::S('UI:Button:Cancel');
|
||||
|
||||
$sId = addslashes($this->sId);
|
||||
$sLayoutClass = addslashes($this->sLayoutClass);
|
||||
$sId = utils::HtmlEntities($this->sId);
|
||||
$sLayoutClass = utils::HtmlEntities($this->sLayoutClass);
|
||||
$sAutoReload = $this->bAutoReload ? 'true' : 'false';
|
||||
$sAutoReloadSec = (string) $this->iAutoReloadSec;
|
||||
$sTitle = addslashes($this->sTitle);
|
||||
$sFile = addslashes($this->GetDefinitionFile());
|
||||
$sTitle = utils::HtmlEntities($this->sTitle);
|
||||
$sFile = utils::HtmlEntities($this->GetDefinitionFile());
|
||||
$sUrl = utils::GetAbsoluteUrlAppRoot().'pages/ajax.render.php';
|
||||
$sReloadURL = $this->GetReloadURL();
|
||||
|
||||
|
||||
@@ -386,7 +386,7 @@ EOF;
|
||||
if (!$oPage->IsPrintableVersion())
|
||||
{
|
||||
$sMenuTitle = Dict::S('UI:ConfigureThisList');
|
||||
$sHtml = '<div class="itop_popup toolkit_menu" id="tk_'.$this->iListId.'"><ul><li><i class="fas fa-tools"></i><i class="fas fa-caret-down"></i><ul>';
|
||||
$sHtml = '<div class="itop_popup toolkit_menu" id="tk_'.$this->iListId.'"><ul><li aria-label="'.Dict::S('UI:Menu:Toolkit').'"><i class="fas fa-tools"></i><i class="fas fa-caret-down"></i><ul>';
|
||||
|
||||
$oMenuItem1 = new JSPopupMenuItem('iTop::ConfigureList', $sMenuTitle, "$('#datatable_dlg_".$this->iListId."').dialog('open');");
|
||||
$aActions = array(
|
||||
|
||||
@@ -304,7 +304,7 @@ class DisplayBlock
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function GetFilter()
|
||||
{
|
||||
return $this->m_oFilter;
|
||||
@@ -1045,7 +1045,7 @@ JS
|
||||
$aCount = $aCounts[$sStateValue];
|
||||
$sHyperlink = $aCount['link'];
|
||||
$sCountLabel = $aCount['label'];
|
||||
|
||||
|
||||
$oPill = PillFactory::MakeForState($sClass, $sStateValue);
|
||||
// N°5849 - Unencode label for ExternalKey attribute because friendlyname is already html encoded thanks to DBObject::GetName() in AttributeExternalKey::GetAllowedValues(). (A fix in this function may have too much impact).
|
||||
if ($oAttDef instanceof AttributeExternalKey) {
|
||||
@@ -1611,6 +1611,7 @@ JS
|
||||
|
||||
$iTotalCount = 0;
|
||||
$aURLs = array();
|
||||
|
||||
foreach ($aRes as $iRow => $aRow) {
|
||||
$sValue = $aRow['grouped_by_1'];
|
||||
$sHtmlValue = $oGroupByExp->MakeValueLabel($this->m_oFilter, $sValue, $sValue);
|
||||
@@ -1621,6 +1622,7 @@ JS
|
||||
'value' => (float)$aRow[$sFctVar],
|
||||
);
|
||||
|
||||
|
||||
// Build the search for this subset
|
||||
$oSubsetSearch = $this->m_oFilter->DeepClone();
|
||||
$oCondition = new BinaryExpression($oGroupByExp, '=', new ScalarExpression($sValue));
|
||||
@@ -1637,9 +1639,13 @@ JS
|
||||
|
||||
switch ($sChartType) {
|
||||
case 'bars':
|
||||
$aNames = array();
|
||||
$iMaxNbCharsInLabel = 0;
|
||||
$aNames = [];
|
||||
foreach ($aValues as $idx => $aValue) {
|
||||
$aNames[$idx] = $aValue['label'];
|
||||
if ($iMaxNbCharsInLabel < mb_strlen($aValue['label'])) {
|
||||
$iMaxNbCharsInLabel = mb_strlen($aValue['label']);
|
||||
}
|
||||
}
|
||||
$oBlock = new BlockChartAjaxBars();
|
||||
$oBlock->sJSNames = json_encode($aNames);
|
||||
@@ -1647,21 +1653,31 @@ JS
|
||||
$oBlock->sId = $sId;
|
||||
$oBlock->sJSURLs = $sJSURLs;
|
||||
$oBlock->sURLForRefresh = str_replace("'", "\'", $sUrl);
|
||||
$oBlock->iMaxNbCharsInLabel = $iMaxNbCharsInLabel;
|
||||
break;
|
||||
|
||||
case 'pie':
|
||||
$aColumns = array();
|
||||
$aNames = array();
|
||||
$aColumns = [];
|
||||
$aNames = [];
|
||||
foreach ($aValues as $idx => $aValue) {
|
||||
$aColumns[] = array('series_'.$idx, (float)$aValue['value']);
|
||||
$aNames['series_'.$idx] = $aValue['label'];
|
||||
}
|
||||
|
||||
$iNbLinesToAddForName = 0;
|
||||
if (count($aNames) > 50) {
|
||||
// Calculation of the number of legends line add to the height of the graph to have a maximum of 5 legend columns
|
||||
$iNbLinesIncludedInChartHeight = 10;
|
||||
$iNbLinesToAddForName = ceil(count($aNames) / 5) - $iNbLinesIncludedInChartHeight;
|
||||
}
|
||||
|
||||
$oBlock = new BlockChartAjaxPie();
|
||||
$oBlock->sJSColumns = json_encode($aColumns);
|
||||
$oBlock->sJSNames = json_encode($aNames);
|
||||
$oBlock->sId = $sId;
|
||||
$oBlock->sJSURLs = $sJSURLs;
|
||||
$oBlock->sURLForRefresh = str_replace("'", "\'", $sUrl);
|
||||
$oBlock->iNbLinesToAddForName = $iNbLinesToAddForName;
|
||||
break;
|
||||
}
|
||||
if (isset($aExtraParams["surround_with_panel"]) && $aExtraParams["surround_with_panel"]) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* @deprecated will be removed in 3.1.0 - moved to sources/application/WebPage/ErrorPage.php, now loadable using autoloader
|
||||
* @deprecated 3.0.0 will be removed in 3.1.0 - moved to sources/application/WebPage/ErrorPage.php, now loadable using autoloader
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
*/
|
||||
|
||||
36
application/exceptions/InvalidExternalKeyValueException.php
Normal file
36
application/exceptions/InvalidExternalKeyValueException.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @since 2.7.10 3.0.4 3.1.1 3.2.0 N°6458 object creation
|
||||
*/
|
||||
class InvalidExternalKeyValueException extends CoreUnexpectedValue
|
||||
{
|
||||
private const ENUM_PARAMS_OBJECT = 'current_object';
|
||||
private const ENUM_PARAMS_ATTCODE = 'attcode';
|
||||
private const ENUM_PARAMS_ATTVALUE = 'attvalue';
|
||||
private const ENUM_PARAMS_USER = 'current_user';
|
||||
|
||||
public function __construct($oObject, $sAttCode, $aContextData = null, $oPrevious = null)
|
||||
{
|
||||
$aContextData[self::ENUM_PARAMS_OBJECT] = get_class($oObject) . '::' . $oObject->GetKey();
|
||||
$aContextData[self::ENUM_PARAMS_ATTCODE] = $sAttCode;
|
||||
$aContextData[self::ENUM_PARAMS_ATTVALUE] = $oObject->Get($sAttCode);
|
||||
|
||||
$oCurrentUser = UserRights::GetUserObject();
|
||||
if (false === is_null($oCurrentUser)) {
|
||||
$aContextData[self::ENUM_PARAMS_USER] = get_class($oCurrentUser) . '::' . $oCurrentUser->GetKey();
|
||||
}
|
||||
|
||||
parent::__construct('Attribute pointing to an object that is either non existing or not readable by the current user', $aContextData, '', $oPrevious);
|
||||
}
|
||||
|
||||
public function GetAttCode(): string
|
||||
{
|
||||
return $this->getContextData()[self::ENUM_PARAMS_ATTCODE];
|
||||
}
|
||||
|
||||
public function GetAttValue(): string
|
||||
{
|
||||
return $this->getContextData()[self::ENUM_PARAMS_ATTVALUE];
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* @deprecated will be removed in 3.1.0 - moved to sources/application/WebPage/iTopWebPage.php, now loadable using autoloader
|
||||
* @deprecated 3.0.0 will be removed in 3.1.0 - moved to sources/application/WebPage/iTopWebPage.php, now loadable using autoloader
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
*/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* @deprecated will be removed in 3.1.0 - moved to sources/application/WebPage/iTopWizardWebPage.php, now loadable using autoloader
|
||||
* @deprecated 3.0.0 will be removed in 3.1.0 - moved to sources/application/WebPage/iTopWizardWebPage.php, now loadable using autoloader
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
*/
|
||||
|
||||
@@ -80,6 +80,11 @@ class LoginBasic extends AbstractLoginFSMExtension
|
||||
{
|
||||
if (Session::Get('login_mode') == 'basic')
|
||||
{
|
||||
$iOnExit = LoginWebPage::getIOnExit();
|
||||
if ($iOnExit === LoginWebPage::EXIT_RETURN)
|
||||
{
|
||||
return LoginWebPage::LOGIN_FSM_RETURN; // Error, exit FSM
|
||||
}
|
||||
LoginWebPage::HTTP401Error();
|
||||
}
|
||||
return LoginWebPage::LOGIN_FSM_CONTINUE;
|
||||
|
||||
@@ -79,7 +79,7 @@ class LoginDefaultAfter extends AbstractLoginFSMExtension implements iLogoutExte
|
||||
{
|
||||
self::ResetLoginSession();
|
||||
$iOnExit = LoginWebPage::getIOnExit();
|
||||
if ($iOnExit == LoginWebPage::EXIT_RETURN)
|
||||
if ($iOnExit === LoginWebPage::EXIT_RETURN)
|
||||
{
|
||||
return LoginWebPage::LOGIN_FSM_RETURN; // Error, exit FSM
|
||||
}
|
||||
@@ -95,6 +95,12 @@ class LoginDefaultAfter extends AbstractLoginFSMExtension implements iLogoutExte
|
||||
{
|
||||
if (!Session::IsSet('login_mode'))
|
||||
{
|
||||
// N°6358 - if EXIT_RETURN was asked, send an error
|
||||
if (LoginWebPage::getIOnExit() === LoginWebPage::EXIT_RETURN) {
|
||||
$iErrorCode = LoginWebPage::EXIT_CODE_WRONGCREDENTIALS;
|
||||
return LoginWebPage::LOGIN_FSM_ERROR;
|
||||
}
|
||||
|
||||
// If no plugin validated the user, exit
|
||||
self::ResetLoginSession();
|
||||
exit();
|
||||
|
||||
@@ -73,6 +73,11 @@ class LoginExternal extends AbstractLoginFSMExtension
|
||||
{
|
||||
if (Session::Get('login_mode') == 'external')
|
||||
{
|
||||
$iOnExit = LoginWebPage::getIOnExit();
|
||||
if ($iOnExit === LoginWebPage::EXIT_RETURN)
|
||||
{
|
||||
return LoginWebPage::LOGIN_FSM_RETURN; // Error, exit FSM
|
||||
}
|
||||
LoginWebPage::HTTP401Error();
|
||||
}
|
||||
return LoginWebPage::LOGIN_FSM_CONTINUE;
|
||||
|
||||
@@ -44,6 +44,10 @@ class LoginForm extends AbstractLoginFSMExtension implements iLoginUIExtension
|
||||
exit;
|
||||
}
|
||||
|
||||
if (LoginWebPage::getIOnExit() === LoginWebPage::EXIT_RETURN) {
|
||||
return LoginWebPage::LOGIN_FSM_CONTINUE;
|
||||
}
|
||||
|
||||
// No credentials yet, display the form
|
||||
$oPage = LoginWebPage::NewLoginWebPage();
|
||||
$oPage->DisplayLoginForm($this->bForceFormOnError);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
// Copyright (C) 2010-2023 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -35,7 +35,7 @@ class LoginWebPage extends NiceWebPage
|
||||
{
|
||||
const EXIT_PROMPT = 0;
|
||||
const EXIT_HTTP_401 = 1;
|
||||
const EXIT_RETURN = 2;
|
||||
const EXIT_RETURN = 2; // Non interactive mode (ajax, rest, ...)
|
||||
|
||||
const EXIT_CODE_OK = 0;
|
||||
const EXIT_CODE_MISSINGLOGIN = 1;
|
||||
@@ -88,7 +88,7 @@ class LoginWebPage extends NiceWebPage
|
||||
parent::__construct($sTitle);
|
||||
$this->SetStyleSheet();
|
||||
$this->no_cache();
|
||||
$this->add_xframe_options();
|
||||
$this->add_http_headers();
|
||||
}
|
||||
|
||||
public function SetStyleSheet()
|
||||
@@ -105,6 +105,7 @@ class LoginWebPage extends NiceWebPage
|
||||
/**
|
||||
* @param $oUser
|
||||
* @param array $aProfiles
|
||||
* @param $sOrigin
|
||||
*
|
||||
* @return array
|
||||
* @throws \CoreException
|
||||
@@ -385,14 +386,20 @@ class LoginWebPage extends NiceWebPage
|
||||
$this->output();
|
||||
}
|
||||
|
||||
public static function ResetSession()
|
||||
public static function ResetSession($bFullCleanup = false)
|
||||
{
|
||||
// Unset all of the session variables.
|
||||
Session::Unset('auth_user');
|
||||
Session::Unset('login_state');
|
||||
Session::Unset('can_logoff');
|
||||
Session::Unset('archive_mode');
|
||||
Session::Unset('impersonate_user');
|
||||
if ($bFullCleanup) {
|
||||
// Unset all of the session variables.
|
||||
foreach (array_keys($_SESSION) as $sKey) {
|
||||
Session::Unset($sKey);
|
||||
}
|
||||
} else {
|
||||
Session::Unset('auth_user');
|
||||
Session::Unset('login_state');
|
||||
Session::Unset('can_logoff');
|
||||
Session::Unset('archive_mode');
|
||||
Session::Unset('impersonate_user');
|
||||
}
|
||||
UserRights::_ResetSessionCache();
|
||||
// If it's desired to kill the session, also delete the session cookie.
|
||||
// Note: This will destroy the session, and not just the session data!
|
||||
@@ -957,7 +964,7 @@ class LoginWebPage extends NiceWebPage
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($iOnExit == self::EXIT_RETURN)
|
||||
if ($iOnExit === self::EXIT_RETURN)
|
||||
{
|
||||
return self::EXIT_CODE_PORTALUSERNOTAUTHORIZED;
|
||||
}
|
||||
@@ -1012,7 +1019,7 @@ class LoginWebPage extends NiceWebPage
|
||||
{
|
||||
if ($bMustBeAdmin && !UserRights::IsAdministrator())
|
||||
{
|
||||
if ($iOnExit == self::EXIT_RETURN)
|
||||
if ($iOnExit === self::EXIT_RETURN)
|
||||
{
|
||||
return self::EXIT_CODE_MUSTBEADMIN;
|
||||
}
|
||||
@@ -1028,7 +1035,7 @@ class LoginWebPage extends NiceWebPage
|
||||
}
|
||||
$iRet = call_user_func(array(self::$sHandlerClass, 'ChangeLocation'), $sRequestedPortalId, $iOnExit);
|
||||
}
|
||||
if ($iOnExit == self::EXIT_RETURN)
|
||||
if ($iOnExit === self::EXIT_RETURN)
|
||||
{
|
||||
return $iRet;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* @deprecated will be removed in 3.1.0 - moved to sources/application/WebPage/NiceWebPage.php, now loadable using autoloader
|
||||
* @deprecated 3.0.0 will be removed in 3.1.0 - moved to sources/application/WebPage/NiceWebPage.php, now loadable using autoloader
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
*/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* @deprecated will be removed in 3.1.0 - moved to sources/application/WebPage/PDFPage.php, now loadable using autoloader
|
||||
* @deprecated 3.0.0 will be removed in 3.1.0 - moved to sources/application/WebPage/PDFPage.php, now loadable using autoloader
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
*/
|
||||
|
||||
@@ -98,4 +98,10 @@ else
|
||||
Session::Set('itop_env', ITOP_DEFAULT_ENV);
|
||||
}
|
||||
$sConfigFile = APPCONF.$sEnv.'/'.ITOP_CONFIG_FILE;
|
||||
MetaModel::Startup($sConfigFile, false /* $bModelOnly */, $bAllowCache, false /* $bTraceSourceFiles */, $sEnv);
|
||||
try {
|
||||
MetaModel::Startup($sConfigFile, false /* $bModelOnly */, $bAllowCache, false /* $bTraceSourceFiles */, $sEnv);
|
||||
}
|
||||
catch (MySQLException $e) {
|
||||
IssueLog::Debug($e->getMessage());
|
||||
throw new MySQLException('Could not connect to the DB server', []);
|
||||
}
|
||||
@@ -211,7 +211,23 @@ class UILinksWidgetDirect
|
||||
$oObj = DBObject::MakeDefaultInstance($sRealClass);
|
||||
$aPrefillParam = array('source_obj' => $oSourceObj);
|
||||
$oObj->PrefillForm('creation_from_editinplace', $aPrefillParam);
|
||||
cmdbAbstractObject::DisplayCreationForm($oPage, $sRealClass, $oObj, array(), array('formPrefix' => $this->sInputid, 'noRelations' => true, 'fieldsFlags' => $aFieldFlags));
|
||||
$aFormExtraParams = array(
|
||||
'formPrefix' => $this->sInputid,
|
||||
'noRelations' => true,
|
||||
'fieldsFlags' => $aFieldFlags,
|
||||
'js_handlers' => [
|
||||
'cancel_button_on_click' =>
|
||||
<<<JS
|
||||
function() {
|
||||
// Do nothing, already handled by linksdirectwidget.js
|
||||
};
|
||||
JS
|
||||
,
|
||||
],
|
||||
);
|
||||
|
||||
|
||||
cmdbAbstractObject::DisplayCreationForm($oPage, $sRealClass, $oObj, array(), $aFormExtraParams);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
use Combodo\iTop\Application\Helper\Session;
|
||||
use Combodo\iTop\Application\UI\Base\iUIBlock;
|
||||
use Combodo\iTop\Application\UI\Base\Layout\UIContentBlock;
|
||||
use Combodo\iTop\Service\Module\ModuleService;
|
||||
use ScssPhp\ScssPhp\Compiler;
|
||||
use ScssPhp\ScssPhp\OutputStyle;
|
||||
use ScssPhp\ScssPhp\ValueConverter;
|
||||
@@ -51,42 +52,51 @@ class utils
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
* @since 3.0.0
|
||||
* @since 2.7.10 3.0.0
|
||||
*/
|
||||
public const ENUM_SANITIZATION_FILTER_INTEGER = 'integer';
|
||||
/**
|
||||
* Datamodel class
|
||||
* @var string
|
||||
* @since 3.0.0
|
||||
* @since 2.7.10 3.0.0
|
||||
* @since 2.7.10 3.0.4 3.1.1 3.2.0 N°6606 update PHPDoc
|
||||
* @uses MetaModel::IsValidClass()
|
||||
*/
|
||||
public const ENUM_SANITIZATION_FILTER_CLASS = 'class';
|
||||
/**
|
||||
* @var string
|
||||
* @since 3.0.0
|
||||
* @since 2.7.10 3.0.4 3.1.1 3.2.0 N°6606
|
||||
* @uses class_exists()
|
||||
*/
|
||||
public const ENUM_SANITIZATION_FILTER_PHP_CLASS = 'php_class';
|
||||
/**
|
||||
* @var string
|
||||
* @since 2.7.10 3.0.0
|
||||
*/
|
||||
public const ENUM_SANITIZATION_FILTER_STRING = 'string';
|
||||
/**
|
||||
* @var string
|
||||
* @since 3.0.0
|
||||
* @since 2.7.10 3.0.0
|
||||
*/
|
||||
public const ENUM_SANITIZATION_FILTER_CONTEXT_PARAM = 'context_param';
|
||||
/**
|
||||
* @var string
|
||||
* @since 3.0.0
|
||||
* @since 2.7.10 3.0.0
|
||||
*/
|
||||
public const ENUM_SANITIZATION_FILTER_PARAMETER = 'parameter';
|
||||
/**
|
||||
* @var string
|
||||
* @since 3.0.0
|
||||
* @since 2.7.10 3.0.0
|
||||
*/
|
||||
public const ENUM_SANITIZATION_FILTER_FIELD_NAME = 'field_name';
|
||||
/**
|
||||
* @var string
|
||||
* @since 3.0.0
|
||||
* @since 2.7.10 3.0.0
|
||||
*/
|
||||
public const ENUM_SANITIZATION_FILTER_TRANSACTION_ID = 'transaction_id';
|
||||
/**
|
||||
* @var string For XML / HTML node identifiers
|
||||
* @since 3.0.0
|
||||
* @since 2.7.10 3.0.0
|
||||
*/
|
||||
public const ENUM_SANITIZATION_FILTER_ELEMENT_IDENTIFIER = 'element_identifier';
|
||||
/**
|
||||
@@ -96,12 +106,13 @@ class utils
|
||||
public const ENUM_SANITIZATION_FILTER_VARIABLE_NAME = 'variable_name';
|
||||
/**
|
||||
* @var string
|
||||
* @since 3.0.0
|
||||
* @since 2.7.10 3.0.0
|
||||
*/
|
||||
public const ENUM_SANITIZATION_FILTER_RAW_DATA = 'raw_data';
|
||||
/**
|
||||
* @var string
|
||||
* @since 3.0.2, 3.1.0 N°4899
|
||||
* @since 3.0.2 3.1.0 N°4899
|
||||
* @since 2.7.10 N°6606
|
||||
*/
|
||||
public const ENUM_SANITIZATION_FILTER_URL = 'url';
|
||||
|
||||
@@ -144,6 +155,8 @@ class utils
|
||||
|
||||
private static $iNextId = 0;
|
||||
|
||||
private static $m_sAppRootUrl = null;
|
||||
|
||||
protected static function LoadParamFile($sParamFile)
|
||||
{
|
||||
if (!file_exists($sParamFile)) {
|
||||
@@ -385,6 +398,10 @@ class utils
|
||||
* @since 2.7.0 new 'element_identifier' filter
|
||||
* @since 3.0.0 new utils::ENUM_SANITIZATION_* const
|
||||
* @since 2.7.7, 3.0.2, 3.1.0 N°4899 - new 'url' filter
|
||||
* @since 2.7.10 N°6606 use the utils::ENUM_SANITIZATION_* const
|
||||
* @since 2.7.10 N°6606 new case for ENUM_SANITIZATION_FILTER_PHP_CLASS
|
||||
*
|
||||
* @link https://www.php.net/manual/en/filter.filters.sanitize.php PHP sanitization filters
|
||||
*/
|
||||
protected static function Sanitize_Internal($value, $sSanitizationFilter)
|
||||
{
|
||||
@@ -405,6 +422,13 @@ class utils
|
||||
$retValue = filter_var($value, FILTER_SANITIZE_SPECIAL_CHARS);
|
||||
break;
|
||||
|
||||
case static::ENUM_SANITIZATION_FILTER_PHP_CLASS:
|
||||
$retValue = $value;
|
||||
if (!class_exists($value)) {
|
||||
$retValue = false;
|
||||
}
|
||||
break;
|
||||
|
||||
case static::ENUM_SANITIZATION_FILTER_CONTEXT_PARAM:
|
||||
case static::ENUM_SANITIZATION_FILTER_PARAMETER:
|
||||
case static::ENUM_SANITIZATION_FILTER_FIELD_NAME:
|
||||
@@ -464,7 +488,8 @@ class utils
|
||||
|
||||
// For URL
|
||||
case static::ENUM_SANITIZATION_FILTER_URL:
|
||||
$retValue = filter_var($value, FILTER_SANITIZE_URL);
|
||||
// N°6350 - returns only valid URLs
|
||||
$retValue = filter_var($value, FILTER_VALIDATE_URL);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -969,7 +994,7 @@ class utils
|
||||
*/
|
||||
public static function GetAbsoluteUrlAppRoot($bForceTrustProxy = false)
|
||||
{
|
||||
static $sUrl = null;
|
||||
$sUrl = static::$m_sAppRootUrl;
|
||||
if ($sUrl === null || $bForceTrustProxy)
|
||||
{
|
||||
$sUrl = self::GetConfig()->Get('app_root_url');
|
||||
@@ -990,8 +1015,9 @@ class utils
|
||||
}
|
||||
$sUrl = str_replace(SERVER_NAME_PLACEHOLDER, $sServerName, $sUrl);
|
||||
}
|
||||
static::$m_sAppRootUrl = $sUrl;
|
||||
}
|
||||
return $sUrl;
|
||||
return static::$m_sAppRootUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1342,13 +1368,23 @@ class utils
|
||||
return APPROOT . 'env-' . MetaModel::GetEnvironment() . '/';
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string A path to the folder into which data can be written
|
||||
* @internal
|
||||
* @since N°6097 2.7.10 3.0.4 3.1.1
|
||||
*/
|
||||
public static function GetDataPath(): string
|
||||
{
|
||||
return APPROOT.'data/';
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string A path to a folder into which any module can store cache data
|
||||
* The corresponding folder is created or cleaned upon code compilation
|
||||
*/
|
||||
public static function GetCachePath()
|
||||
{
|
||||
return APPROOT.'data/cache-'.MetaModel::GetEnvironment().'/';
|
||||
return static::GetDataPath().'cache-'.MetaModel::GetEnvironment().'/';
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2131,24 +2167,7 @@ class utils
|
||||
*/
|
||||
public static function GetCurrentModuleName($iCallDepth = 0)
|
||||
{
|
||||
$sCurrentModuleName = '';
|
||||
$aCallStack = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
|
||||
$sCallerFile = realpath($aCallStack[$iCallDepth]['file']);
|
||||
|
||||
foreach(GetModulesInfo() as $sModuleName => $aInfo)
|
||||
{
|
||||
if ($aInfo['root_dir'] !== '')
|
||||
{
|
||||
$sRootDir = realpath(APPROOT.$aInfo['root_dir']);
|
||||
|
||||
if(substr($sCallerFile, 0, strlen($sRootDir)) === $sRootDir)
|
||||
{
|
||||
$sCurrentModuleName = $sModuleName;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $sCurrentModuleName;
|
||||
return ModuleService::GetInstance()->GetCurrentModuleName($iCallDepth + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2170,24 +2189,7 @@ class utils
|
||||
*/
|
||||
public static function GetCurrentModuleDir($iCallDepth)
|
||||
{
|
||||
$sCurrentModuleDir = '';
|
||||
$aCallStack = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
|
||||
$sCallerFile = realpath($aCallStack[$iCallDepth]['file']);
|
||||
|
||||
foreach(GetModulesInfo() as $sModuleName => $aInfo)
|
||||
{
|
||||
if ($aInfo['root_dir'] !== '')
|
||||
{
|
||||
$sRootDir = realpath(APPROOT.$aInfo['root_dir']);
|
||||
|
||||
if(substr($sCallerFile, 0, strlen($sRootDir)) === $sRootDir)
|
||||
{
|
||||
$sCurrentModuleDir = basename($sRootDir);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $sCurrentModuleDir;
|
||||
return ModuleService::GetInstance()->GetCurrentModuleDir($iCallDepth);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2202,12 +2204,7 @@ class utils
|
||||
*/
|
||||
public static function GetCurrentModuleUrl()
|
||||
{
|
||||
$sDir = static::GetCurrentModuleDir(1);
|
||||
if ( $sDir !== '')
|
||||
{
|
||||
return static::GetAbsoluteUrlModulesRoot().'/'.$sDir;
|
||||
}
|
||||
return '';
|
||||
return ModuleService::GetInstance()->GetCurrentModuleUrl(1);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2217,8 +2214,7 @@ class utils
|
||||
*/
|
||||
public static function GetCurrentModuleSetting($sProperty, $defaultvalue = null)
|
||||
{
|
||||
$sModuleName = static::GetCurrentModuleName(1);
|
||||
return MetaModel::GetModuleSetting($sModuleName, $sProperty, $defaultvalue);
|
||||
return ModuleService::GetInstance()->GetCurrentModuleSetting($sProperty, $defaultvalue);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2227,12 +2223,7 @@ class utils
|
||||
*/
|
||||
public static function GetCompiledModuleVersion($sModuleName)
|
||||
{
|
||||
$aModulesInfo = GetModulesInfo();
|
||||
if (array_key_exists($sModuleName, $aModulesInfo))
|
||||
{
|
||||
return $aModulesInfo[$sModuleName]['version'];
|
||||
}
|
||||
return null;
|
||||
return ModuleService::GetInstance()->GetCompiledModuleVersion($sModuleName);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2756,7 +2747,7 @@ HTML;
|
||||
|
||||
foreach ($aClassMap as $sPHPClass => $sPHPFile) {
|
||||
$bSkipped = false;
|
||||
|
||||
|
||||
// Check if our class matches name filter, or is in an excluded path
|
||||
if ($sClassNameFilter !== '' && strpos($sPHPClass, $sClassNameFilter) === false) {
|
||||
$bSkipped = true;
|
||||
@@ -2776,7 +2767,7 @@ HTML;
|
||||
$bSkipped = true; // file not found
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(!$bSkipped){
|
||||
try {
|
||||
$oRefClass = new ReflectionClass($sPHPClass);
|
||||
@@ -2886,6 +2877,7 @@ HTML;
|
||||
*
|
||||
* @return bool if string null or empty
|
||||
* @since 3.0.2 N°5302
|
||||
* @since 2.7.10 N°6458 add method in the 2.7 branch
|
||||
*/
|
||||
public static function IsNullOrEmptyString(?string $sString): bool
|
||||
{
|
||||
@@ -2901,6 +2893,7 @@ HTML;
|
||||
*
|
||||
* @return bool if string is not null and not empty
|
||||
* @since 3.0.2 N°5302
|
||||
* @since 2.7.10 N°6458 add method in the 2.7 branch
|
||||
*/
|
||||
public static function IsNotNullOrEmptyString(?string $sString): bool
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* @deprecated will be removed in 3.1.0 - moved to sources/application/WebPage/WebPage.php, now loadable using autoloader
|
||||
* @deprecated 3.0.0 will be removed in 3.1.0 - moved to sources/application/WebPage/WebPage.php, now loadable using autoloader
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
*/
|
||||
|
||||
@@ -347,6 +347,7 @@ class WizardHelper
|
||||
/**
|
||||
* @return string JS code to be executed for fields update
|
||||
* @since 3.0.0 N°3198
|
||||
* @deprecated 3.0.3-2 3.0.4 3.1.1 3.2.0 Use {@see \WizardHelper::AddJsForUpdateFields()} instead
|
||||
*/
|
||||
public function GetJsForUpdateFields()
|
||||
{
|
||||
@@ -359,15 +360,39 @@ class WizardHelper
|
||||
JS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add necessary JS snippets (to the page) to be executed for fields update
|
||||
*
|
||||
* @param \WebPage $oPage
|
||||
* @return void
|
||||
* @since 3.0.3-2 3.0.4 3.1.1 3.2.0 N°6766
|
||||
*/
|
||||
public function AddJsForUpdateFields(WebPage $oPage)
|
||||
{
|
||||
$sWizardHelperJsVar = (!is_null($this->m_aData['m_sWizHelperJsVarName'])) ? utils::Sanitize($this->m_aData['m_sWizHelperJsVarName'], '', utils::ENUM_SANITIZATION_FILTER_PARAMETER) : 'oWizardHelper'.$this->GetFormPrefix();
|
||||
$sWizardHelperJson = $this->ToJSON();
|
||||
|
||||
$oPage->add_script(<<<JS
|
||||
{$sWizardHelperJsVar}.m_oData = {$sWizardHelperJson};
|
||||
{$sWizardHelperJsVar}.UpdateFields();
|
||||
JS
|
||||
);
|
||||
$oPage->add_ready_script(<<<JS
|
||||
if ({$sWizardHelperJsVar}.m_oDependenciesUpdatedPromiseResolve !== null){
|
||||
{$sWizardHelperJsVar}.m_oDependenciesUpdatedPromiseResolve();
|
||||
}
|
||||
JS
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
static function ParseJsonSet($oMe, $sLinkClass, $sExtKeyToMe, $sJsonSet)
|
||||
{
|
||||
$aSet = json_decode($sJsonSet, true); // true means hash array instead of object
|
||||
$oSet = CMDBObjectSet::FromScratch($sLinkClass);
|
||||
foreach ($aSet as $aLinkObj)
|
||||
{
|
||||
foreach ($aSet as $aLinkObj) {
|
||||
$oLink = MetaModel::NewObject($sLinkClass);
|
||||
foreach ($aLinkObj as $sAttCode => $value)
|
||||
{
|
||||
foreach ($aLinkObj as $sAttCode => $value) {
|
||||
$oAttDef = MetaModel::GetAttributeDef($sLinkClass, $sAttCode);
|
||||
if (($oAttDef->IsExternalKey()) && ($value != '') && ($value > 0))
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* @deprecated will be removed in 3.1.0 - moved to sources/application/WebPage/XMLPage.php, now loadable using autoloader
|
||||
* @deprecated 3.0.0 will be removed in 3.1.0 - moved to sources/application/WebPage/XMLPage.php, now loadable using autoloader
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
*/
|
||||
|
||||
@@ -23,6 +23,13 @@ define('ITOP_DESIGN_LATEST_VERSION', '3.0');
|
||||
* @used-by utils::GetItopVersionWikiSyntax()
|
||||
* @used-by iTopModulesPhpVersionIntegrationTest
|
||||
*/
|
||||
define('ITOP_CORE_VERSION', '3.0.3');
|
||||
define('ITOP_CORE_VERSION', '3.0.4');
|
||||
|
||||
/**
|
||||
* @var string
|
||||
* @since 3.0.4 3.1.0 3.2.0 N°6274 Allow to test if PHPUnit is currently running. Starting with PHPUnit 9.5 we'll be able to replace it with $GLOBALS['phpunit_version']
|
||||
* @since 3.0.4 3.1.1 3.2.0 N°6976 Fix constant name (DeprecatedCallsLog error handler was never set)
|
||||
*/
|
||||
const ITOP_PHPUNIT_RUNNING_CONSTANT_NAME = 'ITOP_PHPUNIT_RUNNING';
|
||||
|
||||
require_once APPROOT.'bootstrap.inc.php';
|
||||
|
||||
@@ -45,6 +45,7 @@ define('MAINTENANCE_MODE_FILE', APPROOT.'data/.maintenance');
|
||||
define('READONLY_MODE_FILE', APPROOT.'data/.readonly');
|
||||
|
||||
$fItopStarted = microtime(true);
|
||||
$iItopInitialMemory = memory_get_usage(true);
|
||||
|
||||
if (!isset($GLOBALS['bBypassAutoload']) || $GLOBALS['bBypassAutoload'] == false) {
|
||||
require_once APPROOT.'/lib/autoload.php';
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
"combodo/tcpdf": "~6.4.4",
|
||||
"firebase/php-jwt": "~6.4.0",
|
||||
"guzzlehttp/guzzle": "^6.5.8",
|
||||
"guzzlehttp/psr7": "~1.9.1",
|
||||
"laminas/laminas-mail": "^2.11",
|
||||
"laminas/laminas-servicemanager": "^3.5",
|
||||
"league/oauth2-google": "^3.0",
|
||||
|
||||
@@ -59,9 +59,16 @@ class DbConnectionWrapper
|
||||
* Use this to register a mock that will handle {@see mysqli::query()}
|
||||
*
|
||||
* @param \mysqli|null $oMysqli
|
||||
* @since 3.0.4 3.1.1 3.2.0 Param $oMysqli becomes nullable
|
||||
*/
|
||||
public static function SetDbConnectionMockForQuery(?mysqli $oMysqli): void
|
||||
public static function SetDbConnectionMockForQuery(?mysqli $oMysqli = null): void
|
||||
{
|
||||
static::$oDbCnxMockableForQuery = $oMysqli;
|
||||
if (is_null($oMysqli)) {
|
||||
// Reset to standard connection
|
||||
static::$oDbCnxMockableForQuery = static::$oDbCnxStandard;
|
||||
}
|
||||
else {
|
||||
static::$oDbCnxMockableForQuery = $oMysqli;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -419,6 +419,7 @@ class MyHelpers
|
||||
//}
|
||||
return $sOutput;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -523,5 +524,3 @@ class Str
|
||||
return (strtolower($sString) == $sString);
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
@@ -149,7 +149,9 @@ abstract class BulkExport
|
||||
$this->oSearch = null;
|
||||
$this->iChunkSize = 0;
|
||||
$this->sFormatCode = null;
|
||||
$this->aStatusInfo = array();
|
||||
$this->aStatusInfo = [
|
||||
'show_obsolete_data' => utils::ShowObsoleteData(),
|
||||
];
|
||||
$this->oBulkExportResult = null;
|
||||
$this->sTmpFile = '';
|
||||
$this->bLocalizeOutput = false;
|
||||
@@ -203,15 +205,17 @@ abstract class BulkExport
|
||||
if ($oInfo && ($oInfo->Get('user_id') == UserRights::GetUserId()))
|
||||
{
|
||||
$sFormatCode = $oInfo->Get('format');
|
||||
$oSearch = DBObjectSearch::unserialize($oInfo->Get('search'));
|
||||
$aStatusInfo = json_decode($oInfo->Get('status_info'),true);
|
||||
|
||||
$oSearch = DBObjectSearch::unserialize($oInfo->Get('search'));
|
||||
$oSearch->SetShowObsoleteData($aStatusInfo['show_obsolete_data']);
|
||||
$oBulkExporter = self::FindExporter($sFormatCode, $oSearch);
|
||||
if ($oBulkExporter)
|
||||
{
|
||||
$oBulkExporter->SetFormat($sFormatCode);
|
||||
$oBulkExporter->SetObjectList($oSearch);
|
||||
$oBulkExporter->SetChunkSize($oInfo->Get('chunk_size'));
|
||||
$oBulkExporter->SetStatusInfo(json_decode($oInfo->Get('status_info'), true));
|
||||
$oBulkExporter->SetStatusInfo($aStatusInfo);
|
||||
|
||||
$oBulkExporter->SetLocalizeOutput($oInfo->Get('localize_output'));
|
||||
|
||||
@@ -289,6 +293,7 @@ abstract class BulkExport
|
||||
*/
|
||||
public function SetObjectList(DBSearch $oSearch)
|
||||
{
|
||||
$oSearch->SetShowObsoleteData($this->aStatusInfo['show_obsolete_data']);
|
||||
$this->oSearch = $oSearch;
|
||||
}
|
||||
|
||||
|
||||
@@ -42,6 +42,12 @@ class CMDBSource
|
||||
const ENUM_DB_VENDOR_MARIADB = 'MariaDB';
|
||||
const ENUM_DB_VENDOR_PERCONA = 'Percona';
|
||||
|
||||
/**
|
||||
* @since 2.7.10 3.0.4 3.1.2 3.0.2 N°6889 constant creation
|
||||
* @internal will be removed in a future version
|
||||
*/
|
||||
const MYSQL_DEFAULT_PORT = 3306;
|
||||
|
||||
/**
|
||||
* Error: 1205 SQLSTATE: HY000 (ER_LOCK_WAIT_TIMEOUT)
|
||||
* Message: Lock wait timeout exceeded; try restarting transaction
|
||||
@@ -213,16 +219,19 @@ class CMDBSource
|
||||
/**
|
||||
* @param string $sDbHost initial value ("p:domain:port" syntax)
|
||||
* @param string $sServer server variable to update
|
||||
* @param int $iPort port variable to update
|
||||
* @param int|null $iPort port variable to update, will return null if nothing is specified in $sDbHost
|
||||
*
|
||||
* @since 2.7.10 3.0.4 3.1.2 3.2.0 N°6889 will return null in $iPort if port isn't present in $sDbHost. Use {@see MYSQL_DEFAULT_PORT} if needed
|
||||
*
|
||||
* @link http://php.net/manual/en/mysqli.persistconns.php documentation for the "p:" prefix (persistent connexion)
|
||||
*/
|
||||
public static function InitServerAndPort($sDbHost, &$sServer, &$iPort)
|
||||
{
|
||||
$aConnectInfo = explode(':', $sDbHost);
|
||||
|
||||
$bUsePersistentConnection = false;
|
||||
if (strcasecmp($aConnectInfo[0], 'p') == 0)
|
||||
if (strcasecmp($aConnectInfo[0], 'p') === 0)
|
||||
{
|
||||
// we might have "p:" prefix to use persistent connections (see http://php.net/manual/en/mysqli.persistconns.php)
|
||||
$bUsePersistentConnection = true;
|
||||
$sServer = $aConnectInfo[0].':'.$aConnectInfo[1];
|
||||
}
|
||||
@@ -240,10 +249,6 @@ class CMDBSource
|
||||
{
|
||||
$iPort = (int)($aConnectInfo[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
$iPort = 3306;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -430,6 +435,7 @@ class CMDBSource
|
||||
{
|
||||
self::$m_sDBName = '';
|
||||
}
|
||||
self::_TablesInfoCacheReset(); // reset the table info cache!
|
||||
}
|
||||
|
||||
public static function CreateTable($sQuery)
|
||||
@@ -606,8 +612,9 @@ class CMDBSource
|
||||
{
|
||||
self::LogDeadLock($e, true);
|
||||
throw new MySQLException('Failed to issue SQL query', array('query' => $sSql, $e));
|
||||
}
|
||||
$oKPI->ComputeStats('Query exec (mySQL)', $sSql);
|
||||
} finally {
|
||||
$oKPI->ComputeStats('Query exec (mySQL)', $sSql);
|
||||
}
|
||||
if ($oResult === false) {
|
||||
$aContext = array('query' => $sSql);
|
||||
|
||||
@@ -625,18 +632,24 @@ class CMDBSource
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \Exception $e
|
||||
* @param Exception $e
|
||||
* @param bool $bForQuery to get the proper DB connection
|
||||
* @param bool $bCheckMysqliErrno if false won't try to check for mysqli::errno value
|
||||
*
|
||||
* @since 2.7.1
|
||||
* @since 3.0.0 N°4325 add new optional parameter to use the correct DB connection
|
||||
* @since 3.0.4 3.1.1 3.2.0 N°6643 new bCheckMysqliErrno parameter as a workaround for mysqli::errno cannot be mocked
|
||||
*/
|
||||
private static function LogDeadLock(Exception $e, $bForQuery = false)
|
||||
private static function LogDeadLock(Exception $e, $bForQuery = false, $bCheckMysqliErrno = true)
|
||||
{
|
||||
// checks MySQL error code
|
||||
$iMySqlErrorNo = DbConnectionWrapper::GetDbConnection($bForQuery)->errno;
|
||||
if (!in_array($iMySqlErrorNo, array(self::MYSQL_ERRNO_WAIT_TIMEOUT, self::MYSQL_ERRNO_DEADLOCK))) {
|
||||
return;
|
||||
if ($bCheckMysqliErrno) {
|
||||
$iMySqlErrorNo = DbConnectionWrapper::GetDbConnection($bForQuery)->errno;
|
||||
if (!in_array($iMySqlErrorNo, array(self::MYSQL_ERRNO_WAIT_TIMEOUT, self::MYSQL_ERRNO_DEADLOCK))) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
$iMySqlErrorNo = "N/A";
|
||||
}
|
||||
|
||||
// Get error info
|
||||
@@ -663,7 +676,10 @@ class CMDBSource
|
||||
);
|
||||
DeadLockLog::Info($sMessage, $iMySqlErrorNo, $aLogContext);
|
||||
|
||||
IssueLog::Error($sMessage, LogChannels::DEADLOCK, $e->getMessage());
|
||||
IssueLog::Error($sMessage, LogChannels::DEADLOCK, [
|
||||
'exception.class' => get_class($e),
|
||||
'exception.message' => $e->getMessage(),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -584,22 +584,22 @@ class Config
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
],
|
||||
'email_transport_smtp.allow_self_signed' => array(
|
||||
'email_transport_smtp.allow_self_signed' => [
|
||||
'type' => 'bool',
|
||||
'description' => 'Allow self signed peer certificates',
|
||||
'default' => false,
|
||||
'value' => false,
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
),
|
||||
'email_transport_smtp.verify_peer' => array(
|
||||
],
|
||||
'email_transport_smtp.verify_peer' => [
|
||||
'type' => 'bool',
|
||||
'description' => 'Verify peer certificate',
|
||||
'default' => true,
|
||||
'value' => true,
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
),
|
||||
],
|
||||
'email_css' => [
|
||||
'type' => 'string',
|
||||
'description' => 'CSS that will override the standard stylesheet used for the notifications',
|
||||
@@ -989,6 +989,14 @@ class Config
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
],
|
||||
'log_kpi_generate_legacy_report' => [
|
||||
'type' => 'bool',
|
||||
'description' => 'Generate the legacy KPI report (kpi.html)',
|
||||
'default' => true,
|
||||
'value' => '',
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
],
|
||||
'max_linkset_output' => [
|
||||
'type' => 'integer',
|
||||
'description' => 'Maximum number of items shown when getting a list of related items in an email, using the form $this->some_list$. 0 means no limit.',
|
||||
@@ -1435,6 +1443,14 @@ class Config
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
],
|
||||
'allow_rest_services_via_tokens' => [
|
||||
'type' => 'bool',
|
||||
'description' => 'When set to true, REST endpoint token authorization works even with secure_rest_services set.',
|
||||
'default' => false,
|
||||
'value' => false,
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
],
|
||||
'search_manual_submit' => [
|
||||
'type' => 'array',
|
||||
'description' => 'Force manual submit of search all requests',
|
||||
@@ -1515,6 +1531,14 @@ class Config
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
],
|
||||
'security.enable_header_xcontent_type_options' => [
|
||||
'type' => 'bool',
|
||||
'description' => 'If set to false, iTop will stop sending the X-Content-Type-Options HTTP header. This header could trigger CORB protection on certain resources (JSON, XML, HTML, text) therefore blocking them.',
|
||||
'default' => true,
|
||||
'value' => '',
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
],
|
||||
'security.disable_inline_documents_sandbox' => [
|
||||
'type' => 'bool',
|
||||
'description' => 'If true then the sandbox for documents displayed in a browser tab will be disabled; enabling scripts and other interactive content. Note that setting this to true will open the application to potential XSS attacks!',
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
<?php
|
||||
/**
|
||||
* This file is only here for compatibility issues. Will be removed in iTop 3.1.0 (N°3664)
|
||||
* This file is only here for compatibility reasons.
|
||||
* It will be removed in future iTop versions (N°6533)
|
||||
*
|
||||
* @deprecated 3.0.0 N°3663 Exception classes were moved to `/application/exceptions`, use autoloader instead of require !
|
||||
*/
|
||||
require_once '../approot.inc.php';
|
||||
DeprecatedCallsLog::NotifyDeprecatedFile('Classes were moved to /application/exceptions');
|
||||
|
||||
require_once __DIR__ . '/../approot.inc.php';
|
||||
|
||||
DeprecatedCallsLog::NotifyDeprecatedFile('Classes were moved to /application/exceptions and can be used directly with the autoloader');
|
||||
|
||||
@@ -188,8 +188,8 @@ final class ItopCounter
|
||||
|
||||
if (!$hDBLink)
|
||||
{
|
||||
throw new Exception("Could not connect to the DB server (host=$sDBHost, user=$sDBUser): ".mysqli_connect_error().' (mysql errno: '.mysqli_connect_errno().')');
|
||||
}
|
||||
throw new MySQLException('Could not connect to the DB server '.mysqli_connect_error().' (mysql errno: '.mysqli_connect_errno(), array('host' => $sDBHost, 'user' => $sDBUser));
|
||||
}
|
||||
|
||||
return $hDBLink;
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ use Combodo\iTop\Application\UI\Base\Component\Input\SelectUIBlockFactory;
|
||||
use Combodo\iTop\Application\UI\Base\Component\Panel\PanelUIBlockFactory;
|
||||
use Combodo\iTop\Application\UI\Base\Layout\MultiColumn\Column\ColumnUIBlockFactory;
|
||||
use Combodo\iTop\Application\UI\Base\Layout\MultiColumn\MultiColumnUIBlockFactory;
|
||||
use Combodo\iTop\Application\Helper\ExportHelper;
|
||||
|
||||
/**
|
||||
* Bulk export: CSV export
|
||||
@@ -114,6 +115,7 @@ class CSVBulkExport extends TabularBulkExport
|
||||
|
||||
case 'csv_options':
|
||||
$oPanel = PanelUIBlockFactory::MakeNeutral(Dict::S('Core:BulkExport:CSVOptions'));
|
||||
$oPanel->AddSubBlock(ExportHelper::GetAlertForExcelMaliciousInjection());
|
||||
|
||||
$oMulticolumn = MultiColumnUIBlockFactory::MakeStandard();
|
||||
$oPanel->AddSubBlock($oMulticolumn);
|
||||
@@ -164,7 +166,7 @@ class CSVBulkExport extends TabularBulkExport
|
||||
|
||||
foreach ($aQualifiers as $sVal => $sLabel) {
|
||||
$oRadio = InputUIBlockFactory::MakeForInputWithLabel($sLabel, "text-qualifier", htmlentities($sVal, ENT_QUOTES, 'UTF-8'), $sLabel, "radio");
|
||||
$oRadio->GetInput()->SetIsChecked(($sVal == $sRawSeparator));
|
||||
$oRadio->GetInput()->SetIsChecked(($sVal == $sRawQualifier));
|
||||
$oRadio->SetBeforeInput(false);
|
||||
$oRadio->GetInput()->AddCSSClass('ibo-input--label-right');
|
||||
$oRadio->GetInput()->AddCSSClass('ibo-input-checkbox');
|
||||
|
||||
@@ -1581,10 +1581,9 @@ abstract class DBObject implements iDisplay
|
||||
/**
|
||||
* Helper to get the friendly name in a safe manner for displaying inside a web page
|
||||
*
|
||||
* @internal
|
||||
* @return string
|
||||
* @throws \CoreException
|
||||
* @since 3.0.0 N°4106 This method is now internal. It will be set final in 3.1.0 (N°4107)
|
||||
* @since 3.0.0 N°4106 Method should be overloaded anymore for performances reasons. It will be set final in 3.1.0 (N°4107)
|
||||
* @since 3.0.0 N°580 New $sType parameter
|
||||
*
|
||||
*/
|
||||
@@ -1931,7 +1930,7 @@ abstract class DBObject implements iDisplay
|
||||
/** @var \AttributeExternalKey $oAtt */
|
||||
$sTargetClass = $oAtt->GetTargetClass();
|
||||
if (false === MetaModel::IsObjectInDB($sTargetClass, $toCheck)) {
|
||||
return "Target object not found (".$sTargetClass.".::".$toCheck.")";
|
||||
return "Target object not found ({$sTargetClass}::{$toCheck})";
|
||||
}
|
||||
}
|
||||
if ($oAtt->IsHierarchicalKey())
|
||||
@@ -2238,7 +2237,6 @@ abstract class DBObject implements iDisplay
|
||||
* @throws \ArchivedObjectException
|
||||
* @throws \CoreException
|
||||
* @throws \OQLException
|
||||
*
|
||||
*/
|
||||
public function DoCheckToWrite()
|
||||
{
|
||||
@@ -2292,7 +2290,6 @@ abstract class DBObject implements iDisplay
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @api
|
||||
* @api-advanced
|
||||
*
|
||||
@@ -2308,7 +2305,6 @@ abstract class DBObject implements iDisplay
|
||||
* @throws \ArchivedObjectException
|
||||
* @throws \CoreException
|
||||
* @throws \OQLException
|
||||
*
|
||||
*/
|
||||
final public function CheckToWrite()
|
||||
{
|
||||
@@ -2322,7 +2318,7 @@ abstract class DBObject implements iDisplay
|
||||
|
||||
$oKPI = new ExecutionKPI();
|
||||
$this->DoCheckToWrite();
|
||||
$oKPI->ComputeStats('CheckToWrite', get_class($this));
|
||||
$oKPI->ComputeStatsForExtension($this, 'DoCheckToWrite');
|
||||
if (count($this->m_aCheckIssues) == 0)
|
||||
{
|
||||
$this->m_bCheckStatus = true;
|
||||
@@ -2335,6 +2331,87 @@ abstract class DBObject implements iDisplay
|
||||
return array($this->m_bCheckStatus, $this->m_aCheckIssues, $this->m_bSecurityIssue);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks for extkey attributes values. This will throw exception on non-existing as well as non-accessible objects (silo, scopes).
|
||||
* That's why the test is done for all users including Administrators
|
||||
*
|
||||
* Note that due to perf issues, this isn't called directly by the ORM, but has to be called by consumers when possible.
|
||||
*
|
||||
* @param callable(string, string):bool|null $oIsObjectLoadableCallback Override to check if object is accessible.
|
||||
* Parameters are object class and key
|
||||
* Return value should be false if cannot access object, true otherwise
|
||||
* @return void
|
||||
*
|
||||
* @throws ArchivedObjectException
|
||||
* @throws CoreException if cannot get object attdef list
|
||||
* @throws CoreUnexpectedValue
|
||||
* @throws InvalidExternalKeyValueException
|
||||
* @throws MySQLException
|
||||
* @throws SecurityException if one extkey is pointing to an invalid value
|
||||
*
|
||||
* @link https://github.com/Combodo/iTop/security/advisories/GHSA-245j-66p9-pwmh
|
||||
* @since 2.7.10 3.0.4 3.1.1 3.2.0 N°6458
|
||||
*
|
||||
* @see \RestUtils::FindObjectFromKey for the same check in the REST endpoint
|
||||
*/
|
||||
final public function CheckChangedExtKeysValues(callable $oIsObjectLoadableCallback = null)
|
||||
{
|
||||
if (is_null($oIsObjectLoadableCallback)) {
|
||||
$oIsObjectLoadableCallback = function ($sClass, $sId) {
|
||||
$oRemoteObject = MetaModel::GetObject($sClass, $sId, false);
|
||||
if (is_null($oRemoteObject)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
}
|
||||
|
||||
$aChanges = $this->ListChanges();
|
||||
$aAttCodesChanged = array_keys($aChanges);
|
||||
foreach ($aAttCodesChanged as $sAttDefCode) {
|
||||
$oAttDef = MetaModel::GetAttributeDef(get_class($this), $sAttDefCode);
|
||||
|
||||
if ($oAttDef instanceof AttributeLinkedSetIndirect) {
|
||||
/** @var ormLinkSet $oOrmSet */
|
||||
$oOrmSet = $this->Get($sAttDefCode);
|
||||
while ($oLnk = $oOrmSet->Fetch()) {
|
||||
$oLnk->CheckChangedExtKeysValues($oIsObjectLoadableCallback);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
/** @noinspection PhpConditionCheckedByNextConditionInspection */
|
||||
/** @noinspection NotOptimalIfConditionsInspection */
|
||||
if (($oAttDef instanceof AttributeHierarchicalKey) || ($oAttDef instanceof AttributeExternalKey)) {
|
||||
$sRemoteObjectClass = $oAttDef->GetTargetClass();
|
||||
$sRemoteObjectKey = $this->Get($sAttDefCode);
|
||||
} else if ($oAttDef instanceof AttributeObjectKey) {
|
||||
$sRemoteObjectClassAttCode = $oAttDef->Get('class_attcode');
|
||||
$sRemoteObjectClass = $this->Get($sRemoteObjectClassAttCode);
|
||||
$sRemoteObjectKey = $this->Get($sAttDefCode);
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (utils::IsNullOrEmptyString($sRemoteObjectClass)
|
||||
|| utils::IsNullOrEmptyString($sRemoteObjectKey)
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 0 : Undefined ext. key (EG. non-mandatory and no value provided)
|
||||
// < 0 : Non yet persisted object
|
||||
/** @noinspection TypeUnsafeComparisonInspection Non-strict comparison as object ID can be string */
|
||||
if ($sRemoteObjectKey <= 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (false === $oIsObjectLoadableCallback($sRemoteObjectClass, $sRemoteObjectKey)) {
|
||||
throw new InvalidExternalKeyValueException($this, $sAttDefCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if it is allowed to delete the existing object from the database
|
||||
*
|
||||
@@ -2480,11 +2557,11 @@ abstract class DBObject implements iDisplay
|
||||
* @api
|
||||
* @api-advanced
|
||||
*
|
||||
* @see \DBObject::ListPreviousValuesForUpdatedAttributes() to get previous values anywhere in the CRUD stack
|
||||
* @see https://www.itophub.io/wiki/page?id=latest%3Acustomization%3Asequence_crud iTop CRUD stack documentation
|
||||
* @return array attname => currentvalue List the attributes that have been changed using {@see DBObject::Set()}.
|
||||
* @return array attcode => currentvalue List the attributes that have been changed using {@see DBObject::Set()}.
|
||||
* Reset during {@see DBObject::DBUpdate()}
|
||||
* @throws Exception
|
||||
* @see \DBObject::ListPreviousValuesForUpdatedAttributes() to get previous values anywhere in the CRUD stack
|
||||
* @see https://www.itophub.io/wiki/page?id=latest%3Acustomization%3Asequence_crud iTop CRUD stack documentation
|
||||
* @uses m_aCurrValues
|
||||
*/
|
||||
public function ListChanges()
|
||||
@@ -2776,7 +2853,6 @@ abstract class DBObject implements iDisplay
|
||||
* @throws \Exception
|
||||
*
|
||||
* @internal
|
||||
*
|
||||
*/
|
||||
public function DBInsertNoReload()
|
||||
{
|
||||
@@ -2789,8 +2865,12 @@ abstract class DBObject implements iDisplay
|
||||
$sRootClass = MetaModel::GetRootClass($sClass);
|
||||
|
||||
// Ensure the update of the values (we are accessing the data directly)
|
||||
$oKPI = new ExecutionKPI();
|
||||
$this->DoComputeValues();
|
||||
$oKPI->ComputeStatsForExtension($this, 'DoComputeValues');
|
||||
$oKPI = new ExecutionKPI();
|
||||
$this->OnInsert();
|
||||
$oKPI->ComputeStatsForExtension($this, 'OnInsert');
|
||||
|
||||
// If not automatically computed, then check that the key is given by the caller
|
||||
if (!MetaModel::IsAutoIncrementKey($sRootClass))
|
||||
@@ -2802,7 +2882,7 @@ abstract class DBObject implements iDisplay
|
||||
}
|
||||
|
||||
// Ultimate check - ensure DB integrity
|
||||
list($bRes, $aIssues) = $this->CheckToWrite();
|
||||
[$bRes, $aIssues] = $this->CheckToWrite();
|
||||
if (!$bRes)
|
||||
{
|
||||
throw new CoreCannotSaveObjectException(array('issues' => $aIssues, 'class' => get_class($this), 'id' => $this->GetKey()));
|
||||
@@ -2917,7 +2997,9 @@ abstract class DBObject implements iDisplay
|
||||
$this->m_aOrigValues[$sAttCode] = $value;
|
||||
}
|
||||
|
||||
$oKPI = new ExecutionKPI();
|
||||
$this->AfterInsert();
|
||||
$oKPI->ComputeStatsForExtension($this, 'AfterInsert');
|
||||
|
||||
// Activate any existing trigger
|
||||
$sClass = get_class($this);
|
||||
@@ -3054,8 +3136,6 @@ abstract class DBObject implements iDisplay
|
||||
* Persist an object to the DB, for the first time
|
||||
*
|
||||
* @api
|
||||
* @see DBWrite
|
||||
*
|
||||
* @return int|null inserted object key
|
||||
*
|
||||
* @throws \ArchivedObjectException
|
||||
@@ -3065,10 +3145,12 @@ abstract class DBObject implements iDisplay
|
||||
* @throws \CoreWarning
|
||||
* @throws \MySQLException
|
||||
* @throws \OQLException
|
||||
*
|
||||
* @see DBWrite
|
||||
*/
|
||||
public function DBInsert()
|
||||
{
|
||||
$this->DBInsertNoReload();
|
||||
$this->DBInsertNoReload();
|
||||
|
||||
if (MetaModel::DBIsReadOnly())
|
||||
{
|
||||
@@ -3127,13 +3209,13 @@ abstract class DBObject implements iDisplay
|
||||
* Update an object in DB
|
||||
*
|
||||
* @api
|
||||
* @see DBObject::DBWrite()
|
||||
*
|
||||
* @return int object key
|
||||
*
|
||||
* @throws \CoreException
|
||||
* @throws \CoreCannotSaveObjectException if CheckToWrite() returns issues
|
||||
* @throws \Exception
|
||||
*
|
||||
* @see DBObject::DBWrite()
|
||||
*/
|
||||
public function DBUpdate()
|
||||
{
|
||||
@@ -3141,6 +3223,7 @@ abstract class DBObject implements iDisplay
|
||||
{
|
||||
throw new CoreException("DBUpdate: could not update a newly created object, please call DBInsert instead");
|
||||
}
|
||||
|
||||
// Protect against reentrance (e.g. cascading the update of ticket logs)
|
||||
static $aUpdateReentrance = array();
|
||||
$sKey = get_class($this).'::'.$this->GetKey();
|
||||
@@ -3154,8 +3237,11 @@ abstract class DBObject implements iDisplay
|
||||
|
||||
try
|
||||
{
|
||||
$oKPI = new ExecutionKPI();
|
||||
$this->DoComputeValues();
|
||||
// Stop watches
|
||||
$oKPI->ComputeStatsForExtension($this, 'DoComputeValues');
|
||||
|
||||
// Stop watches
|
||||
$sState = $this->GetState();
|
||||
if ($sState != '')
|
||||
{
|
||||
@@ -3174,7 +3260,9 @@ abstract class DBObject implements iDisplay
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->OnUpdate();
|
||||
$oKPI = new ExecutionKPI();
|
||||
$this->OnUpdate();
|
||||
$oKPI->ComputeStatsForExtension($this, 'OnUpdate');
|
||||
|
||||
$aChanges = $this->ListChanges();
|
||||
if (count($aChanges) == 0)
|
||||
@@ -3186,7 +3274,7 @@ abstract class DBObject implements iDisplay
|
||||
}
|
||||
|
||||
// Ultimate check - ensure DB integrity
|
||||
list($bRes, $aIssues) = $this->CheckToWrite();
|
||||
[$bRes, $aIssues] = $this->CheckToWrite();
|
||||
if (!$bRes)
|
||||
{
|
||||
throw new CoreCannotSaveObjectException(array(
|
||||
@@ -3370,7 +3458,9 @@ abstract class DBObject implements iDisplay
|
||||
$this->m_aModifiedAtt = array();
|
||||
|
||||
try {
|
||||
$this->AfterUpdate();
|
||||
$oKPI = new ExecutionKPI();
|
||||
$this->AfterUpdate();
|
||||
$oKPI->ComputeStatsForExtension($this, 'AfterUpdate');
|
||||
|
||||
// Reload to get the external attributes
|
||||
if ($bNeedReload) {
|
||||
@@ -3510,13 +3600,18 @@ abstract class DBObject implements iDisplay
|
||||
|
||||
/**
|
||||
* Make the current changes persistent - clever wrapper for Insert or Update
|
||||
*
|
||||
* @api
|
||||
*
|
||||
* @api
|
||||
*
|
||||
* @return int
|
||||
*
|
||||
* @throws \CoreCannotSaveObjectException
|
||||
* @throws \CoreException
|
||||
*
|
||||
* @throws ArchivedObjectException
|
||||
* @throws CoreCannotSaveObjectException
|
||||
* @throws CoreException
|
||||
* @throws CoreUnexpectedValue
|
||||
* @throws CoreWarning
|
||||
* @throws MySQLException
|
||||
* @throws OQLException
|
||||
*/
|
||||
public function DBWrite()
|
||||
{
|
||||
|
||||
@@ -767,7 +767,10 @@ class DBObjectSet implements iDBObjectSetIterator
|
||||
|
||||
try
|
||||
{
|
||||
$oKPI = new ExecutionKPI();
|
||||
$this->m_oSQLResult = CMDBSource::Query($sSQL);
|
||||
$sOQL = $this->GetPseudoOQL($this->m_oFilter, $this->GetRealSortOrder(), $this->m_iLimitCount, $this->m_iLimitStart, false);
|
||||
$oKPI->ComputeStats('OQL Query Exec', $sOQL);
|
||||
} catch (MySQLException $e)
|
||||
{
|
||||
// 1116 = ER_TOO_MANY_TABLES
|
||||
@@ -847,8 +850,11 @@ class DBObjectSet implements iDBObjectSetIterator
|
||||
{
|
||||
if (is_null($this->m_iNumTotalDBRows))
|
||||
{
|
||||
$oKPI = new ExecutionKPI();
|
||||
$sSQL = $this->m_oFilter->MakeSelectQuery(array(), $this->m_aArgs, null, null, 0, 0, true);
|
||||
$resQuery = CMDBSource::Query($sSQL);
|
||||
$sOQL = $this->GetPseudoOQL($this->m_oFilter, array(), 0, 0, true);
|
||||
$oKPI->ComputeStats('OQL Query Exec', $sOQL);
|
||||
if (!$resQuery) return 0;
|
||||
|
||||
$aRow = CMDBSource::FetchArray($resQuery);
|
||||
@@ -859,6 +865,42 @@ class DBObjectSet implements iDBObjectSetIterator
|
||||
return $this->m_iNumTotalDBRows + count($this->m_aAddedObjects); // Does it fix Trac #887 ??
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \DBSearch $oFilter
|
||||
* @param array $aOrder
|
||||
* @param int $iLimitCount
|
||||
* @param int $iLimitStart
|
||||
* @param bool $bCount
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function GetPseudoOQL($oFilter, $aOrder, $iLimitCount, $iLimitStart, $bCount)
|
||||
{
|
||||
$sOQL = '';
|
||||
if ($bCount) {
|
||||
$sOQL .= 'COUNT ';
|
||||
}
|
||||
$sOQL .= $oFilter->ToOQL();
|
||||
|
||||
if ($iLimitCount > 0) {
|
||||
$sOQL .= ' LIMIT ';
|
||||
if ($iLimitStart > 0) {
|
||||
$sOQL .= "$iLimitStart, ";
|
||||
}
|
||||
$sOQL .= "$iLimitCount";
|
||||
}
|
||||
|
||||
if (count($aOrder) > 0) {
|
||||
$sOQL .= ' ORDER BY ';
|
||||
$aOrderBy = [];
|
||||
foreach ($aOrder as $sAttCode => $bAsc) {
|
||||
$aOrderBy[] = $sAttCode.' '.($bAsc ? 'ASC' : 'DESC');
|
||||
}
|
||||
$sOQL .= implode(', ', $aOrderBy);
|
||||
}
|
||||
return $sOQL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the count exceeds a given limit
|
||||
*
|
||||
@@ -875,8 +917,11 @@ class DBObjectSet implements iDBObjectSetIterator
|
||||
{
|
||||
if (is_null($this->m_iNumTotalDBRows))
|
||||
{
|
||||
$oKPI = new ExecutionKPI();
|
||||
$sSQL = $this->m_oFilter->MakeSelectQuery(array(), $this->m_aArgs, null, null, $iLimit + 2, 0, true);
|
||||
$resQuery = CMDBSource::Query($sSQL);
|
||||
$sOQL = $this->GetPseudoOQL($this->m_oFilter, array(), $iLimit + 2, 0, true);
|
||||
$oKPI->ComputeStats('OQL Query Exec', $sOQL);
|
||||
if ($resQuery)
|
||||
{
|
||||
$aRow = CMDBSource::FetchArray($resQuery);
|
||||
@@ -887,7 +932,7 @@ class DBObjectSet implements iDBObjectSetIterator
|
||||
{
|
||||
$iCount = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$iCount = $this->m_iNumTotalDBRows;
|
||||
@@ -912,8 +957,11 @@ class DBObjectSet implements iDBObjectSetIterator
|
||||
{
|
||||
if (is_null($this->m_iNumTotalDBRows))
|
||||
{
|
||||
$oKPI = new ExecutionKPI();
|
||||
$sSQL = $this->m_oFilter->MakeSelectQuery(array(), $this->m_aArgs, null, null, $iLimit + 2, 0, true);
|
||||
$resQuery = CMDBSource::Query($sSQL);
|
||||
$sOQL = $this->GetPseudoOQL($this->m_oFilter, array(), $iLimit + 2, 0, true);
|
||||
$oKPI->ComputeStats('OQL Query Exec', $sOQL);
|
||||
if ($resQuery)
|
||||
{
|
||||
$aRow = CMDBSource::FetchArray($resQuery);
|
||||
@@ -924,7 +972,7 @@ class DBObjectSet implements iDBObjectSetIterator
|
||||
{
|
||||
$iCount = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$iCount = $this->m_iNumTotalDBRows;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
// iTop is free software; you can redistribute it and/or modify
|
||||
// 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.
|
||||
@@ -56,10 +56,11 @@ class Dict
|
||||
* @param $sLanguageCode
|
||||
*
|
||||
* @throws \DictExceptionUnknownLanguage
|
||||
* @since 3.0.4 3.1.1 3.2.0 Param $sLanguageCode becomes nullable
|
||||
*/
|
||||
public static function SetUserLanguage($sLanguageCode)
|
||||
public static function SetUserLanguage($sLanguageCode = null)
|
||||
{
|
||||
if (!array_key_exists($sLanguageCode, self::$m_aLanguages))
|
||||
if (!is_null($sLanguageCode) && !array_key_exists($sLanguageCode, self::$m_aLanguages))
|
||||
{
|
||||
throw new DictExceptionUnknownLanguage($sLanguageCode);
|
||||
}
|
||||
@@ -115,33 +116,50 @@ class Dict
|
||||
* @return string
|
||||
*/
|
||||
public static function S($sStringCode, $sDefault = null, $bUserLanguageOnly = false)
|
||||
{
|
||||
$aInfo = self::GetLabelAndLangCode($sStringCode, $sDefault, $bUserLanguageOnly);
|
||||
return $aInfo['label'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a localised string from the dictonary with its associated lang code
|
||||
*
|
||||
* @param string $sStringCode The code identifying the dictionary entry
|
||||
* @param string $sDefault Default value if there is no match in the dictionary
|
||||
* @param bool $bUserLanguageOnly True to allow the use of the default language as a fallback, false otherwise
|
||||
*
|
||||
* @return array{
|
||||
* lang: string, label: string
|
||||
* } with localized label string and used lang code
|
||||
*/
|
||||
private static function GetLabelAndLangCode($sStringCode, $sDefault = null, $bUserLanguageOnly = false)
|
||||
{
|
||||
// Attempt to find the string in the user language
|
||||
//
|
||||
$sLangCode = self::GetUserLanguage();
|
||||
self::InitLangIfNeeded($sLangCode);
|
||||
|
||||
if (!array_key_exists($sLangCode, self::$m_aData))
|
||||
if (! array_key_exists($sLangCode, self::$m_aData))
|
||||
{
|
||||
IssueLog::Warning("Cannot find $sLangCode in dictionnaries. default labels displayed");
|
||||
IssueLog::Warning("Cannot find $sLangCode in all registered dictionaries.");
|
||||
// It may happen, when something happens before the dictionaries get loaded
|
||||
return $sStringCode;
|
||||
return [ 'label' => $sStringCode, 'lang' => $sLangCode ];
|
||||
}
|
||||
$aCurrentDictionary = self::$m_aData[$sLangCode];
|
||||
if (is_array($aCurrentDictionary) && array_key_exists($sStringCode, $aCurrentDictionary))
|
||||
{
|
||||
return $aCurrentDictionary[$sStringCode];
|
||||
return [ 'label' => $aCurrentDictionary[$sStringCode], 'lang' => $sLangCode ];
|
||||
}
|
||||
if (!$bUserLanguageOnly)
|
||||
{
|
||||
// Attempt to find the string in the default language
|
||||
//
|
||||
self::InitLangIfNeeded(self::$m_sDefaultLanguage);
|
||||
|
||||
|
||||
$aDefaultDictionary = self::$m_aData[self::$m_sDefaultLanguage];
|
||||
if (is_array($aDefaultDictionary) && array_key_exists($sStringCode, $aDefaultDictionary))
|
||||
{
|
||||
return $aDefaultDictionary[$sStringCode];
|
||||
return [ 'label' => $aDefaultDictionary[$sStringCode], 'lang' => self::$m_sDefaultLanguage ];
|
||||
}
|
||||
// Attempt to find the string in english
|
||||
//
|
||||
@@ -150,17 +168,17 @@ class Dict
|
||||
$aDefaultDictionary = self::$m_aData['EN US'];
|
||||
if (is_array($aDefaultDictionary) && array_key_exists($sStringCode, $aDefaultDictionary))
|
||||
{
|
||||
return $aDefaultDictionary[$sStringCode];
|
||||
return [ 'label' => $aDefaultDictionary[$sStringCode], 'lang' => 'EN US' ];
|
||||
}
|
||||
}
|
||||
// Could not find the string...
|
||||
//
|
||||
if (is_null($sDefault))
|
||||
{
|
||||
return $sStringCode;
|
||||
return [ 'label' => $sStringCode, 'lang' => null ];
|
||||
}
|
||||
|
||||
return $sDefault;
|
||||
return [ 'label' => $sDefault, 'lang' => null ];
|
||||
}
|
||||
|
||||
|
||||
@@ -176,19 +194,25 @@ class Dict
|
||||
*/
|
||||
public static function Format($sFormatCode /*, ... arguments ....*/)
|
||||
{
|
||||
$sLocalizedFormat = self::S($sFormatCode);
|
||||
['label' => $sLocalizedFormat, 'lang' => $sLangCode] = self::GetLabelAndLangCode($sFormatCode);
|
||||
|
||||
$aArguments = func_get_args();
|
||||
array_shift($aArguments);
|
||||
|
||||
|
||||
if ($sLocalizedFormat == $sFormatCode)
|
||||
{
|
||||
// Make sure the information will be displayed (ex: an error occuring before the dictionary gets loaded)
|
||||
return $sFormatCode.' - '.implode(', ', $aArguments);
|
||||
}
|
||||
|
||||
return vsprintf($sLocalizedFormat, $aArguments);
|
||||
try{
|
||||
return vsprintf($sLocalizedFormat, $aArguments);
|
||||
} catch(\Throwable $e){
|
||||
\IssueLog::Error("Cannot format dict key", null, ["sFormatCode" => $sFormatCode, "sLangCode" => $sLangCode, 'exception_msg' => $e->getMessage() ]);
|
||||
return $sFormatCode.' - '.implode(', ', $aArguments);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Initialize a the entries for a given language (replaces the former Add() method)
|
||||
* @param string $sLanguageCode Code identifying the language i.e. 'FR-FR', 'EN-US'
|
||||
@@ -198,7 +222,7 @@ class Dict
|
||||
{
|
||||
self::$m_aData[$sLanguageCode] = $aEntries;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the list of available languages
|
||||
* @param hash $aLanguagesList
|
||||
@@ -259,7 +283,7 @@ class Dict
|
||||
{
|
||||
$sDictFile = APPROOT.'env-'.utils::GetCurrentEnvironment().'/dictionaries/'.str_replace(' ', '-', strtolower($sLangCode)).'.dict.php';
|
||||
require_once($sDictFile);
|
||||
|
||||
|
||||
if (self::GetApcService()->function_exists('apc_store')
|
||||
&& (self::$m_sApplicationPrefix !== null))
|
||||
{
|
||||
@@ -269,7 +293,7 @@ class Dict
|
||||
}
|
||||
return $bResult;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Enable caching (cached using APC)
|
||||
* @param string $sApplicationPrefix The prefix for uniquely identiying this iTop instance
|
||||
@@ -312,14 +336,14 @@ class Dict
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static function MakeStats($sLanguageCode, $sLanguageRef = 'EN US')
|
||||
{
|
||||
$aMissing = array(); // Strings missing for the target language
|
||||
$aUnexpected = array(); // Strings defined for the target language, but not found in the reference dictionary
|
||||
$aNotTranslated = array(); // Strings having the same value in both dictionaries
|
||||
$aOK = array(); // Strings having different values in both dictionaries
|
||||
|
||||
|
||||
foreach (self::$m_aData[$sLanguageRef] as $sStringCode => $sValue)
|
||||
{
|
||||
if (!array_key_exists($sStringCode, self::$m_aData[$sLanguageCode]))
|
||||
@@ -327,7 +351,7 @@ class Dict
|
||||
$aMissing[$sStringCode] = $sValue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
foreach (self::$m_aData[$sLanguageCode] as $sStringCode => $sValue)
|
||||
{
|
||||
if (!array_key_exists($sStringCode, self::$m_aData[$sLanguageRef]))
|
||||
@@ -350,7 +374,7 @@ class Dict
|
||||
}
|
||||
return array($aMissing, $aUnexpected, $aNotTranslated, $aOK);
|
||||
}
|
||||
|
||||
|
||||
public static function Dump()
|
||||
{
|
||||
MyHelpers::var_dump_html(self::$m_aData);
|
||||
@@ -373,7 +397,7 @@ class Dict
|
||||
// No need to actually load the strings since it's only used to know the list of languages
|
||||
// at setup time !!
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Export all the dictionary entries - of the given language - whose code matches the given prefix
|
||||
* missing entries in the current language will be replaced by entries in the default language
|
||||
@@ -386,7 +410,7 @@ class Dict
|
||||
self::InitLangIfNeeded(self::$m_sDefaultLanguage);
|
||||
$aEntries = array();
|
||||
$iLength = strlen($sStartingWith);
|
||||
|
||||
|
||||
// First prefill the array with entries from the default language
|
||||
foreach(self::$m_aData[self::$m_sDefaultLanguage] as $sCode => $sEntry)
|
||||
{
|
||||
@@ -395,7 +419,7 @@ class Dict
|
||||
$aEntries[$sCode] = $sEntry;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Now put (overwrite) the entries for the user language
|
||||
foreach(self::$m_aData[self::GetUserLanguage()] as $sCode => $sEntry)
|
||||
{
|
||||
|
||||
@@ -10,6 +10,7 @@ use Combodo\iTop\Application\UI\Base\Component\Input\InputUIBlockFactory;
|
||||
use Combodo\iTop\Application\UI\Base\Component\Panel\PanelUIBlockFactory;
|
||||
use Combodo\iTop\Application\UI\Base\Layout\MultiColumn\Column\ColumnUIBlockFactory;
|
||||
use Combodo\iTop\Application\UI\Base\Layout\MultiColumn\MultiColumnUIBlockFactory;
|
||||
use Combodo\iTop\Application\Helper\ExportHelper;
|
||||
|
||||
require_once(APPROOT.'application/xlsxwriter.class.php');
|
||||
|
||||
@@ -82,6 +83,7 @@ class ExcelBulkExport extends TabularBulkExport
|
||||
|
||||
case 'xlsx_options':
|
||||
$oPanel = PanelUIBlockFactory::MakeNeutral(Dict::S('Core:BulkExport:XLSXOptions'));
|
||||
$oPanel->AddSubBlock(ExportHelper::GetAlertForExcelMaliciousInjection());
|
||||
|
||||
$oMulticolumn = MultiColumnUIBlockFactory::MakeStandard();
|
||||
$oPanel->AddSubBlock($oMulticolumn);
|
||||
|
||||
@@ -48,10 +48,9 @@ abstract class HTMLSanitizer
|
||||
$sSanitizerClass = 'HTMLDOMSanitizer';
|
||||
} else if (!is_subclass_of($sSanitizerClass, 'HTMLSanitizer')) {
|
||||
if ($sConfigKey === 'html_sanitizer') {
|
||||
IssueLog::Warning('The configured "'.$sConfigKey.'" class "'.$sSanitizerClass.'" is not a subclass of HTMLSanitizer. Will use HTMLDOMSanitizer as the default sanitizer.');
|
||||
IssueLog::Warning('The configured "'.$sConfigKey.'" class "'.$sSanitizerClass.'" is not a subclass of '.HTMLSanitizer::class.'. Will use HTMLDOMSanitizer as the default sanitizer.');
|
||||
$sSanitizerClass = 'HTMLDOMSanitizer';
|
||||
}
|
||||
if ($sConfigKey === 'svg_sanitizer') {
|
||||
} else {
|
||||
IssueLog::Error('The configured "'.$sConfigKey.'" class "'.$sSanitizerClass.'" is not a subclass of '.HTMLSanitizer::class.' ! Won\'t sanitize string.');
|
||||
|
||||
return $sHTML;
|
||||
|
||||
@@ -1,27 +1,14 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2021 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/>
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2023 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
use Combodo\iTop\Core\Kpi\KpiLogData;
|
||||
use Combodo\iTop\Service\Module\ModuleService;
|
||||
|
||||
|
||||
/**
|
||||
* Measures operations duration, memory usage, etc. (and some other KPIs)
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
class ExecutionKPI
|
||||
@@ -30,6 +17,8 @@ class ExecutionKPI
|
||||
static protected $m_bEnabled_Memory = false;
|
||||
static protected $m_bBlameCaller = false;
|
||||
static protected $m_sAllowedUser = '*';
|
||||
static protected $m_bGenerateLegacyReport = true;
|
||||
static protected $m_fSlowQueries = 0;
|
||||
|
||||
static protected $m_aStats = []; // Recurrent operations
|
||||
static protected $m_aExecData = []; // One shot operations
|
||||
@@ -86,14 +75,39 @@ class ExecutionKPI
|
||||
return false;
|
||||
}
|
||||
|
||||
static public function SetGenerateLegacyReport($bReportExtensionsOnly)
|
||||
{
|
||||
self::$m_bGenerateLegacyReport = $bReportExtensionsOnly;
|
||||
}
|
||||
|
||||
static public function SetSlowQueries($fSlowQueries)
|
||||
{
|
||||
self::$m_fSlowQueries = $fSlowQueries;
|
||||
}
|
||||
|
||||
static public function GetDescription()
|
||||
{
|
||||
$aFeatures = array();
|
||||
if (self::$m_bEnabled_Duration) $aFeatures[] = 'Duration';
|
||||
if (self::$m_bEnabled_Memory) $aFeatures[] = 'Memory usage';
|
||||
$sFeatures = implode(', ', $aFeatures);
|
||||
$sFeatures = 'Measures: '.implode(', ', $aFeatures);
|
||||
$sFor = self::$m_sAllowedUser == '*' ? 'EVERYBODY' : "'".trim(self::$m_sAllowedUser)."'";
|
||||
return "KPI logging is active for $sFor. Measures: $sFeatures";
|
||||
$sSlowQueries = '';
|
||||
if (self::$m_fSlowQueries > 0) {
|
||||
$sSlowQueries = ". Slow Queries: ".self::$m_fSlowQueries."s";
|
||||
}
|
||||
|
||||
$aExtensions = [];
|
||||
/** @var \iKPILoggerExtension $oExtensionInstance */
|
||||
foreach (MetaModel::EnumPlugins('iKPILoggerExtension') as $oExtensionInstance) {
|
||||
$aExtensions[] = ModuleService::GetInstance()->GetModuleNameFromObject($oExtensionInstance);
|
||||
}
|
||||
$sExtensions = '';
|
||||
if (count($aExtensions) > 0) {
|
||||
$sExtensions = '. KPI Extensions: ['.implode(', ', $aExtensions).']';
|
||||
}
|
||||
|
||||
return "KPI logging is active for $sFor. $sFeatures$sSlowQueries$sExtensions";
|
||||
}
|
||||
|
||||
static public function ReportStats()
|
||||
@@ -101,7 +115,28 @@ class ExecutionKPI
|
||||
if (!self::IsEnabled()) return;
|
||||
|
||||
global $fItopStarted;
|
||||
global $iItopInitialMemory;
|
||||
$sExecId = microtime(); // id to differentiate the hrefs!
|
||||
$sRequest = $_SERVER['REQUEST_URI'].' ('.$_SERVER['REQUEST_METHOD'].')';
|
||||
if (isset($_POST['operation'])) {
|
||||
$sRequest .= ' operation: '.$_POST['operation'];
|
||||
}
|
||||
|
||||
$fStop = MyHelpers::getmicrotime();
|
||||
if (($fStop - $fItopStarted) > self::$m_fSlowQueries) {
|
||||
// Invoke extensions to log the KPI operation
|
||||
/** @var \iKPILoggerExtension $oExtensionInstance */
|
||||
$iCurrentMemory = self::memory_get_usage();
|
||||
$iPeakMemory = self::memory_get_peak_usage();
|
||||
foreach (MetaModel::EnumPlugins('iKPILoggerExtension') as $oExtensionInstance) {
|
||||
$oKPILogData = new KpiLogData(KpiLogData::TYPE_REQUEST, 'Page', $sRequest, $fItopStarted, $fStop, '', $iItopInitialMemory, $iCurrentMemory, $iPeakMemory);
|
||||
$oExtensionInstance->LogOperation($oKPILogData);
|
||||
}
|
||||
}
|
||||
|
||||
if (!self::$m_bGenerateLegacyReport) {
|
||||
return;
|
||||
}
|
||||
|
||||
$aBeginTimes = array();
|
||||
foreach (self::$m_aExecData as $aOpStats)
|
||||
@@ -114,9 +149,9 @@ class ExecutionKPI
|
||||
|
||||
$sHtml = "<hr/>";
|
||||
$sHtml .= "<div style=\"background-color: grey; padding: 10px;\">";
|
||||
$sHtml .= "<h3><a name=\"".md5($sExecId)."\">KPIs</a> - ".$_SERVER['REQUEST_URI']." (".$_SERVER['REQUEST_METHOD'].")</h3>";
|
||||
$sHtml .= "<h3><a name=\"".md5($sExecId)."\">KPIs</a> - $sRequest</h3>";
|
||||
$oStarted = DateTime::createFromFormat('U.u', $fItopStarted);
|
||||
$sHtml .= "<p>".$oStarted->format('Y-m-d H:i:s.u')."</p>";
|
||||
$sHtml .= '<p>'.$oStarted->format('Y-m-d H:i:s.u').'</p>';
|
||||
$sHtml .= "<p>log_kpi_user_id: ".UserRights::GetUserId()."</p>";
|
||||
$sHtml .= "<div>";
|
||||
$sHtml .= "<table border=\"1\" style=\"$sTableStyle\">";
|
||||
@@ -257,7 +292,7 @@ class ExecutionKPI
|
||||
$sTotalInter = round($fTotalInter, 3);
|
||||
$sMinInter = round($fMinInter, 3);
|
||||
$sMaxInter = round($fMaxInter, 3);
|
||||
if (($fTotalInter >= $fSlowQueries))
|
||||
if (($fTotalInter >= self::$m_fSlowQueries))
|
||||
{
|
||||
if ($bDisplayHeader)
|
||||
{
|
||||
@@ -285,37 +320,19 @@ class ExecutionKPI
|
||||
self::Report($sHtml);
|
||||
}
|
||||
|
||||
public static function InitStats()
|
||||
{
|
||||
// Invoke extensions to initialize the KPI statistics
|
||||
/** @var \iKPILoggerExtension $oExtensionInstance */
|
||||
foreach (MetaModel::EnumPlugins('iKPILoggerExtension') as $oExtensionInstance) {
|
||||
$oExtensionInstance->InitStats();
|
||||
}
|
||||
}
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->ResetCounters();
|
||||
self::Push($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Stack executions to remove children duration from stats
|
||||
*
|
||||
* @param \ExecutionKPI $oExecutionKPI
|
||||
*/
|
||||
private static function Push(ExecutionKPI $oExecutionKPI)
|
||||
{
|
||||
array_push(self::$m_aExecutionStack, $oExecutionKPI);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pop current child and count its duration in its parent
|
||||
*
|
||||
* @param float|int $fChildDuration
|
||||
*/
|
||||
private static function Pop(float $fChildDuration = 0)
|
||||
{
|
||||
array_pop(self::$m_aExecutionStack);
|
||||
// Update the parent's children duration
|
||||
$oPrevExecutionKPI = end(self::$m_aExecutionStack);
|
||||
if ($oPrevExecutionKPI) {
|
||||
$oPrevExecutionKPI->m_fChildrenDuration += $fChildDuration;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Get the duration since startup, and reset the counter for the next measure
|
||||
//
|
||||
@@ -323,9 +340,15 @@ class ExecutionKPI
|
||||
{
|
||||
global $fItopStarted;
|
||||
|
||||
if (!self::IsEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$aNewEntry = null;
|
||||
|
||||
if (self::$m_bEnabled_Duration) {
|
||||
$fStarted = $this->m_fStarted;
|
||||
$fStopped = $this->m_fStarted;
|
||||
if (self::$m_bEnabled_Duration) {
|
||||
$fStopped = MyHelpers::getmicrotime();
|
||||
$aNewEntry = array(
|
||||
'op' => $sOperationDesc,
|
||||
@@ -336,6 +359,9 @@ class ExecutionKPI
|
||||
$this->m_fStarted = $fStopped;
|
||||
}
|
||||
|
||||
$iInitialMemory = is_null($this->m_iInitialMemory) ? 0 : $this->m_iInitialMemory;
|
||||
$iCurrentMemory = 0;
|
||||
$iPeakMemory = 0;
|
||||
if (self::$m_bEnabled_Memory)
|
||||
{
|
||||
$iCurrentMemory = self::memory_get_usage();
|
||||
@@ -345,40 +371,103 @@ class ExecutionKPI
|
||||
}
|
||||
$aNewEntry['mem_begin'] = $this->m_iInitialMemory;
|
||||
$aNewEntry['mem_end'] = $iCurrentMemory;
|
||||
if (function_exists('memory_get_peak_usage'))
|
||||
{
|
||||
$aNewEntry['mem_peak'] = memory_get_peak_usage();
|
||||
}
|
||||
$iPeakMemory = self::memory_get_peak_usage();
|
||||
$aNewEntry['mem_peak'] = $iPeakMemory;
|
||||
// Reset for the next operation (if the object is recycled)
|
||||
$this->m_iInitialMemory = $iCurrentMemory;
|
||||
}
|
||||
|
||||
if (!is_null($aNewEntry))
|
||||
if (self::$m_bEnabled_Duration || self::$m_bEnabled_Memory) {
|
||||
// Invoke extensions to log the KPI operation
|
||||
/** @var \iKPILoggerExtension $oExtensionInstance */
|
||||
foreach(MetaModel::EnumPlugins('iKPILoggerExtension') as $oExtensionInstance)
|
||||
{
|
||||
$sExtension = ModuleService::GetInstance()->GetModuleNameFromCallStack(1);
|
||||
$oKPILogData = new KpiLogData(
|
||||
KpiLogData::TYPE_REPORT,
|
||||
'Step',
|
||||
$sOperationDesc,
|
||||
$fStarted,
|
||||
$fStopped,
|
||||
$sExtension,
|
||||
$iInitialMemory,
|
||||
$iCurrentMemory,
|
||||
$iPeakMemory);
|
||||
$oExtensionInstance->LogOperation($oKPILogData);
|
||||
}
|
||||
}
|
||||
|
||||
if (!is_null($aNewEntry) && self::$m_bGenerateLegacyReport)
|
||||
{
|
||||
self::$m_aExecData[] = $aNewEntry;
|
||||
}
|
||||
$this->ResetCounters();
|
||||
}
|
||||
|
||||
public function ComputeStatsForExtension($object, $sMethod)
|
||||
{
|
||||
if (!self::IsEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$sSignature = ModuleService::GetInstance()->GetModuleMethodSignature($object, $sMethod);
|
||||
if (utils::StartsWith($sSignature, '[')) {
|
||||
$this->ComputeStats('Extension', $sSignature);
|
||||
}
|
||||
}
|
||||
|
||||
public function ComputeStats($sOperation, $sArguments)
|
||||
{
|
||||
if (!self::IsEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$fDuration = 0;
|
||||
if (self::$m_bEnabled_Duration) {
|
||||
$fStopped = MyHelpers::getmicrotime();
|
||||
$fDuration = $fStopped - $this->m_fStarted;
|
||||
$fSelfDuration = $fDuration - $this->m_fChildrenDuration;
|
||||
if (self::$m_bBlameCaller) {
|
||||
self::$m_aStats[$sOperation][$sArguments][] = array(
|
||||
'time' => $fSelfDuration,
|
||||
'callers' => MyHelpers::get_callstack(1),
|
||||
);
|
||||
} else {
|
||||
self::$m_aStats[$sOperation][$sArguments][] = array(
|
||||
'time' => $fSelfDuration,
|
||||
);
|
||||
}
|
||||
}
|
||||
self::Pop($fDuration);
|
||||
$aCallstack = [];
|
||||
if (self::$m_bGenerateLegacyReport) {
|
||||
if (self::$m_bBlameCaller) {
|
||||
$aCallstack = MyHelpers::get_callstack(1);
|
||||
self::$m_aStats[$sOperation][$sArguments][] = [
|
||||
'time' => $fDuration,
|
||||
'callers' => $aCallstack,
|
||||
];
|
||||
} else {
|
||||
self::$m_aStats[$sOperation][$sArguments][] = [
|
||||
'time' => $fDuration
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
$iInitialMemory = is_null($this->m_iInitialMemory) ? 0 : $this->m_iInitialMemory;
|
||||
$iCurrentMemory = 0;
|
||||
$iPeakMemory = 0;
|
||||
if (self::$m_bEnabled_Memory)
|
||||
{
|
||||
$iCurrentMemory = self::memory_get_usage();
|
||||
$iPeakMemory = self::memory_get_peak_usage();
|
||||
}
|
||||
|
||||
// Invoke extensions to log the KPI operation
|
||||
/** @var \iKPILoggerExtension $oExtensionInstance */
|
||||
foreach (MetaModel::EnumPlugins('iKPILoggerExtension') as $oExtensionInstance) {
|
||||
$sExtension = ModuleService::GetInstance()->GetModuleNameFromCallStack(1);
|
||||
$oKPILogData = new KpiLogData(
|
||||
KpiLogData::TYPE_STATS,
|
||||
$sOperation,
|
||||
$sArguments,
|
||||
$this->m_fStarted,
|
||||
$fStopped,
|
||||
$sExtension,
|
||||
$iInitialMemory,
|
||||
$iCurrentMemory,
|
||||
$iPeakMemory,
|
||||
$aCallstack);
|
||||
$oExtensionInstance->LogOperation($oKPILogData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected function ResetCounters()
|
||||
@@ -408,35 +497,7 @@ class ExecutionKPI
|
||||
|
||||
static protected function memory_get_usage()
|
||||
{
|
||||
if (function_exists('memory_get_usage'))
|
||||
{
|
||||
return memory_get_usage(true);
|
||||
}
|
||||
|
||||
// Copied from the PHP manual
|
||||
//
|
||||
//If its Windows
|
||||
//Tested on Win XP Pro SP2. Should work on Win 2003 Server too
|
||||
//Doesn't work for 2000
|
||||
//If you need it to work for 2000 look at http://us2.php.net/manual/en/function.memory-get-usage.php#54642
|
||||
if (substr(PHP_OS,0,3) == 'WIN')
|
||||
{
|
||||
$output = array();
|
||||
exec('tasklist /FI "PID eq ' . getmypid() . '" /FO LIST', $output);
|
||||
|
||||
return preg_replace( '/[\D]/', '', $output[5] ) * 1024;
|
||||
}
|
||||
else
|
||||
{
|
||||
//We now assume the OS is UNIX
|
||||
//Tested on Mac OS X 10.4.6 and Linux Red Hat Enterprise 4
|
||||
//This should work on most UNIX systems
|
||||
$pid = getmypid();
|
||||
exec("ps -eo%mem,rss,pid | grep $pid", $output);
|
||||
$output = explode(" ", $output[0]);
|
||||
//rss is given in 1024 byte units
|
||||
return $output[1] * 1024;
|
||||
}
|
||||
return memory_get_usage(true);
|
||||
}
|
||||
|
||||
static public function memory_get_peak_usage($bRealUsage = false)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
// Copyright (C) 2010-2023 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -448,7 +448,7 @@ class LogFileNameBuilderFactory
|
||||
/**
|
||||
* File logging
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2023 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
* @since 2.7.0 N°2518 N°2793 file log rotation
|
||||
*/
|
||||
@@ -961,7 +961,9 @@ class ToolsLog extends LogAPI
|
||||
|
||||
/**
|
||||
* @see \CMDBSource::LogDeadLock()
|
||||
* @since 2.7.1
|
||||
* @since 2.7.1 PR #139
|
||||
*
|
||||
* @link https://dev.mysql.com/doc/refman/5.7/en/innodb-deadlocks.html
|
||||
*/
|
||||
class DeadLockLog extends LogAPI
|
||||
{
|
||||
@@ -986,10 +988,10 @@ class DeadLockLog extends LogAPI
|
||||
{
|
||||
switch ($iMysqlErrorNo)
|
||||
{
|
||||
case 1205:
|
||||
case CMDBSource::MYSQL_ERRNO_WAIT_TIMEOUT:
|
||||
return self::CHANNEL_WAIT_TIMEOUT;
|
||||
break;
|
||||
case 1213:
|
||||
case CMDBSource::MYSQL_ERRNO_DEADLOCK:
|
||||
return self::CHANNEL_DEADLOCK_FOUND;
|
||||
break;
|
||||
default:
|
||||
@@ -1019,7 +1021,14 @@ class DeadLockLog extends LogAPI
|
||||
|
||||
|
||||
/**
|
||||
* @since 3.0.0 N°3731
|
||||
* Starting with the WARNING level we will log in a dedicated file (/log/deprecated-calls.log) :
|
||||
* - iTop deprecated files or code
|
||||
* - protected trigger_error calls with E_DEPRECATED or E_USER_DEPRECATED
|
||||
*
|
||||
* For the last category, if {@see utils::IsDevelopmentEnvironment()} is true we will do a trigger_error()
|
||||
*
|
||||
* @since 3.0.0 N°3731 first implementation
|
||||
* @link https://www.itophub.io/wiki/page?id=latest:admin:log:channels#deprecated_calls channel used
|
||||
*/
|
||||
class DeprecatedCallsLog extends LogAPI
|
||||
{
|
||||
@@ -1062,16 +1071,23 @@ class DeprecatedCallsLog extends LogAPI
|
||||
* @uses \set_error_handler() to catch deprecated notices
|
||||
*
|
||||
* @since 3.0.0 N°3002 logs deprecated notices in called code
|
||||
* @since 3.0.4 N°6274 do not set handler when in PHPUnit context (otherwise PHP notices won't be caught)
|
||||
*/
|
||||
public static function Enable($sTargetFile = null): void
|
||||
{
|
||||
public static function Enable($sTargetFile = null): void {
|
||||
if (empty($sTargetFile)) {
|
||||
$sTargetFile = APPROOT.'log/deprecated-calls.log';
|
||||
}
|
||||
parent::Enable($sTargetFile);
|
||||
|
||||
if (static::IsLogLevelEnabledSafe(self::LEVEL_WARNING, self::ENUM_CHANNEL_PHP_LIBMETHOD)) {
|
||||
set_error_handler([static::class, 'DeprecatedNoticesErrorHandler']);
|
||||
if (
|
||||
(
|
||||
(false === defined(ITOP_PHPUNIT_RUNNING_CONSTANT_NAME))
|
||||
|| (defined(ITOP_PHPUNIT_RUNNING_CONSTANT_NAME) && (constant(ITOP_PHPUNIT_RUNNING_CONSTANT_NAME) !== true))
|
||||
)
|
||||
&& static::IsLogLevelEnabledSafe(self::LEVEL_WARNING, self::ENUM_CHANNEL_PHP_LIBMETHOD)
|
||||
) {
|
||||
IssueLog::Trace('Setting '.static::class.' error handler to catch DEPRECATED', static::ENUM_CHANNEL_PHP_LIBMETHOD);
|
||||
set_error_handler([static::class, 'DeprecatedNoticesErrorHandler'], E_DEPRECATED | E_USER_DEPRECATED);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1168,7 +1184,9 @@ class DeprecatedCallsLog extends LogAPI
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \ConfigException
|
||||
* @since 3.0.1 3.1.0 N°4725 silently handles ConfigException
|
||||
* @since 3.0.4 3.1.0 N°4725 remove forgotten throw PHPDoc annotation
|
||||
*
|
||||
* @link https://www.php.net/debug_backtrace
|
||||
* @uses \debug_backtrace()
|
||||
*/
|
||||
@@ -1497,6 +1515,8 @@ class ExceptionLog extends LogAPI
|
||||
*/
|
||||
private static function GetLastEventIssue()
|
||||
{
|
||||
return self::$oLastEventIssue;
|
||||
$oRet = self::$oLastEventIssue;
|
||||
self::$oLastEventIssue = null;
|
||||
return $oRet;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1430,8 +1430,10 @@ abstract class MetaModel
|
||||
*
|
||||
* @return AttributeDefinition[]
|
||||
* @throws \CoreException
|
||||
*
|
||||
* @see GetAttributesList for attcode list
|
||||
*/
|
||||
final static public function ListAttributeDefs($sClass)
|
||||
final public static function ListAttributeDefs($sClass)
|
||||
{
|
||||
self::_check_subclass($sClass);
|
||||
return self::$m_aAttribDefs[$sClass];
|
||||
@@ -1444,8 +1446,10 @@ abstract class MetaModel
|
||||
* @param string[] $aDesiredAttTypes Array of AttributeDefinition classes to filter the list on
|
||||
* @param string|null $sListCode If provided, attributes will be limited to those in this zlist
|
||||
*
|
||||
* @return array
|
||||
* @return string[] list of attcodes
|
||||
* @throws \CoreException
|
||||
*
|
||||
* @see ListAttributeDefs to get AttributeDefinition array instead
|
||||
*/
|
||||
final public static function GetAttributesList(string $sClass, array $aDesiredAttTypes = [], ?string $sListCode = null)
|
||||
{
|
||||
@@ -3002,14 +3006,12 @@ abstract class MetaModel
|
||||
// Build the list of available extensions
|
||||
//
|
||||
$aInterfaces = [
|
||||
'iApplicationUIExtension',
|
||||
'iPreferencesExtension',
|
||||
'iApplicationObjectExtension',
|
||||
'iLoginFSMExtension',
|
||||
'iLoginUIExtension',
|
||||
'iLogoutExtension',
|
||||
'iQueryModifier',
|
||||
'iOnClassInitialization',
|
||||
'iLoginUIExtension',
|
||||
'iPreferencesExtension',
|
||||
'iApplicationUIExtension',
|
||||
'iApplicationObjectExtension',
|
||||
'iPopupMenuExtension',
|
||||
'iPageUIExtension',
|
||||
'iPageUIBlockExtension',
|
||||
@@ -3023,9 +3025,12 @@ abstract class MetaModel
|
||||
'iBackofficeDictEntriesExtension',
|
||||
'iBackofficeDictEntriesPrefixesExtension',
|
||||
'iPortalUIExtension',
|
||||
'iQueryModifier',
|
||||
'iOnClassInitialization',
|
||||
'iModuleExtension',
|
||||
'iKPILoggerExtension',
|
||||
'ModuleHandlerApiInterface',
|
||||
'iNewsroomProvider',
|
||||
'iModuleExtension',
|
||||
];
|
||||
foreach($aInterfaces as $sInterface)
|
||||
{
|
||||
@@ -6511,6 +6516,13 @@ abstract class MetaModel
|
||||
*/
|
||||
public static function Startup($config, $bModelOnly = false, $bAllowCache = true, $bTraceSourceFiles = false, $sEnvironment = 'production')
|
||||
{
|
||||
// Startup on a new environment is not supported
|
||||
static $bStarted = false;
|
||||
if ($bStarted) {
|
||||
return;
|
||||
}
|
||||
$bStarted = true;
|
||||
|
||||
self::$m_sEnvironment = $sEnvironment;
|
||||
|
||||
if (!defined('MODULESROOT'))
|
||||
@@ -6588,7 +6600,9 @@ abstract class MetaModel
|
||||
|
||||
ExecutionKPI::EnableDuration(self::$m_oConfig->Get('log_kpi_duration'));
|
||||
ExecutionKPI::EnableMemory(self::$m_oConfig->Get('log_kpi_memory'));
|
||||
ExecutionKPI::SetAllowedUser(self::$m_oConfig->Get('log_kpi_user_id'));
|
||||
ExecutionKPI::SetAllowedUser(self::$m_oConfig->Get('log_kpi_user_id'));
|
||||
ExecutionKPI::SetGenerateLegacyReport(self::$m_oConfig->Get('log_kpi_generate_legacy_report'));
|
||||
ExecutionKPI::SetSlowQueries(self::$m_oConfig->Get('log_kpi_slow_queries'));
|
||||
|
||||
self::$m_bSkipCheckToWrite = self::$m_oConfig->Get('skip_check_to_write');
|
||||
self::$m_bSkipCheckExtKeys = self::$m_oConfig->Get('skip_check_ext_keys');
|
||||
@@ -6713,6 +6727,7 @@ abstract class MetaModel
|
||||
|
||||
CMDBSource::InitFromConfig(self::$m_oConfig);
|
||||
// Later when timezone implementation is correctly done: CMDBSource::SetTimezone($sDBTimezone);
|
||||
ExecutionKPI::InitStats();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -6744,6 +6759,19 @@ abstract class MetaModel
|
||||
return $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal Used for resetting the configuration during automated tests
|
||||
|
||||
* @param \Config $oConfiguration
|
||||
*
|
||||
* @return void
|
||||
* @since 3.0.4 3.1.1 3.2.0
|
||||
*/
|
||||
public static function SetConfig(Config $oConfiguration)
|
||||
{
|
||||
self::$m_oConfig = $oConfiguration;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Config
|
||||
*/
|
||||
@@ -6932,7 +6960,13 @@ abstract class MetaModel
|
||||
|
||||
if ($bMustBeFound && empty($aRow))
|
||||
{
|
||||
throw new CoreException("No result for the single row query: '$sSQL'");
|
||||
$sNotFoundErrorMessage = "No result for the single row query";
|
||||
IssueLog::Info($sNotFoundErrorMessage, LogChannels::CMDB_SOURCE, [
|
||||
'class' => $sClass,
|
||||
'key' => $iKey,
|
||||
'sql_query' => $sSQL,
|
||||
]);
|
||||
throw new CoreException($sNotFoundErrorMessage);
|
||||
}
|
||||
|
||||
return $aRow;
|
||||
@@ -7012,25 +7046,21 @@ abstract class MetaModel
|
||||
* $bMustBeFound=false)
|
||||
* @throws CoreException if no result found and $bMustBeFound=true
|
||||
* @throws ArchivedObjectException if archive mode disabled and result is archived and $bMustBeFound=true
|
||||
* @throws \Exception
|
||||
*
|
||||
*/
|
||||
public static function GetObject($sClass, $iKey, $bMustBeFound = true, $bAllowAllData = false, $aModifierProperties = null)
|
||||
{
|
||||
$oObject = self::GetObjectWithArchive($sClass, $iKey, $bMustBeFound, $bAllowAllData, $aModifierProperties);
|
||||
|
||||
if (empty($oObject))
|
||||
{
|
||||
if (empty($oObject)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!utils::IsArchiveMode() && $oObject->IsArchived())
|
||||
{
|
||||
if (!utils::IsArchiveMode() && $oObject->IsArchived()) {
|
||||
if ($bMustBeFound) {
|
||||
throw new ArchivedObjectException("The object $sClass::$iKey is archived");
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
return $oObject;
|
||||
|
||||
@@ -22,7 +22,9 @@
|
||||
* A class to serialize the execution of some code sections
|
||||
* Emulates the API of PECL Mutex class
|
||||
* Relies on MySQL locks because the API sem_get is not always present in the
|
||||
* installed PHP.
|
||||
* installed PHP.
|
||||
*
|
||||
* @link https://dev.mysql.com/doc/refman/5.7/en/locking-functions.html MySQL locking functions documentation
|
||||
*
|
||||
* @copyright Copyright (C) 2013-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
@@ -257,7 +259,7 @@ class iTopMutex
|
||||
$this->hDBLink = CMDBSource::GetMysqliInstance($sServer, $sUser, $sPwd, $sSource, $bTlsEnabled, $sTlsCA, false);
|
||||
|
||||
if (!$this->hDBLink) {
|
||||
throw new Exception("Could not connect to the DB server (host=$sServer, user=$sUser): ".mysqli_connect_error().' (mysql errno: '.mysqli_connect_errno().')');
|
||||
throw new MySQLException('Could not connect to the DB server '.mysqli_connect_error().' (mysql errno: '.mysqli_connect_errno(), array('host' => $sDBHost, 'user' => $sDBUser));
|
||||
}
|
||||
|
||||
// Make sure that the server variable `wait_timeout` is at least 86400 seconds for this connection,
|
||||
|
||||
@@ -117,7 +117,9 @@ abstract class Trigger extends cmdbAbstractObject
|
||||
$oAction = MetaModel::GetObject('Action', $iActionId);
|
||||
if ($oAction->IsActive())
|
||||
{
|
||||
$oKPI = new ExecutionKPI();
|
||||
$oAction->DoExecute($this, $aContextArgs);
|
||||
$oKPI->ComputeStatsForExtension($oAction, 'DoExecute');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -750,14 +750,25 @@ class UserRights
|
||||
protected static $m_aCacheContactPictureAbsUrl = [];
|
||||
/** @var UserRightsAddOnAPI $m_oAddOn */
|
||||
protected static $m_oAddOn;
|
||||
protected static $m_oUser;
|
||||
protected static $m_oRealUser;
|
||||
protected static $m_oUser = null;
|
||||
protected static $m_oRealUser = null;
|
||||
protected static $m_sSelfRegisterAddOn = null;
|
||||
protected static $m_aAdmins = array();
|
||||
protected static $m_aPortalUsers = array();
|
||||
/** @var array array('sName' => $sName, 'bSuccess' => $bSuccess); */
|
||||
private static $m_sLastLoginStatus = null;
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @since 3.0.4 3.1.1 3.2.0
|
||||
*/
|
||||
protected static function ResetCurrentUserData()
|
||||
{
|
||||
self::$m_oUser = null;
|
||||
self::$m_oRealUser = null;
|
||||
self::$m_sLastLoginStatus = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $sModuleName
|
||||
*
|
||||
@@ -776,8 +787,7 @@ class UserRights
|
||||
}
|
||||
self::$m_oAddOn = new $sModuleName;
|
||||
self::$m_oAddOn->Init();
|
||||
self::$m_oUser = null;
|
||||
self::$m_oRealUser = null;
|
||||
self::ResetCurrentUserData();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -835,6 +845,8 @@ class UserRights
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the current user (as part of the login process)
|
||||
*
|
||||
* @param string $sLogin Login of the concerned user
|
||||
* @param string $sAuthentication
|
||||
*
|
||||
@@ -861,6 +873,19 @@ class UserRights
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset current user and cleanup associated SESSION data
|
||||
*
|
||||
* @return void
|
||||
* @since 3.0.4 3.1.1 3.2.0
|
||||
*/
|
||||
public static function Logoff()
|
||||
{
|
||||
self::ResetCurrentUserData();
|
||||
Dict::SetUserLanguage(null);
|
||||
self::_ResetSessionCache();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $sLogin Login of the user to check the credentials for
|
||||
* @param string $sPassword
|
||||
@@ -1085,9 +1110,7 @@ class UserRights
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the current user login or an empty string if nobody connected.
|
||||
*
|
||||
* @return string
|
||||
* @return string connected {@see User} login field value, otherwise empty string
|
||||
*/
|
||||
public static function GetUser()
|
||||
{
|
||||
@@ -1535,9 +1558,9 @@ class UserRights
|
||||
|
||||
/**
|
||||
* @param string $sClass
|
||||
* @param int $iActionCode
|
||||
* @param \DBObjectSet $oInstanceSet
|
||||
* @param \User $oUser
|
||||
* @param int $iActionCode see UR_ACTION_* constants
|
||||
* @param DBObjectSet $oInstanceSet
|
||||
* @param User $oUser
|
||||
*
|
||||
* @return int (UR_ALLOWED_YES|UR_ALLOWED_NO|UR_ALLOWED_DEPENDS)
|
||||
* @throws \CoreException
|
||||
|
||||
@@ -6,10 +6,6 @@
|
||||
$ibo-attachment--datatable--icon-preview--max-height: 44px !default;
|
||||
$ibo-attachment--datatable--icon-preview--max-width: $ibo-attachment--datatable--icon-preview--max-height !default;
|
||||
|
||||
$ibo-attachment--datatable--line-height: $ibo-attachment--datatable--icon-preview--max-height !default;
|
||||
|
||||
$ibo-attachment--datatable--first-column--line-height: 0px !default;
|
||||
|
||||
$ibo-attachment--drag-in--border: 2px $ibo-color-grey-400 dashed !default;
|
||||
$ibo-attachment--upload-file--drop-zone-hint--max-height: 200px !default;
|
||||
$ibo-attachment--upload-file--drop-zone-hint--margin: 22px $ibo-spacing-0 !default;
|
||||
@@ -33,10 +29,7 @@ $ibo-attachment--tab-header--drop-in--icon--color: $ibo-color-blue-600 !default;
|
||||
max-width: $ibo-attachment--datatable--icon-preview--max-width;
|
||||
}
|
||||
.ibo-attachment--datatable tbody tr td {
|
||||
line-height: $ibo-attachment--datatable--line-height;
|
||||
}
|
||||
.ibo-attachment--datatable tbody tr td:nth-child(1){
|
||||
line-height: $ibo-attachment--datatable--first-column--line-height;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.ibo-attachment--upload-file--drop-zone-hint{
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -6,7 +6,7 @@
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'CAS:Error:UserNotAllowed' => 'User not allowed~~',
|
||||
'CAS:Login:SignIn' => 'Sign in with CAS~~',
|
||||
'CAS:Login:SignInTooltip' => 'Click here to authenticate yourself with the CAS server~~',
|
||||
'CAS:Error:UserNotAllowed' => 'Nem engedélyezett felhasználó',
|
||||
'CAS:Login:SignIn' => 'Bejelentkezés CAS szerverrel',
|
||||
'CAS:Login:SignInTooltip' => 'Kattintson ide az azonosításhoz a CAS szerveren',
|
||||
));
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'authent-cas/3.0.3',
|
||||
'authent-cas/3.0.4',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -49,6 +49,11 @@ class CASLoginExtension extends AbstractLoginFSMExtension implements iLogoutExte
|
||||
|
||||
protected function OnReadCredentials(&$iErrorCode)
|
||||
{
|
||||
if (LoginWebPage::getIOnExit() === LoginWebPage::EXIT_RETURN) {
|
||||
// Not allowed if not already connected
|
||||
return LoginWebPage::LOGIN_FSM_CONTINUE;
|
||||
}
|
||||
|
||||
if (empty(Session::Get('login_mode')) || Session::Get('login_mode') == static::LOGIN_MODE)
|
||||
{
|
||||
static::InitCASClient();
|
||||
@@ -114,6 +119,10 @@ class CASLoginExtension extends AbstractLoginFSMExtension implements iLogoutExte
|
||||
if (Session::Get('login_mode') == static::LOGIN_MODE)
|
||||
{
|
||||
Session::Unset('phpCAS');
|
||||
if (LoginWebPage::getIOnExit() === LoginWebPage::EXIT_RETURN) {
|
||||
// don't display the login page
|
||||
return LoginWebPage::LOGIN_FSM_CONTINUE;
|
||||
}
|
||||
if ($iErrorCode != LoginWebPage::EXIT_CODE_MISSINGLOGIN)
|
||||
{
|
||||
$oLoginWebPage = new LoginWebPage();
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'authent-external/3.0.3',
|
||||
'authent-external/3.0.4',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -21,5 +21,5 @@
|
||||
*/
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Class:UserLDAP' => 'LDAP felhasználó',
|
||||
'Class:UserLDAP+' => '',
|
||||
'Class:UserLDAP+' => 'LDAP vagy AD felhasználó',
|
||||
));
|
||||
|
||||
@@ -9,7 +9,7 @@ if (function_exists('ldap_connect'))
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'authent-ldap/3.0.3',
|
||||
'authent-ldap/3.0.4',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -20,26 +20,26 @@
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Class:UserLocal' => ITOP_APPLICATION_SHORT.' felhasználó',
|
||||
'Class:UserLocal+' => '',
|
||||
'Class:UserLocal/Attribute:password' => 'Jelszó',
|
||||
'Class:UserLocal/Attribute:password+' => '',
|
||||
'Class:UserLocal' => ITOP_APPLICATION_SHORT.' felhasználó',
|
||||
'Class:UserLocal+' => 'Rendszeren belül létrehozott felhasználó',
|
||||
'Class:UserLocal/Attribute:password' => 'Jelszó',
|
||||
'Class:UserLocal/Attribute:password+' => '',
|
||||
|
||||
'Class:UserLocal/Attribute:expiration' => 'Password expiration~~',
|
||||
'Class:UserLocal/Attribute:expiration+' => 'Password expiration status (requires an extension to have an effect)~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire' => 'Can expire~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire' => 'Never expire~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'Expired~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => 'One-time Password~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Password cannot be changed by the user.~~',
|
||||
'Class:UserLocal/Attribute:password_renewed_date' => 'Password renewal~~',
|
||||
'Class:UserLocal/Attribute:password_renewed_date+' => 'When the password was last changed~~',
|
||||
'Class:UserLocal/Attribute:expiration' => 'Jelszó lejárati ideje',
|
||||
'Class:UserLocal/Attribute:expiration+' => 'Jelszó lejárati státusz (bővítmény szükséges hozzá)',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire' => 'Lejár',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire' => 'Soha nem jár le',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'Lejárt',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => 'Egyszeri jelszó',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'A felhasználó nem változtathat jelszót.',
|
||||
'Class:UserLocal/Attribute:password_renewed_date' => 'Jelszó megújítás ideje',
|
||||
'Class:UserLocal/Attribute:password_renewed_date+' => 'A jelszó legutóbbi módosításának időpontja',
|
||||
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Password must be at least 8 characters and include uppercase, lowercase, numeric and special characters.~~',
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'A jelszónak legalább 8 karakterből kell állnia, és tartalmaznia kell nagybetűket, kisbetűket, numerikus és speciális karaktereket.',
|
||||
|
||||
'UserLocal:password:expiration' => 'The fields below require an extension~~',
|
||||
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Setting password expiration to "One-time password" is not allowed for your own User~~',
|
||||
'UserLocal:password:expiration' => 'Az alábbi mezőkhöz egy bővítmény szükséges',
|
||||
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'A jelszó lejárati idejének beállítása "Egyszeri jelszóra" nem engedélyezett a saját felhasználó számára.',
|
||||
));
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
// iTop is free software; you can redistribute it and/or modify
|
||||
// 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.
|
||||
@@ -69,7 +69,7 @@ class UserLocal extends UserInternal
|
||||
const EXPIRE_NEVER = 'never_expire';
|
||||
const EXPIRE_FORCE = 'force_expire';
|
||||
const EXPIRE_ONE_TIME_PWD = 'otp_expire';
|
||||
|
||||
|
||||
/** @var UserLocalPasswordValidity|null */
|
||||
protected $m_oPasswordValidity = null;
|
||||
|
||||
@@ -160,7 +160,7 @@ class UserLocal extends UserInternal
|
||||
|
||||
/**
|
||||
* Use with care!
|
||||
*/
|
||||
*/
|
||||
public function SetPassword($sNewPassword)
|
||||
{
|
||||
$this->Set('password', $sNewPassword);
|
||||
@@ -197,19 +197,39 @@ class UserLocal extends UserInternal
|
||||
|
||||
protected function OnWrite()
|
||||
{
|
||||
if (empty($this->m_oPasswordValidity))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (array_key_exists('password_renewed_date', $this->ListChanges()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (empty($this->m_oPasswordValidity))
|
||||
{
|
||||
//password unchanged
|
||||
if (is_null($this->Get('password_renewed_date')))
|
||||
{
|
||||
//initialize password_renewed_date with User creation date
|
||||
$sKey = $this->GetKey();
|
||||
$sOql = <<<OQL
|
||||
SELECT CMDBChangeOpCreate AS ccc
|
||||
JOIN CMDBChange AS c ON ccc.change = c.id
|
||||
WHERE ccc.objclass="UserLocal" AND ccc.objkey="$sKey"
|
||||
OQL;
|
||||
$oCmdbChangeOpSearch = \DBObjectSearch::FromOQL($sOql);
|
||||
$oSet = new \DBObjectSet($oCmdbChangeOpSearch);
|
||||
$oCMDBChangeOpCreate = $oSet->Fetch();
|
||||
if (! is_null($oCMDBChangeOpCreate))
|
||||
{
|
||||
$oUserCreationDateTime = \DateTime::createFromFormat(AttributeDateTime::GetInternalFormat(), $oCMDBChangeOpCreate->Get('date'));
|
||||
$sCreationDate = $oUserCreationDateTime->format(\AttributeDate::GetInternalFormat());
|
||||
$this->Set('password_renewed_date', $sCreationDate);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
$sNow = date(\AttributeDate::GetInternalFormat());
|
||||
$this->Set('password_renewed_date', $sNow);
|
||||
|
||||
|
||||
// Reset the "force" expiration flag when the user updates her/his own password!
|
||||
if ($this->IsCurrentUser())
|
||||
{
|
||||
@@ -294,7 +314,7 @@ class UserLocal extends UserInternal
|
||||
{
|
||||
$this->m_aCheckIssues[] = $this->m_oPasswordValidity->getPasswordValidityMessage();
|
||||
}
|
||||
|
||||
|
||||
// A User cannot force a one-time password on herself/himself
|
||||
if ($this->IsCurrentUser()) {
|
||||
if (array_key_exists('expiration', $this->ListChanges()) && ($this->Get('expiration') == self::EXPIRE_ONE_TIME_PWD)) {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'authent-local/3.0.3',
|
||||
'authent-local/3.0.4',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -22,5 +22,5 @@
|
||||
*/
|
||||
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'theme:darkmoon' => 'Dark moon~~',
|
||||
));
|
||||
'theme:darkmoon' => 'Dark moon',
|
||||
));
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'combodo-backoffice-darkmoon-theme/3.0.3',
|
||||
'combodo-backoffice-darkmoon-theme/3.0.4',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -22,73 +22,73 @@
|
||||
*/
|
||||
// Database inconsistencies
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
// Dictionary entries go here
|
||||
'Menu:DBToolsMenu' => 'DB Tools~~',
|
||||
'DBTools:Class' => 'Class~~',
|
||||
'DBTools:Title' => 'Database Maintenance Tools~~',
|
||||
'DBTools:ErrorsFound' => 'Errors Found~~',
|
||||
'DBTools:Indication' => 'Important: after fixing errors in the database you\'ll have to run the analysis again as new inconsistencies will be generated~~',
|
||||
'DBTools:Disclaimer' => 'DISCLAIMER: BACKUP YOUR DATABASE BEFORE RUNNING THE FIXES~~',
|
||||
'DBTools:Error' => 'Error~~',
|
||||
'DBTools:Count' => 'Count~~',
|
||||
'DBTools:SQLquery' => 'SQL query~~',
|
||||
'DBTools:FixitSQLquery' => 'SQL query To Fix it (indication)~~',
|
||||
'DBTools:SQLresult' => 'SQL result~~',
|
||||
'DBTools:NoError' => 'The database is OK~~',
|
||||
'DBTools:HideIds' => 'Error List~~',
|
||||
'DBTools:ShowIds' => 'Detailed view~~',
|
||||
'DBTools:ShowReport' => 'Report~~',
|
||||
'DBTools:IntegrityCheck' => 'Integrity check~~',
|
||||
'DBTools:FetchCheck' => 'Fetch Check (long)~~',
|
||||
'DBTools:SelectAnalysisType' => 'Select analysis type~~',
|
||||
// Dictionary entries go here
|
||||
'Menu:DBToolsMenu' => 'DB eszközök',
|
||||
'DBTools:Class' => 'Osztály',
|
||||
'DBTools:Title' => 'Adatbázis karbantartó eszközök',
|
||||
'DBTools:ErrorsFound' => 'Hibák vannak',
|
||||
'DBTools:Indication' => 'Fontos: az adatbázisban lévő hibák kijavítása után újra kell futtatni az elemzést, mivel új következetlenségek keletkezhetnek.',
|
||||
'DBTools:Disclaimer' => 'A JAVÍTÁSOK FUTTATÁSA ELŐTT MINDIG KÉSZÍTSEN BIZTONSÁGI MENTÉST AZ ADATBÁZISÁRÓL.',
|
||||
'DBTools:Error' => 'Hiba',
|
||||
'DBTools:Count' => 'Sorszám',
|
||||
'DBTools:SQLquery' => 'SQL lekérdezés',
|
||||
'DBTools:FixitSQLquery' => 'SQL lekérdezés To Fix it (indication)',
|
||||
'DBTools:SQLresult' => 'SQL eredmény',
|
||||
'DBTools:NoError' => 'Az adatbázis OK',
|
||||
'DBTools:HideIds' => 'Hibalista',
|
||||
'DBTools:ShowIds' => 'Részletes nézet',
|
||||
'DBTools:ShowReport' => 'Jelentés',
|
||||
'DBTools:IntegrityCheck' => 'Integritás ellenőrzés',
|
||||
'DBTools:FetchCheck' => 'Lehívás ellenőrzés (hosszú)',
|
||||
'DBTools:SelectAnalysisType' => 'Válasszon elemzés típust',
|
||||
|
||||
'DBTools:Analyze' => 'Analyze~~',
|
||||
'DBTools:Details' => 'Show Details~~',
|
||||
'DBTools:ShowAll' => 'Show All Errors~~',
|
||||
'DBTools:Analyze' => 'Elemzés',
|
||||
'DBTools:Details' => 'Részletek megjelenítése',
|
||||
'DBTools:ShowAll' => 'Minden hiba megjelenítése',
|
||||
|
||||
'DBTools:Inconsistencies' => 'Database inconsistencies~~',
|
||||
'DBTools:DetailedErrorTitle' => '%2$s error(s) in class %1$s: %3$s~~',
|
||||
'DBTools:Inconsistencies' => 'Adatbázis inkonzisztenciák',
|
||||
'DBTools:DetailedErrorTitle' => '%2$s hiba a %1$s osztályban: %3$s',
|
||||
|
||||
'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~',
|
||||
'DBAnalyzer-Integrity-InvalidExtKey' => 'Invalid external key %1$s (column: `%2$s.%3$s`)~~',
|
||||
'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)~~',
|
||||
'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)~~',
|
||||
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~',
|
||||
'DBAnalyzer-Integrity-HKInvalid' => 'Broken hierarchical key `%1$s`~~',
|
||||
'DBAnalyzer-Fetch-Count-Error' => 'Fetch count error in `%1$s`, %2$d entries fetched / %3$d counted~~',
|
||||
'DBAnalyzer-Integrity-FinalClass' => 'Field `%2$s`.`%1$s` must have the same value as `%3$s`.`%1$s`~~',
|
||||
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class~~',
|
||||
'DBAnalyzer-Integrity-OrphanRecord' => 'Árva rekord a %1$s -ban, kell hogy legyen megfelelője a %2$s táblázatban',
|
||||
'DBAnalyzer-Integrity-InvalidExtKey' => 'Érvénytelen a %1$s külső kulcs (oszlop: `%2$s.%3$s`)',
|
||||
'DBAnalyzer-Integrity-MissingExtKey' => 'Hiányzik a %1$s külső külcs (oszlop: %2$s.%3$s)',
|
||||
'DBAnalyzer-Integrity-InvalidValue' => '%1$s értéke érvénytelen (oszlop: %2$s.%3$s)',
|
||||
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Néhány felhasználónak egyáltalán nincs fiókja',
|
||||
'DBAnalyzer-Integrity-HKInvalid' => 'Sérült a %1$s hierarchikus kulcs',
|
||||
'DBAnalyzer-Fetch-Count-Error' => 'Lekérési hiba a %1$s -nál, %2$d bejegyzés lekérve / %3$d megszámlálva',
|
||||
'DBAnalyzer-Integrity-FinalClass' => 'A %2$s.%1$s mezőnek ugyanolyan értékűnek kell lennie mint a %3$s.%1$s',
|
||||
'DBAnalyzer-Integrity-RootFinalClass' => '%2$s.%1$s mezőnek érvényes osztályt kell tartalmaznia',
|
||||
));
|
||||
|
||||
// Database Info
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'DBTools:DatabaseInfo' => 'Database Information~~',
|
||||
'DBTools:Base' => 'Base~~',
|
||||
'DBTools:Size' => 'Size~~',
|
||||
'DBTools:DatabaseInfo' => 'Adatbázis információ',
|
||||
'DBTools:Base' => 'Bázis',
|
||||
'DBTools:Size' => 'Méret',
|
||||
));
|
||||
|
||||
// Lost attachments
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'DBTools:LostAttachments' => 'Lost attachments~~',
|
||||
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, is does not retrieve deleted data.~~',
|
||||
'DBTools:LostAttachments' => 'Elveszett mellékletek',
|
||||
'DBTools:LostAttachments:Disclaimer' => 'Itt kereshet az adatbázisban elveszett vagy elkeveredett mellékletek után. Ez NEM egy adat-visszaállítási eszköz, nem állítja vissza a törölt adatokat.',
|
||||
|
||||
'DBTools:LostAttachments:Button:Analyze' => 'Analyze~~',
|
||||
'DBTools:LostAttachments:Button:Restore' => 'Restore~~',
|
||||
'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.~~',
|
||||
'DBTools:LostAttachments:Button:Busy' => 'Please wait...~~',
|
||||
'DBTools:LostAttachments:Button:Analyze' => 'Elemzés',
|
||||
'DBTools:LostAttachments:Button:Restore' => 'Visszaállítás',
|
||||
'DBTools:LostAttachments:Button:Restore:Confirm' => 'Ez a művelet nem vonható vissza, kérjük, erősítse meg, hogy vissza kívánja-e állítani a kiválasztott fájlokat.',
|
||||
'DBTools:LostAttachments:Button:Busy' => 'Kérem várjon...',
|
||||
|
||||
'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analyzing the database.~~',
|
||||
'DBTools:LostAttachments:Step:Analyze' => 'Először az adatbázis elemzésével keresse meg az elveszett/áthelyezett mellékleteket.',
|
||||
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyze results:~~',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:None' => 'Great! Every thing seems to be at the right place.~~',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:Some' => 'Some attachments (%1$d) seem to be misplaced. Take a look at the following list and check the ones you would like to move.~~',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:Item:Filename' => 'Filename~~',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:Item:CurrentLocation' => 'Current location~~',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:Item:TargetLocation' => 'Move to...~~',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults' => 'Elemzés eredménye:',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:None' => 'Nagyszerű! Úgy tűnik, minden a helyén van.',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:Some' => 'Úgy tűnik, hogy néhány melléklet (%1$d) rossz helyen van. Nézze meg az alábbi listát, és ellenőrizze azokat, amelyeket szeretne áthelyezni.',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:Item:Filename' => 'Fájlnév',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:Item:CurrentLocation' => 'Jelenlegi helye',
|
||||
'DBTools:LostAttachments:Step:AnalyzeResults:Item:TargetLocation' => 'Áthelyezés...',
|
||||
|
||||
'DBTools:LostAttachments:Step:RestoreResults' => 'Restore results:~~',
|
||||
'DBTools:LostAttachments:Step:RestoreResults:Results' => '%1$d/%2$d attachments were restored.~~',
|
||||
'DBTools:LostAttachments:Step:RestoreResults' => 'Visszaállítás eredménye:',
|
||||
'DBTools:LostAttachments:Step:RestoreResults:Results' => '%1$d/%2$d melléklet lett visszaállítva.',
|
||||
|
||||
'DBTools:LostAttachments:StoredAsInlineImage' => 'Stored as inline image~~',
|
||||
'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools~~'
|
||||
'DBTools:LostAttachments:StoredAsInlineImage' => 'Soron belüli képként tárolva',
|
||||
'DBTools:LostAttachments:History' => 'A %1$s melléklet visszaállítva a DB eszközzel'
|
||||
));
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
/** @noinspection PhpUnhandledExceptionInspection */
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'combodo-db-tools/3.0.3',
|
||||
'combodo-db-tools/3.0.4',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -21,26 +21,24 @@
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Attachments:TabTitle_Count' => 'Attachments (%1$d)~~',
|
||||
'Attachments:EmptyTabTitle' => 'Attachments~~',
|
||||
'Attachments:FieldsetTitle' => 'Attachments~~',
|
||||
'Attachments:DeleteBtn' => 'Delete~~',
|
||||
'Attachments:History_File_Added' => 'Attachment %1$s added.~~',
|
||||
'Attachments:History_File_Removed' => 'Attachment %1$s removed.~~',
|
||||
'Attachments:AddAttachment' => 'Add attachment: ~~',
|
||||
'Attachments:UploadNotAllowedOnThisSystem' => 'File upload in NOT allowed on this system.~~',
|
||||
'Attachment:Max_Go' => '(Maximum file size: %1$s Go)~~',
|
||||
'Attachment:Max_Mo' => '(Maximum file size: %1$s Mo)~~',
|
||||
'Attachment:Max_Ko' => '(Maximum file size: %1$s Ko)~~',
|
||||
'Attachments:NoAttachment' => 'No attachment. ~~',
|
||||
'Attachments:PreviewNotAvailable' => 'Preview not available for this type of attachment.~~',
|
||||
'Attachments:Error:FileTooLarge' => 'File is too large to be uploaded. %1$s~~',
|
||||
'Attachments:Error:UploadedFileEmpty' => 'The received file is empty and cannot be attached.
|
||||
Either you have pushed an empty file,
|
||||
or ask your iTop administrator if the iTop server disk is full.~~',
|
||||
'Attachments:Render:Icons' => 'Display as icons~~',
|
||||
'Attachments:Render:Table' => 'Display as list~~',
|
||||
'UI:Attachments:DropYourFileHint' => 'Drop files anywhere in this area~~',
|
||||
'Attachments:TabTitle_Count' => 'Mellékletek (%1$d)',
|
||||
'Attachments:EmptyTabTitle' => 'Mellékletek',
|
||||
'Attachments:FieldsetTitle' => 'Mellékletek',
|
||||
'Attachments:DeleteBtn' => 'Törlés',
|
||||
'Attachments:History_File_Added' => '%1$s melléklet hozzáadva',
|
||||
'Attachments:History_File_Removed' => '%1$s melléklet eltávolítva',
|
||||
'Attachments:AddAttachment' => 'Melléklet hozzáadása: ',
|
||||
'Attachments:UploadNotAllowedOnThisSystem' => 'A fájlfeltöltés nem engedélyezett ezen a rendszeren',
|
||||
'Attachment:Max_Go' => '(Maximum fájlméret: %1$s GB)',
|
||||
'Attachment:Max_Mo' => '(Maximum fájlméret: %1$s MB)',
|
||||
'Attachment:Max_Ko' => '(Maximum fájlméret: %1$s KB)',
|
||||
'Attachments:NoAttachment' => 'Nincs melléklet. ',
|
||||
'Attachments:PreviewNotAvailable' => 'Az előnézet nem érhető el ilyen típusú melléklethez',
|
||||
'Attachments:Error:FileTooLarge' => 'Túl nagy a %1$s fájl a feltöltéshez.',
|
||||
'Attachments:Error:UploadedFileEmpty' => 'A kapott fájl üres, ezért nem csatolható. Vagy egy üres fájlt húzott be, vagy kérdezze meg a rendszergazdát, hátha az iTop szerver lemeze telt meg.',
|
||||
'Attachments:Render:Icons' => 'Mutassa ikonként',
|
||||
'Attachments:Render:Table' => 'Mutassa listaként',
|
||||
'UI:Attachments:DropYourFileHint' => 'Húzza a fájlokat erre a területre',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -48,40 +46,40 @@ or ask your iTop administrator if the iTop server disk is full.~~',
|
||||
//
|
||||
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Class:Attachment' => 'Attachment~~',
|
||||
'Class:Attachment+' => '~~',
|
||||
'Class:Attachment/Attribute:expire' => 'Expire~~',
|
||||
'Class:Attachment/Attribute:expire+' => '~~',
|
||||
'Class:Attachment/Attribute:temp_id' => 'Temporary id~~',
|
||||
'Class:Attachment/Attribute:temp_id+' => '~~',
|
||||
'Class:Attachment/Attribute:item_class' => 'Item class~~',
|
||||
'Class:Attachment/Attribute:item_class+' => '~~',
|
||||
'Class:Attachment/Attribute:item_id' => 'Item~~',
|
||||
'Class:Attachment/Attribute:item_id+' => '~~',
|
||||
'Class:Attachment/Attribute:item_org_id' => 'Item organization~~',
|
||||
'Class:Attachment/Attribute:item_org_id+' => '~~',
|
||||
'Class:Attachment/Attribute:contents' => 'Contents~~',
|
||||
'Class:Attachment/Attribute:contents+' => '~~',
|
||||
'Class:Attachment' => 'Mellékletek',
|
||||
'Class:Attachment+' => '~~',
|
||||
'Class:Attachment/Attribute:expire' => 'Lejárat',
|
||||
'Class:Attachment/Attribute:expire+' => '~~',
|
||||
'Class:Attachment/Attribute:temp_id' => 'Átmeneti azonosító',
|
||||
'Class:Attachment/Attribute:temp_id+' => '~~',
|
||||
'Class:Attachment/Attribute:item_class' => 'Elem típus',
|
||||
'Class:Attachment/Attribute:item_class+' => '~~',
|
||||
'Class:Attachment/Attribute:item_id' => 'Elem',
|
||||
'Class:Attachment/Attribute:item_id+' => '~~',
|
||||
'Class:Attachment/Attribute:item_org_id' => 'Elem szervezeti egység',
|
||||
'Class:Attachment/Attribute:item_org_id+' => '~~',
|
||||
'Class:Attachment/Attribute:contents' => 'Tartalom',
|
||||
'Class:Attachment/Attribute:contents+' => '~~',
|
||||
));
|
||||
|
||||
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Attachments:File:Thumbnail' => 'Icon~~',
|
||||
'Attachments:File:Name' => 'File name~~',
|
||||
'Attachments:File:Date' => 'Upload date~~',
|
||||
'Attachments:File:Uploader' => 'Uploaded by~~',
|
||||
'Attachments:File:Size' => 'Size~~',
|
||||
'Attachments:File:MimeType' => 'Type~~',
|
||||
'Attachments:File:Thumbnail' => 'Ikon',
|
||||
'Attachments:File:Name' => 'Fájlnév',
|
||||
'Attachments:File:Date' => 'Feltöltés dátuma',
|
||||
'Attachments:File:Uploader' => 'Feltöltötte ',
|
||||
'Attachments:File:Size' => 'Méret',
|
||||
'Attachments:File:MimeType' => 'Típus',
|
||||
));
|
||||
//
|
||||
// Class: Attachment
|
||||
//
|
||||
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Class:Attachment/Attribute:creation_date' => 'Creation date~~',
|
||||
'Class:Attachment/Attribute:creation_date+' => '~~',
|
||||
'Class:Attachment/Attribute:user_id' => 'User id~~',
|
||||
'Class:Attachment/Attribute:user_id+' => '~~',
|
||||
'Class:Attachment/Attribute:contact_id' => 'Contact id~~',
|
||||
'Class:Attachment/Attribute:contact_id+' => '~~',
|
||||
'Class:Attachment/Attribute:creation_date' => 'Létrehozás dátuma',
|
||||
'Class:Attachment/Attribute:creation_date+' => '~~',
|
||||
'Class:Attachment/Attribute:user_id' => 'Felhasználó',
|
||||
'Class:Attachment/Attribute:user_id+' => '~~',
|
||||
'Class:Attachment/Attribute:contact_id' => 'Kapcsolattartó',
|
||||
'Class:Attachment/Attribute:contact_id+' => '~~',
|
||||
));
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'itop-attachments/3.0.3',
|
||||
'itop-attachments/3.0.4',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -137,6 +137,9 @@ try
|
||||
* As a result we're setting a token file to make sure the restore is called by an authenticated user with the correct rights !
|
||||
*/
|
||||
case 'restore_get_token':
|
||||
$oPage = new JsonPage();
|
||||
$oPage->SetOutputDataOnly(true);
|
||||
|
||||
$sEnvironment = utils::ReadParam('environment', 'production', false, 'raw_data');
|
||||
$oRestoreMutex = new iTopMutex('restore.'.$sEnvironment);
|
||||
if ($oRestoreMutex->IsLocked())
|
||||
@@ -149,12 +152,7 @@ try
|
||||
$sTokenFile = APPROOT.'/data/restore.'.$sToken.'.tok';
|
||||
file_put_contents($sTokenFile, $sFile);
|
||||
|
||||
$oPage->add_ready_script(
|
||||
<<<JS
|
||||
$("#restore_token").val('$sToken');
|
||||
JS
|
||||
);
|
||||
|
||||
$oPage->SetData(['token' => $sToken]);
|
||||
$oPage->output();
|
||||
break;
|
||||
|
||||
|
||||
@@ -22,39 +22,39 @@
|
||||
*/
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
|
||||
'bkp-backup-running' => 'A backup is running. Please wait...~~',
|
||||
'bkp-restore-running' => 'A restore is running. Please wait...~~',
|
||||
'bkp-backup-running' => 'A mentés fut. Kérem várjon...',
|
||||
'bkp-restore-running' => 'A visszaállítás fut. Kérem várjon...',
|
||||
|
||||
'Menu:BackupStatus' => 'Scheduled Backups~~',
|
||||
'bkp-status-title' => 'Scheduled Backups~~',
|
||||
'bkp-status-checks' => 'Settings and checks~~',
|
||||
'bkp-mysqldump-ok' => 'mysqldump is present: %1$s~~',
|
||||
'bkp-mysqldump-notfound' => 'mysqldump could not be found: %1$s - Please make sure it is installed and in the path, or edit the configuration file to tune mysql_bindir.~~',
|
||||
'bkp-mysqldump-issue' => 'mysqldump could not be executed (retcode=%1$d): Please make sure it is installed and in the path, or edit the configuration file to tune mysql_bindir~~',
|
||||
'bkp-missing-dir' => 'The target directory <code>%1$s</code> could not be found~~',
|
||||
'bkp-free-disk-space' => '<b>%1$s free</b> in <code>%2$s</code>~~',
|
||||
'bkp-dir-not-writeable' => '%1$s is not writeable~~',
|
||||
'bkp-wrong-format-spec' => 'The current specification to format the file names is wrong (%1$s). A default specification will apply: %2$s~~',
|
||||
'bkp-name-sample' => 'Backup files are named depending on DB identifiers, date and time. Example: %1$s~~',
|
||||
'bkp-week-days' => 'Backups will occur <b>every %1$s at %2$s</b>~~',
|
||||
'bkp-retention' => 'At most <b>%1$d backup files will be kept</b> in the target directory.~~',
|
||||
'bkp-next-to-delete' => 'Will be deleted when the next backup occurs (see the setting "retention_count")~~',
|
||||
'bkp-table-file' => 'File~~',
|
||||
'bkp-table-file+' => 'Only files having the extension .zip are considered as being backup files~~',
|
||||
'bkp-table-size' => 'Size~~',
|
||||
'bkp-table-size+' => '~~',
|
||||
'bkp-table-actions' => 'Actions~~',
|
||||
'bkp-table-actions+' => '~~',
|
||||
'bkp-status-backups-auto' => 'Scheduled backups~~',
|
||||
'bkp-status-backups-manual' => 'Manual backups~~',
|
||||
'bkp-status-backups-none' => 'No backup yet~~',
|
||||
'bkp-next-backup' => 'The next backup will occur on <b>%1$s</b> (%2$s) at %3$s~~',
|
||||
'bkp-next-backup-unknown' => 'The next backup is <b>not scheduled</b> yet.~~',
|
||||
'bkp-button-backup-now' => 'Backup now!~~',
|
||||
'bkp-button-restore-now' => 'Restore!~~',
|
||||
'bkp-confirm-backup' => 'Please confirm that you do request the backup to occur right now.~~',
|
||||
'bkp-confirm-restore' => 'Please confirm that you do want to restore the backup %1$s.~~',
|
||||
'bkp-wait-backup' => 'Please wait for the backup to complete...~~',
|
||||
'bkp-wait-restore' => 'Please wait for the restore to complete...~~',
|
||||
'bkp-success-restore' => 'Restore successfully completed.~~',
|
||||
'Menu:BackupStatus' => 'Biztonsági mentés',
|
||||
'bkp-status-title' => 'Adatbázis biztonsági mentés',
|
||||
'bkp-status-checks' => 'Beállítás és ellenőrzés',
|
||||
'bkp-mysqldump-ok' => 'mysqldump megvan: %1$s',
|
||||
'bkp-mysqldump-notfound' => 'mysqldump nem található: %1$s - Győződjön meg róla, hogy telepítve van és szerepel az elérési útvonalban, vagy szerkessze a konfigurációs fájlt a mysql_bindir beállításához..',
|
||||
'bkp-mysqldump-issue' => 'mysqldump nem hajtható végre (retcode=%1$d): Győződjön meg róla, hogy telepítve van és szerepel az elérési útvonalban, vagy szerkessze a konfigurációs fájlt a mysql_bindir beállításához.',
|
||||
'bkp-missing-dir' => 'A <code>%1$s</code> célkönyvtár nem található',
|
||||
'bkp-free-disk-space' => '<b>%1$s szabad</b> a <code>%2$s</code> -ből',
|
||||
'bkp-dir-not-writeable' => '%1$s nem írható',
|
||||
'bkp-wrong-format-spec' => 'A fájlnevek formázására vonatkozó jelenlegi specifikáció helytelen (%1$s). Alapértelmezett specifikáció lesz érvényben: %2$s',
|
||||
'bkp-name-sample' => 'A mentési fájlok neve a DB azonosítóktól, a dátumtól és az időponttól függ. Példa: %1$s',
|
||||
'bkp-week-days' => 'Biztonsági mentés lesz végrehajtva <b>minden %1$s %2$s -kor</b>',
|
||||
'bkp-retention' => 'Legfeljebb <b>%1$d biztonsági mentés lesz megőrizve</b> a célkönyvtárban.',
|
||||
'bkp-next-to-delete' => 'Törölve lesz a következő mentés alkalmával (lásd a "retention_count" beállítást)',
|
||||
'bkp-table-file' => 'Fájl',
|
||||
'bkp-table-file+' => 'Csak a .zip kiterjesztésű fájlokat tekintjük biztonsági mentésnek.',
|
||||
'bkp-table-size' => 'Méret',
|
||||
'bkp-table-size+' => '~~',
|
||||
'bkp-table-actions' => 'Műveletek',
|
||||
'bkp-table-actions+' => '~~',
|
||||
'bkp-status-backups-auto' => 'Automatikus biztonsági mentés',
|
||||
'bkp-status-backups-manual' => 'Manuális biztonsági mentés',
|
||||
'bkp-status-backups-none' => 'Még nincs biztonsági mentés',
|
||||
'bkp-next-backup' => 'A következő mentés <b>%1$s</b> (%2$s) fog lefutni %3$s -kor',
|
||||
'bkp-next-backup-unknown' => 'A következő mentés még <b>nincs ütemezve</b>',
|
||||
'bkp-button-backup-now' => 'Mentés most!',
|
||||
'bkp-button-restore-now' => 'Visszaállítás!',
|
||||
'bkp-confirm-backup' => 'Erősítse meg, hogy a biztonsági mentést most kéri.',
|
||||
'bkp-confirm-restore' => 'Kérjük, erősítse meg, hogy vissza szeretné állítani a %1$s biztonsági mentést.',
|
||||
'bkp-wait-backup' => 'Várjon a mentés befejezéséig...',
|
||||
'bkp-wait-restore' => 'Várjon a visszaállítás befejezéséig...',
|
||||
'bkp-success-restore' => 'A visszaállítás sikerült.',
|
||||
));
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'itop-backup/3.0.3',
|
||||
'itop-backup/3.0.4',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -471,7 +471,7 @@ function LaunchRestoreNow(sBackupFile, sConfirmationMessage)
|
||||
$.post(GetAbsoluteUrlModulePage('itop-backup', 'ajax.backup.php'), oParams, function(data){
|
||||
|
||||
// Get the value of restore_token
|
||||
$('#backup_errors').append(data);
|
||||
$('#restore_token').val(data.token);
|
||||
|
||||
var oParams = {};
|
||||
oParams.operation = 'restore_exec';
|
||||
|
||||
@@ -31,24 +31,24 @@
|
||||
// Class: lnkFunctionalCIToTicket
|
||||
//
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Class:lnkFunctionalCIToTicket' => 'Link FunctionalCI / Ticket~~',
|
||||
'Class:lnkFunctionalCIToTicket+' => '~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_id' => 'Ticket~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_id+' => '~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_ref' => 'Ref~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_ref+' => '~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_title' => 'Ticket title~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_title+' => '~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_id' => 'CI~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_id+' => '~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_name' => 'CI Name~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_name+' => '~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact' => 'Impact (text)~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact+' => '~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code' => 'Impact~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code/Value:manual' => 'Added manually~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code/Value:computed' => 'Computed~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code/Value:not_impacted' => 'Not impacted~~',
|
||||
'Class:lnkFunctionalCIToTicket' => 'Funkcionális CI / Hibajegy',
|
||||
'Class:lnkFunctionalCIToTicket+' => '~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_id' => 'Hibajegy',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_id+' => '~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_ref' => 'Referenciaszám',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_ref+' => '~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_title' => 'Hibajegy tárgya',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:ticket_title+' => '~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_id' => 'CI',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_id+' => '~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_name' => 'CI név',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:functionalci_name+' => '~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact' => 'Hatása (szöveg)',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact+' => '~~',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code' => 'Hatás kód',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code/Value:manual' => 'Kézzel hozzáadva',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code/Value:computed' => 'Számított',
|
||||
'Class:lnkFunctionalCIToTicket/Attribute:impact_code/Value:not_impacted' => 'Nincs hatása',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -56,16 +56,16 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
//
|
||||
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Class:lnkFunctionalCIToProviderContract' => 'Link FunctionalCI / ProviderContract~~',
|
||||
'Class:lnkFunctionalCIToProviderContract+' => '~~',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id' => 'Provider contract~~',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id+' => '~~',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_name' => 'Provider contract Name~~',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_name+' => '~~',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_id' => 'CI~~',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_id+' => '~~',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_name' => 'CI Name~~',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_name+' => '~~',
|
||||
'Class:lnkFunctionalCIToProviderContract' => 'Funkcionális CI / Szolgáltatói szerződés',
|
||||
'Class:lnkFunctionalCIToProviderContract+' => '~~',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id' => 'Szolgáltatói szerződés',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_id+' => '~~',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_name' => 'Szolgáltatói szerződés név',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:providercontract_name+' => '~~',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_id' => 'CI',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_id+' => '~~',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_name' => 'CI név',
|
||||
'Class:lnkFunctionalCIToProviderContract/Attribute:functionalci_name+' => '~~',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -73,16 +73,16 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
//
|
||||
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Class:lnkFunctionalCIToService' => 'Link FunctionalCI / Service~~',
|
||||
'Class:lnkFunctionalCIToService+' => '~~',
|
||||
'Class:lnkFunctionalCIToService/Attribute:service_id' => 'Service~~',
|
||||
'Class:lnkFunctionalCIToService/Attribute:service_id+' => '~~',
|
||||
'Class:lnkFunctionalCIToService/Attribute:service_name' => 'Service Name~~',
|
||||
'Class:lnkFunctionalCIToService/Attribute:service_name+' => '~~',
|
||||
'Class:lnkFunctionalCIToService/Attribute:functionalci_id' => 'CI~~',
|
||||
'Class:lnkFunctionalCIToService/Attribute:functionalci_id+' => '~~',
|
||||
'Class:lnkFunctionalCIToService/Attribute:functionalci_name' => 'CI Name~~',
|
||||
'Class:lnkFunctionalCIToService/Attribute:functionalci_name+' => '~~',
|
||||
'Class:lnkFunctionalCIToService' => 'Funkcionális CI / Szolgáltatás',
|
||||
'Class:lnkFunctionalCIToService+' => '~~',
|
||||
'Class:lnkFunctionalCIToService/Attribute:service_id' => 'Szolgáltatás',
|
||||
'Class:lnkFunctionalCIToService/Attribute:service_id+' => '~~',
|
||||
'Class:lnkFunctionalCIToService/Attribute:service_name' => 'Szolgáltatás név',
|
||||
'Class:lnkFunctionalCIToService/Attribute:service_name+' => '~~',
|
||||
'Class:lnkFunctionalCIToService/Attribute:functionalci_id' => 'CI',
|
||||
'Class:lnkFunctionalCIToService/Attribute:functionalci_id+' => '~~',
|
||||
'Class:lnkFunctionalCIToService/Attribute:functionalci_name' => 'CI név',
|
||||
'Class:lnkFunctionalCIToService/Attribute:functionalci_name+' => '~~',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -90,10 +90,10 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
//
|
||||
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Class:FunctionalCI/Attribute:providercontracts_list' => 'Provider contracts~~',
|
||||
'Class:FunctionalCI/Attribute:providercontracts_list+' => 'All the provider contracts for this configuration item~~',
|
||||
'Class:FunctionalCI/Attribute:services_list' => 'Services~~',
|
||||
'Class:FunctionalCI/Attribute:services_list+' => 'All the services impacted by this configuration item~~',
|
||||
'Class:FunctionalCI/Attribute:tickets_list' => 'Tickets~~',
|
||||
'Class:FunctionalCI/Attribute:tickets_list+' => 'All the tickets for this configuration item~~',
|
||||
'Class:FunctionalCI/Attribute:providercontracts_list' => 'Szolgáltatói szerződések',
|
||||
'Class:FunctionalCI/Attribute:providercontracts_list+' => 'Ehhez a konfigurációs elemhez tartozó beszállítói szerződések',
|
||||
'Class:FunctionalCI/Attribute:services_list' => 'Szolgáltatások',
|
||||
'Class:FunctionalCI/Attribute:services_list+' => 'Szolgáltatások amelyekre hatással vannak ez a konfigurációs elem',
|
||||
'Class:FunctionalCI/Attribute:tickets_list' => 'Hibajegyek',
|
||||
'Class:FunctionalCI/Attribute:tickets_list+' => 'Hibajegyek ehhez a konfigurációs elemhez',
|
||||
));
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'itop-bridge-cmdb-ticket/3.0.3',
|
||||
'itop-bridge-cmdb-ticket/3.0.4',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'itop-bridge-virtualization-storage/3.0.3',
|
||||
'itop-bridge-virtualization-storage/3.0.4',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -20,29 +20,29 @@
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Menu:ChangeManagement' => 'Változás menedzsment',
|
||||
'Menu:Change:Overview' => 'Áttekintő',
|
||||
'Menu:Change:Overview+' => '',
|
||||
'Menu:NewChange' => 'Új változás',
|
||||
'Menu:NewChange+' => '',
|
||||
'Menu:SearchChanges' => 'Változás keresés',
|
||||
'Menu:SearchChanges+' => '',
|
||||
'Menu:Change:Shortcuts' => 'Gyorsmenü',
|
||||
'Menu:Change:Shortcuts+' => '',
|
||||
'Menu:WaitingAcceptance' => 'Elfogadásra váró változások',
|
||||
'Menu:WaitingAcceptance+' => '',
|
||||
'Menu:WaitingApproval' => 'Jóváhagyásra váró változások',
|
||||
'Menu:WaitingApproval+' => '',
|
||||
'Menu:Changes' => 'Nyitott változási igények',
|
||||
'Menu:Changes+' => '',
|
||||
'Menu:MyChanges' => 'Hozzám rendelt változások',
|
||||
'Menu:MyChanges+' => '',
|
||||
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Changes by category for the last 7 days~~',
|
||||
'UI-ChangeManagementOverview-Last-7-days' => 'Number of changes for the last 7 days~~',
|
||||
'UI-ChangeManagementOverview-ChangeByDomain-last-7-days' => 'Changes by domain for the last 7 days~~',
|
||||
'UI-ChangeManagementOverview-ChangeByStatus-last-7-days' => 'Changes by status for the last 7 days~~',
|
||||
'Tickets:Related:OpenChanges' => 'Open changes~~',
|
||||
'Tickets:Related:RecentChanges' => 'Recent changes (72h)~~',
|
||||
'Menu:ChangeManagement' => 'Változáskezelés',
|
||||
'Menu:Change:Overview' => 'Áttekintő',
|
||||
'Menu:Change:Overview+' => 'Áttekintő oldal',
|
||||
'Menu:NewChange' => 'Új változás',
|
||||
'Menu:NewChange+' => 'Új változásjegy létrehozása',
|
||||
'Menu:SearchChanges' => 'Változás keresés',
|
||||
'Menu:SearchChanges+' => 'Változásjegy keresés',
|
||||
'Menu:Change:Shortcuts' => 'Gyorsgombok',
|
||||
'Menu:Change:Shortcuts+' => 'Gyorselérés gombok',
|
||||
'Menu:WaitingAcceptance' => 'Elfogadásra váró változások',
|
||||
'Menu:WaitingAcceptance+' => 'Elfogadásra váró változások',
|
||||
'Menu:WaitingApproval' => 'Jóváhagyásra váró változások',
|
||||
'Menu:WaitingApproval+' => 'Jóváhagyásra váró változások',
|
||||
'Menu:Changes' => 'Nyitott változási kérelmek',
|
||||
'Menu:Changes+' => 'Nyitott változási kérelmek összesítése',
|
||||
'Menu:MyChanges' => 'Hozzám rendelt változások',
|
||||
'Menu:MyChanges+' => 'Ügyintézőként hozzám rendelt változások',
|
||||
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Változások kategóriánként az elmúlt 7 napban',
|
||||
'UI-ChangeManagementOverview-Last-7-days' => 'A változások száma az elmúlt 7 napban',
|
||||
'UI-ChangeManagementOverview-ChangeByDomain-last-7-days' => 'Változások tartományonként az elmúlt 7 napban',
|
||||
'UI-ChangeManagementOverview-ChangeByStatus-last-7-days' => 'Változások állapotuk szerint az elmúlt 7 napban',
|
||||
'Tickets:Related:OpenChanges' => 'Nyitott változások',
|
||||
'Tickets:Related:RecentChanges' => 'Legutóbbi változások (72h)',
|
||||
));
|
||||
|
||||
// Dictionnay conventions
|
||||
@@ -61,102 +61,102 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
//
|
||||
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Class:Change' => 'Változás',
|
||||
'Class:Change+' => '',
|
||||
'Class:Change/Attribute:status' => 'Státusz',
|
||||
'Class:Change/Attribute:status+' => '',
|
||||
'Class:Change/Attribute:status/Value:new' => 'Új',
|
||||
'Class:Change/Attribute:status/Value:new+' => '',
|
||||
'Class:Change/Attribute:status/Value:validated' => 'Ellenőrzött',
|
||||
'Class:Change/Attribute:status/Value:validated+' => '',
|
||||
'Class:Change/Attribute:status/Value:rejected' => 'Visszautasított',
|
||||
'Class:Change/Attribute:status/Value:rejected+' => '',
|
||||
'Class:Change/Attribute:status/Value:assigned' => 'Hozzárendelt',
|
||||
'Class:Change/Attribute:status/Value:assigned+' => '',
|
||||
'Class:Change/Attribute:status/Value:plannedscheduled' => 'Tervezett és ütemezett',
|
||||
'Class:Change/Attribute:status/Value:plannedscheduled+' => '',
|
||||
'Class:Change/Attribute:status/Value:approved' => 'Jóváhagyott',
|
||||
'Class:Change/Attribute:status/Value:approved+' => '',
|
||||
'Class:Change/Attribute:status/Value:notapproved' => 'Nem jóváhagyott',
|
||||
'Class:Change/Attribute:status/Value:notapproved+' => '',
|
||||
'Class:Change/Attribute:status/Value:implemented' => 'Végrehajtott',
|
||||
'Class:Change/Attribute:status/Value:implemented+' => '',
|
||||
'Class:Change/Attribute:status/Value:monitored' => 'Felügyelet',
|
||||
'Class:Change/Attribute:status/Value:monitored+' => '',
|
||||
'Class:Change/Attribute:status/Value:closed' => 'Lezárt',
|
||||
'Class:Change/Attribute:status/Value:closed+' => '',
|
||||
'Class:Change/Attribute:reason' => 'Ok',
|
||||
'Class:Change/Attribute:reason+' => '',
|
||||
'Class:Change/Attribute:requestor_id' => 'Igénylő',
|
||||
'Class:Change/Attribute:requestor_id+' => '',
|
||||
'Class:Change/Attribute:requestor_email' => 'Igénylő e-mail',
|
||||
'Class:Change/Attribute:requestor_email+' => '',
|
||||
'Class:Change/Attribute:creation_date' => 'Létrehozás dátuma',
|
||||
'Class:Change/Attribute:creation_date+' => '',
|
||||
'Class:Change/Attribute:impact' => 'Hatás',
|
||||
'Class:Change/Attribute:impact+' => '',
|
||||
'Class:Change/Attribute:supervisor_group_id' => 'Supervisor csoport',
|
||||
'Class:Change/Attribute:supervisor_group_id+' => '',
|
||||
'Class:Change/Attribute:supervisor_group_name' => 'Supervisor csoport',
|
||||
'Class:Change/Attribute:supervisor_group_name+' => '',
|
||||
'Class:Change/Attribute:supervisor_id' => 'Supervisor',
|
||||
'Class:Change/Attribute:supervisor_id+' => '',
|
||||
'Class:Change/Attribute:supervisor_email' => 'Supervisor',
|
||||
'Class:Change/Attribute:supervisor_email+' => '',
|
||||
'Class:Change/Attribute:manager_group_id' => 'Menedzser csoport',
|
||||
'Class:Change/Attribute:manager_group_id+' => '',
|
||||
'Class:Change/Attribute:manager_group_name' => 'Menedzser csoport',
|
||||
'Class:Change/Attribute:manager_group_name+' => '',
|
||||
'Class:Change/Attribute:manager_id' => 'Menedzser',
|
||||
'Class:Change/Attribute:manager_id+' => '',
|
||||
'Class:Change/Attribute:manager_email' => 'Menedzser',
|
||||
'Class:Change/Attribute:manager_email+' => '',
|
||||
'Class:Change/Attribute:outage' => 'Leállás',
|
||||
'Class:Change/Attribute:outage+' => '',
|
||||
'Class:Change/Attribute:outage/Value:no' => 'Nem',
|
||||
'Class:Change/Attribute:outage/Value:no+' => '',
|
||||
'Class:Change/Attribute:outage/Value:yes' => 'Igen',
|
||||
'Class:Change/Attribute:outage/Value:yes+' => '',
|
||||
'Class:Change/Attribute:fallback' => 'Visszatervezés',
|
||||
'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' => 'Related requests~~',
|
||||
'Class:Change/Attribute:related_request_list+' => 'All the user requests linked to this change~~',
|
||||
'Class:Change/Attribute:related_problems_list' => 'Related problems~~',
|
||||
'Class:Change/Attribute:related_problems_list+' => 'All the problems linked to this change~~',
|
||||
'Class:Change/Attribute:related_incident_list' => 'Related incidents~~',
|
||||
'Class:Change/Attribute:related_incident_list+' => 'All the incidents linked to this change~~',
|
||||
'Class:Change/Attribute:child_changes_list' => 'Child changes~~',
|
||||
'Class:Change/Attribute:child_changes_list+' => 'All the sub changes linked to this change~~',
|
||||
'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' => 'Ellenőrzés',
|
||||
'Class:Change/Stimulus:ev_validate+' => '',
|
||||
'Class:Change/Stimulus:ev_reject' => 'Visszautasítás',
|
||||
'Class:Change/Stimulus:ev_reject+' => '',
|
||||
'Class:Change/Stimulus:ev_assign' => 'Hozzárenedelés',
|
||||
'Class:Change/Stimulus:ev_assign+' => '',
|
||||
'Class:Change/Stimulus:ev_reopen' => 'Újranyitás',
|
||||
'Class:Change/Stimulus:ev_reopen+' => '',
|
||||
'Class:Change/Stimulus:ev_plan' => 'Tervezés',
|
||||
'Class:Change/Stimulus:ev_plan+' => '',
|
||||
'Class:Change/Stimulus:ev_approve' => 'Jóváhagyás',
|
||||
'Class:Change/Stimulus:ev_approve+' => '',
|
||||
'Class:Change/Stimulus:ev_replan' => 'Újratervezés',
|
||||
'Class:Change/Stimulus:ev_replan+' => '',
|
||||
'Class:Change/Stimulus:ev_notapprove' => 'Visszautasítás',
|
||||
'Class:Change/Stimulus:ev_notapprove+' => '',
|
||||
'Class:Change/Stimulus:ev_implement' => 'Végrehajtás',
|
||||
'Class:Change/Stimulus:ev_implement+' => '',
|
||||
'Class:Change/Stimulus:ev_monitor' => 'Felügyelet',
|
||||
'Class:Change/Stimulus:ev_monitor+' => '',
|
||||
'Class:Change/Stimulus:ev_finish' => 'Befejezés',
|
||||
'Class:Change/Stimulus:ev_finish+' => '',
|
||||
'Class:Change' => 'Változás',
|
||||
'Class:Change+' => '',
|
||||
'Class:Change/Attribute:status' => 'Állapot',
|
||||
'Class:Change/Attribute:status+' => '',
|
||||
'Class:Change/Attribute:status/Value:new' => 'Új',
|
||||
'Class:Change/Attribute:status/Value:new+' => '',
|
||||
'Class:Change/Attribute:status/Value:validated' => 'Ellenőrzött',
|
||||
'Class:Change/Attribute:status/Value:validated+' => '',
|
||||
'Class:Change/Attribute:status/Value:rejected' => 'Elutasított',
|
||||
'Class:Change/Attribute:status/Value:rejected+' => '',
|
||||
'Class:Change/Attribute:status/Value:assigned' => 'Hozzárendelt',
|
||||
'Class:Change/Attribute:status/Value:assigned+' => '',
|
||||
'Class:Change/Attribute:status/Value:plannedscheduled' => 'Tervezett és ütemezett',
|
||||
'Class:Change/Attribute:status/Value:plannedscheduled+' => '',
|
||||
'Class:Change/Attribute:status/Value:approved' => 'Jóváhagyott',
|
||||
'Class:Change/Attribute:status/Value:approved+' => '',
|
||||
'Class:Change/Attribute:status/Value:notapproved' => 'Nem jóváhagyott',
|
||||
'Class:Change/Attribute:status/Value:notapproved+' => '',
|
||||
'Class:Change/Attribute:status/Value:implemented' => 'Végrehajtott',
|
||||
'Class:Change/Attribute:status/Value:implemented+' => '',
|
||||
'Class:Change/Attribute:status/Value:monitored' => 'Felügyelt',
|
||||
'Class:Change/Attribute:status/Value:monitored+' => '',
|
||||
'Class:Change/Attribute:status/Value:closed' => 'Lezárt',
|
||||
'Class:Change/Attribute:status/Value:closed+' => '',
|
||||
'Class:Change/Attribute:reason' => 'Indoklás',
|
||||
'Class:Change/Attribute:reason+' => '',
|
||||
'Class:Change/Attribute:requestor_id' => 'Kérelmező',
|
||||
'Class:Change/Attribute:requestor_id+' => '',
|
||||
'Class:Change/Attribute:requestor_email' => 'Kérelmező email címe',
|
||||
'Class:Change/Attribute:requestor_email+' => '',
|
||||
'Class:Change/Attribute:creation_date' => 'Létrehozás dátuma',
|
||||
'Class:Change/Attribute:creation_date+' => '',
|
||||
'Class:Change/Attribute:impact' => 'Hatása',
|
||||
'Class:Change/Attribute:impact+' => '',
|
||||
'Class:Change/Attribute:supervisor_group_id' => 'Supervisor csoport',
|
||||
'Class:Change/Attribute:supervisor_group_id+' => '',
|
||||
'Class:Change/Attribute:supervisor_group_name' => 'Supervisor csoport név',
|
||||
'Class:Change/Attribute:supervisor_group_name+' => '',
|
||||
'Class:Change/Attribute:supervisor_id' => 'Supervisor',
|
||||
'Class:Change/Attribute:supervisor_id+' => '',
|
||||
'Class:Change/Attribute:supervisor_email' => 'Supervisor email címe',
|
||||
'Class:Change/Attribute:supervisor_email+' => '',
|
||||
'Class:Change/Attribute:manager_group_id' => 'Menedzser csoport',
|
||||
'Class:Change/Attribute:manager_group_id+' => '',
|
||||
'Class:Change/Attribute:manager_group_name' => 'Menedzser csoport név',
|
||||
'Class:Change/Attribute:manager_group_name+' => '',
|
||||
'Class:Change/Attribute:manager_id' => 'Menedzser',
|
||||
'Class:Change/Attribute:manager_id+' => '',
|
||||
'Class:Change/Attribute:manager_email' => 'Menedzser email címe',
|
||||
'Class:Change/Attribute:manager_email+' => '',
|
||||
'Class:Change/Attribute:outage' => 'Üzemszünet',
|
||||
'Class:Change/Attribute:outage+' => '',
|
||||
'Class:Change/Attribute:outage/Value:no' => 'Nem',
|
||||
'Class:Change/Attribute:outage/Value:no+' => '',
|
||||
'Class:Change/Attribute:outage/Value:yes' => 'Igen',
|
||||
'Class:Change/Attribute:outage/Value:yes+' => '',
|
||||
'Class:Change/Attribute:fallback' => 'Visszavonás',
|
||||
'Class:Change/Attribute:fallback+' => '',
|
||||
'Class:Change/Attribute:parent_id' => 'Fölérendelt változás',
|
||||
'Class:Change/Attribute:parent_id+' => '',
|
||||
'Class:Change/Attribute:parent_name' => 'Referenciaszám',
|
||||
'Class:Change/Attribute:parent_name+' => '',
|
||||
'Class:Change/Attribute:related_request_list' => 'Kapcsolódó kérelmek',
|
||||
'Class:Change/Attribute:related_request_list+' => 'Ehhez a változáshoz kapcsolódó felhasználói kérelmek',
|
||||
'Class:Change/Attribute:related_problems_list' => 'Kapcsolódó problémák',
|
||||
'Class:Change/Attribute:related_problems_list+' => 'Ehhez a változáshoz kapcsolódó problémák',
|
||||
'Class:Change/Attribute:related_incident_list' => 'Kapcsolódó incidensek',
|
||||
'Class:Change/Attribute:related_incident_list+' => 'Ehhez a változáshoz kapcsolódó incidensek',
|
||||
'Class:Change/Attribute:child_changes_list' => 'Kapcsolódó változások',
|
||||
'Class:Change/Attribute:child_changes_list+' => 'Ehhez a változáshoz kapcsolódó változások',
|
||||
'Class:Change/Attribute:parent_id_friendlyname' => 'Fölérendelt változás rövid név',
|
||||
'Class:Change/Attribute:parent_id_friendlyname+' => '',
|
||||
'Class:Change/Attribute:parent_id_finalclass_recall' => 'Változás típus',
|
||||
'Class:Change/Attribute:parent_id_finalclass_recall+' => '',
|
||||
'Class:Change/Stimulus:ev_validate' => 'Ellenőrzés',
|
||||
'Class:Change/Stimulus:ev_validate+' => '',
|
||||
'Class:Change/Stimulus:ev_reject' => 'Elutasítás',
|
||||
'Class:Change/Stimulus:ev_reject+' => '',
|
||||
'Class:Change/Stimulus:ev_assign' => 'Hozzárendelés',
|
||||
'Class:Change/Stimulus:ev_assign+' => '',
|
||||
'Class:Change/Stimulus:ev_reopen' => 'Újranyitás',
|
||||
'Class:Change/Stimulus:ev_reopen+' => '',
|
||||
'Class:Change/Stimulus:ev_plan' => 'Tervezés',
|
||||
'Class:Change/Stimulus:ev_plan+' => '',
|
||||
'Class:Change/Stimulus:ev_approve' => 'Jóváhagyás',
|
||||
'Class:Change/Stimulus:ev_approve+' => '',
|
||||
'Class:Change/Stimulus:ev_replan' => 'Újratervezés',
|
||||
'Class:Change/Stimulus:ev_replan+' => '',
|
||||
'Class:Change/Stimulus:ev_notapprove' => 'Nincs jóváhagyás',
|
||||
'Class:Change/Stimulus:ev_notapprove+' => '',
|
||||
'Class:Change/Stimulus:ev_implement' => 'Megvalósítás alatt',
|
||||
'Class:Change/Stimulus:ev_implement+' => '',
|
||||
'Class:Change/Stimulus:ev_monitor' => 'Felügyelet',
|
||||
'Class:Change/Stimulus:ev_monitor+' => '',
|
||||
'Class:Change/Stimulus:ev_finish' => 'Befejezés',
|
||||
'Class:Change/Stimulus:ev_finish+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -164,30 +164,30 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
//
|
||||
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Class:RoutineChange' => 'Szokásos változás',
|
||||
'Class:RoutineChange+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_validate' => 'Ellenőrzés',
|
||||
'Class:RoutineChange/Stimulus:ev_validate+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_reject' => 'Visszautasítás',
|
||||
'Class:RoutineChange/Stimulus:ev_reject+' => '~~',
|
||||
'Class:RoutineChange/Stimulus:ev_assign' => 'Hozzárenedelés',
|
||||
'Class:RoutineChange/Stimulus:ev_assign+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_reopen' => 'Újranyitás',
|
||||
'Class:RoutineChange/Stimulus:ev_reopen+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_plan' => 'Tervezés',
|
||||
'Class:RoutineChange/Stimulus:ev_plan+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_approve' => 'Jóváhagyás',
|
||||
'Class:RoutineChange/Stimulus:ev_approve+' => '~~',
|
||||
'Class:RoutineChange/Stimulus:ev_replan' => 'Újratervezés',
|
||||
'Class:RoutineChange/Stimulus:ev_replan+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_notapprove' => 'Visszautasítás',
|
||||
'Class:RoutineChange/Stimulus:ev_notapprove+' => '~~',
|
||||
'Class:RoutineChange/Stimulus:ev_implement' => 'Végrehajtás',
|
||||
'Class:RoutineChange/Stimulus:ev_implement+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_monitor' => 'Felügyelet',
|
||||
'Class:RoutineChange/Stimulus:ev_monitor+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_finish' => 'Befejezés',
|
||||
'Class:RoutineChange/Stimulus:ev_finish+' => '',
|
||||
'Class:RoutineChange' => 'Szokásos változás',
|
||||
'Class:RoutineChange+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_validate' => 'Ellenőrzés',
|
||||
'Class:RoutineChange/Stimulus:ev_validate+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_reject' => 'Elutasítás',
|
||||
'Class:RoutineChange/Stimulus:ev_reject+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_assign' => 'Hozzárendelés',
|
||||
'Class:RoutineChange/Stimulus:ev_assign+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_reopen' => 'Újranyitás',
|
||||
'Class:RoutineChange/Stimulus:ev_reopen+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_plan' => 'Tervezés',
|
||||
'Class:RoutineChange/Stimulus:ev_plan+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_approve' => 'Jóváhagyás',
|
||||
'Class:RoutineChange/Stimulus:ev_approve+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_replan' => 'Újratervezés',
|
||||
'Class:RoutineChange/Stimulus:ev_replan+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_notapprove' => 'Nincs jóváhagyás',
|
||||
'Class:RoutineChange/Stimulus:ev_notapprove+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_implement' => 'Megvalósítás alatt',
|
||||
'Class:RoutineChange/Stimulus:ev_implement+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_monitor' => 'Felügyelet',
|
||||
'Class:RoutineChange/Stimulus:ev_monitor+' => '',
|
||||
'Class:RoutineChange/Stimulus:ev_finish' => 'Befejezés',
|
||||
'Class:RoutineChange/Stimulus:ev_finish+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -195,34 +195,34 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
//
|
||||
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Class:ApprovedChange' => 'Jóváhagyott változások',
|
||||
'Class:ApprovedChange+' => '',
|
||||
'Class:ApprovedChange/Attribute:approval_date' => 'Jóváhagyás dátuma',
|
||||
'Class:ApprovedChange/Attribute:approval_date+' => '',
|
||||
'Class:ApprovedChange/Attribute:approval_comment' => 'Megjegyzés a jóváhagyáshoz',
|
||||
'Class:ApprovedChange/Attribute:approval_comment+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_validate' => 'Ellenőrzés',
|
||||
'Class:ApprovedChange/Stimulus:ev_validate+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_reject' => 'Visszautasítás',
|
||||
'Class:ApprovedChange/Stimulus:ev_reject+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_assign' => 'Hozzárenedelés',
|
||||
'Class:ApprovedChange/Stimulus:ev_assign+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_reopen' => 'Újranyitás',
|
||||
'Class:ApprovedChange/Stimulus:ev_reopen+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_plan' => 'Tervezés',
|
||||
'Class:ApprovedChange/Stimulus:ev_plan+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_approve' => 'Jóváhagyás',
|
||||
'Class:ApprovedChange/Stimulus:ev_approve+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_replan' => 'Újratervezés',
|
||||
'Class:ApprovedChange/Stimulus:ev_replan+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_notapprove' => 'Visszautasítés jóváhagyása',
|
||||
'Class:ApprovedChange/Stimulus:ev_notapprove+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_implement' => 'Végrehajtás',
|
||||
'Class:ApprovedChange/Stimulus:ev_implement+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_monitor' => 'Felügyelet',
|
||||
'Class:ApprovedChange/Stimulus:ev_monitor+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_finish' => 'Befejezés',
|
||||
'Class:ApprovedChange/Stimulus:ev_finish+' => '',
|
||||
'Class:ApprovedChange' => 'Jóváhagyott változások',
|
||||
'Class:ApprovedChange+' => '',
|
||||
'Class:ApprovedChange/Attribute:approval_date' => 'Jóváhagyás dátuma',
|
||||
'Class:ApprovedChange/Attribute:approval_date+' => '',
|
||||
'Class:ApprovedChange/Attribute:approval_comment' => 'Megjegyzés a jóváhagyáshoz',
|
||||
'Class:ApprovedChange/Attribute:approval_comment+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_validate' => 'Ellenőrzés',
|
||||
'Class:ApprovedChange/Stimulus:ev_validate+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_reject' => 'Elutasítás',
|
||||
'Class:ApprovedChange/Stimulus:ev_reject+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_assign' => 'Hozzárendelés',
|
||||
'Class:ApprovedChange/Stimulus:ev_assign+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_reopen' => 'Újranyitás',
|
||||
'Class:ApprovedChange/Stimulus:ev_reopen+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_plan' => 'Tervezés',
|
||||
'Class:ApprovedChange/Stimulus:ev_plan+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_approve' => 'Jóváhagyás',
|
||||
'Class:ApprovedChange/Stimulus:ev_approve+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_replan' => 'Újratervezés',
|
||||
'Class:ApprovedChange/Stimulus:ev_replan+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_notapprove' => 'Nincs jóváhagyás',
|
||||
'Class:ApprovedChange/Stimulus:ev_notapprove+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_implement' => 'Megvalósítás alatt',
|
||||
'Class:ApprovedChange/Stimulus:ev_implement+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_monitor' => 'Felügyelet',
|
||||
'Class:ApprovedChange/Stimulus:ev_monitor+' => '',
|
||||
'Class:ApprovedChange/Stimulus:ev_finish' => 'Befejezés',
|
||||
'Class:ApprovedChange/Stimulus:ev_finish+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -230,34 +230,34 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
//
|
||||
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Class:NormalChange' => 'Normál változás',
|
||||
'Class:NormalChange+' => '',
|
||||
'Class:NormalChange/Attribute:acceptance_date' => 'Elfogadás dátuma',
|
||||
'Class:NormalChange/Attribute:acceptance_date+' => '',
|
||||
'Class:NormalChange/Attribute:acceptance_comment' => 'Megjegyzés az elfogadáshoz',
|
||||
'Class:NormalChange/Attribute:acceptance_comment+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_validate' => 'Ellenőrzés',
|
||||
'Class:NormalChange/Stimulus:ev_validate+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_reject' => 'Visszautasítás',
|
||||
'Class:NormalChange/Stimulus:ev_reject+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_assign' => 'Hozzárenedelés',
|
||||
'Class:NormalChange/Stimulus:ev_assign+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_reopen' => 'Újranyitás',
|
||||
'Class:NormalChange/Stimulus:ev_reopen+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_plan' => 'Tervezés',
|
||||
'Class:NormalChange/Stimulus:ev_plan+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_approve' => 'Jóváhagyás',
|
||||
'Class:NormalChange/Stimulus:ev_approve+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_replan' => 'Újratervezés',
|
||||
'Class:NormalChange/Stimulus:ev_replan+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_notapprove' => 'Jóváhagyás visszautasítás',
|
||||
'Class:NormalChange/Stimulus:ev_notapprove+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_implement' => 'Végrehajtás',
|
||||
'Class:NormalChange/Stimulus:ev_implement+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_monitor' => 'Felügyelet',
|
||||
'Class:NormalChange/Stimulus:ev_monitor+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_finish' => 'Befejezés',
|
||||
'Class:NormalChange/Stimulus:ev_finish+' => '',
|
||||
'Class:NormalChange' => 'Normál változás',
|
||||
'Class:NormalChange+' => '',
|
||||
'Class:NormalChange/Attribute:acceptance_date' => 'Elfogadás dátuma',
|
||||
'Class:NormalChange/Attribute:acceptance_date+' => '',
|
||||
'Class:NormalChange/Attribute:acceptance_comment' => 'Megjegyzés az elfogadáshoz',
|
||||
'Class:NormalChange/Attribute:acceptance_comment+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_validate' => 'Ellenőrzés',
|
||||
'Class:NormalChange/Stimulus:ev_validate+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_reject' => 'Elutasítás',
|
||||
'Class:NormalChange/Stimulus:ev_reject+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_assign' => 'Hozzárendelés',
|
||||
'Class:NormalChange/Stimulus:ev_assign+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_reopen' => 'Újranyitás',
|
||||
'Class:NormalChange/Stimulus:ev_reopen+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_plan' => 'Tervezés',
|
||||
'Class:NormalChange/Stimulus:ev_plan+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_approve' => 'Jóváhagyás',
|
||||
'Class:NormalChange/Stimulus:ev_approve+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_replan' => 'Újratervezés',
|
||||
'Class:NormalChange/Stimulus:ev_replan+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_notapprove' => 'Nincs jóváhagyás',
|
||||
'Class:NormalChange/Stimulus:ev_notapprove+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_implement' => 'Megvalósítás alatt',
|
||||
'Class:NormalChange/Stimulus:ev_implement+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_monitor' => 'Felügyelet',
|
||||
'Class:NormalChange/Stimulus:ev_monitor+' => '',
|
||||
'Class:NormalChange/Stimulus:ev_finish' => 'Befejezés',
|
||||
'Class:NormalChange/Stimulus:ev_finish+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -265,28 +265,28 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
//
|
||||
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Class:EmergencyChange' => 'Sűrgős változtatás',
|
||||
'Class:EmergencyChange+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_validate' => 'Ellenőrzés',
|
||||
'Class:EmergencyChange/Stimulus:ev_validate+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_reject' => 'Visszautasítás',
|
||||
'Class:EmergencyChange/Stimulus:ev_reject+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_assign' => 'Hozzárenedelés',
|
||||
'Class:EmergencyChange/Stimulus:ev_assign+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_reopen' => 'Újranyitás',
|
||||
'Class:EmergencyChange/Stimulus:ev_reopen+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_plan' => 'Tervezés',
|
||||
'Class:EmergencyChange/Stimulus:ev_plan+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_approve' => 'Jóváhagyás',
|
||||
'Class:EmergencyChange/Stimulus:ev_approve+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_replan' => 'Újratervezés',
|
||||
'Class:EmergencyChange/Stimulus:ev_replan+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_notapprove' => 'Jóváhagyás visszautasítás',
|
||||
'Class:EmergencyChange/Stimulus:ev_notapprove+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_implement' => 'Végrehajtás',
|
||||
'Class:EmergencyChange/Stimulus:ev_implement+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_monitor' => 'Felügyelet',
|
||||
'Class:EmergencyChange/Stimulus:ev_monitor+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_finish' => 'Befejezés',
|
||||
'Class:EmergencyChange/Stimulus:ev_finish+' => '',
|
||||
'Class:EmergencyChange' => 'Sürgős változás',
|
||||
'Class:EmergencyChange+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_validate' => 'Ellenőrzés',
|
||||
'Class:EmergencyChange/Stimulus:ev_validate+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_reject' => 'Elutasítás',
|
||||
'Class:EmergencyChange/Stimulus:ev_reject+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_assign' => 'Hozzárendelés',
|
||||
'Class:EmergencyChange/Stimulus:ev_assign+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_reopen' => 'Újranyitás',
|
||||
'Class:EmergencyChange/Stimulus:ev_reopen+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_plan' => 'Tervezés',
|
||||
'Class:EmergencyChange/Stimulus:ev_plan+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_approve' => 'Jóváhagyás',
|
||||
'Class:EmergencyChange/Stimulus:ev_approve+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_replan' => 'Újratervezés',
|
||||
'Class:EmergencyChange/Stimulus:ev_replan+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_notapprove' => 'Nincs jóváhagyás',
|
||||
'Class:EmergencyChange/Stimulus:ev_notapprove+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_implement' => 'Megvalósítás alatt',
|
||||
'Class:EmergencyChange/Stimulus:ev_implement+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_monitor' => 'Felügyelet',
|
||||
'Class:EmergencyChange/Stimulus:ev_monitor+' => '',
|
||||
'Class:EmergencyChange/Stimulus:ev_finish' => 'Befejezés',
|
||||
'Class:EmergencyChange/Stimulus:ev_finish+' => '',
|
||||
));
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'itop-change-mgmt-itil/3.0.3',
|
||||
'itop-change-mgmt-itil/3.0.4',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -21,29 +21,29 @@
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Menu:ChangeManagement' => 'Változás menedzsment',
|
||||
'Menu:Change:Overview' => 'Áttekintő',
|
||||
'Menu:Change:Overview+' => '~~',
|
||||
'Menu:NewChange' => 'Új változás',
|
||||
'Menu:NewChange+' => 'Create a new change ticket~~',
|
||||
'Menu:SearchChanges' => 'Változás keresés',
|
||||
'Menu:SearchChanges+' => 'Search for change tickets~~',
|
||||
'Menu:Change:Shortcuts' => 'Gyorsmenü',
|
||||
'Menu:Change:Shortcuts+' => '~~',
|
||||
'Menu:WaitingAcceptance' => 'Elfogadásra váró változások',
|
||||
'Menu:WaitingAcceptance+' => '~~',
|
||||
'Menu:WaitingApproval' => 'Jóváhagyásra váró változások',
|
||||
'Menu:WaitingApproval+' => '~~',
|
||||
'Menu:Changes' => 'Nyitott változási igények',
|
||||
'Menu:Changes+' => 'All open changes~~',
|
||||
'Menu:MyChanges' => 'Hozzám rendelt változások',
|
||||
'Menu:MyChanges+' => 'Changes assigned to me (as Agent)~~',
|
||||
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Changes by category for the last 7 days~~',
|
||||
'UI-ChangeManagementOverview-Last-7-days' => 'Number of changes for the last 7 days~~',
|
||||
'UI-ChangeManagementOverview-ChangeByDomain-last-7-days' => 'Changes by domain for the last 7 days~~',
|
||||
'UI-ChangeManagementOverview-ChangeByStatus-last-7-days' => 'Changes by status for the last 7 days~~',
|
||||
'Tickets:Related:OpenChanges' => 'Open changes~~',
|
||||
'Tickets:Related:RecentChanges' => 'Recent changes (72h)~~',
|
||||
'Menu:ChangeManagement' => 'Változáskezelés',
|
||||
'Menu:Change:Overview' => 'Áttekintő',
|
||||
'Menu:Change:Overview+' => 'Áttekintő oldal',
|
||||
'Menu:NewChange' => 'Új változás',
|
||||
'Menu:NewChange+' => 'Új változásjegy létrehozása',
|
||||
'Menu:SearchChanges' => 'Változás keresés',
|
||||
'Menu:SearchChanges+' => 'Változásjegy keresés',
|
||||
'Menu:Change:Shortcuts' => 'Gyorsgombok',
|
||||
'Menu:Change:Shortcuts+' => 'Gyorselérés gombok',
|
||||
'Menu:WaitingAcceptance' => 'Elfogadásra váró változások',
|
||||
'Menu:WaitingAcceptance+' => 'Elfogadásra váró változások',
|
||||
'Menu:WaitingApproval' => 'Jóváhagyásra váró változások',
|
||||
'Menu:WaitingApproval+' => 'Jóváhagyásra váró változások',
|
||||
'Menu:Changes' => 'Nyitott változási kérelmek',
|
||||
'Menu:Changes+' => 'Nyitott változási kérelmek összesítése',
|
||||
'Menu:MyChanges' => 'Hozzám rendelt változások',
|
||||
'Menu:MyChanges+' => 'Ügyintézőként hozzám rendelt változások',
|
||||
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Változások kategóriánként az elmúlt 7 napban',
|
||||
'UI-ChangeManagementOverview-Last-7-days' => 'A változások száma az elmúlt 7 napban',
|
||||
'UI-ChangeManagementOverview-ChangeByDomain-last-7-days' => 'Változások tartományonként az elmúlt 7 napban',
|
||||
'UI-ChangeManagementOverview-ChangeByStatus-last-7-days' => 'Változások állapotuk szerint az elmúlt 7 napban',
|
||||
'Tickets:Related:OpenChanges' => 'Nyitott változások',
|
||||
'Tickets:Related:RecentChanges' => 'Legutóbbi változások (72h)',
|
||||
));
|
||||
|
||||
// Dictionnay conventions
|
||||
@@ -62,78 +62,78 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
//
|
||||
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Class:Change' => 'Változás',
|
||||
'Class:Change+' => '~~',
|
||||
'Class:Change/Attribute:status' => 'Státusz',
|
||||
'Class:Change/Attribute:status+' => '~~',
|
||||
'Class:Change/Attribute:status/Value:new' => 'Új',
|
||||
'Class:Change/Attribute:status/Value:new+' => '~~',
|
||||
'Class:Change/Attribute:status/Value:assigned' => 'Hozzárendelt',
|
||||
'Class:Change/Attribute:status/Value:assigned+' => '~~',
|
||||
'Class:Change/Attribute:status/Value:planned' => 'Planned~~',
|
||||
'Class:Change/Attribute:status/Value:planned+' => '~~',
|
||||
'Class:Change/Attribute:status/Value:rejected' => 'Visszautasított',
|
||||
'Class:Change/Attribute:status/Value:rejected+' => '~~',
|
||||
'Class:Change/Attribute:status/Value:approved' => 'Jóváhagyott',
|
||||
'Class:Change/Attribute:status/Value:approved+' => '~~',
|
||||
'Class:Change/Attribute:status/Value:closed' => 'Lezárt',
|
||||
'Class:Change/Attribute:status/Value:closed+' => '~~',
|
||||
'Class:Change/Attribute:category' => 'Category~~',
|
||||
'Class:Change/Attribute:category+' => '~~',
|
||||
'Class:Change/Attribute:category/Value:application' => 'application~~',
|
||||
'Class:Change/Attribute:category/Value:application+' => 'application~~',
|
||||
'Class:Change/Attribute:category/Value:hardware' => 'hardware~~',
|
||||
'Class:Change/Attribute:category/Value:hardware+' => 'hardware~~',
|
||||
'Class:Change/Attribute:category/Value:network' => 'network~~',
|
||||
'Class:Change/Attribute:category/Value:network+' => 'network~~',
|
||||
'Class:Change/Attribute:category/Value:other' => 'other~~',
|
||||
'Class:Change/Attribute:category/Value:other+' => 'other~~',
|
||||
'Class:Change/Attribute:category/Value:software' => 'software~~',
|
||||
'Class:Change/Attribute:category/Value:software+' => 'software~~',
|
||||
'Class:Change/Attribute:category/Value:system' => 'system~~',
|
||||
'Class:Change/Attribute:category/Value:system+' => 'system~~',
|
||||
'Class:Change/Attribute:reject_reason' => 'Reject reason~~',
|
||||
'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' => 'Parent change~~',
|
||||
'Class:Change/Attribute:parent_id+' => '~~',
|
||||
'Class:Change/Attribute:parent_name' => 'Parent change ref~~',
|
||||
'Class:Change/Attribute:parent_name+' => '~~',
|
||||
'Class:Change/Attribute:creation_date' => 'Létrehozás dátuma',
|
||||
'Class:Change/Attribute:creation_date+' => '~~',
|
||||
'Class:Change/Attribute:approval_date' => 'Approval date~~',
|
||||
'Class:Change/Attribute:approval_date+' => '~~',
|
||||
'Class:Change/Attribute:fallback_plan' => 'Fallback plan~~',
|
||||
'Class:Change/Attribute:fallback_plan+' => '~~',
|
||||
'Class:Change/Attribute:related_request_list' => 'Related requests~~',
|
||||
'Class:Change/Attribute:related_request_list+' => 'All the user requests linked to this change~~',
|
||||
'Class:Change/Attribute:related_incident_list' => 'Related incidents~~',
|
||||
'Class:Change/Attribute:related_incident_list+' => 'All the incidents linked to this change~~',
|
||||
'Class:Change/Attribute:related_problems_list' => 'Related problems~~',
|
||||
'Class:Change/Attribute:related_problems_list+' => 'All the problems linked to this change~~',
|
||||
'Class:Change/Attribute:child_changes_list' => 'Child changes~~',
|
||||
'Class:Change/Attribute:child_changes_list+' => 'All the sub changes linked to this change~~',
|
||||
'Class:Change/Attribute:parent_id_friendlyname' => 'Parent change friendly name~~',
|
||||
'Class:Change/Attribute:parent_id_friendlyname+' => '~~',
|
||||
'Class:Change/Stimulus:ev_assign' => 'Hozzárenedelés',
|
||||
'Class:Change/Stimulus:ev_assign+' => '~~',
|
||||
'Class:Change/Stimulus:ev_plan' => 'Tervezés',
|
||||
'Class:Change/Stimulus:ev_plan+' => '~~',
|
||||
'Class:Change/Stimulus:ev_reject' => 'Visszautasítás',
|
||||
'Class:Change/Stimulus:ev_reject+' => '~~',
|
||||
'Class:Change/Stimulus:ev_reopen' => 'Újranyitás',
|
||||
'Class:Change/Stimulus:ev_reopen+' => '~~',
|
||||
'Class:Change/Stimulus:ev_approve' => 'Jóváhagyás',
|
||||
'Class:Change/Stimulus:ev_approve+' => '~~',
|
||||
'Class:Change/Stimulus:ev_finish' => 'Befejezés',
|
||||
'Class:Change/Stimulus:ev_finish+' => '~~',
|
||||
'Class:Change/Attribute:outage' => 'Leállás',
|
||||
'Class:Change/Attribute:outage+' => '~~',
|
||||
'Class:Change/Attribute:outage/Value:no' => 'Nem',
|
||||
'Class:Change/Attribute:outage/Value:no+' => '~~',
|
||||
'Class:Change/Attribute:outage/Value:yes' => 'Igen',
|
||||
'Class:Change/Attribute:outage/Value:yes+' => '~~',
|
||||
'Class:Change' => 'Változás',
|
||||
'Class:Change+' => '~~',
|
||||
'Class:Change/Attribute:status' => 'Állapot',
|
||||
'Class:Change/Attribute:status+' => '~~',
|
||||
'Class:Change/Attribute:status/Value:new' => 'Új',
|
||||
'Class:Change/Attribute:status/Value:new+' => '~~',
|
||||
'Class:Change/Attribute:status/Value:assigned' => 'Hozzárendelt',
|
||||
'Class:Change/Attribute:status/Value:assigned+' => '~~',
|
||||
'Class:Change/Attribute:status/Value:planned' => 'Tervezett',
|
||||
'Class:Change/Attribute:status/Value:planned+' => '~~',
|
||||
'Class:Change/Attribute:status/Value:rejected' => 'Elutasított',
|
||||
'Class:Change/Attribute:status/Value:rejected+' => '~~',
|
||||
'Class:Change/Attribute:status/Value:approved' => 'Jóváhagyott',
|
||||
'Class:Change/Attribute:status/Value:approved+' => '~~',
|
||||
'Class:Change/Attribute:status/Value:closed' => 'Lezárt',
|
||||
'Class:Change/Attribute:status/Value:closed+' => '~~',
|
||||
'Class:Change/Attribute:category' => 'Kategória',
|
||||
'Class:Change/Attribute:category+' => '~~',
|
||||
'Class:Change/Attribute:category/Value:application' => 'Alkalmazás',
|
||||
'Class:Change/Attribute:category/Value:application+' => '',
|
||||
'Class:Change/Attribute:category/Value:hardware' => 'Hardver',
|
||||
'Class:Change/Attribute:category/Value:hardware+' => '',
|
||||
'Class:Change/Attribute:category/Value:network' => 'Hálózat',
|
||||
'Class:Change/Attribute:category/Value:network+' => '',
|
||||
'Class:Change/Attribute:category/Value:other' => 'Egyéb',
|
||||
'Class:Change/Attribute:category/Value:other+' => '',
|
||||
'Class:Change/Attribute:category/Value:software' => 'Szoftver',
|
||||
'Class:Change/Attribute:category/Value:software+' => '',
|
||||
'Class:Change/Attribute:category/Value:system' => 'Rendszer',
|
||||
'Class:Change/Attribute:category/Value:system+' => '',
|
||||
'Class:Change/Attribute:reject_reason' => 'Elutasítás oka',
|
||||
'Class:Change/Attribute:reject_reason+' => '~~',
|
||||
'Class:Change/Attribute:changemanager_id' => 'Változás menedzser',
|
||||
'Class:Change/Attribute:changemanager_id+' => '~~',
|
||||
'Class:Change/Attribute:changemanager_email' => 'Változás menedzser email címe',
|
||||
'Class:Change/Attribute:changemanager_email+' => '~~',
|
||||
'Class:Change/Attribute:parent_id' => 'Fölérendelt változás',
|
||||
'Class:Change/Attribute:parent_id+' => '~~',
|
||||
'Class:Change/Attribute:parent_name' => 'Referenciaszám',
|
||||
'Class:Change/Attribute:parent_name+' => '~~',
|
||||
'Class:Change/Attribute:creation_date' => 'Létrehozás dátuma',
|
||||
'Class:Change/Attribute:creation_date+' => '~~',
|
||||
'Class:Change/Attribute:approval_date' => 'Jóváhagyás dátuma',
|
||||
'Class:Change/Attribute:approval_date+' => '~~',
|
||||
'Class:Change/Attribute:fallback_plan' => 'Tartalék terv',
|
||||
'Class:Change/Attribute:fallback_plan+' => '~~',
|
||||
'Class:Change/Attribute:related_request_list' => 'Kapcsolódó kérelmek',
|
||||
'Class:Change/Attribute:related_request_list+' => 'Ehhez a változáshoz kapcsolódó felhasználói kérelmek',
|
||||
'Class:Change/Attribute:related_incident_list' => 'Kapcsolódó incidensek',
|
||||
'Class:Change/Attribute:related_incident_list+' => 'Ehhez a változáshoz kapcsolódó incidensek',
|
||||
'Class:Change/Attribute:related_problems_list' => 'Kapcsolódó problémák',
|
||||
'Class:Change/Attribute:related_problems_list+' => 'Ehhez a változáshoz kapcsolódó problémák',
|
||||
'Class:Change/Attribute:child_changes_list' => 'Kapcsolódó változások',
|
||||
'Class:Change/Attribute:child_changes_list+' => 'Ehhez a változáshoz kapcsolódó változások',
|
||||
'Class:Change/Attribute:parent_id_friendlyname' => 'Fölérendelt változás rövid név',
|
||||
'Class:Change/Attribute:parent_id_friendlyname+' => '~~',
|
||||
'Class:Change/Stimulus:ev_assign' => 'Hozzárendelés',
|
||||
'Class:Change/Stimulus:ev_assign+' => '~~',
|
||||
'Class:Change/Stimulus:ev_plan' => 'Tervezés',
|
||||
'Class:Change/Stimulus:ev_plan+' => '~~',
|
||||
'Class:Change/Stimulus:ev_reject' => 'Elutasítás',
|
||||
'Class:Change/Stimulus:ev_reject+' => '~~',
|
||||
'Class:Change/Stimulus:ev_reopen' => 'Újranyitás',
|
||||
'Class:Change/Stimulus:ev_reopen+' => '~~',
|
||||
'Class:Change/Stimulus:ev_approve' => 'Jóváhagyás',
|
||||
'Class:Change/Stimulus:ev_approve+' => '~~',
|
||||
'Class:Change/Stimulus:ev_finish' => 'Befejezés',
|
||||
'Class:Change/Stimulus:ev_finish+' => '~~',
|
||||
'Class:Change/Attribute:outage' => 'Üzemszünet',
|
||||
'Class:Change/Attribute:outage+' => '~~',
|
||||
'Class:Change/Attribute:outage/Value:no' => 'Nem',
|
||||
'Class:Change/Attribute:outage/Value:no+' => '~~',
|
||||
'Class:Change/Attribute:outage/Value:yes' => 'Igen',
|
||||
'Class:Change/Attribute:outage/Value:yes+' => '~~',
|
||||
));
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'itop-change-mgmt/3.0.3',
|
||||
'itop-change-mgmt/3.0.4',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -16,15 +16,11 @@
|
||||
// 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
|
||||
*
|
||||
* @author Hipska (2018, 2019)
|
||||
* @author LinProfs <info@linprofs.com>
|
||||
* @author Thomas Casteleyn <info@super-visions.com>
|
||||
* @author Jeffrey Bostoen <info@jeffreybostoen.be> (2018 - 2022)
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2023 Combodo SARL
|
||||
* @licence http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
@@ -32,13 +28,13 @@
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
|
||||
'Relation:impacts/Description' => 'Elementen hebben impact op',
|
||||
'Relation:impacts/Description' => 'Elementen met impact van',
|
||||
'Relation:impacts/DownStream' => 'Impact op...',
|
||||
'Relation:impacts/DownStream+' => 'Elementen hebben impact op',
|
||||
'Relation:impacts/DownStream+' => 'Elementen geïmpacteerd door',
|
||||
'Relation:impacts/UpStream' => 'Is afhankelijk van...',
|
||||
'Relation:impacts/UpStream+' => 'Elementen waar dit object impact op heeft',
|
||||
'Relation:impacts/UpStream+' => 'Elementen met impact op',
|
||||
// Legacy entries
|
||||
'Relation:depends on/Description' => 'Elementen waarvan dit object afhankelijk van is',
|
||||
'Relation:depends on/Description' => 'Elementen afhankelijk van',
|
||||
'Relation:depends on/DownStream' => 'Is afhankelijk van...',
|
||||
'Relation:depends on/UpStream' => 'Impact op...',
|
||||
'Relation:impacts/LoadData' => 'Load data~~',
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'itop-config-mgmt/3.0.3',
|
||||
'itop-config-mgmt/3.0.4',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -22,17 +22,17 @@
|
||||
*/
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
|
||||
'Menu:ConfigEditor' => 'Configuration~~',
|
||||
'config-edit-title' => 'Configuration File Editor~~',
|
||||
'config-edit-intro' => 'Be very cautious when editing the configuration file.~~',
|
||||
'config-apply' => 'Apply~~',
|
||||
'config-apply-title' => 'Apply (Ctrl+S)~~',
|
||||
'config-cancel' => 'Reset~~',
|
||||
'config-saved' => 'Successfully recorded.~~',
|
||||
'config-confirm-cancel' => 'Your changes will be lost.~~',
|
||||
'config-no-change' => 'No change: the file has been left unchanged.~~',
|
||||
'config-reverted' => 'The configuration has been reverted.~~',
|
||||
'config-parse-error' => 'Line %2$d: %1$s.<br/>The file has NOT been updated.~~',
|
||||
'config-current-line' => 'Editing line: %1$s~~',
|
||||
'config-saved-warning-db-password' => 'Successfully recorded, but the backup won\'t work due to unsupported characters in the database password.~~',
|
||||
'Menu:ConfigEditor' => 'Konfiguráció szerkesztő',
|
||||
'config-edit-title' => 'Konfigurációs fájl szerkesztő',
|
||||
'config-edit-intro' => 'Legyen nagyon óvatos a konfiguráció szerkesztésénél!',
|
||||
'config-apply' => 'Alkalmaz',
|
||||
'config-apply-title' => 'Alkalmaz (Ctrl+S)',
|
||||
'config-cancel' => 'Visszaállítás',
|
||||
'config-saved' => 'Sikeresen elmentve.',
|
||||
'config-confirm-cancel' => 'A változtatások elvesznek.',
|
||||
'config-no-change' => 'Nincs változtatás: a fájl változatlan maradt.',
|
||||
'config-reverted' => 'A konfiguráció vissza lett állítva.',
|
||||
'config-parse-error' => '%2$d sor: %1$s.<br/>A fájl NEM frissült',
|
||||
'config-current-line' => 'Szerkesztett sor: %1$s',
|
||||
'config-saved-warning-db-password' => 'Sikeresen elmentve, de a biztonsági mentés nem fog működni az adatbázis jelszavában szereplő nem támogatott karakterek miatt.',
|
||||
));
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'itop-config/3.0.3',
|
||||
'itop-config/3.0.4',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -21,100 +21,98 @@
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'iTopUpdate:UI:PageTitle' => 'Application Upgrade~~',
|
||||
'itop-core-update:UI:SelectUpdateFile' => 'Application Upgrade~~',
|
||||
'itop-core-update:UI:ConfirmUpdate' => 'Application Upgrade~~',
|
||||
'itop-core-update:UI:UpdateCoreFiles' => 'Application Upgrade~~',
|
||||
'iTopUpdate:UI:MaintenanceModeActive' => 'The application is currently under maintenance, no user can access the application. You have to run a setup or restore the application archive to return in normal mode.~~',
|
||||
'itop-core-update:UI:UpdateDone' => 'Application Upgrade~~',
|
||||
'iTopUpdate:UI:PageTitle' => 'Alkalmazásfrissítés',
|
||||
'itop-core-update:UI:SelectUpdateFile' => 'Alkalmazásfrissítés',
|
||||
'itop-core-update:UI:ConfirmUpdate' => 'Alkalmazásfrissítés',
|
||||
'itop-core-update:UI:UpdateCoreFiles' => 'Alkalmazásfrissítés',
|
||||
'iTopUpdate:UI:MaintenanceModeActive' => 'Az alkalmazás jelenleg karbantartás alatt áll, egyetlen felhasználó sem tud hozzáférni az alkalmazáshoz. A normál üzemmódba való visszatéréshez telepítést kell futtatnia, vagy vissza kell állítania az alkalmazás archívumát..',
|
||||
'itop-core-update:UI:UpdateDone' => 'Alkalmazásfrissítés',
|
||||
|
||||
'itop-core-update/Operation:SelectUpdateFile/Title' => 'Application Upgrade~~',
|
||||
'itop-core-update/Operation:ConfirmUpdate/Title' => 'Confirm Application Upgrade~~',
|
||||
'itop-core-update/Operation:UpdateCoreFiles/Title' => 'Application Upgrading~~',
|
||||
'itop-core-update/Operation:UpdateDone/Title' => 'Application Upgrade Done~~',
|
||||
'itop-core-update/Operation:SelectUpdateFile/Title' => 'Alkalmazásfrissítés',
|
||||
'itop-core-update/Operation:ConfirmUpdate/Title' => 'Alkalmazásfrissítés jóváhagyása',
|
||||
'itop-core-update/Operation:UpdateCoreFiles/Title' => 'Az alkalmazás frissül',
|
||||
'itop-core-update/Operation:UpdateDone/Title' => 'Alkalmazásfrissítés kész',
|
||||
|
||||
'iTopUpdate:UI:SelectUpdateFile' => 'Select an upgrade file to upload~~',
|
||||
'iTopUpdate:UI:CheckUpdate' => 'Verify upgrade file~~',
|
||||
'iTopUpdate:UI:ConfirmInstallFile' => 'You are about to install %1$s~~',
|
||||
'iTopUpdate:UI:DoUpdate' => 'Upgrade~~',
|
||||
'iTopUpdate:UI:CurrentVersion' => 'Current installed version~~',
|
||||
'iTopUpdate:UI:NewVersion' => 'Newly installed version~~',
|
||||
'iTopUpdate:UI:Back' => 'Back~~',
|
||||
'iTopUpdate:UI:Cancel' => 'Cancel~~',
|
||||
'iTopUpdate:UI:Continue' => 'Continue~~',
|
||||
'iTopUpdate:UI:RunSetup' => 'Run Setup~~',
|
||||
'iTopUpdate:UI:WithDBBackup' => 'Database backup~~',
|
||||
'iTopUpdate:UI:WithFilesBackup' => 'Application files backup~~',
|
||||
'iTopUpdate:UI:WithoutBackup' => 'No backup is planned~~',
|
||||
'iTopUpdate:UI:Backup' => 'Backup generated before update~~',
|
||||
'iTopUpdate:UI:DoFilesArchive' => 'Archive application files~~',
|
||||
'iTopUpdate:UI:UploadArchive' => 'Select a package to upload~~',
|
||||
'iTopUpdate:UI:ServerFile' => 'Path of a package already on the server~~',
|
||||
'iTopUpdate:UI:WarningReadOnlyDuringUpdate' => 'During the upgrade, the application will be read-only.~~',
|
||||
'iTopUpdate:UI:SelectUpdateFile' => 'Válasszon egy frissítést a feltöltéshez',
|
||||
'iTopUpdate:UI:CheckUpdate' => 'Frissítés ellenőrzése',
|
||||
'iTopUpdate:UI:ConfirmInstallFile' => '%1$s lesz telepítve',
|
||||
'iTopUpdate:UI:DoUpdate' => 'Frissítés',
|
||||
'iTopUpdate:UI:CurrentVersion' => 'Jelenlegi telepített verzió',
|
||||
'iTopUpdate:UI:NewVersion' => 'Újonnan telepített verzió',
|
||||
'iTopUpdate:UI:Back' => 'Vissza',
|
||||
'iTopUpdate:UI:Cancel' => 'Mégsem',
|
||||
'iTopUpdate:UI:Continue' => 'Folytatás',
|
||||
'iTopUpdate:UI:RunSetup' => 'Telepítés futtatása',
|
||||
'iTopUpdate:UI:WithDBBackup' => 'Adatbázis biztonsági mentése',
|
||||
'iTopUpdate:UI:WithFilesBackup' => 'Alkalmazás fájlok biztonsági mentése',
|
||||
'iTopUpdate:UI:WithoutBackup' => 'Nincs mentés tervbe véve',
|
||||
'iTopUpdate:UI:Backup' => 'Frissítés előtt létrehozott biztonsági mentés.',
|
||||
'iTopUpdate:UI:DoFilesArchive' => 'Archív alkalmazás fájlok',
|
||||
'iTopUpdate:UI:UploadArchive' => 'Válasszon egy csomagot a feltöltéshez',
|
||||
'iTopUpdate:UI:ServerFile' => 'A kiszolgálón már meglévő csomag elérési útvonala',
|
||||
'iTopUpdate:UI:WarningReadOnlyDuringUpdate' => 'A frissítés során az alkalmazás csak olvasható lesz.',
|
||||
|
||||
'iTopUpdate:UI:Status' => 'Status~~',
|
||||
'iTopUpdate:UI:Action' => 'Update~~',
|
||||
'iTopUpdate:UI:History' => 'Versions History~~',
|
||||
'iTopUpdate:UI:Progress' => 'Progress of the upgrade~~',
|
||||
'iTopUpdate:UI:Status' => 'Állapotjelentés',
|
||||
'iTopUpdate:UI:Action' => 'Frissítés',
|
||||
'iTopUpdate:UI:History' => 'Verziótörténet',
|
||||
'iTopUpdate:UI:Progress' => 'A frissítés folyamata',
|
||||
|
||||
'iTopUpdate:UI:DoBackup:Label' => 'Backup files and database~~',
|
||||
'iTopUpdate:UI:DoBackup:Warning' => 'Backup is not recommended due to limited available disk space~~',
|
||||
'iTopUpdate:UI:DoBackup:Label' => 'Mentés fájlok és adatbázis',
|
||||
'iTopUpdate:UI:DoBackup:Warning' => 'A biztonsági mentés nem ajánlott a korlátozottan rendelkezésre álló lemezterület miatt.',
|
||||
|
||||
'iTopUpdate:UI:DiskFreeSpace' => 'Disk free space~~',
|
||||
'iTopUpdate:UI:ItopDiskSpace' => ITOP_APPLICATION_SHORT.' disk space~~',
|
||||
'iTopUpdate:UI:DBDiskSpace' => 'Database disk space~~',
|
||||
'iTopUpdate:UI:FileUploadMaxSize' => 'File upload max size~~',
|
||||
'iTopUpdate:UI:DiskFreeSpace' => 'Lemez szabad terület',
|
||||
'iTopUpdate:UI:ItopDiskSpace' => ITOP_APPLICATION_SHORT.' lemezterület',
|
||||
'iTopUpdate:UI:DBDiskSpace' => 'Adatbázis lemezterület',
|
||||
'iTopUpdate:UI:FileUploadMaxSize' => 'Feltöltés maximális fájlmérete',
|
||||
|
||||
'iTopUpdate:UI:PostMaxSize' => 'PHP ini value post_max_size: %1$s~~',
|
||||
'iTopUpdate:UI:UploadMaxFileSize' => 'PHP ini value upload_max_filesize: %1$s~~',
|
||||
'iTopUpdate:UI:PostMaxSize' => 'PHP ini érték post_max_size: %1$s',
|
||||
'iTopUpdate:UI:UploadMaxFileSize' => 'PHP ini érték upload_max_filesize: %1$s',
|
||||
|
||||
'iTopUpdate:UI:CanCoreUpdate:Loading' => 'Checking filesystem~~',
|
||||
'iTopUpdate:UI:CanCoreUpdate:Error' => 'Checking filesystem failed (%1$s)~~',
|
||||
'iTopUpdate:UI:CanCoreUpdate:ErrorFileNotExist' => 'Checking filesystem failed (File not exist %1$s)~~',
|
||||
'iTopUpdate:UI:CanCoreUpdate:Failed' => 'Checking filesystem failed~~',
|
||||
'iTopUpdate:UI:CanCoreUpdate:Yes' => 'Application can be updated~~',
|
||||
'iTopUpdate:UI:CanCoreUpdate:No' => 'Application cannot be updated: %1$s~~',
|
||||
'iTopUpdate:UI:CanCoreUpdate:Warning' => 'Warning: application update can fail: %1$s~~',
|
||||
'iTopUpdate:UI:CannotUpdateUseSetup' => '<b>Some modified files were detected</b>, a partial update cannot be executed.</br>Follow the <a target="_blank" href="%2$s"> procedure</a> in order to manually upgrade your iTop. You must use the <a href="%1$s">setup</a> to update the application.~~',
|
||||
'iTopUpdate:UI:CheckInProgress' => 'Please wait during integrity check~~',
|
||||
'iTopUpdate:UI:CanCoreUpdate:Loading' => 'Fájlrendszer ellenőrzése',
|
||||
'iTopUpdate:UI:CanCoreUpdate:Error' => 'Fájlrendszer ellenőrzése sikertelen (%1$s)',
|
||||
'iTopUpdate:UI:CanCoreUpdate:ErrorFileNotExist' => 'Fájlrendszer ellenőrzése sikertelen (Fájl nincs meg %1$s)',
|
||||
'iTopUpdate:UI:CanCoreUpdate:Failed' => 'Fájlrendszer ellenőrzése sikertelen',
|
||||
'iTopUpdate:UI:CanCoreUpdate:Yes' => 'Az alkalmazás frissíthető',
|
||||
'iTopUpdate:UI:CanCoreUpdate:No' => 'Az alkalmazás nem frissíthető: %1$s',
|
||||
'iTopUpdate:UI:CanCoreUpdate:Warning' => 'Figyelem: alkalmazás frissítés sikertelen lehet: %1$s',
|
||||
'iTopUpdate:UI:CannotUpdateUseSetup' => '<b>Néhány manuálisan módosított fájlt észleltünk</b>, a részleges frissítés nem hajtható végre.</br>Kövesse ezt az <a target="_blank" href="%2$s"> eljárást</a> az iTop manuális frissítéséhez. Az alkalmazás frissítéséhez a <a href="%1$s">setup</a> parancsot kell használnia.',
|
||||
'iTopUpdate:UI:CheckInProgress' => 'Kérjük, várjon az integritás ellenőrzés alatt',
|
||||
|
||||
// Setup Messages
|
||||
'iTopUpdate:UI:SetupMessage:Ready' => 'Ready to start~~',
|
||||
'iTopUpdate:UI:SetupMessage:EnterMaintenance' => 'Entering maintenance mode~~',
|
||||
'iTopUpdate:UI:SetupMessage:Backup' => 'Database backup~~',
|
||||
'iTopUpdate:UI:SetupMessage:FilesArchive' => 'Archive application files~~',
|
||||
'iTopUpdate:UI:SetupMessage:CopyFiles' => 'Copy new version files~~',
|
||||
'iTopUpdate:UI:SetupMessage:CheckCompile' => 'Check application upgrade~~',
|
||||
'iTopUpdate:UI:SetupMessage:Compile' => 'Upgrade application and database~~',
|
||||
'iTopUpdate:UI:SetupMessage:UpdateDatabase' => 'Upgrade database~~',
|
||||
'iTopUpdate:UI:SetupMessage:ExitMaintenance' => 'Exiting maintenance mode~~',
|
||||
'iTopUpdate:UI:SetupMessage:UpdateDone' => 'Upgrade completed~~',
|
||||
// Setup Messages
|
||||
'iTopUpdate:UI:SetupMessage:Ready' => 'Készen állunk',
|
||||
'iTopUpdate:UI:SetupMessage:EnterMaintenance' => 'Karbantartási módba lépés',
|
||||
'iTopUpdate:UI:SetupMessage:Backup' => 'Adatbázis biztonsági mentése',
|
||||
'iTopUpdate:UI:SetupMessage:FilesArchive' => 'Alkalmazás fájlok archiválása',
|
||||
'iTopUpdate:UI:SetupMessage:CopyFiles' => 'Új fájlverziók másolása',
|
||||
'iTopUpdate:UI:SetupMessage:CheckCompile' => 'Alkalmazásfrissítés ellenőrzése',
|
||||
'iTopUpdate:UI:SetupMessage:Compile' => 'Az alkalmazás és az adatbázis frissítése',
|
||||
'iTopUpdate:UI:SetupMessage:UpdateDatabase' => 'Adatbázis frissítés',
|
||||
'iTopUpdate:UI:SetupMessage:ExitMaintenance' => 'Kilépés a karbantartási módból',
|
||||
'iTopUpdate:UI:SetupMessage:UpdateDone' => 'A frissítés befejeződött',
|
||||
|
||||
// Errors
|
||||
'iTopUpdate:Error:MissingFunction' => 'Impossible to start upgrade, missing function~~',
|
||||
'iTopUpdate:Error:MissingFile' => 'Missing file: %1$s~~',
|
||||
'iTopUpdate:Error:CorruptedFile' => 'File %1$s is corrupted~~',
|
||||
'iTopUpdate:Error:BadFileFormat' => 'Upgrade file is not a zip file~~',
|
||||
'iTopUpdate:Error:BadFileContent' => 'Upgrade file is not an application archive~~',
|
||||
'iTopUpdate:Error:BadItopProduct' => 'Upgrade file is not compatible with your application~~',
|
||||
'iTopUpdate:Error:Copy' => 'Error, cannot copy \'%1$s\' to \'%2$s\'~~',
|
||||
'iTopUpdate:Error:FileNotFound' => 'File not found~~',
|
||||
'iTopUpdate:Error:NoFile' => 'No file provided~~',
|
||||
'iTopUpdate:Error:InvalidToken' => 'Invalid token~~',
|
||||
'iTopUpdate:Error:UpdateFailed' => 'Upgrade failed ~~',
|
||||
'iTopUpdate:Error:FileUploadMaxSizeTooSmall' => 'The upload max size seems too small for update. Please change the PHP configuration.~~',
|
||||
// Errors
|
||||
'iTopUpdate:Error:MissingFunction' => 'Lehetetlen elindítani a frissítést, hiányzó funkció',
|
||||
'iTopUpdate:Error:MissingFile' => 'Hiányzó fájl: %1$s',
|
||||
'iTopUpdate:Error:CorruptedFile' => 'A %1$s fájl sérült',
|
||||
'iTopUpdate:Error:BadFileFormat' => 'A frissítési fájl nem zip fájl',
|
||||
'iTopUpdate:Error:BadFileContent' => 'A frissítési fájl nem alkalmazás archívum',
|
||||
'iTopUpdate:Error:BadItopProduct' => 'A frissítési fájl nem kompatibilis az alkalmazással',
|
||||
'iTopUpdate:Error:Copy' => 'Hiba: %1$s nem másolható %2$s -ba',
|
||||
'iTopUpdate:Error:FileNotFound' => 'Nincs meg a fájl',
|
||||
'iTopUpdate:Error:NoFile' => 'Nincs fájl megadva',
|
||||
'iTopUpdate:Error:InvalidToken' => 'Érvénytelen token',
|
||||
'iTopUpdate:Error:UpdateFailed' => 'Frissítés sikertelen',
|
||||
'iTopUpdate:Error:FileUploadMaxSizeTooSmall' => 'A feltöltés maximális mérete túl kicsinek tűnik a frissítéshez. Kérjük, módosítsa a PHP konfigurációt.',
|
||||
|
||||
'iTopUpdate:UI:RestoreArchive' => 'You can restore your application from the archive \'%1$s\'~~',
|
||||
'iTopUpdate:UI:RestoreBackup' => 'You can restore the database from \'%1$s\'~~',
|
||||
'iTopUpdate:UI:UpdateDone' => 'Upgrade successful~~',
|
||||
'Menu:iTopUpdate' => 'Application Upgrade~~',
|
||||
'Menu:iTopUpdate+' => 'Application Upgrade~~',
|
||||
'iTopUpdate:UI:RestoreArchive' => 'Visszaállíthatja az alkalmazást a %1$s archívumból',
|
||||
'iTopUpdate:UI:RestoreBackup' => 'Visszaállíthatja az adatbázist a %1$s archívumból',
|
||||
'iTopUpdate:UI:UpdateDone' => 'Frissítés sikeres',
|
||||
'Menu:iTopUpdate' => 'Alkalmazás frissítés',
|
||||
'Menu:iTopUpdate+' => 'Alkalmazás frissítés',
|
||||
|
||||
// Missing itop entries
|
||||
'Class:ModuleInstallation/Attribute:installed' => 'Installed on~~',
|
||||
'Class:ModuleInstallation/Attribute:name' => 'Name~~',
|
||||
'Class:ModuleInstallation/Attribute:version' => 'Version~~',
|
||||
'Class:ModuleInstallation/Attribute:comment' => 'Comment~~',
|
||||
'Class:ModuleInstallation/Attribute:installed' => 'Telepítve ',
|
||||
'Class:ModuleInstallation/Attribute:name' => 'Név',
|
||||
'Class:ModuleInstallation/Attribute:version' => 'Verzió',
|
||||
'Class:ModuleInstallation/Attribute:comment' => 'Megjegyzés',
|
||||
));
|
||||
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
/** @noinspection PhpUnhandledExceptionInspection */
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'itop-core-update/3.0.3',
|
||||
'itop-core-update/3.0.4',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'itop-datacenter-mgmt/3.0.3',
|
||||
'itop-datacenter-mgmt/3.0.4',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'itop-endusers-devices/3.0.3',
|
||||
'itop-endusers-devices/3.0.4',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -23,23 +23,23 @@
|
||||
// Class: FAQ
|
||||
//
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Class:FAQ' => 'FAQ~~',
|
||||
'Class:FAQ+' => 'Frequently asked questions~~',
|
||||
'Class:FAQ/Attribute:title' => 'Title~~',
|
||||
'Class:FAQ/Attribute:title+' => '~~',
|
||||
'Class:FAQ/Attribute:summary' => 'Summary~~',
|
||||
'Class:FAQ/Attribute:summary+' => '~~',
|
||||
'Class:FAQ/Attribute:description' => 'Description~~',
|
||||
'Class:FAQ/Attribute:description+' => '~~',
|
||||
'Class:FAQ/Attribute:category_id' => 'Category~~',
|
||||
'Class:FAQ/Attribute:category_id+' => '~~',
|
||||
'Class:FAQ/Attribute:category_name' => 'Category name~~',
|
||||
'Class:FAQ/Attribute:category_name+' => '~~',
|
||||
'Class:FAQ/Attribute:error_code' => 'Error code~~',
|
||||
'Class:FAQ/Attribute:error_code+' => '~~',
|
||||
'Class:FAQ/Attribute:key_words' => 'Key words~~',
|
||||
'Class:FAQ/Attribute:key_words+' => '~~',
|
||||
'Class:FAQ/Attribute:domains' => 'Domains~~',
|
||||
'Class:FAQ' => 'Tudástár',
|
||||
'Class:FAQ+' => 'Gyakran Ismételt Kérdések',
|
||||
'Class:FAQ/Attribute:title' => 'Cím',
|
||||
'Class:FAQ/Attribute:title+' => 'A tudástár címe',
|
||||
'Class:FAQ/Attribute:summary' => 'Összefoglaló',
|
||||
'Class:FAQ/Attribute:summary+' => 'Egy rövid leírás a témáról',
|
||||
'Class:FAQ/Attribute:description' => 'Leírás',
|
||||
'Class:FAQ/Attribute:description+' => 'Maga a tudástár cikk',
|
||||
'Class:FAQ/Attribute:category_id' => 'Kategória',
|
||||
'Class:FAQ/Attribute:category_id+' => '~~',
|
||||
'Class:FAQ/Attribute:category_name' => 'Kategória név',
|
||||
'Class:FAQ/Attribute:category_name+' => '~~',
|
||||
'Class:FAQ/Attribute:error_code' => 'Hibakód',
|
||||
'Class:FAQ/Attribute:error_code+' => '~~',
|
||||
'Class:FAQ/Attribute:key_words' => 'Kulcsszavak',
|
||||
'Class:FAQ/Attribute:key_words+' => 'A keresést segítő kulcsszavak',
|
||||
'Class:FAQ/Attribute:domains' => 'Hibatartomány',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -47,22 +47,22 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
//
|
||||
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Class:FAQCategory' => 'FAQ Category~~',
|
||||
'Class:FAQCategory+' => 'Category for FAQ~~',
|
||||
'Class:FAQCategory/Attribute:name' => 'Name~~',
|
||||
'Class:FAQCategory/Attribute:name+' => '~~',
|
||||
'Class:FAQCategory/Attribute:faq_list' => 'FAQs~~',
|
||||
'Class:FAQCategory/Attribute:faq_list+' => 'All the frequently asked questions related to this category~~',
|
||||
'Class:FAQCategory' => 'Tudástár kategória',
|
||||
'Class:FAQCategory+' => '',
|
||||
'Class:FAQCategory/Attribute:name' => 'Kategória név',
|
||||
'Class:FAQCategory/Attribute:name+' => '~~',
|
||||
'Class:FAQCategory/Attribute:faq_list' => 'Tudástárak',
|
||||
'Class:FAQCategory/Attribute:faq_list+' => 'Gyakori kérdések ehhez a kategóriához kapcsolódóan',
|
||||
));
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Menu:ProblemManagement' => 'Probléma menedzsment',
|
||||
'Menu:ProblemManagement+' => '',
|
||||
'Menu:Problem:Shortcuts' => 'Gyorsmenü',
|
||||
'Menu:FAQCategory' => 'FAQ categories~~',
|
||||
'Menu:FAQCategory+' => 'All FAQ categories~~',
|
||||
'Menu:FAQ' => 'FAQs~~',
|
||||
'Menu:FAQ+' => 'All FAQs~~',
|
||||
'Brick:Portal:FAQ:Menu' => 'FAQ~~',
|
||||
'Brick:Portal:FAQ:Title' => 'Frequently Asked Questions~~',
|
||||
'Brick:Portal:FAQ:Title+' => '<p>In a hurry?</p><p>Check out the list of most common questions and (maybe) find the expected answer right away.</p>~~',
|
||||
'Menu:ProblemManagement' => 'Problémakezelés',
|
||||
'Menu:ProblemManagement+' => '',
|
||||
'Menu:Problem:Shortcuts' => 'Gyorsgombok',
|
||||
'Menu:FAQCategory' => 'Tudástár kategória',
|
||||
'Menu:FAQCategory+' => 'Tudástár kategóriák',
|
||||
'Menu:FAQ' => 'Tudástár',
|
||||
'Menu:FAQ+' => 'Meglévő tudástárak',
|
||||
'Brick:Portal:FAQ:Menu' => 'Tudástár',
|
||||
'Brick:Portal:FAQ:Title' => 'Tudástárak',
|
||||
'Brick:Portal:FAQ:Title+' => '<p>Siet?</p><p>Nézze át a leggyakoribb kérdések listáját, és (talán) azonnal megtalálja a keresett választ.</p>',
|
||||
));
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'itop-faq-light/3.0.3',
|
||||
'itop-faq-light/3.0.4',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -22,10 +22,10 @@
|
||||
*/
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
// Errors
|
||||
'FilesInformation:Error:MissingFile' => 'Missing file: %1$s~~',
|
||||
'FilesInformation:Error:CorruptedFile' => 'File %1$s is corrupted~~',
|
||||
'FilesInformation:Error:ListCorruptedFile' => 'File(s) corrupted: %1$s~~',
|
||||
'FilesInformation:Error:CantWriteToFile' => 'Can not write to file %1$s~~',
|
||||
'FilesInformation:Error:MissingFile' => 'Hiányzó fájl: %1$s',
|
||||
'FilesInformation:Error:CorruptedFile' => 'A %1$s fájl megsérült',
|
||||
'FilesInformation:Error:ListCorruptedFile' => 'Sérült fájl(ok): %1$s',
|
||||
'FilesInformation:Error:CantWriteToFile' => 'A %1$s nem írható',
|
||||
));
|
||||
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
/** @noinspection PhpUnhandledExceptionInspection */
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'itop-files-information/3.0.3',
|
||||
'itop-files-information/3.0.4',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'itop-full-itil/3.0.3',
|
||||
'itop-full-itil/3.0.4',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -21,66 +21,64 @@
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
// Dictionary entries go here
|
||||
'Menu:iTopHub' => 'iTop Hub~~',
|
||||
'Menu:iTopHub:Register' => 'Connect to iTop Hub~~',
|
||||
'Menu:iTopHub:Register+' => 'Go to iTop Hub to update your '.ITOP_APPLICATION_SHORT.' instance~~',
|
||||
'Menu:iTopHub:Register:Description' => '<p>Get access to your community platform iTop Hub!</br>Find all the content and information you need, manage your instances through personalized tools & install more extensions.</br><br/>By connecting to the Hub from this page, you will push information about this '.ITOP_APPLICATION_SHORT.' instance into the Hub.</p>~~',
|
||||
'Menu:iTopHub:MyExtensions' => 'Deployed extensions~~',
|
||||
'Menu:iTopHub:MyExtensions+' => 'See the list of extensions deployed on this instance of '.ITOP_APPLICATION_SHORT.'~~',
|
||||
'Menu:iTopHub:BrowseExtensions' => 'Get extensions from iTop Hub~~',
|
||||
'Menu:iTopHub:BrowseExtensions+' => 'Browse for more extensions on iTop Hub~~',
|
||||
'Menu:iTopHub:BrowseExtensions:Description' => '<p>Look into iTop Hub’s store, your one stop place to find wonderful '.ITOP_APPLICATION_SHORT.' extensions !</br>Find the ones that will help you customize and adapt '.ITOP_APPLICATION_SHORT.' to your processes.</br><br/>By connecting to the Hub from this page, you will push information about this '.ITOP_APPLICATION_SHORT.' instance into the Hub.</p>~~',
|
||||
'iTopHub:GoBtn' => 'Go To iTop Hub~~',
|
||||
'iTopHub:CloseBtn' => 'Close~~',
|
||||
'iTopHub:GoBtn:Tooltip' => 'Jump to www.itophub.io~~',
|
||||
'iTopHub:OpenInNewWindow' => 'Open iTop Hub in a new window~~',
|
||||
'iTopHub:AutoSubmit' => 'Don\'t ask me again. Next time, go to iTop Hub automatically.~~',
|
||||
'UI:About:RemoteExtensionSource' => 'iTop Hub~~',
|
||||
'iTopHub:Explanation' => 'By clicking this button you will be redirected to iTop Hub.~~',
|
||||
// Dictionary entries go here
|
||||
'Menu:iTopHub' => 'iTop Hub',
|
||||
'Menu:iTopHub:Register' => 'Kapcsolódás az iTop Hub-ra',
|
||||
'Menu:iTopHub:Register+' => 'Továbblépés az iTop Hub-ra a '.ITOP_APPLICATION_SHORT.' példányának frissítéséhez',
|
||||
'Menu:iTopHub:Register:Description' => '<p>Szerezzen hozzáférést az iTop Hub közösségi platformjához!</br>Találja meg az összes szükséges tartalmat és információt, kezelje példányait személyre szabott eszközökkel és telepítsen további bővítményeket.</br><br/>Ha erről az oldalról csatlakozik a Hub-hoz, akkor a Hub-ra továbbítja az '.ITOP_APPLICATION_SHORT.' példányára vonatkozó információkat.</p>',
|
||||
'Menu:iTopHub:MyExtensions' => 'Telepített bővítmények',
|
||||
'Menu:iTopHub:MyExtensions+' => 'Lásd a '.ITOP_APPLICATION_SHORT.' példányon telepített bővítmények listáját',
|
||||
'Menu:iTopHub:BrowseExtensions' => 'Bővítmények beszerzése az iTop Hub-ról',
|
||||
'Menu:iTopHub:BrowseExtensions+' => 'További bővítmények keresése az iTop Hub-on',
|
||||
'Menu:iTopHub:BrowseExtensions:Description' => '<p>Nézze meg az iTop Hub áruházát, az Ön egyablakos helyét, ahol csodálatos '.ITOP_APPLICATION_SHORT.' bővítményeket talál!</br>Keresse meg azokat, amelyek segítenek a '.ITOP_APPLICATION_SHORT.' testreszabásában és az Ön folyamataihoz való igazításában.</br><br/>Ha erről az oldalról csatlakozik a Hub-hoz, akkor a Hub-ra továbbítja a '.ITOP_APPLICATION_SHORT.' példányára vonatkozó információkat.</p>',
|
||||
'iTopHub:GoBtn' => 'Tovább az iTop Hub-ra',
|
||||
'iTopHub:CloseBtn' => 'Bezárás',
|
||||
'iTopHub:GoBtn:Tooltip' => 'Ugrás a www.itophub.io -ra',
|
||||
'iTopHub:OpenInNewWindow' => 'iTop Hub megnyitása új ablakban',
|
||||
'iTopHub:AutoSubmit' => 'Ne kérdezze újra. Legközelebb menjen az iTop Hub-hoz automatikusan.',
|
||||
'UI:About:RemoteExtensionSource' => 'iTop Hub',
|
||||
'iTopHub:Explanation' => 'Erre a gombra kattintva átirányítjuk Önt az iTop Hub oldalára.',
|
||||
|
||||
'iTopHub:BackupFreeDiskSpaceIn' => '%1$s free disk space in %2$s.~~',
|
||||
'iTopHub:FailedToCheckFreeDiskSpace' => 'Failed to check free disk space.~~',
|
||||
'iTopHub:BackupOk' => 'Backup Ok.~~',
|
||||
'iTopHub:BackupFailed' => 'Backup failed!~~',
|
||||
'iTopHub:Landing:Status' => 'Deployment status~~',
|
||||
'iTopHub:Landing:Install' => 'Deploying extensions...~~',
|
||||
'iTopHub:CompiledOK' => 'Compilation successful.~~',
|
||||
'iTopHub:ConfigurationSafelyReverted' => 'Error detected during deployment!<br/>'.ITOP_APPLICATION_SHORT.' configuration has NOT been modified.~~',
|
||||
'iTopHub:FailAuthent' => 'Authentication failed for this action.~~',
|
||||
'iTopHub:BackupFreeDiskSpaceIn' => '%1$s szabad lemezterület %2$s -ben',
|
||||
'iTopHub:FailedToCheckFreeDiskSpace' => 'Nem sikerült ellenőrizni a szabad lemezterületet.',
|
||||
'iTopHub:BackupOk' => 'Biztonsági mentés Ok.',
|
||||
'iTopHub:BackupFailed' => 'Biztonsági mentés sikertelen!',
|
||||
'iTopHub:Landing:Status' => 'Telepítés állapota',
|
||||
'iTopHub:Landing:Install' => 'Bővítmények telepítése...',
|
||||
'iTopHub:CompiledOK' => 'Összeállítás sikeres',
|
||||
'iTopHub:ConfigurationSafelyReverted' => 'Hiba történt telepítés közben!<br/>Az '.ITOP_APPLICATION_SHORT.' konfigurációja NEM lett elmentve.',
|
||||
'iTopHub:FailAuthent' => 'Azonosítás sikertelen ennél a műveletnél.',
|
||||
|
||||
'iTopHub:InstalledExtensions' => 'Extensions deployed on this instance~~',
|
||||
'iTopHub:ExtensionCategory:Manual' => 'Extensions deployed manually~~',
|
||||
'iTopHub:ExtensionCategory:Manual+' => 'The following extensions have been deployed by copying them manually in the %1$s directory of '.ITOP_APPLICATION_SHORT.':~~',
|
||||
'iTopHub:ExtensionCategory:Remote' => 'Extensions deployed from iTop Hub~~',
|
||||
'iTopHub:ExtensionCategory:Remote+' => 'The following extensions have been deployed from iTop Hub:~~',
|
||||
'iTopHub:NoExtensionInThisCategory' => 'There is no extension in this category~~',
|
||||
'iTopHub:NoExtensionInThisCategory+' => 'Browse iTop Hub to find the extensions that will help you customize and adapt '.ITOP_APPLICATION_SHORT.' to your processes !~~',
|
||||
'iTopHub:ExtensionNotInstalled' => 'Not installed~~',
|
||||
'iTopHub:GetMoreExtensions' => 'Get extensions from iTop Hub...~~',
|
||||
'iTopHub:InstalledExtensions' => 'A bővítmények feltelepültek erre a példányra',
|
||||
'iTopHub:ExtensionCategory:Manual' => 'A bővítmények manuálisan telepítve',
|
||||
'iTopHub:ExtensionCategory:Manual+' => 'A következő bővítményeket kézi másolással telepítettük a '.ITOP_APPLICATION_SHORT.' %1$s könyvtárába:',
|
||||
'iTopHub:ExtensionCategory:Remote' => 'Az iTop Hub-ról telepített bővítmények',
|
||||
'iTopHub:ExtensionCategory:Remote+' => 'A következő bővítményeket telepítettük az iTop Hub-ról:',
|
||||
'iTopHub:NoExtensionInThisCategory' => 'Ebben a kategóriában nincs bővítmény',
|
||||
'iTopHub:NoExtensionInThisCategory+' => 'Böngésszen az iTop Hub-ban, hogy megtalálja azokat a bővítményeket, amelyek segítenek testreszabni és az Ön folyamataihoz igazítani az '.ITOP_APPLICATION_SHORT.'-ot !',
|
||||
'iTopHub:ExtensionNotInstalled' => 'Nincs telepítve',
|
||||
'iTopHub:GetMoreExtensions' => 'Bővítmények beszerzése az iTop Hub-ról...',
|
||||
|
||||
'iTopHub:LandingWelcome' => 'Congratulations! The following extensions were downloaded from iTop Hub and deployed into your '.ITOP_APPLICATION_SHORT.'.~~',
|
||||
'iTopHub:GoBackToITopBtn' => 'Go Back to '.ITOP_APPLICATION_SHORT.'~~',
|
||||
'iTopHub:Uncompressing' => 'Uncompressing extensions...~~',
|
||||
'iTopHub:InstallationWelcome' => 'Installation of the extensions downloaded from iTop Hub~~',
|
||||
'iTopHub:DBBackupLabel' => 'Instance backup~~',
|
||||
'iTopHub:DBBackupSentence' => 'Do a backup of the database and '.ITOP_APPLICATION_SHORT.' configuration before updating~~',
|
||||
'iTopHub:DeployBtn' => 'Deploy !~~',
|
||||
'iTopHub:DatabaseBackupProgress' => 'Instance backup...~~',
|
||||
'iTopHub:LandingWelcome' => 'Gratulálunk! A következő bővítményeket letöltöttük az iTop Hub-ról, és telepítettük az Ön '.ITOP_APPLICATION_SHORT.' példányára.',
|
||||
'iTopHub:GoBackToITopBtn' => 'Vissza az '.ITOP_APPLICATION_SHORT.'-hoz',
|
||||
'iTopHub:Uncompressing' => 'Bővítmények kicsomagolása...',
|
||||
'iTopHub:InstallationWelcome' => 'Az iTop Hub-ról letöltött bővítmények telepítése',
|
||||
'iTopHub:DBBackupLabel' => 'Példány mentés',
|
||||
'iTopHub:DBBackupSentence' => 'A frissítés előtt biztonsági mentést készítünk az adatbázisról és az '.ITOP_APPLICATION_SHORT.' konfigurációról.',
|
||||
'iTopHub:DeployBtn' => 'Telepítés !',
|
||||
'iTopHub:DatabaseBackupProgress' => 'Példány mentés...',
|
||||
|
||||
'iTopHub:InstallationEffect:Install' => 'Version: %1$s will be installed.~~',
|
||||
'iTopHub:InstallationEffect:NoChange' => 'Version: %1$s already installed. Nothing will change.~~',
|
||||
'iTopHub:InstallationEffect:Upgrade' => 'Will be <b>upgraded</b> from version %1$s to version %2$s.~~',
|
||||
'iTopHub:InstallationEffect:Downgrade' => 'Will be <b>DOWNGRADED</b> from version %1$s to version %2$s.~~',
|
||||
'iTopHub:InstallationProgress:DatabaseBackup' => ITOP_APPLICATION_SHORT.' Instance backup...~~',
|
||||
'iTopHub:InstallationProgress:ExtensionsInstallation' => 'Installation of the extensions~~',
|
||||
'iTopHub:InstallationEffect:MissingDependencies' => 'This extension cannot be installed because of unmet dependencies.~~',
|
||||
'iTopHub:InstallationEffect:MissingDependencies_Details' => 'The extension requires the module(s): %1$s~~',
|
||||
'iTopHub:InstallationProgress:InstallationSuccessful' => 'Installation successful!~~',
|
||||
'iTopHub:InstallationEffect:Install' => 'Verzió: %1$s lesz telepítve.',
|
||||
'iTopHub:InstallationEffect:NoChange' => 'Verzió: %1$s már telepítve. Nincs változás.',
|
||||
'iTopHub:InstallationEffect:Upgrade' => '<b>Frissítve</b> lesz %1$s verzióról %2$s verzióra.',
|
||||
'iTopHub:InstallationEffect:Downgrade' => '<b>Lebutítva</b> lesz %1$s verzióról %2$s verzióra.',
|
||||
'iTopHub:InstallationProgress:DatabaseBackup' => ITOP_APPLICATION_SHORT.' példány backup...',
|
||||
'iTopHub:InstallationProgress:ExtensionsInstallation' => 'A bővítmény telepítése',
|
||||
'iTopHub:InstallationEffect:MissingDependencies' => 'Ez a bővítmény nem telepíthető nem teljesített függőségek miatt.',
|
||||
'iTopHub:InstallationEffect:MissingDependencies_Details' => 'A bővítményhez további modulok szükségesek: %1$s',
|
||||
'iTopHub:InstallationProgress:InstallationSuccessful' => 'A telepítés sikeres',
|
||||
|
||||
'iTopHub:InstallationStatus:Installed_Version' => '%1$s version: %2$s.~~',
|
||||
'iTopHub:InstallationStatus:Installed' => 'Installed~~',
|
||||
'iTopHub:InstallationStatus:Version_NotInstalled' => 'Version %1$s <b>NOT</b> installed.~~',
|
||||
'iTopHub:InstallationStatus:Installed_Version' => '%1$s verzió: %2$s.',
|
||||
'iTopHub:InstallationStatus:Installed' => 'Telepítve',
|
||||
'iTopHub:InstallationStatus:Version_NotInstalled' => 'A %1$s verzió <b>NINCS</b> telepítve.',
|
||||
));
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ class HubConnectorPage extends NiceWebPage
|
||||
parent::__construct($sTitle);
|
||||
|
||||
$this->no_cache();
|
||||
$this->add_xframe_options();
|
||||
$this->add_http_headers();
|
||||
|
||||
$sImagesDir = utils::GetAbsoluteUrlAppRoot().'images';
|
||||
$sModuleImagesDir = utils::GetAbsoluteUrlModulesRoot().'itop-hub-connector/images';
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'itop-hub-connector/3.0.3',
|
||||
'itop-hub-connector/3.0.4',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -21,27 +21,27 @@
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Menu:IncidentManagement' => 'Incident Management~~',
|
||||
'Menu:IncidentManagement+' => 'Incident Management~~',
|
||||
'Menu:Incident:Overview' => 'Overview~~',
|
||||
'Menu:Incident:Overview+' => 'Overview~~',
|
||||
'Menu:NewIncident' => 'New incident~~',
|
||||
'Menu:NewIncident+' => 'Create a new incident ticket~~',
|
||||
'Menu:SearchIncidents' => 'Search for incidents~~',
|
||||
'Menu:SearchIncidents+' => 'Search for incident tickets~~',
|
||||
'Menu:Incident:Shortcuts' => 'Shortcuts~~',
|
||||
'Menu:Incident:Shortcuts+' => '~~',
|
||||
'Menu:Incident:MyIncidents' => 'Incidents assigned to me~~',
|
||||
'Menu:Incident:MyIncidents+' => 'Incidents assigned to me (as Agent)~~',
|
||||
'Menu:Incident:EscalatedIncidents' => 'Escalated incidents~~',
|
||||
'Menu:Incident:EscalatedIncidents+' => 'Escalated incidents~~',
|
||||
'Menu:Incident:OpenIncidents' => 'All open incidents~~',
|
||||
'Menu:Incident:OpenIncidents+' => 'All open incidents~~',
|
||||
'UI-IncidentManagementOverview-IncidentByPriority-last-14-days' => 'Last 14 days incident per priority~~',
|
||||
'UI-IncidentManagementOverview-Last-14-days' => 'Last 14 days number of incidents~~',
|
||||
'UI-IncidentManagementOverview-OpenIncidentByStatus' => 'Open incidents by status~~',
|
||||
'UI-IncidentManagementOverview-OpenIncidentByAgent' => 'Open incidents by agent~~',
|
||||
'UI-IncidentManagementOverview-OpenIncidentByCustomer' => 'Open incidents by customer~~',
|
||||
'Menu:IncidentManagement' => 'Incidenskezelés',
|
||||
'Menu:IncidentManagement+' => '',
|
||||
'Menu:Incident:Overview' => 'Áttekintő',
|
||||
'Menu:Incident:Overview+' => 'Áttekintő oldal',
|
||||
'Menu:NewIncident' => 'Új incidens',
|
||||
'Menu:NewIncident+' => 'Új incidens hibajegy létrehozása',
|
||||
'Menu:SearchIncidents' => 'Incidensek keresése',
|
||||
'Menu:SearchIncidents+' => 'Incidens hibajegyek keresése',
|
||||
'Menu:Incident:Shortcuts' => 'Gyorsgombok',
|
||||
'Menu:Incident:Shortcuts+' => 'Gyorselérés gombok',
|
||||
'Menu:Incident:MyIncidents' => 'Hozzám rendelt incidensek',
|
||||
'Menu:Incident:MyIncidents+' => 'Hozzám rendelt incidensek (ügyintézőként)',
|
||||
'Menu:Incident:EscalatedIncidents' => 'Eszkalált incidensek',
|
||||
'Menu:Incident:EscalatedIncidents+' => 'Eszkalált incidensek',
|
||||
'Menu:Incident:OpenIncidents' => 'Nyitott incidensek',
|
||||
'Menu:Incident:OpenIncidents+' => 'Nyitott incidensek',
|
||||
'UI-IncidentManagementOverview-IncidentByPriority-last-14-days' => 'Az elmúlt 14 nap incidensei prioritásuk szerint',
|
||||
'UI-IncidentManagementOverview-Last-14-days' => 'Az elmúlt 14 nap incidensei',
|
||||
'UI-IncidentManagementOverview-OpenIncidentByStatus' => 'Nyitott incidensek állapotuk szerint',
|
||||
'UI-IncidentManagementOverview-OpenIncidentByAgent' => 'Nyitott incidensek ügyintézőnként',
|
||||
'UI-IncidentManagementOverview-OpenIncidentByCustomer' => 'Nyitott incidensek ügyfelenként',
|
||||
));
|
||||
|
||||
|
||||
@@ -60,179 +60,179 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
//
|
||||
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Class:Incident' => 'Incident~~',
|
||||
'Class:Incident+' => '~~',
|
||||
'Class:Incident/Attribute:status' => 'Status~~',
|
||||
'Class:Incident/Attribute:status+' => '~~',
|
||||
'Class:Incident/Attribute:status/Value:new' => 'New~~',
|
||||
'Class:Incident/Attribute:status/Value:new+' => '~~',
|
||||
'Class:Incident/Attribute:status/Value:escalated_tto' => 'Escalated TTO~~',
|
||||
'Class:Incident/Attribute:status/Value:escalated_tto+' => '~~',
|
||||
'Class:Incident/Attribute:status/Value:assigned' => 'Assigned~~',
|
||||
'Class:Incident/Attribute:status/Value:assigned+' => '~~',
|
||||
'Class:Incident/Attribute:status/Value:escalated_ttr' => 'Escalated TTR~~',
|
||||
'Class:Incident/Attribute:status/Value:escalated_ttr+' => '~~',
|
||||
'Class:Incident/Attribute:status/Value:waiting_for_approval' => 'Waiting for approval~~',
|
||||
'Class:Incident/Attribute:status/Value:waiting_for_approval+' => '~~',
|
||||
'Class:Incident/Attribute:status/Value:pending' => 'Pending~~',
|
||||
'Class:Incident/Attribute:status/Value:pending+' => '~~',
|
||||
'Class:Incident/Attribute:status/Value:resolved' => 'Resolved~~',
|
||||
'Class:Incident/Attribute:status/Value:resolved+' => '~~',
|
||||
'Class:Incident/Attribute:status/Value:closed' => 'Closed~~',
|
||||
'Class:Incident/Attribute:status/Value:closed+' => '~~',
|
||||
'Class:Incident/Attribute:impact' => 'Impact~~',
|
||||
'Class:Incident/Attribute:impact+' => '~~',
|
||||
'Class:Incident/Attribute:impact/Value:1' => 'A department~~',
|
||||
'Class:Incident/Attribute:impact/Value:1+' => '~~',
|
||||
'Class:Incident/Attribute:impact/Value:2' => 'A service~~',
|
||||
'Class:Incident/Attribute:impact/Value:2+' => '~~',
|
||||
'Class:Incident/Attribute:impact/Value:3' => 'A person~~',
|
||||
'Class:Incident/Attribute:impact/Value:3+' => '~~',
|
||||
'Class:Incident/Attribute:priority' => 'Priority~~',
|
||||
'Class:Incident/Attribute:priority+' => '~~',
|
||||
'Class:Incident/Attribute:priority/Value:1' => 'critical~~',
|
||||
'Class:Incident/Attribute:priority/Value:1+' => 'critical~~',
|
||||
'Class:Incident/Attribute:priority/Value:2' => 'high~~',
|
||||
'Class:Incident/Attribute:priority/Value:2+' => 'high~~',
|
||||
'Class:Incident/Attribute:priority/Value:3' => 'medium~~',
|
||||
'Class:Incident/Attribute:priority/Value:3+' => 'medium~~',
|
||||
'Class:Incident/Attribute:priority/Value:4' => 'low~~',
|
||||
'Class:Incident/Attribute:priority/Value:4+' => 'low~~',
|
||||
'Class:Incident/Attribute:urgency' => 'Urgency~~',
|
||||
'Class:Incident/Attribute:urgency+' => '~~',
|
||||
'Class:Incident/Attribute:urgency/Value:1' => 'critical~~',
|
||||
'Class:Incident/Attribute:urgency/Value:1+' => 'critical~~',
|
||||
'Class:Incident/Attribute:urgency/Value:2' => 'high~~',
|
||||
'Class:Incident/Attribute:urgency/Value:2+' => 'high~~',
|
||||
'Class:Incident/Attribute:urgency/Value:3' => 'medium~~',
|
||||
'Class:Incident/Attribute:urgency/Value:3+' => 'medium~~',
|
||||
'Class:Incident/Attribute:urgency/Value:4' => 'low~~',
|
||||
'Class:Incident/Attribute:urgency/Value:4+' => 'low~~',
|
||||
'Class:Incident/Attribute:origin' => 'Origin~~',
|
||||
'Class:Incident/Attribute:origin+' => '~~',
|
||||
'Class:Incident/Attribute:origin/Value:mail' => 'email~~',
|
||||
'Class:Incident/Attribute:origin/Value:mail+' => 'email~~',
|
||||
'Class:Incident/Attribute:origin/Value:monitoring' => 'monitoring~~',
|
||||
'Class:Incident/Attribute:origin/Value:monitoring+' => 'monitoring~~',
|
||||
'Class:Incident/Attribute:origin/Value:phone' => 'phone~~',
|
||||
'Class:Incident/Attribute:origin/Value:phone+' => 'phone~~',
|
||||
'Class:Incident/Attribute:origin/Value:portal' => 'portal~~',
|
||||
'Class:Incident/Attribute:origin/Value:portal+' => 'portal~~',
|
||||
'Class:Incident/Attribute:service_id' => 'Service~~',
|
||||
'Class:Incident/Attribute:service_id+' => '~~',
|
||||
'Class:Incident/Attribute:service_name' => 'Service name~~',
|
||||
'Class:Incident/Attribute:service_name+' => '~~',
|
||||
'Class:Incident/Attribute:servicesubcategory_id' => 'Service subcategory~~',
|
||||
'Class:Incident/Attribute:servicesubcategory_id+' => '~~',
|
||||
'Class:Incident/Attribute:servicesubcategory_name' => 'Service subcategory name~~',
|
||||
'Class:Incident/Attribute:servicesubcategory_name+' => '~~',
|
||||
'Class:Incident/Attribute:escalation_flag' => 'Hot Flag~~',
|
||||
'Class:Incident/Attribute:escalation_flag+' => '~~',
|
||||
'Class:Incident/Attribute:escalation_flag/Value:no' => 'No~~',
|
||||
'Class:Incident/Attribute:escalation_flag/Value:no+' => 'No~~',
|
||||
'Class:Incident/Attribute:escalation_flag/Value:yes' => 'Yes~~',
|
||||
'Class:Incident/Attribute:escalation_flag/Value:yes+' => 'Yes~~',
|
||||
'Class:Incident/Attribute:escalation_reason' => 'Hot reason~~',
|
||||
'Class:Incident/Attribute:escalation_reason+' => '~~',
|
||||
'Class:Incident/Attribute:assignment_date' => 'Assignment date~~',
|
||||
'Class:Incident/Attribute:assignment_date+' => '~~',
|
||||
'Class:Incident/Attribute:resolution_date' => 'Resolution date~~',
|
||||
'Class:Incident/Attribute:resolution_date+' => '~~',
|
||||
'Class:Incident/Attribute:last_pending_date' => 'Last pending date~~',
|
||||
'Class:Incident/Attribute:last_pending_date+' => '~~',
|
||||
'Class:Incident/Attribute:cumulatedpending' => 'Cumulated pending~~',
|
||||
'Class:Incident/Attribute:cumulatedpending+' => '~~',
|
||||
'Class:Incident/Attribute:tto' => 'tto~~',
|
||||
'Class:Incident/Attribute:tto+' => '~~',
|
||||
'Class:Incident/Attribute:ttr' => 'ttr~~',
|
||||
'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 passed~~',
|
||||
'Class:Incident/Attribute:sla_tto_passed+' => '~~',
|
||||
'Class:Incident/Attribute:sla_tto_over' => 'SLA tto over~~',
|
||||
'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 passed~~',
|
||||
'Class:Incident/Attribute:sla_ttr_passed+' => '~~',
|
||||
'Class:Incident/Attribute:sla_ttr_over' => 'SLA ttr over~~',
|
||||
'Class:Incident/Attribute:sla_ttr_over+' => '~~',
|
||||
'Class:Incident/Attribute:time_spent' => 'Resolution delay~~',
|
||||
'Class:Incident/Attribute:time_spent+' => '~~',
|
||||
'Class:Incident/Attribute:resolution_code' => 'Resolution code~~',
|
||||
'Class:Incident/Attribute:resolution_code+' => '~~',
|
||||
'Class:Incident/Attribute:resolution_code/Value:assistance' => 'assistance~~',
|
||||
'Class:Incident/Attribute:resolution_code/Value:assistance+' => 'assistance~~',
|
||||
'Class:Incident/Attribute:resolution_code/Value:bug fixed' => 'bug fixed~~',
|
||||
'Class:Incident/Attribute:resolution_code/Value:bug fixed+' => 'bug fixed~~',
|
||||
'Class:Incident/Attribute:resolution_code/Value:hardware repair' => 'hardware repair~~',
|
||||
'Class:Incident/Attribute:resolution_code/Value:hardware repair+' => 'hardware repair~~',
|
||||
'Class:Incident/Attribute:resolution_code/Value:other' => 'other~~',
|
||||
'Class:Incident/Attribute:resolution_code/Value:other+' => 'other~~',
|
||||
'Class:Incident/Attribute:resolution_code/Value:software patch' => 'software patch~~',
|
||||
'Class:Incident/Attribute:resolution_code/Value:software patch+' => 'software patch~~',
|
||||
'Class:Incident/Attribute:resolution_code/Value:system update' => 'system update~~',
|
||||
'Class:Incident/Attribute:resolution_code/Value:system update+' => 'system update~~',
|
||||
'Class:Incident/Attribute:resolution_code/Value:training' => 'training~~',
|
||||
'Class:Incident/Attribute:resolution_code/Value:training+' => 'training~~',
|
||||
'Class:Incident/Attribute:solution' => 'Solution~~',
|
||||
'Class:Incident/Attribute:solution+' => '~~',
|
||||
'Class:Incident/Attribute:pending_reason' => 'Pending reason~~',
|
||||
'Class:Incident/Attribute:pending_reason+' => '~~',
|
||||
'Class:Incident/Attribute:parent_incident_id' => 'Parent incident~~',
|
||||
'Class:Incident/Attribute:parent_incident_id+' => '~~',
|
||||
'Class:Incident/Attribute:parent_incident_ref' => 'Parent incident ref~~',
|
||||
'Class:Incident/Attribute:parent_incident_ref+' => '~~',
|
||||
'Class:Incident/Attribute:parent_change_id' => 'Parent change~~',
|
||||
'Class:Incident/Attribute:parent_change_id+' => '~~',
|
||||
'Class:Incident/Attribute:parent_change_ref' => 'Parent change ref~~',
|
||||
'Class:Incident/Attribute:parent_change_ref+' => '~~',
|
||||
'Class:Incident/Attribute:parent_problem_id' => 'Parent problem id~~',
|
||||
'Class:Incident/Attribute:parent_problem_id+' => '~~',
|
||||
'Class:Incident/Attribute:parent_problem_ref' => 'Parent problem ref~~',
|
||||
'Class:Incident/Attribute:parent_problem_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~~',
|
||||
'Class:Incident/Attribute:public_log+' => '~~',
|
||||
'Class:Incident/Attribute:user_satisfaction' => 'User satisfaction~~',
|
||||
'Class:Incident/Attribute:user_satisfaction+' => '~~',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:1' => 'Very satisfied~~',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:1+' => 'Very satisfied~~',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:2' => 'Fairly statisfied~~',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:2+' => 'Fairly statisfied~~',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:3' => 'Rather Dissatified~~',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:3+' => 'Rather Dissatified~~',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:4' => 'Very Dissatisfied~~',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:4+' => 'Very Dissatisfied~~',
|
||||
'Class:Incident/Attribute:user_comment' => 'User comment~~',
|
||||
'Class:Incident/Attribute:user_comment+' => '~~',
|
||||
'Class:Incident/Attribute:parent_incident_id_friendlyname' => 'parent_incident_id_friendlyname~~',
|
||||
'Class:Incident/Attribute:parent_incident_id_friendlyname+' => '~~',
|
||||
'Class:Incident/Stimulus:ev_assign' => 'Assign~~',
|
||||
'Class:Incident/Stimulus:ev_assign+' => '~~',
|
||||
'Class:Incident/Stimulus:ev_reassign' => 'Re-assign~~',
|
||||
'Class:Incident/Stimulus:ev_reassign+' => '~~',
|
||||
'Class:Incident/Stimulus:ev_pending' => 'Pending~~',
|
||||
'Class:Incident/Stimulus:ev_pending+' => '~~',
|
||||
'Class:Incident/Stimulus:ev_timeout' => 'Timeout~~',
|
||||
'Class:Incident/Stimulus:ev_timeout+' => '~~',
|
||||
'Class:Incident/Stimulus:ev_autoresolve' => 'Automatic resolve~~',
|
||||
'Class:Incident/Stimulus:ev_autoresolve+' => '~~',
|
||||
'Class:Incident/Stimulus:ev_autoclose' => 'Automatic close~~',
|
||||
'Class:Incident/Stimulus:ev_autoclose+' => '~~',
|
||||
'Class:Incident/Stimulus:ev_resolve' => 'Mark as resolved~~',
|
||||
'Class:Incident/Stimulus:ev_resolve+' => '~~',
|
||||
'Class:Incident/Stimulus:ev_close' => 'Close this request~~',
|
||||
'Class:Incident/Stimulus:ev_close+' => '~~',
|
||||
'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' => 'Incidens',
|
||||
'Class:Incident+' => '~~',
|
||||
'Class:Incident/Attribute:status' => 'Állapot',
|
||||
'Class:Incident/Attribute:status+' => '~~',
|
||||
'Class:Incident/Attribute:status/Value:new' => 'Új',
|
||||
'Class:Incident/Attribute:status/Value:new+' => '~~',
|
||||
'Class:Incident/Attribute:status/Value:escalated_tto' => 'Eszkalált TTO',
|
||||
'Class:Incident/Attribute:status/Value:escalated_tto+' => '~~',
|
||||
'Class:Incident/Attribute:status/Value:assigned' => 'Hozzárendelt',
|
||||
'Class:Incident/Attribute:status/Value:assigned+' => '~~',
|
||||
'Class:Incident/Attribute:status/Value:escalated_ttr' => 'Eszkalált TTR',
|
||||
'Class:Incident/Attribute:status/Value:escalated_ttr+' => '~~',
|
||||
'Class:Incident/Attribute:status/Value:waiting_for_approval' => 'Jóváhagyásra vár',
|
||||
'Class:Incident/Attribute:status/Value:waiting_for_approval+' => '~~',
|
||||
'Class:Incident/Attribute:status/Value:pending' => 'Függőben',
|
||||
'Class:Incident/Attribute:status/Value:pending+' => '~~',
|
||||
'Class:Incident/Attribute:status/Value:resolved' => 'Megoldva',
|
||||
'Class:Incident/Attribute:status/Value:resolved+' => '~~',
|
||||
'Class:Incident/Attribute:status/Value:closed' => 'Lezárt',
|
||||
'Class:Incident/Attribute:status/Value:closed+' => '~~',
|
||||
'Class:Incident/Attribute:impact' => 'Hatása',
|
||||
'Class:Incident/Attribute:impact+' => '~~',
|
||||
'Class:Incident/Attribute:impact/Value:1' => 'Részlegre',
|
||||
'Class:Incident/Attribute:impact/Value:1+' => '~~',
|
||||
'Class:Incident/Attribute:impact/Value:2' => 'Szolgáltatásra',
|
||||
'Class:Incident/Attribute:impact/Value:2+' => '~~',
|
||||
'Class:Incident/Attribute:impact/Value:3' => 'Személyre',
|
||||
'Class:Incident/Attribute:impact/Value:3+' => '~~',
|
||||
'Class:Incident/Attribute:priority' => 'Prioritás',
|
||||
'Class:Incident/Attribute:priority+' => '~~',
|
||||
'Class:Incident/Attribute:priority/Value:1' => 'Kritikus',
|
||||
'Class:Incident/Attribute:priority/Value:1+' => 'critical~~',
|
||||
'Class:Incident/Attribute:priority/Value:2' => 'Magas',
|
||||
'Class:Incident/Attribute:priority/Value:2+' => 'high~~',
|
||||
'Class:Incident/Attribute:priority/Value:3' => 'Közepes',
|
||||
'Class:Incident/Attribute:priority/Value:3+' => 'medium~~',
|
||||
'Class:Incident/Attribute:priority/Value:4' => 'Alacsony',
|
||||
'Class:Incident/Attribute:priority/Value:4+' => 'low~~',
|
||||
'Class:Incident/Attribute:urgency' => 'Sürgősség',
|
||||
'Class:Incident/Attribute:urgency+' => '~~',
|
||||
'Class:Incident/Attribute:urgency/Value:1' => 'Nem várhat',
|
||||
'Class:Incident/Attribute:urgency/Value:1+' => 'critical~~',
|
||||
'Class:Incident/Attribute:urgency/Value:2' => 'Nagyon sürgős',
|
||||
'Class:Incident/Attribute:urgency/Value:2+' => 'high~~',
|
||||
'Class:Incident/Attribute:urgency/Value:3' => 'Sürgős',
|
||||
'Class:Incident/Attribute:urgency/Value:3+' => 'sürgős',
|
||||
'Class:Incident/Attribute:urgency/Value:4' => 'Nem sürgős',
|
||||
'Class:Incident/Attribute:urgency/Value:4+' => 'low~~',
|
||||
'Class:Incident/Attribute:origin' => 'Eredet',
|
||||
'Class:Incident/Attribute:origin+' => '~~',
|
||||
'Class:Incident/Attribute:origin/Value:mail' => 'Email',
|
||||
'Class:Incident/Attribute:origin/Value:mail+' => 'email~~',
|
||||
'Class:Incident/Attribute:origin/Value:monitoring' => 'Felügyelet',
|
||||
'Class:Incident/Attribute:origin/Value:monitoring+' => 'monitoring~~',
|
||||
'Class:Incident/Attribute:origin/Value:phone' => 'Telefon',
|
||||
'Class:Incident/Attribute:origin/Value:phone+' => 'phone~~',
|
||||
'Class:Incident/Attribute:origin/Value:portal' => 'Portál',
|
||||
'Class:Incident/Attribute:origin/Value:portal+' => 'portal~~',
|
||||
'Class:Incident/Attribute:service_id' => 'Szolgáltatás',
|
||||
'Class:Incident/Attribute:service_id+' => '~~',
|
||||
'Class:Incident/Attribute:service_name' => 'Szolgáltatás név',
|
||||
'Class:Incident/Attribute:service_name+' => '~~',
|
||||
'Class:Incident/Attribute:servicesubcategory_id' => 'Szolgáltatás alkategória',
|
||||
'Class:Incident/Attribute:servicesubcategory_id+' => '~~',
|
||||
'Class:Incident/Attribute:servicesubcategory_name' => 'Szolgáltatás alkategória név',
|
||||
'Class:Incident/Attribute:servicesubcategory_name+' => '~~',
|
||||
'Class:Incident/Attribute:escalation_flag' => 'Sürgősség jelzés',
|
||||
'Class:Incident/Attribute:escalation_flag+' => '~~',
|
||||
'Class:Incident/Attribute:escalation_flag/Value:no' => 'Nem',
|
||||
'Class:Incident/Attribute:escalation_flag/Value:no+' => 'No~~',
|
||||
'Class:Incident/Attribute:escalation_flag/Value:yes' => 'Igen',
|
||||
'Class:Incident/Attribute:escalation_flag/Value:yes+' => 'Yes~~',
|
||||
'Class:Incident/Attribute:escalation_reason' => 'Sürgősségi ok',
|
||||
'Class:Incident/Attribute:escalation_reason+' => '~~',
|
||||
'Class:Incident/Attribute:assignment_date' => 'Megbízási dátum',
|
||||
'Class:Incident/Attribute:assignment_date+' => '~~',
|
||||
'Class:Incident/Attribute:resolution_date' => 'Megoldási dátum',
|
||||
'Class:Incident/Attribute:resolution_date+' => '~~',
|
||||
'Class:Incident/Attribute:last_pending_date' => 'Függőben lévőség dátum',
|
||||
'Class:Incident/Attribute:last_pending_date+' => '~~',
|
||||
'Class:Incident/Attribute:cumulatedpending' => 'Kumulált függőben lévő',
|
||||
'Class:Incident/Attribute:cumulatedpending+' => '~~',
|
||||
'Class:Incident/Attribute:tto' => 'TTO',
|
||||
'Class:Incident/Attribute:tto+' => '~~',
|
||||
'Class:Incident/Attribute:ttr' => 'TTR',
|
||||
'Class:Incident/Attribute:ttr+' => '~~',
|
||||
'Class:Incident/Attribute:tto_escalation_deadline' => 'TTO határidő',
|
||||
'Class:Incident/Attribute:tto_escalation_deadline+' => '~~',
|
||||
'Class:Incident/Attribute:sla_tto_passed' => 'SLA TTO letelve',
|
||||
'Class:Incident/Attribute:sla_tto_passed+' => '~~',
|
||||
'Class:Incident/Attribute:sla_tto_over' => 'SLA TTO túllépve',
|
||||
'Class:Incident/Attribute:sla_tto_over+' => '~~',
|
||||
'Class:Incident/Attribute:ttr_escalation_deadline' => 'TTR határidő',
|
||||
'Class:Incident/Attribute:ttr_escalation_deadline+' => '~~',
|
||||
'Class:Incident/Attribute:sla_ttr_passed' => 'SLA TTR letelve',
|
||||
'Class:Incident/Attribute:sla_ttr_passed+' => '~~',
|
||||
'Class:Incident/Attribute:sla_ttr_over' => 'SLA TTR túllépve',
|
||||
'Class:Incident/Attribute:sla_ttr_over+' => '~~',
|
||||
'Class:Incident/Attribute:time_spent' => 'Időráfordítás',
|
||||
'Class:Incident/Attribute:time_spent+' => '~~',
|
||||
'Class:Incident/Attribute:resolution_code' => 'Megoldás kód',
|
||||
'Class:Incident/Attribute:resolution_code+' => '~~',
|
||||
'Class:Incident/Attribute:resolution_code/Value:assistance' => 'Támogatás',
|
||||
'Class:Incident/Attribute:resolution_code/Value:assistance+' => '',
|
||||
'Class:Incident/Attribute:resolution_code/Value:bug fixed' => 'Programiba javítás',
|
||||
'Class:Incident/Attribute:resolution_code/Value:bug fixed+' => '',
|
||||
'Class:Incident/Attribute:resolution_code/Value:hardware repair' => 'Hardver javítás',
|
||||
'Class:Incident/Attribute:resolution_code/Value:hardware repair+' => '',
|
||||
'Class:Incident/Attribute:resolution_code/Value:other' => 'Egyéb',
|
||||
'Class:Incident/Attribute:resolution_code/Value:other+' => '',
|
||||
'Class:Incident/Attribute:resolution_code/Value:software patch' => 'Szoftverfrissítés',
|
||||
'Class:Incident/Attribute:resolution_code/Value:software patch+' => '',
|
||||
'Class:Incident/Attribute:resolution_code/Value:system update' => 'Rendszerfrissítés',
|
||||
'Class:Incident/Attribute:resolution_code/Value:system update+' => '',
|
||||
'Class:Incident/Attribute:resolution_code/Value:training' => 'Oktatás',
|
||||
'Class:Incident/Attribute:resolution_code/Value:training+' => '',
|
||||
'Class:Incident/Attribute:solution' => 'Megoldás',
|
||||
'Class:Incident/Attribute:solution+' => '~~',
|
||||
'Class:Incident/Attribute:pending_reason' => 'Függőben lévőség oka',
|
||||
'Class:Incident/Attribute:pending_reason+' => '~~',
|
||||
'Class:Incident/Attribute:parent_incident_id' => 'Fölérendelt incidens',
|
||||
'Class:Incident/Attribute:parent_incident_id+' => '~~',
|
||||
'Class:Incident/Attribute:parent_incident_ref' => 'Referenciaszám',
|
||||
'Class:Incident/Attribute:parent_incident_ref+' => '~~',
|
||||
'Class:Incident/Attribute:parent_change_id' => 'Fölérendelt változás',
|
||||
'Class:Incident/Attribute:parent_change_id+' => '~~',
|
||||
'Class:Incident/Attribute:parent_change_ref' => 'Referenciaszám',
|
||||
'Class:Incident/Attribute:parent_change_ref+' => '~~',
|
||||
'Class:Incident/Attribute:parent_problem_id' => 'Fölérendelt probléma',
|
||||
'Class:Incident/Attribute:parent_problem_id+' => '~~',
|
||||
'Class:Incident/Attribute:parent_problem_ref' => 'Referenciaszám',
|
||||
'Class:Incident/Attribute:parent_problem_ref+' => '~~',
|
||||
'Class:Incident/Attribute:related_request_list' => 'Kapcsolódó kérelmek',
|
||||
'Class:Incident/Attribute:related_request_list+' => '~~',
|
||||
'Class:Incident/Attribute:child_incidents_list' => 'Kapcsolódó incidensek',
|
||||
'Class:Incident/Attribute:child_incidents_list+' => 'Az összes ehhez az incidenshez kapcsolódó incidens',
|
||||
'Class:Incident/Attribute:public_log' => 'Nyilvános napló',
|
||||
'Class:Incident/Attribute:public_log+' => '~~',
|
||||
'Class:Incident/Attribute:user_satisfaction' => 'Felhasználói elégedettség',
|
||||
'Class:Incident/Attribute:user_satisfaction+' => '~~',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:1' => 'Nagyon elégedett',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:1+' => '',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:2' => 'Viszonylag elégedett',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:2+' => '',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:3' => 'Inkább elégedetlen',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:3+' => '',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:4' => 'Nagyon elégedetlen',
|
||||
'Class:Incident/Attribute:user_satisfaction/Value:4+' => '',
|
||||
'Class:Incident/Attribute:user_comment' => 'Felhasználói megjegyzés',
|
||||
'Class:Incident/Attribute:user_comment+' => '~~',
|
||||
'Class:Incident/Attribute:parent_incident_id_friendlyname' => 'parent_incident_id_friendlyname',
|
||||
'Class:Incident/Attribute:parent_incident_id_friendlyname+' => '~~',
|
||||
'Class:Incident/Stimulus:ev_assign' => 'Hozzárendelés',
|
||||
'Class:Incident/Stimulus:ev_assign+' => '~~',
|
||||
'Class:Incident/Stimulus:ev_reassign' => 'Újra hozzárendelés',
|
||||
'Class:Incident/Stimulus:ev_reassign+' => '~~',
|
||||
'Class:Incident/Stimulus:ev_pending' => 'Függőben',
|
||||
'Class:Incident/Stimulus:ev_pending+' => '~~',
|
||||
'Class:Incident/Stimulus:ev_timeout' => 'Időtúllépés',
|
||||
'Class:Incident/Stimulus:ev_timeout+' => '~~',
|
||||
'Class:Incident/Stimulus:ev_autoresolve' => 'Automatikus megoldás',
|
||||
'Class:Incident/Stimulus:ev_autoresolve+' => '~~',
|
||||
'Class:Incident/Stimulus:ev_autoclose' => 'Automatikus lezárás',
|
||||
'Class:Incident/Stimulus:ev_autoclose+' => '~~',
|
||||
'Class:Incident/Stimulus:ev_resolve' => 'Megoldva',
|
||||
'Class:Incident/Stimulus:ev_resolve+' => '~~',
|
||||
'Class:Incident/Stimulus:ev_close' => 'Lezárás',
|
||||
'Class:Incident/Stimulus:ev_close+' => '~~',
|
||||
'Class:Incident/Stimulus:ev_reopen' => 'Újranyitás',
|
||||
'Class:Incident/Stimulus:ev_reopen+' => '~~',
|
||||
'Class:Incident/Error:CannotAssignParentIncidentIdToSelf' => 'A fölérendelt incidenst nem lehet magához az incidenshez rendelni.',
|
||||
|
||||
'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~~',
|
||||
'Tickets:Related:OpenIncidents' => 'Open incidents~~',
|
||||
'Class:Incident/Method:ResolveChildTickets' => 'ResolveChildTickets',
|
||||
'Class:Incident/Method:ResolveChildTickets+' => 'A megoldás kaszkádozása a kapcsolódó jegyhez (ev_autoresolve), és a következő jellemzők összehangolása: szolgáltatás, csapat, ügyintéző, megoldási információ.',
|
||||
'Tickets:Related:OpenIncidents' => 'Nyitott incidensek',
|
||||
));
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'itop-incident-mgmt-itil/3.0.3',
|
||||
'itop-incident-mgmt-itil/3.0.4',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user