mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-14 16:04:10 +01:00
Compare commits
366 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
48ab6cb737 | ||
|
|
8b0214eeee | ||
|
|
c6454c5a8e | ||
|
|
6fd3bdbef4 | ||
|
|
4a12c531e6 | ||
|
|
df086c8ce2 | ||
|
|
d66e413289 | ||
|
|
938d383efd | ||
|
|
cc35e41028 | ||
|
|
0771fd0636 | ||
|
|
e4fa7ba983 | ||
|
|
109e8f6157 | ||
|
|
99bce469a1 | ||
|
|
e439797767 | ||
|
|
7f17acf553 | ||
|
|
5e64834b06 | ||
|
|
79fbec3675 | ||
|
|
f4e796f607 | ||
|
|
0d710d0464 | ||
|
|
40701f3f36 | ||
|
|
fcabb8fc43 | ||
|
|
4c64419f19 | ||
|
|
c8c388dac5 | ||
|
|
374858ef73 | ||
|
|
d45149a327 | ||
|
|
0ea9968797 | ||
|
|
b68ac3916f | ||
|
|
e5c46340d1 | ||
|
|
1e6887062f | ||
|
|
fc0f6b636e | ||
|
|
bcb1864963 | ||
|
|
3a1932b742 | ||
|
|
438f7f19c0 | ||
|
|
15b8b18b90 | ||
|
|
b9f467f08f | ||
|
|
9f779b8dfe | ||
|
|
8ce3c48446 | ||
|
|
f84d91e482 | ||
|
|
c6493f6cdc | ||
|
|
fb87911677 | ||
|
|
60b2162d84 | ||
|
|
e42b0513a0 | ||
|
|
f92a7df522 | ||
|
|
b7bd1a5943 | ||
|
|
69f21b9b79 | ||
|
|
6614a90e38 | ||
|
|
88a29fd8d1 | ||
|
|
7e2982b848 | ||
|
|
ed5d59153b | ||
|
|
ab3fd7f1b4 | ||
|
|
6e685feb9f | ||
|
|
d8c5f26aed | ||
|
|
ada0b310ae | ||
|
|
1f43ba3654 | ||
|
|
cb1628c759 | ||
|
|
605edc261d | ||
|
|
46e7bbe2c8 | ||
|
|
a6ac44204c | ||
|
|
af63233fac | ||
|
|
b1b913d891 | ||
|
|
be5bbdf26c | ||
|
|
b03e9a969c | ||
|
|
c56c662be7 | ||
|
|
6d34c2aa93 | ||
|
|
af20723c8c | ||
|
|
35f09c3091 | ||
|
|
5f04a54df3 | ||
|
|
19bbde6144 | ||
|
|
6fe81320c0 | ||
|
|
d1c808b2c3 | ||
|
|
e3697c37f3 | ||
|
|
a9c6d81130 | ||
|
|
8ff40fb4b8 | ||
|
|
037d6cc4ba | ||
|
|
4b1726c1ca | ||
|
|
0fac58248e | ||
|
|
3a486f8edd | ||
|
|
4fefaa5658 | ||
|
|
65ef621e6f | ||
|
|
1a818f309d | ||
|
|
1a74fe1ec3 | ||
|
|
089a9fcf4a | ||
|
|
e1df33c7d0 | ||
|
|
ee0fcdd42e | ||
|
|
7908b87881 | ||
|
|
8e359682ae | ||
|
|
8f2089e1f6 | ||
|
|
8d61af3d22 | ||
|
|
5e234eefe9 | ||
|
|
25c529a797 | ||
|
|
446a8f74fb | ||
|
|
144af46e8b | ||
|
|
d33217285a | ||
|
|
6ff5b499b0 | ||
|
|
0c084c0b17 | ||
|
|
36dd9fc05e | ||
|
|
4febe204e1 | ||
|
|
9e2c556805 | ||
|
|
3a0be981d6 | ||
|
|
44f661cea4 | ||
|
|
195c1dabf8 | ||
|
|
ce13b05363 | ||
|
|
be4674de11 | ||
|
|
911d4177cc | ||
|
|
237e36f562 | ||
|
|
5fa64ab3d2 | ||
|
|
ad98b8893f | ||
|
|
851b41670e | ||
|
|
d4321ec1ce | ||
|
|
e3ac7067f7 | ||
|
|
eb3d226b3d | ||
|
|
5a30986690 | ||
|
|
b423e98295 | ||
|
|
bdf46e8136 | ||
|
|
d4bfa4c48f | ||
|
|
30a1528a28 | ||
|
|
7ae02a7c5b | ||
|
|
e5682fd2e9 | ||
|
|
c1b5614268 | ||
|
|
5ad7ea1b7b | ||
|
|
30f4ff8765 | ||
|
|
bec8b57fe1 | ||
|
|
9b50124513 | ||
|
|
c9b4468f17 | ||
|
|
3790c8f7d5 | ||
|
|
8f4ee29c69 | ||
|
|
cf737bb8ad | ||
|
|
a222b33566 | ||
|
|
78396eafe3 | ||
|
|
de5ccf5908 | ||
|
|
c3bd0b1b9e | ||
|
|
736247f6e1 | ||
|
|
3074683274 | ||
|
|
4929f94c20 | ||
|
|
b8b20f82d7 | ||
|
|
7989cf622f | ||
|
|
f3cc490295 | ||
|
|
52a47b193d | ||
|
|
cfbf77544e | ||
|
|
0b32f511b8 | ||
|
|
bca713a964 | ||
|
|
692f7060ea | ||
|
|
4fa9933dc7 | ||
|
|
45134e182d | ||
|
|
38a502aa25 | ||
|
|
49e05acd4b | ||
|
|
089407119b | ||
|
|
6262fa1d26 | ||
|
|
c4cca2b2f8 | ||
|
|
d5353c111c | ||
|
|
fd79d30483 | ||
|
|
d708ef585b | ||
|
|
6ac06d7e47 | ||
|
|
019888caff | ||
|
|
e36646a3e6 | ||
|
|
8b6672c0dd | ||
|
|
3d4e76d8b0 | ||
|
|
cf8174d54e | ||
|
|
33f1ec8bf3 | ||
|
|
be1d8674f3 | ||
|
|
76b5bfb19e | ||
|
|
bddb8b4c92 | ||
|
|
67f8ddf5a8 | ||
|
|
f3f2eb5c79 | ||
|
|
a1b9bdaf66 | ||
|
|
e020bad17d | ||
|
|
36278d59a8 | ||
|
|
20d0d33b60 | ||
|
|
573712e9af | ||
|
|
5897ae5bb9 | ||
|
|
cd71f02fad | ||
|
|
e4df8c8c92 | ||
|
|
d1879d0433 | ||
|
|
9e636b1ce5 | ||
|
|
cccea50159 | ||
|
|
3441911781 | ||
|
|
c97f4d5ee7 | ||
|
|
4c637548ac | ||
|
|
721ca8c652 | ||
|
|
293877d78a | ||
|
|
d92f89fbe6 | ||
|
|
1da6a264d0 | ||
|
|
89b58d44cd | ||
|
|
0b93e6f79e | ||
|
|
eb0ba24d7d | ||
|
|
64521eb758 | ||
|
|
2d65325f6f | ||
|
|
a97238c3cd | ||
|
|
ce993b60e4 | ||
|
|
283f7dc9f8 | ||
|
|
4441fb41b9 | ||
|
|
34322045df | ||
|
|
b73da47775 | ||
|
|
3d8ffba2fa | ||
|
|
f9a380b12d | ||
|
|
a9a530a2cb | ||
|
|
ba822a655e | ||
|
|
20ec91e9f3 | ||
|
|
735a9729c0 | ||
|
|
1a52f4de72 | ||
|
|
cb0610bf0b | ||
|
|
20ea4644b4 | ||
|
|
fde336d8dd | ||
|
|
bc78b19ba7 | ||
|
|
a4883076f8 | ||
|
|
57a0e2d47e | ||
|
|
5a41992739 | ||
|
|
15e07b69d6 | ||
|
|
f6bfcb8355 | ||
|
|
019959504f | ||
|
|
331b7ec2f0 | ||
|
|
56ddf960a5 | ||
|
|
35429228a2 | ||
|
|
78256bae0b | ||
|
|
8145c23899 | ||
|
|
3b629ab83c | ||
|
|
abc2c7b5e1 | ||
|
|
e1d7e17c5d | ||
|
|
64f452caba | ||
|
|
a8a77fdebb | ||
|
|
83e7e9c44b | ||
|
|
6c73b3ed2e | ||
|
|
adfed90733 | ||
|
|
c6a6af0aa2 | ||
|
|
19463b370c | ||
|
|
6bc3a80c8c | ||
|
|
de4945bca6 | ||
|
|
6dd3eb9970 | ||
|
|
511c703b61 | ||
|
|
21722b9e80 | ||
|
|
203887589f | ||
|
|
028f23214d | ||
|
|
b89a4d32d1 | ||
|
|
b6883ed3b4 | ||
|
|
6338775506 | ||
|
|
25ea409228 | ||
|
|
6a72ceb685 | ||
|
|
235203b3a0 | ||
|
|
2b9beb971b | ||
|
|
5ff5e3f1a7 | ||
|
|
e3caff6689 | ||
|
|
59970be867 | ||
|
|
98cfcc9cb8 | ||
|
|
e66f06cda2 | ||
|
|
35fe0b9ef5 | ||
|
|
cde184e2a3 | ||
|
|
df8f4449e8 | ||
|
|
b225b621b7 | ||
|
|
d85aba8ebc | ||
|
|
53d5867b93 | ||
|
|
d4eaf43257 | ||
|
|
dc96cbc482 | ||
|
|
73e9107ae2 | ||
|
|
9d1df1b799 | ||
|
|
018344578e | ||
|
|
bb4c6aecfa | ||
|
|
06bb4a4f03 | ||
|
|
dfe3ced440 | ||
|
|
922d1dc734 | ||
|
|
bf2654409b | ||
|
|
b6a001fedc | ||
|
|
d8f2979c5a | ||
|
|
7f8f4f5aab | ||
|
|
653229b1bd | ||
|
|
2b69c5210f | ||
|
|
7531dd8b19 | ||
|
|
49e101403f | ||
|
|
d10c3ace5d | ||
|
|
4a6bc8a896 | ||
|
|
c428e07c4b | ||
|
|
540eb5f272 | ||
|
|
699679318a | ||
|
|
4bd217d178 | ||
|
|
e37f6a0954 | ||
|
|
9f000c15ff | ||
|
|
7d13ec00e4 | ||
|
|
c8384cc8a4 | ||
|
|
9e70feb29d | ||
|
|
ced4bf4259 | ||
|
|
51fa310664 | ||
|
|
64044e47e1 | ||
|
|
ebf9910579 | ||
|
|
a60709a354 | ||
|
|
c63d25e223 | ||
|
|
7fbcdc407e | ||
|
|
35c50d6689 | ||
|
|
ff112faf5a | ||
|
|
5ecbc66d7e | ||
|
|
dc3a99200f | ||
|
|
40a613b4db | ||
|
|
fcbd9b8911 | ||
|
|
9dd2061f60 | ||
|
|
2c4bdf6398 | ||
|
|
d8bb6a45b2 | ||
|
|
d0f168adbb | ||
|
|
b30d6c4888 | ||
|
|
ed39fa2c96 | ||
|
|
92045ef15f | ||
|
|
956ebb1962 | ||
|
|
a1cc8deb47 | ||
|
|
0306c6691a | ||
|
|
d098bae484 | ||
|
|
a524100d99 | ||
|
|
cf888ea165 | ||
|
|
8f7be02bc2 | ||
|
|
8e125cb743 | ||
|
|
a97e2825b1 | ||
|
|
738d90d592 | ||
|
|
dc9a52c9e0 | ||
|
|
5ea71a3d51 | ||
|
|
8d80d73f35 | ||
|
|
99907a92ea | ||
|
|
259b266a19 | ||
|
|
effa212261 | ||
|
|
1a92a7b4f3 | ||
|
|
4338bce526 | ||
|
|
4572bdbb02 | ||
|
|
fcd72fed82 | ||
|
|
1800120762 | ||
|
|
e5f0460703 | ||
|
|
72dbb9cb8f | ||
|
|
562cfde587 | ||
|
|
6fe25d8b57 | ||
|
|
248cdcea8c | ||
|
|
0b95b3799e | ||
|
|
05a2443afe | ||
|
|
1860521e74 | ||
|
|
8d39ddded6 | ||
|
|
fd3317e99e | ||
|
|
7651aaed81 | ||
|
|
a5d2d067ff | ||
|
|
b27fda4cf5 | ||
|
|
2834c073cd | ||
|
|
97f36bd7e8 | ||
|
|
3d299f015b | ||
|
|
8a5ed95c80 | ||
|
|
f4b29d152b | ||
|
|
463bc0873b | ||
|
|
368ea1cfdb | ||
|
|
1b618ff57c | ||
|
|
70149af5d6 | ||
|
|
006453678b | ||
|
|
135353aa76 | ||
|
|
ddd52554f1 | ||
|
|
22cf8e4986 | ||
|
|
931075687a | ||
|
|
adaf3a376c | ||
|
|
1808e5fe65 | ||
|
|
cab0eb7758 | ||
|
|
7e06dd100a | ||
|
|
f145b872de | ||
|
|
b66e489ec8 | ||
|
|
63da528882 | ||
|
|
ff80b06ea2 | ||
|
|
e9304bbcfa | ||
|
|
0c34b47aac | ||
|
|
484d4d1679 | ||
|
|
4b5a25ea59 | ||
|
|
7153162696 | ||
|
|
fb59939d57 | ||
|
|
629a87c99b | ||
|
|
3d4e0da019 | ||
|
|
1e1e10aa00 | ||
|
|
0fff433e90 | ||
|
|
05dbcb0a8b | ||
|
|
bc6a3ab485 |
@@ -149,6 +149,7 @@ class UserRightsMatrix extends UserRightsAddOnAPI
|
||||
return ($oUser->GetKey() == 1);
|
||||
}
|
||||
|
||||
// Deprecated - create a new module !
|
||||
public function Setup()
|
||||
{
|
||||
// Users must be added manually
|
||||
|
||||
@@ -42,11 +42,6 @@ class UserRightsNull extends UserRightsAddOnAPI
|
||||
return true;
|
||||
}
|
||||
|
||||
public function Setup()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function Init()
|
||||
{
|
||||
return true;
|
||||
|
||||
@@ -27,7 +27,27 @@
|
||||
define('ADMIN_PROFILE_NAME', 'Administrator');
|
||||
define('PORTAL_PROFILE_NAME', 'Portal user');
|
||||
|
||||
class UserRightsBaseClass extends cmdbAbstractObject
|
||||
class UserRightsBaseClassGUI extends cmdbAbstractObject
|
||||
{
|
||||
// Whenever something changes, reload the privileges
|
||||
|
||||
protected function AfterInsert()
|
||||
{
|
||||
UserRights::FlushPrivileges();
|
||||
}
|
||||
|
||||
protected function AfterUpdate()
|
||||
{
|
||||
UserRights::FlushPrivileges();
|
||||
}
|
||||
|
||||
protected function AfterDelete()
|
||||
{
|
||||
UserRights::FlushPrivileges();
|
||||
}
|
||||
}
|
||||
|
||||
class UserRightsBaseClass extends DBObject
|
||||
{
|
||||
// Whenever something changes, reload the privileges
|
||||
|
||||
@@ -50,7 +70,7 @@ class UserRightsBaseClass extends cmdbAbstractObject
|
||||
|
||||
|
||||
|
||||
class URP_Profiles extends UserRightsBaseClass
|
||||
class URP_Profiles extends UserRightsBaseClassGUI
|
||||
{
|
||||
public static function Init()
|
||||
{
|
||||
@@ -87,28 +107,115 @@ class URP_Profiles extends UserRightsBaseClass
|
||||
$this->m_bCheckReservedNames = false;
|
||||
}
|
||||
|
||||
|
||||
protected static $m_aActions = array(
|
||||
UR_ACTION_READ => 'Read',
|
||||
UR_ACTION_MODIFY => 'Modify',
|
||||
UR_ACTION_DELETE => 'Delete',
|
||||
UR_ACTION_BULK_READ => 'Bulk Read',
|
||||
UR_ACTION_BULK_MODIFY => 'Bulk Modify',
|
||||
UR_ACTION_BULK_DELETE => 'Bulk Delete',
|
||||
);
|
||||
|
||||
protected static $m_aCacheActionGrants = null;
|
||||
protected static $m_aCacheStimulusGrants = null;
|
||||
protected static $m_aCacheProfiles = null;
|
||||
|
||||
public static function DoCreateProfile($sName, $sDescription, $bReservedName = false)
|
||||
{
|
||||
if (is_null(self::$m_aCacheProfiles))
|
||||
{
|
||||
self::$m_aCacheProfiles = array();
|
||||
$oFilterAll = new DBObjectSearch('URP_Profiles');
|
||||
$oSet = new DBObjectSet($oFilterAll);
|
||||
while ($oProfile = $oSet->Fetch())
|
||||
{
|
||||
self::$m_aCacheProfiles[$oProfile->Get('name')] = $oProfile->GetKey();
|
||||
}
|
||||
}
|
||||
|
||||
$sCacheKey = $sName;
|
||||
if (isset(self::$m_aCacheProfiles[$sCacheKey]))
|
||||
{
|
||||
return self::$m_aCacheProfiles[$sCacheKey];
|
||||
}
|
||||
$oNewObj = MetaModel::NewObject("URP_Profiles");
|
||||
$oNewObj->Set('name', $sName);
|
||||
$oNewObj->Set('description', $sDescription);
|
||||
if ($bReservedName)
|
||||
{
|
||||
$oNewObj->DisableCheckOnReservedNames();
|
||||
}
|
||||
$iId = $oNewObj->DBInsertNoReload();
|
||||
self::$m_aCacheProfiles[$sCacheKey] = $iId;
|
||||
return $iId;
|
||||
}
|
||||
|
||||
public static function DoCreateActionGrant($iProfile, $iAction, $sClass, $bPermission = true)
|
||||
{
|
||||
$sAction = self::$m_aActions[$iAction];
|
||||
|
||||
if (is_null(self::$m_aCacheActionGrants))
|
||||
{
|
||||
self::$m_aCacheActionGrants = array();
|
||||
$oFilterAll = new DBObjectSearch('URP_ActionGrant');
|
||||
$oSet = new DBObjectSet($oFilterAll);
|
||||
while ($oGrant = $oSet->Fetch())
|
||||
{
|
||||
self::$m_aCacheActionGrants[$oGrant->Get('profileid').'-'.$oGrant->Get('action').'-'.$oGrant->Get('class')] = $oGrant->GetKey();
|
||||
}
|
||||
}
|
||||
|
||||
$sCacheKey = "$iProfile-$sAction-$sClass";
|
||||
if (isset(self::$m_aCacheActionGrants[$sCacheKey]))
|
||||
{
|
||||
return self::$m_aCacheActionGrants[$sCacheKey];
|
||||
}
|
||||
|
||||
$oNewObj = MetaModel::NewObject("URP_ActionGrant");
|
||||
$oNewObj->Set('profileid', $iProfile);
|
||||
$oNewObj->Set('permission', $bPermission ? 'yes' : 'no');
|
||||
$oNewObj->Set('class', $sClass);
|
||||
$oNewObj->Set('action', $sAction);
|
||||
$iId = $oNewObj->DBInsertNoReload();
|
||||
self::$m_aCacheActionGrants[$sCacheKey] = $iId;
|
||||
return $iId;
|
||||
}
|
||||
|
||||
public static function DoCreateStimulusGrant($iProfile, $sStimulusCode, $sClass)
|
||||
{
|
||||
if (is_null(self::$m_aCacheStimulusGrants))
|
||||
{
|
||||
self::$m_aCacheStimulusGrants = array();
|
||||
$oFilterAll = new DBObjectSearch('URP_StimulusGrant');
|
||||
$oSet = new DBObjectSet($oFilterAll);
|
||||
while ($oGrant = $oSet->Fetch())
|
||||
{
|
||||
self::$m_aCacheStimulusGrants[$oGrant->Get('profileid').'-'.$oGrant->Get('stimulus').'-'.$oGrant->Get('class')] = $oGrant->GetKey();
|
||||
}
|
||||
}
|
||||
|
||||
$sCacheKey = "$iProfile-$sStimulusCode-$sClass";
|
||||
if (isset(self::$m_aCacheStimulusGrants[$sCacheKey]))
|
||||
{
|
||||
return self::$m_aCacheStimulusGrants[$sCacheKey];
|
||||
}
|
||||
$oNewObj = MetaModel::NewObject("URP_StimulusGrant");
|
||||
$oNewObj->Set('profileid', $iProfile);
|
||||
$oNewObj->Set('permission', 'yes');
|
||||
$oNewObj->Set('class', $sClass);
|
||||
$oNewObj->Set('stimulus', $sStimulusCode);
|
||||
$iId = $oNewObj->DBInsertNoReload();
|
||||
self::$m_aCacheStimulusGrants[$sCacheKey] = $iId;
|
||||
return $iId;
|
||||
}
|
||||
|
||||
/*
|
||||
* Create the built-in Administrator profile with its reserved name
|
||||
*/
|
||||
public static function DoCreateAdminProfile()
|
||||
{
|
||||
$oNewObj = MetaModel::NewObject("URP_Profiles");
|
||||
$oNewObj->Set('name', ADMIN_PROFILE_NAME);
|
||||
$oNewObj->Set('description', 'Has the rights on everything (bypassing any control)');
|
||||
$oNewObj->DisableCheckOnReservedNames();
|
||||
$iNewId = $oNewObj->DBInsertNoReload();
|
||||
}
|
||||
|
||||
/*
|
||||
* Create the built-in User Portal profile with its reserved name
|
||||
*/
|
||||
public static function DoCreateUserPortalProfile()
|
||||
{
|
||||
$oNewObj = MetaModel::NewObject("URP_Profiles");
|
||||
$oNewObj->Set('name', PORTAL_PROFILE_NAME);
|
||||
$oNewObj->Set('description', 'Has the rights to access to the user portal. People having this profile will not be allowed to access the standard application, they will be automatically redirected to the user portal.');
|
||||
$oNewObj->DisableCheckOnReservedNames();
|
||||
$iNewId = $oNewObj->DBInsertNoReload();
|
||||
self::DoCreateProfile(ADMIN_PROFILE_NAME, 'Has the rights on everything (bypassing any control)', true /* reserved name */);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -180,7 +287,7 @@ class URP_Profiles extends UserRightsBaseClass
|
||||
$oGrant = $oUserRights->GetClassStimulusGrant($this->GetKey(), $sClass, $sStimulusCode);
|
||||
if (is_object($oGrant) && ($oGrant->Get('permission') == 'yes'))
|
||||
{
|
||||
$aStimuli[] = '<span title="'.$sStimulusCode.': '.htmlentities($oStimulus->GetDescription()).'">'.htmlentities($oStimulus->GetLabel()).'</span>';
|
||||
$aStimuli[] = '<span title="'.$sStimulusCode.': '.htmlentities($oStimulus->GetDescription(), ENT_QUOTES, 'UTF-8').'">'.htmlentities($oStimulus->GetLabel(), ENT_QUOTES, 'UTF-8').'</span>';
|
||||
}
|
||||
}
|
||||
$sStimuli = implode(', ', $aStimuli);
|
||||
@@ -222,7 +329,7 @@ class URP_Profiles extends UserRightsBaseClass
|
||||
|
||||
|
||||
|
||||
class URP_UserProfile extends UserRightsBaseClass
|
||||
class URP_UserProfile extends UserRightsBaseClassGUI
|
||||
{
|
||||
public static function Init()
|
||||
{
|
||||
@@ -262,7 +369,7 @@ class URP_UserProfile extends UserRightsBaseClass
|
||||
}
|
||||
}
|
||||
|
||||
class URP_UserOrg extends UserRightsBaseClass
|
||||
class URP_UserOrg extends UserRightsBaseClassGUI
|
||||
{
|
||||
public static function Init()
|
||||
{
|
||||
@@ -431,28 +538,44 @@ class UserRightsProfile extends UserRightsAddOnAPI
|
||||
$oChange->Set("userinfo", "Initialization");
|
||||
$iChangeId = $oChange->DBInsert();
|
||||
|
||||
$oOrg = new Organization();
|
||||
$oOrg->Set('name', 'My Company/Department');
|
||||
$oOrg->Set('code', 'SOMECODE');
|
||||
// $oOrg->Set('status', 'implementation');
|
||||
//$oOrg->Set('parent_id', xxx);
|
||||
$iOrgId = $oOrg->DBInsertTrackedNoReload($oChange, true /* skip security */);
|
||||
// Support drastic data model changes: no organization class !
|
||||
if (MetaModel::IsValidClass('Organization'))
|
||||
{
|
||||
$oOrg = new Organization();
|
||||
$oOrg->Set('name', 'My Company/Department');
|
||||
$oOrg->Set('code', 'SOMECODE');
|
||||
$iOrgId = $oOrg->DBInsertTrackedNoReload($oChange, true /* skip security */);
|
||||
}
|
||||
else
|
||||
{
|
||||
$iOrgId = 0;
|
||||
}
|
||||
|
||||
$oContact = new Person();
|
||||
$oContact->Set('name', 'My last name');
|
||||
$oContact->Set('first_name', 'My first name');
|
||||
//$oContact->Set('status', 'available');
|
||||
$oContact->Set('org_id', $iOrgId);
|
||||
$oContact->Set('email', 'my.email@foo.org');
|
||||
//$oContact->Set('phone', '');
|
||||
//$oContact->Set('location_id', $iLocationId);
|
||||
//$oContact->Set('employee_number', '');
|
||||
$iContactId = $oContact->DBInsertTrackedNoReload($oChange, true /* skip security */);
|
||||
// Support drastic data model changes: no Person class !
|
||||
if (MetaModel::IsValidClass('Person'))
|
||||
{
|
||||
$oContact = new Person();
|
||||
$oContact->Set('name', 'My last name');
|
||||
$oContact->Set('first_name', 'My first name');
|
||||
if (MetaModel::IsValidAttCode('Person', 'org_id'))
|
||||
{
|
||||
$oContact->Set('org_id', $iOrgId);
|
||||
}
|
||||
$oContact->Set('email', 'my.email@foo.org');
|
||||
$iContactId = $oContact->DBInsertTrackedNoReload($oChange, true /* skip security */);
|
||||
}
|
||||
else
|
||||
{
|
||||
$iContactId = 0;
|
||||
}
|
||||
|
||||
$oUser = new UserLocal();
|
||||
$oUser->Set('login', $sAdminUser);
|
||||
$oUser->Set('password', $sAdminPwd);
|
||||
$oUser->Set('contactid', $iContactId);
|
||||
if (MetaModel::IsValidAttCode('UserLocal', 'contactid'))
|
||||
{
|
||||
$oUser->Set('contactid', $iContactId);
|
||||
}
|
||||
$oUser->Set('language', $sLanguage); // Language was chosen during the installation
|
||||
|
||||
// Add this user to the very specific 'admin' profile
|
||||
@@ -471,17 +594,8 @@ class UserRightsProfile extends UserRightsAddOnAPI
|
||||
return true;
|
||||
}
|
||||
|
||||
public function Setup()
|
||||
{
|
||||
SetupProfiles::ComputeITILProfiles();
|
||||
//SetupProfiles::ComputeBasicProfiles();
|
||||
SetupProfiles::DoCreateProfiles();
|
||||
return true;
|
||||
}
|
||||
|
||||
public function Init()
|
||||
{
|
||||
MetaModel::RegisterPlugin('userrights', 'ACbyProfile');
|
||||
}
|
||||
|
||||
|
||||
@@ -641,6 +755,14 @@ exit;
|
||||
{
|
||||
$sAttCode = 'id';
|
||||
}
|
||||
elseif (is_callable("$sClass::MapContextParam"))
|
||||
{
|
||||
$sAttCode = eval("return $sClass::MapContextParam('org_id');"); // Returns null when there is no mapping for this parameter
|
||||
if ($sAttCode == null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
elseif(MetaModel::IsValidAttCode($sClass, 'org_id'))
|
||||
{
|
||||
$sAttCode = 'org_id';
|
||||
@@ -825,265 +947,6 @@ exit;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Create simple profiles into our user management model:
|
||||
// - administrator
|
||||
// - readers
|
||||
// - contributors
|
||||
//
|
||||
class SetupProfiles
|
||||
{
|
||||
protected static $m_aActions = array(
|
||||
UR_ACTION_READ => 'Read',
|
||||
UR_ACTION_MODIFY => 'Modify',
|
||||
UR_ACTION_DELETE => 'Delete',
|
||||
UR_ACTION_BULK_READ => 'Bulk Read',
|
||||
UR_ACTION_BULK_MODIFY => 'Bulk Modify',
|
||||
UR_ACTION_BULK_DELETE => 'Bulk Delete',
|
||||
);
|
||||
|
||||
// Note: It is possible to specify the same class in several modules
|
||||
//
|
||||
protected static $m_aModules = array();
|
||||
protected static $m_aProfiles = array();
|
||||
|
||||
|
||||
protected static function DoCreateActionGrant($iProfile, $iAction, $sClass, $bPermission = true)
|
||||
{
|
||||
$oNewObj = MetaModel::NewObject("URP_ActionGrant");
|
||||
$oNewObj->Set('profileid', $iProfile);
|
||||
$oNewObj->Set('permission', $bPermission ? 'yes' : 'no');
|
||||
$oNewObj->Set('class', $sClass);
|
||||
$oNewObj->Set('action', self::$m_aActions[$iAction]);
|
||||
$iId = $oNewObj->DBInsertNoReload();
|
||||
return $iId;
|
||||
}
|
||||
|
||||
protected static function DoCreateStimulusGrant($iProfile, $sStimulusCode, $sClass)
|
||||
{
|
||||
$oNewObj = MetaModel::NewObject("URP_StimulusGrant");
|
||||
$oNewObj->Set('profileid', $iProfile);
|
||||
$oNewObj->Set('permission', 'yes');
|
||||
$oNewObj->Set('class', $sClass);
|
||||
$oNewObj->Set('stimulus', $sStimulusCode);
|
||||
$iId = $oNewObj->DBInsertNoReload();
|
||||
return $iId;
|
||||
}
|
||||
|
||||
protected static function DoCreateOneProfile($sName, $aProfileData)
|
||||
{
|
||||
$sDescription = $aProfileData['description'];
|
||||
if (strlen(trim($aProfileData['write_modules'])) == 0)
|
||||
{
|
||||
$aWriteModules = array();
|
||||
}
|
||||
else
|
||||
{
|
||||
$aWriteModules = explode(',', trim($aProfileData['write_modules']));
|
||||
}
|
||||
$aStimuli = $aProfileData['stimuli'];
|
||||
|
||||
$oNewObj = MetaModel::NewObject("URP_Profiles");
|
||||
$oNewObj->Set('name', $sName);
|
||||
$oNewObj->Set('description', $sDescription);
|
||||
$iProfile = $oNewObj->DBInsertNoReload();
|
||||
|
||||
// Grant read rights for everything
|
||||
//
|
||||
foreach (MetaModel::GetClasses('bizmodel') as $sClass)
|
||||
{
|
||||
self::DoCreateActionGrant($iProfile, UR_ACTION_READ, $sClass);
|
||||
self::DoCreateActionGrant($iProfile, UR_ACTION_BULK_READ, $sClass);
|
||||
}
|
||||
|
||||
// Grant write for given modules
|
||||
// Start by compiling the information, because some modules may overlap
|
||||
$aWriteableClasses = array();
|
||||
foreach ($aWriteModules as $sModule)
|
||||
{
|
||||
//$oPage->p('Granting write access for the module"'.$sModule.'" - '.count(self::$m_aModules[$sModule]).' classes');
|
||||
foreach (self::$m_aModules[$sModule] as $sClass)
|
||||
{
|
||||
$aWriteableClasses[$sClass] = true;
|
||||
}
|
||||
}
|
||||
foreach ($aWriteableClasses as $sClass => $foo)
|
||||
{
|
||||
if (!MetaModel::IsValidClass($sClass))
|
||||
{
|
||||
throw new CoreException("Invalid class name '$sClass'");
|
||||
}
|
||||
self::DoCreateActionGrant($iProfile, UR_ACTION_MODIFY, $sClass);
|
||||
self::DoCreateActionGrant($iProfile, UR_ACTION_DELETE, $sClass);
|
||||
self::DoCreateActionGrant($iProfile, UR_ACTION_BULK_MODIFY, $sClass);
|
||||
// By default, do not allow bulk deletion operations for standard users
|
||||
// self::DoCreateActionGrant($iProfile, UR_ACTION_BULK_DELETE, $sClass);
|
||||
}
|
||||
|
||||
// Grant stimuli for given classes
|
||||
foreach ($aStimuli as $sClass => $sAllowedStimuli)
|
||||
{
|
||||
if (!MetaModel::IsValidClass($sClass))
|
||||
{
|
||||
// Could be a class defined in a module that wasn't installed
|
||||
continue;
|
||||
//throw new CoreException("Invalid class name '$sClass'");
|
||||
}
|
||||
|
||||
if ($sAllowedStimuli == 'any')
|
||||
{
|
||||
$aAllowedStimuli = array_keys(MetaModel::EnumStimuli($sClass));
|
||||
}
|
||||
elseif ($sAllowedStimuli == 'none')
|
||||
{
|
||||
$aAllowedStimuli = array();
|
||||
}
|
||||
else
|
||||
{
|
||||
$aAllowedStimuli = explode(',', $sAllowedStimuli);
|
||||
}
|
||||
foreach ($aAllowedStimuli as $sStimulusCode)
|
||||
{
|
||||
self::DoCreateStimulusGrant($iProfile, $sStimulusCode, $sClass);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function DoCreateProfiles()
|
||||
{
|
||||
URP_Profiles::DoCreateAdminProfile();
|
||||
URP_Profiles::DoCreateUserPortalProfile();
|
||||
|
||||
foreach(self::$m_aProfiles as $sName => $aProfileData)
|
||||
{
|
||||
self::DoCreateOneProfile($sName, $aProfileData);
|
||||
}
|
||||
}
|
||||
|
||||
public static function ComputeBasicProfiles()
|
||||
{
|
||||
// In this profiling scheme, one single module represents all the classes
|
||||
//
|
||||
self::$m_aModules = array(
|
||||
'UserData' => MetaModel::GetClasses('bizmodel'),
|
||||
);
|
||||
|
||||
self::$m_aProfiles = array(
|
||||
'Reader' => array(
|
||||
'description' => 'Person having a ready-only access to the data',
|
||||
'write_modules' => '',
|
||||
'stimuli' => array(
|
||||
),
|
||||
),
|
||||
'Writer' => array(
|
||||
'description' => 'Contributor to the contents (read + write access)',
|
||||
'write_modules' => 'UserData',
|
||||
'stimuli' => array(
|
||||
// any class => 'any'
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
public static function ComputeITILProfiles()
|
||||
{
|
||||
// In this profiling scheme, modules are based on ITIL recommendations
|
||||
//
|
||||
self::$m_aModules = array(
|
||||
/*
|
||||
'WriteModule' => array(
|
||||
'someclass',
|
||||
'anotherclass',
|
||||
),
|
||||
*/
|
||||
'General' => MetaModel::GetClasses('structure'),
|
||||
'Documentation' => MetaModel::GetClasses('documentation'),
|
||||
'Configuration' => MetaModel::GetClasses('configmgmt'),
|
||||
'Incident' => MetaModel::GetClasses('incidentmgmt'),
|
||||
'Problem' => MetaModel::GetClasses('problemmgmt'),
|
||||
'Change' => MetaModel::GetClasses('changemgmt'),
|
||||
'Service' => MetaModel::GetClasses('servicemgmt'),
|
||||
'Call' => MetaModel::GetClasses('requestmgmt'),
|
||||
'KnownError' => MetaModel::GetClasses('knownerrormgmt'),
|
||||
);
|
||||
|
||||
self::$m_aProfiles = array(
|
||||
'Configuration Manager' => array(
|
||||
'description' => 'Person in charge of the documentation of the managed CIs',
|
||||
'write_modules' => 'General,Documentation,Configuration',
|
||||
'stimuli' => array(
|
||||
//'bizServer' => 'none',
|
||||
//'bizContract' => 'none',
|
||||
//'bizIncidentTicket' => 'none',
|
||||
//'bizChangeTicket' => 'any',
|
||||
),
|
||||
),
|
||||
'Service Desk Agent' => array(
|
||||
'description' => 'Person in charge of creating incident reports',
|
||||
'write_modules' => 'Incident,Call',
|
||||
'stimuli' => array(
|
||||
'Incident' => 'ev_assign',
|
||||
'UserRequest' => 'ev_assign',
|
||||
),
|
||||
),
|
||||
'Support Agent' => array(
|
||||
'description' => 'Person analyzing and solving the current incidents',
|
||||
'write_modules' => 'Incident',
|
||||
'stimuli' => array(
|
||||
'Incident' => 'ev_assign,ev_reassign,ev_resolve,ev_close',
|
||||
'UserRequest' => 'ev_assign,ev_reassign,ev_resolve,ev_close,ev_freeze',
|
||||
),
|
||||
),
|
||||
'Problem Manager' => array(
|
||||
'description' => 'Person analyzing and solving the current problems',
|
||||
'write_modules' => 'Problem,KnownError',
|
||||
'stimuli' => array(
|
||||
'Problem' => 'ev_assign,ev_reassign,ev_resolve,ev_close',
|
||||
),
|
||||
),
|
||||
|
||||
'Change Implementor' => array(
|
||||
'description' => 'Person executing the changes',
|
||||
'write_modules' => 'Change',
|
||||
'stimuli' => array(
|
||||
'NormalChange' => 'ev_plan,ev_replan,ev_implement,ev_monitor',
|
||||
'EmergencyChange' => 'ev_plan,ev_replan,ev_implement,ev_monitor',
|
||||
'RoutineChange' => 'ev_plan,ev_replan,ev_implement,ev_monitor',
|
||||
),
|
||||
),
|
||||
'Change Supervisor' => array(
|
||||
'description' => 'Person responsible for the overall change execution',
|
||||
'write_modules' => 'Change',
|
||||
'stimuli' => array(
|
||||
'NormalChange' => 'ev_validate,ev_reject,ev_assign,ev_reopen,ev_finish',
|
||||
'EmergencyChange' => 'ev_assign,ev_reopen,ev_finish',
|
||||
'RoutineChange' => 'ev_assign,ev_reopen,ev_finish',
|
||||
),
|
||||
),
|
||||
'Change Approver' => array(
|
||||
'description' => 'Person who could be impacted by some changes',
|
||||
'write_modules' => 'Change',
|
||||
'stimuli' => array(
|
||||
'NormalChange' => 'ev_approve,ev_notapprove',
|
||||
'EmergencyChange' => 'ev_approve,ev_notapprove',
|
||||
'RoutineChange' => 'none',
|
||||
),
|
||||
),
|
||||
'Service Manager' => array(
|
||||
'description' => 'Person responsible for the service delivered to the [internal] customer',
|
||||
'write_modules' => 'Service',
|
||||
'stimuli' => array(
|
||||
),
|
||||
),
|
||||
'Document author' => array(
|
||||
'description' => 'Any person who could contribute to documentation',
|
||||
'write_modules' => 'Documentation',
|
||||
'stimuli' => array(
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
UserRights::SelectModule('UserRightsProfile');
|
||||
|
||||
|
||||
@@ -119,7 +119,7 @@ class URP_Profiles extends UserRightsBaseClass
|
||||
$oGrant = $oUserRights->GetClassStimulusGrant($this->GetKey(), $sClass, $sStimulusCode);
|
||||
if (is_object($oGrant) && ($oGrant->Get('permission') == 'yes'))
|
||||
{
|
||||
$aStimuli[] = '<span title="'.$sStimulusCode.': '.htmlentities($oStimulus->GetDescription()).'">'.htmlentities($oStimulus->GetLabel()).'</span>';
|
||||
$aStimuli[] = '<span title="'.$sStimulusCode.': '.htmlentities($oStimulus->GetDescription(), ENT_QUOTES, 'UTF-8').'">'.htmlentities($oStimulus->GetLabel(), ENT_QUOTES, 'UTF-8').'</span>';
|
||||
}
|
||||
}
|
||||
$sStimuli = implode(', ', $aStimuli);
|
||||
@@ -658,19 +658,10 @@ class UserRightsProjection extends UserRightsAddOnAPI
|
||||
// See implementation of userrightsprofile
|
||||
}
|
||||
|
||||
public function Setup()
|
||||
{
|
||||
SetupProfiles::ComputeITILProfiles();
|
||||
//SetupProfiles::ComputeBasicProfiles();
|
||||
|
||||
SetupProfiles::DoCreateDimensions();
|
||||
SetupProfiles::DoCreateProfiles();
|
||||
return true;
|
||||
}
|
||||
|
||||
public function Init()
|
||||
{
|
||||
MetaModel::RegisterPlugin('userrights', 'ACbyProfile', array($this, 'CacheData'));
|
||||
// CacheData to be invoked in a module extension
|
||||
//MetaModel::RegisterPlugin('userrights', 'ACbyProfile', array($this, 'CacheData'));
|
||||
}
|
||||
|
||||
protected $m_aDimensions = array(); // id -> object
|
||||
@@ -1256,343 +1247,6 @@ exit;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Create simple profiles into our user management model:
|
||||
// - administrator
|
||||
// - readers
|
||||
// - contributors
|
||||
//
|
||||
class SetupProfiles
|
||||
{
|
||||
protected static $m_aDimensions = array(
|
||||
'organization' => array(
|
||||
'description' => '',
|
||||
'type' => 'Organization',
|
||||
),
|
||||
);
|
||||
|
||||
protected static $m_aActions = array(
|
||||
UR_ACTION_READ => 'Read',
|
||||
UR_ACTION_MODIFY => 'Modify',
|
||||
UR_ACTION_DELETE => 'Delete',
|
||||
UR_ACTION_BULK_READ => 'Bulk Read',
|
||||
UR_ACTION_BULK_MODIFY => 'Bulk Modify',
|
||||
UR_ACTION_BULK_DELETE => 'Bulk Delete',
|
||||
);
|
||||
|
||||
// Note: It is possible to specify the same class in several modules
|
||||
//
|
||||
protected static $m_aModules = array();
|
||||
protected static $m_aProfiles = array();
|
||||
|
||||
protected static function DoCreateClassProjection($iDimension, $sClass)
|
||||
{
|
||||
$oNewObj = MetaModel::NewObject("URP_ClassProjection");
|
||||
$oNewObj->Set('dimensionid', $iDimension);
|
||||
$oNewObj->Set('class', $sClass);
|
||||
$oNewObj->Set('attribute', '');
|
||||
$iId = $oNewObj->DBInsertNoReload();
|
||||
return $iId;
|
||||
}
|
||||
|
||||
protected static function DoCreateDimension($sName, $aDimensionData)
|
||||
{
|
||||
$oNewObj = MetaModel::NewObject("URP_Dimensions");
|
||||
$oNewObj->Set('name', $sName);
|
||||
$oNewObj->Set('description', $aDimensionData['description']);
|
||||
$oNewObj->Set('type', $aDimensionData['type']);
|
||||
$iId = $oNewObj->DBInsertNoReload();
|
||||
return $iId;
|
||||
}
|
||||
|
||||
|
||||
protected static function DoCreateProfileProjection($iProfile, $iDimension)
|
||||
{
|
||||
$oNewObj = MetaModel::NewObject("URP_ProfileProjection");
|
||||
$oNewObj->Set('profileid', $iProfile);
|
||||
$oNewObj->Set('dimensionid', $iDimension);
|
||||
$oNewObj->Set('value', '<any>');
|
||||
$oNewObj->Set('attribute', '');
|
||||
$iId = $oNewObj->DBInsertNoReload();
|
||||
return $iId;
|
||||
}
|
||||
|
||||
|
||||
protected static function DoCreateActionGrant($iProfile, $iAction, $sClass, $bPermission = true)
|
||||
{
|
||||
$oNewObj = MetaModel::NewObject("URP_ActionGrant");
|
||||
$oNewObj->Set('profileid', $iProfile);
|
||||
$oNewObj->Set('permission', $bPermission ? 'yes' : 'no');
|
||||
$oNewObj->Set('class', $sClass);
|
||||
$oNewObj->Set('action', self::$m_aActions[$iAction]);
|
||||
$iId = $oNewObj->DBInsertNoReload();
|
||||
return $iId;
|
||||
}
|
||||
|
||||
protected static function DoCreateStimulusGrant($iProfile, $sStimulusCode, $sClass)
|
||||
{
|
||||
$oNewObj = MetaModel::NewObject("URP_StimulusGrant");
|
||||
$oNewObj->Set('profileid', $iProfile);
|
||||
$oNewObj->Set('permission', 'yes');
|
||||
$oNewObj->Set('class', $sClass);
|
||||
$oNewObj->Set('stimulus', $sStimulusCode);
|
||||
$iId = $oNewObj->DBInsertNoReload();
|
||||
return $iId;
|
||||
}
|
||||
|
||||
protected static function DoCreateAdminProfile()
|
||||
{
|
||||
$oNewObj = MetaModel::NewObject("URP_Profiles");
|
||||
$oNewObj->Set('name', 'Administrator');
|
||||
$oNewObj->Set('description', 'Has the rights on everything (bypassing any control)');
|
||||
$iNewId = $oNewObj->DBInsertNoReload();
|
||||
if ($iNewId != ADMIN_PROFILE_ID)
|
||||
{
|
||||
throw new CoreException('Admin profile could not be created with its standard id', array('requested'=>ADMIN_PROFILE_ID, 'obtained'=>$iNewId));
|
||||
}
|
||||
}
|
||||
|
||||
protected static function DoCreateOneProfile($sName, $aProfileData)
|
||||
{
|
||||
$sDescription = $aProfileData['description'];
|
||||
if (strlen(trim($aProfileData['write_modules'])) == 0)
|
||||
{
|
||||
$aWriteModules = array();
|
||||
}
|
||||
else
|
||||
{
|
||||
$aWriteModules = explode(',', trim($aProfileData['write_modules']));
|
||||
}
|
||||
$aStimuli = $aProfileData['stimuli'];
|
||||
|
||||
$oNewObj = MetaModel::NewObject("URP_Profiles");
|
||||
$oNewObj->Set('name', $sName);
|
||||
$oNewObj->Set('description', $sDescription);
|
||||
$iProfile = $oNewObj->DBInsertNoReload();
|
||||
|
||||
// Project in every dimension
|
||||
//
|
||||
$oDimensionSet = new DBObjectSet(DBObjectSearch::FromOQL_AllData("SELECT URP_Dimensions"));
|
||||
while ($oDimension = $oDimensionSet->Fetch())
|
||||
{
|
||||
$iDimension = $oDimension->GetKey();
|
||||
self::DoCreateProfileProjection($iProfile, $iDimension);
|
||||
}
|
||||
|
||||
// Grant read rights for everything
|
||||
//
|
||||
foreach (MetaModel::GetClasses('bizmodel') as $sClass)
|
||||
{
|
||||
// Skip non instantiable classes
|
||||
if (MetaModel::IsAbstract($sClass)) continue;
|
||||
|
||||
self::DoCreateActionGrant($iProfile, UR_ACTION_READ, $sClass);
|
||||
self::DoCreateActionGrant($iProfile, UR_ACTION_BULK_READ, $sClass);
|
||||
}
|
||||
|
||||
// Grant write for given modules
|
||||
// Start by compiling the information, because some modules may overlap
|
||||
$aWriteableClasses = array();
|
||||
foreach ($aWriteModules as $sModule)
|
||||
{
|
||||
//$oPage->p('Granting write access for the module"'.$sModule.'" - '.count(self::$m_aModules[$sModule]).' classes');
|
||||
foreach (self::$m_aModules[$sModule] as $sClass)
|
||||
{
|
||||
$aWriteableClasses[$sClass] = true;
|
||||
}
|
||||
}
|
||||
foreach ($aWriteableClasses as $sClass => $foo)
|
||||
{
|
||||
// Skip non instantiable classes
|
||||
if (MetaModel::IsAbstract($sClass)) continue;
|
||||
|
||||
if (!MetaModel::IsValidClass($sClass))
|
||||
{
|
||||
throw new CoreException("Invalid class name '$sClass'");
|
||||
}
|
||||
self::DoCreateActionGrant($iProfile, UR_ACTION_MODIFY, $sClass);
|
||||
self::DoCreateActionGrant($iProfile, UR_ACTION_DELETE, $sClass);
|
||||
self::DoCreateActionGrant($iProfile, UR_ACTION_BULK_MODIFY, $sClass);
|
||||
// By default, do not allow bulk deletion operations for standard users
|
||||
// self::DoCreateActionGrant($iProfile, UR_ACTION_BULK_DELETE, $sClass);
|
||||
}
|
||||
|
||||
// Grant stimuli for given classes
|
||||
foreach ($aStimuli as $sClass => $sAllowedStimuli)
|
||||
{
|
||||
if (!MetaModel::IsValidClass($sClass))
|
||||
{
|
||||
// Could be a class defined in a module that wasn't installed
|
||||
continue;
|
||||
//throw new CoreException("Invalid class name '$sClass'");
|
||||
}
|
||||
|
||||
if ($sAllowedStimuli == 'any')
|
||||
{
|
||||
$aAllowedStimuli = array_keys(MetaModel::EnumStimuli($sClass));
|
||||
}
|
||||
elseif ($sAllowedStimuli == 'none')
|
||||
{
|
||||
$aAllowedStimuli = array();
|
||||
}
|
||||
else
|
||||
{
|
||||
$aAllowedStimuli = explode(',', $sAllowedStimuli);
|
||||
}
|
||||
foreach ($aAllowedStimuli as $sStimulusCode)
|
||||
{
|
||||
self::DoCreateStimulusGrant($iProfile, $sStimulusCode, $sClass);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function DoCreateDimensions()
|
||||
{
|
||||
$aClass = MetaModel::GetClasses();
|
||||
foreach(self::$m_aDimensions as $sName => $aDimensionData)
|
||||
{
|
||||
$iDimension = self::DoCreateDimension($sName, $aDimensionData);
|
||||
|
||||
foreach($aClass as $sClass)
|
||||
{
|
||||
// Skip non instantiable classes
|
||||
if (MetaModel::IsAbstract($sClass)) continue;
|
||||
|
||||
if (!MetaModel::IsValidClass($sClass))
|
||||
{
|
||||
throw new CoreException("Invalid class name '$sClass'");
|
||||
}
|
||||
self::DoCreateClassProjection($iDimension, $sClass);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function DoCreateProfiles()
|
||||
{
|
||||
self::DoCreateAdminProfile();
|
||||
|
||||
foreach(self::$m_aProfiles as $sName => $aProfileData)
|
||||
{
|
||||
self::DoCreateOneProfile($sName, $aProfileData);
|
||||
}
|
||||
}
|
||||
|
||||
public static function ComputeBasicProfiles()
|
||||
{
|
||||
// In this profiling scheme, one single module represents all the classes
|
||||
//
|
||||
self::$m_aModules = array(
|
||||
'UserData' => MetaModel::GetClasses('bizmodel'),
|
||||
);
|
||||
|
||||
self::$m_aProfiles = array(
|
||||
'Reader' => array(
|
||||
'description' => 'Person having a ready-only access to the data',
|
||||
'write_modules' => '',
|
||||
'stimuli' => array(
|
||||
),
|
||||
),
|
||||
'Writer' => array(
|
||||
'description' => 'Contributor to the contents (read + write access)',
|
||||
'write_modules' => 'UserData',
|
||||
'stimuli' => array(
|
||||
// any class => 'any'
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
public static function ComputeITILProfiles()
|
||||
{
|
||||
// In this profiling scheme, modules are based on ITIL recommendations
|
||||
//
|
||||
self::$m_aModules = array(
|
||||
/*
|
||||
'WriteModule' => array(
|
||||
'someclass',
|
||||
'anotherclass',
|
||||
),
|
||||
*/
|
||||
'General' => MetaModel::GetClasses('structure'),
|
||||
'Documentation' => MetaModel::GetClasses('documentation'),
|
||||
'Configuration' => MetaModel::GetClasses('configmgmt'),
|
||||
'Incident' => MetaModel::GetClasses('incidentmgmt'),
|
||||
'Problem' => MetaModel::GetClasses('problemmgmt'),
|
||||
'Change' => MetaModel::GetClasses('changemgmt'),
|
||||
'Service' => MetaModel::GetClasses('servicemgmt'),
|
||||
'Call' => MetaModel::GetClasses('requestmgmt'),
|
||||
'KnownError' => MetaModel::GetClasses('knownerrormgmt'),
|
||||
);
|
||||
|
||||
self::$m_aProfiles = array(
|
||||
'Configuration Manager' => array(
|
||||
'description' => 'Person in charge of the documentation of the managed CIs',
|
||||
'write_modules' => 'General,Documentation,Configuration',
|
||||
'stimuli' => array(
|
||||
//'bizServer' => 'none',
|
||||
//'bizContract' => 'none',
|
||||
//'bizIncidentTicket' => 'none',
|
||||
//'bizChangeTicket' => 'any',
|
||||
),
|
||||
),
|
||||
'Service Desk Agent' => array(
|
||||
'description' => 'Person in charge of creating incident reports',
|
||||
'write_modules' => 'Incident,Call',
|
||||
'stimuli' => array(
|
||||
'Incident' => 'ev_assign',
|
||||
'UserRequest' => 'ev_assign',
|
||||
),
|
||||
),
|
||||
'Support Agent' => array(
|
||||
'description' => 'Person analyzing and solving the current incidents or problems',
|
||||
'write_modules' => 'Incident,Problem,KnownError',
|
||||
'stimuli' => array(
|
||||
'Incident' => 'ev_assign,ev_reassign,ev_resolve,ev_close',
|
||||
'UserRequest' => 'ev_assign,ev_reassign,ev_resolve,ev_close,ev_freeze',
|
||||
),
|
||||
),
|
||||
'Change Implementor' => array(
|
||||
'description' => 'Person executing the changes',
|
||||
'write_modules' => 'Change',
|
||||
'stimuli' => array(
|
||||
'NormalChange' => 'ev_plan,ev_replan,ev_implement,ev_monitor',
|
||||
'EmergencyChange' => 'ev_plan,ev_replan,ev_implement,ev_monitor',
|
||||
'RoutineChange' => 'ev_plan,ev_replan,ev_implement,ev_monitor',
|
||||
),
|
||||
),
|
||||
'Change Supervisor' => array(
|
||||
'description' => 'Person responsible for the overall change execution',
|
||||
'write_modules' => 'Change',
|
||||
'stimuli' => array(
|
||||
'NormalChange' => 'ev_validate,ev_reject,ev_assign,ev_reopen,ev_finish',
|
||||
'EmergencyChange' => 'ev_assign,ev_reopen,ev_finish',
|
||||
'RoutineChange' => 'ev_assign,ev_reopen,ev_finish',
|
||||
),
|
||||
),
|
||||
'Change Approver' => array(
|
||||
'description' => 'Person who could be impacted by some changes',
|
||||
'write_modules' => 'Change',
|
||||
'stimuli' => array(
|
||||
'NormalChange' => 'ev_approve,ev_notapprove',
|
||||
'EmergencyChange' => 'ev_approve,ev_notapprove',
|
||||
'RoutineChange' => 'none',
|
||||
),
|
||||
),
|
||||
'Service Manager' => array(
|
||||
'description' => 'Person responsible for the service delivered to the [internal] customer',
|
||||
'write_modules' => 'Service',
|
||||
'stimuli' => array(
|
||||
),
|
||||
),
|
||||
'Document author' => array(
|
||||
'description' => 'Any person who could contribute to documentation',
|
||||
'write_modules' => 'Documentation',
|
||||
'stimuli' => array(
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
UserRights::SelectModule('UserRightsProjection');
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
require_once("../application/webpage.class.inc.php");
|
||||
require_once(APPROOT."/application/webpage.class.inc.php");
|
||||
|
||||
class ajax_page extends WebPage
|
||||
{
|
||||
@@ -33,6 +33,9 @@ class ajax_page extends WebPage
|
||||
* @var Hash
|
||||
*/
|
||||
protected $m_sReadyScript;
|
||||
protected $m_sCurrentTab;
|
||||
protected $m_sCurrentTabContainer;
|
||||
protected $m_aTabs;
|
||||
|
||||
/**
|
||||
* constructor for the web page
|
||||
@@ -44,8 +47,44 @@ class ajax_page extends WebPage
|
||||
$this->m_sReadyScript = "";
|
||||
$this->add_header("Content-type: text/html; charset=utf-8");
|
||||
$this->add_header("Cache-control: no-cache");
|
||||
$this->m_sCurrentTabContainer = '';
|
||||
$this->m_sCurrentTab = '';
|
||||
$this->m_aTabs = array();
|
||||
}
|
||||
|
||||
public function AddTabContainer($sTabContainer, $sPrefix = '')
|
||||
{
|
||||
$this->m_aTabs[$sTabContainer] = array('content' =>'', 'prefix' => $sPrefix);
|
||||
$this->add("\$Tabs:$sTabContainer\$");
|
||||
}
|
||||
|
||||
public function AddToTab($sTabContainer, $sTabLabel, $sHtml)
|
||||
{
|
||||
if (!isset($this->m_aTabs[$sTabContainer]['content'][$sTabLabel]))
|
||||
{
|
||||
// Set the content of the tab
|
||||
$this->m_aTabs[$sTabContainer]['content'][$sTabLabel] = $sHtml;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Append to the content of the tab
|
||||
$this->m_aTabs[$sTabContainer]['content'][$sTabLabel] .= $sHtml;
|
||||
}
|
||||
}
|
||||
|
||||
public function SetCurrentTabContainer($sTabContainer = '')
|
||||
{
|
||||
$sPreviousTabContainer = $this->m_sCurrentTabContainer;
|
||||
$this->m_sCurrentTabContainer = $sTabContainer;
|
||||
return $sPreviousTabContainer;
|
||||
}
|
||||
|
||||
public function SetCurrentTab($sTabLabel = '')
|
||||
{
|
||||
$sPreviousTab = $this->m_sCurrentTab;
|
||||
$this->m_sCurrentTab = $sTabLabel;
|
||||
return $sPreviousTab;
|
||||
}
|
||||
|
||||
/**
|
||||
* Echoes the content of the whole page
|
||||
@@ -57,14 +96,94 @@ class ajax_page extends WebPage
|
||||
{
|
||||
header($s_header);
|
||||
}
|
||||
|
||||
if (count($this->m_aTabs) > 0)
|
||||
{
|
||||
$this->add_ready_script(
|
||||
<<<EOF
|
||||
// The "tab widgets" to handle.
|
||||
var tabs = $('div[id^=tabbedContent]');
|
||||
|
||||
// This selector will be reused when selecting actual tab widget A elements.
|
||||
var tab_a_selector = 'ul.ui-tabs-nav a';
|
||||
|
||||
// Enable tabs on all tab widgets. The `event` property must be overridden so
|
||||
// that the tabs aren't changed on click, and any custom event name can be
|
||||
// specified. Note that if you define a callback for the 'select' event, it
|
||||
// will be executed for the selected tab whenever the hash changes.
|
||||
tabs.tabs({ event: 'change' });
|
||||
|
||||
// Define our own click handler for the tabs, overriding the default.
|
||||
tabs.find( tab_a_selector ).click(function()
|
||||
{
|
||||
var state = {};
|
||||
|
||||
// Get the id of this tab widget.
|
||||
var id = $(this).closest( 'div[id^=tabbedContent]' ).attr( 'id' );
|
||||
|
||||
// Get the index of this tab.
|
||||
var idx = $(this).parent().prevAll().length;
|
||||
|
||||
// Set the state!
|
||||
state[ id ] = idx;
|
||||
$.bbq.pushState( state );
|
||||
});
|
||||
EOF
|
||||
);
|
||||
}
|
||||
// Render the tabs in the page (if any)
|
||||
foreach($this->m_aTabs as $sTabContainerName => $aTabContainer)
|
||||
{
|
||||
$sTabs = '';
|
||||
$m_aTabs = $aTabContainer['content'];
|
||||
$sPrefix = $aTabContainer['prefix'];
|
||||
$container_index = 0;
|
||||
if (count($m_aTabs) > 0)
|
||||
{
|
||||
$sTabs = "<!-- tabs -->\n<div id=\"tabbedContent_{$sPrefix}{$container_index}\" class=\"light\">\n";
|
||||
$sTabs .= "<ul>\n";
|
||||
// Display the unordered list that will be rendered as the tabs
|
||||
$i = 0;
|
||||
foreach($m_aTabs as $sTabName => $sTabContent)
|
||||
{
|
||||
$sTabs .= "<li><a href=\"#tab_{$sPrefix}$i\" class=\"tab\"><span>".htmlentities($sTabName, ENT_QUOTES, 'UTF-8')."</span></a></li>\n";
|
||||
$i++;
|
||||
}
|
||||
$sTabs .= "</ul>\n";
|
||||
// Now add the content of the tabs themselves
|
||||
$i = 0;
|
||||
foreach($m_aTabs as $sTabName => $sTabContent)
|
||||
{
|
||||
$sTabs .= "<div id=\"tab_{$sPrefix}$i\">".$sTabContent."</div>\n";
|
||||
$i++;
|
||||
}
|
||||
$sTabs .= "</div>\n<!-- end of tabs-->\n";
|
||||
}
|
||||
$this->s_content = str_replace("\$Tabs:$sTabContainerName\$", $sTabs, $this->s_content);
|
||||
$container_index++;
|
||||
}
|
||||
|
||||
$s_captured_output = ob_get_contents();
|
||||
ob_end_clean();
|
||||
echo $this->s_content;
|
||||
//echo $this->s_deferred_content;
|
||||
if (count($this->a_scripts) > 0)
|
||||
{
|
||||
echo "<script type=\"text/javascript\">\n";
|
||||
echo implode("\n", $this->a_scripts);
|
||||
echo "\n</script>\n";
|
||||
}
|
||||
if (!empty($this->s_deferred_content))
|
||||
{
|
||||
echo "<script type=\"text/javascript\">\n";
|
||||
echo "\$('body').append('".$this->s_deferred_content."');\n";
|
||||
echo "\n</script>\n";
|
||||
}
|
||||
if (!empty($this->m_sReadyScript))
|
||||
{
|
||||
echo "<script>\n";
|
||||
echo "<script type=\"text/javascript\">\n";
|
||||
echo $this->m_sReadyScript; // Ready Scripts are output as simple scripts
|
||||
echo "</script>\n";
|
||||
echo "\n</script>\n";
|
||||
}
|
||||
if (trim($s_captured_output) != "")
|
||||
{
|
||||
@@ -81,6 +200,18 @@ class ajax_page extends WebPage
|
||||
public function small_p($sText)
|
||||
{
|
||||
}
|
||||
|
||||
public function add($sHtml)
|
||||
{
|
||||
if (!empty($this->m_sCurrentTabContainer) && !empty($this->m_sCurrentTab))
|
||||
{
|
||||
$this->AddToTab($this->m_sCurrentTabContainer, $this->m_sCurrentTab, $sHtml);
|
||||
}
|
||||
else
|
||||
{
|
||||
parent::add($sHtml);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a script to be executed when the DOM is ready (typical JQuery use)
|
||||
@@ -94,6 +225,17 @@ class ajax_page extends WebPage
|
||||
// considering that at this time everything in the page is "ready"...
|
||||
$this->m_sReadyScript .= $sScript;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cannot be called in this context, since Ajax pages do not share
|
||||
* any context with the calling page !!
|
||||
*/
|
||||
public function GetUniqueId()
|
||||
{
|
||||
assert(false);
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
@@ -23,13 +23,13 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
require_once('../application/applicationcontext.class.inc.php');
|
||||
require_once('../application/cmdbabstract.class.inc.php');
|
||||
require_once('../application/displayblock.class.inc.php');
|
||||
require_once('../application/audit.category.class.inc.php');
|
||||
require_once('../application/audit.rule.class.inc.php');
|
||||
//require_once('../application/menunode.class.inc.php');
|
||||
require_once('../application/utils.inc.php');
|
||||
require_once(APPROOT.'/application/applicationcontext.class.inc.php');
|
||||
require_once(APPROOT.'/application/cmdbabstract.class.inc.php');
|
||||
require_once(APPROOT.'/application/displayblock.class.inc.php');
|
||||
require_once(APPROOT.'/application/audit.category.class.inc.php');
|
||||
require_once(APPROOT.'/application/audit.rule.class.inc.php');
|
||||
//require_once(APPROOT.'/application/menunode.class.inc.php');
|
||||
require_once(APPROOT.'/application/utils.inc.php');
|
||||
|
||||
class ApplicationException extends CoreException
|
||||
{
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
require_once("../application/utils.inc.php");
|
||||
require_once(APPROOT."/application/utils.inc.php");
|
||||
/**
|
||||
* Helper class to store and manipulate the parameters that make the application's context
|
||||
*
|
||||
@@ -57,19 +57,52 @@ class ApplicationContext
|
||||
if (empty(self::$aDefaultValues))
|
||||
{
|
||||
self::$aDefaultValues = array();
|
||||
$aContext = utils::ReadParam('c', array());
|
||||
foreach($this->aNames as $sName)
|
||||
{
|
||||
$sValue = utils::ReadParam($sName, '');
|
||||
$sValue = isset($aContext[$sName]) ? $aContext[$sName] : '';
|
||||
// TO DO: check if some of the context parameters are mandatory (or have default values)
|
||||
if (!empty($sValue))
|
||||
{
|
||||
self::$aDefaultValues[$sName] = $sValue;
|
||||
}
|
||||
// Hmm, there must be a better (more generic) way to handle the case below:
|
||||
// When there is only one possible (allowed) organization, the context must be
|
||||
// fixed to this org
|
||||
if ($sName == 'org_id')
|
||||
{
|
||||
if (MetaModel::IsValidClass('Organization'))
|
||||
{
|
||||
$oSearchFilter = new DBObjectSearch('Organization');
|
||||
$oSet = new CMDBObjectSet($oSearchFilter);
|
||||
$iCount = $oSet->Count();
|
||||
if ($iCount == 1)
|
||||
{
|
||||
// Only one possible value for org_id, set it in the context
|
||||
$oOrg = $oSet->Fetch();
|
||||
self::$aDefaultValues[$sName] = $oOrg->GetKey();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->aValues = self::$aDefaultValues;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current value for the given parameter
|
||||
* @param string $sParamName Name of the parameter to read
|
||||
* @return mixed The value for this parameter
|
||||
*/
|
||||
public function GetCurrentValue($sParamName, $defaultValue = '')
|
||||
{
|
||||
if (isset($this->aValues[$sParamName]))
|
||||
{
|
||||
return $this->aValues[$sParamName];
|
||||
}
|
||||
return $defaultValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the context as string with the format name1=value1&name2=value2....
|
||||
* return string The context as a string to be appended to an href property
|
||||
@@ -79,7 +112,7 @@ class ApplicationContext
|
||||
$aParams = array();
|
||||
foreach($this->aValues as $sName => $sValue)
|
||||
{
|
||||
$aParams[] = $sName.'='.urlencode($sValue);
|
||||
$aParams[] = "c[$sName]".'='.urlencode($sValue);
|
||||
}
|
||||
return implode("&", $aParams);
|
||||
}
|
||||
@@ -93,7 +126,7 @@ class ApplicationContext
|
||||
$sContext = "";
|
||||
foreach($this->aValues as $sName => $sValue)
|
||||
{
|
||||
$sContext .= "<input type=\"hidden\" name=\"$sName\" value=\"$sValue\" />\n";
|
||||
$sContext .= "<input type=\"hidden\" name=\"c[$sName]\" value=\"$sValue\" />\n";
|
||||
}
|
||||
return $sContext;
|
||||
}
|
||||
@@ -104,7 +137,12 @@ class ApplicationContext
|
||||
*/
|
||||
public function GetAsHash()
|
||||
{
|
||||
return $this->aValues;
|
||||
$aReturn = array();
|
||||
foreach($this->aValues as $sName => $sValue)
|
||||
{
|
||||
$aReturn["c[$sName]"] = $sValue;
|
||||
}
|
||||
return $aReturn;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
51
application/applicationextension.inc.php
Normal file
51
application/applicationextension.inc.php
Normal file
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* Class iPlugin
|
||||
* Management of application plugin
|
||||
*
|
||||
* @author Erwan Taloc <erwan.taloc@combodo.com>
|
||||
* @author Romain Quetiez <romain.quetiez@combodo.com>
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
interface iApplicationUIExtension
|
||||
{
|
||||
public function OnDisplayProperties($oObject, WebPage $oPage, $bEditMode = false);
|
||||
public function OnDisplayRelations($oObject, WebPage $oPage, $bEditMode = false);
|
||||
public function OnFormSubmit($oObject, $sFormPrefix = '');
|
||||
public function OnFormCancel($sTempId); // temp id is made of session_id and transaction_id, it identifies the object in a unique way
|
||||
|
||||
public function EnumUsedAttributes($oObject); // Not yet implemented
|
||||
public function GetIcon($oObject); // Not yet implemented
|
||||
public function GetHilightClass($oObject);
|
||||
|
||||
public function EnumAllowedActions(DBObjectSet $oSet);
|
||||
}
|
||||
|
||||
interface iApplicationObjectExtension
|
||||
{
|
||||
public function OnIsModified($oObject);
|
||||
public function OnCheckToWrite($oObject);
|
||||
public function OnCheckToDelete($oObject);
|
||||
public function OnDBUpdate($oObject, $oChange = null);
|
||||
public function OnDBInsert($oObject, $oChange = null);
|
||||
public function OnDBDelete($oObject, $oChange = null);
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -25,7 +25,7 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
require_once('../application/cmdbabstract.class.inc.php');
|
||||
require_once(APPROOT.'/application/cmdbabstract.class.inc.php');
|
||||
|
||||
class AuditCategory extends cmdbAbstractObject
|
||||
{
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
require_once('../application/audit.category.class.inc.php');
|
||||
require_once(APPROOT.'/application/audit.category.class.inc.php');
|
||||
|
||||
class AuditRule extends cmdbAbstractObject
|
||||
{
|
||||
|
||||
88
application/clipage.class.inc.php
Normal file
88
application/clipage.class.inc.php
Normal file
@@ -0,0 +1,88 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* CLI page
|
||||
* The page adds the content-type text/XML and the encoding into the headers
|
||||
*
|
||||
* @author Erwan Taloc <erwan.taloc@combodo.com>
|
||||
* @author Romain Quetiez <romain.quetiez@combodo.com>
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
require_once(APPROOT."/application/webpage.class.inc.php");
|
||||
|
||||
class CLIPage
|
||||
{
|
||||
function __construct($s_title)
|
||||
{
|
||||
}
|
||||
|
||||
public function output()
|
||||
{
|
||||
}
|
||||
|
||||
public function add($sText)
|
||||
{
|
||||
echo $sText;
|
||||
}
|
||||
|
||||
public function p($sText)
|
||||
{
|
||||
echo $sText."\n";
|
||||
}
|
||||
|
||||
public function pre($sText)
|
||||
{
|
||||
echo $sText."\n";
|
||||
}
|
||||
|
||||
public function add_comment($sText)
|
||||
{
|
||||
echo "#".$sText."\n";
|
||||
}
|
||||
|
||||
public function table($aConfig, $aData, $aParams = array())
|
||||
{
|
||||
$aCells = array();
|
||||
foreach($aConfig as $sName=>$aDef)
|
||||
{
|
||||
if (strlen($aDef['description']) > 0)
|
||||
{
|
||||
$aCells[] = $aDef['label'].' ('.$aDef['description'].')';
|
||||
}
|
||||
else
|
||||
{
|
||||
$aCells[] = $aDef['label'];
|
||||
}
|
||||
}
|
||||
echo implode(';', $aCells)."\n";
|
||||
|
||||
foreach($aData as $aRow)
|
||||
{
|
||||
$aCells = array();
|
||||
foreach($aConfig as $sName=>$aAttribs)
|
||||
{
|
||||
$sValue = $aRow["$sName"];
|
||||
$aCells[] = $sValue;
|
||||
}
|
||||
echo implode(';', $aCells)."\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -24,14 +24,14 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
require_once("../application/webpage.class.inc.php");
|
||||
require_once(APPROOT."/application/webpage.class.inc.php");
|
||||
|
||||
class CSVPage extends WebPage
|
||||
{
|
||||
function __construct($s_title)
|
||||
{
|
||||
parent::__construct($s_title);
|
||||
$this->add_header("Content-type: text/html; charset=iso-8859-1");
|
||||
$this->add_header("Content-type: text/html; charset=utf-8");
|
||||
$this->add_header("Cache-control: no-cache");
|
||||
}
|
||||
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
require_once('../application/webpage.class.inc.php');
|
||||
require_once('../application/utils.inc.php');
|
||||
require_once(APPROOT.'/application/webpage.class.inc.php');
|
||||
require_once(APPROOT.'/application/utils.inc.php');
|
||||
/**
|
||||
* Helper class to manage 'blocks' of HTML pieces that are parts of a page and contain some list of cmdb objects
|
||||
*
|
||||
@@ -214,7 +214,7 @@ class DisplayBlock
|
||||
{
|
||||
$sHtml = '';
|
||||
$aExtraParams = array_merge($aExtraParams, $this->m_aParams);
|
||||
$aExtraParams['block_id'] = $sId;
|
||||
$aExtraParams['currentId'] = $sId;
|
||||
$sExtraParams = addslashes(str_replace('"', "'", json_encode($aExtraParams))); // JSON encode, change the style of the quotes and escape them
|
||||
|
||||
$bAutoReload = false;
|
||||
@@ -224,14 +224,14 @@ class DisplayBlock
|
||||
{
|
||||
case 'fast':
|
||||
$bAutoReload = true;
|
||||
$iReloadInterval = utils::GetConfig()->GetFastReloadInterval()*1000;
|
||||
$iReloadInterval = MetaModel::GetConfig()->GetFastReloadInterval()*1000;
|
||||
break;
|
||||
|
||||
case 'standard':
|
||||
case 'true':
|
||||
case true:
|
||||
$bAutoReload = true;
|
||||
$iReloadInterval = utils::GetConfig()->GetStandardReloadInterval()*1000;
|
||||
$iReloadInterval = MetaModel::GetConfig()->GetStandardReloadInterval()*1000;
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -253,7 +253,7 @@ class DisplayBlock
|
||||
{
|
||||
// render now
|
||||
$sHtml .= "<div id=\"$sId\" class=\"display_block\">\n";
|
||||
$sHtml .= $this->GetRenderContent($oPage, $aExtraParams);
|
||||
$sHtml .= $this->GetRenderContent($oPage, $aExtraParams, $sId);
|
||||
$sHtml .= "</div>\n";
|
||||
}
|
||||
else
|
||||
@@ -303,10 +303,18 @@ class DisplayBlock
|
||||
|
||||
public function RenderContent(WebPage $oPage, $aExtraParams = array())
|
||||
{
|
||||
$oPage->add($this->GetRenderContent($oPage, $aExtraParams));
|
||||
if (empty($aExtraParams['currentId']))
|
||||
{
|
||||
$sId = $oPage->GetUniqueId(); // Works only if the page is not an Ajax one !
|
||||
}
|
||||
else
|
||||
{
|
||||
$sId = $aExtraParams['currentId'];
|
||||
}
|
||||
$oPage->add($this->GetRenderContent($oPage, $aExtraParams, $sId));
|
||||
}
|
||||
|
||||
public function GetRenderContent(WebPage $oPage, $aExtraParams = array())
|
||||
public function GetRenderContent(WebPage $oPage, $aExtraParams = array(), $sId)
|
||||
{
|
||||
$sHtml = '';
|
||||
// Add the extra params into the filter if they make sense for such a filter
|
||||
@@ -320,17 +328,40 @@ class DisplayBlock
|
||||
}
|
||||
if ($this->m_sStyle != 'links')
|
||||
{
|
||||
$aFilterCodes = array_keys(MetaModel::GetClassFilterDefs($this->m_oFilter->GetClass()));
|
||||
$oAppContext = new ApplicationContext();
|
||||
$sClass = $this->m_oFilter->GetClass();
|
||||
$aFilterCodes = array_keys(MetaModel::GetClassFilterDefs($sClass));
|
||||
foreach($oAppContext->GetNames() as $sContextParam)
|
||||
{
|
||||
eval("\$sParamCode = $sClass::MapContextParam('$sContextParam');"); //Map context parameter to the value/filter code depending on the class
|
||||
if (!is_null($sParamCode))
|
||||
{
|
||||
$sParamValue = $oAppContext->GetCurrentValue($sContextParam, null);
|
||||
if (!is_null($sParamValue))
|
||||
{
|
||||
$aExtraParams[$sParamCode] = $sParamValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach($aFilterCodes as $sFilterCode)
|
||||
{
|
||||
$sExternalFilterValue = utils::ReadParam($sFilterCode, '');
|
||||
$condition = null;
|
||||
if (isset($aExtraParams[$sFilterCode]))
|
||||
{
|
||||
$this->m_oFilter->AddCondition($sFilterCode, trim($aExtraParams[$sFilterCode])); // Use the default 'loose' operator
|
||||
$condition = $aExtraParams[$sFilterCode];
|
||||
}
|
||||
else if ($bDoSearch && $sExternalFilterValue != "")
|
||||
// else if ($bDoSearch && $sExternalFilterValue != "")
|
||||
if ($bDoSearch && $sExternalFilterValue != "")
|
||||
{
|
||||
$this->m_oFilter->AddCondition($sFilterCode, trim($sExternalFilterValue)); // Use the default 'loose' operator
|
||||
// Search takes precedence over context params...
|
||||
unset($aExtraParams[$sFilterCode]);
|
||||
$condition = trim($sExternalFilterValue);
|
||||
}
|
||||
|
||||
if (!is_null($condition))
|
||||
{
|
||||
$this->m_oFilter->AddCondition($sFilterCode, $condition); // Use the default 'loose' operator
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -346,7 +377,14 @@ class DisplayBlock
|
||||
$sLabels = array();
|
||||
while($oObj = $this->m_oSet->Fetch())
|
||||
{
|
||||
$sValue = $oObj->Get($sGroupByField);
|
||||
if (isset($aExtraParams['group_by_expr']))
|
||||
{
|
||||
eval("\$sValue = ".sprintf($aExtraParams['group_by_expr'], $oObj->Get($sGroupByField)).';');
|
||||
}
|
||||
else
|
||||
{
|
||||
$sValue = $oObj->Get($sGroupByField);
|
||||
}
|
||||
$aGroupBy[$sValue] = isset($aGroupBy[$sValue]) ? $aGroupBy[$sValue]+1 : 1;
|
||||
$sLabels[$sValue] = $oObj->GetAsHtml($sGroupByField);
|
||||
}
|
||||
@@ -410,7 +448,15 @@ class DisplayBlock
|
||||
$aKeys = array();
|
||||
foreach($aGroupByFields as $aField)
|
||||
{
|
||||
$aKeys[$aField['alias'].'.'.$aField['att_code']] = $aObjects[$aField['alias']]->Get($aField['att_code']);
|
||||
$sAlias = $aField['alias'];
|
||||
if (is_null($aObjects[$sAlias]))
|
||||
{
|
||||
$aKeys[$sAlias.'.'.$aField['att_code']] = '';
|
||||
}
|
||||
else
|
||||
{
|
||||
$aKeys[$sAlias.'.'.$aField['att_code']] = $aObjects[$sAlias]->Get($aField['att_code']);
|
||||
}
|
||||
}
|
||||
$sCategory = implode($aKeys, ' ');
|
||||
$aResults[$sCategory][] = $aObjects;
|
||||
@@ -438,7 +484,11 @@ class DisplayBlock
|
||||
$aSimpleArray = array();
|
||||
foreach($aObjects as $aRow)
|
||||
{
|
||||
$aSimpleArray[] = $aRow[$aDisplayAliases[0]];
|
||||
$oObj = $aRow[$aDisplayAliases[0]];
|
||||
if (!is_null($oObj))
|
||||
{
|
||||
$aSimpleArray[] = $oObj;
|
||||
}
|
||||
}
|
||||
$oSet = CMDBObjectSet::FromArray($this->m_oFilter->GetClass(), $aSimpleArray);
|
||||
$sHtml .= "<tr><td>".cmdbAbstractObject::GetDisplaySet($oPage, $oSet, $aExtraParams)."</td></tr>\n";
|
||||
@@ -582,7 +632,7 @@ class DisplayBlock
|
||||
$aFilterCodes = array_keys(MetaModel::GetClassFilterDefs($this->m_oFilter->GetClass()));
|
||||
foreach($oAppContext->GetNames() as $sFilterCode)
|
||||
{
|
||||
$sContextParamValue = trim(utils::ReadParam($sFilterCode, null));
|
||||
$sContextParamValue = $oAppContext->GetCurrentValue($sFilterCode, null);
|
||||
if (!is_null($sContextParamValue) && ! empty($sContextParamValue) && MetaModel::IsValidFilterCode($sClass, $sFilterCode))
|
||||
{
|
||||
$this->m_oFilter->AddCondition($sFilterCode, $sContextParamValue); // Use the default 'loose' operator
|
||||
@@ -596,7 +646,7 @@ class DisplayBlock
|
||||
$this->m_oSet = new CMDBObjectSet($this->m_oFilter, array(), $aQueryParams);
|
||||
}
|
||||
$iCount = $this->m_oSet->Count();
|
||||
$sHyperlink = '../pages/UI.php?operation=search&filter='.$this->m_oFilter->serialize();
|
||||
$sHyperlink = '../pages/UI.php?operation=search&'.$oAppContext->GetForLink().'&filter='.$this->m_oFilter->serialize();
|
||||
$sHtml .= '<p><a class="actions" href="'.$sHyperlink.'">';
|
||||
$sHtml .= MetaModel::GetClassIcon($sClass, true, 'float;left;margin-right:10px;');
|
||||
$sHtml .= MetaModel::GetName($sClass).': '.$iCount.'</a></p>';
|
||||
@@ -624,7 +674,7 @@ class DisplayBlock
|
||||
$aFilterCodes = array_keys(MetaModel::GetClassFilterDefs($this->m_oFilter->GetClass()));
|
||||
foreach($oAppContext->GetNames() as $sFilterCode)
|
||||
{
|
||||
$sContextParamValue = trim(utils::ReadParam($sFilterCode, null));
|
||||
$sContextParamValue = $oAppContext->GetCurrentValue($sFilterCode, null);
|
||||
if (!is_null($sContextParamValue) && ! empty($sContextParamValue) && MetaModel::IsValidFilterCode($sClass, $sFilterCode))
|
||||
{
|
||||
$this->m_oFilter->AddCondition($sFilterCode, $sContextParamValue); // Use the default 'loose' operator
|
||||
@@ -657,7 +707,7 @@ class DisplayBlock
|
||||
}
|
||||
else
|
||||
{
|
||||
$sHyperlink = '../pages/UI.php?operation=search&filter='.$oFilter->serialize();
|
||||
$sHyperlink = '../pages/UI.php?operation=search&'.$oAppContext->GetForLink().'&filter='.$oFilter->serialize();
|
||||
$aCounts[$sStateValue] = "<a href=\"$sHyperlink\">{$aCounts[$sStateValue]}</a>";
|
||||
}
|
||||
}
|
||||
@@ -666,7 +716,7 @@ class DisplayBlock
|
||||
$sHtml .= '<tr><td>'.implode('</td><td>', $aCounts).'</td></tr></table></div>';
|
||||
// Title & summary
|
||||
$iCount = $this->m_oSet->Count();
|
||||
$sHyperlink = '../pages/UI.php?operation=search&filter='.$this->m_oFilter->serialize();
|
||||
$sHyperlink = '../pages/UI.php?operation=search&'.$oAppContext->GetForLink().'&filter='.$this->m_oFilter->serialize();
|
||||
$sHtml .= '<h1>'.Dict::S(str_replace('_', ':', $sTitle)).'</h1>';
|
||||
$sHtml .= '<a class="summary" href="'.$sHyperlink.'">'.Dict::Format(str_replace('_', ':', $sLabel), $iCount).'</a>';
|
||||
break;
|
||||
@@ -695,22 +745,21 @@ class DisplayBlock
|
||||
break;
|
||||
|
||||
case 'search':
|
||||
static $iSearchSectionId = 1;
|
||||
$sStyle = (isset($aExtraParams['open']) && ($aExtraParams['open'] == 'true')) ? 'SearchDrawer' : 'SearchDrawer DrawerClosed';
|
||||
$sHtml .= "<div id=\"Search_$iSearchSectionId\" class=\"$sStyle\">\n";
|
||||
$sHtml .= "<div id=\"ds_$sId\" class=\"$sStyle\">\n";
|
||||
$oPage->add_ready_script(
|
||||
<<<EOF
|
||||
$("#LnkSearch_$iSearchSectionId").click( function() {
|
||||
$("#Search_$iSearchSectionId").slideToggle('normal', function() { $("#Search_$iSearchSectionId").parent().resize(); } );
|
||||
$("#LnkSearch_$iSearchSectionId").toggleClass('open');
|
||||
$("#dh_$sId").click( function() {
|
||||
$("#ds_$sId").slideToggle('normal', function() { $("#ds_$sId").parent().resize(); } );
|
||||
$("#dh_$sId").toggleClass('open');
|
||||
});
|
||||
EOF
|
||||
);
|
||||
$aExtraParams['currentId'] = $sId;
|
||||
$sHtml .= cmdbAbstractObject::GetSearchForm($oPage, $this->m_oSet, $aExtraParams);
|
||||
$sHtml .= "</div>\n";
|
||||
$sHtml .= "<div class=\"HRDrawer\"></div>\n";
|
||||
$sHtml .= "<div id=\"LnkSearch_$iSearchSectionId\" class=\"DrawerHandle\">".Dict::S('UI:SearchToggle')."</div>\n";
|
||||
$iSearchSectionId++;
|
||||
$sHtml .= "<div id=\"dh_$sId\" class=\"DrawerHandle\">".Dict::S('UI:SearchToggle')."</div>\n";
|
||||
break;
|
||||
|
||||
case 'open_flash_chart':
|
||||
@@ -718,16 +767,17 @@ EOF
|
||||
$sChartType = isset($aExtraParams['chart_type']) ? $aExtraParams['chart_type'] : 'pie';
|
||||
$sTitle = isset($aExtraParams['chart_title']) ? $aExtraParams['chart_title'] : '';
|
||||
$sGroupBy = isset($aExtraParams['group_by']) ? $aExtraParams['group_by'] : '';
|
||||
$sGroupByExpr = isset($aExtraParams['group_by_expr']) ? '¶ms[group_by_expr]='.$aExtraParams['group_by_expr'] : '';
|
||||
$sFilter = $this->m_oFilter->serialize();
|
||||
$sHtml .= "<div id=\"my_chart_{$iChartCounter}\">If the chart does not display, <a href=\"http://get.adobe.com/flash/\" target=\"_blank\">install Flash</a></div>\n";
|
||||
$oPage->add_script("function ofc_resize(left, width, top, height) { /* do nothing special */ }");
|
||||
$oPage->add_ready_script("swfobject.embedSWF(\"../images/open-flash-chart.swf\", \"my_chart_{$iChartCounter}\", \"100%\", \"300\",\"9.0.0\", \"expressInstall.swf\",
|
||||
{\"data-file\":\"".urlencode("../pages/ajax.render.php?operation=open_flash_chart¶ms[group_by]=$sGroupBy¶ms[chart_type]=$sChartType¶ms[chart_title]=$sTitle&filter=".$sFilter)."\"}, {wmode: 'transparent'} );\n");
|
||||
{\"data-file\":\"".urlencode("../pages/ajax.render.php?operation=open_flash_chart¶ms[group_by]=$sGroupBy{$sGroupByExpr}¶ms[chart_type]=$sChartType¶ms[chart_title]=$sTitle&filter=".$sFilter)."\"}, {wmode: 'transparent'} );\n");
|
||||
$iChartCounter++;
|
||||
break;
|
||||
|
||||
case 'open_flash_chart_ajax':
|
||||
include '../pages/php-ofc-library/open-flash-chart.php';
|
||||
require_once(APPROOT.'/pages/php-ofc-library/open-flash-chart.php');
|
||||
$sChartType = isset($aExtraParams['chart_type']) ? $aExtraParams['chart_type'] : 'pie';
|
||||
|
||||
$oChart = new open_flash_chart();
|
||||
@@ -742,7 +792,14 @@ EOF
|
||||
$aGroupBy = array();
|
||||
while($oObj = $this->m_oSet->Fetch())
|
||||
{
|
||||
$sValue = $oObj->Get($sGroupByField);
|
||||
if (isset($aExtraParams['group_by_expr']))
|
||||
{
|
||||
eval("\$sValue = ".sprintf($aExtraParams['group_by_expr'], $oObj->Get($sGroupByField)).';');
|
||||
}
|
||||
else
|
||||
{
|
||||
$sValue = $oObj->Get($sGroupByField);
|
||||
}
|
||||
$aGroupBy[$sValue] = isset($aGroupBy[$sValue]) ? $aGroupBy[$sValue]+1 : 1;
|
||||
}
|
||||
$sFilter = urlencode($this->m_oFilter->serialize());
|
||||
@@ -798,7 +855,14 @@ EOF
|
||||
$aGroupBy = array();
|
||||
while($oObj = $this->m_oSet->Fetch())
|
||||
{
|
||||
$sValue = $oObj->Get($sGroupByField);
|
||||
if (isset($aExtraParams['group_by_expr']))
|
||||
{
|
||||
eval("\$sValue = ".sprintf($aExtraParams['group_by_expr'], $oObj->Get($sGroupByField)).';');
|
||||
}
|
||||
else
|
||||
{
|
||||
$sValue = $oObj->Get($sGroupByField);
|
||||
}
|
||||
$aGroupBy[$sValue] = isset($aGroupBy[$sValue]) ? $aGroupBy[$sValue]+1 : 1;
|
||||
}
|
||||
$sFilter = urlencode($this->m_oFilter->serialize());
|
||||
@@ -845,7 +909,7 @@ EOF
|
||||
*/
|
||||
class HistoryBlock extends DisplayBlock
|
||||
{
|
||||
public function GetRenderContent(WebPage $oPage, $aExtraParams = array())
|
||||
public function GetRenderContent(WebPage $oPage, $aExtraParams = array(), $sId)
|
||||
{
|
||||
$sHtml = '';
|
||||
$oSet = new CMDBObjectSet($this->m_oFilter, array('date'=>false));
|
||||
@@ -927,7 +991,7 @@ class MenuBlock extends DisplayBlock
|
||||
* an object in with the same tab active by default as the tab that was active when selecting
|
||||
* the "Modify..." action.
|
||||
*/
|
||||
public function GetRenderContent(WebPage $oPage, $aExtraParams = array())
|
||||
public function GetRenderContent(WebPage $oPage, $aExtraParams = array(), $sId)
|
||||
{
|
||||
$sHtml = '';
|
||||
$oAppContext = new ApplicationContext();
|
||||
@@ -1017,6 +1081,15 @@ class MenuBlock extends DisplayBlock
|
||||
if ($bIsModifyAllowed) { $aActions[] = array ('label' => Dict::S('UI:Menu:Add'), 'url' => "../pages/$sUIPage?operation=modify_links&class=$sClass&link_attr=".$aExtraParams['link_attr']."&target_class=$sTargetClass&id=$id&addObjects=true&$sContext"); }
|
||||
if ($bIsModifyAllowed) { $aActions[] = array ('label' => Dict::S('UI:Menu:Manage'), 'url' => "../pages/$sUIPage?operation=modify_links&class=$sClass&link_attr=".$aExtraParams['link_attr']."&target_class=$sTargetClass&id=$id&sContext"); }
|
||||
}
|
||||
$this->AddMenuSeparator($aActions);
|
||||
foreach (MetaModel::EnumPlugins('iApplicationUIExtension') as $oExtensionInstance)
|
||||
{
|
||||
$oSet->Rewind();
|
||||
foreach($oExtensionInstance->EnumAllowedActions($oSet) as $sLabel => $sUrl)
|
||||
{
|
||||
$aActions[] = array ('label' => $sLabel, 'url' => $sUrl);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -1041,12 +1114,61 @@ class MenuBlock extends DisplayBlock
|
||||
// many objects in the set, possible actions are: new / modify all / delete all
|
||||
$sUrl = utils::GetAbsoluteUrl();
|
||||
if ($bIsModifyAllowed) { $aActions[] = array ('label' => Dict::S('UI:Menu:New'), 'url' => "../pages/$sUIPage?operation=new&class=$sClass&$sContext{$sDefault}"); }
|
||||
//if ($bIsBulkModifyAllowed) { $aActions[] = array ('label' => 'Modify All...', 'url' => "../pages/$sUIPage?operation=modify_all&filter=$sFilter&$sContext"); }
|
||||
if ($bIsBulkModifyAllowed) { $aActions[] = array ('label' => Dict::S('UI:Menu:ModifyAll'), 'url' => "../pages/$sUIPage?operation=select_for_modify_all&class=$sClass&filter=$sFilter&sContext"); }
|
||||
if ($bIsBulkDeleteAllowed) { $aActions[] = array ('label' => Dict::S('UI:Menu:BulkDelete'), 'url' => "../pages/$sUIPage?operation=select_for_deletion&filter=$sFilter&$sContext"); }
|
||||
|
||||
// Stimuli
|
||||
$aStates = MetaModel::EnumStates($sClass);
|
||||
if (count($aStates) > 0)
|
||||
{
|
||||
// Life cycle actions may be available... if all objects are in the same state
|
||||
$oSet->Rewind();
|
||||
$aStates = array();
|
||||
while($oObj = $oSet->Fetch())
|
||||
{
|
||||
$aStates[$oObj->GetState()] = $oObj->GetState();
|
||||
}
|
||||
$oSet->Rewind();
|
||||
if (count($aStates) == 1)
|
||||
{
|
||||
// All objects are in the same state...
|
||||
$sState = array_pop($aStates);
|
||||
$aTransitions = Metamodel::EnumTransitions($sClass, $sState);
|
||||
if (count($aTransitions))
|
||||
{
|
||||
$this->AddMenuSeparator($aActions);
|
||||
$aStimuli = Metamodel::EnumStimuli($sClass);
|
||||
foreach($aTransitions as $sStimulusCode => $aTransitionDef)
|
||||
{
|
||||
$oChecker = new StimulusChecker($this->m_oFilter, $sState, $sStimulusCode);
|
||||
$iActionAllowed = (get_class($aStimuli[$sStimulusCode]) == 'StimulusUserAction') ? $oChecker->IsAllowed() : UR_ALLOWED_NO;
|
||||
switch($iActionAllowed)
|
||||
{
|
||||
case UR_ALLOWED_YES:
|
||||
case UR_ALLOWED_DEPENDS:
|
||||
$aActions[] = array('label' => $aStimuli[$sStimulusCode]->GetLabel(), 'url' => "../pages/UI.php?operation=select_bulk_stimulus&stimulus=$sStimulusCode&state=$sState&class=$sClass&filter=$sFilter&$sContext");
|
||||
break;
|
||||
|
||||
default:
|
||||
// Do nothing
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->AddMenuSeparator($aActions);
|
||||
$aActions[] = array ('label' => Dict::S('UI:Menu:EMail'), 'url' => "mailto:?subject=".$oSet->GetFilter()->__DescribeHTML()."&body=".urlencode("$sUrl?operation=search&filter=$sFilter&$sContext"));
|
||||
$aActions[] = array ('label' => Dict::S('UI:Menu:CSVExport'), 'url' => "../pages/$sUIPage?operation=search&filter=$sFilter&format=csv&$sContext");
|
||||
}
|
||||
$this->AddMenuSeparator($aActions);
|
||||
foreach (MetaModel::EnumPlugins('iApplicationUIExtension') as $oExtensionInstance)
|
||||
{
|
||||
$oSet->Rewind();
|
||||
foreach($oExtensionInstance->EnumAllowedActions($oSet) as $sLabel => $sUrl)
|
||||
{
|
||||
$aActions[] = array ('label' => $sLabel, 'url' => $sUrl);
|
||||
}
|
||||
}
|
||||
}
|
||||
$sHtml .= "<div class=\"itop_popup\"><ul>\n<li>".Dict::S('UI:Menu:Actions')."\n<ul>\n";
|
||||
foreach ($aActions as $aAction)
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
require_once('../application/cmdbabstract.class.inc.php');
|
||||
require_once(APPROOT.'/application/cmdbabstract.class.inc.php');
|
||||
|
||||
/**
|
||||
* This class manages the input/output tasks
|
||||
|
||||
@@ -23,30 +23,33 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
require_once("../application/nicewebpage.class.inc.php");
|
||||
require_once("../application/applicationcontext.class.inc.php");
|
||||
require_once("../application/user.preferences.class.inc.php");
|
||||
require_once(APPROOT."/application/nicewebpage.class.inc.php");
|
||||
require_once(APPROOT."/application/applicationcontext.class.inc.php");
|
||||
require_once(APPROOT."/application/user.preferences.class.inc.php");
|
||||
/**
|
||||
* Web page with some associated CSS and scripts (jquery) for a fancier display
|
||||
*/
|
||||
class iTopWebPage extends NiceWebPage
|
||||
{
|
||||
private $m_sMenu;
|
||||
private $m_currentOrganization;
|
||||
// private $m_currentOrganization;
|
||||
private $m_aTabs;
|
||||
private $m_sCurrentTabContainer;
|
||||
private $m_sCurrentTab;
|
||||
private $m_sMessage;
|
||||
private $m_sInitScript;
|
||||
|
||||
public function __construct($sTitle, $currentOrganization)
|
||||
public function __construct($sTitle)
|
||||
{
|
||||
parent::__construct($sTitle);
|
||||
$this->m_sCurrentTabContainer = '';
|
||||
$this->m_sCurrentTab = '';
|
||||
$this->m_aTabs = array();
|
||||
$this->m_sMenu = "";
|
||||
$this->m_sMessage = '';
|
||||
$oAppContext = new ApplicationContext();
|
||||
$sExtraParams = $oAppContext->GetForLink();
|
||||
$this->m_currentOrganization = $currentOrganization;
|
||||
// $this->m_currentOrganization = $currentOrganization;
|
||||
$this->add_header("Content-type: text/html; charset=utf-8");
|
||||
$this->add_header("Cache-control: no-cache");
|
||||
$this->add_linked_stylesheet("../css/jquery.treeview.css");
|
||||
@@ -58,7 +61,6 @@ class iTopWebPage extends NiceWebPage
|
||||
$this->add_linked_script("../js/jquery.tablehover.js");
|
||||
$this->add_linked_script("../js/jquery.treeview.js");
|
||||
$this->add_linked_script("../js/jquery.autocomplete.js");
|
||||
$this->add_linked_script("../js/jquery.bgiframe.js");
|
||||
$this->add_linked_script("../js/jquery.positionBy.js");
|
||||
$this->add_linked_script("../js/jquery.popupmenu.js");
|
||||
$this->add_linked_script("../js/date.js");
|
||||
@@ -67,13 +69,15 @@ class iTopWebPage extends NiceWebPage
|
||||
$this->add_linked_script("../js/jquery.blockUI.js");
|
||||
$this->add_linked_script("../js/utils.js");
|
||||
$this->add_linked_script("../js/swfobject.js");
|
||||
$this->add_ready_script(
|
||||
<<<EOF
|
||||
$this->add_linked_script("../js/ckeditor/ckeditor.js");
|
||||
$this->add_linked_script("../js/ckeditor/adapters/jquery.js");
|
||||
$this->add_linked_script("../js/jquery.qtip-1.0.min.js");
|
||||
$this->m_sInitScript =
|
||||
<<< EOF
|
||||
try
|
||||
{
|
||||
var myLayout; // a var is required because this page utilizes: myLayout.allowOverflow() method
|
||||
|
||||
$(document).ready(function () {
|
||||
var myLayout; // a var is required because this page utilizes: myLayout.allowOverflow() method
|
||||
|
||||
// Layout
|
||||
paneSize = GetUserPreference('menu_size', 300)
|
||||
myLayout = $('body').layout({
|
||||
@@ -125,10 +129,32 @@ class iTopWebPage extends NiceWebPage
|
||||
{
|
||||
myLayout.close('west');
|
||||
}
|
||||
|
||||
|
||||
// Accordion Menu
|
||||
$("#accordion").accordion({ header: "h3", navigation: true, autoHeight: false, collapsible: false, icons: false }); // collapsible will be enabled once the item will be selected
|
||||
});
|
||||
|
||||
// Tabs, using JQuery BBQ to store the history
|
||||
// The "tab widgets" to handle.
|
||||
var tabs = $('div[id^=tabbedContent]');
|
||||
|
||||
// This selector will be reused when selecting actual tab widget A elements.
|
||||
var tab_a_selector = 'ul.ui-tabs-nav a';
|
||||
|
||||
// Enable tabs on all tab widgets. The `event` property must be overridden so
|
||||
// that the tabs aren't changed on click, and any custom event name can be
|
||||
// specified. Note that if you define a callback for the 'select' event, it
|
||||
// will be executed for the selected tab whenever the hash changes.
|
||||
tabs.tabs({ event: 'change' });
|
||||
}
|
||||
catch(err)
|
||||
{
|
||||
// Do something with the error !
|
||||
alert(err);
|
||||
}
|
||||
EOF
|
||||
;
|
||||
$this->add_ready_script(
|
||||
<<< EOF
|
||||
//add new widget called TruncatedList to properly display truncated lists when they are sorted
|
||||
$.tablesorter.addWidget({
|
||||
// give the widget a id
|
||||
@@ -169,6 +195,39 @@ class iTopWebPage extends NiceWebPage
|
||||
$("tbody tr.green_even:odd",table).removeClass('even').removeClass('green_even').addClass('green');
|
||||
}
|
||||
});
|
||||
|
||||
$('.resizable').resizable(); // Make resizable everything that claims to be resizable !
|
||||
// Adjust initial size
|
||||
$('.v-resizable').each( function()
|
||||
{
|
||||
var parent_id = $(this).parent().id;
|
||||
// Restore the saved height
|
||||
var iHeight = GetUserPreference(parent_id+'_'+this.id+'_height', undefined);
|
||||
if (iHeight != undefined)
|
||||
{
|
||||
$(this).height(parseInt(iHeight, 10)); // Parse in base 10 !);
|
||||
}
|
||||
// Adjust the child 'item''s height and width to fit
|
||||
var container = $(this);
|
||||
var fixedWidth = container.parent().innerWidth() - 6;
|
||||
// Set the width to fit the parent
|
||||
$(this).width(fixedWidth);
|
||||
var headerHeight = $(this).find('.drag_handle').height();
|
||||
// Now adjust the width and height of the child 'item'
|
||||
container.find('.item').height(container.innerHeight() - headerHeight - 12).width(fixedWidth - 10);
|
||||
}
|
||||
);
|
||||
// Make resizable, vertically only everything that claims to be v-resizable !
|
||||
$('.v-resizable').resizable( { handles: 's', minHeight: $(this).find('.drag_handle').height(), minWidth: $(this).parent().innerWidth() - 6, maxWidth: $(this).parent().innerWidth() - 6, stop: function()
|
||||
{
|
||||
// Adjust the content
|
||||
var container = $(this);
|
||||
var headerHeight = $(this).find('.drag_handle').height();
|
||||
container.find('.item').height(container.innerHeight() - headerHeight - 12);//.width(container.innerWidth());
|
||||
var parent_id = $(this).parent().id;
|
||||
SetUserPreference(parent_id+'_'+this.id+'_height', $(this).height(), true); // true => persistent
|
||||
}
|
||||
} );
|
||||
|
||||
// Tabs, using JQuery BBQ to store the history
|
||||
// The "tab widgets" to handle.
|
||||
@@ -177,12 +236,6 @@ class iTopWebPage extends NiceWebPage
|
||||
// This selector will be reused when selecting actual tab widget A elements.
|
||||
var tab_a_selector = 'ul.ui-tabs-nav a';
|
||||
|
||||
// Enable tabs on all tab widgets. The `event` property must be overridden so
|
||||
// that the tabs aren't changed on click, and any custom event name can be
|
||||
// specified. Note that if you define a callback for the 'select' event, it
|
||||
// will be executed for the selected tab whenever the hash changes.
|
||||
tabs.tabs({ event: 'change' });
|
||||
|
||||
// Define our own click handler for the tabs, overriding the default.
|
||||
tabs.find( tab_a_selector ).click(function()
|
||||
{
|
||||
@@ -262,38 +315,6 @@ class iTopWebPage extends NiceWebPage
|
||||
changeMonth: true,
|
||||
changeYear: true
|
||||
});
|
||||
$('.resizable').resizable(); // Make resizable everything that claims to be resizable !
|
||||
// Adjust initial size
|
||||
$('.v-resizable').each( function()
|
||||
{
|
||||
var parent_id = $(this).parent().id;
|
||||
// Restore the saved height
|
||||
var iHeight = GetUserPreference(parent_id+'_'+this.id+'_height', undefined);
|
||||
if (iHeight != undefined)
|
||||
{
|
||||
$(this).height(parseInt(iHeight, 10)); // Parse in base 10 !);
|
||||
}
|
||||
// Adjust the child 'item''s height and width to fit
|
||||
var container = $(this);
|
||||
var fixedWidth = container.parent().innerWidth() - 6;
|
||||
// Set the width to fit the parent
|
||||
$(this).width(fixedWidth);
|
||||
var headerHeight = $(this).find('.drag_handle').height();
|
||||
// Now adjust the width and height of the child 'item'
|
||||
container.find('.item').height(container.innerHeight() - headerHeight - 12).width(fixedWidth - 10);
|
||||
}
|
||||
);
|
||||
// Make resizable, vertically only everything that claims to be v-resizable !
|
||||
$('.v-resizable').resizable( { handles: 's', minHeight: $(this).find('.drag_handle').height(), minWidth: $(this).parent().innerWidth() - 6, maxWidth: $(this).parent().innerWidth() - 6, stop: function()
|
||||
{
|
||||
// Adjust the content
|
||||
var container = $(this);
|
||||
var headerHeight = $(this).find('.drag_handle').height();
|
||||
container.find('.item').height(container.innerHeight() - headerHeight - 12);//.width(container.innerWidth());
|
||||
var parent_id = $(this).parent().id;
|
||||
SetUserPreference(parent_id+'_'+this.id+'_height', $(this).height(), true); // true => persistent
|
||||
}
|
||||
} );
|
||||
// Restore the persisted sortable order, for all sortable lists... if any
|
||||
$('.sortable').each(function()
|
||||
{
|
||||
@@ -328,20 +349,8 @@ class iTopWebPage extends NiceWebPage
|
||||
$('#ModalDlg').dialog({ autoOpen: false, modal: true, width: 0.8*docWidth }); // JQuery UI dialogs
|
||||
ShowDebug();
|
||||
$('#logOffBtn>ul').popupmenu();
|
||||
// $.history.init(history_callback);
|
||||
// $("a[rel='history']").click(function()
|
||||
// {
|
||||
// $.history.load(this.href.replace(/^.*#/, ''));
|
||||
// return false;
|
||||
// });
|
||||
}
|
||||
catch(err)
|
||||
{
|
||||
// Do something with the error !
|
||||
alert(err);
|
||||
}
|
||||
|
||||
//$('.display_block').draggable(); // make the blocks draggable
|
||||
$('.caselog_header').click( function () { $(this).toggleClass('open').next('.caselog_entry').toggle(); });
|
||||
EOF
|
||||
);
|
||||
$sUserPrefs = appUserPreferences::GetAsJSON();
|
||||
@@ -359,24 +368,6 @@ EOF
|
||||
// }
|
||||
// }
|
||||
|
||||
// For automplete
|
||||
function findValue(li) {
|
||||
if( li == null ) return alert("No match!");
|
||||
|
||||
// if coming from an AJAX call, let's use the CityId as the value
|
||||
if( !!li.extra ) var sValue = li.extra[0];
|
||||
|
||||
// otherwise, let's just display the value in the text box
|
||||
else var sValue = li.selectValue;
|
||||
|
||||
//alert(\"The value you selected was: \" + sValue);
|
||||
}
|
||||
|
||||
function selectItem(li) {
|
||||
findValue(li);
|
||||
}
|
||||
|
||||
|
||||
function formatItem(row) {
|
||||
return row[0];
|
||||
}
|
||||
@@ -386,9 +377,16 @@ EOF
|
||||
window.history.back();
|
||||
}
|
||||
|
||||
function BackToDetails(sClass, id)
|
||||
function BackToDetails(sClass, id, sDefaultUrl)
|
||||
{
|
||||
window.location.href = './UI.php?operation=details&class='+sClass+'&id='+id;
|
||||
if (id > 0)
|
||||
{
|
||||
window.location.href = './UI.php?operation=details&class='+sClass+'&id='+id;
|
||||
}
|
||||
else
|
||||
{
|
||||
window.location.href = sDefaultUrl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -406,46 +404,34 @@ EOF
|
||||
}
|
||||
|
||||
var oUserPreferences = $sUserPrefs;
|
||||
|
||||
// For disabling the CKEditor at init time when the corresponding textarea is disabled !
|
||||
CKEDITOR.plugins.add( 'disabler',
|
||||
{
|
||||
init : function( editor )
|
||||
{
|
||||
editor.on( 'instanceReady', function(e)
|
||||
{
|
||||
e.removeListener();
|
||||
$('#'+ editor.name).trigger('update');
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
EOF
|
||||
);
|
||||
|
||||
// Add the standard menus
|
||||
/*
|
||||
* +--------------------+
|
||||
* | Welcome |
|
||||
* +--------------------+
|
||||
* Welcome To iTop
|
||||
* +--------------------+
|
||||
* | Tools |
|
||||
* +--------------------+
|
||||
* CSV Import
|
||||
* +--------------------+
|
||||
* | Admin Tools | << Only present if the user is an admin
|
||||
* +--------------------+
|
||||
* User Accounts
|
||||
* Profiles
|
||||
* Notifications
|
||||
* Run Queries
|
||||
* Export
|
||||
* Data Model
|
||||
* Universal Search
|
||||
*/
|
||||
$oWelcomeMenu = new MenuGroup('WelcomeMenu', 10 /* fRank */);
|
||||
new TemplateMenuNode('WelcomeMenuPage', '../application/templates/welcome_menu.html', $oWelcomeMenu->GetIndex() /* oParent */, 1 /* fRank */);
|
||||
|
||||
$oToolsMenu = new MenuGroup('DataAdministration', 70 /* fRank */, 'Organization', UR_ACTION_MODIFY, UR_ALLOWED_YES|UR_ALLOWED_DEPENDS);
|
||||
new WebPageMenuNode('CSVImportMenu', '../pages/csvimport.php', $oToolsMenu->GetIndex(), 1 /* fRank */);
|
||||
|
||||
// Add the admin menus
|
||||
$oAdminMenu = new MenuGroup('AdminTools', 80 /* fRank */);
|
||||
new OQLMenuNode('UserAccountsMenu', 'SELECT User', $oAdminMenu->GetIndex(), 1 /* fRank */);
|
||||
new OQLMenuNode('ProfilesMenu', 'SELECT URP_Profiles', $oAdminMenu->GetIndex(), 2 /* fRank */);
|
||||
new TemplateMenuNode('NotificationsMenu', '../application/templates/notifications_menu.html', $oAdminMenu->GetIndex(), 3 /* fRank */);
|
||||
new OQLMenuNode('AuditCategories', 'SELECT AuditCategory', $oAdminMenu->GetIndex(), 4 /* fRank */);
|
||||
new WebPageMenuNode('RunQueriesMenu', '../pages/run_query.php', $oAdminMenu->GetIndex(), 8 /* fRank */);
|
||||
new WebPageMenuNode('ExportMenu', '../webservices/export.php', $oAdminMenu->GetIndex(), 9 /* fRank */);
|
||||
new WebPageMenuNode('DataModelMenu', '../pages/schema.php', $oAdminMenu->GetIndex(), 10 /* fRank */);
|
||||
new WebPageMenuNode('UniversalSearchMenu', '../pages/UniversalSearch.php', $oAdminMenu->GetIndex(), 11 /* fRank */);
|
||||
// Build menus from module handlers
|
||||
//
|
||||
foreach(get_declared_classes() as $sPHPClass)
|
||||
{
|
||||
if (is_subclass_of($sPHPClass, 'ModuleHandlerAPI'))
|
||||
{
|
||||
$aCallSpec = array($sPHPClass, 'OnMenuCreation');
|
||||
call_user_func($aCallSpec);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function AddToMenu($sHtml)
|
||||
@@ -478,15 +464,17 @@ EOF
|
||||
break;
|
||||
|
||||
default:
|
||||
$oAppContext = new ApplicationContext();
|
||||
$iCurrentOrganization = $oAppContext->GetCurrentValue('org_id');
|
||||
$sHtml = '<div id="SiloSelection">';
|
||||
$sHtml .= '<form style="display:inline" action="'.$_SERVER['PHP_SELF'].'"><select style="width:150px;font-size:x-small" name="org_id" title="Pick an organization" onChange="this.form.submit();">';
|
||||
$sSelected = ($this->m_currentOrganization == '') ? ' selected' : '';
|
||||
$sHtml .= '<form style="display:inline" action="'.$_SERVER['PHP_SELF'].'"><select class="org_combo" name="c[org_id]" title="Pick an organization" onChange="this.form.submit();">';
|
||||
$sSelected = ($iCurrentOrganization == '') ? ' selected' : '';
|
||||
$sHtml .= '<option value=""'.$sSelected.'>'.Dict::S('UI:AllOrganizations').'</option>';
|
||||
while($oOrg = $oSet->Fetch())
|
||||
{
|
||||
if ($this->m_currentOrganization == $oOrg->GetKey())
|
||||
if ($iCurrentOrganization == $oOrg->GetKey())
|
||||
{
|
||||
$oCurrentOrganization = $oOrg;
|
||||
// $oCurrentOrganization = $oOrg;
|
||||
$sSelected = " selected";
|
||||
|
||||
}
|
||||
@@ -494,12 +482,12 @@ EOF
|
||||
{
|
||||
$sSelected = "";
|
||||
}
|
||||
$sHtml .= '<option value="'.$oOrg->GetKey().'"'.$sSelected.'>'.$oOrg->GetName().'</option>';
|
||||
$sHtml .= '<option title="'.$oOrg->GetName().'" value="'.$oOrg->GetKey().'"'.$sSelected.'>'.$oOrg->GetName().'</option>';
|
||||
}
|
||||
$sHtml .= '</select>';
|
||||
// Add other dimensions/context information to this form
|
||||
$oAppContext = new ApplicationContext();
|
||||
$oAppContext->Reset('org_id'); // Org id is handled above and we want to be able to change it here !
|
||||
// $oAppContext = new ApplicationContext();
|
||||
$oAppContext->Reset('org_id'); // org_id is handled above and we want to be able to change it here !
|
||||
$sHtml .= $oAppContext->GetForForm();
|
||||
$sHtml .= '</form>';
|
||||
$sHtml .= '</div>';
|
||||
@@ -511,10 +499,9 @@ EOF
|
||||
{
|
||||
// Display the menu
|
||||
$oAppContext = new ApplicationContext();
|
||||
$iActiveNodeId = ApplicationMenu::GetActiveNodeId();
|
||||
$iAccordionIndex = 0;
|
||||
|
||||
ApplicationMenu::DisplayMenu($this, $oAppContext->GetAsHash(), $iActiveNodeId);
|
||||
ApplicationMenu::DisplayMenu($this, $oAppContext->GetAsHash());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -542,8 +529,10 @@ EOF
|
||||
echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n";
|
||||
echo "<html>\n";
|
||||
echo "<head>\n";
|
||||
echo "<title>{$this->s_title}</title>\n";
|
||||
// Make sure that Internet Explorer renders the page using its latest/highest/greatest standards !
|
||||
echo "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n";
|
||||
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n";
|
||||
echo "<title>{$this->s_title}</title>\n";
|
||||
echo $this->get_base_tag();
|
||||
// Stylesheets MUST be loaded before any scripts otherwise
|
||||
// jQuery scripts may face some spurious problems (like failing on a 'reload')
|
||||
@@ -561,11 +550,22 @@ EOF
|
||||
}
|
||||
foreach($this->a_linked_scripts as $s_script)
|
||||
{
|
||||
// Make sure that the URL to the script contains the application's version number
|
||||
// so that the new script do NOT get reloaded from the cache when the application is upgraded
|
||||
if (strpos('?', $s_script) === false)
|
||||
{
|
||||
$s_script .= "?version=".ITOP_VERSION;
|
||||
}
|
||||
else
|
||||
{
|
||||
$s_script .= "&version=".ITOP_VERSION;
|
||||
}
|
||||
echo "<script type=\"text/javascript\" src=\"$s_script\"></script>\n";
|
||||
}
|
||||
$this->add_script("\$(document).ready(function() {\n{$this->m_sInitScript};\nwindow.setTimeout('onDelayedReady()',10)\n});");
|
||||
if (count($this->m_aReadyScripts)>0)
|
||||
{
|
||||
$this->add_script("\$(document).ready(function() {\n".implode("\n", $this->m_aReadyScripts)."\n});");
|
||||
$this->add_script("\nonDelayedReady = function() {\n".implode("\n", $this->m_aReadyScripts)."\n}\n");
|
||||
}
|
||||
if (count($this->a_scripts)>0)
|
||||
{
|
||||
@@ -676,6 +676,41 @@ EOF
|
||||
}
|
||||
$sLogOffMenu .= "</ul>\n</li>\n</ul></span>\n";
|
||||
|
||||
$sRestrictions = '';
|
||||
if (!MetaModel::DBHasAccess(ACCESS_ADMIN_WRITE))
|
||||
{
|
||||
if (!MetaModel::DBHasAccess(ACCESS_ADMIN_WRITE))
|
||||
{
|
||||
$sRestrictions = Dict::S('UI:AccessRO-All');
|
||||
}
|
||||
}
|
||||
elseif (!MetaModel::DBHasAccess(ACCESS_USER_WRITE))
|
||||
{
|
||||
$sRestrictions = Dict::S('UI:AccessRO-Users');
|
||||
}
|
||||
|
||||
if (strlen($sRestrictions) > 0)
|
||||
{
|
||||
$sAdminMessage = trim(MetaModel::GetConfig()->Get('access_message'));
|
||||
$sApplicationBanner = '<div id="admin-banner">';
|
||||
$sApplicationBanner .= '<img src="../images/locked.png" style="vertical-align:middle;">';
|
||||
$sApplicationBanner .= ' <b>'.$sRestrictions.'</b>';
|
||||
if (strlen($sAdminMessage) > 0)
|
||||
{
|
||||
$sApplicationBanner .= ' <b>'.$sAdminMessage.'</b>';
|
||||
}
|
||||
$sApplicationBanner .= '</div>';
|
||||
}
|
||||
else if(strlen($this->m_sMessage))
|
||||
{
|
||||
$sApplicationBanner = '<div id="admin-banner"><span style="padding:5px;">'.$this->m_sMessage.'<span></div>';
|
||||
}
|
||||
else
|
||||
{
|
||||
$sApplicationBanner = '';
|
||||
}
|
||||
|
||||
$sOnlineHelpUrl = MetaModel::GetConfig()->Get('online_help');
|
||||
//$sLogOffMenu = "<span id=\"logOffBtn\" style=\"height:55px;padding:0;margin:0;\"><img src=\"../images/onOffBtn.png\"></span>";
|
||||
|
||||
echo '<div id="left-pane" class="ui-layout-west">';
|
||||
@@ -685,7 +720,7 @@ EOF
|
||||
echo ' </div>';
|
||||
echo ' <div class="header-menu">';
|
||||
echo ' <div class="icon ui-state-default ui-corner-all"><span id="tPinMenu" class="ui-icon ui-icon-pin-w">pin</span></div>';
|
||||
echo ' <div style="width:100%; text-align:center;">'.$sForm.'</div>';
|
||||
echo ' <div style="text-align:center;">'.$sForm.'</div>';
|
||||
echo ' </div>';
|
||||
echo ' <div id="menu" class="ui-layout-content">';
|
||||
echo ' <div id="inner_menu">';
|
||||
@@ -702,9 +737,10 @@ EOF
|
||||
|
||||
echo '<div class="ui-layout-center">';
|
||||
echo ' <div id="top-bar" style="width:100%">';
|
||||
echo ' <div id="global-search"><form action="../pages/UI.php"><table><tr><td id="g-search-input"><input type="text" name="text" value="'.$sText.'"'.$sOnClick.'/></td>';
|
||||
echo $sApplicationBanner;
|
||||
echo ' <div id="global-search"><form action="../pages/UI.php"><table><tr><td></td><td id="g-search-input"><input type="text" name="text" value="'.$sText.'"'.$sOnClick.'/></td>';
|
||||
echo '<td><input type="image" src="../images/searchBtn.png"/></a></td>';
|
||||
echo '<td><a style="background:transparent;" href="http://www.combodo.com/itop-help" target="_blank"><img style="border:0;padding-left:20px;padding-right:10px;" title="'.Dict::S('UI:Help').'" src="../images/help.png"/></td>';
|
||||
echo '<td><a style="background:transparent;" href="'.$sOnlineHelpUrl.'" target="_blank"><img style="border:0;padding-left:20px;padding-right:10px;" title="'.Dict::S('UI:Help').'" src="../images/help.png"/></td>';
|
||||
echo '<td style="padding-right:20px;padding-left:10px;">'.$sLogOffMenu.'</td><td><input type="hidden" name="operation" value="full_text"/></td></tr></table></form></div>';
|
||||
//echo '<td> <input type="hidden" name="operation" value="full_text"/></td></tr></table></form></div>';
|
||||
echo ' </div>';
|
||||
@@ -768,9 +804,11 @@ EOF
|
||||
{
|
||||
echo "<div id=\"rawOutput\" title=\"Debug Output\"><div style=\"height:500px; overflow-y:auto;\">$s_captured_output</div></div>\n";
|
||||
}
|
||||
echo $this->s_deferred_content;
|
||||
echo "<div id=\"at_the_end\">".$this->s_deferred_content."</div>";
|
||||
// echo $this->s_deferred_content;
|
||||
echo "<div style=\"display:none\" title=\"ex2\" id=\"ex2\">Please wait...</div>\n"; // jqModal Window
|
||||
echo "<div style=\"display:none\" title=\"dialog\" id=\"ModalDlg\"></div>";
|
||||
echo "<div style=\"display:none\" id=\"ajax_content\"></div>";
|
||||
|
||||
echo "</body>\n";
|
||||
echo "</html>\n";
|
||||
@@ -881,6 +919,14 @@ EOF
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the message to be displayed in the 'admin-banner' section at the top of the page
|
||||
*/
|
||||
public function SetMessage($sMessage)
|
||||
{
|
||||
$this->m_sMessage = $sMessage;
|
||||
}
|
||||
|
||||
/*
|
||||
public function AddSearchForm($sClassName, $bOpen = false)
|
||||
{
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
require_once("../application/nicewebpage.class.inc.php");
|
||||
require_once(APPROOT."/application/nicewebpage.class.inc.php");
|
||||
/**
|
||||
* Web page used for displaying the login form
|
||||
*/
|
||||
@@ -68,6 +68,10 @@ body {
|
||||
border-left: 1px solid #000;
|
||||
border-right: 1px solid #000;
|
||||
border-top: 0;
|
||||
text-align: center;
|
||||
}
|
||||
#pwd, #user,#old_pwd, #new_pwd, #retype_new_pwd {
|
||||
width: 10em;
|
||||
}
|
||||
.center {
|
||||
text-align: center;
|
||||
@@ -103,7 +107,7 @@ EOF
|
||||
$sAuthPwd = utils::ReadParam('suggest_pwd', '');
|
||||
|
||||
$sVersionShort = Dict::Format('UI:iTopVersion:Short', ITOP_VERSION);
|
||||
$this->add("<div id=\"login-logo\"><a href=\"http://www.combodo.com/itop\"><img title=\"$sVersionShort\" src=\"../images/itop-logo.png\"></a></div>\n");
|
||||
$this->add("<div id=\"login-logo\"><a href=\"http://www.combodo.com/itop\"><img title=\"$sVersionShort\" src=\"../images/itop-logo-external.png\"></a></div>\n");
|
||||
$this->add("<div id=\"login\">\n");
|
||||
$this->add("<h1>".Dict::S('UI:Login:Welcome')."</h1>\n");
|
||||
if ($bFailedLogin)
|
||||
@@ -115,9 +119,9 @@ EOF
|
||||
$this->add("<p>".Dict::S('UI:Login:IdentifyYourself')."</p>\n");
|
||||
}
|
||||
$this->add("<form method=\"post\">\n");
|
||||
$this->add("<table>\n");
|
||||
$this->add("<tr><td><label for=\"user\">".Dict::S('UI:Login:UserNamePrompt').":</label></td><td><input id=\"user\" type=\"text\" name=\"auth_user\" value=\"$sAuthUser\" /></td></tr>\n");
|
||||
$this->add("<tr><td><label for=\"pwd\">".Dict::S('UI:Login:PasswordPrompt').":</label></td><td><input id=\"pwd\" type=\"password\" name=\"auth_pwd\" value=\"$sAuthPwd\" /></td></tr>\n");
|
||||
$this->add("<table width=\"100%\">\n");
|
||||
$this->add("<tr><td style=\"text-align:right\"><label for=\"user\">".Dict::S('UI:Login:UserNamePrompt').":</label></td><td style=\"text-align:left\"><input id=\"user\" type=\"text\" name=\"auth_user\" value=\"$sAuthUser\" /></td></tr>\n");
|
||||
$this->add("<tr><td style=\"text-align:right\"><label for=\"pwd\">".Dict::S('UI:Login:PasswordPrompt').":</label></td><td style=\"text-align:left\"><input id=\"pwd\" type=\"password\" name=\"auth_pwd\" value=\"$sAuthPwd\" /></td></tr>\n");
|
||||
$this->add("<tr><td colspan=\"2\" class=\"center v-spacer\"> <input type=\"submit\" value=\"".Dict::S('UI:Button:Login')."\" /></td></tr>\n");
|
||||
$this->add("</table>\n");
|
||||
$this->add("<input type=\"hidden\" name=\"loginop\" value=\"login\" />\n");
|
||||
@@ -159,10 +163,10 @@ EOF
|
||||
$this->add("<p class=\"hilite\">".Dict::S('UI:Login:IncorrectOldPassword')."</p>\n");
|
||||
}
|
||||
$this->add("<form method=\"post\">\n");
|
||||
$this->add("<table>\n");
|
||||
$this->add("<tr><td><label for=\"old_pwd\">".Dict::S('UI:Login:OldPasswordPrompt').":</label></td><td><input type=\"password\" id=\"old_pwd\" name=\"old_pwd\" value=\"\" /></td></tr>\n");
|
||||
$this->add("<tr><td><label for=\"new_pwd\">".Dict::S('UI:Login:NewPasswordPrompt').":</label></td><td><input type=\"password\" id=\"new_pwd\" name=\"new_pwd\" value=\"\" /></td></tr>\n");
|
||||
$this->add("<tr><td><label for=\"retype_new_pwd\">".Dict::S('UI:Login:RetypeNewPasswordPrompt').":</label></td><td><input type=\"password\" id=\"retype_new_pwd\" name=\"retype_new_pwd\" value=\"\" /></td></tr>\n");
|
||||
$this->add("<table width=\"100%\">\n");
|
||||
$this->add("<tr><td style=\"text-align:right\"><label for=\"old_pwd\">".Dict::S('UI:Login:OldPasswordPrompt').":</label></td><td style=\"text-align:left\"><input type=\"password\" id=\"old_pwd\" name=\"old_pwd\" value=\"\" /></td></tr>\n");
|
||||
$this->add("<tr><td style=\"text-align:right\"><label for=\"new_pwd\">".Dict::S('UI:Login:NewPasswordPrompt').":</label></td><td style=\"text-align:left\"><input type=\"password\" id=\"new_pwd\" name=\"new_pwd\" value=\"\" /></td></tr>\n");
|
||||
$this->add("<tr><td style=\"text-align:right\"><label for=\"retype_new_pwd\">".Dict::S('UI:Login:RetypeNewPasswordPrompt').":</label></td><td style=\"text-align:left\"><input type=\"password\" id=\"retype_new_pwd\" name=\"retype_new_pwd\" value=\"\" /></td></tr>\n");
|
||||
$this->add("<tr><td colspan=\"2\" class=\"center v-spacer\"> <input type=\"button\" onClick=\"GoBack();\" value=\"".Dict::S('UI:Button:Cancel')."\" /> <input type=\"submit\" onClick=\"return DoCheckPwd();\" value=\"".Dict::S('UI:Button:ChangePassword')."\" /></td></tr>\n");
|
||||
$this->add("</table>\n");
|
||||
$this->add("<input type=\"hidden\" name=\"loginop\" value=\"do_change_pwd\" />\n");
|
||||
@@ -194,14 +198,14 @@ EOF
|
||||
|
||||
static function SecureConnectionRequired()
|
||||
{
|
||||
return utils::GetConfig()->GetSecureConnectionRequired();
|
||||
return MetaModel::GetConfig()->GetSecureConnectionRequired();
|
||||
}
|
||||
|
||||
static function IsConnectionSecure()
|
||||
{
|
||||
$bSecured = false;
|
||||
|
||||
if ( !empty($_SERVER['HTTPS']) && ($_SERVER['HTTPS']!= 'off') )
|
||||
if (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS']!='off'))
|
||||
{
|
||||
$bSecured = true;
|
||||
}
|
||||
@@ -218,7 +222,7 @@ EOF
|
||||
exit;
|
||||
}
|
||||
|
||||
$aAllowedLoginTypes = utils::GetConfig()->GetAllowedLoginTypes();
|
||||
$aAllowedLoginTypes = MetaModel::GetConfig()->GetAllowedLoginTypes();
|
||||
|
||||
if (isset($_SESSION['auth_user']))
|
||||
{
|
||||
@@ -266,7 +270,7 @@ EOF
|
||||
case 'external':
|
||||
// Web server supplied authentication
|
||||
$bExternalAuth = false;
|
||||
$sExtAuthVar = utils::GetConfig()->GetExternalAuthenticationVariable(); // In which variable is the info passed ?
|
||||
$sExtAuthVar = MetaModel::GetConfig()->GetExternalAuthenticationVariable(); // In which variable is the info passed ?
|
||||
$sEval = '$bExternalAuth = isset('.$sExtAuthVar.');';
|
||||
eval($sEval);
|
||||
if ($bExternalAuth)
|
||||
@@ -322,6 +326,16 @@ EOF
|
||||
{
|
||||
// User is Ok, let's save it in the session and proceed with normal login
|
||||
UserRights::Login($sAuthUser, $sAuthentication); // Login & set the user's language
|
||||
|
||||
if (MetaModel::GetConfig()->Get('log_usage'))
|
||||
{
|
||||
$oLog = new EventLoginUsage();
|
||||
$oLog->Set('userinfo', UserRights::GetUser());
|
||||
$oLog->Set('user_id', UserRights::GetUserObject()->GetKey());
|
||||
$oLog->Set('message', 'Successful login');
|
||||
$oLog->DBInsertNoReload();
|
||||
}
|
||||
|
||||
$_SESSION['auth_user'] = $sAuthUser;
|
||||
$_SESSION['login_mode'] = $sLoginMode;
|
||||
}
|
||||
@@ -338,7 +352,9 @@ EOF
|
||||
*/
|
||||
static function DoLogin($bMustBeAdmin = false, $bIsAllowedToPortalUsers = false)
|
||||
{
|
||||
$sMessage = ''; // In case we need to return a message to the calling web page
|
||||
$operation = utils::ReadParam('loginop', '');
|
||||
session_name(MetaModel::GetConfig()->Get('session_name'));
|
||||
session_start();
|
||||
|
||||
if ($operation == 'logoff')
|
||||
@@ -349,7 +365,7 @@ EOF
|
||||
}
|
||||
else
|
||||
{
|
||||
$aAllowedLoginTypes = utils::GetConfig()->GetAllowedLoginTypes();
|
||||
$aAllowedLoginTypes = MetaModel::GetConfig()->GetAllowedLoginTypes();
|
||||
if (count($aAllowedLoginTypes) > 0)
|
||||
{
|
||||
$sLoginMode = $aAllowedLoginTypes[0];
|
||||
@@ -386,13 +402,14 @@ EOF
|
||||
$oPage->DisplayChangePwdForm(true); // old pwd was wrong
|
||||
$oPage->output();
|
||||
}
|
||||
$sMessage = Dict::S('UI:Login:PasswordChanged');
|
||||
}
|
||||
|
||||
self::Login();
|
||||
|
||||
if ($bMustBeAdmin && !UserRights::IsAdministrator())
|
||||
{
|
||||
require_once('../setup/setuppage.class.inc.php');
|
||||
require_once(APPROOT.'/setup/setuppage.class.inc.php');
|
||||
$oP = new SetupWebPage(Dict::S('UI:PageTitle:FatalError'));
|
||||
$oP->add("<h1>".Dict::S('UI:Login:Error:AccessAdmin')."</h1>\n");
|
||||
$oP->p("<a href=\"../pages/logoff.php\">".Dict::S('UI:LogOffMenu')."</a>");
|
||||
@@ -404,6 +421,7 @@ EOF
|
||||
// No rights to be here, redirect to the portal
|
||||
header('Location: ../portal/index.php');
|
||||
}
|
||||
return $sMessage;
|
||||
}
|
||||
|
||||
} // End of class
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
require_once('../application/utils.inc.php');
|
||||
require_once('../application/template.class.inc.php');
|
||||
require_once(APPROOT.'/application/utils.inc.php');
|
||||
require_once(APPROOT.'/application/template.class.inc.php');
|
||||
|
||||
|
||||
/**
|
||||
@@ -98,7 +98,6 @@ class ApplicationMenu
|
||||
foreach(self::$aRootMenus as $aMenu)
|
||||
{
|
||||
$oMenuNode = self::GetMenuNode($aMenu['index']);
|
||||
if (($oMenuNode->GetMenuId() == 'AdminTools') && (!UserRights::IsAdministrator())) continue; // Don't display the admin menu for non admin users
|
||||
if (!$oMenuNode->IsEnabled()) continue; // Don't display a non-enabled menu
|
||||
$oPage->AddToMenu('<h3>'.$oMenuNode->GetTitle().'</h3>');
|
||||
$oPage->AddToMenu('<div>');
|
||||
@@ -218,7 +217,8 @@ class ApplicationMenu
|
||||
*/
|
||||
static public function GetActiveNodeId()
|
||||
{
|
||||
$iMenuIndex = utils::ReadParam('menu', -1);
|
||||
$oAppContext = new ApplicationContext();
|
||||
$iMenuIndex = $oAppContext->GetCurrentValue('menu', -1);
|
||||
|
||||
if ($iMenuIndex == -1)
|
||||
{
|
||||
@@ -277,6 +277,11 @@ abstract class MenuNode
|
||||
* User Rights allowed results (actually a bitmask) to check if the menu is enabled, null if none
|
||||
*/
|
||||
protected $m_iEnableActionResults;
|
||||
|
||||
/**
|
||||
* Stimulus to check: if the user can 'apply' this stimulus, then she/he can see this menu
|
||||
*/
|
||||
protected $m_sEnableStimulus;
|
||||
|
||||
/**
|
||||
* Create a menu item, sets the condition to have it displayed and inserts it into the application's main menu
|
||||
@@ -284,16 +289,18 @@ abstract class MenuNode
|
||||
* @param integer $iParentIndex ID of the parent menu, pass -1 for top level (group) items
|
||||
* @param float $fRank Number used to order the list, any number will do, but for a given level (i.e same parent) all menus are sorted based on this value
|
||||
* @param string $sEnableClass Name of class of object
|
||||
* @param integer $iActionCode Either UR_ACTION_READ, UR_ACTION_MODIFY, UR_ACTION_DELETE, UR_ACTION_BULKREAD, UR_ACTION_BULKMODIFY or UR_ACTION_BULKDELETE
|
||||
* @param mixed $iActionCode UR_ACTION_READ, UR_ACTION_MODIFY, UR_ACTION_DELETE, UR_ACTION_BULKREAD, UR_ACTION_BULKMODIFY or UR_ACTION_BULKDELETE
|
||||
* @param integer $iAllowedResults Expected "rights" for the action: either UR_ALLOWED_YES, UR_ALLOWED_NO, UR_ALLOWED_DEPENDS or a mix of them...
|
||||
* @param string $sEnableStimulus The user can see this menu if she/he has enough rights to apply this stimulus
|
||||
* @return MenuNode
|
||||
*/
|
||||
public function __construct($sMenuId, $iParentIndex = -1, $fRank = 0, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES)
|
||||
public function __construct($sMenuId, $iParentIndex = -1, $fRank = 0, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES, $sEnableStimulus = null)
|
||||
{
|
||||
$this->sMenuId = $sMenuId;
|
||||
$this->m_sEnableClass = $sEnableClass;
|
||||
$this->m_iEnableAction = $iActionCode;
|
||||
$this->m_iEnableActionResults = $iAllowedResults;
|
||||
$this->m_sEnableStimulus = $sEnableStimulus;
|
||||
$this->index = ApplicationMenu::InsertMenu($this, $iParentIndex, $fRank);
|
||||
}
|
||||
|
||||
@@ -319,7 +326,7 @@ abstract class MenuNode
|
||||
|
||||
public function GetHyperlink($aExtraParams)
|
||||
{
|
||||
$aExtraParams['menu'] = $this->GetIndex();
|
||||
$aExtraParams['c[menu]'] = $this->GetIndex();
|
||||
return $this->AddParams('../pages/UI.php', $aExtraParams);
|
||||
}
|
||||
|
||||
@@ -333,11 +340,26 @@ abstract class MenuNode
|
||||
{
|
||||
if (MetaModel::IsValidClass($this->m_sEnableClass))
|
||||
{
|
||||
$iResult = UserRights::IsActionAllowed($this->m_sEnableClass, $this->m_iEnableAction);
|
||||
if (($iResult & $this->m_iEnableActionResults))
|
||||
if ($this->m_sEnableStimulus != null)
|
||||
{
|
||||
return true;
|
||||
if (!UserRights::IsStimulusAllowed($this->m_sEnableClass, $this->m_sEnableStimulus))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if ($this->m_iEnableAction != null)
|
||||
{
|
||||
$iResult = UserRights::IsActionAllowed($this->m_sEnableClass, $this->m_iEnableAction);
|
||||
if (($iResult & $this->m_iEnableActionResults))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -381,9 +403,9 @@ class MenuGroup extends MenuNode
|
||||
* @param integer $iAllowedResults Expected "rights" for the action: either UR_ALLOWED_YES, UR_ALLOWED_NO, UR_ALLOWED_DEPENDS or a mix of them...
|
||||
* @return MenuGroup
|
||||
*/
|
||||
public function __construct($sMenuId, $fRank, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES)
|
||||
public function __construct($sMenuId, $fRank, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES, $sEnableStimulus = null)
|
||||
{
|
||||
parent::__construct($sMenuId, -1 /* no parent, groups are at root level */, $fRank, $sEnableClass, $iActionCode, $iAllowedResults);
|
||||
parent::__construct($sMenuId, -1 /* no parent, groups are at root level */, $fRank, $sEnableClass, $iActionCode, $iAllowedResults, $sEnableStimulus);
|
||||
}
|
||||
|
||||
public function RenderContent(WebPage $oPage, $aExtraParams = array())
|
||||
@@ -411,9 +433,9 @@ class TemplateMenuNode extends MenuNode
|
||||
* @param integer $iAllowedResults Expected "rights" for the action: either UR_ALLOWED_YES, UR_ALLOWED_NO, UR_ALLOWED_DEPENDS or a mix of them...
|
||||
* @return MenuNode
|
||||
*/
|
||||
public function __construct($sMenuId, $sTemplateFile, $iParentIndex, $fRank = 0, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES)
|
||||
public function __construct($sMenuId, $sTemplateFile, $iParentIndex, $fRank = 0, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES, $sEnableStimulus = null)
|
||||
{
|
||||
parent::__construct($sMenuId, $iParentIndex, $fRank, $sEnableClass, $iActionCode, $iAllowedResults);
|
||||
parent::__construct($sMenuId, $iParentIndex, $fRank, $sEnableClass, $iActionCode, $iAllowedResults, $sEnableStimulus);
|
||||
$this->sTemplateFile = $sTemplateFile;
|
||||
}
|
||||
|
||||
@@ -466,9 +488,9 @@ class OQLMenuNode extends MenuNode
|
||||
* @param integer $iAllowedResults Expected "rights" for the action: either UR_ALLOWED_YES, UR_ALLOWED_NO, UR_ALLOWED_DEPENDS or a mix of them...
|
||||
* @return MenuNode
|
||||
*/
|
||||
public function __construct($sMenuId, $sOQL, $iParentIndex, $fRank = 0, $bSearch = false, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES)
|
||||
public function __construct($sMenuId, $sOQL, $iParentIndex, $fRank = 0, $bSearch = false, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES, $sEnableStimulus = null)
|
||||
{
|
||||
parent::__construct($sMenuId, $iParentIndex, $fRank, $sEnableClass, $iActionCode, $iAllowedResults);
|
||||
parent::__construct($sMenuId, $iParentIndex, $fRank, $sEnableClass, $iActionCode, $iAllowedResults, $sEnableStimulus);
|
||||
$this->sPageTitle = "Menu:$sMenuId+";
|
||||
$this->sOQL = $sOQL;
|
||||
$this->bSearch = $bSearch;
|
||||
@@ -545,9 +567,9 @@ class SearchMenuNode extends MenuNode
|
||||
* @param integer $iAllowedResults Expected "rights" for the action: either UR_ALLOWED_YES, UR_ALLOWED_NO, UR_ALLOWED_DEPENDS or a mix of them...
|
||||
* @return MenuNode
|
||||
*/
|
||||
public function __construct($sMenuId, $sClass, $iParentIndex, $fRank = 0, $bSearch = false, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES)
|
||||
public function __construct($sMenuId, $sClass, $iParentIndex, $fRank = 0, $bSearch = false, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES, $sEnableStimulus = null)
|
||||
{
|
||||
parent::__construct($sMenuId, $iParentIndex, $fRank, $sEnableClass, $iActionCode, $iAllowedResults);
|
||||
parent::__construct($sMenuId, $iParentIndex, $fRank, $sEnableClass, $iActionCode, $iAllowedResults, $sEnableStimulus);
|
||||
$this->sPageTitle = "Menu:$sMenuId+";
|
||||
$this->sClass = $sClass;
|
||||
}
|
||||
@@ -585,15 +607,15 @@ class WebPageMenuNode extends MenuNode
|
||||
* @param integer $iAllowedResults Expected "rights" for the action: either UR_ALLOWED_YES, UR_ALLOWED_NO, UR_ALLOWED_DEPENDS or a mix of them...
|
||||
* @return MenuNode
|
||||
*/
|
||||
public function __construct($sMenuId, $sHyperlink, $iParentIndex, $fRank = 0, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES)
|
||||
public function __construct($sMenuId, $sHyperlink, $iParentIndex, $fRank = 0, $sEnableClass = null, $iActionCode = null, $iAllowedResults = UR_ALLOWED_YES, $sEnableStimulus = null)
|
||||
{
|
||||
parent::__construct($sMenuId, $iParentIndex, $fRank, $sEnableClass, $iActionCode, $iAllowedResults);
|
||||
parent::__construct($sMenuId, $iParentIndex, $fRank, $sEnableClass, $iActionCode, $iAllowedResults, $sEnableStimulus);
|
||||
$this->sHyperlink = $sHyperlink;
|
||||
}
|
||||
|
||||
public function GetHyperlink($aExtraParams)
|
||||
{
|
||||
$aExtraParams['menu'] = $this->GetIndex();
|
||||
$aExtraParams['c[menu]'] = $this->GetIndex();
|
||||
return $this->AddParams( $this->sHyperlink, $aExtraParams);
|
||||
}
|
||||
|
||||
@@ -631,7 +653,7 @@ class NewObjectMenuNode extends MenuNode
|
||||
public function GetHyperlink($aExtraParams)
|
||||
{
|
||||
$sHyperlink = '../pages/UI.php?operation=new&class='.$this->sClass;
|
||||
$aExtraParams['menu'] = $this->GetIndex();
|
||||
$aExtraParams['c[menu]'] = $this->GetIndex();
|
||||
return $this->AddParams($sHyperlink, $aExtraParams);
|
||||
}
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
require_once("../application/webpage.class.inc.php");
|
||||
require_once(APPROOT."/application/webpage.class.inc.php");
|
||||
/**
|
||||
* Web page with some associated CSS and scripts (jquery) for a fancier display
|
||||
*/
|
||||
|
||||
@@ -23,9 +23,9 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
require_once("../application/nicewebpage.class.inc.php");
|
||||
require_once("../application/applicationcontext.class.inc.php");
|
||||
require_once("../application/user.preferences.class.inc.php");
|
||||
require_once(APPROOT."/application/nicewebpage.class.inc.php");
|
||||
require_once(APPROOT."/application/applicationcontext.class.inc.php");
|
||||
require_once(APPROOT."/application/user.preferences.class.inc.php");
|
||||
/**
|
||||
* Web page with some associated CSS and scripts (jquery) for a fancier display
|
||||
* of the Portal web page
|
||||
@@ -58,7 +58,6 @@ class PortalWebPage extends NiceWebPage
|
||||
$this->add_linked_script("../js/jquery.tablehover.js");
|
||||
$this->add_linked_script("../js/jquery.treeview.js");
|
||||
$this->add_linked_script("../js/jquery.autocomplete.js");
|
||||
$this->add_linked_script("../js/jquery.bgiframe.js");
|
||||
$this->add_linked_script("../js/jquery.positionBy.js");
|
||||
$this->add_linked_script("../js/jquery.popupmenu.js");
|
||||
$this->add_linked_script("../js/date.js");
|
||||
@@ -119,6 +118,7 @@ try
|
||||
changeYear: true
|
||||
});
|
||||
$('.resizable').resizable(); // Make resizable everything that claims to be resizable !
|
||||
$('.caselog_header').click( function () { $(this).toggleClass('open').next('.caselog_entry').toggle(); });
|
||||
}
|
||||
catch(err)
|
||||
{
|
||||
@@ -164,7 +164,8 @@ EOF
|
||||
|
||||
public function output()
|
||||
{
|
||||
$this->AddMenuButton('logoff', 'Portal:Disconnect', '../pages/logoff.php?portal=1'); // This menu is always present and is the last one
|
||||
$sMenu = '';
|
||||
$this->AddMenuButton('logoff', 'Portal:Disconnect', '../pages/logoff.php'); // This menu is always present and is the last one
|
||||
foreach($this->m_aMenuButtons as $aMenuItem)
|
||||
{
|
||||
$sMenu .= "<a class=\"button\" id=\"{$aMenuItem['id']}\" href=\"{$aMenuItem['hyperlink']}\"><span>".Dict::S($aMenuItem['label'])."</span></a>";
|
||||
@@ -173,4 +174,4 @@ EOF
|
||||
parent::output();
|
||||
}
|
||||
}
|
||||
?>
|
||||
?>
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
require_once('../core/cmdbobject.class.inc.php');
|
||||
require_once('../application/utils.inc.php');
|
||||
require_once(APPROOT.'/core/cmdbobject.class.inc.php');
|
||||
require_once(APPROOT.'/application/utils.inc.php');
|
||||
|
||||
MetaModel::Startup(ITOP_CONFIG_FILE);
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
require_once('../application/displayblock.class.inc.php');
|
||||
require_once(APPROOT.'/application/displayblock.class.inc.php');
|
||||
/**
|
||||
* This class manages the special template format used internally to build the iTop web pages
|
||||
*/
|
||||
@@ -161,7 +161,7 @@ class DisplayTemplate
|
||||
$oPage->AddTabContainer('Tabs_'.$iTabContainerCount);
|
||||
$oPage->SetCurrentTabContainer('Tabs_'.$iTabContainerCount);
|
||||
$iTabContainerCount++;
|
||||
//$oPage->p('Content:<pre>'.htmlentities($sContent).'</pre>');
|
||||
//$oPage->p('Content:<pre>'.htmlentities($sContent, ENT_QUOTES, 'UTF-8').'</pre>');
|
||||
$oTemplate = new DisplayTemplate($sContent);
|
||||
$oTemplate->Render($oPage, array()); // no params to apply, they have already been applied
|
||||
$oPage->SetCurrentTabContainer('');
|
||||
@@ -185,7 +185,7 @@ class DisplayTemplate
|
||||
$oPage->SetCurrentTab(Dict::S(str_replace('_', ' ', $aAttributes['name'])));
|
||||
$oTemplate = new DisplayTemplate($sContent);
|
||||
$oTemplate->Render($oPage, array()); // no params to apply, they have already been applied
|
||||
//$oPage->p('iTop Tab Content:<pre>'.htmlentities($sContent).'</pre>');
|
||||
//$oPage->p('iTop Tab Content:<pre>'.htmlentities($sContent, ENT_QUOTES, 'UTF-8').'</pre>');
|
||||
$oPage->SetCurrentTab('');
|
||||
break;
|
||||
|
||||
@@ -195,7 +195,7 @@ class DisplayTemplate
|
||||
$oPage->StartCollapsibleSection(Dict::S($sName), $bOpen);
|
||||
$oTemplate = new DisplayTemplate($sContent);
|
||||
$oTemplate->Render($oPage, array()); // no params to apply, they have already been applied
|
||||
//$oPage->p('iTop Tab Content:<pre>'.htmlentities($sContent).'</pre>');
|
||||
//$oPage->p('iTop Tab Content:<pre>'.htmlentities($sContent, ENT_QUOTES, 'UTF-8').'</pre>');
|
||||
$oPage->EndCollapsibleSection();
|
||||
break;
|
||||
|
||||
@@ -218,8 +218,8 @@ class DisplayTemplate
|
||||
*/
|
||||
static public function UnitTest()
|
||||
{
|
||||
require_once('../application/startup.inc.php');
|
||||
require_once("../application/itopwebpage.class.inc.php");
|
||||
require_once(APPROOT.'/application/startup.inc.php');
|
||||
require_once(APPROOT."/application/itopwebpage.class.inc.php");
|
||||
|
||||
$sTemplate = '<div class="page_header">
|
||||
<div class="actions_details"><a href="#"><span>Actions</span></a></div>
|
||||
@@ -240,8 +240,8 @@ class DisplayTemplate
|
||||
</itoptab>
|
||||
</itoptabs>';
|
||||
|
||||
$oPage = new iTopWebPage('Unit Test', 3);
|
||||
//$oPage->add("Template content: <pre>".htmlentities($sTemplate)."</pre>\n");
|
||||
$oPage = new iTopWebPage('Unit Test');
|
||||
//$oPage->add("Template content: <pre>".htmlentities($sTemplate, ENT_QUOTES, 'UTF-8')."</pre>\n");
|
||||
$oTemplate = new DisplayTemplate($sTemplate);
|
||||
$oTemplate->Render($oPage, array('class'=>'Network device','pkey'=> 271, 'name' => 'deliversw01.mecanorama.fr', 'org_id' => 3));
|
||||
$oPage->output();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<div style="width:100%;background: url(../images/welcome.jpg) top left no-repeat;">
|
||||
<div style="width:100%;background: #fff url(../images/welcome.jpg) top left no-repeat;">
|
||||
<style>
|
||||
.dashboard {
|
||||
vertical-align:top;
|
||||
|
||||
@@ -17,94 +17,81 @@
|
||||
/**
|
||||
* This class records the pending "transactions" corresponding to forms that have not been
|
||||
* submitted yet, in order to prevent double submissions. When created a transaction remains valid
|
||||
* until it is "used" by calling IsTransactionValid once, or until it
|
||||
* expires (delay = TRANSACTION_EXPIRATION_DELAY, defaults to 4 hours)
|
||||
* until the user's session expires
|
||||
* @package iTop
|
||||
*/
|
||||
// How long a "transaction" is considered valid, i.e. when a form is submitted
|
||||
// if the form dates back from too long a time, it is considered invalid. This is
|
||||
// because since HTTP is not a connected protocol, we cannot know when a user disconnects
|
||||
// from the application (maybe just by closing her browser), so we keep track - in the database - of all pending
|
||||
// forms that have not yet been submitted. To limit this list we consider that after some time
|
||||
// a "transaction" is no loger valid an gets purged from the table
|
||||
define ('TRANSACTION_EXPIRATION_DELAY', 3600*4); // default: 4h
|
||||
|
||||
require_once('../core/dbobject.class.php');
|
||||
|
||||
class privUITransaction extends DBObject
|
||||
class privUITransaction
|
||||
{
|
||||
public static function Init()
|
||||
{
|
||||
$aParams = array
|
||||
(
|
||||
"category" => "gui",
|
||||
"key_type" => "autoincrement",
|
||||
"name_attcode" => "expiration_date",
|
||||
"state_attcode" => "",
|
||||
"reconc_keys" => array(),
|
||||
"db_table" => "priv_transaction",
|
||||
"db_key_field" => "id",
|
||||
"db_finalclass_field" => "",
|
||||
);
|
||||
MetaModel::Init_Params($aParams);
|
||||
MetaModel::Init_AddAttribute(new AttributeDateTime("expiration_date", array("allowed_values"=>null, "sql"=>"expiration_date", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
|
||||
|
||||
MetaModel::Init_SetZListItems('details', array('expiration_date')); // Attributes to be displayed for the complete details
|
||||
MetaModel::Init_SetZListItems('list', array('expiration_date')); // Attributes to be displayed for a list
|
||||
}
|
||||
/**
|
||||
* Create a new transaction, store it in the database and return its id
|
||||
* Create a new transaction id, store it in the session and return its id
|
||||
* @param void
|
||||
* @return int The identifier of the new transaction
|
||||
*/
|
||||
public static function GetNewTransactionId()
|
||||
{
|
||||
// First remove all the expired transactions...
|
||||
self::CleanupExpiredTransactions();
|
||||
$oTransaction = new privUITransaction();
|
||||
$sDate = date('Y-m-d H:i:s', time()+TRANSACTION_EXPIRATION_DELAY);
|
||||
$oTransaction->Set('expiration_date', $sDate); // 4 h delay by default
|
||||
$oTransaction->DBInsert();
|
||||
return sprintf("%d", $oTransaction->GetKey());
|
||||
if (!isset($_SESSION['transactions']))
|
||||
{
|
||||
$_SESSION['transactions'] = array();
|
||||
}
|
||||
// Strictly speaking, the two lines below should be grouped together
|
||||
// by a critical section
|
||||
// sem_acquire($rSemIdentified);
|
||||
$id = 1 + count($_SESSION['transactions']);
|
||||
$_SESSION['transactions'][$id] = true;
|
||||
// sem_release($rSemIdentified);
|
||||
|
||||
return sprintf("%d", $id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether a transaction is valid or not and remove the valid transaction from
|
||||
* the database so that another call to IsTransactionValid for the same transaction
|
||||
* Check whether a transaction is valid or not and (optionally) remove the valid transaction from
|
||||
* the session so that another call to IsTransactionValid for the same transaction id
|
||||
* will return false
|
||||
* @param int $id Identifier of the transaction, as returned by GetNewTransactionId
|
||||
* @param bool $bRemoveTransaction True if the transaction must be removed
|
||||
* @return bool True if the transaction is valid, false otherwise
|
||||
*/
|
||||
public static function IsTransactionValid($id)
|
||||
public static function IsTransactionValid($id, $bRemoveTransaction = true)
|
||||
{
|
||||
// First remove all the expired transactions...
|
||||
self::CleanupExpiredTransactions();
|
||||
// TO DO put a critical section around this part to be 100% safe...
|
||||
// sem_acquire(...)
|
||||
$bResult = false;
|
||||
$oTransaction = MetaModel::GetObject('privUITransaction', $id, false /* MustBeFound */);
|
||||
if ($oTransaction)
|
||||
$bResult = false;
|
||||
if (isset($_SESSION['transactions']))
|
||||
{
|
||||
$bResult = true;
|
||||
$oTransaction->DBDelete();
|
||||
// Strictly speaking, the eight lines below should be grouped together
|
||||
// inside the same critical section as above
|
||||
// sem_acquire($rSemIdentified);
|
||||
if (isset($_SESSION['transactions'][$id]))
|
||||
{
|
||||
$bResult = true;
|
||||
if ($bRemoveTransaction)
|
||||
{
|
||||
unset($_SESSION['transactions'][$id]);
|
||||
}
|
||||
}
|
||||
// sem_release($rSemIdentified);
|
||||
}
|
||||
// sem_release(...)
|
||||
return $bResult;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove from the database all transactions that have expired
|
||||
* Removes the transaction specified by its id
|
||||
* @param int $id The Identifier (as returned by GetNewTranscationId) of the transaction to be removed.
|
||||
* @return void
|
||||
*/
|
||||
protected static function CleanupExpiredTransactions()
|
||||
public static function RemoveTransaction($id)
|
||||
{
|
||||
$sQuery = 'SELECT privUITransaction WHERE expiration_date < NOW()';
|
||||
$oSearch = DBObjectSearch::FromOQL($sQuery);
|
||||
$oSet = new DBObjectSet($oSearch);
|
||||
while($oTransaction = $oSet->Fetch())
|
||||
if (isset($_SESSION['transactions']))
|
||||
{
|
||||
$oTransaction->DBDelete();
|
||||
}
|
||||
// Strictly speaking, the three lines below should be grouped together
|
||||
// inside the same critical section as above
|
||||
// sem_acquire($rSemIdentified);
|
||||
if (isset($_SESSION['transactions'][$id]))
|
||||
{
|
||||
unset($_SESSION['transactions'][$id]);
|
||||
}
|
||||
// sem_release($rSemIdentified);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
||||
303
application/ui.extkeywidget.class.inc.php
Normal file
303
application/ui.extkeywidget.class.inc.php
Normal file
@@ -0,0 +1,303 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
/**
|
||||
* Class UIExtKeyWidget
|
||||
* UI wdiget for displaying and editing external keys when
|
||||
* A simple drop-down list is not enough...
|
||||
*
|
||||
* The layout is the following
|
||||
*
|
||||
* +-- #label_<id> (input)-------+ +-----------+
|
||||
* | | | Browse... |
|
||||
* +-----------------------------+ +-----------+
|
||||
*
|
||||
* And the popup dialog has the following layout:
|
||||
*
|
||||
* +------------------- ac_dlg_<id> (div)-----------+
|
||||
* + +--- ds_<id> (div)---------------------------+ |
|
||||
* | | +------------- fs_<id> (form)------------+ | |
|
||||
* | | | +--------+---+ | | |
|
||||
* | | | | Class | V | | | |
|
||||
* | | | +--------+---+ | | |
|
||||
* | | | | | |
|
||||
* | | | S e a r c h F o r m | | |
|
||||
* | | | +--------+ | | |
|
||||
* | | | | Search | | | |
|
||||
* | | | +--------+ | | |
|
||||
* | | +----------------------------------------+ | |
|
||||
* | +--------------+-dh_<id>-+--------------------+ |
|
||||
* | \ Search / |
|
||||
* | +------+ |
|
||||
* | +--- fr_<id> (form)--------------------------+ |
|
||||
* | | +------------ dr_<id> (div)--------------+ | |
|
||||
* | | | | | |
|
||||
* | | | S e a r c h R e s u l t s | | |
|
||||
* | | | | | |
|
||||
* | | +----------------------------------------+ | |
|
||||
* | | +--------+ +-----+ | |
|
||||
* | | | Cancel | | Add | | |
|
||||
* | | +--------+ +-----+ | |
|
||||
* | +--------------------------------------------+ |
|
||||
* +------------------------------------------------+
|
||||
* @author Erwan Taloc <erwan.taloc@combodo.com>
|
||||
* @author Romain Quetiez <romain.quetiez@combodo.com>
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
require_once(APPROOT.'/application/webpage.class.inc.php');
|
||||
require_once(APPROOT.'/application/displayblock.class.inc.php');
|
||||
|
||||
class UIExtKeyWidget
|
||||
{
|
||||
protected static $iWidgetIndex = 0;
|
||||
protected $sAttCode;
|
||||
protected $sNameSuffix;
|
||||
protected $iId;
|
||||
protected $sTitle;
|
||||
|
||||
public function __construct($sAttCode, $sClass, $sTitle, $aAllowedValues, $value, $iInputId, $bMandatory, $sNameSuffix = '', $sFieldPrefix = '', $sFormPrefix = '')
|
||||
{
|
||||
self::$iWidgetIndex++;
|
||||
$this->sAttCode = $sAttCode;
|
||||
$this->sClass = $sClass;
|
||||
$this->oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode);
|
||||
$this->sNameSuffix = $sNameSuffix;
|
||||
$this->iId = $iInputId;
|
||||
$this->aAllowedValues = $aAllowedValues;
|
||||
$this->value = $value;
|
||||
$this->sFieldPrefix = $sFieldPrefix;
|
||||
$this->sTargetClass = $this->oAttDef->GetTargetClass();
|
||||
$this->sTitle = $sTitle;
|
||||
$this->sFormPrefix = $sFormPrefix;
|
||||
$this->bMandatory = $bMandatory;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the HTML fragment corresponding to the linkset editing widget
|
||||
* @param WebPage $oP The web page used for all the output
|
||||
* @param Hash $aArgs Extra context arguments
|
||||
* @return string The HTML fragment to be inserted into the page
|
||||
*/
|
||||
public function Display(WebPage $oPage, $aArgs = array(), $bSearchMode = false)
|
||||
{
|
||||
$oPage->add_linked_script('../js/extkeywidget.js');
|
||||
$oPage->add_linked_script('../js/forms-json-utils.js');
|
||||
|
||||
$bCreate = (!$bSearchMode) && (!MetaModel::IsAbstract($this->sTargetClass)) && (UserRights::IsActionAllowed($this->sTargetClass, UR_ACTION_BULK_MODIFY) && $this->oAttDef->AllowTargetCreation());
|
||||
$sMessage = Dict::S('UI:Message:EmptyList:UseSearchForm');
|
||||
$sAttrFieldPrefix = ($bSearchMode) ? '' : 'attr_';
|
||||
|
||||
$sHTMLValue = "<span style=\"white-space:nowrap\">"; // no wrap
|
||||
if($bSearchMode)
|
||||
{
|
||||
$sWizHelper = 'null';
|
||||
}
|
||||
else
|
||||
{
|
||||
$sWizHelper = 'oWizardHelper'.$this->sFormPrefix;
|
||||
}
|
||||
if (count($this->aAllowedValues) < $this->oAttDef->GetMaximumComboLength())
|
||||
{
|
||||
// Few choices, use a normal 'select'
|
||||
$sSelectMode = 'true';
|
||||
|
||||
$sHelpText = $this->oAttDef->GetHelpOnEdition();
|
||||
|
||||
// In case there are no valid values, the select will be empty, thus blocking the user from validating the form
|
||||
$sHTMLValue = "<select title=\"$sHelpText\" name=\"{$sAttrFieldPrefix}{$this->sFieldPrefix}{$this->sAttCode}{$this->sNameSuffix}\" id=\"$this->iId\">\n";
|
||||
if ($bSearchMode)
|
||||
{
|
||||
$sHTMLValue .= "<option value=\"\">".Dict::S('UI:SearchValue:Any')."</option>\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
$sHTMLValue .= "<option value=\"\">".Dict::S('UI:SelectOne')."</option>\n";
|
||||
}
|
||||
foreach($this->aAllowedValues as $key => $display_value)
|
||||
{
|
||||
if ((count($this->aAllowedValues) == 1) && ($this->bMandatory == 'true') )
|
||||
{
|
||||
// When there is only once choice, select it by default
|
||||
$sSelected = ' selected';
|
||||
}
|
||||
else
|
||||
{
|
||||
$sSelected = ($this->value == $key) ? ' selected' : '';
|
||||
}
|
||||
$sHTMLValue .= "<option value=\"$key\"$sSelected>$display_value</option>\n";
|
||||
}
|
||||
$sHTMLValue .= "</select>\n";
|
||||
$oPage->add_ready_script(
|
||||
<<<EOF
|
||||
oACWidget_{$this->iId} = new ExtKeyWidget('{$this->iId}', '{$this->sClass}', '{$this->sAttCode}', '{$this->sNameSuffix}', $sSelectMode, $sWizHelper);
|
||||
oACWidget_{$this->iId}.emptyHtml = "<div style=\"background: #fff; border:0; text-align:center; vertical-align:middle;\"><p>$sMessage</p></div>";
|
||||
$('#$this->iId').bind('update', function() { oACWidget_{$this->iId}.Update(); } );
|
||||
|
||||
EOF
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Too many choices, use an autocomplete
|
||||
$sSelectMode = 'false';
|
||||
|
||||
if ($this->oAttDef->IsNull($this->value)) // Null values are displayed as ''
|
||||
{
|
||||
$sDisplayValue = '';
|
||||
}
|
||||
else
|
||||
{
|
||||
$sDisplayValue = $this->GetObjectName($this->value);
|
||||
}
|
||||
$sFormPrefix = $this->sFormPrefix;
|
||||
$iMinChars = $this->oAttDef->GetMinAutoCompleteChars();
|
||||
$iFieldSize = $this->oAttDef->GetMaxSize();
|
||||
|
||||
// the input for the auto-complete
|
||||
$sHTMLValue = "<input count=\"".count($this->aAllowedValues)."\" type=\"text\" id=\"label_$this->iId\" size=\"30\" maxlength=\"$iFieldSize\" value=\"$sDisplayValue\"/> ";
|
||||
$sHTMLValue .= "<a class=\"no-arrow\" href=\"javascript:oACWidget_{$this->iId}.Search();\"><img id=\"mini_search_{$this->iId}\" style=\"border:0;vertical-align:middle;\" src=\"../images/mini_search.gif\" /></a> ";
|
||||
|
||||
// another hidden input to store & pass the object's Id
|
||||
$sHTMLValue .= "<input type=\"hidden\" id=\"$this->iId\" name=\"{$sAttrFieldPrefix}{$this->sFieldPrefix}{$this->sAttCode}{$this->sNameSuffix}\" value=\"$this->value\" />\n";
|
||||
|
||||
// Scripts to start the autocomplete and bind some events to it
|
||||
$oPage->add_ready_script(
|
||||
<<<EOF
|
||||
oACWidget_{$this->iId} = new ExtKeyWidget('{$this->iId}', '{$this->sClass}', '{$this->sAttCode}', '{$this->sNameSuffix}', $sSelectMode, $sWizHelper);
|
||||
oACWidget_{$this->iId}.emptyHtml = "<div style=\"background: #fff; border:0; text-align:center; vertical-align:middle;\"><p>$sMessage</p></div>";
|
||||
$('#label_$this->iId').autocomplete('./ajax.render.php', { scroll:true, minChars:{$iMinChars}, formatItem:formatItem, autoFill:false, matchContains:true, keyHolder:'#{$this->iId}', extraParams:{operation:'autocomplete', sclass:'{$this->sClass}',attCode:'{$this->sAttCode}'}});
|
||||
$('#label_$this->iId').blur(function() { $(this).search(); } );
|
||||
$('#label_$this->iId').keyup(function() { if ($(this).val() == '') { $('#$this->iId').val(''); } } ); // Useful for search forms: empty value in the "label", means no value, immediatly !
|
||||
$('#label_$this->iId').result( function(event, data, formatted) { OnAutoComplete('{$this->iId}', event, data, formatted); } );
|
||||
$('#$this->iId').bind('update', function() { oACWidget_{$this->iId}.Update(); } );
|
||||
EOF
|
||||
);
|
||||
//$oPage->add_at_the_end($this->GetSearchDialog($oPage)); // To prevent adding forms inside the main form
|
||||
$oPage->add_at_the_end('<div id="ac_dlg_'.$this->iId.'"></div>'); // The place where to download the search dialog is outside of the main form (to prevent nested forms)
|
||||
|
||||
}
|
||||
if ($bCreate)
|
||||
{
|
||||
$sHTMLValue .= "<a class=\"no-arrow\" href=\"javascript:oACWidget_{$this->iId}.CreateObject();\"><img id=\"mini_add_{$this->iId}\" style=\"border:0;vertical-align:middle;\" src=\"../images/mini_add.gif\" /></a> ";
|
||||
$oPage->add_at_the_end('<div id="ajax_'.$this->iId.'"></div>');
|
||||
}
|
||||
$sHTMLValue .= "<span id=\"v_{$this->iId}\"></span>";
|
||||
$sHTMLValue .= "</span>"; // end of no wrap
|
||||
return $sHTMLValue;
|
||||
}
|
||||
|
||||
public function GetSearchDialog(WebPage $oPage)
|
||||
{
|
||||
$sHTML = '<div class="wizContainer" style="vertical-align:top;"><div id="dc_'.$this->iId.'">';
|
||||
|
||||
$oFilter = new DBObjectSearch($this->sTargetClass);
|
||||
$oSet = new CMDBObjectSet($oFilter);
|
||||
$oBlock = new DisplayBlock($oFilter, 'search', false);
|
||||
$sHTML .= $oBlock->GetDisplay($oPage, $this->iId, array('open' => true, 'currentId' => $this->iId));
|
||||
$sHTML .= "<form id=\"fr_{$this->iId}\" OnSubmit=\"return oACWidget_{$this->iId}.DoOk();\">\n";
|
||||
$sHTML .= "<div id=\"dr_{$this->iId}\" style=\"vertical-align:top;background: #fff;height:100%;overflow:auto;padding:0;border:0;\">\n";
|
||||
$sHTML .= "<div style=\"background: #fff; border:0; text-align:center; vertical-align:middle;\"><p>".Dict::S('UI:Message:EmptyList:UseSearchForm')."</p></div>\n";
|
||||
$sHTML .= "</div>\n";
|
||||
$sHTML .= "<input type=\"button\" id=\"btn_cancel_{$this->iId}\" value=\"".Dict::S('UI:Button:Cancel')."\" onClick=\"$('#ac_dlg_{$this->iId}').dialog('close');\"> ";
|
||||
$sHTML .= "<input type=\"button\" id=\"btn_ok_{$this->iId}\" value=\"".Dict::S('UI:Button:Ok')."\" onClick=\"oACWidget_{$this->iId}.DoOk();\">";
|
||||
$sHTML .= "</form>\n";
|
||||
$sHTML .= '</div></div>';
|
||||
|
||||
$sDialogTitle = addslashes($this->sTitle);
|
||||
$oPage->add_ready_script(
|
||||
<<<EOF
|
||||
$('#ac_dlg_{$this->iId}').dialog({ width: $(window).width()*0.8, height: $(window).height()*0.8, autoOpen: false, modal: true, title: '$sDialogTitle', resizeStop: oACWidget_{$this->iId}.UpdateSizes, close: oACWidget_{$this->iId}.OnClose });
|
||||
$('#fs_{$this->iId}').bind('submit.uiAutocomplete', oACWidget_{$this->iId}.DoSearchObjects);
|
||||
$('#dc_{$this->iId}').resize(oACWidget_{$this->iId}.UpdateSizes);
|
||||
EOF
|
||||
);
|
||||
$oPage->add($sHTML);
|
||||
}
|
||||
|
||||
/**
|
||||
* Search for objects to be selected
|
||||
* @param WebPage $oP The page used for the output (usually an AjaxWebPage)
|
||||
* @param string $sRemoteClass Name of the "remote" class to perform the search on, must be a derived class of m_sRemoteClass
|
||||
* @param Array $aAlreadyLinkedIds List of IDs of objects of "remote" class already linked, to be filtered out of the search
|
||||
*/
|
||||
public function SearchObjectsToSelect(WebPage $oP, $sTargetClass = '')
|
||||
{
|
||||
if ($sTargetClass != '')
|
||||
{
|
||||
// assert(MetaModel::IsParentClass($this->m_sRemoteClass, $sRemoteClass));
|
||||
$oFilter = new DBObjectSearch($sTargetClass);
|
||||
}
|
||||
else
|
||||
{
|
||||
// No remote class specified use the one defined in the linkedset
|
||||
$oFilter = new DBObjectSearch($this->sTargetClass);
|
||||
}
|
||||
$oFilter->AddCondition('id', array_keys($this->aAllowedValues), 'IN');
|
||||
$oSet = new CMDBObjectSet($oFilter);
|
||||
$oBlock = new DisplayBlock($oFilter, 'list', false);
|
||||
$oBlock->Display($oP, $this->iId, array('menu' => false, 'selection_mode' => true, 'selection_type' => 'single', 'display_limit' => false)); // Don't display the 'Actions' menu on the results
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the display name of the selected object, to fill back the autocomplete
|
||||
*/
|
||||
public function GetObjectName($iObjId)
|
||||
{
|
||||
$oObj = MetaModel::GetObject($this->sTargetClass, $iObjId);
|
||||
return $oObj->GetName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the form to create a new object of the 'target' class
|
||||
*/
|
||||
public function GetObjectCreationForm(WebPage $oPage)
|
||||
{
|
||||
$sDialogTitle = addslashes($this->sTitle);
|
||||
$oPage->add('<div id="ac_create_'.$this->iId.'"><div class="wizContainer" style="vertical-align:top;"><div id="dcr_'.$this->iId.'">');
|
||||
$oPage->add("<h1>".MetaModel::GetClassIcon($this->sTargetClass)." ".Dict::Format('UI:CreationTitle_Class', MetaModel::GetName($this->sTargetClass))."</h1>\n");
|
||||
cmdbAbstractObject::DisplayCreationForm($oPage, $this->sTargetClass, null, array(), array('formPrefix' => $this->iId, 'noRelations' => true));
|
||||
$oPage->add('</div></div></div>');
|
||||
// $oPage->add_ready_script("\$('#ac_create_$this->iId').dialog({ width: $(window).width()*0.8, height: 'auto', autoOpen: false, modal: true, title: '$sDialogTitle'});\n");
|
||||
$oPage->add_ready_script("\$('#ac_create_$this->iId').dialog({ width: 'auto', height: 'auto', autoOpen: false, modal: true, title: '$sDialogTitle'});\n");
|
||||
$oPage->add_ready_script("$('#dcr_{$this->iId} form').removeAttr('onsubmit');");
|
||||
$oPage->add_ready_script("$('#dcr_{$this->iId} form').bind('submit.uilinksWizard', oACWidget_{$this->iId}.DoCreateObject);");
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the form to create a new object of the 'target' class
|
||||
*/
|
||||
public function DoCreateObject($oPage)
|
||||
{
|
||||
$oObj = MetaModel::NewObject($this->sTargetClass);
|
||||
$aErrors = $oObj->UpdateObject($this->sFormPrefix.$this->iId);
|
||||
if (count($aErrors) == 0)
|
||||
{
|
||||
$oMyChange = MetaModel::NewObject("CMDBChange");
|
||||
$oMyChange->Set("date", time());
|
||||
$sUserString = CMDBChange::GetCurrentUserName();
|
||||
$oMyChange->Set("userinfo", $sUserString);
|
||||
$iChangeId = $oMyChange->DBInsert();
|
||||
$oObj->DBInsertTracked($oMyChange);
|
||||
return array('name' => $oObj->GetName(), 'id' => $oObj->GetKey());
|
||||
}
|
||||
else
|
||||
{
|
||||
return array('name' => implode(' ', $aErrors), 'id' => 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
87
application/ui.htmleditorwidget.class.inc.php
Normal file
87
application/ui.htmleditorwidget.class.inc.php
Normal file
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* Class UIHTMLEditorWidget
|
||||
* UI wdiget for displaying and editing one-way encrypted passwords
|
||||
*
|
||||
* @author Phil Eddies
|
||||
* @author Romain Quetiez <romain.quetiez@combodo.com>
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
class UIHTMLEditorWidget
|
||||
{
|
||||
protected $m_iId;
|
||||
protected $m_sAttCode;
|
||||
protected $m_sNameSuffix;
|
||||
protected $m_sFieldPrefix;
|
||||
protected $m_sHelpText;
|
||||
protected $m_sValidationField;
|
||||
protected $m_sValue;
|
||||
protected $m_sMandatory;
|
||||
|
||||
public function __construct($iInputId, $sAttCode, $sNameSuffix, $sFieldPrefix, $sHelpText, $sValidationField, $sValue, $sMandatory)
|
||||
{
|
||||
$this->m_iId = $iInputId;
|
||||
$this->m_sAttCode = $sAttCode;
|
||||
$this->m_sNameSuffix = $sNameSuffix;
|
||||
$this->m_sHelpText = $sHelpText;
|
||||
$this->m_sValidationField = $sValidationField;
|
||||
$this->m_sValue = $sValue;
|
||||
$this->m_sMandatory = $sMandatory;
|
||||
$this->m_sFieldPrefix = $sFieldPrefix;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the HTML fragment corresponding to the HTML editor widget
|
||||
* @param WebPage $oP The web page used for all the output
|
||||
* @param Hash $aArgs Extra context arguments
|
||||
* @return string The HTML fragment to be inserted into the page
|
||||
*/
|
||||
public function Display(WebPage $oPage, $aArgs = array())
|
||||
{
|
||||
$iId = $this->m_iId;
|
||||
$sCode = $this->m_sAttCode.$this->m_sNameSuffix;
|
||||
$sValue = $this->m_sValue;
|
||||
$sHelpText = $this->m_sHelpText;
|
||||
$sValidationField = $this->m_sValidationField;
|
||||
|
||||
$sHtmlValue = "<table><tr><td><textarea class=\"htmlEditor\" title=\"$sHelpText\" name=\"attr_{$this->m_sFieldPrefix}{$sCode}\" rows=\"10\" cols=\"10\" id=\"$iId\">$sValue</textarea></td><td>$sValidationField</td></tr></table>";
|
||||
|
||||
// Replace the text area with CKEditor
|
||||
// To change the default settings of the editor,
|
||||
// a) edit the file /js/ckeditor/config.js
|
||||
// b) or override some of the configuration settings, using the second parameter of ckeditor()
|
||||
$sLanguage = strtolower(trim(UserRights::GetUserLanguage()));
|
||||
$oPage->add_ready_script("$('#$iId').ckeditor(function() { /* callback code */ }, { language : '$sLanguage' , contentsLanguage : '$sLanguage', extraPlugins: 'disabler' });"); // Transform $iId into a CKEdit
|
||||
|
||||
// Please read...
|
||||
// ValidateCKEditField triggers a timer... calling itself indefinitely
|
||||
// This design was the quickest way to achieve the field validation (only checking if the field is blank)
|
||||
// because the ckeditor does not fire events like "change" or "keyup", etc.
|
||||
// See http://dev.ckeditor.com/ticket/900 => won't fix
|
||||
// The most relevant solution would be to implement a plugin to CKEdit, and handle the internal events like: setData, insertHtml, insertElement, loadSnapshot, key, afterUndo, afterRedo
|
||||
|
||||
// Could also be bound to 'instanceReady.ckeditor'
|
||||
$oPage->add_ready_script("$('#$iId').bind('validate', function(evt, sFormId) { return ValidateCKEditField('$iId', '', {$this->m_sMandatory}, sFormId, '') } );\n");
|
||||
$oPage->add_ready_script("$('#$iId').bind('update', function() { BlockField('cke_$iId', $('#$iId').attr('disabled')); } );\n");
|
||||
|
||||
return $sHtmlValue;
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -23,8 +23,8 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
require_once('../application/webpage.class.inc.php');
|
||||
require_once('../application/displayblock.class.inc.php');
|
||||
require_once(APPROOT.'/application/webpage.class.inc.php');
|
||||
require_once(APPROOT.'/application/displayblock.class.inc.php');
|
||||
|
||||
class UILinksWidget
|
||||
{
|
||||
@@ -36,16 +36,16 @@ class UILinksWidget
|
||||
protected $m_sExtKeyToRemote;
|
||||
protected $m_sLinkedClass;
|
||||
protected $m_sRemoteClass;
|
||||
protected static $iWidgetIndex = 0;
|
||||
protected $m_bDuplicatesAllowed;
|
||||
|
||||
public function __construct($sClass, $sAttCode, $iInputId, $sNameSuffix = '')
|
||||
public function __construct($sClass, $sAttCode, $iInputId, $sNameSuffix = '', $bDuplicatesAllowed = false)
|
||||
{
|
||||
$this->m_sClass = $sClass;
|
||||
$this->m_sAttCode = $sAttCode;
|
||||
$this->m_sNameSuffix = $sNameSuffix;
|
||||
$this->m_iInputId = $iInputId;
|
||||
$this->m_bDuplicatesAllowed = $bDuplicatesAllowed;
|
||||
$this->m_aEditableFields = array();
|
||||
self::$iWidgetIndex++;
|
||||
|
||||
$oAttDef = MetaModel::GetAttributeDef($this->m_sClass, $this->m_sAttCode);
|
||||
$this->m_sLinkedClass = $oAttDef->GetLinkedClass();
|
||||
@@ -58,7 +58,7 @@ class UILinksWidget
|
||||
|
||||
$this->m_aEditableFields = array();
|
||||
$this->m_aTableConfig = array();
|
||||
$this->m_aTableConfig['form::checkbox'] = array( 'label' => "<input class=\"select_all\" type=\"checkbox\" value=\"1\" onChange=\"var value = this.checked; $('#linkedset_{$this->m_sAttCode}{$this->m_sNameSuffix} .selection').each( function() { this.checked = value; } ); oWidget".self::$iWidgetIndex.".OnSelectChange();\">", 'description' => Dict::S('UI:SelectAllToggle+'));
|
||||
$this->m_aTableConfig['form::checkbox'] = array( 'label' => "<input class=\"select_all\" type=\"checkbox\" value=\"1\" onClick=\"CheckAll('#linkedset_{$this->m_sAttCode}{$this->m_sNameSuffix} .selection', this.checked); oWidget".$this->m_iInputId.".OnSelectChange();\">", 'description' => Dict::S('UI:SelectAllToggle+'));
|
||||
|
||||
foreach(MetaModel::ListAttributeDefs($this->m_sLinkedClass) as $sAttCode=>$oAttDef)
|
||||
{
|
||||
@@ -66,7 +66,7 @@ class UILinksWidget
|
||||
{
|
||||
// State attribute is always hidden from the UI
|
||||
}
|
||||
else if (!$oAttDef->IsExternalField() && ($sAttCode != $sExtKeyToMe) && ($sAttCode != $this->m_sExtKeyToRemote) && ($sAttCode != 'finalclass'))
|
||||
else if ($oAttDef->IsWritable() && ($sAttCode != $sExtKeyToMe) && ($sAttCode != $this->m_sExtKeyToRemote) && ($sAttCode != 'finalclass'))
|
||||
{
|
||||
$iFlags = MetaModel::GetAttributeFlags($this->m_sLinkedClass, $sDefaultState, $sAttCode);
|
||||
if ( !($iFlags & OPT_ATT_HIDDEN) && !($iFlags & OPT_ATT_READONLY) )
|
||||
@@ -107,12 +107,14 @@ class UILinksWidget
|
||||
$sPrefix .= "[$key][";
|
||||
$sNameSuffix = "]"; // To make a tabular form
|
||||
$aArgs['prefix'] = $sPrefix;
|
||||
$aRow['form::checkbox'] = "<input class=\"selection\" type=\"checkbox\" onChange=\"oWidget".self::$iWidgetIndex.".OnSelectChange();\" value=\"$key\">";
|
||||
$aRow['form::checkbox'] = "<input class=\"selection\" type=\"checkbox\" onClick=\"oWidget".$this->m_iInputId.".OnSelectChange();\" value=\"$key\">";
|
||||
$aRow['form::checkbox'] .= "<input type=\"hidden\" name=\"attr_{$sPrefix}id{$sNameSuffix}\" value=\"$key\">";
|
||||
foreach($this->m_aEditableFields as $sFieldCode)
|
||||
{
|
||||
$sFieldId = $this->m_iInputId.'_'.$sFieldCode.'['.$linkObjOrId->GetKey().']';
|
||||
$sSafeId = str_replace(array('[',']','-'), '_', $sFieldId);
|
||||
$oAttDef = MetaModel::GetAttributeDef($this->m_sLinkedClass, $sFieldCode);
|
||||
$aRow[$sFieldCode] = cmdbAbstractObject::GetFormElementForField($oP, $this->m_sLinkedClass, $sFieldCode, $oAttDef, $linkObjOrId->Get($sFieldCode), '' /* DisplayValue */, $key, $sNameSuffix, 0, $aArgs);
|
||||
$aRow[$sFieldCode] = cmdbAbstractObject::GetFormElementForField($oP, $this->m_sLinkedClass, $sFieldCode, $oAttDef, $linkObjOrId->Get($sFieldCode), '' /* DisplayValue */, $sSafeId, $sNameSuffix, 0, $aArgs);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -121,12 +123,14 @@ class UILinksWidget
|
||||
$sPrefix .= "[$linkObjOrId][";
|
||||
$sNameSuffix = "]"; // To make a tabular form
|
||||
$aArgs['prefix'] = $sPrefix;
|
||||
$aRow['form::checkbox'] = "<input class=\"selection\" type=\"checkbox\" onChange=\"oWidget".self::$iWidgetIndex.".OnSelectChange();\" value=\"$linkObjOrId\">";
|
||||
$aRow['form::checkbox'] = "<input class=\"selection\" type=\"checkbox\" onClick=\"oWidget".$this->m_iInputId.".OnSelectChange();\" value=\"$linkObjOrId\">";
|
||||
$aRow['form::checkbox'] .= "<input type=\"hidden\" name=\"attr_{$sPrefix}id{$sNameSuffix}\" value=\"\">";
|
||||
foreach($this->m_aEditableFields as $sFieldCode)
|
||||
{
|
||||
$sFieldId = $this->m_iInputId.'_'.$sFieldCode.'['.$linkObjOrId.']';
|
||||
$sSafeId = str_replace(array('[',']','-'), '_', $sFieldId);
|
||||
$oAttDef = MetaModel::GetAttributeDef($this->m_sLinkedClass, $sFieldCode);
|
||||
$aRow[$sFieldCode] = cmdbAbstractObject::GetFormElementForField($oP, $this->m_sLinkedClass, $sFieldCode, $oAttDef, '' /* TO DO/ call GetDefaultValue($oObject->ToArgs()) */, '' /* DisplayValue */, '' /* id */, $sNameSuffix, 0, $aArgs);
|
||||
$aRow[$sFieldCode] = cmdbAbstractObject::GetFormElementForField($oP, $this->m_sLinkedClass, $sFieldCode, $oAttDef, '' /* TO DO/ call GetDefaultValue($oObject->ToArgs()) */, '' /* DisplayValue */, $sSafeId /* id */, $sNameSuffix, 0, $aArgs);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -207,7 +211,6 @@ class UILinksWidget
|
||||
*/
|
||||
public function Display(WebPage $oPage, DBObjectSet $oValue, $aArgs = array())
|
||||
{
|
||||
$iWidgetIndex = self::$iWidgetIndex;
|
||||
$sHtmlValue = '';
|
||||
$sTargetClass = self::GetTargetClass($this->m_sClass, $this->m_sAttCode);
|
||||
$sHtmlValue .= "<div id=\"linkedset_{$this->m_sAttCode}{$this->m_sNameSuffix}\">\n";
|
||||
@@ -222,106 +225,20 @@ class UILinksWidget
|
||||
$aForm[$key] = $this->GetFormRow($oPage, $oLinkedObj, $oCurrentLink, $aArgs);
|
||||
}
|
||||
$sHtmlValue .= $this->DisplayFormTable($oPage, $this->m_aTableConfig, $aForm);
|
||||
$sDuplicates = ($this->m_bDuplicatesAllowed) ? 'true' : 'false';
|
||||
$oPage->add_ready_script(<<<EOF
|
||||
oWidget$iWidgetIndex = new LinksWidget('{$this->m_sAttCode}{$this->m_sNameSuffix}', '{$this->m_sClass}', '{$this->m_sAttCode}', '{$this->m_iInputId}', '{$this->m_sNameSuffix}');
|
||||
oWidget$iWidgetIndex.Init();
|
||||
oWidget{$this->m_iInputId} = new LinksWidget('{$this->m_sAttCode}{$this->m_sNameSuffix}', '{$this->m_sClass}', '{$this->m_sAttCode}', '{$this->m_iInputId}', '{$this->m_sNameSuffix}', $sDuplicates);
|
||||
oWidget{$this->m_iInputId}.Init();
|
||||
EOF
|
||||
);
|
||||
$sHtmlValue .= "<span style=\"float:left;\"> <img src=\"../images/tv-item-last.gif\"> <input id=\"{$this->m_sAttCode}{$this->m_sNameSuffix}_btnRemove\" type=\"button\" value=\"".Dict::S('UI:RemoveLinkedObjectsOf_Class')."\" onClick=\"oWidget$iWidgetIndex.RemoveSelected();\" >";
|
||||
$sHtmlValue .= " <input id=\"{$this->m_sAttCode}{$this->m_sNameSuffix}_btnAdd\" type=\"button\" value=\"".Dict::Format('UI:AddLinkedObjectsOf_Class', MetaModel::GetName($this->m_sRemoteClass))."\" onClick=\"oWidget$iWidgetIndex.AddObjects();\"></span>\n";
|
||||
$sHtmlValue .= "<span style=\"float:left;\"> <img src=\"../images/tv-item-last.gif\"> <input id=\"{$this->m_sAttCode}{$this->m_sNameSuffix}_btnRemove\" type=\"button\" value=\"".Dict::S('UI:RemoveLinkedObjectsOf_Class')."\" onClick=\"oWidget{$this->m_iInputId}.RemoveSelected();\" >";
|
||||
$sHtmlValue .= " <input id=\"{$this->m_sAttCode}{$this->m_sNameSuffix}_btnAdd\" type=\"button\" value=\"".Dict::Format('UI:AddLinkedObjectsOf_Class', MetaModel::GetName($this->m_sRemoteClass))."\" onClick=\"oWidget{$this->m_iInputId}.AddObjects();\"></span>\n";
|
||||
$sHtmlValue .= "<span style=\"clear:both;\"><p> </p></span>\n";
|
||||
$sHtmlValue .= "</div>\n";
|
||||
$oPage->add_at_the_end($this->GetObjectPickerDialog($oPage)); // To prevent adding forms inside the main form
|
||||
return $sHtmlValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* This static function is called by the Ajax Page when there is a need to fill an autocomplete combo
|
||||
* @param $oPage WebPage The ajax page used for the output (sent back to the browser)
|
||||
* @param $sClass string The name of the class of the current object being edited
|
||||
* @param $sAttCode string The name of the attribute being edited
|
||||
* @param $sName string The partial name that was typed by the user
|
||||
* @param $iMaxCount integer The maximum number of items to return
|
||||
* @return void
|
||||
*/
|
||||
static public function Autocomplete(WebPage $oPage, $sClass, $sAttCode, $sName, $iMaxCount)
|
||||
{
|
||||
// #@# todo - add context information, otherwise any value will be authorized for external keys
|
||||
$aAllowedValues = MetaModel::GetAllowedValues_att($sClass, $sAttCode, array() /* $aArgs */, $sName);
|
||||
if ($aAllowedValues != null)
|
||||
{
|
||||
$iCount = $iMaxCount;
|
||||
foreach($aAllowedValues as $key => $value)
|
||||
{
|
||||
$oPage->add($value."|".$key."\n");
|
||||
$iCount--;
|
||||
if ($iCount == 0) break;
|
||||
}
|
||||
}
|
||||
else // No limitation to the allowed values
|
||||
{
|
||||
// Search for all the object of the linked class
|
||||
$oAttDef = $oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode);
|
||||
$sLinkedClass = $oAttDef->GetLinkedClass();
|
||||
$sSearchClass = self::GetTargetClass($sClass, $sAttCode);
|
||||
$oFilter = new DBObjectSearch($sSearchClass);
|
||||
$sSearchAttCode = MetaModel::GetNameAttributeCode($sSearchClass);
|
||||
$oFilter->AddCondition($sSearchAttCode, $sName, 'Begins with');
|
||||
$oSet = new CMDBObjectSet($oFilter, array($sSearchAttCode => true));
|
||||
$iCount = 0;
|
||||
while( ($iCount < $iMaxCount) && ($oObj = $oSet->fetch()) )
|
||||
{
|
||||
$oPage->add($oObj->GetName()."|".$oObj->GetKey()."\n");
|
||||
$iCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This static function is called by the Ajax Page display a set of objects being linked
|
||||
* to the object being created
|
||||
* @param $oPage WebPage The ajax page used for the put^put (sent back to the browser
|
||||
* @param $sClass string The name of the 'linking class' which is the class of the objects to display
|
||||
* @param $sSet JSON serialized set of objects
|
||||
* @param $sExtKeyToMe Name of the attribute in sClass that is pointing to a given object
|
||||
* @param $iObjectId The id of the object $sExtKeyToMe is pointing to
|
||||
* @return void
|
||||
*/
|
||||
static public function RenderSet($oPage, $sClass, $sJSONSet, $sExtKeyToMe, $sExtKeyToRemote, $iObjectId)
|
||||
{
|
||||
$aSet = json_decode($sJSONSet, true); // true means hash array instead of object
|
||||
$oSet = CMDBObjectSet::FromScratch($sClass);
|
||||
foreach($aSet as $aObject)
|
||||
{
|
||||
$oObj = MetaModel::NewObject($sClass);
|
||||
foreach($aObject as $sAttCode => $value)
|
||||
{
|
||||
$oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode);
|
||||
if ($oAttDef->IsExternalKey() && ($value != 0))
|
||||
{
|
||||
$oTargetObj = MetaModel::GetObject($oAttDef->GetTargetClass(), $value); // @@ optimization, don't do & query per object in the set !
|
||||
$oObj->Set($sAttCode, $oTargetObj);
|
||||
}
|
||||
else
|
||||
{
|
||||
$oObj->Set($sAttCode, $value);
|
||||
}
|
||||
|
||||
}
|
||||
$oSet->AddObject($oObj);
|
||||
}
|
||||
$aExtraParams = array();
|
||||
$aExtraParams['link_attr'] = $sExtKeyToMe;
|
||||
$aExtraParams['object_id'] = $iObjectId;
|
||||
$aExtraParams['target_attr'] = $sExtKeyToRemote;
|
||||
$aExtraParams['menu'] = false;
|
||||
$aExtraParams['select'] = false;
|
||||
$aExtraParams['view_link'] = false;
|
||||
|
||||
cmdbAbstractObject::DisplaySet($oPage, $oSet, $aExtraParams);
|
||||
}
|
||||
|
||||
|
||||
|
||||
protected static function GetTargetClass($sClass, $sAttCode)
|
||||
{
|
||||
$oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode);
|
||||
@@ -345,12 +262,11 @@ EOF
|
||||
{
|
||||
$sHtml = "<div id=\"dlg_{$this->m_sAttCode}{$this->m_sNameSuffix}\">";
|
||||
$sHtml .= "<div class=\"wizContainer\" style=\"vertical-align:top;\">\n";
|
||||
$iWidgetIndex = self::$iWidgetIndex;
|
||||
$oFilter = new DBObjectSearch($this->m_sRemoteClass);
|
||||
$oSet = new CMDBObjectSet($oFilter);
|
||||
$oBlock = new DisplayBlock($oFilter, 'search', false);
|
||||
$sHtml .= $oBlock->GetDisplay($oPage, "SearchFormToAdd_{$this->m_sAttCode}{$this->m_sNameSuffix}", array('open' => true));
|
||||
$sHtml .= "<form id=\"ObjectsAddForm_{$this->m_sAttCode}{$this->m_sNameSuffix}\" OnSubmit=\"return oWidget$iWidgetIndex.DoAddObjects(this.id);\">\n";
|
||||
$sHtml .= "<form id=\"ObjectsAddForm_{$this->m_sAttCode}{$this->m_sNameSuffix}\" OnSubmit=\"return oWidget{$this->m_iInputId}.DoAddObjects(this.id);\">\n";
|
||||
$sHtml .= "<div id=\"SearchResultsToAdd_{$this->m_sAttCode}{$this->m_sNameSuffix}\" style=\"vertical-align:top;background: #fff;height:100%;overflow:auto;padding:0;border:0;\">\n";
|
||||
$sHtml .= "<div style=\"background: #fff; border:0; text-align:center; vertical-align:middle;\"><p>".Dict::S('UI:Message:EmptyList:UseSearchForm')."</p></div>\n";
|
||||
$sHtml .= "</div>\n";
|
||||
@@ -358,10 +274,10 @@ EOF
|
||||
$sHtml .= "</div>\n";
|
||||
$sHtml .= "</form>\n";
|
||||
$sHtml .= "</div>\n";
|
||||
$oPage->add_ready_script("$('#dlg_{$this->m_sAttCode}{$this->m_sNameSuffix}').dialog({ width: $(window).width()*0.8, height: $(window).height()*0.8, autoOpen: false, modal: true, resizeStop: oWidget$iWidgetIndex.UpdateSizes });");
|
||||
$oPage->add_ready_script("$('#dlg_{$this->m_sAttCode}{$this->m_sNameSuffix}').dialog({ width: $(window).width()*0.8, height: $(window).height()*0.8, autoOpen: false, modal: true, resizeStop: oWidget{$this->m_iInputId}.UpdateSizes });");
|
||||
$oPage->add_ready_script("$('#dlg_{$this->m_sAttCode}{$this->m_sNameSuffix}').dialog('option', {title:'".addslashes(Dict::Format('UI:AddObjectsOf_Class_LinkedWith_Class', MetaModel::GetName($this->m_sLinkedClass), MetaModel::GetName($this->m_sClass)))."'});");
|
||||
$oPage->add_ready_script("$('#SearchFormToAdd_{$this->m_sAttCode}{$this->m_sNameSuffix} form').bind('submit.uilinksWizard', oWidget$iWidgetIndex.SearchObjectsToAdd);");
|
||||
$oPage->add_ready_script("$('#SearchFormToAdd_{$this->m_sAttCode}{$this->m_sNameSuffix}').resize(oWidget$iWidgetIndex.UpdateSizes);");
|
||||
$oPage->add_ready_script("$('#SearchFormToAdd_{$this->m_sAttCode}{$this->m_sNameSuffix} form').bind('submit.uilinksWizard', oWidget{$this->m_iInputId}.SearchObjectsToAdd);");
|
||||
$oPage->add_ready_script("$('#SearchFormToAdd_{$this->m_sAttCode}{$this->m_sNameSuffix}').resize(oWidget{$this->m_iInputId}.UpdateSizes);");
|
||||
return $sHtml;
|
||||
}
|
||||
|
||||
@@ -383,7 +299,7 @@ EOF
|
||||
// No remote class specified use the one defined in the linkedset
|
||||
$oFilter = new DBObjectSearch($this->m_sRemoteClass);
|
||||
}
|
||||
if (count($aAlreadyLinkedIds) > 0)
|
||||
if (!$this->m_bDuplicatesAllowed && count($aAlreadyLinkedIds) > 0)
|
||||
{
|
||||
// Positive IDs correspond to existing link records
|
||||
// negative IDs correspond to "remote" objects to be linked
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
require_once('../application/webpage.class.inc.php');
|
||||
require_once('../application/displayblock.class.inc.php');
|
||||
require_once(APPROOT.'/application/webpage.class.inc.php');
|
||||
require_once(APPROOT.'/application/displayblock.class.inc.php');
|
||||
|
||||
class UIPasswordWidget
|
||||
{
|
||||
@@ -52,17 +52,34 @@ class UIPasswordWidget
|
||||
{
|
||||
$sCode = $this->sAttCode.$this->sNameSuffix;
|
||||
$iWidgetIndex = self::$iWidgetIndex;
|
||||
$sPasswordValue = utils::ReadPostedParam("attr_$sCode", '*****');
|
||||
$sConfirmPasswordValue = utils::ReadPostedParam("attr_{$sCode}_confirmed", '*****');
|
||||
$sChangedValue = (($sPasswordValue != '*****') || ($sConfirmPasswordValue != '*****')) ? 1 : 0;
|
||||
$sHtmlValue = '';
|
||||
$sHtmlValue = '<input type="password" maxlength="255" name="attr_'.$sCode.'" id="'.$this->iId.'" value="*****"/> <span id="v_'.$this->iId.'"></span><br/>';
|
||||
$sHtmlValue .= '<input type="password" maxlength="255" id="'.$this->iId.'_confirm" value="*****"/> '.Dict::S('UI:PasswordConfirm').' <input type="button" value="'.Dict::S('UI:Button:ResetPassword').'" onClick="ResetPwd(\''.$this->iId.'\');">';
|
||||
$sHtmlValue .= '<input type="hidden" id="'.$this->iId.'_changed" name="attr_'.$sCode.'_changed" value="0"/>';
|
||||
$sHtmlValue = '<input type="password" maxlength="255" name="attr_'.$sCode.'" id="'.$this->iId.'" value="'.htmlentities($sPasswordValue, ENT_QUOTES, 'UTF-8').'"/> <span class="form_validation" id="v_'.$this->iId.'"></span><br/>';
|
||||
$sHtmlValue .= '<input type="password" maxlength="255" id="'.$this->iId.'_confirm" value="'.htmlentities($sConfirmPasswordValue, ENT_QUOTES, 'UTF-8').'" name="attr_'.$sCode.'_confirmed"/> '.Dict::S('UI:PasswordConfirm').' <input id="'.$this->iId.'_reset" type="button" value="'.Dict::S('UI:Button:ResetPassword').'" onClick="ResetPwd(\''.$this->iId.'\');">';
|
||||
$sHtmlValue .= '<input type="hidden" id="'.$this->iId.'_changed" name="attr_'.$sCode.'_changed" value="'.$sChangedValue.'"/>';
|
||||
|
||||
$oPage->add_ready_script("$('#$this->iId').bind('keyup change', function(evt) { return PasswordFieldChanged('$this->iId') } );"); // Bind to a custom event: validate
|
||||
$oPage->add_ready_script("$('#$this->iId').bind('keyup change', function(evt) { return PasswordFieldChanged('$this->iId') } );"); // Bind to a custom event: validate
|
||||
$oPage->add_ready_script("$('#$this->iId').bind('keyup change validate', function(evt, sFormId) { return ValidatePasswordField('$this->iId', sFormId) } );"); // Bind to a custom event: validate
|
||||
$oPage->add_ready_script("$('#{$this->iId}_confirm').bind('keyup change', function(evt, sFormId) { return ValidatePasswordField('$this->iId', sFormId) } );"); // Bind to a custom event: validate
|
||||
|
||||
$oPage->add_ready_script("$('#{$this->iId}').bind('update', function(evt, sFormId)
|
||||
{
|
||||
if ($(this).attr('disabled'))
|
||||
{
|
||||
$('#{$this->iId}_confirm').attr('disabled', 'disabled');
|
||||
$('#{$this->iId}_changed').attr('disabled', 'disabled');
|
||||
$('#{$this->iId}_reset').attr('disabled', 'disabled');
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#{$this->iId}_confirm').removeAttr('disabled');
|
||||
$('#{$this->iId}_changed').removeAttr('disabled');
|
||||
$('#{$this->iId}_reset').removeAttr('disabled');
|
||||
}
|
||||
}
|
||||
);"); // Bind to a custom event: update to handle enabling/disabling
|
||||
return $sHtmlValue;
|
||||
}
|
||||
}
|
||||
?>
|
||||
?>
|
||||
|
||||
@@ -132,7 +132,7 @@ class UILinksWizard
|
||||
function AddObjects()
|
||||
{
|
||||
// TO DO: compute the list of objects already linked with the current Object
|
||||
$.post( 'ajax.render.php', { 'operation': 'addObjects',
|
||||
$.post( '../pages/ajax.render.php', { 'operation': 'addObjects',
|
||||
'class': '{$this->m_sClass}',
|
||||
'linkageAttr': '{$this->m_sLinkageAttr}',
|
||||
'linkedClass': '{$this->m_sLinkedClass}',
|
||||
@@ -175,7 +175,7 @@ class UILinksWizard
|
||||
theMap['operation'] = 'searchObjectsToAdd';
|
||||
|
||||
// Run the query and display the results
|
||||
$.post( 'ajax.render.php', theMap,
|
||||
$.post( '../pages/ajax.render.php', theMap,
|
||||
function(data)
|
||||
{
|
||||
$('#SearchResultsToAdd').html(data);
|
||||
@@ -223,7 +223,7 @@ class UILinksWizard
|
||||
theMap['operation'] = 'doAddObjects';
|
||||
|
||||
// Run the query and display the results
|
||||
$.post( 'ajax.render.php', theMap,
|
||||
$.post( '../pages/ajax.render.php', theMap,
|
||||
function(data)
|
||||
{
|
||||
//console.log('Data: ' + data);
|
||||
|
||||
@@ -227,7 +227,7 @@ $sJSHandlerCode
|
||||
|
||||
// Now use the dependencies between the fields to order them
|
||||
// Start from the order of the 'details'
|
||||
$aList = MetaModel::GetZListItems($this->m_sClass, 'details');
|
||||
$aList = MetaModel::FlattenZlist(MetaModel::GetZListItems($this->m_sClass, 'details'));
|
||||
$index = 0;
|
||||
$aOrder = array();
|
||||
foreach($aFields as $sAttCode => $void)
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
require_once('../core/dbobject.class.php');
|
||||
require_once('../core/userrights.class.inc.php');
|
||||
require_once(APPROOT.'/core/dbobject.class.php');
|
||||
require_once(APPROOT.'/core/userrights.class.inc.php');
|
||||
|
||||
/**
|
||||
* This class is used to store, in a persistent manner, user related settings (preferences)
|
||||
@@ -169,9 +169,9 @@ class appUserPreferences extends DBObject
|
||||
* Overloading this function here to secure a fix done right before the release
|
||||
* The real fix should be to implement this verb in DBObject
|
||||
*/
|
||||
public function DBDeleteTracked(CMDBChange $oChange, $bSkipStrongSecurity = null)
|
||||
public function DBDeleteTracked(CMDBChange $oChange, $bSkipStrongSecurity = null, &$oDeletionPlan = null)
|
||||
{
|
||||
$this->DBDelete();
|
||||
$this->DBDelete($oDeletionPlan);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -23,10 +23,10 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
require_once('../core/config.class.inc.php');
|
||||
require_once('../application/transaction.class.inc.php');
|
||||
require_once(APPROOT.'/core/config.class.inc.php');
|
||||
require_once(APPROOT.'/application/transaction.class.inc.php');
|
||||
|
||||
define('ITOP_CONFIG_FILE', '../config-itop.php');
|
||||
define('ITOP_CONFIG_FILE', APPROOT.'/config-itop.php');
|
||||
|
||||
class FileUploadException extends Exception
|
||||
{
|
||||
@@ -42,11 +42,66 @@ class utils
|
||||
private static $m_sConfigFile = ITOP_CONFIG_FILE;
|
||||
private static $m_oConfig = null;
|
||||
|
||||
// Parameters loaded from a file, parameters of the page/command line still have precedence
|
||||
private static $m_aParamsFromFile = null;
|
||||
|
||||
protected static function LoadParamFile($sParamFile)
|
||||
{
|
||||
if (!file_exists($sParamFile))
|
||||
{
|
||||
throw new Exception("Could not find the parameter file: '$sParamFile'");
|
||||
}
|
||||
if (!is_readable($sParamFile))
|
||||
{
|
||||
throw new Exception("Could not load parameter file: '$sParamFile'");
|
||||
}
|
||||
$sParams = file_get_contents($sParamFile);
|
||||
|
||||
if (is_null(self::$m_aParamsFromFile))
|
||||
{
|
||||
self::$m_aParamsFromFile = array();
|
||||
}
|
||||
|
||||
$aParamLines = explode("\n", $sParams);
|
||||
foreach ($aParamLines as $sLine)
|
||||
{
|
||||
$sLine = trim($sLine);
|
||||
|
||||
// Ignore the line after a '#'
|
||||
if (($iCommentPos = strpos($sLine, '#')) !== false)
|
||||
{
|
||||
$sLine = substr($sLine, 0, $iCommentPos);
|
||||
$sLine = trim($sLine);
|
||||
}
|
||||
|
||||
// Note: the line is supposed to be already trimmed
|
||||
if (preg_match('/^(\S*)\s*=(.*)$/', $sLine, $aMatches))
|
||||
{
|
||||
$sParam = $aMatches[1];
|
||||
$value = trim($aMatches[2]);
|
||||
self::$m_aParamsFromFile[$sParam] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function UseParamFile($sParamFileArgName = 'param_file', $bAllowCLI = true)
|
||||
{
|
||||
$sFileSpec = self::ReadParam($sParamFileArgName, '', $bAllowCLI);
|
||||
foreach(explode(',', $sFileSpec) as $sFile)
|
||||
{
|
||||
$sFile = trim($sFile);
|
||||
if (!empty($sFile))
|
||||
{
|
||||
self::LoadParamFile($sFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function IsModeCLI()
|
||||
{
|
||||
global $argv;
|
||||
if (isset($argv))
|
||||
$sSAPIName = php_sapi_name();
|
||||
$sCleanName = strtolower(trim($sSAPIName));
|
||||
if ($sCleanName == 'cli')
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@@ -61,6 +116,15 @@ class utils
|
||||
{
|
||||
global $argv;
|
||||
$retValue = $defaultValue;
|
||||
|
||||
if (!is_null(self::$m_aParamsFromFile))
|
||||
{
|
||||
if (isset(self::$m_aParamsFromFile[$sName]))
|
||||
{
|
||||
$retValue = self::$m_aParamsFromFile[$sName];
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_REQUEST[$sName]))
|
||||
{
|
||||
$retValue = $_REQUEST[$sName];
|
||||
@@ -157,9 +221,14 @@ class utils
|
||||
return privUITransaction::GetNewTransactionId();
|
||||
}
|
||||
|
||||
public static function IsTransactionValid($sId)
|
||||
public static function IsTransactionValid($sId, $bRemoveTransaction = true)
|
||||
{
|
||||
return privUITransaction::IsTransactionValid($sId);
|
||||
return privUITransaction::IsTransactionValid($sId, $bRemoveTransaction);
|
||||
}
|
||||
|
||||
public static function RemoveTransaction($sId)
|
||||
{
|
||||
return privUITransaction::RemoveTransaction($sId);
|
||||
}
|
||||
|
||||
public static function ReadFromFile($sFileName)
|
||||
@@ -168,28 +237,6 @@ class utils
|
||||
return file_get_contents($sFileName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Specify the application config file
|
||||
* @param string path to the config file
|
||||
* @return void
|
||||
*/
|
||||
public static function SpecifyConfigFile($sFilePath)
|
||||
{
|
||||
self::$m_sConfigFile = $sFilePath;
|
||||
}
|
||||
/**
|
||||
* Get access to the application config file
|
||||
* @param none
|
||||
* @return Config The Config object initialized from the application config file
|
||||
*/
|
||||
public static function GetConfig()
|
||||
{
|
||||
if (self::$m_oConfig == null)
|
||||
{
|
||||
self::$m_oConfig = new Config(self::$m_sConfigFile);
|
||||
}
|
||||
return self::$m_oConfig;
|
||||
}
|
||||
/**
|
||||
* Helper function to convert a value expressed in a 'user friendly format'
|
||||
* as in php.ini, e.g. 256k, 2M, 1G etc. Into a number of bytes
|
||||
@@ -226,8 +273,8 @@ class utils
|
||||
static public function GetAbsoluteUrl($bQueryString = true, $bForceHTTPS = false)
|
||||
{
|
||||
// Build an absolute URL to this page on this server/port
|
||||
$sServerName = $_SERVER['SERVER_NAME'];
|
||||
if (self::GetConfig()->GetSecureConnectionRequired() || self::GetConfig()->GetHttpsHyperlinks())
|
||||
$sServerName = isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : '';
|
||||
if (MetaModel::GetConfig()->GetSecureConnectionRequired() || MetaModel::GetConfig()->GetHttpsHyperlinks())
|
||||
{
|
||||
// If a secure connection is required, or if the URL is requested to start with HTTPS
|
||||
// then any URL must start with https !
|
||||
@@ -240,14 +287,15 @@ class utils
|
||||
}
|
||||
else
|
||||
{
|
||||
$sProtocol = isset($_SERVER['HTTPS']) ? 'https' : 'http';
|
||||
$sProtocol = (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS']!="off")) ? 'https' : 'http';
|
||||
$iPort = isset($_SERVER['SERVER_PORT']) ? $_SERVER['SERVER_PORT'] : 80;
|
||||
if ($sProtocol == 'http')
|
||||
{
|
||||
$sPort = ($_SERVER['SERVER_PORT'] == 80) ? '' : ':'.$_SERVER['SERVER_PORT'];
|
||||
$sPort = ($iPort == 80) ? '' : ':'.$iPort;
|
||||
}
|
||||
else
|
||||
{
|
||||
$sPort = ($_SERVER['SERVER_PORT'] == 443) ? '' : ':'.$_SERVER['SERVER_PORT'];
|
||||
$sPort = ($iPort == 443) ? '' : ':'.$iPort;
|
||||
}
|
||||
}
|
||||
// $_SERVER['REQUEST_URI'] is empty when running on IIS
|
||||
@@ -297,14 +345,17 @@ class utils
|
||||
* @param $bForceHTTPS bool True to force HTTPS, false otherwise
|
||||
* @return string The absolute URL to the server's root, without the first slash
|
||||
*/
|
||||
static public function GetAbsoluteUrlRoot($bForceHTTPS = false)
|
||||
static public function GetAbsoluteUrlAppRoot($sCurrentRelativePath = '', $bForceHTTPS = false)
|
||||
{
|
||||
$sAbsoluteUrl = self::GetAbsoluteUrl(false, $bForceHTTPS); // False => Don't get the query string
|
||||
$sServerPos = 3 + strpos($sAbsoluteUrl, '://');
|
||||
$iFirstSlashPos = strpos($sAbsoluteUrl, '/', $sServerPos);
|
||||
if ($iFirstSlashPos !== false)
|
||||
$sAppRootPos = strpos($sAbsoluteUrl, $sCurrentRelativePath);
|
||||
if ($sAppRootPos !== false)
|
||||
{
|
||||
$sAbsoluteUrl = substr($sAbsoluteUrl, 0, $iFirstSlashPos); // remove the current page, keep just the path, without the first /
|
||||
$sAbsoluteUrl = substr($sAbsoluteUrl, 0, $sAppRootPos); // remove the current page and path
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("Failed to determine application root path $sAbsoluteUrl ($sCurrentRelativePath)");
|
||||
}
|
||||
return $sAbsoluteUrl;
|
||||
}
|
||||
|
||||
@@ -45,6 +45,8 @@ class WebPage
|
||||
protected $a_include_stylesheets;
|
||||
protected $a_headers;
|
||||
protected $a_base;
|
||||
protected $iNextId;
|
||||
protected $iTransactionId;
|
||||
|
||||
public function __construct($s_title)
|
||||
{
|
||||
@@ -57,6 +59,8 @@ class WebPage
|
||||
$this->a_linked_stylesheets = array();
|
||||
$this->a_headers = array();
|
||||
$this->a_base = array( 'href' => '', 'target' => '');
|
||||
$this->iNextId = 0;
|
||||
$this->iTransactionId = 0;
|
||||
ob_start(); // Start capturing the output
|
||||
}
|
||||
|
||||
@@ -103,6 +107,14 @@ class WebPage
|
||||
$this->add($this->GetP($s_html));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a pre-formatted text to the body of the page
|
||||
*/
|
||||
public function pre($s_html)
|
||||
{
|
||||
$this->add('<pre>'.$s_html.'</pre>');
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a paragraph to the body of the page
|
||||
*/
|
||||
@@ -192,7 +204,7 @@ class WebPage
|
||||
*/
|
||||
public function add_linked_script($s_linked_script)
|
||||
{
|
||||
$this->a_linked_scripts[] = $s_linked_script;
|
||||
$this->a_linked_scripts[$s_linked_script] = $s_linked_script;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -234,7 +246,7 @@ class WebPage
|
||||
*/
|
||||
public function GetDetails($aFields)
|
||||
{
|
||||
$sHtml = "<table>\n";
|
||||
$sHtml = "<table class=\"details\">\n";
|
||||
$sHtml .= "<tbody>\n";
|
||||
foreach($aFields as $aAttrib)
|
||||
{
|
||||
@@ -248,6 +260,9 @@ class WebPage
|
||||
{
|
||||
$sHtml .= "<td class=\"label\">".$aAttrib['label']."</td><td>".$aAttrib['value']."</td>\n";
|
||||
}
|
||||
$sComment = (isset($aAttrib['comments'])) ? $aAttrib['comments'] : ' ';
|
||||
$sInfo = (isset($aAttrib['infos'])) ? $aAttrib['infos'] : ' ';
|
||||
$sHtml .= "<td>$sComment</td><td>$sInfo</td>\n";
|
||||
$sHtml .= "</tr>\n";
|
||||
}
|
||||
$sHtml .= "</tbody>\n";
|
||||
@@ -269,11 +284,21 @@ class WebPage
|
||||
echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n";
|
||||
echo "<html>\n";
|
||||
echo "<head>\n";
|
||||
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n";
|
||||
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n";
|
||||
echo "<title>{$this->s_title}</title>\n";
|
||||
echo $this->get_base_tag();
|
||||
foreach($this->a_linked_scripts as $s_script)
|
||||
{
|
||||
// Make sure that the URL to the script contains the application's version number
|
||||
// so that the new script do NOT get reloaded from the cache when the application is upgraded
|
||||
if (strpos('?', $s_script) === false)
|
||||
{
|
||||
$s_script .= "?version=".ITOP_VERSION;
|
||||
}
|
||||
else
|
||||
{
|
||||
$s_script .= "&version=".ITOP_VERSION;
|
||||
}
|
||||
echo "<script type=\"text/javascript\" src=\"$s_script\"></script>\n";
|
||||
}
|
||||
if (count($this->a_scripts)>0)
|
||||
@@ -314,7 +339,7 @@ class WebPage
|
||||
{
|
||||
echo "<div class=\"raw_output\">$s_captured_output</div>\n";
|
||||
}
|
||||
echo $this->s_deferred_content;
|
||||
echo '<div id="at_the_end">'.$this->s_deferred_content.'</div>';
|
||||
echo "</body>\n";
|
||||
echo "</html>\n";
|
||||
}
|
||||
@@ -350,5 +375,33 @@ class WebPage
|
||||
}
|
||||
return $sTag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an ID (for any kind of HTML tag) that is guaranteed unique in this page
|
||||
* @return int The unique ID (in this page)
|
||||
*/
|
||||
public function GetUniqueId()
|
||||
{
|
||||
return $this->iNextId++;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the transactionId of the current form
|
||||
* @param $iTransactionId integer
|
||||
* @return void
|
||||
*/
|
||||
public function SetTransactionId($iTransactionId)
|
||||
{
|
||||
$this->iTransactionId = $iTransactionId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the transactionId of the current form
|
||||
* @return integer The current transactionID
|
||||
*/
|
||||
public function GetTransactionId()
|
||||
{
|
||||
return $this->iTransactionId;
|
||||
}
|
||||
}
|
||||
?>
|
||||
?>
|
||||
@@ -23,7 +23,7 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
require_once('../application/uiwizard.class.inc.php');
|
||||
require_once(APPROOT.'/application/uiwizard.class.inc.php');
|
||||
|
||||
class WizardHelper
|
||||
{
|
||||
@@ -50,8 +50,8 @@ class WizardHelper
|
||||
foreach($this->m_aData['m_oCurrentValues'] as $sAttCode => $value)
|
||||
{
|
||||
// Because this is stored in a Javascript array, unused indexes
|
||||
// are filled with null values
|
||||
if ( ($sAttCode !='id') && ($sAttCode !== false) && ($value !== null))
|
||||
// are filled with null values and unused keys (stored as strings) contain $$NULL$$
|
||||
if ( ($sAttCode !='id') && ($sAttCode !== false) && ($value !== null) && ($value !== '$$NULL$$'))
|
||||
{
|
||||
$oAttDef = MetaModel::GetAttributeDef($this->m_aData['m_sClass'], $sAttCode);
|
||||
if (($oAttDef->IsLinkSet()) && ($value != '') )
|
||||
@@ -121,6 +121,11 @@ class WizardHelper
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isset($this->m_aData['m_sState']) && !empty($this->m_aData['m_sState']))
|
||||
{
|
||||
$oObj->Set(MetaModel::GetStateAttributeCode($this->m_aData['m_sClass']), $this->m_aData['m_sState']);
|
||||
}
|
||||
|
||||
return $oObj;
|
||||
}
|
||||
|
||||
@@ -227,6 +232,11 @@ class WizardHelper
|
||||
return $this->m_aData['m_sClass'];
|
||||
}
|
||||
|
||||
public function GetFormPrefix()
|
||||
{
|
||||
return $this->m_aData['m_sFormPrefix'];
|
||||
}
|
||||
|
||||
public function GetIdForField($sFieldName)
|
||||
{
|
||||
$sResult = '';
|
||||
|
||||
@@ -23,30 +23,70 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
require_once("../application/webpage.class.inc.php");
|
||||
require_once(APPROOT."/application/webpage.class.inc.php");
|
||||
/**
|
||||
* Simple web page with no includes or fancy formatting, useful to generateXML documents
|
||||
* The page adds the content-type text/XML and the encoding into the headers
|
||||
*/
|
||||
class XMLPage extends WebPage
|
||||
{
|
||||
function __construct($s_title)
|
||||
/**
|
||||
* For big XML files, it's better NOT to store everything in memory and output the XML piece by piece
|
||||
*/
|
||||
var $m_bPassThrough;
|
||||
var $m_bHeaderSent;
|
||||
|
||||
function __construct($s_title, $bPassThrough = false)
|
||||
{
|
||||
parent::__construct($s_title);
|
||||
$this->add_header("Content-type: text/xml; charset=utf-8");
|
||||
$this->m_bPassThrough = $bPassThrough;
|
||||
$this->m_bHeaderSent = false;
|
||||
$this->add_header("Content-type: text/xml; charset=utf-8");
|
||||
$this->add_header("Cache-control: no-cache");
|
||||
$this->add_header("Content-location: export.xml");
|
||||
$this->add("<?xml version=\"1.0\" encoding=\"UTF-8\"?".">\n");
|
||||
}
|
||||
|
||||
public function output()
|
||||
{
|
||||
$this->add_header("Content-Length: ".strlen(trim($this->s_content)));
|
||||
foreach($this->a_headers as $s_header)
|
||||
{
|
||||
header($s_header);
|
||||
}
|
||||
echo trim($this->s_content);
|
||||
if (!$this->m_bPassThrough)
|
||||
{
|
||||
$this->add("<?xml version=\"1.0\" encoding=\"UTF-8\"?".">\n");
|
||||
$this->add_header("Content-Length: ".strlen(trim($this->s_content)));
|
||||
foreach($this->a_headers as $s_header)
|
||||
{
|
||||
header($s_header);
|
||||
}
|
||||
echo trim($this->s_content);
|
||||
}
|
||||
}
|
||||
|
||||
public function add($sText)
|
||||
{
|
||||
if (!$this->m_bPassThrough)
|
||||
{
|
||||
parent::add($sText);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($this->m_bHeaderSent)
|
||||
{
|
||||
echo $sText;
|
||||
}
|
||||
else
|
||||
{
|
||||
$s_captured_output = ob_get_contents();
|
||||
ob_end_clean();
|
||||
foreach($this->a_headers as $s_header)
|
||||
{
|
||||
header($s_header);
|
||||
}
|
||||
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?".">\n";
|
||||
echo trim($s_captured_output);
|
||||
echo trim($this->s_content);
|
||||
echo $sText;
|
||||
$this->m_bHeaderSent = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function small_p($sText)
|
||||
|
||||
11
approot.inc.php
Normal file
11
approot.inc.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
define('APPROOT', dirname(__FILE__).'/');
|
||||
if (function_exists('microtime'))
|
||||
{
|
||||
$fItopStarted = microtime(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
$fItopStarted = 1000 * time();
|
||||
}
|
||||
?>
|
||||
@@ -443,9 +443,9 @@ class Str
|
||||
public static function pure2html($pure, $maxLength = false)
|
||||
{
|
||||
// Check for HTML entities, but be careful the DB is in UTF-8
|
||||
return $maxLength
|
||||
? htmlentities(substr($pure, 0, $maxLength), ENT_COMPAT, 'UTF-8')
|
||||
: htmlentities($pure, ENT_COMPAT, 'UTF-8');
|
||||
return $maxLength
|
||||
? htmlentities(substr($pure, 0, $maxLength), ENT_QUOTES, 'UTF-8')
|
||||
: htmlentities($pure, ENT_QUOTES, 'UTF-8');
|
||||
}
|
||||
public static function pure2sql($pure, $maxLength = false)
|
||||
{
|
||||
@@ -488,7 +488,7 @@ class Str
|
||||
*/
|
||||
protected static function xmlencode($string)
|
||||
{
|
||||
return self::xmlentities(iconv("ISO-8859-1", "UTF-8//IGNORE",$string));
|
||||
return self::xmlentities(iconv("UTF-8", "UTF-8//IGNORE",$string));
|
||||
}
|
||||
|
||||
public static function islowcase($sString)
|
||||
|
||||
@@ -24,7 +24,8 @@
|
||||
*/
|
||||
|
||||
|
||||
require_once('../core/email.class.inc.php');
|
||||
require_once(APPROOT.'/core/asynctask.class.inc.php');
|
||||
require_once(APPROOT.'/core/email.class.inc.php');
|
||||
|
||||
/**
|
||||
* A user defined action, to customize the application
|
||||
@@ -134,7 +135,7 @@ class ActionEmail extends ActionNotification
|
||||
{
|
||||
$aParams = array
|
||||
(
|
||||
"category" => "core/cmdb",
|
||||
"category" => "core/cmdb,bizmodel",
|
||||
"key_type" => "autoincrement",
|
||||
"name_attcode" => "name",
|
||||
"state_attcode" => "",
|
||||
@@ -162,7 +163,7 @@ class ActionEmail extends ActionNotification
|
||||
MetaModel::Init_SetZListItems('details', array('name', 'description', 'status', 'test_recipient', 'from', 'reply_to', 'to', 'cc', 'bcc', 'subject', 'body', 'importance', 'trigger_list')); // Attributes to be displayed for the complete details
|
||||
MetaModel::Init_SetZListItems('list', array('name', 'status', 'to', 'subject')); // Attributes to be displayed for a list
|
||||
// Search criteria
|
||||
// MetaModel::Init_SetZListItems('standard_search', array('name')); // Criteria of the std search form
|
||||
MetaModel::Init_SetZListItems('standard_search', array('name','description', 'status', 'subject')); // Criteria of the std search form
|
||||
// MetaModel::Init_SetZListItems('advanced_search', array('name')); // Criteria of the advanced search form
|
||||
}
|
||||
|
||||
@@ -219,113 +220,82 @@ class ActionEmail extends ActionNotification
|
||||
|
||||
public function DoExecute($oTrigger, $aContextArgs)
|
||||
{
|
||||
$this->m_iRecipients = 0;
|
||||
$this->m_aMailErrors = array();
|
||||
$bRes = false; // until we do succeed in sending the email
|
||||
try
|
||||
{
|
||||
// Determine recicipients
|
||||
//
|
||||
$sTo = $this->FindRecipients('to', $aContextArgs);
|
||||
$sCC = $this->FindRecipients('cc', $aContextArgs);
|
||||
$sBCC = $this->FindRecipients('bcc', $aContextArgs);
|
||||
|
||||
$sFrom = $this->Get('from');
|
||||
$sReplyTo = $this->Get('reply_to');
|
||||
|
||||
$sSubject = MetaModel::ApplyParams($this->Get('subject'), $aContextArgs);
|
||||
$sBody = MetaModel::ApplyParams($this->Get('body'), $aContextArgs);
|
||||
|
||||
$oEmail = new EMail();
|
||||
|
||||
if ($this->IsBeingTested())
|
||||
{
|
||||
$oEmail->SetSubject('TEST['.$sSubject.']');
|
||||
$sTestBody = $sBody;
|
||||
$sTestBody .= "<div style=\"border: dashed;\">\n";
|
||||
$sTestBody .= "<h1>Testing email notification ".$this->GetHyperlink()."</h1>\n";
|
||||
$sTestBody .= "<p>The email should be sent with the following properties\n";
|
||||
$sTestBody .= "<ul>\n";
|
||||
$sTestBody .= "<li>TO: $sTo</li>\n";
|
||||
$sTestBody .= "<li>CC: $sCC</li>\n";
|
||||
$sTestBody .= "<li>BCC: $sBCC</li>\n";
|
||||
$sTestBody .= "<li>From: $sFrom</li>\n";
|
||||
$sTestBody .= "<li>Reply-To: $sReplyTo</li>\n";
|
||||
$sTestBody .= "</ul>\n";
|
||||
$sTestBody .= "</p>\n";
|
||||
$sTestBody .= "</div>\n";
|
||||
$oEmail->SetBody($sTestBody);
|
||||
$oEmail->SetRecipientTO($this->Get('test_recipient'));
|
||||
$oEmail->SetRecipientFrom($this->Get('test_recipient'));
|
||||
}
|
||||
else
|
||||
{
|
||||
$oEmail->SetSubject($sSubject);
|
||||
$oEmail->SetBody($sBody);
|
||||
$oEmail->SetRecipientTO($sTo);
|
||||
$oEmail->SetRecipientCC($sCC);
|
||||
$oEmail->SetRecipientBCC($sBCC);
|
||||
$oEmail->SetRecipientFrom($sFrom);
|
||||
$oEmail->SetRecipientReplyTo($sReplyTo);
|
||||
}
|
||||
|
||||
if (empty($this->m_aMailErrors))
|
||||
{
|
||||
if ($this->m_iRecipients == 0)
|
||||
{
|
||||
$this->m_aMailErrors[] = 'No recipient';
|
||||
}
|
||||
else
|
||||
{
|
||||
$oKPI = new ExecutionKPI();
|
||||
$this->m_aMailErrors = array_merge($this->m_aMailErrors, $oEmail->Send());
|
||||
$oKPI->ComputeStats('Send mail', $sTo);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
$this->m_aMailErrors[] = $e->getMessage();
|
||||
}
|
||||
|
||||
if (MetaModel::IsLogEnabledNotification())
|
||||
{
|
||||
$oLog = new EventNotificationEmail();
|
||||
if (empty($this->m_aMailErrors))
|
||||
if ($this->IsBeingTested())
|
||||
{
|
||||
if ($this->IsBeingTested())
|
||||
{
|
||||
$oLog->Set('message', 'TEST - Notification sent ('.$this->Get('test_recipient').')');
|
||||
}
|
||||
else
|
||||
{
|
||||
$oLog->Set('message', 'Notification sent');
|
||||
}
|
||||
$oLog->Set('message', 'TEST - Notification sent ('.$this->Get('test_recipient').')');
|
||||
}
|
||||
else
|
||||
{
|
||||
if (is_array($this->m_aMailErrors) && count($this->m_aMailErrors) > 0)
|
||||
{
|
||||
$sError = implode(', ', $this->m_aMailErrors);
|
||||
}
|
||||
else
|
||||
{
|
||||
$sError = 'Unknown reason';
|
||||
}
|
||||
if ($this->IsBeingTested())
|
||||
{
|
||||
$oLog->Set('message', 'TEST - Notification was not sent: '.$sError);
|
||||
}
|
||||
else
|
||||
{
|
||||
$oLog->Set('message', 'Notification was not sent: '.$sError);
|
||||
}
|
||||
$oLog->Set('message', 'Notification pending');
|
||||
}
|
||||
$oLog->Set('userinfo', UserRights::GetUser());
|
||||
$oLog->Set('trigger_id', $oTrigger->GetKey());
|
||||
$oLog->Set('action_id', $this->GetKey());
|
||||
$oLog->Set('object_id', $aContextArgs['this->object()']->GetKey());
|
||||
// Must be inserted now so that it gets a valid id that will make the link
|
||||
// between an eventual asynchronous task (queued) and the log
|
||||
$oLog->DBInsertNoReload();
|
||||
}
|
||||
else
|
||||
{
|
||||
$oLog = null;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
$sRes = $this->_DoExecute($oTrigger, $aContextArgs, $oLog);
|
||||
|
||||
if ($this->IsBeingTested())
|
||||
{
|
||||
$sPrefix = 'TEST ('.$this->Get('test_recipient').') - ';
|
||||
}
|
||||
else
|
||||
{
|
||||
$sPrefix = '';
|
||||
}
|
||||
$oLog->Set('message', $sPrefix.$sRes);
|
||||
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
if ($oLog)
|
||||
{
|
||||
$oLog->Set('message', 'Error: '.$e->getMessage());
|
||||
}
|
||||
}
|
||||
if ($oLog)
|
||||
{
|
||||
$oLog->DBUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
protected function _DoExecute($oTrigger, $aContextArgs, &$oLog)
|
||||
{
|
||||
$this->m_iRecipients = 0;
|
||||
$this->m_aMailErrors = array();
|
||||
$bRes = false; // until we do succeed in sending the email
|
||||
|
||||
// Determine recicipients
|
||||
//
|
||||
$sTo = $this->FindRecipients('to', $aContextArgs);
|
||||
$sCC = $this->FindRecipients('cc', $aContextArgs);
|
||||
$sBCC = $this->FindRecipients('bcc', $aContextArgs);
|
||||
|
||||
$sFrom = $this->Get('from');
|
||||
$sReplyTo = $this->Get('reply_to');
|
||||
|
||||
$sSubject = MetaModel::ApplyParams($this->Get('subject'), $aContextArgs);
|
||||
$sBody = MetaModel::ApplyParams($this->Get('body'), $aContextArgs);
|
||||
|
||||
$oObj = $aContextArgs['this->object()'];
|
||||
$sServerIP = $_SERVER['SERVER_ADDR']; //gethostbyname(gethostname());
|
||||
$sReference = '<iTop/'.get_class($oObj).'/'.$oObj->GetKey().'@'.$sServerIP.'>';
|
||||
|
||||
if (!is_null($oLog))
|
||||
{
|
||||
// Note: we have to secure this because those values are calculated
|
||||
// inside the try statement, and we would like to keep track of as
|
||||
// many data as we could while some variables may still be undefined
|
||||
@@ -335,8 +305,78 @@ class ActionEmail extends ActionNotification
|
||||
if (isset($sFrom)) $oLog->Set('from', $sFrom);
|
||||
if (isset($sSubject)) $oLog->Set('subject', $sSubject);
|
||||
if (isset($sBody)) $oLog->Set('body', $sBody);
|
||||
$oLog->DBInsertNoReload();
|
||||
}
|
||||
|
||||
$oEmail = new EMail();
|
||||
|
||||
if ($this->IsBeingTested())
|
||||
{
|
||||
$oEmail->SetSubject('TEST['.$sSubject.']');
|
||||
$sTestBody = $sBody;
|
||||
$sTestBody .= "<div style=\"border: dashed;\">\n";
|
||||
$sTestBody .= "<h1>Testing email notification ".$this->GetHyperlink()."</h1>\n";
|
||||
$sTestBody .= "<p>The email should be sent with the following properties\n";
|
||||
$sTestBody .= "<ul>\n";
|
||||
$sTestBody .= "<li>TO: $sTo</li>\n";
|
||||
$sTestBody .= "<li>CC: $sCC</li>\n";
|
||||
$sTestBody .= "<li>BCC: $sBCC</li>\n";
|
||||
$sTestBody .= "<li>From: $sFrom</li>\n";
|
||||
$sTestBody .= "<li>Reply-To: $sReplyTo</li>\n";
|
||||
$sTestBody .= "<li>References: $sReference</li>\n";
|
||||
$sTestBody .= "</ul>\n";
|
||||
$sTestBody .= "</p>\n";
|
||||
$sTestBody .= "</div>\n";
|
||||
$oEmail->SetBody($sTestBody);
|
||||
$oEmail->SetRecipientTO($this->Get('test_recipient'));
|
||||
$oEmail->SetRecipientFrom($this->Get('test_recipient'));
|
||||
$oEmail->SetReferences($sReference);
|
||||
}
|
||||
else
|
||||
{
|
||||
$oEmail->SetSubject($sSubject);
|
||||
$oEmail->SetBody($sBody);
|
||||
$oEmail->SetRecipientTO($sTo);
|
||||
$oEmail->SetRecipientCC($sCC);
|
||||
$oEmail->SetRecipientBCC($sBCC);
|
||||
$oEmail->SetRecipientFrom($sFrom);
|
||||
$oEmail->SetRecipientReplyTo($sReplyTo);
|
||||
$oEmail->SetReferences($sReference);
|
||||
}
|
||||
|
||||
if (empty($this->m_aMailErrors))
|
||||
{
|
||||
if ($this->m_iRecipients == 0)
|
||||
{
|
||||
return 'No recipient';
|
||||
}
|
||||
else
|
||||
{
|
||||
$iRes = $oEmail->Send($aErrors, false, $oLog); // allow asynchronous mode
|
||||
switch ($iRes)
|
||||
{
|
||||
case EMAIL_SEND_OK:
|
||||
return "Sent";
|
||||
|
||||
case EMAIL_SEND_PENDING:
|
||||
return "Pending";
|
||||
|
||||
case EMAIL_SEND_ERROR:
|
||||
return "Errors: ".implode(', ', $aErrors);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (is_array($this->m_aMailErrors) && count($this->m_aMailErrors) > 0)
|
||||
{
|
||||
$sError = implode(', ', $this->m_aMailErrors);
|
||||
}
|
||||
else
|
||||
{
|
||||
$sError = 'Unknown reason';
|
||||
}
|
||||
return 'Notification was not sent: '.$sError;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
?>
|
||||
@@ -142,7 +142,7 @@ class iTopArchive
|
||||
|
||||
public function WriteCatalog()
|
||||
{
|
||||
$sXml = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?".">\n"; // split the XML closing tag that disturbs PSPad's syntax coloring
|
||||
$sXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?".">\n"; // split the XML closing tag that disturbs PSPad's syntax coloring
|
||||
$sXml .= "<archive version=\"1.0\">\n";
|
||||
$sXml .= "<title>{$this->m_sTitle}</title>\n";
|
||||
$sXml .= "<description>{$this->m_sDescription}</description>\n";
|
||||
|
||||
192
core/asynctask.class.inc.php
Normal file
192
core/asynctask.class.inc.php
Normal file
@@ -0,0 +1,192 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* Persistent classes (internal): user defined actions
|
||||
*
|
||||
* @author Erwan Taloc <erwan.taloc@combodo.com>
|
||||
* @author Romain Quetiez <romain.quetiez@combodo.com>
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
|
||||
class ExecAsyncTask implements iBackgroundProcess
|
||||
{
|
||||
public function GetPeriodicity()
|
||||
{
|
||||
return 2; // seconds
|
||||
}
|
||||
|
||||
public function Process($iTimeLimit)
|
||||
{
|
||||
$sOQL = "SELECT AsyncTask WHERE ISNULL(started) AND (ISNULL(planned) OR (planned < NOW()))";
|
||||
$oSet = new CMDBObjectSet(DBObjectSearch::FromOQL($sOQL), array('created' => true) /* order by*/, array());
|
||||
$iProcessed = 0;
|
||||
while ((time() < $iTimeLimit) && ($oTask = $oSet->Fetch()))
|
||||
{
|
||||
$oTask->Set('started', time());
|
||||
$oTask->DBUpdate();
|
||||
|
||||
$oTask->Process();
|
||||
$iProcessed++;
|
||||
|
||||
$oTask->DBDelete();
|
||||
}
|
||||
if ($iProcessed == $oSet->Count())
|
||||
{
|
||||
return "processed $iProcessed tasks";
|
||||
}
|
||||
else
|
||||
{
|
||||
return "processed $iProcessed tasks (remaining: ".($oSet->Count() - $iProcessed).")";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A
|
||||
*
|
||||
* @package iTopORM
|
||||
*/
|
||||
abstract class AsyncTask extends DBObject
|
||||
{
|
||||
public static function Init()
|
||||
{
|
||||
$aParams = array
|
||||
(
|
||||
"category" => "core/cmdb",
|
||||
"key_type" => "autoincrement",
|
||||
"name_attcode" => array('created'),
|
||||
"state_attcode" => "",
|
||||
"reconc_keys" => array(),
|
||||
"db_table" => "priv_async_task",
|
||||
"db_key_field" => "id",
|
||||
"db_finalclass_field" => "realclass",
|
||||
"display_template" => "",
|
||||
);
|
||||
MetaModel::Init_Params($aParams);
|
||||
//MetaModel::Init_InheritAttributes();
|
||||
// MetaModel::Init_AddAttribute(new AttributeString("name", array("allowed_values"=>null, "sql"=>"name", "default_value"=>null, "is_null_allowed"=>false, "depends_on"=>array())));
|
||||
MetaModel::Init_AddAttribute(new AttributeDateTime("created", array("allowed_values"=>null, "sql"=>"created", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
|
||||
MetaModel::Init_AddAttribute(new AttributeDateTime("started", array("allowed_values"=>null, "sql"=>"started", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
|
||||
// planned... still not used - reserved for timer management
|
||||
MetaModel::Init_AddAttribute(new AttributeDateTime("planned", array("allowed_values"=>null, "sql"=>"planned", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
|
||||
MetaModel::Init_AddAttribute(new AttributeExternalKey("event_id", array("targetclass"=>"Event", "jointype"=> "", "allowed_values"=>null, "sql"=>"event_id", "is_null_allowed"=>true, "on_target_delete"=>DEL_SILENT, "depends_on"=>array())));
|
||||
|
||||
// Display lists
|
||||
// MetaModel::Init_SetZListItems('details', array()); // Attributes to be displayed for the complete details
|
||||
// MetaModel::Init_SetZListItems('list', array()); // Attributes to be displayed for a list
|
||||
// Search criteria
|
||||
// MetaModel::Init_SetZListItems('standard_search', array('name')); // Criteria of the std search form
|
||||
// MetaModel::Init_SetZListItems('advanced_search', array('name')); // Criteria of the advanced search form
|
||||
}
|
||||
|
||||
protected function OnInsert()
|
||||
{
|
||||
$this->Set('created', time());
|
||||
}
|
||||
|
||||
public function Process()
|
||||
{
|
||||
$sStatus = $this->DoProcess();
|
||||
if ($this->Get('event_id') != 0)
|
||||
{
|
||||
$oEventLog = MetaModel::GetObject('Event', $this->Get('event_id'));
|
||||
$oEventLog->Set('message', $sStatus);
|
||||
$oEventLog->DBUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
abstract public function DoProcess();
|
||||
}
|
||||
|
||||
/**
|
||||
* An email notification
|
||||
*
|
||||
* @package iTopORM
|
||||
*/
|
||||
class AsyncSendEmail extends AsyncTask
|
||||
{
|
||||
public static function Init()
|
||||
{
|
||||
$aParams = array
|
||||
(
|
||||
"category" => "core/cmdb",
|
||||
"key_type" => "autoincrement",
|
||||
"name_attcode" => "created",
|
||||
"state_attcode" => "",
|
||||
"reconc_keys" => array(),
|
||||
"db_table" => "priv_async_send_email",
|
||||
"db_key_field" => "id",
|
||||
"db_finalclass_field" => "",
|
||||
"display_template" => "",
|
||||
);
|
||||
MetaModel::Init_Params($aParams);
|
||||
MetaModel::Init_InheritAttributes();
|
||||
|
||||
MetaModel::Init_AddAttribute(new AttributeText("to", array("allowed_values"=>null, "sql"=>"to", "default_value"=>null, "is_null_allowed"=>false, "depends_on"=>array())));
|
||||
MetaModel::Init_AddAttribute(new AttributeText("subject", array("allowed_values"=>null, "sql"=>"subject", "default_value"=>null, "is_null_allowed"=>false, "depends_on"=>array())));
|
||||
MetaModel::Init_AddAttribute(new AttributeText("body", array("allowed_values"=>null, "sql"=>"body", "default_value"=>null, "is_null_allowed"=>false, "depends_on"=>array())));
|
||||
MetaModel::Init_AddAttribute(new AttributeText("header", array("allowed_values"=>null, "sql"=>"header", "default_value"=>null, "is_null_allowed"=>false, "depends_on"=>array())));
|
||||
|
||||
// Display lists
|
||||
// MetaModel::Init_SetZListItems('details', array('name', 'description', 'status', 'test_recipient', 'from', 'reply_to', 'to', 'cc', 'bcc', 'subject', 'body', 'importance', 'trigger_list')); // Attributes to be displayed for the complete details
|
||||
// MetaModel::Init_SetZListItems('list', array('name', 'status', 'to', 'subject')); // Attributes to be displayed for a list
|
||||
// Search criteria
|
||||
// MetaModel::Init_SetZListItems('standard_search', array('name')); // Criteria of the std search form
|
||||
// MetaModel::Init_SetZListItems('advanced_search', array('name')); // Criteria of the advanced search form
|
||||
}
|
||||
|
||||
static public function AddToQueue($sTo, $sSubject, $sBody, $aHeaders, $oLog)
|
||||
{
|
||||
$oNew = MetaModel::NewObject(__class__);
|
||||
if ($oLog)
|
||||
{
|
||||
$oNew->Set('event_id', $oLog->GetKey());
|
||||
}
|
||||
$oNew->Set('to', $sTo);
|
||||
$oNew->Set('subject', $sSubject);
|
||||
$oNew->Set('body', $sBody);
|
||||
$sHeaders = serialize($aHeaders);
|
||||
$oNew->Set('header', $sHeaders);
|
||||
$oNew->DBInsert();
|
||||
}
|
||||
|
||||
public function DoProcess()
|
||||
{
|
||||
$sTo = $this->Get('to');
|
||||
$sSubject = $this->Get('subject');
|
||||
$sBody = $this->Get('body');
|
||||
$sHeaders = $this->Get('header');
|
||||
$aHeaders = unserialize($sHeaders);
|
||||
|
||||
$oEmail = new EMail($sTo, $sSubject, $sBody, $aHeaders);
|
||||
$iRes = $oEmail->Send($aIssues, true /* force synchro !!!!! */);
|
||||
switch ($iRes)
|
||||
{
|
||||
case EMAIL_SEND_OK:
|
||||
return "Sent";
|
||||
|
||||
case EMAIL_SEND_PENDING:
|
||||
return "Bug - the email should be sent in synchronous mode";
|
||||
|
||||
case EMAIL_SEND_ERROR:
|
||||
return "Failed: ".implode(', ', $aIssues);
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
File diff suppressed because it is too large
Load Diff
33
core/backgroundprocess.inc.php
Normal file
33
core/backgroundprocess.inc.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* Class BackgroundProcess
|
||||
* Any extension that must be called regularly to be executed in the background
|
||||
*
|
||||
* @author Erwan Taloc <erwan.taloc@combodo.com>
|
||||
* @author Romain Quetiez <romain.quetiez@combodo.com>
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
interface iBackgroundProcess
|
||||
{
|
||||
public function GetPeriodicity();
|
||||
public function Process($iUnixTimeLimit);
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -52,19 +52,13 @@ abstract class CellChangeSpec
|
||||
$this->m_sOql = $sOql;
|
||||
}
|
||||
|
||||
static protected function ValueAsHtml($value)
|
||||
public function GetPureValue()
|
||||
{
|
||||
if (MetaModel::IsValidObject($value))
|
||||
{
|
||||
return $value->GetHyperLink();
|
||||
}
|
||||
else
|
||||
{
|
||||
return htmlentities($value, ENT_QUOTES, 'UTF-8');
|
||||
}
|
||||
// Todo - distinguish both values
|
||||
return $this->m_proposedValue;
|
||||
}
|
||||
|
||||
public function GetValue()
|
||||
public function GetDisplayableValue()
|
||||
{
|
||||
return $this->m_proposedValue;
|
||||
}
|
||||
@@ -101,10 +95,10 @@ class CellStatus_Modify extends CellChangeSpec
|
||||
return 'Modified';
|
||||
}
|
||||
|
||||
public function GetPreviousValue()
|
||||
{
|
||||
return $this->m_previousValue;
|
||||
}
|
||||
//public function GetPreviousValue()
|
||||
//{
|
||||
// return $this->m_previousValue;
|
||||
//}
|
||||
}
|
||||
|
||||
class CellStatus_Issue extends CellStatus_Modify
|
||||
@@ -127,6 +121,33 @@ class CellStatus_Issue extends CellStatus_Modify
|
||||
}
|
||||
}
|
||||
|
||||
class CellStatus_SearchIssue extends CellStatus_Issue
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(null, null, null);
|
||||
}
|
||||
|
||||
public function GetDescription()
|
||||
{
|
||||
return 'No match';
|
||||
}
|
||||
}
|
||||
|
||||
class CellStatus_NullIssue extends CellStatus_Issue
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(null, null, null);
|
||||
}
|
||||
|
||||
public function GetDescription()
|
||||
{
|
||||
return 'Missing mandatory value';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class CellStatus_Ambiguous extends CellStatus_Issue
|
||||
{
|
||||
protected $m_iCount;
|
||||
@@ -192,6 +213,14 @@ class RowStatus_Modify extends RowStatus
|
||||
}
|
||||
}
|
||||
|
||||
class RowStatus_Disappeared extends RowStatus_Modify
|
||||
{
|
||||
public function GetDescription()
|
||||
{
|
||||
return "disappeared, changed ".$this->m_iChanged." cols";
|
||||
}
|
||||
}
|
||||
|
||||
class RowStatus_Issue extends RowStatus
|
||||
{
|
||||
protected $m_sReason;
|
||||
@@ -220,17 +249,37 @@ class BulkChange
|
||||
// #@# todo: rename the variables to sColIndex
|
||||
protected $m_aAttList; // attcode => iCol
|
||||
protected $m_aExtKeys; // aExtKeys[sExtKeyAttCode][sExtReconcKeyAttCode] = iCol;
|
||||
protected $m_aReconcilKeys;// attcode (attcode = 'id' for the pkey)
|
||||
protected $m_aReconcilKeys; // attcode (attcode = 'id' for the pkey)
|
||||
protected $m_sSynchroScope; // OQL - if specified, then the missing items will be reported
|
||||
protected $m_aOnDisappear; // array of attcode => value, values to be set when an object gets out of scope (ignored if no scope has been defined)
|
||||
|
||||
public function __construct($sClass, $aData, $aAttList, $aExtKeys, $aReconcilKeys)
|
||||
public function __construct($sClass, $aData, $aAttList, $aExtKeys, $aReconcilKeys, $sSynchroScope = null, $aOnDisappear = null)
|
||||
{
|
||||
$this->m_sClass = $sClass;
|
||||
$this->m_aData = $aData;
|
||||
$this->m_aAttList = $aAttList;
|
||||
$this->m_aReconcilKeys = $aReconcilKeys;
|
||||
$this->m_aExtKeys = $aExtKeys;
|
||||
$this->m_sSynchroScope = $sSynchroScope;
|
||||
$this->m_aOnDisappear = $aOnDisappear;
|
||||
}
|
||||
|
||||
protected $m_bReportHtml = false;
|
||||
protected $m_sReportCsvSep = ',';
|
||||
protected $m_sReportCsvDelimiter = '"';
|
||||
|
||||
public function SetReportHtml()
|
||||
{
|
||||
$this->m_bReportHtml = true;
|
||||
}
|
||||
|
||||
public function SetReportCsv($sSeparator = ',', $sDelimiter = '"')
|
||||
{
|
||||
$this->m_bReportHtml = false;
|
||||
$this->m_sReportCsvSep = $sSeparator;
|
||||
$this->m_sReportCsvDelimiter = $sDelimiter;
|
||||
}
|
||||
|
||||
protected function ResolveExternalKey($aRowData, $sAttCode, &$aResults)
|
||||
{
|
||||
$oExtKey = MetaModel::GetAttributeDef($this->m_sClass, $sAttCode);
|
||||
@@ -247,6 +296,21 @@ class BulkChange
|
||||
return array($oReconFilter->ToOql(), $aKeys);
|
||||
}
|
||||
|
||||
// Returns true if the CSV data specifies that the external key must be left undefined
|
||||
protected function IsNullExternalKeySpec($aRowData, $sAttCode)
|
||||
{
|
||||
$oExtKey = MetaModel::GetAttributeDef($this->m_sClass, $sAttCode);
|
||||
foreach ($this->m_aExtKeys[$sAttCode] as $sForeignAttCode => $iCol)
|
||||
{
|
||||
// The foreign attribute is one of our reconciliation key
|
||||
if (strlen($aRowData[$iCol]) > 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
protected function PrepareObject(&$oTargetObj, $aRowData, &$aErrors)
|
||||
{
|
||||
$aResults = array();
|
||||
@@ -260,36 +324,49 @@ class BulkChange
|
||||
// if (!array_key_exists($sAttCode, $this->m_aAttList)) continue;
|
||||
|
||||
$oExtKey = MetaModel::GetAttributeDef(get_class($oTargetObj), $sAttCode);
|
||||
$oReconFilter = new CMDBSearchFilter($oExtKey->GetTargetClass());
|
||||
foreach ($aKeyConfig as $sForeignAttCode => $iCol)
|
||||
|
||||
if ($this->IsNullExternalKeySpec($aRowData, $sAttCode))
|
||||
{
|
||||
// The foreign attribute is one of our reconciliation key
|
||||
$oReconFilter->AddCondition($sForeignAttCode, $aRowData[$iCol], '=');
|
||||
$aResults[$iCol] = new CellStatus_Void($aRowData[$iCol]);
|
||||
}
|
||||
$oExtObjects = new CMDBObjectSet($oReconFilter);
|
||||
switch($oExtObjects->Count())
|
||||
{
|
||||
case 0:
|
||||
foreach ($aKeyConfig as $sForeignAttCode => $iCol)
|
||||
{
|
||||
$aResults[$iCol] = new CellStatus_Void($aRowData[$iCol]);
|
||||
}
|
||||
if ($oExtKey->IsNullAllowed())
|
||||
{
|
||||
$oTargetObj->Set($sAttCode, $oExtKey->GetNullValue());
|
||||
$aResults[$sAttCode]= new CellStatus_Issue(null, $oTargetObj->Get($sAttCode), 'Object not found');
|
||||
$aResults[$sAttCode]= new CellStatus_Void($oExtKey->GetNullValue());
|
||||
}
|
||||
else
|
||||
{
|
||||
$aErrors[$sAttCode] = "Object not found";
|
||||
$aResults[$sAttCode]= new CellStatus_Issue(null, $oTargetObj->Get($sAttCode), 'Object not found');
|
||||
$aErrors[$sAttCode] = "Null not allowed";
|
||||
$aResults[$sAttCode]= new CellStatus_Issue(null, $oTargetObj->Get($sAttCode), 'Null not allowed');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$oReconFilter = new CMDBSearchFilter($oExtKey->GetTargetClass());
|
||||
foreach ($aKeyConfig as $sForeignAttCode => $iCol)
|
||||
{
|
||||
// The foreign attribute is one of our reconciliation key
|
||||
$oReconFilter->AddCondition($sForeignAttCode, $aRowData[$iCol], '=');
|
||||
$aResults[$iCol] = new CellStatus_Void($aRowData[$iCol]);
|
||||
}
|
||||
$oExtObjects = new CMDBObjectSet($oReconFilter);
|
||||
switch($oExtObjects->Count())
|
||||
{
|
||||
case 0:
|
||||
$aErrors[$sAttCode] = "Object not found";
|
||||
$aResults[$sAttCode]= new CellStatus_SearchIssue();
|
||||
break;
|
||||
case 1:
|
||||
// Do change the external key attribute
|
||||
$oForeignObj = $oExtObjects->Fetch();
|
||||
$oTargetObj->Set($sAttCode, $oForeignObj->GetKey());
|
||||
break;
|
||||
default:
|
||||
$aErrors[$sAttCode] = "Found ".$oExtObjects->Count()." matches";
|
||||
$aResults[$sAttCode]= new CellStatus_Ambiguous($oTargetObj->Get($sAttCode), $oExtObjects->Count(), $oReconFilter->ToOql());
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
// Do change the external key attribute
|
||||
$oForeignObj = $oExtObjects->Fetch();
|
||||
$oTargetObj->Set($sAttCode, $oForeignObj->GetKey());
|
||||
break;
|
||||
default:
|
||||
$aErrors[$sAttCode] = "Found ".$oExtObjects->Count()." matches";
|
||||
$aResults[$sAttCode]= new CellStatus_Ambiguous($oTargetObj->Get($sAttCode), $oExtObjects->Count(), $oReconFilter->ToOql());
|
||||
}
|
||||
|
||||
// Report
|
||||
@@ -321,15 +398,31 @@ class BulkChange
|
||||
// skip the private key, if any
|
||||
if ($sAttCode == 'id') continue;
|
||||
|
||||
$res = $oTargetObj->CheckValue($sAttCode, $aRowData[$iCol]);
|
||||
if ($res === true)
|
||||
$oAttDef = MetaModel::GetAttributeDef($this->m_sClass, $sAttCode);
|
||||
if ($oAttDef->IsLinkSet() && $oAttDef->IsIndirect())
|
||||
{
|
||||
$oTargetObj->Set($sAttCode, $aRowData[$iCol]);
|
||||
try
|
||||
{
|
||||
$oSet = $oAttDef->MakeValueFromString($aRowData[$iCol]);
|
||||
$oTargetObj->Set($sAttCode, $oSet);
|
||||
}
|
||||
catch(CoreException $e)
|
||||
{
|
||||
$aErrors[$sAttCode] = "Failed to process input: ".$e->getMessage();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// $res is a string with the error description
|
||||
$aErrors[$sAttCode] = "Unexpected value for attribute '$sAttCode': $res";
|
||||
{
|
||||
$res = $oTargetObj->CheckValue($sAttCode, $aRowData[$iCol]);
|
||||
if ($res === true)
|
||||
{
|
||||
$oTargetObj->Set($sAttCode, $aRowData[$iCol]);
|
||||
}
|
||||
else
|
||||
{
|
||||
// $res is a string with the error description
|
||||
$aErrors[$sAttCode] = "Unexpected value for attribute '$sAttCode': $res";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -342,25 +435,38 @@ class BulkChange
|
||||
{
|
||||
$aResults[$iCol]= new CellStatus_Void($aRowData[$iCol]);
|
||||
}
|
||||
if (isset($aErrors[$sAttCode]))
|
||||
else
|
||||
{
|
||||
$aResults[$iCol]= new CellStatus_Issue($oTargetObj->Get($sAttCode), $oTargetObj->GetOriginal($sAttCode), $aErrors[$sAttCode]);
|
||||
}
|
||||
elseif (array_key_exists($sAttCode, $aChangedFields))
|
||||
{
|
||||
if ($oTargetObj->IsNew())
|
||||
if ($this->m_bReportHtml)
|
||||
{
|
||||
$aResults[$iCol]= new CellStatus_Void($oTargetObj->Get($sAttCode));
|
||||
$sCurValue = $oTargetObj->GetAsHTML($sAttCode);
|
||||
$sOrigValue = $oTargetObj->GetOriginalAsHTML($sAttCode);
|
||||
}
|
||||
else
|
||||
{
|
||||
$aResults[$iCol]= new CellStatus_Modify($oTargetObj->Get($sAttCode), $oTargetObj->GetOriginal($sAttCode));
|
||||
$sCurValue = $oTargetObj->GetAsCSV($sAttCode, $this->m_sReportCsvSep, $this->m_sReportCsvDelimiter);
|
||||
$sOrigValue = $oTargetObj->GetOriginalAsCSV($sAttCode, $this->m_sReportCsvSep, $this->m_sReportCsvDelimiter);
|
||||
}
|
||||
if (isset($aErrors[$sAttCode]))
|
||||
{
|
||||
$aResults[$iCol]= new CellStatus_Issue($sCurValue, $sOrigValue, $aErrors[$sAttCode]);
|
||||
}
|
||||
elseif (array_key_exists($sAttCode, $aChangedFields))
|
||||
{
|
||||
if ($oTargetObj->IsNew())
|
||||
{
|
||||
$aResults[$iCol]= new CellStatus_Void($sCurValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
$aResults[$iCol]= new CellStatus_Modify($sCurValue, $sOrigValue);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// By default... nothing happens
|
||||
$aResults[$iCol]= new CellStatus_Void($aRowData[$iCol]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// By default... nothing happens
|
||||
$aResults[$iCol]= new CellStatus_Void($aRowData[$iCol]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -375,6 +481,70 @@ class BulkChange
|
||||
return $aResults;
|
||||
}
|
||||
|
||||
protected function PrepareMissingObject(&$oTargetObj, &$aErrors)
|
||||
{
|
||||
$aResults = array();
|
||||
$aErrors = array();
|
||||
|
||||
// External keys
|
||||
//
|
||||
foreach($this->m_aExtKeys as $sAttCode => $aKeyConfig)
|
||||
{
|
||||
//$oExtKey = MetaModel::GetAttributeDef(get_class($oTargetObj), $sAttCode);
|
||||
$aResults[$sAttCode]= new CellStatus_Void($oTargetObj->Get($sAttCode));
|
||||
|
||||
foreach ($aKeyConfig as $sForeignAttCode => $iCol)
|
||||
{
|
||||
$aResults[$iCol] = new CellStatus_Void('?');
|
||||
}
|
||||
}
|
||||
|
||||
// Update attributes
|
||||
//
|
||||
foreach($this->m_aOnDisappear as $sAttCode => $value)
|
||||
{
|
||||
if (!MetaModel::IsValidAttCode(get_class($oTargetObj), $sAttCode))
|
||||
{
|
||||
throw new BulkChangeException('Invalid attribute code', array('class' => get_class($oTargetObj), 'attcode' => $sAttCode));
|
||||
}
|
||||
$oTargetObj->Set($sAttCode, $value);
|
||||
if (!array_key_exists($sAttCode, $this->m_aAttList))
|
||||
{
|
||||
// #@# will be out of the reporting... (counted anyway)
|
||||
}
|
||||
}
|
||||
|
||||
// Reporting on fields
|
||||
//
|
||||
$aChangedFields = $oTargetObj->ListChanges();
|
||||
foreach ($this->m_aAttList as $sAttCode => $iCol)
|
||||
{
|
||||
if ($sAttCode == 'id')
|
||||
{
|
||||
$aResults[$iCol]= new CellStatus_Void($oTargetObj->GetKey());
|
||||
}
|
||||
if (array_key_exists($sAttCode, $aChangedFields))
|
||||
{
|
||||
$aResults[$iCol]= new CellStatus_Modify($oTargetObj->Get($sAttCode), $oTargetObj->GetOriginal($sAttCode));
|
||||
}
|
||||
else
|
||||
{
|
||||
// By default... nothing happens
|
||||
$aResults[$iCol]= new CellStatus_Void($oTargetObj->Get($sAttCode));
|
||||
}
|
||||
}
|
||||
|
||||
// Checks
|
||||
//
|
||||
$res = $oTargetObj->CheckConsistency();
|
||||
if ($res !== true)
|
||||
{
|
||||
// $res contains the error description
|
||||
$aErrors["GLOBAL"] = "Attributes not consistent with each others: $res";
|
||||
}
|
||||
return $aResults;
|
||||
}
|
||||
|
||||
|
||||
protected function CreateObject(&$aResult, $iRow, $aRowData, CMDBChange $oChange = null)
|
||||
{
|
||||
@@ -385,7 +555,7 @@ class BulkChange
|
||||
{
|
||||
$sErrors = implode(', ', $aErrors);
|
||||
$aResult[$iRow]["__STATUS__"] = new RowStatus_Issue("Unexpected attribute value(s)");
|
||||
return;
|
||||
return $oTargetObj;
|
||||
}
|
||||
|
||||
// Check that any external key will have a value proposed
|
||||
@@ -404,7 +574,7 @@ class BulkChange
|
||||
{
|
||||
$sMissingKeys = implode(', ', $aMissingKeys);
|
||||
$aResult[$iRow]["__STATUS__"] = new RowStatus_Issue("Could not be created, due to missing external key(s): $sMissingKeys");
|
||||
return;
|
||||
return $oTargetObj;
|
||||
}
|
||||
|
||||
// Optionaly record the results
|
||||
@@ -422,6 +592,7 @@ class BulkChange
|
||||
$aResult[$iRow]["finalclass"] = get_class($oTargetObj);
|
||||
$aResult[$iRow]["id"] = new CellStatus_Void(0);
|
||||
}
|
||||
return $oTargetObj;
|
||||
}
|
||||
|
||||
protected function UpdateObject(&$aResult, $iRow, $oTargetObj, $aRowData, CMDBChange $oChange = null)
|
||||
@@ -449,7 +620,14 @@ class BulkChange
|
||||
//
|
||||
if ($oChange)
|
||||
{
|
||||
$oTargetObj->DBUpdateTracked($oChange);
|
||||
try
|
||||
{
|
||||
$oTargetObj->DBUpdateTracked($oChange);
|
||||
}
|
||||
catch(CoreException $e)
|
||||
{
|
||||
$aResult[$iRow]["__STATUS__"] = new RowStatus_Issue($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -457,13 +635,80 @@ class BulkChange
|
||||
$aResult[$iRow]["__STATUS__"] = new RowStatus_NoChange();
|
||||
}
|
||||
}
|
||||
|
||||
protected function UpdateMissingObject(&$aResult, $iRow, $oTargetObj, CMDBChange $oChange = null)
|
||||
{
|
||||
$aResult[$iRow] = $this->PrepareMissingObject($oTargetObj, $aErrors);
|
||||
|
||||
// Reporting
|
||||
//
|
||||
$aResult[$iRow]["finalclass"] = get_class($oTargetObj);
|
||||
$aResult[$iRow]["id"] = new CellStatus_Void($oTargetObj->GetKey());
|
||||
|
||||
if (count($aErrors) > 0)
|
||||
{
|
||||
$sErrors = implode(', ', $aErrors);
|
||||
$aResult[$iRow]["__STATUS__"] = new RowStatus_Issue("Unexpected attribute value(s)");
|
||||
return;
|
||||
}
|
||||
|
||||
$aChangedFields = $oTargetObj->ListChanges();
|
||||
if (count($aChangedFields) > 0)
|
||||
{
|
||||
$aResult[$iRow]["__STATUS__"] = new RowStatus_Disappeared(count($aChangedFields));
|
||||
|
||||
// Optionaly record the results
|
||||
//
|
||||
if ($oChange)
|
||||
{
|
||||
try
|
||||
{
|
||||
$oTargetObj->DBUpdateTracked($oChange);
|
||||
}
|
||||
catch(CoreException $e)
|
||||
{
|
||||
$aResult[$iRow]["__STATUS__"] = new RowStatus_Issue($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$aResult[$iRow]["__STATUS__"] = new RowStatus_Disappeared(0);
|
||||
}
|
||||
}
|
||||
|
||||
public function Process(CMDBChange $oChange = null)
|
||||
{
|
||||
// Note: $oChange can be null, in which case the aim is to check what would be done
|
||||
|
||||
|
||||
// Debug...
|
||||
//
|
||||
if (false)
|
||||
{
|
||||
echo "<pre>\n";
|
||||
echo "Attributes:\n";
|
||||
print_r($this->m_aAttList);
|
||||
echo "ExtKeys:\n";
|
||||
print_r($this->m_aExtKeys);
|
||||
echo "Reconciliation:\n";
|
||||
print_r($this->m_aReconcilKeys);
|
||||
echo "Synchro scope:\n";
|
||||
print_r($this->m_sSynchroScope);
|
||||
echo "Synchro changes:\n";
|
||||
print_r($this->m_aOnDisappear);
|
||||
//echo "Data:\n";
|
||||
//print_r($this->m_aData);
|
||||
echo "</pre>\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
// Compute the results
|
||||
//
|
||||
if (!is_null($this->m_sSynchroScope))
|
||||
{
|
||||
$aVisited = array();
|
||||
}
|
||||
$aResult = array();
|
||||
foreach($this->m_aData as $iRow => $aRowData)
|
||||
{
|
||||
@@ -474,22 +719,38 @@ class BulkChange
|
||||
$valuecondition = null;
|
||||
if (array_key_exists($sAttCode, $this->m_aExtKeys))
|
||||
{
|
||||
// The value has to be found or verified
|
||||
list($sQuery, $aMatches) = $this->ResolveExternalKey($aRowData, $sAttCode, $aResult[$iRow]);
|
||||
|
||||
if (count($aMatches) == 1)
|
||||
if ($this->IsNullExternalKeySpec($aRowData, $sAttCode))
|
||||
{
|
||||
$oRemoteObj = reset($aMatches); // first item
|
||||
$valuecondition = $oRemoteObj->GetKey();
|
||||
$aResult[$iRow][$sAttCode] = new CellStatus_Void($oRemoteObj->GetKey());
|
||||
}
|
||||
elseif (count($aMatches) == 0)
|
||||
{
|
||||
$aResult[$iRow][$sAttCode] = new CellStatus_Issue(null, null, 'object not found');
|
||||
}
|
||||
$oExtKey = MetaModel::GetAttributeDef($this->m_sClass, $sAttCode);
|
||||
if ($oExtKey->IsNullAllowed())
|
||||
{
|
||||
$valuecondition = $oExtKey->GetNullValue();
|
||||
$aResult[$iRow][$sAttCode] = new CellStatus_Void($oExtKey->GetNullValue());
|
||||
}
|
||||
else
|
||||
{
|
||||
$aResult[$iRow][$sAttCode] = new CellStatus_NullIssue();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$aResult[$iRow][$sAttCode] = new CellStatus_Ambiguous(null, count($aMatches), $sQuery);
|
||||
// The value has to be found or verified
|
||||
list($sQuery, $aMatches) = $this->ResolveExternalKey($aRowData, $sAttCode, $aResult[$iRow]);
|
||||
|
||||
if (count($aMatches) == 1)
|
||||
{
|
||||
$oRemoteObj = reset($aMatches); // first item
|
||||
$valuecondition = $oRemoteObj->GetKey();
|
||||
$aResult[$iRow][$sAttCode] = new CellStatus_Void($oRemoteObj->GetKey());
|
||||
}
|
||||
elseif (count($aMatches) == 0)
|
||||
{
|
||||
$aResult[$iRow][$sAttCode] = new CellStatus_SearchIssue();
|
||||
}
|
||||
else
|
||||
{
|
||||
$aResult[$iRow][$sAttCode] = new CellStatus_Ambiguous(null, count($aMatches), $sQuery);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -517,13 +778,18 @@ class BulkChange
|
||||
switch($oReconciliationSet->Count())
|
||||
{
|
||||
case 0:
|
||||
$this->CreateObject($aResult, $iRow, $aRowData, $oChange);
|
||||
$oTargetObj = $this->CreateObject($aResult, $iRow, $aRowData, $oChange);
|
||||
// $aResult[$iRow]["__STATUS__"]=> set in CreateObject
|
||||
$aVisited[] = $oTargetObj->GetKey();
|
||||
break;
|
||||
case 1:
|
||||
$oTargetObj = $oReconciliationSet->Fetch();
|
||||
$this->UpdateObject($aResult, $iRow, $oTargetObj, $aRowData, $oChange);
|
||||
// $aResult[$iRow]["__STATUS__"]=> set in UpdateObject
|
||||
if (!is_null($this->m_sSynchroScope))
|
||||
{
|
||||
$aVisited[] = $oTargetObj->GetKey();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
// Found several matches, ambiguous
|
||||
@@ -546,7 +812,10 @@ class BulkChange
|
||||
if (!array_key_exists($sAttCode, $aResult[$iRow]))
|
||||
{
|
||||
$aResult[$iRow][$sAttCode] = new CellStatus_Void('n/a');
|
||||
foreach ($aForeignAtts as $sForeignAttCode => $iCol)
|
||||
}
|
||||
foreach ($aForeignAtts as $sForeignAttCode => $iCol)
|
||||
{
|
||||
if (!array_key_exists($iCol, $aResult[$iRow]))
|
||||
{
|
||||
// The foreign attribute is one of our reconciliation key
|
||||
$aResult[$iRow][$iCol] = new CellStatus_Void($aRowData[$iCol]);
|
||||
@@ -554,8 +823,338 @@ class BulkChange
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!is_null($this->m_sSynchroScope))
|
||||
{
|
||||
// Compute the delta between the scope and visited objects
|
||||
$oScopeSearch = DBObjectSearch::FromOQL($this->m_sSynchroScope);
|
||||
$oScopeSet = new DBObjectSet($oScopeSearch);
|
||||
while ($oObj = $oScopeSet->Fetch())
|
||||
{
|
||||
$iObj = $oObj->GetKey();
|
||||
if (!in_array($iObj, $aVisited))
|
||||
{
|
||||
$iRow++;
|
||||
$this->UpdateMissingObject($aResult, $iRow, $oObj, $oChange);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $aResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the history of bulk imports
|
||||
*/
|
||||
static function DisplayImportHistory(WebPage $oPage, $bFromAjax = false, $bShowAll = false)
|
||||
{
|
||||
$sAjaxDivId = "CSVImportHistory";
|
||||
if (!$bFromAjax)
|
||||
{
|
||||
$oPage->add('<div id="'.$sAjaxDivId.'">');
|
||||
}
|
||||
|
||||
$oPage->p(Dict::S('UI:History:BulkImports+'));
|
||||
|
||||
$oBulkChangeSearch = DBObjectSearch::FromOQL("SELECT CMDBChange WHERE userinfo LIKE '%(CSV)'");
|
||||
|
||||
$iQueryLimit = $bShowAll ? 0 : MetaModel::GetConfig()->GetMaxDisplayLimit() + 1;
|
||||
$oBulkChanges = new DBObjectSet($oBulkChangeSearch, array('date' => false), array(), null, $iQueryLimit);
|
||||
|
||||
$oAppContext = new ApplicationContext();
|
||||
|
||||
$bLimitExceeded = false;
|
||||
if ($oBulkChanges->Count() > MetaModel::GetConfig()->GetMaxDisplayLimit())
|
||||
{
|
||||
$bLimitExceeded = true;
|
||||
if (!$bShowAll)
|
||||
{
|
||||
$iMaxObjects = MetaModel::GetConfig()->GetMinDisplayLimit();
|
||||
$oBulkChanges->SetLimit($iMaxObjects);
|
||||
}
|
||||
}
|
||||
$oBulkChanges->Seek(0);
|
||||
|
||||
$aDetails = array();
|
||||
while ($oChange = $oBulkChanges->Fetch())
|
||||
{
|
||||
$sDate = '<a href="?step=10&changeid='.$oChange->GetKey().'&'.$oAppContext->GetForLink().'">'.$oChange->Get('date').'</a>';
|
||||
$sUser = $oChange->GetUserName();
|
||||
if (preg_match('/^(.*)\\(CSV\\)$/i', $oChange->Get('userinfo'), $aMatches))
|
||||
{
|
||||
$sUser = $aMatches[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
$sUser = $oChange->Get('userinfo');
|
||||
}
|
||||
|
||||
$oOpSearch = DBObjectSearch::FromOQL("SELECT CMDBChangeOpCreate WHERE change = :change_id");
|
||||
$oOpSet = new DBObjectSet($oOpSearch, array(), array('change_id' => $oChange->GetKey()));
|
||||
$iCreated = $oOpSet->Count();
|
||||
|
||||
// Get the class from the first item found (assumption: a CSV load is done for a single class)
|
||||
if ($oCreateOp = $oOpSet->Fetch())
|
||||
{
|
||||
$sClass = $oCreateOp->Get('objclass');
|
||||
}
|
||||
|
||||
$oOpSearch = DBObjectSearch::FromOQL("SELECT CMDBChangeOpSetAttribute WHERE change = :change_id");
|
||||
$oOpSet = new DBObjectSet($oOpSearch, array(), array('change_id' => $oChange->GetKey()));
|
||||
|
||||
$aModified = array();
|
||||
$aAttList = array();
|
||||
while ($oModified = $oOpSet->Fetch())
|
||||
{
|
||||
// Get the class (if not done earlier on object creation)
|
||||
$sClass = $oModified->Get('objclass');
|
||||
$iKey = $oModified->Get('objkey');
|
||||
$sAttCode = $oModified->Get('attcode');
|
||||
|
||||
$aAttList[$sClass][$sAttCode] = true;
|
||||
$aModified["$sClass::$iKey"] = true;
|
||||
}
|
||||
$iModified = count($aModified);
|
||||
|
||||
// Assumption: there is only one class of objects being loaded
|
||||
// Then the last class found gives us the class for every object
|
||||
if ( ($iModified > 0) || ($iCreated > 0))
|
||||
{
|
||||
$aDetails[] = array('date' => $sDate, 'user' => $sUser, 'class' => $sClass, 'created' => $iCreated, 'modified' => $iModified);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$aConfig = array( 'date' => array('label' => Dict::S('UI:History:Date'), 'description' => Dict::S('UI:History:Date+')),
|
||||
'user' => array('label' => Dict::S('UI:History:User'), 'description' => Dict::S('UI:History:User+')),
|
||||
'class' => array('label' => Dict::S('Core:AttributeClass'), 'description' => Dict::S('Core:AttributeClass+')),
|
||||
'created' => array('label' => Dict::S('UI:History:StatsCreations'), 'description' => Dict::S('UI:History:StatsCreations+')),
|
||||
'modified' => array('label' => Dict::S('UI:History:StatsModifs'), 'description' => Dict::S('UI:History:StatsModifs+')),
|
||||
);
|
||||
|
||||
if ($bLimitExceeded)
|
||||
{
|
||||
if ($bShowAll)
|
||||
{
|
||||
// Collapsible list
|
||||
$oPage->add('<p>'.Dict::Format('UI:CountOfResults', $oBulkChanges->Count()).' <a class="truncated" onclick="OnTruncatedHistoryToggle(false);">'.Dict::S('UI:CollapseList').'</a></p>');
|
||||
}
|
||||
else
|
||||
{
|
||||
// Truncated list
|
||||
$iMinDisplayLimit = MetaModel::GetConfig()->GetMinDisplayLimit();
|
||||
$sCollapsedLabel = Dict::Format('UI:TruncatedResults', $iMinDisplayLimit, $oBulkChanges->Count());
|
||||
$sLinkLabel = Dict::S('UI:DisplayAll');
|
||||
$oPage->add('<p>'.$sCollapsedLabel.' <a class="truncated" onclick="OnTruncatedHistoryToggle(true);">'.$sLinkLabel.'</p>');
|
||||
|
||||
$oPage->add_ready_script(
|
||||
<<<EOF
|
||||
$('#$sAjaxDivId table.listResults').addClass('truncated');
|
||||
$('#$sAjaxDivId table.listResults tr:last td').addClass('truncated');
|
||||
EOF
|
||||
);
|
||||
|
||||
|
||||
$sAppContext = $oAppContext->GetForLink();
|
||||
$oPage->add_script(
|
||||
<<<EOF
|
||||
function OnTruncatedHistoryToggle(bShowAll)
|
||||
{
|
||||
$.get('../pages/ajax.render.php?{$sAppContext}', {operation: 'displayCSVHistory', showall: bShowAll}, function(data)
|
||||
{
|
||||
$('#$sAjaxDivId').html(data);
|
||||
var table = $('#$sAjaxDivId .listResults');
|
||||
table.tableHover(); // hover tables
|
||||
table.tablesorter( { widgets: ['myZebra', 'truncatedList']} ); // sortable and zebra tables
|
||||
}
|
||||
);
|
||||
}
|
||||
EOF
|
||||
);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Normal display - full list without any decoration
|
||||
}
|
||||
|
||||
$oPage->table($aConfig, $aDetails);
|
||||
|
||||
if (!$bFromAjax)
|
||||
{
|
||||
$oPage->add('</div>');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the details of an import
|
||||
*/
|
||||
static function DisplayImportHistoryDetails(iTopWebPage $oPage, $iChange)
|
||||
{
|
||||
if ($iChange == 0)
|
||||
{
|
||||
throw new Exception("Missing parameter changeid");
|
||||
}
|
||||
$oChange = MetaModel::GetObject('CMDBChange', $iChange, false);
|
||||
if (is_null($oChange))
|
||||
{
|
||||
throw new Exception("Unknown change: $iChange");
|
||||
}
|
||||
$oPage->add("<div><p><h1>".Dict::Format('UI:History:BulkImportDetails', $oChange->Get('date'), $oChange->GetUserName())."</h1></p></div>\n");
|
||||
|
||||
// Assumption : change made one single class of objects
|
||||
$aObjects = array();
|
||||
$aAttributes = array(); // array of attcode => occurences
|
||||
|
||||
$oOpSearch = DBObjectSearch::FromOQL("SELECT CMDBChangeOp WHERE change = :change_id");
|
||||
$oOpSet = new DBObjectSet($oOpSearch, array(), array('change_id' => $iChange));
|
||||
while ($oOperation = $oOpSet->Fetch())
|
||||
{
|
||||
$sClass = $oOperation->Get('objclass');
|
||||
$iKey = $oOperation->Get('objkey');
|
||||
$iObjId = "$sClass::$iKey";
|
||||
if (!isset($aObjects[$iObjId]))
|
||||
{
|
||||
$aObjects[$iObjId] = array();
|
||||
$aObjects[$iObjId]['__class__'] = $sClass;
|
||||
$aObjects[$iObjId]['__id__'] = $iKey;
|
||||
}
|
||||
if (get_class($oOperation) == 'CMDBChangeOpCreate')
|
||||
{
|
||||
$aObjects[$iObjId]['__created__'] = true;
|
||||
}
|
||||
elseif ($oOperation instanceof CMDBChangeOpSetAttribute)
|
||||
{
|
||||
$sAttCode = $oOperation->Get('attcode');
|
||||
|
||||
if (get_class($oOperation) == 'CMDBChangeOpSetAttributeScalar')
|
||||
{
|
||||
$oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode);
|
||||
if ($oAttDef->IsExternalKey())
|
||||
{
|
||||
$oOldTarget = MetaModel::GetObject($oAttDef->GetTargetClass(), $oOperation->Get('oldvalue'));
|
||||
$oNewTarget = MetaModel::GetObject($oAttDef->GetTargetClass(), $oOperation->Get('newvalue'));
|
||||
$sOldValue = $oOldTarget->GetHyperlink();
|
||||
$sNewValue = $oNewTarget->GetHyperlink();
|
||||
}
|
||||
else
|
||||
{
|
||||
$sOldValue = $oOperation->GetAsHTML('oldvalue');
|
||||
$sNewValue = $oOperation->GetAsHTML('newvalue');
|
||||
}
|
||||
$aObjects[$iObjId][$sAttCode] = $sOldValue.' -> '.$sNewValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
$aObjects[$iObjId][$sAttCode] = 'n/a';
|
||||
}
|
||||
|
||||
if (isset($aAttributes[$sAttCode]))
|
||||
{
|
||||
$aAttributes[$sAttCode]++;
|
||||
}
|
||||
else
|
||||
{
|
||||
$aAttributes[$sAttCode] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$aDetails = array();
|
||||
foreach($aObjects as $iUId => $aObjData)
|
||||
{
|
||||
$aRow = array();
|
||||
$oObject = MetaModel::GetObject($aObjData['__class__'], $aObjData['__id__'], false);
|
||||
if (is_null($oObject))
|
||||
{
|
||||
$aRow['object'] = $aObjData['__class__'].'::'.$aObjData['__id__'].' (deleted)';
|
||||
}
|
||||
else
|
||||
{
|
||||
$aRow['object'] = $oObject->GetHyperlink();
|
||||
}
|
||||
if (isset($aObjData['__created__']))
|
||||
{
|
||||
$aRow['operation'] = Dict::S('Change:ObjectCreated');
|
||||
}
|
||||
else
|
||||
{
|
||||
$aRow['operation'] = Dict::S('Change:ObjectModified');
|
||||
}
|
||||
foreach ($aAttributes as $sAttCode => $iOccurences)
|
||||
{
|
||||
if (isset($aObjData[$sAttCode]))
|
||||
{
|
||||
$aRow[$sAttCode] = $aObjData[$sAttCode];
|
||||
}
|
||||
elseif (!is_null($oObject))
|
||||
{
|
||||
// This is the current vaslue: $oObject->GetAsHtml($sAttCode)
|
||||
// whereas we are displaying the value that was set at the time
|
||||
// the object was created
|
||||
// This requires addtional coding...let's do that later
|
||||
$aRow[$sAttCode] = '';
|
||||
}
|
||||
else
|
||||
{
|
||||
$aRow[$sAttCode] = '';
|
||||
}
|
||||
}
|
||||
$aDetails[] = $aRow;
|
||||
}
|
||||
|
||||
$aConfig = array();
|
||||
$aConfig['object'] = array('label' => MetaModel::GetName($sClass), 'description' => MetaModel::GetClassDescription($sClass));
|
||||
$aConfig['operation'] = array('label' => Dict::S('UI:History:Changes'), 'description' => Dict::S('UI:History:Changes+'));
|
||||
foreach ($aAttributes as $sAttCode => $iOccurences)
|
||||
{
|
||||
$aConfig[$sAttCode] = array('label' => MetaModel::GetLabel($sClass, $sAttCode), 'description' => MetaModel::GetDescription($sClass, $sAttCode));
|
||||
}
|
||||
$oPage->table($aConfig, $aDetails);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the user friendly name for an 'extended' attribute code i.e 'name', becomes 'Name' and 'org_id->name' becomes 'Organization->Name'
|
||||
* @param string $sClassName The name of the class
|
||||
* @param string $sAttCodeEx Either an attribute code or ext_key_name->att_code
|
||||
* @return string A user friendly format of the string: AttributeName or AttributeName->ExtAttributeName
|
||||
*/
|
||||
public static function GetFriendlyAttCodeName($sClassName, $sAttCodeEx)
|
||||
{
|
||||
$sFriendlyName = '';
|
||||
if (preg_match('/(.+)->(.+)/', $sAttCodeEx, $aMatches) > 0)
|
||||
{
|
||||
$sAttribute = $aMatches[1];
|
||||
$sField = $aMatches[2];
|
||||
$oAttDef = MetaModel::GetAttributeDef($sClassName, $sAttribute);
|
||||
if ($oAttDef->IsExternalKey())
|
||||
{
|
||||
$sTargetClass = $oAttDef->GetTargetClass();
|
||||
$oTargetAttDef = MetaModel::GetAttributeDef($sTargetClass, $sField);
|
||||
$sFriendlyName = $oAttDef->GetLabel().'->'.$oTargetAttDef->GetLabel();
|
||||
}
|
||||
else
|
||||
{
|
||||
// hum, hum... should never happen, we'd better raise an exception
|
||||
throw(new Exception(Dict::Format('UI:CSVImport:ErrorExtendedAttCode', $sAttCodeEx, $sAttribute, $sClassName)));
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($sAttCodeEx == 'id')
|
||||
{
|
||||
$sFriendlyName = Dict::S('UI:CSVImport:idField');
|
||||
}
|
||||
else
|
||||
{
|
||||
$oAttDef = MetaModel::GetAttributeDef($sClassName, $sAttCodeEx);
|
||||
$sFriendlyName = $oAttDef->GetLabel();
|
||||
}
|
||||
}
|
||||
return $sFriendlyName;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -49,6 +49,34 @@ class CMDBChange extends DBObject
|
||||
MetaModel::Init_AddAttribute(new AttributeDateTime("date", array("allowed_values"=>null, "sql"=>"date", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
|
||||
MetaModel::Init_AddAttribute(new AttributeString("userinfo", array("allowed_values"=>null, "sql"=>"userinfo", "default_value"=>null, "is_null_allowed"=>true, "depends_on"=>array())));
|
||||
}
|
||||
|
||||
// Helper to keep track of the author of a given change,
|
||||
// taking into account a variety of cases (contact attached or not, impersonation)
|
||||
static public function GetCurrentUserName()
|
||||
{
|
||||
if (UserRights::IsImpersonated())
|
||||
{
|
||||
$sUserString = Dict::Format('UI:Archive_User_OnBehalfOf_User', UserRights::GetRealUserFriendlyName(), UserRights::GetUserFriendlyName());
|
||||
}
|
||||
else
|
||||
{
|
||||
$sUserString = UserRights::GetUserFriendlyName();
|
||||
}
|
||||
return $sUserString;
|
||||
}
|
||||
|
||||
public function GetUserName()
|
||||
{
|
||||
if (preg_match('/^(.*)\\(CSV\\)$/i', $this->Get('userinfo'), $aMatches))
|
||||
{
|
||||
$sUser = $aMatches[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
$sUser = $this->Get('userinfo');
|
||||
}
|
||||
return $sUser;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
@@ -232,7 +232,14 @@ class CMDBChangeOpSetAttributeScalar extends CMDBChangeOpSetAttribute
|
||||
}
|
||||
else
|
||||
{
|
||||
$sResult = Dict::Format('Change:AttName_SetTo_NewValue_PreviousValue_OldValue', $sAttName, $sNewValue, $sOldValue);
|
||||
if (strlen($sOldValue) == 0)
|
||||
{
|
||||
$sResult = Dict::Format('Change:AttName_SetTo', $sAttName, $sNewValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
$sResult = Dict::Format('Change:AttName_SetTo_NewValue_PreviousValue_OldValue', $sAttName, $sNewValue, $sOldValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif($bIsHtml && $oAttDef->IsExternalKey())
|
||||
@@ -241,6 +248,14 @@ class CMDBChangeOpSetAttributeScalar extends CMDBChangeOpSetAttribute
|
||||
$sFrom = MetaModel::GetHyperLink($sTargetClass, $sOldValue);
|
||||
$sTo = MetaModel::GetHyperLink($sTargetClass, $sNewValue);
|
||||
$sResult = "$sAttName set to $sTo (previous: $sFrom)";
|
||||
if (strlen($sFrom) == 0)
|
||||
{
|
||||
$sResult = Dict::Format('Change:AttName_SetTo', $sAttName, $sTo);
|
||||
}
|
||||
else
|
||||
{
|
||||
$sResult = Dict::Format('Change:AttName_SetTo_NewValue_PreviousValue_OldValue', $sAttName, $sTo, $sFrom);
|
||||
}
|
||||
}
|
||||
elseif ($oAttDef instanceOf AttributeBlob)
|
||||
{
|
||||
@@ -248,7 +263,14 @@ class CMDBChangeOpSetAttributeScalar extends CMDBChangeOpSetAttribute
|
||||
}
|
||||
else
|
||||
{
|
||||
$sResult = Dict::Format('Change:AttName_SetTo_NewValue_PreviousValue_OldValue', $sAttName, $sNewValue, $sOldValue);
|
||||
if (strlen($sOldValue) == 0)
|
||||
{
|
||||
$sResult = Dict::Format('Change:AttName_SetTo', $sAttName, $sNewValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
$sResult = Dict::Format('Change:AttName_SetTo_NewValue_PreviousValue_OldValue', $sAttName, $sNewValue, $sOldValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $sResult;
|
||||
@@ -475,4 +497,61 @@ class CMDBChangeOpSetAttributeText extends CMDBChangeOpSetAttribute
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Record the modification of a caselog (text)
|
||||
* since the caselog itself stores the history
|
||||
* of its entries, there is no need to duplicate
|
||||
* the text here
|
||||
*
|
||||
* @package iTopORM
|
||||
*/
|
||||
class CMDBChangeOpSetAttributeCaseLog extends CMDBChangeOpSetAttribute
|
||||
{
|
||||
public static function Init()
|
||||
{
|
||||
$aParams = array
|
||||
(
|
||||
"category" => "core/cmdb",
|
||||
"key_type" => "",
|
||||
"name_attcode" => "change",
|
||||
"state_attcode" => "",
|
||||
"reconc_keys" => array(),
|
||||
"db_table" => "priv_changeop_setatt_log",
|
||||
"db_key_field" => "id",
|
||||
"db_finalclass_field" => "",
|
||||
);
|
||||
MetaModel::Init_Params($aParams);
|
||||
MetaModel::Init_InheritAttributes();
|
||||
MetaModel::Init_AddAttribute(new AttributeInteger("lastentry", array("allowed_values"=>null, "sql"=>"lastentry", "default_value"=>0, "is_null_allowed"=>true, "depends_on"=>array())));
|
||||
|
||||
// Display lists
|
||||
MetaModel::Init_SetZListItems('details', array('date', 'userinfo', 'attcode')); // Attributes to be displayed for the complete details
|
||||
MetaModel::Init_SetZListItems('list', array('date', 'userinfo', 'attcode')); // Attributes to be displayed for a list
|
||||
}
|
||||
|
||||
/**
|
||||
* Describe (as a text string) the modifications corresponding to this change
|
||||
*/
|
||||
public function GetDescription()
|
||||
{
|
||||
// Temporary, until we change the options of GetDescription() -needs a more global revision
|
||||
$bIsHtml = true;
|
||||
|
||||
$sResult = '';
|
||||
$oTargetObjectClass = $this->Get('objclass');
|
||||
$oTargetObjectKey = $this->Get('objkey');
|
||||
$oTargetSearch = new DBObjectSearch($oTargetObjectClass);
|
||||
$oTargetSearch->AddCondition('id', $oTargetObjectKey, '=');
|
||||
|
||||
$oMonoObjectSet = new DBObjectSet($oTargetSearch);
|
||||
if (UserRights::IsActionAllowedOnAttribute($this->Get('objclass'), $this->Get('attcode'), UR_ACTION_READ, $oMonoObjectSet) == UR_ALLOWED_YES)
|
||||
{
|
||||
$oAttDef = MetaModel::GetAttributeDef($this->Get('objclass'), $this->Get('attcode'));
|
||||
$sAttName = $oAttDef->GetLabel();
|
||||
$sResult = Dict::Format('Change:AttName_EntryAdded', $sAttName);
|
||||
}
|
||||
return $sResult;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
@@ -59,6 +59,10 @@ require_once('dbobject.class.php');
|
||||
require_once('dbobjectsearch.class.php');
|
||||
require_once('dbobjectset.class.php');
|
||||
|
||||
require_once('backgroundprocess.inc.php');
|
||||
require_once('asynctask.class.inc.php');
|
||||
require_once('dbproperty.class.inc.php');
|
||||
|
||||
// db change tracking data model
|
||||
require_once('cmdbchange.class.inc.php');
|
||||
require_once('cmdbchangeop.class.inc.php');
|
||||
@@ -150,7 +154,7 @@ abstract class CMDBObject extends DBObject
|
||||
{
|
||||
$original = '';
|
||||
}
|
||||
$oMyChangeOp->Set("prevdata", $original);
|
||||
$oMyChangeOp->Set("prevstring", $original);
|
||||
$iId = $oMyChangeOp->DBInsertNoReload();
|
||||
}
|
||||
elseif ($oAttDef instanceOf AttributeBlob)
|
||||
@@ -173,6 +177,17 @@ abstract class CMDBObject extends DBObject
|
||||
$oMyChangeOp->Set("prevdata", $original);
|
||||
$iId = $oMyChangeOp->DBInsertNoReload();
|
||||
}
|
||||
elseif ($oAttDef instanceOf AttributeCaseLog)
|
||||
{
|
||||
$oMyChangeOp = MetaModel::NewObject("CMDBChangeOpSetAttributeCaseLog");
|
||||
$oMyChangeOp->Set("change", $oChange->GetKey());
|
||||
$oMyChangeOp->Set("objclass", get_class($this));
|
||||
$oMyChangeOp->Set("objkey", $this->GetKey());
|
||||
$oMyChangeOp->Set("attcode", $sAttCode);
|
||||
|
||||
$oMyChangeOp->Set("lastentry", $value->GetLatestEntryIndex());
|
||||
$iId = $oMyChangeOp->DBInsertNoReload();
|
||||
}
|
||||
elseif ($oAttDef instanceOf AttributeText)
|
||||
{
|
||||
// Data blobs
|
||||
@@ -185,6 +200,10 @@ abstract class CMDBObject extends DBObject
|
||||
if (array_key_exists($sAttCode, $aOrigValues))
|
||||
{
|
||||
$original = $aOrigValues[$sAttCode];
|
||||
if ($original instanceof ormCaseLog)
|
||||
{
|
||||
$original = $original->GetText();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -232,7 +251,7 @@ abstract class CMDBObject extends DBObject
|
||||
// and we decided that it was too risky to activate it
|
||||
// Anyhow, users willing to have a very strong security could set
|
||||
// skip_strong_security = 0, in the config file
|
||||
$bSkipStrongSecurity = utils::GetConfig()->Get('skip_strong_security');
|
||||
$bSkipStrongSecurity = MetaModel::GetConfig()->Get('skip_strong_security');
|
||||
}
|
||||
if (!$bSkipStrongSecurity)
|
||||
{
|
||||
@@ -350,28 +369,28 @@ abstract class CMDBObject extends DBObject
|
||||
return $ret;
|
||||
}
|
||||
|
||||
public function DBDelete()
|
||||
public function DBDelete(&$oDeletionPlan = null)
|
||||
{
|
||||
if(!self::$m_oCurrChange)
|
||||
{
|
||||
throw new CoreException("DBDelete() could not be used here, please use DBDeleteTracked() instead");
|
||||
}
|
||||
return $this->DBDeleteTracked_Internal();
|
||||
return $this->DBDeleteTracked_Internal($oDeletionPlan);
|
||||
}
|
||||
|
||||
public function DBDeleteTracked(CMDBChange $oChange, $bSkipStrongSecurity = null)
|
||||
public function DBDeleteTracked(CMDBChange $oChange, $bSkipStrongSecurity = null, &$oDeletionPlan = null)
|
||||
{
|
||||
$this->CheckUserRights($bSkipStrongSecurity, UR_ACTION_DELETE);
|
||||
|
||||
self::$m_oCurrChange = $oChange;
|
||||
$this->DBDeleteTracked_Internal();
|
||||
$this->DBDeleteTracked_Internal($oDeletionPlan);
|
||||
self::$m_oCurrChange = null;
|
||||
}
|
||||
|
||||
protected function DBDeleteTracked_Internal()
|
||||
protected function DBDeleteTracked_Internal(&$oDeletionPlan = null)
|
||||
{
|
||||
$prevkey = $this->GetKey();
|
||||
$ret = parent::DBDelete();
|
||||
$ret = parent::DBDelete($oDeletionPlan);
|
||||
$this->RecordObjDeletion(self::$m_oCurrChange, $prevkey);
|
||||
return $ret;
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ class CMDBSource
|
||||
self::$m_sDBUser = $sUser;
|
||||
self::$m_sDBPwd = $sPwd;
|
||||
self::$m_sDBName = $sSource;
|
||||
if (!self::$m_resDBLink = @mysql_pconnect($sServer, $sUser, $sPwd))
|
||||
if (!self::$m_resDBLink = mysql_connect($sServer, $sUser, $sPwd))
|
||||
{
|
||||
throw new MySQLException('Could not connect to the DB server', array('host'=>$sServer, 'user'=>$sUser));
|
||||
}
|
||||
@@ -84,6 +84,17 @@ class CMDBSource
|
||||
}
|
||||
}
|
||||
|
||||
public static function SetTimezone($sTimezone = null)
|
||||
{
|
||||
// Note: requires the installation of MySQL special tables,
|
||||
// otherwise, only 'SYSTEM' or "+10:00' may be specified which is NOT sufficient because of day light saving times
|
||||
if (!is_null($sTimezone))
|
||||
{
|
||||
$sQuotedTimezone = self::Quote($sTimezone);
|
||||
self::Query("SET time_zone = $sQuotedTimezone");
|
||||
}
|
||||
}
|
||||
|
||||
public static function ListDB()
|
||||
{
|
||||
$aDBs = self::QueryToCol('SHOW DATABASES', 'Database');
|
||||
@@ -243,6 +254,31 @@ class CMDBSource
|
||||
return false;
|
||||
}
|
||||
|
||||
public static function DeleteFrom($sSQLQuery)
|
||||
{
|
||||
self::Query($sSQLQuery);
|
||||
}
|
||||
|
||||
public static function QueryToScalar($sSql)
|
||||
{
|
||||
$result = mysql_query($sSql, self::$m_resDBLink);
|
||||
if (!$result)
|
||||
{
|
||||
throw new MySQLException('Failed to issue SQL query', array('query' => $sSql));
|
||||
}
|
||||
if ($aRow = mysql_fetch_array($result, MYSQL_BOTH))
|
||||
{
|
||||
$res = $aRow[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
mysql_free_result($result);
|
||||
throw new MySQLException('Found no result for query', array('query' => $sSql));
|
||||
}
|
||||
mysql_free_result($result);
|
||||
return $res;
|
||||
}
|
||||
|
||||
public static function QueryToArray($sSql)
|
||||
{
|
||||
$aData = array();
|
||||
@@ -533,6 +569,51 @@ class CMDBSource
|
||||
// so far, only one line...
|
||||
return implode(', ', $aRes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine the slave status of the server
|
||||
* @return bool true if the server is slave
|
||||
*/
|
||||
public static function IsSlaveServer()
|
||||
{
|
||||
try
|
||||
{
|
||||
$result = self::Query('SHOW SLAVE STATUS');
|
||||
}
|
||||
catch(MySQLException $e)
|
||||
{
|
||||
throw new CoreException("Current user not allowed to check the status", array('mysql_error' => $e->getMessage()));
|
||||
}
|
||||
|
||||
if (mysql_num_rows($result) == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Returns one single row anytime
|
||||
$aRow = mysql_fetch_array($result, MYSQL_ASSOC);
|
||||
mysql_free_result($result);
|
||||
|
||||
if (!isset($aRow['Slave_IO_Running']))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!isset($aRow['Slave_SQL_Running']))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// If at least one slave thread is running, then we consider that the slave is enabled
|
||||
if ($aRow['Slave_IO_Running'] == 'Yes')
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if ($aRow['Slave_SQL_Running'] == 'Yes')
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -14,10 +14,16 @@
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
define('ITOP_APPLICATION', 'iTop');
|
||||
define('ITOP_VERSION', '$ITOP_VERSION$');
|
||||
define('ITOP_REVISION', '$WCREV$');
|
||||
define('ITOP_BUILD_DATE', '$WCNOW$');
|
||||
|
||||
define('ACCESS_USER_WRITE', 1);
|
||||
define('ACCESS_ADMIN_WRITE', 2);
|
||||
define('ACCESS_FULL', ACCESS_USER_WRITE | ACCESS_ADMIN_WRITE);
|
||||
define('ACCESS_READONLY', 0);
|
||||
|
||||
/**
|
||||
* Configuration read/write
|
||||
*
|
||||
@@ -34,7 +40,7 @@ class ConfigException extends CoreException
|
||||
}
|
||||
|
||||
define ('DEFAULT_CHARACTER_SET', 'utf8');
|
||||
define ('DEFAULT_COLLATION', 'utf8_general_ci');
|
||||
define ('DEFAULT_COLLATION', 'utf8_unicode_ci');
|
||||
|
||||
define ('DEFAULT_LOG_GLOBAL', true);
|
||||
define ('DEFAULT_LOG_NOTIFICATION', true);
|
||||
@@ -70,6 +76,7 @@ class Config
|
||||
|
||||
protected $m_aAppModules;
|
||||
protected $m_aDataModels;
|
||||
protected $m_aWebServiceCategories;
|
||||
protected $m_aAddons;
|
||||
protected $m_aDictionaries;
|
||||
|
||||
@@ -88,7 +95,7 @@ class Config
|
||||
),
|
||||
'skip_check_ext_keys' => array(
|
||||
'type' => 'bool',
|
||||
'description' => 'Disable external key check when checking the value of attribtutes',
|
||||
'description' => 'Disable external key check when checking the value of attributes',
|
||||
'default' => false,
|
||||
'value' => false,
|
||||
'source_of_value' => '',
|
||||
@@ -110,6 +117,193 @@ class Config
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
),
|
||||
'session_name' => array(
|
||||
'type' => 'string',
|
||||
'description' => 'The name of the cookie used to store the PHP session id',
|
||||
'default' => 'iTop',
|
||||
'value' => '',
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => true,
|
||||
),
|
||||
'max_combo_length' => array(
|
||||
'type' => 'integer',
|
||||
'description' => 'The maximum number of elements in a drop-down list. If more then an autocomplete will be used',
|
||||
'default' => 50,
|
||||
'value' => 50,
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
),
|
||||
'min_autocomplete_chars' => array(
|
||||
'type' => 'integer',
|
||||
'description' => 'The minimum number of characters to type in order to trigger the "autocomplete" behavior',
|
||||
'default' => 3,
|
||||
'value' => 3,
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
),
|
||||
'allow_target_creation' => array(
|
||||
'type' => 'bool',
|
||||
'description' => 'Displays the + button on external keys to create target objects',
|
||||
'default' => true,
|
||||
'value' => true,
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
),
|
||||
// Levels that trigger a confirmation in the CSV import/synchro wizard
|
||||
'csv_import_min_object_confirmation' => array(
|
||||
'type' => 'integer',
|
||||
'description' => 'Minimum number of objects to check for the confirmation percentages',
|
||||
'default' => 3,
|
||||
'value' => 3,
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
),
|
||||
'csv_import_errors_percentage' => array(
|
||||
'type' => 'integer',
|
||||
'description' => 'Percentage of errors that trigger a confirmation in the CSV import',
|
||||
'default' => 50,
|
||||
'value' => 50,
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
),
|
||||
'csv_import_modifications_percentage' => array(
|
||||
'type' => 'integer',
|
||||
'description' => 'Percentage of modifications that trigger a confirmation in the CSV import',
|
||||
'default' => 50,
|
||||
'value' => 50,
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
),
|
||||
'csv_import_creations_percentage' => array(
|
||||
'type' => 'integer',
|
||||
'description' => 'Percentage of creations that trigger a confirmation in the CSV import',
|
||||
'default' => 50,
|
||||
'value' => 50,
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
),
|
||||
'access_mode' => array(
|
||||
'type' => 'integer',
|
||||
'description' => 'Combination of flags (ACCESS_USER_WRITE | ACCESS_ADMIN_WRITE, or ACCESS_FULL)',
|
||||
'default' => ACCESS_FULL,
|
||||
'value' => ACCESS_FULL,
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => true,
|
||||
),
|
||||
'access_message' => array(
|
||||
'type' => 'string',
|
||||
'description' => 'Message displayed to the users when there is any access restriction',
|
||||
'default' => 'iTop is temporarily frozen, please wait... (the admin team)',
|
||||
'value' => '',
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => true,
|
||||
),
|
||||
'online_help' => array(
|
||||
'type' => 'string',
|
||||
'description' => 'Hyperlink to the online-help web page',
|
||||
'default' => 'http://www.combodo.com/itop-help',
|
||||
'value' => '',
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => true,
|
||||
),
|
||||
'log_usage' => array(
|
||||
'type' => 'bool',
|
||||
'description' => 'Log the usage of the application (i.e. the date/time and the user name of each login)',
|
||||
'default' => false,
|
||||
'value' => false,
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
),
|
||||
'synchro_trace' => array(
|
||||
'type' => 'string',
|
||||
'description' => 'Synchronization details: none, display, save (includes \'display\')',
|
||||
'default' => 'none',
|
||||
'value' => 'none',
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => true,
|
||||
),
|
||||
'link_set_item_separator' => array(
|
||||
'type' => 'string',
|
||||
'description' => 'Link set from string: line separator',
|
||||
'default' => '|',
|
||||
'value' => '|',
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => true,
|
||||
),
|
||||
'link_set_attribute_separator' => array(
|
||||
'type' => 'string',
|
||||
'description' => 'Link set from string: attribute separator',
|
||||
'default' => ';',
|
||||
'value' => ';',
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => true,
|
||||
),
|
||||
'link_set_value_separator' => array(
|
||||
'type' => 'string',
|
||||
'description' => 'Link set from string: value separator (between the attcode and the value itself',
|
||||
'default' => ':',
|
||||
'value' => ':',
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => true,
|
||||
),
|
||||
'link_set_attribute_qualifier' => array(
|
||||
'type' => 'string',
|
||||
'description' => 'Link set from string: attribute qualifier (encloses both the attcode and the value)',
|
||||
'default' => "'",
|
||||
'value' => "'",
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => true,
|
||||
),
|
||||
'cron_max_execution_time' => array(
|
||||
'type' => 'integer',
|
||||
'description' => 'Duration (seconds) of the page cron.php, must be shorter than php setting max_execution_time and shorter than the web server response timeout',
|
||||
'default' => 600,
|
||||
'value' => 600,
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => true,
|
||||
),
|
||||
'cron_sleep' => array(
|
||||
'type' => 'integer',
|
||||
'description' => 'Duration (seconds) before cron.php checks again if something must be done',
|
||||
'default' => 2,
|
||||
'value' => 2,
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
),
|
||||
'email_asynchronous' => array(
|
||||
'type' => 'bool',
|
||||
'description' => 'If set, the emails are sent off line, which requires cron.php to be activated. Exception: some features like the email test utility will force the serialized mode',
|
||||
'default' => false,
|
||||
'value' => false,
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => true,
|
||||
),
|
||||
'apc_cache.enabled' => array(
|
||||
'type' => 'bool',
|
||||
'description' => 'If set, the APC cache is allowed (the PHP extension must also be active)',
|
||||
'default' => true,
|
||||
'value' => true,
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => true,
|
||||
),
|
||||
'apc_cache.query_ttl' => array(
|
||||
'type' => 'integer',
|
||||
'description' => 'Time to live set in APC for the prepared queries (seconds - 0 means no timeout)',
|
||||
'default' => 3600,
|
||||
'value' => 3600,
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => true,
|
||||
),
|
||||
'timezone' => array(
|
||||
'type' => 'string',
|
||||
'description' => 'Timezone (reference: http://php.net/manual/en/timezones.php). If empty, it will be left unchanged and MUST be explicitely configured in PHP',
|
||||
// examples... not used (nor 'description')
|
||||
'examples' => array('America/Sao_Paulo', 'America/New_York (standing for EDT)', 'America/Los_Angeles (standing for PDT)', 'Asia/Istanbul', 'Asia/Singapore', 'Africa/Casablanca', 'Australia/Sydney'),
|
||||
'default' => 'Europe/Paris',
|
||||
'value' => 'Europe/Paris',
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => true,
|
||||
),
|
||||
);
|
||||
|
||||
public function IsProperty($sPropCode)
|
||||
@@ -137,7 +331,6 @@ class Config
|
||||
default:
|
||||
throw new CoreException('Unknown type for setting', array('property' => $sPropCode, 'type' => $sType));
|
||||
}
|
||||
|
||||
$this->m_aSettings[$sPropCode]['value'] = $value;
|
||||
$this->m_aSettings[$sPropCode]['source_of_value'] = $sSourceDesc;
|
||||
|
||||
@@ -235,36 +428,51 @@ class Config
|
||||
$this->m_sFile = $sConfigFile;
|
||||
$this->m_aAppModules = array(
|
||||
// Some default modules, always present can be move to an official iTop Module later if needed
|
||||
'../application/transaction.class.inc.php',
|
||||
'../application/menunode.class.inc.php',
|
||||
'../application/user.preferences.class.inc.php',
|
||||
'../application/audit.rule.class.inc.php',
|
||||
// Romain - That's dirty, because those 3 classes are in fact part of the core
|
||||
'application/transaction.class.inc.php',
|
||||
'application/menunode.class.inc.php',
|
||||
'application/user.preferences.class.inc.php',
|
||||
'application/audit.rule.class.inc.php',
|
||||
// Romain - That's dirty, because those classes are in fact part of the core
|
||||
// but I needed those classes to be derived from cmdbAbstractObject
|
||||
// (to be managed via the GUI) and this class in not really known from
|
||||
// the core, PLUS I needed the includes to be there also for the setup
|
||||
// to create the tables.
|
||||
'../core/event.class.inc.php',
|
||||
'../core/action.class.inc.php',
|
||||
'../core/trigger.class.inc.php',
|
||||
'core/event.class.inc.php',
|
||||
'core/action.class.inc.php',
|
||||
'core/trigger.class.inc.php',
|
||||
'synchro/synchrodatasource.class.inc.php',
|
||||
);
|
||||
$this->m_aDataModels = array();
|
||||
$this->m_aWebServiceCategories = array(
|
||||
'webservices/webservices.basic.php',
|
||||
);
|
||||
$this->m_aAddons = array(
|
||||
// Default AddOn, always present can be moved to an official iTop Module later if needed
|
||||
'user rights' => '../addons/userrights/userrightsprofile.class.inc.php',
|
||||
'user rights' => 'addons/userrights/userrightsprofile.class.inc.php',
|
||||
);
|
||||
$this->m_aDictionaries = array(
|
||||
// Default dictionaries, always present can be moved to an official iTop Module later if needed
|
||||
'../dictionaries/dictionary.itop.core.php',
|
||||
'../dictionaries/dictionary.itop.ui.php', // Support for English
|
||||
'../dictionaries/fr.dictionary.itop.ui.php', // Support for French
|
||||
'../dictionaries/fr.dictionary.itop.core.php', // Support for French
|
||||
'../dictionaries/es_cr.dictionary.itop.ui.php', // Support for Spanish (from Costa Rica)
|
||||
'../dictionaries/es_cr.dictionary.itop.core.php', // Support for Spanish (from Costa Rica)
|
||||
'../dictionaries/de.dictionary.itop.ui.php', // Support for German
|
||||
'../dictionaries/de.dictionary.itop.core.php', // Support for German
|
||||
'dictionaries/dictionary.itop.core.php',
|
||||
'dictionaries/dictionary.itop.ui.php', // Support for English
|
||||
'dictionaries/fr.dictionary.itop.ui.php', // Support for French
|
||||
'dictionaries/fr.dictionary.itop.core.php', // Support for French
|
||||
'dictionaries/es_cr.dictionary.itop.ui.php', // Support for Spanish (from Costa Rica)
|
||||
'dictionaries/es_cr.dictionary.itop.core.php', // Support for Spanish (from Costa Rica)
|
||||
'dictionaries/de.dictionary.itop.ui.php', // Support for German
|
||||
'dictionaries/de.dictionary.itop.core.php', // Support for German
|
||||
'dictionaries/pt_br.dictionary.itop.ui.php', // Support for Brazilian Portuguese
|
||||
'dictionaries/pt_br.dictionary.itop.core.php', // Support for Brazilian Portuguese
|
||||
'dictionaries/ru.dictionary.itop.ui.php', // Support for Russian
|
||||
'dictionaries/ru.dictionary.itop.core.php', // Support for Russian
|
||||
'dictionaries/tr.dictionary.itop.ui.php', // Support for Turkish
|
||||
'dictionaries/tr.dictionary.itop.core.php', // Support for Turkish
|
||||
'dictionaries/zh.dictionary.itop.ui.php', // Support for Chinese
|
||||
'dictionaries/zh.dictionary.itop.core.php', // Support for Chinese
|
||||
'dictionaries/it.dictionary.itop.ui.php', // Support for Italian
|
||||
'dictionaries/it.dictionary.itop.core.php', // Support for Italian
|
||||
'dictionaries/hu.dictionary.itop.ui.php', // Support for Hungarian
|
||||
'dictionaries/hu.dictionary.itop.core.php', // Support for Hungarian
|
||||
);
|
||||
|
||||
foreach($this->m_aSettings as $sPropCode => $aSettingInfo)
|
||||
{
|
||||
$this->m_aSettings[$sPropCode]['value'] = $aSettingInfo['default'];
|
||||
@@ -337,7 +545,7 @@ class Config
|
||||
if (strlen($sNoise) > 0)
|
||||
{
|
||||
// Note: sNoise is an html output, but so far it was ok for me (e.g. showing the entire call stack)
|
||||
throw new ConfigException('Syntax error in configuration file', array('file' => $sConfigFile, 'error' => '<tt>'.htmlentities($sNoise).'</tt>'));
|
||||
throw new ConfigException('Syntax error in configuration file', array('file' => $sConfigFile, 'error' => '<tt>'.htmlentities($sNoise, ENT_QUOTES, 'UTF-8').'</tt>'));
|
||||
}
|
||||
|
||||
if (!isset($MySettings) || !is_array($MySettings))
|
||||
@@ -362,7 +570,8 @@ class Config
|
||||
}
|
||||
if (!array_key_exists('user rights', $MyModules['addons']))
|
||||
{
|
||||
$MyModules['addons']['user rights'] = '../addons/userrights/userrightsnull.class.inc.php';
|
||||
// Add one, by default
|
||||
$MyModules['addons']['user rights'] = '/addons/userrights/userrightsnull.class.inc.php';
|
||||
}
|
||||
if (!array_key_exists('dictionaries', $MyModules))
|
||||
{
|
||||
@@ -370,6 +579,10 @@ class Config
|
||||
}
|
||||
$this->m_aAppModules = $MyModules['application'];
|
||||
$this->m_aDataModels = $MyModules['business'];
|
||||
if (isset($MyModules['webservices']))
|
||||
{
|
||||
$this->m_aWebServiceCategories = $MyModules['webservices'];
|
||||
}
|
||||
$this->m_aAddons = $MyModules['addons'];
|
||||
$this->m_aDictionaries = $MyModules['dictionaries'];
|
||||
|
||||
@@ -418,22 +631,8 @@ class Config
|
||||
|
||||
protected function Verify()
|
||||
{
|
||||
foreach ($this->m_aAppModules as $sModule => $sToInclude)
|
||||
{
|
||||
$this->CheckFile('application module', $sToInclude);
|
||||
}
|
||||
foreach ($this->m_aDataModels as $sModule => $sToInclude)
|
||||
{
|
||||
$this->CheckFile('business model', $sToInclude);
|
||||
}
|
||||
foreach ($this->m_aAddons as $sModule => $sToInclude)
|
||||
{
|
||||
$this->CheckFile('addon module', $sToInclude);
|
||||
}
|
||||
foreach ($this->m_aDictionaries as $sModule => $sToInclude)
|
||||
{
|
||||
$this->CheckFile('dictionary', $sToInclude);
|
||||
}
|
||||
// Files are verified later on, just before using them -see MetaModel::Plugin()
|
||||
// (we have their final path at that point)
|
||||
}
|
||||
|
||||
public function GetModuleSetting($sModule, $sProperty, $defaultvalue = null)
|
||||
@@ -468,6 +667,15 @@ class Config
|
||||
$this->m_aDataModels = $aDataModels;
|
||||
}
|
||||
|
||||
public function GetWebServiceCategories()
|
||||
{
|
||||
return $this->m_aWebServiceCategories;
|
||||
}
|
||||
public function SetWebServiceCategories($aWebServiceCategories)
|
||||
{
|
||||
$this->m_aWebServiceCategories = $aWebServiceCategories;
|
||||
}
|
||||
|
||||
public function GetAddons()
|
||||
{
|
||||
return $this->m_aAddons;
|
||||
@@ -734,7 +942,74 @@ class Config
|
||||
{
|
||||
return is_writable($this->m_sFile);
|
||||
}
|
||||
public function GetLoadedFile()
|
||||
{
|
||||
return $this->m_sFile;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the configuration as an associative array
|
||||
* @return boolean True otherwise throws an Exception
|
||||
*/
|
||||
public function ToArray()
|
||||
{
|
||||
$aSettings = array();
|
||||
foreach($this->m_aSettings as $sPropCode => $aSettingInfo)
|
||||
{
|
||||
$aSettings[$sPropCode] = $aSettingInfo['value'];
|
||||
}
|
||||
$aSettings['db_host'] = $this->m_sDBHost;
|
||||
$aSettings['db_user'] = $this->m_sDBUser;
|
||||
$aSettings['db_pwd'] = $this->m_sDBPwd;
|
||||
$aSettings['db_name'] = $this->m_sDBName;
|
||||
$aSettings['db_subname'] = $this->m_sDBSubname;
|
||||
$aSettings['db_character_set'] = $this->m_sDBCharacterSet;
|
||||
$aSettings['db_collation'] = $this->m_sDBCollation;
|
||||
$aSettings['log_global'] = $this->m_bLogGlobal;
|
||||
$aSettings['log_notification'] = $this->m_bLogNotification;
|
||||
$aSettings['log_issue'] = $this->m_bLogIssue;
|
||||
$aSettings['log_web_service'] = $this->m_bLogWebService;
|
||||
$aSettings['min_display_limit'] = $this->m_iMinDisplayLimit;
|
||||
$aSettings['max_display_limit'] = $this->m_iMaxDisplayLimit;
|
||||
$aSettings['standard_reload_interval'] = $this->m_iStandardReloadInterval;
|
||||
$aSettings['fast_reload_interval'] = $this->m_iFastReloadInterval;
|
||||
$aSettings['secure_connection_required'] = $this->m_bSecureConnectionRequired;
|
||||
$aSettings['https_hyperlinks'] = $this->m_bHttpsHyperlinks;
|
||||
$aSettings['default_language'] = $this->m_sDefaultLanguage;
|
||||
$aSettings['allowed_login_types'] = $this->m_sAllowedLoginTypes;
|
||||
$aSettings['encryption_key'] = $this->m_sEncryptionKey;
|
||||
$aSettings['csv_import_charsets'] = $this->m_aCharsets;
|
||||
|
||||
foreach ($this->m_aModuleSettings as $sModule => $aProperties)
|
||||
{
|
||||
foreach ($aProperties as $sProperty => $value)
|
||||
{
|
||||
$aSettings['module_settings'][$sModule][$sProperty] = $value;
|
||||
}
|
||||
}
|
||||
foreach($this->m_aAppModules as $sFile)
|
||||
{
|
||||
$aSettings['application_list'][] = $sFile;
|
||||
}
|
||||
foreach($this->m_aDataModels as $sFile)
|
||||
{
|
||||
$aSettings['datamodel_list'][] = $sFile;
|
||||
}
|
||||
foreach($this->m_aWebServiceCategories as $sFile)
|
||||
{
|
||||
$aSettings['webservice_list'][] = $sFile;
|
||||
}
|
||||
foreach($this->m_aAddons as $sKey => $sFile)
|
||||
{
|
||||
$aSettings['addon_list'][] = $sFile;
|
||||
}
|
||||
foreach($this->m_aDictionaries as $sFile)
|
||||
{
|
||||
$aSettings['dictionary_list'][] = $sFile;
|
||||
}
|
||||
return $aSettings;
|
||||
}
|
||||
|
||||
/**
|
||||
* Write the configuration to a file (php format) that can be reloaded later
|
||||
* By default write to the same file that was specified when constructing the object
|
||||
@@ -772,7 +1047,7 @@ class Config
|
||||
$sSeenAs = $aSettingInfo['value'] ? '1' : '0';
|
||||
break;
|
||||
default:
|
||||
$sSeenAs = "'".$aSettingInfo['value']."'";
|
||||
$sSeenAs = "'".addslashes($aSettingInfo['value'])."'";
|
||||
}
|
||||
fwrite($hFile, "\t'$sPropCode' => $sSeenAs,\n");
|
||||
}
|
||||
@@ -835,6 +1110,12 @@ class Config
|
||||
fwrite($hFile, "\t\t'$sFile',\n");
|
||||
}
|
||||
fwrite($hFile, "\t),\n");
|
||||
fwrite($hFile, "\t'webservices' => array (\n");
|
||||
foreach($this->m_aWebServiceCategories as $sFile)
|
||||
{
|
||||
fwrite($hFile, "\t\t'$sFile',\n");
|
||||
}
|
||||
fwrite($hFile, "\t),\n");
|
||||
fwrite($hFile, "\t'addons' => array (\n");
|
||||
foreach($this->m_aAddons as $sKey => $sFile)
|
||||
{
|
||||
|
||||
@@ -40,6 +40,8 @@ define('evTEXTQUAL', 3); // used for escaping as well
|
||||
define('evOTHERCHAR', 4);
|
||||
define('evEND', 5);
|
||||
|
||||
define('NULL_VALUE', '<NULL>');
|
||||
|
||||
|
||||
/**
|
||||
* CSVParser
|
||||
@@ -82,6 +84,10 @@ class CSVParser
|
||||
{
|
||||
$sCell = $this->m_sCurrCell;
|
||||
}
|
||||
if ($sCell == NULL_VALUE)
|
||||
{
|
||||
$sCell = null;
|
||||
}
|
||||
|
||||
if (!is_null($aFieldMap))
|
||||
{
|
||||
@@ -178,6 +184,7 @@ class CSVParser
|
||||
{
|
||||
if ($i == $iDataLength)
|
||||
{
|
||||
$c = null;
|
||||
$iEvent = evEND;
|
||||
}
|
||||
else
|
||||
|
||||
@@ -24,6 +24,8 @@
|
||||
*/
|
||||
|
||||
require_once('metamodel.class.php');
|
||||
require_once('deletionplan.class.inc.php');
|
||||
|
||||
|
||||
/**
|
||||
* A persistent object, as defined by the metamodel
|
||||
@@ -34,27 +36,37 @@ abstract class DBObject
|
||||
{
|
||||
private static $m_aMemoryObjectsByClass = array();
|
||||
|
||||
private static $m_aBulkInsertItems = array(); // class => array of ('table' => array of (array of <sql_value>))
|
||||
private static $m_aBulkInsertCols = array(); // class => array of ('table' => array of <sql_column>)
|
||||
private static $m_bBulkInsert = false;
|
||||
|
||||
private $m_bIsInDB = false; // true IIF the object is mapped to a DB record
|
||||
private $m_iKey = null;
|
||||
private $m_aCurrValues = array();
|
||||
protected $m_aOrigValues = array();
|
||||
|
||||
protected $m_aExtendedData = null;
|
||||
|
||||
private $m_bDirty = false; // Means: "a modification is ongoing"
|
||||
// The object may have incorrect external keys, then any attempt of reload must be avoided
|
||||
private $m_bCheckStatus = null; // Means: the object has been verified and is consistent with integrity rules
|
||||
// if null, then the check has to be performed again to know the status
|
||||
protected $m_bSecurityIssue = null;
|
||||
protected $m_aCheckIssues = null;
|
||||
protected $m_aDeleteIssues = null;
|
||||
|
||||
protected $m_aAsArgs = null; // The current object as a standard argument (cache)
|
||||
|
||||
private $m_bFullyLoaded = false; // Compound objects can be partially loaded
|
||||
private $m_aLoadedAtt = array(); // Compound objects can be partially loaded, array of sAttCode
|
||||
protected $m_oMasterReplicaSet = null; // Set of SynchroReplica related to this object
|
||||
|
||||
// Use the MetaModel::NewObject to build an object (do we have to force it?)
|
||||
public function __construct($aRow = null, $sClassAlias = '')
|
||||
public function __construct($aRow = null, $sClassAlias = '', $aExtendedDataSpec = null)
|
||||
{
|
||||
if (!empty($aRow))
|
||||
{
|
||||
$this->FromRow($aRow, $sClassAlias);
|
||||
$this->FromRow($aRow, $sClassAlias, $aExtendedDataSpec);
|
||||
$this->m_bFullyLoaded = $this->IsFullyLoaded();
|
||||
return;
|
||||
}
|
||||
@@ -98,12 +110,13 @@ abstract class DBObject
|
||||
// Returns an Id for memory objects
|
||||
static protected function GetNextTempId($sClass)
|
||||
{
|
||||
if (!array_key_exists($sClass, self::$m_aMemoryObjectsByClass))
|
||||
$sRootClass = MetaModel::GetRootClass($sClass);
|
||||
if (!array_key_exists($sRootClass, self::$m_aMemoryObjectsByClass))
|
||||
{
|
||||
self::$m_aMemoryObjectsByClass[$sClass] = 0;
|
||||
self::$m_aMemoryObjectsByClass[$sRootClass] = 0;
|
||||
}
|
||||
self::$m_aMemoryObjectsByClass[$sClass]++;
|
||||
return (- self::$m_aMemoryObjectsByClass[$sClass]);
|
||||
self::$m_aMemoryObjectsByClass[$sRootClass]++;
|
||||
return (- self::$m_aMemoryObjectsByClass[$sRootClass]);
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
@@ -144,7 +157,7 @@ abstract class DBObject
|
||||
protected function Reload()
|
||||
{
|
||||
assert($this->m_bIsInDB);
|
||||
$aRow = MetaModel::MakeSingleRow(get_class($this), $this->m_iKey);
|
||||
$aRow = MetaModel::MakeSingleRow(get_class($this), $this->m_iKey, false/*, $this->m_bAllowAllData*/);
|
||||
if (empty($aRow))
|
||||
{
|
||||
throw new CoreException("Failed to reload object of class '".get_class($this)."', id = ".$this->m_iKey);
|
||||
@@ -181,7 +194,7 @@ abstract class DBObject
|
||||
$this->m_bFullyLoaded = true;
|
||||
}
|
||||
|
||||
protected function FromRow($aRow, $sClassAlias = '')
|
||||
protected function FromRow($aRow, $sClassAlias = '', $aExtendedDataSpec = null)
|
||||
{
|
||||
if (strlen($sClassAlias) == 0)
|
||||
{
|
||||
@@ -204,15 +217,20 @@ abstract class DBObject
|
||||
// #@# Bug ?
|
||||
throw new CoreException("Missing key for class '".get_class($this)."'");
|
||||
}
|
||||
else
|
||||
|
||||
$iPKey = $aRow[$sKeyField];
|
||||
if (!self::IsValidPKey($iPKey))
|
||||
{
|
||||
$iPKey = $aRow[$sKeyField];
|
||||
if (!self::IsValidPKey($iPKey))
|
||||
if (is_null($iPKey))
|
||||
{
|
||||
throw new CoreWarning("An object id must be an integer value ($iPKey)");
|
||||
throw new CoreException("Missing object id in query result (found null)");
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new CoreException("An object id must be an integer value ($iPKey)");
|
||||
}
|
||||
$this->m_iKey = $iPKey;
|
||||
}
|
||||
$this->m_iKey = $iPKey;
|
||||
|
||||
// Build the object from an array of "attCode"=>"value")
|
||||
//
|
||||
@@ -230,6 +248,7 @@ abstract class DBObject
|
||||
// Take care: the function isset will return false in case the value is null,
|
||||
// which is something that could happen on open joins
|
||||
$sAttRef = $sClassAlias.$sAttCode;
|
||||
|
||||
if (array_key_exists($sAttRef, $aRow))
|
||||
{
|
||||
$value = $oAttDef->FromSQLToValue($aRow, $sAttRef);
|
||||
@@ -244,6 +263,20 @@ abstract class DBObject
|
||||
$bFullyLoaded = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Load extended data
|
||||
if ($aExtendedDataSpec != null)
|
||||
{
|
||||
$aExtendedDataSpec['table'];
|
||||
foreach($aExtendedDataSpec['fields'] as $sColumn)
|
||||
{
|
||||
$sColRef = $sClassAlias.'_extdata_'.$sColumn;
|
||||
if (array_key_exists($sColRef, $aRow))
|
||||
{
|
||||
$this->m_aExtendedData[$sColumn] = $aRow[$sColRef];
|
||||
}
|
||||
}
|
||||
}
|
||||
return $bFullyLoaded;
|
||||
}
|
||||
|
||||
@@ -310,7 +343,7 @@ abstract class DBObject
|
||||
}
|
||||
}
|
||||
|
||||
$realvalue = $oAttDef->MakeRealValue($value);
|
||||
$realvalue = $oAttDef->MakeRealValue($value, $this);
|
||||
$this->m_aCurrValues[$sAttCode] = $realvalue;
|
||||
|
||||
// The object has changed, reset caches
|
||||
@@ -321,6 +354,12 @@ abstract class DBObject
|
||||
$this->RegisterAsDirty();
|
||||
}
|
||||
|
||||
public function GetLabel($sAttCode)
|
||||
{
|
||||
$oAttDef = MetaModel::GetAttributeDef(get_class($this), $sAttCode);
|
||||
return $oAttDef->GetLabel();
|
||||
}
|
||||
|
||||
public function Get($sAttCode)
|
||||
{
|
||||
if (!array_key_exists($sAttCode, MetaModel::ListAttributeDefs(get_class($this))))
|
||||
@@ -332,7 +371,12 @@ abstract class DBObject
|
||||
// #@# non-scalar attributes.... handle that differently
|
||||
$this->Reload();
|
||||
}
|
||||
return $this->m_aCurrValues[$sAttCode];
|
||||
$value = $this->m_aCurrValues[$sAttCode];
|
||||
if ($value instanceof DBObjectSet)
|
||||
{
|
||||
$value->Rewind();
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
public function GetOriginal($sAttCode)
|
||||
@@ -344,6 +388,14 @@ abstract class DBObject
|
||||
return $this->m_aOrigValues[$sAttCode];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns data loaded by the mean of a dynamic and explicit JOIN
|
||||
*/
|
||||
public function GetExtendedData()
|
||||
{
|
||||
return $this->m_aExtendedData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the value of an external field by (re)loading the object
|
||||
* corresponding to the external key and getting the value from it
|
||||
@@ -366,23 +418,25 @@ abstract class DBObject
|
||||
}
|
||||
}
|
||||
|
||||
// Compute scalar attributes that depend on any other type of attribute
|
||||
public function DoComputeValues()
|
||||
public function ComputeValues()
|
||||
{
|
||||
if (is_callable(array($this, 'ComputeValues')))
|
||||
}
|
||||
|
||||
// Compute scalar attributes that depend on any other type of attribute
|
||||
final public function DoComputeValues()
|
||||
{
|
||||
// TODO - use a flag rather than checking the call stack -> this will certainly accelerate things
|
||||
|
||||
// First check that we are not currently computing the fields
|
||||
// (yes, we need to do some things like Set/Get to compute the fields which will in turn trigger the update...)
|
||||
foreach (debug_backtrace() as $aCallInfo)
|
||||
{
|
||||
// First check that we are not currently computing the fields
|
||||
// (yes, we need to do some things like Set/Get to compute the fields which will in turn trigger the update...)
|
||||
foreach (debug_backtrace() as $aCallInfo)
|
||||
{
|
||||
if (!array_key_exists("class", $aCallInfo)) continue;
|
||||
if ($aCallInfo["class"] != get_class($this)) continue;
|
||||
if ($aCallInfo["function"] != "ComputeValues") continue;
|
||||
return; //skip!
|
||||
}
|
||||
|
||||
$this->ComputeValues();
|
||||
if (!array_key_exists("class", $aCallInfo)) continue;
|
||||
if ($aCallInfo["class"] != get_class($this)) continue;
|
||||
if ($aCallInfo["function"] != "ComputeValues") continue;
|
||||
return; //skip!
|
||||
}
|
||||
$this->ComputeValues();
|
||||
}
|
||||
|
||||
public function GetAsHTML($sAttCode)
|
||||
@@ -390,21 +444,13 @@ abstract class DBObject
|
||||
$sClass = get_class($this);
|
||||
$oAtt = MetaModel::GetAttributeDef($sClass, $sAttCode);
|
||||
|
||||
$aExtKeyFriends = MetaModel::GetExtKeyFriends($sClass, $sAttCode);
|
||||
if (count($aExtKeyFriends) > 0)
|
||||
if ($oAtt->IsExternalKey(EXTKEY_ABSOLUTE))
|
||||
{
|
||||
// This attribute is an ext key (in this class or in another class)
|
||||
// The corresponding value is an id of the remote object
|
||||
// Let's try to use the corresponding external fields for a sexy display
|
||||
|
||||
$aAvailableFields = array();
|
||||
foreach ($aExtKeyFriends as $sDispAttCode => $oExtField)
|
||||
{
|
||||
$aAvailableFields[$oExtField->GetExtAttCode()] = $oExtField->GetAsHTML($this->Get($oExtField->GetCode()));
|
||||
}
|
||||
|
||||
//return $this->Get($sAttCode.'_friendlyname');
|
||||
$sTargetClass = $oAtt->GetTargetClass(EXTKEY_ABSOLUTE);
|
||||
return $this->MakeHyperLink($sTargetClass, $this->Get($sAttCode), $aAvailableFields);
|
||||
$iTargetKey = $this->Get($sAttCode);
|
||||
$sLabel = $this->Get($sAttCode.'_friendlyname');
|
||||
return $this->MakeHyperLink($sTargetClass, $iTargetKey, $sLabel);
|
||||
}
|
||||
|
||||
// That's a standard attribute (might be an ext field or a direct field, etc.)
|
||||
@@ -436,23 +482,7 @@ abstract class DBObject
|
||||
}
|
||||
else
|
||||
{
|
||||
$aAvailableFields = array();
|
||||
// retrieve the "external fields" linked to this external key
|
||||
foreach (MetaModel::GetExternalFields(get_class($this), $sAttCode) as $oExtField)
|
||||
{
|
||||
$aAvailableFields[$oExtField->GetExtAttCode()] = $oExtField->GetAsHTML($this->Get($oExtField->GetCode()));
|
||||
}
|
||||
// Use the "name" of the target class as the label of the hyperlink
|
||||
// unless it's not available in the external fields...
|
||||
$sExtClassNameAtt = MetaModel::GetNameAttributeCode($sTargetClass);
|
||||
if (isset($aAvailableFields[$sExtClassNameAtt]))
|
||||
{
|
||||
$sEditValue = $aAvailableFields[$sExtClassNameAtt];
|
||||
}
|
||||
else
|
||||
{
|
||||
$sEditValue = implode(' / ', $aAvailableFields);
|
||||
}
|
||||
$sEditValue = $this->Get($sAttCode.'_friendlyname');
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -465,26 +495,89 @@ abstract class DBObject
|
||||
public function GetAsXML($sAttCode)
|
||||
{
|
||||
$oAtt = MetaModel::GetAttributeDef(get_class($this), $sAttCode);
|
||||
return $oAtt->GetAsXML($this->Get($sAttCode));
|
||||
return $oAtt->GetAsXML($this->Get($sAttCode), $this);
|
||||
}
|
||||
|
||||
public function GetAsCSV($sAttCode, $sSeparator = ',', $sTextQualifier = '"')
|
||||
{
|
||||
$oAtt = MetaModel::GetAttributeDef(get_class($this), $sAttCode);
|
||||
return $oAtt->GetAsCSV($this->Get($sAttCode), $sSeparator, $sTextQualifier);
|
||||
return $oAtt->GetAsCSV($this->Get($sAttCode), $sSeparator, $sTextQualifier, $this);
|
||||
}
|
||||
|
||||
protected static function MakeHyperLink($sObjClass, $sObjKey, $aAvailableFields)
|
||||
public function GetOriginalAsHTML($sAttCode)
|
||||
{
|
||||
if ($sObjKey == 0) return '<em>undefined</em>';
|
||||
$oAtt = MetaModel::GetAttributeDef(get_class($this), $sAttCode);
|
||||
return $oAtt->GetAsHTML($this->GetOriginal($sAttCode), $this);
|
||||
}
|
||||
|
||||
return MetaModel::GetName($sObjClass)."::$sObjKey";
|
||||
public function GetOriginalAsXML($sAttCode)
|
||||
{
|
||||
$oAtt = MetaModel::GetAttributeDef(get_class($this), $sAttCode);
|
||||
return $oAtt->GetAsXML($this->GetOriginal($sAttCode), $this);
|
||||
}
|
||||
|
||||
public function GetOriginalAsCSV($sAttCode, $sSeparator = ',', $sTextQualifier = '"')
|
||||
{
|
||||
$oAtt = MetaModel::GetAttributeDef(get_class($this), $sAttCode);
|
||||
return $oAtt->GetAsCSV($this->GetOriginal($sAttCode), $sSeparator, $sTextQualifier, $this);
|
||||
}
|
||||
|
||||
protected static function MakeHyperLink($sObjClass, $sObjKey, $sLabel = '')
|
||||
{
|
||||
if ($sObjKey <= 0) return '<em>'.Dict::S('UI:UndefinedObject').'</em>'; // Objects built in memory have negative IDs
|
||||
|
||||
$oAppContext = new ApplicationContext();
|
||||
$sPage = self::ComputeUIPage($sObjClass);
|
||||
$sAbsoluteUrl = utils::GetAbsoluteUrlPath();
|
||||
|
||||
// Safety net
|
||||
//
|
||||
if (empty($sLabel))
|
||||
{
|
||||
// If the object if not issued from a query but constructed programmatically
|
||||
// the label may be empty. In this case run a query to get the object's friendly name
|
||||
$oTmpObj = MetaModel::GetObject($sObjClass, $sObjKey);
|
||||
$sLabel = $oTmpObj->GetName();
|
||||
//$sLabel = MetaModel::GetName($sObjClass)." #$sObjKey";
|
||||
}
|
||||
$sHint = MetaModel::GetName($sObjClass)."::$sObjKey";
|
||||
return "<a href=\"{$sAbsoluteUrl}{$sPage}?operation=details&class=$sObjClass&id=$sObjKey&".$oAppContext->GetForLink()."\" title=\"$sHint\">$sLabel</a>";
|
||||
}
|
||||
|
||||
public function GetHyperlink()
|
||||
{
|
||||
$aAvailableFields[MetaModel::GetNameAttributeCode(get_class($this))] = $this->GetName();
|
||||
return $this->MakeHyperLink(get_class($this), $this->GetKey(), $aAvailableFields);
|
||||
if ($this->IsNew()) return '<em>'.Dict::S('UI:UndefinedObject').'</em>'; // Objects built in memory have negative IDs
|
||||
|
||||
$oAppContext = new ApplicationContext();
|
||||
$sPage = $this->GetUIPage();
|
||||
$sAbsoluteUrl = utils::GetAbsoluteUrlPath();
|
||||
$sObjClass = get_class($this);
|
||||
$sObjKey = $this->GetKey();
|
||||
|
||||
$sLabel = $this->GetName();
|
||||
$sHint = MetaModel::GetName($sObjClass)."::$sObjKey";
|
||||
return "<a href=\"{$sAbsoluteUrl}{$sPage}?operation=details&class=$sObjClass&id=$sObjKey&".$oAppContext->GetForLink()."\" title=\"$sHint\">$sLabel</a>";
|
||||
}
|
||||
|
||||
public static function ComputeUIPage($sClass)
|
||||
{
|
||||
static $aUIPagesCache = array(); // Cache to store the php page used to display each class of object
|
||||
if (!isset($aUIPagesCache[$sClass]))
|
||||
{
|
||||
$UIPage = false;
|
||||
if (is_callable("$sClass::GetUIPage"))
|
||||
{
|
||||
$UIPage = eval("return $sClass::GetUIPage();"); // May return false in case of error
|
||||
}
|
||||
$aUIPagesCache[$sClass] = $UIPage === false ? './UI.php' : $UIPage;
|
||||
}
|
||||
$sPage = $aUIPagesCache[$sClass];
|
||||
return $sPage;
|
||||
}
|
||||
|
||||
public static function GetUIPage()
|
||||
{
|
||||
return 'UI.php';
|
||||
}
|
||||
|
||||
|
||||
@@ -523,15 +616,23 @@ abstract class DBObject
|
||||
|
||||
public function GetName()
|
||||
{
|
||||
$sNameAttCode = MetaModel::GetNameAttributeCode(get_class($this));
|
||||
if (empty($sNameAttCode))
|
||||
{
|
||||
return $this->m_iKey;
|
||||
}
|
||||
else
|
||||
{
|
||||
return $this->Get($sNameAttCode);
|
||||
$aNameSpec = MetaModel::GetNameSpec(get_class($this));
|
||||
$sFormat = $aNameSpec[0];
|
||||
$aAttributes = $aNameSpec[1];
|
||||
|
||||
$aValues = array();
|
||||
foreach ($aAttributes as $sAttCode)
|
||||
{
|
||||
if (empty($sAttCode))
|
||||
{
|
||||
$aValues[] = $this->m_iKey;
|
||||
}
|
||||
else
|
||||
{
|
||||
$aValues[] = $this->Get($sAttCode);
|
||||
}
|
||||
}
|
||||
return vsprintf($sFormat, $aValues);
|
||||
}
|
||||
|
||||
public function GetState()
|
||||
@@ -580,7 +681,7 @@ abstract class DBObject
|
||||
* @param string $sAttCode The code of the attribute
|
||||
* @return integer Flags: the binary combination of the flags applicable to this attribute
|
||||
*/
|
||||
public function GetAttributeFlags($sAttCode)
|
||||
public function GetAttributeFlags($sAttCode, &$aReasons = array())
|
||||
{
|
||||
$iFlags = 0; // By default (if no life cycle) no flag at all
|
||||
$sStateAttCode = MetaModel::GetStateAttributeCode(get_class($this));
|
||||
@@ -588,7 +689,9 @@ abstract class DBObject
|
||||
{
|
||||
$iFlags = MetaModel::GetAttributeFlags(get_class($this), $this->Get($sStateAttCode), $sAttCode);
|
||||
}
|
||||
return $iFlags;
|
||||
$aReasons = array();
|
||||
$iSynchroFlags = $this->GetSynchroReplicaFlags($sAttCode, $aReasons);
|
||||
return $iFlags | $iSynchroFlags; // Combine both sets of flags
|
||||
}
|
||||
|
||||
// check if the given (or current) value is suitable for the attribute
|
||||
@@ -669,7 +772,10 @@ abstract class DBObject
|
||||
// a displayable error is returned
|
||||
public function DoCheckToWrite()
|
||||
{
|
||||
$this->DoComputeValues();
|
||||
|
||||
$this->m_aCheckIssues = array();
|
||||
$aChanges = $this->ListChanges();
|
||||
|
||||
foreach(MetaModel::ListAttributeDefs(get_class($this)) as $sAttCode=>$oAttDef)
|
||||
{
|
||||
@@ -692,6 +798,27 @@ abstract class DBObject
|
||||
// $res contains the error description
|
||||
$this->m_aCheckIssues[] = "Consistency rules not followed: $res";
|
||||
}
|
||||
|
||||
// Synchronization: are we attempting to modify an attribute for which an external source is master?
|
||||
//
|
||||
if ($this->m_bIsInDB && $this->InSyncScope() && (count($aChanges) > 0))
|
||||
{
|
||||
foreach($aChanges as $sAttCode => $value)
|
||||
{
|
||||
$iFlags = $this->GetSynchroReplicaFlags($sAttCode, $aReasons);
|
||||
if ($iFlags & OPT_ATT_SLAVE)
|
||||
{
|
||||
// Note: $aReasonInfo['name'] could be reported (the task owning the attribute)
|
||||
$oAttDef = MetaModel::GetAttributeDef(get_class($this), $sAttCode);
|
||||
$sAttLabel = $oAttDef->GetLabel();
|
||||
foreach($aReasons as $aReasonInfo)
|
||||
{
|
||||
// Todo: associate the attribute code with the error
|
||||
$this->m_aCheckIssues[] = Dict::Format('UI:AttemptingToSetASlaveAttribute_Name', $sAttLabel);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final public function CheckToWrite()
|
||||
@@ -714,16 +841,71 @@ abstract class DBObject
|
||||
$this->m_bCheckStatus = false;
|
||||
}
|
||||
}
|
||||
return array($this->m_bCheckStatus, $this->m_aCheckIssues);
|
||||
return array($this->m_bCheckStatus, $this->m_aCheckIssues, $this->m_bSecurityIssue);
|
||||
}
|
||||
|
||||
// check if it is allowed to delete the existing object from the database
|
||||
// a displayable error is returned
|
||||
public function CheckToDelete()
|
||||
protected function DoCheckToDelete(&$oDeletionPlan)
|
||||
{
|
||||
return true;
|
||||
$this->m_aDeleteIssues = array(); // Ok
|
||||
|
||||
if ($this->InSyncScope())
|
||||
{
|
||||
$oReplicaSet = $this->GetMasterReplica();
|
||||
if ($oReplicaSet->Count() > 0)
|
||||
{
|
||||
while($aData = $oReplicaSet->FetchAssoc())
|
||||
{
|
||||
$oDataSource = $aData['datasource'];
|
||||
$oReplica = $aData['replica'];
|
||||
|
||||
$oDeletionPlan->AddToDelete($oReplica, DEL_SILENT);
|
||||
|
||||
if ($oDataSource->GetKey() == SynchroDataSource::GetCurrentTaskId())
|
||||
{
|
||||
// The current task has the right to delete the object
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($oReplica->Get('status_dest_creator') != 1)
|
||||
{
|
||||
// The object is not owned by the task
|
||||
continue;
|
||||
}
|
||||
|
||||
$sLink = $oDataSource->GetName();
|
||||
$sUserDeletePolicy = $oDataSource->Get('user_delete_policy');
|
||||
switch($sUserDeletePolicy)
|
||||
{
|
||||
case 'nobody':
|
||||
$this->m_aDeleteIssues[] = Dict::Format('Core:Synchro:TheObjectCannotBeDeletedByUser_Source', $sLink);
|
||||
break;
|
||||
|
||||
case 'administrators':
|
||||
if (!UserRights::IsAdministrator())
|
||||
{
|
||||
$this->m_aDeleteIssues[] = Dict::Format('Core:Synchro:TheObjectCannotBeDeletedByUser_Source', $sLink);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'everybody':
|
||||
default:
|
||||
// Ok
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final public function CheckToDelete(&$oDeletionPlan)
|
||||
{
|
||||
$this->MakeDeletionPlan($oDeletionPlan);
|
||||
$oDeletionPlan->ComputeResults();
|
||||
return (!$oDeletionPlan->FoundStopper());
|
||||
}
|
||||
|
||||
protected function ListChangedValues(array $aProposal)
|
||||
{
|
||||
$aDelta = array();
|
||||
@@ -736,9 +918,9 @@ abstract class DBObject
|
||||
}
|
||||
elseif(is_object($proposedValue))
|
||||
{
|
||||
$oLinkAttDef = MetaModel::GetAttributeDef(get_class($this), $sAtt);
|
||||
// The value is an object, the comparison is not strict
|
||||
// #@# todo - should be even less strict => add verb on AttributeDefinition: Compare($a, $b)
|
||||
if ($this->m_aOrigValues[$sAtt] != $proposedValue)
|
||||
if (!$oLinkAttDef->Equals($proposedValue, $this->m_aOrigValues[$sAtt]))
|
||||
{
|
||||
$aDelta[$sAtt] = $proposedValue;
|
||||
}
|
||||
@@ -763,16 +945,58 @@ abstract class DBObject
|
||||
// Returns an array of attname => currentvalue
|
||||
public function ListChanges()
|
||||
{
|
||||
return $this->ListChangedValues($this->m_aCurrValues);
|
||||
if ($this->m_bIsInDB)
|
||||
{
|
||||
return $this->ListChangedValues($this->m_aCurrValues);
|
||||
}
|
||||
else
|
||||
{
|
||||
return $this->m_aCurrValues;
|
||||
}
|
||||
}
|
||||
|
||||
// Tells whether or not an object was modified
|
||||
// Tells whether or not an object was modified since last read (ie: does it differ from the DB ?)
|
||||
public function IsModified()
|
||||
{
|
||||
$aChanges = $this->ListChanges();
|
||||
return (count($aChanges) != 0);
|
||||
}
|
||||
|
||||
public function Equals($oSibling)
|
||||
{
|
||||
if (get_class($oSibling) != get_class($this))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if ($this->GetKey() != $oSibling->GetKey())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if ($this->m_bIsInDB)
|
||||
{
|
||||
// If one has changed, then consider them as being different
|
||||
if ($this->IsModified() || $oSibling->IsModified())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Todo - implement this case (loop on every attribute)
|
||||
//foreach(MetaModel::ListAttributeDefs(get_class($this) as $sAttCode => $oAttDef)
|
||||
//{
|
||||
//if (!isset($this->m_CurrentValues[$sAttCode])) continue;
|
||||
//if (!isset($this->m_CurrentValues[$sAttCode])) continue;
|
||||
//if (!$oAttDef->Equals($this->m_CurrentValues[$sAttCode], $oSibling->m_CurrentValues[$sAttCode]))
|
||||
//{
|
||||
//return false;
|
||||
//}
|
||||
//}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// used both by insert/update
|
||||
private function DBWriteLinks()
|
||||
{
|
||||
@@ -811,6 +1035,35 @@ abstract class DBObject
|
||||
}
|
||||
}
|
||||
|
||||
// Note: this is experimental - it was designed to speed up the setup of iTop
|
||||
// Known limitations:
|
||||
// - does not work with multi-table classes (issue with the unique id to maintain in several tables)
|
||||
// - the id of the object is not updated
|
||||
static public final function BulkInsertStart()
|
||||
{
|
||||
self::$m_bBulkInsert = true;
|
||||
}
|
||||
|
||||
static public final function BulkInsertFlush()
|
||||
{
|
||||
if (!self::$m_bBulkInsert) return;
|
||||
|
||||
foreach(self::$m_aBulkInsertCols as $sClass => $aTables)
|
||||
{
|
||||
foreach ($aTables as $sTable => $sColumns)
|
||||
{
|
||||
$sValues = implode(', ', self::$m_aBulkInsertItems[$sClass][$sTable]);
|
||||
$sInsertSQL = "INSERT INTO `$sTable` ($sColumns) VALUES $sValues";
|
||||
$iNewKey = CMDBSource::InsertInto($sInsertSQL);
|
||||
}
|
||||
}
|
||||
|
||||
// Reset
|
||||
self::$m_aBulkInsertItems = array();
|
||||
self::$m_aBulkInsertCols = array();
|
||||
self::$m_bBulkInsert = false;
|
||||
}
|
||||
|
||||
private function DBInsertSingleTable($sTableClass)
|
||||
{
|
||||
$sTable = MetaModel::DBGetTable($sTableClass);
|
||||
@@ -844,9 +1097,28 @@ abstract class DBObject
|
||||
|
||||
if (count($aValuesToWrite) == 0) return false;
|
||||
|
||||
$sInsertSQL = "INSERT INTO `$sTable` (".join(",", $aFieldsToWrite).") VALUES (".join(", ", $aValuesToWrite).")";
|
||||
|
||||
$iNewKey = CMDBSource::InsertInto($sInsertSQL);
|
||||
if (MetaModel::DBIsReadOnly())
|
||||
{
|
||||
$iNewKey = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (self::$m_bBulkInsert)
|
||||
{
|
||||
if (!isset(self::$m_aBulkInsertCols[$sClass][$sTable]))
|
||||
{
|
||||
self::$m_aBulkInsertCols[$sClass][$sTable] = implode(', ', $aFieldsToWrite);
|
||||
}
|
||||
self::$m_aBulkInsertItems[$sClass][$sTable][] = '('.implode (', ', $aValuesToWrite).')';
|
||||
|
||||
$iNewKey = 999999; // TODO - compute next id....
|
||||
}
|
||||
else
|
||||
{
|
||||
$sInsertSQL = "INSERT INTO `$sTable` (".join(",", $aFieldsToWrite).") VALUES (".join(", ", $aValuesToWrite).")";
|
||||
$iNewKey = CMDBSource::InsertInto($sInsertSQL);
|
||||
}
|
||||
}
|
||||
// Note that it is possible to have a key defined here, and the autoincrement expected, this is acceptable in a non root class
|
||||
if (empty($this->m_iKey))
|
||||
{
|
||||
@@ -891,7 +1163,8 @@ abstract class DBObject
|
||||
list($bRes, $aIssues) = $this->CheckToWrite();
|
||||
if (!$bRes)
|
||||
{
|
||||
throw new CoreException("Object not following integrity rules - it will not be written into the DB", array('class' => $sClass, 'id' => $this->GetKey(), 'issues' => $aIssues));
|
||||
$sIssues = implode(', ', $aIssues);
|
||||
throw new CoreException("Object not following integrity rules", array('issues' => $sIssues, 'class' => get_class($this), 'id' => $this->GetKey()));
|
||||
}
|
||||
|
||||
// First query built upon on the root class, because the ID must be created first
|
||||
@@ -939,6 +1212,11 @@ abstract class DBObject
|
||||
$this->Reload();
|
||||
return $this->m_iKey;
|
||||
}
|
||||
|
||||
public function DBInsertTracked(CMDBChange $oVoid)
|
||||
{
|
||||
return $this->DBInsert();
|
||||
}
|
||||
|
||||
// Creates a copy of the current object into the database
|
||||
// Returns the id of the newly created object
|
||||
@@ -983,7 +1261,8 @@ abstract class DBObject
|
||||
list($bRes, $aIssues) = $this->CheckToWrite();
|
||||
if (!$bRes)
|
||||
{
|
||||
throw new CoreException("Object not following integrity rules - it will not be written into the DB", array('class' => get_class($this), 'id' => $this->GetKey(), 'issues' => $aIssues));
|
||||
$sIssues = implode(', ', $aIssues);
|
||||
throw new CoreException("Object not following integrity rules", array('issues' => $sIssues, 'class' => get_class($this), 'id' => $this->GetKey()));
|
||||
}
|
||||
|
||||
$bHasANewExternalKeyValue = false;
|
||||
@@ -1001,7 +1280,10 @@ abstract class DBObject
|
||||
$oFilter->AddCondition('id', $this->m_iKey, '=');
|
||||
|
||||
$sSQL = MetaModel::MakeUpdateQuery($oFilter, $aChanges);
|
||||
CMDBSource::Query($sSQL);
|
||||
if (!MetaModel::DBIsReadOnly())
|
||||
{
|
||||
CMDBSource::Query($sSQL);
|
||||
}
|
||||
}
|
||||
|
||||
$this->DBWriteLinks();
|
||||
@@ -1017,6 +1299,11 @@ abstract class DBObject
|
||||
|
||||
return $this->m_iKey;
|
||||
}
|
||||
|
||||
public function DBUpdateTracked(CMDBChange $oVoid)
|
||||
{
|
||||
return $this->DBUpdate();
|
||||
}
|
||||
|
||||
// Make the current changes persistent - clever wrapper for Insert or Update
|
||||
public function DBWrite()
|
||||
@@ -1031,16 +1318,30 @@ abstract class DBObject
|
||||
}
|
||||
}
|
||||
|
||||
// Delete a record
|
||||
public function DBDelete()
|
||||
private function DBDeleteSingleTable($sTableClass)
|
||||
{
|
||||
$oFilter = new DBObjectSearch(get_class($this));
|
||||
$oFilter->AddCondition('id', $this->m_iKey, '=');
|
||||
$sTable = MetaModel::DBGetTable($sTableClass);
|
||||
// Abstract classes or classes having no specific attribute do not have an associated table
|
||||
if ($sTable == '') return;
|
||||
|
||||
$sPKField = '`'.MetaModel::DBGetKey($sTableClass).'`';
|
||||
$sKey = CMDBSource::Quote($this->m_iKey);
|
||||
|
||||
$sDeleteSQL = "DELETE FROM `$sTable` WHERE $sPKField = $sKey";
|
||||
CMDBSource::DeleteFrom($sDeleteSQL);
|
||||
}
|
||||
|
||||
protected function DBDeleteSingleObject()
|
||||
{
|
||||
$this->OnDelete();
|
||||
|
||||
$sSQL = MetaModel::MakeDeleteQuery($oFilter);
|
||||
CMDBSource::Query($sSQL);
|
||||
if (!MetaModel::DBIsReadOnly())
|
||||
{
|
||||
foreach(MetaModel::EnumParentClasses(get_class($this), ENUM_PARENT_CLASSES_ALL) as $sParentClass)
|
||||
{
|
||||
$this->DBDeleteSingleTable($sParentClass);
|
||||
}
|
||||
}
|
||||
|
||||
$this->AfterDelete();
|
||||
|
||||
@@ -1048,6 +1349,55 @@ abstract class DBObject
|
||||
$this->m_iKey = null;
|
||||
}
|
||||
|
||||
// Delete an object... and guarantee data integrity
|
||||
//
|
||||
public function DBDelete(&$oDeletionPlan = null)
|
||||
{
|
||||
if (is_null($oDeletionPlan))
|
||||
{
|
||||
$oDeletionPlan = new DeletionPlan();
|
||||
}
|
||||
$this->MakeDeletionPlan($oDeletionPlan);
|
||||
$oDeletionPlan->ComputeResults();
|
||||
|
||||
if ($oDeletionPlan->FoundStopper())
|
||||
{
|
||||
$aIssues = $oDeletionPlan->GetIssues();
|
||||
throw new DeleteException('Found issue(s)', array('target_class' => get_class($this), 'target_id' => $this->GetKey(), 'issues' => implode(', ', $aIssues)));
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach ($oDeletionPlan->ListDeletes() as $sClass => $aToDelete)
|
||||
{
|
||||
foreach ($aToDelete as $iId => $aData)
|
||||
{
|
||||
$oToDelete = $aData['to_delete'];
|
||||
$oToDelete->DBDeleteSingleObject();
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($oDeletionPlan->ListUpdates() as $sClass => $aToUpdate)
|
||||
{
|
||||
foreach ($aToUpdate as $iId => $aData)
|
||||
{
|
||||
$oToUpdate = $aData['to_reset'];
|
||||
foreach ($aData['attributes'] as $sRemoteExtKey => $aRemoteAttDef)
|
||||
{
|
||||
$oToUpdate->Set($sRemoteExtKey, 0);
|
||||
$oToUpdate->DBUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $oDeletionPlan;
|
||||
}
|
||||
|
||||
public function DBDeleteTracked(CMDBChange $oVoid, $bSkipStrongSecurity = null, &$oDeletionPlan = null)
|
||||
{
|
||||
$this->DBDelete($oDeletionPlan);
|
||||
}
|
||||
|
||||
public function EnumTransitions()
|
||||
{
|
||||
$sStateAttCode = MetaModel::GetStateAttributeCode(get_class($this));
|
||||
@@ -1219,7 +1569,7 @@ abstract class DBObject
|
||||
return $aResults;
|
||||
}
|
||||
|
||||
public function GetReferencingObjects()
|
||||
public function GetReferencingObjects($bAllowAllData = false)
|
||||
{
|
||||
$aDependentObjects = array();
|
||||
$aRererencingMe = MetaModel::EnumReferencingClasses(get_class($this));
|
||||
@@ -1232,6 +1582,10 @@ abstract class DBObject
|
||||
|
||||
$oSearch = new DBObjectSearch($sRemoteClass);
|
||||
$oSearch->AddCondition($sExtKeyAttCode, $this->GetKey(), '=');
|
||||
if ($bAllowAllData)
|
||||
{
|
||||
$oSearch->AllowAllData();
|
||||
}
|
||||
$oSet = new CMDBObjectSet($oSearch);
|
||||
if ($oSet->Count() > 0)
|
||||
{
|
||||
@@ -1245,22 +1599,32 @@ abstract class DBObject
|
||||
return $aDependentObjects;
|
||||
}
|
||||
|
||||
/**
|
||||
* $aDeletedObjs = array(); // [class][key] => structure
|
||||
* $aResetedObjs = array(); // [class][key] => object
|
||||
*/
|
||||
public function GetDeletionScheme(&$aDeletedObjs, &$aResetedObjs, $aVisited = array())
|
||||
private function MakeDeletionPlan(&$oDeletionPlan, $aVisited = array(), $iDeleteOption = null)
|
||||
{
|
||||
if (array_key_exists(get_class($this), $aVisited))
|
||||
$sClass = get_class($this);
|
||||
$iThisId = $this->GetKey();
|
||||
|
||||
$iDeleteOption = $oDeletionPlan->AddToDelete($this, $iDeleteOption);
|
||||
|
||||
if (array_key_exists($sClass, $aVisited))
|
||||
{
|
||||
if (in_array($this->GetKey(), $aVisited[get_class($this)]))
|
||||
if (in_array($iThisId, $aVisited[$sClass]))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
$aVisited[get_class($this)] = $this->GetKey();
|
||||
$aVisited[$sClass] = $iThisId;
|
||||
|
||||
$aDependentObjects = $this->GetReferencingObjects();
|
||||
if ($iDeleteOption == DEL_MANUAL)
|
||||
{
|
||||
// Stop the recursion here
|
||||
return;
|
||||
}
|
||||
// Check the node itself
|
||||
$this->DoCheckToDelete($oDeletionPlan);
|
||||
$oDeletionPlan->SetDeletionIssues($this, $this->m_aDeleteIssues, $this->m_bSecurityIssue);
|
||||
|
||||
$aDependentObjects = $this->GetReferencingObjects(true /* allow all data */);
|
||||
foreach ($aDependentObjects as $sRemoteClass => $aPotentialDeletes)
|
||||
{
|
||||
foreach ($aPotentialDeletes as $sRemoteExtKey => $aData)
|
||||
@@ -1275,46 +1639,90 @@ abstract class DBObject
|
||||
if ($oAttDef->IsNullAllowed())
|
||||
{
|
||||
// Optional external key, list to reset
|
||||
if (!array_key_exists($sRemoteClass, $aResetedObjs) || !array_key_exists($iId, $aResetedObjs[$sRemoteClass]))
|
||||
{
|
||||
$aResetedObjs[$sRemoteClass][$iId]['to_reset'] = $oDependentObj;
|
||||
}
|
||||
$aResetedObjs[$sRemoteClass][$iId]['attributes'][$sRemoteExtKey] = $oAttDef;
|
||||
$oDeletionPlan->AddToUpdate($oDependentObj, $oAttDef);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Mandatory external key, list to delete
|
||||
if (array_key_exists($sRemoteClass, $aDeletedObjs) && array_key_exists($iId, $aDeletedObjs[$sRemoteClass]))
|
||||
{
|
||||
$iCurrentOption = $aDeletedObjs[$sRemoteClass][$iId];
|
||||
if ($iCurrentOption == DEL_AUTO)
|
||||
{
|
||||
// be conservative, take the new option
|
||||
// (DEL_MANUAL has precedence over DEL_AUTO)
|
||||
$aDeletedObjs[$sRemoteClass][$iId]['auto_delete'] = ($iDeletePropagationOption == DEL_AUTO);
|
||||
}
|
||||
else
|
||||
{
|
||||
// DEL_MANUAL... leave it as is, it HAS to be verified anyway
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// First time we find the given object in the list
|
||||
// (and most likely case is that no other occurence will be found)
|
||||
$aDeletedObjs[$sRemoteClass][$iId]['to_delete'] = $oDependentObj;
|
||||
$aDeletedObjs[$sRemoteClass][$iId]['auto_delete'] = ($iDeletePropagationOption == DEL_AUTO);
|
||||
// Recursively inspect this object
|
||||
if ($iDeletePropagationOption == DEL_AUTO)
|
||||
{
|
||||
$oDependentObj->GetDeletionScheme($aDeletedObjs, $aResetedObjs, $aVisited);
|
||||
}
|
||||
}
|
||||
$oDependentObj->MakeDeletionPlan($oDeletionPlan, $aVisited, $iDeletePropagationOption);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all the synchro replica related to this object
|
||||
* @param none
|
||||
* @return DBObjectSet Set with two columns: R=SynchroReplica S=SynchroDataSource
|
||||
*/
|
||||
public function GetMasterReplica()
|
||||
{
|
||||
if ($this->m_oMasterReplicaSet == null)
|
||||
{
|
||||
//$aParentClasses = MetaModel::EnumParentClasses(get_class($this), ENUM_PARENT_CLASSES_ALL);
|
||||
//$sClassesList = "'".implode("','", $aParentClasses)."'";
|
||||
$sOQL = "SELECT replica,datasource FROM SynchroReplica AS replica JOIN SynchroDataSource AS datasource ON replica.sync_source_id=datasource.id WHERE replica.dest_class = :dest_class AND replica.dest_id = :dest_id";
|
||||
$oReplicaSet = new DBObjectSet(DBObjectSearch::FromOQL($sOQL), array() /* order by*/, array('dest_class' => get_class($this), 'dest_id' => $this->GetKey()));
|
||||
$this->m_oMasterReplicaSet = $oReplicaSet;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->m_oMasterReplicaSet->Rewind();
|
||||
}
|
||||
return $this->m_oMasterReplicaSet;
|
||||
}
|
||||
|
||||
public function GetSynchroReplicaFlags($sAttCode, &$aReason)
|
||||
{
|
||||
$iFlags = OPT_ATT_NORMAL;
|
||||
$oSet = $this->GetMasterReplica();
|
||||
while($aData = $oSet->FetchAssoc())
|
||||
{
|
||||
if ($aData['datasource']->GetKey() == SynchroDataSource::GetCurrentTaskId())
|
||||
{
|
||||
// Ignore the current task (check to write => ok)
|
||||
continue;
|
||||
}
|
||||
// Assumption: $aData['datasource'] will not be null because the data source id is always set...
|
||||
$oReplica = $aData['replica'];
|
||||
$oSource = $aData['datasource'];
|
||||
$oAttrSet = $oSource->Get('attribute_list');
|
||||
while($oSyncAttr = $oAttrSet->Fetch())
|
||||
{
|
||||
if (($oSyncAttr->Get('attcode') == $sAttCode) && ($oSyncAttr->Get('update') == 1) && ($oSyncAttr->Get('update_policy') == 'master_locked'))
|
||||
{
|
||||
$iFlags |= OPT_ATT_SLAVE;
|
||||
$sUrl = $oSource->GetApplicationUrl($this, $oReplica);
|
||||
$aReason[] = array('name' => $oSource->GetName(), 'description' => $oSource->Get('description'), 'url_application' => $sUrl);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $iFlags;
|
||||
}
|
||||
|
||||
public function InSyncScope()
|
||||
{
|
||||
return true;
|
||||
|
||||
// TODO - FINALIZE THIS OPTIMIZATION
|
||||
//
|
||||
// Optimization: cache the list of Data Sources and classes candidates for synchro
|
||||
//
|
||||
static $aSynchroClasses = null;
|
||||
if (is_null($aSynchroClasses))
|
||||
{
|
||||
$aSynchroClasses = array();
|
||||
$sOQL = "SELECT SynchroDataSource AS datasource";
|
||||
$oSourceSet = new DBObjectSet(DBObjectSearch::FromOQL($sOQL), array() /* order by*/, array());
|
||||
while($oSource = $oSourceSet->Fetch())
|
||||
{
|
||||
$sTarget = $oSource->Get('scope_class');
|
||||
$aSynchroClasses[] = $oSource;
|
||||
}
|
||||
}
|
||||
// to be continued...
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -209,7 +209,7 @@ class DBObjectSearch
|
||||
|
||||
protected function TransferConditionExpression($oFilter, $aTranslation)
|
||||
{
|
||||
$oTranslated = $oFilter->GetCriteria()->Translate($aTranslation, false);
|
||||
$oTranslated = $oFilter->GetCriteria()->Translate($aTranslation, false, false /* leave unresolved fields */);
|
||||
$this->AddConditionExpression($oTranslated);
|
||||
// #@# what about collisions in parameter names ???
|
||||
$this->m_aParams = array_merge($this->m_aParams, $oFilter->m_aParams);
|
||||
@@ -226,6 +226,14 @@ class DBObjectSearch
|
||||
$this->m_oSearchCondition = $this->m_oSearchCondition->LogAnd($oExpression);
|
||||
}
|
||||
|
||||
public function AddNameCondition($sName)
|
||||
{
|
||||
$oValueExpr = new ScalarExpression($sName);
|
||||
$oNameExpr = new FieldExpression('friendlyname', $this->GetClassAlias());
|
||||
$oNewCondition = new BinaryExpression($oNameExpr, '=', $oValueExpr);
|
||||
$this->AddConditionExpression($oNewCondition);
|
||||
}
|
||||
|
||||
public function AddCondition($sFilterCode, $value, $sOpCode = null)
|
||||
{
|
||||
MyHelpers::CheckKeyInArray('filter code', $sFilterCode, MetaModel::GetClassFilterDefs($this->GetClass()));
|
||||
@@ -722,11 +730,25 @@ class DBObjectSearch
|
||||
}
|
||||
elseif ($oExpression instanceof ListOqlExpression)
|
||||
{
|
||||
return new ListExpression($oExpression->GetItems());
|
||||
$aItems = array();
|
||||
foreach ($oExpression->GetItems() as $oItemExpression)
|
||||
{
|
||||
$aItems[] = $this->OQLExpressionToCondition($sQuery, $oItemExpression, $aClassAliases);
|
||||
}
|
||||
return new ListExpression($aItems);
|
||||
}
|
||||
elseif ($oExpression instanceof FunctionOqlExpression)
|
||||
{
|
||||
return new FunctionExpression($oExpression->GetVerb(), $oExpression->GetArgs());
|
||||
$aArgs = array();
|
||||
foreach ($oExpression->GetArgs() as $oArgExpression)
|
||||
{
|
||||
$aArgs[] = $this->OQLExpressionToCondition($sQuery, $oArgExpression, $aClassAliases);
|
||||
}
|
||||
return new FunctionExpression($oExpression->GetVerb(), $aArgs);
|
||||
}
|
||||
elseif ($oExpression instanceof IntervalOqlExpression)
|
||||
{
|
||||
return new IntervalExpression($oExpression->GetValue(), $oExpression->GetUnit());
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -860,6 +882,7 @@ class DBObjectSearch
|
||||
}
|
||||
$aSelected[$sClassToSelect] = $aAliases[$sClassToSelect];
|
||||
}
|
||||
$oResultFilter->m_aClasses = $aAliases;
|
||||
$oResultFilter->SetSelectedClasses($aSelected);
|
||||
|
||||
$oConditionTree = $oOqlQuery->GetCondition();
|
||||
|
||||
@@ -38,17 +38,18 @@ class DBObjectSet
|
||||
private $m_aId2Row;
|
||||
private $m_iCurrRow;
|
||||
|
||||
public function __construct(DBObjectSearch $oFilter, $aOrderBy = array(), $aArgs = array(), $iLimitCount = 0, $iLimitStart = 0)
|
||||
public function __construct(DBObjectSearch $oFilter, $aOrderBy = array(), $aArgs = array(), $aExtendedDataSpec = null, $iLimitCount = 0, $iLimitStart = 0)
|
||||
{
|
||||
$this->m_oFilter = $oFilter;
|
||||
$this->m_aOrderBy = $aOrderBy;
|
||||
$this->m_aArgs = $aArgs;
|
||||
$this->m_aExtendedDataSpec = $aExtendedDataSpec;
|
||||
$this->m_iLimitCount = $iLimitCount;
|
||||
$this->m_iLimitStart = $iLimitStart;
|
||||
|
||||
$this->m_bLoaded = false;
|
||||
$this->m_aData = array(); // array of (row => array of (classalias) => object)
|
||||
$this->m_aId2Row = array();
|
||||
$this->m_bLoaded = false; // true when the filter has been used OR the set is built step by step (AddObject...)
|
||||
$this->m_aData = array(); // array of (row => array of (classalias) => object/null)
|
||||
$this->m_aId2Row = array(); // array of (pkey => index in m_aData)
|
||||
$this->m_iCurrRow = 0;
|
||||
}
|
||||
|
||||
@@ -158,6 +159,53 @@ class DBObjectSet
|
||||
return $aRet;
|
||||
}
|
||||
|
||||
public function ToArrayOfValues()
|
||||
{
|
||||
if (!$this->m_bLoaded) $this->Load();
|
||||
|
||||
$aSelectedClasses = $this->m_oFilter->GetSelectedClasses();
|
||||
|
||||
$aRet = array();
|
||||
foreach($this->m_aData as $iRow => $aObjects)
|
||||
{
|
||||
foreach($aObjects as $sClassAlias => $oObject)
|
||||
{
|
||||
if (is_null($oObject))
|
||||
{
|
||||
$aRet[$iRow][$sClassAlias.'.'.'id'] = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
$aRet[$iRow][$sClassAlias.'.'.'id'] = $oObject->GetKey();
|
||||
}
|
||||
if (is_null($oObject))
|
||||
{
|
||||
$sClass = $aSelectedClasses[$sClassAlias];
|
||||
}
|
||||
else
|
||||
{
|
||||
$sClass = get_class($oObject);
|
||||
}
|
||||
foreach(MetaModel::ListAttributeDefs($sClass) as $sAttCode => $oAttDef)
|
||||
{
|
||||
if ($oAttDef->IsScalar())
|
||||
{
|
||||
$sAttName = $sClassAlias.'.'.$sAttCode;
|
||||
if (is_null($oObject))
|
||||
{
|
||||
$aRet[$iRow][$sAttName] = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
$aRet[$iRow][$sAttName] = $oObject->Get($sAttCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $aRet;
|
||||
}
|
||||
|
||||
public function GetColumnAsArray($sAttCode, $bWithId = true)
|
||||
{
|
||||
$aRet = array();
|
||||
@@ -178,6 +226,7 @@ class DBObjectSet
|
||||
|
||||
public function GetFilter()
|
||||
{
|
||||
// #@# This is false as soon as the set has been manipulated (AddObject...)
|
||||
return $this->m_oFilter;
|
||||
}
|
||||
|
||||
@@ -215,13 +264,16 @@ class DBObjectSet
|
||||
public function Load()
|
||||
{
|
||||
if ($this->m_bLoaded) return;
|
||||
// Note: it is mandatory to set this value now, to protect against reentrance
|
||||
$this->m_bLoaded = true;
|
||||
|
||||
if ($this->m_iLimitCount > 0)
|
||||
{
|
||||
$sSQL = MetaModel::MakeSelectQuery($this->m_oFilter, $this->m_aOrderBy, $this->m_aArgs, $this->m_iLimitCount, $this->m_iLimitStart);
|
||||
$sSQL = MetaModel::MakeSelectQuery($this->m_oFilter, $this->m_aOrderBy, $this->m_aArgs, $this->m_aExtendedDataSpec, $this->m_iLimitCount, $this->m_iLimitStart);
|
||||
}
|
||||
else
|
||||
{
|
||||
$sSQL = MetaModel::MakeSelectQuery($this->m_oFilter, $this->m_aOrderBy, $this->m_aArgs);
|
||||
$sSQL = MetaModel::MakeSelectQuery($this->m_oFilter, $this->m_aOrderBy, $this->m_aArgs, $this->m_aExtendedDataSpec);
|
||||
}
|
||||
$resQuery = CMDBSource::Query($sSQL);
|
||||
if (!$resQuery) return;
|
||||
@@ -232,25 +284,37 @@ class DBObjectSet
|
||||
$aObjects = array();
|
||||
foreach ($this->m_oFilter->GetSelectedClasses() as $sClassAlias => $sClass)
|
||||
{
|
||||
$oObject = MetaModel::GetObjectByRow($sClass, $aRow, $sClassAlias);
|
||||
if (is_null($aRow[$sClassAlias.'id']))
|
||||
{
|
||||
$oObject = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
$oObject = MetaModel::GetObjectByRow($sClass, $aRow, $sClassAlias, $this->m_aExtendedDataSpec);
|
||||
}
|
||||
$aObjects[$sClassAlias] = $oObject;
|
||||
}
|
||||
$this->AddObjectExtended($aObjects);
|
||||
}
|
||||
CMDBSource::FreeResult($resQuery);
|
||||
|
||||
$this->m_bLoaded = true;
|
||||
}
|
||||
|
||||
public function Count()
|
||||
{
|
||||
$sSQL = MetaModel::MakeSelectQuery($this->m_oFilter, $this->m_aOrderBy, $this->m_aArgs, 0, 0, true);
|
||||
$resQuery = CMDBSource::Query($sSQL);
|
||||
if (!$resQuery) return 0;
|
||||
|
||||
$aRow = CMDBSource::FetchArray($resQuery);
|
||||
CMDBSource::FreeResult($resQuery);
|
||||
return $aRow['COUNT'];
|
||||
if ($this->m_bLoaded && ($this->m_iLimitCount == 0) && ($this->m_iLimitStart == 0))
|
||||
{
|
||||
return count($this->m_aData);
|
||||
}
|
||||
else
|
||||
{
|
||||
$sSQL = MetaModel::MakeSelectQuery($this->m_oFilter, $this->m_aOrderBy, $this->m_aArgs, null, 0, 0, true);
|
||||
$resQuery = CMDBSource::Query($sSQL);
|
||||
if (!$resQuery) return 0;
|
||||
|
||||
$aRow = CMDBSource::FetchArray($resQuery);
|
||||
CMDBSource::FreeResult($resQuery);
|
||||
return $aRow['COUNT'];
|
||||
}
|
||||
}
|
||||
|
||||
public function Fetch($sClassAlias = '')
|
||||
@@ -302,6 +366,8 @@ class DBObjectSet
|
||||
|
||||
public function AddObject($oObject, $sClassAlias = '')
|
||||
{
|
||||
if (!$this->m_bLoaded) $this->Load();
|
||||
|
||||
if (strlen($sClassAlias) == 0)
|
||||
{
|
||||
$sClassAlias = $this->m_oFilter->GetClassAlias();
|
||||
@@ -309,22 +375,32 @@ class DBObjectSet
|
||||
|
||||
$iNextPos = count($this->m_aData);
|
||||
$this->m_aData[$iNextPos][$sClassAlias] = $oObject;
|
||||
$this->m_aId2Row[$sClassAlias][$oObject->GetKey()] = $iNextPos;
|
||||
if (!is_null($oObject))
|
||||
{
|
||||
$this->m_aId2Row[$sClassAlias][$oObject->GetKey()] = $iNextPos;
|
||||
}
|
||||
}
|
||||
|
||||
protected function AddObjectExtended($aObjectArray)
|
||||
{
|
||||
if (!$this->m_bLoaded) $this->Load();
|
||||
|
||||
$iNextPos = count($this->m_aData);
|
||||
|
||||
foreach ($aObjectArray as $sClassAlias => $oObject)
|
||||
{
|
||||
$this->m_aData[$iNextPos][$sClassAlias] = $oObject;
|
||||
$this->m_aId2Row[$sClassAlias][$oObject->GetKey()] = $iNextPos;
|
||||
if (!is_null($oObject))
|
||||
{
|
||||
$this->m_aId2Row[$sClassAlias][$oObject->GetKey()] = $iNextPos;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function AddObjectArray($aObjects, $sClassAlias = '')
|
||||
{
|
||||
if (!$this->m_bLoaded) $this->Load();
|
||||
|
||||
// #@# todo - add a check on the object class ?
|
||||
foreach ($aObjects as $oObj)
|
||||
{
|
||||
@@ -369,6 +445,43 @@ class DBObjectSet
|
||||
return $oNewSet;
|
||||
}
|
||||
|
||||
// Note: This verb works only with objects existing in the database
|
||||
//
|
||||
public function HasSameContents($oObjectSet)
|
||||
{
|
||||
if ($this->GetRootClass() != $oObjectSet->GetRootClass())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!$this->m_bLoaded) $this->Load();
|
||||
|
||||
if ($this->Count() != $oObjectSet->Count())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
$sClassAlias = $this->m_oFilter->GetClassAlias();
|
||||
$oObjectSet->Rewind();
|
||||
while ($oObject = $oObjectSet->Fetch())
|
||||
{
|
||||
$iObjectKey = $oObject->GetKey();
|
||||
if ($iObjectKey < 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!array_key_exists($iObjectKey, $this->m_aId2Row[$sClassAlias]))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
$iRow = $this->m_aId2Row[$sClassAlias][$iObjectKey];
|
||||
$oSibling = $this->m_aData[$iRow][$sClassAlias];
|
||||
if (!$oObject->Equals($oSibling))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public function CreateDelta($oObjectSet)
|
||||
{
|
||||
if ($this->GetRootClass() != $oObjectSet->GetRootClass())
|
||||
@@ -413,6 +526,106 @@ class DBObjectSet
|
||||
}
|
||||
return $aRelatedObjs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds an object that contains the values that are common to all the objects
|
||||
* in the set. If for a given attribute, objects in the set have various values
|
||||
* then the resulting object will contain null for this value.
|
||||
* @param $aValues Hash Output: the distribution of the values, in the set, for each attribute
|
||||
* @return Object
|
||||
*/
|
||||
public function ComputeCommonObject(&$aValues)
|
||||
{
|
||||
$sClass = $this->GetClass();
|
||||
$aList = MetaModel::ListAttributeDefs($sClass);
|
||||
$aValues = array();
|
||||
foreach($aList as $sAttCode => $oAttDef)
|
||||
{
|
||||
if ($oAttDef->IsScalar())
|
||||
{
|
||||
$aValues[$sAttCode] = array();
|
||||
}
|
||||
}
|
||||
$this->Rewind();
|
||||
while($oObj = $this->Fetch())
|
||||
{
|
||||
foreach($aList as $sAttCode => $oAttDef)
|
||||
{
|
||||
if ($oAttDef->IsScalar() && $oAttDef->IsWritable())
|
||||
{
|
||||
$currValue = $oObj->Get($sAttCode);
|
||||
if (is_object($currValue)) continue; // Skip non scalar values...
|
||||
if(!array_key_exists($currValue, $aValues[$sAttCode]))
|
||||
{
|
||||
$aValues[$sAttCode][$currValue] = array('count' => 1, 'display' => $oObj->GetAsHTML($sAttCode));
|
||||
}
|
||||
else
|
||||
{
|
||||
$aValues[$sAttCode][$currValue]['count']++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach($aValues as $sAttCode => $aMultiValues)
|
||||
{
|
||||
if (count($aMultiValues) > 1)
|
||||
{
|
||||
uasort($aValues[$sAttCode], 'HashCountComparison');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Now create an object that has values for the homogenous values only
|
||||
$oCommonObj = new $sClass(); // @@ What if the class is abstract ?
|
||||
$aComments = array();
|
||||
|
||||
$iFormId = cmdbAbstractObject::GetNextFormId(); // Identifier that prefixes all the form fields
|
||||
$sReadyScript = '';
|
||||
$aDependsOn = array();
|
||||
$sFormPrefix = '2_';
|
||||
foreach($aList as $sAttCode => $oAttDef)
|
||||
{
|
||||
if ($oAttDef->IsScalar() && $oAttDef->IsWritable())
|
||||
{
|
||||
if ($oAttDef->GetEditClass() == 'One Way Password')
|
||||
{
|
||||
$oCommonObj->Set($sAttCode, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
$iCount = count($aValues[$sAttCode]);
|
||||
if ($iCount == 1)
|
||||
{
|
||||
// Homogenous value
|
||||
reset($aValues[$sAttCode]);
|
||||
$aKeys = array_keys($aValues[$sAttCode]);
|
||||
$currValue = $aKeys[0]; // The only value is the first key
|
||||
$oCommonObj->Set($sAttCode, $currValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Non-homogenous value
|
||||
$oCommonObj->Set($sAttCode, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->Rewind();
|
||||
return $oCommonObj;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to perform a custom sort of a hash array
|
||||
*/
|
||||
function HashCountComparison($a, $b) // Sort descending on 'count'
|
||||
{
|
||||
if ($a['count'] == $b['count'])
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return ($a['count'] > $b['count']) ? -1 : 1;
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
159
core/dbproperty.class.inc.php
Normal file
159
core/dbproperty.class.inc.php
Normal file
@@ -0,0 +1,159 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* Database properties - manage database instances in a complex installation
|
||||
*
|
||||
* @author Erwan Taloc <erwan.taloc@combodo.com>
|
||||
* @author Romain Quetiez <romain.quetiez@combodo.com>
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* A database property
|
||||
*
|
||||
* @package iTopORM
|
||||
*/
|
||||
class DBProperty extends DBObject
|
||||
{
|
||||
public static function Init()
|
||||
{
|
||||
$aParams = array
|
||||
(
|
||||
"category" => "cloud",
|
||||
"key_type" => "autoincrement",
|
||||
"name_attcode" => "name",
|
||||
"state_attcode" => "",
|
||||
"reconc_keys" => array(),
|
||||
"db_table" => "priv_db_properties",
|
||||
"db_key_field" => "id",
|
||||
"db_finalclass_field" => "",
|
||||
);
|
||||
MetaModel::Init_Params($aParams);
|
||||
//MetaModel::Init_InheritAttributes();
|
||||
MetaModel::Init_AddAttribute(new AttributeString("name", array("allowed_values"=>null, "sql"=>"name", "default_value"=>null, "is_null_allowed"=>false, "depends_on"=>array())));
|
||||
MetaModel::Init_AddAttribute(new AttributeString("description", array("allowed_values"=>null, "sql"=>"description", "default_value"=>null, "is_null_allowed"=>true, "depends_on"=>array())));
|
||||
MetaModel::Init_AddAttribute(new AttributeString("value", array("allowed_values"=>null, "sql"=>"value", "default_value"=>null, "is_null_allowed"=>true, "depends_on"=>array())));
|
||||
|
||||
MetaModel::Init_AddAttribute(new AttributeDateTime("change_date", array("allowed_values"=>null, "sql"=>"change_date", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
|
||||
MetaModel::Init_AddAttribute(new AttributeString("change_comment", array("allowed_values"=>null, "sql"=>"change_comment", "default_value"=>null, "is_null_allowed"=>true, "depends_on"=>array())));
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to check wether the table has been created into the DB
|
||||
* (this table did not exist in 1.0.1 and older versions)
|
||||
*/
|
||||
public static function IsInstalled()
|
||||
{
|
||||
$sTable = MetaModel::DBGetTable(__CLASS__);
|
||||
if (CMDBSource::IsTable($sTable))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static function SetProperty($sName, $sValue, $sComment = '', $sDescription = null)
|
||||
{
|
||||
try
|
||||
{
|
||||
$oSearch = DBObjectSearch::FromOQL('SELECT DBProperty WHERE name = :name');
|
||||
$oSet = new DBObjectSet($oSearch, array(), array('name' => $sName));
|
||||
if ($oSet->Count() == 0)
|
||||
{
|
||||
$oProp = new DBProperty();
|
||||
$oProp->Set('name', $sName);
|
||||
$oProp->Set('description', $sDescription);
|
||||
$oProp->Set('value', $sValue);
|
||||
$oProp->Set('change_date', time());
|
||||
$oProp->Set('change_comment', $sComment);
|
||||
$oProp->DBInsert();
|
||||
}
|
||||
elseif ($oSet->Count() == 1)
|
||||
{
|
||||
$oProp = $oSet->fetch();
|
||||
if (!is_null($sDescription))
|
||||
{
|
||||
$oProp->Set('description', $sDescription);
|
||||
}
|
||||
$oProp->Set('value', $sValue);
|
||||
$oProp->Set('change_date', time());
|
||||
$oProp->Set('change_comment', $sComment);
|
||||
$oProp->DBUpdate();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Houston...
|
||||
throw new CoreException('duplicate db property');
|
||||
}
|
||||
}
|
||||
catch (MySQLException $e)
|
||||
{
|
||||
// This might be because the table could not be found,
|
||||
// let's check it and discard silently if this is really the case
|
||||
if (self::IsInstalled())
|
||||
{
|
||||
throw $e;
|
||||
}
|
||||
IssueLog::Error('Attempting to write a DBProperty while the module has not been installed');
|
||||
}
|
||||
}
|
||||
|
||||
public static function GetProperty($sName, $default = null)
|
||||
{
|
||||
try
|
||||
{
|
||||
$oSearch = DBObjectSearch::FromOQL('SELECT DBProperty WHERE name = :name');
|
||||
$oSet = new DBObjectSet($oSearch, array(), array('name' => $sName));
|
||||
$iCount = $oSet->Count();
|
||||
if ($iCount == 0)
|
||||
{
|
||||
//throw new CoreException('unknown db property', array('name' => $sName));
|
||||
$sValue = $default;
|
||||
}
|
||||
elseif ($iCount == 1)
|
||||
{
|
||||
$oProp = $oSet->fetch();
|
||||
$sValue = $oProp->Get('value');
|
||||
}
|
||||
else
|
||||
{
|
||||
// $iCount > 1
|
||||
// Houston...
|
||||
throw new CoreException('duplicate db property', array('name' => $sName, 'count' => $iCount));
|
||||
}
|
||||
}
|
||||
catch (MySQLException $e)
|
||||
{
|
||||
// This might be because the table could not be found,
|
||||
// let's check it and discard silently if this is really the case
|
||||
if (self::IsInstalled())
|
||||
{
|
||||
throw $e;
|
||||
}
|
||||
$sValue = $default;
|
||||
}
|
||||
return $sValue;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
287
core/deletionplan.class.inc.php
Normal file
287
core/deletionplan.class.inc.php
Normal file
@@ -0,0 +1,287 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* Class dbObject: the root of persistent classes
|
||||
*
|
||||
* @author Erwan Taloc <erwan.taloc@combodo.com>
|
||||
* @author Romain Quetiez <romain.quetiez@combodo.com>
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
class DeleteException extends CoreException
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletion plan (other objects to be deleted/modified, eventual issues, etc.)
|
||||
*
|
||||
* @package iTopORM
|
||||
*/
|
||||
class DeletionPlan
|
||||
{
|
||||
//protected $m_aIssues;
|
||||
|
||||
protected $m_bFoundStopper;
|
||||
protected $m_bFoundSecurityIssue;
|
||||
protected $m_bFoundManualDelete;
|
||||
protected $m_bFoundManualOperation;
|
||||
|
||||
protected $m_iToDelete;
|
||||
protected $m_iToUpdate;
|
||||
|
||||
protected $m_aToDelete;
|
||||
protected $m_aToUpdate;
|
||||
|
||||
protected static $m_aModeUpdate = array(
|
||||
DEL_SILENT => array(
|
||||
DEL_SILENT => DEL_SILENT,
|
||||
DEL_AUTO => DEL_AUTO,
|
||||
DEL_MANUAL => DEL_MANUAL
|
||||
),
|
||||
DEL_MANUAL => array(
|
||||
DEL_SILENT => DEL_MANUAL,
|
||||
DEL_AUTO => DEL_AUTO,
|
||||
DEL_MANUAL => DEL_MANUAL
|
||||
),
|
||||
DEL_AUTO => array(
|
||||
DEL_SILENT => DEL_AUTO,
|
||||
DEL_AUTO => DEL_AUTO,
|
||||
DEL_MANUAL => DEL_AUTO
|
||||
)
|
||||
);
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->m_iToDelete = 0;
|
||||
$this->m_iToUpdate = 0;
|
||||
|
||||
$this->m_aToDelete = array();
|
||||
$this->m_aToUpdate = array();
|
||||
|
||||
$this->m_bFoundStopper = false;
|
||||
$this->m_bFoundSecurityIssue = false;
|
||||
$this->m_bFoundManualDelete = false;
|
||||
$this->m_bFoundManualOperation = false;
|
||||
}
|
||||
|
||||
public function ComputeResults()
|
||||
{
|
||||
foreach($this->m_aToDelete as $sClass => $aToDelete)
|
||||
{
|
||||
foreach($aToDelete as $iId => $aData)
|
||||
{
|
||||
$this->m_iToDelete++;
|
||||
if (isset($aData['issue']))
|
||||
{
|
||||
$this->m_bFoundStopper = true;
|
||||
$this->m_bFoundManualOperation = true;
|
||||
if (isset($aData['issue_security']))
|
||||
{
|
||||
$this->m_bFoundSecurityIssue = true;
|
||||
}
|
||||
}
|
||||
if ($aData['mode'] == DEL_MANUAL)
|
||||
{
|
||||
$this->m_bFoundStopper = true;
|
||||
$this->m_bFoundManualDelete = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach($this->m_aToUpdate as $sClass => $aToUpdate)
|
||||
{
|
||||
foreach($aToUpdate as $iId => $aData)
|
||||
{
|
||||
$this->m_iToUpdate++;
|
||||
|
||||
$oObject = $aData['to_reset'];
|
||||
$aExtKeyLabels = array();
|
||||
foreach ($aData['attributes'] as $sRemoteExtKey => $aRemoteAttDef)
|
||||
{
|
||||
$oObject->Set($sRemoteExtKey, 0);
|
||||
$aExtKeyLabels[] = $aRemoteAttDef->GetLabel();
|
||||
}
|
||||
$this->m_aToUpdate[$sClass][$iId]['attributes_list'] = implode(', ', $aExtKeyLabels);
|
||||
|
||||
list($bRes, $aIssues, $bSecurityIssues) = $oObject->CheckToWrite();
|
||||
if (!$bRes)
|
||||
{
|
||||
$this->m_aToUpdate[$sClass][$iId]['issue'] = implode(', ', $aIssues);
|
||||
$this->m_bFoundStopper = true;
|
||||
|
||||
if ($bSecurityIssues)
|
||||
{
|
||||
$this->m_aToUpdate[$sClass][$iId]['issue_security'] = true;
|
||||
$this->m_bFoundSecurityIssue = true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function GetIssues()
|
||||
{
|
||||
$aIssues = array();
|
||||
foreach ($this->m_aToDelete as $sClass => $aToDelete)
|
||||
{
|
||||
foreach ($aToDelete as $iId => $aData)
|
||||
{
|
||||
if (isset($aData['issue']))
|
||||
{
|
||||
$aIssues[] = $aData['issue'];
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach ($this->m_aToUpdate as $sClass => $aToUpdate)
|
||||
{
|
||||
foreach ($aToUpdate as $iId => $aData)
|
||||
{
|
||||
if (isset($aData['issue']))
|
||||
{
|
||||
$aIssues[] = $aData['issue'];
|
||||
}
|
||||
}
|
||||
}
|
||||
return $aIssues;
|
||||
}
|
||||
|
||||
public function ListDeletes()
|
||||
{
|
||||
return $this->m_aToDelete;
|
||||
}
|
||||
|
||||
public function ListUpdates()
|
||||
{
|
||||
return $this->m_aToUpdate;
|
||||
}
|
||||
|
||||
public function GetTargetCount()
|
||||
{
|
||||
return $this->m_iToDelete + $this->m_iToUpdate;
|
||||
}
|
||||
|
||||
public function FoundStopper()
|
||||
{
|
||||
return $this->m_bFoundStopper;
|
||||
}
|
||||
|
||||
public function FoundSecurityIssue()
|
||||
{
|
||||
return $this->m_bFoundSecurityIssue;
|
||||
}
|
||||
|
||||
public function FoundManualOperation()
|
||||
{
|
||||
return $this->m_bFoundManualOperation;
|
||||
}
|
||||
|
||||
public function FoundManualDelete()
|
||||
{
|
||||
return $this->m_bFoundManualDelete;
|
||||
}
|
||||
|
||||
public function FoundManualUpdate()
|
||||
{
|
||||
}
|
||||
|
||||
public function AddToDelete($oObject, $iDeletionMode = null)
|
||||
{
|
||||
if (is_null($iDeletionMode))
|
||||
{
|
||||
$bRequestedExplicitely = true;
|
||||
$iDeletionMode = DEL_AUTO;
|
||||
}
|
||||
else
|
||||
{
|
||||
$bRequestedExplicitely = false;
|
||||
}
|
||||
|
||||
$sClass = get_class($oObject);
|
||||
$iId = $oObject->GetKey();
|
||||
|
||||
if (isset($this->m_aToUpdate[$sClass][$iId]))
|
||||
{
|
||||
unset($this->m_aToUpdate[$sClass][$iId]);
|
||||
}
|
||||
|
||||
if (isset($this->m_aToDelete[$sClass][$iId]))
|
||||
{
|
||||
if ($this->m_aToDelete[$sClass][$iId]['requested_explicitely'])
|
||||
{
|
||||
// No change: let it in mode DEL_AUTO
|
||||
}
|
||||
else
|
||||
{
|
||||
$iPrevDeletionMode = $this->m_aToDelete[$sClass][$iId]['mode'];
|
||||
$iNewDeletionMode = self::$m_aModeUpdate[$iPrevDeletionMode][$iDeletionMode];
|
||||
$this->m_aToDelete[$sClass][$iId]['mode'] = $iNewDeletionMode;
|
||||
|
||||
if ($bRequestedExplicitely)
|
||||
{
|
||||
// This object was in the root list
|
||||
$this->m_aToDelete[$sClass][$iId]['requested_explicitely'] = true;
|
||||
$this->m_aToDelete[$sClass][$iId]['mode'] = DEL_AUTO;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->m_aToDelete[$sClass][$iId] = array(
|
||||
'to_delete' => $oObject,
|
||||
'mode' => $iDeletionMode,
|
||||
'requested_explicitely' => $bRequestedExplicitely,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public function SetDeletionIssues($oObject, $aIssues, $bSecurityIssue)
|
||||
{
|
||||
if (count($aIssues) > 0)
|
||||
{
|
||||
$sClass = get_class($oObject);
|
||||
$iId = $oObject->GetKey();
|
||||
$this->m_aToDelete[$sClass][$iId]['issue'] = implode(', ', $aIssues);
|
||||
if ($bSecurityIssue)
|
||||
{
|
||||
$this->m_aToDelete[$sClass][$iId]['issue_security'] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function AddToUpdate($oObject, $oAttDef)
|
||||
{
|
||||
$sClass = get_class($oObject);
|
||||
$iId = $oObject->GetKey();
|
||||
if (isset($this->m_aToDelete[$sClass][$iId]))
|
||||
{
|
||||
// skip... it should be deleted anyhow !
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!isset($this->m_aToUpdate[$sClass][$iId]))
|
||||
{
|
||||
$this->m_aToUpdate[$sClass][$iId] = array(
|
||||
'to_reset' => $oObject,
|
||||
);
|
||||
}
|
||||
$this->m_aToUpdate[$sClass][$iId]['attributes'][$oAttDef->GetCode()] = $oAttDef;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,228 +1,318 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* Class Dict
|
||||
* Management of localizable strings
|
||||
*
|
||||
* @author Erwan Taloc <erwan.taloc@combodo.com>
|
||||
* @author Romain Quetiez <romain.quetiez@combodo.com>
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
class DictException extends CoreException
|
||||
{
|
||||
}
|
||||
|
||||
class DictExceptionUnknownLanguage extends DictException
|
||||
{
|
||||
public function __construct($sLanguageCode)
|
||||
{
|
||||
$aContext = array();
|
||||
$aContext['language_code'] = $sLanguageCode;
|
||||
parent::__construct('Unknown localization language', $aContext);
|
||||
}
|
||||
}
|
||||
|
||||
class DictExceptionMissingString extends DictException
|
||||
{
|
||||
public function __construct($sLanguageCode, $sStringCode)
|
||||
{
|
||||
$aContext = array();
|
||||
$aContext['language_code'] = $sLanguageCode;
|
||||
$aContext['string_code'] = $sStringCode;
|
||||
parent::__construct('Missing localized string', $aContext);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
define('DICT_ERR_STRING', 1); // when a string is missing, return the identifier
|
||||
define('DICT_ERR_EXCEPTION', 2); // when a string is missing, throw an exception
|
||||
//define('DICT_ERR_LOG', 3); // when a string is missing, log an error
|
||||
|
||||
|
||||
class Dict
|
||||
{
|
||||
protected static $m_iErrorMode = DICT_ERR_STRING;
|
||||
protected static $m_sDefaultLanguage = 'EN US';
|
||||
protected static $m_sCurrentLanguage = null; // No language selected by default
|
||||
|
||||
protected static $m_aLanguages = array(); // array( code => array( 'description' => '...', 'localized_description' => '...') ...)
|
||||
protected static $m_aData = array();
|
||||
|
||||
|
||||
public static function SetDefaultLanguage($sLanguageCode)
|
||||
{
|
||||
if (!array_key_exists($sLanguageCode, self::$m_aLanguages))
|
||||
{
|
||||
throw new DictExceptionUnknownLanguage($sLanguageCode);
|
||||
}
|
||||
self::$m_sDefaultLanguage = $sLanguageCode;
|
||||
}
|
||||
|
||||
public static function SetUserLanguage($sLanguageCode)
|
||||
{
|
||||
if (!array_key_exists($sLanguageCode, self::$m_aLanguages))
|
||||
{
|
||||
throw new DictExceptionUnknownLanguage($sLanguageCode);
|
||||
}
|
||||
self::$m_sCurrentLanguage = $sLanguageCode;
|
||||
}
|
||||
|
||||
|
||||
public static function GetCurrentLanguage()
|
||||
{
|
||||
if (self::$m_sCurrentLanguage == null) // May happen when no user is logged in (i.e login screen, non authentifed page)
|
||||
{
|
||||
// In which case let's use the default language
|
||||
return self::$m_sDefaultLanguage;
|
||||
}
|
||||
return self::$m_sCurrentLanguage;
|
||||
}
|
||||
|
||||
//returns a hash array( code => array( 'description' => '...', 'localized_description' => '...') ...)
|
||||
public static function GetLanguages()
|
||||
{
|
||||
return self::$m_aLanguages;
|
||||
}
|
||||
|
||||
// iErrorMode from {DICT_ERR_STRING, DICT_ERR_EXCEPTION}
|
||||
public static function SetErrorMode($iErrorMode)
|
||||
{
|
||||
self::$m_iErrorMode = $iErrorMode;
|
||||
}
|
||||
|
||||
|
||||
public static function S($sStringCode, $sDefault = null)
|
||||
{
|
||||
// Attempt to find the string in the user language
|
||||
//
|
||||
if (!array_key_exists(self::GetCurrentLanguage(), self::$m_aData))
|
||||
{
|
||||
// It may happen, when something happens before the dictionnaries get loaded
|
||||
return $sStringCode;
|
||||
}
|
||||
$aCurrentDictionary = self::$m_aData[self::GetCurrentLanguage()];
|
||||
if (array_key_exists($sStringCode, $aCurrentDictionary))
|
||||
{
|
||||
return $aCurrentDictionary[$sStringCode];
|
||||
}
|
||||
// Attempt to find the string in the default language
|
||||
//
|
||||
$aDefaultDictionary = self::$m_aData[self::$m_sDefaultLanguage];
|
||||
if (array_key_exists($sStringCode, $aDefaultDictionary))
|
||||
{
|
||||
return $aDefaultDictionary[$sStringCode];
|
||||
}
|
||||
// Could not find the string...
|
||||
//
|
||||
switch (self::$m_iErrorMode)
|
||||
{
|
||||
case DICT_ERR_STRING:
|
||||
if (is_null($sDefault))
|
||||
{
|
||||
return $sStringCode;
|
||||
}
|
||||
else
|
||||
{
|
||||
return $sDefault;
|
||||
}
|
||||
break;
|
||||
|
||||
case DICT_ERR_EXCEPTION:
|
||||
default:
|
||||
throw new DictExceptionMissingString(self::$m_sCurrentLanguage, $sStringCode);
|
||||
break;
|
||||
}
|
||||
return 'bug!';
|
||||
}
|
||||
|
||||
|
||||
public static function Format($sFormatCode /*, ... arguments ....*/)
|
||||
{
|
||||
$sLocalizedFormat = self::S($sFormatCode);
|
||||
$aArguments = func_get_args();
|
||||
|
||||
if ($sLocalizedFormat == $sFormatCode)
|
||||
{
|
||||
// Make sure the information will be displayed (ex: an error occuring before the dictionary gets loaded)
|
||||
return $sFormatCode.' - '.implode(', ', $aArguments);
|
||||
}
|
||||
|
||||
array_shift($aArguments);
|
||||
return vsprintf($sLocalizedFormat, $aArguments);
|
||||
}
|
||||
|
||||
|
||||
// sLanguageCode: Code identifying the language i.e. FR-FR
|
||||
// sEnglishLanguageDesc: Description of the language code, in English. i.e. French (France)
|
||||
// sLocalizedLanguageDesc: Description of the language code, in its own language. i.e. Français (France)
|
||||
// aEntries: Hash array of dictionnary entries
|
||||
public static function Add($sLanguageCode, $sEnglishLanguageDesc, $sLocalizedLanguageDesc, $aEntries)
|
||||
{
|
||||
if (!array_key_exists($sLanguageCode, self::$m_aLanguages))
|
||||
{
|
||||
self::$m_aLanguages[$sLanguageCode] = array('description' => $sEnglishLanguageDesc, 'localized_description' => $sLocalizedLanguageDesc);
|
||||
self::$m_aData[$sLanguageCode] = array();
|
||||
}
|
||||
self::$m_aData[$sLanguageCode] = array_merge(self::$m_aData[$sLanguageCode], $aEntries);
|
||||
}
|
||||
|
||||
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]))
|
||||
{
|
||||
$aMissing[$sStringCode] = $sValue;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (self::$m_aData[$sLanguageCode] as $sStringCode => $sValue)
|
||||
{
|
||||
if (!array_key_exists($sStringCode, self::$m_aData[$sLanguageRef]))
|
||||
{
|
||||
$aUnexpected[$sStringCode] = $sValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
// The value exists in the reference
|
||||
$sRefValue = self::$m_aData[$sLanguageRef][$sStringCode];
|
||||
if ($sValue == $sRefValue)
|
||||
{
|
||||
$aNotTranslated[$sStringCode] = $sValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
$aOK[$sStringCode] = $sValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
return array($aMissing, $aUnexpected, $aNotTranslated, $aOK);
|
||||
}
|
||||
|
||||
public static function Dump()
|
||||
{
|
||||
MyHelpers::var_dump_html(self::$m_aData);
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* Class Dict
|
||||
* Management of localizable strings
|
||||
*
|
||||
* @author Erwan Taloc <erwan.taloc@combodo.com>
|
||||
* @author Romain Quetiez <romain.quetiez@combodo.com>
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
class DictException extends CoreException
|
||||
{
|
||||
}
|
||||
|
||||
class DictExceptionUnknownLanguage extends DictException
|
||||
{
|
||||
public function __construct($sLanguageCode)
|
||||
{
|
||||
$aContext = array();
|
||||
$aContext['language_code'] = $sLanguageCode;
|
||||
parent::__construct('Unknown localization language', $aContext);
|
||||
}
|
||||
}
|
||||
|
||||
class DictExceptionMissingString extends DictException
|
||||
{
|
||||
public function __construct($sLanguageCode, $sStringCode)
|
||||
{
|
||||
$aContext = array();
|
||||
$aContext['language_code'] = $sLanguageCode;
|
||||
$aContext['string_code'] = $sStringCode;
|
||||
parent::__construct('Missing localized string', $aContext);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
define('DICT_ERR_STRING', 1); // when a string is missing, return the identifier
|
||||
define('DICT_ERR_EXCEPTION', 2); // when a string is missing, throw an exception
|
||||
//define('DICT_ERR_LOG', 3); // when a string is missing, log an error
|
||||
|
||||
|
||||
class Dict
|
||||
{
|
||||
protected static $m_bTraceFiles = false;
|
||||
protected static $m_aEntryFiles = array();
|
||||
|
||||
protected static $m_iErrorMode = DICT_ERR_STRING;
|
||||
protected static $m_sDefaultLanguage = 'EN US';
|
||||
protected static $m_sCurrentLanguage = null; // No language selected by default
|
||||
|
||||
protected static $m_aLanguages = array(); // array( code => array( 'description' => '...', 'localized_description' => '...') ...)
|
||||
protected static $m_aData = array();
|
||||
|
||||
|
||||
public static function EnableTraceFiles()
|
||||
{
|
||||
self::$m_bTraceFiles = true;
|
||||
}
|
||||
|
||||
public static function GetEntryFiles()
|
||||
{
|
||||
return self::$m_aEntryFiles;
|
||||
}
|
||||
|
||||
public static function SetDefaultLanguage($sLanguageCode)
|
||||
{
|
||||
if (!array_key_exists($sLanguageCode, self::$m_aLanguages))
|
||||
{
|
||||
throw new DictExceptionUnknownLanguage($sLanguageCode);
|
||||
}
|
||||
self::$m_sDefaultLanguage = $sLanguageCode;
|
||||
}
|
||||
|
||||
public static function SetUserLanguage($sLanguageCode)
|
||||
{
|
||||
if (!array_key_exists($sLanguageCode, self::$m_aLanguages))
|
||||
{
|
||||
throw new DictExceptionUnknownLanguage($sLanguageCode);
|
||||
}
|
||||
self::$m_sCurrentLanguage = $sLanguageCode;
|
||||
}
|
||||
|
||||
|
||||
public static function GetCurrentLanguage()
|
||||
{
|
||||
if (self::$m_sCurrentLanguage == null) // May happen when no user is logged in (i.e login screen, non authentifed page)
|
||||
{
|
||||
// In which case let's use the default language
|
||||
return self::$m_sDefaultLanguage;
|
||||
}
|
||||
return self::$m_sCurrentLanguage;
|
||||
}
|
||||
|
||||
//returns a hash array( code => array( 'description' => '...', 'localized_description' => '...') ...)
|
||||
public static function GetLanguages()
|
||||
{
|
||||
return self::$m_aLanguages;
|
||||
}
|
||||
|
||||
// iErrorMode from {DICT_ERR_STRING, DICT_ERR_EXCEPTION}
|
||||
public static function SetErrorMode($iErrorMode)
|
||||
{
|
||||
self::$m_iErrorMode = $iErrorMode;
|
||||
}
|
||||
|
||||
|
||||
public static function S($sStringCode, $sDefault = null)
|
||||
{
|
||||
// Attempt to find the string in the user language
|
||||
//
|
||||
if (!array_key_exists(self::GetCurrentLanguage(), self::$m_aData))
|
||||
{
|
||||
// It may happen, when something happens before the dictionnaries get loaded
|
||||
return $sStringCode;
|
||||
}
|
||||
$aCurrentDictionary = self::$m_aData[self::GetCurrentLanguage()];
|
||||
if (array_key_exists($sStringCode, $aCurrentDictionary))
|
||||
{
|
||||
return $aCurrentDictionary[$sStringCode];
|
||||
}
|
||||
// Attempt to find the string in the default language
|
||||
//
|
||||
$aDefaultDictionary = self::$m_aData[self::$m_sDefaultLanguage];
|
||||
if (array_key_exists($sStringCode, $aDefaultDictionary))
|
||||
{
|
||||
return $aDefaultDictionary[$sStringCode];
|
||||
}
|
||||
// Attempt to find the string in english
|
||||
//
|
||||
$aDefaultDictionary = self::$m_aData['EN US'];
|
||||
if (array_key_exists($sStringCode, $aDefaultDictionary))
|
||||
{
|
||||
return $aDefaultDictionary[$sStringCode];
|
||||
}
|
||||
// Could not find the string...
|
||||
//
|
||||
switch (self::$m_iErrorMode)
|
||||
{
|
||||
case DICT_ERR_STRING:
|
||||
if (is_null($sDefault))
|
||||
{
|
||||
return $sStringCode;
|
||||
}
|
||||
else
|
||||
{
|
||||
return $sDefault;
|
||||
}
|
||||
break;
|
||||
|
||||
case DICT_ERR_EXCEPTION:
|
||||
default:
|
||||
throw new DictExceptionMissingString(self::$m_sCurrentLanguage, $sStringCode);
|
||||
break;
|
||||
}
|
||||
return 'bug!';
|
||||
}
|
||||
|
||||
|
||||
public static function Format($sFormatCode /*, ... arguments ....*/)
|
||||
{
|
||||
$sLocalizedFormat = self::S($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);
|
||||
}
|
||||
|
||||
|
||||
// sLanguageCode: Code identifying the language i.e. FR-FR
|
||||
// sEnglishLanguageDesc: Description of the language code, in English. i.e. French (France)
|
||||
// sLocalizedLanguageDesc: Description of the language code, in its own language. i.e. Français (France)
|
||||
// aEntries: Hash array of dictionnary entries
|
||||
// ~~ or ~* can be used to indicate entries still to be translated.
|
||||
public static function Add($sLanguageCode, $sEnglishLanguageDesc, $sLocalizedLanguageDesc, $aEntries)
|
||||
{
|
||||
if (self::$m_bTraceFiles)
|
||||
{
|
||||
$aBacktrace = debug_backtrace();
|
||||
$sFile = $aBacktrace[0]["file"];
|
||||
|
||||
foreach($aEntries as $sKey => $sValue)
|
||||
{
|
||||
self::$m_aEntryFiles[$sLanguageCode][$sKey] = array(
|
||||
'file' => $sFile,
|
||||
'value' => $sValue
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!array_key_exists($sLanguageCode, self::$m_aLanguages))
|
||||
{
|
||||
self::$m_aLanguages[$sLanguageCode] = array('description' => $sEnglishLanguageDesc, 'localized_description' => $sLocalizedLanguageDesc);
|
||||
self::$m_aData[$sLanguageCode] = array();
|
||||
}
|
||||
foreach($aEntries as $sCode => $sValue)
|
||||
{
|
||||
self::$m_aData[$sLanguageCode][$sCode] = self::FilterString($sValue);
|
||||
}
|
||||
}
|
||||
|
||||
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]))
|
||||
{
|
||||
$aMissing[$sStringCode] = $sValue;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (self::$m_aData[$sLanguageCode] as $sStringCode => $sValue)
|
||||
{
|
||||
if (!array_key_exists($sStringCode, self::$m_aData[$sLanguageRef]))
|
||||
{
|
||||
$aUnexpected[$sStringCode] = $sValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
// The value exists in the reference
|
||||
$sRefValue = self::$m_aData[$sLanguageRef][$sStringCode];
|
||||
if ($sValue == $sRefValue)
|
||||
{
|
||||
$aNotTranslated[$sStringCode] = $sValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
$aOK[$sStringCode] = $sValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
return array($aMissing, $aUnexpected, $aNotTranslated, $aOK);
|
||||
}
|
||||
|
||||
public static function Dump()
|
||||
{
|
||||
MyHelpers::var_dump_html(self::$m_aData);
|
||||
}
|
||||
|
||||
public static function InCache($sApplicationPrefix)
|
||||
{
|
||||
if (function_exists('apc_fetch'))
|
||||
{
|
||||
$bResult = false;
|
||||
// Note: For versions of APC older than 3.0.17, fetch() accepts only one parameter
|
||||
//
|
||||
self::$m_aData = apc_fetch($sApplicationPrefix.'-dict');
|
||||
if (is_bool(self::$m_aData) && (self::$m_aData === false))
|
||||
{
|
||||
self::$m_aData = array();
|
||||
}
|
||||
else
|
||||
{
|
||||
self::$m_aLanguages = apc_fetch($sApplicationPrefix.'-languages');
|
||||
if (is_bool(self::$m_aLanguages) && (self::$m_aLanguages === false))
|
||||
{
|
||||
self::$m_aLanguages = array();
|
||||
}
|
||||
else
|
||||
{
|
||||
$bResult = true;
|
||||
}
|
||||
}
|
||||
return $bResult;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static function InitCache($sApplicationPrefix)
|
||||
{
|
||||
if (function_exists('apc_store'))
|
||||
{
|
||||
apc_store($sApplicationPrefix.'-languages', self::$m_aLanguages);
|
||||
apc_store($sApplicationPrefix.'-dict', self::$m_aData);
|
||||
}
|
||||
}
|
||||
|
||||
public static function ResetCache($sApplicationPrefix)
|
||||
{
|
||||
if (function_exists('apc_delete'))
|
||||
{
|
||||
apc_delete($sApplicationPrefix.'-languages');
|
||||
apc_delete($sApplicationPrefix.'-dict');
|
||||
}
|
||||
}
|
||||
|
||||
protected static function FilterString($s)
|
||||
{
|
||||
return str_replace(array('~~', '~*'), '', $s);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -24,6 +24,11 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
define ('EMAIL_SEND_OK', 0);
|
||||
define ('EMAIL_SEND_PENDING', 1);
|
||||
define ('EMAIL_SEND_ERROR', 2);
|
||||
|
||||
|
||||
class EMail
|
||||
{
|
||||
protected $m_sBody;
|
||||
@@ -31,15 +36,14 @@ class EMail
|
||||
protected $m_sTo;
|
||||
protected $m_aHeaders; // array of key=>value
|
||||
|
||||
public function __construct()
|
||||
public function __construct($sTo = '', $sSubject = '', $sBody = '', $aHeaders = array())
|
||||
{
|
||||
$this->m_sTo = '';
|
||||
$this->m_sSubject = '';
|
||||
$this->m_sBody = '';
|
||||
$this->m_aHeaders = array();
|
||||
$this->m_sTo = $sTo;
|
||||
$this->m_sSubject = $sSubject;
|
||||
$this->m_sBody = $sBody;
|
||||
$this->m_aHeaders = $aHeaders;
|
||||
}
|
||||
|
||||
|
||||
// Errors management : not that simple because we need that function to be
|
||||
// executed in the background, while making sure that any issue would be reported clearly
|
||||
protected $m_aMailErrors; //array of strings explaining the issues
|
||||
@@ -50,9 +54,22 @@ class EMail
|
||||
$this->m_aMailErrors[] = $sCleanMessage;
|
||||
}
|
||||
|
||||
protected function SendAsynchronous(&$aIssues, $oLog = null)
|
||||
{
|
||||
try
|
||||
{
|
||||
AsyncSendEmail::AddToQueue($this->m_sTo, $this->m_sSubject, $this->m_sBody, $this->m_aHeaders, $oLog);
|
||||
}
|
||||
catch(Exception $e)
|
||||
{
|
||||
$aIssues = array($e->GetMessage());
|
||||
return EMAIL_SEND_ERROR;
|
||||
}
|
||||
$aIssues = array();
|
||||
return EMAIL_SEND_PENDING;
|
||||
}
|
||||
|
||||
// returns a list of issues if any
|
||||
public function Send()
|
||||
protected function SendSynchronous(&$aIssues, $oLog = null)
|
||||
{
|
||||
$sHeaders = 'MIME-Version: 1.0' . "\r\n";
|
||||
// ! the case is important for MS-Outlook
|
||||
@@ -79,7 +96,36 @@ class EMail
|
||||
{
|
||||
$this->m_aMailErrors[] = 'Unknown reason';
|
||||
}
|
||||
return $this->m_aMailErrors;
|
||||
if (count($this->m_aMailErrors) > 0)
|
||||
{
|
||||
$aIssues = $this->m_aMailErrors;
|
||||
return EMAIL_SEND_ERROR;
|
||||
}
|
||||
else
|
||||
{
|
||||
$aIssues = array();
|
||||
return EMAIL_SEND_OK;
|
||||
}
|
||||
}
|
||||
|
||||
public function Send(&$aIssues, $bForceSynchronous = false, $oLog = null)
|
||||
{
|
||||
if ($bForceSynchronous)
|
||||
{
|
||||
return $this->SendSynchronous($aIssues, $oLog);
|
||||
}
|
||||
else
|
||||
{
|
||||
$bConfigASYNC = MetaModel::GetConfig()->Get('email_asynchronous');
|
||||
if ($bConfigASYNC)
|
||||
{
|
||||
return $this->SendAsynchronous($aIssues, $oLog);
|
||||
}
|
||||
else
|
||||
{
|
||||
return $this->SendSynchronous($aIssues, $oLog);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected function AddToHeader($sKey, $sValue)
|
||||
@@ -89,6 +135,11 @@ class EMail
|
||||
$this->m_aHeaders[$sKey] = $sValue;
|
||||
}
|
||||
}
|
||||
|
||||
public function SetReferences($sReferences)
|
||||
{
|
||||
$this->AddToHeader('References', $sReferences);
|
||||
}
|
||||
|
||||
public function SetBody($sBody)
|
||||
{
|
||||
@@ -132,4 +183,4 @@ class EMail
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
?>
|
||||
@@ -25,7 +25,7 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
class Event extends cmdbAbstractObject
|
||||
class Event extends DBObject implements iDisplay
|
||||
{
|
||||
public static function Init()
|
||||
{
|
||||
@@ -46,14 +46,77 @@ class Event extends cmdbAbstractObject
|
||||
MetaModel::Init_AddAttribute(new AttributeText("message", array("allowed_values"=>null, "sql"=>"message", "default_value"=>null, "is_null_allowed"=>false, "depends_on"=>array())));
|
||||
MetaModel::Init_AddAttribute(new AttributeDateTime("date", array("allowed_values"=>null, "sql"=>"date", "default_value"=>"", "is_null_allowed"=>false, "depends_on"=>array())));
|
||||
MetaModel::Init_AddAttribute(new AttributeString("userinfo", array("allowed_values"=>null, "sql"=>"userinfo", "default_value"=>null, "is_null_allowed"=>true, "depends_on"=>array())));
|
||||
// MetaModel::Init_AddAttribute(new AttributeString("userinfo", array("allowed_values"=>null, "sql"=>"userinfo", "default_value"=>null, "is_null_allowed"=>true, "depends_on"=>array())));
|
||||
|
||||
// Display lists
|
||||
MetaModel::Init_SetZListItems('details', array('message', 'date', 'userinfo')); // Attributes to be displayed for the complete details
|
||||
MetaModel::Init_SetZListItems('details', array('date', 'message', 'userinfo')); // Attributes to be displayed for the complete details
|
||||
MetaModel::Init_SetZListItems('list', array('date', 'finalclass', 'message')); // Attributes to be displayed for a list
|
||||
// Search criteria
|
||||
// MetaModel::Init_SetZListItems('standard_search', array('name')); // Criteria of the std search form
|
||||
// MetaModel::Init_SetZListItems('advanced_search', array('name')); // Criteria of the advanced search form
|
||||
}
|
||||
|
||||
/**
|
||||
* Maps the given context parameter name to the appropriate filter/search code for this class
|
||||
* @param string $sContextParam Name of the context parameter, i.e. 'org_id'
|
||||
* @return string Filter code, i.e. 'customer_id'
|
||||
*/
|
||||
public static function MapContextParam($sContextParam)
|
||||
{
|
||||
if ($sContextParam == 'menu')
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
return $sContextParam;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This function returns a 'hilight' CSS class, used to hilight a given row in a table
|
||||
* There are currently (i.e defined in the CSS) 4 possible values HILIGHT_CLASS_CRITICAL,
|
||||
* HILIGHT_CLASS_WARNING, HILIGHT_CLASS_OK, HILIGHT_CLASS_NONE
|
||||
* To Be overridden by derived classes
|
||||
* @param void
|
||||
* @return String The desired higlight class for the object/row
|
||||
*/
|
||||
public function GetHilightClass()
|
||||
{
|
||||
// Possible return values are:
|
||||
// HILIGHT_CLASS_CRITICAL, HILIGHT_CLASS_WARNING, HILIGHT_CLASS_OK, HILIGHT_CLASS_NONE
|
||||
return HILIGHT_CLASS_NONE; // Not hilighted by default
|
||||
}
|
||||
|
||||
public static function GetUIPage()
|
||||
{
|
||||
return '../pages/UI.php';
|
||||
}
|
||||
|
||||
function DisplayDetails(WebPage $oPage, $bEditMode = false)
|
||||
{
|
||||
// Object's details
|
||||
//$this->DisplayBareHeader($oPage, $bEditMode);
|
||||
$oPage->AddTabContainer(OBJECT_PROPERTIES_TAB);
|
||||
$oPage->SetCurrentTabContainer(OBJECT_PROPERTIES_TAB);
|
||||
$oPage->SetCurrentTab(Dict::S('UI:PropertiesTab'));
|
||||
$this->DisplayBareProperties($oPage, $bEditMode);
|
||||
}
|
||||
|
||||
function DisplayBareProperties(WebPage $oPage, $bEditMode = false)
|
||||
{
|
||||
if ($bEditMode) return; // Not editable
|
||||
|
||||
$aDetails = array();
|
||||
$sClass = get_class($this);
|
||||
$aZList = MetaModel::FlattenZlist(MetaModel::GetZListItems($sClass, 'details'));
|
||||
foreach( $aZList as $sAttCode)
|
||||
{
|
||||
$sDisplayValue = $this->GetAsHTML($sAttCode);
|
||||
$aDetails[] = array('label' => '<span title="'.MetaModel::GetDescription($sClass, $sAttCode).'">'.MetaModel::GetLabel($sClass, $sAttCode).'</span>', 'value' => $sDisplayValue);
|
||||
}
|
||||
$oPage->Details($aDetails);
|
||||
}
|
||||
}
|
||||
|
||||
class EventNotification extends Event
|
||||
@@ -79,8 +142,8 @@ class EventNotification extends Event
|
||||
MetaModel::Init_AddAttribute(new AttributeInteger("object_id", array("allowed_values"=>null, "sql"=>"object_id", "default_value"=>0, "is_null_allowed"=>false, "depends_on"=>array())));
|
||||
|
||||
// Display lists
|
||||
MetaModel::Init_SetZListItems('details', array('date', 'userinfo', 'trigger_id', 'action_id', 'object_id')); // Attributes to be displayed for the complete details
|
||||
MetaModel::Init_SetZListItems('list', array('date', 'userinfo')); // Attributes to be displayed for a list
|
||||
MetaModel::Init_SetZListItems('details', array('date', 'message', 'userinfo', 'trigger_id', 'action_id', 'object_id')); // Attributes to be displayed for the complete details
|
||||
MetaModel::Init_SetZListItems('list', array('date', 'message')); // Attributes to be displayed for a list
|
||||
// Search criteria
|
||||
// MetaModel::Init_SetZListItems('standard_search', array('name')); // Criteria of the std search form
|
||||
// MetaModel::Init_SetZListItems('advanced_search', array('name')); // Criteria of the advanced search form
|
||||
@@ -115,7 +178,7 @@ class EventNotificationEmail extends EventNotification
|
||||
|
||||
// Display lists
|
||||
MetaModel::Init_SetZListItems('details', array('date', 'userinfo', 'message', 'trigger_id', 'action_id', 'object_id', 'to', 'cc', 'bcc', 'from', 'subject', 'body')); // Attributes to be displayed for the complete details
|
||||
MetaModel::Init_SetZListItems('list', array('date', 'userinfo', 'message', 'to', 'subject')); // Attributes to be displayed for a list
|
||||
MetaModel::Init_SetZListItems('list', array('date', 'message', 'to', 'subject')); // Attributes to be displayed for a list
|
||||
|
||||
// Search criteria
|
||||
// MetaModel::Init_SetZListItems('standard_search', array('name')); // Criteria of the std search form
|
||||
@@ -258,4 +321,35 @@ class EventWebService extends Event
|
||||
}
|
||||
}
|
||||
|
||||
class EventLoginUsage extends Event
|
||||
{
|
||||
public static function Init()
|
||||
{
|
||||
$aParams = array
|
||||
(
|
||||
"category" => "core/cmdb,view_in_gui",
|
||||
"key_type" => "autoincrement",
|
||||
"name_attcode" => "",
|
||||
"state_attcode" => "",
|
||||
"reconc_keys" => array(),
|
||||
"db_table" => "priv_event_loginusage",
|
||||
"db_key_field" => "id",
|
||||
"db_finalclass_field" => "",
|
||||
);
|
||||
MetaModel::Init_Params($aParams);
|
||||
MetaModel::Init_InheritAttributes();
|
||||
|
||||
MetaModel::Init_AddAttribute(new AttributeExternalKey("user_id", array("targetclass"=>"User", "jointype"=> "", "allowed_values"=>null, "sql"=>"user_id", "is_null_allowed"=>false, "on_target_delete"=>DEL_MANUAL, "depends_on"=>array())));
|
||||
MetaModel::Init_AddAttribute(new AttributeExternalField("contact_name", array("allowed_values"=>null, "extkey_attcode"=>"user_id", "target_attcode"=>"contactid", "is_null_allowed"=>true, "depends_on"=>array())));
|
||||
MetaModel::Init_AddAttribute(new AttributeExternalField("contact_email", array("allowed_values"=>null, "extkey_attcode"=>"user_id", "target_attcode"=>"email", "is_null_allowed"=>true, "depends_on"=>array())));
|
||||
|
||||
// Display lists
|
||||
MetaModel::Init_SetZListItems('details', array('date', 'user_id', 'contact_name', 'contact_email', 'userinfo', 'message')); // Attributes to be displayed for the complete details
|
||||
MetaModel::Init_SetZListItems('list', array('date', 'user_id', 'contact_name', 'contact_email', 'userinfo')); // Attributes to be displayed for a list
|
||||
// Search criteria
|
||||
MetaModel::Init_SetZListItems('standard_search', array('date', 'user_id', 'contact_name', 'contact_email')); // Criteria of the std search form
|
||||
// MetaModel::Init_SetZListItems('advanced_search', array('name')); // Criteria of the advanced search form
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
@@ -30,7 +30,8 @@ class MissingQueryArgument extends CoreException
|
||||
abstract class Expression
|
||||
{
|
||||
// recursive translation of identifiers
|
||||
abstract public function Translate($aTranslationData, $bMatchAll = true);
|
||||
abstract public function GetUnresolvedFields($sAlias, &$aUnresolved);
|
||||
abstract public function Translate($aTranslationData, $bMatchAll = true, $bMarkFieldsAsResolved = true);
|
||||
|
||||
// recursive rendering (aArgs used as input by default, or used as output if bRetrofitParams set to True
|
||||
abstract public function Render(&$aArgs = null, $bRetrofitParams = false);
|
||||
@@ -66,6 +67,12 @@ abstract class Expression
|
||||
return $oExpression;
|
||||
}
|
||||
|
||||
static public function FromSQL($sSQL)
|
||||
{
|
||||
$oSql = new SQLExpression($sSQL);
|
||||
return $oSql;
|
||||
}
|
||||
|
||||
public function LogAnd($oExpr)
|
||||
{
|
||||
if ($this->IsTrue()) return clone $oExpr;
|
||||
@@ -79,6 +86,42 @@ abstract class Expression
|
||||
}
|
||||
}
|
||||
|
||||
class SQLExpression extends Expression
|
||||
{
|
||||
protected $m_sSQL;
|
||||
|
||||
public function __construct($sSQL)
|
||||
{
|
||||
$this->m_sSQL = $sSQL;
|
||||
}
|
||||
|
||||
public function IsTrue()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// recursive rendering
|
||||
public function Render(&$aArgs = null, $bRetrofitParams = false)
|
||||
{
|
||||
return $this->m_sSQL;
|
||||
}
|
||||
|
||||
public function GetUnresolvedFields($sAlias, &$aUnresolved)
|
||||
{
|
||||
}
|
||||
|
||||
public function Translate($aTranslationData, $bMatchAll = true, $bMarkFieldsAsResolved = true)
|
||||
{
|
||||
return clone $this;
|
||||
}
|
||||
|
||||
public function ListRequiredFields()
|
||||
{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
class BinaryExpression extends Expression
|
||||
{
|
||||
@@ -143,10 +186,16 @@ class BinaryExpression extends Expression
|
||||
return "($sLeft $sOperator $sRight)";
|
||||
}
|
||||
|
||||
public function Translate($aTranslationData, $bMatchAll = true)
|
||||
public function GetUnresolvedFields($sAlias, &$aUnresolved)
|
||||
{
|
||||
$oLeft = $this->GetLeftExpr()->Translate($aTranslationData, $bMatchAll);
|
||||
$oRight = $this->GetRightExpr()->Translate($aTranslationData, $bMatchAll);
|
||||
$this->GetLeftExpr()->GetUnresolvedFields($sAlias, $aUnresolved);
|
||||
$this->GetRightExpr()->GetUnresolvedFields($sAlias, $aUnresolved);
|
||||
}
|
||||
|
||||
public function Translate($aTranslationData, $bMatchAll = true, $bMarkFieldsAsResolved = true)
|
||||
{
|
||||
$oLeft = $this->GetLeftExpr()->Translate($aTranslationData, $bMatchAll, $bMarkFieldsAsResolved);
|
||||
$oRight = $this->GetRightExpr()->Translate($aTranslationData, $bMatchAll, $bMarkFieldsAsResolved);
|
||||
return new BinaryExpression($oLeft, $this->GetOperator(), $oRight);
|
||||
}
|
||||
|
||||
@@ -194,7 +243,11 @@ class UnaryExpression extends Expression
|
||||
}
|
||||
}
|
||||
|
||||
public function Translate($aTranslationData, $bMatchAll = true)
|
||||
public function GetUnresolvedFields($sAlias, &$aUnresolved)
|
||||
{
|
||||
}
|
||||
|
||||
public function Translate($aTranslationData, $bMatchAll = true, $bMarkFieldsAsResolved = true)
|
||||
{
|
||||
return clone $this;
|
||||
}
|
||||
@@ -275,7 +328,21 @@ class FieldExpression extends UnaryExpression
|
||||
return "`{$this->m_sParent}`.`{$this->m_sName}`";
|
||||
}
|
||||
|
||||
public function Translate($aTranslationData, $bMatchAll = true)
|
||||
public function ListRequiredFields()
|
||||
{
|
||||
return array($this->m_sParent.'.'.$this->m_sName);
|
||||
}
|
||||
|
||||
public function GetUnresolvedFields($sAlias, &$aUnresolved)
|
||||
{
|
||||
if ($this->m_sParent == $sAlias)
|
||||
{
|
||||
// Add a reference to the field
|
||||
$aUnresolved[$this->m_sName] = $this;
|
||||
}
|
||||
}
|
||||
|
||||
public function Translate($aTranslationData, $bMatchAll = true, $bMarkFieldsAsResolved = true)
|
||||
{
|
||||
if (!array_key_exists($this->m_sParent, $aTranslationData))
|
||||
{
|
||||
@@ -292,21 +359,35 @@ class FieldExpression extends UnaryExpression
|
||||
}
|
||||
$sNewParent = $aTranslationData[$this->m_sParent]['*'];
|
||||
$sNewName = $this->m_sName;
|
||||
if ($bMarkFieldsAsResolved)
|
||||
{
|
||||
$oRet = new FieldExpressionResolved($sNewName, $sNewParent);
|
||||
}
|
||||
else
|
||||
{
|
||||
$oRet = new FieldExpression($sNewName, $sNewParent);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$sNewParent = $aTranslationData[$this->m_sParent][$this->m_sName][0];
|
||||
$sNewName = $aTranslationData[$this->m_sParent][$this->m_sName][1];
|
||||
$oRet = $aTranslationData[$this->m_sParent][$this->m_sName];
|
||||
}
|
||||
return new FieldExpression($sNewName, $sNewParent);
|
||||
}
|
||||
|
||||
public function ListRequiredFields()
|
||||
{
|
||||
return array($this->m_sParent.'.'.$this->m_sName);
|
||||
return $oRet;
|
||||
}
|
||||
}
|
||||
|
||||
// Has been resolved into an SQL expression
|
||||
class FieldExpressionResolved extends FieldExpression
|
||||
{
|
||||
public function GetUnresolvedFields($sAlias, &$aUnresolved)
|
||||
{
|
||||
}
|
||||
|
||||
public function Translate($aTranslationData, $bMatchAll = true, $bMarkFieldsAsResolved = true)
|
||||
{
|
||||
return clone $this;
|
||||
}
|
||||
}
|
||||
|
||||
class VariableExpression extends UnaryExpression
|
||||
{
|
||||
@@ -393,12 +474,20 @@ class ListExpression extends Expression
|
||||
return '('.implode(', ', $aRes).')';
|
||||
}
|
||||
|
||||
public function Translate($aTranslationData, $bMatchAll = true)
|
||||
public function GetUnresolvedFields($sAlias, &$aUnresolved)
|
||||
{
|
||||
foreach ($this->m_aExpressions as $oExpr)
|
||||
{
|
||||
$oExpr->GetUnresolvedFields($sAlias, $aUnresolved);
|
||||
}
|
||||
}
|
||||
|
||||
public function Translate($aTranslationData, $bMatchAll = true, $bMarkFieldsAsResolved = true)
|
||||
{
|
||||
$aRes = array();
|
||||
foreach ($this->m_aExpressions as $oExpr)
|
||||
{
|
||||
$aRes[] = $oExpr->Translate($aTranslationData, $bMatchAll);
|
||||
$aRes[] = $oExpr->Translate($aTranslationData, $bMatchAll, $bMarkFieldsAsResolved);
|
||||
}
|
||||
return new ListExpression($aRes);
|
||||
}
|
||||
@@ -453,12 +542,20 @@ class FunctionExpression extends Expression
|
||||
return $this->m_sVerb.'('.implode(', ', $aRes).')';
|
||||
}
|
||||
|
||||
public function Translate($aTranslationData, $bMatchAll = true)
|
||||
public function GetUnresolvedFields($sAlias, &$aUnresolved)
|
||||
{
|
||||
foreach ($this->m_aArgs as $oExpr)
|
||||
{
|
||||
$oExpr->GetUnresolvedFields($sAlias, $aUnresolved);
|
||||
}
|
||||
}
|
||||
|
||||
public function Translate($aTranslationData, $bMatchAll = true, $bMarkFieldsAsResolved = true)
|
||||
{
|
||||
$aRes = array();
|
||||
foreach ($this->m_aArgs as $oExpr)
|
||||
{
|
||||
$aRes[] = $oExpr->Translate($aTranslationData, $bMatchAll);
|
||||
$aRes[] = $oExpr->Translate($aTranslationData, $bMatchAll, $bMarkFieldsAsResolved);
|
||||
}
|
||||
return new FunctionExpression($this->m_sVerb, $aRes);
|
||||
}
|
||||
@@ -507,9 +604,14 @@ class IntervalExpression extends Expression
|
||||
return 'INTERVAL '.$this->m_oValue->Render($aArgs, $bRetrofitParams).' '.$this->m_sUnit;
|
||||
}
|
||||
|
||||
public function Translate($aTranslationData, $bMatchAll = true)
|
||||
public function GetUnresolvedFields($sAlias, &$aUnresolved)
|
||||
{
|
||||
return new IntervalExpression($this->m_oValue->Translate($aTranslationData, $bMatchAll), $this->m_sUnit);
|
||||
$this->m_oValue->GetUnresolvedFields($sAlias, $aUnresolved);
|
||||
}
|
||||
|
||||
public function Translate($aTranslationData, $bMatchAll = true, $bMarkFieldsAsResolved = true)
|
||||
{
|
||||
return new IntervalExpression($this->m_oValue->Translate($aTranslationData, $bMatchAll, $bMarkFieldsAsResolved), $this->m_sUnit);
|
||||
}
|
||||
|
||||
public function ListRequiredFields()
|
||||
@@ -551,12 +653,20 @@ class CharConcatExpression extends Expression
|
||||
return "CAST(CONCAT(".implode(', ', $aRes).") AS CHAR)";
|
||||
}
|
||||
|
||||
public function Translate($aTranslationData, $bMatchAll = true)
|
||||
public function GetUnresolvedFields($sAlias, &$aUnresolved)
|
||||
{
|
||||
foreach ($this->m_aExpressions as $oExpr)
|
||||
{
|
||||
$oExpr->GetUnresolvedFields($sAlias, $aUnresolved);
|
||||
}
|
||||
}
|
||||
|
||||
public function Translate($aTranslationData, $bMatchAll = true, $bMarkFieldsAsResolved = true)
|
||||
{
|
||||
$aRes = array();
|
||||
foreach ($this->m_aExpressions as $oExpr)
|
||||
{
|
||||
$aRes[] = $oExpr->Translate($aTranslationData, $bMatchAll);
|
||||
$aRes[] = $oExpr->Translate($aTranslationData, $bMatchAll, $bMarkFieldsAsResolved);
|
||||
}
|
||||
return new CharConcatExpression($aRes);
|
||||
}
|
||||
@@ -572,4 +682,102 @@ class CharConcatExpression extends Expression
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class CharConcatWSExpression extends CharConcatExpression
|
||||
{
|
||||
protected $m_separator;
|
||||
|
||||
public function __construct($separator, $aExpressions)
|
||||
{
|
||||
$this->m_separator = $separator;
|
||||
parent::__construct($aExpressions);
|
||||
}
|
||||
|
||||
// recursive rendering
|
||||
public function Render(&$aArgs = null, $bRetrofitParams = false)
|
||||
{
|
||||
$aRes = array();
|
||||
foreach ($this->m_aExpressions as $oExpr)
|
||||
{
|
||||
$sCol = $oExpr->Render($aArgs, $bRetrofitParams);
|
||||
// Concat will be globally NULL if one single argument is null !
|
||||
$aRes[] = "COALESCE($sCol, '')";
|
||||
}
|
||||
$sSep = CMDBSource::Quote($this->m_separator);
|
||||
return "CAST(CONCAT_WS($sSep, ".implode(', ', $aRes).") AS CHAR)";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class QueryBuilderExpressions
|
||||
{
|
||||
protected $m_oConditionExpr;
|
||||
protected $m_aSelectExpr;
|
||||
protected $m_aJoinFields;
|
||||
|
||||
public function __construct($aSelect, $oCondition)
|
||||
{
|
||||
$this->m_oConditionExpr = $oCondition;
|
||||
$this->m_aSelectExpr = $aSelect;
|
||||
$this->m_aJoinFields = array();
|
||||
}
|
||||
|
||||
public function GetSelect()
|
||||
{
|
||||
return $this->m_aSelectExpr;
|
||||
}
|
||||
|
||||
public function GetCondition()
|
||||
{
|
||||
return $this->m_oConditionExpr;
|
||||
}
|
||||
|
||||
public function PopJoinField()
|
||||
{
|
||||
return array_pop($this->m_aJoinFields);
|
||||
}
|
||||
|
||||
public function AddSelect($sAttAlias, $oExpression)
|
||||
{
|
||||
$this->m_aSelectExpr[$sAttAlias] = $oExpression;
|
||||
}
|
||||
|
||||
//$oConditionTree = $oConditionTree->LogAnd($oFinalClassRestriction);
|
||||
public function AddCondition($oExpression)
|
||||
{
|
||||
$this->m_oConditionExpr = $this->m_oConditionExpr->LogAnd($oExpression);
|
||||
}
|
||||
|
||||
public function PushJoinField($oExpression)
|
||||
{
|
||||
array_push($this->m_aJoinFields, $oExpression);
|
||||
}
|
||||
|
||||
public function GetUnresolvedFields($sAlias, &$aUnresolved)
|
||||
{
|
||||
$this->m_oConditionExpr->GetUnresolvedFields($sAlias, $aUnresolved);
|
||||
foreach($this->m_aSelectExpr as $sColAlias => $oExpr)
|
||||
{
|
||||
$oExpr->GetUnresolvedFields($sAlias, $aUnresolved);
|
||||
}
|
||||
foreach($this->m_aJoinFields as $oExpression)
|
||||
{
|
||||
$oExpression->GetUnresolvedFields($sAlias, $aUnresolved);
|
||||
}
|
||||
}
|
||||
|
||||
public function Translate($aTranslationData, $bMatchAll = true, $bMarkFieldsAsResolved = true)
|
||||
{
|
||||
$this->m_oConditionExpr = $this->m_oConditionExpr->Translate($aTranslationData, $bMatchAll, $bMarkFieldsAsResolved);
|
||||
foreach($this->m_aSelectExpr as $sColAlias => $oExpr)
|
||||
{
|
||||
$this->m_aSelectExpr[$sColAlias] = $oExpr->Translate($aTranslationData, $bMatchAll, $bMarkFieldsAsResolved);
|
||||
}
|
||||
foreach($this->m_aJoinFields as $index => $oExpression)
|
||||
{
|
||||
$this->m_aJoinFields[$index] = $oExpression->Translate($aTranslationData, $bMatchAll, $bMarkFieldsAsResolved);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
@@ -198,10 +198,10 @@ class FilterFromAttribute extends FilterDefinition
|
||||
return $oAttDef->GetValuesDef();
|
||||
}
|
||||
|
||||
public function GetAllowedValues($aArgs = array(), $sBeginsWith = '')
|
||||
public function GetAllowedValues($aArgs = array(), $sContains = '')
|
||||
{
|
||||
$oAttDef = $this->Get("refattribute");
|
||||
return $oAttDef->GetAllowedValues($aArgs, $sBeginsWith);
|
||||
return $oAttDef->GetAllowedValues($aArgs, $sContains);
|
||||
}
|
||||
|
||||
public function GetOperators()
|
||||
|
||||
@@ -193,4 +193,13 @@ class ExecutionKPI
|
||||
}
|
||||
}
|
||||
|
||||
class ApplicationStartupKPI extends ExecutionKPI
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
global $fItopStarted;
|
||||
$this->m_fStarted = $fItopStarted;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
@@ -1,120 +1,146 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* File logging
|
||||
*
|
||||
* @author Erwan Taloc <erwan.taloc@combodo.com>
|
||||
* @author Romain Quetiez <romain.quetiez@combodo.com>
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
class FileLog
|
||||
{
|
||||
protected $m_sFile = ''; // log is disabled if this is empty
|
||||
|
||||
public function __construct($sFileName = '')
|
||||
{
|
||||
$this->m_sFile = $sFileName;
|
||||
}
|
||||
|
||||
public function Error($sText)
|
||||
{
|
||||
self::Write("Error | ".$sText);
|
||||
}
|
||||
|
||||
public function Warning($sText)
|
||||
{
|
||||
self::Write("Warning | ".$sText);
|
||||
}
|
||||
|
||||
public function Info($sText)
|
||||
{
|
||||
self::Write("Info | ".$sText);
|
||||
}
|
||||
|
||||
public function Ok($sText)
|
||||
{
|
||||
self::Write("Ok | ".$sText);
|
||||
}
|
||||
|
||||
protected function Write($sText)
|
||||
{
|
||||
if (strlen($this->m_sFile) == 0) return;
|
||||
|
||||
$hLogFile = @fopen($this->m_sFile, 'a');
|
||||
if ($hLogFile !== false)
|
||||
{
|
||||
$sDate = date('Y-m-d H:i:s');
|
||||
fwrite($hLogFile, "$sDate | $sText\n");
|
||||
fclose($hLogFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class SetupLog
|
||||
{
|
||||
protected static $m_oFileLog;
|
||||
|
||||
public static function Enable($sTargetFile)
|
||||
{
|
||||
self::$m_oFileLog = new FileLog($sTargetFile);
|
||||
}
|
||||
public static function Error($sText)
|
||||
{
|
||||
self::$m_oFileLog->Error($sText);
|
||||
}
|
||||
public static function Warning($sText)
|
||||
{
|
||||
self::$m_oFileLog->Warning($sText);
|
||||
}
|
||||
public static function Info($sText)
|
||||
{
|
||||
self::$m_oFileLog->Info($sText);
|
||||
}
|
||||
public static function Ok($sText)
|
||||
{
|
||||
self::$m_oFileLog->Ok($sText);
|
||||
}
|
||||
}
|
||||
|
||||
class IssueLog
|
||||
{
|
||||
protected static $m_oFileLog;
|
||||
|
||||
public static function Enable($sTargetFile)
|
||||
{
|
||||
self::$m_oFileLog = new FileLog($sTargetFile);
|
||||
}
|
||||
public static function Error($sText)
|
||||
{
|
||||
self::$m_oFileLog->Error($sText);
|
||||
}
|
||||
public static function Warning($sText)
|
||||
{
|
||||
self::$m_oFileLog->Warning($sText);
|
||||
}
|
||||
public static function Info($sText)
|
||||
{
|
||||
self::$m_oFileLog->Info($sText);
|
||||
}
|
||||
public static function Ok($sText)
|
||||
{
|
||||
self::$m_oFileLog->Ok($sText);
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* File logging
|
||||
*
|
||||
* @author Erwan Taloc <erwan.taloc@combodo.com>
|
||||
* @author Romain Quetiez <romain.quetiez@combodo.com>
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
class FileLog
|
||||
{
|
||||
protected $m_sFile = ''; // log is disabled if this is empty
|
||||
|
||||
public function __construct($sFileName = '')
|
||||
{
|
||||
$this->m_sFile = $sFileName;
|
||||
}
|
||||
|
||||
public function Error($sText)
|
||||
{
|
||||
self::Write("Error | ".$sText);
|
||||
}
|
||||
|
||||
public function Warning($sText)
|
||||
{
|
||||
self::Write("Warning | ".$sText);
|
||||
}
|
||||
|
||||
public function Info($sText)
|
||||
{
|
||||
self::Write("Info | ".$sText);
|
||||
}
|
||||
|
||||
public function Ok($sText)
|
||||
{
|
||||
self::Write("Ok | ".$sText);
|
||||
}
|
||||
|
||||
protected function Write($sText)
|
||||
{
|
||||
if (strlen($this->m_sFile) == 0) return;
|
||||
|
||||
$hLogFile = @fopen($this->m_sFile, 'a');
|
||||
if ($hLogFile !== false)
|
||||
{
|
||||
$sDate = date('Y-m-d H:i:s');
|
||||
fwrite($hLogFile, "$sDate | $sText\n");
|
||||
fclose($hLogFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class SetupLog
|
||||
{
|
||||
protected static $m_oFileLog;
|
||||
|
||||
public static function Enable($sTargetFile)
|
||||
{
|
||||
self::$m_oFileLog = new FileLog($sTargetFile);
|
||||
}
|
||||
public static function Error($sText)
|
||||
{
|
||||
self::$m_oFileLog->Error($sText);
|
||||
}
|
||||
public static function Warning($sText)
|
||||
{
|
||||
self::$m_oFileLog->Warning($sText);
|
||||
}
|
||||
public static function Info($sText)
|
||||
{
|
||||
self::$m_oFileLog->Info($sText);
|
||||
}
|
||||
public static function Ok($sText)
|
||||
{
|
||||
self::$m_oFileLog->Ok($sText);
|
||||
}
|
||||
}
|
||||
|
||||
class IssueLog
|
||||
{
|
||||
protected static $m_oFileLog;
|
||||
|
||||
public static function Enable($sTargetFile)
|
||||
{
|
||||
self::$m_oFileLog = new FileLog($sTargetFile);
|
||||
}
|
||||
public static function Error($sText)
|
||||
{
|
||||
self::$m_oFileLog->Error($sText);
|
||||
}
|
||||
public static function Warning($sText)
|
||||
{
|
||||
self::$m_oFileLog->Warning($sText);
|
||||
}
|
||||
public static function Info($sText)
|
||||
{
|
||||
self::$m_oFileLog->Info($sText);
|
||||
}
|
||||
public static function Ok($sText)
|
||||
{
|
||||
self::$m_oFileLog->Ok($sText);
|
||||
}
|
||||
}
|
||||
|
||||
class ToolsLog
|
||||
{
|
||||
protected static $m_oFileLog;
|
||||
|
||||
public static function Enable($sTargetFile)
|
||||
{
|
||||
self::$m_oFileLog = new FileLog($sTargetFile);
|
||||
}
|
||||
public static function Error($sText)
|
||||
{
|
||||
self::$m_oFileLog->Error($sText);
|
||||
}
|
||||
public static function Warning($sText)
|
||||
{
|
||||
self::$m_oFileLog->Warning($sText);
|
||||
}
|
||||
public static function Info($sText)
|
||||
{
|
||||
self::$m_oFileLog->Info($sText);
|
||||
}
|
||||
public static function Ok($sText)
|
||||
{
|
||||
self::$m_oFileLog->Ok($sText);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
37
core/modulehandler.class.inc.php
Normal file
37
core/modulehandler.class.inc.php
Normal file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* Class ModuleHandler
|
||||
* Defines the API to implement module specific actions during page execution
|
||||
*
|
||||
* @author Erwan Taloc <erwan.taloc@combodo.com>
|
||||
* @author Romain Quetiez <romain.quetiez@combodo.com>
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
abstract class ModuleHandlerAPI
|
||||
{
|
||||
public static function OnMetaModelStarted()
|
||||
{
|
||||
}
|
||||
|
||||
public static function OnMenuCreation()
|
||||
{
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,5 +1,29 @@
|
||||
<?php
|
||||
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* OQL syntax analyzer, to be used prior to run the lexical analyzer
|
||||
*
|
||||
* @author Erwan Taloc <erwan.taloc@combodo.com>
|
||||
* @author Romain Quetiez <romain.quetiez@combodo.com>
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
// Notes (from the source file: oql-lexer.plex) - Romain
|
||||
//
|
||||
// The strval rule is a little bit cryptic.
|
||||
@@ -98,6 +122,7 @@ class OQLLexerRaw
|
||||
'/^,/',
|
||||
'/^\\(/',
|
||||
'/^\\)/',
|
||||
'/^REGEXP/',
|
||||
'/^=/',
|
||||
'/^!=/',
|
||||
'/^>/',
|
||||
@@ -112,6 +137,7 @@ class OQLLexerRaw
|
||||
'/^IF/',
|
||||
'/^ELT/',
|
||||
'/^COALESCE/',
|
||||
'/^ISNULL/',
|
||||
'/^CONCAT/',
|
||||
'/^SUBSTR/',
|
||||
'/^TRIM/',
|
||||
@@ -314,204 +340,214 @@ class OQLLexerRaw
|
||||
function yy_r1_16($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::EQ;
|
||||
$this->token = OQLParser::REGEXP;
|
||||
}
|
||||
function yy_r1_17($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::NOT_EQ;
|
||||
$this->token = OQLParser::EQ;
|
||||
}
|
||||
function yy_r1_18($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::GT;
|
||||
$this->token = OQLParser::NOT_EQ;
|
||||
}
|
||||
function yy_r1_19($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::LT;
|
||||
$this->token = OQLParser::GT;
|
||||
}
|
||||
function yy_r1_20($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::GE;
|
||||
$this->token = OQLParser::LT;
|
||||
}
|
||||
function yy_r1_21($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::LE;
|
||||
$this->token = OQLParser::GE;
|
||||
}
|
||||
function yy_r1_22($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::LIKE;
|
||||
$this->token = OQLParser::LE;
|
||||
}
|
||||
function yy_r1_23($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::NOT_LIKE;
|
||||
$this->token = OQLParser::LIKE;
|
||||
}
|
||||
function yy_r1_24($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::IN;
|
||||
$this->token = OQLParser::NOT_LIKE;
|
||||
}
|
||||
function yy_r1_25($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::NOT_IN;
|
||||
$this->token = OQLParser::IN;
|
||||
}
|
||||
function yy_r1_26($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::INTERVAL;
|
||||
$this->token = OQLParser::NOT_IN;
|
||||
}
|
||||
function yy_r1_27($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_IF;
|
||||
$this->token = OQLParser::INTERVAL;
|
||||
}
|
||||
function yy_r1_28($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_ELT;
|
||||
$this->token = OQLParser::F_IF;
|
||||
}
|
||||
function yy_r1_29($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_COALESCE;
|
||||
$this->token = OQLParser::F_ELT;
|
||||
}
|
||||
function yy_r1_30($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_CONCAT;
|
||||
$this->token = OQLParser::F_COALESCE;
|
||||
}
|
||||
function yy_r1_31($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_SUBSTR;
|
||||
$this->token = OQLParser::F_ISNULL;
|
||||
}
|
||||
function yy_r1_32($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_TRIM;
|
||||
$this->token = OQLParser::F_CONCAT;
|
||||
}
|
||||
function yy_r1_33($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_DATE;
|
||||
$this->token = OQLParser::F_SUBSTR;
|
||||
}
|
||||
function yy_r1_34($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_DATE_FORMAT;
|
||||
$this->token = OQLParser::F_TRIM;
|
||||
}
|
||||
function yy_r1_35($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_CURRENT_DATE;
|
||||
$this->token = OQLParser::F_DATE;
|
||||
}
|
||||
function yy_r1_36($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_NOW;
|
||||
$this->token = OQLParser::F_DATE_FORMAT;
|
||||
}
|
||||
function yy_r1_37($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_TIME;
|
||||
$this->token = OQLParser::F_CURRENT_DATE;
|
||||
}
|
||||
function yy_r1_38($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_TO_DAYS;
|
||||
$this->token = OQLParser::F_NOW;
|
||||
}
|
||||
function yy_r1_39($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_FROM_DAYS;
|
||||
$this->token = OQLParser::F_TIME;
|
||||
}
|
||||
function yy_r1_40($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_YEAR;
|
||||
$this->token = OQLParser::F_TO_DAYS;
|
||||
}
|
||||
function yy_r1_41($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_MONTH;
|
||||
$this->token = OQLParser::F_FROM_DAYS;
|
||||
}
|
||||
function yy_r1_42($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_DAY;
|
||||
$this->token = OQLParser::F_YEAR;
|
||||
}
|
||||
function yy_r1_43($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_HOUR;
|
||||
$this->token = OQLParser::F_MONTH;
|
||||
}
|
||||
function yy_r1_44($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_MINUTE;
|
||||
$this->token = OQLParser::F_DAY;
|
||||
}
|
||||
function yy_r1_45($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_SECOND;
|
||||
$this->token = OQLParser::F_HOUR;
|
||||
}
|
||||
function yy_r1_46($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_DATE_ADD;
|
||||
$this->token = OQLParser::F_MINUTE;
|
||||
}
|
||||
function yy_r1_47($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_DATE_SUB;
|
||||
$this->token = OQLParser::F_SECOND;
|
||||
}
|
||||
function yy_r1_48($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_ROUND;
|
||||
$this->token = OQLParser::F_DATE_ADD;
|
||||
}
|
||||
function yy_r1_49($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_FLOOR;
|
||||
$this->token = OQLParser::F_DATE_SUB;
|
||||
}
|
||||
function yy_r1_50($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_INET_ATON;
|
||||
$this->token = OQLParser::F_ROUND;
|
||||
}
|
||||
function yy_r1_51($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::F_INET_NTOA;
|
||||
$this->token = OQLParser::F_FLOOR;
|
||||
}
|
||||
function yy_r1_52($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::NUMVAL;
|
||||
$this->token = OQLParser::F_INET_ATON;
|
||||
}
|
||||
function yy_r1_53($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::STRVAL;
|
||||
$this->token = OQLParser::F_INET_NTOA;
|
||||
}
|
||||
function yy_r1_54($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::NAME;
|
||||
$this->token = OQLParser::NUMVAL;
|
||||
}
|
||||
function yy_r1_55($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::VARNAME;
|
||||
$this->token = OQLParser::STRVAL;
|
||||
}
|
||||
function yy_r1_56($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::NAME;
|
||||
}
|
||||
function yy_r1_57($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::VARNAME;
|
||||
}
|
||||
function yy_r1_58($yy_subpatterns)
|
||||
{
|
||||
|
||||
$this->token = OQLParser::DOT;
|
||||
|
||||
@@ -94,6 +94,7 @@ math_plus = "+"
|
||||
math_minus = "-"
|
||||
log_and = "AND"
|
||||
log_or = "OR"
|
||||
regexp = "REGEXP"
|
||||
eq = "="
|
||||
not_eq = "!="
|
||||
gt = ">"
|
||||
@@ -108,6 +109,7 @@ interval = "INTERVAL"
|
||||
f_if = "IF"
|
||||
f_elt = "ELT"
|
||||
f_coalesce = "COALESCE"
|
||||
f_isnull = "ISNULL"
|
||||
f_concat = "CONCAT"
|
||||
f_substr = "SUBSTR"
|
||||
f_trim = "TRIM"
|
||||
@@ -186,6 +188,9 @@ par_open {
|
||||
par_close {
|
||||
$this->token = OQLParser::PAR_CLOSE;
|
||||
}
|
||||
regexp {
|
||||
$this->token = OQLParser::REGEXP;
|
||||
}
|
||||
eq {
|
||||
$this->token = OQLParser::EQ;
|
||||
}
|
||||
@@ -228,6 +233,9 @@ f_elt {
|
||||
f_coalesce {
|
||||
$this->token = OQLParser::F_COALESCE;
|
||||
}
|
||||
f_isnull {
|
||||
$this->token = OQLParser::F_ISNULL;
|
||||
}
|
||||
f_concat {
|
||||
$this->token = OQLParser::F_CONCAT;
|
||||
}
|
||||
|
||||
@@ -133,43 +133,45 @@ class OQLParserRaw#line 102 "oql-parser.php"
|
||||
const NAME = 20;
|
||||
const NUMVAL = 21;
|
||||
const STRVAL = 22;
|
||||
const NOT_EQ = 23;
|
||||
const LOG_AND = 24;
|
||||
const LOG_OR = 25;
|
||||
const MATH_DIV = 26;
|
||||
const MATH_MULT = 27;
|
||||
const MATH_PLUS = 28;
|
||||
const MATH_MINUS = 29;
|
||||
const GT = 30;
|
||||
const LT = 31;
|
||||
const GE = 32;
|
||||
const LE = 33;
|
||||
const LIKE = 34;
|
||||
const NOT_LIKE = 35;
|
||||
const IN = 36;
|
||||
const NOT_IN = 37;
|
||||
const F_IF = 38;
|
||||
const F_ELT = 39;
|
||||
const F_COALESCE = 40;
|
||||
const F_CONCAT = 41;
|
||||
const F_SUBSTR = 42;
|
||||
const F_TRIM = 43;
|
||||
const F_DATE = 44;
|
||||
const F_DATE_FORMAT = 45;
|
||||
const F_CURRENT_DATE = 46;
|
||||
const F_NOW = 47;
|
||||
const F_TIME = 48;
|
||||
const F_TO_DAYS = 49;
|
||||
const F_FROM_DAYS = 50;
|
||||
const F_DATE_ADD = 51;
|
||||
const F_DATE_SUB = 52;
|
||||
const F_ROUND = 53;
|
||||
const F_FLOOR = 54;
|
||||
const F_INET_ATON = 55;
|
||||
const F_INET_NTOA = 56;
|
||||
const YY_NO_ACTION = 234;
|
||||
const YY_ACCEPT_ACTION = 233;
|
||||
const YY_ERROR_ACTION = 232;
|
||||
const REGEXP = 23;
|
||||
const NOT_EQ = 24;
|
||||
const LOG_AND = 25;
|
||||
const LOG_OR = 26;
|
||||
const MATH_DIV = 27;
|
||||
const MATH_MULT = 28;
|
||||
const MATH_PLUS = 29;
|
||||
const MATH_MINUS = 30;
|
||||
const GT = 31;
|
||||
const LT = 32;
|
||||
const GE = 33;
|
||||
const LE = 34;
|
||||
const LIKE = 35;
|
||||
const NOT_LIKE = 36;
|
||||
const IN = 37;
|
||||
const NOT_IN = 38;
|
||||
const F_IF = 39;
|
||||
const F_ELT = 40;
|
||||
const F_COALESCE = 41;
|
||||
const F_ISNULL = 42;
|
||||
const F_CONCAT = 43;
|
||||
const F_SUBSTR = 44;
|
||||
const F_TRIM = 45;
|
||||
const F_DATE = 46;
|
||||
const F_DATE_FORMAT = 47;
|
||||
const F_CURRENT_DATE = 48;
|
||||
const F_NOW = 49;
|
||||
const F_TIME = 50;
|
||||
const F_TO_DAYS = 51;
|
||||
const F_FROM_DAYS = 52;
|
||||
const F_DATE_ADD = 53;
|
||||
const F_DATE_SUB = 54;
|
||||
const F_ROUND = 55;
|
||||
const F_FLOOR = 56;
|
||||
const F_INET_ATON = 57;
|
||||
const F_INET_NTOA = 58;
|
||||
const YY_NO_ACTION = 238;
|
||||
const YY_ACCEPT_ACTION = 237;
|
||||
const YY_ERROR_ACTION = 236;
|
||||
|
||||
/* Next are that tables used to determine what action to take based on the
|
||||
** current state and lookahead token. These tables are used to implement
|
||||
@@ -221,165 +223,179 @@ class OQLParserRaw#line 102 "oql-parser.php"
|
||||
** shifting non-terminals after a reduce.
|
||||
** self::$yy_default Default action for each state.
|
||||
*/
|
||||
const YY_SZ_ACTTAB = 384;
|
||||
const YY_SZ_ACTTAB = 455;
|
||||
static public $yy_action = array(
|
||||
/* 0 */ 4, 117, 5, 11, 8, 106, 121, 122, 130, 103,
|
||||
/* 10 */ 89, 91, 82, 83, 26, 3, 134, 118, 116, 12,
|
||||
/* 20 */ 105, 70, 54, 58, 60, 59, 63, 64, 57, 90,
|
||||
/* 30 */ 107, 108, 127, 126, 125, 123, 124, 128, 129, 133,
|
||||
/* 40 */ 132, 131, 113, 112, 81, 109, 110, 114, 16, 52,
|
||||
/* 50 */ 69, 31, 30, 29, 95, 97, 4, 33, 96, 101,
|
||||
/* 60 */ 49, 27, 121, 122, 130, 25, 89, 91, 82, 83,
|
||||
/* 70 */ 94, 86, 85, 84, 94, 86, 85, 84, 50, 28,
|
||||
/* 80 */ 141, 141, 74, 25, 53, 90, 107, 108, 127, 126,
|
||||
/* 90 */ 125, 123, 124, 128, 129, 133, 132, 131, 113, 112,
|
||||
/* 100 */ 81, 109, 110, 114, 4, 87, 42, 88, 93, 23,
|
||||
/* 110 */ 121, 122, 130, 74, 89, 91, 82, 83, 46, 2,
|
||||
/* 120 */ 7, 94, 86, 85, 84, 102, 82, 83, 19, 48,
|
||||
/* 130 */ 62, 45, 105, 90, 107, 108, 127, 126, 125, 123,
|
||||
/* 140 */ 124, 128, 129, 133, 132, 131, 113, 112, 81, 109,
|
||||
/* 150 */ 110, 114, 233, 111, 100, 52, 56, 74, 74, 74,
|
||||
/* 160 */ 6, 97, 37, 34, 96, 101, 49, 17, 38, 186,
|
||||
/* 170 */ 22, 23, 14, 6, 41, 44, 76, 55, 23, 52,
|
||||
/* 180 */ 94, 86, 85, 84, 50, 97, 40, 34, 96, 101,
|
||||
/* 190 */ 49, 47, 20, 75, 22, 52, 14, 1, 41, 35,
|
||||
/* 200 */ 61, 51, 67, 52, 94, 86, 85, 84, 50, 97,
|
||||
/* 210 */ 40, 34, 96, 101, 49, 13, 104, 52, 22, 24,
|
||||
/* 220 */ 14, 74, 41, 66, 50, 10, 80, 91, 94, 86,
|
||||
/* 230 */ 85, 84, 50, 98, 52, 25, 36, 120, 119, 23,
|
||||
/* 240 */ 97, 37, 34, 96, 101, 49, 50, 92, 74, 22,
|
||||
/* 250 */ 52, 14, 43, 41, 71, 68, 51, 23, 52, 94,
|
||||
/* 260 */ 86, 85, 84, 50, 97, 18, 34, 96, 101, 49,
|
||||
/* 270 */ 193, 193, 99, 22, 193, 14, 193, 41, 193, 50,
|
||||
/* 280 */ 9, 193, 52, 94, 86, 85, 84, 50, 97, 32,
|
||||
/* 290 */ 34, 96, 101, 49, 115, 193, 193, 22, 193, 14,
|
||||
/* 300 */ 193, 41, 193, 193, 193, 193, 52, 94, 86, 85,
|
||||
/* 310 */ 84, 50, 97, 193, 34, 96, 101, 49, 193, 193,
|
||||
/* 320 */ 193, 22, 193, 14, 193, 39, 193, 193, 193, 193,
|
||||
/* 330 */ 52, 94, 86, 85, 84, 50, 97, 193, 34, 96,
|
||||
/* 340 */ 101, 49, 193, 193, 193, 22, 193, 15, 65, 77,
|
||||
/* 350 */ 79, 78, 73, 72, 52, 94, 86, 85, 84, 50,
|
||||
/* 360 */ 97, 105, 34, 96, 101, 49, 193, 193, 193, 21,
|
||||
/* 370 */ 193, 193, 193, 193, 193, 193, 193, 193, 193, 94,
|
||||
/* 380 */ 86, 85, 84, 50,
|
||||
/* 0 */ 17, 6, 29, 143, 143, 28, 23, 56, 5, 120,
|
||||
/* 10 */ 12, 2, 107, 10, 133, 134, 135, 102, 83, 82,
|
||||
/* 20 */ 87, 88, 103, 104, 121, 119, 115, 116, 106, 105,
|
||||
/* 30 */ 117, 118, 136, 66, 58, 59, 60, 57, 93, 92,
|
||||
/* 40 */ 91, 89, 90, 108, 109, 128, 127, 126, 124, 125,
|
||||
/* 50 */ 129, 130, 131, 132, 123, 122, 114, 113, 5, 35,
|
||||
/* 60 */ 7, 3, 24, 70, 133, 134, 135, 106, 83, 82,
|
||||
/* 70 */ 87, 88, 4, 75, 74, 73, 76, 77, 79, 62,
|
||||
/* 80 */ 52, 69, 30, 20, 26, 63, 55, 106, 93, 92,
|
||||
/* 90 */ 91, 89, 90, 108, 109, 128, 127, 126, 124, 125,
|
||||
/* 100 */ 129, 130, 131, 132, 123, 122, 114, 113, 5, 54,
|
||||
/* 110 */ 64, 64, 64, 64, 133, 134, 135, 8, 83, 82,
|
||||
/* 120 */ 87, 88, 71, 43, 16, 24, 24, 31, 25, 81,
|
||||
/* 130 */ 111, 27, 188, 19, 53, 23, 49, 50, 93, 92,
|
||||
/* 140 */ 91, 89, 90, 108, 109, 128, 127, 126, 124, 125,
|
||||
/* 150 */ 129, 130, 131, 132, 123, 122, 114, 113, 237, 110,
|
||||
/* 160 */ 100, 52, 64, 64, 9, 68, 64, 97, 46, 32,
|
||||
/* 170 */ 96, 101, 51, 44, 45, 84, 21, 24, 15, 38,
|
||||
/* 180 */ 40, 13, 24, 82, 11, 52, 95, 94, 86, 85,
|
||||
/* 190 */ 54, 97, 39, 32, 96, 101, 51, 47, 112, 1,
|
||||
/* 200 */ 21, 23, 15, 8, 40, 99, 80, 72, 78, 52,
|
||||
/* 210 */ 95, 94, 86, 85, 54, 97, 39, 32, 96, 101,
|
||||
/* 220 */ 51, 42, 197, 197, 21, 52, 15, 197, 40, 197,
|
||||
/* 230 */ 67, 55, 61, 52, 95, 94, 86, 85, 54, 97,
|
||||
/* 240 */ 36, 32, 96, 101, 51, 197, 197, 197, 21, 197,
|
||||
/* 250 */ 15, 197, 40, 197, 54, 48, 98, 52, 95, 94,
|
||||
/* 260 */ 86, 85, 54, 97, 46, 32, 96, 101, 51, 197,
|
||||
/* 270 */ 197, 197, 21, 52, 15, 197, 40, 197, 197, 65,
|
||||
/* 280 */ 197, 52, 95, 94, 86, 85, 54, 97, 41, 32,
|
||||
/* 290 */ 96, 101, 51, 197, 197, 197, 21, 197, 15, 197,
|
||||
/* 300 */ 40, 197, 54, 197, 197, 52, 95, 94, 86, 85,
|
||||
/* 310 */ 54, 97, 33, 32, 96, 101, 51, 197, 197, 197,
|
||||
/* 320 */ 21, 197, 15, 197, 40, 197, 197, 197, 197, 52,
|
||||
/* 330 */ 95, 94, 86, 85, 54, 97, 18, 32, 96, 101,
|
||||
/* 340 */ 51, 197, 197, 197, 21, 197, 15, 197, 40, 197,
|
||||
/* 350 */ 197, 197, 197, 52, 95, 94, 86, 85, 54, 97,
|
||||
/* 360 */ 197, 32, 96, 101, 51, 197, 197, 197, 21, 197,
|
||||
/* 370 */ 15, 197, 37, 197, 197, 197, 197, 52, 95, 94,
|
||||
/* 380 */ 86, 85, 54, 97, 197, 32, 96, 101, 51, 197,
|
||||
/* 390 */ 197, 197, 21, 197, 14, 197, 197, 197, 197, 197,
|
||||
/* 400 */ 197, 52, 95, 94, 86, 85, 54, 97, 197, 32,
|
||||
/* 410 */ 96, 101, 51, 197, 197, 197, 22, 197, 197, 197,
|
||||
/* 420 */ 197, 197, 197, 197, 197, 52, 95, 94, 86, 85,
|
||||
/* 430 */ 54, 97, 197, 34, 96, 101, 51, 197, 197, 197,
|
||||
/* 440 */ 197, 197, 197, 197, 197, 197, 197, 197, 197, 197,
|
||||
/* 450 */ 95, 94, 86, 85, 54,
|
||||
);
|
||||
static public $yy_lookahead = array(
|
||||
/* 0 */ 9, 8, 11, 4, 79, 10, 15, 16, 17, 10,
|
||||
/* 10 */ 19, 20, 21, 22, 2, 5, 23, 92, 93, 7,
|
||||
/* 20 */ 25, 28, 29, 30, 31, 32, 33, 34, 35, 38,
|
||||
/* 30 */ 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
|
||||
/* 40 */ 49, 50, 51, 52, 53, 54, 55, 56, 1, 61,
|
||||
/* 50 */ 63, 3, 4, 61, 70, 67, 9, 69, 70, 71,
|
||||
/* 60 */ 72, 2, 15, 16, 17, 6, 19, 20, 21, 22,
|
||||
/* 70 */ 86, 87, 88, 89, 86, 87, 88, 89, 90, 2,
|
||||
/* 80 */ 3, 4, 90, 6, 61, 38, 39, 40, 41, 42,
|
||||
/* 90 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
|
||||
/* 100 */ 53, 54, 55, 56, 9, 70, 62, 36, 37, 65,
|
||||
/* 110 */ 15, 16, 17, 90, 19, 20, 21, 22, 83, 4,
|
||||
/* 120 */ 81, 86, 87, 88, 89, 10, 21, 22, 61, 61,
|
||||
/* 130 */ 61, 64, 25, 38, 39, 40, 41, 42, 43, 44,
|
||||
/* 140 */ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
|
||||
/* 150 */ 55, 56, 58, 59, 60, 61, 24, 90, 90, 90,
|
||||
/* 160 */ 82, 67, 68, 69, 70, 71, 72, 8, 62, 18,
|
||||
/* 170 */ 76, 65, 78, 82, 80, 62, 85, 63, 65, 61,
|
||||
/* 180 */ 86, 87, 88, 89, 90, 67, 68, 69, 70, 71,
|
||||
/* 190 */ 72, 73, 61, 63, 76, 61, 78, 9, 80, 18,
|
||||
/* 200 */ 66, 67, 84, 61, 86, 87, 88, 89, 90, 67,
|
||||
/* 210 */ 68, 69, 70, 71, 72, 7, 75, 61, 76, 61,
|
||||
/* 220 */ 78, 90, 80, 67, 90, 9, 84, 20, 86, 87,
|
||||
/* 230 */ 88, 89, 90, 60, 61, 6, 62, 26, 27, 65,
|
||||
/* 240 */ 67, 68, 69, 70, 71, 72, 90, 90, 90, 76,
|
||||
/* 250 */ 61, 78, 74, 80, 62, 66, 67, 65, 61, 86,
|
||||
/* 260 */ 87, 88, 89, 90, 67, 68, 69, 70, 71, 72,
|
||||
/* 270 */ 94, 94, 63, 76, 94, 78, 94, 80, 94, 90,
|
||||
/* 280 */ 77, 94, 61, 86, 87, 88, 89, 90, 67, 68,
|
||||
/* 290 */ 69, 70, 71, 72, 91, 94, 94, 76, 94, 78,
|
||||
/* 300 */ 94, 80, 94, 94, 94, 94, 61, 86, 87, 88,
|
||||
/* 310 */ 89, 90, 67, 94, 69, 70, 71, 72, 94, 94,
|
||||
/* 320 */ 94, 76, 94, 78, 94, 80, 94, 94, 94, 94,
|
||||
/* 330 */ 61, 86, 87, 88, 89, 90, 67, 94, 69, 70,
|
||||
/* 340 */ 71, 72, 94, 94, 94, 76, 94, 78, 12, 13,
|
||||
/* 350 */ 14, 15, 16, 17, 61, 86, 87, 88, 89, 90,
|
||||
/* 360 */ 67, 25, 69, 70, 71, 72, 94, 94, 94, 76,
|
||||
/* 370 */ 94, 94, 94, 94, 94, 94, 94, 94, 94, 86,
|
||||
/* 380 */ 87, 88, 89, 90,
|
||||
/* 0 */ 1, 4, 2, 3, 4, 2, 6, 10, 9, 8,
|
||||
/* 10 */ 7, 4, 10, 81, 15, 16, 17, 10, 19, 20,
|
||||
/* 20 */ 21, 22, 37, 38, 23, 24, 94, 95, 26, 77,
|
||||
/* 30 */ 29, 30, 31, 32, 33, 34, 35, 36, 39, 40,
|
||||
/* 40 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
|
||||
/* 50 */ 51, 52, 53, 54, 55, 56, 57, 58, 9, 64,
|
||||
/* 60 */ 11, 5, 67, 65, 15, 16, 17, 26, 19, 20,
|
||||
/* 70 */ 21, 22, 9, 12, 13, 14, 15, 16, 17, 25,
|
||||
/* 80 */ 63, 63, 63, 63, 63, 68, 69, 26, 39, 40,
|
||||
/* 90 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
|
||||
/* 100 */ 51, 52, 53, 54, 55, 56, 57, 58, 9, 92,
|
||||
/* 110 */ 92, 92, 92, 92, 15, 16, 17, 84, 19, 20,
|
||||
/* 120 */ 21, 22, 64, 64, 8, 67, 67, 3, 4, 27,
|
||||
/* 130 */ 28, 2, 18, 63, 63, 6, 66, 63, 39, 40,
|
||||
/* 140 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
|
||||
/* 150 */ 51, 52, 53, 54, 55, 56, 57, 58, 60, 61,
|
||||
/* 160 */ 62, 63, 92, 92, 83, 65, 92, 69, 70, 71,
|
||||
/* 170 */ 72, 73, 74, 18, 64, 92, 78, 67, 80, 64,
|
||||
/* 180 */ 82, 7, 67, 20, 79, 63, 88, 89, 90, 91,
|
||||
/* 190 */ 92, 69, 70, 71, 72, 73, 74, 75, 93, 9,
|
||||
/* 200 */ 78, 6, 80, 84, 82, 65, 87, 65, 86, 63,
|
||||
/* 210 */ 88, 89, 90, 91, 92, 69, 70, 71, 72, 73,
|
||||
/* 220 */ 74, 76, 96, 96, 78, 63, 80, 96, 82, 96,
|
||||
/* 230 */ 68, 69, 86, 63, 88, 89, 90, 91, 92, 69,
|
||||
/* 240 */ 70, 71, 72, 73, 74, 96, 96, 96, 78, 96,
|
||||
/* 250 */ 80, 96, 82, 96, 92, 85, 62, 63, 88, 89,
|
||||
/* 260 */ 90, 91, 92, 69, 70, 71, 72, 73, 74, 96,
|
||||
/* 270 */ 96, 96, 78, 63, 80, 96, 82, 96, 96, 69,
|
||||
/* 280 */ 96, 63, 88, 89, 90, 91, 92, 69, 70, 71,
|
||||
/* 290 */ 72, 73, 74, 96, 96, 96, 78, 96, 80, 96,
|
||||
/* 300 */ 82, 96, 92, 96, 96, 63, 88, 89, 90, 91,
|
||||
/* 310 */ 92, 69, 70, 71, 72, 73, 74, 96, 96, 96,
|
||||
/* 320 */ 78, 96, 80, 96, 82, 96, 96, 96, 96, 63,
|
||||
/* 330 */ 88, 89, 90, 91, 92, 69, 70, 71, 72, 73,
|
||||
/* 340 */ 74, 96, 96, 96, 78, 96, 80, 96, 82, 96,
|
||||
/* 350 */ 96, 96, 96, 63, 88, 89, 90, 91, 92, 69,
|
||||
/* 360 */ 96, 71, 72, 73, 74, 96, 96, 96, 78, 96,
|
||||
/* 370 */ 80, 96, 82, 96, 96, 96, 96, 63, 88, 89,
|
||||
/* 380 */ 90, 91, 92, 69, 96, 71, 72, 73, 74, 96,
|
||||
/* 390 */ 96, 96, 78, 96, 80, 96, 96, 96, 96, 96,
|
||||
/* 400 */ 96, 63, 88, 89, 90, 91, 92, 69, 96, 71,
|
||||
/* 410 */ 72, 73, 74, 96, 96, 96, 78, 96, 96, 96,
|
||||
/* 420 */ 96, 96, 96, 96, 96, 63, 88, 89, 90, 91,
|
||||
/* 430 */ 92, 69, 96, 71, 72, 73, 74, 96, 96, 96,
|
||||
/* 440 */ 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
|
||||
/* 450 */ 88, 89, 90, 91, 92,
|
||||
);
|
||||
const YY_SHIFT_USE_DFLT = -10;
|
||||
const YY_SHIFT_MAX = 53;
|
||||
const YY_SHIFT_USE_DFLT = -16;
|
||||
const YY_SHIFT_MAX = 55;
|
||||
static public $yy_shift_ofst = array(
|
||||
/* 0 */ 47, -9, -9, 95, 95, 95, 95, 95, 95, 95,
|
||||
/* 10 */ 105, 105, 207, 207, -7, -7, 207, 207, 336, 77,
|
||||
/* 20 */ 59, 211, 211, 229, 229, 207, 207, 207, 207, 229,
|
||||
/* 30 */ 207, 207, -5, 71, 71, 207, 10, 107, 10, 132,
|
||||
/* 40 */ 107, 132, 10, 216, 10, 48, -1, 115, 12, 188,
|
||||
/* 50 */ 151, 159, 181, 208,
|
||||
/* 0 */ -1, 49, 49, 99, 99, 99, 99, 99, 99, 99,
|
||||
/* 10 */ 99, 99, 163, 163, 1, 1, 163, 163, 61, 0,
|
||||
/* 20 */ 129, 102, 102, 163, 195, 163, 195, 163, 163, 163,
|
||||
/* 30 */ 195, 163, -15, 2, -15, 56, 41, 54, 56, 41,
|
||||
/* 40 */ 54, 41, 63, 56, 163, 56, 41, 7, -3, 124,
|
||||
/* 50 */ 3, 190, 155, 174, 114, 116,
|
||||
);
|
||||
const YY_REDUCE_USE_DFLT = -76;
|
||||
const YY_REDUCE_MAX = 44;
|
||||
const YY_REDUCE_USE_DFLT = -69;
|
||||
const YY_REDUCE_MAX = 46;
|
||||
static public $yy_reduce_ofst = array(
|
||||
/* 0 */ 94, 118, 142, 173, 221, 197, 245, 269, 293, -12,
|
||||
/* 10 */ 35, -16, 134, 189, -75, -75, 67, 156, 91, 174,
|
||||
/* 20 */ 113, 203, 203, 192, 44, 68, 23, -8, 158, 106,
|
||||
/* 30 */ 69, 131, 78, 178, 178, 157, 209, 78, 114, 39,
|
||||
/* 40 */ 78, 39, -13, 141, 130,
|
||||
/* 0 */ 98, 122, 146, 194, 170, 242, 218, 266, 290, 314,
|
||||
/* 10 */ 338, 362, 162, 17, -68, -68, 210, 70, 119, 115,
|
||||
/* 20 */ 110, 105, 105, 74, 58, 18, -5, 19, 71, 21,
|
||||
/* 30 */ 59, 20, 145, 33, 145, 142, 33, 81, 140, 33,
|
||||
/* 40 */ 81, 33, -48, -2, 83, 100, 33,
|
||||
);
|
||||
static public $yyExpectedTokens = array(
|
||||
/* 0 */ array(1, 9, 15, 16, 17, 19, 20, 21, 22, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, ),
|
||||
/* 1 */ array(9, 11, 15, 16, 17, 19, 20, 21, 22, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, ),
|
||||
/* 2 */ array(9, 11, 15, 16, 17, 19, 20, 21, 22, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, ),
|
||||
/* 3 */ array(9, 15, 16, 17, 19, 20, 21, 22, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, ),
|
||||
/* 4 */ array(9, 15, 16, 17, 19, 20, 21, 22, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, ),
|
||||
/* 5 */ array(9, 15, 16, 17, 19, 20, 21, 22, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, ),
|
||||
/* 6 */ array(9, 15, 16, 17, 19, 20, 21, 22, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, ),
|
||||
/* 7 */ array(9, 15, 16, 17, 19, 20, 21, 22, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, ),
|
||||
/* 8 */ array(9, 15, 16, 17, 19, 20, 21, 22, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, ),
|
||||
/* 9 */ array(9, 15, 16, 17, 19, 20, 21, 22, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, ),
|
||||
/* 10 */ array(21, 22, ),
|
||||
/* 11 */ array(21, 22, ),
|
||||
/* 0 */ array(1, 9, 15, 16, 17, 19, 20, 21, 22, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, ),
|
||||
/* 1 */ array(9, 11, 15, 16, 17, 19, 20, 21, 22, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, ),
|
||||
/* 2 */ array(9, 11, 15, 16, 17, 19, 20, 21, 22, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, ),
|
||||
/* 3 */ array(9, 15, 16, 17, 19, 20, 21, 22, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, ),
|
||||
/* 4 */ array(9, 15, 16, 17, 19, 20, 21, 22, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, ),
|
||||
/* 5 */ array(9, 15, 16, 17, 19, 20, 21, 22, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, ),
|
||||
/* 6 */ array(9, 15, 16, 17, 19, 20, 21, 22, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, ),
|
||||
/* 7 */ array(9, 15, 16, 17, 19, 20, 21, 22, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, ),
|
||||
/* 8 */ array(9, 15, 16, 17, 19, 20, 21, 22, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, ),
|
||||
/* 9 */ array(9, 15, 16, 17, 19, 20, 21, 22, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, ),
|
||||
/* 10 */ array(9, 15, 16, 17, 19, 20, 21, 22, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, ),
|
||||
/* 11 */ array(9, 15, 16, 17, 19, 20, 21, 22, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, ),
|
||||
/* 12 */ array(20, ),
|
||||
/* 13 */ array(20, ),
|
||||
/* 14 */ array(8, 23, 28, 29, 30, 31, 32, 33, 34, 35, ),
|
||||
/* 15 */ array(8, 23, 28, 29, 30, 31, 32, 33, 34, 35, ),
|
||||
/* 14 */ array(8, 23, 24, 29, 30, 31, 32, 33, 34, 35, 36, ),
|
||||
/* 15 */ array(8, 23, 24, 29, 30, 31, 32, 33, 34, 35, 36, ),
|
||||
/* 16 */ array(20, ),
|
||||
/* 17 */ array(20, ),
|
||||
/* 18 */ array(12, 13, 14, 15, 16, 17, 25, ),
|
||||
/* 18 */ array(12, 13, 14, 15, 16, 17, 26, ),
|
||||
/* 19 */ array(2, 3, 4, 6, ),
|
||||
/* 20 */ array(2, 6, ),
|
||||
/* 21 */ array(26, 27, ),
|
||||
/* 22 */ array(26, 27, ),
|
||||
/* 23 */ array(6, ),
|
||||
/* 21 */ array(27, 28, ),
|
||||
/* 22 */ array(27, 28, ),
|
||||
/* 23 */ array(20, ),
|
||||
/* 24 */ array(6, ),
|
||||
/* 25 */ array(20, ),
|
||||
/* 26 */ array(20, ),
|
||||
/* 26 */ array(6, ),
|
||||
/* 27 */ array(20, ),
|
||||
/* 28 */ array(20, ),
|
||||
/* 29 */ array(6, ),
|
||||
/* 30 */ array(20, ),
|
||||
/* 29 */ array(20, ),
|
||||
/* 30 */ array(6, ),
|
||||
/* 31 */ array(20, ),
|
||||
/* 32 */ array(10, 25, ),
|
||||
/* 33 */ array(36, 37, ),
|
||||
/* 34 */ array(36, 37, ),
|
||||
/* 35 */ array(20, ),
|
||||
/* 36 */ array(5, ),
|
||||
/* 32 */ array(37, 38, ),
|
||||
/* 33 */ array(10, 26, ),
|
||||
/* 34 */ array(37, 38, ),
|
||||
/* 35 */ array(5, ),
|
||||
/* 36 */ array(26, ),
|
||||
/* 37 */ array(25, ),
|
||||
/* 38 */ array(5, ),
|
||||
/* 39 */ array(24, ),
|
||||
/* 39 */ array(26, ),
|
||||
/* 40 */ array(25, ),
|
||||
/* 41 */ array(24, ),
|
||||
/* 42 */ array(5, ),
|
||||
/* 43 */ array(9, ),
|
||||
/* 44 */ array(5, ),
|
||||
/* 45 */ array(3, 4, ),
|
||||
/* 46 */ array(4, 10, ),
|
||||
/* 41 */ array(26, ),
|
||||
/* 42 */ array(9, ),
|
||||
/* 43 */ array(5, ),
|
||||
/* 44 */ array(20, ),
|
||||
/* 45 */ array(5, ),
|
||||
/* 46 */ array(26, ),
|
||||
/* 47 */ array(4, 10, ),
|
||||
/* 48 */ array(2, 7, ),
|
||||
/* 49 */ array(9, ),
|
||||
/* 50 */ array(18, ),
|
||||
/* 51 */ array(8, ),
|
||||
/* 48 */ array(4, 10, ),
|
||||
/* 49 */ array(3, 4, ),
|
||||
/* 50 */ array(2, 7, ),
|
||||
/* 51 */ array(9, ),
|
||||
/* 52 */ array(18, ),
|
||||
/* 53 */ array(7, ),
|
||||
/* 54 */ array(),
|
||||
/* 55 */ array(),
|
||||
/* 54 */ array(18, ),
|
||||
/* 55 */ array(8, ),
|
||||
/* 56 */ array(),
|
||||
/* 57 */ array(),
|
||||
/* 58 */ array(),
|
||||
@@ -459,22 +475,24 @@ static public $yy_action = array(
|
||||
/* 132 */ array(),
|
||||
/* 133 */ array(),
|
||||
/* 134 */ array(),
|
||||
/* 135 */ array(),
|
||||
/* 136 */ array(),
|
||||
);
|
||||
static public $yy_default = array(
|
||||
/* 0 */ 232, 169, 232, 232, 232, 232, 232, 232, 232, 232,
|
||||
/* 10 */ 232, 232, 232, 232, 162, 163, 232, 232, 232, 147,
|
||||
/* 20 */ 147, 161, 160, 146, 147, 232, 232, 232, 232, 147,
|
||||
/* 30 */ 232, 232, 232, 159, 158, 232, 144, 151, 144, 165,
|
||||
/* 40 */ 172, 164, 144, 232, 144, 232, 232, 232, 232, 232,
|
||||
/* 50 */ 184, 232, 232, 232, 201, 140, 196, 207, 202, 204,
|
||||
/* 60 */ 203, 149, 142, 205, 206, 174, 150, 170, 148, 138,
|
||||
/* 70 */ 200, 145, 179, 178, 186, 139, 173, 175, 177, 176,
|
||||
/* 80 */ 171, 228, 189, 190, 183, 182, 181, 167, 208, 187,
|
||||
/* 90 */ 210, 188, 185, 209, 180, 168, 152, 153, 143, 137,
|
||||
/* 100 */ 136, 154, 155, 166, 157, 197, 156, 211, 212, 229,
|
||||
/* 110 */ 230, 135, 227, 226, 231, 191, 193, 194, 192, 199,
|
||||
/* 120 */ 198, 225, 224, 216, 217, 215, 214, 213, 218, 219,
|
||||
/* 130 */ 223, 222, 221, 220, 195,
|
||||
/* 0 */ 236, 171, 236, 236, 236, 236, 236, 236, 236, 236,
|
||||
/* 10 */ 236, 236, 236, 236, 165, 164, 236, 236, 236, 149,
|
||||
/* 20 */ 149, 162, 163, 236, 148, 236, 149, 236, 236, 236,
|
||||
/* 30 */ 149, 236, 160, 236, 161, 146, 169, 167, 146, 174,
|
||||
/* 40 */ 166, 170, 236, 146, 236, 146, 153, 236, 236, 236,
|
||||
/* 50 */ 236, 236, 236, 236, 186, 236, 168, 210, 207, 208,
|
||||
/* 60 */ 209, 173, 199, 150, 188, 152, 206, 151, 141, 144,
|
||||
/* 70 */ 142, 147, 140, 178, 177, 176, 179, 180, 172, 181,
|
||||
/* 80 */ 175, 201, 190, 189, 187, 185, 184, 191, 192, 216,
|
||||
/* 90 */ 217, 215, 214, 213, 183, 182, 154, 155, 145, 139,
|
||||
/* 100 */ 138, 156, 157, 211, 212, 159, 200, 158, 218, 219,
|
||||
/* 110 */ 137, 202, 193, 235, 234, 194, 195, 203, 204, 198,
|
||||
/* 120 */ 197, 196, 233, 232, 223, 224, 222, 221, 220, 225,
|
||||
/* 130 */ 226, 230, 231, 229, 228, 227, 205,
|
||||
);
|
||||
/* The next thing included is series of defines which control
|
||||
** various aspects of the generated parser.
|
||||
@@ -491,11 +509,11 @@ static public $yy_action = array(
|
||||
** self::YYERRORSYMBOL is the code number of the error symbol. If not
|
||||
** defined, then do no error processing.
|
||||
*/
|
||||
const YYNOCODE = 95;
|
||||
const YYNOCODE = 97;
|
||||
const YYSTACKDEPTH = 100;
|
||||
const YYNSTATE = 135;
|
||||
const YYNRULE = 97;
|
||||
const YYERRORSYMBOL = 57;
|
||||
const YYNSTATE = 137;
|
||||
const YYNRULE = 99;
|
||||
const YYERRORSYMBOL = 59;
|
||||
const YYERRSYMDT = 'yy0';
|
||||
const YYFALLBACK = 0;
|
||||
/** The next table maps tokens into fallback tokens. If a construct
|
||||
@@ -582,25 +600,25 @@ static public $yy_action = array(
|
||||
'EQ', 'PAR_OPEN', 'PAR_CLOSE', 'INTERVAL',
|
||||
'F_SECOND', 'F_MINUTE', 'F_HOUR', 'F_DAY',
|
||||
'F_MONTH', 'F_YEAR', 'DOT', 'VARNAME',
|
||||
'NAME', 'NUMVAL', 'STRVAL', 'NOT_EQ',
|
||||
'LOG_AND', 'LOG_OR', 'MATH_DIV', 'MATH_MULT',
|
||||
'MATH_PLUS', 'MATH_MINUS', 'GT', 'LT',
|
||||
'GE', 'LE', 'LIKE', 'NOT_LIKE',
|
||||
'IN', 'NOT_IN', 'F_IF', 'F_ELT',
|
||||
'F_COALESCE', 'F_CONCAT', 'F_SUBSTR', 'F_TRIM',
|
||||
'F_DATE', 'F_DATE_FORMAT', 'F_CURRENT_DATE', 'F_NOW',
|
||||
'F_TIME', 'F_TO_DAYS', 'F_FROM_DAYS', 'F_DATE_ADD',
|
||||
'F_DATE_SUB', 'F_ROUND', 'F_FLOOR', 'F_INET_ATON',
|
||||
'F_INET_NTOA', 'error', 'result', 'query',
|
||||
'condition', 'class_name', 'join_statement', 'where_statement',
|
||||
'class_list', 'join_item', 'join_condition', 'field_id',
|
||||
'expression_prio4', 'expression_basic', 'scalar', 'var_name',
|
||||
'func_name', 'arg_list', 'list_operator', 'list',
|
||||
'expression_prio1', 'operator1', 'expression_prio2', 'operator2',
|
||||
'expression_prio3', 'operator3', 'operator4', 'scalar_list',
|
||||
'argument', 'interval_unit', 'num_scalar', 'str_scalar',
|
||||
'num_value', 'str_value', 'name', 'num_operator1',
|
||||
'num_operator2', 'str_operator',
|
||||
'NAME', 'NUMVAL', 'STRVAL', 'REGEXP',
|
||||
'NOT_EQ', 'LOG_AND', 'LOG_OR', 'MATH_DIV',
|
||||
'MATH_MULT', 'MATH_PLUS', 'MATH_MINUS', 'GT',
|
||||
'LT', 'GE', 'LE', 'LIKE',
|
||||
'NOT_LIKE', 'IN', 'NOT_IN', 'F_IF',
|
||||
'F_ELT', 'F_COALESCE', 'F_ISNULL', 'F_CONCAT',
|
||||
'F_SUBSTR', 'F_TRIM', 'F_DATE', 'F_DATE_FORMAT',
|
||||
'F_CURRENT_DATE', 'F_NOW', 'F_TIME', 'F_TO_DAYS',
|
||||
'F_FROM_DAYS', 'F_DATE_ADD', 'F_DATE_SUB', 'F_ROUND',
|
||||
'F_FLOOR', 'F_INET_ATON', 'F_INET_NTOA', 'error',
|
||||
'result', 'query', 'condition', 'class_name',
|
||||
'join_statement', 'where_statement', 'class_list', 'join_item',
|
||||
'join_condition', 'field_id', 'expression_prio4', 'expression_basic',
|
||||
'scalar', 'var_name', 'func_name', 'arg_list',
|
||||
'list_operator', 'list', 'expression_prio1', 'operator1',
|
||||
'expression_prio2', 'operator2', 'expression_prio3', 'operator3',
|
||||
'operator4', 'list_items', 'argument', 'interval_unit',
|
||||
'num_scalar', 'str_scalar', 'num_value', 'str_value',
|
||||
'name', 'num_operator1', 'num_operator2', 'str_operator',
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -639,9 +657,9 @@ static public $yy_action = array(
|
||||
/* 28 */ "expression_prio3 ::= expression_prio3 operator3 expression_prio2",
|
||||
/* 29 */ "expression_prio4 ::= expression_prio3",
|
||||
/* 30 */ "expression_prio4 ::= expression_prio4 operator4 expression_prio3",
|
||||
/* 31 */ "list ::= PAR_OPEN scalar_list PAR_CLOSE",
|
||||
/* 32 */ "scalar_list ::= scalar",
|
||||
/* 33 */ "scalar_list ::= scalar_list COMA scalar",
|
||||
/* 31 */ "list ::= PAR_OPEN list_items PAR_CLOSE",
|
||||
/* 32 */ "list_items ::= expression_prio4",
|
||||
/* 33 */ "list_items ::= list_items COMA expression_prio4",
|
||||
/* 34 */ "arg_list ::=",
|
||||
/* 35 */ "arg_list ::= argument",
|
||||
/* 36 */ "arg_list ::= arg_list COMA argument",
|
||||
@@ -667,44 +685,46 @@ static public $yy_action = array(
|
||||
/* 56 */ "operator1 ::= num_operator1",
|
||||
/* 57 */ "operator2 ::= num_operator2",
|
||||
/* 58 */ "operator2 ::= str_operator",
|
||||
/* 59 */ "operator2 ::= EQ",
|
||||
/* 60 */ "operator2 ::= NOT_EQ",
|
||||
/* 61 */ "operator3 ::= LOG_AND",
|
||||
/* 62 */ "operator4 ::= LOG_OR",
|
||||
/* 63 */ "num_operator1 ::= MATH_DIV",
|
||||
/* 64 */ "num_operator1 ::= MATH_MULT",
|
||||
/* 65 */ "num_operator2 ::= MATH_PLUS",
|
||||
/* 66 */ "num_operator2 ::= MATH_MINUS",
|
||||
/* 67 */ "num_operator2 ::= GT",
|
||||
/* 68 */ "num_operator2 ::= LT",
|
||||
/* 69 */ "num_operator2 ::= GE",
|
||||
/* 70 */ "num_operator2 ::= LE",
|
||||
/* 71 */ "str_operator ::= LIKE",
|
||||
/* 72 */ "str_operator ::= NOT_LIKE",
|
||||
/* 73 */ "list_operator ::= IN",
|
||||
/* 74 */ "list_operator ::= NOT_IN",
|
||||
/* 75 */ "func_name ::= F_IF",
|
||||
/* 76 */ "func_name ::= F_ELT",
|
||||
/* 77 */ "func_name ::= F_COALESCE",
|
||||
/* 78 */ "func_name ::= F_CONCAT",
|
||||
/* 79 */ "func_name ::= F_SUBSTR",
|
||||
/* 80 */ "func_name ::= F_TRIM",
|
||||
/* 81 */ "func_name ::= F_DATE",
|
||||
/* 82 */ "func_name ::= F_DATE_FORMAT",
|
||||
/* 83 */ "func_name ::= F_CURRENT_DATE",
|
||||
/* 84 */ "func_name ::= F_NOW",
|
||||
/* 85 */ "func_name ::= F_TIME",
|
||||
/* 86 */ "func_name ::= F_TO_DAYS",
|
||||
/* 87 */ "func_name ::= F_FROM_DAYS",
|
||||
/* 88 */ "func_name ::= F_YEAR",
|
||||
/* 89 */ "func_name ::= F_MONTH",
|
||||
/* 90 */ "func_name ::= F_DAY",
|
||||
/* 91 */ "func_name ::= F_DATE_ADD",
|
||||
/* 92 */ "func_name ::= F_DATE_SUB",
|
||||
/* 93 */ "func_name ::= F_ROUND",
|
||||
/* 94 */ "func_name ::= F_FLOOR",
|
||||
/* 95 */ "func_name ::= F_INET_ATON",
|
||||
/* 96 */ "func_name ::= F_INET_NTOA",
|
||||
/* 59 */ "operator2 ::= REGEXP",
|
||||
/* 60 */ "operator2 ::= EQ",
|
||||
/* 61 */ "operator2 ::= NOT_EQ",
|
||||
/* 62 */ "operator3 ::= LOG_AND",
|
||||
/* 63 */ "operator4 ::= LOG_OR",
|
||||
/* 64 */ "num_operator1 ::= MATH_DIV",
|
||||
/* 65 */ "num_operator1 ::= MATH_MULT",
|
||||
/* 66 */ "num_operator2 ::= MATH_PLUS",
|
||||
/* 67 */ "num_operator2 ::= MATH_MINUS",
|
||||
/* 68 */ "num_operator2 ::= GT",
|
||||
/* 69 */ "num_operator2 ::= LT",
|
||||
/* 70 */ "num_operator2 ::= GE",
|
||||
/* 71 */ "num_operator2 ::= LE",
|
||||
/* 72 */ "str_operator ::= LIKE",
|
||||
/* 73 */ "str_operator ::= NOT_LIKE",
|
||||
/* 74 */ "list_operator ::= IN",
|
||||
/* 75 */ "list_operator ::= NOT_IN",
|
||||
/* 76 */ "func_name ::= F_IF",
|
||||
/* 77 */ "func_name ::= F_ELT",
|
||||
/* 78 */ "func_name ::= F_COALESCE",
|
||||
/* 79 */ "func_name ::= F_ISNULL",
|
||||
/* 80 */ "func_name ::= F_CONCAT",
|
||||
/* 81 */ "func_name ::= F_SUBSTR",
|
||||
/* 82 */ "func_name ::= F_TRIM",
|
||||
/* 83 */ "func_name ::= F_DATE",
|
||||
/* 84 */ "func_name ::= F_DATE_FORMAT",
|
||||
/* 85 */ "func_name ::= F_CURRENT_DATE",
|
||||
/* 86 */ "func_name ::= F_NOW",
|
||||
/* 87 */ "func_name ::= F_TIME",
|
||||
/* 88 */ "func_name ::= F_TO_DAYS",
|
||||
/* 89 */ "func_name ::= F_FROM_DAYS",
|
||||
/* 90 */ "func_name ::= F_YEAR",
|
||||
/* 91 */ "func_name ::= F_MONTH",
|
||||
/* 92 */ "func_name ::= F_DAY",
|
||||
/* 93 */ "func_name ::= F_DATE_ADD",
|
||||
/* 94 */ "func_name ::= F_DATE_SUB",
|
||||
/* 95 */ "func_name ::= F_ROUND",
|
||||
/* 96 */ "func_name ::= F_FLOOR",
|
||||
/* 97 */ "func_name ::= F_INET_ATON",
|
||||
/* 98 */ "func_name ::= F_INET_NTOA",
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -1069,103 +1089,105 @@ static public $yy_action = array(
|
||||
* </pre>
|
||||
*/
|
||||
static public $yyRuleInfo = array(
|
||||
array( 'lhs' => 58, 'rhs' => 1 ),
|
||||
array( 'lhs' => 58, 'rhs' => 1 ),
|
||||
array( 'lhs' => 59, 'rhs' => 4 ),
|
||||
array( 'lhs' => 59, 'rhs' => 6 ),
|
||||
array( 'lhs' => 59, 'rhs' => 6 ),
|
||||
array( 'lhs' => 59, 'rhs' => 8 ),
|
||||
array( 'lhs' => 64, 'rhs' => 1 ),
|
||||
array( 'lhs' => 64, 'rhs' => 3 ),
|
||||
array( 'lhs' => 63, 'rhs' => 2 ),
|
||||
array( 'lhs' => 63, 'rhs' => 0 ),
|
||||
array( 'lhs' => 62, 'rhs' => 2 ),
|
||||
array( 'lhs' => 62, 'rhs' => 1 ),
|
||||
array( 'lhs' => 62, 'rhs' => 0 ),
|
||||
array( 'lhs' => 65, 'rhs' => 6 ),
|
||||
array( 'lhs' => 65, 'rhs' => 4 ),
|
||||
array( 'lhs' => 66, 'rhs' => 3 ),
|
||||
array( 'lhs' => 60, 'rhs' => 1 ),
|
||||
array( 'lhs' => 69, 'rhs' => 1 ),
|
||||
array( 'lhs' => 69, 'rhs' => 1 ),
|
||||
array( 'lhs' => 69, 'rhs' => 1 ),
|
||||
array( 'lhs' => 69, 'rhs' => 4 ),
|
||||
array( 'lhs' => 69, 'rhs' => 3 ),
|
||||
array( 'lhs' => 69, 'rhs' => 3 ),
|
||||
array( 'lhs' => 76, 'rhs' => 1 ),
|
||||
array( 'lhs' => 76, 'rhs' => 3 ),
|
||||
array( 'lhs' => 60, 'rhs' => 1 ),
|
||||
array( 'lhs' => 61, 'rhs' => 4 ),
|
||||
array( 'lhs' => 61, 'rhs' => 6 ),
|
||||
array( 'lhs' => 61, 'rhs' => 6 ),
|
||||
array( 'lhs' => 61, 'rhs' => 8 ),
|
||||
array( 'lhs' => 66, 'rhs' => 1 ),
|
||||
array( 'lhs' => 66, 'rhs' => 3 ),
|
||||
array( 'lhs' => 65, 'rhs' => 2 ),
|
||||
array( 'lhs' => 65, 'rhs' => 0 ),
|
||||
array( 'lhs' => 64, 'rhs' => 2 ),
|
||||
array( 'lhs' => 64, 'rhs' => 1 ),
|
||||
array( 'lhs' => 64, 'rhs' => 0 ),
|
||||
array( 'lhs' => 67, 'rhs' => 6 ),
|
||||
array( 'lhs' => 67, 'rhs' => 4 ),
|
||||
array( 'lhs' => 68, 'rhs' => 3 ),
|
||||
array( 'lhs' => 62, 'rhs' => 1 ),
|
||||
array( 'lhs' => 71, 'rhs' => 1 ),
|
||||
array( 'lhs' => 71, 'rhs' => 1 ),
|
||||
array( 'lhs' => 71, 'rhs' => 1 ),
|
||||
array( 'lhs' => 71, 'rhs' => 4 ),
|
||||
array( 'lhs' => 71, 'rhs' => 3 ),
|
||||
array( 'lhs' => 71, 'rhs' => 3 ),
|
||||
array( 'lhs' => 78, 'rhs' => 1 ),
|
||||
array( 'lhs' => 78, 'rhs' => 3 ),
|
||||
array( 'lhs' => 80, 'rhs' => 1 ),
|
||||
array( 'lhs' => 80, 'rhs' => 3 ),
|
||||
array( 'lhs' => 68, 'rhs' => 1 ),
|
||||
array( 'lhs' => 68, 'rhs' => 3 ),
|
||||
array( 'lhs' => 82, 'rhs' => 1 ),
|
||||
array( 'lhs' => 82, 'rhs' => 3 ),
|
||||
array( 'lhs' => 70, 'rhs' => 1 ),
|
||||
array( 'lhs' => 70, 'rhs' => 3 ),
|
||||
array( 'lhs' => 77, 'rhs' => 3 ),
|
||||
array( 'lhs' => 85, 'rhs' => 1 ),
|
||||
array( 'lhs' => 85, 'rhs' => 3 ),
|
||||
array( 'lhs' => 75, 'rhs' => 0 ),
|
||||
array( 'lhs' => 75, 'rhs' => 1 ),
|
||||
array( 'lhs' => 75, 'rhs' => 3 ),
|
||||
array( 'lhs' => 83, 'rhs' => 1 ),
|
||||
array( 'lhs' => 83, 'rhs' => 3 ),
|
||||
array( 'lhs' => 73, 'rhs' => 0 ),
|
||||
array( 'lhs' => 73, 'rhs' => 1 ),
|
||||
array( 'lhs' => 73, 'rhs' => 3 ),
|
||||
array( 'lhs' => 84, 'rhs' => 1 ),
|
||||
array( 'lhs' => 84, 'rhs' => 3 ),
|
||||
array( 'lhs' => 85, 'rhs' => 1 ),
|
||||
array( 'lhs' => 85, 'rhs' => 1 ),
|
||||
array( 'lhs' => 85, 'rhs' => 1 ),
|
||||
array( 'lhs' => 85, 'rhs' => 1 ),
|
||||
array( 'lhs' => 85, 'rhs' => 1 ),
|
||||
array( 'lhs' => 85, 'rhs' => 1 ),
|
||||
array( 'lhs' => 70, 'rhs' => 1 ),
|
||||
array( 'lhs' => 70, 'rhs' => 1 ),
|
||||
array( 'lhs' => 86, 'rhs' => 1 ),
|
||||
array( 'lhs' => 86, 'rhs' => 3 ),
|
||||
array( 'lhs' => 87, 'rhs' => 1 ),
|
||||
array( 'lhs' => 67, 'rhs' => 1 ),
|
||||
array( 'lhs' => 67, 'rhs' => 3 ),
|
||||
array( 'lhs' => 61, 'rhs' => 1 ),
|
||||
array( 'lhs' => 71, 'rhs' => 1 ),
|
||||
array( 'lhs' => 90, 'rhs' => 1 ),
|
||||
array( 'lhs' => 87, 'rhs' => 1 ),
|
||||
array( 'lhs' => 87, 'rhs' => 1 ),
|
||||
array( 'lhs' => 87, 'rhs' => 1 ),
|
||||
array( 'lhs' => 87, 'rhs' => 1 ),
|
||||
array( 'lhs' => 87, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 88, 'rhs' => 1 ),
|
||||
array( 'lhs' => 89, 'rhs' => 1 ),
|
||||
array( 'lhs' => 77, 'rhs' => 1 ),
|
||||
array( 'lhs' => 79, 'rhs' => 1 ),
|
||||
array( 'lhs' => 79, 'rhs' => 1 ),
|
||||
array( 'lhs' => 79, 'rhs' => 1 ),
|
||||
array( 'lhs' => 69, 'rhs' => 1 ),
|
||||
array( 'lhs' => 69, 'rhs' => 3 ),
|
||||
array( 'lhs' => 63, 'rhs' => 1 ),
|
||||
array( 'lhs' => 73, 'rhs' => 1 ),
|
||||
array( 'lhs' => 92, 'rhs' => 1 ),
|
||||
array( 'lhs' => 90, 'rhs' => 1 ),
|
||||
array( 'lhs' => 91, 'rhs' => 1 ),
|
||||
array( 'lhs' => 79, 'rhs' => 1 ),
|
||||
array( 'lhs' => 81, 'rhs' => 1 ),
|
||||
array( 'lhs' => 82, 'rhs' => 1 ),
|
||||
array( 'lhs' => 91, 'rhs' => 1 ),
|
||||
array( 'lhs' => 91, 'rhs' => 1 ),
|
||||
array( 'lhs' => 92, 'rhs' => 1 ),
|
||||
array( 'lhs' => 92, 'rhs' => 1 ),
|
||||
array( 'lhs' => 92, 'rhs' => 1 ),
|
||||
array( 'lhs' => 92, 'rhs' => 1 ),
|
||||
array( 'lhs' => 92, 'rhs' => 1 ),
|
||||
array( 'lhs' => 92, 'rhs' => 1 ),
|
||||
array( 'lhs' => 81, 'rhs' => 1 ),
|
||||
array( 'lhs' => 81, 'rhs' => 1 ),
|
||||
array( 'lhs' => 81, 'rhs' => 1 ),
|
||||
array( 'lhs' => 81, 'rhs' => 1 ),
|
||||
array( 'lhs' => 83, 'rhs' => 1 ),
|
||||
array( 'lhs' => 84, 'rhs' => 1 ),
|
||||
array( 'lhs' => 93, 'rhs' => 1 ),
|
||||
array( 'lhs' => 93, 'rhs' => 1 ),
|
||||
array( 'lhs' => 94, 'rhs' => 1 ),
|
||||
array( 'lhs' => 94, 'rhs' => 1 ),
|
||||
array( 'lhs' => 94, 'rhs' => 1 ),
|
||||
array( 'lhs' => 94, 'rhs' => 1 ),
|
||||
array( 'lhs' => 94, 'rhs' => 1 ),
|
||||
array( 'lhs' => 94, 'rhs' => 1 ),
|
||||
array( 'lhs' => 95, 'rhs' => 1 ),
|
||||
array( 'lhs' => 95, 'rhs' => 1 ),
|
||||
array( 'lhs' => 76, 'rhs' => 1 ),
|
||||
array( 'lhs' => 76, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 74, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
array( 'lhs' => 72, 'rhs' => 1 ),
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -1227,7 +1249,6 @@ static public $yy_action = array(
|
||||
49 => 49,
|
||||
50 => 50,
|
||||
51 => 51,
|
||||
75 => 51,
|
||||
76 => 51,
|
||||
77 => 51,
|
||||
78 => 51,
|
||||
@@ -1249,6 +1270,8 @@ static public $yy_action = array(
|
||||
94 => 51,
|
||||
95 => 51,
|
||||
96 => 51,
|
||||
97 => 51,
|
||||
98 => 51,
|
||||
52 => 52,
|
||||
53 => 53,
|
||||
54 => 54,
|
||||
@@ -1271,6 +1294,7 @@ static public $yy_action = array(
|
||||
72 => 54,
|
||||
73 => 54,
|
||||
74 => 54,
|
||||
75 => 54,
|
||||
55 => 55,
|
||||
);
|
||||
/* Beginning here are the reduction cases. A typical example
|
||||
@@ -1281,44 +1305,44 @@ static public $yy_action = array(
|
||||
*/
|
||||
#line 29 "oql-parser.y"
|
||||
function yy_r0(){ $this->my_result = $this->yystack[$this->yyidx + 0]->minor; }
|
||||
#line 1288 "oql-parser.php"
|
||||
#line 1312 "oql-parser.php"
|
||||
#line 32 "oql-parser.y"
|
||||
function yy_r2(){
|
||||
$this->_retvalue = new OqlObjectQuery($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -1]->minor, array($this->yystack[$this->yyidx + -2]->minor));
|
||||
}
|
||||
#line 1293 "oql-parser.php"
|
||||
#line 1317 "oql-parser.php"
|
||||
#line 35 "oql-parser.y"
|
||||
function yy_r3(){
|
||||
$this->_retvalue = new OqlObjectQuery($this->yystack[$this->yyidx + -4]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -1]->minor, array($this->yystack[$this->yyidx + -2]->minor));
|
||||
}
|
||||
#line 1298 "oql-parser.php"
|
||||
#line 1322 "oql-parser.php"
|
||||
#line 39 "oql-parser.y"
|
||||
function yy_r4(){
|
||||
$this->_retvalue = new OqlObjectQuery($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + -4]->minor);
|
||||
}
|
||||
#line 1303 "oql-parser.php"
|
||||
#line 1327 "oql-parser.php"
|
||||
#line 42 "oql-parser.y"
|
||||
function yy_r5(){
|
||||
$this->_retvalue = new OqlObjectQuery($this->yystack[$this->yyidx + -4]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + -6]->minor);
|
||||
}
|
||||
#line 1308 "oql-parser.php"
|
||||
#line 1332 "oql-parser.php"
|
||||
#line 47 "oql-parser.y"
|
||||
function yy_r6(){
|
||||
$this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);
|
||||
}
|
||||
#line 1313 "oql-parser.php"
|
||||
#line 1337 "oql-parser.php"
|
||||
#line 50 "oql-parser.y"
|
||||
function yy_r7(){
|
||||
array_push($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor);
|
||||
$this->_retvalue = $this->yystack[$this->yyidx + -2]->minor;
|
||||
}
|
||||
#line 1319 "oql-parser.php"
|
||||
#line 1343 "oql-parser.php"
|
||||
#line 55 "oql-parser.y"
|
||||
function yy_r8(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; }
|
||||
#line 1322 "oql-parser.php"
|
||||
#line 1346 "oql-parser.php"
|
||||
#line 56 "oql-parser.y"
|
||||
function yy_r9(){ $this->_retvalue = null; }
|
||||
#line 1325 "oql-parser.php"
|
||||
#line 1349 "oql-parser.php"
|
||||
#line 58 "oql-parser.y"
|
||||
function yy_r10(){
|
||||
// insert the join statement on top of the existing list
|
||||
@@ -1326,67 +1350,67 @@ static public $yy_action = array(
|
||||
// and return the updated array
|
||||
$this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
|
||||
}
|
||||
#line 1333 "oql-parser.php"
|
||||
#line 1357 "oql-parser.php"
|
||||
#line 64 "oql-parser.y"
|
||||
function yy_r11(){
|
||||
$this->_retvalue = Array($this->yystack[$this->yyidx + 0]->minor);
|
||||
}
|
||||
#line 1338 "oql-parser.php"
|
||||
#line 1362 "oql-parser.php"
|
||||
#line 70 "oql-parser.y"
|
||||
function yy_r13(){
|
||||
// create an array with one single item
|
||||
$this->_retvalue = new OqlJoinSpec($this->yystack[$this->yyidx + -4]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor);
|
||||
}
|
||||
#line 1344 "oql-parser.php"
|
||||
#line 1368 "oql-parser.php"
|
||||
#line 75 "oql-parser.y"
|
||||
function yy_r14(){
|
||||
// create an array with one single item
|
||||
$this->_retvalue = new OqlJoinSpec($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor);
|
||||
}
|
||||
#line 1350 "oql-parser.php"
|
||||
#line 1374 "oql-parser.php"
|
||||
#line 80 "oql-parser.y"
|
||||
function yy_r15(){ $this->_retvalue = new BinaryOqlExpression($this->yystack[$this->yyidx + -2]->minor, '=', $this->yystack[$this->yyidx + 0]->minor); }
|
||||
#line 1353 "oql-parser.php"
|
||||
#line 1377 "oql-parser.php"
|
||||
#line 82 "oql-parser.y"
|
||||
function yy_r16(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; }
|
||||
#line 1356 "oql-parser.php"
|
||||
#line 1380 "oql-parser.php"
|
||||
#line 87 "oql-parser.y"
|
||||
function yy_r20(){ $this->_retvalue = new FunctionOqlExpression($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + -1]->minor); }
|
||||
#line 1359 "oql-parser.php"
|
||||
#line 1383 "oql-parser.php"
|
||||
#line 88 "oql-parser.y"
|
||||
function yy_r21(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; }
|
||||
#line 1362 "oql-parser.php"
|
||||
#line 1386 "oql-parser.php"
|
||||
#line 89 "oql-parser.y"
|
||||
function yy_r22(){ $this->_retvalue = new BinaryOqlExpression($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor); }
|
||||
#line 1365 "oql-parser.php"
|
||||
#line 1389 "oql-parser.php"
|
||||
#line 104 "oql-parser.y"
|
||||
function yy_r31(){
|
||||
$this->_retvalue = new ListOqlExpression($this->yystack[$this->yyidx + -1]->minor);
|
||||
}
|
||||
#line 1370 "oql-parser.php"
|
||||
#line 1394 "oql-parser.php"
|
||||
#line 115 "oql-parser.y"
|
||||
function yy_r34(){
|
||||
$this->_retvalue = array();
|
||||
}
|
||||
#line 1375 "oql-parser.php"
|
||||
#line 1399 "oql-parser.php"
|
||||
#line 126 "oql-parser.y"
|
||||
function yy_r38(){ $this->_retvalue = new IntervalOqlExpression($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor); }
|
||||
#line 1378 "oql-parser.php"
|
||||
#line 1402 "oql-parser.php"
|
||||
#line 138 "oql-parser.y"
|
||||
function yy_r47(){ $this->_retvalue = new ScalarOqlExpression($this->yystack[$this->yyidx + 0]->minor); }
|
||||
#line 1381 "oql-parser.php"
|
||||
#line 1405 "oql-parser.php"
|
||||
#line 141 "oql-parser.y"
|
||||
function yy_r49(){ $this->_retvalue = new FieldOqlExpression($this->yystack[$this->yyidx + 0]->minor); }
|
||||
#line 1384 "oql-parser.php"
|
||||
#line 1408 "oql-parser.php"
|
||||
#line 142 "oql-parser.y"
|
||||
function yy_r50(){ $this->_retvalue = new FieldOqlExpression($this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -2]->minor); }
|
||||
#line 1387 "oql-parser.php"
|
||||
#line 1411 "oql-parser.php"
|
||||
#line 143 "oql-parser.y"
|
||||
function yy_r51(){ $this->_retvalue=$this->yystack[$this->yyidx + 0]->minor; }
|
||||
#line 1390 "oql-parser.php"
|
||||
#line 1414 "oql-parser.php"
|
||||
#line 146 "oql-parser.y"
|
||||
function yy_r52(){ $this->_retvalue = new VariableOqlExpression(substr($this->yystack[$this->yyidx + 0]->minor, 1)); }
|
||||
#line 1393 "oql-parser.php"
|
||||
#line 1417 "oql-parser.php"
|
||||
#line 148 "oql-parser.y"
|
||||
function yy_r53(){
|
||||
if ($this->yystack[$this->yyidx + 0]->minor[0] == '`')
|
||||
@@ -1399,13 +1423,13 @@ static public $yy_action = array(
|
||||
}
|
||||
$this->_retvalue = new OqlName($name, $this->m_iColPrev);
|
||||
}
|
||||
#line 1406 "oql-parser.php"
|
||||
#line 1430 "oql-parser.php"
|
||||
#line 160 "oql-parser.y"
|
||||
function yy_r54(){$this->_retvalue=$this->yystack[$this->yyidx + 0]->minor; }
|
||||
#line 1409 "oql-parser.php"
|
||||
#line 1433 "oql-parser.php"
|
||||
#line 161 "oql-parser.y"
|
||||
function yy_r55(){$this->_retvalue=stripslashes(substr($this->yystack[$this->yyidx + 0]->minor, 1, strlen($this->yystack[$this->yyidx + 0]->minor) - 2)); }
|
||||
#line 1412 "oql-parser.php"
|
||||
#line 1436 "oql-parser.php"
|
||||
|
||||
/**
|
||||
* placeholder for the left hand side in a reduce operation.
|
||||
@@ -1520,7 +1544,7 @@ static public $yy_action = array(
|
||||
#line 25 "oql-parser.y"
|
||||
|
||||
throw new OQLParserException($this->m_sSourceQuery, $this->m_iLine, $this->m_iCol, $this->tokenName($yymajor), $TOKEN);
|
||||
#line 1528 "oql-parser.php"
|
||||
#line 1552 "oql-parser.php"
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1672,7 +1696,7 @@ throw new OQLParserException($this->m_sSourceQuery, $this->m_iLine, $this->m_iCo
|
||||
}
|
||||
} while ($yymajor != self::YYNOCODE && $this->yyidx >= 0);
|
||||
}
|
||||
}#line 211 "oql-parser.y"
|
||||
}#line 213 "oql-parser.y"
|
||||
|
||||
|
||||
class OQLParserException extends OQLException
|
||||
@@ -1737,4 +1761,4 @@ class OQLParser extends OQLParserRaw
|
||||
}
|
||||
}
|
||||
|
||||
#line 1747 "oql-parser.php"
|
||||
#line 1771 "oql-parser.php"
|
||||
|
||||
@@ -101,13 +101,13 @@ expression_prio4(A) ::= expression_prio3(X). { A = X; }
|
||||
expression_prio4(A) ::= expression_prio4(X) operator4(Y) expression_prio3(Z). { A = new BinaryOqlExpression(X, Y, Z); }
|
||||
|
||||
|
||||
list(A) ::= PAR_OPEN scalar_list(X) PAR_CLOSE. {
|
||||
list(A) ::= PAR_OPEN list_items(X) PAR_CLOSE. {
|
||||
A = new ListOqlExpression(X);
|
||||
}
|
||||
scalar_list(A) ::= scalar(X). {
|
||||
list_items(A) ::= expression_prio4(X). {
|
||||
A = array(X);
|
||||
}
|
||||
scalar_list(A) ::= scalar_list(L) COMA scalar(X). {
|
||||
list_items(A) ::= list_items(L) COMA expression_prio4(X). {
|
||||
array_push(L, X);
|
||||
A = L;
|
||||
}
|
||||
@@ -164,6 +164,7 @@ str_value(A) ::= STRVAL(X). {A=stripslashes(substr(X, 1, strlen(X) - 2));}
|
||||
operator1(A) ::= num_operator1(X). {A=X;}
|
||||
operator2(A) ::= num_operator2(X). {A=X;}
|
||||
operator2(A) ::= str_operator(X). {A=X;}
|
||||
operator2(A) ::= REGEXP(X). {A=X;}
|
||||
operator2(A) ::= EQ(X). {A=X;}
|
||||
operator2(A) ::= NOT_EQ(X). {A=X;}
|
||||
operator3(A) ::= LOG_AND(X). {A=X;}
|
||||
@@ -187,6 +188,7 @@ list_operator(A) ::= NOT_IN(X). {A=X;}
|
||||
func_name(A) ::= F_IF(X). { A=X; }
|
||||
func_name(A) ::= F_ELT(X). { A=X; }
|
||||
func_name(A) ::= F_COALESCE(X). { A=X; }
|
||||
func_name(A) ::= F_ISNULL(X). { A=X; }
|
||||
func_name(A) ::= F_CONCAT(X). { A=X; }
|
||||
func_name(A) ::= F_SUBSTR(X). { A=X; }
|
||||
func_name(A) ::= F_TRIM(X). { A=X; }
|
||||
|
||||
@@ -52,19 +52,19 @@ class OQLException extends CoreException
|
||||
|
||||
public function getHtmlDesc($sHighlightHtmlBegin = '<b>', $sHighlightHtmlEnd = '</b>')
|
||||
{
|
||||
$sRet = htmlentities($this->m_MyIssue.", found '".$this->m_sUnexpected."' in: ");
|
||||
$sRet .= htmlentities(substr($this->m_sInput, 0, $this->m_iCol));
|
||||
$sRet .= $sHighlightHtmlBegin.htmlentities(substr($this->m_sInput, $this->m_iCol, strlen($this->m_sUnexpected))).$sHighlightHtmlEnd;
|
||||
$sRet .= htmlentities(substr($this->m_sInput, $this->m_iCol + strlen($this->m_sUnexpected)));
|
||||
$sRet = htmlentities($this->m_MyIssue.", found '".$this->m_sUnexpected."' in: ", ENT_QUOTES, 'UTF-8');
|
||||
$sRet .= htmlentities(substr($this->m_sInput, 0, $this->m_iCol), ENT_QUOTES, 'UTF-8');
|
||||
$sRet .= $sHighlightHtmlBegin.htmlentities(substr($this->m_sInput, $this->m_iCol, strlen($this->m_sUnexpected)), ENT_QUOTES, 'UTF-8').$sHighlightHtmlEnd;
|
||||
$sRet .= htmlentities(substr($this->m_sInput, $this->m_iCol + strlen($this->m_sUnexpected)), ENT_QUOTES, 'UTF-8');
|
||||
|
||||
if (!is_null($this->m_aExpecting) && (count($this->m_aExpecting) > 0))
|
||||
{
|
||||
$sExpectations = '{'.implode(', ', $this->m_aExpecting).'}';
|
||||
$sRet .= ", expecting ".htmlentities($sExpectations);
|
||||
$sRet .= ", expecting ".htmlentities($sExpectations, ENT_QUOTES, 'UTF-8');
|
||||
$sSuggest = self::FindClosestString($this->m_sUnexpected, $this->m_aExpecting);
|
||||
if (strlen($sSuggest) > 0)
|
||||
{
|
||||
$sRet .= ", I would suggest to use '$sHighlightHtmlBegin".htmlentities($sSuggest)."$sHighlightHtmlEnd'";
|
||||
$sRet .= ", I would suggest to use '$sHighlightHtmlBegin".htmlentities($sSuggest, ENT_QUOTES, 'UTF-8')."$sHighlightHtmlEnd'";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
172
core/ormcaselog.class.inc.php
Normal file
172
core/ormcaselog.class.inc.php
Normal file
@@ -0,0 +1,172 @@
|
||||
<?php
|
||||
// Copyright (C) 2011 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
define('CASELOG_VISIBLE_ITEMS', 2);
|
||||
define('CASELOG_SEPARATOR', "\n".'========== %1$s : %2$s (%3$d) ============'."\n\n");
|
||||
|
||||
//require_once(APPROOT.'/core/userrights.class.inc.php');
|
||||
//require_once(APPROOT.'/application/webpage.class.inc.php');
|
||||
|
||||
/**
|
||||
* Class to store a "case log" in a structured way, keeping track of its successive entries
|
||||
*/
|
||||
class ormCaseLog {
|
||||
protected $m_sLog;
|
||||
protected $m_aIndex;
|
||||
|
||||
/**
|
||||
* Initializes the log with the first (initial) entry
|
||||
* @param $sLog string The text of the whole case log
|
||||
* @param $aIndex hash The case log index
|
||||
*/
|
||||
public function __construct($sLog = '', $aIndex = array())
|
||||
{
|
||||
$this->m_sLog = $sLog;
|
||||
$this->m_aIndex = $aIndex;
|
||||
}
|
||||
|
||||
public function GetText()
|
||||
{
|
||||
return $this->m_sLog;
|
||||
}
|
||||
|
||||
public function GetIndex()
|
||||
{
|
||||
return $this->m_aIndex;
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
return $this->m_sLog;
|
||||
}
|
||||
|
||||
public function GetAsHTML(WebPage $oP = null, $bEditMode = false, $aTransfoHandler = null)
|
||||
{
|
||||
$sHtml = '<table style="width:100%;table-layout:fixed"><tr><td>'; // Use table-layout:fixed to force the with to be independent from the actual content
|
||||
$iPos = 0;
|
||||
for($index=count($this->m_aIndex)-1 ; $index >= 0 ; $index--)
|
||||
{
|
||||
if ($index < count($this->m_aIndex) - CASELOG_VISIBLE_ITEMS)
|
||||
{
|
||||
$sOpen = '';
|
||||
$sDisplay = 'style="display:none;"';
|
||||
}
|
||||
else
|
||||
{
|
||||
$sOpen = ' open';
|
||||
$sDisplay = '';
|
||||
}
|
||||
$iPos += $this->m_aIndex[$index]['separator_length'];
|
||||
$sTextEntry = substr($this->m_sLog, $iPos, $this->m_aIndex[$index]['text_length']);
|
||||
$sTextEntry = str_replace(array("\r\n", "\n", "\r"), "<br/>", htmlentities($sTextEntry, ENT_QUOTES, 'UTF-8'));
|
||||
if (!is_null($aTransfoHandler))
|
||||
{
|
||||
$sTextEntry = call_user_func($aTransfoHandler, $sTextEntry);
|
||||
}
|
||||
$iPos += $this->m_aIndex[$index]['text_length'];
|
||||
|
||||
$sEntry = '<div class="caselog_header'.$sOpen.'">';
|
||||
$sEntry .= sprintf(Dict::S('UI:CaseLog:Header_Date_UserName'), $this->m_aIndex[$index]['date']->format(Dict::S('UI:CaseLog:DateFormat')), $this->m_aIndex[$index]['user_name']);
|
||||
$sEntry .= '</div>';
|
||||
$sEntry .= '<div class="caselog_entry"'.$sDisplay.'>';
|
||||
$sEntry .= $sTextEntry;
|
||||
$sEntry .= '</div>';
|
||||
$sHtml = $sHtml.$sEntry;
|
||||
}
|
||||
|
||||
// Process the case of an eventual remainder (quick migration of AttributeText fields)
|
||||
if ($iPos < (strlen($this->m_sLog) - 1))
|
||||
{
|
||||
$sTextEntry = substr($this->m_sLog, $iPos);
|
||||
$sTextEntry = str_replace(array("\r\n", "\n", "\r"), "<br/>", htmlentities($sTextEntry, ENT_QUOTES, 'UTF-8'));
|
||||
if (!is_null($aTransfoHandler))
|
||||
{
|
||||
$sTextEntry = call_user_func($aTransfoHandler, $sTextEntry);
|
||||
}
|
||||
|
||||
if (count($this->m_aIndex) == 0)
|
||||
{
|
||||
$sHtml .= '<div class="caselog_entry open">';
|
||||
$sHtml .= $sTextEntry;
|
||||
$sHtml .= '</div>';
|
||||
}
|
||||
else
|
||||
{
|
||||
if (count($this->m_aIndex) - CASELOG_VISIBLE_ITEMS > 0)
|
||||
{
|
||||
$sOpen = '';
|
||||
$sDisplay = 'style="display:none;"';
|
||||
}
|
||||
else
|
||||
{
|
||||
$sOpen = ' open';
|
||||
$sDisplay = '';
|
||||
}
|
||||
$sHtml .= '<div class="caselog_header'.$sOpen.'">';
|
||||
$sHtml .= Dict::S('UI:CaseLog:InitialValue');
|
||||
$sHtml .= '</div>';
|
||||
$sHtml .= '<div class="caselog_entry"'.$sDisplay.'>';
|
||||
$sHtml .= $sTextEntry;
|
||||
$sHtml .= '</div>';
|
||||
}
|
||||
}
|
||||
$sHtml .= '</td></tr></table>';
|
||||
return $sHtml;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new entry to the log and updates the internal index
|
||||
* @param $sText string The text of the new entry
|
||||
*/
|
||||
public function AddLogEntry($sText)
|
||||
{
|
||||
$sDate = date(Dict::S('UI:CaseLog:DateFormat'));
|
||||
$sSeparator = sprintf(CASELOG_SEPARATOR, $sDate, UserRights::GetUserFriendlyName(), UserRights::GetUserId());
|
||||
$iSepLength = strlen($sSeparator);
|
||||
$iTextlength = strlen($sText);
|
||||
$this->m_sLog = $sSeparator.$sText.$this->m_sLog; // Latest entry printed first
|
||||
$this->m_aIndex[] = array(
|
||||
'user_name' => UserRights::GetUserFriendlyName(),
|
||||
'user_id' => UserRights::GetUserId(),
|
||||
'date' => new DateTime(),
|
||||
'text_length' => $iTextlength,
|
||||
'separator_length' => $iSepLength,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the latest entry from the log
|
||||
* @return string
|
||||
*/
|
||||
public function GetLatestEntry()
|
||||
{
|
||||
$iLast = count($this->m_aIndex) - 1;
|
||||
$aLastEntry = $this->m_aIndex[$iLast];
|
||||
$sRes = substr($this->m_sLog, $aLastEntry['separator_length'], $aLastEntry['text_length']);
|
||||
return $sRes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the index of the latest entry from the log
|
||||
* @return integer
|
||||
*/
|
||||
public function GetLatestEntryIndex()
|
||||
{
|
||||
$iLast = count($this->m_aIndex) - 1;
|
||||
return $iLast;
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -14,7 +14,7 @@
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
require_once('../core/simplecrypt.class.inc.php');
|
||||
require_once(APPROOT.'/core/simplecrypt.class.inc.php');
|
||||
|
||||
/**
|
||||
* ormPassword
|
||||
|
||||
@@ -35,36 +35,19 @@
|
||||
require_once('cmdbsource.class.inc.php');
|
||||
|
||||
|
||||
class SQLExpression extends BinaryExpression
|
||||
{
|
||||
}
|
||||
class ScalarSQLExpression extends ScalarExpression
|
||||
{
|
||||
}
|
||||
class TrueSQLExpression extends TrueExpression
|
||||
{
|
||||
}
|
||||
class FieldSQLExpression extends FieldExpression
|
||||
{
|
||||
}
|
||||
class VariableSQLExpression extends VariableExpression
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
class SQLQuery
|
||||
{
|
||||
private $m_SourceOQL = '';
|
||||
private $m_sTable = '';
|
||||
private $m_sTableAlias = '';
|
||||
private $m_aFields = array();
|
||||
private $m_oConditionExpr = null;
|
||||
private $m_aFullTextNeedles = array();
|
||||
private $m_bToDelete = true; // The current table must be listed for deletion ?
|
||||
private $m_aValues = array(); // Values to set in case of an update query
|
||||
private $m_oSelectedIdField = null;
|
||||
private $m_aJoinSelects = array();
|
||||
|
||||
public function __construct($sTable, $sTableAlias, $aFields, $oConditionExpr, $aFullTextNeedles, $bToDelete = true, $aValues = array())
|
||||
public function __construct($sTable, $sTableAlias, $aFields, $bToDelete = true, $aValues = array(), $oSelectedIdField = null)
|
||||
{
|
||||
// This check is not needed but for developping purposes
|
||||
//if (!CMDBSource::IsTable($sTable))
|
||||
@@ -79,18 +62,20 @@ class SQLQuery
|
||||
$this->m_sTable = $sTable;
|
||||
$this->m_sTableAlias = $sTableAlias;
|
||||
$this->m_aFields = $aFields;
|
||||
$this->m_oConditionExpr = $oConditionExpr;
|
||||
if (is_null($oConditionExpr))
|
||||
{
|
||||
$this->m_oConditionExpr = new TrueExpression;
|
||||
}
|
||||
else if (!$oConditionExpr instanceof Expression)
|
||||
{
|
||||
throw new CoreException('Invalid type for condition, expecting an Expression', array('class' => get_class($oConditionExpr)));
|
||||
}
|
||||
$this->m_aFullTextNeedles = $aFullTextNeedles;
|
||||
$this->m_oConditionExpr = null;
|
||||
$this->m_bToDelete = $bToDelete;
|
||||
$this->m_aValues = $aValues;
|
||||
$this->m_oSelectedIdField = $oSelectedIdField;
|
||||
}
|
||||
|
||||
public function SetSourceOQL($sOQL)
|
||||
{
|
||||
$this->m_SourceOQL = $sOQL;
|
||||
}
|
||||
|
||||
public function GetSourceOQL()
|
||||
{
|
||||
return $this->m_SourceOQL;
|
||||
}
|
||||
|
||||
public function DisplayHtml()
|
||||
@@ -108,16 +93,6 @@ class SQLQuery
|
||||
echo "<b>$this->m_sTable</b>$sFields<br/>\n";
|
||||
// #@# todo - display html of an expression tree
|
||||
//$this->m_oConditionExpr->DisplayHtml()
|
||||
if (count($this->m_aFullTextNeedles) > 0)
|
||||
{
|
||||
echo "Full text criteria...<br/>\n";
|
||||
echo "<ul class=\"treeview\">\n";
|
||||
foreach ($this->m_aFullTextNeedles as $sFTNeedle)
|
||||
{
|
||||
echo "<li>$sFTNeedle</li>\n";
|
||||
}
|
||||
echo "</ul>";
|
||||
}
|
||||
if (count($this->m_aJoinSelects) > 0)
|
||||
{
|
||||
echo "Joined to...<br/>\n";
|
||||
@@ -139,13 +114,19 @@ class SQLQuery
|
||||
$oCondition = null;
|
||||
$aDelTables = array();
|
||||
$aSetValues = array();
|
||||
$this->privRender($aFrom, $aFields, $oCondition, $aDelTables, $aSetValues);
|
||||
$aSelectedIdFields = array();
|
||||
$this->privRender($aFrom, $aFields, $oCondition, $aDelTables, $aSetValues, $aSelectedIdFields);
|
||||
echo "From ...<br/>\n";
|
||||
echo "<pre style=\"font-size: smaller;\">\n";
|
||||
print_r($aFrom);
|
||||
echo "</pre>";
|
||||
}
|
||||
|
||||
public function SetSelect($aExpressions)
|
||||
{
|
||||
$this->m_aFields = $aExpressions;
|
||||
}
|
||||
|
||||
public function SetCondition($oConditionExpr)
|
||||
{
|
||||
$this->m_oConditionExpr = $oConditionExpr;
|
||||
@@ -153,7 +134,14 @@ class SQLQuery
|
||||
|
||||
public function AddCondition($oConditionExpr)
|
||||
{
|
||||
$this->m_oConditionExpr->LogAnd($oConditionExpr);
|
||||
if (is_null($this->m_oConditionExpr))
|
||||
{
|
||||
$this->m_oConditionExpr = $oConditionExpr;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->m_oConditionExpr->LogAnd($oConditionExpr);
|
||||
}
|
||||
}
|
||||
|
||||
private function AddJoin($sJoinType, $oSQLQuery, $sLeftField, $sRightField, $sRightTableAlias = '')
|
||||
@@ -202,7 +190,8 @@ class SQLQuery
|
||||
$oCondition = null;
|
||||
$aDelTables = array();
|
||||
$aSetValues = array();
|
||||
$this->privRender($aFrom, $aFields, $oCondition, $aDelTables, $aSetValues);
|
||||
$aSelectedIdFields = array();
|
||||
$this->privRender($aFrom, $aFields, $oCondition, $aDelTables, $aSetValues, $aSelectedIdFields);
|
||||
|
||||
// Target: DELETE myAlias1, myAlias2 FROM t1 as myAlias1, t2 as myAlias2, t3 as topreserve WHERE ...
|
||||
|
||||
@@ -216,8 +205,15 @@ class SQLQuery
|
||||
throw new CoreException("Building a request wich will delete every object of a given table -looks suspicious- please use truncate instead...");
|
||||
}
|
||||
*/
|
||||
$sWhere = self::ClauseWhere($oCondition, $aArgs);
|
||||
return "DELETE $sDelete FROM $sFrom WHERE $sWhere";
|
||||
if (is_null($oCondition))
|
||||
{
|
||||
// Delete all !!!
|
||||
}
|
||||
else
|
||||
{
|
||||
$sWhere = self::ClauseWhere($oCondition, $aArgs);
|
||||
return "DELETE $sDelete FROM $sFrom WHERE $sWhere";
|
||||
}
|
||||
}
|
||||
|
||||
// Interface, build the SQL query
|
||||
@@ -229,7 +225,8 @@ class SQLQuery
|
||||
$oCondition = null;
|
||||
$aDelTables = array();
|
||||
$aSetValues = array();
|
||||
$this->privRender($aFrom, $aFields, $oCondition, $aDelTables, $aSetValues);
|
||||
$aSelectedIdFields = array();
|
||||
$this->privRender($aFrom, $aFields, $oCondition, $aDelTables, $aSetValues, $aSelectedIdFields);
|
||||
|
||||
$sFrom = self::ClauseFrom($aFrom);
|
||||
$sValues = self::ClauseValues($aSetValues);
|
||||
@@ -246,13 +243,22 @@ class SQLQuery
|
||||
$oCondition = null;
|
||||
$aDelTables = array();
|
||||
$aSetValues = array();
|
||||
$this->privRender($aFrom, $aFields, $oCondition, $aDelTables, $aSetValues);
|
||||
$aSelectedIdFields = array();
|
||||
$this->privRender($aFrom, $aFields, $oCondition, $aDelTables, $aSetValues, $aSelectedIdFields);
|
||||
|
||||
$sFrom = self::ClauseFrom($aFrom);
|
||||
$sWhere = self::ClauseWhere($oCondition, $aArgs);
|
||||
if ($bGetCount)
|
||||
{
|
||||
$sSQL = "SELECT COUNT(*) AS COUNT FROM $sFrom WHERE $sWhere";
|
||||
if (count($aSelectedIdFields) > 0)
|
||||
{
|
||||
$sIDFields = implode(', ', $aSelectedIdFields);
|
||||
$sSQL = "SELECT COUNT(DISTINCT $sIDFields) AS COUNT FROM $sFrom WHERE $sWhere";
|
||||
}
|
||||
else
|
||||
{
|
||||
$sSQL = "SELECT COUNT(*) AS COUNT FROM $sFrom WHERE $sWhere";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -338,7 +344,14 @@ class SQLQuery
|
||||
|
||||
private static function ClauseWhere($oConditionExpr, $aArgs = array())
|
||||
{
|
||||
return $oConditionExpr->Render($aArgs);
|
||||
if (is_null($oConditionExpr))
|
||||
{
|
||||
return '1';
|
||||
}
|
||||
else
|
||||
{
|
||||
return $oConditionExpr->Render($aArgs);
|
||||
}
|
||||
}
|
||||
|
||||
private static function ClauseOrderBy($aOrderBy)
|
||||
@@ -353,43 +366,14 @@ class SQLQuery
|
||||
}
|
||||
|
||||
// Purpose: prepare the query data, once for all
|
||||
private function privRender(&$aFrom, &$aFields, &$oCondition, &$aDelTables, &$aSetValues)
|
||||
private function privRender(&$aFrom, &$aFields, &$oCondition, &$aDelTables, &$aSetValues, &$aSelectedIdFields)
|
||||
{
|
||||
$sTableAlias = $this->privRenderSingleTable($aFrom, $aFields, $aDelTables, $aSetValues);
|
||||
|
||||
// Add the full text search condition, based on each and every requested field
|
||||
//
|
||||
// To be updated with a real full text search based on the mySQL settings
|
||||
// (then it might move somewhere else !)
|
||||
//
|
||||
$sTableAlias = $this->privRenderSingleTable($aFrom, $aFields, $aDelTables, $aSetValues, $aSelectedIdFields);
|
||||
$oCondition = $this->m_oConditionExpr;
|
||||
if ((count($aFields) > 0) && (count($this->m_aFullTextNeedles) > 0))
|
||||
{
|
||||
$aFieldExp = array();
|
||||
foreach ($aFields as $sField)
|
||||
{
|
||||
// This is TEMPORARY (that's why it is weird, actually)
|
||||
// Full text match will be done as an expression in the filter condition
|
||||
|
||||
// $sField is already a string `table`.`column`
|
||||
// Let's make an expression out of it (again !)
|
||||
$aFieldExp[] = Expression::FromOQL($sField);
|
||||
}
|
||||
$oFullTextExpr = new CharConcatExpression($aFieldExp);
|
||||
// The cast is necessary because the CONCAT result in a binary string:
|
||||
// if any of the field is a binary string => case sensitive comparison
|
||||
//
|
||||
foreach($this->m_aFullTextNeedles as $sFTNeedle)
|
||||
{
|
||||
$oNewCond = new BinaryExpression($oFullTextExpr, 'LIKE', new ScalarExpression("%$sFTNeedle%"));
|
||||
$oCondition = $oCondition->LogAnd($oNewCond);
|
||||
}
|
||||
}
|
||||
|
||||
return $sTableAlias;
|
||||
}
|
||||
|
||||
private function privRenderSingleTable(&$aFrom, &$aFields, &$aDelTables, &$aSetValues, $sJoinType = 'first', $sCallerAlias = '', $sLeftField = '', $sRightField = '', $sRightTableAlias = '')
|
||||
private function privRenderSingleTable(&$aFrom, &$aFields, &$aDelTables, &$aSetValues, &$aSelectedIdFields, $sJoinType = 'first', $sCallerAlias = '', $sLeftField = '', $sRightField = '', $sRightTableAlias = '')
|
||||
{
|
||||
$aActualTableFields = CMDBSource::GetTableFieldsList($this->m_sTable);
|
||||
|
||||
@@ -419,8 +403,6 @@ class SQLQuery
|
||||
//
|
||||
foreach($this->m_aFields as $sAlias => $oExpression)
|
||||
{
|
||||
$sTable = $oExpression->GetParent();
|
||||
$sColumn = $oExpression->GetName();
|
||||
$aFields["`$sAlias`"] = $oExpression->Render();
|
||||
}
|
||||
if ($this->m_bToDelete)
|
||||
@@ -432,6 +414,11 @@ class SQLQuery
|
||||
$aSetValues["`{$this->m_sTableAlias}`.`$sFieldName`"] = $value; // quoted further!
|
||||
}
|
||||
|
||||
if (!is_null($this->m_oSelectedIdField))
|
||||
{
|
||||
$aSelectedIdFields[] = $this->m_oSelectedIdField->Render();
|
||||
}
|
||||
|
||||
// loop on joins, to complete the list of tables/fields/conditions
|
||||
//
|
||||
$aTempFrom = array(); // temporary subset of 'from' specs, to be grouped in the final query
|
||||
@@ -443,7 +430,7 @@ class SQLQuery
|
||||
$sRightField = $aJoinData["rightfield"];
|
||||
$sRightTableAlias = $aJoinData["righttablealias"];
|
||||
|
||||
$sJoinTableAlias = $oRightSelect->privRenderSingleTable($aTempFrom, $aFields, $aDelTables, $aSetValues, $sJoinType, $this->m_sTableAlias, $sLeftField, $sRightField, $sRightTableAlias);
|
||||
$sJoinTableAlias = $oRightSelect->privRenderSingleTable($aTempFrom, $aFields, $aDelTables, $aSetValues, $aSelectedIdFields, $sJoinType, $this->m_sTableAlias, $sLeftField, $sRightField, $sRightTableAlias);
|
||||
}
|
||||
$aFrom[$this->m_sTableAlias]['subfrom'] = $aTempFrom;
|
||||
|
||||
|
||||
@@ -130,7 +130,7 @@ abstract class TriggerOnStateChange extends TriggerOnObject
|
||||
MetaModel::Init_SetZListItems('details', array('description', 'target_class', 'state', 'action_list')); // Attributes to be displayed for the complete details
|
||||
MetaModel::Init_SetZListItems('list', array('finalclass', 'target_class', 'state')); // Attributes to be displayed for a list
|
||||
// Search criteria
|
||||
// MetaModel::Init_SetZListItems('standard_search', array('name')); // Criteria of the std search form
|
||||
MetaModel::Init_SetZListItems('standard_search', array('description', 'target_class', 'state')); // Criteria of the std search form
|
||||
// MetaModel::Init_SetZListItems('advanced_search', array('name')); // Criteria of the advanced search form
|
||||
}
|
||||
}
|
||||
@@ -141,7 +141,7 @@ class TriggerOnStateEnter extends TriggerOnStateChange
|
||||
{
|
||||
$aParams = array
|
||||
(
|
||||
"category" => "core/cmdb",
|
||||
"category" => "core/cmdb,bizmodel",
|
||||
"key_type" => "autoincrement",
|
||||
"name_attcode" => "description",
|
||||
"state_attcode" => "",
|
||||
@@ -158,7 +158,7 @@ class TriggerOnStateEnter extends TriggerOnStateChange
|
||||
MetaModel::Init_SetZListItems('details', array('description', 'target_class', 'state', 'action_list')); // Attributes to be displayed for the complete details
|
||||
MetaModel::Init_SetZListItems('list', array('target_class', 'state')); // Attributes to be displayed for a list
|
||||
// Search criteria
|
||||
// MetaModel::Init_SetZListItems('standard_search', array('name')); // Criteria of the std search form
|
||||
MetaModel::Init_SetZListItems('standard_search', array('description', 'target_class', 'state')); // Criteria of the std search form
|
||||
// MetaModel::Init_SetZListItems('advanced_search', array('name')); // Criteria of the advanced search form
|
||||
}
|
||||
}
|
||||
@@ -169,7 +169,7 @@ class TriggerOnStateLeave extends TriggerOnStateChange
|
||||
{
|
||||
$aParams = array
|
||||
(
|
||||
"category" => "core/cmdb",
|
||||
"category" => "core/cmdb,bizmodel",
|
||||
"key_type" => "autoincrement",
|
||||
"name_attcode" => "description",
|
||||
"state_attcode" => "",
|
||||
@@ -186,7 +186,7 @@ class TriggerOnStateLeave extends TriggerOnStateChange
|
||||
MetaModel::Init_SetZListItems('details', array('description', 'target_class', 'state', 'action_list')); // Attributes to be displayed for the complete details
|
||||
MetaModel::Init_SetZListItems('list', array('target_class', 'state')); // Attributes to be displayed for a list
|
||||
// Search criteria
|
||||
// MetaModel::Init_SetZListItems('standard_search', array('')); // Criteria of the std search form
|
||||
MetaModel::Init_SetZListItems('standard_search', array('description', 'target_class', 'state')); // Criteria of the std search form
|
||||
// MetaModel::Init_SetZListItems('advanced_search', array('')); // Criteria of the advanced search form
|
||||
}
|
||||
}
|
||||
@@ -197,7 +197,7 @@ class TriggerOnObjectCreate extends TriggerOnObject
|
||||
{
|
||||
$aParams = array
|
||||
(
|
||||
"category" => "core/cmdb",
|
||||
"category" => "core/cmdb,bizmodel",
|
||||
"key_type" => "autoincrement",
|
||||
"name_attcode" => "description",
|
||||
"state_attcode" => "",
|
||||
@@ -214,7 +214,7 @@ class TriggerOnObjectCreate extends TriggerOnObject
|
||||
MetaModel::Init_SetZListItems('details', array('description', 'target_class', 'action_list')); // Attributes to be displayed for the complete details
|
||||
MetaModel::Init_SetZListItems('list', array('finalclass', 'target_class')); // Attributes to be displayed for a list
|
||||
// Search criteria
|
||||
// MetaModel::Init_SetZListItems('standard_search', array('name')); // Criteria of the std search form
|
||||
MetaModel::Init_SetZListItems('standard_search', array('description', 'target_class')); // Criteria of the std search form
|
||||
// MetaModel::Init_SetZListItems('advanced_search', array('name')); // Criteria of the advanced search form
|
||||
}
|
||||
}
|
||||
@@ -225,7 +225,7 @@ class lnkTriggerAction extends cmdbAbstractObject
|
||||
{
|
||||
$aParams = array
|
||||
(
|
||||
"category" => "core/cmdb",
|
||||
"category" => "core/cmdb,bizmodel",
|
||||
"key_type" => "autoincrement",
|
||||
"name_attcode" => "",
|
||||
"state_attcode" => "",
|
||||
|
||||
@@ -50,7 +50,6 @@ define('UR_ACTION_APPLICATION_DEFINED', 10000); // Application specific actions
|
||||
*/
|
||||
abstract class UserRightsAddOnAPI
|
||||
{
|
||||
abstract public function Setup(); // initial installation
|
||||
abstract public function CreateAdministrator($sAdminUser, $sAdminPwd, $sLanguage = 'EN US'); // could be used during initial installation
|
||||
|
||||
abstract public function Init(); // loads data (possible optimizations)
|
||||
@@ -111,6 +110,35 @@ abstract class User extends cmdbAbstractObject
|
||||
abstract public function CanChangePassword();
|
||||
abstract public function ChangePassword($sOldPassword, $sNewPassword);
|
||||
|
||||
/*
|
||||
* Compute a name in best effort mode
|
||||
*/
|
||||
public function GetFriendlyName()
|
||||
{
|
||||
if (!MetaModel::IsValidAttCode(get_class($this), 'contactid'))
|
||||
{
|
||||
return $this->Get('login');
|
||||
}
|
||||
if ($this->Get('contactid') != 0)
|
||||
{
|
||||
$sFirstName = $this->Get('first_name');
|
||||
$sLastName = $this->Get('last_name');
|
||||
$sEmail = $this->Get('email');
|
||||
if (strlen($sFirstName) > 0)
|
||||
{
|
||||
return "$sFirstName $sLastName";
|
||||
}
|
||||
elseif (strlen($sEmail) > 0)
|
||||
{
|
||||
return "$sLastName <$sEmail>";
|
||||
}
|
||||
else
|
||||
{
|
||||
return $sLastName;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Overload the standard behavior
|
||||
*/
|
||||
@@ -132,8 +160,7 @@ abstract class User extends cmdbAbstractObject
|
||||
}
|
||||
// Check that this user has at least one profile assigned
|
||||
$oSet = $this->Get('profile_list');
|
||||
$aProfileLinks = $oSet->ToArray();
|
||||
if (count($aProfileLinks) == 0)
|
||||
if ($oSet->Count() == 0)
|
||||
{
|
||||
$this->m_aCheckIssues[] = Dict::Format('Class:User/Error:AtLeastOneProfileIsNeeded');
|
||||
}
|
||||
@@ -174,7 +201,7 @@ abstract class User extends cmdbAbstractObject
|
||||
{
|
||||
if (UserRights::IsStimulusAllowed($sClass, $sStimulusCode, null, $this))
|
||||
{
|
||||
$aStimuli[] = '<span title="'.$sStimulusCode.': '.htmlentities($oStimulus->GetDescription()).'">'.htmlentities($oStimulus->GetLabel()).'</span>';
|
||||
$aStimuli[] = '<span title="'.$sStimulusCode.': '.htmlentities($oStimulus->GetDescription(), ENT_QUOTES, 'UTF-8').'">'.htmlentities($oStimulus->GetLabel(), ENT_QUOTES, 'UTF-8').'</span>';
|
||||
}
|
||||
}
|
||||
$sStimuli = implode(', ', $aStimuli);
|
||||
@@ -310,15 +337,6 @@ class UserRights
|
||||
return $bRes;
|
||||
}
|
||||
|
||||
// Installation (e.g: give default values for users)
|
||||
public static function Setup()
|
||||
{
|
||||
// to be discussed...
|
||||
$bRes = self::$m_oAddOn->Setup();
|
||||
self::FlushPrivileges(true /* reset admin cache */);
|
||||
return $bRes;
|
||||
}
|
||||
|
||||
protected static function IsLoggedIn()
|
||||
{
|
||||
if (self::$m_oUser == null)
|
||||
@@ -372,6 +390,11 @@ class UserRights
|
||||
|
||||
public static function CanChangePassword()
|
||||
{
|
||||
if (MetaModel::DBIsReadOnly())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!is_null(self::$m_oUser))
|
||||
{
|
||||
return self::$m_oUser->CanChangePassword();
|
||||
@@ -394,16 +417,25 @@ class UserRights
|
||||
}
|
||||
}
|
||||
|
||||
public static function ChangePassword($sCurrentPassword, $sNewPassword)
|
||||
public static function ChangePassword($sOldPassword, $sNewPassword, $sName = '')
|
||||
{
|
||||
if (!is_null(self::$m_oUser))
|
||||
if (empty($sName))
|
||||
{
|
||||
return self::$m_oUser->ChangePassword($sCurrentPassword, $sNewPassword);
|
||||
$oUser = self::$m_oUser;
|
||||
}
|
||||
else
|
||||
{
|
||||
// find the id out of the login string
|
||||
$oUser = self::FindUser($sName);
|
||||
}
|
||||
if (is_null($oUser))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return $oUser->ChangePassword($sOldPassword, $sNewPassword);
|
||||
}
|
||||
}
|
||||
|
||||
public static function Impersonate($sName, $sPassword)
|
||||
@@ -438,6 +470,18 @@ class UserRights
|
||||
}
|
||||
}
|
||||
|
||||
public static function GetUserObject()
|
||||
{
|
||||
if (is_null(self::$m_oUser))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
return self::$m_oUser;
|
||||
}
|
||||
}
|
||||
|
||||
public static function GetUserLanguage()
|
||||
{
|
||||
if (is_null(self::$m_oUser))
|
||||
@@ -488,9 +532,31 @@ class UserRights
|
||||
{
|
||||
return '';
|
||||
}
|
||||
if (!MetaModel::IsValidAttCode(get_class($oUser), 'contactid'))
|
||||
{
|
||||
return '';
|
||||
}
|
||||
return $oUser->Get('contactid');
|
||||
}
|
||||
|
||||
// Render the user name in best effort mode
|
||||
public static function GetUserFriendlyName($sName = '')
|
||||
{
|
||||
if (empty($sName))
|
||||
{
|
||||
$oUser = self::$m_oUser;
|
||||
}
|
||||
else
|
||||
{
|
||||
$oUser = FindUser($sName);
|
||||
}
|
||||
if (is_null($oUser))
|
||||
{
|
||||
return '';
|
||||
}
|
||||
return $oUser->GetFriendlyName();
|
||||
}
|
||||
|
||||
public static function IsImpersonated()
|
||||
{
|
||||
if (is_null(self::$m_oRealUser))
|
||||
@@ -518,6 +584,15 @@ class UserRights
|
||||
return self::$m_oRealUser->GetKey();
|
||||
}
|
||||
|
||||
public static function GetRealUserFriendlyName()
|
||||
{
|
||||
if (is_null(self::$m_oRealUser))
|
||||
{
|
||||
return '';
|
||||
}
|
||||
return self::$m_oRealUser->GetFriendlyName();
|
||||
}
|
||||
|
||||
protected static function CheckLogin()
|
||||
{
|
||||
if (!self::IsLoggedIn())
|
||||
@@ -552,6 +627,14 @@ class UserRights
|
||||
// When initializing, we need to let everything pass trough
|
||||
if (!self::CheckLogin()) return true;
|
||||
|
||||
if (MetaModel::DBIsReadOnly())
|
||||
{
|
||||
if ($iActionCode == UR_ACTION_MODIFY) return false;
|
||||
if ($iActionCode == UR_ACTION_DELETE) return false;
|
||||
if ($iActionCode == UR_ACTION_BULK_MODIFY) return false;
|
||||
if ($iActionCode == UR_ACTION_BULK_DELETE) return false;
|
||||
}
|
||||
|
||||
if (self::IsAdministrator($oUser)) return true;
|
||||
|
||||
if (MetaModel::HasCategory($sClass, 'bizmodel'))
|
||||
@@ -582,6 +665,11 @@ class UserRights
|
||||
// When initializing, we need to let everything pass trough
|
||||
if (!self::CheckLogin()) return true;
|
||||
|
||||
if (MetaModel::DBIsReadOnly())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (self::IsAdministrator($oUser)) return true;
|
||||
|
||||
if (MetaModel::HasCategory($sClass, 'bizmodel'))
|
||||
@@ -604,6 +692,14 @@ class UserRights
|
||||
// When initializing, we need to let everything pass trough
|
||||
if (!self::CheckLogin()) return true;
|
||||
|
||||
if (MetaModel::DBIsReadOnly())
|
||||
{
|
||||
if ($iActionCode == UR_ACTION_MODIFY) return false;
|
||||
if ($iActionCode == UR_ACTION_DELETE) return false;
|
||||
if ($iActionCode == UR_ACTION_BULK_MODIFY) return false;
|
||||
if ($iActionCode == UR_ACTION_BULK_DELETE) return false;
|
||||
}
|
||||
|
||||
if (self::IsAdministrator($oUser)) return true;
|
||||
|
||||
// this module is forbidden for non admins
|
||||
@@ -720,4 +816,169 @@ class UserRights
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper class to get the number/list of items for which a given action is allowed/possible
|
||||
*/
|
||||
class ActionChecker
|
||||
{
|
||||
var $oFilter;
|
||||
var $iActionCode;
|
||||
var $iAllowedCount = null;
|
||||
var $aAllowedIDs = null;
|
||||
|
||||
public function __construct(DBObjectSearch $oFilter, $iActionCode)
|
||||
{
|
||||
$this->oFilter = $oFilter;
|
||||
$this->iActionCode = $iActionCode;
|
||||
$this->iAllowedCount = null;
|
||||
$this->aAllowedIDs = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns the number of objects for which the action is allowed
|
||||
* @return integer The number of "allowed" objects 0..N
|
||||
*/
|
||||
public function GetAllowedCount()
|
||||
{
|
||||
if ($this->iAllowedCount == null) $this->CheckObjects();
|
||||
return $this->iAllowedCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* If IsAllowed returned UR_ALLOWED_DEPENDS, this methods returns
|
||||
* an array of ObjKey => Status (true|false)
|
||||
* @return array
|
||||
*/
|
||||
public function GetAllowedIDs()
|
||||
{
|
||||
if ($this->aAllowedIDs == null) $this->IsAllowed();
|
||||
return $this->aAllowedIDs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the speficied stimulus is allowed for the set of objects
|
||||
* @return UR_ALLOWED_YES, UR_ALLOWED_NO or UR_ALLOWED_DEPENDS
|
||||
*/
|
||||
public function IsAllowed()
|
||||
{
|
||||
$sClass = $this->oFilter->GetClass();
|
||||
$oSet = new DBObjectSet($this->oFilter);
|
||||
$iActionAllowed = UserRights::IsActionAllowed($sClass, $oSet, $this->iActionCode);
|
||||
if ($iActionAllowed == UR_ALLOWED_DEPENDS)
|
||||
{
|
||||
// Check for each object if the action is allowed or not
|
||||
$this->aAllowedIDs = array();
|
||||
$oSet->Rewind();
|
||||
$this->iAllowedCount = 0;
|
||||
while($oObj = $oSet->Fetch())
|
||||
{
|
||||
$oObjSet = DBObjectSet::FromArray($sClass, array($oObj));
|
||||
if (UserRights::IsActionAllowed($sClass, $this->iActionCode, $oObjSet) == UR_ALLOWED_NO)
|
||||
{
|
||||
$this->aAllowedIDs[$oObj->GetKey()] = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Assume UR_ALLOWED_YES, since there is just one object !
|
||||
$this->aAllowedIDs[$oObj->GetKey()] = true;
|
||||
$this->iAllowedCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ($iActionAllowed == UR_ALLOWED_YES)
|
||||
{
|
||||
$this->iAllowedCount = $oSet->Count();
|
||||
$this->aAllowedIDs = array(); // Optimization: not filled when Ok for all objects
|
||||
}
|
||||
else // UR_ALLOWED_NO
|
||||
{
|
||||
$this->iAllowedCount = 0;
|
||||
$this->aAllowedIDs = array();
|
||||
}
|
||||
return $iActionAllowed;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper class to get the number/list of items for which a given stimulus can be applied (allowed & possible)
|
||||
*/
|
||||
class StimulusChecker extends ActionChecker
|
||||
{
|
||||
var $sState = null;
|
||||
|
||||
public function __construct(DBObjectSearch $oFilter, $sState, $iStimulusCode)
|
||||
{
|
||||
parent::__construct($oFilter, $iStimulusCode);
|
||||
$this->sState = $sState;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the speficied stimulus is allowed for the set of objects
|
||||
* @return UR_ALLOWED_YES, UR_ALLOWED_NO or UR_ALLOWED_DEPENDS
|
||||
*/
|
||||
public function IsAllowed()
|
||||
{
|
||||
$sClass = $this->oFilter->GetClass();
|
||||
$oSet = new DBObjectSet($this->oFilter);
|
||||
$iActionAllowed = UserRights::IsStimulusAllowed($sClass, $this->iActionCode, $oSet);
|
||||
if ($iActionAllowed == UR_ALLOWED_NO)
|
||||
{
|
||||
$this->iAllowedCount = 0;
|
||||
$this->aAllowedIDs = array();
|
||||
}
|
||||
else // Even if UR_ALLOWED_YES, we need to check if each object is in the appropriate state
|
||||
{
|
||||
// Hmmm, may not be needed right now because we limit the "multiple" action to object in
|
||||
// the same state... may be useful later on if we want to extend this behavior...
|
||||
|
||||
// Check for each object if the action is allowed or not
|
||||
$this->aAllowedIDs = array();
|
||||
$oSet->Rewind();
|
||||
$iAllowedCount = 0;
|
||||
$iActionAllowed = UR_ALLOWED_DEPENDS;
|
||||
while($oObj = $oSet->Fetch())
|
||||
{
|
||||
$aTransitions = $oObj->EnumTransitions();
|
||||
if (array_key_exists($this->iActionCode, $aTransitions))
|
||||
{
|
||||
// Temporary optimization possible: since the current implementation
|
||||
// of IsActionAllowed does not perform a 'per instance' check, we could
|
||||
// skip this second validation phase and assume it would return UR_ALLOWED_YES
|
||||
$oObjSet = DBObjectSet::FromArray($sClass, array($oObj));
|
||||
if (UserRights::IsActionAllowed($sClass, $this->iActionCode, $oObjSet) == UR_ALLOWED_NO)
|
||||
{
|
||||
$this->aAllowedIDs[$oObj->GetKey()] = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Assume UR_ALLOWED_YES, since there is just one object !
|
||||
$this->aAllowedIDs[$oObj->GetKey()] = true;
|
||||
$this->iState = $oObj->GetState();
|
||||
$this->iAllowedCount++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->aAllowedIDs[$oObj->GetKey()] = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->iAllowedCount == $oSet->Count())
|
||||
{
|
||||
$iActionAllowed = UR_ALLOWED_YES;
|
||||
}
|
||||
if ($this->iAllowedCount == 0)
|
||||
{
|
||||
$iActionAllowed = UR_ALLOWED_NO;
|
||||
}
|
||||
|
||||
return $iActionAllowed;
|
||||
}
|
||||
|
||||
public function GetState()
|
||||
{
|
||||
return $this->iState;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -51,25 +51,23 @@ abstract class ValueSetDefinition
|
||||
}
|
||||
|
||||
|
||||
public function GetValues($aArgs, $sBeginsWith = '')
|
||||
public function GetValues($aArgs, $sContains = '')
|
||||
{
|
||||
if (!$this->m_bIsLoaded)
|
||||
{
|
||||
$this->LoadValues($aArgs);
|
||||
$this->m_bIsLoaded = true;
|
||||
}
|
||||
if (strlen($sBeginsWith) == 0)
|
||||
if (strlen($sContains) == 0)
|
||||
{
|
||||
$aRet = $this->m_aValues;
|
||||
}
|
||||
else
|
||||
{
|
||||
$iCheckedLen = strlen($sBeginsWith);
|
||||
$sBeginsWith = strtolower($sBeginsWith);
|
||||
$aRet = array();
|
||||
foreach ($this->m_aValues as $sKey=>$sValue)
|
||||
{
|
||||
if (strtolower(substr($sValue, 0, $iCheckedLen)) == $sBeginsWith)
|
||||
if (stripos($sValue, $sContains) !== false)
|
||||
{
|
||||
$aRet[$sKey] = $sValue;
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
}
|
||||
|
||||
.ac_loading {
|
||||
background: white url('indicator.gif') right center no-repeat;
|
||||
background: white url('../images/indicator.gif') right center no-repeat;
|
||||
}
|
||||
|
||||
.ac_odd {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* CSS Document */
|
||||
body {
|
||||
font-family: Tahoma, Verdana, Arial, Helevtica;
|
||||
font-family: Tahoma, Verdana, Arial, Helvetica;
|
||||
font-size: 10pt;
|
||||
background-color: #fff;
|
||||
color:#000000;
|
||||
@@ -10,7 +10,7 @@ body {
|
||||
}
|
||||
|
||||
.raw_output {
|
||||
font-family: Courier-New, Courier, Arial, Helevtica;
|
||||
font-family: Courier-New, Courier, Arial, Helvetica;
|
||||
font-size: 8pt;
|
||||
background-color: #eeeeee;
|
||||
color: #000000;
|
||||
@@ -126,9 +126,9 @@ th.headerSortDown {
|
||||
|
||||
td {
|
||||
font-family: Tahoma, Verdana, Arial, Helvetica;
|
||||
font-size: 8pt;
|
||||
font-size: 12px;
|
||||
color:#696969;
|
||||
background-color: #ffffff;
|
||||
nobackground-color: #ffffff;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
@@ -139,14 +139,43 @@ tr.clicked td {
|
||||
}
|
||||
|
||||
td.label {
|
||||
vertical-align: top;
|
||||
}
|
||||
td.label span {
|
||||
font-family: Tahoma, Verdana, Arial, Helvetica;
|
||||
font-size: 12px;
|
||||
color: #000000;
|
||||
background-color:#f6f6f6;
|
||||
padding: 0.25em;
|
||||
font-weight:bold;
|
||||
padding: 5px;
|
||||
padding-right: 10px;
|
||||
font-weight:bold;
|
||||
vertical-align: top;
|
||||
text-align: right;
|
||||
display: block;
|
||||
}
|
||||
fieldset td.label span {
|
||||
padding: 3px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
fieldset {
|
||||
margin-top: 3px;
|
||||
-moz-border-radius: 6px;
|
||||
-webkit-border-radius: 6px;
|
||||
border-radius: 6px;
|
||||
border-style: solid;
|
||||
border-color: #ddd;
|
||||
}
|
||||
|
||||
legend {
|
||||
font-family: Tahoma, Verdana, Arial, Helvetica;
|
||||
font-size: 12px;
|
||||
padding:8px;
|
||||
color: #fff;
|
||||
background-color: #1C94C4;
|
||||
font-weight: bold;
|
||||
-moz-border-radius: 6px;
|
||||
-webkit-border-radius: 6px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
.ui-widget-content td a, p a, p a:visited, td a, td a:visited {
|
||||
text-decoration:none;
|
||||
color: #1C94C4;
|
||||
@@ -160,7 +189,7 @@ p a:hover, td a:hover {
|
||||
background: url(../images/mini-arrow-orange.gif) no-repeat left;
|
||||
}
|
||||
|
||||
td a.no-arrow, td a.no-arrow:visited {
|
||||
td a.no-arrow, td a.no-arrow:visited, .SearchDrawer a.no-arrow, .SearchDrawer a.no-arrow:visited {
|
||||
text-decoration:none;
|
||||
color:#000000;
|
||||
padding-left:0px;
|
||||
@@ -172,6 +201,19 @@ td a.no-arrow:hover {
|
||||
padding-left:0px;
|
||||
background: inherit;
|
||||
}
|
||||
td a.mailto, td a.mailto:visited {
|
||||
text-decoration:none;
|
||||
color:#000000;
|
||||
padding-left:20px;
|
||||
background: url(../images/mail.png) no-repeat left;
|
||||
}
|
||||
td a.mailto:hover {
|
||||
text-decoration:underline;
|
||||
color:#EB8F00;
|
||||
padding-left:20px;
|
||||
background: url(../images/mail.png) no-repeat left;
|
||||
}
|
||||
|
||||
a.small_action {
|
||||
font-family: Tahoma, Verdana, Arial, Helvetica;
|
||||
font-size: 8pt;
|
||||
@@ -781,7 +823,7 @@ div#inner_menu {
|
||||
}
|
||||
div#logo {
|
||||
height: 70px;
|
||||
width: 100%;
|
||||
nowidth: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
div#logo div {
|
||||
@@ -794,10 +836,18 @@ div#logo div {
|
||||
background: url(../images/banner-bkg.png) repeat-x scroll 0 0 transparent;
|
||||
text-align: right;
|
||||
}
|
||||
#admin-banner {
|
||||
float: left;
|
||||
margin-top: 2px;
|
||||
padding: 8px;
|
||||
border: 1px solid #c33;
|
||||
background-color: #fee;
|
||||
-moz-border-radius: 0.5em;
|
||||
}
|
||||
#global-search {
|
||||
height: 55px;
|
||||
float: right;
|
||||
background: url(../images/banner-search.png) no-repeat left;
|
||||
background: url(../images/banner-search.png) no-repeat;
|
||||
nopadding-top: 15px;
|
||||
text-align: right;
|
||||
overflow-y: hidden;
|
||||
@@ -817,7 +867,7 @@ div#logo div {
|
||||
#global-search > form input[type="text"] {
|
||||
border: 0;
|
||||
height: 18px;
|
||||
width: 180px;E8FFD3
|
||||
width: 180px;
|
||||
padding-top: 4;
|
||||
background: transparent;
|
||||
}
|
||||
@@ -856,4 +906,146 @@ div.footer{
|
||||
#SearchResultsToAdd table.listResults tbody {
|
||||
height: 300px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
tr.row_unchanged td {
|
||||
border-bottom: 1px #ccc solid;
|
||||
padding: 2px;
|
||||
}
|
||||
.wizContainer table tr.row_error td {
|
||||
border-bottom: 1px #ccc solid;
|
||||
background-color: #fdd;
|
||||
padding: 2px;
|
||||
}
|
||||
tr.row_modified td {
|
||||
border-bottom: 1px #ccc solid;
|
||||
padding: 2px;
|
||||
}
|
||||
tr.row_added td {
|
||||
border-bottom: 1px #ccc solid;
|
||||
padding: 2px;
|
||||
}
|
||||
a.truncated {
|
||||
cursor: pointer;
|
||||
}
|
||||
.org_combo
|
||||
{
|
||||
font-size:x-small;
|
||||
width: auto;
|
||||
max-width: 200px;
|
||||
}
|
||||
span.form_validation {
|
||||
width:24px;
|
||||
text-align:center;
|
||||
}
|
||||
.notification {
|
||||
border: 1px solid #c33;
|
||||
background-color: #fee;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em;
|
||||
text-align:center;
|
||||
width: 95%;
|
||||
-moz-border-radius: 0.5em;
|
||||
}
|
||||
.wiki_broken_link {
|
||||
text-decoration: line-through;
|
||||
}
|
||||
.synoptics, .synoptics tr td {
|
||||
background: transparent;
|
||||
padding:10px;
|
||||
font-size:1em;
|
||||
vertical-align:middle;
|
||||
color:#fff;
|
||||
text-align:center;
|
||||
}
|
||||
.synoptics tr td.arrow {
|
||||
color:#333;
|
||||
border-top: 1px dashed #333;
|
||||
width:100px;
|
||||
}
|
||||
.synoptics tr.synoptics_header td {
|
||||
color:#000; font-size:1em;
|
||||
vertical-align:middle;
|
||||
text-align:center;
|
||||
}
|
||||
.mono_value {
|
||||
display: inline-block;
|
||||
background-color: #3c3;
|
||||
color: #fff;
|
||||
font-weight:bold;
|
||||
padding: 3px;
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
margin-left:3px;
|
||||
-moz-border-radius: 10px;
|
||||
-webkit-border-radius: 10px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
.multi_values {
|
||||
display: inline-block;
|
||||
background-color: #c33;
|
||||
color: #fff;
|
||||
font-weight:bold;
|
||||
padding: 3px;
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
margin-left:3px;
|
||||
-moz-border-radius: 10px;
|
||||
-webkit-border-radius: 10px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
.caselog {
|
||||
overflow-x: hidden;
|
||||
display: block;
|
||||
overflow-y: auto;
|
||||
border: 1px #ddd solid;
|
||||
font-family: Tahoma, Verdana, Arial, Helvetica;
|
||||
font-size: 12px;
|
||||
}
|
||||
.caselog_input_header {
|
||||
padding-top:3px;
|
||||
padding-bottom:3px;
|
||||
border-top:1px solid #fff;
|
||||
background: #ddd;
|
||||
width:100%;
|
||||
}
|
||||
.caselog_header {
|
||||
padding:3px;
|
||||
border-top:1px solid #fff;
|
||||
background: #ddd url(../images/plus.gif) left no-repeat;
|
||||
padding-left: 16px;
|
||||
cursor: pointer;
|
||||
width:100%;
|
||||
}
|
||||
.caselog_header.open {
|
||||
background: #ddd url(../images/minus.gif) left no-repeat;
|
||||
}
|
||||
.caselog_entry {
|
||||
padding:3px;
|
||||
padding-left: 16px;
|
||||
border-bottom:1px #999 solid;
|
||||
margin-left:0;
|
||||
margin-right:0;
|
||||
white-space: pre-wrap; /* css-3 */
|
||||
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
|
||||
white-space: -pre-wrap; /* Opera 4-6 */
|
||||
white-space: -o-pre-wrap; /* Opera 7 */
|
||||
word-wrap: break-word; /* Internet Explorer 5.5+, CSS3 */
|
||||
}
|
||||
table.details {
|
||||
border-collapse: collapse;
|
||||
noborder-bottom: 2px #fff solid;
|
||||
width:100%;
|
||||
}
|
||||
table.details>tbody>tr>td {
|
||||
border-bottom: 2px #ddd solid;
|
||||
padding-bottom: 5px;
|
||||
padding-top: 3px;
|
||||
}
|
||||
fieldset table.details>tbody>tr>td {
|
||||
padding-top: 3px;
|
||||
background: transparent;
|
||||
border: 0;
|
||||
}
|
||||
.ac_dlg_loading {
|
||||
background: white url('../images/indicator.gif') right center no-repeat;
|
||||
}
|
||||
@@ -33,9 +33,102 @@
|
||||
// Class: CMDBChange
|
||||
//
|
||||
|
||||
Dict::Add('DE DE', 'English', 'English', array(
|
||||
'Core:AttributeLinkedSet' => 'Array of objects',
|
||||
'Core:AttributeLinkedSet+' => 'Any kind of objects [subclass] of the same class',
|
||||
|
||||
'Core:AttributeLinkedSetIndirect' => 'Array of objects (N-N)',
|
||||
'Core:AttributeLinkedSetIndirect+' => 'Any kind of objects [subclass] of the same class',
|
||||
|
||||
'Core:AttributeInteger' => 'Integer',
|
||||
'Core:AttributeInteger+' => 'Numeric value (could be negative)',
|
||||
|
||||
'Core:AttributeDecimal' => 'Decimal',
|
||||
'Core:AttributeDecimal+' => 'Decimal value (could be negative)',
|
||||
|
||||
'Core:AttributeBoolean' => 'Boolean',
|
||||
'Core:AttributeBoolean+' => 'Boolean',
|
||||
|
||||
'Core:AttributeString' => 'String',
|
||||
'Core:AttributeString+' => 'Alphanumeric string',
|
||||
|
||||
'Core:AttributeClass' => 'Class',
|
||||
'Core:AttributeClass+' => 'Class',
|
||||
|
||||
'Core:AttributeApplicationLanguage' => 'User language',
|
||||
'Core:AttributeApplicationLanguage+' => 'Language and country (EN US)',
|
||||
|
||||
'Core:AttributeFinalClass' => 'Class (auto)',
|
||||
'Core:AttributeFinalClass+' => 'Real class of the object (automatically created by the core)',
|
||||
|
||||
'Core:AttributePassword' => 'Password',
|
||||
'Core:AttributePassword+' => 'Password of an external device',
|
||||
|
||||
'Core:AttributeEncryptedString' => 'Encrypted string',
|
||||
'Core:AttributeEncryptedString+' => 'String encrypted with a local key',
|
||||
|
||||
'Core:AttributeText' => 'Text',
|
||||
'Core:AttributeText+' => 'Multiline character string',
|
||||
|
||||
'Core:AttributeHTML' => 'HTML',
|
||||
'Core:AttributeHTML+' => 'HTML string',
|
||||
|
||||
'Core:AttributeEmailAddress' => 'Email address',
|
||||
'Core:AttributeEmailAddress+' => 'Email address',
|
||||
|
||||
'Core:AttributeIPAddress' => 'IP address',
|
||||
'Core:AttributeIPAddress+' => 'IP address',
|
||||
|
||||
'Core:AttributeOQL' => 'OQL',
|
||||
'Core:AttributeOQL+' => 'Object Query Langage expression',
|
||||
|
||||
'Core:AttributeEnum' => 'Enum',
|
||||
'Core:AttributeEnum+' => 'List of predefined alphanumeric strings',
|
||||
|
||||
'Core:AttributeTemplateString' => 'Template string',
|
||||
'Core:AttributeTemplateString+' => 'String containing placeholders',
|
||||
|
||||
'Core:AttributeTemplateText' => 'Template text',
|
||||
'Core:AttributeTemplateText+' => 'Text containing placeholders',
|
||||
|
||||
'Core:AttributeTemplateHTML' => 'Template HTML',
|
||||
'Core:AttributeTemplateHTML+' => 'HTML containing placeholders',
|
||||
|
||||
'Core:AttributeDateTime' => 'Date/time',
|
||||
'Core:AttributeDateTime+' => 'Date and time (year-month-day hh:mm:ss)',
|
||||
|
||||
'Core:AttributeDate' => 'Date',
|
||||
'Core:AttributeDate+' => 'Date (year-month-day)',
|
||||
|
||||
'Core:AttributeDeadline' => 'Deadline',
|
||||
'Core:AttributeDeadline+' => 'Date, displayed relatively to the current time',
|
||||
|
||||
'Core:AttributeExternalKey' => 'External key',
|
||||
'Core:AttributeExternalKey+' => 'External (or foreign) key',
|
||||
|
||||
'Core:AttributeExternalField' => 'External field',
|
||||
'Core:AttributeExternalField+' => 'Field mapped from an external key',
|
||||
|
||||
'Core:AttributeURL' => 'URL',
|
||||
'Core:AttributeURL+' => 'Absolute or relative URL as a text string',
|
||||
|
||||
'Core:AttributeBlob' => 'Blob',
|
||||
'Core:AttributeBlob+' => 'Any binary content (document)',
|
||||
|
||||
'Core:AttributeOneWayPassword' => 'One way password',
|
||||
'Core:AttributeOneWayPassword+' => 'One way encrypted (hashed) password',
|
||||
|
||||
'Core:AttributeTable' => 'Table',
|
||||
'Core:AttributeTable+' => 'Indexed array having two dimensions',
|
||||
|
||||
'Core:AttributePropertySet' => 'Properties',
|
||||
'Core:AttributePropertySet+' => 'List of untyped properties (name and value)',
|
||||
));
|
||||
|
||||
|
||||
Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'Class:CMDBChange' => 'Change',
|
||||
'Class:CMDBChange+' => 'Changes Tracking',
|
||||
'Class:CMDBChange+' => 'Protokllierung der Changes',
|
||||
'Class:CMDBChange/Attribute:date' => 'Datum',
|
||||
'Class:CMDBChange/Attribute:date+' => 'Datum und Uhrzeit der Änderungen',
|
||||
'Class:CMDBChange/Attribute:userinfo' => 'Sonstige Informationen',
|
||||
@@ -47,8 +140,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
//
|
||||
|
||||
Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'Class:CMDBChangeOp' => 'Change Operation',
|
||||
'Class:CMDBChangeOp+' => 'Change operations tracking',
|
||||
'Class:CMDBChangeOp' => 'Change-Operation',
|
||||
'Class:CMDBChangeOp+' => 'Protokoll der Change-Operation',
|
||||
'Class:CMDBChangeOp/Attribute:change' => 'Change',
|
||||
'Class:CMDBChangeOp/Attribute:change+' => 'Change',
|
||||
'Class:CMDBChangeOp/Attribute:date' => 'Datum',
|
||||
@@ -107,8 +200,10 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
// Used by CMDBChangeOp... & derived classes
|
||||
Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'Change:ObjectCreated' => 'Objekt erstellt',
|
||||
'Change:ObjectDeleted' => 'Objekt erstellt',
|
||||
'Change:ObjectDeleted' => 'Object deleted',
|
||||
'Change:ObjectModified' => 'Object modified',
|
||||
'Change:AttName_SetTo_NewValue_PreviousValue_OldValue' => '%1$s geändert zu %2$s (vorheriger Wert: %3$s)',
|
||||
'Change:AttName_SetTo' => '%1$s geändert zu %2$s',
|
||||
'Change:Text_AppendedTo_AttName' => '%1$s zugefügt an %2$s',
|
||||
'Change:AttName_Changed_PreviousValue_OldValue' => '%1$s modifiziert, vorheriger Wert: %2$s',
|
||||
'Change:AttName_Changed' => '%1$s modifiziert',
|
||||
|
||||
@@ -121,33 +121,30 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
//
|
||||
|
||||
Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'Class:URP_Users' => 'Benutzer',
|
||||
'Class:URP_Users+' => 'Benutzer und Berechtigungen',
|
||||
'Class:URP_Users/Attribute:userid' => 'Kontakt (Person)',
|
||||
'Class:URP_Users/Attribute:userid+' => 'Persönliche Details aus den Geschäftsdaten',
|
||||
'Class:URP_Users/Attribute:last_name' => 'Nachname',
|
||||
'Class:URP_Users/Attribute:last_name+' => 'Name des dazugehörigen Kontaktes',
|
||||
'Class:URP_Users/Attribute:first_name' => 'Vorname',
|
||||
'Class:URP_Users/Attribute:first_name+' => 'Vorname des dazugehörigen Kontaktes',
|
||||
'Class:URP_Users/Attribute:email' => 'Email-Adresse',
|
||||
'Class:URP_Users/Attribute:email+' => 'Email-Adresse des dazugehörigen Kontaktes',
|
||||
'Class:URP_Users/Attribute:login' => 'Loginname',
|
||||
'Class:URP_Users/Attribute:login+' => 'Benutzerkennung zur Identifizierung',
|
||||
'Class:URP_Users/Attribute:password' => 'Passwort',
|
||||
'Class:URP_Users/Attribute:password+' => 'Benutzerkennung zur Authentifizierung',
|
||||
'Class:URP_Users/Attribute:language' => 'Sprache',
|
||||
'Class:URP_Users/Attribute:language+' => 'Benutzersprache',
|
||||
'Class:URP_Users/Attribute:language/Value:EN US' => 'English',
|
||||
'Class:URP_Users/Attribute:language/Value:EN US+' => 'English U.S.',
|
||||
'Class:URP_Users/Attribute:language/Value:FR FR' => 'French',
|
||||
'Class:URP_Users/Attribute:language/Value:FR FR+' => 'FR FR',
|
||||
'Class:URP_Users/Attribute:language/Value:DE DE' => 'German',
|
||||
'Class:URP_Users/Attribute:language/Value:DE DE+' => 'DE DE',
|
||||
'Class:User' => 'Benutzer',
|
||||
'Class:User+' => 'Benutzer-Login',
|
||||
'Class:User/Attribute:finalclass' => 'Typ des Benutzerkontos',
|
||||
'Class:User/Attribute:finalclass+' => '',
|
||||
'Class:User/Attribute:contactid' => 'Kontakt (Person)',
|
||||
'Class:User/Attribute:contactid+' => 'Persönliche Details der Geschäftsdaten',
|
||||
'Class:User/Attribute:last_name' => 'Nachname',
|
||||
'Class:User/Attribute:last_name+' => 'Nachname des Kontaktes',
|
||||
'Class:User/Attribute:first_name' => 'Vorname',
|
||||
'Class:User/Attribute:first_name+' => 'Vorname des Kontaktes',
|
||||
'Class:User/Attribute:email' => 'Email-Adresse',
|
||||
'Class:User/Attribute:email+' => 'Email-Adresse des Kontaktes',
|
||||
'Class:User/Attribute:login' => 'Login',
|
||||
'Class:User/Attribute:login+' => 'Benutzer-Anmeldename',
|
||||
'Class:User/Attribute:language' => 'Sprache',
|
||||
'Class:User/Attribute:language+' => 'Benutzersprache',
|
||||
'Class:User/Attribute:language/Value:EN US' => 'English',
|
||||
'Class:User/Attribute:language/Value:EN US+' => 'English (U.S.)',
|
||||
'Class:User/Attribute:language/Value:FR FR' => 'French',
|
||||
'Class:User/Attribute:language/Value:FR FR+' => 'French (France)',
|
||||
'Class:User/Attribute:profile_list' => 'Profile',
|
||||
'Class:User/Attribute:profile_list+' => 'Rollen, Rechtemanagement für diese Personn',
|
||||
'Class:User/Attribute:allowed_org_list' => 'Zugelassenen Organisationen',
|
||||
'Class:User/Attribute:allowed_org_list+' => 'Der Endbenutzer ist berechtigt, die daten der folgenden Organisationen zu sehen. Wenn keine Organisation zu sehen ist, gibt es keine Beschränkung.',
|
||||
|
||||
'Class:User/Attribute:profile_list+' => 'Rollen, Rechtemanagement für diese Person',
|
||||
'Class:User/Attribute:allowed_org_list' => '',
|
||||
'Class:User/Attribute:allowed_org_list+' => 'Der Endbenutzer ist berechtigt, die Daten der folgenden Organisationen zu sehen. Wenn keine Organisation zu sehen ist, gibt es keine Beschränkung.',
|
||||
'Class:User/Error:LoginMustBeUnique' => 'Login-Namen müssen unterschiedlich sein - "%1s" benutzt diesen Login-Name bereits.',
|
||||
'Class:User/Error:AtLeastOneProfileIsNeeded' => 'Mindestens ein Profil muss diesem Benutzer zugewiesen sein.',
|
||||
));
|
||||
@@ -167,6 +164,26 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'Class:URP_Profiles/Attribute:user_list+' => 'Personen, die diese Rolle haben',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_UserOrg
|
||||
//
|
||||
|
||||
Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'Class:URP_UserOrg' => 'Benutzerorganisationen',
|
||||
'Class:URP_UserOrg+' => 'Zulässige Organisationen',
|
||||
'Class:URP_UserProfile/Attribute:userid' => 'Benutzer',
|
||||
'Class:URP_UserProfile/Attribute:userid+' => 'Benutzerkonto',
|
||||
'Class:URP_UserProfile/Attribute:userlogin' => 'Benutzer-Login',
|
||||
'Class:URP_UserProfile/Attribute:userlogin+' => 'Logindaten des Benutzers',
|
||||
'Class:URP_UserProfile/Attribute:allowed_org_id' => 'Organisation',
|
||||
'Class:URP_UserProfile/Attribute:allowed_org_id+' => 'Gestattete Organisation',
|
||||
'Class:URP_UserProfile/Attribute:allowed_org_name' => 'Organisation',
|
||||
'Class:URP_UserProfile/Attribute:allowed_org_name+' => 'Gestattete Organisation',
|
||||
'Class:URP_UserProfile/Attribute:reason' => 'Grund',
|
||||
'Class:URP_UserProfile/Attribute:reason+' => 'Erklären Sie, warum diese Person berechtigt ist, Zugriff auf die Daten der Organisation zu haben',
|
||||
));
|
||||
|
||||
|
||||
//
|
||||
// Class: URP_Dimensions
|
||||
//
|
||||
@@ -314,7 +331,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'UI:WelcomeMenu:LeftBlock' => '<p>iTop ist ein ein vollständiges, ITIL- und webbasiertes IT-Service-Management-Tool (ITSM)</p>
|
||||
<ul>Es umfasst...
|
||||
<li>eine vollständige CMDB (Configuration Management Database), um das IT-Portfolio zu dokumentieren und zu managen,</li>
|
||||
<li>ein Incident Mangement-Modul, um alle Störfälle in der IT-Landschaft zu beobachten und diese zu kommunizieren,</li>
|
||||
<li>ein Incident Management-Modul, um alle Störfälle in der IT-Landschaft zu beobachten und diese zu kommunizieren,</li>
|
||||
<li>ein Change Management-Modul, um Änderungen der IT-Landschaft zu planen und zu beobachten,</li>
|
||||
<li>eine Datenbank mit bekannten Fehlern, um Zwischenfälle schneller anhand bekannter Problemlösungen zu beseitigen,</li>
|
||||
<li>ein Ausfall-Modul, um geplante Ausfälle zu dokumentieren und die betreffenden Kontakte zu informieren,</li>
|
||||
@@ -373,8 +390,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'UI:Button:ResetPassword' => ' Passwort zurücksetzen ',
|
||||
|
||||
'UI:SearchToggle' => 'Suche',
|
||||
'UI:ClickToCreateNew' => 'Klicken Sie hier, um einen neuen %1$s zu erstellen',
|
||||
'UI:SearchFor_Class' => 'Suche nach Objekten: %1$',
|
||||
'UI:ClickToCreateNew' => 'Klicken Sie hier, um eine neues Objekt vom Typ %1$s zu erstellen',
|
||||
'UI:SearchFor_Class' => 'Suche nach Objekten vom Typ "%1$s"',
|
||||
'UI:NoObjectToDisplay' => 'Kein Objekt zur Anzeige vorhanden.',
|
||||
'UI:Error:MandatoryTemplateParameter_object_id' => 'Parameter object_id ist erforderlich, wenn link_attr verwendet wird. Überprüfen Sie die Defintion des Display-Templates.',
|
||||
'UI:Error:MandatoryTemplateParameter_target_attr' => 'Parameter target_attr ist erforderlich, wenn link_attr verwendet wird. Überprüfen Sie die Defintion des Display-Templates.',
|
||||
@@ -382,9 +399,9 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'UI:Error:InvalidGroupByFields' => 'Ungültige Felder-Liste, um diese zu gruppieren von: "%1$s".',
|
||||
'UI:Error:UnsupportedStyleOfBlock' => 'Fehler: nicht unterstützter Blockform: "%1$s".',
|
||||
'UI:Error:IncorrectLinkDefinition_LinkedClass_Class' => 'Ungültige Link-Defintion: die Klasse der zu managenden Objekte: %1$s wurde nicht als externer Schlüssel in der Klasse %2$s gefunden.',
|
||||
'UI:Error:Object_Class_Id_NotFound' => 'Object: %1$s:%2$d wurde nicht gefunden.',
|
||||
'UI:Error:Object_Class_Id_NotFound' => 'Objekt: %1$s:%2$d wurde nicht gefunden.',
|
||||
'UI:Error:WizardCircularReferenceInDependencies' => 'Fehler: gegenseitige Beziehung in den Abhängigkeiten zwischen den Feldern, überprüfen Sie das Datenmodell.',
|
||||
'UI:Error:UploadedFileTooBig' => 'Die hochgeladene Datei ist zu groß. (Maximal erlaubte Dateigröße ist %1$s. Überprüfen Sie upload_max_filesize in der PHP-Konfiguration.',
|
||||
'UI:Error:UploadedFileTooBig' => 'Die hochgeladene Datei ist zu groß. (Maximal erlaubte Dateigröße ist %1$s. Überprüfen Sie upload_max_filesize und post_max_size in der PHP-Konfiguration.',
|
||||
'UI:Error:UploadedFileTruncated.' => 'Hochgeladene Datei wurde beschränkt!',
|
||||
'UI:Error:NoTmpDir' => 'Der temporäre Ordner ist nicht definiert.',
|
||||
'UI:Error:CannotWriteToTmp_Dir' => 'Nicht möglich, die tempöräre Datei auf die Festplatte zu speicher: upload_tmp_dir = "%1$s".',
|
||||
@@ -412,7 +429,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'UI:GroupBy:Count+' => 'Anzahl der Elemente',
|
||||
'UI:CountOfObjects' => '%1$d Objekte, die das Kriterium erfüllen.',
|
||||
'UI_CountOfObjectsShort' => '%1$d Objekte.',
|
||||
'UI:NoObject_Class_ToDisplay' => 'Kein %1$s zur Anzeige',
|
||||
'UI:NoObject_Class_ToDisplay' => 'Kein Objekt vom Typ "%1$s" zur Anzeige vorhanden',
|
||||
'UI:History:LastModified_On_By' => 'Zuletzt verändert am %1$s von %2$s.',
|
||||
'UI:HistoryTab' => 'Verlauf',
|
||||
'UI:NotificationsTab' => 'Benachrichtigungen',
|
||||
@@ -422,6 +439,12 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'UI:History:User+' => 'Benutzer, der die Änderung durchführte',
|
||||
'UI:History:Changes' => 'Änderungen',
|
||||
'UI:History:Changes+' => 'Änderungen, die am Objekt durchgeführt wurden',
|
||||
'UI:History:StatsCreations' => 'Created',
|
||||
'UI:History:StatsCreations+' => 'Count of objects created',
|
||||
'UI:History:StatsModifs' => 'Modified',
|
||||
'UI:History:StatsModifs+' => 'Count of objects modified',
|
||||
'UI:History:StatsDeletes' => 'Deleted',
|
||||
'UI:History:StatsDeletes+' => 'Count of objects deleted',
|
||||
'UI:Loading' => 'Laden...',
|
||||
'UI:Menu:Actions' => 'Aktionen',
|
||||
'UI:Menu:New' => 'Neu...',
|
||||
@@ -464,6 +487,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'UI:LogOff:ThankYou' => 'Vielen Dank dafür, dass Sie iTop benutzen!',
|
||||
'UI:LogOff:ClickHereToLoginAgain' => 'Klicken Sie hier, um sich wieder anzumelden...',
|
||||
'UI:ChangePwdMenu' => 'Passwort ändern...',
|
||||
'UI:AccessRO-All' => 'iTop is read-only',
|
||||
'UI:AccessRO-Users' => 'iTop is read-only for end-users',
|
||||
'UI:Login:RetypePwdDoesNotMatch' => 'Neues Passwort und das wiederholte Passwort entsprechen nicht überein!',
|
||||
'UI:Button:Login' => 'iTop betreten',
|
||||
'UI:Login:Error:AccessRestricted' => 'Der iTop-Zugang ist gesperrt. Bitte kontaktieren Sie einen iTop-Administrator.',
|
||||
@@ -562,7 +587,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'UI:Schema:NullAllowed' => 'Null zugelassen',
|
||||
'UI:Schema:NullNotAllowed' => 'Null NICHT zugelassen',
|
||||
'UI:Schema:Attributes' => 'Attribute',
|
||||
'UI:Schema:AttributeCode' => 'Attribute-Code',
|
||||
'UI:Schema:AttributeCode' => 'Attribut-Code',
|
||||
'UI:Schema:AttributeCode+' => 'Interner Code des Attributes',
|
||||
'UI:Schema:Label' => 'Label',
|
||||
'UI:Schema:Label+' => 'Label des Attributes',
|
||||
@@ -618,16 +643,17 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'UI:AddObjectsOf_Class_LinkedWith_Class_Instance' => 'Fügen Sie %1$s Objekte verbunden mit %2$s hinzu: %3$s',
|
||||
'UI:AddObjectsOf_Class_LinkedWith_Class' => 'Fügen Sie %1$s Objekte verbunden mit %2$s hinzu',
|
||||
'UI:ManageObjectsOf_Class_LinkedWith_Class_Instance' => 'Verwalten Sie %1$s Objekte verbunden mit %2$s: %3$s',
|
||||
'UI:AddLinkedObjectsOf_Class' => ' %1$se hinzufügen...',
|
||||
'UI:AddLinkedObjectsOf_Class' => ' %1$s hinzufügen...',
|
||||
'UI:RemoveLinkedObjectsOf_Class' => 'Entferne ausgewählte Objekte',
|
||||
'UI:Message:EmptyList:UseAdd' => 'Die Liste ist leer, benutzten Sie "Hinzufügen..." um Elemente hinzuzufügen.',
|
||||
'UI:Message:EmptyList:UseSearchForm' => 'Benutzen Sie das Suchformular oben, um nach hinzufügenbaren Objekten zu suchen.',
|
||||
'UI:Message:EmptyList:UseSearchForm' => 'Benutzen Sie das Suchformular oben, um nach hinzufügbaren Objekten zu suchen.',
|
||||
|
||||
'UI:Wizard:FinalStepTitle' => 'Letzter Schritt: Bestätigung',
|
||||
'UI:Title:DeletionOf_Object' => 'Löschung von %1$s',
|
||||
'UI:Title:BulkDeletionOf_Count_ObjectsOf_Class' => 'Massenlöschung von %1$d Objekten der %2$s',
|
||||
'UI:Delete:NotAllowedToDelete' => 'Sie sind nicht berechtigt, dieses Objekt zu löschen.',
|
||||
'UI:Delete:NotAllowedToUpdate_Fields' => 'Sie sind nicht berechtigt, die folgenden Felder zu aktualisieren: %1$s',
|
||||
'UI:Error:CannotDeleteBecause' => 'This object could not be deleted because: %1$s',
|
||||
'UI:Error:NotEnoughRightsToDelete' => 'Dieses Objekt konnte nicht gelöscht werden, da der derzeitige Benutzer nicht die notwendigen Rechte dazu besitzt.',
|
||||
'UI:Error:CannotDeleteBecauseOfDepencies' => 'Dieses Objekt konnte nicht gelöscht werden, da zuerst dazu einige manuelle Operationen durchgeführt werden müssen.',
|
||||
'UI:Archive_User_OnBehalfOf_User' => '%1$s im Auftrag von %2$s',
|
||||
@@ -639,8 +665,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'UI:Delete:_Name_Class_Deleted' => '%1$s - %2$s gelöscht.',
|
||||
'UI:Delete:ConfirmDeletionOf_Name' => 'Löschung von %1$s',
|
||||
'UI:Delete:ConfirmDeletionOf_Count_ObjectsOf_Class' => 'Löschung von %1$d Objekten der Klasse %2$s',
|
||||
'UI:Delete:ShouldBeDeletedAtomaticallyButNotAllowed' => 'Sollte automatisch gelöscht werden, aber Sie sind nicht berechtigt, dies zu tun',
|
||||
'UI:Delete:MustBeDeletedManuallyButNotAllowed' => 'Muss automatisch gelöscht werden, aber Sie sind nicht berechtigt, dieses Objekt zu löschen. Bitte kontaktieren Sie Ihren Anwendungs-Administrator',
|
||||
// 'UI:Delete:ShouldBeDeletedAtomaticallyButNotPossible' => 'Sollte automatisch gelöscht werden, aber Sie sind nicht berechtigt, dies zu tun',
|
||||
// 'UI:Delete:MustBeDeletedManuallyButNotPossible' => 'Muss automatisch gelöscht werden, aber Sie sind nicht berechtigt, dieses Objekt zu löschen. Bitte kontaktieren Sie Ihren Anwendungs-Administrator',
|
||||
'UI:Delete:WillBeDeletedAutomatically' => 'Wird automatisch gelöscht',
|
||||
'UI:Delete:MustBeDeletedManually' => 'Muss manuell gelöscht werden',
|
||||
'UI:Delete:CannotUpdateBecause_Issue' => 'Sollte automatisch aktualisiert werden, aber: %1$s',
|
||||
@@ -656,7 +682,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'UI:WelcomeToITop' => 'Willkommen bei iTop',
|
||||
'UI:DetailsPageTitle' => 'iTop - %1$s - %2$s Details',
|
||||
'UI:ErrorPageTitle' => 'iTop - Fehler',
|
||||
'UI:ObjectDoesNotExist' => 'Entschuldigung, dies Objekt exisitert nicht oder Sie sind nicht berechtigt es einzusehen.',
|
||||
'UI:ObjectDoesNotExist' => 'Entschuldigung, dieses Objekt exisitert nicht oder Sie sind nicht berechtigt es einzusehen.',
|
||||
'UI:SearchResultsPageTitle' => 'iTop - Suchergebnisse',
|
||||
'UI:Search:NoSearch' => 'Nichts, wonach man suchen kann...',
|
||||
'UI:FullTextSearchTitle_Text' => 'Ergebnisse für "%1$s":',
|
||||
@@ -666,18 +692,18 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'UI:ModificationTitle_Class_Object' => 'Änderungen von %1$s: <span class=\"hilite\">%2$s</span>',
|
||||
'UI:ClonePageTitle_Object_Class' => 'iTop - Dupliziere %1$s - %2$s Änderung',
|
||||
'UI:CloneTitle_Class_Object' => 'Duplizieren von %1$s: <span class=\"hilite\">%2$s</span>',
|
||||
'UI:CreationPageTitle_Class' => 'iTop - Erstellung einer neue %1$s ',
|
||||
'UI:CreationTitle_Class' => 'Erstellung einer neue %1$s',
|
||||
'UI:SelectTheTypeOf_Class_ToCreate' => 'Wählen Sie den Typ von %1$s aus, den Sie erstellen möchten:',
|
||||
'UI:CreationPageTitle_Class' => 'iTop - Erstellung eines neuen Objekts vom Typ "%1$s" ',
|
||||
'UI:CreationTitle_Class' => 'Erstellung eines neuen Objekts vom Typ "%1$s"',
|
||||
'UI:SelectTheTypeOf_Class_ToCreate' => 'Wählen Sie den Typ vom Objekt "%1$s" aus, den Sie erstellen möchten:',
|
||||
'UI:Class_Object_NotUpdated' => 'Keine Änderung festgestellt, %1$s (%2$s) wurde <strong>nicht</strong> modifiziert.',
|
||||
'UI:Class_Object_Updated' => '%1$s (%2$s) aktualisiert.',
|
||||
'UI:BulkDeletePageTitle' => 'iTop - Massenlöschung',
|
||||
'UI:BulkDeletePageTitle' => 'iTop - Massenlöschung von Objekten',
|
||||
'UI:BulkDeleteTitle' => 'Wählen Sie die Objekte aus, die Sie löschen möchten:',
|
||||
'UI:PageTitle:ObjectCreated' => 'iTop-Objekt wurde erstellt.',
|
||||
'UI:Title:Object_Of_Class_Created' => '%1$s - %2$s erstellt.',
|
||||
'UI:Apply_Stimulus_On_Object_In_State_ToTarget_State' => 'Anwenden von %1$s auf Objekt: %2$s in Status %3$s zu Zielstatus: %4$s.',
|
||||
'UI:PageTitle:FatalError' => 'iTop - Fataler Fehler',
|
||||
'UI:FatalErrorMessage' => 'Fataler Fehler, iTop kann nicht forfahren.',
|
||||
'UI:FatalErrorMessage' => 'Fataler Fehler! iTop kann leider nicht forfahren.',
|
||||
'UI:Error_Details' => 'Fehler: %1$s.',
|
||||
|
||||
'UI:PageTitle:ClassProjections' => 'iTop Benutzerverwaltung - Klassenabbildung',
|
||||
@@ -697,7 +723,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'UI:UserManagement:Action:Modify+' => 'Erstellen und editieren (modifizieren) von Objekten',
|
||||
'UI:UserManagement:Action:Delete' => 'Löschen',
|
||||
'UI:UserManagement:Action:Delete+' => 'Objekte löschen',
|
||||
'UI:UserManagement:Action:BulkRead' => 'Massenlesen (Export)',
|
||||
'UI:UserManagement:Action:BulkRead' => 'Masseneinlesen (Export)',
|
||||
'UI:UserManagement:Action:BulkRead+' => 'Objekte massenhaft auflisten oder exportieren',
|
||||
'UI:UserManagement:Action:BulkModify' => 'Massenmodifikation',
|
||||
'UI:UserManagement:Action:BulkModify+' => 'Massenerstellung/-bearbeitung (CSV-Import)',
|
||||
@@ -718,7 +744,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'UI:UserManagement:NoLifeCycleApplicable+' => 'Kein Lebenszyklus wurde für diese Klasse definiert.',
|
||||
'UI:UserManagement:GrantMatrix' => 'Zugriffsmatrix',
|
||||
'UI:UserManagement:LinkBetween_User_And_Profile' => 'Verbindung zwischen %1$s und %2$s',
|
||||
|
||||
'UI:UserManagement:LinkBetween_User_And_Org' => 'Verbindung zwischen %1$s und %2$s',
|
||||
'Menu:AdminTools' => 'Admin-Tools',
|
||||
'Menu:AdminTools+' => 'Administrationswerkzeuge',
|
||||
'Menu:AdminTools?' => 'Werkzeuge, die nur für Benutzer mit Adminstratorprofil zugänglich sind',
|
||||
@@ -853,13 +879,13 @@ Wenn Aktionen mit Trigger verknüpft sind, bekommt jede Aktion eine Auftragsnumm
|
||||
'UI:Deadline_Days_Hours_Minutes' => '%1$dTage %2$dStunden %3$dMinuten',
|
||||
'UI:Help' => 'Hilfe',
|
||||
'UI:PasswordConfirm' => '(Bestätigen)',
|
||||
'UI:BeforeAdding_Class_ObjectsSaveThisObject' => 'Bevor weitere Objekte vom Typ "%1$s" hinzugefügt werden, speichern Sie dieses Objekt.',
|
||||
'UI:DisplayThisMessageAtStartup' => 'Diese Meldung beim Start anzeigen',
|
||||
'UI:BeforeAdding_Class_ObjectsSaveThisObject' => 'Bevor weitere Objekte vom Typ "%1$s" hinzugefügt werden können, speichern Sie bitte dieses Objekt.',
|
||||
'UI:DisplayThisMessageAtStartup' => 'Diese Meldung beim Start immer anzeigen',
|
||||
'UI:RelationshipGraph' => 'Grafische Ansicht',
|
||||
'UI:RelationshipList' => 'Liste',
|
||||
|
||||
'Portal:Title' => 'iTop-Benutzerportal',
|
||||
'Portal:Refresh' => 'Erneuern',
|
||||
'Portal:Refresh' => 'Neu laden',
|
||||
'Portal:Back' => 'Zurück',
|
||||
'Portal:CreateNewRequest' => 'Einen neuen Request erstellen',
|
||||
'Portal:ChangeMyPassword' => 'Mein Passwort ändern',
|
||||
@@ -876,6 +902,8 @@ Wenn Aktionen mit Trigger verknüpft sind, bekommt jede Aktion eine Auftragsnumm
|
||||
'Portal:Button:CloseTicket' => 'Dieses Ticket schließen',
|
||||
'Portal:EnterYourCommentsOnTicket' => 'Geben Sie einen Kommentar zur Lösung dieses Tickets ein:',
|
||||
'Portal:ErrorNoContactForThisUser' => 'Fehler: der derzeitige Benutzer wurde nicht einem Kontakt oder einer Person zugewiesen. Bitte kontaktieren Sie Ihren Administrator.',
|
||||
|
||||
'Enum:Undefined' => 'Nicht definiert',
|
||||
));
|
||||
|
||||
|
||||
|
||||
@@ -23,6 +23,98 @@
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
Dict::Add('EN US', 'English', 'English', array(
|
||||
'Core:AttributeLinkedSet' => 'Array of objects',
|
||||
'Core:AttributeLinkedSet+' => 'Any kind of objects of the same class or subclass',
|
||||
|
||||
'Core:AttributeLinkedSetIndirect' => 'Array of objects (N-N)',
|
||||
'Core:AttributeLinkedSetIndirect+' => 'Any kind of objects [subclass] of the same class',
|
||||
|
||||
'Core:AttributeInteger' => 'Integer',
|
||||
'Core:AttributeInteger+' => 'Numeric value (could be negative)',
|
||||
|
||||
'Core:AttributeDecimal' => 'Decimal',
|
||||
'Core:AttributeDecimal+' => 'Decimal value (could be negative)',
|
||||
|
||||
'Core:AttributeBoolean' => 'Boolean',
|
||||
'Core:AttributeBoolean+' => 'Boolean',
|
||||
|
||||
'Core:AttributeString' => 'String',
|
||||
'Core:AttributeString+' => 'Alphanumeric string',
|
||||
|
||||
'Core:AttributeClass' => 'Class',
|
||||
'Core:AttributeClass+' => 'Class',
|
||||
|
||||
'Core:AttributeApplicationLanguage' => 'User language',
|
||||
'Core:AttributeApplicationLanguage+' => 'Language and country (EN US)',
|
||||
|
||||
'Core:AttributeFinalClass' => 'Class (auto)',
|
||||
'Core:AttributeFinalClass+' => 'Real class of the object (automatically created by the core)',
|
||||
|
||||
'Core:AttributePassword' => 'Password',
|
||||
'Core:AttributePassword+' => 'Password of an external device',
|
||||
|
||||
'Core:AttributeEncryptedString' => 'Encrypted string',
|
||||
'Core:AttributeEncryptedString+' => 'String encrypted with a local key',
|
||||
|
||||
'Core:AttributeText' => 'Text',
|
||||
'Core:AttributeText+' => 'Multiline character string',
|
||||
|
||||
'Core:AttributeHTML' => 'HTML',
|
||||
'Core:AttributeHTML+' => 'HTML string',
|
||||
|
||||
'Core:AttributeEmailAddress' => 'Email address',
|
||||
'Core:AttributeEmailAddress+' => 'Email address',
|
||||
|
||||
'Core:AttributeIPAddress' => 'IP address',
|
||||
'Core:AttributeIPAddress+' => 'IP address',
|
||||
|
||||
'Core:AttributeOQL' => 'OQL',
|
||||
'Core:AttributeOQL+' => 'Object Query Langage expression',
|
||||
|
||||
'Core:AttributeEnum' => 'Enum',
|
||||
'Core:AttributeEnum+' => 'List of predefined alphanumeric strings',
|
||||
|
||||
'Core:AttributeTemplateString' => 'Template string',
|
||||
'Core:AttributeTemplateString+' => 'String containing placeholders',
|
||||
|
||||
'Core:AttributeTemplateText' => 'Template text',
|
||||
'Core:AttributeTemplateText+' => 'Text containing placeholders',
|
||||
|
||||
'Core:AttributeTemplateHTML' => 'Template HTML',
|
||||
'Core:AttributeTemplateHTML+' => 'HTML containing placeholders',
|
||||
|
||||
'Core:AttributeDateTime' => 'Date/time',
|
||||
'Core:AttributeDateTime+' => 'Date and time (year-month-day hh:mm:ss)',
|
||||
|
||||
'Core:AttributeDate' => 'Date',
|
||||
'Core:AttributeDate+' => 'Date (year-month-day)',
|
||||
|
||||
'Core:AttributeDeadline' => 'Deadline',
|
||||
'Core:AttributeDeadline+' => 'Date, displayed relatively to the current time',
|
||||
|
||||
'Core:AttributeExternalKey' => 'External key',
|
||||
'Core:AttributeExternalKey+' => 'External (or foreign) key',
|
||||
|
||||
'Core:AttributeExternalField' => 'External field',
|
||||
'Core:AttributeExternalField+' => 'Field mapped to an external key',
|
||||
|
||||
'Core:AttributeURL' => 'URL',
|
||||
'Core:AttributeURL+' => 'Absolute or relative URL as a text string',
|
||||
|
||||
'Core:AttributeBlob' => 'Blob',
|
||||
'Core:AttributeBlob+' => 'Any binary content (document)',
|
||||
|
||||
'Core:AttributeOneWayPassword' => 'One way password',
|
||||
'Core:AttributeOneWayPassword+' => 'One way encrypted (hashed) password',
|
||||
|
||||
'Core:AttributeTable' => 'Table',
|
||||
'Core:AttributeTable+' => 'Indexed array having two dimensions',
|
||||
|
||||
'Core:AttributePropertySet' => 'Properties',
|
||||
'Core:AttributePropertySet+' => 'List of untyped properties (name and value)',
|
||||
));
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'core/cmdb'
|
||||
@@ -108,10 +200,13 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
Dict::Add('EN US', 'English', 'English', array(
|
||||
'Change:ObjectCreated' => 'Object created',
|
||||
'Change:ObjectDeleted' => 'Object deleted',
|
||||
'Change:ObjectModified' => 'Object modified',
|
||||
'Change:AttName_SetTo_NewValue_PreviousValue_OldValue' => '%1$s set to %2$s (previous value: %3$s)',
|
||||
'Change:AttName_SetTo' => '%1$s set to %2$s',
|
||||
'Change:Text_AppendedTo_AttName' => '%1$s appended to %2$s',
|
||||
'Change:AttName_Changed_PreviousValue_OldValue' => '%1$s modified, previous value: %2$s',
|
||||
'Change:AttName_Changed' => '%1$s modified',
|
||||
'Change:AttName_EntryAdded' => '%1$s modified, new entry added.',
|
||||
));
|
||||
|
||||
//
|
||||
@@ -143,13 +238,13 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:Event' => 'Log Event',
|
||||
'Class:Event+' => 'An application internal event',
|
||||
'Class:Event/Attribute:message' => 'message',
|
||||
'Class:Event/Attribute:message' => 'Message',
|
||||
'Class:Event/Attribute:message+' => 'short description of the event',
|
||||
'Class:Event/Attribute:date' => 'date',
|
||||
'Class:Event/Attribute:date' => 'Date',
|
||||
'Class:Event/Attribute:date+' => 'date and time at which the changes have been recorded',
|
||||
'Class:Event/Attribute:userinfo' => 'user info',
|
||||
'Class:Event/Attribute:userinfo' => 'User info',
|
||||
'Class:Event/Attribute:userinfo+' => 'identification of the user that was doing the action that triggered this event',
|
||||
'Class:Event/Attribute:finalclass' => 'type',
|
||||
'Class:Event/Attribute:finalclass' => 'Type',
|
||||
'Class:Event/Attribute:finalclass+' => '',
|
||||
));
|
||||
|
||||
@@ -233,6 +328,21 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:EventWebService/Attribute:data+' => 'Result data',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: EventLoginUsage
|
||||
//
|
||||
|
||||
Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:EventLoginUsage' => 'Login Usage',
|
||||
'Class:EventLoginUsage+' => 'Connection to the application',
|
||||
'Class:EventLoginUsage/Attribute:user_id' => 'Login',
|
||||
'Class:EventLoginUsage/Attribute:user_id+' => 'Login',
|
||||
'Class:EventLoginUsage/Attribute:contact_name' => 'User Name',
|
||||
'Class:EventLoginUsage/Attribute:contact_name+' => 'User Name',
|
||||
'Class:EventLoginUsage/Attribute:contact_email' => 'User Email',
|
||||
'Class:EventLoginUsage/Attribute:contact_email+' => 'Email Address of the User',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: Action
|
||||
//
|
||||
@@ -383,5 +493,218 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:lnkTriggerAction/Attribute:order+' => 'Actions execution order',
|
||||
));
|
||||
|
||||
//
|
||||
// Synchro Data Source
|
||||
//
|
||||
Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:SynchroDataSource/Attribute:name' => 'Name',
|
||||
'Class:SynchroDataSource/Attribute:name+' => 'Name',
|
||||
'Class:SynchroDataSource/Attribute:description' => 'Description',
|
||||
'Class:SynchroDataSource/Attribute:status' => 'Status', //TODO: enum values
|
||||
'Class:SynchroDataSource/Attribute:scope_class' => 'Target class',
|
||||
'Class:SynchroDataSource/Attribute:user_id' => 'User',
|
||||
'Class:SynchroDataSource/Attribute:notify_contact_id' => 'Contact to notify',
|
||||
'Class:SynchroDataSource/Attribute:notify_contact_id+' => 'Contact to notify in case of error',
|
||||
'Class:SynchroDataSource/Attribute:url_icon' => 'Icon\'s hyperlink',
|
||||
'Class:SynchroDataSource/Attribute:url_icon+' => 'Hyperlink a (small) image representing the application with which iTop is synchronized',
|
||||
'Class:SynchroDataSource/Attribute:url_application' => 'Application\'s hyperlink',
|
||||
'Class:SynchroDataSource/Attribute:url_application+' => 'Hyperlink to the iTop object in the external application with which iTop is synchronized (if applicable). Possible placeholders: $this->attribute$ and $replica->primary_key$',
|
||||
'Class:SynchroDataSource/Attribute:reconciliation_policy' => 'Reconciliation policy', //TODO enum values
|
||||
'Class:SynchroDataSource/Attribute:full_load_periodicity' => 'Full load interval',
|
||||
'Class:SynchroDataSource/Attribute:full_load_periodicity+' => 'A complete reload of all data must occur at least as often as specified here',
|
||||
'Class:SynchroDataSource/Attribute:action_on_zero' => 'Action on zero',
|
||||
'Class:SynchroDataSource/Attribute:action_on_zero+' => 'Action taken when the search returns no object',
|
||||
'Class:SynchroDataSource/Attribute:action_on_one' => 'Action on one',
|
||||
'Class:SynchroDataSource/Attribute:action_on_one+' => 'Action taken when the search returns exactly one object',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple' => 'Action on many',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple+' => 'Action taken when the search returns more than one object',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy' => 'Users allowed',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy+' => 'Who is allowed to delete synchronized objects',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy' => 'Users allowed',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:never' => 'Nobody',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:depends' => 'Administrators only',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:always' => 'All allowed users',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy_update' => 'Update rules',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy_update+' => 'Syntax: field_name:value; ...',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy_retention' => 'Retention Duration',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy_retention+' => 'How much time an obsolete object is kept before being deleted',
|
||||
'SynchroDataSource:Description' => 'Description',
|
||||
'SynchroDataSource:Reconciliation' => 'Search & reconciliation',
|
||||
'SynchroDataSource:Deletion' => 'Deletion rules',
|
||||
'SynchroDataSource:Status' => 'Status',
|
||||
'SynchroDataSource:Information' => 'Information',
|
||||
'SynchroDataSource:Definition' => 'Definition',
|
||||
'Core:SynchroAttributes' => 'Attributes',
|
||||
'Core:SynchroStatus' => 'Status',
|
||||
'Core:Synchro:ErrorsLabel' => 'Errors',
|
||||
'Core:Synchro:CreatedLabel' => 'Created',
|
||||
'Core:Synchro:ModifiedLabel' => 'Modified',
|
||||
'Core:Synchro:UnchangedLabel' => 'Unchanged',
|
||||
'Core:Synchro:ReconciledErrorsLabel' => 'Errors',
|
||||
'Core:Synchro:ReconciledLabel' => 'Reconciled',
|
||||
'Core:Synchro:ReconciledNewLabel' => 'Created',
|
||||
'Core:SynchroReconcile:Yes' => 'Yes',
|
||||
'Core:SynchroReconcile:No' => 'No',
|
||||
'Core:SynchroUpdate:Yes' => 'Yes',
|
||||
'Core:SynchroUpdate:No' => 'No',
|
||||
'Core:Synchro:LastestStatus' => 'Latest Status',
|
||||
'Core:Synchro:History' => 'Synchronization History',
|
||||
'Core:Synchro:NeverRun' => 'This synchro was never run. No log yet.',
|
||||
'Core:Synchro:SynchroEndedOn_Date' => 'The latest synchronization ended on %1$s.',
|
||||
'Core:Synchro:SynchroRunningStartedOn_Date' => 'The synchronization started on $1$s is still running...',
|
||||
'Menu:DataSources' => 'Synchronization Data Sources',
|
||||
'Menu:DataSources+' => 'All Synchronization Data Sources',
|
||||
'Core:Synchro:label_repl_ignored' => 'Ignored (%1$s)',
|
||||
'Core:Synchro:label_repl_disappeared' => 'Disappeared (%1$s)',
|
||||
'Core:Synchro:label_repl_existing' => 'Existing (%1$s)',
|
||||
'Core:Synchro:label_repl_new' => 'New (%1$s)',
|
||||
'Core:Synchro:label_obj_deleted' => 'Deleted (%1$s)',
|
||||
'Core:Synchro:label_obj_obsoleted' => 'Obsoleted (%1$s)',
|
||||
'Core:Synchro:label_obj_disappeared_errors' => 'Errors (%1$s)',
|
||||
'Core:Synchro:label_obj_disappeared_no_action' => 'No Action (%1$s)',
|
||||
'Core:Synchro:label_obj_unchanged' => 'Unchanged (%1$s)',
|
||||
'Core:Synchro:label_obj_updated' => 'Updated (%1$s)',
|
||||
'Core:Synchro:label_obj_updated_errors' => 'Errors (%1$s)',
|
||||
'Core:Synchro:label_obj_new_unchanged' => 'Unchanged (%1$s)',
|
||||
'Core:Synchro:label_obj_new_updated' => 'Updated (%1$s)',
|
||||
'Core:Synchro:label_obj_created' => 'Created (%1$s)',
|
||||
'Core:Synchro:label_obj_new_errors' => 'Errors (%1$s)',
|
||||
'Core:Synchro:History' => 'Synchronization History',
|
||||
'Core:SynchroLogTitle' => '%1$s - %2$s',
|
||||
'Core:Synchro:Nb_Replica' => 'Replica processed: %1$s',
|
||||
'Core:Synchro:Nb_Class:Objects' => '%1$s: %2$s',
|
||||
'Class:SynchroDataSource/Error:AtLeastOneReconciliationKeyMustBeSpecified' => 'At Least one reconciliation key must be specified, or the reconciliation policy must be to use the primary key.',
|
||||
'Class:SynchroDataSource/Error:DeleteRetentionDurationMustBeSpecified' => 'A delete retention period must be specified, since objects are to be deleted after being marked as obsolete',
|
||||
'Class:SynchroDataSource/Error:DeletePolicyUpdateMustBeSpecified' => 'Obsolete objects are to be updated, but no update is specified.',
|
||||
'Core:SynchroReplica:PublicData' => 'Public Data',
|
||||
'Core:SynchroReplica:PrivateDetails' => 'Private Details',
|
||||
'Core:SynchroReplica:BackToDataSource' => 'Go Back to the Synchro Data Source: %1$s',
|
||||
'Core:SynchroReplica:ListOfReplicas' => 'List of Replica',
|
||||
'Core:SynchroAttExtKey:ReconciliationById' => 'id (Primary Key)',
|
||||
'Core:SynchroAtt:attcode' => 'Attribute',
|
||||
'Core:SynchroAtt:attcode+' => 'Field of the object',
|
||||
'Core:SynchroAtt:reconciliation' => 'Reconciliation ?',
|
||||
'Core:SynchroAtt:reconciliation+' => 'Used for searching',
|
||||
'Core:SynchroAtt:update' => 'Update ?',
|
||||
'Core:SynchroAtt:update+' => 'Used to update the object',
|
||||
'Core:SynchroAtt:update_policy' => 'Update Policy',
|
||||
'Core:SynchroAtt:update_policy+' => 'Behavior of the updated field',
|
||||
'Core:SynchroAtt:reconciliation_attcode' => 'Reconciliation Key',
|
||||
'Core:SynchroAtt:reconciliation_attcode+' => 'Attribute Code for the External Key Reconciliation',
|
||||
'Core:SyncDataExchangeComment' => '(DataExchange)',
|
||||
'Core:Synchro:ListOfDataSources' => 'List of data sources:',
|
||||
'Core:Synchro:LastSynchro' => 'Last synchronization:',
|
||||
'Core:Synchro:ThisObjectIsSynchronized' => 'This object is synchronized with an external data source',
|
||||
'Core:Synchro:TheObjectWasCreatedBy_Source' => 'The object was <b>created</b> by the external data source %1$s',
|
||||
'Core:Synchro:TheObjectCanBeDeletedBy_Source' => 'The object <b>can be deleted</b> by the external data source %1$s',
|
||||
'Core:Synchro:TheObjectCannotBeDeletedByUser_Source' => 'You <b>cannot delete the object</b> because it is owned by the external data source %1$s',
|
||||
'TitleSynchroExecution' => 'Execution of the synchronization',
|
||||
'Class:SynchroDataSource:DataTable' => 'Database table: %1$s',
|
||||
'Core:SyncDataSourceObsolete' => 'The data source is marked as obsolete. Operation cancelled.',
|
||||
'Core:SyncDataSourceAccessRestriction' => 'Only adminstrators or the user specified in the data source can execute this operation. Operation cancelled.',
|
||||
'Core:SyncTooManyMissingReplicas' => 'All records have been untouched for some time (all of the objects could be deleted). Please check that the process that writes into the synchronization table is still running. Operation cancelled.',
|
||||
|
||||
'Class:AsyncSendEmail' => 'Email (asynchronous)',
|
||||
'Class:AsyncSendEmail/Attribute:to' => 'To',
|
||||
'Class:AsyncSendEmail/Attribute:subject' => 'Subject',
|
||||
'Class:AsyncSendEmail/Attribute:body' => 'Body',
|
||||
'Class:AsyncSendEmail/Attribute:header' => 'Header',
|
||||
'Class:CMDBChangeOpSetAttributeOneWayPassword' => 'Encrypted Password',
|
||||
'Class:CMDBChangeOpSetAttributeOneWayPassword/Attribute:prev_pwd' => 'Previous Value',
|
||||
'Class:CMDBChangeOpSetAttributeEncrypted' => 'Encrypted Field',
|
||||
'Class:CMDBChangeOpSetAttributeEncrypted/Attribute:prevstring' => 'Previous Value',
|
||||
'Class:CMDBChangeOpSetAttributeCaseLog' => 'Case Log',
|
||||
'Class:CMDBChangeOpSetAttributeCaseLog/Attribute:lastentry' => 'Last Entry',
|
||||
'Class:SynchroDataSource' => 'Synchro Data Source',
|
||||
'Class:SynchroDataSource/Attribute:status/Value:implementation' => 'Implementation',
|
||||
'Class:SynchroDataSource/Attribute:status/Value:obsolete' => 'Obsolete',
|
||||
'Class:SynchroDataSource/Attribute:status/Value:production' => 'Production',
|
||||
'Class:SynchroDataSource/Attribute:scope_restriction' => 'Scope restriction',
|
||||
'Class:SynchroDataSource/Attribute:reconciliation_policy/Value:use_attributes' => 'Use the attributes',
|
||||
'Class:SynchroDataSource/Attribute:reconciliation_policy/Value:use_primary_key' => 'Use the primary_key field',
|
||||
'Class:SynchroDataSource/Attribute:action_on_zero/Value:create' => 'Create',
|
||||
'Class:SynchroDataSource/Attribute:action_on_zero/Value:error' => 'Error',
|
||||
'Class:SynchroDataSource/Attribute:action_on_one/Value:error' => 'Error',
|
||||
'Class:SynchroDataSource/Attribute:action_on_one/Value:update' => 'Update',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple/Value:create' => 'Create',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple/Value:error' => 'Error',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple/Value:take_first' => 'Take the first one (random?)',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy' => 'Delete Policy',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:delete' => 'Delete',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:ignore' => 'Ignore',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:update' => 'Update',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:update_then_delete' => 'Update then Delete',
|
||||
'Class:SynchroDataSource/Attribute:attribute_list' => 'Attributes List',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:administrators' => 'Administrators only',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:everybody' => 'Everybody allowed to delete such objects',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:nobody' => 'Nobody',
|
||||
'Class:SynchroAttribute' => 'Synchro Attribute',
|
||||
'Class:SynchroAttribute/Attribute:sync_source_id' => 'Sycnhro Data Source',
|
||||
'Class:SynchroAttribute/Attribute:attcode' => 'Attribute Code',
|
||||
'Class:SynchroAttribute/Attribute:update' => 'Update',
|
||||
'Class:SynchroAttribute/Attribute:reconcile' => 'Reconcile',
|
||||
'Class:SynchroAttribute/Attribute:update_policy' => 'Update Policy',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:master_locked' => 'Locked',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:master_unlocked' => 'Unlocked',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:write_if_empty' => 'Initialize if empty',
|
||||
'Class:SynchroAttribute/Attribute:finalclass' => 'Class',
|
||||
'Class:SynchroAttExtKey' => 'Synchro Attribute (ExtKey)',
|
||||
'Class:SynchroAttExtKey/Attribute:reconciliation_attcode' => 'Reconciliation Attribute',
|
||||
'Class:SynchroAttLinkSet' => 'Synchro Attribute (Linkset)',
|
||||
'Class:SynchroAttLinkSet/Attribute:row_separator' => 'Rows separator',
|
||||
'Class:SynchroAttLinkSet/Attribute:attribute_separator' => 'Attributes separator',
|
||||
'Class:SynchroLog' => 'Synchr Log',
|
||||
'Class:SynchroLog/Attribute:sync_source_id' => 'Synchro Data Source',
|
||||
'Class:SynchroLog/Attribute:start_date' => 'Start Date',
|
||||
'Class:SynchroLog/Attribute:end_date' => 'End Date',
|
||||
'Class:SynchroLog/Attribute:status' => 'Status',
|
||||
'Class:SynchroLog/Attribute:status/Value:completed' => 'Completed',
|
||||
'Class:SynchroLog/Attribute:status/Value:error' => 'Error',
|
||||
'Class:SynchroLog/Attribute:status/Value:running' => 'Still Running',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_seen' => 'Nb replica seen',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_total' => 'Nb replica total',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_deleted' => 'Nb objects deleted',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_deleted_errors' => 'Nb of errors while deleting',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_obsoleted' => 'Nb objects obsoleted',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_obsoleted_errors' => 'Nb of errors while obsoleting',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_created' => 'Nb objects created',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_created_errors' => 'Nb or errors while creating',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_updated' => 'Nb objects updated',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_updated_errors' => 'Nb errors while updating',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_reconciled_errors' => 'Nb of errors during reconciliation',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_disappeared_no_action' => 'Nb replica disappeared',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_new_updated' => 'Nb objects updated',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_new_unchanged' => 'Nb objects unchanged',
|
||||
'Class:SynchroLog/Attribute:last_error' => 'Last error',
|
||||
'Class:SynchroLog/Attribute:traces' => 'Traces',
|
||||
'Class:SynchroReplica' => 'Synchro Replica',
|
||||
'Class:SynchroReplica/Attribute:sync_source_id' => 'Synchro Data Source',
|
||||
'Class:SynchroReplica/Attribute:dest_id' => 'Destination object (ID)',
|
||||
'Class:SynchroReplica/Attribute:dest_class' => 'Destination type',
|
||||
'Class:SynchroReplica/Attribute:status_last_seen' => 'Lat seen',
|
||||
'Class:SynchroReplica/Attribute:status' => 'Status',
|
||||
'Class:SynchroReplica/Attribute:status/Value:modified' => 'Modified',
|
||||
'Class:SynchroReplica/Attribute:status/Value:new' => 'New',
|
||||
'Class:SynchroReplica/Attribute:status/Value:obsolete' => 'Obsolete',
|
||||
'Class:SynchroReplica/Attribute:status/Value:orphan' => 'Orphan',
|
||||
'Class:SynchroReplica/Attribute:status/Value:synchronized' => 'Synchronized',
|
||||
'Class:SynchroReplica/Attribute:status_dest_creator' => 'Object Created ?',
|
||||
'Class:SynchroReplica/Attribute:status_last_error' => 'Last Error',
|
||||
'Class:SynchroReplica/Attribute:info_creation_date' => 'Creation Date',
|
||||
'Class:SynchroReplica/Attribute:info_last_modified' => 'Last Modified Date',
|
||||
'Class:appUserPreferences' => 'User Preferences',
|
||||
'Class:appUserPreferences/Attribute:userid' => 'User',
|
||||
'Class:appUserPreferences/Attribute:preferences' => 'Prefs',
|
||||
));
|
||||
|
||||
//
|
||||
// Attribute Duration
|
||||
//
|
||||
Dict::Add('EN US', 'English', 'English', array(
|
||||
'Core:Duration_Seconds' => '%1$ds',
|
||||
'Core:Duration_Minutes_Seconds' =>'%1$dmin %2$ds',
|
||||
'Core:Duration_Hours_Minutes_Seconds' => '%1$dh %2$dmin %3$ds',
|
||||
'Core:Duration_Days_Hours_Minutes_Seconds' => '%1$sd %2$dh %3$dmin %4$ds',
|
||||
));
|
||||
|
||||
?>
|
||||
|
||||
@@ -336,6 +336,7 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'UI:Button:Cancel' => 'Cancel',
|
||||
'UI:Button:Apply' => 'Apply',
|
||||
'UI:Button:Back' => ' << Back ',
|
||||
'UI:Button:Restart' => ' |<< Restart ',
|
||||
'UI:Button:Next' => ' Next >> ',
|
||||
'UI:Button:Finish' => ' Finish ',
|
||||
'UI:Button:DoImport' => ' Run the Import ! ',
|
||||
@@ -366,7 +367,7 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'UI:Error:IncorrectLinkDefinition_LinkedClass_Class' => 'Incorrect link definition: the class of objects to manage: %1$s was not found as an external key in the class %2$s',
|
||||
'UI:Error:Object_Class_Id_NotFound' => 'Object: %1$s:%2$d not found.',
|
||||
'UI:Error:WizardCircularReferenceInDependencies' => 'Error: Circular reference in the dependencies between the fields, check the data model.',
|
||||
'UI:Error:UploadedFileTooBig' => 'Uploaded file is too big. (Max allowed size is %1$s). Check you PHP configuration for upload_max_filesize.',
|
||||
'UI:Error:UploadedFileTooBig' => 'Uploaded file is too big. (Max allowed size is %1$s). Check you PHP configuration for upload_max_filesize and post_max_size.',
|
||||
'UI:Error:UploadedFileTruncated.' => 'Uploaded file has been truncated !',
|
||||
'UI:Error:NoTmpDir' => 'The temporary directory is not defined.',
|
||||
'UI:Error:CannotWriteToTmp_Dir' => 'Unable to write the temporary file to the disk. upload_tmp_dir = "%1$s".',
|
||||
@@ -398,12 +399,21 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'UI:History:LastModified_On_By' => 'Last modified on %1$s by %2$s.',
|
||||
'UI:HistoryTab' => 'History',
|
||||
'UI:NotificationsTab' => 'Notifications',
|
||||
'UI:History:BulkImports' => 'History',
|
||||
'UI:History:BulkImports+' => 'List of CSV imports (latest import first)',
|
||||
'UI:History:BulkImportDetails' => 'Changes resulting from the CSV import performed on %1$s (by %2$s)',
|
||||
'UI:History:Date' => 'Date',
|
||||
'UI:History:Date+' => 'Date of the change',
|
||||
'UI:History:User' => 'User',
|
||||
'UI:History:User+' => 'User who made the change',
|
||||
'UI:History:Changes' => 'Changes',
|
||||
'UI:History:Changes+' => 'Changes made to the object',
|
||||
'UI:History:StatsCreations' => 'Created',
|
||||
'UI:History:StatsCreations+' => 'Count of objects created',
|
||||
'UI:History:StatsModifs' => 'Modified',
|
||||
'UI:History:StatsModifs+' => 'Count of objects modified',
|
||||
'UI:History:StatsDeletes' => 'Deleted',
|
||||
'UI:History:StatsDeletes+' => 'Count of objects deleted',
|
||||
'UI:Loading' => 'Loading...',
|
||||
'UI:Menu:Actions' => 'Actions',
|
||||
'UI:Menu:New' => 'New...',
|
||||
@@ -446,6 +456,9 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'UI:LogOff:ThankYou' => 'Thank you for using iTop',
|
||||
'UI:LogOff:ClickHereToLoginAgain' => 'Click here to login again...',
|
||||
'UI:ChangePwdMenu' => 'Change Password...',
|
||||
'UI:Login:PasswordChanged' => 'Password successfully set !',
|
||||
'UI:AccessRO-All' => 'iTop is read-only',
|
||||
'UI:AccessRO-Users' => 'iTop is read-only for end-users',
|
||||
'UI:Login:RetypePwdDoesNotMatch' => 'New password and retyped new password do not match !',
|
||||
'UI:Button:Login' => 'Enter iTop',
|
||||
'UI:Login:Error:AccessRestricted' => 'iTop access is restricted. Please, contact an iTop administrator.',
|
||||
@@ -461,6 +474,7 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'UI:CSVImport:idField' => 'id (Primary Key)',
|
||||
'UI:Title:BulkImport' => 'iTop - Bulk import',
|
||||
'UI:Title:BulkImport+' => 'CSV Import Wizard',
|
||||
'UI:Title:BulkSynchro_nbItem_ofClass_class' => 'Synchronization of %1$d objects of class %2$s',
|
||||
'UI:CSVImport:ClassesSelectOne' => '-- select one --',
|
||||
'UI:CSVImport:ErrorExtendedAttCode' => 'Internal error: "%1$s" is an incorrect code because "%2$s" is NOT an external key of the class "%3$s"',
|
||||
'UI:CSVImport:ObjectsWillStayUnchanged' => '%1$d objects(s) will stay unchanged.',
|
||||
@@ -610,8 +624,11 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'UI:Delete:NotAllowedToDelete' => 'You are not allowed to delete this object',
|
||||
'UI:Delete:NotAllowedToUpdate_Fields' => 'You are not allowed to update the following field(s): %1$s',
|
||||
'UI:Error:NotEnoughRightsToDelete' => 'This object could not be deleted because the current user do not have sufficient rights',
|
||||
'UI:Error:CannotDeleteBecause' => 'This object could not be deleted because: %1$s',
|
||||
'UI:Error:CannotDeleteBecauseOfDepencies' => 'This object could not be deleted because some manual operations must be performed prior to that',
|
||||
'UI:Error:CannotDeleteBecauseManualOpNeeded' => 'This object could not be deleted because some manual operations must be performed prior to that',
|
||||
'UI:Archive_User_OnBehalfOf_User' => '%1$s on behalf of %2$s',
|
||||
'UI:Delete:Deleted' => 'deleted',
|
||||
'UI:Delete:AutomaticallyDeleted' => 'automatically deleted',
|
||||
'UI:Delete:AutomaticResetOf_Fields' => 'automatic reset of field(s): %1$s',
|
||||
'UI:Delete:CleaningUpRefencesTo_Object' => 'Cleaning up all references to %1$s...',
|
||||
@@ -620,8 +637,9 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'UI:Delete:_Name_Class_Deleted' => '%1$s - %2$s deleted.',
|
||||
'UI:Delete:ConfirmDeletionOf_Name' => 'Deletion of %1$s',
|
||||
'UI:Delete:ConfirmDeletionOf_Count_ObjectsOf_Class' => 'Deletion of %1$d objects of class %2$s',
|
||||
'UI:Delete:ShouldBeDeletedAtomaticallyButNotAllowed' => 'Should be automaticaly deleted, but you are not allowed to do so',
|
||||
'UI:Delete:MustBeDeletedManuallyButNotAllowed' => 'Must be deleted manually - but you are not allowed to delete this object, please contact your application admin',
|
||||
'UI:Delete:CannotDeleteBecause' => 'Could not be deleted: %1$s',
|
||||
'UI:Delete:ShouldBeDeletedAtomaticallyButNotPossible' => 'Should be automaticaly deleted, but this is not feasible: %1$s',
|
||||
'UI:Delete:MustBeDeletedManuallyButNotPossible' => 'Must be deleted manually, but this is not feasible: %1$s',
|
||||
'UI:Delete:WillBeDeletedAutomatically' => 'Will be automaticaly deleted',
|
||||
'UI:Delete:MustBeDeletedManually' => 'Must be deleted manually',
|
||||
'UI:Delete:CannotUpdateBecause_Issue' => 'Should be automatically updated, but: %1$s',
|
||||
@@ -842,6 +860,7 @@ When associated with a trigger, each action is given an "order" number, specifyi
|
||||
'UI:DisplayThisMessageAtStartup' => 'Display this message at startup',
|
||||
'UI:RelationshipGraph' => 'Graphical view',
|
||||
'UI:RelationshipList' => 'List',
|
||||
'UI:OperationCancelled' => 'Operation Cancelled',
|
||||
|
||||
'Portal:Title' => 'iTop user portal',
|
||||
'Portal:Refresh' => 'Refresh',
|
||||
@@ -861,8 +880,40 @@ When associated with a trigger, each action is given an "order" number, specifyi
|
||||
'Portal:Button:CloseTicket' => 'Close this ticket',
|
||||
'Portal:EnterYourCommentsOnTicket' => 'Enter your comments about the resolution of this ticket:',
|
||||
'Portal:ErrorNoContactForThisUser' => 'Error: the current user is not associated with a Contact/Person. Please contact your administrator.',
|
||||
'Portal:Attachments' => 'Attachments',
|
||||
'Portal:AddAttachment' => ' Add Attachment ',
|
||||
'Portal:RemoveAttachment' => ' Remove Attachment ',
|
||||
'Portal:Attachment_No_To_Ticket_Name' => 'Attachment #%1$d to %2$s (%3$s)',
|
||||
'Enum:Undefined' => 'Undefined',
|
||||
'UI:DurationForm_Days_Hours_Minutes_Seconds' => '%1$s Days %2$s Hours %3$s Minutes %4$s Seconds',
|
||||
'UI:ModifyAllPageTitle' => 'Modify All',
|
||||
'UI:Modify_N_ObjectsOf_Class' => 'Modifying %1$d objects of class %2$s',
|
||||
'UI:Modify_M_ObjectsOf_Class_OutOf_N' => 'Modifying %1$d objects of class %2$s out of %3$d',
|
||||
'UI:Menu:ModifyAll' => 'Modify...',
|
||||
'UI:Button:ModifyAll' => 'Modify All',
|
||||
'UI:Button:PreviewModifications' => 'Preview Modifications >>',
|
||||
'UI:ModifiedObject' => 'Object Modified',
|
||||
'UI:BulkModifyStatus' => 'Operation',
|
||||
'UI:BulkModifyStatus+' => 'Status of the operation',
|
||||
'UI:BulkModifyErrors' => 'Errors (if any)',
|
||||
'UI:BulkModifyErrors+' => 'Errors preventing the modification',
|
||||
'UI:BulkModifyStatusOk' => 'Ok',
|
||||
'UI:BulkModifyStatusError' => 'Error',
|
||||
'UI:BulkModifyStatusModified' => 'Modified',
|
||||
'UI:BulkModifyStatusSkipped' => 'Skipped',
|
||||
'UI:BulkModify_Count_DistinctValues' => '%1$d distinct values:',
|
||||
'UI:BulkModify:Value_Exists_N_Times' => '%1$s, %2$d time(s)',
|
||||
'UI:BulkModify:N_MoreValues' => '%1$d more values...',
|
||||
'UI:AttemptingToSetAReadOnlyAttribute_Name' => 'Attempting to set the read-only field: %1$s',
|
||||
'UI:FailedToApplyStimuli' => 'The action has failed.',
|
||||
'UI:StimulusModify_N_ObjectsOf_Class' => '%1$s: Modifying %2$d objects of class %3$s',
|
||||
'UI:CaseLogTypeYourTextHere' => 'Type your text here:',
|
||||
'UI:CaseLog:DateFormat' => 'Y-m-d H:i:s',
|
||||
'UI:CaseLog:Header_Date_UserName' => '%1$s - %2$s:',
|
||||
'UI:CaseLog:InitialValue' => 'Initial value:',
|
||||
'UI:AttemptingToSetASlaveAttribute_Name' => 'The field %1$s is not writable because it is mastered by the data synchronization. Value not set.',
|
||||
'UI:ActionNotAllowed' => 'You are not allowed to perform this action on these objects.',
|
||||
'UI:BulkAction:NoObjectSelected' => 'Please select at least one object to perform this operation',
|
||||
'UI:AttemptingToChangeASlaveAttribute_Name' => 'The field %1$s is not writable because it is mastered by the data synchronization. Value remains unchanged.',
|
||||
));
|
||||
|
||||
|
||||
|
||||
?>
|
||||
|
||||
@@ -29,6 +29,99 @@
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
Dict::Add('ES CR', 'English', 'English', array(
|
||||
'Core:AttributeLinkedSet' => 'Array of objects',
|
||||
'Core:AttributeLinkedSet+' => 'Any kind of objects [subclass] of the same class',
|
||||
|
||||
'Core:AttributeLinkedSetIndirect' => 'Array of objects (N-N)',
|
||||
'Core:AttributeLinkedSetIndirect+' => 'Any kind of objects [subclass] of the same class',
|
||||
|
||||
'Core:AttributeInteger' => 'Integer',
|
||||
'Core:AttributeInteger+' => 'Numeric value (could be negative)',
|
||||
|
||||
'Core:AttributeDecimal' => 'Decimal',
|
||||
'Core:AttributeDecimal+' => 'Decimal value (could be negative)',
|
||||
|
||||
'Core:AttributeBoolean' => 'Boolean',
|
||||
'Core:AttributeBoolean+' => 'Boolean',
|
||||
|
||||
'Core:AttributeString' => 'String',
|
||||
'Core:AttributeString+' => 'Alphanumeric string',
|
||||
|
||||
'Core:AttributeClass' => 'Class',
|
||||
'Core:AttributeClass+' => 'Class',
|
||||
|
||||
'Core:AttributeApplicationLanguage' => 'User language',
|
||||
'Core:AttributeApplicationLanguage+' => 'Language and country (EN US)',
|
||||
|
||||
'Core:AttributeFinalClass' => 'Class (auto)',
|
||||
'Core:AttributeFinalClass+' => 'Real class of the object (automatically created by the core)',
|
||||
|
||||
'Core:AttributePassword' => 'Password',
|
||||
'Core:AttributePassword+' => 'Password of an external device',
|
||||
|
||||
'Core:AttributeEncryptedString' => 'Encrypted string',
|
||||
'Core:AttributeEncryptedString+' => 'String encrypted with a local key',
|
||||
|
||||
'Core:AttributeText' => 'Text',
|
||||
'Core:AttributeText+' => 'Multiline character string',
|
||||
|
||||
'Core:AttributeHTML' => 'HTML',
|
||||
'Core:AttributeHTML+' => 'HTML string',
|
||||
|
||||
'Core:AttributeEmailAddress' => 'Email address',
|
||||
'Core:AttributeEmailAddress+' => 'Email address',
|
||||
|
||||
'Core:AttributeIPAddress' => 'IP address',
|
||||
'Core:AttributeIPAddress+' => 'IP address',
|
||||
|
||||
'Core:AttributeOQL' => 'OQL',
|
||||
'Core:AttributeOQL+' => 'Object Query Langage expression',
|
||||
|
||||
'Core:AttributeEnum' => 'Enum',
|
||||
'Core:AttributeEnum+' => 'List of predefined alphanumeric strings',
|
||||
|
||||
'Core:AttributeTemplateString' => 'Template string',
|
||||
'Core:AttributeTemplateString+' => 'String containing placeholders',
|
||||
|
||||
'Core:AttributeTemplateText' => 'Template text',
|
||||
'Core:AttributeTemplateText+' => 'Text containing placeholders',
|
||||
|
||||
'Core:AttributeTemplateHTML' => 'Template HTML',
|
||||
'Core:AttributeTemplateHTML+' => 'HTML containing placeholders',
|
||||
|
||||
'Core:AttributeDateTime' => 'Date/time',
|
||||
'Core:AttributeDateTime+' => 'Date and time (year-month-day hh:mm:ss)',
|
||||
|
||||
'Core:AttributeDate' => 'Date',
|
||||
'Core:AttributeDate+' => 'Date (year-month-day)',
|
||||
|
||||
'Core:AttributeDeadline' => 'Deadline',
|
||||
'Core:AttributeDeadline+' => 'Date, displayed relatively to the current time',
|
||||
|
||||
'Core:AttributeExternalKey' => 'External key',
|
||||
'Core:AttributeExternalKey+' => 'External (or foreign) key',
|
||||
|
||||
'Core:AttributeExternalField' => 'External field',
|
||||
'Core:AttributeExternalField+' => 'Field mapped from an external key',
|
||||
|
||||
'Core:AttributeURL' => 'URL',
|
||||
'Core:AttributeURL+' => 'Absolute or relative URL as a text string',
|
||||
|
||||
'Core:AttributeBlob' => 'Blob',
|
||||
'Core:AttributeBlob+' => 'Any binary content (document)',
|
||||
|
||||
'Core:AttributeOneWayPassword' => 'One way password',
|
||||
'Core:AttributeOneWayPassword+' => 'One way encrypted (hashed) password',
|
||||
|
||||
'Core:AttributeTable' => 'Table',
|
||||
'Core:AttributeTable+' => 'Indexed array having two dimensions',
|
||||
|
||||
'Core:AttributePropertySet' => 'Properties',
|
||||
'Core:AttributePropertySet+' => 'List of untyped properties (name and value)',
|
||||
));
|
||||
|
||||
|
||||
//
|
||||
// Class: CMDBChange
|
||||
//
|
||||
@@ -107,6 +200,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
|
||||
// Used by CMDBChangeOp... & derived classes
|
||||
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
|
||||
'Change:AttName_SetTo_NewValue_PreviousValue_OldValue' => '%1$s modificado en %2$s (valor anterior: %3$s)',
|
||||
'Change:AttName_SetTo' => '%1$s modificado en %2$s',
|
||||
'Change:Text_AppendedTo_AttName' => '%1$s añadido a %2$s',
|
||||
'Change:AttName_Changed_PreviousValue_OldValue' => '%1$s modificado, valor anterior: %2$s',
|
||||
'Change:AttName_Changed' => '%1$s modificado',
|
||||
|
||||
@@ -304,494 +304,498 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
|
||||
'Menu:WelcomeMenuPage+' => 'Bienvenido a iTop',
|
||||
'UI:WelcomeMenu:Title' => 'Bienvenido a iTop',
|
||||
|
||||
'UI:WelcomeMenu:LeftBlock' => '<p>iTop es un completo; portal IT funcioanl basado en código abierto (OpenSource).</p>
|
||||
'UI:WelcomeMenu:LeftBlock' => '<p>iTop es un completo; portal IT funcional basado en código abierto (OpenSource).</p>
|
||||
<ul>Incluye:
|
||||
<li>Una CMDB competa (Configuration management database) para documentar y manejar el inverntario de TI..</li>
|
||||
<li>Un módul de gestión de incidentes, para llevar la trazabilidad y comunicar los eventos que estan afectando IT.</li>
|
||||
<li>Un módulo de gestion de cambio para planear y llevar la trazabilidad hechos al ambiente de TI.</li>
|
||||
<li>Un módulo de gestion de cambio para planear y llevar la trazabilidad de cambios hechos al ambiente de TI.</li>
|
||||
<li>Una base de conocimiento para acelerar la correción de incidentes.</li>
|
||||
<li>Un moódulo de Cortes/Caídas para documentar todas las caídas planeadas o no y notificar a los contactods del caso.</li>
|
||||
<li>Tableros de controles para rapidamente tener visión general del ambiente TI..</li>
|
||||
</ul>
|
||||
<p>All the modules can be setup, step by step, indepently of each other.</p>',
|
||||
<p>Todos los modulos pueden ser configurados, paso a paso, individual e independientemente de los otros.</p>',
|
||||
|
||||
'UI:WelcomeMenu:RightBlock' => '<p>iTop is service provider oriented, it allows IT engineers to manage easily multiple customers or organizations.
|
||||
<ul>iTop, delivers a feature-rich set of business processes that:
|
||||
<li>Enhances IT management effectiveness</li>
|
||||
<li>Drives IT operations performance</li>
|
||||
<li>Improves customer satisfaction and provides executives with insights into business performance.</li>
|
||||
'UI:WelcomeMenu:RightBlock' => '<p>iTop esta orientada a los proveedores de servicios, le permite a los Ingenieros de TI administrar facilmente multiples clientes y organizaciones.
|
||||
<ul>iTop, provee un conjunto de funciones de procesos de negocio que:
|
||||
<li>Mejora Enhances IT management effectiveness</li>
|
||||
<li>Dirige el desempeño de la operaciones de TI</li>
|
||||
<li>Incrementa la satisfaccion del cliente y provee a los ejecutivos con detalles del desempeño del negocio.</li>
|
||||
</ul>
|
||||
</p>
|
||||
<p>iTop is completely opened to be integrated within your current IT Management infrastructure.</p>
|
||||
<p>iTop es completamente abierto para ser integrado con su actual infraestructura de Gestion de TI.</p>
|
||||
<p>
|
||||
<ul>Adopting this new generation of IT Operational portal will help you to:
|
||||
<li>Better manage a more and more complex IT environment.</li>
|
||||
<li>Implement ITIL processes at your own pace.</li>
|
||||
<li>Manage the most important asset of your IT: Documentation.</li>
|
||||
<ul>Adoptar esta nueva generacion de portales de operaciones de TI le ayudara a:
|
||||
<li>Mejorar gestion de entornos de TI mas y mas complejos.</li>
|
||||
<li>Implementar los procesos de ITIL a su propio ritmo.</li>
|
||||
<li>Administrar el bien mas importante de su TI: Documentacion.</li>
|
||||
</ul>
|
||||
</p>',
|
||||
|
||||
'UI:WelcomeMenu:MyCalls' => 'My requests',
|
||||
'UI:WelcomeMenu:MyIncidents' => 'Incidents assigned to me',
|
||||
'UI:AllOrganizations' => ' All Organizations ',
|
||||
'UI:YourSearch' => 'Your Search',
|
||||
'UI:LoggedAsMessage' => 'Logged in as %1$s',
|
||||
'UI:LoggedAsMessage+Admin' => 'Logged in as %1$s (Administrator)',
|
||||
'UI:Button:Logoff' => 'Log off',
|
||||
'UI:Button:GlobalSearch' => 'Search',
|
||||
'UI:Button:Search' => ' Search ',
|
||||
'UI:Button:Query' => ' Query ',
|
||||
'UI:WelcomeMenu:MyCalls' => 'Mis solicitudes',
|
||||
'UI:WelcomeMenu:MyIncidents' => 'Incidentes asignados a mi',
|
||||
'UI:AllOrganizations' => ' Todas las Organizaciones',
|
||||
'UI:YourSearch' => 'Su busqueda',
|
||||
'UI:LoggedAsMessage' => 'Conectado como %1$s',
|
||||
'UI:LoggedAsMessage+Admin' => 'Conectado como %1$s (Administrator)',
|
||||
'UI:Button:Logoff' => 'Cerrar sesion',
|
||||
'UI:Button:GlobalSearch' => 'Buscar',
|
||||
'UI:Button:Search' => ' Buscar ',
|
||||
'UI:Button:Query' => ' Consulta ',
|
||||
'UI:Button:Ok' => 'Ok',
|
||||
'UI:Button:Cancel' => 'Cancel',
|
||||
'UI:Button:Apply' => 'Apply',
|
||||
'UI:Button:Back' => ' << Back ',
|
||||
'UI:Button:Next' => ' Next >> ',
|
||||
'UI:Button:Finish' => ' Finish ',
|
||||
'UI:Button:DoImport' => ' Run the Import ! ',
|
||||
'UI:Button:Done' => ' Done ',
|
||||
'UI:Button:SimulateImport' => ' Simulate the Import ',
|
||||
'UI:Button:Test' => 'Test!',
|
||||
'UI:Button:Evaluate' => ' Evaluate ',
|
||||
'UI:Button:AddObject' => ' Add... ',
|
||||
'UI:Button:BrowseObjects' => ' Browse... ',
|
||||
'UI:Button:Add' => ' Add ',
|
||||
'UI:Button:AddToList' => ' << Add ',
|
||||
'UI:Button:RemoveFromList' => ' Remove >> ',
|
||||
'UI:Button:FilterList' => ' Filter... ',
|
||||
'UI:Button:Create' => ' Create ',
|
||||
'UI:Button:Delete' => ' Delete ! ',
|
||||
'UI:Button:ChangePassword' => ' Change Password ',
|
||||
'UI:Button:ResetPassword' => ' Reset Password ',
|
||||
'UI:Button:Cancel' => 'Cancelar',
|
||||
'UI:Button:Apply' => 'Aplicar',
|
||||
'UI:Button:Back' => ' << Anterior ',
|
||||
'UI:Button:Next' => ' Siguiente >> ',
|
||||
'UI:Button:Finish' => ' Finalizar ',
|
||||
'UI:Button:DoImport' => ' Importar los datos ! ',
|
||||
'UI:Button:Done' => ' Listo ',
|
||||
'UI:Button:SimulateImport' => ' Simular la Importacion ',
|
||||
'UI:Button:Test' => 'Probar!',
|
||||
'UI:Button:Evaluate' => ' Evaluar ',
|
||||
'UI:Button:AddObject' => ' Agregar... ',
|
||||
'UI:Button:BrowseObjects' => ' Examinar... ',
|
||||
'UI:Button:Add' => ' agregar ',
|
||||
'UI:Button:AddToList' => ' << Agregar ',
|
||||
'UI:Button:RemoveFromList' => ' Remover >> ',
|
||||
'UI:Button:FilterList' => ' Filtrar... ',
|
||||
'UI:Button:Create' => ' Crear ',
|
||||
'UI:Button:Delete' => ' Borrar! ',
|
||||
'UI:Button:ChangePassword' => ' Cambiar Contraseña',
|
||||
'UI:Button:ResetPassword' => ' Restablecer Contraseña',
|
||||
|
||||
'UI:SearchToggle' => 'Search',
|
||||
'UI:SearchToggle' => 'Buscar',
|
||||
'UI:ClickToCreateNew' => 'Crear un nuevo %1$s',
|
||||
'UI:SearchFor_Class' => 'Buscar %1$s objetos',
|
||||
'UI:NoObjectToDisplay' => 'Ningún objeto para visualizar.',
|
||||
'UI:Error:MandatoryTemplateParameter_object_id' => 'Parameter object_id is mandatory when link_attr is specified. Check the definition of the display template.',
|
||||
'UI:Error:MandatoryTemplateParameter_target_attr' => 'Parameter target_attr is mandatory when link_attr is specified. Check the definition of the display template.',
|
||||
'UI:Error:MandatoryTemplateParameter_group_by' => 'Parameter group_by is mandatory. Check the definition of the display template.',
|
||||
'UI:Error:InvalidGroupByFields' => 'Invalid list of fields to group by: "%1$s".',
|
||||
'UI:Error:UnsupportedStyleOfBlock' => 'Error: unsupported style of block: "%1$s".',
|
||||
'UI:Error:IncorrectLinkDefinition_LinkedClass_Class' => 'Incorrect link definition: the class of objects to manage: %1$s was not found as an external key in the class %2$s',
|
||||
'UI:Error:Object_Class_Id_NotFound' => 'Object: %1$s:%2$d not found.',
|
||||
'UI:Error:WizardCircularReferenceInDependencies' => 'Error: Circular reference in the dependencies between the fields, check the data model.',
|
||||
'UI:Error:UploadedFileTooBig' => 'Uploaded file is too big. (Max allowed size is %1$s. Check you PHP configuration for upload_max_filesize.',
|
||||
'UI:Error:UploadedFileTruncated.' => 'Uploaded file has been truncated !',
|
||||
'UI:Error:NoTmpDir' => 'The temporary directory is not defined.',
|
||||
'UI:Error:CannotWriteToTmp_Dir' => 'Unable to write the temporary file to the disk. upload_tmp_dir = "%1$s".',
|
||||
'UI:Error:UploadStoppedByExtension_FileName' => 'Upload stopped by extension. (Original file name = "%1$s").',
|
||||
'UI:Error:UploadFailedUnknownCause_Code' => 'File upload failed, unknown cause. (Error code = "%1$s").',
|
||||
'UI:Error:MandatoryTemplateParameter_object_id' => 'El parametro object_id es obligatorio cuando link_attr es especificado. Verifique la definicion de la plantilla de visualizacion.',
|
||||
'UI:Error:MandatoryTemplateParameter_target_attr' => 'El parametro target_attr es obligatorio cuando link_attr es especificado. Verifique la definicion de la plantilla de visualizacion.',
|
||||
'UI:Error:MandatoryTemplateParameter_group_by' => 'El parametro group_by es obligatorio. Verifique la definicion de la plantilla de visualizacion.',
|
||||
'UI:Error:InvalidGroupByFields' => 'La lista de campos para agrupar por: "%1$s" es invalida.',
|
||||
'UI:Error:UnsupportedStyleOfBlock' => 'Error: Estilo de bloque no soportado: "%1$s".',
|
||||
'UI:Error:IncorrectLinkDefinition_LinkedClass_Class' => 'Definicio de vinculo incorrecto: la clase de objeto a administrar : %1$s no fue encontrada como clave externa en la clase %2$s',
|
||||
'UI:Error:Object_Class_Id_NotFound' => 'No se encontro el objeto: %1$s:%2$d.',
|
||||
'UI:Error:WizardCircularReferenceInDependencies' => 'Error: Verifique el modelo de datos, Existen referencias cisculares en la dependencias entre los campos.',
|
||||
'UI:Error:UploadedFileTooBig' => 'archivo cargado es muy grande. (tamaño maximo permitido es de %1$s. Verifique su configuracion de PHP para upload_max_filesize.',
|
||||
'UI:Error:UploadedFileTruncated.' => 'El archivo cargado ha sido truncado!',
|
||||
'UI:Error:NoTmpDir' => 'El directorio temporal no ha sido definido.',
|
||||
'UI:Error:CannotWriteToTmp_Dir' => 'No fue posible escribir el archivo temporal al disco. upload_tmp_dir = "%1$s".',
|
||||
'UI:Error:UploadStoppedByExtension_FileName' => 'Carga de archivo interrumpida por la extension. (Nombre de archivo original = "%1$s").',
|
||||
'UI:Error:UploadFailedUnknownCause_Code' => 'Carga de archivo fallida, causa desconocida. (Codigo de error = "%1$s").',
|
||||
|
||||
'UI:Error:1ParametersMissing' => 'Error: the following parameter must be specified for this operation: %1$s.',
|
||||
'UI:Error:2ParametersMissing' => 'Error: the following parameters must be specified for this operation: %1$s and %2$s.',
|
||||
'UI:Error:3ParametersMissing' => 'Error: the following parameters must be specified for this operation: %1$s, %2$s and %3$s.',
|
||||
'UI:Error:4ParametersMissing' => 'Error: the following parameters must be specified for this operation: %1$s, %2$s, %3$s and %4$s.',
|
||||
'UI:Error:IncorrectOQLQuery_Message' => 'Error: incorrect OQL query: %1$s',
|
||||
'UI:Error:AnErrorOccuredWhileRunningTheQuery_Message' => 'An error occured while running the query: %1$s',
|
||||
'UI:Error:ObjectAlreadyUpdated' => 'Error: the object has already been updated.',
|
||||
'UI:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated.',
|
||||
'UI:Error:ObjectsAlreadyDeleted' => 'Error: objects have already been deleted!',
|
||||
'UI:Error:BulkDeleteNotAllowedOn_Class' => 'You are not allowed to perform a bulk delete of objects of class %1$s',
|
||||
'UI:Error:DeleteNotAllowedOn_Class' => 'You are not allowed to delete objects of class %1$s',
|
||||
'UI:Error:BulkModifyNotAllowedOn_Class' => 'You are not allowed to perform a bulk update of objects of class %1$s',
|
||||
'UI:Error:ObjectAlreadyCloned' => 'Error: the object has already been cloned!',
|
||||
'UI:Error:ObjectAlreadyCreated' => 'Error: the object has already been created!',
|
||||
'UI:Error:Invalid_Stimulus_On_Object_In_State' => 'Error: invalid stimulus "%1$s" on object %2$s in state "%3$s".',
|
||||
'UI:Error:1ParametersMissing' => 'Error: El siguiente parametro debe ser especificado para esta operacion: %1$s.',
|
||||
'UI:Error:2ParametersMissing' => 'Error: Los siguientes parametros deben ser especificados para esta operacion: %1$s and %2$s.',
|
||||
'UI:Error:3ParametersMissing' => 'Error: Los siguientes parametros deben ser especificados para esta operacion: %1$s, %2$s and %3$s.',
|
||||
'UI:Error:4ParametersMissing' => 'Error: Los siguientes parametros deben ser especificados para esta operacion: %1$s, %2$s, %3$s and %4$s.',
|
||||
'UI:Error:IncorrectOQLQuery_Message' => 'Error: Consulta OQL incorrecta: %1$s',
|
||||
'UI:Error:AnErrorOccuredWhileRunningTheQuery_Message' => 'Se ha producido un error al ejecutar la consulta: %1$s',
|
||||
'UI:Error:ObjectAlreadyUpdated' => 'Error: el objeta ha sido previamente actualizado.',
|
||||
'UI:Error:ObjectCannotBeUpdated' => 'Error: el objeto no puede ser actualizado.',
|
||||
'UI:Error:ObjectsAlreadyDeleted' => 'Error: los objetos ya han sido borrados!',
|
||||
'UI:Error:BulkDeleteNotAllowedOn_Class' => 'No esta autorizado a borrar un lote de de objetos de la clase %1$s',
|
||||
'UI:Error:DeleteNotAllowedOn_Class' => 'No esta autorizado a borrar objetos del la clase %1$s',
|
||||
'UI:Error:BulkModifyNotAllowedOn_Class' => 'No esta autorizado a actualizar un lote de de objetos de la clase %1$s',
|
||||
'UI:Error:ObjectAlreadyCloned' => 'Error: el objeto ha sido previamente duplicado!',
|
||||
'UI:Error:ObjectAlreadyCreated' => 'Error: el objeto ha sido previamente creado!',
|
||||
'UI:Error:Invalid_Stimulus_On_Object_In_State' => 'Error: estimulo invalido "%1$s" en objeto %2$s en estado "%3$s".',
|
||||
|
||||
|
||||
'UI:GroupBy:Count' => 'Count',
|
||||
'UI:GroupBy:Count+' => 'Number of elements',
|
||||
'UI:CountOfObjects' => '%1$d objects matching the criteria.',
|
||||
'UI_CountOfObjectsShort' => '%1$d objects.',
|
||||
'UI:NoObject_Class_ToDisplay' => 'No %1$s to display',
|
||||
'UI:History:LastModified_On_By' => 'Last modified on %1$s by %2$s.',
|
||||
'UI:HistoryTab' => 'History',
|
||||
'UI:History:Date' => 'Date',
|
||||
'UI:History:Date+' => 'Date of the change',
|
||||
'UI:History:User' => 'User',
|
||||
'UI:History:User+' => 'User who made the change',
|
||||
'UI:History:Changes' => 'Changes',
|
||||
'UI:History:Changes+' => 'Changes made to the object',
|
||||
'UI:Loading' => 'Loading...',
|
||||
'UI:Menu:Actions' => 'Actions',
|
||||
'UI:Menu:New' => 'New...',
|
||||
'UI:Menu:Add' => 'Add...',
|
||||
'UI:Menu:Manage' => 'Manage...',
|
||||
'UI:GroupBy:Count' => 'Cuenta',
|
||||
'UI:GroupBy:Count+' => 'Numero de elementoso',
|
||||
'UI:CountOfObjects' => '%1$d objetos cumplen criterio.',
|
||||
'UI_CountOfObjectsShort' => '%1$d objetos.',
|
||||
'UI:NoObject_Class_ToDisplay' => 'No hay %1$s para mostrar',
|
||||
'UI:History:LastModified_On_By' => 'Ultima modificacion el %1$s por %2$s.',
|
||||
'UI:HistoryTab' => 'Historia',
|
||||
'UI:History:Date' => 'Fecha',
|
||||
'UI:History:Date+' => 'Fecha del Cambio',
|
||||
'UI:History:User' => 'Usuario',
|
||||
'UI:History:User+' => 'Usuario que hizo el cambio',
|
||||
'UI:History:Changes' => 'Cambios',
|
||||
'UI:History:Changes+' => 'Chambios hechos al objeto',
|
||||
'UI:Loading' => 'Cargando...',
|
||||
'UI:Menu:Actions' => 'Acciones',
|
||||
'UI:Menu:New' => 'Nuevo...',
|
||||
'UI:History:StatsCreations' => 'Created',
|
||||
'UI:History:StatsCreations+' => 'Count of objects created',
|
||||
'UI:History:StatsModifs' => 'Modified',
|
||||
'UI:History:StatsModifs+' => 'Count of objects modified',
|
||||
'UI:History:StatsDeletes' => 'Deleted',
|
||||
'UI:History:StatsDeletes+' => 'Count of objects deleted',
|
||||
'UI:Menu:EMail' => 'eMail',
|
||||
'UI:Menu:CSVExport' => 'CSV Export',
|
||||
'UI:Menu:Modify' => 'Modify...',
|
||||
'UI:Menu:Delete' => 'Delete...',
|
||||
'UI:Menu:Manage' => 'Manage...',
|
||||
'UI:Menu:BulkDelete' => 'Delete...',
|
||||
'UI:UndefinedObject' => 'undefined',
|
||||
'UI:Document:OpenInNewWindow:Download' => 'Open in new window: %1$s, Download: %2$s',
|
||||
'UI:SelectAllToggle+' => 'Select / Deselect All',
|
||||
'UI:TruncatedResults' => '%1$d objects displayed out of %2$d',
|
||||
'UI:DisplayAll' => 'Display All',
|
||||
'UI:CountOfResults' => '%1$d object(s)',
|
||||
'UI:ChangesLogTitle' => 'Changes log (%1$d):',
|
||||
'UI:EmptyChangesLogTitle' => 'Changes log is empty',
|
||||
'UI:Menu:CSVExport' => 'exportar a CSV',
|
||||
'UI:Menu:Modify' => 'Modificar...',
|
||||
'UI:Menu:Delete' => 'Borrar...',
|
||||
'UI:Menu:Manage' => 'Administrar...',
|
||||
'UI:Menu:BulkDelete' => 'Borrar...',
|
||||
'UI:UndefinedObject' => 'indefinido',
|
||||
'UI:Document:OpenInNewWindow:Download' => 'abrir en nueva ventana: %1$s, Descargar: %2$s',
|
||||
'UI:SelectAllToggle+' => 'Seleccionar / Deseleccionar Todo',
|
||||
'UI:TruncatedResults' => 'Mostrando %1$d objetos de %2$d',
|
||||
'UI:DisplayAll' => 'Mostrar todo',
|
||||
'UI:CountOfResults' => '%1$d objeto(s)',
|
||||
'UI:ChangesLogTitle' => 'Registro de cambios (%1$d):',
|
||||
'UI:EmptyChangesLogTitle' => 'Registro de cambios esta vacio',
|
||||
'UI:SearchFor_Class_Objects' => 'Buscar %1$s objetos',
|
||||
'UI:OQLQueryBuilderTitle' => 'OQL Query Builder',
|
||||
'UI:OQLQueryTab' => 'OQL Query',
|
||||
'UI:SimpleSearchTab' => 'Simple Search',
|
||||
'UI:Details+' => 'Details',
|
||||
'UI:SearchValue:Any' => '* Any *',
|
||||
'UI:SearchValue:Mixed' => '* mixed *',
|
||||
'UI:SelectOne' => '-- select one --',
|
||||
'UI:Login:Welcome' => 'Welcome to iTop!',
|
||||
'UI:Login:IncorrectLoginPassword' => 'Incorrect login/password, please try again.',
|
||||
'UI:Login:IdentifyYourself' => 'Identify yourself before continuing',
|
||||
'UI:Login:UserNamePrompt' => 'User Name',
|
||||
'UI:Login:PasswordPrompt' => 'Password',
|
||||
'UI:Login:ChangeYourPassword' => 'Change Your Password',
|
||||
'UI:Login:OldPasswordPrompt' => 'Old password',
|
||||
'UI:Login:NewPasswordPrompt' => 'New password',
|
||||
'UI:Login:RetypeNewPasswordPrompt' => 'Retype new password',
|
||||
'UI:Login:IncorrectOldPassword' => 'Error: the old password is incorrect',
|
||||
'UI:LogOffMenu' => 'Log off',
|
||||
'UI:ChangePwdMenu' => 'Change Password...',
|
||||
'UI:Login:RetypePwdDoesNotMatch' => 'New password and retyped new password do not match !',
|
||||
'UI:Button:Login' => 'Enter iTop',
|
||||
'UI:Login:Error:AccessRestricted' => 'iTop access is restricted. Please, contact an iTop administrator.',
|
||||
'UI:Login:Error:AccessAdmin' => 'Access restricted to people having administrator privileges. Please, contact an iTop administrator.',
|
||||
'UI:CSVImport:MappingSelectOne' => '-- select one --',
|
||||
'UI:CSVImport:MappingNotApplicable' => '-- ignore this field --',
|
||||
'UI:CSVImport:NoData' => 'Empty data set..., please provide some data!',
|
||||
'UI:Title:DataPreview' => 'Data Preview',
|
||||
'UI:CSVImport:ErrorOnlyOneColumn' => 'Error: The data contains only one column. Did you select the appropriate separator character?',
|
||||
'UI:CSVImport:FieldName' => 'Field %1$d',
|
||||
'UI:CSVImport:DataLine1' => 'Data Line 1',
|
||||
'UI:CSVImport:DataLine2' => 'Data Line 2',
|
||||
'UI:CSVImport:idField' => 'id (Primary Key)',
|
||||
'UI:Title:BulkImport' => 'iTop - Bulk import',
|
||||
'UI:Title:BulkImport+' => 'CSV Import Wizard',
|
||||
'UI:CSVImport:ClassesSelectOne' => '-- select one --',
|
||||
'UI:CSVImport:ErrorExtendedAttCode' => 'Internal error: "%1$s" is an incorrect code because "%2$s" is NOT an external key of the class "%3$s"',
|
||||
'UI:CSVImport:ObjectsWillStayUnchanged' => '%1$d objects(s) will stay unchanged.',
|
||||
'UI:CSVImport:ObjectsWillBeModified' => '%1$d objects(s) will be modified.',
|
||||
'UI:CSVImport:ObjectsWillBeAdded' => '%1$d objects(s) will be added.',
|
||||
'UI:CSVImport:ObjectsWillHaveErrors' => '%1$d objects(s) will have errors.',
|
||||
'UI:OQLQueryBuilderTitle' => 'Constructor de consultas OQL',
|
||||
'UI:OQLQueryTab' => 'Consulta OQL',
|
||||
'UI:SimpleSearchTab' => 'Busqueda simple',
|
||||
'UI:Details+' => 'Detalles',
|
||||
'UI:SearchValue:Any' => '* Cualquiera *',
|
||||
'UI:SearchValue:Mixed' => '* mezclado *',
|
||||
'UI:SelectOne' => '-- Seleccione uno --',
|
||||
'UI:Login:Welcome' => 'Bienvenido a iTop!',
|
||||
'UI:Login:IncorrectLoginPassword' => 'Usuario/Contraseña incorrecto, por favor intente otra vez.',
|
||||
'UI:Login:IdentifyYourself' => 'Identifiquese antes de continuar',
|
||||
'UI:Login:UserNamePrompt' => 'Nombre de Usuario',
|
||||
'UI:Login:PasswordPrompt' => 'Contraseña',
|
||||
'UI:Login:ChangeYourPassword' => 'Cambien su Contraseña',
|
||||
'UI:Login:OldPasswordPrompt' => 'Contraseña Anterior',
|
||||
'UI:Login:NewPasswordPrompt' => 'Contraseña Nueva',
|
||||
'UI:Login:RetypeNewPasswordPrompt' => 'Reintroduzca Nueva contraseña',
|
||||
'UI:Login:IncorrectOldPassword' => 'Error: la contraseña anterior es incorrecta',
|
||||
'UI:LogOffMenu' => 'Cerrar sesion',
|
||||
'UI:ChangePwdMenu' => 'Cambiar Contraseña...',
|
||||
'UI:AccessRO-All' => 'iTop is read-only',
|
||||
'UI:AccessRO-Users' => 'iTop is read-only for end-users',
|
||||
'UI:Login:Error:AccessRestricted' => 'El acceso a iTop esta restringido. Por favor contacte al administrador de iTop.',
|
||||
'UI:Login:Error:AccessAdmin' => 'Acceso restringido a usuarios con privilegio de administrador. Por favor contacte al administrador de iTop.',
|
||||
'UI:CSVImport:MappingSelectOne' => '-- seleccione uno --',
|
||||
'UI:CSVImport:MappingNotApplicable' => '-- ignore este campo --',
|
||||
'UI:CSVImport:NoData' => 'Conjunto de datos vacio..., pro favor provea alguna data!',
|
||||
'UI:Title:DataPreview' => 'Vista previa de datos',
|
||||
'UI:CSVImport:ErrorOnlyOneColumn' => 'Error: La data solo contiene una columna. Selecciono el separador de campos adecuado?',
|
||||
'UI:CSVImport:FieldName' => 'Campo %1$d',
|
||||
'UI:CSVImport:DataLine1' => 'Linea de datos 1',
|
||||
'UI:CSVImport:DataLine2' => 'Linea de datos 2',
|
||||
'UI:CSVImport:idField' => 'id (Clave primaria)',
|
||||
'UI:Title:BulkImport' => 'iTop - Importacion por lotes',
|
||||
'UI:Title:BulkImport+' => 'Asistente de importar CSV',
|
||||
'UI:CSVImport:ClassesSelectOne' => '-- seleccione uno --',
|
||||
'UI:CSVImport:ErrorExtendedAttCode' => 'error interno: "%1$s" es un codigo incorrecto debido a que "%2$s" NO es una clave externa de la clase "%3$s"',
|
||||
'UI:CSVImport:ObjectsWillStayUnchanged' => '%1$d objeto(s) permanecera sin cambio.',
|
||||
'UI:CSVImport:ObjectsWillBeModified' => '%1$d objeto(s) sera modificado.',
|
||||
'UI:CSVImport:ObjectsWillBeAdded' => '%1$d objeto(s) sera agregado.',
|
||||
'UI:CSVImport:ObjectsWillHaveErrors' => '%1$d objeto(s) tendra error.',
|
||||
'UI:CSVImport:ObjectsRemainedUnchanged' => '%1$d objects(s) remained unchanged.',
|
||||
'UI:CSVImport:ObjectsWereModified' => '%1$d objects(s) were modified.',
|
||||
'UI:CSVImport:ObjectsWereAdded' => '%1$d objects(s) were added.',
|
||||
'UI:CSVImport:ObjectsHadErrors' => '%1$d objects(s) had errors.',
|
||||
'UI:Title:CSVImportStep2' => 'Step 2 of 5: CSV data options',
|
||||
'UI:Title:CSVImportStep3' => 'Step 3 of 5: Data mapping',
|
||||
'UI:Title:CSVImportStep4' => 'Step 4 of 5: Import simulation',
|
||||
'UI:Title:CSVImportStep5' => 'Step 5 of 5: Import completed',
|
||||
'UI:CSVImport:LinesNotImported' => 'Lines that could not be loaded:',
|
||||
'UI:CSVImport:LinesNotImported+' => 'The following lines have not been imported because they contain errors',
|
||||
'UI:CSVImport:SeparatorComma+' => ', (comma)',
|
||||
'UI:CSVImport:SeparatorSemicolon+' => '; (semicolon)',
|
||||
'UI:CSVImport:SeparatorTab+' => 'tab',
|
||||
'UI:CSVImport:SeparatorOther' => 'other:',
|
||||
'UI:CSVImport:QualifierDoubleQuote+' => '" (double quote)',
|
||||
'UI:CSVImport:QualifierSimpleQuote+' => '\' (simple quote)',
|
||||
'UI:CSVImport:QualifierOther' => 'other:',
|
||||
'UI:CSVImport:TreatFirstLineAsHeader' => 'Treat the first line as a header (column names)',
|
||||
'UI:CSVImport:Skip_N_LinesAtTheBeginning' => 'Skip %1$s line(s) at the beginning of the file',
|
||||
'UI:CSVImport:CSVDataPreview' => 'CSV Data Preview',
|
||||
'UI:CSVImport:SelectFile' => 'Select the file to import:',
|
||||
'UI:CSVImport:Tab:LoadFromFile' => 'Load from a file',
|
||||
'UI:CSVImport:Tab:CopyPaste' => 'Copy and paste data',
|
||||
'UI:CSVImport:Tab:Templates' => 'Templates',
|
||||
'UI:CSVImport:PasteData' => 'Paste the data to import:',
|
||||
'UI:CSVImport:PickClassForTemplate' => 'Pick the template to download: ',
|
||||
'UI:CSVImport:SeparatorCharacter' => 'Separator character:',
|
||||
'UI:CSVImport:TextQualifierCharacter' => 'Text qualifier character',
|
||||
'UI:CSVImport:CommentsAndHeader' => 'Comments and header',
|
||||
'UI:CSVImport:SelectClass' => 'Select the class to import:',
|
||||
'UI:CSVImport:AdvancedMode' => 'Advanced mode',
|
||||
'UI:CSVImport:AdvancedMode+' => 'In advanced mode the "id" (primary key) of the objects can be used to update and rename objects.' .
|
||||
'However the column "id" (if present) can only be used as a search criteria and can not be combined with any other search criteria.',
|
||||
'UI:CSVImport:SelectAClassFirst' => 'To configure the mapping, select a class first.',
|
||||
'UI:CSVImport:HeaderFields' => 'Fields',
|
||||
'UI:CSVImport:HeaderMappings' => 'Mappings',
|
||||
'UI:CSVImport:HeaderSearch' => 'Search?',
|
||||
'UI:CSVImport:AlertIncompleteMapping' => 'Please select a mapping for every field.',
|
||||
'UI:CSVImport:AlertNoSearchCriteria' => 'Please select at least one search criteria',
|
||||
'UI:CSVImport:ObjectsWereModified' => '%1$d objeto(s) sera modificado.',
|
||||
'UI:CSVImport:ObjectsWereAdded' => '%1$d objeto(s) fue agregado.',
|
||||
'UI:CSVImport:ObjectsHadErrors' => '%1$d objeto(s) tuvo errores.',
|
||||
'UI:Title:CSVImportStep2' => 'Paso 2 de 5: opciones de datos CSV',
|
||||
'UI:Title:CSVImportStep3' => 'Paso 3 de 5: mapeo de datos',
|
||||
'UI:Title:CSVImportStep4' => 'Paso 4 de 5: simular la importacion',
|
||||
'UI:Title:CSVImportStep5' => 'Paso 5 de 5: importacion completada',
|
||||
'UI:CSVImport:LinesNotImported' => 'Lineas que no pudieron ser cargadas:',
|
||||
'UI:CSVImport:LinesNotImported+' => 'Las siguientes lineas no pudieron ser importadas porque contienen errores',
|
||||
'UI:CSVImport:SeparatorComma+' => ', (coma)',
|
||||
'UI:CSVImport:SeparatorSemicolon+' => '; (punto y coma)',
|
||||
'UI:CSVImport:SeparatorTab+' => 'tabulador',
|
||||
'UI:CSVImport:SeparatorOther' => 'otro:',
|
||||
'UI:CSVImport:QualifierDoubleQuote+' => '" (comilla doble)',
|
||||
'UI:CSVImport:QualifierSimpleQuote+' => '\' (comilla simple)',
|
||||
'UI:CSVImport:QualifierOther' => 'otro:',
|
||||
'UI:CSVImport:TreatFirstLineAsHeader' => 'Use la primera linea como encabezado de columna(nombre de columnas))',
|
||||
'UI:CSVImport:Skip_N_LinesAtTheBeginning' => 'Omitir %1$s linea(s) al inicio de el archivo',
|
||||
'UI:CSVImport:CSVDataPreview' => 'Vista previa de los datos CSV',
|
||||
'UI:CSVImport:SelectFile' => 'Seleccione el archivo a importar:',
|
||||
'UI:CSVImport:Tab:LoadFromFile' => 'Cargar desde archivo',
|
||||
'UI:CSVImport:Tab:CopyPaste' => 'Copiar y pegar data',
|
||||
'UI:CSVImport:Tab:Templates' => 'Plantillas',
|
||||
'UI:CSVImport:PasteData' => 'Pegue la data a importar:',
|
||||
'UI:CSVImport:PickClassForTemplate' => 'seleccione la plantilla a descargar: ',
|
||||
'UI:CSVImport:SeparatorCharacter' => 'Caracter separador:',
|
||||
'UI:CSVImport:TextQualifierCharacter' => 'Caracter para calificar como texto',
|
||||
'UI:CSVImport:CommentsAndHeader' => 'Comentarios y encabezado',
|
||||
'UI:CSVImport:SelectClass' => 'Seleccione la clase a importar:',
|
||||
'UI:CSVImport:AdvancedMode' => 'Modo avanzado',
|
||||
'UI:CSVImport:AdvancedMode+' => 'En modo avanzado el "id" (clave primaria) de los objetos puede ser usado para actualizar y renombrar objetos.' .
|
||||
'Sin embargo, la columna "id" (si esta presente) solo puede ser usado como criterio de busqueda y no puede ser combinado con ningun otro criterio de busqueda.',
|
||||
'UI:CSVImport:SelectAClassFirst' => 'Para configurar el mapeo, primero seleccione un clase.',
|
||||
'UI:CSVImport:HeaderFields' => 'Campos',
|
||||
'UI:CSVImport:HeaderMappings' => 'Mapeo',
|
||||
'UI:CSVImport:HeaderSearch' => 'Buscar?',
|
||||
'UI:CSVImport:AlertIncompleteMapping' => 'Por favor seleccione un mapeo para cada categoria.',
|
||||
'UI:CSVImport:AlertNoSearchCriteria' => 'Por favor seleccione al menos un criterio de busqueda',
|
||||
|
||||
'UI:UniversalSearchTitle' => 'iTop - Universal Search',
|
||||
'UI:UniversalSearchTitle' => 'iTop - Busqueda Universal',
|
||||
'UI:UniversalSearch:Error' => 'Error: %1$s',
|
||||
'UI:UniversalSearch:LabelSelectTheClass' => 'Select the class to search: ',
|
||||
'UI:UniversalSearch:LabelSelectTheClass' => 'Seleccione la clase a buscar: ',
|
||||
|
||||
'UI:Audit:Title' => 'iTop - CMDB Audit',
|
||||
'UI:Audit:InteractiveAudit' => 'Interactive Audit',
|
||||
'UI:Audit:HeaderAuditRule' => 'Audit Rule',
|
||||
'UI:Audit:HeaderNbObjects' => '# Objects',
|
||||
'UI:Audit:HeaderNbErrors' => '# Errors',
|
||||
'UI:Audit:Title' => 'iTop - Auditoria a CMDB',
|
||||
'UI:Audit:InteractiveAudit' => 'Auditoria Interactiva',
|
||||
'UI:Audit:HeaderAuditRule' => 'Reglas de Auditoria',
|
||||
'UI:Audit:HeaderNbObjects' => '# Objetos',
|
||||
'UI:Audit:HeaderNbErrors' => '# Errores',
|
||||
'UI:Audit:PercentageOk' => '% Ok',
|
||||
|
||||
'UI:RunQuery:Title' => 'iTop - OQL Query Evaluation',
|
||||
'UI:RunQuery:QueryExamples' => 'Query Examples',
|
||||
'UI:RunQuery:HeaderPurpose' => 'Purpose',
|
||||
'UI:RunQuery:HeaderPurpose+' => 'Explanation about the query',
|
||||
'UI:RunQuery:HeaderOQLExpression' => 'OQL Expression',
|
||||
'UI:RunQuery:HeaderOQLExpression+' => 'The query in OQL syntax',
|
||||
'UI:RunQuery:ExpressionToEvaluate' => 'Expression to evaluate: ',
|
||||
'UI:RunQuery:MoreInfo' => 'More information about the query: ',
|
||||
'UI:RunQuery:DevelopedQuery' => 'Redevelopped query expression: ',
|
||||
'UI:RunQuery:SerializedFilter' => 'Serialized filter: ',
|
||||
'UI:RunQuery:Error' => 'An error occured while running the query: %1$s',
|
||||
'UI:RunQuery:Title' => 'iTop - Evaluacion de consultas OQL',
|
||||
'UI:RunQuery:QueryExamples' => 'Explorador de Consultas',
|
||||
'UI:RunQuery:HeaderPurpose' => 'Proposito',
|
||||
'UI:RunQuery:HeaderPurpose+' => 'Explicacion acerca de la consulta',
|
||||
'UI:RunQuery:HeaderOQLExpression' => 'Expresion OQL',
|
||||
'UI:RunQuery:HeaderOQLExpression+' => 'La consulta en syntaxis OQL',
|
||||
'UI:RunQuery:ExpressionToEvaluate' => 'Expresion a evaluar: ',
|
||||
'UI:RunQuery:MoreInfo' => 'Mas informacion acerca de la consulta: ',
|
||||
'UI:RunQuery:DevelopedQuery' => 'Expresion de consulta rediseñada: ',
|
||||
'UI:RunQuery:SerializedFilter' => 'Filtro de serializacion: ',
|
||||
'UI:RunQuery:Error' => 'Ha ocurrido un error al ejecutar la consulta: %1$s',
|
||||
|
||||
'UI:Schema:Title' => 'iTop objects schema',
|
||||
'UI:Schema:CategoryMenuItem' => 'Category <b>%1$s</b>',
|
||||
'UI:Schema:Relationships' => 'Relationships',
|
||||
'UI:Schema:AbstractClass' => 'Abstract class: no object from this class can be instantiated.',
|
||||
'UI:Schema:NonAbstractClass' => 'Non abstract class: objects from this class can be instantiated.',
|
||||
'UI:Schema:ClassHierarchyTitle' => 'Class hierarchy',
|
||||
'UI:Schema:AllClasses' => 'All classes',
|
||||
'UI:Schema:ExternalKey_To' => 'External key to %1$s',
|
||||
'UI:Schema:Columns_Description' => 'Columns: <em>%1$s</em>',
|
||||
'UI:Schema:Default_Description' => 'Default: "%1$s"',
|
||||
'UI:Schema:NullAllowed' => 'Null Allowed',
|
||||
'UI:Schema:NullNotAllowed' => 'Null NOT Allowed',
|
||||
'UI:Schema:Attributes' => 'Attributes',
|
||||
'UI:Schema:AttributeCode' => 'Attribute Code',
|
||||
'UI:Schema:AttributeCode+' => 'Internal code of the attribute',
|
||||
'UI:Schema:Label' => 'Label',
|
||||
'UI:Schema:Label+' => 'Label of the attribute',
|
||||
'UI:Schema:Type' => 'Type',
|
||||
'UI:Schema:Title' => 'Esquema de objetos iTop',
|
||||
'UI:Schema:CategoryMenuItem' => 'Categoria <b>%1$s</b>',
|
||||
'UI:Schema:Relationships' => 'Relaciones',
|
||||
'UI:Schema:AbstractClass' => 'Clase abstracta: ningun objeto de esta clase puede ser representado.',
|
||||
'UI:Schema:NonAbstractClass' => 'Clase no abstracta: objetos de esta clase pueden ser representados.',
|
||||
'UI:Schema:ClassHierarchyTitle' => 'Jerarquia de clases',
|
||||
'UI:Schema:AllClasses' => 'Todas las clases',
|
||||
'UI:Schema:ExternalKey_To' => 'clave externa a %1$s',
|
||||
'UI:Schema:Columns_Description' => 'Columnas: <em>%1$s</em>',
|
||||
'UI:Schema:Default_Description' => 'Predeterminar: "%1$s"',
|
||||
'UI:Schema:NullAllowed' => 'Permite Null',
|
||||
'UI:Schema:NullNotAllowed' => 'NO permite Null',
|
||||
'UI:Schema:Attributes' => 'Atributos',
|
||||
'UI:Schema:AttributeCode' => 'Codigo de Atributo',
|
||||
'UI:Schema:AttributeCode+' => 'Codigo interno del atributo',
|
||||
'UI:Schema:Label' => 'Etiqueta',
|
||||
'UI:Schema:Label+' => 'Etiqueta del atributo',
|
||||
'UI:Schema:Type' => 'Tipo',
|
||||
|
||||
'UI:Schema:Type+' => 'Data type of the attribute',
|
||||
'UI:Schema:Origin' => 'Origin',
|
||||
'UI:Schema:Origin+' => 'The base class in which this attribute is defined',
|
||||
'UI:Schema:Description' => 'Description',
|
||||
'UI:Schema:Description+' => 'Description of the attribute',
|
||||
'UI:Schema:AllowedValues' => 'Allowed values',
|
||||
'UI:Schema:AllowedValues+' => 'Restrictions on the possible values for this attribute',
|
||||
'UI:Schema:MoreInfo' => 'More info',
|
||||
'UI:Schema:MoreInfo+' => 'More information about the field defined in the database',
|
||||
'UI:Schema:SearchCriteria' => 'Search criteria',
|
||||
'UI:Schema:FilterCode' => 'Filter code',
|
||||
'UI:Schema:FilterCode+' => 'Code of this search criteria',
|
||||
'UI:Schema:FilterDescription' => 'Description',
|
||||
'UI:Schema:FilterDescription+' => 'Description of this search criteria',
|
||||
'UI:Schema:AvailOperators' => 'Available operators',
|
||||
'UI:Schema:AvailOperators+' => 'Possible operators for this search criteria',
|
||||
'UI:Schema:ChildClasses' => 'Child classes',
|
||||
'UI:Schema:ReferencingClasses' => 'Referencing classes',
|
||||
'UI:Schema:RelatedClasses' => 'Related classes',
|
||||
'UI:Schema:LifeCycle' => 'Life cycle',
|
||||
'UI:Schema:Triggers' => 'Triggers',
|
||||
'UI:Schema:Relation_Code_Description' => 'Relation <em>%1$s</em> (%2$s)',
|
||||
'UI:Schema:RelationDown_Description' => 'Down: %1$s',
|
||||
'UI:Schema:RelationUp_Description' => 'Up: %1$s',
|
||||
'UI:Schema:RelationPropagates' => '%1$s: propagate to %2$d levels, query: %3$s',
|
||||
'UI:Schema:RelationDoesNotPropagate' => '%1$s: does not propagates (%2$d levels), query: %3$s',
|
||||
'UI:Schema:Class_ReferencingClasses_From_By' => '%1$s is referenced by the class %2$s via the field %3$s',
|
||||
'UI:Schema:Class_IsLinkedTo_Class_Via_ClassAndAttribute' => '%1$s is linked to %2$s via %3$s::<em>%4$s</em>',
|
||||
'UI:Schema:Links:1-n' => 'Classes pointing to %1$s (1:n links):',
|
||||
'UI:Schema:Links:n-n' => 'Classes linked to %1$s (n:n links):',
|
||||
'UI:Schema:Links:All' => 'Graph of all related classes',
|
||||
'UI:Schema:NoLifeCyle' => 'There is no life cycle defined for this class.',
|
||||
'UI:Schema:LifeCycleTransitions' => 'Transitions',
|
||||
'UI:Schema:LifeCyleAttributeOptions' => 'Attribute options',
|
||||
'UI:Schema:LifeCycleHiddenAttribute' => 'Hidden',
|
||||
'UI:Schema:LifeCycleReadOnlyAttribute' => 'Read-only',
|
||||
'UI:Schema:LifeCycleMandatoryAttribute' => 'Mandatory',
|
||||
'UI:Schema:LifeCycleAttributeMustChange' => 'Must change',
|
||||
'UI:Schema:LifeCycleAttributeMustPrompt' => 'User will be prompted to change the value',
|
||||
'UI:Schema:LifeCycleEmptyList' => 'empty list',
|
||||
'UI:Schema:Type+' => 'Tipo de dato del atributo',
|
||||
'UI:Schema:Origin' => 'Origen',
|
||||
'UI:Schema:Origin+' => 'La clase base en donde esta definido este atributo',
|
||||
'UI:Schema:Description' => 'Descripcion',
|
||||
'UI:Schema:Description+' => 'Descripcion del atributo',
|
||||
'UI:Schema:AllowedValues' => 'Valores permitidos',
|
||||
'UI:Schema:AllowedValues+' => 'Restricciones en los posibles valores para este atributo',
|
||||
'UI:Schema:MoreInfo' => 'Mas informacion',
|
||||
'UI:Schema:MoreInfo+' => 'Mas informacion acerca del campo definido en la base de datos',
|
||||
'UI:Schema:SearchCriteria' => 'Criterio de busqueda',
|
||||
'UI:Schema:FilterCode' => 'Codigo de filtro',
|
||||
'UI:Schema:FilterCode+' => 'Codigo de este criterio de busqueda',
|
||||
'UI:Schema:FilterDescription' => 'Descripcion',
|
||||
'UI:Schema:FilterDescription+' => 'Descripcion de este criterio de busqueda',
|
||||
'UI:Schema:AvailOperators' => 'Operadores disponibles',
|
||||
'UI:Schema:AvailOperators+' => 'Operadores posibles para este criterio de busqueda',
|
||||
'UI:Schema:ChildClasses' => 'Clases menores',
|
||||
'UI:Schema:ReferencingClasses' => 'Clases de referencia',
|
||||
'UI:Schema:RelatedClasses' => 'Clases relacionadas',
|
||||
'UI:Schema:LifeCycle' => 'Ciclo de vida',
|
||||
'UI:Schema:Triggers' => 'Gatillos',
|
||||
'UI:Schema:Relation_Code_Description' => 'Relacion <em>%1$s</em> (%2$s)',
|
||||
'UI:Schema:RelationDown_Description' => 'Abajo: %1$s',
|
||||
'UI:Schema:RelationUp_Description' => 'Arriba: %1$s',
|
||||
'UI:Schema:RelationPropagates' => '%1$s: propagar a %2$d niveles, consulta: %3$s',
|
||||
'UI:Schema:RelationDoesNotPropagate' => '%1$s: no se propaga(%2$d nivel), consulta: %3$s',
|
||||
'UI:Schema:Class_ReferencingClasses_From_By' => '%1$s esta referenciado por la clase %2$s a travez de el campo %3$s',
|
||||
'UI:Schema:Class_IsLinkedTo_Class_Via_ClassAndAttribute' => '%1$s esta vinculado a %2$s a travez de %3$s::<em>%4$s</em>',
|
||||
'UI:Schema:Links:1-n' => 'Clases apuntando a %1$s (1:n enlaces):',
|
||||
'UI:Schema:Links:n-n' => 'Clases apuntando a %1$s (n:n enlaces):',
|
||||
'UI:Schema:Links:All' => 'Grafico de todos los casos relacionados',
|
||||
'UI:Schema:NoLifeCyle' => 'No hay ciclo de vida definido para esta clase.',
|
||||
'UI:Schema:LifeCycleTransitions' => 'Transiciones',
|
||||
'UI:Schema:LifeCyleAttributeOptions' => 'Opciones del atributo',
|
||||
'UI:Schema:LifeCycleHiddenAttribute' => 'Oculto',
|
||||
'UI:Schema:LifeCycleReadOnlyAttribute' => 'Solo-lectrura',
|
||||
'UI:Schema:LifeCycleMandatoryAttribute' => 'Mandatorio',
|
||||
'UI:Schema:LifeCycleAttributeMustChange' => 'Debe cambiar',
|
||||
'UI:Schema:LifeCycleAttributeMustPrompt' => 'Se le pedira al usuario que cambie el valor',
|
||||
'UI:Schema:LifeCycleEmptyList' => 'lista vacia',
|
||||
|
||||
'UI:LinksWidget:Autocomplete+' => 'Type the first 3 characters...',
|
||||
'UI:Combo:SelectValue' => '--- select a value ---',
|
||||
'UI:Label:SelectedObjects' => 'Selected objects: ',
|
||||
'UI:Label:AvailableObjects' => 'Available objects: ',
|
||||
'UI:Link_Class_Attributes' => '%1$s attributes',
|
||||
'UI:SelectAllToggle+' => 'Select All / Deselect All',
|
||||
'UI:AddObjectsOf_Class_LinkedWith_Class_Instance' => 'Add %1$s objects linked with %2$s: %3$s',
|
||||
'UI:ManageObjectsOf_Class_LinkedWith_Class_Instance' => 'Manage %1$s objects linked with %2$s: %3$s',
|
||||
'UI:AddLinkedObjectsOf_Class' => 'Add %1$ss...',
|
||||
'UI:RemoveLinkedObjectsOf_Class' => 'Remove selected objects',
|
||||
'UI:Message:EmptyList:UseAdd' => 'The list is empty, use the "Add..." button to add elements.',
|
||||
'UI:Message:EmptyList:UseSearchForm' => 'Use the search form above to search for objects to be added.',
|
||||
'UI:LinksWidget:Autocomplete+' => 'Escriba los primeros 3 caracteres...',
|
||||
'UI:Combo:SelectValue' => '--- seleccione un valor ---',
|
||||
'UI:Label:SelectedObjects' => 'Objetos seleccionados: ',
|
||||
'UI:Label:AvailableObjects' => 'Objetos disponibles: ',
|
||||
'UI:Link_Class_Attributes' => '%1$s atributos',
|
||||
'UI:SelectAllToggle+' => 'Seleccionar todo / Deseleccionar todo',
|
||||
'UI:AddObjectsOf_Class_LinkedWith_Class_Instance' => 'Agregar %1$s objetos vinculados con %2$s: %3$s',
|
||||
'UI:ManageObjectsOf_Class_LinkedWith_Class_Instance' => 'Administrar %1$s objetos vinculados con %2$s: %3$s',
|
||||
'UI:AddLinkedObjectsOf_Class' => 'Agregar %1$ss...',
|
||||
'UI:RemoveLinkedObjectsOf_Class' => 'Eliminar los objetos seleccionados',
|
||||
'UI:Message:EmptyList:UseAdd' => 'La lista esta vaica, use el boton Agregar... para agregar elementos.',
|
||||
'UI:Message:EmptyList:UseSearchForm' => 'Use la forma arriba para buscar objetos a ser agregados.',
|
||||
|
||||
'UI:Wizard:FinalStepTitle' => 'Final step: confirmation',
|
||||
'UI:Title:DeletionOf_Object' => 'Deletion of %1$s',
|
||||
'UI:Title:BulkDeletionOf_Count_ObjectsOf_Class' => 'Bulk deletion of %1$d objects of class %2$s',
|
||||
'UI:Delete:NotAllowedToDelete' => 'You are not allowed to delete this object',
|
||||
'UI:Delete:NotAllowedToUpdate_Fields' => 'You are not allowed to update the following field(s): %1$s',
|
||||
'UI:Error:NotEnoughRightsToDelete' => 'This object could not be deleted because the current user do not have sufficient rights',
|
||||
'UI:Error:CannotDeleteBecauseOfDepencies' => 'This object could not be deleted because some manual operations must be performed prior to that',
|
||||
'UI:Archive_User_OnBehalfOf_User' => '%1$s on behalf of %2$s',
|
||||
'UI:Delete:AutomaticallyDeleted' => 'automatically deleted',
|
||||
'UI:Delete:AutomaticResetOf_Fields' => 'automatic reset of field(s): %1$s',
|
||||
'UI:Delete:CleaningUpRefencesTo_Object' => 'Cleaning up all references to %1$s...',
|
||||
'UI:Delete:CleaningUpRefencesTo_Several_ObjectsOf_Class' => 'Cleaning up all references to %1$d objects of class %2$s...',
|
||||
'UI:Delete:Done+' => 'What was done...',
|
||||
'UI:Delete:_Name_Class_Deleted' => '%1$s - %2$s deleted.',
|
||||
'UI:Delete:ConfirmDeletionOf_Name' => 'Deletion of %1$s',
|
||||
'UI:Delete:ConfirmDeletionOf_Count_ObjectsOf_Class' => 'Deletion of %1$d objects of class %2$s',
|
||||
'UI:Delete:ShouldBeDeletedAtomaticallyButNotAllowed' => 'Should be automaticaly deleted, but you are not allowed to do so',
|
||||
'UI:Delete:MustBeDeletedManuallyButNotAllowed' => 'Must be deleted manually - but you are not allowed to delete this object, please contact your application admin',
|
||||
'UI:Delete:WillBeDeletedAutomatically' => 'Will be automaticaly deleted',
|
||||
'UI:Delete:MustBeDeletedManually' => 'Must be deleted manually',
|
||||
'UI:Delete:CannotUpdateBecause_Issue' => 'Should be automatically updated, but: %1$s',
|
||||
'UI:Delete:WillAutomaticallyUpdate_Fields' => 'will be automaticaly updated (reset: %1$s)',
|
||||
'UI:Delete:Count_Objects/LinksReferencing_Object' => '%1$d objects/links are referencing %2$s',
|
||||
'UI:Delete:Count_Objects/LinksReferencingTheObjects' => '%1$d objects/links are referencing some of the objects to be deleted',
|
||||
'UI:Delete:ReferencesMustBeDeletedToEnsureIntegrity' => 'To ensure Database integrity, any reference should be further eliminated',
|
||||
'UI:Delete:Consequence+' => 'What will be done',
|
||||
'UI:Delete:SorryDeletionNotAllowed' => 'Sorry, you are not allowed to delete this object, see the detailed explanations above',
|
||||
'UI:Delete:PleaseDoTheManualOperations' => 'Please perform the manual operations listed above prior to requesting the deletion of this object',
|
||||
'UI:Delect:Confirm_Object' => 'Please confirm that you want to delete %1$s.',
|
||||
'UI:Delect:Confirm_Count_ObjectsOf_Class' => 'Please confirm that you want to delete the following %1$d objects of class %2$s.',
|
||||
'UI:WelcomeToITop' => 'Welcome to iTop',
|
||||
'UI:DetailsPageTitle' => 'iTop - %1$s - %2$s details',
|
||||
'UI:Wizard:FinalStepTitle' => 'Paso final: Confirmacion',
|
||||
'UI:Title:DeletionOf_Object' => 'Borrado de %1$s',
|
||||
'UI:Title:BulkDeletionOf_Count_ObjectsOf_Class' => 'Borrado por lote de %1$d objetos de la clase %2$s',
|
||||
'UI:Delete:NotAllowedToDelete' => 'No esta autorizado para borrar este objeto',
|
||||
'UI:Delete:NotAllowedToUpdate_Fields' => 'No esta autorizado para actualizar el siguiente campo(s): %1$s',
|
||||
'UI:Error:NotEnoughRightsToDelete' => 'Este objeto no pudo ser borrado porque el usuario actual no posee suficientes permisos',
|
||||
'UI:Error:CannotDeleteBecauseOfDepencies' => 'Este objeto no pudo ser borrado porque algunas operaciones manuales deben ser ejecutadas antes de eso',
|
||||
'UI:Archive_User_OnBehalfOf_User' => '%1$s en nombre de %2$s',
|
||||
'UI:Delete:AutomaticallyDeleted' => 'Borrado automaticamente',
|
||||
'UI:Delete:AutomaticResetOf_Fields' => 'reinicio automatico de campo(s): %1$s',
|
||||
'UI:Delete:CleaningUpRefencesTo_Object' => 'Limpiando todas las referencias a %1$s...',
|
||||
'UI:Delete:CleaningUpRefencesTo_Several_ObjectsOf_Class' => 'Limpiando todas las referencias a %1$d objetos de la clase %2$s...',
|
||||
'UI:Delete:Done+' => 'Lo que se hizo...',
|
||||
'UI:Delete:_Name_Class_Deleted' => '%1$s - %2$s borrado.',
|
||||
'UI:Delete:ConfirmDeletionOf_Name' => 'Borrado de %1$s',
|
||||
'UI:Delete:ConfirmDeletionOf_Count_ObjectsOf_Class' => 'Borrado de %1$d objetos de al clase %2$s',
|
||||
// 'UI:Delete:ShouldBeDeletedAtomaticallyButNotPossible' => 'Beberia ser eliminado automaticamente, pero usted no esta autorizado para hacerlo',
|
||||
// 'UI:Delete:MustBeDeletedManuallyButNotPossible' => 'Debe ser borrado manualmente - pero usted no esta autorizado para borrar este objeto, por favor contacte al administrador de la aplicacion',
|
||||
'UI:Delete:WillBeDeletedAutomatically' => 'Sera borrado automaticamente',
|
||||
'UI:Delete:MustBeDeletedManually' => 'Debe ser borrado manualmente',
|
||||
'UI:Delete:CannotUpdateBecause_Issue' => 'Debe ser actualizado automaticamente, pero: %1$s',
|
||||
'UI:Delete:WillAutomaticallyUpdate_Fields' => 'sera actualizado automaticamente (reset: %1$s)',
|
||||
'UI:Delete:Count_Objects/LinksReferencing_Object' => '%1$d objetos/vinculos estan referenciando %2$s',
|
||||
'UI:Delete:Count_Objects/LinksReferencingTheObjects' => '%1$d objetos/vinculos estan referenciando algunos de los objetos a ser borrados',
|
||||
'UI:Delete:ReferencesMustBeDeletedToEnsureIntegrity' => 'Para asegurar la integridad de la Base de Datos, cualquier referencia debera ser completamente eliminada',
|
||||
'UI:Delete:Consequence+' => 'Lo que se hara',
|
||||
'UI:Delete:SorryDeletionNotAllowed' => 'Disculpe, usted no esta autorizado a eliminar este objeto, vea la explciacion detallada abajo',
|
||||
'UI:Delete:PleaseDoTheManualOperations' => 'Por favor ejecute las operaciones manuales antes de eliminar este objeto',
|
||||
'UI:Delect:Confirm_Object' => 'Por favor confirme que quiere borrar %1$s.',
|
||||
'UI:Delect:Confirm_Count_ObjectsOf_Class' => 'Port favor confirme que quiere eliminar los siguientes %1$d objeto de la clase %2$s.',
|
||||
'UI:WelcomeToITop' => 'Bienvenido a iTop',
|
||||
'UI:DetailsPageTitle' => 'iTop - %1$s - %2$s detalles',
|
||||
'UI:ErrorPageTitle' => 'iTop - Error',
|
||||
'UI:ObjectDoesNotExist' => 'Sorry, this object does not exist (or you are not allowed to view it).',
|
||||
'UI:SearchResultsPageTitle' => 'iTop - Search Results',
|
||||
'UI:Search:NoSearch' => 'Nothing to search for',
|
||||
'UI:FullTextSearchTitle_Text' => 'Results for "%1$s":',
|
||||
'UI:Search:Count_ObjectsOf_Class_Found' => '%1$d object(s) of class %2$s found.',
|
||||
'UI:Search:NoObjectFound' => 'No object found.',
|
||||
'UI:ModificationPageTitle_Object_Class' => 'iTop - %1$s - %2$s modification',
|
||||
'UI:ModificationTitle_Class_Object' => 'Modification of %1$s: <span class=\"hilite\">%2$s</span>',
|
||||
'UI:ClonePageTitle_Object_Class' => 'iTop - Clone %1$s - %2$s modification',
|
||||
'UI:CloneTitle_Class_Object' => 'Clone of %1$s: <span class=\"hilite\">%2$s</span>',
|
||||
'UI:CreationPageTitle_Class' => 'iTop - Creation of a new %1$s ',
|
||||
'UI:CreationTitle_Class' => 'Creation of a new %1$s',
|
||||
'UI:SelectTheTypeOf_Class_ToCreate' => 'Select the type of %1$s to create:',
|
||||
'UI:Class_Object_NotUpdated' => 'No change detected, %1$s (%2$s) has <strong>not</strong> been modified.',
|
||||
'UI:Class_Object_Updated' => '%1$s (%2$s) updated.',
|
||||
'UI:BulkDeletePageTitle' => 'iTop - Bulk Delete',
|
||||
'UI:BulkDeleteTitle' => 'Select the objects you want to delete:',
|
||||
'UI:PageTitle:ObjectCreated' => 'iTop Object Created.',
|
||||
'UI:Title:Object_Of_Class_Created' => '%1$s - %2$s created.',
|
||||
'UI:Apply_Stimulus_On_Object_In_State_ToTarget_State' => 'Applying %1$s on object: %2$s in state %3$s to target state: %4$s.',
|
||||
'UI:ObjectCouldNotBeWritten' => 'The object could not be written: %1$s',
|
||||
'UI:PageTitle:FatalError' => 'iTop - Fatal Error',
|
||||
'UI:FatalErrorMessage' => 'Fatal error, iTop cannot continue.',
|
||||
'UI:SystemIntrusion' => 'Access denied. You have trying to perform an operation that is not allowed for you.',
|
||||
'UI:ObjectDoesNotExist' => 'Disculpe, este objeto no existe (o no esta autorizado para verlo).',
|
||||
'UI:SearchResultsPageTitle' => 'iTop - Resultados de la Busqueda',
|
||||
'UI:Search:NoSearch' => 'Nada para buscar',
|
||||
'UI:FullTextSearchTitle_Text' => 'Resultados para "%1$s":',
|
||||
'UI:Search:Count_ObjectsOf_Class_Found' => '%1$d objeto(s) de la clase %2$s encontrado(s).',
|
||||
'UI:Search:NoObjectFound' => 'No se encontraron objetos.',
|
||||
'UI:ModificationPageTitle_Object_Class' => 'iTop - %1$s - %2$s modificacion',
|
||||
'UI:ModificationTitle_Class_Object' => 'Modificacion de %1$s: <span class=\"hilite\">%2$s</span>',
|
||||
'UI:ClonePageTitle_Object_Class' => 'iTop - Duplicar %1$s - %2$s modificacion',
|
||||
'UI:CloneTitle_Class_Object' => 'Duplicado de %1$s: <span class=\"hilite\">%2$s</span>',
|
||||
'UI:CreationPageTitle_Class' => 'iTop - Creacion de un nuevo %1$s ',
|
||||
'UI:CreationTitle_Class' => 'Creacion de un nuevo %1$s',
|
||||
'UI:SelectTheTypeOf_Class_ToCreate' => 'Seleccione el tipo de %1$s a crear:',
|
||||
'UI:Class_Object_NotUpdated' => 'No se detectaron cambios, %1$s (%2$s) <strong>no</strong> fue modificado.',
|
||||
'UI:Class_Object_Updated' => '%1$s (%2$s) actualizado.',
|
||||
'UI:BulkDeletePageTitle' => 'iTop - Eliminar por lote',
|
||||
'UI:BulkDeleteTitle' => 'Seleccione los objetos que desea eliminar:',
|
||||
'UI:PageTitle:ObjectCreated' => 'Objeto de iTop creado.',
|
||||
'UI:Title:Object_Of_Class_Created' => '%1$s - %2$s creado.',
|
||||
'UI:Apply_Stimulus_On_Object_In_State_ToTarget_State' => 'Aplicando %1$s en el objeto: %2$s en estado %3$s al estado deseado: %4$s.',
|
||||
'UI:ObjectCouldNotBeWritten' => 'el objeto no pudo ser escrito: %1$s',
|
||||
'UI:PageTitle:FatalError' => 'iTop - Error Fatal',
|
||||
'UI:FatalErrorMessage' => 'Error fatal, iTop no puede continuar.',
|
||||
'UI:SystemIntrusion' => 'Acceso denegado. Esta tratando de ejecutar una operacion no permitida para usted.',
|
||||
'UI:Error_Details' => 'Error: %1$s.',
|
||||
|
||||
'UI:PageTitle:ClassProjections' => 'iTop user management - class projections',
|
||||
'UI:PageTitle:ProfileProjections' => 'iTop user management - profile projections',
|
||||
'UI:UserManagement:Class' => 'Class',
|
||||
'UI:UserManagement:Class+' => 'Class of objects',
|
||||
'UI:UserManagement:ProjectedObject' => 'Object',
|
||||
'UI:UserManagement:ProjectedObject+' => 'Projected object',
|
||||
'UI:UserManagement:AnyObject' => '* any *',
|
||||
'UI:UserManagement:User' => 'User',
|
||||
'UI:UserManagement:User+' => 'User involved in the projection',
|
||||
'UI:UserManagement:Profile' => 'Profile',
|
||||
'UI:UserManagement:Profile+' => 'Profile in which the projection is specified',
|
||||
'UI:UserManagement:Action:Read' => 'Read',
|
||||
'UI:UserManagement:Action:Read+' => 'Read/display objects',
|
||||
'UI:UserManagement:Action:Modify' => 'Modify',
|
||||
'UI:UserManagement:Action:Modify+' => 'Create and edit (modify) objects',
|
||||
'UI:UserManagement:Action:Delete' => 'Delete',
|
||||
'UI:UserManagement:Action:Delete+' => 'Delete objects',
|
||||
'UI:UserManagement:Action:BulkRead' => 'Bulk Read (Export)',
|
||||
'UI:UserManagement:Action:BulkRead+' => 'List objects or export massively',
|
||||
'UI:UserManagement:Action:BulkModify' => 'Bulk Modify',
|
||||
'UI:UserManagement:Action:BulkModify+' => 'Massively create/edit (CSV import)',
|
||||
'UI:UserManagement:Action:BulkDelete' => 'Bulk Delete',
|
||||
'UI:UserManagement:Action:BulkDelete+' => 'Massively delete objects',
|
||||
'UI:PageTitle:ClassProjections' => 'Administracion de usuarios iTop - proyecciones de clases',
|
||||
'UI:PageTitle:ProfileProjections' => 'Administracion de usuarios iTop - proyecciones de perfil',
|
||||
'UI:UserManagement:Class' => 'Clase',
|
||||
'UI:UserManagement:Class+' => 'Clase de objetos',
|
||||
'UI:UserManagement:ProjectedObject' => 'Objeto',
|
||||
'UI:UserManagement:ProjectedObject+' => 'Objeto proyectado',
|
||||
'UI:UserManagement:AnyObject' => '* cualquiera *',
|
||||
'UI:UserManagement:User' => 'Usuario',
|
||||
'UI:UserManagement:User+' => 'Usuario implicado en la proyeccion',
|
||||
'UI:UserManagement:Profile' => 'Perfil',
|
||||
'UI:UserManagement:Profile+' => 'Perfil en el cual se especifico la proyeccion',
|
||||
'UI:UserManagement:Action:Read' => 'Leer',
|
||||
'UI:UserManagement:Action:Read+' => 'Leer/Mostrar objetos',
|
||||
'UI:UserManagement:Action:Modify' => 'Modificar',
|
||||
'UI:UserManagement:Action:Modify+' => 'Crear y editar (modificar) objetos',
|
||||
'UI:UserManagement:Action:Delete' => 'Eliminar',
|
||||
'UI:UserManagement:Action:Delete+' => 'Eliminar objetos',
|
||||
'UI:UserManagement:Action:BulkRead' => 'Lectura por lote (Exportar)',
|
||||
'UI:UserManagement:Action:BulkRead+' => 'Listar objetos o exportar masivamente',
|
||||
'UI:UserManagement:Action:BulkModify' => 'Modificacion masiva',
|
||||
'UI:UserManagement:Action:BulkModify+' => 'Crear/Editar masivamente (importar CSV)',
|
||||
'UI:UserManagement:Action:BulkDelete' => 'eliminacion masiva',
|
||||
'UI:UserManagement:Action:BulkDelete+' => 'eliminacion masiva de objetos',
|
||||
'UI:UserManagement:Action:Stimuli' => 'Stimuli',
|
||||
'UI:UserManagement:Action:Stimuli+' => 'Allowed (compound) actions',
|
||||
'UI:UserManagement:Action' => 'Action',
|
||||
'UI:UserManagement:Action+' => 'Action performed by the user',
|
||||
'UI:UserManagement:TitleActions' => 'Actions',
|
||||
'UI:UserManagement:Permission' => 'Permission',
|
||||
'UI:UserManagement:Permission+' => 'User\'s permissions',
|
||||
'UI:UserManagement:Attributes' => 'Attributes',
|
||||
'UI:UserManagement:ActionAllowed:Yes' => 'Yes',
|
||||
'UI:UserManagement:Action:Stimuli+' => 'Acciones (compound) permitidas',
|
||||
'UI:UserManagement:Action' => 'Accion',
|
||||
'UI:UserManagement:Action+' => 'Accion ejecutada por el usuario',
|
||||
'UI:UserManagement:TitleActions' => 'Acciones',
|
||||
'UI:UserManagement:Permission' => 'Permisos',
|
||||
'UI:UserManagement:Permission+' => 'Permisos de usuario',
|
||||
'UI:UserManagement:Attributes' => 'Atributos',
|
||||
'UI:UserManagement:ActionAllowed:Yes' => 'Si',
|
||||
'UI:UserManagement:ActionAllowed:No' => 'No',
|
||||
'UI:UserManagement:AdminProfile+' => 'Administrators have full read/write access to all objects in the database.',
|
||||
'UI:UserManagement:AdminProfile+' => 'Los administradores tienen acceso total de lectura/escritura para todos los objetos en la base de datos.',
|
||||
'UI:UserManagement:NoLifeCycleApplicable' => 'N/A',
|
||||
'UI:UserManagement:NoLifeCycleApplicable+' => 'No lifecycle has been defined for this class',
|
||||
'UI:UserManagement:GrantMatrix' => 'Grant Matrix',
|
||||
'UI:UserManagement:LinkBetween_User_And_Profile' => 'Link between %1$s and %2$s',
|
||||
'UI:UserManagement:NoLifeCycleApplicable+' => 'No se ha definido ciclo de vida para esta clase',
|
||||
'UI:UserManagement:GrantMatrix' => 'Matriz de acceso',
|
||||
'UI:UserManagement:LinkBetween_User_And_Profile' => 'Vinculo entre %1$s y %2$s',
|
||||
|
||||
'Menu:AdminTools' => 'Admin tools',
|
||||
'Menu:AdminTools+' => 'Administration tools',
|
||||
'Menu:AdminTools?' => 'Tools accessible only to users having the administrator profile',
|
||||
'Menu:AdminTools' => 'Herramientas Administrativas',
|
||||
'Menu:AdminTools+' => 'Herramientas de administracion',
|
||||
'Menu:AdminTools?' => 'Herramientas accesibles soloa usuariso con perfil de administrador',
|
||||
|
||||
'UI:ChangeManagementMenu' => 'Change Management',
|
||||
'UI:ChangeManagementMenu+' => 'Change Management',
|
||||
'UI:ChangeManagementMenu:Title' => 'Changes Overview',
|
||||
'UI-ChangeManagementMenu-ChangesByType' => 'Changes by type',
|
||||
'UI-ChangeManagementMenu-ChangesByStatus' => 'Changes by status',
|
||||
'UI-ChangeManagementMenu-ChangesByWorkgroup' => 'Changes by workgroup',
|
||||
'UI-ChangeManagementMenu-ChangesNotYetAssigned' => 'Changes not yet assigned',
|
||||
'UI:ChangeManagementMenu' => 'Control de Cambios',
|
||||
'UI:ChangeManagementMenu+' => 'Control de Cambios',
|
||||
'UI:ChangeManagementMenu:Title' => 'Sumario de cambios',
|
||||
'UI-ChangeManagementMenu-ChangesByType' => 'Cambios por tipo',
|
||||
'UI-ChangeManagementMenu-ChangesByStatus' => 'Cambios por estado',
|
||||
'UI-ChangeManagementMenu-ChangesByWorkgroup' => 'Cambios por grupo de trabajo',
|
||||
'UI-ChangeManagementMenu-ChangesNotYetAssigned' => 'Cambios no asignados aun',
|
||||
|
||||
'UI:ConfigurationItemsMenu'=> 'Configuration Items',
|
||||
'UI:ConfigurationItemsMenu+'=> 'All Devices',
|
||||
'UI:ConfigurationItemsMenu:Title' => 'Configuration Items Overview',
|
||||
'UI-ConfigurationItemsMenu-ServersByCriticity' => 'Servers by criticity',
|
||||
'UI-ConfigurationItemsMenu-PCsByCriticity' => 'PCs by criticity',
|
||||
'UI-ConfigurationItemsMenu-NWDevicesByCriticity' => 'Network devices by criticity',
|
||||
'UI-ConfigurationItemsMenu-ApplicationsByCriticity' => 'Applications by criticity',
|
||||
'UI:ConfigurationItemsMenu'=> 'Elementos de configuracion',
|
||||
'UI:ConfigurationItemsMenu+'=> 'Todos los dispositivos',
|
||||
'UI:ConfigurationItemsMenu:Title' => 'Sumario de Elementos de Configuracion',
|
||||
'UI-ConfigurationItemsMenu-ServersByCriticity' => 'Servidores por criticidad',
|
||||
'UI-ConfigurationItemsMenu-PCsByCriticity' => 'PCs por criticidad',
|
||||
'UI-ConfigurationItemsMenu-NWDevicesByCriticity' => 'Dispositivos de red por criticidad',
|
||||
'UI-ConfigurationItemsMenu-ApplicationsByCriticity' => 'Aplicaciones por criticidad',
|
||||
|
||||
'UI:ConfigurationManagementMenu' => 'Configuration Management',
|
||||
'UI:ConfigurationManagementMenu+' => 'Configuration Management',
|
||||
'UI:ConfigurationManagementMenu:Title' => 'Infrastructure Overview',
|
||||
'UI-ConfigurationManagementMenu-InfraByType' => 'Infrastructure objects by type',
|
||||
'UI-ConfigurationManagementMenu-InfraByStatus' => 'Infrastructure objects by status',
|
||||
'UI:ConfigurationManagementMenu' => 'Gestion de la Configuracion',
|
||||
'UI:ConfigurationManagementMenu+' => 'Gestion de la Configuracion',
|
||||
'UI:ConfigurationManagementMenu:Title' => 'Sumario de Infrastructura',
|
||||
'UI-ConfigurationManagementMenu-InfraByType' => 'Objetos de infrastructura por tipo',
|
||||
'UI-ConfigurationManagementMenu-InfraByStatus' => 'Objetos de infraestructura por estatus',
|
||||
|
||||
'UI:ConfigMgmtMenuOverview:Title' => 'Dashboard for Configuration Management',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIbyStatus' => 'Configuration Items by status',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIByType' => 'Configuration Items by type',
|
||||
'UI:ConfigMgmtMenuOverview:Title' => 'Panel de control for Gestion de la Configuracion',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIbyStatus' => 'Elementos de la configuracion por estado',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIByType' => 'elementos de configuracion por tipo',
|
||||
|
||||
'UI:RequestMgmtMenuOverview:Title' => 'Dashboard for Request Management',
|
||||
'UI-RequestManagementOverview-RequestByService' => 'User Requests by service',
|
||||
'UI-RequestManagementOverview-RequestByPriority' => 'User Requests by priority',
|
||||
'UI-RequestManagementOverview-RequestUnassigned' => 'User Requests not yet assigned to an agent',
|
||||
'UI:RequestMgmtMenuOverview:Title' => 'Panel de control for Gestion de Solicitudes',
|
||||
'UI-RequestManagementOverview-RequestByService' => 'Solicitudes de usuario por servicio',
|
||||
'UI-RequestManagementOverview-RequestByPriority' => 'Solicitudes de usuario por prioridad',
|
||||
'UI-RequestManagementOverview-RequestUnassigned' => 'Solicitudes de usuario sin asignar a un agente',
|
||||
|
||||
'UI:IncidentMgmtMenuOverview:Title' => 'Dashboard for Incident Management',
|
||||
'UI-IncidentManagementOverview-IncidentByService' => 'Incidents by service',
|
||||
'UI-IncidentManagementOverview-IncidentByPriority' => 'Incident by priority',
|
||||
'UI-IncidentManagementOverview-IncidentUnassigned' => 'Incidents not yet assigned to an agent',
|
||||
'UI:IncidentMgmtMenuOverview:Title' => 'Panel de control for Gestion de Incidentes',
|
||||
'UI-IncidentManagementOverview-IncidentByService' => 'Incidentes por servicio',
|
||||
'UI-IncidentManagementOverview-IncidentByPriority' => 'Incidentes por prioridad',
|
||||
'UI-IncidentManagementOverview-IncidentUnassigned' => 'Incidentes no asignados a un agente',
|
||||
|
||||
'UI:ChangeMgmtMenuOverview:Title' => 'Dashboard for Change Management',
|
||||
'UI-ChangeManagementOverview-ChangeByType' => 'Changes by type',
|
||||
'UI-ChangeManagementOverview-ChangeUnassigned' => 'Changes not yet assigned to an agent',
|
||||
'UI-ChangeManagementOverview-ChangeWithOutage' => 'Outages due to changes',
|
||||
'UI:ChangeMgmtMenuOverview:Title' => 'Panel de control for Control de Cambios',
|
||||
'UI-ChangeManagementOverview-ChangeByType' => 'Cambios por tipo',
|
||||
'UI-ChangeManagementOverview-ChangeUnassigned' => 'Cambios no asignados a un agente',
|
||||
'UI-ChangeManagementOverview-ChangeWithOutage' => 'Interrupciones de servicios debida a cambios',
|
||||
|
||||
'UI:ServiceMgmtMenuOverview:Title' => 'Dashboard for Service Management',
|
||||
'UI-ServiceManagementOverview-CustomerContractToRenew' => 'Customer contracts to be renewed in 30 days',
|
||||
'UI-ServiceManagementOverview-ProviderContractToRenew' => 'Provider contracts to be renewed in 30 days',
|
||||
'UI:ServiceMgmtMenuOverview:Title' => 'Panel de control for Gestion de Servicios',
|
||||
'UI-ServiceManagementOverview-CustomerContractToRenew' => 'Contratos de usuario a ser renovados en 30 dias',
|
||||
'UI-ServiceManagementOverview-ProviderContractToRenew' => 'contratos de proveedores a ser renovados en 30 dias',
|
||||
|
||||
'UI:ContactsMenu' => 'Contacts',
|
||||
'UI:ContactsMenu+' => 'Contacts',
|
||||
'UI:ContactsMenu:Title' => 'Contacts Overview',
|
||||
'UI-ContactsMenu-ContactsByLocation' => 'Contacts by location',
|
||||
'UI-ContactsMenu-ContactsByType' => 'Contacts by type',
|
||||
'UI-ContactsMenu-ContactsByStatus' => 'Contacts by status',
|
||||
'UI:ContactsMenu' => 'Contactos',
|
||||
'UI:ContactsMenu+' => 'Contactos',
|
||||
'UI:ContactsMenu:Title' => 'Sumario de Contactos',
|
||||
'UI-ContactsMenu-ContactsByLocation' => 'Contactos por ubicacion',
|
||||
'UI-ContactsMenu-ContactsByType' => 'Contactos por tipo',
|
||||
'UI-ContactsMenu-ContactsByStatus' => 'Contactos por estado',
|
||||
|
||||
'Menu:CSVImportMenu' => 'CSV import',
|
||||
'Menu:CSVImportMenu+' => 'Bulk creation or update',
|
||||
'Menu:CSVImportMenu' => 'Importar CSV',
|
||||
'Menu:CSVImportMenu+' => 'Creacion o actualizacion masiva',
|
||||
|
||||
'Menu:DataModelMenu' => 'Data Model',
|
||||
'Menu:DataModelMenu+' => 'Overview of the Data Model',
|
||||
'Menu:DataModelMenu' => 'Modelo de Datos',
|
||||
'Menu:DataModelMenu+' => 'Sumario del Modelo de Datos',
|
||||
|
||||
'Menu:ExportMenu' => 'Export',
|
||||
'Menu:ExportMenu+' => 'Export the results of any query in HTML, CSV or XML',
|
||||
'Menu:ExportMenu' => 'Exportar',
|
||||
'Menu:ExportMenu+' => 'Exportar los resultados de cualquier consulta eb HTML, CSV o XML',
|
||||
|
||||
'Menu:NotificationsMenu' => 'Notifications',
|
||||
'Menu:NotificationsMenu+' => 'Configuration of the Notifications',
|
||||
'UI:NotificationsMenu:Title' => 'Configuration of the <span class="hilite">Notifications</span>',
|
||||
'UI:NotificationsMenu:Help' => 'Help',
|
||||
'UI:NotificationsMenu:HelpContent' => '<p>In iTop the notifications are fully customizable. They are based on two sets of objects: <i>triggers and actions</i>.</p>
|
||||
<p><i><b>Triggers</b></i> define when a notification will be executed. There are 3 types of triggers for covering 3 differents phases of an object life cycle:
|
||||
'Menu:NotificationsMenu' => 'Notificaciones',
|
||||
'Menu:NotificationsMenu+' => 'Configuracion de las Notificaciones',
|
||||
'UI:NotificationsMenu:Title' => 'Configuracion de las <span class="hilite">Notificaciones</span>',
|
||||
'UI:NotificationsMenu:Help' => 'Ayuda',
|
||||
'UI:NotificationsMenu:HelpContent' => '<p>En iTop las notificaciones son completamente personalizables. Estan basadas en dos conjuntos de objetos: <i>Gatuillos y acciones</i>.</p>
|
||||
<p><i><b>Gatillos</b></i> definen cuando una notificacion debe ser ejecutada. existen 3 tipos de gatillos para cubrir las 3 diferentes fases del ciclo de vida de un objeto:
|
||||
<ol>
|
||||
<li>the "OnCreate" triggers get executed when an object of the specified class is created</li>
|
||||
<li>the "OnStateEnter" triggers get executed before an object of the given class enters a specified state (coming from another state)</li>
|
||||
<li>the "OnStateLeave" triggers get executed when an object of the given class is leaving a specified state</li>
|
||||
<li>los gatillos "OnCreate" son ejecutados cuando un objeto de la clase especificada es creado</li>
|
||||
<li>los gatillos "OnStateEnter" son ejecutados antes de que un determinado objeto entre un estado especificado (viniendo de otro estado)</li>
|
||||
<li>los gatillos "OnStateLeave" son ejecutados cuando un objeto de clase determinada deja un estado especificado</li>
|
||||
</ol>
|
||||
</p>
|
||||
<p>
|
||||
<i><b>Actions</b></i> define the actions to be performed when the triggers execute. For now there is only one kind of action consisting in sending an email message.
|
||||
Such actions also define the template to be used for sending the email as well as the other parameters of the message like the recipients, importance, etc.
|
||||
<i><b>Acciones</b></i> definen las acciones a ser ejecutadas cuando los gatillos se disparan, por ahora el unico tipo de accion consiste en enviar un mensaje de correo.
|
||||
Tales acciones tambien definen la plantilla a ser usada para enviar el correo asi como otros parametros del mensaje como receptor, importancia, etc.
|
||||
</p>
|
||||
<p>A special page: <a href="../setup/email.test.php" target="_blank">email.test.php</a> is available for testing and troubleshooting your PHP mail configuration.</p>
|
||||
<p>To be executed, actions must be associated to triggers.
|
||||
When associated with a trigger, each action is given an "order" number, specifying in which order the actions are to be executed.</p>',
|
||||
<p>Una pagina especial: <a href="../setup/email.test.php" target="_blank">email.test.php</a> esta disponible para pruebar y diagnosticar su configuracion de correo de PHP.</p>
|
||||
<p>Para ser ejecutadas, las acciones deben estar asociadas con los gatillos.
|
||||
Cuando se asocien con un gatillo, cada accion recibe un numero de "orden", esto especifica en que orden se ejecutaran las acciones.</p>',
|
||||
'UI:NotificationsMenu:Triggers' => 'Disparadores',
|
||||
'UI:NotificationsMenu:AvailableTriggers' => 'Disparadores disponiblesAvailable triggers',
|
||||
'UI:NotificationsMenu:AvailableTriggers' => 'Disparadores disponibles',
|
||||
'UI:NotificationsMenu:OnCreate' => 'cuando un objeto es creado',
|
||||
'UI:NotificationsMenu:OnStateEnter' => 'Cuando un objeto entra a un estado específico',
|
||||
'UI:NotificationsMenu:OnStateLeave' => 'Cuando un objeto sale de un estado específico',
|
||||
@@ -823,7 +827,7 @@ When associated with a trigger, each action is given an "order" number, specifyi
|
||||
'Menu:UserAccountsMenu:Title' => 'Cuentas de usuario',
|
||||
|
||||
'UI:iTopVersion:Short' => 'iTop versión %1$s',
|
||||
'UI:iTopVersion:Long' => 'iTop versión %1$s-%2$s built on %3$s',
|
||||
'UI:iTopVersion:Long' => 'iTop versión %1$s-%2$s compilada en %3$s',
|
||||
'UI:PropertiesTab' => 'Propiedades',
|
||||
|
||||
'UI:OpenDocumentInNewWindow_' => 'Abra este documento en una ventana nueva: %1$s',
|
||||
@@ -836,7 +840,9 @@ When associated with a trigger, each action is given an "order" number, specifyi
|
||||
'UI:Deadline_Hours_Minutes' => '%1$dh %2$dmin',
|
||||
'UI:Deadline_Days_Hours_Minutes' => '%1$dd %2$dh %3$dmin',
|
||||
'UI:Help' => 'Ayuda',
|
||||
'UI:PasswordConfirm' => '(Confirm)',
|
||||
'UI:PasswordConfirm' => '(Confirmar)',
|
||||
|
||||
'Enum:Undefined' => 'Indefinido',
|
||||
));
|
||||
|
||||
?>
|
||||
|
||||
@@ -15,373 +15,570 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @author Erwan Taloc <erwan.taloc@combodo.com>
|
||||
* @author Romain Quetiez <romain.quetiez@combodo.com>
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
* @author Erwan Taloc <erwan.taloc@combodo.com>
|
||||
* @author Romain Quetiez <romain.quetiez@combodo.com>
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
* @licence http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'core/cmdb'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
//
|
||||
// Class: CMDBChange
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:CMDBChange' => 'change',
|
||||
'Class:CMDBChange+' => 'Changes tracking',
|
||||
'Class:CMDBChange/Attribute:date' => 'date',
|
||||
'Class:CMDBChange/Attribute:date+' => 'date and time at which the changes have been recorded',
|
||||
'Class:CMDBChange/Attribute:userinfo' => 'misc. info',
|
||||
'Class:CMDBChange/Attribute:userinfo+' => 'caller\'s defined information',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOp
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:CMDBChangeOp' => 'change operation',
|
||||
'Class:CMDBChangeOp+' => 'Change operations tracking',
|
||||
'Class:CMDBChangeOp/Attribute:change' => 'change',
|
||||
'Class:CMDBChangeOp/Attribute:change+' => 'change',
|
||||
'Class:CMDBChangeOp/Attribute:date' => 'date',
|
||||
'Class:CMDBChangeOp/Attribute:date+' => 'date and time of the change',
|
||||
'Class:CMDBChangeOp/Attribute:userinfo' => 'user',
|
||||
'Class:CMDBChangeOp/Attribute:userinfo+' => 'who made this change',
|
||||
'Class:CMDBChangeOp/Attribute:objclass' => 'object class',
|
||||
'Class:CMDBChangeOp/Attribute:objclass+' => 'object class',
|
||||
'Class:CMDBChangeOp/Attribute:objkey' => 'object id',
|
||||
'Class:CMDBChangeOp/Attribute:objkey+' => 'object id',
|
||||
'Class:CMDBChangeOp/Attribute:finalclass' => 'type',
|
||||
'Class:CMDBChangeOp/Attribute:finalclass+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpCreate
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:CMDBChangeOpCreate' => 'object creation',
|
||||
'Class:CMDBChangeOpCreate+' => 'Object creation tracking',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpDelete
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:CMDBChangeOpDelete' => 'object deletion',
|
||||
'Class:CMDBChangeOpDelete+' => 'Object deletion tracking',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpSetAttribute
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:CMDBChangeOpSetAttribute' => 'object change',
|
||||
'Class:CMDBChangeOpSetAttribute+' => 'Object properties change tracking',
|
||||
'Class:CMDBChangeOpSetAttribute/Attribute:attcode' => 'Attribute',
|
||||
'Class:CMDBChangeOpSetAttribute/Attribute:attcode+' => 'code of the modified property',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpSetAttributeScalar
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:CMDBChangeOpSetAttributeScalar' => 'property change',
|
||||
'Class:CMDBChangeOpSetAttributeScalar+' => 'Object scalar properties change tracking',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue' => 'Previous value',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue+' => 'previous value of the attribute',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue' => 'New value',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue+' => 'new value of the attribute',
|
||||
));
|
||||
// Used by CMDBChangeOp... & derived classes
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Change:ObjectCreated' => 'Elément créé',
|
||||
'Change:ObjectDeleted' => 'Elément effacé',
|
||||
'Change:AttName_SetTo_NewValue_PreviousValue_OldValue' => '%1$s modifié en %2$s (ancienne valeur: %3$s)',
|
||||
'Change:Text_AppendedTo_AttName' => '%1$s ajouté à %2$s',
|
||||
'Change:AttName_Changed_PreviousValue_OldValue' => '%1$s modifié, ancienne valeur: %2$s',
|
||||
'Change:AttName_Changed' => '%1$s modifié',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpSetAttributeBlob
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:CMDBChangeOpSetAttributeBlob' => 'data change',
|
||||
'Class:CMDBChangeOpSetAttributeBlob+' => 'data change tracking',
|
||||
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata' => 'Previous data',
|
||||
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata+' => 'previous contents of the attribute',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpSetAttributeText
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:CMDBChangeOpSetAttributeText' => 'text change',
|
||||
'Class:CMDBChangeOpSetAttributeText+' => 'text change tracking',
|
||||
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata' => 'Previous data',
|
||||
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata+' => 'previous contents of the attribute',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: Event
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:Event' => 'Log Event',
|
||||
'Class:Event+' => 'An application internal event',
|
||||
'Class:Event/Attribute:message' => 'message',
|
||||
'Class:Event/Attribute:message+' => 'short description of the event',
|
||||
'Class:Event/Attribute:date' => 'date',
|
||||
'Class:Event/Attribute:date+' => 'date and time at which the changes have been recorded',
|
||||
'Class:Event/Attribute:userinfo' => 'user info',
|
||||
'Class:Event/Attribute:userinfo+' => 'identification of the user that was doing the action that triggered this event',
|
||||
'Class:Event/Attribute:finalclass' => 'type',
|
||||
'Class:Event/Attribute:finalclass+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: EventNotification
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:EventNotification' => 'Notification event',
|
||||
'Class:EventNotification+' => 'Trace of a notification that has been sent',
|
||||
'Class:EventNotification/Attribute:trigger_id' => 'Trigger',
|
||||
'Class:EventNotification/Attribute:trigger_id+' => 'user account',
|
||||
'Class:EventNotification/Attribute:action_id' => 'user',
|
||||
'Class:EventNotification/Attribute:action_id+' => 'user account',
|
||||
'Class:EventNotification/Attribute:object_id' => 'Object id',
|
||||
'Class:EventNotification/Attribute:object_id+' => 'object id (class defined by the trigger ?)',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: EventNotificationEmail
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:EventNotificationEmail' => 'Email emission event',
|
||||
'Class:EventNotificationEmail+' => 'Trace of an email that has been sent',
|
||||
'Class:EventNotificationEmail/Attribute:to' => 'TO',
|
||||
'Class:EventNotificationEmail/Attribute:to+' => 'TO',
|
||||
'Class:EventNotificationEmail/Attribute:cc' => 'CC',
|
||||
'Class:EventNotificationEmail/Attribute:cc+' => 'CC',
|
||||
'Class:EventNotificationEmail/Attribute:bcc' => 'BCC',
|
||||
'Class:EventNotificationEmail/Attribute:bcc+' => 'BCC',
|
||||
'Class:EventNotificationEmail/Attribute:from' => 'From',
|
||||
'Class:EventNotificationEmail/Attribute:from+' => 'Sender of the message',
|
||||
'Class:EventNotificationEmail/Attribute:subject' => 'Subject',
|
||||
'Class:EventNotificationEmail/Attribute:subject+' => 'Subject',
|
||||
'Class:EventNotificationEmail/Attribute:body' => 'Body',
|
||||
'Class:EventNotificationEmail/Attribute:body+' => 'Body',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: EventIssue
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:EventIssue' => 'Issue event',
|
||||
'Class:EventIssue+' => 'Trace of an issue (warning, error, etc.)',
|
||||
'Class:EventIssue/Attribute:issue' => 'Issue',
|
||||
'Class:EventIssue/Attribute:issue+' => 'What happened',
|
||||
'Class:EventIssue/Attribute:impact' => 'Impact',
|
||||
'Class:EventIssue/Attribute:impact+' => 'What are the consequences',
|
||||
'Class:EventIssue/Attribute:page' => 'Page',
|
||||
'Class:EventIssue/Attribute:page+' => 'HTTP entry point',
|
||||
'Class:EventIssue/Attribute:arguments_post' => 'Posted arguments',
|
||||
'Class:EventIssue/Attribute:arguments_post+' => 'HTTP POST arguments',
|
||||
'Class:EventIssue/Attribute:arguments_get' => 'URL arguments',
|
||||
'Class:EventIssue/Attribute:arguments_get+' => 'HTTP GET arguments',
|
||||
'Class:EventIssue/Attribute:callstack' => 'Callstack',
|
||||
'Class:EventIssue/Attribute:callstack+' => 'Call stack',
|
||||
'Class:EventIssue/Attribute:data' => 'Data',
|
||||
'Class:EventIssue/Attribute:data+' => 'More information',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: EventWebService
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:EventWebService' => 'Web service event',
|
||||
'Class:EventWebService+' => 'Trace of an web service call',
|
||||
'Class:EventWebService/Attribute:verb' => 'Verb',
|
||||
'Class:EventWebService/Attribute:verb+' => 'Name of the operation',
|
||||
'Class:EventWebService/Attribute:result' => 'Result',
|
||||
'Class:EventWebService/Attribute:result+' => 'Overall success/failure',
|
||||
'Class:EventWebService/Attribute:log_info' => 'Info log',
|
||||
'Class:EventWebService/Attribute:log_info+' => 'Result info log',
|
||||
'Class:EventWebService/Attribute:log_warning' => 'Warning log',
|
||||
'Class:EventWebService/Attribute:log_warning+' => 'Result warning log',
|
||||
'Class:EventWebService/Attribute:log_error' => 'Error log',
|
||||
'Class:EventWebService/Attribute:log_error+' => 'Result error log',
|
||||
'Class:EventWebService/Attribute:data' => 'Data',
|
||||
'Class:EventWebService/Attribute:data+' => 'Result data',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: Action
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:Action' => 'action',
|
||||
'Class:Action+' => 'Custom action',
|
||||
'Class:Action/Attribute:name' => 'Name',
|
||||
'Class:Action/Attribute:name+' => 'label',
|
||||
'Class:Action/Attribute:description' => 'Description',
|
||||
'Class:Action/Attribute:description+' => 'one line description',
|
||||
'Class:Action/Attribute:status' => 'Status',
|
||||
'Class:Action/Attribute:status+' => 'In production or ?',
|
||||
'Class:Action/Attribute:status/Value:test' => 'Being tested',
|
||||
'Class:Action/Attribute:status/Value:test+' => 'Being tested',
|
||||
'Class:Action/Attribute:status/Value:enabled' => 'In production',
|
||||
'Class:Action/Attribute:status/Value:enabled+' => 'In production',
|
||||
'Class:Action/Attribute:status/Value:disabled' => 'Inactive',
|
||||
'Class:Action/Attribute:status/Value:disabled+' => 'Inactive',
|
||||
'Class:Action/Attribute:trigger_list' => 'Related Triggers',
|
||||
'Class:Action/Attribute:trigger_list+' => 'Triggers linked to this action',
|
||||
'Class:Action/Attribute:finalclass' => 'Type',
|
||||
'Class:Action/Attribute:finalclass+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: ActionNotification
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:ActionNotification' => 'notification',
|
||||
'Class:ActionNotification+' => 'Notification (abstract)',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: ActionEmail
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:ActionEmail' => 'email notification',
|
||||
'Class:ActionEmail+' => 'Action: Email notification',
|
||||
'Class:ActionEmail/Attribute:test_recipient' => 'Test recipient',
|
||||
'Class:ActionEmail/Attribute:test_recipient+' => 'Detination in case status is set to "Test"',
|
||||
'Class:ActionEmail/Attribute:from' => 'From',
|
||||
'Class:ActionEmail/Attribute:from+' => 'Will be sent into the email header',
|
||||
'Class:ActionEmail/Attribute:reply_to' => 'Reply to',
|
||||
'Class:ActionEmail/Attribute:reply_to+' => 'Will be sent into the email header',
|
||||
'Class:ActionEmail/Attribute:to' => 'To',
|
||||
'Class:ActionEmail/Attribute:to+' => 'Destination of the email',
|
||||
'Class:ActionEmail/Attribute:cc' => 'Cc',
|
||||
'Class:ActionEmail/Attribute:cc+' => 'Carbon Copy',
|
||||
'Class:ActionEmail/Attribute:bcc' => 'bcc',
|
||||
'Class:ActionEmail/Attribute:bcc+' => 'Blind Carbon Copy',
|
||||
'Class:ActionEmail/Attribute:subject' => 'subject',
|
||||
'Class:ActionEmail/Attribute:subject+' => 'Title of the email',
|
||||
'Class:ActionEmail/Attribute:body' => 'body',
|
||||
'Class:ActionEmail/Attribute:body+' => 'Contents of the email',
|
||||
'Class:ActionEmail/Attribute:importance' => 'importance',
|
||||
'Class:ActionEmail/Attribute:importance+' => 'Importance flag',
|
||||
'Class:ActionEmail/Attribute:importance/Value:low' => 'low',
|
||||
'Class:ActionEmail/Attribute:importance/Value:low+' => 'low',
|
||||
'Class:ActionEmail/Attribute:importance/Value:normal' => 'normal',
|
||||
'Class:ActionEmail/Attribute:importance/Value:normal+' => 'normal',
|
||||
'Class:ActionEmail/Attribute:importance/Value:high' => 'high',
|
||||
'Class:ActionEmail/Attribute:importance/Value:high+' => 'high',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: Trigger
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:ActionEmail/Attribute:test_recipient' => 'Destinataire de test',
|
||||
'Class:ActionEmail/Attribute:test_recipient+' => '',
|
||||
'Class:ActionEmail/Attribute:from' => 'De',
|
||||
'Class:ActionEmail/Attribute:from+' => '',
|
||||
'Class:ActionEmail/Attribute:reply_to' => 'Répondre à',
|
||||
'Class:ActionEmail/Attribute:reply_to+' => '',
|
||||
'Class:ActionEmail/Attribute:to' => 'A',
|
||||
'Class:ActionEmail/Attribute:to+' => '',
|
||||
'Class:ActionEmail/Attribute:cc' => 'Copie',
|
||||
'Class:ActionEmail/Attribute:cc+' => '',
|
||||
'Class:ActionEmail/Attribute:bcc' => 'Copie Cachée',
|
||||
'Class:ActionEmail/Attribute:bcc+' => '',
|
||||
'Class:ActionEmail/Attribute:subject' => 'Sujet',
|
||||
'Class:ActionEmail/Attribute:subject+' => '',
|
||||
'Class:ActionEmail/Attribute:body' => 'Message',
|
||||
'Class:ActionEmail/Attribute:body+' => '',
|
||||
'Class:ActionEmail/Attribute:importance' => 'Importance',
|
||||
'Class:ActionEmail/Attribute:importance+' => '',
|
||||
'Class:ActionEmail/Attribute:importance/Value:high' => 'Haute',
|
||||
'Class:ActionEmail/Attribute:importance/Value:high+' => '',
|
||||
'Class:ActionEmail/Attribute:importance/Value:low' => 'Basse',
|
||||
'Class:ActionEmail/Attribute:importance/Value:low+' => '',
|
||||
'Class:ActionEmail/Attribute:importance/Value:normal' => 'Normale',
|
||||
'Class:ActionEmail/Attribute:importance/Value:normal+' => '',
|
||||
'Class:TriggerOnStateEnter' => 'Déclencheur sur un objet entrant dans un état',
|
||||
'Class:TriggerOnStateEnter+' => '',
|
||||
'Class:TriggerOnStateLeave' => 'Déclencheur sur un objet quitant un état',
|
||||
'Class:TriggerOnStateLeave+' => '',
|
||||
'Class:TriggerOnObjectCreate' => 'Déclencheur sur la création d\'un objet',
|
||||
'Class:TriggerOnObjectCreate+' => '',
|
||||
'Class:lnkTriggerAction' => 'Actions-Déclencheur',
|
||||
'Class:lnkTriggerAction+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:action_id' => 'Action',
|
||||
'Class:lnkTriggerAction/Attribute:action_id+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:action_name' => 'Nom de l\'action',
|
||||
'Class:lnkTriggerAction/Attribute:action_name+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_id' => 'Déclencheur',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_id+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_name' => 'Nom du déclencheur',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_name+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:order' => 'Ordre',
|
||||
'Class:lnkTriggerAction/Attribute:order+' => '',
|
||||
'Class:AsyncSendEmail' => 'Envoi d\'Email Asynchrone',
|
||||
'Class:AsyncSendEmail+' => '',
|
||||
'Class:AsyncSendEmail/Attribute:to' => 'A',
|
||||
'Class:AsyncSendEmail/Attribute:to+' => '',
|
||||
'Class:AsyncSendEmail/Attribute:subject' => 'Sujet',
|
||||
'Class:AsyncSendEmail/Attribute:subject+' => '',
|
||||
'Class:AsyncSendEmail/Attribute:body' => 'Message',
|
||||
'Class:AsyncSendEmail/Attribute:body+' => '',
|
||||
'Class:AsyncSendEmail/Attribute:header' => 'En-tête',
|
||||
'Class:AsyncSendEmail/Attribute:header+' => '',
|
||||
'Class:CMDBChange' => 'Modification',
|
||||
'Class:CMDBChange+' => '',
|
||||
'Class:CMDBChange/Attribute:date' => 'Date',
|
||||
'Class:CMDBChange/Attribute:date+' => '',
|
||||
'Class:CMDBChange/Attribute:userinfo' => 'Autres informations',
|
||||
'Class:CMDBChange/Attribute:userinfo+' => '',
|
||||
'Class:CMDBChangeOp' => 'Operation de changement',
|
||||
'Class:CMDBChangeOp+' => '',
|
||||
'Class:CMDBChangeOp/Attribute:change' => 'Modification',
|
||||
'Class:CMDBChangeOp/Attribute:change+' => '',
|
||||
'Class:CMDBChangeOp/Attribute:date' => 'Date',
|
||||
'Class:CMDBChangeOp/Attribute:date+' => '',
|
||||
'Class:CMDBChangeOp/Attribute:userinfo' => 'Utilisateur',
|
||||
'Class:CMDBChangeOp/Attribute:userinfo+' => '',
|
||||
'Class:CMDBChangeOp/Attribute:objclass' => 'Type d\'objet',
|
||||
'Class:CMDBChangeOp/Attribute:objclass+' => '',
|
||||
'Class:CMDBChangeOp/Attribute:objkey' => 'Clé',
|
||||
'Class:CMDBChangeOp/Attribute:objkey+' => '',
|
||||
'Class:CMDBChangeOp/Attribute:finalclass' => 'Type',
|
||||
'Class:CMDBChangeOp/Attribute:finalclass+' => '',
|
||||
'Class:CMDBChangeOpCreate' => 'Création de l\'objet',
|
||||
'Class:CMDBChangeOpCreate+' => '',
|
||||
'Class:CMDBChangeOpDelete' => 'Effacement de l\'objet',
|
||||
'Class:CMDBChangeOpDelete+' => '',
|
||||
'Class:CMDBChangeOpSetAttribute' => 'Modification de l\'objet',
|
||||
'Class:CMDBChangeOpSetAttribute+' => '',
|
||||
'Class:CMDBChangeOpSetAttribute/Attribute:attcode' => 'Champ',
|
||||
'Class:CMDBChangeOpSetAttribute/Attribute:attcode+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeScalar' => 'Modification de valeur',
|
||||
'Class:CMDBChangeOpSetAttributeScalar+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue' => 'Ancienne valeur',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue' => 'Nouvelle valeur',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeBlob' => 'Modification de données',
|
||||
'Class:CMDBChangeOpSetAttributeBlob+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata' => 'Ancienne valeur',
|
||||
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeOneWayPassword' => 'Mot de passe chiffré',
|
||||
'Class:CMDBChangeOpSetAttributeOneWayPassword+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeOneWayPassword/Attribute:prev_pwd' => 'Ancien mot de passe',
|
||||
'Class:CMDBChangeOpSetAttributeOneWayPassword/Attribute:prev_pwd+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeEncrypted' => 'Champ chiffré',
|
||||
'Class:CMDBChangeOpSetAttributeEncrypted+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeEncrypted/Attribute:prevstring' => 'Ancienne valeur',
|
||||
'Class:CMDBChangeOpSetAttributeEncrypted/Attribute:prevstring+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeText' => 'Modification de texte',
|
||||
'Class:CMDBChangeOpSetAttributeText+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata' => 'Ancienne valeur',
|
||||
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeCaseLog' => 'Archive de journal',
|
||||
'Class:CMDBChangeOpSetAttributeCaseLog+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeCaseLog/Attribute:lastentry' => 'Dernière entrée',
|
||||
'Class:CMDBChangeOpSetAttributeCaseLog/Attribute:lastentry+' => '',
|
||||
'Class:Event' => 'Evenement',
|
||||
'Class:Event+' => '',
|
||||
'Class:Event/Attribute:message' => 'Message',
|
||||
'Class:Event/Attribute:message+' => '',
|
||||
'Class:Event/Attribute:date' => 'Date',
|
||||
'Class:Event/Attribute:date+' => '',
|
||||
'Class:Event/Attribute:userinfo' => 'Utilisateur',
|
||||
'Class:Event/Attribute:userinfo+' => '',
|
||||
'Class:Event/Attribute:finalclass' => 'Type',
|
||||
'Class:Event/Attribute:finalclass+' => '',
|
||||
'Class:EventNotification' => 'Notification',
|
||||
'Class:EventNotification+' => '',
|
||||
'Class:EventNotification/Attribute:trigger_id' => 'Déclencheur',
|
||||
'Class:EventNotification/Attribute:trigger_id+' => '',
|
||||
'Class:EventNotification/Attribute:action_id' => 'Action',
|
||||
'Class:EventNotification/Attribute:action_id+' => '',
|
||||
'Class:EventNotification/Attribute:object_id' => 'Objet',
|
||||
'Class:EventNotification/Attribute:object_id+' => '',
|
||||
'Class:EventNotificationEmail' => 'Envoi d\'Email',
|
||||
'Class:EventNotificationEmail+' => '',
|
||||
'Class:EventNotificationEmail/Attribute:to' => 'A',
|
||||
'Class:EventNotificationEmail/Attribute:to+' => '',
|
||||
'Class:EventNotificationEmail/Attribute:cc' => 'CC',
|
||||
'Class:EventNotificationEmail/Attribute:cc+' => '',
|
||||
'Class:EventNotificationEmail/Attribute:bcc' => 'BCC',
|
||||
'Class:EventNotificationEmail/Attribute:bcc+' => '',
|
||||
'Class:EventNotificationEmail/Attribute:from' => 'De',
|
||||
'Class:EventNotificationEmail/Attribute:from+' => '',
|
||||
'Class:EventNotificationEmail/Attribute:subject' => 'Sujet',
|
||||
'Class:EventNotificationEmail/Attribute:subject+' => '',
|
||||
'Class:EventNotificationEmail/Attribute:body' => 'Message',
|
||||
'Class:EventNotificationEmail/Attribute:body+' => '',
|
||||
'Class:EventIssue' => 'Erreur',
|
||||
'Class:EventIssue+' => '',
|
||||
'Class:EventIssue/Attribute:issue' => 'Erreur',
|
||||
'Class:EventIssue/Attribute:issue+' => '',
|
||||
'Class:EventIssue/Attribute:impact' => 'Impact',
|
||||
'Class:EventIssue/Attribute:impact+' => '',
|
||||
'Class:EventIssue/Attribute:page' => 'Page Web',
|
||||
'Class:EventIssue/Attribute:page+' => '',
|
||||
'Class:EventIssue/Attribute:arguments_post' => 'Arguments (POST)',
|
||||
'Class:EventIssue/Attribute:arguments_post+' => '',
|
||||
'Class:EventIssue/Attribute:arguments_get' => 'Arguments (GET)',
|
||||
'Class:EventIssue/Attribute:arguments_get+' => '',
|
||||
'Class:EventIssue/Attribute:callstack' => 'Pile d\'appel',
|
||||
'Class:EventIssue/Attribute:callstack+' => '',
|
||||
'Class:EventIssue/Attribute:data' => 'Données',
|
||||
'Class:EventIssue/Attribute:data+' => '',
|
||||
'Class:EventWebService' => 'Appel de webservice',
|
||||
'Class:EventWebService+' => '',
|
||||
'Class:EventWebService/Attribute:verb' => 'Verbe',
|
||||
'Class:EventWebService/Attribute:verb+' => '',
|
||||
'Class:EventWebService/Attribute:result' => 'Résultat',
|
||||
'Class:EventWebService/Attribute:result+' => '',
|
||||
'Class:EventWebService/Attribute:log_info' => 'Informations',
|
||||
'Class:EventWebService/Attribute:log_info+' => '',
|
||||
'Class:EventWebService/Attribute:log_warning' => 'Avertissement',
|
||||
'Class:EventWebService/Attribute:log_warning+' => '',
|
||||
'Class:EventWebService/Attribute:log_error' => 'Erreurs',
|
||||
'Class:EventWebService/Attribute:log_error+' => '',
|
||||
'Class:EventWebService/Attribute:data' => 'Données',
|
||||
'Class:EventWebService/Attribute:data+' => '',
|
||||
'Class:EventLoginUsage' => 'Utilisation de l\'application',
|
||||
'Class:EventLoginUsage+' => '',
|
||||
'Class:EventLoginUsage/Attribute:user_id' => 'Login',
|
||||
'Class:EventLoginUsage/Attribute:user_id+' => '',
|
||||
'Class:EventLoginUsage/Attribute:contact_name' => 'Nom de l\'utilisateur',
|
||||
'Class:EventLoginUsage/Attribute:contact_name+' => '',
|
||||
'Class:EventLoginUsage/Attribute:contact_email' => 'Email',
|
||||
'Class:EventLoginUsage/Attribute:contact_email+' => '',
|
||||
'Class:SynchroDataSource' => 'Source de données',
|
||||
'Class:SynchroDataSource+' => '',
|
||||
'Class:SynchroDataSource/Attribute:name' => 'Nom',
|
||||
'Class:SynchroDataSource/Attribute:name+' => '',
|
||||
'Class:SynchroDataSource/Attribute:description' => 'Description',
|
||||
'Class:SynchroDataSource/Attribute:description+' => '',
|
||||
'Class:SynchroDataSource/Attribute:status' => 'Etat',
|
||||
'Class:SynchroDataSource/Attribute:status+' => '',
|
||||
'Class:SynchroDataSource/Attribute:status/Value:implementation' => 'Implémentation',
|
||||
'Class:SynchroDataSource/Attribute:status/Value:implementation+' => '',
|
||||
'Class:SynchroDataSource/Attribute:status/Value:obsolete' => 'Obsolete',
|
||||
'Class:SynchroDataSource/Attribute:status/Value:obsolete+' => '',
|
||||
'Class:SynchroDataSource/Attribute:status/Value:production' => 'Production',
|
||||
'Class:SynchroDataSource/Attribute:status/Value:production+' => '',
|
||||
'Class:SynchroDataSource/Attribute:user_id' => 'Utilisateur',
|
||||
'Class:SynchroDataSource/Attribute:user_id+' => 'Seul cet utilisateur (et les administrateurs) peuvent exécuter cette synchronisation',
|
||||
'Class:SynchroDataSource/Attribute:notify_contact_id' => 'Contact à notifier',
|
||||
'Class:SynchroDataSource/Attribute:notify_contact_id+' => 'Contact à notifier en cas d\'erreur',
|
||||
'Class:SynchroDataSource/Attribute:scope_class' => 'Type cible',
|
||||
'Class:SynchroDataSource/Attribute:scope_class+' => 'Type d\'objets à synchroniser',
|
||||
'Class:SynchroDataSource/Attribute:scope_restriction' => 'Restriction',
|
||||
'Class:SynchroDataSource/Attribute:scope_restriction+' => '',
|
||||
'Class:SynchroDataSource/Attribute:full_load_periodicity' => 'Obsolescence après',
|
||||
'Class:SynchroDataSource/Attribute:full_load_periodicity+' => 'Un objet est considéré comme obsolète s\'il n\'apparaît pas dans les données au delà de cette durée',
|
||||
'Class:SynchroDataSource/Attribute:reconciliation_policy' => 'Politique de recherche',
|
||||
'Class:SynchroDataSource/Attribute:reconciliation_policy+' => '',
|
||||
'Class:SynchroDataSource/Attribute:reconciliation_policy/Value:use_attributes' => 'Utiliser les champs',
|
||||
'Class:SynchroDataSource/Attribute:reconciliation_policy/Value:use_attributes+' => '',
|
||||
'Class:SynchroDataSource/Attribute:reconciliation_policy/Value:use_primary_key' => 'Utiliser la clé primaire',
|
||||
'Class:SynchroDataSource/Attribute:reconciliation_policy/Value:use_primary_key+' => '',
|
||||
'Class:SynchroDataSource/Attribute:action_on_zero' => 'Action si zéro',
|
||||
'Class:SynchroDataSource/Attribute:action_on_zero+' => '',
|
||||
'Class:SynchroDataSource/Attribute:action_on_zero/Value:create' => 'Créer',
|
||||
'Class:SynchroDataSource/Attribute:action_on_zero/Value:create+' => '',
|
||||
'Class:SynchroDataSource/Attribute:action_on_zero/Value:error' => 'Erreur',
|
||||
'Class:SynchroDataSource/Attribute:action_on_zero/Value:error+' => '',
|
||||
'Class:SynchroDataSource/Attribute:action_on_one' => 'Action si un',
|
||||
'Class:SynchroDataSource/Attribute:action_on_one+' => '',
|
||||
'Class:SynchroDataSource/Attribute:action_on_one/Value:error' => 'Erreur',
|
||||
'Class:SynchroDataSource/Attribute:action_on_one/Value:error+' => '',
|
||||
'Class:SynchroDataSource/Attribute:action_on_one/Value:update' => 'Mettre à jour',
|
||||
'Class:SynchroDataSource/Attribute:action_on_one/Value:update+' => '',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple' => 'Action si plusieurs',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple+' => '',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple/Value:create' => 'Créer',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple/Value:create+' => '',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple/Value:error' => 'Erreur',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple/Value:error+' => '',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple/Value:take_first' => 'Prendre le premier',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple/Value:take_first+' => '',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy' => 'Politique d\'effacement',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy+' => 'Façon dont sont traités les objets obsolètes',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:delete' => 'Effacer',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:delete+' => '',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:ignore' => 'Ignorer',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:ignore+' => '',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:update' => 'Mettre à jour',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:update+' => '',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:update_then_delete' => 'Mettre à jour puis effacer',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:update_then_delete+' => '',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy_update' => 'Mise à jour',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy_update+' => 'Format: nom_de_champ:valeur; ...',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy_retention' => 'Durée de rétention',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy_retention+' => 'Si la politique est \'Mettre à jour puis effacer\', les objets obsolètes sont encore conservés pendant cette durée avant d\'être effacés',
|
||||
'Class:SynchroDataSource/Attribute:attribute_list' => 'Liste des champs',
|
||||
'Class:SynchroDataSource/Attribute:attribute_list+' => '',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy' => 'Utilisateurs autorisés',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy+' => 'Quels utilisateurs sont autorisés à effacer des objets synchronisés',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:administrators' => 'Seulement les administrateurs',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:administrators+' => '',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:everybody' => 'Tous les utilisateurs autorisés',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:everybody+' => '',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:nobody' => 'Personne',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:nobody+' => '',
|
||||
'Class:SynchroDataSource/Attribute:url_icon' => 'Icône (hyperlien)',
|
||||
'Class:SynchroDataSource/Attribute:url_icon+' => 'Hyperlien vers une icône représentant l\'application source des données',
|
||||
'Class:SynchroDataSource/Attribute:url_application' => 'Application (hyperlien)',
|
||||
'Class:SynchroDataSource/Attribute:url_application+' => 'Un hyperlien vers l\'application source des données. Paramètres possibles: $this->nom_de_champ$ et $replica->primary_key$',
|
||||
'Class:SynchroAttribute' => 'Champs de synchronisation',
|
||||
'Class:SynchroAttribute+' => '',
|
||||
'Class:SynchroAttribute/Attribute:sync_source_id' => 'Source de données',
|
||||
'Class:SynchroAttribute/Attribute:sync_source_id+' => '',
|
||||
'Class:SynchroAttribute/Attribute:attcode' => 'Champ',
|
||||
'Class:SynchroAttribute/Attribute:attcode+' => '',
|
||||
'Class:SynchroAttribute/Attribute:update' => 'Mise à jour',
|
||||
'Class:SynchroAttribute/Attribute:update+' => '',
|
||||
'Class:SynchroAttribute/Attribute:reconcile' => 'Recherche',
|
||||
'Class:SynchroAttribute/Attribute:reconcile+' => '',
|
||||
'Class:SynchroAttribute/Attribute:update_policy' => 'Politique de mise à jour',
|
||||
'Class:SynchroAttribute/Attribute:update_policy+' => '',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:master_locked' => 'Maître (verrouillé)',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:master_locked+' => '',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:master_unlocked' => 'Maître (non-verrouillé)',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:master_unlocked+' => '',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:write_if_empty' => 'Ecrire si le champ est vide',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:write_if_empty+' => '',
|
||||
'Class:SynchroAttribute/Attribute:finalclass' => 'Type',
|
||||
'Class:SynchroAttribute/Attribute:finalclass+' => '',
|
||||
'Class:SynchroAttExtKey' => 'Synchro Clé Externe',
|
||||
'Class:SynchroAttExtKey+' => '',
|
||||
'Class:SynchroAttExtKey/Attribute:reconciliation_attcode' => 'Champ',
|
||||
'Class:SynchroAttExtKey/Attribute:reconciliation_attcode+' => '',
|
||||
'Class:SynchroAttLinkSet' => 'Synchro Linkset',
|
||||
'Class:SynchroAttLinkSet+' => '',
|
||||
'Class:SynchroAttLinkSet/Attribute:row_separator' => 'Séparateur de colonnes',
|
||||
'Class:SynchroAttLinkSet/Attribute:row_separator+' => '',
|
||||
'Class:SynchroAttLinkSet/Attribute:attribute_separator' => 'Séparateur de champs',
|
||||
'Class:SynchroAttLinkSet/Attribute:attribute_separator+' => '',
|
||||
'Class:SynchroLog' => 'Journal de Synchro',
|
||||
'Class:SynchroLog+' => '',
|
||||
'Class:SynchroLog/Attribute:sync_source_id' => 'Source de données',
|
||||
'Class:SynchroLog/Attribute:sync_source_id+' => '',
|
||||
'Class:SynchroLog/Attribute:start_date' => 'Date/heure de début',
|
||||
'Class:SynchroLog/Attribute:start_date+' => '',
|
||||
'Class:SynchroLog/Attribute:end_date' => 'Date/heure de fin',
|
||||
'Class:SynchroLog/Attribute:end_date+' => '',
|
||||
'Class:SynchroLog/Attribute:status' => 'Etat',
|
||||
'Class:SynchroLog/Attribute:status+' => '',
|
||||
'Class:SynchroLog/Attribute:status/Value:completed' => 'Terminé Ok',
|
||||
'Class:SynchroLog/Attribute:status/Value:completed+' => '',
|
||||
'Class:SynchroLog/Attribute:status/Value:error' => 'Erreur',
|
||||
'Class:SynchroLog/Attribute:status/Value:error+' => '',
|
||||
'Class:SynchroLog/Attribute:status/Value:running' => 'En cours',
|
||||
'Class:SynchroLog/Attribute:status/Value:running+' => '',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_seen' => 'Nb de réplicas vus',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_seen+' => '',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_total' => 'Nb total de réplicas',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_total+' => '',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_deleted' => 'Nb d\'objets effacés',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_deleted+' => '',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_deleted_errors' => 'Nb d\'erreurs lors de l\'effacement',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_deleted_errors+' => '',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_obsoleted' => 'Nb d\'objets obsolètés',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_obsoleted+' => '',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_obsoleted_errors' => 'Nb d\'erreurs lors de l\'obsolescence',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_obsoleted_errors+' => '',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_created' => 'Nb d\'objets créés',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_created+' => '',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_created_errors' => 'Nb d\'erreurs lors de la création',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_created_errors+' => '',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_updated' => 'Nb d\'objets mis à jour',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_updated+' => '',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_updated_errors' => 'Nb d\erreurs lors de la mise à jour',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_updated_errors+' => '',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_reconciled_errors' => 'Nb d\'erreurs lors de la réconciliation',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_reconciled_errors+' => '',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_disappeared_no_action' => 'Nb d\'objets disparus',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_disappeared_no_action+' => '',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_new_updated' => 'Nb d\'objets (nouveaux) mis à jour',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_new_updated+' => '',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_new_unchanged' => 'Nb d\'objets (nouveaux) inchangés',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_new_unchanged+' => '',
|
||||
'Class:SynchroLog/Attribute:last_error' => 'Dernière erreur',
|
||||
'Class:SynchroLog/Attribute:last_error+' => '',
|
||||
'Class:SynchroLog/Attribute:traces' => 'Traces',
|
||||
'Class:SynchroLog/Attribute:traces+' => '',
|
||||
'Class:SynchroReplica' => 'Réplica de Synchronisation',
|
||||
'Class:SynchroReplica+' => '',
|
||||
'Class:SynchroReplica/Attribute:sync_source_id' => 'Source de données',
|
||||
'Class:SynchroReplica/Attribute:sync_source_id+' => '',
|
||||
'Class:SynchroReplica/Attribute:base_class' => 'Type de base',
|
||||
'Class:SynchroReplica/Attribute:base_class+' => '',
|
||||
'Class:SynchroReplica/Attribute:dest_id' => 'Objet destination',
|
||||
'Class:SynchroReplica/Attribute:dest_id+' => '',
|
||||
'Class:SynchroReplica/Attribute:dest_class' => 'Type de l\'objet',
|
||||
'Class:SynchroReplica/Attribute:dest_class+' => '',
|
||||
'Class:SynchroReplica/Attribute:status_last_seen' => 'Dernière détection',
|
||||
'Class:SynchroReplica/Attribute:status_last_seen+' => '',
|
||||
'Class:SynchroReplica/Attribute:status' => 'Etat',
|
||||
'Class:SynchroReplica/Attribute:status+' => '',
|
||||
'Class:SynchroReplica/Attribute:status/Value:modified' => 'Modifié',
|
||||
'Class:SynchroReplica/Attribute:status/Value:modified+' => '',
|
||||
'Class:SynchroReplica/Attribute:status/Value:new' => 'Nouveau',
|
||||
'Class:SynchroReplica/Attribute:status/Value:new+' => '',
|
||||
'Class:SynchroReplica/Attribute:status/Value:obsolete' => 'Obsolete',
|
||||
'Class:SynchroReplica/Attribute:status/Value:obsolete+' => '',
|
||||
'Class:SynchroReplica/Attribute:status/Value:orphan' => 'Orphelin',
|
||||
'Class:SynchroReplica/Attribute:status/Value:orphan+' => '',
|
||||
'Class:SynchroReplica/Attribute:status/Value:synchronized' => 'Synchronisé',
|
||||
'Class:SynchroReplica/Attribute:status/Value:synchronized+' => '',
|
||||
'Class:SynchroReplica/Attribute:status_dest_creator' => 'Créé par la source ?',
|
||||
'Class:SynchroReplica/Attribute:status_dest_creator+' => '',
|
||||
'Class:SynchroReplica/Attribute:status_last_error' => 'Dernière erreur',
|
||||
'Class:SynchroReplica/Attribute:status_last_error+' => '',
|
||||
'Class:SynchroReplica/Attribute:info_creation_date' => 'Date de création',
|
||||
'Class:SynchroReplica/Attribute:info_creation_date+' => '',
|
||||
'Class:SynchroReplica/Attribute:info_last_modified' => 'Date de dernière modification',
|
||||
'Class:SynchroReplica/Attribute:info_last_modified+' => '',
|
||||
'Class:appUserPreferences' => 'Préférences utilisateur',
|
||||
'Class:appUserPreferences+' => '',
|
||||
'Class:appUserPreferences/Attribute:userid' => 'Utilisateur',
|
||||
'Class:appUserPreferences/Attribute:userid+' => '',
|
||||
'Class:appUserPreferences/Attribute:preferences' => 'Préférences',
|
||||
'Class:appUserPreferences/Attribute:preferences+' => '',
|
||||
'Core:AttributeLinkedSet' => 'Objets liés (1-n)',
|
||||
'Core:AttributeLinkedSet+' => 'Liste d\'objets d\'une classe donnée et pointant sur l\'objet courant',
|
||||
'Core:AttributeLinkedSetIndirect' => 'Objets liés (1-n)',
|
||||
'Core:AttributeLinkedSetIndirect+' => 'Liste d\'objets d\'une classe donnée et liés à l\'objet courant via une classe intermédiaire',
|
||||
'Core:AttributeInteger' => 'Nombre entier',
|
||||
'Core:AttributeInteger+' => 'Valeur numérique entière',
|
||||
'Core:AttributeDecimal' => 'Nombre décimal',
|
||||
'Core:AttributeDecimal+' => 'Valeur numérique décimale',
|
||||
'Core:AttributeBoolean' => 'Booléen',
|
||||
'Core:AttributeBoolean+' => 'Booléen',
|
||||
'Core:AttributeString' => 'Chaîne de caractères',
|
||||
'Core:AttributeString+' => 'Chaîne de caractères (limitée à une ligne)',
|
||||
'Core:AttributeClass' => 'Classe',
|
||||
'Core:AttributeClass+' => 'Classe d\'objets',
|
||||
'Core:AttributeApplicationLanguage' => 'Langue',
|
||||
'Core:AttributeApplicationLanguage+' => 'Codes langue et pays (EN US)',
|
||||
'Core:AttributeFinalClass' => 'Classe',
|
||||
'Core:AttributeFinalClass+' => 'Classe réelle de l\'objet (attribut créé automatiquement)',
|
||||
'Core:AttributePassword' => 'Mot de passe',
|
||||
'Core:AttributePassword+' => 'Mot de passe qui peut être lu en clair',
|
||||
'Core:AttributeEncryptedString' => 'Chaîne encryptée',
|
||||
'Core:AttributeEncryptedString+' => 'Chaîne encryptée avec une clé locale',
|
||||
'Core:AttributeText' => 'Texte',
|
||||
'Core:AttributeText+' => 'Chaîne de caractères de plusieurs lignes',
|
||||
'Core:AttributeHTML' => 'HTML',
|
||||
'Core:AttributeHTML+' => 'Texte formatté en HTML',
|
||||
'Core:AttributeEmailAddress' => 'Adresse électronique',
|
||||
'Core:AttributeEmailAddress+' => 'Adresse électronique (xxxx@yyy.zzz)',
|
||||
'Core:AttributeIPAddress' => 'Adresse IP',
|
||||
'Core:AttributeIPAddress+' => 'Adresse IP',
|
||||
'Core:AttributeOQL' => 'Expression OQL',
|
||||
'Core:AttributeOQL+' => 'Expression formattée en "Object Query Language"',
|
||||
'Core:AttributeEnum' => 'Enumération',
|
||||
'Core:AttributeEnum+' => 'Valeur choisie parmi un liste de chaîne de caractères',
|
||||
'Core:AttributeTemplateString' => 'Modèle de chaîne de caractères',
|
||||
'Core:AttributeTemplateString+' => 'Chaîne de caractères d\'une ligne, contenant des espaces réservés pour des données iTop',
|
||||
'Core:AttributeTemplateText' => 'Modèle de texte',
|
||||
'Core:AttributeTemplateText+' => 'Texte contenant des espaces réservés pour des données iTop',
|
||||
'Core:AttributeTemplateHTML' => 'Modèle HTML',
|
||||
'Core:AttributeTemplateHTML+' => 'HTML contenant des espaces réservés pour des données iTop',
|
||||
'Core:AttributeDateTime' => 'Date/heure',
|
||||
'Core:AttributeDateTime+' => 'Date et heure (année-mois-jour hh:mm:ss)',
|
||||
'Core:AttributeDate' => 'Date',
|
||||
'Core:AttributeDate+' => 'Date (année-mois-jour)',
|
||||
'Core:AttributeDeadline' => 'Délai',
|
||||
'Core:AttributeDeadline+' => 'Date/heure exprimée relativement à l\'heure courante',
|
||||
'Core:AttributeExternalKey' => 'Clé externe',
|
||||
'Core:AttributeExternalKey+' => 'Clé externe',
|
||||
'Core:AttributeExternalField' => 'Attribut externe',
|
||||
'Core:AttributeExternalField+' => 'Copie de la valeur d\'un attribut de l\'objet lié par une clé externe',
|
||||
'Core:AttributeURL' => 'URL',
|
||||
'Core:AttributeURL+' => 'URL absolue ou relative',
|
||||
'Core:AttributeBlob' => 'Blob',
|
||||
'Core:AttributeBlob+' => 'Contenu binaire (document)',
|
||||
'Core:AttributeOneWayPassword' => 'Mot de passe "one way"',
|
||||
'Core:AttributeOneWayPassword+' => 'Mot de passe qui peut être vérifié mais jamais lu en clair',
|
||||
'Core:AttributeTable' => 'Table',
|
||||
'Core:AttributeTable+' => 'Tableau à deux dimensions',
|
||||
'Core:AttributePropertySet' => 'Propriétés',
|
||||
'Core:AttributePropertySet+' => 'Liste de propriétés (nom et valeur) non typées',
|
||||
'Change:ObjectCreated' => 'Elément créé',
|
||||
'Change:ObjectDeleted' => 'Elément effacé',
|
||||
'Change:ObjectModified' => 'Elément modifié',
|
||||
'Change:AttName_SetTo_NewValue_PreviousValue_OldValue' => '%1$s modifié en %2$s (ancienne valeur: %3$s)',
|
||||
'Change:AttName_SetTo' => '%1$s modifié en %2$s',
|
||||
'Change:Text_AppendedTo_AttName' => '%1$s ajouté à %2$s',
|
||||
'Change:AttName_Changed_PreviousValue_OldValue' => '%1$s modifié, ancienne valeur: %2$s',
|
||||
'Change:AttName_Changed' => '%1$s modifié',
|
||||
'Change:AttName_EntryAdded' => '%1$s champ modifié, une nouvelle entrée a été ajoutée',
|
||||
'Class:Action' => 'Action',
|
||||
'Class:Action+' => 'Action spécifique',
|
||||
'Class:Action/Attribute:name' => 'Nom',
|
||||
'Class:Action/Attribute:name+' => 'Label',
|
||||
'Class:Action/Attribute:description' => 'Description',
|
||||
'Class:Action/Attribute:description+' => '',
|
||||
'Class:Action/Attribute:status' => 'Etat',
|
||||
'Class:Action/Attribute:status+' => '',
|
||||
'Class:Action/Attribute:status/Value:test' => 'En test',
|
||||
'Class:Action/Attribute:status/Value:test+' => '',
|
||||
'Class:Action/Attribute:status/Value:enabled' => 'En production',
|
||||
'Class:Action/Attribute:status/Value:enabled+' => '',
|
||||
'Class:Action/Attribute:status/Value:disabled' => 'Inactive',
|
||||
'Class:Action/Attribute:status/Value:disabled+' => '',
|
||||
'Class:Action/Attribute:trigger_list' => 'Déclencheurs liés',
|
||||
'Class:Action/Attribute:trigger_list+' => '',
|
||||
'Class:Action/Attribute:finalclass' => 'Type',
|
||||
'Class:Action/Attribute:finalclass+' => '',
|
||||
'Class:ActionNotification' => 'notification',
|
||||
'Class:ActionNotification+' => '',
|
||||
'Class:Trigger' => 'trigger',
|
||||
'Class:Trigger+' => 'Custom event handler',
|
||||
'Class:Trigger+' => '',
|
||||
'Class:Trigger/Attribute:description' => 'Description',
|
||||
'Class:Trigger/Attribute:description+' => 'one line description',
|
||||
'Class:Trigger/Attribute:action_list' => 'Triggered actions',
|
||||
'Class:Trigger/Attribute:action_list+' => 'Actions performed when the trigger is activated',
|
||||
'Class:Trigger/Attribute:description+' => '',
|
||||
'Class:Trigger/Attribute:action_list' => 'Actions déclenchées',
|
||||
'Class:Trigger/Attribute:action_list+' => '',
|
||||
'Class:Trigger/Attribute:finalclass' => 'Type',
|
||||
'Class:Trigger/Attribute:finalclass+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: TriggerOnObject
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:TriggerOnObject' => 'Trigger on a class of objects',
|
||||
'Class:TriggerOnObject+' => 'Trigger on a given class of objects',
|
||||
'Class:TriggerOnObject/Attribute:target_class' => 'Target class',
|
||||
'Class:TriggerOnObject+' => '',
|
||||
'Class:TriggerOnObject/Attribute:target_class' => 'Classe cible',
|
||||
'Class:TriggerOnObject/Attribute:target_class+' => 'label',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: TriggerOnStateChange
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:TriggerOnStateChange' => 'Trigger on object state change',
|
||||
'Class:TriggerOnStateChange+' => 'Trigger on object state change',
|
||||
'Class:TriggerOnStateChange/Attribute:state' => 'State',
|
||||
'Class:TriggerOnStateChange+' => '',
|
||||
'Class:TriggerOnStateChange/Attribute:state' => 'Etat',
|
||||
'Class:TriggerOnStateChange/Attribute:state+' => 'label',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:never' => 'Personne',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:depends' => 'Uniquement les administrateurs',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:always' => 'Tous les utilisateurs autorisés',
|
||||
'SynchroDataSource:Description' => 'Description',
|
||||
'SynchroDataSource:Reconciliation' => 'Recherche et réconciliation',
|
||||
'SynchroDataSource:Deletion' => 'Règles d\'effacement',
|
||||
'SynchroDataSource:Status' => 'Etat',
|
||||
'SynchroDataSource:Information' => 'Information',
|
||||
'SynchroDataSource:Definition' => 'Définition',
|
||||
'Core:SynchroAttributes' => 'Champs',
|
||||
'Core:SynchroStatus' => 'Etat',
|
||||
'Core:Synchro:ErrorsLabel' => 'Erreurs',
|
||||
'Core:Synchro:CreatedLabel' => 'Créations',
|
||||
'Core:Synchro:ModifiedLabel' => 'Modifications',
|
||||
'Core:Synchro:UnchangedLabel' => 'Sans changement',
|
||||
'Core:Synchro:ReconciledErrorsLabel' => 'Erreurs',
|
||||
'Core:Synchro:ReconciledLabel' => 'Trouvés',
|
||||
'Core:Synchro:ReconciledNewLabel' => 'Créations',
|
||||
'Core:SynchroReconcile:Yes' => 'Oui',
|
||||
'Core:SynchroReconcile:No' => 'Non',
|
||||
'Core:SynchroUpdate:Yes' => 'Oui',
|
||||
'Core:SynchroUpdate:No' => 'Non',
|
||||
'Core:Synchro:LastestStatus' => 'Dernier état',
|
||||
'Core:Synchro:History' => 'Historique de synchronisation',
|
||||
'Core:Synchro:NeverRun' => 'Aucun historique, la synchronisation n\'a pas encore fonctionné',
|
||||
'Core:Synchro:SynchroEndedOn_Date' => 'La dernière synchronisation s\'est terminée à: %1$s.',
|
||||
'Core:Synchro:SynchroRunningStartedOn_Date' => 'Synchronisation en cours (début à $1$s)',
|
||||
'Menu:DataSources' => 'Synchronisation',
|
||||
'Menu:DataSources+' => '',
|
||||
'Core:Synchro:label_repl_ignored' => 'Ignorés (%1$s)',
|
||||
'Core:Synchro:label_repl_disappeared' => 'Disparus (%1$s)',
|
||||
'Core:Synchro:label_repl_existing' => 'Existants (%1$s)',
|
||||
'Core:Synchro:label_repl_new' => 'Nouveau (%1$s)',
|
||||
'Core:Synchro:label_obj_deleted' => 'Effacés (%1$s)',
|
||||
'Core:Synchro:label_obj_obsoleted' => 'Obsoletés (%1$s)',
|
||||
'Core:Synchro:label_obj_disappeared_errors' => 'Erreurs (%1$s)',
|
||||
'Core:Synchro:label_obj_disappeared_no_action' => 'Aucune action (%1$s)',
|
||||
'Core:Synchro:label_obj_unchanged' => 'Sans changement (%1$s)',
|
||||
'Core:Synchro:label_obj_updated' => 'Mis à jour (%1$s)',
|
||||
'Core:Synchro:label_obj_updated_errors' => 'Erreurs (%1$s)',
|
||||
'Core:Synchro:label_obj_new_unchanged' => 'Sans changement (%1$s)',
|
||||
'Core:Synchro:label_obj_new_updated' => 'Mis à jour (%1$s)',
|
||||
'Core:Synchro:label_obj_created' => 'Créations (%1$s)',
|
||||
'Core:Synchro:label_obj_new_errors' => 'Erreurs (%1$s)',
|
||||
'Core:SynchroLogTitle' => '%1$s - %2$s',
|
||||
'Core:Synchro:Nb_Replica' => 'Replica traités: %1$s',
|
||||
'Core:Synchro:Nb_Class:Objects' => '%1$s: %2$s',
|
||||
'Class:SynchroDataSource/Error:AtLeastOneReconciliationKeyMustBeSpecified' => 'Si la politique de réconciliation n\'est pas la clé primaire, au moins une clé de recherche doit être spécifiée',
|
||||
'Class:SynchroDataSource/Error:DeleteRetentionDurationMustBeSpecified' => 'Pour que les objets soient effacés après avoir été obsoletés, il faut spécifier une durée de rétention',
|
||||
'Class:SynchroDataSource/Error:DeletePolicyUpdateMustBeSpecified' => 'Les objets obsolètes doivent être mis à jour, mais aucune information de mise à jour n\'est spécifiée',
|
||||
'Core:SynchroReplica:PublicData' => 'Données synchronisées',
|
||||
'Core:SynchroReplica:PrivateDetails' => 'Informations internes',
|
||||
'Core:SynchroReplica:BackToDataSource' => 'Retourner aux détails de la source de données: %1$s',
|
||||
'Core:SynchroReplica:ListOfReplicas' => 'Liste des réplica',
|
||||
'Core:SynchroAttExtKey:ReconciliationById' => 'id (clé primaire)',
|
||||
'Core:SynchroAtt:attcode' => 'Champ',
|
||||
'Core:SynchroAtt:attcode+' => '',
|
||||
'Core:SynchroAtt:reconciliation' => 'Réconciliation ?',
|
||||
'Core:SynchroAtt:reconciliation+' => '',
|
||||
'Core:SynchroAtt:update' => 'Mise jour ?',
|
||||
'Core:SynchroAtt:update+' => '',
|
||||
'Core:SynchroAtt:update_policy' => 'Politique de mise à jour',
|
||||
'Core:SynchroAtt:update_policy+' => '',
|
||||
'Core:SynchroAtt:reconciliation_attcode' => 'Clé de recherche',
|
||||
'Core:SynchroAtt:reconciliation_attcode+' => '',
|
||||
'Core:SyncDataExchangeComment' => '(Synhcronisation)',
|
||||
'Core:Synchro:ListOfDataSources' => 'Sources de données:',
|
||||
'Core:Synchro:LastSynchro' => 'Dernière synchronisation:',
|
||||
'Core:Synchro:ThisObjectIsSynchronized' => 'Cet objet est synchronisé avec une source de données',
|
||||
'Core:Synchro:TheObjectWasCreatedBy_Source' => 'Cet objet a été <b>créé</b> par la source de données %1$s',
|
||||
'Core:Synchro:TheObjectCanBeDeletedBy_Source' => 'Cet objet <b>peut être effacé/b> par la source de données %1$s',
|
||||
'Core:Synchro:TheObjectCannotBeDeletedByUser_Source' => 'Vous <b>ne pouvez pas effacer</b> cet objet car il est géré par le source de données %1$s',
|
||||
'TitleSynchroExecution' => 'Exécution de la synchronisation',
|
||||
'Class:SynchroDataSource:DataTable' => 'Table contenant les données: %1$s',
|
||||
'Core:SyncDataSourceObsolete' => 'Cette source de données est obsolète. Opération annulée.',
|
||||
'Core:SyncDataSourceAccessRestriction' => 'Seuls les administrateurs et l\'utilisateur spécifié dans la source de données peuvent exécuter cette synchronisation. Opération annulée.',
|
||||
'Core:SyncTooManyMissingReplicas' => 'Tous les réplicas sont absents de l\'import. L\'import a-t-il réellement tourné. Opération annulée.',
|
||||
'Core:Duration_Seconds' => '%1$ds',
|
||||
'Core:Duration_Minutes_Seconds' => '%1$dmin %2$ds',
|
||||
'Core:Duration_Hours_Minutes_Seconds' => '%1$dh %2$dmin %3$ds',
|
||||
'Core:Duration_Days_Hours_Minutes_Seconds' => '%1$sj %2$dh %3$dmin %4$ds',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: TriggerOnStateEnter
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:TriggerOnStateEnter' => 'Trigger on object entering a state',
|
||||
'Class:TriggerOnStateEnter+' => 'Trigger on object state change - entering',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: TriggerOnStateLeave
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:TriggerOnStateLeave' => 'Trigger on object leaving a state',
|
||||
'Class:TriggerOnStateLeave+' => 'Trigger on object state change - leaving',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: TriggerOnObjectCreate
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:TriggerOnObjectCreate' => 'Trigger on object creation',
|
||||
'Class:TriggerOnObjectCreate+' => 'Trigger on object creation of [a child class of] the given class',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: lnkTriggerAction
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:lnkTriggerAction' => 'Actions-Trigger',
|
||||
'Class:lnkTriggerAction+' => 'Link between a trigger and an action',
|
||||
'Class:lnkTriggerAction/Attribute:action_id' => 'Action',
|
||||
'Class:lnkTriggerAction/Attribute:action_id+' => 'The action to be executed',
|
||||
'Class:lnkTriggerAction/Attribute:action_name' => 'Action Name',
|
||||
'Class:lnkTriggerAction/Attribute:action_name+' => 'Name of the action',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_id' => 'Trigger',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_id+' => 'Trigger',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_name' => 'Trigger Name',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_name+' => 'Name of the trigger',
|
||||
'Class:lnkTriggerAction/Attribute:order' => 'Order',
|
||||
'Class:lnkTriggerAction/Attribute:order+' => 'Actions execution order',
|
||||
));
|
||||
|
||||
|
||||
?>
|
||||
?>
|
||||
@@ -15,46 +15,12 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @author Erwan Taloc <erwan.taloc@combodo.com>
|
||||
* @author Romain Quetiez <romain.quetiez@combodo.com>
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
* @author Erwan Taloc <erwan.taloc@combodo.com>
|
||||
* @author Romain Quetiez <romain.quetiez@combodo.com>
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
* @licence http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'gui'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'application'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
//
|
||||
// Class: AuditCategory
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:AuditCategory' => 'Catégorie d\'audit',
|
||||
'Class:AuditCategory+' => 'A section inside the overall audit',
|
||||
'Class:AuditCategory/Attribute:name' => 'Nom',
|
||||
'Class:AuditCategory/Attribute:name+' => 'Nom raccourci',
|
||||
'Class:AuditCategory/Attribute:description' => 'Description',
|
||||
'Class:AuditCategory/Attribute:description+' => 'Description',
|
||||
'Class:AuditCategory/Attribute:definition_set' => 'Ensemble de définition',
|
||||
'Class:AuditCategory/Attribute:definition_set+' => 'Expression OQL qui défini le périmètre d\'application de l\'audit',
|
||||
'Class:AuditCategory/Attribute:rules_list' => 'Règles d\'audit',
|
||||
'Class:AuditCategory/Attribute:rules_list+' => 'Règles d\'audit pour cette catégorie',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: AuditRule
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:AuditRule' => 'Règle d\'audit',
|
||||
'Class:AuditRule+' => '',
|
||||
@@ -66,26 +32,94 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:AuditRule/Attribute:query+' => 'Expression OQL de calcul des éléments incorrects',
|
||||
'Class:AuditRule/Attribute:valid_flag' => 'Interprétation',
|
||||
'Class:AuditRule/Attribute:valid_flag+' => 'La requête définit-elle les éléments valides ?',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:true' => 'Objets valides',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:true+' => '',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:false' => 'Objets incorrects',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:false+' => '',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:true' => 'Objets valides',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:true+' => '',
|
||||
'Class:AuditRule/Attribute:category_id' => 'Catégorie',
|
||||
'Class:AuditRule/Attribute:category_id+' => '',
|
||||
'Class:AuditRule/Attribute:category_name' => 'Category',
|
||||
'Class:AuditRule/Attribute:category_name' => 'Categorie',
|
||||
'Class:AuditRule/Attribute:category_name+' => '',
|
||||
));
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'addon/userrights'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
//
|
||||
// Class: User
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:AuditCategory' => 'Catégorie d\'audit',
|
||||
'Class:AuditCategory+' => 'Une section de l\'audit',
|
||||
'Class:AuditCategory/Attribute:name' => 'Nom',
|
||||
'Class:AuditCategory/Attribute:name+' => 'Nom raccourci',
|
||||
'Class:AuditCategory/Attribute:description' => 'Description',
|
||||
'Class:AuditCategory/Attribute:description+' => 'Description',
|
||||
'Class:AuditCategory/Attribute:definition_set' => 'Ensemble de définition',
|
||||
'Class:AuditCategory/Attribute:definition_set+' => 'Expression OQL qui défini le périmètre d\'application de l\'audit',
|
||||
'Class:AuditCategory/Attribute:rules_list' => 'Règles d\'audit',
|
||||
'Class:AuditCategory/Attribute:rules_list+' => 'Règles d\'audit pour cette catégorie',
|
||||
'Class:URP_Profiles' => 'Profil',
|
||||
'Class:URP_Profiles+' => 'Profil utilisateur',
|
||||
'Class:URP_Profiles/Attribute:name' => 'Nom',
|
||||
'Class:URP_Profiles/Attribute:name+' => '',
|
||||
'Class:URP_Profiles/Attribute:description' => 'Description',
|
||||
'Class:URP_Profiles/Attribute:description+' => '',
|
||||
'Class:URP_Profiles/Attribute:user_list' => 'Utilisateurs',
|
||||
'Class:URP_Profiles/Attribute:user_list+' => 'Comptes utilisateur (logins) ayant ce profil',
|
||||
'Class:URP_UserProfile' => 'Utilisateur/Profil',
|
||||
'Class:URP_UserProfile+' => '',
|
||||
'Class:URP_UserProfile/Attribute:userid' => 'Utilisateur',
|
||||
'Class:URP_UserProfile/Attribute:userid+' => '',
|
||||
'Class:URP_UserProfile/Attribute:userlogin' => 'Login',
|
||||
'Class:URP_UserProfile/Attribute:userlogin+' => '',
|
||||
'Class:URP_UserProfile/Attribute:profileid' => 'Profil',
|
||||
'Class:URP_UserProfile/Attribute:profileid+' => '',
|
||||
'Class:URP_UserProfile/Attribute:profile' => 'Profil',
|
||||
'Class:URP_UserProfile/Attribute:profile+' => '',
|
||||
'Class:URP_UserProfile/Attribute:reason' => 'Raison',
|
||||
'Class:URP_UserProfile/Attribute:reason+' => 'Justifie le rôle affecté à cet utilisateur',
|
||||
'Class:URP_UserOrg' => 'Utilisateur/Organisation',
|
||||
'Class:URP_UserOrg+' => 'Organizations permises pour l\'utilisateur',
|
||||
'Class:URP_UserOrg/Attribute:userid' => 'Utilisateur',
|
||||
'Class:URP_UserOrg/Attribute:userid+' => '',
|
||||
'Class:URP_UserOrg/Attribute:userlogin' => 'Login',
|
||||
'Class:URP_UserOrg/Attribute:userlogin+' => '',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_id' => 'Organisation',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_id+' => '',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_name' => 'Organisation',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_name+' => '',
|
||||
'Class:URP_UserOrg/Attribute:reason' => 'Raison',
|
||||
'Class:URP_UserOrg/Attribute:reason+' => 'Justifie la permission de voir les données de cette organisation',
|
||||
'Class:URP_ActionGrant' => 'action_permission',
|
||||
'Class:URP_ActionGrant+' => 'permissions on classes',
|
||||
'Class:URP_ActionGrant/Attribute:profileid' => 'Profile',
|
||||
'Class:URP_ActionGrant/Attribute:profileid+' => 'usage profile',
|
||||
'Class:URP_ActionGrant/Attribute:profile' => 'Profile',
|
||||
'Class:URP_ActionGrant/Attribute:profile+' => 'usage profile',
|
||||
'Class:URP_ActionGrant/Attribute:class' => 'Class',
|
||||
'Class:URP_ActionGrant/Attribute:class+' => 'Target class',
|
||||
'Class:URP_ActionGrant/Attribute:permission' => 'Permission',
|
||||
'Class:URP_ActionGrant/Attribute:permission+' => 'allowed or not allowed?',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:no' => 'no',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:no+' => 'no',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:yes' => 'yes',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:yes+' => 'yes',
|
||||
'Class:URP_ActionGrant/Attribute:action' => 'Action',
|
||||
'Class:URP_ActionGrant/Attribute:action+' => 'operations to perform on the given class',
|
||||
'Class:URP_StimulusGrant' => 'stimulus_permission',
|
||||
'Class:URP_StimulusGrant+' => 'permissions on stimilus in the life cycle of the object',
|
||||
'Class:URP_StimulusGrant/Attribute:profileid' => 'Profile',
|
||||
'Class:URP_StimulusGrant/Attribute:profileid+' => 'usage profile',
|
||||
'Class:URP_StimulusGrant/Attribute:profile' => 'Profile',
|
||||
'Class:URP_StimulusGrant/Attribute:profile+' => 'usage profile',
|
||||
'Class:URP_StimulusGrant/Attribute:class' => 'Class',
|
||||
'Class:URP_StimulusGrant/Attribute:class+' => 'Target class',
|
||||
'Class:URP_StimulusGrant/Attribute:permission' => 'Permission',
|
||||
'Class:URP_StimulusGrant/Attribute:permission+' => 'allowed or not allowed?',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:no' => 'no',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:no+' => 'no',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:yes' => 'yes',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:yes+' => 'yes',
|
||||
'Class:URP_StimulusGrant/Attribute:stimulus' => 'Stimulus',
|
||||
'Class:URP_StimulusGrant/Attribute:stimulus+' => 'stimulus code',
|
||||
'Class:URP_AttributeGrant' => 'attribute_permission',
|
||||
'Class:URP_AttributeGrant+' => 'permissions at the attributes level',
|
||||
'Class:URP_AttributeGrant/Attribute:actiongrantid' => 'Action grant',
|
||||
'Class:URP_AttributeGrant/Attribute:actiongrantid+' => 'action grant',
|
||||
'Class:URP_AttributeGrant/Attribute:attcode' => 'Attribute',
|
||||
'Class:URP_AttributeGrant/Attribute:attcode+' => 'attribute code',
|
||||
'Class:User' => 'Utilisateur',
|
||||
'Class:User+' => 'Compte utilisateur',
|
||||
'Class:User/Attribute:finalclass' => 'Type de compte',
|
||||
@@ -110,31 +144,8 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:User/Attribute:profile_list+' => 'Rôles, ouvrants les droits d\'accès',
|
||||
'Class:User/Attribute:allowed_org_list' => 'Organisations permises',
|
||||
'Class:User/Attribute:allowed_org_list+' => 'L\'utilisateur a le droit de voir les données des organisations listées ici. Si aucune organisation n\'est spécifiée, alors aucune restriction ne s\'applique.',
|
||||
|
||||
'Class:User/Error:LoginMustBeUnique' => 'Le login doit être unique - "%1s" est déjà utilisé.',
|
||||
'Class:User/Error:AtLeastOneProfileIsNeeded' => 'L\'utilisateur doit avoir au moins un profil.',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_Profiles
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:URP_Profiles' => 'Profil',
|
||||
'Class:URP_Profiles+' => 'Profil utilisateur',
|
||||
'Class:URP_Profiles/Attribute:name' => 'Nom',
|
||||
'Class:URP_Profiles/Attribute:name+' => '',
|
||||
'Class:URP_Profiles/Attribute:description' => 'Description',
|
||||
'Class:URP_Profiles/Attribute:description+' => '',
|
||||
'Class:URP_Profiles/Attribute:user_list' => 'Utilisateurs',
|
||||
'Class:URP_Profiles/Attribute:user_list+' => 'Comptes utilisateur (logins) ayant ce profil',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_Dimensions
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:URP_Dimensions' => 'Dimension',
|
||||
'Class:URP_Dimensions+' => 'Dimension applicative (défini des silos)',
|
||||
'Class:URP_Dimensions/Attribute:name' => 'Nom',
|
||||
@@ -143,51 +154,6 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:URP_Dimensions/Attribute:description+' => '',
|
||||
'Class:URP_Dimensions/Attribute:type' => 'Type',
|
||||
'Class:URP_Dimensions/Attribute:type+' => 'Nom de classe ou type de données (unité de projection)',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_UserProfile
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:URP_UserProfile' => 'Utilisateur/Profil',
|
||||
'Class:URP_UserProfile+' => '',
|
||||
'Class:URP_UserProfile/Attribute:userid' => 'Utilisateur',
|
||||
'Class:URP_UserProfile/Attribute:userid+' => '',
|
||||
'Class:URP_UserProfile/Attribute:userlogin' => 'Login',
|
||||
'Class:URP_UserProfile/Attribute:userlogin+' => '',
|
||||
'Class:URP_UserProfile/Attribute:profileid' => 'Profil',
|
||||
'Class:URP_UserProfile/Attribute:profileid+' => '',
|
||||
'Class:URP_UserProfile/Attribute:profile' => 'Profil',
|
||||
'Class:URP_UserProfile/Attribute:profile+' => '',
|
||||
'Class:URP_UserProfile/Attribute:reason' => 'Raison',
|
||||
'Class:URP_UserProfile/Attribute:reason+' => 'Justifie le rôle affecté à cet utilisateur',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_UserOrg
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:URP_UserOrg' => 'Utilisateur/Organisation',
|
||||
'Class:URP_UserOrg+' => 'Organizations permises pour l\'utilisateur',
|
||||
'Class:URP_UserOrg/Attribute:userid' => 'Utilisateur',
|
||||
'Class:URP_UserOrg/Attribute:userid+' => '',
|
||||
'Class:URP_UserOrg/Attribute:userlogin' => 'Login',
|
||||
'Class:URP_UserOrg/Attribute:userlogin+' => '',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_id' => 'Organisation',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_id+' => '',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_name' => 'Organisation',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_name+' => '',
|
||||
'Class:URP_UserOrg/Attribute:reason' => 'Raison',
|
||||
'Class:URP_UserOrg/Attribute:reason+' => 'Justifie la permission de voir les données de cette organisation',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_ProfileProjection
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:URP_ProfileProjection' => 'profile_projection',
|
||||
'Class:URP_ProfileProjection+' => 'profile projections',
|
||||
'Class:URP_ProfileProjection/Attribute:dimensionid' => 'Dimension',
|
||||
@@ -202,13 +168,6 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:URP_ProfileProjection/Attribute:value+' => 'OQL expression (using $user) | constant | | +attribute code',
|
||||
'Class:URP_ProfileProjection/Attribute:attribute' => 'Attribute',
|
||||
'Class:URP_ProfileProjection/Attribute:attribute+' => 'Target attribute code (optional)',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_ClassProjection
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:URP_ClassProjection' => 'class_projection',
|
||||
'Class:URP_ClassProjection+' => 'class projections',
|
||||
'Class:URP_ClassProjection/Attribute:dimensionid' => 'Dimension',
|
||||
@@ -221,78 +180,11 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:URP_ClassProjection/Attribute:value+' => 'OQL expression (using $this) | constant | | +attribute code',
|
||||
'Class:URP_ClassProjection/Attribute:attribute' => 'Attribute',
|
||||
'Class:URP_ClassProjection/Attribute:attribute+' => 'Target attribute code (optional)',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_ActionGrant
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:URP_ActionGrant' => 'action_permission',
|
||||
'Class:URP_ActionGrant+' => 'permissions on classes',
|
||||
'Class:URP_ActionGrant/Attribute:profileid' => 'Profile',
|
||||
'Class:URP_ActionGrant/Attribute:profileid+' => 'usage profile',
|
||||
'Class:URP_ActionGrant/Attribute:profile' => 'Profile',
|
||||
'Class:URP_ActionGrant/Attribute:profile+' => 'usage profile',
|
||||
'Class:URP_ActionGrant/Attribute:class' => 'Class',
|
||||
'Class:URP_ActionGrant/Attribute:class+' => 'Target class',
|
||||
'Class:URP_ActionGrant/Attribute:permission' => 'Permission',
|
||||
'Class:URP_ActionGrant/Attribute:permission+' => 'allowed or not allowed?',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:yes' => 'yes',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:yes+' => 'yes',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:no' => 'no',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:no+' => 'no',
|
||||
'Class:URP_ActionGrant/Attribute:action' => 'Action',
|
||||
'Class:URP_ActionGrant/Attribute:action+' => 'operations to perform on the given class',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_StimulusGrant
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:URP_StimulusGrant' => 'stimulus_permission',
|
||||
'Class:URP_StimulusGrant+' => 'permissions on stimilus in the life cycle of the object',
|
||||
'Class:URP_StimulusGrant/Attribute:profileid' => 'Profile',
|
||||
'Class:URP_StimulusGrant/Attribute:profileid+' => 'usage profile',
|
||||
'Class:URP_StimulusGrant/Attribute:profile' => 'Profile',
|
||||
'Class:URP_StimulusGrant/Attribute:profile+' => 'usage profile',
|
||||
'Class:URP_StimulusGrant/Attribute:class' => 'Class',
|
||||
'Class:URP_StimulusGrant/Attribute:class+' => 'Target class',
|
||||
'Class:URP_StimulusGrant/Attribute:permission' => 'Permission',
|
||||
'Class:URP_StimulusGrant/Attribute:permission+' => 'allowed or not allowed?',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:yes' => 'yes',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:yes+' => 'yes',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:no' => 'no',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:no+' => 'no',
|
||||
'Class:URP_StimulusGrant/Attribute:stimulus' => 'Stimulus',
|
||||
'Class:URP_StimulusGrant/Attribute:stimulus+' => 'stimulus code',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_AttributeGrant
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:URP_AttributeGrant' => 'attribute_permission',
|
||||
'Class:URP_AttributeGrant+' => 'permissions at the attributes level',
|
||||
'Class:URP_AttributeGrant/Attribute:actiongrantid' => 'Action grant',
|
||||
'Class:URP_AttributeGrant/Attribute:actiongrantid+' => 'action grant',
|
||||
'Class:URP_AttributeGrant/Attribute:attcode' => 'Attribute',
|
||||
'Class:URP_AttributeGrant/Attribute:attcode+' => 'attribute code',
|
||||
));
|
||||
|
||||
//
|
||||
// String from the User Interface: menu, messages, buttons, etc...
|
||||
//
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Menu:WelcomeMenu' => 'Bienvenue',
|
||||
'Menu:WelcomeMenu+' => 'Bienvenue dans iTop',
|
||||
'Menu:WelcomeMenuPage' => 'Bienvenue',
|
||||
'Menu:WelcomeMenuPage+' => 'Bienvenue dans iTop',
|
||||
'UI:WelcomeMenu:Title' => 'Bienvenue dans iTop',
|
||||
|
||||
'UI:WelcomeMenu:LeftBlock' => '<p>iTop est un portail opérationnel complet et libre pour gérer votre SI.</p>
|
||||
<ul>il contient:
|
||||
<li>Une base de gestion des configuration (CMDB - Configuration management database) pour documenter et gérer votre parc informatique.</li>
|
||||
@@ -303,7 +195,6 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
<li>Des tableaux de bord pour avoir rapidement une vue synthétique de votre SI.</li>
|
||||
</ul>
|
||||
<p>Tous ces modules peuvent être installés séparément, à votre rythme.</p>',
|
||||
|
||||
'UI:WelcomeMenu:RightBlock' => '<p>iTop a été conçu pour les fournisseurs de service, il permet à vos équipes IT de gérer facilement de multiples clients et organisations.
|
||||
<ul>iTop fournit un riche ensemble de processus métier pour:
|
||||
<li>Augmenter l\'efficacité de la gestion de votre SI</li>
|
||||
@@ -319,7 +210,6 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
<li>Contrôllez l\'actif le plus important de votre SI : la documentation.</li>
|
||||
</ul>
|
||||
</p>',
|
||||
|
||||
'UI:WelcomeMenu:AllOpenRequests' => 'Requêtes en cours: %1$d',
|
||||
'UI:WelcomeMenu:MyCalls' => 'Mes Appels Support',
|
||||
'UI:WelcomeMenu:OpenIncidents' => 'Incidents en cours: %1$d',
|
||||
@@ -332,12 +222,12 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'UI:Button:Logoff' => 'Déconnexion',
|
||||
'UI:Button:GlobalSearch' => 'Rechercher',
|
||||
'UI:Button:Search' => 'Rechercher',
|
||||
|
||||
'UI:Button:Query' => ' Lancer la requête ',
|
||||
'UI:Button:Ok' => 'Ok',
|
||||
'UI:Button:Cancel' => 'Annuler',
|
||||
'UI:Button:Apply' => 'Appliquer',
|
||||
'UI:Button:Back' => ' << Retour ',
|
||||
'UI:Button:Restart' => ' |<< Recommencer ',
|
||||
'UI:Button:Next' => ' Suite >> ',
|
||||
'UI:Button:Finish' => ' Terminer ',
|
||||
'UI:Button:DoImport' => ' Lancer l\'import ! ',
|
||||
@@ -355,26 +245,24 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'UI:Button:Delete' => ' Supprimer ! ',
|
||||
'UI:Button:ChangePassword' => ' Changer ! ',
|
||||
'UI:Button:ResetPassword' => ' Ràz du mot de passe ',
|
||||
|
||||
'UI:SearchToggle' => 'Recherche',
|
||||
|
||||
'UI:ClickToCreateNew' => 'Créer un nouvel objet de type %1$s',
|
||||
'UI:SearchFor_Class' => 'Rechercher des objets de type %1$s',
|
||||
'UI:NoObjectToDisplay' => 'Aucun objet à afficher.',
|
||||
'UI:Error:MandatoryTemplateParameter_object_id' => 'Le paramètre object_id est obligatoire quand link_attr est spécifié. Vérifiez la définition du modèle.',
|
||||
'UI:Error:MandatoryTemplateParameter_link_attr' => 'Le paramètre target_attr est obligatoire quand link_attr est spécifié. Vérifiez la définition du modèle.',
|
||||
'UI:Error:MandatoryTemplateParameter_target_attr' => 'Le paramètre taarget_attr est obligatoire quand link_attr est spécifié. Vérifiez la définition du modèle.',
|
||||
'UI:Error:MandatoryTemplateParameter_group_by' => 'Le paramètre group_by est obligatoire. Vérifiez la définition du modèle.',
|
||||
'UI:Error:InvalidGroupByFields' => 'Liste des champs "group by" incorrecte: "%1$s".',
|
||||
'UI:Error:UnsupportedStyleOfBlock' => 'Erreur: style de bloc("%1$s") inconnu.',
|
||||
'UI:Error:IncorrectLinkDefinition_LinkedClass_Class' => 'la définition du lien est incorrecte: la classe d\'objets à gérer: %1$s n\'est référencée par aucune clef externe de la classe %2$s',
|
||||
'UI:Error:Object_Class_Id_NotFound' => 'L\'objet: %1$s:%2$d est introuvable.',
|
||||
'UI:Error:WizardCircularReferenceInDependencies' => 'Erreur: Référence circulaire entre les dépendences entre champs, vérifiez le modèle de données.',
|
||||
'UI:Error:UploadedFileTooBig' => 'Le fichier téléchargé est trop gros. (La taille maximale autorisée est %1$s). Vérifiez la valeur de la variable upload_max_filesize dans la configuration PHP.',
|
||||
'UI:Error:UploadedFileTooBig' => 'Le fichier téléchargé est trop gros. (La taille maximale autorisée est %1$s). Vérifiez la valeur des variables upload_max_filesize et post_max_size dans la configuration PHP.',
|
||||
'UI:Error:UploadedFileTruncated.' => 'Le fichier téléchargé a été tronqué !',
|
||||
'UI:Error:NoTmpDir' => 'Il n\'y a aucun répertoire temporaire de défini.',
|
||||
'UI:Error:CannotWriteToTmp_Dir' => 'Impossible d\'écrire le fichier temporaire sur disque. upload_tmp_dir = "%1$s".',
|
||||
'UI:Error:UploadStoppedByExtension_FileName' => 'Téléchargement arrêté à cause de l\'extension. (Nom du fichier original = "%1$s").',
|
||||
'UI:Error:UploadFailedUnknownCause_Code' => 'Le téléchargement a échoué pour une raison inconnue. (Code d\'erreur = "%1$s").',
|
||||
|
||||
'UI:Error:1ParametersMissing' => 'Erreur: Pour effectuer cette opération il manque le paramètre suivant: %1$s.',
|
||||
'UI:Error:2ParametersMissing' => 'Erreur: Pour effectuer cette opération il manque les paramètres suivants: %1$s and %2$s.',
|
||||
'UI:Error:3ParametersMissing' => 'Erreur: Pour effectuer cette opération il manque les paramètres suivants: %1$s, %2$s and %3$s.',
|
||||
@@ -390,7 +278,6 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'UI:Error:ObjectAlreadyCloned' => 'Erreur: l\'objet a déjà été dupliqué !',
|
||||
'UI:Error:ObjectAlreadyCreated' => 'Erreur: l\'objet a déjà été créé !',
|
||||
'UI:Error:Invalid_Stimulus_On_Object_In_State' => 'Erreur: le stimulus "%1$s" n\'est pas valide pour l\'objet %2$s dans l\'état "%3$s".',
|
||||
|
||||
'UI:GroupBy:Count' => 'Nombre',
|
||||
'UI:GroupBy:Count+' => 'Nombre d\'éléments',
|
||||
'UI:CountOfObjects' => '%1$d objets correspondants aux critères.',
|
||||
@@ -399,12 +286,21 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'UI:History:LastModified_On_By' => 'Dernière modification par %2$s le %1$s.',
|
||||
'UI:HistoryTab' => 'Historique',
|
||||
'UI:NotificationsTab' => 'Notifications',
|
||||
'UI:History:BulkImports' => 'Historique',
|
||||
'UI:History:BulkImports+' => 'Liste des imports CSV (le dernier est en haut de la liste)',
|
||||
'UI:History:BulkImportDetails' => 'Changements résultant de l\'import CSV du %1$s (auteur: %2$s)',
|
||||
'UI:History:Date' => 'Date',
|
||||
'UI:History:Date+' => 'Date de modification',
|
||||
'UI:History:User' => 'Utilisateur',
|
||||
'UI:History:User+' => 'Utilisateur qui a fait la modification',
|
||||
'UI:History:Changes' => 'Changements',
|
||||
'UI:History:Changes+' => 'Changements sur cet objet',
|
||||
'UI:History:StatsCreations' => 'Créés',
|
||||
'UI:History:StatsCreations+' => 'Nombre d\'objets créés',
|
||||
'UI:History:StatsModifs' => 'Modifiés',
|
||||
'UI:History:StatsModifs+' => 'Nombre d\'objets modifiés',
|
||||
'UI:History:StatsDeletes' => 'Effacés',
|
||||
'UI:History:StatsDeletes+' => 'Nombre d\'objets effacés',
|
||||
'UI:Loading' => 'Chargement...',
|
||||
'UI:Menu:Actions' => 'Actions',
|
||||
'UI:Menu:New' => 'Créer...',
|
||||
@@ -414,11 +310,10 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'UI:Menu:CSVExport' => 'Exporter en CSV',
|
||||
'UI:Menu:Modify' => 'Modifier...',
|
||||
'UI:Menu:Delete' => 'Supprimer...',
|
||||
'UI:Menu:Manage' => 'Gérer...',
|
||||
'UI:Menu:BulkDelete' => 'Supprimer...',
|
||||
'UI:UndefinedObject' => 'non défini',
|
||||
'UI:Document:OpenInNewWindow:Download' => 'Ouvrir dans un nouvelle fenêtre: %1$s, Télécharger: %2$s',
|
||||
'UI:SelectAllToggle+' => 'Tout Sélectionner / Tout Désélectionner',
|
||||
'UI:SelectAllToggle+' => 'Tout sélectionner / Tout déselectionner',
|
||||
'UI:TruncatedResults' => '%1$d objets affichés sur %2$d',
|
||||
'UI:DisplayAll' => 'Tout afficher',
|
||||
'UI:CollapseList' => 'Refermer',
|
||||
@@ -447,6 +342,9 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'UI:LogOff:ThankYou' => 'Merci d\'avoir utilisé iTop',
|
||||
'UI:LogOff:ClickHereToLoginAgain' => 'Cliquez ici pour vous reconnecter...',
|
||||
'UI:ChangePwdMenu' => 'Changer de mot de passe...',
|
||||
'UI:Login:PasswordChanged' => 'Mot de passe mis à jour !',
|
||||
'UI:AccessRO-All' => 'iTop est en lecture seule',
|
||||
'UI:AccessRO-Users' => 'iTop est en lecture seule pour les utilisateurs finaux',
|
||||
'UI:Login:RetypePwdDoesNotMatch' => 'Les deux saisies du nouveau mot de passe ne sont pas identiques !',
|
||||
'UI:Button:Login' => 'Entrer dans iTop',
|
||||
'UI:Login:Error:AccessRestricted' => 'L\'accès à iTop est soumis à autorisation. Merci de contacter votre administrateur iTop.',
|
||||
@@ -462,6 +360,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'UI:CSVImport:idField' => 'id (Clef primaire)',
|
||||
'UI:Title:BulkImport' => 'iTop - Import massif',
|
||||
'UI:Title:BulkImport+' => 'Assistant d\'import CSV',
|
||||
'UI:Title:BulkSynchro_nbItem_ofClass_class' => 'Synchronisation de %1$d éléments de type %2$s',
|
||||
'UI:CSVImport:ClassesSelectOne' => '-- choisir une valeur --',
|
||||
'UI:CSVImport:ErrorExtendedAttCode' => 'Erreur interne: "%1$s" n\'est pas une code correct car "%2$s" n\'est pas une clef externe de la classe "%3$s"',
|
||||
'UI:CSVImport:ObjectsWillStayUnchanged' => '%1$d objets(s) resteront inchangés.',
|
||||
@@ -494,35 +393,28 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'UI:CSVImport:Tab:Templates' => 'Modèles',
|
||||
'UI:CSVImport:PasteData' => 'Collez ici les données à importer:',
|
||||
'UI:CSVImport:PickClassForTemplate' => 'Choisissez un modèle à télécharger: ',
|
||||
'UI:CSVImport:SeparatorCharacter' => 'Caractère séparateur:',
|
||||
'UI:CSVImport:TextQualifierCharacter' => 'Entourage des champs texte',
|
||||
'UI:CSVImport:CommentsAndHeader' => 'En-tête et commentaires',
|
||||
'UI:CSVImport:SeparatorCharacter' => 'Separator character:',
|
||||
'UI:CSVImport:TextQualifierCharacter' => 'Text qualifier character',
|
||||
'UI:CSVImport:CommentsAndHeader' => 'Comments and header',
|
||||
'UI:CSVImport:SeparatorCharacter' => 'Séparateur:',
|
||||
'UI:CSVImport:TextQualifierCharacter' => 'Délimiteur de texte',
|
||||
'UI:CSVImport:CommentsAndHeader' => 'Commentaires et en-tête',
|
||||
'UI:CSVImport:SelectClass' => 'Sélectionner le type d\'objets à importer:',
|
||||
'UI:CSVImport:AdvancedMode' => 'Mode expert',
|
||||
'UI:CSVImport:AdvancedMode+' => 'En mode expert, l\'"id" (clef primaire) des objets peut être utilisé pour renommer des objets.' .
|
||||
'Cependant la colonne "id" (si elle est présente) ne peut être utilisée que comme clef de recherche et ne peut pas être combinée avec une autre clef de recherche.',
|
||||
'UI:CSVImport:AdvancedMode+' => 'En mode expert, l\'"id" (clef primaire) des objets peut être utilisé pour renommer des objets.Cependant la colonne "id" (si elle est présente) ne peut être utilisée que comme clef de recherche et ne peut pas être combinée avec une autre clef de recherche.',
|
||||
'UI:CSVImport:SelectAClassFirst' => 'Pour configurer la correspondance, choississez d\'abord un type ci-dessus.',
|
||||
'UI:CSVImport:HeaderFields' => 'Champs',
|
||||
'UI:CSVImport:HeaderMappings' => 'Correspondance',
|
||||
'UI:CSVImport:HeaderSearch' => 'Recherche ?',
|
||||
'UI:CSVImport:AlertIncompleteMapping' => 'Veuillez choisir le correspondance de chacun des champs.',
|
||||
'UI:CSVImport:AlertNoSearchCriteria' => 'Veuillez choisir au moins une clef de recherche.',
|
||||
'UI:CSVImport:Encoding' => 'Encodage des caractères',
|
||||
|
||||
'UI:CSVImport:Encoding' => 'Encodage des caractères',
|
||||
'UI:UniversalSearchTitle' => 'iTop - Recherche Universelle',
|
||||
'UI:UniversalSearch:Error' => 'Erreur : %1$s',
|
||||
'UI:UniversalSearch:LabelSelectTheClass' => 'Sélectionnez le type d\'objets à rechercher : ',
|
||||
|
||||
'UI:Audit:Title' => 'iTop - Audit de la CMDB',
|
||||
'UI:Audit:InteractiveAudit' => 'Audit Interactif',
|
||||
'UI:Audit:HeaderAuditRule' => 'Règle d\'audit',
|
||||
'UI:Audit:HeaderNbObjects' => 'Nb d\'Objets',
|
||||
'UI:Audit:HeaderNbErrors' => 'Nb d\'Erreurs',
|
||||
'UI:Audit:PercentageOk' => '% Ok',
|
||||
|
||||
'UI:RunQuery:Title' => 'iTop - Evaluation de requêtes OQL',
|
||||
'UI:RunQuery:QueryExamples' => 'Exemples de requêtes',
|
||||
'UI:RunQuery:HeaderPurpose' => 'Objectif',
|
||||
@@ -534,7 +426,6 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'UI:RunQuery:DevelopedQuery' => 'Requête OQL décompilée : ',
|
||||
'UI:RunQuery:SerializedFilter' => 'Version sérialisée : ',
|
||||
'UI:RunQuery:Error' => 'Une erreur s\'est produite durant l\'exécution de la requête : %1$s',
|
||||
|
||||
'UI:Schema:Title' => 'Modèle de données iTop',
|
||||
'UI:Schema:CategoryMenuItem' => 'Catégorie <b>%1$s</b>',
|
||||
'UI:Schema:Relationships' => 'Relations',
|
||||
@@ -593,13 +484,11 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'UI:Schema:LifeCycleAttributeMustChange' => 'Doit changer',
|
||||
'UI:Schema:LifeCycleAttributeMustPrompt' => 'L\'utilisateur se verra proposer de changer la valeur',
|
||||
'UI:Schema:LifeCycleEmptyList' => 'liste vide',
|
||||
|
||||
'UI:LinksWidget:Autocomplete+' => 'Tapez les 3 premiers caractères...',
|
||||
'UI:Combo:SelectValue' => '--- choisissez une valeur ---',
|
||||
'UI:Label:SelectedObjects' => 'Objets sélectionnés: ',
|
||||
'UI:Label:AvailableObjects' => 'Objets disponibles: ',
|
||||
'UI:Link_Class_Attributes' => 'Attributs du type %1$s',
|
||||
'UI:SelectAllToggle+' => 'Tout sélectionner / Tout déselectionner',
|
||||
'UI:AddObjectsOf_Class_LinkedWith_Class_Instance' => 'Ajouter des objets de type %1$s liés à %3$s (%2$s)',
|
||||
'UI:AddObjectsOf_Class_LinkedWith_Class' => 'Ajouter des objets de type %1$s à lier à cet objet de type %2$s',
|
||||
'UI:ManageObjectsOf_Class_LinkedWith_Class_Instance' => 'Gérer les objets de type %1$s liés à %3$s (%2$s)',
|
||||
@@ -607,15 +496,17 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'UI:RemoveLinkedObjectsOf_Class' => 'Enlever les objets sélectionnés',
|
||||
'UI:Message:EmptyList:UseAdd' => 'La liste est vide, utilisez le bouton "Ajouter..." pour ajouter des objets.',
|
||||
'UI:Message:EmptyList:UseSearchForm' => 'Utilisez le formulaire de recherche ci-dessus pour trouver les objets à ajouter.',
|
||||
|
||||
'UI:Wizard:FinalStepTitle' => 'Dernière étape: confirmation',
|
||||
'UI:Title:DeletionOf_Object' => 'Suppression de %1$s',
|
||||
'UI:Title:BulkDeletionOf_Count_ObjectsOf_Class' => 'Suppression massive de %1$d objets de type %2$s',
|
||||
'UI:Delete:NotAllowedToDelete' => 'Vous n\'êtes pas autorisé à supprimer cet objet',
|
||||
'UI:Delete:NotAllowedToUpdate_Fields' => 'Vous n\'êtes pas autorisé à mettre à jour les champs suivants : %1$s',
|
||||
'UI:Error:NotEnoughRightsToDelete' => 'Cet objet ne peut pas être supprimé car l\'utilisateur courant n\'a pas les droits nécessaires.',
|
||||
'UI:Error:CannotDeleteBecause' => 'Cet objet ne peut pas être effacé. Raison: %1$s',
|
||||
'UI:Error:CannotDeleteBecauseOfDepencies' => 'Cet objet ne peut pas être supprimé, des opérations manuelles sont nécessaire avant sa suppression.',
|
||||
'UI:Error:CannotDeleteBecauseManualOpNeeded' => 'Des opération manuelles sont nécessaires avant de pouvoir effacer cet objet',
|
||||
'UI:Archive_User_OnBehalfOf_User' => '%1$s pour %2$s',
|
||||
'UI:Delete:Deleted' => 'supprimé',
|
||||
'UI:Delete:AutomaticallyDeleted' => 'supprimé automatiquement',
|
||||
'UI:Delete:AutomaticResetOf_Fields' => 'mise à jour automatique des champ(s): %1$s',
|
||||
'UI:Delete:CleaningUpRefencesTo_Object' => 'Suppression de toutes les références vers %1$s...',
|
||||
@@ -624,14 +515,15 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'UI:Delete:_Name_Class_Deleted' => ' %2$s %1$s supprimé.',
|
||||
'UI:Delete:ConfirmDeletionOf_Name' => 'Suppression de %1$s',
|
||||
'UI:Delete:ConfirmDeletionOf_Count_ObjectsOf_Class' => 'Suppression de %1$d objets de type %2$s',
|
||||
'UI:Delete:ShouldBeDeletedAtomaticallyButNotAllowed' => 'Devrait être supprimé automatiquement, mais vous n\'avez pas le droit d\'effectuer cette opération.',
|
||||
'UI:Delete:MustBeDeletedManuallyButNotAllowed' => 'Doit être supprimé manuellement - mais vous n\'avez pas le droit de supprimer cet objet, contactez votre administrateur pour régler ce problème',
|
||||
'UI:Delete:CannotDeleteBecause' => 'Ne peux pas être supprimé: %1$s',
|
||||
'UI:Delete:ShouldBeDeletedAtomaticallyButNotPossible' => 'Devrait être supprimé automatiquement, mais cela n\'est pas possible: %1$s',
|
||||
'UI:Delete:MustBeDeletedManuallyButNotPossible' => 'Doit être supprimé manuellement, mais cela n\'est pas possible: %1$s',
|
||||
'UI:Delete:WillBeDeletedAutomatically' => 'Sera supprimé automatiquement',
|
||||
'UI:Delete:MustBeDeletedManually' => 'Doit être supprimé manuellement',
|
||||
'UI:Delete:CannotUpdateBecause_Issue' => 'Devrait être mis à jour automatiquement, mais: %1$s',
|
||||
'UI:Delete:WillAutomaticallyUpdate_Fields' => 'Va être mis à jour automatiquement (champs impactés : %1$s)',
|
||||
'UI:Delete:Count_Objects/LinksReferencing_Object' => '%1$d objets ou liens font référence à %2$s',
|
||||
'UI:Delete:Count_Objects/LinksReferencingTheObjects' => '%1$d objets ou liens font référence à certain des objets à supprimer',
|
||||
'UI:Delete:Count_Objects/LinksReferencingTheObjects' => '%1$d objets ou liens font référence à certain des objets à supprimer',
|
||||
'UI:Delete:ReferencesMustBeDeletedToEnsureIntegrity' => 'pour garantir l\'intégrité de la base de données, toutes les références doivent être supprimées.',
|
||||
'UI:Delete:Consequence+' => 'Ce qui va être effectué',
|
||||
'UI:Delete:SorryDeletionNotAllowed' => 'Désolé, vous n\'êtes pas autorisé à supprimer cette objet. Voir les explications détaillées ci-dessus.',
|
||||
@@ -648,9 +540,9 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'UI:Search:Count_ObjectsOf_Class_Found' => 'Trouvé %1$d objet(s) de type %2$s.',
|
||||
'UI:Search:NoObjectFound' => 'Aucun objet trouvé.',
|
||||
'UI:ModificationPageTitle_Object_Class' => 'iTop - %2$s - Modification de %1$s',
|
||||
'UI:ModificationTitle_Class_Object' => '%1$s - Modification de <span class=\"hilite\">%2$s</span>',
|
||||
'UI:ModificationTitle_Class_Object' => '%1$s - Modification de <span class="hilite">%2$s</span>',
|
||||
'UI:ClonePageTitle_Object_Class' => 'iTop - %2$s - Duplication de %1$s',
|
||||
'UI:CloneTitle_Class_Object' => ' %1$s - Duplication de <span class=\"hilite\">%2$s</span>',
|
||||
'UI:CloneTitle_Class_Object' => ' %1$s - Duplication de <span class="hilite">%2$s</span>',
|
||||
'UI:CreationPageTitle_Class' => 'iTop - Création d\'un objet de type %1$s ',
|
||||
'UI:CreationTitle_Class' => 'Création d\'un objet de type %1$s',
|
||||
'UI:SelectTheTypeOf_Class_ToCreate' => 'Sélectionnez le type de %1$s à créer :',
|
||||
@@ -663,11 +555,10 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'UI:Apply_Stimulus_On_Object_In_State_ToTarget_State' => '%1$s pour %2$s de l\'état %3$s vers l\'état %4$s.',
|
||||
'UI:ObjectCouldNotBeWritten' => 'L\'objet ne peut pas être enregistré: %1$s',
|
||||
'UI:PageTitle:FatalError' => 'iTop - Erreur Fatale',
|
||||
'UI:FatalErrorMessage' => 'Erreur fatale, iTop ne peut pas continuer.',
|
||||
'UI:SystemIntrusion' => 'Accès non autorisé. Vous êtes en train de d\'effectuer une opération qui ne vous est pas permise.',
|
||||
'UI:FatalErrorMessage' => 'Erreur fatale, iTop ne peut pas continuer.',
|
||||
'UI:Error_Details' => 'Erreur: %1$s.',
|
||||
|
||||
'UI:PageTitle:ClassProjections' => 'iTop gestion des utilisateurs - projections des classes',
|
||||
'UI:PageTitle:ClassProjections' => 'iTop gestion des utilisateurs - projections des classes',
|
||||
'UI:PageTitle:ProfileProjections' => 'iTop gestion des utilisateurs - projections des profils',
|
||||
'UI:UserManagement:Class' => 'Type',
|
||||
'UI:UserManagement:Class+' => 'Type des objets',
|
||||
@@ -704,16 +595,11 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'UI:UserManagement:NoLifeCycleApplicable' => 'N/A',
|
||||
'UI:UserManagement:NoLifeCycleApplicable+' => 'Aucun cycle de vie n\'est défini pour ce type d\'objets.',
|
||||
'UI:UserManagement:GrantMatrix' => 'Matrice des droits',
|
||||
'UI:USerManagement:LinkBetween_User_And_Profile' => 'Lien entre %1$s et %2$s',
|
||||
'UI:USerManagement:LinkBetween_User_And_Org' => 'Lien entre %1$s et %2$s',
|
||||
|
||||
'UI:UserManagement:LinkBetween_User_And_Profile' => 'Lien entre %1$s et %2$s',
|
||||
'UI:UserManagement:LinkBetween_User_And_Org' => 'Lien entre %1$s et %2$s',
|
||||
'Menu:AdminTools' => 'Outils d\'admin',
|
||||
'Menu:AdminTools+' => 'Outils d\'administration',
|
||||
'Menu:AdminTools?' => 'Ces outils sont accessibles uniquement aux utilisateurs possédant le profil Administrateur.',
|
||||
|
||||
'UI:AuditMenu' => 'Audit',
|
||||
'UI:AuditMenu+' => 'Audit',
|
||||
|
||||
'UI:ChangeManagementMenu' => 'Gestion du Changement',
|
||||
'UI:ChangeManagementMenu+' => 'Gestion du Changement',
|
||||
'UI:ChangeManagementMenu:Title' => 'Résumé des changements',
|
||||
@@ -721,67 +607,48 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'UI-ChangeManagementMenu-ChangesByStatus' => 'Changements par état',
|
||||
'UI-ChangeManagementMenu-ChangesByWorkgroup' => 'Changements par workgroup',
|
||||
'UI-ChangeManagementMenu-ChangesNotYetAssigned' => 'Changements en attente d\'assignation',
|
||||
|
||||
'UI:ConfigurationItemsMenu'=> 'Actifs (CIs)',
|
||||
'UI:ConfigurationItemsMenu+'=> 'Tous les actifs',
|
||||
'UI:ConfigurationItemsMenu' => 'Actifs (CIs)',
|
||||
'UI:ConfigurationItemsMenu+' => 'Tous les actifs',
|
||||
'UI:ConfigurationItemsMenu:Title' => 'Résumé des actifs (CIs)',
|
||||
'UI-ConfigurationItemsMenu-ServersByCriticity' => 'Serveurs par criticité',
|
||||
'UI-ConfigurationItemsMenu-PCsByCriticity' => 'PCs par criticité',
|
||||
'UI-ConfigurationItemsMenu-NWDevicesByCriticity' => 'Equipements réseau par criticité',
|
||||
'UI-ConfigurationItemsMenu-ApplicationsByCriticity' => 'Applications par criticité',
|
||||
|
||||
'UI:ConfigurationManagementMenu' => 'Gestion de Configuration',
|
||||
'UI:ConfigurationManagementMenu+' => 'Gestion de Configuration',
|
||||
'UI:ConfigurationManagementMenu:Title' => 'Résumé de l\'Infrastructure',
|
||||
'UI-ConfigurationManagementMenu-InfraByType' => 'Nombre d\'éléments par type',
|
||||
'UI-ConfigurationManagementMenu-InfraByStatus' => 'Nombre d\'éléments par état',
|
||||
|
||||
'UI:ConfigMgmtMenuOverview:Title' => 'Tableau de bord de la Gestion de Configuration',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIbyStatus' => 'Actifs par état',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIByType' => 'Actifs par type',
|
||||
|
||||
'UI:RequestMgmtMenuOverview:Title' => 'Tableau de bord de la Gestion des Demandes Utilisateurs',
|
||||
'UI-RequestManagementOverview-RequestByService' => 'Demandes par service',
|
||||
'UI-RequestManagementOverview-RequestByPriority' => 'Demandes par priorité',
|
||||
'UI-RequestManagementOverview-RequestUnassigned' => 'Demandes non affectées à un agent',
|
||||
|
||||
'UI:IncidentMgmtMenuOverview:Title' => 'Tableau de bord de la Gestion des Incidents',
|
||||
'UI-IncidentManagementOverview-IncidentByService' => 'Incidents par service',
|
||||
'UI-IncidentManagementOverview-IncidentByPriority' => 'Incidents par priorité',
|
||||
'UI-IncidentManagementOverview-IncidentUnassigned' => 'Incidents non affectés à un agent',
|
||||
|
||||
'UI:ChangeMgmtMenuOverview:Title' => 'Tableau de bord de la Gestion des Changements',
|
||||
'UI-ChangeManagementOverview-ChangeByType' => 'Changes par type',
|
||||
'UI-ChangeManagementOverview-ChangeUnassigned' => 'Changes non affectés à un agent',
|
||||
'UI-ChangeManagementOverview-ChangeWithOutage' => 'Interruptions de service liées à un changement',
|
||||
|
||||
'UI:ServiceMgmtMenuOverview:Title' => 'Tableau de bord de la Gestion des Services',
|
||||
'UI-ServiceManagementOverview-CustomerContractToRenew' => 'Contrats clients à renouveler dans les 30 jours',
|
||||
'UI-ServiceManagementOverview-ProviderContractToRenew' => 'Contrats fournisseurs à renouveler dans les 30 jours',
|
||||
|
||||
'UI:ConfigMgmtMenuOverview:Title' => 'Tableau de bord de la Gestion de Configuration',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIbyStatus' => 'Actifs par état',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIByType' => 'Actifs par type',
|
||||
'UI:RequestMgmtMenuOverview:Title' => 'Tableau de bord de la Gestion des Demandes Utilisateurs',
|
||||
'UI-RequestManagementOverview-RequestByService' => 'Demandes par service',
|
||||
'UI-RequestManagementOverview-RequestByPriority' => 'Demandes par priorité',
|
||||
'UI-RequestManagementOverview-RequestUnassigned' => 'Demandes non affectées à un agent',
|
||||
'UI:IncidentMgmtMenuOverview:Title' => 'Tableau de bord de la Gestion des Incidents',
|
||||
'UI-IncidentManagementOverview-IncidentByService' => 'Incidents par service',
|
||||
'UI-IncidentManagementOverview-IncidentByPriority' => 'Incidents par priorité',
|
||||
'UI-IncidentManagementOverview-IncidentUnassigned' => 'Incidents non affectés à un agent',
|
||||
'UI:ChangeMgmtMenuOverview:Title' => 'Tableau de bord de la Gestion des Changements',
|
||||
'UI-ChangeManagementOverview-ChangeByType' => 'Changes par type',
|
||||
'UI-ChangeManagementOverview-ChangeUnassigned' => 'Changes non affectés à un agent',
|
||||
'UI-ChangeManagementOverview-ChangeWithOutage' => 'Interruptions de service liées à un changement',
|
||||
'UI:ServiceMgmtMenuOverview:Title' => 'Tableau de bord de la Gestion des Services',
|
||||
'UI-ServiceManagementOverview-CustomerContractToRenew' => 'Contrats clients à renouveler dans les 30 jours',
|
||||
'UI-ServiceManagementOverview-ProviderContractToRenew' => 'Contrats fournisseurs à renouveler dans les 30 jours',
|
||||
'UI:ContactsMenu' => 'Contacts',
|
||||
'UI:ContactsMenu+' => 'Contacts',
|
||||
'UI:ContactsMenu:Title' => 'Résumé des contacts',
|
||||
'UI-ContactsMenu-ContactsByLocation' => 'Contacts par emplacement',
|
||||
'UI-ContactsMenu-ContactsByType' => 'Contacts par type',
|
||||
'UI-ContactsMenu-ContactsByStatus' => 'Contacts par état',
|
||||
|
||||
|
||||
'Menu:CSVImportMenu' => 'Import CSV',
|
||||
'Menu:CSVImportMenu+' => 'Import ou mise à jour en masse',
|
||||
|
||||
'Menu:DataModelMenu' => 'Modèle de Données',
|
||||
'Menu:DataModelMenu+' => 'Résumé du Modèle de Données',
|
||||
|
||||
'Menu:ExportMenu' => 'Exportation',
|
||||
'Menu:ExportMenu+' => 'Exportation des résultats d\'une requête en HTML, CSV ou XML',
|
||||
|
||||
'UI:IncidentManagementMenu:Title' => 'Résumé des incidents',
|
||||
'UI-IncidentManagementMenu-IncidentsByType' => 'Incidents par type',
|
||||
'UI-IncidentManagementMenu-IncidentsByStatus' => 'Incidents par état',
|
||||
'UI-IncidentManagementMenu-IncidentsByWorkgroup' => 'Incidents par workgroup',
|
||||
'UI-IncidentManagementMenu-IncidentsNotYetAssigned' => 'Incidents en attente d\'assignation',
|
||||
|
||||
'Menu:NotificationsMenu' => 'Notifications',
|
||||
'Menu:NotificationsMenu+' => 'Configuration des Notifications',
|
||||
'UI:NotificationsMenu:Title' => 'Configuration des <span class="hilite">Notifications</span>',
|
||||
@@ -807,43 +674,36 @@ Lors de l\'association à un déclencheur, on attribue à chaque action un numé
|
||||
'UI:NotificationsMenu:OnStateLeave' => 'Quand un objet quitte un état donné',
|
||||
'UI:NotificationsMenu:Actions' => 'Actions',
|
||||
'UI:NotificationsMenu:AvailableActions' => 'Actions existantes',
|
||||
|
||||
'Menu:AuditCategories' => 'Catégories d\'audit',
|
||||
'Menu:AuditCategories+' => 'Catégories d\'audit',
|
||||
'Menu:Notifications:Title' => 'Catégories d\'audit',
|
||||
|
||||
'Menu:RunQueriesMenu' => 'Requêtes OQL',
|
||||
'Menu:RunQueriesMenu+' => 'Executer une requête OQL',
|
||||
|
||||
'Menu:DataAdministration' => 'Administration des données',
|
||||
'Menu:DataAdministration+' => 'Administration des données',
|
||||
|
||||
'Menu:UniversalSearchMenu' => 'Recherche Universelle',
|
||||
'Menu:UniversalSearchMenu+' => 'Rechercher n\'importe quel objet...',
|
||||
|
||||
'Menu:ApplicationLogMenu' => 'Application Log',
|
||||
'Menu:ApplicationLogMenu+' => 'Application Log',
|
||||
'Menu:ApplicationLogMenu:Title' => 'Application Log',
|
||||
|
||||
'Menu:UserManagementMenu' => 'Gestion des Utilisateurs',
|
||||
'Menu:UserManagementMenu+' => 'Gestion des Utilisateurs',
|
||||
|
||||
'Menu:ProfilesMenu' => 'Profils',
|
||||
'Menu:ProfilesMenu+' => 'Profils',
|
||||
'Menu:ProfilesMenu:Title' => 'Profils',
|
||||
|
||||
'Menu:UserAccountsMenu' => 'Comptes Utilisateur',
|
||||
'Menu:UserAccountsMenu+' => 'Comptes Utilisateur',
|
||||
'MenuUI:UserAccountsMenu:Title' => 'Comptes Utilisateur',
|
||||
|
||||
'Menu:UserAccountsMenu' => 'Comptes Utilisateurs',
|
||||
'Menu:UserAccountsMenu+' => 'Comptes Utilisateurs',
|
||||
'Menu:UserAccountsMenu:Title' => 'Comptes Utilisateusr',
|
||||
'UI:iTopVersion:Short' => 'iTop version %1$s',
|
||||
'UI:iTopVersion:Long' => 'iTop version %1$s-%2$s du %3$s',
|
||||
'UI:PropertiesTab' => 'Propriétés',
|
||||
|
||||
'UI:OpenDocumentInNewWindow_' => 'Ouvrir de document dans un autre fenêtre: %1$s',
|
||||
'UI:DownloadDocument_' => 'Télécharger ce document: %1$s',
|
||||
'UI:Document:NoPreview' => 'L\'aperçu n\'est pas disponible pour ce type de documents',
|
||||
'UI:DeadlineMissedBy_duration' => 'Passé de %1$s',
|
||||
'UI:Deadline_LessThan1Min' => '< 1 min',
|
||||
'UI:Deadline_Minutes' => '%1$d min',
|
||||
'UI:Deadline_Hours_Minutes' => '%1$dh %2$dmin',
|
||||
'UI:Deadline_LessThan1Min' => '< 1 min',
|
||||
'UI:Deadline_Minutes' => '%1$d min',
|
||||
'UI:Deadline_Hours_Minutes' => '%1$dh %2$dmin',
|
||||
'UI:Deadline_Days_Hours_Minutes' => '%1$dj %2$dh %3$dmin',
|
||||
'UI:Help' => 'Aide',
|
||||
'UI:PasswordConfirm' => '(Confirmer)',
|
||||
@@ -851,7 +711,7 @@ Lors de l\'association à un déclencheur, on attribue à chaque action un numé
|
||||
'UI:DisplayThisMessageAtStartup' => 'Afficher ce message au démarrage',
|
||||
'UI:RelationshipGraph' => 'Vue graphique',
|
||||
'UI:RelationshipList' => 'Liste',
|
||||
|
||||
'UI:OperationCancelled' => 'Opération Annulée',
|
||||
'Portal:Title' => 'Portail utilisateur iTop',
|
||||
'Portal:Refresh' => 'Rafraîchir',
|
||||
'Portal:Back' => 'Retour',
|
||||
@@ -859,17 +719,51 @@ Lors de l\'association à un déclencheur, on attribue à chaque action un numé
|
||||
'Portal:ChangeMyPassword' => 'Changer mon mot de passe',
|
||||
'Portal:Disconnect' => 'Déconnexion',
|
||||
'Portal:OpenRequests' => 'Mes requêtes en cours',
|
||||
'Portal:ResolvedRequests' => 'Mes requêtes résolues',
|
||||
'Portal:ResolvedRequests' => 'Mes requêtes résolues',
|
||||
'Portal:SelectService' => 'Choisissez un service dans le catalogue:',
|
||||
'Portal:PleaseSelectOneService' => 'Veuillez choisir un service',
|
||||
'Portal:SelectSubcategoryFrom_Service' => 'Choisissez une sous-catégorie du service %1$s:',
|
||||
'Portal:PleaseSelectAServiceSubCategory' => 'Veuillez choisir une sous-catégorie',
|
||||
'Portal:PleaseSelectAServiceSubCategory' => 'Veuillez choisir une sous-catégorie',
|
||||
'Portal:DescriptionOfTheRequest' => 'Entrez la description de votre requête:',
|
||||
'Portal:TitleRequestDetailsFor_Request' => 'Détails de votre requête %1$s:',
|
||||
'Portal:NoOpenRequest' => 'Aucune requête.',
|
||||
'Portal:Button:CloseTicket' => 'Clôre cette requête',
|
||||
'Portal:EnterYourCommentsOnTicket' => 'Vos commentaires à propos du traitement de cette requête:',
|
||||
'Portal:ErrorNoContactForThisUser' => 'Erreur: l\'utilisateur courant n\'est pas associé à une Personne/Contact. Contactez votre administrateur.',
|
||||
'Portal:Attachments' => 'Pièces jointes',
|
||||
'Portal:AddAttachment' => ' Ajouter une pièce jointe ',
|
||||
'Portal:RemoveAttachment' => ' Enlever la pièce jointe ',
|
||||
'Portal:Attachment_No_To_Ticket_Name' => 'Pièce jointe #%1$d à %2$s (%3$s)',
|
||||
'Enum:Undefined' => 'Non défini',
|
||||
'UI:DurationForm_Days_Hours_Minutes_Seconds' => '%1$s J %2$s H %3$s min %4$s s',
|
||||
'UI:ModifyAllPageTitle' => 'Modification par lots',
|
||||
'UI:Modify_N_ObjectsOf_Class' => 'Modification de %1$d objet(s) de type %2$s',
|
||||
'UI:Modify_M_ObjectsOf_Class_OutOf_N' => 'Modification de %1$d (sur %3$d) objets de type %2$s',
|
||||
'UI:Menu:ModifyAll' => 'Modifier...',
|
||||
'UI:Button:ModifyAll' => 'Modifier',
|
||||
'UI:Button:PreviewModifications' => 'Aperçu des modifications >>',
|
||||
'UI:ModifiedObject' => 'Objet Modifié',
|
||||
'UI:BulkModifyStatus' => 'Opération',
|
||||
'UI:BulkModifyStatus+' => '',
|
||||
'UI:BulkModifyErrors' => 'Erreur',
|
||||
'UI:BulkModifyErrors+' => '',
|
||||
'UI:BulkModifyStatusOk' => 'Ok',
|
||||
'UI:BulkModifyStatusError' => 'Erreur',
|
||||
'UI:BulkModifyStatusModified' => 'Modifié',
|
||||
'UI:BulkModifyStatusSkipped' => 'Ignoré',
|
||||
'UI:BulkModify_Count_DistinctValues' => '%1$d valeurs distinctes:',
|
||||
'UI:BulkModify:Value_Exists_N_Times' => '%1$s, %2$d fois',
|
||||
'UI:BulkModify:N_MoreValues' => '%1$d valeurs supplémentaires...',
|
||||
'UI:AttemptingToSetAReadOnlyAttribute_Name' => 'Tentative de modification du champ en lecture seule: %1$s',
|
||||
'UI:FailedToApplyStimuli' => 'L\'action a échoué',
|
||||
'UI:StimulusModify_N_ObjectsOf_Class' => '%1$s: Modification de %2$d objet(s) de type %3$s',
|
||||
'UI:CaseLogTypeYourTextHere' => 'Nouvelle entrée ci-dessous:',
|
||||
'UI:CaseLog:DateFormat' => 'Y-m-d H:i:s',
|
||||
'UI:CaseLog:Header_Date_UserName' => '%1$s - %2$s:',
|
||||
'UI:CaseLog:InitialValue' => 'Valeur initiale:',
|
||||
'UI:AttemptingToSetASlaveAttribute_Name' => 'Le champ %1$s ne peut pas être modifié car il est géré par une synchronisation avec une source de données. Valeur ignorée.',
|
||||
'UI:ActionNotAllowed' => 'Vous n\'êtes pas autorisé à exécuter cette opération sur ces objets.',
|
||||
'UI:BulkAction:NoObjectSelected' => 'Veuillez s\électionner au moins un objet pour cette opération.',
|
||||
'UI:AttemptingToChangeASlaveAttribute_Name' => 'Le champ %1$s ne peut pas être modifié car il est géré par une synchronisation avec une source de données. Valeur inchangée.',
|
||||
));
|
||||
|
||||
?>
|
||||
|
||||
481
dictionaries/hu.dictionary.itop.core.php
Executable file
481
dictionaries/hu.dictionary.itop.core.php
Executable file
@@ -0,0 +1,481 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* @licence http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Class:ActionEmail' => 'E-mail értesítés',
|
||||
'Class:ActionEmail+' => '',
|
||||
'Class:ActionEmail/Attribute:test_recipient' => 'Teszt címzett',
|
||||
'Class:ActionEmail/Attribute:test_recipient+' => '',
|
||||
'Class:ActionEmail/Attribute:from' => 'Feladó',
|
||||
'Class:ActionEmail/Attribute:from+' => '',
|
||||
'Class:ActionEmail/Attribute:reply_to' => 'Válasz',
|
||||
'Class:ActionEmail/Attribute:reply_to+' => '',
|
||||
'Class:ActionEmail/Attribute:to' => 'Címzett',
|
||||
'Class:ActionEmail/Attribute:to+' => '',
|
||||
'Class:ActionEmail/Attribute:cc' => 'Másolatot kap',
|
||||
'Class:ActionEmail/Attribute:cc+' => '',
|
||||
'Class:ActionEmail/Attribute:bcc' => 'Titkos másolatot kap',
|
||||
'Class:ActionEmail/Attribute:bcc+' => '',
|
||||
'Class:ActionEmail/Attribute:subject' => 'Tárgy',
|
||||
'Class:ActionEmail/Attribute:subject+' => '',
|
||||
'Class:ActionEmail/Attribute:body' => 'Szöveg',
|
||||
'Class:ActionEmail/Attribute:body+' => '',
|
||||
'Class:ActionEmail/Attribute:importance' => 'Fontosság',
|
||||
'Class:ActionEmail/Attribute:importance+' => '',
|
||||
'Class:ActionEmail/Attribute:importance/Value:high' => 'Fontos',
|
||||
'Class:ActionEmail/Attribute:importance/Value:high+' => '',
|
||||
'Class:ActionEmail/Attribute:importance/Value:low' => 'Nem fontos',
|
||||
'Class:ActionEmail/Attribute:importance/Value:low+' => '',
|
||||
'Class:ActionEmail/Attribute:importance/Value:normal' => 'Normál',
|
||||
'Class:ActionEmail/Attribute:importance/Value:normal+' => '',
|
||||
'Class:TriggerOnStateEnter' => 'Kiváltó ok (állapotba belépés)',
|
||||
'Class:TriggerOnStateEnter+' => '',
|
||||
'Class:TriggerOnStateLeave' => 'Kiváltó ok (állapot elhagyás)',
|
||||
'Class:TriggerOnStateLeave+' => '',
|
||||
'Class:TriggerOnObjectCreate' => 'Kiváltó ok (objektum létrehozás)',
|
||||
'Class:TriggerOnObjectCreate+' => '',
|
||||
'Class:lnkTriggerAction' => 'Akció / Kiváltó ok',
|
||||
'Class:lnkTriggerAction+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:action_id' => 'Akció',
|
||||
'Class:lnkTriggerAction/Attribute:action_id+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_id' => 'Kiváltó ok',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_id+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:order' => 'Sorrend',
|
||||
'Class:lnkTriggerAction/Attribute:order+' => '',
|
||||
'Class:AsyncSendEmail' => 'E-mail (aszinkron)',
|
||||
'Class:AsyncSendEmail/Attribute:to' => 'Címzett',
|
||||
'Class:AsyncSendEmail/Attribute:subject' => 'Tárgy',
|
||||
'Class:AsyncSendEmail/Attribute:body' => 'Szöveg',
|
||||
'Class:AsyncSendEmail/Attribute:header' => 'Fejléc',
|
||||
'Class:CMDBChange' => 'Változás',
|
||||
'Class:CMDBChange+' => '',
|
||||
'Class:CMDBChange/Attribute:date' => 'Dátum',
|
||||
'Class:CMDBChange/Attribute:date+' => '',
|
||||
'Class:CMDBChange/Attribute:userinfo' => 'Egyéb információ',
|
||||
'Class:CMDBChange/Attribute:userinfo+' => '',
|
||||
'Class:CMDBChangeOp' => 'Változtatás művelet',
|
||||
'Class:CMDBChangeOp+' => '',
|
||||
'Class:CMDBChangeOp/Attribute:change' => 'Válktozás',
|
||||
'Class:CMDBChangeOp/Attribute:change+' => '',
|
||||
'Class:CMDBChangeOp/Attribute:objclass' => 'Objektum osztály',
|
||||
'Class:CMDBChangeOp/Attribute:objclass+' => '',
|
||||
'Class:CMDBChangeOp/Attribute:objkey' => 'Objektum azonosító',
|
||||
'Class:CMDBChangeOp/Attribute:objkey+' => '',
|
||||
'Class:CMDBChangeOp/Attribute:finalclass' => 'Típus',
|
||||
'Class:CMDBChangeOp/Attribute:finalclass+' => '',
|
||||
'Class:CMDBChangeOpCreate' => 'Objektum létrehozás',
|
||||
'Class:CMDBChangeOpCreate+' => '',
|
||||
'Class:CMDBChangeOpDelete' => 'Objektum törlés',
|
||||
'Class:CMDBChangeOpDelete+' => '',
|
||||
'Class:CMDBChangeOpSetAttribute' => 'Objektum változtatás',
|
||||
'Class:CMDBChangeOpSetAttribute+' => '',
|
||||
'Class:CMDBChangeOpSetAttribute/Attribute:attcode' => 'Attribútum',
|
||||
'Class:CMDBChangeOpSetAttribute/Attribute:attcode+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeScalar' => 'Tulajdonság változtatás',
|
||||
'Class:CMDBChangeOpSetAttributeScalar+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue' => 'Előző érték',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue' => 'Új érték',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeBlob' => 'Módosítás dátuma',
|
||||
'Class:CMDBChangeOpSetAttributeBlob+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata' => 'Előző adat',
|
||||
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeOneWayPassword' => 'Titkosított jelszó',
|
||||
'Class:CMDBChangeOpSetAttributeOneWayPassword/Attribute:prev_pwd' => 'Előző érték',
|
||||
'Class:CMDBChangeOpSetAttributeEncrypted' => 'Titkosított mező',
|
||||
'Class:CMDBChangeOpSetAttributeEncrypted/Attribute:prevstring' => 'Előző érték',
|
||||
'Class:CMDBChangeOpSetAttributeText' => 'Szöveg változás',
|
||||
'Class:CMDBChangeOpSetAttributeText+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata' => 'Előző adat',
|
||||
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeCaseLog' => 'Esemény napló',
|
||||
'Class:CMDBChangeOpSetAttributeCaseLog/Attribute:lastentry' => 'Utolsó bejegyzés',
|
||||
'Class:Event' => 'Napló esemény',
|
||||
'Class:Event+' => '',
|
||||
'Class:Event/Attribute:message' => 'Üzenet',
|
||||
'Class:Event/Attribute:message+' => '',
|
||||
'Class:Event/Attribute:date' => 'Dátum',
|
||||
'Class:Event/Attribute:date+' => '',
|
||||
'Class:Event/Attribute:userinfo' => 'Felhasználói információ',
|
||||
'Class:Event/Attribute:userinfo+' => '',
|
||||
'Class:Event/Attribute:finalclass' => 'Típus',
|
||||
'Class:Event/Attribute:finalclass+' => '',
|
||||
'Class:EventNotification' => 'Értesítés esemény',
|
||||
'Class:EventNotification+' => '',
|
||||
'Class:EventNotification/Attribute:trigger_id' => 'Kiváltó ok',
|
||||
'Class:EventNotification/Attribute:trigger_id+' => '',
|
||||
'Class:EventNotification/Attribute:action_id' => 'Felhasználó',
|
||||
'Class:EventNotification/Attribute:action_id+' => '',
|
||||
'Class:EventNotification/Attribute:object_id' => 'Objektum azonosító',
|
||||
'Class:EventNotification/Attribute:object_id+' => '',
|
||||
'Class:EventNotificationEmail' => 'E-mail küldés esemény',
|
||||
'Class:EventNotificationEmail+' => '',
|
||||
'Class:EventNotificationEmail/Attribute:to' => 'Címzett',
|
||||
'Class:EventNotificationEmail/Attribute:to+' => '',
|
||||
'Class:EventNotificationEmail/Attribute:cc' => 'Másolatot kap',
|
||||
'Class:EventNotificationEmail/Attribute:cc+' => '',
|
||||
'Class:EventNotificationEmail/Attribute:bcc' => 'Titkos másolatot kap',
|
||||
'Class:EventNotificationEmail/Attribute:bcc+' => '',
|
||||
'Class:EventNotificationEmail/Attribute:from' => 'Feladó',
|
||||
'Class:EventNotificationEmail/Attribute:from+' => '',
|
||||
'Class:EventNotificationEmail/Attribute:subject' => 'Tárgy',
|
||||
'Class:EventNotificationEmail/Attribute:subject+' => '',
|
||||
'Class:EventNotificationEmail/Attribute:body' => 'Szöveg',
|
||||
'Class:EventNotificationEmail/Attribute:body+' => '',
|
||||
'Class:EventIssue' => 'Kérés esemény',
|
||||
'Class:EventIssue+' => '',
|
||||
'Class:EventIssue/Attribute:issue' => 'Kérés',
|
||||
'Class:EventIssue/Attribute:issue+' => '',
|
||||
'Class:EventIssue/Attribute:impact' => 'Hatás',
|
||||
'Class:EventIssue/Attribute:impact+' => '',
|
||||
'Class:EventIssue/Attribute:page' => 'Oldal',
|
||||
'Class:EventIssue/Attribute:page+' => '',
|
||||
'Class:EventIssue/Attribute:arguments_post' => 'Kérés részletei',
|
||||
'Class:EventIssue/Attribute:arguments_post+' => '',
|
||||
'Class:EventIssue/Attribute:arguments_get' => 'URL ',
|
||||
'Class:EventIssue/Attribute:arguments_get+' => '',
|
||||
'Class:EventIssue/Attribute:callstack' => 'Híváslista',
|
||||
'Class:EventIssue/Attribute:callstack+' => '',
|
||||
'Class:EventIssue/Attribute:data' => 'Dátum',
|
||||
'Class:EventIssue/Attribute:data+' => '',
|
||||
'Class:EventWebService' => 'Web szolgáltatás esemény',
|
||||
'Class:EventWebService+' => '',
|
||||
'Class:EventWebService/Attribute:verb' => 'Kérés',
|
||||
'Class:EventWebService/Attribute:verb+' => '',
|
||||
'Class:EventWebService/Attribute:result' => 'Eredmény',
|
||||
'Class:EventWebService/Attribute:result+' => '',
|
||||
'Class:EventWebService/Attribute:log_info' => 'Info napló',
|
||||
'Class:EventWebService/Attribute:log_info+' => '',
|
||||
'Class:EventWebService/Attribute:log_warning' => 'Warning napló',
|
||||
'Class:EventWebService/Attribute:log_warning+' => '',
|
||||
'Class:EventWebService/Attribute:log_error' => 'Error napló',
|
||||
'Class:EventWebService/Attribute:log_error+' => '',
|
||||
'Class:EventWebService/Attribute:data' => 'Adat',
|
||||
'Class:EventWebService/Attribute:data+' => '',
|
||||
'Class:EventLoginUsage' => 'Belépés esemény',
|
||||
'Class:EventLoginUsage+' => '',
|
||||
'Class:EventLoginUsage/Attribute:user_id' => 'Felhasználó név',
|
||||
'Class:EventLoginUsage/Attribute:user_id+' => '',
|
||||
'Class:SynchroDataSource' => 'Szinkron adatforrás',
|
||||
'Class:SynchroDataSource/Attribute:name' => 'Neve',
|
||||
'Class:SynchroDataSource/Attribute:name+' => '',
|
||||
'Class:SynchroDataSource/Attribute:description' => 'Leírás',
|
||||
'Class:SynchroDataSource/Attribute:status' => 'Státusz',
|
||||
'Class:SynchroDataSource/Attribute:status/Value:implementation' => 'Megvalósított',
|
||||
'Class:SynchroDataSource/Attribute:status/Value:obsolete' => 'Elavult',
|
||||
'Class:SynchroDataSource/Attribute:status/Value:production' => 'Éles üzemben',
|
||||
'Class:SynchroDataSource/Attribute:user_id' => 'Felhasználó',
|
||||
'Class:SynchroDataSource/Attribute:scope_class' => 'Cél osztály',
|
||||
'Class:SynchroDataSource/Attribute:scope_restriction' => 'Tartalom szűkítés',
|
||||
'Class:SynchroDataSource/Attribute:full_load_periodicity' => 'Teljesen feltöltött intervallum',
|
||||
'Class:SynchroDataSource/Attribute:full_load_periodicity+' => '',
|
||||
'Class:SynchroDataSource/Attribute:reconciliation_policy' => 'Egyeztetési szabály',
|
||||
'Class:SynchroDataSource/Attribute:reconciliation_policy/Value:use_attributes' => 'A következő attribútum használata',
|
||||
'Class:SynchroDataSource/Attribute:reconciliation_policy/Value:use_primary_key' => 'Elsődleges kulcs használata',
|
||||
'Class:SynchroDataSource/Attribute:action_on_zero' => 'Action on zero',
|
||||
'Class:SynchroDataSource/Attribute:action_on_zero+' => '',
|
||||
'Class:SynchroDataSource/Attribute:action_on_zero/Value:create' => 'Létrehozás',
|
||||
'Class:SynchroDataSource/Attribute:action_on_zero/Value:error' => 'Hiba',
|
||||
'Class:SynchroDataSource/Attribute:action_on_one' => 'Action on one',
|
||||
'Class:SynchroDataSource/Attribute:action_on_one+' => '',
|
||||
'Class:SynchroDataSource/Attribute:action_on_one/Value:error' => 'Hiba',
|
||||
'Class:SynchroDataSource/Attribute:action_on_one/Value:update' => 'Firssítés',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple' => 'Action on many',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple+' => '',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple/Value:create' => 'Létrehozás',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple/Value:error' => 'Hiba',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple/Value:take_first' => 'Take the first one (véletlen?)',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy' => 'Törlési szabály',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:delete' => 'Törlés',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:ignore' => 'Figyelmen kívül hagyás',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:update' => 'Frissítés',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:update_then_delete' => 'Frissítés után törlés',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy_update' => 'Szabályok frissítése',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy_update+' => '',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy_retention' => 'Késleltetés időtartama',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy_retention+' => '',
|
||||
'Class:SynchroDataSource/Attribute:attribute_list' => 'Attribútum lista',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy' => 'Engedélyezett felhasználók',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy+' => '',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:administrators' => 'Csak rendszergazdák',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:everybody' => 'Mindenkinek engedélyezett az objektumok törlése',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:nobody' => 'Senki',
|
||||
'Class:SynchroDataSource/Attribute:url_icon' => 'Ikonok URL-je',
|
||||
'Class:SynchroDataSource/Attribute:url_icon+' => '',
|
||||
'Class:SynchroDataSource/Attribute:url_application' => 'Alkalmazások URL-je',
|
||||
'Class:SynchroDataSource/Attribute:url_application+' => '',
|
||||
'Class:SynchroAttribute' => 'Szinkron attribútumok',
|
||||
'Class:SynchroAttribute/Attribute:sync_source_id' => 'Szinkron adatforrás',
|
||||
'Class:SynchroAttribute/Attribute:attcode' => 'Kód',
|
||||
'Class:SynchroAttribute/Attribute:update' => 'Frissítés',
|
||||
'Class:SynchroAttribute/Attribute:reconcile' => 'Egyeztetés',
|
||||
'Class:SynchroAttribute/Attribute:update_policy' => 'Frissítési irányelv',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:master_locked' => 'Locked',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:master_unlocked' => 'Unlocked',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:write_if_empty' => 'Inicializálás ha üres',
|
||||
'Class:SynchroAttribute/Attribute:finalclass' => 'Osztály',
|
||||
'Class:SynchroAttExtKey' => 'Szinkron attribútum (ExtKey)',
|
||||
'Class:SynchroAttExtKey/Attribute:reconciliation_attcode' => 'Egyeztetés attribútuma',
|
||||
'Class:SynchroAttLinkSet' => 'Szinkron attribútum (Linkset)',
|
||||
'Class:SynchroAttLinkSet/Attribute:row_separator' => 'Sor elválasztó',
|
||||
'Class:SynchroAttLinkSet/Attribute:attribute_separator' => 'Attribútum elválasztó',
|
||||
'Class:SynchroLog' => 'Szinkron napló',
|
||||
'Class:SynchroLog/Attribute:sync_source_id' => 'Szinkron adatforrás',
|
||||
'Class:SynchroLog/Attribute:start_date' => 'Kezdés dátuma',
|
||||
'Class:SynchroLog/Attribute:end_date' => 'Befejezés dátuma',
|
||||
'Class:SynchroLog/Attribute:status' => 'Státusz',
|
||||
'Class:SynchroLog/Attribute:status/Value:completed' => 'Hibátlanul lefutott',
|
||||
'Class:SynchroLog/Attribute:status/Value:error' => 'Hibás',
|
||||
'Class:SynchroLog/Attribute:status/Value:running' => 'Még fut',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_seen' => 'Nb replikáció létrejött',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_total' => 'Nb replikáció összesen',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_deleted' => 'Nb objektumok törölve',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_deleted_errors' => 'Nb hibái törlés közben',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_obsoleted' => 'Nb objketumok elavultak',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_obsoleted_errors' => 'Nb hibák elavulás közben',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_created' => 'Nb objketumok létrehozva',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_created_errors' => 'Nb hibák létrehozás közben',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_updated' => 'Nb objektum frissítve',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_updated_errors' => 'Nb hibák firssítés közben',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_reconciled_errors' => 'Nb hibák rekonsziliálás közben',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_disappeared_no_action' => 'Nb replikáció eltűnt',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_new_updated' => 'Nb objketumok frissítve',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_new_unchanged' => 'Nb objketumok változatlanok',
|
||||
'Class:SynchroLog/Attribute:last_error' => 'Utolsó hiba',
|
||||
'Class:SynchroLog/Attribute:traces' => 'Trace',
|
||||
'Class:SynchroReplica' => 'Szinkron másolat',
|
||||
'Class:SynchroReplica/Attribute:sync_source_id' => 'Szinkron adatforrás',
|
||||
'Class:SynchroReplica/Attribute:dest_id' => 'Cél objektum azonosító',
|
||||
'Class:SynchroReplica/Attribute:dest_class' => 'Cél típusa',
|
||||
'Class:SynchroReplica/Attribute:status_last_seen' => 'Utolsó megtekintett',
|
||||
'Class:SynchroReplica/Attribute:status' => 'Státusz',
|
||||
'Class:SynchroReplica/Attribute:status/Value:modified' => 'Módosított',
|
||||
'Class:SynchroReplica/Attribute:status/Value:new' => 'Új',
|
||||
'Class:SynchroReplica/Attribute:status/Value:obsolete' => 'Elavult',
|
||||
'Class:SynchroReplica/Attribute:status/Value:orphan' => 'Árva',
|
||||
'Class:SynchroReplica/Attribute:status/Value:synchronized' => 'Szinkronizált',
|
||||
'Class:SynchroReplica/Attribute:status_dest_creator' => 'Objektum létrehozott?',
|
||||
'Class:SynchroReplica/Attribute:status_last_error' => 'Utolsó hiba',
|
||||
'Class:SynchroReplica/Attribute:info_creation_date' => 'Létrehozás dátuma',
|
||||
'Class:SynchroReplica/Attribute:info_last_modified' => 'Utolsó módosítás dátuma',
|
||||
'Class:appUserPreferences' => 'Felhasználói beállítások',
|
||||
'Class:appUserPreferences/Attribute:userid' => 'Felhasználó',
|
||||
'Class:appUserPreferences/Attribute:preferences' => 'Beállítások',
|
||||
'Core:AttributeLinkedSet' => 'Objektum tömbök',
|
||||
'Core:AttributeLinkedSet+' => '',
|
||||
'Core:AttributeLinkedSetIndirect' => 'Objektum tömbök (N-N)',
|
||||
'Core:AttributeLinkedSetIndirect+' => '',
|
||||
'Core:AttributeInteger' => 'Integer',
|
||||
'Core:AttributeInteger+' => '',
|
||||
'Core:AttributeDecimal' => 'Decimal',
|
||||
'Core:AttributeDecimal+' => '',
|
||||
'Core:AttributeBoolean' => 'Boolean',
|
||||
'Core:AttributeBoolean+' => '',
|
||||
'Core:AttributeString' => 'String',
|
||||
'Core:AttributeString+' => '',
|
||||
'Core:AttributeClass' => 'Class',
|
||||
'Core:AttributeClass+' => '',
|
||||
'Core:AttributeApplicationLanguage' => 'Alkalmazás nyelve',
|
||||
'Core:AttributeApplicationLanguage+' => '',
|
||||
'Core:AttributeFinalClass' => 'Class (auto)',
|
||||
'Core:AttributeFinalClass+' => '',
|
||||
'Core:AttributePassword' => 'Jelszó',
|
||||
'Core:AttributePassword+' => '',
|
||||
'Core:AttributeEncryptedString' => 'Encrypted string',
|
||||
'Core:AttributeEncryptedString+' => '',
|
||||
'Core:AttributeText' => 'Text',
|
||||
'Core:AttributeText+' => '',
|
||||
'Core:AttributeHTML' => 'HTML',
|
||||
'Core:AttributeHTML+' => '',
|
||||
'Core:AttributeEmailAddress' => 'E-mail cím',
|
||||
'Core:AttributeEmailAddress+' => '',
|
||||
'Core:AttributeIPAddress' => 'IP cím',
|
||||
'Core:AttributeIPAddress+' => '',
|
||||
'Core:AttributeOQL' => 'OQL',
|
||||
'Core:AttributeOQL+' => '',
|
||||
'Core:AttributeEnum' => 'Enum',
|
||||
'Core:AttributeEnum+' => '',
|
||||
'Core:AttributeTemplateString' => 'Sablon szöveg',
|
||||
'Core:AttributeTemplateString+' => '',
|
||||
'Core:AttributeTemplateText' => 'Sablon szöveg',
|
||||
'Core:AttributeTemplateText+' => '',
|
||||
'Core:AttributeTemplateHTML' => 'Sablon HTML',
|
||||
'Core:AttributeTemplateHTML+' => '',
|
||||
'Core:AttributeDateTime' => 'Date/time',
|
||||
'Core:AttributeDateTime+' => '',
|
||||
'Core:AttributeDate' => 'Date',
|
||||
'Core:AttributeDate+' => '',
|
||||
'Core:AttributeDeadline' => 'Határidő',
|
||||
'Core:AttributeDeadline+' => '',
|
||||
'Core:AttributeExternalKey' => 'Külső kulcs',
|
||||
'Core:AttributeExternalKey+' => '',
|
||||
'Core:AttributeExternalField' => 'Külső mező',
|
||||
'Core:AttributeExternalField+' => '',
|
||||
'Core:AttributeURL' => 'URL',
|
||||
'Core:AttributeURL+' => '',
|
||||
'Core:AttributeBlob' => 'Blob',
|
||||
'Core:AttributeBlob+' => '',
|
||||
'Core:AttributeOneWayPassword' => 'One way password',
|
||||
'Core:AttributeOneWayPassword+' => '',
|
||||
'Core:AttributeTable' => 'Table',
|
||||
'Core:AttributeTable+' => '',
|
||||
'Core:AttributePropertySet' => 'Tulajdonságok',
|
||||
'Core:AttributePropertySet+' => '',
|
||||
'Class:CMDBChangeOp/Attribute:date' => 'Dátum',
|
||||
'Class:CMDBChangeOp/Attribute:date+' => '',
|
||||
'Class:CMDBChangeOp/Attribute:userinfo' => 'Felhasználó',
|
||||
'Class:CMDBChangeOp/Attribute:userinfo+' => '',
|
||||
'Change:ObjectCreated' => 'Objektum létrehozva',
|
||||
'Change:ObjectDeleted' => 'Objektum törölve',
|
||||
'Change:ObjectModified' => 'Objektum módosítva',
|
||||
'Change:AttName_SetTo_NewValue_PreviousValue_OldValue' => '%1$s új értéke: %2$s (előző értéke: %3$s)',
|
||||
'Change:AttName_SetTo' => '%1$s új értéke %2$s',
|
||||
'Change:Text_AppendedTo_AttName' => '%1$s hozzáfűzve %2$s',
|
||||
'Change:AttName_Changed_PreviousValue_OldValue' => '%1$s módosítva, előző érték: %2$s',
|
||||
'Change:AttName_Changed' => '%1$s módosítva',
|
||||
'Change:AttName_EntryAdded' => '%1$s módosítva, új bejegyzés hozzáadva.',
|
||||
'Class:EventLoginUsage/Attribute:contact_name' => 'Felhasználó neve',
|
||||
'Class:EventLoginUsage/Attribute:contact_name+' => '',
|
||||
'Class:EventLoginUsage/Attribute:contact_email' => 'Felhasználó e-mail',
|
||||
'Class:EventLoginUsage/Attribute:contact_email+' => '',
|
||||
'Class:Action' => 'Egyedi akciók',
|
||||
'Class:Action+' => '',
|
||||
'Class:Action/Attribute:name' => 'Neve',
|
||||
'Class:Action/Attribute:name+' => '',
|
||||
'Class:Action/Attribute:description' => 'Leírás',
|
||||
'Class:Action/Attribute:description+' => '',
|
||||
'Class:Action/Attribute:status' => 'Státusz',
|
||||
'Class:Action/Attribute:status+' => '',
|
||||
'Class:Action/Attribute:status/Value:test' => 'Tesztelés alatt',
|
||||
'Class:Action/Attribute:status/Value:test+' => '',
|
||||
'Class:Action/Attribute:status/Value:enabled' => 'Éles üzemeben',
|
||||
'Class:Action/Attribute:status/Value:enabled+' => '',
|
||||
'Class:Action/Attribute:status/Value:disabled' => 'Inaktív',
|
||||
'Class:Action/Attribute:status/Value:disabled+' => '',
|
||||
'Class:Action/Attribute:trigger_list' => 'Kapcsolódó kiváltó okok',
|
||||
'Class:Action/Attribute:trigger_list+' => '',
|
||||
'Class:Action/Attribute:finalclass' => 'Típus',
|
||||
'Class:Action/Attribute:finalclass+' => '',
|
||||
'Class:ActionNotification' => 'Értesítés',
|
||||
'Class:ActionNotification+' => '',
|
||||
'Class:Trigger' => 'Kiváltó ok',
|
||||
'Class:Trigger+' => '',
|
||||
'Class:Trigger/Attribute:description' => 'Leírás',
|
||||
'Class:Trigger/Attribute:description+' => '',
|
||||
'Class:Trigger/Attribute:action_list' => 'Kiváltott akció',
|
||||
'Class:Trigger/Attribute:action_list+' => '',
|
||||
'Class:Trigger/Attribute:finalclass' => 'Típus',
|
||||
'Class:Trigger/Attribute:finalclass+' => '',
|
||||
'Class:TriggerOnObject' => 'Kiváltó ok (osztály függő)',
|
||||
'Class:TriggerOnObject+' => '',
|
||||
'Class:TriggerOnObject/Attribute:target_class' => 'Cél osztály',
|
||||
'Class:TriggerOnObject/Attribute:target_class+' => '',
|
||||
'Class:TriggerOnStateChange' => 'Kiváltó ok (állapot változás)',
|
||||
'Class:TriggerOnStateChange+' => '',
|
||||
'Class:TriggerOnStateChange/Attribute:state' => 'Állapot',
|
||||
'Class:TriggerOnStateChange/Attribute:state+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:action_name' => 'Akció',
|
||||
'Class:lnkTriggerAction/Attribute:action_name+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_name' => 'Kiváltó ok',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_name+' => '',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:never' => 'Senki',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:depends' => 'Csak adminisztrátorok',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:always' => 'Tíltott felhasználók',
|
||||
'SynchroDataSource:Description' => 'Leírás',
|
||||
'SynchroDataSource:Reconciliation' => 'Keresés & rekponsziliálás',
|
||||
'SynchroDataSource:Deletion' => 'Törlés szabályai',
|
||||
'SynchroDataSource:Status' => 'Státusz',
|
||||
'SynchroDataSource:Information' => 'Információ',
|
||||
'SynchroDataSource:Definition' => 'Meghatározás',
|
||||
'Core:SynchroAttributes' => 'Attribútumok',
|
||||
'Core:SynchroStatus' => 'Státusz',
|
||||
'Core:Synchro:ErrorsLabel' => 'Hibák',
|
||||
'Core:Synchro:CreatedLabel' => 'Létrehozva',
|
||||
'Core:Synchro:ModifiedLabel' => 'Módosítva',
|
||||
'Core:Synchro:UnchangedLabel' => 'Változatlan',
|
||||
'Core:Synchro:ReconciledErrorsLabel' => 'Hibák',
|
||||
'Core:Synchro:ReconciledLabel' => 'Rekonsziliált',
|
||||
'Core:Synchro:ReconciledNewLabel' => 'Létrehozva',
|
||||
'Core:SynchroReconcile:Yes' => 'Igen',
|
||||
'Core:SynchroReconcile:No' => 'Nem',
|
||||
'Core:SynchroUpdate:Yes' => 'Igen',
|
||||
'Core:SynchroUpdate:No' => 'Nem',
|
||||
'Core:Synchro:LastestStatus' => 'Utolsó státusz',
|
||||
'Core:Synchro:History' => 'Szinkronizáció történet',
|
||||
'Core:Synchro:NeverRun' => 'Ez a szinkronizáció még soha nem futott. Nincs még napló bejegyzés.',
|
||||
'Core:Synchro:SynchroEndedOn_Date' => 'Az utolsó szinkronizáció lefutásának időpontja: %1$s.',
|
||||
'Core:Synchro:SynchroRunningStartedOn_Date' => 'Az szinkronizáció elindut $1$s, de még fut.',
|
||||
'Menu:DataSources' => 'Szinkronizált adatforrások',
|
||||
'Menu:DataSources+' => '',
|
||||
'Core:Synchro:label_repl_ignored' => 'Figyelmen kívül hagyott (%1$s)',
|
||||
'Core:Synchro:label_repl_disappeared' => 'Elveszett (%1$s)',
|
||||
'Core:Synchro:label_repl_existing' => 'Létező (%1$s)',
|
||||
'Core:Synchro:label_repl_new' => 'Új (%1$s)',
|
||||
'Core:Synchro:label_obj_deleted' => 'Törölt (%1$s)',
|
||||
'Core:Synchro:label_obj_obsoleted' => 'Elavult (%1$s)',
|
||||
'Core:Synchro:label_obj_disappeared_errors' => 'Hibák (%1$s)',
|
||||
'Core:Synchro:label_obj_disappeared_no_action' => 'Beavatkozás nem szükséges (%1$s)',
|
||||
'Core:Synchro:label_obj_unchanged' => 'Változatan (%1$s)',
|
||||
'Core:Synchro:label_obj_updated' => 'Frisített (%1$s)',
|
||||
'Core:Synchro:label_obj_updated_errors' => 'Hibák (%1$s)',
|
||||
'Core:Synchro:label_obj_new_unchanged' => 'Változatlan (%1$s)',
|
||||
'Core:Synchro:label_obj_new_updated' => 'Frissített (%1$s)',
|
||||
'Core:Synchro:label_obj_created' => 'Létrehozott (%1$s)',
|
||||
'Core:Synchro:label_obj_new_errors' => 'Hibák (%1$s)',
|
||||
'Core:SynchroLogTitle' => '%1$s - %2$s',
|
||||
'Core:Synchro:Nb_Replica' => 'Másolat elkészítve: %1$s',
|
||||
'Core:Synchro:Nb_Class:Objects' => '%1$s: %2$s',
|
||||
'Class:SynchroDataSource/Error:AtLeastOneReconciliationKeyMustBeSpecified' => 'Egyeztetéshez legalább egy kulcsot meg kell adni, egyébként az egyeztetés az elsődleges kulcs alapján történik.',
|
||||
'Class:SynchroDataSource/Error:DeleteRetentionDurationMustBeSpecified' => 'A törlés késleltetésének időtartamát meg kell adni, egyébként az objektum törölve lesz annak elavulttá minősítése után.',
|
||||
'Class:SynchroDataSource/Error:DeletePolicyUpdateMustBeSpecified' => 'Lejárt objektumok frissítése nem tud megtörténni.',
|
||||
'Core:SynchroReplica:PublicData' => 'Publikus adatok',
|
||||
'Core:SynchroReplica:PrivateDetails' => 'Privát adatok',
|
||||
'Core:SynchroReplica:BackToDataSource' => 'Vissza a következő szinkron adatforráshoz: %1$s',
|
||||
'Core:SynchroReplica:ListOfReplicas' => 'Másolatok listája',
|
||||
'Core:SynchroAttExtKey:ReconciliationById' => 'Azonosító (Elsődleges kulcs)',
|
||||
'Core:SynchroAtt:attcode' => 'Attribútum',
|
||||
'Core:SynchroAtt:attcode+' => '',
|
||||
'Core:SynchroAtt:reconciliation' => 'Egyeztetés?',
|
||||
'Core:SynchroAtt:reconciliation+' => '',
|
||||
'Core:SynchroAtt:update' => 'Frissített?',
|
||||
'Core:SynchroAtt:update+' => '',
|
||||
'Core:SynchroAtt:update_policy' => 'Frissítési szabály',
|
||||
'Core:SynchroAtt:update_policy+' => '',
|
||||
'Core:SynchroAtt:reconciliation_attcode' => 'Egyeztetés kulcsa',
|
||||
'Core:SynchroAtt:reconciliation_attcode+' => '',
|
||||
'Core:SyncDataExchangeComment' => '(DataExchange)',
|
||||
'Core:Synchro:ListOfDataSources' => 'Adatforrások listája',
|
||||
'Core:Synchro:LastSynchro' => 'Utolsó szimkronizáció',
|
||||
'Core:Synchro:ThisObjectIsSynchronized' => 'Az objektum szinkronizálva a külső adatforrással.',
|
||||
'Core:Synchro:TheObjectWasCreatedBy_Source' => 'Objektum <b>létrehozva</b> a következő adatforrásban: %1$s',
|
||||
'Core:Synchro:TheObjectCanBeDeletedBy_Source' => 'Objektum <b>törölhető</b> a következő külső adatforrásból: %1$s',
|
||||
'Core:Synchro:TheObjectCannotBeDeletedByUser_Source' => '<b>Objektum nem törölhető</b> mert egy másik adatforrás (%1$s) tulajdona',
|
||||
'TitleSynchroExecution' => 'Szinkronizáció végrehajtás',
|
||||
'Class:SynchroDataSource:DataTable' => 'Adatbázis tábla: %1$s',
|
||||
'Core:SyncDataSourceObsolete' => 'Az adatforrás elvalultnak van jelölve. Művelet visszavonva.',
|
||||
'Core:SyncDataSourceAccessRestriction' => 'Csak az adminisztrátor vagy speciális jogokkal rendelkező felhasználó futtathatja a műveletet. Művelet visszavonva.',
|
||||
'Core:SyncTooManyMissingReplicas' => 'Import során az összes másolat elveszett. Az import valóban lefutott? Művelet visszavonva.',
|
||||
'Core:Duration_Seconds' => '%1$sds',
|
||||
'Core:Duration_Minutes_Seconds' => '%1$sdmin %2$sds',
|
||||
'Core:Duration_Hours_Minutes_Seconds' => '%1$sdh %2$sdmin %3$sds',
|
||||
'Core:Duration_Days_Hours_Minutes_Seconds' => '%1$sd %2$sdh %3$sdmin %4$ds',
|
||||
));
|
||||
?>
|
||||
768
dictionaries/hu.dictionary.itop.ui.php
Executable file
768
dictionaries/hu.dictionary.itop.ui.php
Executable file
@@ -0,0 +1,768 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* @licence http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Class:AuditRule' => 'Auditálási szabály',
|
||||
'Class:AuditRule+' => '',
|
||||
'Class:AuditRule/Attribute:name' => 'Szabály neve',
|
||||
'Class:AuditRule/Attribute:name+' => '',
|
||||
'Class:AuditRule/Attribute:description' => 'Auditálási szabály leírása',
|
||||
'Class:AuditRule/Attribute:description+' => '',
|
||||
'Class:AuditRule/Attribute:query' => 'Futtatandó lekérdezés',
|
||||
'Class:AuditRule/Attribute:query+' => '',
|
||||
'Class:AuditRule/Attribute:valid_flag' => 'Érvényes objektum?',
|
||||
'Class:AuditRule/Attribute:valid_flag+' => '',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:false' => 'hamis',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:false+' => '',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:true' => 'igaz',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:true+' => '',
|
||||
'Class:AuditRule/Attribute:category_id' => 'Kategória',
|
||||
'Class:AuditRule/Attribute:category_id+' => '',
|
||||
'Class:AuditCategory' => 'Audit kategória',
|
||||
'Class:AuditCategory+' => '',
|
||||
'Class:AuditCategory/Attribute:name' => 'Kategória neve',
|
||||
'Class:AuditCategory/Attribute:name+' => '',
|
||||
'Class:AuditCategory/Attribute:description' => 'Audit kategória leírása',
|
||||
'Class:AuditCategory/Attribute:description+' => '',
|
||||
'Class:AuditCategory/Attribute:definition_set' => 'Meghatározás halmaz',
|
||||
'Class:AuditCategory/Attribute:definition_set+' => '',
|
||||
'Class:AuditCategory/Attribute:rules_list' => 'Audit szabályok',
|
||||
'Class:AuditCategory/Attribute:rules_list+' => '',
|
||||
'Class:URP_Profiles' => 'Profil',
|
||||
'Class:URP_Profiles+' => '',
|
||||
'Class:URP_Profiles/Attribute:name' => 'Neve',
|
||||
'Class:URP_Profiles/Attribute:name+' => '',
|
||||
'Class:URP_Profiles/Attribute:description' => 'Leírás',
|
||||
'Class:URP_Profiles/Attribute:description+' => '',
|
||||
'Class:URP_Profiles/Attribute:user_list' => 'Felhasználók',
|
||||
'Class:URP_Profiles/Attribute:user_list+' => '',
|
||||
'Class:URP_UserProfile' => 'Profilhoz rendelt felhasználók',
|
||||
'Class:URP_UserProfile+' => '',
|
||||
'Class:URP_UserProfile/Attribute:userid' => 'Felhasználó',
|
||||
'Class:URP_UserProfile/Attribute:userid+' => '',
|
||||
'Class:URP_UserProfile/Attribute:profileid' => 'Profil',
|
||||
'Class:URP_UserProfile/Attribute:profileid+' => '',
|
||||
'Class:URP_UserProfile/Attribute:reason' => 'Ok',
|
||||
'Class:URP_UserProfile/Attribute:reason+' => '',
|
||||
'Class:URP_UserOrg' => 'Felhasználó szervezeti egysége',
|
||||
'Class:URP_UserOrg+' => '',
|
||||
'Class:URP_UserOrg/Attribute:userid' => 'Felhasználó',
|
||||
'Class:URP_UserOrg/Attribute:userid+' => '',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_id' => 'Szervezeti egység',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_id+' => '',
|
||||
'Class:URP_UserOrg/Attribute:reason' => 'Ok',
|
||||
'Class:URP_UserOrg/Attribute:reason+' => '',
|
||||
'Class:URP_ActionGrant' => 'action_permission',
|
||||
'Class:URP_ActionGrant+' => '',
|
||||
'Class:URP_ActionGrant/Attribute:profileid' => 'Profil',
|
||||
'Class:URP_ActionGrant/Attribute:profileid+' => '',
|
||||
'Class:URP_ActionGrant/Attribute:class' => 'Osztály',
|
||||
'Class:URP_ActionGrant/Attribute:class+' => '',
|
||||
'Class:URP_ActionGrant/Attribute:permission' => 'Hozzáférés',
|
||||
'Class:URP_ActionGrant/Attribute:permission+' => '',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:no' => 'Nem',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:no+' => '',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:yes' => 'Igen',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:yes+' => '',
|
||||
'Class:URP_ActionGrant/Attribute:action' => 'Akció',
|
||||
'Class:URP_ActionGrant/Attribute:action+' => '',
|
||||
'Class:URP_StimulusGrant' => 'stimulus_permission',
|
||||
'Class:URP_StimulusGrant+' => '',
|
||||
'Class:URP_StimulusGrant/Attribute:profileid' => 'Profil',
|
||||
'Class:URP_StimulusGrant/Attribute:profileid+' => '',
|
||||
'Class:URP_StimulusGrant/Attribute:class' => 'Osztály',
|
||||
'Class:URP_StimulusGrant/Attribute:class+' => '',
|
||||
'Class:URP_StimulusGrant/Attribute:permission' => 'Hozzáférés',
|
||||
'Class:URP_StimulusGrant/Attribute:permission+' => '',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:no' => 'Nem',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:no+' => '',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:yes' => 'Igen',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:yes+' => '',
|
||||
'Class:URP_StimulusGrant/Attribute:stimulus' => 'Stimulus',
|
||||
'Class:URP_StimulusGrant/Attribute:stimulus+' => '',
|
||||
'Class:URP_AttributeGrant' => 'attribute_permission',
|
||||
'Class:URP_AttributeGrant+' => '',
|
||||
'Class:URP_AttributeGrant/Attribute:actiongrantid' => 'Akció engedély',
|
||||
'Class:URP_AttributeGrant/Attribute:actiongrantid+' => '',
|
||||
'Class:URP_AttributeGrant/Attribute:attcode' => 'Attribútum',
|
||||
'Class:URP_AttributeGrant/Attribute:attcode+' => '',
|
||||
'Class:AuditRule/Attribute:category_name' => 'Kategória',
|
||||
'Class:AuditRule/Attribute:category_name+' => '',
|
||||
'Class:User' => 'Felhasználó',
|
||||
'Class:User+' => '',
|
||||
'Class:User/Attribute:finalclass' => 'Felhasználó típusa',
|
||||
'Class:User/Attribute:finalclass+' => '',
|
||||
'Class:User/Attribute:contactid' => 'Kapcsolattartó (személy)',
|
||||
'Class:User/Attribute:contactid+' => '',
|
||||
'Class:User/Attribute:last_name' => 'Családnév',
|
||||
'Class:User/Attribute:last_name+' => '',
|
||||
'Class:User/Attribute:first_name' => 'Keresztnév',
|
||||
'Class:User/Attribute:first_name+' => '',
|
||||
'Class:User/Attribute:email' => 'E-mail',
|
||||
'Class:User/Attribute:email+' => '',
|
||||
'Class:User/Attribute:login' => 'Bejelentkezési név',
|
||||
'Class:User/Attribute:login+' => '',
|
||||
'Class:User/Attribute:language' => 'Nyelv',
|
||||
'Class:User/Attribute:language+' => '',
|
||||
'Class:User/Attribute:language/Value:EN US' => 'Angol',
|
||||
'Class:User/Attribute:language/Value:EN US+' => '',
|
||||
'Class:User/Attribute:language/Value:HU HU' => 'Magyar',
|
||||
'Class:User/Attribute:language/Value:HU HU+' => '',
|
||||
'Class:User/Attribute:language/Value:FR FR' => 'Francia',
|
||||
'Class:User/Attribute:language/Value:FR FR+' => '',
|
||||
'Class:User/Attribute:profile_list' => 'Profil',
|
||||
'Class:User/Attribute:profile_list+' => '',
|
||||
'Class:User/Attribute:allowed_org_list' => 'Engedélyezett szervezeti egységek',
|
||||
'Class:User/Attribute:allowed_org_list+' => '',
|
||||
'Class:User/Error:LoginMustBeUnique' => 'Bejelentkezési névnek egyedinek kell lennie - "%1s" már létezik.',
|
||||
'Class:User/Error:AtLeastOneProfileIsNeeded' => 'Legalább egy profilt a felhasználóhoz kell rendelni.',
|
||||
'Class:URP_Dimensions' => 'Dimenzió',
|
||||
'Class:URP_Dimensions+' => '',
|
||||
'Class:URP_Dimensions/Attribute:name' => 'Neve',
|
||||
'Class:URP_Dimensions/Attribute:name+' => '',
|
||||
'Class:URP_Dimensions/Attribute:description' => 'Leírás',
|
||||
'Class:URP_Dimensions/Attribute:description+' => '',
|
||||
'Class:URP_Dimensions/Attribute:type' => 'Típus',
|
||||
'Class:URP_Dimensions/Attribute:type+' => '',
|
||||
'Class:URP_UserProfile/Attribute:userlogin' => 'Bejelentkezési név',
|
||||
'Class:URP_UserProfile/Attribute:userlogin+' => '',
|
||||
'Class:URP_UserProfile/Attribute:profile' => 'Profil',
|
||||
'Class:URP_UserProfile/Attribute:profile+' => '',
|
||||
'Class:URP_UserOrg/Attribute:userlogin' => 'Bejelentkezési név',
|
||||
'Class:URP_UserOrg/Attribute:userlogin+' => '',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_name' => 'Szervezeti egység',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_name+' => '',
|
||||
'Class:URP_ProfileProjection' => 'profile_projection',
|
||||
'Class:URP_ProfileProjection+' => '',
|
||||
'Class:URP_ProfileProjection/Attribute:dimensionid' => 'Dimenzió',
|
||||
'Class:URP_ProfileProjection/Attribute:dimensionid+' => '',
|
||||
'Class:URP_ProfileProjection/Attribute:dimension' => 'Dimenzió',
|
||||
'Class:URP_ProfileProjection/Attribute:dimension+' => '',
|
||||
'Class:URP_ProfileProjection/Attribute:profileid' => 'Profil',
|
||||
'Class:URP_ProfileProjection/Attribute:profileid+' => '',
|
||||
'Class:URP_ProfileProjection/Attribute:profile' => 'Profil',
|
||||
'Class:URP_ProfileProjection/Attribute:profile+' => '',
|
||||
'Class:URP_ProfileProjection/Attribute:value' => 'Érték',
|
||||
'Class:URP_ProfileProjection/Attribute:value+' => '',
|
||||
'Class:URP_ProfileProjection/Attribute:attribute' => 'Attribútum',
|
||||
'Class:URP_ProfileProjection/Attribute:attribute+' => '',
|
||||
'Class:URP_ClassProjection' => 'class_projection',
|
||||
'Class:URP_ClassProjection+' => '',
|
||||
'Class:URP_ClassProjection/Attribute:dimensionid' => 'Dimenzió',
|
||||
'Class:URP_ClassProjection/Attribute:dimensionid+' => '',
|
||||
'Class:URP_ClassProjection/Attribute:dimension' => 'Dimenzió',
|
||||
'Class:URP_ClassProjection/Attribute:dimension+' => '',
|
||||
'Class:URP_ClassProjection/Attribute:class' => 'Osztály',
|
||||
'Class:URP_ClassProjection/Attribute:class+' => '',
|
||||
'Class:URP_ClassProjection/Attribute:value' => 'Érték',
|
||||
'Class:URP_ClassProjection/Attribute:value+' => '',
|
||||
'Class:URP_ClassProjection/Attribute:attribute' => 'Attribútum',
|
||||
'Class:URP_ClassProjection/Attribute:attribute+' => '',
|
||||
'Class:URP_ActionGrant/Attribute:profile' => 'Profil',
|
||||
'Class:URP_ActionGrant/Attribute:profile+' => '',
|
||||
'Class:URP_StimulusGrant/Attribute:profile' => 'Profil',
|
||||
'Class:URP_StimulusGrant/Attribute:profile+' => '',
|
||||
'Menu:WelcomeMenu' => 'Üdvözlöm',
|
||||
'Menu:WelcomeMenu+' => '',
|
||||
'Menu:WelcomeMenuPage' => 'Üdvözlöm',
|
||||
'Menu:WelcomeMenuPage+' => '',
|
||||
'UI:WelcomeMenu:Title' => 'Üdvözli az iTop',
|
||||
'UI:WelcomeMenu:LeftBlock' => '<p>iTop egy teljeskörű, OpenSource, IT üzemeltetés támogató portál.</p>
|
||||
<ul>A következőket tartalmazza:
|
||||
<li>Teljeskörű CMDB (Konfiguráció menedzsment adatbázis) az IT eszközök dokumentálására és verzió kezelésére.</li>
|
||||
<li>Incidens menedzsment modul az összes IT-hez kapcsolódó kérés életciklusának követésére.</li>
|
||||
<li>Változás menedzsment modul az IT infrastruktúra változásainak nyomonkövetésére és tervezésére.</li>
|
||||
<li>Ismert hibák adatbázisa az incidens kezelés sebességének növelésére.</li>
|
||||
<li>Üzmeszünet modul az összes tervezett leállás tervezésére és azzal kapcsolatos kommunikáció támogatására.</li>
|
||||
<li>Dashboard-ok az IT infrastruktúra pillanatnyi állapotának gyors áttekintésére.</li>
|
||||
</ul>
|
||||
<p>Mindegyik modul önállóan telepíthető és használható.</p>',
|
||||
'UI:WelcomeMenu:RightBlock' => '<p>iTop egy szolgáltatás orientált megoldás, amely segít az IT szakembereknek több ügyfél és szervezet egyidejű menedzselését.
|
||||
<ul>az iTop az üzleti folyamatok javításához egy hatékony eszköz, mert:
|
||||
<li>javítja az IT menedzsment hatékonyságát</li>
|
||||
<li>növeli IT üzemeltetés teljesítményét</li>
|
||||
<li>növeli az ügyfél elégedettséget és a vezetők számára lehetőséget ad az üzleti teljesítmény növelésére</li>
|
||||
</ul>
|
||||
</p>
|
||||
<p>Az iTop teljesn nyílt ezért, egyszerűen integrálható a jelenlegi IT infrastruktúrába</p>
|
||||
<p>
|
||||
<ul>Az üzemeltetési portál bevezetésével:
|
||||
<li>jobban menedzselhető az egyre komplexebb IT infrstruktúra</li>
|
||||
<li>az ITIL folyamatok bevezetésre kerülnek</li>
|
||||
<li>hatékonyan tudja kezelni az egyik legfontosabb IT eszközt, a dokumentációt.</li>
|
||||
</ul>
|
||||
</p>',
|
||||
'UI:WelcomeMenu:AllOpenRequests' => 'Összes nyitott kérés: %1$d',
|
||||
'UI:WelcomeMenu:MyCalls' => 'Saját kérések',
|
||||
'UI:WelcomeMenu:OpenIncidents' => 'Nyitott incidensek: %1$d',
|
||||
'UI:WelcomeMenu:AllConfigItems' => 'Konfigurációs elemek: %1$d',
|
||||
'UI:WelcomeMenu:MyIncidents' => 'Hozzám rendelt incidensek',
|
||||
'UI:AllOrganizations' => 'Összes szervezeti egység',
|
||||
'UI:YourSearch' => 'Saját keresések',
|
||||
'UI:LoggedAsMessage' => 'Bejelentkezve %1$s',
|
||||
'UI:LoggedAsMessage+Admin' => 'Bejelentkezve %1$s (Administrator)',
|
||||
'UI:Button:Logoff' => 'Kijelentkezés',
|
||||
'UI:Button:GlobalSearch' => 'Keresés',
|
||||
'UI:Button:Search' => ' Keresés',
|
||||
'UI:Button:Query' => ' Lekérdezés',
|
||||
'UI:Button:Ok' => 'OK',
|
||||
'UI:Button:Cancel' => 'Mégse',
|
||||
'UI:Button:Apply' => 'Alkalmazás',
|
||||
'UI:Button:Back' => ' << Vissza',
|
||||
'UI:Button:Restart' => ' |<< Újraindítás',
|
||||
'UI:Button:Next' => ' Következő >>',
|
||||
'UI:Button:Finish' => ' Befejezés',
|
||||
'UI:Button:DoImport' => ' Importálás indítása',
|
||||
'UI:Button:Done' => ' Kész',
|
||||
'UI:Button:SimulateImport' => ' Import szimulálása',
|
||||
'UI:Button:Test' => 'Teszt!',
|
||||
'UI:Button:Evaluate' => ' Értékelés',
|
||||
'UI:Button:AddObject' => ' Hozzáad...',
|
||||
'UI:Button:BrowseObjects' => ' Böngészés...',
|
||||
'UI:Button:Add' => ' Hozzáad ',
|
||||
'UI:Button:AddToList' => ' << Hozzáad ',
|
||||
'UI:Button:RemoveFromList' => ' Eltávolít >> ',
|
||||
'UI:Button:FilterList' => ' Szűrés... ',
|
||||
'UI:Button:Create' => ' Létrehoz',
|
||||
'UI:Button:Delete' => ' Töröl !',
|
||||
'UI:Button:ChangePassword' => ' Jelszó változtatás',
|
||||
'UI:Button:ResetPassword' => ' Jelszó változtatás',
|
||||
'UI:SearchToggle' => 'Keresés',
|
||||
'UI:ClickToCreateNew' => 'Új %1$s létrehozása',
|
||||
'UI:SearchFor_Class' => '%1$s objektumok keresése',
|
||||
'UI:NoObjectToDisplay' => 'Nincs megjeleníthető objektum',
|
||||
'UI:Error:MandatoryTemplateParameter_object_id' => 'object_id pareméter kötelező a link_attr megadásánál. Ellenőrizze a sablon definíciót.',
|
||||
'UI:Error:MandatoryTemplateParameter_target_attr' => 'target_attr pareméter kötelező a link_attr megadásánál. Ellenőrizze a sablon definíciót.',
|
||||
'UI:Error:MandatoryTemplateParameter_group_by' => 'group_by paraméter kötelező. Ellenőrizze a sablon definíciót.',
|
||||
'UI:Error:InvalidGroupByFields' => 'Csoportosításnál használt érvénytelen mezők: "%1$s".',
|
||||
'UI:Error:UnsupportedStyleOfBlock' => 'Hiba: nem támogatott stílus tömb: "%1$s".',
|
||||
'UI:Error:IncorrectLinkDefinition_LinkedClass_Class' => 'Nem megfelelő kapcsolat meghatározás: kapcsolódó osztály: %1$s nem külső kulcs a %2$s osztályban',
|
||||
'UI:Error:Object_Class_Id_NotFound' => 'Objektum: %1$s:%2$d nem található.',
|
||||
'UI:Error:WizardCircularReferenceInDependencies' => 'Hiba: Körkörös hivatkozás az egymásra mutató mezők között. Ellenőrizze az adatmodelt.',
|
||||
'UI:Error:UploadedFileTooBig' => 'Feltöltendő fájl túl nagy. (Maximális méret: %1$s). Ellenőroizze a PHP konfigurációs fájlban az upload_max_filesize és post_max_size beállításokat.',
|
||||
'UI:Error:UploadedFileTruncated.' => 'Feltöltött fájl átméretezett!',
|
||||
'UI:Error:NoTmpDir' => 'Az átmeneti könyvtár nem meghatározott.',
|
||||
'UI:Error:CannotWriteToTmp_Dir' => 'Az átmeneti fájl nem írható. upload_tmp_dir = "%1$s".',
|
||||
'UI:Error:UploadStoppedByExtension_FileName' => 'Feltöltés megállt a fájl kiterjesztés miatt. (Eredeti fájl név = "%1$s").',
|
||||
'UI:Error:UploadFailedUnknownCause_Code' => 'Fájl feltöltés sikertelen ismeretlen hiba miatt. (Hibakód = "%1$s").',
|
||||
'UI:Error:1ParametersMissing' => 'Hiba: a következő paramétert meg kell adni ennél a műveletnél: %1$s.',
|
||||
'UI:Error:2ParametersMissing' => 'Hiba: a következő paramétereket meg kell adni ennél a műveletnél: %1$s és %2$s.',
|
||||
'UI:Error:3ParametersMissing' => 'Hiba: a következő paramétereket meg kell adni ennél a műveletnél: %1$s, %2$s és %3$s.',
|
||||
'UI:Error:4ParametersMissing' => 'Hiba: a következő paramétereket meg kell adni ennél a műveletnél: %1$s, %2$s, %3$s és %4$s.',
|
||||
'UI:Error:IncorrectOQLQuery_Message' => 'Hiba: nem megfelelő OQL lekérdezés: %1$',
|
||||
'UI:Error:AnErrorOccuredWhileRunningTheQuery_Message' => 'Hiba történt a lekérdezs futtatása közben: %1$s',
|
||||
'UI:Error:ObjectAlreadyUpdated' => 'Hiba: az objketum már korábban módosításra került.',
|
||||
'UI:Error:ObjectCannotBeUpdated' => 'Hiba: az objektum nem frissíthető.',
|
||||
'UI:Error:ObjectsAlreadyDeleted' => 'Hiba: az objektum már korában törlésre került!',
|
||||
'UI:Error:BulkDeleteNotAllowedOn_Class' => 'Az osztály objektumainak tömeges törlése nem engedélyezett %1$s',
|
||||
'UI:Error:DeleteNotAllowedOn_Class' => 'Az osztály objektumainak törlése nem engedélyezett %1$s',
|
||||
'UI:Error:BulkModifyNotAllowedOn_Class' => 'Az osztály objektumainak tömeges frissítése nem engedélyezett %1$s',
|
||||
'UI:Error:ObjectAlreadyCloned' => 'Hiba: az objektum már klónozott!',
|
||||
'UI:Error:ObjectAlreadyCreated' => 'Hiba: az objekltum már létrehozva!',
|
||||
'UI:Error:Invalid_Stimulus_On_Object_In_State' => 'Hiba: érvénytelen stimulus "%1$s" a következő objektum %2$s következő állapotában "%3$s".',
|
||||
'UI:GroupBy:Count' => 'Számossága',
|
||||
'UI:GroupBy:Count+' => '',
|
||||
'UI:CountOfObjects' => '%1$d darab objektum felel meg a kritériumoknak.',
|
||||
'UI_CountOfObjectsShort' => '%1$d objketum.',
|
||||
'UI:NoObject_Class_ToDisplay' => 'Nincs megjeleníthető %1$s',
|
||||
'UI:History:LastModified_On_By' => 'Utolsó módosítást a következő objektumon %1$s %2$s végezte.',
|
||||
'UI:HistoryTab' => 'Törénet',
|
||||
'UI:NotificationsTab' => 'Értesítés',
|
||||
'UI:History:BulkImports' => 'Történet',
|
||||
'UI:History:BulkImports+' => '',
|
||||
'UI:History:BulkImportDetails' => 'CSV import végrehajtva: %1$s (%2$s által)',
|
||||
'UI:History:Date' => 'Dátum',
|
||||
'UI:History:Date+' => '',
|
||||
'UI:History:User' => 'Felhasználó',
|
||||
'UI:History:User+' => '',
|
||||
'UI:History:Changes' => 'Változások',
|
||||
'UI:History:Changes+' => '',
|
||||
'UI:History:StatsCreations' => 'Létrehozva',
|
||||
'UI:History:StatsCreations+' => '',
|
||||
'UI:History:StatsModifs' => 'Módosítva',
|
||||
'UI:History:StatsModifs+' => '',
|
||||
'UI:History:StatsDeletes' => 'Törölve',
|
||||
'UI:History:StatsDeletes+' => '',
|
||||
'UI:Loading' => 'Betöltés...',
|
||||
'UI:Menu:Actions' => 'Akciók',
|
||||
'UI:Menu:New' => 'Új...',
|
||||
'UI:Menu:Add' => 'Hozzáad...',
|
||||
'UI:Menu:Manage' => 'Kezel...',
|
||||
'UI:Menu:EMail' => 'e-mail',
|
||||
'UI:Menu:CSVExport' => 'CSV export',
|
||||
'UI:Menu:Modify' => 'Módosít...',
|
||||
'UI:Menu:Delete' => 'Töröl...',
|
||||
'UI:Menu:BulkDelete' => 'Töröl...',
|
||||
'UI:UndefinedObject' => 'nem meghatározott',
|
||||
'UI:Document:OpenInNewWindow:Download' => 'Megnyitás új ablakban: %1$s, Letöltés: %2$s',
|
||||
'UI:SelectAllToggle+' => '',
|
||||
'UI:TruncatedResults' => '%1$d objektum megjelenítve %2$d példányból',
|
||||
'UI:DisplayAll' => 'Összes megjelenítése',
|
||||
'UI:CollapseList' => 'Elemek',
|
||||
'UI:CountOfResults' => '%1$d objektum',
|
||||
'UI:ChangesLogTitle' => 'Változás napló (%1$d):',
|
||||
'UI:EmptyChangesLogTitle' => 'Változás napló üres',
|
||||
'UI:SearchFor_Class_Objects' => 'Keresés %1$s objektumra',
|
||||
'UI:OQLQueryBuilderTitle' => 'OQL lekérdezés szerkesztő',
|
||||
'UI:OQLQueryTab' => 'OQL lekérdezés',
|
||||
'UI:SimpleSearchTab' => 'Egyszerű keresés',
|
||||
'UI:Details+' => '',
|
||||
'UI:SearchValue:Any' => '* Any *',
|
||||
'UI:SearchValue:Mixed' => '* mixed *',
|
||||
'UI:SelectOne' => '-- válasszon ki egyet --',
|
||||
'UI:Login:Welcome' => 'Üdvözli az iTop!',
|
||||
'UI:Login:IncorrectLoginPassword' => 'Nem megfelelő bejelentkezési név/jelszó, kérjük próbálja újra.',
|
||||
'UI:Login:IdentifyYourself' => 'Folytatás előtt azonosítsa magát',
|
||||
'UI:Login:UserNamePrompt' => 'Felhasználó név',
|
||||
'UI:Login:PasswordPrompt' => 'Jelszó',
|
||||
'UI:Login:ChangeYourPassword' => 'Jelszó változtatás',
|
||||
'UI:Login:OldPasswordPrompt' => 'Jelenlegi jelszó',
|
||||
'UI:Login:NewPasswordPrompt' => 'Új jelszó',
|
||||
'UI:Login:RetypeNewPasswordPrompt' => 'Új jelszó ismét',
|
||||
'UI:Login:IncorrectOldPassword' => 'Hiba: a jelenlegi jelszó hibás',
|
||||
'UI:LogOffMenu' => 'Kilépés',
|
||||
'UI:LogOff:ThankYou' => 'Köszönjük, hogy az iTop-ot használja!',
|
||||
'UI:LogOff:ClickHereToLoginAgain' => 'Ismételt bejelentkezéshez kattintson ide',
|
||||
'UI:ChangePwdMenu' => 'Jelszó módosítás...',
|
||||
'UI:Login:PasswordChanged' => 'Jelszó sikeresen beállítva!',
|
||||
'UI:AccessRO-All' => 'iTop csak olvasás módban',
|
||||
'UI:AccessRO-Users' => 'iTop csak olvasás módban a végfelhasználók számára',
|
||||
'UI:Login:RetypePwdDoesNotMatch' => 'Az új jelszó és ismételten beírt érték nem egyezik!',
|
||||
'UI:Button:Login' => 'Belépés az iTop alkalmazásba',
|
||||
'UI:Login:Error:AccessRestricted' => 'iTop hozzáférés korlátozva. Kérem forduljon az iTop adminisztrátorhoz!',
|
||||
'UI:Login:Error:AccessAdmin' => 'Adminisztrátori hozzáférés korlátozott. Kérem forduljon az iTop adminisztrátorhoz!',
|
||||
'UI:CSVImport:MappingSelectOne' => '-- válasszon ki egyet --',
|
||||
'UI:CSVImport:MappingNotApplicable' => '-- mező figyelmen kívül hagyása --',
|
||||
'UI:CSVImport:NoData' => 'Üres mező..., kérem agyjon meg adatot!',
|
||||
'UI:Title:DataPreview' => 'Adatok előnézete',
|
||||
'UI:CSVImport:ErrorOnlyOneColumn' => 'Hiba: Az import fájl egyetlen oszlopot tartalmaz. A megfelelő elválasztó karaktert adta meg?',
|
||||
'UI:CSVImport:FieldName' => 'Mező %1$d',
|
||||
'UI:CSVImport:DataLine1' => 'Adatsor 1',
|
||||
'UI:CSVImport:DataLine2' => 'Adatsor 2',
|
||||
'UI:CSVImport:idField' => 'id (elsődeges kulcs)',
|
||||
'UI:Title:BulkImport' => 'iTop - tömeges betöltés',
|
||||
'UI:Title:BulkImport+' => '',
|
||||
'UI:Title:BulkSynchro_nbItem_ofClass_class' => '%2$s osztály %1$d objektumának szinkronizációja',
|
||||
'UI:CSVImport:ClassesSelectOne' => '-- válasszon ki egyet --',
|
||||
'UI:CSVImport:ErrorExtendedAttCode' => 'Belső hiba: "%1$s" nem megfelelő kód, mert "%2$s" nem külső kulcsa a "%3$s" osztálynak',
|
||||
'UI:CSVImport:ObjectsWillStayUnchanged' => '%1$d objektumok változatlanok maradnak.',
|
||||
'UI:CSVImport:ObjectsWillBeModified' => '%1$d objektumok fognak megváltozni.',
|
||||
'UI:CSVImport:ObjectsWillBeAdded' => '%1$d objektumok hozzáadásra kerülnek.',
|
||||
'UI:CSVImport:ObjectsWillHaveErrors' => '%1$d objektumok hibásak lesznek.',
|
||||
'UI:CSVImport:ObjectsRemainedUnchanged' => '%1$d objektumok változatlanak maradtak',
|
||||
'UI:CSVImport:ObjectsWereModified' => '%1$d objektumok módosításra kerültek.',
|
||||
'UI:CSVImport:ObjectsWereAdded' => '%1$d objektumok hozzáadásra kerültek.',
|
||||
'UI:CSVImport:ObjectsHadErrors' => '%1$d objkektumok hibásak.',
|
||||
'UI:Title:CSVImportStep2' => '2. lépés az 5-ből: CSV adat opciók',
|
||||
'UI:Title:CSVImportStep3' => '3. lépés az 5-ből: Adatok összerendelés',
|
||||
'UI:Title:CSVImportStep4' => '4. lépés az 5-ből: Import szimuláció',
|
||||
'UI:Title:CSVImportStep5' => '5. lépés az 5-ből: Import befejezve',
|
||||
'UI:CSVImport:LinesNotImported' => 'Sorok, melyek nem lettek betöltve:',
|
||||
'UI:CSVImport:LinesNotImported+' => '',
|
||||
'UI:CSVImport:SeparatorComma+' => '',
|
||||
'UI:CSVImport:SeparatorSemicolon+' => '',
|
||||
'UI:CSVImport:SeparatorTab+' => '',
|
||||
'UI:CSVImport:SeparatorOther' => 'egyéb:',
|
||||
'UI:CSVImport:QualifierDoubleQuote+' => '',
|
||||
'UI:CSVImport:QualifierSimpleQuote+' => '',
|
||||
'UI:CSVImport:QualifierOther' => 'egyéb:',
|
||||
'UI:CSVImport:TreatFirstLineAsHeader' => 'Első sor fejléc információkat tartalmaz (oszlopok nevei)',
|
||||
'UI:CSVImport:Skip_N_LinesAtTheBeginning' => '%1$s sorok kihagyása a fájl elejéről',
|
||||
'UI:CSVImport:CSVDataPreview' => 'CSV adat előnézet',
|
||||
'UI:CSVImport:SelectFile' => 'Import fájl kiválasztása:',
|
||||
'UI:CSVImport:Tab:LoadFromFile' => 'Betöltés fájlból',
|
||||
'UI:CSVImport:Tab:CopyPaste' => 'Adat másolás és beillesztés',
|
||||
'UI:CSVImport:Tab:Templates' => 'Sablonok',
|
||||
'UI:CSVImport:PasteData' => 'Import adatok beillesztése:',
|
||||
'UI:CSVImport:PickClassForTemplate' => 'Letöltendő sablon kiválasztása:',
|
||||
'UI:CSVImport:SeparatorCharacter' => 'Elválasztó karakter:',
|
||||
'UI:CSVImport:TextQualifierCharacter' => 'Szöveg qualifier karakter',
|
||||
'UI:CSVImport:CommentsAndHeader' => 'Megjegyzések és fejléc',
|
||||
'UI:CSVImport:SelectClass' => 'Importálandó osztály kiválasztása:',
|
||||
'UI:CSVImport:AdvancedMode' => 'Haladó mód',
|
||||
'UI:CSVImport:AdvancedMode+' => '',
|
||||
'UI:CSVImport:SelectAClassFirst' => 'Adat összerendeléshez elöször válassza ki az osztályt.',
|
||||
'UI:CSVImport:HeaderFields' => 'Mező',
|
||||
'UI:CSVImport:HeaderMappings' => 'Összerendelés',
|
||||
'UI:CSVImport:HeaderSearch' => 'Keresés?',
|
||||
'UI:CSVImport:AlertIncompleteMapping' => 'Kérem adja meg az összes mezőre az összerendelési szabályokat.',
|
||||
'UI:CSVImport:AlertNoSearchCriteria' => 'Kérem adjon eg legalább egy keresési kritériumot',
|
||||
'UI:CSVImport:Encoding' => 'Karakter kódolása',
|
||||
'UI:UniversalSearchTitle' => 'iTop - Univerzális kereső',
|
||||
'UI:UniversalSearch:Error' => 'Hiba: %1$s',
|
||||
'UI:UniversalSearch:LabelSelectTheClass' => 'Keresendő osztály kiválasztása:',
|
||||
'UI:Audit:Title' => 'iTop - CMDB Audit',
|
||||
'UI:Audit:InteractiveAudit' => 'Interaktív Audit',
|
||||
'UI:Audit:HeaderAuditRule' => 'Audit szabály',
|
||||
'UI:Audit:HeaderNbObjects' => '# Objektumok',
|
||||
'UI:Audit:HeaderNbErrors' => '# Hibák',
|
||||
'UI:Audit:PercentageOk' => '% OK',
|
||||
'UI:RunQuery:Title' => 'iTop - OQL lekérdezés értékelés',
|
||||
'UI:RunQuery:QueryExamples' => 'Lekérdezés példák',
|
||||
'UI:RunQuery:HeaderPurpose' => 'Cél',
|
||||
'UI:RunQuery:HeaderPurpose+' => '',
|
||||
'UI:RunQuery:HeaderOQLExpression' => 'OQL kifejezés',
|
||||
'UI:RunQuery:HeaderOQLExpression+' => '',
|
||||
'UI:RunQuery:ExpressionToEvaluate' => 'Értékelendő kifejezés: ',
|
||||
'UI:RunQuery:MoreInfo' => 'Több információ a lekérdezésről: ',
|
||||
'UI:RunQuery:DevelopedQuery' => 'Újraírt lekérdező értékelés: ',
|
||||
'UI:RunQuery:SerializedFilter' => 'Szerializált szűrő: ',
|
||||
'UI:RunQuery:Error' => 'A lekérdezés futtatása közben a következő hiba jelentkezett: %1$s',
|
||||
'UI:Schema:Title' => 'iTop objektum séma',
|
||||
'UI:Schema:CategoryMenuItem' => '<b>%1$s</b> kategória',
|
||||
'UI:Schema:Relationships' => 'Kapcsolatok',
|
||||
'UI:Schema:AbstractClass' => 'Absztrakt osztály: nem példányosítható belőle objektum.',
|
||||
'UI:Schema:NonAbstractClass' => 'Nem absztrakt osztály: objektum példányosítható belőle.',
|
||||
'UI:Schema:ClassHierarchyTitle' => 'Osztály hierarchia',
|
||||
'UI:Schema:AllClasses' => 'Összes osztály',
|
||||
'UI:Schema:ExternalKey_To' => 'Külső kulcs %1$s-hoz',
|
||||
'UI:Schema:Columns_Description' => 'Oszlopok: <em>%1$s</em>',
|
||||
'UI:Schema:Default_Description' => 'Alapértelmezett: "%1$s"',
|
||||
'UI:Schema:NullAllowed' => 'Null érték engedélyezett',
|
||||
'UI:Schema:NullNotAllowed' => 'Null érték nem engedélyezett',
|
||||
'UI:Schema:Attributes' => 'Attribútumok',
|
||||
'UI:Schema:AttributeCode' => 'Attribútum kód',
|
||||
'UI:Schema:AttributeCode+' => '',
|
||||
'UI:Schema:Label' => 'Cimke',
|
||||
'UI:Schema:Label+' => '',
|
||||
'UI:Schema:Type' => 'Típus',
|
||||
'UI:Schema:Type+' => '',
|
||||
'UI:Schema:Origin' => 'Származás',
|
||||
'UI:Schema:Origin+' => '',
|
||||
'UI:Schema:Description' => 'Leírás',
|
||||
'UI:Schema:Description+' => '',
|
||||
'UI:Schema:AllowedValues' => 'Engedélyezett értékek',
|
||||
'UI:Schema:AllowedValues+' => '',
|
||||
'UI:Schema:MoreInfo' => 'Több információ',
|
||||
'UI:Schema:MoreInfo+' => '',
|
||||
'UI:Schema:SearchCriteria' => 'Keresési kritériumok',
|
||||
'UI:Schema:FilterCode' => 'Szűrő kód',
|
||||
'UI:Schema:FilterCode+' => '',
|
||||
'UI:Schema:FilterDescription' => 'Leírás',
|
||||
'UI:Schema:FilterDescription+' => '',
|
||||
'UI:Schema:AvailOperators' => 'Elérhető műveletek',
|
||||
'UI:Schema:AvailOperators+' => '',
|
||||
'UI:Schema:ChildClasses' => 'Leszármazott osztályok',
|
||||
'UI:Schema:ReferencingClasses' => 'Referált osztályok',
|
||||
'UI:Schema:RelatedClasses' => 'Kapcsolódó osztályok',
|
||||
'UI:Schema:LifeCycle' => 'Életciklus',
|
||||
'UI:Schema:Triggers' => 'Kiváltó okok',
|
||||
'UI:Schema:Relation_Code_Description' => 'Kapcsolat <em>%1$s</em> (%2$s)',
|
||||
'UI:Schema:RelationDown_Description' => 'Lenn: %1$s',
|
||||
'UI:Schema:RelationUp_Description' => 'Fenn: %1$s',
|
||||
'UI:Schema:RelationPropagates' => '%1$s: kiterjesztése %2$d szintre, lekérdezés: %3$s',
|
||||
'UI:Schema:RelationDoesNotPropagate' => '%1$s: nincs kiterjesztve (%2$d szintekre), lekérdezés: %3$s',
|
||||
'UI:Schema:Class_ReferencingClasses_From_By' => '%1$s hivatkozva %2$s az osztályban %3$s mezőn keresztül',
|
||||
'UI:Schema:Class_IsLinkedTo_Class_Via_ClassAndAttribute' => '%1$s hozzácsatolva %2$s-hoz %3$s-n keresztül::<em>%4$s</em>',
|
||||
'UI:Schema:Links:1-n' => 'A következő osztályok mutatnak %1$s-ra (1:n kapcsolat):',
|
||||
'UI:Schema:Links:n-n' => 'A következő osztályok mutatnak %1$s-ra (n:n kapcsolat):',
|
||||
'UI:Schema:Links:All' => 'Össze kapcsolódó osztály grafikonja',
|
||||
'UI:Schema:NoLifeCyle' => 'Nincs életciklus rendelve ehhez az osztályhoz.',
|
||||
'UI:Schema:LifeCycleTransitions' => 'Átmenetek',
|
||||
'UI:Schema:LifeCyleAttributeOptions' => 'Attribútum opciók',
|
||||
'UI:Schema:LifeCycleHiddenAttribute' => 'Rejtett',
|
||||
'UI:Schema:LifeCycleReadOnlyAttribute' => 'Csak olvasható',
|
||||
'UI:Schema:LifeCycleMandatoryAttribute' => 'Kötelező',
|
||||
'UI:Schema:LifeCycleAttributeMustChange' => 'Változtatni kell',
|
||||
'UI:Schema:LifeCycleAttributeMustPrompt' => 'Felhasználó kéri a változtatását',
|
||||
'UI:Schema:LifeCycleEmptyList' => 'üres lista',
|
||||
'UI:LinksWidget:Autocomplete+' => '',
|
||||
'UI:Combo:SelectValue' => '--- válasszon értéket ---',
|
||||
'UI:Label:SelectedObjects' => 'Kiválasztott objektumok: ',
|
||||
'UI:Label:AvailableObjects' => 'Lehetséges objektumok: ',
|
||||
'UI:Link_Class_Attributes' => '%1$s attribútumai',
|
||||
'UI:AddObjectsOf_Class_LinkedWith_Class_Instance' => '%1$s objektumok hozzáadása %2$s osztályhoz kapcsolással: %3$s',
|
||||
'UI:AddObjectsOf_Class_LinkedWith_Class' => '%1$s objektumok hozzáadása %2$s osztályhoz csatolással',
|
||||
'UI:ManageObjectsOf_Class_LinkedWith_Class_Instance' => '%2$s osztályhoz kapcsolt %1$s objektumok kezelése: %3$s',
|
||||
'UI:AddLinkedObjectsOf_Class' => 'Hozzáadás %1$s osztályhoz',
|
||||
'UI:RemoveLinkedObjectsOf_Class' => 'Kiválasztott objektum eltávolítása',
|
||||
'UI:Message:EmptyList:UseAdd' => 'A lista üres, használja a "Hozzáadás..." gombot az elemekre.',
|
||||
'UI:Message:EmptyList:UseSearchForm' => 'Használja a kereső formot a hozzáadandó objektumok kiválasztásához.',
|
||||
'UI:Wizard:FinalStepTitle' => 'Utolsó lépés: megerősítés',
|
||||
'UI:Title:DeletionOf_Object' => '%1$s törlése',
|
||||
'UI:Title:BulkDeletionOf_Count_ObjectsOf_Class' => '%2$s osztály %1$d objektumának tömeges törlése',
|
||||
'UI:Delete:NotAllowedToDelete' => 'Nem enegedélyezett az objektum törlése',
|
||||
'UI:Delete:NotAllowedToUpdate_Fields' => 'A következő mező módosítása nem engedélyezett: %1$s',
|
||||
'UI:Error:NotEnoughRightsToDelete' => 'Az objektum nem törölhető, mert a felhasználónak nincs elegendő joga',
|
||||
'UI:Error:CannotDeleteBecause' => 'Az objektum nem törölhető, mert: %1$s',
|
||||
'UI:Error:CannotDeleteBecauseOfDepencies' => 'Az objektum nem törölhető, mert néhány hozzá kapcsolódó magasabb prioritású manuális művelet végrehajtásra vár',
|
||||
'UI:Error:CannotDeleteBecauseManualOpNeeded' => 'Az objektum nem törölhető, mert néhány hozzá kapcsolódó magasabb prioritású manuális művelet végrehajtásra vár',
|
||||
'UI:Archive_User_OnBehalfOf_User' => '%1$s felhasználó %2$s nevében',
|
||||
'UI:Delete:Deleted' => 'törölt',
|
||||
'UI:Delete:AutomaticallyDeleted' => 'automatikusan törölt',
|
||||
'UI:Delete:AutomaticResetOf_Fields' => ' következő mezők automatikus újratöltése: %1$s',
|
||||
'UI:Delete:CleaningUpRefencesTo_Object' => 'Összes referencia tisztítása %1$s...',
|
||||
'UI:Delete:CleaningUpRefencesTo_Several_ObjectsOf_Class' => '%2$s osztály %1$d objektumára mutató referenciák tisztítása',
|
||||
'UI:Delete:Done+' => '',
|
||||
'UI:Delete:_Name_Class_Deleted' => '%1$s - %2$s törölve.',
|
||||
'UI:Delete:ConfirmDeletionOf_Name' => '%1$s törlése',
|
||||
'UI:Delete:ConfirmDeletionOf_Count_ObjectsOf_Class' => '%2$s osztály %1$d objektumának törlése',
|
||||
'UI:Delete:CannotDeleteBecause' => 'Sikertelenül töröltek: %1$s',
|
||||
'UI:Delete:ShouldBeDeletedAtomaticallyButNotPossible' => 'Automatikusan kellett volna törlődniük, de a művelet nem volt végrehajtható: %1$s',
|
||||
'UI:Delete:MustBeDeletedManuallyButNotPossible' => 'Manuállis törlés nem végrehajtható: %1$s',
|
||||
'UI:Delete:WillBeDeletedAutomatically' => 'Automatikusan lesznek törölve',
|
||||
'UI:Delete:MustBeDeletedManually' => 'Manuálisan törlendők',
|
||||
'UI:Delete:CannotUpdateBecause_Issue' => 'Automatikus frissítés sikeretelen: %1$s',
|
||||
'UI:Delete:WillAutomaticallyUpdate_Fields' => 'Automatikusan lesznek frissítve (reset: %1$s)',
|
||||
'UI:Delete:Count_Objects/LinksReferencing_Object' => '%1$d objektumok / kapcsolatok hivatkoznak erre: %2$s',
|
||||
'UI:Delete:Count_Objects/LinksReferencingTheObjects' => '%1$d objektumok / kapcsolatok hivatkoznak törlendő objektumokra',
|
||||
'UI:Delete:ReferencesMustBeDeletedToEnsureIntegrity' => 'Adatbázis integritás ellenőrzés szükséges. Néhány hivatkozás megszüntetésre kerül.',
|
||||
'UI:Delete:Consequence+' => '',
|
||||
'UI:Delete:SorryDeletionNotAllowed' => 'Az objektum törlése nem engedélyezett. Részletes magyarázat a következő sorokban.',
|
||||
'UI:Delete:PleaseDoTheManualOperations' => 'Kérem hajtsa végre a következő listában található műveleteket manuálisan az objektum törlésének kéréséhez',
|
||||
'UI:Delect:Confirm_Object' => 'Kérjük hagyja jóvá a %1$s törlését!',
|
||||
'UI:Delect:Confirm_Count_ObjectsOf_Class' => 'Kérjük hagyja jóvá a %2$s ostály %1$d objektumának törlését!',
|
||||
'UI:WelcomeToITop' => 'Üdvözli az iTop',
|
||||
'UI:DetailsPageTitle' => 'iTop - %1$s - %2$s részletek',
|
||||
'UI:ErrorPageTitle' => 'iTop - Hiba',
|
||||
'UI:ObjectDoesNotExist' => 'Sajnálom ez az objektum nem létezik (vagy a megtekintése nem engedélyezett a felhasználó számára).',
|
||||
'UI:SearchResultsPageTitle' => 'iTop - Keresés eredményei',
|
||||
'UI:Search:NoSearch' => 'Nincs keresés',
|
||||
'UI:FullTextSearchTitle_Text' => '"%1$s" keresés eredményei:',
|
||||
'UI:Search:Count_ObjectsOf_Class_Found' => '%2$s osztály %1$d objektuma',
|
||||
'UI:Search:NoObjectFound' => 'Objektum nem található',
|
||||
'UI:ModificationPageTitle_Object_Class' => 'iTop - %1$s - %2$s módosítása',
|
||||
'UI:ModificationTitle_Class_Object' => '%1$s: <span class=\"hilite\">%2$s</span> módosítása',
|
||||
'UI:ClonePageTitle_Object_Class' => 'iTop - %1$s - %2$s klón módosítása',
|
||||
'UI:CloneTitle_Class_Object' => '%1$s: <span class=\"hilite\">%2$s</span> klón',
|
||||
'UI:CreationPageTitle_Class' => 'iTop - %1$s létrehozása',
|
||||
'UI:CreationTitle_Class' => '%1$s létrehozása',
|
||||
'UI:SelectTheTypeOf_Class_ToCreate' => 'Válassza ki a létrehozni kívánt %1$s osztály típusát:',
|
||||
'UI:Class_Object_NotUpdated' => 'Változás nem történt, %1$s (%2$s) <strong>NEM</strong> lett módosítva.',
|
||||
'UI:Class_Object_Updated' => '%1$s (%2$s) frissítve.',
|
||||
'UI:BulkDeletePageTitle' => 'iTop - Tömeges törlés',
|
||||
'UI:BulkDeleteTitle' => 'Válassza ki a törölni kívánt objektumokat:',
|
||||
'UI:PageTitle:ObjectCreated' => 'iTop objektum létrehozva.',
|
||||
'UI:Title:Object_Of_Class_Created' => '%1$s - %2$s létrehozva.',
|
||||
'UI:Apply_Stimulus_On_Object_In_State_ToTarget_State' => 'Alkalmazva %1$s objektumon: %2$s.Kinduló állapot: %3$s cél állapot: %4$s.',
|
||||
'UI:ObjectCouldNotBeWritten' => 'Au objektum írása sikertlen: %1$s',
|
||||
'UI:PageTitle:FatalError' => 'iTop - Fatális hiba',
|
||||
'UI:SystemIntrusion' => 'Hozzáférés megtagadva. A művelet végrehajtása nem engedélyezett.',
|
||||
'UI:FatalErrorMessage' => 'Fatális hiba, iTop nem tudja a működését folytatni',
|
||||
'UI:Error_Details' => 'Hiba: %1$s.',
|
||||
'UI:PageTitle:ClassProjections' => 'iTop felhasználó menedzsmet - osztály nézet',
|
||||
'UI:PageTitle:ProfileProjections' => 'iTop felhasználó menedzsmet - profil nézet',
|
||||
'UI:UserManagement:Class' => 'Osztály',
|
||||
'UI:UserManagement:Class+' => '',
|
||||
'UI:UserManagement:ProjectedObject' => 'Objektum',
|
||||
'UI:UserManagement:ProjectedObject+' => '',
|
||||
'UI:UserManagement:AnyObject' => '* any *',
|
||||
'UI:UserManagement:User' => 'Felhasználó',
|
||||
'UI:UserManagement:User+' => '',
|
||||
'UI:UserManagement:Profile' => 'Profil',
|
||||
'UI:UserManagement:Profile+' => '',
|
||||
'UI:UserManagement:Action:Read' => 'Olvas',
|
||||
'UI:UserManagement:Action:Read+' => '',
|
||||
'UI:UserManagement:Action:Modify' => 'Módosít',
|
||||
'UI:UserManagement:Action:Modify+' => '',
|
||||
'UI:UserManagement:Action:Delete' => 'Töröl',
|
||||
'UI:UserManagement:Action:Delete+' => '',
|
||||
'UI:UserManagement:Action:BulkRead' => 'Tömeges beolvasás (Export)',
|
||||
'UI:UserManagement:Action:BulkRead+' => '',
|
||||
'UI:UserManagement:Action:BulkModify' => 'Tömeges módosítás',
|
||||
'UI:UserManagement:Action:BulkModify+' => '',
|
||||
'UI:UserManagement:Action:BulkDelete' => 'Tömeges törlés',
|
||||
'UI:UserManagement:Action:BulkDelete+' => '',
|
||||
'UI:UserManagement:Action:Stimuli' => 'Stimuli',
|
||||
'UI:UserManagement:Action:Stimuli+' => '',
|
||||
'UI:UserManagement:Action' => 'Akció',
|
||||
'UI:UserManagement:Action+' => '',
|
||||
'UI:UserManagement:TitleActions' => 'Akciók',
|
||||
'UI:UserManagement:Permission' => 'Engedély',
|
||||
'UI:UserManagement:Permission+' => '',
|
||||
'UI:UserManagement:Attributes' => 'Attribútumok',
|
||||
'UI:UserManagement:ActionAllowed:Yes' => 'Igen',
|
||||
'UI:UserManagement:ActionAllowed:No' => 'Nem',
|
||||
'UI:UserManagement:AdminProfile+' => '',
|
||||
'UI:UserManagement:NoLifeCycleApplicable' => 'N/A',
|
||||
'UI:UserManagement:NoLifeCycleApplicable+' => '',
|
||||
'UI:UserManagement:GrantMatrix' => 'Jogosutlsági mátrix',
|
||||
'UI:UserManagement:LinkBetween_User_And_Profile' => 'Kapcsolat %1$s és %2$s között',
|
||||
'UI:UserManagement:LinkBetween_User_And_Org' => 'Kapcsolat %1$s és %2$s között',
|
||||
'Menu:AdminTools' => 'Adminisztrációs eszközök',
|
||||
'Menu:AdminTools+' => '',
|
||||
'Menu:AdminTools?' => 'Eszközök csak az adminisztrátori profilhoz rendlet felhasználók számára elérhetők.',
|
||||
'UI:ChangeManagementMenu' => 'Változás menedzsment',
|
||||
'UI:ChangeManagementMenu+' => '',
|
||||
'UI:ChangeManagementMenu:Title' => 'Változás áttekintése',
|
||||
'UI-ChangeManagementMenu-ChangesByType' => 'Változások típusok szerint',
|
||||
'UI-ChangeManagementMenu-ChangesByStatus' => 'Változások státusz szerint',
|
||||
'UI-ChangeManagementMenu-ChangesByWorkgroup' => 'Változások csoportok szerint',
|
||||
'UI-ChangeManagementMenu-ChangesNotYetAssigned' => 'Még nem kiosztott változások',
|
||||
'UI:ConfigurationItemsMenu' => 'Konfigurációs elemek',
|
||||
'UI:ConfigurationItemsMenu+' => '',
|
||||
'UI:ConfigurationItemsMenu:Title' => 'Konfigurációs elemek áttekintése',
|
||||
'UI-ConfigurationItemsMenu-ServersByCriticity' => 'Szerverek kritikusság szerint',
|
||||
'UI-ConfigurationItemsMenu-PCsByCriticity' => 'PC-k kritikusság szerint',
|
||||
'UI-ConfigurationItemsMenu-NWDevicesByCriticity' => 'Hálózati eszközök kritikusság szerint',
|
||||
'UI-ConfigurationItemsMenu-ApplicationsByCriticity' => 'Alkalmazások kritikusság szerint',
|
||||
'UI:ConfigurationManagementMenu' => 'Konfiguráció menedzsment',
|
||||
'UI:ConfigurationManagementMenu+' => '',
|
||||
'UI:ConfigurationManagementMenu:Title' => 'Infrastruktúra áttekintő',
|
||||
'UI-ConfigurationManagementMenu-InfraByType' => 'Infrastruktúra objetumok típusok szerint',
|
||||
'UI-ConfigurationManagementMenu-InfraByStatus' => 'Infrastruktúra objetumok státuszok szerint',
|
||||
'UI:ConfigMgmtMenuOverview:Title' => 'Konfiguráció menedzsment dashboard',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIbyStatus' => 'Konfigurációs elemek státusz szerint',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIByType' => 'Konfigurációs elemek típus szerint',
|
||||
'UI:RequestMgmtMenuOverview:Title' => 'Igény menedzsment dashboard',
|
||||
'UI-RequestManagementOverview-RequestByService' => 'Felhasználói kérések szolgáltatásonként',
|
||||
'UI-RequestManagementOverview-RequestByPriority' => 'Felhasználói kérések prioritás szerint',
|
||||
'UI-RequestManagementOverview-RequestUnassigned' => 'Felhasználói kérések, amelyek még nem lettek felelőshöz rendelve',
|
||||
'UI:IncidentMgmtMenuOverview:Title' => 'Incidens menedzsment dashboard',
|
||||
'UI-IncidentManagementOverview-IncidentByService' => 'Incidensek szolgáltatásonként',
|
||||
'UI-IncidentManagementOverview-IncidentByPriority' => 'Incidensek prioritás szerint',
|
||||
'UI-IncidentManagementOverview-IncidentUnassigned' => 'Incidensek, amelyek még nem lettek felelőshöz rendelve',
|
||||
'UI:ChangeMgmtMenuOverview:Title' => 'Változás menedzsment dashboard',
|
||||
'UI-ChangeManagementOverview-ChangeByType' => 'Változások típusonként',
|
||||
'UI-ChangeManagementOverview-ChangeUnassigned' => 'Változások, amelyek még nem lettek felelőshöz rendelve',
|
||||
'UI-ChangeManagementOverview-ChangeWithOutage' => 'Változások által okozott leállási idő',
|
||||
'UI:ServiceMgmtMenuOverview:Title' => 'Szolgáltatás menedszment dashboard',
|
||||
'UI-ServiceManagementOverview-CustomerContractToRenew' => 'A következő 30 napban lejáró ügyfél szerződések',
|
||||
'UI-ServiceManagementOverview-ProviderContractToRenew' => 'A következő 30 napban lejáró szállítói szerződések',
|
||||
'UI:ContactsMenu' => 'Kapcsolattartók',
|
||||
'UI:ContactsMenu+' => '',
|
||||
'UI:ContactsMenu:Title' => 'Kapcsolattartó áttekintő',
|
||||
'UI-ContactsMenu-ContactsByLocation' => 'Kapcsolattartók földrajzi hely szerint',
|
||||
'UI-ContactsMenu-ContactsByType' => 'Kapcsolattartók típus szerint',
|
||||
'UI-ContactsMenu-ContactsByStatus' => 'Kapcsolattartók státusz szerint',
|
||||
'Menu:CSVImportMenu' => 'CSV import',
|
||||
'Menu:CSVImportMenu+' => '',
|
||||
'Menu:DataModelMenu' => 'Adatmodell',
|
||||
'Menu:DataModelMenu+' => '',
|
||||
'Menu:ExportMenu' => 'Export',
|
||||
'Menu:ExportMenu+' => '',
|
||||
'Menu:NotificationsMenu' => 'Értesítések',
|
||||
'Menu:NotificationsMenu+' => '',
|
||||
'UI:NotificationsMenu:Title' => '<span class="hilite">Értesítések</span> beállítása',
|
||||
'UI:NotificationsMenu:Help' => 'Segítség',
|
||||
'UI:NotificationsMenu:HelpContent' => '<p>Az iTop alkalmazásban az értesítések teljesen testreszabhatók. Értesítések az objektumok két csoportjára épülnek: <i>kiváltó okok és akciók</i>.</p>
|
||||
<p><i><b>Kiváltó ok</b></i> határozza meg mikor kell az értesítést végrehajtani. Kiváltó okoknak 2 típusa van az objektum életciklius három fázisának lefedésére:
|
||||
<ol>
|
||||
<li>"OnCreate" kiváltó ok egy objektum létrehozása</li>
|
||||
<li>"OnStateEnter" kiváltó ok egy adott objektum állapot változása - az új objektum állapot elérése előtt váltódik ki</li>
|
||||
<li>"OnStateLeave" kiváltó ok egy adott objektum állapot változása - az új objektum állapot elhagyása után váltódik ki</li>
|
||||
</ol>
|
||||
</p>
|
||||
<p>
|
||||
<i><b>Akciók</b></i> határozzák meg mit kell végrehjatani a kiváltó ok bekövetkezésekor. Jelenleg egyetlen akció fajta van: e-mail küldés.Természetesen az egyedi akciókbna meg lehet határozni a levél alapját képző sablont és az abba beépülő speciális paramétereket, pl.: címzett, fontossás, stb.
|
||||
</p>
|
||||
<p>Speciális oldal: <a href="../setup/email.test.php" target="_blank">email.test.php</a> oldalon keresztül a PHP mail konfiguráció tesztelhető.</p>
|
||||
<p>Akció végrehjatásához azt kiváltó okhoz kell rendelni.
|
||||
Akció kiváltó okhoz rendelésekor kap egy sorszámot , amely meghatározza az akciók végrehatási sorrendjét.</p>',
|
||||
'UI:NotificationsMenu:Triggers' => 'Kiváltó okok',
|
||||
'UI:NotificationsMenu:AvailableTriggers' => 'Lehetséges kiváltó okok',
|
||||
'UI:NotificationsMenu:OnCreate' => 'Objektum létrehozás',
|
||||
'UI:NotificationsMenu:OnStateEnter' => 'Objketum állapotba való belépése',
|
||||
'UI:NotificationsMenu:OnStateLeave' => 'Objektum állotból való kilépése',
|
||||
'UI:NotificationsMenu:Actions' => 'Akciók',
|
||||
'UI:NotificationsMenu:AvailableActions' => 'Lehetséges akciók',
|
||||
'Menu:AuditCategories' => 'Audit kategóriák',
|
||||
'Menu:AuditCategories+' => '',
|
||||
'Menu:Notifications:Title' => 'Audit kategóriák',
|
||||
'Menu:RunQueriesMenu' => 'Lekérdezés futtatás',
|
||||
'Menu:RunQueriesMenu+' => '',
|
||||
'Menu:DataAdministration' => 'Adat adminisztráció',
|
||||
'Menu:DataAdministration+' => '',
|
||||
'Menu:UniversalSearchMenu' => 'Univerzális keresés',
|
||||
'Menu:UniversalSearchMenu+' => '',
|
||||
'Menu:ApplicationLogMenu' => 'Alkalmazás napló',
|
||||
'Menu:ApplicationLogMenu+' => '',
|
||||
'Menu:ApplicationLogMenu:Title' => 'Alkalmazás napló',
|
||||
'Menu:UserManagementMenu' => 'Felhasználó menedzsment',
|
||||
'Menu:UserManagementMenu+' => '',
|
||||
'Menu:ProfilesMenu' => 'Profilok',
|
||||
'Menu:ProfilesMenu+' => '',
|
||||
'Menu:ProfilesMenu:Title' => 'Profilok',
|
||||
'Menu:UserAccountsMenu' => 'Felhasználói fiókok',
|
||||
'Menu:UserAccountsMenu+' => '',
|
||||
'Menu:UserAccountsMenu:Title' => 'Felhasználói fiókok',
|
||||
'UI:iTopVersion:Short' => 'iTop verzió: %1$s',
|
||||
'UI:iTopVersion:Long' => 'iTop verzió: %1$s-%2$s %3$s',
|
||||
'UI:PropertiesTab' => 'Tulajdonságok',
|
||||
'UI:OpenDocumentInNewWindow_' => 'A követekező dokumentum megnyitása új ablakban: %1$s',
|
||||
'UI:DownloadDocument_' => 'A következő dokuemntum letöltése: %1$s',
|
||||
'UI:Document:NoPreview' => 'Nem elérhető előnézet ehhez a dokuemntumhoz',
|
||||
'UI:DeadlineMissedBy_duration' => 'Elmulsztva %1$s által',
|
||||
'UI:Deadline_LessThan1Min' => '< 1 perc',
|
||||
'UI:Deadline_Minutes' => '%1$d perc',
|
||||
'UI:Deadline_Hours_Minutes' => '%1$dóra %2$dperc',
|
||||
'UI:Deadline_Days_Hours_Minutes' => '%1$nap %2$dóra %3$dperc',
|
||||
'UI:Help' => 'Segítség',
|
||||
'UI:PasswordConfirm' => '(Jóváhagyás)',
|
||||
'UI:BeforeAdding_Class_ObjectsSaveThisObject' => '%1$s objektumok hozzáadása előtt mentse ezt az objektumot',
|
||||
'UI:DisplayThisMessageAtStartup' => 'Az üzenet megjelenítése indításkor',
|
||||
'UI:RelationshipGraph' => 'Grafikus nézet',
|
||||
'UI:RelationshipList' => 'Lista',
|
||||
'UI:OperationCancelled' => 'Művelet visszavonva',
|
||||
'Portal:Title' => 'iTop felhasználói portál',
|
||||
'Portal:Refresh' => 'Frissítés',
|
||||
'Portal:Back' => 'Vissza',
|
||||
'Portal:CreateNewRequest' => 'Új kérés létrehozása',
|
||||
'Portal:ChangeMyPassword' => 'Jelszó változtatás',
|
||||
'Portal:Disconnect' => 'Kilépés',
|
||||
'Portal:OpenRequests' => 'Nyitott kéréseim',
|
||||
'Portal:ResolvedRequests' => 'Megoldott kéréseim',
|
||||
'Portal:SelectService' => 'Válasszon szolgáltatást a katalógusból:',
|
||||
'Portal:PleaseSelectOneService' => 'Kérem válasszon egy szolgáltatást',
|
||||
'Portal:SelectSubcategoryFrom_Service' => 'Válassza ki a %1$s szolgáltatás alkategóriáját:',
|
||||
'Portal:PleaseSelectAServiceSubCategory' => 'Kérem válasszon egy alkategóriát',
|
||||
'Portal:DescriptionOfTheRequest' => 'Adja meg a kérés leírásást:',
|
||||
'Portal:TitleRequestDetailsFor_Request' => '%1$s kérés részletei:',
|
||||
'Portal:NoOpenRequest' => 'A kategóriához nem tartozik nyitott kérés.',
|
||||
'Portal:Button:CloseTicket' => 'Hibajegy lezárása',
|
||||
'Portal:EnterYourCommentsOnTicket' => 'Adjon megjegyzést a megoldáshoz:',
|
||||
'Portal:ErrorNoContactForThisUser' => 'Hiba: az aktuális felhasználó nem tartozik egyetlen Kapcsolattartóhoz / Szemályhez sem. Kérem vegye felk a kapcsolatot az adminisztrátorral.',
|
||||
'Portal:Attachments' => 'Csatolmányok',
|
||||
'Portal:AddAttachment' => 'Csatolmány hozzáadása',
|
||||
'Portal:RemoveAttachment' => 'Csatolmány eltávolítása',
|
||||
'Portal:Attachment_No_To_Ticket_Name' => 'Csatolmányok: #%1$d a %2$s (%3$s) hibajegyhez',
|
||||
'Enum:Undefined' => 'Nem meghatározott',
|
||||
'UI:DurationForm_Days_Hours_Minutes_Seconds' => '%1$s nap %2$s óra %3$s perc %4$s másodperc',
|
||||
'UI:ModifyAllPageTitle' => 'Összes módosítása',
|
||||
'UI:Modify_N_ObjectsOf_Class' => '%2$s osztály %1$d objketumainak módosítása',
|
||||
'UI:Modify_M_ObjectsOf_Class_OutOf_N' => '%2$s osztály %1$d objektumának módosítása, kivéve: %3$d',
|
||||
'UI:Menu:ModifyAll' => 'Módosítás...',
|
||||
'UI:Button:ModifyAll' => 'Összes módosítása',
|
||||
'UI:Button:PreviewModifications' => 'Módosítások előnézete >>',
|
||||
'UI:ModifiedObject' => 'Objektum módosítva',
|
||||
'UI:BulkModifyStatus' => 'Művelet',
|
||||
'UI:BulkModifyStatus+' => '',
|
||||
'UI:BulkModifyErrors' => 'Hibák (ha vannak)',
|
||||
'UI:BulkModifyErrors+' => '',
|
||||
'UI:BulkModifyStatusOk' => 'OK',
|
||||
'UI:BulkModifyStatusError' => 'Hiba',
|
||||
'UI:BulkModifyStatusModified' => 'Módosítva',
|
||||
'UI:BulkModifyStatusSkipped' => 'Átugorva',
|
||||
'UI:BulkModify_Count_DistinctValues' => '%1$d eltérő értékek:',
|
||||
'UI:BulkModify:Value_Exists_N_Times' => '%1$s *, %2$d *',
|
||||
'UI:BulkModify:N_MoreValues' => '%1$d további értékei ...',
|
||||
'UI:AttemptingToSetAReadOnlyAttribute_Name' => 'Kísérlet a következő csak olvaható mező beállítására: %1$s',
|
||||
'UI:FailedToApplyStimuli' => 'A művelet sikertelen',
|
||||
'UI:StimulusModify_N_ObjectsOf_Class' => '%1$s: %3$s osztály %2$d objketumainak módosítása',
|
||||
'UI:CaseLogTypeYourTextHere' => 'Írjon ide:',
|
||||
'UI:CaseLog:DateFormat' => 'Y-m-d H:i:s',
|
||||
'UI:CaseLog:Header_Date_UserName' => '%1$s - %2$s:',
|
||||
'UI:CaseLog:InitialValue' => 'Kezdeti érték:',
|
||||
'UI:AttemptingToSetASlaveAttribute_Name' => '%1$s mező nem írható, mert a szinkronizációnál használt kulcs. Érték nem lett beállítva.',
|
||||
'UI:ActionNotAllowed' => 'Ennek a műveletnek a végrehajtása nem engedélyezett ezen az objektumon.',
|
||||
'UI:BulkAction:NoObjectSelected' => 'Válasszon ki legalább egy objketumot a művelet végrehajtásához',
|
||||
'UI:AttemptingToChangeASlaveAttribute_Name' => '%1$s mező nem írható, mert a szinkronizációnál használt kulcs. Érték változatlan maradt.',
|
||||
));
|
||||
?>
|
||||
485
dictionaries/it.dictionary.itop.core.php
Normal file
485
dictionaries/it.dictionary.itop.core.php
Normal file
@@ -0,0 +1,485 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* @author Erwan Taloc <erwan.taloc@combodo.com>
|
||||
* @author Romain Quetiez <romain.quetiez@combodo.com>
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
|
||||
* @licence http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
Dict::Add('IT IT', 'Italian', 'Italiano', array(
|
||||
'Class:ActionEmail' => 'E-mail di notifica',
|
||||
'Class:ActionEmail+' => '',
|
||||
'Class:ActionEmail/Attribute:test_recipient' => 'Test destinatario',
|
||||
'Class:ActionEmail/Attribute:test_recipient+' => '',
|
||||
'Class:ActionEmail/Attribute:from' => 'Da',
|
||||
'Class:ActionEmail/Attribute:from+' => '',
|
||||
'Class:ActionEmail/Attribute:reply_to' => 'Rispondi A',
|
||||
'Class:ActionEmail/Attribute:reply_to+' => '',
|
||||
'Class:ActionEmail/Attribute:to' => 'A',
|
||||
'Class:ActionEmail/Attribute:to+' => '',
|
||||
'Class:ActionEmail/Attribute:cc' => 'Cc',
|
||||
'Class:ActionEmail/Attribute:cc+' => '',
|
||||
'Class:ActionEmail/Attribute:bcc' => 'BCC',
|
||||
'Class:ActionEmail/Attribute:bcc+' => '',
|
||||
'Class:ActionEmail/Attribute:subject' => 'Oggetto',
|
||||
'Class:ActionEmail/Attribute:subject+' => '',
|
||||
'Class:ActionEmail/Attribute:body' => 'corpo',
|
||||
'Class:ActionEmail/Attribute:body+' => '',
|
||||
'Class:ActionEmail/Attribute:importance' => 'priorità',
|
||||
'Class:ActionEmail/Attribute:importance+' => '',
|
||||
'Class:ActionEmail/Attribute:importance/Value:high' => 'alta',
|
||||
'Class:ActionEmail/Attribute:importance/Value:high+' => '',
|
||||
'Class:ActionEmail/Attribute:importance/Value:low' => 'bassa',
|
||||
'Class:ActionEmail/Attribute:importance/Value:low+' => '',
|
||||
'Class:ActionEmail/Attribute:importance/Value:normal' => 'normake',
|
||||
'Class:ActionEmail/Attribute:importance/Value:normal+' => '',
|
||||
'Class:TriggerOnStateEnter' => 'Trigger (sull\'entrare in uno stato)',
|
||||
'Class:TriggerOnStateEnter+' => '',
|
||||
'Class:TriggerOnStateLeave' => 'Trigger (sul lasciare uno stato)~~',
|
||||
'Class:TriggerOnStateLeave+' => '',
|
||||
'Class:TriggerOnObjectCreate' => 'Trigger (sulla creazione di un oggetto)~~',
|
||||
'Class:TriggerOnObjectCreate+' => '',
|
||||
'Class:lnkTriggerAction' => 'Azione/Trigger~~',
|
||||
'Class:lnkTriggerAction+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:action_id' => 'Azione',
|
||||
'Class:lnkTriggerAction/Attribute:action_id+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_id' => 'Trigger',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_id+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:order' => 'Ordine',
|
||||
'Class:lnkTriggerAction/Attribute:order+' => '',
|
||||
'Class:AsyncSendEmail' => 'Email (asincrona)',
|
||||
'Class:AsyncSendEmail/Attribute:to' => 'A',
|
||||
'Class:AsyncSendEmail/Attribute:subject' => 'Oggetto',
|
||||
'Class:AsyncSendEmail/Attribute:body' => 'Corpo',
|
||||
'Class:AsyncSendEmail/Attribute:header' => 'Intestazione',
|
||||
'Class:CMDBChange' => 'Cambio',
|
||||
'Class:CMDBChange+' => '',
|
||||
'Class:CMDBChange/Attribute:date' => 'data',
|
||||
'Class:CMDBChange/Attribute:date+' => '',
|
||||
'Class:CMDBChange/Attribute:userinfo' => 'info varie',
|
||||
'Class:CMDBChange/Attribute:userinfo+' => '',
|
||||
'Class:CMDBChangeOp' => 'Operazione di Cambio',
|
||||
'Class:CMDBChangeOp+' => '',
|
||||
'Class:CMDBChangeOp/Attribute:change' => 'cambio',
|
||||
'Class:CMDBChangeOp/Attribute:change+' => '',
|
||||
'Class:CMDBChangeOp/Attribute:objclass' => 'oggetto della classe',
|
||||
'Class:CMDBChangeOp/Attribute:objclass+' => '',
|
||||
'Class:CMDBChangeOp/Attribute:objkey' => 'oggetto id',
|
||||
'Class:CMDBChangeOp/Attribute:objkey+' => '',
|
||||
'Class:CMDBChangeOp/Attribute:finalclass' => 'tipo',
|
||||
'Class:CMDBChangeOp/Attribute:finalclass+' => '',
|
||||
'Class:CMDBChangeOpCreate' => 'creazione dell\'oggetto',
|
||||
'Class:CMDBChangeOpCreate+' => '',
|
||||
'Class:CMDBChangeOpDelete' => 'cancellazione dell\'oggetto',
|
||||
'Class:CMDBChangeOpDelete+' => '',
|
||||
'Class:CMDBChangeOpSetAttribute' => 'cambio dell\'oggetto',
|
||||
'Class:CMDBChangeOpSetAttribute+' => '',
|
||||
'Class:CMDBChangeOpSetAttribute/Attribute:attcode' => 'Attributo',
|
||||
'Class:CMDBChangeOpSetAttribute/Attribute:attcode+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeScalar' => 'cambio della proprietà',
|
||||
'Class:CMDBChangeOpSetAttributeScalar+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue' => 'Valore precedente',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue' => 'Valore Nuovo',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeBlob' => 'modifica i dati',
|
||||
'Class:CMDBChangeOpSetAttributeBlob+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata' => 'Dati precedenti',
|
||||
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeOneWayPassword' => 'Password criptata',
|
||||
'Class:CMDBChangeOpSetAttributeOneWayPassword/Attribute:prev_pwd' => 'Valore Precedente',
|
||||
'Class:CMDBChangeOpSetAttributeEncrypted' => 'Encrypted Field~~',
|
||||
'Class:CMDBChangeOpSetAttributeEncrypted/Attribute:prevstring' => 'Valore Precedente',
|
||||
'Class:CMDBChangeOpSetAttributeText' => 'modifica testo',
|
||||
'Class:CMDBChangeOpSetAttributeText+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata' => 'Dati precendenti',
|
||||
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata+' => '',
|
||||
'Class:CMDBChangeOpSetAttributeCaseLog' => 'Log dei casi',
|
||||
'Class:CMDBChangeOpSetAttributeCaseLog/Attribute:lastentry' => 'Ultima entrata',
|
||||
'Class:Event' => 'Log dell\'evento',
|
||||
'Class:Event+' => '',
|
||||
'Class:Event/Attribute:message' => 'Messaggio',
|
||||
'Class:Event/Attribute:message+' => '',
|
||||
'Class:Event/Attribute:date' => 'Data',
|
||||
'Class:Event/Attribute:date+' => '',
|
||||
'Class:Event/Attribute:userinfo' => 'Info Utente',
|
||||
'Class:Event/Attribute:userinfo+' => '',
|
||||
'Class:Event/Attribute:finalclass' => 'Tipo',
|
||||
'Class:Event/Attribute:finalclass+' => '',
|
||||
'Class:EventNotification' => 'Notifica dell\'evento',
|
||||
'Class:EventNotification+' => '',
|
||||
'Class:EventNotification/Attribute:trigger_id' => 'Trigger',
|
||||
'Class:EventNotification/Attribute:trigger_id+' => '',
|
||||
'Class:EventNotification/Attribute:action_id' => 'utente',
|
||||
'Class:EventNotification/Attribute:action_id+' => '',
|
||||
'Class:EventNotification/Attribute:object_id' => 'Oggetto id',
|
||||
'Class:EventNotification/Attribute:object_id+' => '',
|
||||
'Class:EventNotificationEmail' => 'Email caso di emissione',
|
||||
'Class:EventNotificationEmail+' => '',
|
||||
'Class:EventNotificationEmail/Attribute:to' => 'A',
|
||||
'Class:EventNotificationEmail/Attribute:to+' => '',
|
||||
'Class:EventNotificationEmail/Attribute:cc' => 'CC',
|
||||
'Class:EventNotificationEmail/Attribute:cc+' => '',
|
||||
'Class:EventNotificationEmail/Attribute:bcc' => 'BCC',
|
||||
'Class:EventNotificationEmail/Attribute:bcc+' => '',
|
||||
'Class:EventNotificationEmail/Attribute:from' => 'Da',
|
||||
'Class:EventNotificationEmail/Attribute:from+' => '',
|
||||
'Class:EventNotificationEmail/Attribute:subject' => 'Oggeto',
|
||||
'Class:EventNotificationEmail/Attribute:subject+' => '',
|
||||
'Class:EventNotificationEmail/Attribute:body' => 'Corpo',
|
||||
'Class:EventNotificationEmail/Attribute:body+' => '',
|
||||
'Class:EventIssue' => 'Evento Problema',
|
||||
'Class:EventIssue+' => '',
|
||||
'Class:EventIssue/Attribute:issue' => 'Problema',
|
||||
'Class:EventIssue/Attribute:issue+' => '',
|
||||
'Class:EventIssue/Attribute:impact' => 'Impatto',
|
||||
'Class:EventIssue/Attribute:impact+' => '',
|
||||
'Class:EventIssue/Attribute:page' => 'Pagina',
|
||||
'Class:EventIssue/Attribute:page+' => '',
|
||||
'Class:EventIssue/Attribute:arguments_post' => 'Argomenti inviati',
|
||||
'Class:EventIssue/Attribute:arguments_post+' => '',
|
||||
'Class:EventIssue/Attribute:arguments_get' => 'Argomenti URL',
|
||||
'Class:EventIssue/Attribute:arguments_get+' => '',
|
||||
'Class:EventIssue/Attribute:callstack' => 'Callstack',
|
||||
'Class:EventIssue/Attribute:callstack+' => '',
|
||||
'Class:EventIssue/Attribute:data' => 'Dati',
|
||||
'Class:EventIssue/Attribute:data+' => '',
|
||||
'Class:EventWebService' => 'Evento Servizio Web',
|
||||
'Class:EventWebService+' => '',
|
||||
'Class:EventWebService/Attribute:verb' => 'Verbo',
|
||||
'Class:EventWebService/Attribute:verb+' => '',
|
||||
'Class:EventWebService/Attribute:result' => 'Resulto',
|
||||
'Class:EventWebService/Attribute:result+' => '',
|
||||
'Class:EventWebService/Attribute:log_info' => 'Log delle info',
|
||||
'Class:EventWebService/Attribute:log_info+' => '',
|
||||
'Class:EventWebService/Attribute:log_warning' => 'Log dei warning',
|
||||
'Class:EventWebService/Attribute:log_warning+' => '',
|
||||
'Class:EventWebService/Attribute:log_error' => 'Log degli errori',
|
||||
'Class:EventWebService/Attribute:log_error+' => '',
|
||||
'Class:EventWebService/Attribute:data' => 'Dati',
|
||||
'Class:EventWebService/Attribute:data+' => '',
|
||||
'Class:EventLoginUsage' => 'Login di utilizzo',
|
||||
'Class:EventLoginUsage+' => '',
|
||||
'Class:EventLoginUsage/Attribute:user_id' => 'Login',
|
||||
'Class:EventLoginUsage/Attribute:user_id+' => '',
|
||||
'Class:SynchroDataSource' => 'Sorgente di sincronizzazione dei dati',
|
||||
'Class:SynchroDataSource/Attribute:name' => 'Nome',
|
||||
'Class:SynchroDataSource/Attribute:name+' => '',
|
||||
'Class:SynchroDataSource/Attribute:description' => 'Descrizione',
|
||||
'Class:SynchroDataSource/Attribute:status' => 'Stato',
|
||||
'Class:SynchroDataSource/Attribute:status/Value:implementation' => 'Implementazione',
|
||||
'Class:SynchroDataSource/Attribute:status/Value:obsolete' => 'Obsoleto',
|
||||
'Class:SynchroDataSource/Attribute:status/Value:production' => 'Produzione',
|
||||
'Class:SynchroDataSource/Attribute:user_id' => 'Utente',
|
||||
'Class:SynchroDataSource/Attribute:scope_class' => 'Classe Target',
|
||||
'Class:SynchroDataSource/Attribute:scope_restriction' => 'Campo di applicazione restrizione',
|
||||
'Class:SynchroDataSource/Attribute:full_load_periodicity' => 'Intervallo a pieno carico',
|
||||
'Class:SynchroDataSource/Attribute:full_load_periodicity+' => '',
|
||||
'Class:SynchroDataSource/Attribute:reconciliation_policy' => 'Policy di riconciliazione',
|
||||
'Class:SynchroDataSource/Attribute:reconciliation_policy/Value:use_attributes' => 'Usa gli attributi',
|
||||
'Class:SynchroDataSource/Attribute:reconciliation_policy/Value:use_primary_key' => 'Usa il campo chiave primaria',
|
||||
'Class:SynchroDataSource/Attribute:action_on_zero' => 'Azione su zero~~',
|
||||
'Class:SynchroDataSource/Attribute:action_on_zero+' => '',
|
||||
'Class:SynchroDataSource/Attribute:action_on_zero/Value:create' => 'Crea',
|
||||
'Class:SynchroDataSource/Attribute:action_on_zero/Value:error' => 'Errore',
|
||||
'Class:SynchroDataSource/Attribute:action_on_one' => 'Azione su uno',
|
||||
'Class:SynchroDataSource/Attribute:action_on_one+' => '',
|
||||
'Class:SynchroDataSource/Attribute:action_on_one/Value:error' => 'Error',
|
||||
'Class:SynchroDataSource/Attribute:action_on_one/Value:update' => 'Aggiorna',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple' => 'Azione su molti',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple+' => '',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple/Value:create' => 'Crea',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple/Value:error' => 'Errore',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple/Value:take_first' => 'Considera il primo (random?)',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy' => 'Policy di cancellazioen',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:delete' => 'Cancella',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:ignore' => 'Ignora',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:update' => 'Aggiorna',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:update_then_delete' => 'Aggiorna e poi Cancella',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy_update' => 'Regole per l\'aggiornamento',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy_update+' => '',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy_retention' => 'Durata di conservazione',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy_retention+' => '',
|
||||
'Class:SynchroDataSource/Attribute:attribute_list' => 'Lista degli attributi',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy' => 'utenti autorizzati',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy+' => '',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:administrators' => 'Solo Amministratore',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:everybody' => 'Tutti sono autorizzati a cancellare questi oggetti',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:nobody' => 'Nessuno',
|
||||
'Class:SynchroDataSource/Attribute:url_icon' => 'Icona di collegamento ipertestuale',
|
||||
'Class:SynchroDataSource/Attribute:url_icon+' => '',
|
||||
'Class:SynchroDataSource/Attribute:url_application' => 'Collegamento ipertestuale all\'applicazione',
|
||||
'Class:SynchroDataSource/Attribute:url_application+' => '',
|
||||
'Class:SynchroAttribute' => 'Attributo di sincronizzazione',
|
||||
'Class:SynchroAttribute/Attribute:sync_source_id' => 'Sorgente sincronizzazione dati',
|
||||
'Class:SynchroAttribute/Attribute:attcode' => 'Codice attributo',
|
||||
'Class:SynchroAttribute/Attribute:update' => 'Aggiorna',
|
||||
'Class:SynchroAttribute/Attribute:reconcile' => 'Rincocilia',
|
||||
'Class:SynchroAttribute/Attribute:update_policy' => 'Policy di aggiornamento',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:master_locked' => 'Bloccato',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:master_unlocked' => 'Sbloccato',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:write_if_empty' => 'Inizializza se vuoto',
|
||||
'Class:SynchroAttribute/Attribute:finalclass' => 'Classe',
|
||||
'Class:SynchroAttExtKey' => 'Attributo di sincronizzazione (ExtKey)',
|
||||
'Class:SynchroAttExtKey/Attribute:reconciliation_attcode' => 'Attributo di riconciliazione',
|
||||
'Class:SynchroAttLinkSet' => 'Attributo di sincronizzazione (Linkset)',
|
||||
'Class:SynchroAttLinkSet/Attribute:row_separator' => 'Separatore di righe',
|
||||
'Class:SynchroAttLinkSet/Attribute:attribute_separator' => 'Separatore di attributi',
|
||||
'Class:SynchroLog' => 'Log di sincronizzazione',
|
||||
'Class:SynchroLog/Attribute:sync_source_id' => 'Sorgente di sincronizzazione dati',
|
||||
'Class:SynchroLog/Attribute:start_date' => 'Data di inizio',
|
||||
'Class:SynchroLog/Attribute:end_date' => 'Data di fine',
|
||||
'Class:SynchroLog/Attribute:status' => 'Stato',
|
||||
'Class:SynchroLog/Attribute:status/Value:completed' => 'Completo',
|
||||
'Class:SynchroLog/Attribute:status/Value:error' => 'Errore',
|
||||
'Class:SynchroLog/Attribute:status/Value:running' => 'Ancora in esecuzione',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_seen' => 'Nb replica viste',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_total' => 'Nb replica totale',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_deleted' => 'Nb oggetti cancellati',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_deleted_errors' => 'Nb di errore durante la cancellazione',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_obsoleted' => 'Nb oggetti obsoleti',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_obsoleted_errors' => 'Nb di errori mentre obsoleta',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_created' => 'Nb oggetti creati',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_created_errors' => 'Nb di errori durante la creazione',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_updated' => 'Nb oggetti aggiornati',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_updated_errors' => 'Nb di errori durante l\'aggiornamento',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_reconciled_errors' => 'Nb di errori durante la riconcilazione',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_disappeared_no_action' => 'Nb repliche scomparse',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_new_updated' => 'Nb oggetti aggiornati',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_new_unchanged' => 'Nb oggetti non modificati',
|
||||
'Class:SynchroLog/Attribute:last_error' => 'Untimo errore',
|
||||
'Class:SynchroLog/Attribute:traces' => 'Tracce',
|
||||
'Class:SynchroReplica' => 'Replica sincronizzazione',
|
||||
'Class:SynchroReplica/Attribute:sync_source_id' => 'Sorgente di sincronizzazione dati',
|
||||
'Class:SynchroReplica/Attribute:dest_id' => 'Oggetto di destinazione (ID)~~',
|
||||
'Class:SynchroReplica/Attribute:dest_class' => 'Tipo di destinazione',
|
||||
'Class:SynchroReplica/Attribute:status_last_seen' => 'Ultimo visto',
|
||||
'Class:SynchroReplica/Attribute:status' => 'Stato',
|
||||
'Class:SynchroReplica/Attribute:status/Value:modified' => 'Modificato',
|
||||
'Class:SynchroReplica/Attribute:status/Value:new' => 'Nuovo',
|
||||
'Class:SynchroReplica/Attribute:status/Value:obsolete' => 'Obsoleto',
|
||||
'Class:SynchroReplica/Attribute:status/Value:orphan' => 'Orfano',
|
||||
'Class:SynchroReplica/Attribute:status/Value:synchronized' => 'Sincronizzato',
|
||||
'Class:SynchroReplica/Attribute:status_dest_creator' => 'Oggetto Creato ?',
|
||||
'Class:SynchroReplica/Attribute:status_last_error' => 'Ultimo Errore',
|
||||
'Class:SynchroReplica/Attribute:info_creation_date' => 'Data di creazione',
|
||||
'Class:SynchroReplica/Attribute:info_last_modified' => 'Data ultima modifica',
|
||||
'Class:appUserPreferences' => 'Preferenze utente',
|
||||
'Class:appUserPreferences/Attribute:userid' => 'Utente',
|
||||
'Class:appUserPreferences/Attribute:preferences' => 'Preferenze',
|
||||
'Core:AttributeLinkedSet' => 'Array di oggetti',
|
||||
'Core:AttributeLinkedSet+' => '',
|
||||
'Core:AttributeLinkedSetIndirect' => 'Array di oggetti (N-N)',
|
||||
'Core:AttributeLinkedSetIndirect+' => '',
|
||||
'Core:AttributeInteger' => 'Integero',
|
||||
'Core:AttributeInteger+' => '',
|
||||
'Core:AttributeDecimal' => 'Decimale',
|
||||
'Core:AttributeDecimal+' => '',
|
||||
'Core:AttributeBoolean' => 'Booleano',
|
||||
'Core:AttributeBoolean+' => '',
|
||||
'Core:AttributeString' => 'Stringa',
|
||||
'Core:AttributeString+' => '',
|
||||
'Core:AttributeClass' => 'Classe',
|
||||
'Core:AttributeClass+' => '',
|
||||
'Core:AttributeApplicationLanguage' => 'Linguaggio Utente',
|
||||
'Core:AttributeApplicationLanguage+' => '',
|
||||
'Core:AttributeFinalClass' => 'Classe (auto)',
|
||||
'Core:AttributeFinalClass+' => '',
|
||||
'Core:AttributePassword' => 'Password',
|
||||
'Core:AttributePassword+' => '',
|
||||
'Core:AttributeEncryptedString' => 'Stringa criptata',
|
||||
'Core:AttributeEncryptedString+' => '',
|
||||
'Core:AttributeText' => 'Testo',
|
||||
'Core:AttributeText+' => '',
|
||||
'Core:AttributeHTML' => 'HTML',
|
||||
'Core:AttributeHTML+' => '',
|
||||
'Core:AttributeEmailAddress' => 'Indirizzo Email',
|
||||
'Core:AttributeEmailAddress+' => '',
|
||||
'Core:AttributeIPAddress' => 'Indirizzo IP',
|
||||
'Core:AttributeIPAddress+' => '',
|
||||
'Core:AttributeOQL' => 'OQL',
|
||||
'Core:AttributeOQL+' => '',
|
||||
'Core:AttributeEnum' => 'Enum',
|
||||
'Core:AttributeEnum+' => '',
|
||||
'Core:AttributeTemplateString' => 'Stringa Template',
|
||||
'Core:AttributeTemplateString+' => '',
|
||||
'Core:AttributeTemplateText' => 'Testo Template',
|
||||
'Core:AttributeTemplateText+' => '',
|
||||
'Core:AttributeTemplateHTML' => 'HTML Template',
|
||||
'Core:AttributeTemplateHTML+' => '',
|
||||
'Core:AttributeDateTime' => 'Data/ora',
|
||||
'Core:AttributeDateTime+' => '',
|
||||
'Core:AttributeDate' => 'Data',
|
||||
'Core:AttributeDate+' => '',
|
||||
'Core:AttributeDeadline' => 'Scadenza',
|
||||
'Core:AttributeDeadline+' => '',
|
||||
'Core:AttributeExternalKey' => 'Chiave esterna',
|
||||
'Core:AttributeExternalKey+' => '',
|
||||
'Core:AttributeExternalField' => 'Campo esterno',
|
||||
'Core:AttributeExternalField+' => '',
|
||||
'Core:AttributeURL' => 'URL',
|
||||
'Core:AttributeURL+' => '',
|
||||
'Core:AttributeBlob' => 'Blob',
|
||||
'Core:AttributeBlob+' => '',
|
||||
'Core:AttributeOneWayPassword' => 'Password unidierzionale',
|
||||
'Core:AttributeOneWayPassword+' => '',
|
||||
'Core:AttributeTable' => 'Tabella',
|
||||
'Core:AttributeTable+' => '',
|
||||
'Core:AttributePropertySet' => 'Proprietà',
|
||||
'Core:AttributePropertySet+' => '',
|
||||
'Class:CMDBChangeOp/Attribute:date' => 'data',
|
||||
'Class:CMDBChangeOp/Attribute:date+' => '',
|
||||
'Class:CMDBChangeOp/Attribute:userinfo' => 'utente',
|
||||
'Class:CMDBChangeOp/Attribute:userinfo+' => '',
|
||||
'Change:ObjectCreated' => 'Oggetto creato',
|
||||
'Change:ObjectDeleted' => 'Oggetto cancellato',
|
||||
'Change:ObjectModified' => 'Object modificato',
|
||||
'Change:AttName_SetTo_NewValue_PreviousValue_OldValue' => '%1$s imposatato a %2$s (valore precendente: %3$s)',
|
||||
'Change:AttName_SetTo' => '%1$s impostato a %2$s~~',
|
||||
'Change:Text_AppendedTo_AttName' => '%1$s allegato a %2$s~~',
|
||||
'Change:AttName_Changed_PreviousValue_OldValue' => '%1$s moficato, valore precendente: %2$s',
|
||||
'Change:AttName_Changed' => '%1$s modificato',
|
||||
'Change:AttName_EntryAdded' => '%1$s modificato, nuova entrata aggiunta.',
|
||||
'Class:EventLoginUsage/Attribute:contact_name' => 'Nome Utente',
|
||||
'Class:EventLoginUsage/Attribute:contact_name+' => '',
|
||||
'Class:EventLoginUsage/Attribute:contact_email' => 'Email Utente',
|
||||
'Class:EventLoginUsage/Attribute:contact_email+' => '',
|
||||
'Class:Action' => 'Azione personalizzata',
|
||||
'Class:Action+' => '',
|
||||
'Class:Action/Attribute:name' => 'Nome',
|
||||
'Class:Action/Attribute:name+' => '',
|
||||
'Class:Action/Attribute:description' => 'Descrizione',
|
||||
'Class:Action/Attribute:description+' => '',
|
||||
'Class:Action/Attribute:status' => 'Stato',
|
||||
'Class:Action/Attribute:status+' => '',
|
||||
'Class:Action/Attribute:status/Value:test' => 'In fase di test',
|
||||
'Class:Action/Attribute:status/Value:test+' => '',
|
||||
'Class:Action/Attribute:status/Value:enabled' => 'In produzione',
|
||||
'Class:Action/Attribute:status/Value:enabled+' => '',
|
||||
'Class:Action/Attribute:status/Value:disabled' => 'Inattivo',
|
||||
'Class:Action/Attribute:status/Value:disabled+' => '',
|
||||
'Class:Action/Attribute:trigger_list' => 'Trigger Correlati',
|
||||
'Class:Action/Attribute:trigger_list+' => '',
|
||||
'Class:Action/Attribute:finalclass' => 'Tipo',
|
||||
'Class:Action/Attribute:finalclass+' => '',
|
||||
'Class:ActionNotification' => 'Notifica',
|
||||
'Class:ActionNotification+' => '',
|
||||
'Class:Trigger' => 'Trigger',
|
||||
'Class:Trigger+' => '',
|
||||
'Class:Trigger/Attribute:description' => 'Descrizione',
|
||||
'Class:Trigger/Attribute:description+' => '',
|
||||
'Class:Trigger/Attribute:action_list' => 'Azioni Triggerate',
|
||||
'Class:Trigger/Attribute:action_list+' => '',
|
||||
'Class:Trigger/Attribute:finalclass' => 'Tipo',
|
||||
'Class:Trigger/Attribute:finalclass+' => '',
|
||||
'Class:TriggerOnObject' => 'Trigger (classe dipendente)',
|
||||
'Class:TriggerOnObject+' => '',
|
||||
'Class:TriggerOnObject/Attribute:target_class' => 'Classe Target',
|
||||
'Class:TriggerOnObject/Attribute:target_class+' => '',
|
||||
'Class:TriggerOnStateChange' => 'Trigger (sul cambio di stato)',
|
||||
'Class:TriggerOnStateChange+' => '',
|
||||
'Class:TriggerOnStateChange/Attribute:state' => 'Stato',
|
||||
'Class:TriggerOnStateChange/Attribute:state+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:action_name' => 'Azione',
|
||||
'Class:lnkTriggerAction/Attribute:action_name+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_name' => 'Trigger',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_name+' => '',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:never' => 'Nessuno',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:depends' => 'Solo Amministratore',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:always' => 'Tutti gli utenti autorizzati',
|
||||
'SynchroDataSource:Description' => 'Descrizione',
|
||||
'SynchroDataSource:Reconciliation' => 'Ricerca & riconciliazione',
|
||||
'SynchroDataSource:Deletion' => 'Regole di cancellazione',
|
||||
'SynchroDataSource:Status' => 'Stato',
|
||||
'SynchroDataSource:Information' => 'Informazione',
|
||||
'SynchroDataSource:Definition' => 'Definizione',
|
||||
'Core:SynchroAttributes' => 'Attributi',
|
||||
'Core:SynchroStatus' => 'Stato',
|
||||
'Core:Synchro:ErrorsLabel' => 'Errori',
|
||||
'Core:Synchro:CreatedLabel' => 'Creato',
|
||||
'Core:Synchro:ModifiedLabel' => 'Modificato',
|
||||
'Core:Synchro:UnchangedLabel' => 'Non modificato',
|
||||
'Core:Synchro:ReconciledErrorsLabel' => 'Errori',
|
||||
'Core:Synchro:ReconciledLabel' => 'Reconciliato',
|
||||
'Core:Synchro:ReconciledNewLabel' => 'Creato',
|
||||
'Core:SynchroReconcile:Yes' => 'Si',
|
||||
'Core:SynchroReconcile:No' => 'No',
|
||||
'Core:SynchroUpdate:Yes' => 'Si',
|
||||
'Core:SynchroUpdate:No' => 'No',
|
||||
'Core:Synchro:LastestStatus' => 'Ultimo stato',
|
||||
'Core:Synchro:History' => 'Storia della sincronizzazione',
|
||||
'Core:Synchro:NeverRun' => 'Questa sincronizzazione non è mai stata eseguita. Nessun Log ancora...',
|
||||
'Core:Synchro:SynchroEndedOn_Date' => 'L\'ultima sincronizzazione si è conclusa il %1$s.~~',
|
||||
'Core:Synchro:SynchroRunningStartedOn_Date' => 'La sincronizzazione è iniziata il $1$s è ancora in esecuzione...~~',
|
||||
'Menu:DataSources' => 'Sorgente di sincronizzazione dei dati',
|
||||
'Menu:DataSources+' => '',
|
||||
'Core:Synchro:label_repl_ignored' => 'Ignorato(%1$s)',
|
||||
'Core:Synchro:label_repl_disappeared' => 'Scomparso (%1$s)',
|
||||
'Core:Synchro:label_repl_existing' => 'Esistente (%1$s)',
|
||||
'Core:Synchro:label_repl_new' => 'Nuovo (%1$s)~~',
|
||||
'Core:Synchro:label_obj_deleted' => 'Cancellato (%1$s)',
|
||||
'Core:Synchro:label_obj_obsoleted' => 'Obsoleto (%1$s)',
|
||||
'Core:Synchro:label_obj_disappeared_errors' => 'Errori (%1$s)',
|
||||
'Core:Synchro:label_obj_disappeared_no_action' => 'Nessuna Azione (%1$s)',
|
||||
'Core:Synchro:label_obj_unchanged' => 'Non modificato(%1$s)',
|
||||
'Core:Synchro:label_obj_updated' => 'Aggiornato (%1$s)',
|
||||
'Core:Synchro:label_obj_updated_errors' => 'Errori (%1$s)',
|
||||
'Core:Synchro:label_obj_new_unchanged' => 'Non modificato (%1$s)',
|
||||
'Core:Synchro:label_obj_new_updated' => 'Aggiornato (%1$s)',
|
||||
'Core:Synchro:label_obj_created' => 'Creato (%1$s)',
|
||||
'Core:Synchro:label_obj_new_errors' => 'Errori (%1$s)',
|
||||
'Core:SynchroLogTitle' => '%1$s - %2$s~~',
|
||||
'Core:Synchro:Nb_Replica' => 'Replica processata: %1$s',
|
||||
'Core:Synchro:Nb_Class:Objects' => '%1$s: %2$s',
|
||||
'Class:SynchroDataSource/Error:AtLeastOneReconciliationKeyMustBeSpecified' => 'Almeno una chiave riconciliazione deve essere specificata, o la policy di conciliazione deve essere quella di utilizzare la chiave primaria',
|
||||
'Class:SynchroDataSource/Error:DeleteRetentionDurationMustBeSpecified' => 'Deve essere specificato un periodo di conservazione di cancellazione , dato che gli oggetti devono essere eliminati dopo essere contrassegnati come obsoleti ',
|
||||
'Class:SynchroDataSource/Error:DeletePolicyUpdateMustBeSpecified' => 'Oggetti obsoleti devono essere aggiornati, ma nessun aggiornamento è specificato',
|
||||
'Core:SynchroReplica:PublicData' => 'Dati Pubblici',
|
||||
'Core:SynchroReplica:PrivateDetails' => 'Dettagli Privati',
|
||||
'Core:SynchroReplica:BackToDataSource' => 'Torna indietro alla sorgente di sincronizzazione dei dati: %1$s~~',
|
||||
'Core:SynchroReplica:ListOfReplicas' => 'Lista della Replica',
|
||||
'Core:SynchroAttExtKey:ReconciliationById' => 'id (Chiave Primaria)',
|
||||
'Core:SynchroAtt:attcode' => 'Attributo',
|
||||
'Core:SynchroAtt:attcode+' => '',
|
||||
'Core:SynchroAtt:reconciliation' => 'Riconciliazione ?~~',
|
||||
'Core:SynchroAtt:reconciliation+' => '',
|
||||
'Core:SynchroAtt:update' => 'Aggiornamento ?~~',
|
||||
'Core:SynchroAtt:update+' => '',
|
||||
'Core:SynchroAtt:update_policy' => 'Policy di aggiornamento',
|
||||
'Core:SynchroAtt:update_policy+' => '',
|
||||
'Core:SynchroAtt:reconciliation_attcode' => 'Chiave di riconciliazione',
|
||||
'Core:SynchroAtt:reconciliation_attcode+' => '',
|
||||
'Core:SyncDataExchangeComment' => '(Scambio dati)',
|
||||
'Core:Synchro:ListOfDataSources' => 'Lista delle sorgenti di dati:',
|
||||
'Core:Synchro:LastSynchro' => 'Ultima sincronizzazione:',
|
||||
'Core:Synchro:ThisObjectIsSynchronized' => 'Questo oggetto è sincronizzato con una sorgente esterna di dati',
|
||||
'Core:Synchro:TheObjectWasCreatedBy_Source' => 'L\'oggetti è stato <b>creato</b> da una sorgente esterna di dati %1$s~~',
|
||||
'Core:Synchro:TheObjectCanBeDeletedBy_Source' => 'L\'oggetti <b>può essere cancellato</b> da una sorgente esterna di dati %1$s~~',
|
||||
'Core:Synchro:TheObjectCannotBeDeletedByUser_Source' => 'Tu <b>non puoi cancellare l\'oggetto</b> perché è di proprietà della sorgente dati esterna %1$s~~',
|
||||
'TitleSynchroExecution' => 'Esecuzione della sincronizzazione',
|
||||
'Class:SynchroDataSource:DataTable' => 'Tabella del database: %1$s',
|
||||
'Core:SyncDataSourceObsolete' => 'La fonte dei dati è contrassegnata come obsoleta. Operazione annullata',
|
||||
'Core:SyncDataSourceAccessRestriction' => 'Solo amministratori o l\'utente specificato nella fonte dei dati può eseguire questa operazione. Operazione annullata',
|
||||
'Core:SyncTooManyMissingReplicas' => 'Tutte le repliche sono mancanti dall\'importazione. Hai eseguito realmente l\'importazione? Operazione annullata',
|
||||
'Core:Duration_Seconds' => '%1$ds',
|
||||
'Core:Duration_Minutes_Seconds' => '%1$dmin %2$ds',
|
||||
'Core:Duration_Hours_Minutes_Seconds' => '%1$dh %2$dmin %3$sec~~',
|
||||
'Core:Duration_Days_Hours_Minutes_Seconds' => '%1$sg %2$dh %3$dmin %4$ds~~',
|
||||
));
|
||||
?>
|
||||
773
dictionaries/it.dictionary.itop.ui.php
Normal file
773
dictionaries/it.dictionary.itop.ui.php
Normal file
@@ -0,0 +1,773 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* @author Erwan Taloc <erwan.taloc@combodo.com>
|
||||
* @author Romain Quetiez <romain.quetiez@combodo.com>
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
|
||||
* @licence http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
Dict::Add('IT IT', 'Italian', 'Italiano', array(
|
||||
'Class:AuditRule' => 'Regola di Audit',
|
||||
'Class:AuditRule+' => '',
|
||||
'Class:AuditRule/Attribute:name' => 'Nome della regola',
|
||||
'Class:AuditRule/Attribute:name+' => '',
|
||||
'Class:AuditRule/Attribute:description' => 'Descrizione della regola di Audit',
|
||||
'Class:AuditRule/Attribute:description+' => '',
|
||||
'Class:AuditRule/Attribute:query' => 'Query da eseguire',
|
||||
'Class:AuditRule/Attribute:query+' => '',
|
||||
'Class:AuditRule/Attribute:valid_flag' => 'Oggetti validi?',
|
||||
'Class:AuditRule/Attribute:valid_flag+' => '',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:false' => 'falso',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:false+' => '',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:true' => 'vero',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:true+' => '',
|
||||
'Class:AuditRule/Attribute:category_id' => 'Categoria',
|
||||
'Class:AuditRule/Attribute:category_id+' => '',
|
||||
'Class:AuditCategory' => 'Categoria di Audit',
|
||||
'Class:AuditCategory+' => '',
|
||||
'Class:AuditCategory/Attribute:name' => 'Nome della Categoria',
|
||||
'Class:AuditCategory/Attribute:name+' => '',
|
||||
'Class:AuditCategory/Attribute:description' => 'Descrizione della Categoria di Audit',
|
||||
'Class:AuditCategory/Attribute:description+' => '',
|
||||
'Class:AuditCategory/Attribute:definition_set' => 'Insieme di definizione',
|
||||
'Class:AuditCategory/Attribute:definition_set+' => '',
|
||||
'Class:AuditCategory/Attribute:rules_list' => 'Regole di Audit',
|
||||
'Class:AuditCategory/Attribute:rules_list+' => '',
|
||||
'Class:URP_Profiles' => 'Profilo',
|
||||
'Class:URP_Profiles+' => '',
|
||||
'Class:URP_Profiles/Attribute:name' => 'Nome',
|
||||
'Class:URP_Profiles/Attribute:name+' => '',
|
||||
'Class:URP_Profiles/Attribute:description' => 'Descrizione',
|
||||
'Class:URP_Profiles/Attribute:description+' => '',
|
||||
'Class:URP_Profiles/Attribute:user_list' => 'Utenti',
|
||||
'Class:URP_Profiles/Attribute:user_list+' => '',
|
||||
'Class:URP_UserProfile' => 'Utente da Profilare',
|
||||
'Class:URP_UserProfile+' => '',
|
||||
'Class:URP_UserProfile/Attribute:userid' => 'Utente',
|
||||
'Class:URP_UserProfile/Attribute:userid+' => '',
|
||||
'Class:URP_UserProfile/Attribute:profileid' => 'Profilo',
|
||||
'Class:URP_UserProfile/Attribute:profileid+' => '',
|
||||
'Class:URP_UserProfile/Attribute:reason' => 'Motivo',
|
||||
'Class:URP_UserProfile/Attribute:reason+' => '',
|
||||
'Class:URP_UserOrg' => 'Organizzazione dell\'utente',
|
||||
'Class:URP_UserOrg+' => '',
|
||||
'Class:URP_UserOrg/Attribute:userid' => 'Utente',
|
||||
'Class:URP_UserOrg/Attribute:userid+' => '',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_id' => 'Organizazione',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_id+' => '',
|
||||
'Class:URP_UserOrg/Attribute:reason' => 'Motivo',
|
||||
'Class:URP_UserOrg/Attribute:reason+' => '',
|
||||
'Class:URP_ActionGrant' => 'azione_autorizzazione',
|
||||
'Class:URP_ActionGrant+' => '',
|
||||
'Class:URP_ActionGrant/Attribute:profileid' => 'Profilo',
|
||||
'Class:URP_ActionGrant/Attribute:profileid+' => '',
|
||||
'Class:URP_ActionGrant/Attribute:class' => 'Classe',
|
||||
'Class:URP_ActionGrant/Attribute:class+' => '',
|
||||
'Class:URP_ActionGrant/Attribute:permission' => 'Autorizzazione',
|
||||
'Class:URP_ActionGrant/Attribute:permission+' => '',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:no' => 'no',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:no+' => '',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:yes' => 'yes',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:yes+' => '',
|
||||
'Class:URP_ActionGrant/Attribute:action' => 'Azione',
|
||||
'Class:URP_ActionGrant/Attribute:action+' => '',
|
||||
'Class:URP_StimulusGrant' => 'stimulus_autorizzazione',
|
||||
'Class:URP_StimulusGrant+' => '',
|
||||
'Class:URP_StimulusGrant/Attribute:profileid' => 'Profilo',
|
||||
'Class:URP_StimulusGrant/Attribute:profileid+' => '',
|
||||
'Class:URP_StimulusGrant/Attribute:class' => 'Classe',
|
||||
'Class:URP_StimulusGrant/Attribute:class+' => '',
|
||||
'Class:URP_StimulusGrant/Attribute:permission' => 'Autorizzazione',
|
||||
'Class:URP_StimulusGrant/Attribute:permission+' => '',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:no' => 'no',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:no+' => '',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:yes' => 'yes',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:yes+' => '',
|
||||
'Class:URP_StimulusGrant/Attribute:stimulus' => 'Stimulus',
|
||||
'Class:URP_StimulusGrant/Attribute:stimulus+' => '',
|
||||
'Class:URP_AttributeGrant' => 'attributo_autorizzazione',
|
||||
'Class:URP_AttributeGrant+' => '',
|
||||
'Class:URP_AttributeGrant/Attribute:actiongrantid' => 'Azione di sovvenzione',
|
||||
'Class:URP_AttributeGrant/Attribute:actiongrantid+' => '',
|
||||
'Class:URP_AttributeGrant/Attribute:attcode' => 'Attributo',
|
||||
'Class:URP_AttributeGrant/Attribute:attcode+' => '',
|
||||
'Class:AuditRule/Attribute:category_name' => 'Categoria',
|
||||
'Class:AuditRule/Attribute:category_name+' => '',
|
||||
'Class:User' => 'User~~',
|
||||
'Class:User+' => '',
|
||||
'Class:User/Attribute:finalclass' => 'Tipo di account',
|
||||
'Class:User/Attribute:finalclass+' => '',
|
||||
'Class:User/Attribute:contactid' => 'Contatto (persona)',
|
||||
'Class:User/Attribute:contactid+' => '',
|
||||
'Class:User/Attribute:last_name' => 'Cognome',
|
||||
'Class:User/Attribute:last_name+' => '',
|
||||
'Class:User/Attribute:first_name' => 'Nome',
|
||||
'Class:User/Attribute:first_name+' => '',
|
||||
'Class:User/Attribute:email' => 'Email',
|
||||
'Class:User/Attribute:email+' => '',
|
||||
'Class:User/Attribute:login' => 'Login',
|
||||
'Class:User/Attribute:login+' => '',
|
||||
'Class:User/Attribute:language' => 'Lingua',
|
||||
'Class:User/Attribute:language+' => '',
|
||||
'Class:User/Attribute:language/Value:EN US' => 'Inglese',
|
||||
'Class:User/Attribute:language/Value:EN US+' => '',
|
||||
'Class:User/Attribute:language/Value:FR FR' => 'Francese',
|
||||
'Class:User/Attribute:language/Value:FR FR+' => '',
|
||||
'Class:User/Attribute:profile_list' => 'Profili',
|
||||
'Class:User/Attribute:profile_list+' => '',
|
||||
'Class:User/Attribute:allowed_org_list' => 'Organizzazioni autorizzate',
|
||||
'Class:User/Attribute:allowed_org_list+' => '',
|
||||
'Class:User/Error:LoginMustBeUnique' => 'Login deve essere unico - "%1s" è già utilizzato.~~',
|
||||
'Class:User/Error:AtLeastOneProfileIsNeeded' => 'Almeno un profilo deve essere assegnato a questo utente',
|
||||
'Class:URP_Dimensions' => 'dimensione',
|
||||
'Class:URP_Dimensions+' => '',
|
||||
'Class:URP_Dimensions/Attribute:name' => 'Nome',
|
||||
'Class:URP_Dimensions/Attribute:name+' => '',
|
||||
'Class:URP_Dimensions/Attribute:description' => 'Descrizione',
|
||||
'Class:URP_Dimensions/Attribute:description+' => '',
|
||||
'Class:URP_Dimensions/Attribute:type' => 'Tipo',
|
||||
'Class:URP_Dimensions/Attribute:type+' => '',
|
||||
'Class:URP_UserProfile/Attribute:userlogin' => 'Login',
|
||||
'Class:URP_UserProfile/Attribute:userlogin+' => '',
|
||||
'Class:URP_UserProfile/Attribute:profile' => 'Profilo',
|
||||
'Class:URP_UserProfile/Attribute:profile+' => '',
|
||||
'Class:URP_UserOrg/Attribute:userlogin' => 'Login',
|
||||
'Class:URP_UserOrg/Attribute:userlogin+' => '',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_name' => 'Organizazione',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_name+' => '',
|
||||
'Class:URP_ProfileProjection' => 'profilo_proiezione',
|
||||
'Class:URP_ProfileProjection+' => '',
|
||||
'Class:URP_ProfileProjection/Attribute:dimensionid' => 'Dimensione',
|
||||
'Class:URP_ProfileProjection/Attribute:dimensionid+' => '',
|
||||
'Class:URP_ProfileProjection/Attribute:dimension' => 'Dimensione',
|
||||
'Class:URP_ProfileProjection/Attribute:dimension+' => '',
|
||||
'Class:URP_ProfileProjection/Attribute:profileid' => 'Profilo',
|
||||
'Class:URP_ProfileProjection/Attribute:profileid+' => '',
|
||||
'Class:URP_ProfileProjection/Attribute:profile' => 'Profilo',
|
||||
'Class:URP_ProfileProjection/Attribute:profile+' => '',
|
||||
'Class:URP_ProfileProjection/Attribute:value' => 'Valore dell\'espressione',
|
||||
'Class:URP_ProfileProjection/Attribute:value+' => '',
|
||||
'Class:URP_ProfileProjection/Attribute:attribute' => 'Attributo',
|
||||
'Class:URP_ProfileProjection/Attribute:attribute+' => '',
|
||||
'Class:URP_ClassProjection' => 'classe_proiezione',
|
||||
'Class:URP_ClassProjection+' => '',
|
||||
'Class:URP_ClassProjection/Attribute:dimensionid' => 'Dimensione',
|
||||
'Class:URP_ClassProjection/Attribute:dimensionid+' => '',
|
||||
'Class:URP_ClassProjection/Attribute:dimension' => 'Dimensione',
|
||||
'Class:URP_ClassProjection/Attribute:dimension+' => '',
|
||||
'Class:URP_ClassProjection/Attribute:class' => 'Classe',
|
||||
'Class:URP_ClassProjection/Attribute:class+' => '',
|
||||
'Class:URP_ClassProjection/Attribute:value' => 'Valore dell\'espressione',
|
||||
'Class:URP_ClassProjection/Attribute:value+' => '',
|
||||
'Class:URP_ClassProjection/Attribute:attribute' => 'Attributo',
|
||||
'Class:URP_ClassProjection/Attribute:attribute+' => '',
|
||||
'Class:URP_ActionGrant/Attribute:profile' => 'Profilo',
|
||||
'Class:URP_ActionGrant/Attribute:profile+' => '',
|
||||
'Class:URP_StimulusGrant/Attribute:profile' => 'Profilo',
|
||||
'Class:URP_StimulusGrant/Attribute:profile+' => '',
|
||||
'Menu:WelcomeMenu' => 'Benveuto',
|
||||
'Menu:WelcomeMenu+' => '',
|
||||
'Menu:WelcomeMenuPage' => 'Benvenuto',
|
||||
'Menu:WelcomeMenuPage+' => '',
|
||||
'UI:WelcomeMenu:Title' => 'Benveuto su iTop',
|
||||
'UI:WelcomeMenu:LeftBlock' => '<p>iTop è un completo Portale Funzionale IT, Open Source.</p>
|
||||
<ul>Esso include:
|
||||
<li>Un completo CMDB (Configuration management database) per documentare e gestire l\'IT di inventario.</li>
|
||||
<li>Un modulo di gestione degli incidenti per monitorare e comunicare su tutte le problematiche che si verificano nel settore IT.</li>
|
||||
<li>Un modulo di gestione delle modifiche per pianificare e monitorare i cambiamenti all\'ambiente IT.</li>
|
||||
<li>Una banca dati errori noti per accelerare la risoluzione di incidenti.</li>
|
||||
<li>Un modulo di interruzione per documentare tutte le interruzioni pianificate e notificare gli opportuni contatti.</li>
|
||||
<li>Un cruscotto per ottenere rapidamente una panoramica del sistema IT.</li>
|
||||
</ul>
|
||||
<p>Tutti i moduli possono essere installati, passo dopo passo, indipendentemente l\'uno dall\'altro.</p>',
|
||||
'UI:WelcomeMenu:RightBlock' => '<p>iTop è fornitore di servizi di orientamento, che consente ai progettisti di gestire più o organizzazioni o clienti con facilità.
|
||||
<ul>>iTop, offre un set ricco di funzionalità dei processi di business che:
|
||||
<li>Migliora l\'efficacia di gestione IT</li>
|
||||
<li>Guida le prestazione delle operazioni IT</li>
|
||||
<li>Migliora la soddisfazione del cliente e fornisce ai dirigenti un idea della performance del business.</li>
|
||||
</ul>
|
||||
</p>
|
||||
<p>iTop è completamente aperto per essere integrato all\'interno della vostra infrastruttura di gestione dell\'IT.</p>
|
||||
<p>
|
||||
<ul>L\'adozione di questa nuova generazione di portale funzionale IT vi aiuterà a:
|
||||
<li>Meglio gestire un ambiente IT sempre più complesso.</li>
|
||||
<li>Implementare i processi ITIL al proprio ritmo.</li>
|
||||
<li>Gestire la risorsa più importante della tua IT: Documentazione.</li>
|
||||
</ul>
|
||||
</p>',
|
||||
'UI:WelcomeMenu:AllOpenRequests' => 'Apri le richieste: %1$d',
|
||||
'UI:WelcomeMenu:MyCalls' => 'Le mie richieste',
|
||||
'UI:WelcomeMenu:OpenIncidents' => 'Apri gli incidenti: %1$d',
|
||||
'UI:WelcomeMenu:AllConfigItems' => 'Elementi di Configurazione (CI): %1$d',
|
||||
'UI:WelcomeMenu:MyIncidents' => 'Incidenti assegnati a me',
|
||||
'UI:AllOrganizations' => ' Tutte le Organizzazioni ',
|
||||
'UI:YourSearch' => 'La tua Cerca',
|
||||
'UI:LoggedAsMessage' => 'Logged come %1$s',
|
||||
'UI:LoggedAsMessage+Admin' => 'Logged come %1$s (Amministratore)',
|
||||
'UI:Button:Logoff' => 'Log off',
|
||||
'UI:Button:GlobalSearch' => 'Cerca',
|
||||
'UI:Button:Search' => ' Cerca',
|
||||
'UI:Button:Query' => ' Domanda',
|
||||
'UI:Button:Ok' => 'Ok',
|
||||
'UI:Button:Cancel' => 'Cancella',
|
||||
'UI:Button:Apply' => 'Applica',
|
||||
'UI:Button:Back' => ' << Indietro',
|
||||
'UI:Button:Restart' => ' |<< Riavvia',
|
||||
'UI:Button:Next' => ' Prossimo >> ',
|
||||
'UI:Button:Finish' => ' Fine',
|
||||
'UI:Button:DoImport' => ' Esegui le Imporazioni ! ~~',
|
||||
'UI:Button:Done' => ' Fatto',
|
||||
'UI:Button:SimulateImport' => ' Simula l\'Importazione ~~',
|
||||
'UI:Button:Test' => 'Testa!',
|
||||
'UI:Button:Evaluate' => ' Valuta',
|
||||
'UI:Button:AddObject' => ' Aggiungi... ~~',
|
||||
'UI:Button:BrowseObjects' => ' Sfoglia... ~~',
|
||||
'UI:Button:Add' => ' Aggiungi ~~',
|
||||
'UI:Button:AddToList' => ' << Aggiungi ~~',
|
||||
'UI:Button:RemoveFromList' => ' Rimuovi >> ~~',
|
||||
'UI:Button:FilterList' => ' Filtra... ~~',
|
||||
'UI:Button:Create' => ' Crea ~~',
|
||||
'UI:Button:Delete' => ' Cancella ! ~~',
|
||||
'UI:Button:ChangePassword' => ' Cambia Password ~~',
|
||||
'UI:Button:ResetPassword' => ' Resetta Password ~~',
|
||||
'UI:SearchToggle' => 'Cerca',
|
||||
'UI:ClickToCreateNew' => 'Crea un nuovo %1$s~~',
|
||||
'UI:SearchFor_Class' => 'Cerca l\'oggetto %1$s',
|
||||
'UI:NoObjectToDisplay' => 'Nessun oggetto da mostrare.',
|
||||
'UI:Error:MandatoryTemplateParameter_object_id' => 'Object_id parametro è obbligatorio quando link_attr è specificato. Verificare la definizione del modello di display.',
|
||||
'UI:Error:MandatoryTemplateParameter_target_attr' => 'Target_attr parametro è obbligatorio quando link_attr è specificato. Verificare la definizione del modello di display.',
|
||||
'UI:Error:MandatoryTemplateParameter_group_by' => 'Il parametro è group_by obbligatoria. Verificare la definizione del modello di display.',
|
||||
'UI:Error:InvalidGroupByFields' => 'Elenco di campi non valido per il raggruppamento: "%1$s".',
|
||||
'UI:Error:UnsupportedStyleOfBlock' => 'Errore: Stile non supportato di blocco: "%1$s".',
|
||||
'UI:Error:IncorrectLinkDefinition_LinkedClass_Class' => 'Errata definizione di link: la classe di oggetti da gestire: %1$s non è stato trovato come chiave esterna nella classe %2$s',
|
||||
'UI:Error:Object_Class_Id_NotFound' => 'Oggetto: %1$s:%2$d non trovato.',
|
||||
'UI:Error:WizardCircularReferenceInDependencies' => 'Errore: Riferimento circolare nelle dipendenze tra i campi, controllare il modello di dati.',
|
||||
'UI:Error:UploadedFileTooBig' => 'Il file caricato è troppo grande. (dimensione massima consentita è di %1$s). Verificare di configurazione di PHP per upload_max_filesize e post_max_size.',
|
||||
'UI:Error:UploadedFileTruncated.' => 'Il file caricato è stata troncato !',
|
||||
'UI:Error:NoTmpDir' => 'La directory temporanea non è definita.',
|
||||
'UI:Error:CannotWriteToTmp_Dir' => 'Impossibile scrivere il file temporaneo sul disco. upload_tmp_dir = "%1$s".',
|
||||
'UI:Error:UploadStoppedByExtension_FileName' => 'Caricamento fermato per estensione. (Nome del file originale = "%1$s").',
|
||||
'UI:Error:UploadFailedUnknownCause_Code' => 'Il caricamento del file non riuscito, causa sconosciuta. (Codice errore = "%1$s").',
|
||||
'UI:Error:1ParametersMissing' => 'Errore: il seguente parametro deve essere specificato per questa operazione: %1$s.',
|
||||
'UI:Error:2ParametersMissing' => 'Errore: i seguenti parametri devono essere specificati per questa operazione: %1$s e %2$s.',
|
||||
'UI:Error:3ParametersMissing' => 'Errore: i seguenti parametri devono essere specificati per questa operazione: %1$s, %2$s e %3$s.',
|
||||
'UI:Error:4ParametersMissing' => 'Errore: i seguenti parametri devono essere specificati per questa operazione: %1$s, %2$s, %3$s e %4$s.',
|
||||
'UI:Error:IncorrectOQLQuery_Message' => 'Errore: errata OQL query: %1$s',
|
||||
'UI:Error:AnErrorOccuredWhileRunningTheQuery_Message' => 'Si è verificato un errore durante l\'esecuzione della query: %1$s',
|
||||
'UI:Error:ObjectAlreadyUpdated' => 'Errore: l\'oggetto è già stato aggiornato.',
|
||||
'UI:Error:ObjectCannotBeUpdated' => 'Errore: oggetto non può essere aggiornato.',
|
||||
'UI:Error:ObjectsAlreadyDeleted' => 'Errore: gli oggetti sono già stati eliminati!',
|
||||
'UI:Error:BulkDeleteNotAllowedOn_Class' => 'Non hai i permessi per eseguire una eliminazione collettiva degli oggetti della classe %1$s',
|
||||
'UI:Error:DeleteNotAllowedOn_Class' => 'Non ti è permesso di eliminare gli oggetti della classe %1$s',
|
||||
'UI:Error:BulkModifyNotAllowedOn_Class' => 'Non hai i permessi per eseguire un aggiornamento collettivo degli oggetti della classe %1$s',
|
||||
'UI:Error:ObjectAlreadyCloned' => 'Errore: l\'oggetto è già stato clonato!',
|
||||
'UI:Error:ObjectAlreadyCreated' => 'Errore: l\'oggetto è già stato creato!',
|
||||
'UI:Error:Invalid_Stimulus_On_Object_In_State' => 'Errore: stimolo non valido "%1$s" su un oggetto %2$s nello stato "%3$s".',
|
||||
|
||||
'UI:GroupBy:Count' => 'Conteggio',
|
||||
'UI:GroupBy:Count+' => '',
|
||||
'UI:CountOfObjects' => '%1$d oggetti corrispondenti ai criteri.',
|
||||
'UI_CountOfObjectsShort' => '%1$d oggetti.',
|
||||
'UI:NoObject_Class_ToDisplay' => 'No %1$s da visualizzare',
|
||||
'UI:History:LastModified_On_By' => 'Ultima modifica %1$s da %2$s.',
|
||||
'UI:HistoryTab' => 'Storia',
|
||||
'UI:NotificationsTab' => 'Notifiche',
|
||||
'UI:History:BulkImports' => 'Storia',
|
||||
'UI:History:BulkImports+' => 'Elenco delle importazioni CSV (primo ultimo)',
|
||||
'UI:History:BulkImportDetails' => 'Modifiche derivanti dai importazione CSV eseguita su %1$s (da %2$s)',
|
||||
'UI:History:Date' => 'Data',
|
||||
'UI:History:Date+' => '',
|
||||
'UI:History:User' => 'Utente',
|
||||
'UI:History:User+' => '',
|
||||
'UI:History:Changes' => 'Modifiche',
|
||||
'UI:History:Changes+' => '',
|
||||
'UI:History:StatsCreations' => 'Creato',
|
||||
'UI:History:StatsCreations+' => '',
|
||||
'UI:History:StatsModifs' => 'Modificato',
|
||||
'UI:History:StatsModifs+' => '',
|
||||
'UI:History:StatsDeletes' => 'Cancellato',
|
||||
'UI:History:StatsDeletes+' => '',
|
||||
'UI:Loading' => 'Caricamento...',
|
||||
'UI:Menu:Actions' => 'Azioni',
|
||||
'UI:Menu:New' => 'Nuovo...',
|
||||
'UI:Menu:Add' => 'Aggiungi...',
|
||||
'UI:Menu:Manage' => 'Gestischi...',
|
||||
'UI:Menu:EMail' => 'eMail',
|
||||
'UI:Menu:CSVExport' => 'CSV Export',
|
||||
'UI:Menu:Modify' => 'Modifica...',
|
||||
'UI:Menu:Delete' => 'Cancella...',
|
||||
'UI:Menu:BulkDelete' => 'Cancella...',
|
||||
'UI:UndefinedObject' => 'non definito',
|
||||
'UI:Document:OpenInNewWindow:Download' => 'Apri in una nuova finestra: %1$s, Scarica: %2$s',
|
||||
'UI:SelectAllToggle+' => '',
|
||||
'UI:TruncatedResults' => '%1$d oggetti visualizzati su %2$d',
|
||||
'UI:DisplayAll' => 'Mostra tutto',
|
||||
'UI:CollapseList' => 'Collassa',
|
||||
'UI:CountOfResults' => '%1$d oggetto(i)',
|
||||
'UI:ChangesLogTitle' => 'Log delle modifiche (%1$d):',
|
||||
'UI:EmptyChangesLogTitle' => 'Log delle modifiche è vuoto',
|
||||
'UI:SearchFor_Class_Objects' => 'Cerca per %1$s Oggetti',
|
||||
'UI:OQLQueryBuilderTitle' => 'OQL Query Builder',
|
||||
'UI:OQLQueryTab' => 'OQL Query',
|
||||
'UI:SimpleSearchTab' => 'Ricerca semplice',
|
||||
'UI:Details+' => '',
|
||||
'UI:SearchValue:Any' => '* Qualsiasi *',
|
||||
'UI:SearchValue:Mixed' => '* misti *',
|
||||
'UI:SelectOne' => '-- selezionare uno --',
|
||||
'UI:Login:Welcome' => 'Benvenuti su iTop!',
|
||||
'UI:Login:IncorrectLoginPassword' => 'Errato login/password, si prega di riprovare.',
|
||||
'UI:Login:IdentifyYourself' => 'Identifica te stesso prima di continuare',
|
||||
'UI:Login:UserNamePrompt' => 'Nome Utente',
|
||||
'UI:Login:PasswordPrompt' => 'Password',
|
||||
'UI:Login:ChangeYourPassword' => 'Cambia la tua password',
|
||||
'UI:Login:OldPasswordPrompt' => 'Vecchia password',
|
||||
'UI:Login:NewPasswordPrompt' => 'Nuova password',
|
||||
'UI:Login:RetypeNewPasswordPrompt' => 'Riscrivi la nuova password',
|
||||
'UI:Login:IncorrectOldPassword' => 'Errore: la vecchia password non è corretta',
|
||||
'UI:LogOffMenu' => 'Log off',
|
||||
'UI:LogOff:ThankYou' => 'Grazie per aver scelto iTop',
|
||||
'UI:LogOff:ClickHereToLoginAgain' => 'Clicca qui per effettuare il login di nuovo...',
|
||||
'UI:ChangePwdMenu' => 'Cambia Password...',
|
||||
'UI:AccessRO-All' => 'iTop è di sola lettura',
|
||||
'UI:AccessRO-Users' => 'iTop è di sola lettura per gli utenti finali',
|
||||
'UI:Login:RetypePwdDoesNotMatch' => 'Nuova password e la nuova password digitata nuovamente non corrispondono !',
|
||||
'UI:Button:Login' => 'Entra in iTop',
|
||||
|
||||
'UI:Login:Error:AccessRestricted' => 'L\'accesso a iTop è limitato. Si prega di contattare un amministratore iTop.',
|
||||
'UI:Login:Error:AccessAdmin' => 'Accesso limitato alle persone che hanno privilegi di amministratore. Si prega di contattare un amministratore iTop.',
|
||||
'UI:CSVImport:MappingSelectOne' => '-- seleziona uno --',
|
||||
'UI:CSVImport:MappingNotApplicable' => '-- ignora questo campo --',
|
||||
'UI:CSVImport:NoData' => 'Insieme di dati vuoto ..., si prega di fornire alcuni dati!',
|
||||
'UI:Title:DataPreview' => 'Anteprima dati',
|
||||
'UI:CSVImport:ErrorOnlyOneColumn' => 'Errore: I dati contengono solo una colonna. Avete selezionato il carattere separatore appropriato?',
|
||||
'UI:CSVImport:FieldName' => 'Campo %1$d',
|
||||
'UI:CSVImport:DataLine1' => 'Dati Linea 1',
|
||||
'UI:CSVImport:DataLine2' => 'Dati Linea 2',
|
||||
'UI:CSVImport:idField' => 'id (Chiave Primaria)',
|
||||
'UI:Title:BulkImport' => 'iTop - importazione collettiva',
|
||||
'UI:Title:BulkImport+' => '',
|
||||
'UI:Title:BulkSynchro_nbItem_ofClass_class' => 'Sincronizzazione di %1$d oggetti della classe %2$s',
|
||||
'UI:CSVImport:ClassesSelectOne' => '-- seleziona uno --',
|
||||
'UI:CSVImport:ErrorExtendedAttCode' => 'Errore interno: "%1$s" è un codice errato, perché "%2$s" NON è una chiave esterna della classe "%3$s"',
|
||||
'UI:CSVImport:ObjectsWillStayUnchanged' => '%1$d oggetto(i) rimarrà invariato.',
|
||||
'UI:CSVImport:ObjectsWillBeModified' => '%1$d oggetto(i) sarà modificato.',
|
||||
'UI:CSVImport:ObjectsWillBeAdded' => '%1$d oggetto(i) sarà aggiunto.',
|
||||
'UI:CSVImport:ObjectsWillHaveErrors' => '%1$d oggetto(i) avranno i errori.',
|
||||
'UI:CSVImport:ObjectsRemainedUnchanged' => '%1$d oggetto(i) è rimasto invariato.',
|
||||
'UI:CSVImport:ObjectsWereModified' => '%1$d oggetto(i) sono stati modificati.',
|
||||
'UI:CSVImport:ObjectsWereAdded' => '%1$d oggetto(i) sono stati aggiunti.',
|
||||
'UI:CSVImport:ObjectsHadErrors' => '%1$d oggetto(i) hanno avuto errori.',
|
||||
'UI:Title:CSVImportStep2' => 'Step 2 of 5: opzioni dati CVS',
|
||||
'UI:Title:CSVImportStep3' => 'Step 3 of 5: Mappatura dei dati',
|
||||
'UI:Title:CSVImportStep4' => 'Step 4 of 5: Importa simulazione',
|
||||
'UI:Title:CSVImportStep5' => 'Step 5 of 5: Importazione completata',
|
||||
'UI:CSVImport:LinesNotImported' => 'Linee che non possono essere caricate:',
|
||||
'UI:CSVImport:LinesNotImported+' => '',
|
||||
'UI:CSVImport:SeparatorComma+' => '',
|
||||
'UI:CSVImport:SeparatorSemicolon+' => '',
|
||||
'UI:CSVImport:SeparatorTab+' => '',
|
||||
'UI:CSVImport:SeparatorOther' => 'altri:',
|
||||
'UI:CSVImport:QualifierDoubleQuote+' => '',
|
||||
'UI:CSVImport:QualifierSimpleQuote+' => '',
|
||||
'UI:CSVImport:QualifierOther' => 'other:~~',
|
||||
'UI:CSVImport:TreatFirstLineAsHeader' => 'Tratta la prima riga come intestazione (nomi di colonna)',
|
||||
'UI:CSVImport:Skip_N_LinesAtTheBeginning' => 'Salta le linee %1$s all\'inzio del file',
|
||||
'UI:CSVImport:CSVDataPreview' => 'CSV Anteprima dei dati',
|
||||
'UI:CSVImport:SelectFile' => 'Selezionare il file da importare:',
|
||||
'UI:CSVImport:Tab:LoadFromFile' => 'Carica da un file',
|
||||
'UI:CSVImport:Tab:CopyPaste' => 'Copia e incolla i dati',
|
||||
'UI:CSVImport:Tab:Templates' => 'Modelli',
|
||||
'UI:CSVImport:PasteData' => 'Incolla i dati da importare:',
|
||||
'UI:CSVImport:PickClassForTemplate' => 'Scegli il modello da scaricare: ',
|
||||
'UI:CSVImport:SeparatorCharacter' => 'Separatore di carattere:',
|
||||
'UI:CSVImport:TextQualifierCharacter' => 'Testo di qualificazione carattere',
|
||||
'UI:CSVImport:CommentsAndHeader' => 'Commenti e intestazione',
|
||||
'UI:CSVImport:SelectClass' => 'Selezionare la classe da importare:',
|
||||
'UI:CSVImport:AdvancedMode' => 'Modalità avanzata',
|
||||
'UI:CSVImport:AdvancedMode+' => '',
|
||||
'UI:CSVImport:SelectAClassFirst' => 'Per configurare il mapping, selezionare prima una classe.',
|
||||
'UI:CSVImport:HeaderFields' => 'Campi',
|
||||
'UI:CSVImport:HeaderMappings' => 'Mappings',
|
||||
'UI:CSVImport:HeaderSearch' => 'Cerca?',
|
||||
'UI:CSVImport:AlertIncompleteMapping' => 'Per favore seleziona una mappatura per ogni campo.',
|
||||
'UI:CSVImport:AlertNoSearchCriteria' => 'Per favore seleziona almeno un criterio di ricerca',
|
||||
'UI:CSVImport:Encoding' => 'Codifica dei caratteri',
|
||||
'UI:UniversalSearchTitle' => 'iTop - Ricerca Universale',
|
||||
'UI:UniversalSearch:Error' => 'Errore: %1$s~~',
|
||||
'UI:UniversalSearch:LabelSelectTheClass' => 'Seleziona la classe per la ricerca: ',
|
||||
'UI:Audit:Title' => 'iTop - CMDB Audit~~',
|
||||
'UI:Audit:InteractiveAudit' => 'Audit Interattivo',
|
||||
'UI:Audit:HeaderAuditRule' => 'Regole di Audit',
|
||||
'UI:Audit:HeaderNbObjects' => '# Oggetti',
|
||||
'UI:Audit:HeaderNbErrors' => '# Errori',
|
||||
'UI:Audit:PercentageOk' => '% Ok',
|
||||
'UI:RunQuery:Title' => 'iTop - Valutazione Query OQL',
|
||||
'UI:RunQuery:QueryExamples' => 'Esempi di Query',
|
||||
'UI:RunQuery:HeaderPurpose' => 'Scopo',
|
||||
'UI:RunQuery:HeaderPurpose+' => '',
|
||||
'UI:RunQuery:HeaderOQLExpression' => 'Espressioni OQL',
|
||||
'UI:RunQuery:HeaderOQLExpression+' => '',
|
||||
'UI:RunQuery:ExpressionToEvaluate' => 'Espressione da valutare: ',
|
||||
'UI:RunQuery:MoreInfo' => 'Maggiori informazioni sulla query: ',
|
||||
'UI:RunQuery:DevelopedQuery' => 'Espressione della query riqualificata:',
|
||||
'UI:RunQuery:SerializedFilter' => 'Filtro pubblicato: ',
|
||||
'UI:RunQuery:Error' => 'Si è verificato un errore durante l\'esecuzione della query: %1$s',
|
||||
'UI:Schema:Title' => 'iTop schema degli oggetti',
|
||||
'UI:Schema:CategoryMenuItem' => 'Categoria <b>%1$s</b>',
|
||||
'UI:Schema:Relationships' => 'Relazioni',
|
||||
'UI:Schema:AbstractClass' => 'Classe astratta: nessun oggetto da questa classe può essere istanziato.',
|
||||
'UI:Schema:NonAbstractClass' => 'Classe non-astratta: oggetti da questa classe possono essere istanziati.',
|
||||
'UI:Schema:ClassHierarchyTitle' => 'Gerarchia delle classi',
|
||||
'UI:Schema:AllClasses' => 'Tutte le classi',
|
||||
'UI:Schema:ExternalKey_To' => 'Chiave esterna %1$s',
|
||||
'UI:Schema:Columns_Description' => 'Colonne: <em>%1$s</em>',
|
||||
'UI:Schema:Default_Description' => 'Default: "%1$s"',
|
||||
'UI:Schema:NullAllowed' => 'Null consentito',
|
||||
'UI:Schema:NullNotAllowed' => 'Null NON consentito',
|
||||
'UI:Schema:Attributes' => 'Attributi',
|
||||
'UI:Schema:AttributeCode' => 'Codice attributo',
|
||||
'UI:Schema:AttributeCode+' => '',
|
||||
'UI:Schema:Label' => 'Etichetta',
|
||||
'UI:Schema:Label+' => '',
|
||||
'UI:Schema:Type' => 'Tipo',
|
||||
'UI:Schema:Type+' => '',
|
||||
'UI:Schema:Origin' => 'Origine',
|
||||
'UI:Schema:Origin+' => '',
|
||||
'UI:Schema:Description' => 'Descrizione',
|
||||
'UI:Schema:Description+' => '',
|
||||
'UI:Schema:AllowedValues' => 'Valori consentiti',
|
||||
'UI:Schema:AllowedValues+' => '',
|
||||
'UI:Schema:MoreInfo' => 'Maggiori informazioni',
|
||||
'UI:Schema:MoreInfo+' => '',
|
||||
'UI:Schema:SearchCriteria' => 'Criteri di ricerca',
|
||||
'UI:Schema:FilterCode' => 'Codice di filtro',
|
||||
'UI:Schema:FilterCode+' => '',
|
||||
'UI:Schema:FilterDescription' => 'Descrizione',
|
||||
'UI:Schema:FilterDescription+' => '',
|
||||
'UI:Schema:AvailOperators' => 'Operatori disponibili',
|
||||
'UI:Schema:AvailOperators+' => '',
|
||||
'UI:Schema:ChildClasses' => 'Classi figlio',
|
||||
'UI:Schema:ReferencingClasses' => 'Classi di rifermento',
|
||||
'UI:Schema:RelatedClasses' => 'Classi correlate',
|
||||
'UI:Schema:LifeCycle' => 'Ciclo di vita',
|
||||
'UI:Schema:Triggers' => 'Triggers',
|
||||
'UI:Schema:Relation_Code_Description' => 'Relazione <em>%1$s</em> (%2$s)',
|
||||
'UI:Schema:RelationDown_Description' => 'Giù: %1$s',
|
||||
'UI:Schema:RelationUp_Description' => 'Su: %1$s',
|
||||
'UI:Schema:RelationPropagates' => '%1$s: propagato al livello %2$d, query: %3$s',
|
||||
'UI:Schema:RelationDoesNotPropagate' => '%1$s: non si propaga a (%2$d livelli), query: %3$s',
|
||||
'UI:Schema:Class_ReferencingClasses_From_By' => '%1$s fa riferimento la classe %2$s tramite il campo %3$s',
|
||||
'UI:Schema:Class_IsLinkedTo_Class_Via_ClassAndAttribute' => '%1$s è legata alla %2$s via %3$s::<em>%4$s</em>',
|
||||
'UI:Schema:Links:1-n' => 'Classi che puntano a %1$s (1:n links):',
|
||||
'UI:Schema:Links:n-n' => 'Classi legati alla %1$s (n:n links):',
|
||||
'UI:Schema:Links:All' => 'Grafico di tutte le classi correlate',
|
||||
'UI:Schema:NoLifeCyle' => 'Non vi è alcun ciclo di vita definito per questa classe.',
|
||||
'UI:Schema:LifeCycleTransitions' => 'Transizioni',
|
||||
'UI:Schema:LifeCyleAttributeOptions' => 'Opzioni per l\'attributo',
|
||||
'UI:Schema:LifeCycleHiddenAttribute' => 'Nascosto',
|
||||
'UI:Schema:LifeCycleReadOnlyAttribute' => 'Di sola lettura',
|
||||
'UI:Schema:LifeCycleMandatoryAttribute' => 'Obbigatorio',
|
||||
'UI:Schema:LifeCycleAttributeMustChange' => 'Deve cambiare',
|
||||
'UI:Schema:LifeCycleAttributeMustPrompt' => 'All\'utente verrà richiesto di modificare il valore',
|
||||
'UI:Schema:LifeCycleEmptyList' => 'lista vuota',
|
||||
'UI:LinksWidget:Autocomplete+' => '',
|
||||
'UI:Combo:SelectValue' => '--- seleziona un valore ---',
|
||||
'UI:Label:SelectedObjects' => 'oggetti selezionati: ',
|
||||
'UI:Label:AvailableObjects' => 'Oggetti disponibili: ',
|
||||
'UI:Link_Class_Attributes' => '%1$s attributi',
|
||||
'UI:AddObjectsOf_Class_LinkedWith_Class_Instance' => 'Aggiungi l\'oggeto %1$s collegato con %2$s: %3$s',
|
||||
'UI:AddObjectsOf_Class_LinkedWith_Class' => 'Aggiungi l\'oggeto %1$s al collegamento con %2$s',
|
||||
'UI:ManageObjectsOf_Class_LinkedWith_Class_Instance' => 'Gestisci l\'oggetto %1$s collegato con %2$s: %3$s',
|
||||
'UI:AddLinkedObjectsOf_Class' => 'Aggiungi %1$s...',
|
||||
'UI:RemoveLinkedObjectsOf_Class' => 'Rimuovi gli oggetti selezionati',
|
||||
'UI:Message:EmptyList:UseAdd' => 'La lista è vuota, utilizzare il pulsante "Aggiungi ..." per aggiungere elementi.',
|
||||
'UI:Message:EmptyList:UseSearchForm' => 'Utilizza il modulo di ricerca qui sopra per cercare oggetti da aggiungere.',
|
||||
'UI:Wizard:FinalStepTitle' => 'Passo finale: la conferma',
|
||||
'UI:Title:DeletionOf_Object' => 'Soppressione di %1$s',
|
||||
'UI:Title:BulkDeletionOf_Count_ObjectsOf_Class' => 'Cancellazione collettiva di %1$d oggetti della classe %2$s',
|
||||
'UI:Delete:NotAllowedToDelete' => 'Non ti è permesso di eliminare l\'oggetto',
|
||||
'UI:Delete:NotAllowedToUpdate_Fields' => 'Non hai i permessi per aggiornare il seguente campo(i): %1$s',
|
||||
'UI:Error:NotEnoughRightsToDelete' => 'Questo oggetto non può essere cancellato perché l\'utente corrente non dispone dei diritti necessari',
|
||||
'UI:Error:CannotDeleteBecause' => 'Questo oggetto non può essere cancellato perchè: %1$s~~',
|
||||
'UI:Error:CannotDeleteBecauseOfDepencies' => 'Questo oggetto non può essere cancellato perché alcune operazioni manuali devono essere effettuate prima di questo',
|
||||
'UI:Error:CannotDeleteBecauseManualOpNeeded' => 'Questo oggetto non può essere cancellato perché alcune operazioni manuali devono essere effettuate prima di questo',
|
||||
'UI:Archive_User_OnBehalfOf_User' => '%1$s a nome di %2$s',
|
||||
'UI:Delete:Deleted' => 'deleted~~',
|
||||
'UI:Delete:AutomaticallyDeleted' => 'automaticamente eliminato',
|
||||
'UI:Delete:AutomaticResetOf_Fields' => 'ripristino automatico del campo(i): %1$s',
|
||||
'UI:Delete:CleaningUpRefencesTo_Object' => 'Pulizia di tutti i riferimenti a %1$s...',
|
||||
'UI:Delete:CleaningUpRefencesTo_Several_ObjectsOf_Class' => 'Pulizia di tutti i riferimenti a %1$d oggetti di classe %2$s...',
|
||||
'UI:Delete:Done+' => '',
|
||||
'UI:Delete:_Name_Class_Deleted' => '%1$s - %2$s cancellato.',
|
||||
'UI:Delete:ConfirmDeletionOf_Name' => 'Soppressione di %1$s',
|
||||
'UI:Delete:ConfirmDeletionOf_Count_ObjectsOf_Class' => 'Soppressione di %1$d oggetti di classe %2$s',
|
||||
'UI:Delete:CannotDeleteBecause' => 'Non può essere cancellato: %1$s~~',
|
||||
'UI:Delete:ShouldBeDeletedAtomaticallyButNotPossible' => 'Dovrebbe essere eliminato automaticamente, ma questo non è fattibile: %1$s~~',
|
||||
'UI:Delete:MustBeDeletedManuallyButNotPossible' => 'Deve essere cancellato manualmente, ma questo non è fattibile: %1$s~~',
|
||||
'UI:Delete:WillBeDeletedAutomatically' => 'Sarà cancellato automaticamente',
|
||||
'UI:Delete:MustBeDeletedManually' => 'Deve essere cancellato manualmente',
|
||||
'UI:Delete:CannotUpdateBecause_Issue' => 'Dovrebbero essere automaticamente aggiornati, ma: %1$s~~',
|
||||
'UI:Delete:WillAutomaticallyUpdate_Fields' => 'Sarà automaticamente aggiornato (reset: %1$s)~~',
|
||||
'UI:Delete:Count_Objects/LinksReferencing_Object' => '%1$d oggetti/link fanno riferimento %2$s',
|
||||
'UI:Delete:Count_Objects/LinksReferencingTheObjects' => '%1$d oggetti / link fanno riferimento alcuni degli oggetti da eliminare',
|
||||
'UI:Delete:ReferencesMustBeDeletedToEnsureIntegrity' => 'Per garantire l\'integrità del database, ogni riferimento dovrebbe essere ulteriormente eliminato',
|
||||
'UI:Delete:Consequence+' => '',
|
||||
'UI:Delete:SorryDeletionNotAllowed' => 'Spiacenti, non sei autorizzato a cancellare questo oggetto, vedere le spiegazioni di cui sopra',
|
||||
'UI:Delete:PleaseDoTheManualOperations' => 'Si prega di eseguire le operazioni manuali di cui sopra prima di richiedere la cancellazione di questo oggetto',
|
||||
'UI:Delect:Confirm_Object' => 'Si prega di confermare che si desidera eliminare %1$s.',
|
||||
'UI:Delect:Confirm_Count_ObjectsOf_Class' => 'Si prega di confermare che si desidera eliminare i seguenti oggetti %1$d della classe %2$s.',
|
||||
'UI:WelcomeToITop' => 'Benvenuto su iTop',
|
||||
'UI:DetailsPageTitle' => 'iTop - %1$s - %2$s dettagli',
|
||||
'UI:ErrorPageTitle' => 'iTop - Errore',
|
||||
'UI:ObjectDoesNotExist' => 'Spiacenti, questo oggetto non esiste (o non si è autorizzati per vederlo).',
|
||||
'UI:SearchResultsPageTitle' => 'iTop - Risultati della ricerca',
|
||||
'UI:Search:NoSearch' => 'Niente da ricercare',
|
||||
'UI:FullTextSearchTitle_Text' => 'Risultati per "%1$s":',
|
||||
'UI:Search:Count_ObjectsOf_Class_Found' => 'Trovato l\'oggetto(i) %1$d della classe %2$s.',
|
||||
'UI:Search:NoObjectFound' => 'Nessun oggetto trovato.',
|
||||
'UI:ModificationPageTitle_Object_Class' => 'iTop - %1$s - %2$s modifica',
|
||||
'UI:ModificationTitle_Class_Object' => 'Modifica di %1$s: <span class=\"hilite\">%2$s</span>',
|
||||
'UI:ClonePageTitle_Object_Class' => 'iTop - Clone %1$s - %2$s modifica',
|
||||
'UI:CloneTitle_Class_Object' => 'Clone di %1$s: <span class=\"hilite\">%2$s</span>',
|
||||
'UI:CreationPageTitle_Class' => 'iTop - Creazione di un nuovo %1$s ',
|
||||
'UI:CreationTitle_Class' => 'Creazione di un nuovo %1$s',
|
||||
'UI:SelectTheTypeOf_Class_ToCreate' => 'Seleziona il tipo di %1$s da creare:',
|
||||
'UI:Class_Object_NotUpdated' => 'Nessun cambiamento rilevato, %1$s (%2$s) <strong>non</strong> è stato modificato.',
|
||||
'UI:Class_Object_Updated' => '%1$s (%2$s) aggiornato.',
|
||||
'UI:BulkDeletePageTitle' => 'iTop - Eliminazione collettiva',
|
||||
'UI:BulkDeleteTitle' => 'Seleziona gli oggetti che si desidera eliminare:',
|
||||
'UI:PageTitle:ObjectCreated' => 'iTop Oggetto Creato.',
|
||||
'UI:Title:Object_Of_Class_Created' => '%1$s - %2$s creato.',
|
||||
'UI:Apply_Stimulus_On_Object_In_State_ToTarget_State' => 'Applicazione %1$s all\'oggetto: %2$s nello stato %3$s allo stato target: %4$s.',
|
||||
'UI:ObjectCouldNotBeWritten' => 'L\'oggetto non può essere scritto: %1$s~~',
|
||||
'UI:PageTitle:FatalError' => 'iTop - Fatal Error',
|
||||
'UI:SystemIntrusion' => 'Accesso negato. Hai cercato di eseguire un\'operazione che non ti è consentita.',
|
||||
'UI:FatalErrorMessage' => 'Fatal error, iTop non può continuare.',
|
||||
'UI:Error_Details' => 'Errore: %1$s.',
|
||||
'UI:PageTitle:ClassProjections' => 'iTop gestione degli utenti - proiezioni classe',
|
||||
'UI:PageTitle:ProfileProjections' => 'iTop gestione degli utenti - proiezioni profilo',
|
||||
'UI:UserManagement:Class' => 'Classe',
|
||||
'UI:UserManagement:Class+' => '',
|
||||
'UI:UserManagement:ProjectedObject' => 'Oggetto',
|
||||
'UI:UserManagement:ProjectedObject+' => '',
|
||||
'UI:UserManagement:AnyObject' => '* qualsiasi *',
|
||||
'UI:UserManagement:User' => 'Utente',
|
||||
'UI:UserManagement:User+' => '',
|
||||
'UI:UserManagement:Profile' => 'Profilo',
|
||||
'UI:UserManagement:Profile+' => '',
|
||||
'UI:UserManagement:Action:Read' => 'Leggi',
|
||||
'UI:UserManagement:Action:Read+' => '',
|
||||
'UI:UserManagement:Action:Modify' => 'Modifica',
|
||||
'UI:UserManagement:Action:Modify+' => '',
|
||||
'UI:UserManagement:Action:Delete' => 'Cancella',
|
||||
'UI:UserManagement:Action:Delete+' => '',
|
||||
'UI:UserManagement:Action:BulkRead' => 'Leggi Bulk (Export)',
|
||||
'UI:UserManagement:Action:BulkRead+' => '',
|
||||
'UI:UserManagement:Action:BulkModify' => 'Modifica Bulk',
|
||||
'UI:UserManagement:Action:BulkModify+' => '',
|
||||
'UI:UserManagement:Action:BulkDelete' => 'Cancella Bulk ',
|
||||
'UI:UserManagement:Action:BulkDelete+' => '',
|
||||
'UI:UserManagement:Action:Stimuli' => 'Stimoli',
|
||||
'UI:UserManagement:Action:Stimuli+' => '',
|
||||
'UI:UserManagement:Action' => 'Azione',
|
||||
'UI:UserManagement:Action+' => '',
|
||||
'UI:UserManagement:TitleActions' => 'Azioni',
|
||||
'UI:UserManagement:Permission' => 'Autorizzazione',
|
||||
'UI:UserManagement:Permission+' => '',
|
||||
'UI:UserManagement:Attributes' => 'Attributi',
|
||||
'UI:UserManagement:ActionAllowed:Yes' => 'Si',
|
||||
'UI:UserManagement:ActionAllowed:No' => 'No',
|
||||
'UI:UserManagement:AdminProfile+' => '',
|
||||
'UI:UserManagement:NoLifeCycleApplicable' => 'N/A',
|
||||
'UI:UserManagement:NoLifeCycleApplicable+' => '',
|
||||
'UI:UserManagement:GrantMatrix' => 'Grant Matrix',
|
||||
'UI:UserManagement:LinkBetween_User_And_Profile' => 'Collegamento tra %1$s e %2$s',
|
||||
'UI:UserManagement:LinkBetween_User_And_Org' => 'Collegamento tra %1$s e %2$s',
|
||||
'Menu:AdminTools' => 'Strumenti di amministrazione',
|
||||
'Menu:AdminTools+' => '',
|
||||
'Menu:AdminTools?' => 'Strumenti accessibile solo agli utenti con il profilo di amministratore',
|
||||
'UI:ChangeManagementMenu' => 'Gestione Cambi',
|
||||
'UI:ChangeManagementMenu+' => '',
|
||||
'UI:ChangeManagementMenu:Title' => 'Panoramica dei cambi',
|
||||
'UI-ChangeManagementMenu-ChangesByType' => 'Cambi per tipo',
|
||||
'UI-ChangeManagementMenu-ChangesByStatus' => 'Cambi per stato',
|
||||
'UI-ChangeManagementMenu-ChangesByWorkgroup' => 'Cambi per gruppi di lavoro',
|
||||
'UI-ChangeManagementMenu-ChangesNotYetAssigned' => 'Cambi non ancora assegnati',
|
||||
'UI:ConfigurationItemsMenu' => 'Configuration Items',
|
||||
'UI:ConfigurationItemsMenu+' => '',
|
||||
'UI:ConfigurationItemsMenu:Title' => 'Configuration Items Panoramica',
|
||||
'UI-ConfigurationItemsMenu-ServersByCriticity' => 'Server per criticità',
|
||||
'UI-ConfigurationItemsMenu-PCsByCriticity' => 'PCs per criticità',
|
||||
'UI-ConfigurationItemsMenu-NWDevicesByCriticity' => 'Dispositivi di rete per criticità',
|
||||
'UI-ConfigurationItemsMenu-ApplicationsByCriticity' => 'Applicazioni per criticità',
|
||||
'UI:ConfigurationManagementMenu' => 'Gestione Configurazione',
|
||||
'UI:ConfigurationManagementMenu+' => '',
|
||||
'UI:ConfigurationManagementMenu:Title' => 'Panoramica delle infrastrutture',
|
||||
'UI-ConfigurationManagementMenu-InfraByType' => 'Oggetti infrastruttutura per tipo',
|
||||
'UI-ConfigurationManagementMenu-InfraByStatus' => 'Oggetti infrastruttutura per stato',
|
||||
'UI:ConfigMgmtMenuOverview:Title' => 'Cruscotto per Gestione configurazione',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIbyStatus' => 'Configuration Items per stato',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIByType' => 'Configuration Items per tipo',
|
||||
'UI:RequestMgmtMenuOverview:Title' => 'Cruscotto per Gestione Richieste',
|
||||
'UI-RequestManagementOverview-RequestByService' => 'Richieste degli utenti per servizio',
|
||||
'UI-RequestManagementOverview-RequestByPriority' => 'Richieste degli utenti per priorità',
|
||||
'UI-RequestManagementOverview-RequestUnassigned' => 'Richieste degli utenti non ancora assegnate ad un agente',
|
||||
'UI:IncidentMgmtMenuOverview:Title' => 'Cruscotto Gestione degli Incidenti',
|
||||
'UI-IncidentManagementOverview-IncidentByService' => 'Incidenti per servizio',
|
||||
'UI-IncidentManagementOverview-IncidentByPriority' => 'Incidenti per priorità',
|
||||
'UI-IncidentManagementOverview-IncidentUnassigned' => 'Incidenti non ancora assegnati ad un agente',
|
||||
'UI:ChangeMgmtMenuOverview:Title' => 'Cruscotto per Gestione dei Cambi',
|
||||
'UI-ChangeManagementOverview-ChangeByType' => 'Cambi per tipo',
|
||||
'UI-ChangeManagementOverview-ChangeUnassigned' => 'Cambi non ancora assegnati ad un agente',
|
||||
'UI-ChangeManagementOverview-ChangeWithOutage' => 'Interruzioni dovute ai cambi',
|
||||
'UI:ServiceMgmtMenuOverview:Title' => 'Cruscotto per Gestione dei Cambi',
|
||||
'UI-ServiceManagementOverview-CustomerContractToRenew' => 'Contratti con i clienti da rinnovarsi in 30 giorni',
|
||||
'UI-ServiceManagementOverview-ProviderContractToRenew' => 'Contratti con i fornitori da rinnovarsi in 30 giorni',
|
||||
'UI:ContactsMenu' => 'Contatti',
|
||||
'UI:ContactsMenu+' => '',
|
||||
'UI:ContactsMenu:Title' => 'Contatti Panoramica',
|
||||
'UI-ContactsMenu-ContactsByLocation' => 'Contatti per localizzazione',
|
||||
'UI-ContactsMenu-ContactsByType' => 'Contatti per tipo',
|
||||
'UI-ContactsMenu-ContactsByStatus' => 'Contatti per stato',
|
||||
'Menu:CSVImportMenu' => 'Importazione CSV',
|
||||
'Menu:CSVImportMenu+' => '',
|
||||
'Menu:DataModelMenu' => 'Modello Dati',
|
||||
'Menu:DataModelMenu+' => '',
|
||||
'Menu:ExportMenu' => 'Esporta',
|
||||
'Menu:ExportMenu+' => '',
|
||||
'Menu:NotificationsMenu' => 'Notifiche',
|
||||
'Menu:NotificationsMenu+' => '',
|
||||
'UI:NotificationsMenu:Title' => 'Configurazione delle <span class="hilite">Notifiche</span>',
|
||||
'UI:NotificationsMenu:Help' => 'Aiuto',
|
||||
'UI:NotificationsMenu:HelpContent' => '<p>In iTop le notifiche sono completamente personalizzabili. Essi si basano su due serie di oggetti: <i>trigger e azioni</i>.</p>
|
||||
<p><i><b>Triggers</b></i> per definire quando una notifica verrà eseguita. Ci sono 3 tipi di trigger per la copertura di 3 fasi differenti del ciclo di vita di un oggetto:
|
||||
<ol>
|
||||
<li>the "OnCreate" trigger vengono eseguiti quando un oggetto della classe specificata viene creata</li>
|
||||
<li>the "OnStateEnter" trigger vengono eseguiti prima che un oggetto della classe data entra in uno stato specifico (provenienti da un altro Stato)</li>
|
||||
<li>the "OnStateLeave" trigger vengono eseguiti quando un oggetto della classe lascia uno stato specificato</li>
|
||||
</ol>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
<i><b>Azioni</b></i> definire le azioni da eseguire quando il trigger vengono eseguiti. Per ora c\'è solo un tipo di azione consiste nel mandare un messaggio email.
|
||||
Inoltre, tali azioni definiscono il modello da utilizzare per l\'invio della e-mail così come gli altri parametri del messaggio come, l\'importanza dei destinatari, etc
|
||||
</p>
|
||||
<p>Una Pagina speciale: <a href="../setup/email.test.php" target="_blank">email.test.php</a> è disponibile per il testing e la risoluzione dei problemi di configurazione PHP mail.</p>
|
||||
<p>Per essere eseguite, le azioni devono essere associate ai trigger.
|
||||
Quando è associata a un trigger, ad ogni azione è assegnato un numero "ordine", che specifica in quale ordine le azioni devono essere eseguite.</p>',
|
||||
'UI:NotificationsMenu:Triggers' => 'Triggers',
|
||||
'UI:NotificationsMenu:AvailableTriggers' => 'Triggers Disponibili',
|
||||
'UI:NotificationsMenu:OnCreate' => 'When an object is created~~',
|
||||
'UI:NotificationsMenu:OnStateEnter' => 'Quando un oggetto viene creato',
|
||||
'UI:NotificationsMenu:OnStateLeave' => 'Quando un oggetto lascia un determinato stato',
|
||||
'UI:NotificationsMenu:Actions' => 'Azioni',
|
||||
'UI:NotificationsMenu:AvailableActions' => 'Azioni disponibili',
|
||||
'Menu:AuditCategories' => 'Categorie di Audit',
|
||||
'Menu:AuditCategories+' => '',
|
||||
'Menu:Notifications:Title' => 'Categorie di Audit',
|
||||
'Menu:RunQueriesMenu' => 'Esegui query',
|
||||
'Menu:RunQueriesMenu+' => '',
|
||||
'Menu:DataAdministration' => 'Dati di amministrazione',
|
||||
'Menu:DataAdministration+' => '',
|
||||
'Menu:UniversalSearchMenu' => 'Ricerca universale',
|
||||
'Menu:UniversalSearchMenu+' => '',
|
||||
'Menu:ApplicationLogMenu' => 'Log dell\'applicazione',
|
||||
'Menu:ApplicationLogMenu+' => '',
|
||||
'Menu:ApplicationLogMenu:Title' => 'Log dell\'applicazione',
|
||||
'Menu:UserManagementMenu' => 'Gestione degli utenti',
|
||||
'Menu:UserManagementMenu+' => '',
|
||||
'Menu:ProfilesMenu' => 'Profili',
|
||||
'Menu:ProfilesMenu+' => '',
|
||||
'Menu:ProfilesMenu:Title' => 'Profili',
|
||||
'Menu:UserAccountsMenu' => 'Account utente',
|
||||
'Menu:UserAccountsMenu+' => '',
|
||||
'Menu:UserAccountsMenu:Title' => 'Account utente',
|
||||
'UI:iTopVersion:Short' => 'Versione iTop %1$s',
|
||||
'UI:iTopVersion:Long' => 'Versione iTop %1$s-%2$s costruita il %3$s',
|
||||
'UI:PropertiesTab' => 'Proprietà',
|
||||
'UI:OpenDocumentInNewWindow_' => 'Apri questo documento in una nuova finestra: %1$s',
|
||||
'UI:DownloadDocument_' => 'Scarica questo documento: %1$s',
|
||||
'UI:Document:NoPreview' => 'Non è disponibile un\'anteprima per questo tipo di documento',
|
||||
'UI:DeadlineMissedBy_duration' => 'Mancati %1$s',
|
||||
'UI:Deadline_LessThan1Min' => '< 1 min',
|
||||
'UI:Deadline_Minutes' => '%1$d min',
|
||||
'UI:Deadline_Hours_Minutes' => '%1$dh %2$dmin',
|
||||
'UI:Deadline_Days_Hours_Minutes' => '%1$dg %2$dh %3$dmin',
|
||||
'UI:Help' => 'Aiuto',
|
||||
'UI:PasswordConfirm' => '(Conferma)',
|
||||
'UI:BeforeAdding_Class_ObjectsSaveThisObject' => 'Prima di aggiungere più %1$s oggetti, salva questo oggetto.',
|
||||
'UI:DisplayThisMessageAtStartup' => 'Visualizza questo messaggio in fase di avvio',
|
||||
'UI:RelationshipGraph' => 'Visualizzazione grafica',
|
||||
'UI:RelationshipList' => 'Lista',
|
||||
'UI:OperationCancelled' => 'Operazione Annullata',
|
||||
'Portal:Title' => 'Portale Utente iTop',
|
||||
'Portal:Refresh' => 'Ricarica',
|
||||
'Portal:Back' => 'Indietro',
|
||||
'Portal:CreateNewRequest' => 'Crea una nuova richiesta',
|
||||
'Portal:ChangeMyPassword' => 'Cambia la mia password',
|
||||
'Portal:Disconnect' => 'Disconnetti',
|
||||
'Portal:OpenRequests' => 'Le mie richieste aperte',
|
||||
'Portal:ResolvedRequests' => 'Le mie richieste risolte',
|
||||
'Portal:SelectService' => 'Seleziona un servizio dal catalogo:',
|
||||
'Portal:PleaseSelectOneService' => 'Si prega di selezionare un servizio',
|
||||
'Portal:SelectSubcategoryFrom_Service' => 'Seleziona una sotto-categoria per il servizio %1$s:',
|
||||
'Portal:PleaseSelectAServiceSubCategory' => 'Si prega di selezionare una delle sottocategorie',
|
||||
'Portal:DescriptionOfTheRequest' => 'Inserisci la descrizione della tua richiesta:',
|
||||
'Portal:TitleRequestDetailsFor_Request' => 'Dettagli per la richiesta %1$s:',
|
||||
'Portal:NoOpenRequest' => 'Nessuna richiesta in questa categoria.',
|
||||
'Portal:Button:CloseTicket' => 'Chiudi questo ticket',
|
||||
'Portal:EnterYourCommentsOnTicket' => 'Inserisci il tuo commento sulla risoluzione di questo ticket:',
|
||||
'Portal:ErrorNoContactForThisUser' => 'Errore: l\'utente corrente non è associato ad un Contatto/Persona. Si prega di contattare l\'amministratore.',
|
||||
'Portal:Attachments' => 'Allegati',
|
||||
'Portal:AddAttachment' => ' Aggiungi allegati ',
|
||||
'Portal:RemoveAttachment' => ' Rimuovi allegati ',
|
||||
'Portal:Attachment_No_To_Ticket_Name' => 'Allegato #%1$d a %2$s (%3$s)',
|
||||
'Enum:Undefined' => 'Non definito',
|
||||
'UI:DurationForm_Days_Hours_Minutes_Seconds' => '%1$s Giorni %2$s Ore %3$s Minuti %4$s Secondi',
|
||||
'UI:ModifyAllPageTitle' => 'Modifica Tutto',
|
||||
'UI:Modify_N_ObjectsOf_Class' => 'Modifica %1$d oggetto della classe %2$s',
|
||||
'UI:Modify_M_ObjectsOf_Class_OutOf_N' => 'Modifica %1$d oggetto della classe %2$s fuori da %3$d~~',
|
||||
'UI:Menu:ModifyAll' => 'Modifica...',
|
||||
'UI:Button:ModifyAll' => 'Modifica tutto',
|
||||
'UI:Button:PreviewModifications' => 'Anteprima Modifiche >>~~',
|
||||
'UI:ModifiedObject' => 'Oggetto Modificato',
|
||||
'UI:BulkModifyStatus' => 'Operazioni',
|
||||
'UI:BulkModifyStatus+' => '',
|
||||
'UI:BulkModifyErrors' => 'Errori (eventuali)',
|
||||
'UI:BulkModifyErrors+' => '',
|
||||
'UI:BulkModifyStatusOk' => 'Ok',
|
||||
'UI:BulkModifyStatusError' => 'Errore',
|
||||
'UI:BulkModifyStatusModified' => 'Modificato',
|
||||
'UI:BulkModifyStatusSkipped' => 'Saltato',
|
||||
'UI:BulkModify_Count_DistinctValues' => '%1$d valori distinti:',
|
||||
'UI:BulkModify:Value_Exists_N_Times' => '%1$s, %2$d volta(e)',
|
||||
'UI:BulkModify:N_MoreValues' => '%1$d più valori...~~',
|
||||
'UI:AttemptingToSetAReadOnlyAttribute_Name' => 'Tentativo di impostare il campo di sola lettura: %1$s',
|
||||
'UI:FailedToApplyStimuli' => 'L\'azione non è riuscita.',
|
||||
'UI:StimulusModify_N_ObjectsOf_Class' => '%1$s: Modifica %2$d oggetti della classe %3$s~~',
|
||||
'UI:CaseLogTypeYourTextHere' => 'Digitare il tuo testo qui:',
|
||||
'UI:CaseLog:DateFormat' => 'A-m-g H:m:s',
|
||||
'UI:CaseLog:Header_Date_UserName' => '%1$s - %2$s:~~',
|
||||
'UI:CaseLog:InitialValue' => 'Valore iniziale:',
|
||||
'UI:AttemptingToSetASlaveAttribute_Name' => 'Il campo %1$s on è scrivibile, perché è comandato dalla sincronizzazione dei dati. Valore non impostato.',
|
||||
'UI:ActionNotAllowed' => 'Non hai i permessi per eseguire questa azione su questi oggetti.',
|
||||
'UI:BulkAction:NoObjectSelected' => 'Si prega di selezionare almeno un oggetto per eseguire questa operazione',
|
||||
'UI:AttemptingToChangeASlaveAttribute_Name' => 'Il campo %1$s on è scrivibile, perché è comandato dalla sincronizzazione dei dati. Valore rimane invariato.',
|
||||
));
|
||||
?>
|
||||
488
dictionaries/pt_br.dictionary.itop.core.php
Normal file
488
dictionaries/pt_br.dictionary.itop.core.php
Normal file
@@ -0,0 +1,488 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* @author Erwan Taloc <erwan.taloc@combodo.com>
|
||||
* @author Romain Quetiez <romain.quetiez@combodo.com>
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
* @author Marco Tulio <mtulio@opensolucoes.com.br>
|
||||
|
||||
* @licence http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
|
||||
'Class:ActionEmail' => 'Email notificação',
|
||||
'Class:ActionEmail+' => '',
|
||||
'Class:ActionEmail/Attribute:test_recipient' => 'Teste destino',
|
||||
'Class:ActionEmail/Attribute:test_recipient+' => 'Destinatário o status está como "Teste"',
|
||||
'Class:ActionEmail/Attribute:from' => 'De',
|
||||
'Class:ActionEmail/Attribute:from+' => 'Será enviado dentro do cabeçalho do email',
|
||||
'Class:ActionEmail/Attribute:reply_to' => 'Responder para',
|
||||
'Class:ActionEmail/Attribute:reply_to+' => 'Será enviado dentro do cabeçalho do email',
|
||||
'Class:ActionEmail/Attribute:to' => 'Para',
|
||||
'Class:ActionEmail/Attribute:to+' => 'Destinatário para o email',
|
||||
'Class:ActionEmail/Attribute:cc' => 'Cc',
|
||||
'Class:ActionEmail/Attribute:cc+' => 'Com cópia',
|
||||
'Class:ActionEmail/Attribute:bcc' => 'bcc',
|
||||
'Class:ActionEmail/Attribute:bcc+' => 'Com cópia oculta',
|
||||
'Class:ActionEmail/Attribute:subject' => 'assunto',
|
||||
'Class:ActionEmail/Attribute:subject+' => 'Título do email',
|
||||
'Class:ActionEmail/Attribute:body' => 'corpo',
|
||||
'Class:ActionEmail/Attribute:body+' => 'Conteúdo do email',
|
||||
'Class:ActionEmail/Attribute:importance' => 'importância',
|
||||
'Class:ActionEmail/Attribute:importance+' => 'Flag importância',
|
||||
'Class:ActionEmail/Attribute:importance/Value:high' => 'alto',
|
||||
'Class:ActionEmail/Attribute:importance/Value:high+' => 'alto',
|
||||
'Class:ActionEmail/Attribute:importance/Value:low' => 'baixo',
|
||||
'Class:ActionEmail/Attribute:importance/Value:low+' => 'baixo',
|
||||
'Class:ActionEmail/Attribute:importance/Value:normal' => 'normal',
|
||||
'Class:ActionEmail/Attribute:importance/Value:normal+' => 'normal',
|
||||
'Class:TriggerOnStateEnter' => 'Trigger (ao entrar em um estado)',
|
||||
'Class:TriggerOnStateEnter+' => 'Trigger sobre a mudança de estado do objeto - entrar',
|
||||
'Class:TriggerOnStateLeave' => 'Trigger (na saída de um estado)',
|
||||
'Class:TriggerOnStateLeave+' => 'Trigger sobre a mudança de estado do objeto - deixando',
|
||||
'Class:TriggerOnObjectCreate' => 'Trigger (sobre a criação do objeto)',
|
||||
'Class:TriggerOnObjectCreate+' => 'Trigger sobre a criação do objeto de [uma classe filha de] uma determinada classe',
|
||||
'Class:lnkTriggerAction' => 'Ação/Trigger',
|
||||
'Class:lnkTriggerAction+' => 'Ligação entre uma trigger e uma ação',
|
||||
'Class:lnkTriggerAction/Attribute:action_id' => 'Ação',
|
||||
'Class:lnkTriggerAction/Attribute:action_id+' => 'Ação a ser executada',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_id' => 'Trigger',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_id+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:order' => 'Ordem',
|
||||
'Class:lnkTriggerAction/Attribute:order+' => 'AAções executadas ordem',
|
||||
'Class:AsyncSendEmail' => 'Email (assíncrono)',
|
||||
'Class:AsyncSendEmail/Attribute:to' => 'Para',
|
||||
'Class:AsyncSendEmail/Attribute:subject' => 'Assunto',
|
||||
'Class:AsyncSendEmail/Attribute:body' => 'Corpo',
|
||||
'Class:AsyncSendEmail/Attribute:header' => 'Cabeçalho',
|
||||
'Class:CMDBChange' => 'Mudanças',
|
||||
'Class:CMDBChange+' => 'Monitoramento Mudanças',
|
||||
'Class:CMDBChange/Attribute:date' => 'data',
|
||||
'Class:CMDBChange/Attribute:date+' => 'data e hora que as mudanças tenham sido registradas.',
|
||||
'Class:CMDBChange/Attribute:userinfo' => 'misc. info',
|
||||
'Class:CMDBChange/Attribute:userinfo+' => 'Solicitante definido informação',
|
||||
'Class:CMDBChangeOp' => 'Operação Mudança',
|
||||
'Class:CMDBChangeOp+' => 'Controle Operação Mudança',
|
||||
'Class:CMDBChangeOp/Attribute:change' => 'mudanças',
|
||||
'Class:CMDBChangeOp/Attribute:change+' => 'mudanças',
|
||||
'Class:CMDBChangeOp/Attribute:objclass' => 'classe objeto',
|
||||
'Class:CMDBChangeOp/Attribute:objclass+' => 'classe objeto',
|
||||
'Class:CMDBChangeOp/Attribute:objkey' => 'id objeto',
|
||||
'Class:CMDBChangeOp/Attribute:objkey+' => 'objeto',
|
||||
'Class:CMDBChangeOp/Attribute:finalclass' => 'tipo',
|
||||
'Class:CMDBChangeOp/Attribute:finalclass+' => '',
|
||||
'Class:CMDBChangeOpCreate' => 'objeto criado',
|
||||
'Class:CMDBChangeOpCreate+' => 'Controle criação objeto',
|
||||
'Class:CMDBChangeOpDelete' => 'objeto apagado',
|
||||
'Class:CMDBChangeOpDelete+' => 'Controle objeto eliminado',
|
||||
'Class:CMDBChangeOpSetAttribute' => 'objeto alterado',
|
||||
'Class:CMDBChangeOpSetAttribute+' => 'Controle do objeto alterado',
|
||||
'Class:CMDBChangeOpSetAttribute/Attribute:attcode' => 'Atributo',
|
||||
'Class:CMDBChangeOpSetAttribute/Attribute:attcode+' => 'código da modificação',
|
||||
'Class:CMDBChangeOpSetAttributeScalar' => 'mudança propriedade',
|
||||
'Class:CMDBChangeOpSetAttributeScalar+' => 'controle da mudança propriedade do objeto',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue' => 'Valor anterior',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue+' => 'valores anteriores do atributo',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue' => 'Novo valor',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue+' => 'novo valor do atributo',
|
||||
'Class:CMDBChangeOpSetAttributeBlob' => 'mudança dado',
|
||||
'Class:CMDBChangeOpSetAttributeBlob+' => 'controle mudança dado',
|
||||
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata' => 'Dado anterior',
|
||||
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata+' => 'conteúdo anterior do atributo',
|
||||
'Class:CMDBChangeOpSetAttributeOneWayPassword' => 'Senha criptografada',
|
||||
'Class:CMDBChangeOpSetAttributeOneWayPassword/Attribute:prev_pwd' => 'Valores anteriores',
|
||||
'Class:CMDBChangeOpSetAttributeEncrypted' => 'Campo criptografado',
|
||||
'Class:CMDBChangeOpSetAttributeEncrypted/Attribute:prevstring' => 'Valores anteriores',
|
||||
'Class:CMDBChangeOpSetAttributeText' => 'mudança texto',
|
||||
'Class:CMDBChangeOpSetAttributeText+' => 'controle mudança texto',
|
||||
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata' => 'Dado anterior',
|
||||
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata+' => 'conteúdo anterior do atributo',
|
||||
'Class:CMDBChangeOpSetAttributeCaseLog' => 'Caso Log',
|
||||
'Class:CMDBChangeOpSetAttributeCaseLog/Attribute:lastentry' => 'Última entrada',
|
||||
'Class:Event' => 'Log Eventos',
|
||||
'Class:Event+' => 'Um pedido de evento interno',
|
||||
'Class:Event/Attribute:message' => 'mensagem',
|
||||
'Class:Event/Attribute:message+' => 'descrição curta do evento',
|
||||
'Class:Event/Attribute:date' => 'data',
|
||||
'Class:Event/Attribute:date+' => 'data e hora em que as mudanças tenham sido registadas',
|
||||
'Class:Event/Attribute:userinfo' => 'info usuário',
|
||||
'Class:Event/Attribute:userinfo+' => 'identificação do usuário queestava fazendo a ação e desencadeou este evento',
|
||||
'Class:Event/Attribute:finalclass' => 'tipo',
|
||||
'Class:Event/Attribute:finalclass+' => '',
|
||||
'Class:EventNotification' => 'Notificação evento',
|
||||
'Class:EventNotification+' => 'Trace of a notification that has been sent',
|
||||
'Class:EventNotification/Attribute:trigger_id' => 'Trigger',
|
||||
'Class:EventNotification/Attribute:trigger_id+' => 'conta usuário',
|
||||
'Class:EventNotification/Attribute:action_id' => 'usuário',
|
||||
'Class:EventNotification/Attribute:action_id+' => 'conta usuário',
|
||||
'Class:EventNotification/Attribute:object_id' => 'Objeto id',
|
||||
'Class:EventNotification/Attribute:object_id+' => 'objeto id (classe definida pela trigger ?)',
|
||||
'Class:EventNotificationEmail' => 'Enviando evento Email',
|
||||
'Class:EventNotificationEmail+' => 'Controle de um email que foi enviado',
|
||||
'Class:EventNotificationEmail/Attribute:to' => 'Para',
|
||||
'Class:EventNotificationEmail/Attribute:to+' => 'Para',
|
||||
'Class:EventNotificationEmail/Attribute:cc' => 'CC',
|
||||
'Class:EventNotificationEmail/Attribute:cc+' => 'CC',
|
||||
'Class:EventNotificationEmail/Attribute:bcc' => 'BCC',
|
||||
'Class:EventNotificationEmail/Attribute:bcc+' => 'BCC',
|
||||
'Class:EventNotificationEmail/Attribute:from' => 'De',
|
||||
'Class:EventNotificationEmail/Attribute:from+' => 'Rementente da mensagem',
|
||||
'Class:EventNotificationEmail/Attribute:subject' => 'Assunto',
|
||||
'Class:EventNotificationEmail/Attribute:subject+' => 'Assunto',
|
||||
'Class:EventNotificationEmail/Attribute:body' => 'Corpo',
|
||||
'Class:EventNotificationEmail/Attribute:body+' => 'Corpo',
|
||||
'Class:EventIssue' => 'Emissão de evento',
|
||||
'Class:EventIssue+' => 'Controle da emissão (atenção, erros, etc.)',
|
||||
'Class:EventIssue/Attribute:issue' => 'Emissão',
|
||||
'Class:EventIssue/Attribute:issue+' => 'O que aconteceu?',
|
||||
'Class:EventIssue/Attribute:impact' => 'Impacto',
|
||||
'Class:EventIssue/Attribute:impact+' => 'Quais são as consequências?',
|
||||
'Class:EventIssue/Attribute:page' => 'Página',
|
||||
'Class:EventIssue/Attribute:page+' => 'HTTP ponto de entrada',
|
||||
'Class:EventIssue/Attribute:arguments_post' => 'Postados argumentos',
|
||||
'Class:EventIssue/Attribute:arguments_post+' => 'HTTP POST argumentos',
|
||||
'Class:EventIssue/Attribute:arguments_get' => 'URL argumentos',
|
||||
'Class:EventIssue/Attribute:arguments_get+' => 'HTTP GET argumentos',
|
||||
'Class:EventIssue/Attribute:callstack' => 'PilhaChamada',
|
||||
'Class:EventIssue/Attribute:callstack+' => 'Pilha de chamada',
|
||||
'Class:EventIssue/Attribute:data' => 'Dado',
|
||||
'Class:EventIssue/Attribute:data+' => 'Mais informações',
|
||||
'Class:EventWebService' => 'Evento Web service',
|
||||
'Class:EventWebService+' => 'Controle chamado do web service',
|
||||
'Class:EventWebService/Attribute:verb' => 'Verbo',
|
||||
'Class:EventWebService/Attribute:verb+' => 'Nome da operação',
|
||||
'Class:EventWebService/Attribute:result' => 'Resultado',
|
||||
'Class:EventWebService/Attribute:result+' => 'Visão geral successos/falhas',
|
||||
'Class:EventWebService/Attribute:log_info' => 'Info log',
|
||||
'Class:EventWebService/Attribute:log_info+' => 'Resultado info log',
|
||||
'Class:EventWebService/Attribute:log_warning' => 'Log atenção',
|
||||
'Class:EventWebService/Attribute:log_warning+' => 'Resultado Log atenção',
|
||||
'Class:EventWebService/Attribute:log_error' => 'Log erro',
|
||||
'Class:EventWebService/Attribute:log_error+' => 'Resultado log erro',
|
||||
'Class:EventWebService/Attribute:data' => 'Dado',
|
||||
'Class:EventWebService/Attribute:data+' => 'Resultado dado',
|
||||
'Class:EventLoginUsage' => 'Uso Login',
|
||||
'Class:EventLoginUsage+' => '',
|
||||
'Class:EventLoginUsage/Attribute:user_id' => 'Entrar',
|
||||
'Class:EventLoginUsage/Attribute:user_id+' => '',
|
||||
'Class:SynchroDataSource' => 'Fontes de dados de sincronização',
|
||||
'Class:SynchroDataSource/Attribute:name' => 'Nome',
|
||||
'Class:SynchroDataSource/Attribute:name+' => '',
|
||||
'Class:SynchroDataSource/Attribute:description' => 'Descrição',
|
||||
'Class:SynchroDataSource/Attribute:status' => 'Status',
|
||||
'Class:SynchroDataSource/Attribute:status/Value:implementation' => 'Implementação',
|
||||
'Class:SynchroDataSource/Attribute:status/Value:obsolete' => 'Obsoleto',
|
||||
'Class:SynchroDataSource/Attribute:status/Value:production' => 'Produção',
|
||||
'Class:SynchroDataSource/Attribute:user_id' => 'Usuário',
|
||||
'Class:SynchroDataSource/Attribute:notify_contact_id' => 'Contato para notificação',
|
||||
'Class:SynchroDataSource/Attribute:notify_contact_id+' => '',
|
||||
'Class:SynchroDataSource/Attribute:scope_class' => 'Classe alvo',
|
||||
'Class:SynchroDataSource/Attribute:scope_restriction' => 'Restrição de escopo',
|
||||
'Class:SynchroDataSource/Attribute:full_load_periodicity' => 'Intervalo de carga total',
|
||||
'Class:SynchroDataSource/Attribute:full_load_periodicity+' => '',
|
||||
'Class:SynchroDataSource/Attribute:reconciliation_policy' => 'Política de conciliação',
|
||||
'Class:SynchroDataSource/Attribute:reconciliation_policy/Value:use_attributes' => 'Use os atributos',
|
||||
'Class:SynchroDataSource/Attribute:reconciliation_policy/Value:use_primary_key' => 'Use o campo primary_key',
|
||||
'Class:SynchroDataSource/Attribute:action_on_zero' => 'Ação sobre o zero',
|
||||
'Class:SynchroDataSource/Attribute:action_on_zero+' => '',
|
||||
'Class:SynchroDataSource/Attribute:action_on_zero/Value:create' => 'Criar',
|
||||
'Class:SynchroDataSource/Attribute:action_on_zero/Value:error' => 'Erro',
|
||||
'Class:SynchroDataSource/Attribute:action_on_one' => 'Ação sobre o um',
|
||||
'Class:SynchroDataSource/Attribute:action_on_one+' => '',
|
||||
'Class:SynchroDataSource/Attribute:action_on_one/Value:error' => 'Erro',
|
||||
'Class:SynchroDataSource/Attribute:action_on_one/Value:update' => 'Atualizar',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple' => 'Ação em muitos',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple+' => '',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple/Value:create' => 'Criar',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple/Value:error' => 'Erro',
|
||||
'Class:SynchroDataSource/Attribute:action_on_multiple/Value:take_first' => 'Pegue o primeiro (acaso?)',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy' => 'Apagar política',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:delete' => 'Apagar',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:ignore' => 'Ignorar',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:update' => 'Atualizar',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:update_then_delete' => 'Atualizar, em seguida, Apagar',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy_update' => 'Atualizar regra',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy_update+' => '',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy_retention' => 'Retenção Duração',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy_retention+' => '',
|
||||
'Class:SynchroDataSource/Attribute:attribute_list' => 'Lista atributos',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy' => 'Usuários permitidos',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy+' => '',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:administrators' => 'Somente administradores',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:everybody' => 'Toda permissão para excluir esses objetos',
|
||||
'Class:SynchroDataSource/Attribute:user_delete_policy/Value:nobody' => 'Ninguém',
|
||||
'Class:SynchroDataSource/Attribute:url_icon' => 'Icone\'s hyperlink',
|
||||
'Class:SynchroDataSource/Attribute:url_icon+' => '',
|
||||
'Class:SynchroDataSource/Attribute:url_application' => 'Aplicação hyperlink',
|
||||
'Class:SynchroDataSource/Attribute:url_application+' => '',
|
||||
'Class:SynchroAttribute' => 'Synchro atributo',
|
||||
'Class:SynchroAttribute/Attribute:sync_source_id' => 'Sycnhro origem dado',
|
||||
'Class:SynchroAttribute/Attribute:attcode' => 'Código atributo',
|
||||
'Class:SynchroAttribute/Attribute:update' => 'Atualizar',
|
||||
'Class:SynchroAttribute/Attribute:reconcile' => 'Reconciliar',
|
||||
'Class:SynchroAttribute/Attribute:update_policy' => 'Atualizar política',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:master_locked' => 'Bloqueado',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:master_unlocked' => 'Desbloqueado',
|
||||
'Class:SynchroAttribute/Attribute:update_policy/Value:write_if_empty' => 'Inicializar se vazio',
|
||||
'Class:SynchroAttribute/Attribute:finalclass' => 'Classe',
|
||||
'Class:SynchroAttExtKey' => 'Atributo sincronia (ExtKey)',
|
||||
'Class:SynchroAttExtKey/Attribute:reconciliation_attcode' => 'Reconciliar atributos',
|
||||
'Class:SynchroAttLinkSet' => 'Atributo sincronia (Linkset)',
|
||||
'Class:SynchroAttLinkSet/Attribute:row_separator' => 'Separador linhas',
|
||||
'Class:SynchroAttLinkSet/Attribute:attribute_separator' => 'Separador atributos',
|
||||
'Class:SynchroLog' => 'Sincronia Log',
|
||||
'Class:SynchroLog/Attribute:sync_source_id' => 'Sincronização fonte dados',
|
||||
'Class:SynchroLog/Attribute:start_date' => 'Data início',
|
||||
'Class:SynchroLog/Attribute:end_date' => 'Data final',
|
||||
'Class:SynchroLog/Attribute:status' => 'Status',
|
||||
'Class:SynchroLog/Attribute:status/Value:completed' => 'Completado',
|
||||
'Class:SynchroLog/Attribute:status/Value:error' => 'Erro',
|
||||
'Class:SynchroLog/Attribute:status/Value:running' => 'Em execução',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_seen' => 'Nro réplica visita',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_total' => 'Nro réplica total',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_deleted' => 'Nro objetos apagados',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_deleted_errors' => 'Nro de erros enquanto apagando',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_obsoleted' => 'Nro objetos obsoletos',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_obsoleted_errors' => 'Nro de erros enquanto obsoletos',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_created' => 'Nro objetos criados',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_created_errors' => 'Nro de erros enquanto criando',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_updated' => 'Nro objetos atualizados',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_updated_errors' => 'Nro erros enquanto atualizando',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_reconciled_errors' => 'Nro de erros durante reconciliação',
|
||||
'Class:SynchroLog/Attribute:stats_nb_replica_disappeared_no_action' => 'Nro réplica desaparecido',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_new_updated' => 'Nro objetos atualizados',
|
||||
'Class:SynchroLog/Attribute:stats_nb_obj_new_unchanged' => 'Nro objetos não alterados',
|
||||
'Class:SynchroLog/Attribute:last_error' => 'Último erro',
|
||||
'Class:SynchroLog/Attribute:traces' => 'Traços',
|
||||
'Class:SynchroReplica' => 'Synchro Réplica',
|
||||
'Class:SynchroReplica/Attribute:sync_source_id' => 'Synchro origem dado',
|
||||
'Class:SynchroReplica/Attribute:dest_id' => 'Destino objeto (ID)',
|
||||
'Class:SynchroReplica/Attribute:dest_class' => 'Tipo Destino',
|
||||
'Class:SynchroReplica/Attribute:status_last_seen' => 'Última visita',
|
||||
'Class:SynchroReplica/Attribute:status' => 'Status',
|
||||
'Class:SynchroReplica/Attribute:status/Value:modified' => 'Modificação',
|
||||
'Class:SynchroReplica/Attribute:status/Value:new' => 'Novo',
|
||||
'Class:SynchroReplica/Attribute:status/Value:obsolete' => 'Obsoleto',
|
||||
'Class:SynchroReplica/Attribute:status/Value:orphan' => 'Orfão',
|
||||
'Class:SynchroReplica/Attribute:status/Value:synchronized' => 'Sincronizado',
|
||||
'Class:SynchroReplica/Attribute:status_dest_creator' => 'Objeto criado?',
|
||||
'Class:SynchroReplica/Attribute:status_last_error' => 'Último erro',
|
||||
'Class:SynchroReplica/Attribute:info_creation_date' => 'Data criação',
|
||||
'Class:SynchroReplica/Attribute:info_last_modified' => 'Última data modificação',
|
||||
'Class:appUserPreferences' => 'Preferências usuário',
|
||||
'Class:appUserPreferences/Attribute:userid' => 'Usuários',
|
||||
'Class:appUserPreferences/Attribute:preferences' => 'Prefs',
|
||||
'Core:AttributeLinkedSet' => 'Ordem de objetos',
|
||||
'Core:AttributeLinkedSet+' => 'Qualquer tipo objeto [sub-classe] da mesma classe',
|
||||
'Core:AttributeLinkedSetIndirect' => 'Ordem de objetos (N-N)',
|
||||
'Core:AttributeLinkedSetIndirect+' => 'Qualquer tipo objeto [sub-classe] da mesma classe',
|
||||
'Core:AttributeInteger' => 'Inteiro',
|
||||
'Core:AttributeInteger+' => 'Valor número (não pode ser negativo)',
|
||||
'Core:AttributeDecimal' => 'Decimal',
|
||||
'Core:AttributeDecimal+' => 'Valor decimal (não pode ser negativo)',
|
||||
'Core:AttributeBoolean' => 'Boolean',
|
||||
'Core:AttributeBoolean+' => 'Boolean',
|
||||
'Core:AttributeString' => 'String',
|
||||
'Core:AttributeString+' => 'String alfa-numéricos',
|
||||
'Core:AttributeClass' => 'Classe',
|
||||
'Core:AttributeClass+' => 'Classe',
|
||||
'Core:AttributeApplicationLanguage' => 'Linguagem Usuário',
|
||||
'Core:AttributeApplicationLanguage+' => 'Linguagem e País (pt BR)',
|
||||
'Core:AttributeFinalClass' => 'Classe (auto)',
|
||||
'Core:AttributeFinalClass+' => 'Classe real do objeto (automaticamente criado pelo núcleo)',
|
||||
'Core:AttributePassword' => 'Senha',
|
||||
'Core:AttributePassword+' => 'Senha de um dispositivo externo',
|
||||
'Core:AttributeEncryptedString' => 'Senha criptografado',
|
||||
'Core:AttributeEncryptedString+' => 'String criptografada com uma chave local',
|
||||
'Core:AttributeText' => 'Texto',
|
||||
'Core:AttributeText+' => 'Cadeia de caracteres multi-linhas',
|
||||
'Core:AttributeHTML' => 'HTML',
|
||||
'Core:AttributeHTML+' => 'HTML string',
|
||||
'Core:AttributeEmailAddress' => 'Endereço Email',
|
||||
'Core:AttributeEmailAddress+' => 'Endereço Email',
|
||||
'Core:AttributeIPAddress' => 'Endereço IP',
|
||||
'Core:AttributeIPAddress+' => 'Endereço IP',
|
||||
'Core:AttributeOQL' => 'OQL',
|
||||
'Core:AttributeOQL+' => 'Expressão linguagem consulta objetos',
|
||||
'Core:AttributeEnum' => 'Enum',
|
||||
'Core:AttributeEnum+' => 'Lista de pré-seqüências alfanuméricas',
|
||||
'Core:AttributeTemplateString' => 'Modelo string',
|
||||
'Core:AttributeTemplateString+' => 'String contendo espaços reservados',
|
||||
'Core:AttributeTemplateText' => 'Modelo texto',
|
||||
'Core:AttributeTemplateText+' => 'Texto contendo espaços reservados',
|
||||
'Core:AttributeTemplateHTML' => 'Modelo HTML',
|
||||
'Core:AttributeTemplateHTML+' => 'HTML contendo espaços reservados',
|
||||
'Core:AttributeDateTime' => 'Data/hora',
|
||||
'Core:AttributeDateTime+' => 'Data e hora (ano-mês-dia hh:mm:ss)',
|
||||
'Core:AttributeDate' => 'Data',
|
||||
'Core:AttributeDate+' => 'Data (ano-mês-dia)',
|
||||
'Core:AttributeDeadline' => 'Prazo',
|
||||
'Core:AttributeDeadline+' => 'Data, apresentada em relação ao tempo real',
|
||||
'Core:AttributeExternalKey' => 'Chave externa',
|
||||
'Core:AttributeExternalKey+' => 'Chave externa (ou estrangeira)',
|
||||
'Core:AttributeExternalField' => 'Campo externo',
|
||||
'Core:AttributeExternalField+' => 'Campo mapeado por uma chave externa',
|
||||
'Core:AttributeURL' => 'URL',
|
||||
'Core:AttributeURL+' => 'URL absoluta ou relativa, como uma seqüência de texto',
|
||||
'Core:AttributeBlob' => 'Blob',
|
||||
'Core:AttributeBlob+' => 'Qualquer conteúdo binário (documento)',
|
||||
'Core:AttributeOneWayPassword' => 'Uma forma senha',
|
||||
'Core:AttributeOneWayPassword+' => 'One way encrypted (hashed) password',
|
||||
'Core:AttributeTable' => 'Tabela',
|
||||
'Core:AttributeTable+' => 'Matriz cadastrada ter duas dimensões',
|
||||
'Core:AttributePropertySet' => 'Propriedades',
|
||||
'Core:AttributePropertySet+' => 'Lista de propriedades não tipado (nome e valor)',
|
||||
'Class:CMDBChangeOp/Attribute:date' => 'data',
|
||||
'Class:CMDBChangeOp/Attribute:date+' => 'data e hora das mudanças',
|
||||
'Class:CMDBChangeOp/Attribute:userinfo' => 'usuário',
|
||||
'Class:CMDBChangeOp/Attribute:userinfo+' => 'quem fez esta mudanças',
|
||||
'Change:ObjectCreated' => 'Objeto criado',
|
||||
'Change:ObjectDeleted' => 'Objeto apagado',
|
||||
'Change:ObjectModified' => 'Objeto modificado',
|
||||
'Change:AttName_SetTo_NewValue_PreviousValue_OldValue' => '%1$s configurado para %2$s (valor anterior: %3$s)',
|
||||
'Change:AttName_SetTo' => '%1$s configurado para %2$s',
|
||||
'Change:Text_AppendedTo_AttName' => '%1$s anexado ao %2$s',
|
||||
'Change:AttName_Changed_PreviousValue_OldValue' => '%1$s modificado, valor anterior: %2$s',
|
||||
'Change:AttName_Changed' => '%1$s modificado',
|
||||
'Change:AttName_EntryAdded' => '%1$s modificado, nova entrada adicionada.',
|
||||
'Class:EventLoginUsage/Attribute:contact_name' => 'Nome usuário',
|
||||
'Class:EventLoginUsage/Attribute:contact_name+' => '',
|
||||
'Class:EventLoginUsage/Attribute:contact_email' => 'Email usuários',
|
||||
'Class:EventLoginUsage/Attribute:contact_email+' => '',
|
||||
'Class:Action' => 'Personalizar Ação',
|
||||
'Class:Action+' => 'Ação definida usuário',
|
||||
'Class:Action/Attribute:name' => 'Nome',
|
||||
'Class:Action/Attribute:name+' => '',
|
||||
'Class:Action/Attribute:description' => 'Descrição',
|
||||
'Class:Action/Attribute:description+' => '',
|
||||
'Class:Action/Attribute:status' => 'Status',
|
||||
'Class:Action/Attribute:status+' => 'Em produção ou ?',
|
||||
'Class:Action/Attribute:status/Value:test' => 'Que está sendo testado',
|
||||
'Class:Action/Attribute:status/Value:test+' => 'Que está sendo testado',
|
||||
'Class:Action/Attribute:status/Value:enabled' => 'Em produção',
|
||||
'Class:Action/Attribute:status/Value:enabled+' => 'Em produção',
|
||||
'Class:Action/Attribute:status/Value:disabled' => 'Inativo',
|
||||
'Class:Action/Attribute:status/Value:disabled+' => 'Inativo',
|
||||
'Class:Action/Attribute:trigger_list' => 'Triggers relacionados',
|
||||
'Class:Action/Attribute:trigger_list+' => 'Triggers ligado a esta ação',
|
||||
'Class:Action/Attribute:finalclass' => 'Tipo',
|
||||
'Class:Action/Attribute:finalclass+' => '',
|
||||
'Class:ActionNotification' => 'Notificação',
|
||||
'Class:ActionNotification+' => 'Notificação (abstrato)',
|
||||
'Class:Trigger' => 'Trigger',
|
||||
'Class:Trigger+' => 'Personalizar manipulador de eventos',
|
||||
'Class:Trigger/Attribute:description' => 'Descrição',
|
||||
'Class:Trigger/Attribute:description+' => 'uma linha descrição',
|
||||
'Class:Trigger/Attribute:action_list' => 'Ações desencadeadas',
|
||||
'Class:Trigger/Attribute:action_list+' => 'Ações executadas quando a Trigger é ativado',
|
||||
'Class:Trigger/Attribute:finalclass' => 'Tipo',
|
||||
'Class:Trigger/Attribute:finalclass+' => '',
|
||||
'Class:TriggerOnObject' => 'Trigger (classe dependente)',
|
||||
'Class:TriggerOnObject+' => 'Trigger em uma determinada classe de objetos',
|
||||
'Class:TriggerOnObject/Attribute:target_class' => 'Alvo classe',
|
||||
'Class:TriggerOnObject/Attribute:target_class+' => '',
|
||||
'Class:TriggerOnStateChange' => 'Trigger (em estato mudança)',
|
||||
'Class:TriggerOnStateChange+' => 'Trigger sobre a mudança de estado do objeto',
|
||||
'Class:TriggerOnStateChange/Attribute:state' => 'Estado',
|
||||
'Class:TriggerOnStateChange/Attribute:state+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:action_name' => 'Ação',
|
||||
'Class:lnkTriggerAction/Attribute:action_name+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_name' => 'Trigger',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_name+' => '',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:never' => 'Ninguém',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:depends' => 'Somente administradores',
|
||||
'Class:SynchroDataSource/Attribute:delete_policy/Value:always' => 'Todos usuários permitidos',
|
||||
'SynchroDataSource:Description' => 'Descrição',
|
||||
'SynchroDataSource:Reconciliation' => 'Pesquisar & reconciliação',
|
||||
'SynchroDataSource:Deletion' => 'Apagar regras',
|
||||
'SynchroDataSource:Status' => 'Status',
|
||||
'SynchroDataSource:Information' => 'Informação',
|
||||
'SynchroDataSource:Definition' => 'Definição',
|
||||
'Core:SynchroAttributes' => 'Atributos',
|
||||
'Core:SynchroStatus' => 'Status',
|
||||
'Core:Synchro:ErrorsLabel' => 'Erro',
|
||||
'Core:Synchro:CreatedLabel' => 'Criado',
|
||||
'Core:Synchro:ModifiedLabel' => 'Modificado',
|
||||
'Core:Synchro:UnchangedLabel' => 'Não alterado',
|
||||
'Core:Synchro:ReconciledErrorsLabel' => 'Erro',
|
||||
'Core:Synchro:ReconciledLabel' => 'Reconciliação',
|
||||
'Core:Synchro:ReconciledNewLabel' => 'Criado',
|
||||
'Core:SynchroReconcile:Yes' => 'Sim',
|
||||
'Core:SynchroReconcile:No' => 'Não',
|
||||
'Core:SynchroUpdate:Yes' => 'Sim',
|
||||
'Core:SynchroUpdate:No' => 'Não',
|
||||
'Core:Synchro:LastestStatus' => 'Último Status',
|
||||
'Core:Synchro:History' => 'Histórico de sincronização',
|
||||
'Core:Synchro:NeverRun' => 'Este sincronismo nunca foi executado. Sem registo ainda.',
|
||||
'Core:Synchro:SynchroEndedOn_Date' => 'A última sincronização terminou em% 1 $ s.',
|
||||
'Core:Synchro:SynchroRunningStartedOn_Date' => 'A sincronização começou em $1$s e em execução ainda...',
|
||||
'Menu:DataSources' => 'Fontes de dados de sincronização',
|
||||
'Menu:DataSources+' => '',
|
||||
'Core:Synchro:label_repl_ignored' => 'Ignorado (%1$s)',
|
||||
'Core:Synchro:label_repl_disappeared' => 'Desaparecido (%1$s)',
|
||||
'Core:Synchro:label_repl_existing' => 'Existente (%1$s)',
|
||||
'Core:Synchro:label_repl_new' => 'Novo (%1$s)',
|
||||
'Core:Synchro:label_obj_deleted' => 'Apagado (%1$s)',
|
||||
'Core:Synchro:label_obj_obsoleted' => 'Obsoleto (%1$s)',
|
||||
'Core:Synchro:label_obj_disappeared_errors' => 'Erros (%1$s)',
|
||||
'Core:Synchro:label_obj_disappeared_no_action' => 'Nenhuma ação (%1$s)',
|
||||
'Core:Synchro:label_obj_unchanged' => 'Não alterado (%1$s)',
|
||||
'Core:Synchro:label_obj_updated' => 'Atualizado (%1$s)',
|
||||
'Core:Synchro:label_obj_updated_errors' => 'Erros (%1$s)',
|
||||
'Core:Synchro:label_obj_new_unchanged' => 'Não alterado (%1$s)',
|
||||
'Core:Synchro:label_obj_new_updated' => 'Atualizado (%1$s)',
|
||||
'Core:Synchro:label_obj_created' => 'Criado (%1$s)',
|
||||
'Core:Synchro:label_obj_new_errors' => 'Erros (%1$s)',
|
||||
'Core:SynchroLogTitle' => '%1$s - %2$s',
|
||||
'Core:Synchro:Nb_Replica' => 'Réplica processadas: %1$s',
|
||||
'Core:Synchro:Nb_Class:Objects' => '%1$s: %2$s',
|
||||
'Class:SynchroDataSource/Error:AtLeastOneReconciliationKeyMustBeSpecified' => 'Na chave de reconciliação pelo menos um deve ser especificado, ou a política de reconciliação deve ser o de utilizar a chave primária.',
|
||||
'Class:SynchroDataSource/Error:DeleteRetentionDurationMustBeSpecified' => 'Um período de retenção a apagar deve ser especificado, desde que os objetos serão excluídos após ser marcado como obsoleto.',
|
||||
'Class:SynchroDataSource/Error:DeletePolicyUpdateMustBeSpecified' => 'Objetos obsoletos devem ser atualizados, mas nenhuma atualização é especificado.',
|
||||
'Core:SynchroReplica:PublicData' => 'Dados públicos',
|
||||
'Core:SynchroReplica:PrivateDetails' => 'Detalhes privativos',
|
||||
'Core:SynchroReplica:BackToDataSource' => 'Voltar para a fonte de dados sincronizada:: %1$s',
|
||||
'Core:SynchroReplica:ListOfReplicas' => 'Lista de réplica',
|
||||
'Core:SynchroAttExtKey:ReconciliationById' => 'id (Chave primária)',
|
||||
'Core:SynchroAtt:attcode' => 'Atributos',
|
||||
'Core:SynchroAtt:attcode+' => '',
|
||||
'Core:SynchroAtt:reconciliation' => 'Reconciliação?',
|
||||
'Core:SynchroAtt:reconciliation+' => '',
|
||||
'Core:SynchroAtt:update' => 'Atualizar?',
|
||||
'Core:SynchroAtt:update+' => '',
|
||||
'Core:SynchroAtt:update_policy' => 'Atualização Política',
|
||||
'Core:SynchroAtt:update_policy+' => '',
|
||||
'Core:SynchroAtt:reconciliation_attcode' => 'Chave reconciliação',
|
||||
'Core:SynchroAtt:reconciliation_attcode+' => '',
|
||||
'Core:SyncDataExchangeComment' => '(DataExchange)',
|
||||
'Core:Synchro:ListOfDataSources' => 'Lista de fontes de dados:',
|
||||
'Core:Synchro:LastSynchro' => 'Última sincronização:',
|
||||
'Core:Synchro:ThisObjectIsSynchronized' => 'Este objeto é sincronizado com uma fonte de dados externa',
|
||||
'Core:Synchro:TheObjectWasCreatedBy_Source' => 'O objeto foi <b>criado</b> por uma fonte dados externa %1$s',
|
||||
'Core:Synchro:TheObjectCanBeDeletedBy_Source' => 'O objeto <b>não pode ser apagado</b> por uma fonte dados externa %1$s',
|
||||
'Core:Synchro:TheObjectCannotBeDeletedByUser_Source' => 'Você <b>não pode apagar o objeto</b> porque é propriedade de uma fonte dados externa %1$s',
|
||||
'TitleSynchroExecution' => 'Execução da sincronização',
|
||||
'Class:SynchroDataSource:DataTable' => 'Tabela de banco de dados: %1$s',
|
||||
'Core:SyncDataSourceObsolete' => 'A fonte de dados está marcada como obsoleto. Operação cancelada.',
|
||||
'Core:SyncDataSourceAccessRestriction' => 'Somente administradores ou o usuário especificado na fonte de dados pode executar essa operação. Operação cancelada.',
|
||||
'Core:SyncTooManyMissingReplicas' => 'Todos os registros foram tocados por algum tempo (todos os objetos podem ser apagados). Verifique se o processo que grava na tabela de sincronização ainda está em execução. Operação cancelada.',
|
||||
'Core:Duration_Seconds' => '%1$ds',
|
||||
'Core:Duration_Minutes_Seconds' => '%1$dmin %2$ds',
|
||||
'Core:Duration_Hours_Minutes_Seconds' => '%1$dh %2$dmin %3$ds',
|
||||
'Core:Duration_Days_Hours_Minutes_Seconds' => '%1$sd %2$dh %3$dmin %4$ds',
|
||||
));
|
||||
?>
|
||||
771
dictionaries/pt_br.dictionary.itop.ui.php
Normal file
771
dictionaries/pt_br.dictionary.itop.ui.php
Normal file
@@ -0,0 +1,771 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* @author Erwan Taloc <erwan.taloc@combodo.com>
|
||||
* @author Romain Quetiez <romain.quetiez@combodo.com>
|
||||
* @author Denis Flaven <denis.flaven@combodo.com>
|
||||
|
||||
* @licence http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
|
||||
'Class:AuditRule' => 'AuditRule',
|
||||
'Class:AuditRule+' => 'A regra para verificar se há uma categoria de Auditoria dado',
|
||||
'Class:AuditRule/Attribute:name' => 'Nome regra',
|
||||
'Class:AuditRule/Attribute:name+' => 'Nome curto para a regra',
|
||||
'Class:AuditRule/Attribute:description' => 'Descricao regra auditoria',
|
||||
'Class:AuditRule/Attribute:description+' => 'Descricao longa para este regra auditoria',
|
||||
'Class:AuditRule/Attribute:query' => 'Executar consulta',
|
||||
'Class:AuditRule/Attribute:query+' => 'A expressão OQL a executar',
|
||||
'Class:AuditRule/Attribute:valid_flag' => 'Objetos validos?',
|
||||
'Class:AuditRule/Attribute:valid_flag+' => 'True se a regra retorna os objetos válido, false caso contrário',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:false' => 'falso',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:false+' => 'falso',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:true' => 'verdadeiro',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:true+' => 'verdadeiro',
|
||||
'Class:AuditRule/Attribute:category_id' => 'Categoria',
|
||||
'Class:AuditRule/Attribute:category_id+' => 'A categoria para esta regra',
|
||||
'Class:AuditCategory' => 'AuditCategory',
|
||||
'Class:AuditCategory+' => 'Uma seção dentro da auditoria global',
|
||||
'Class:AuditCategory/Attribute:name' => 'Nome categoria',
|
||||
'Class:AuditCategory/Attribute:name+' => 'Nome curto da categoria',
|
||||
'Class:AuditCategory/Attribute:description' => 'Descricao categoria auditoria',
|
||||
'Class:AuditCategory/Attribute:description+' => 'Descricao longa para a categoria auditoria',
|
||||
'Class:AuditCategory/Attribute:definition_set' => 'Definicao configuracao',
|
||||
'Class:AuditCategory/Attribute:definition_set+' => 'Expressão OQL que define o conjunto de objetos de auditoria',
|
||||
'Class:AuditCategory/Attribute:rules_list' => 'Auditar Regras',
|
||||
'Class:AuditCategory/Attribute:rules_list+' => '',
|
||||
'Class:URP_Profiles' => 'Profile',
|
||||
'Class:URP_Profiles+' => 'Profile usuario',
|
||||
'Class:URP_Profiles/Attribute:name' => 'Nome',
|
||||
'Class:URP_Profiles/Attribute:name+' => 'Titulo',
|
||||
'Class:URP_Profiles/Attribute:description' => 'Descricao',
|
||||
'Class:URP_Profiles/Attribute:description+' => 'uma linha descricao',
|
||||
'Class:URP_Profiles/Attribute:user_list' => 'Usuarios',
|
||||
'Class:URP_Profiles/Attribute:user_list+' => 'pessoas possuem esta regra',
|
||||
'Class:URP_UserProfile' => 'Usuario para profile',
|
||||
'Class:URP_UserProfile+' => 'profiles usuario',
|
||||
'Class:URP_UserProfile/Attribute:userid' => 'Usuario',
|
||||
'Class:URP_UserProfile/Attribute:userid+' => 'conta usuario',
|
||||
'Class:URP_UserProfile/Attribute:profileid' => 'Profile',
|
||||
'Class:URP_UserProfile/Attribute:profileid+' => 'profile utilizada',
|
||||
'Class:URP_UserProfile/Attribute:reason' => 'Razao',
|
||||
'Class:URP_UserProfile/Attribute:reason+' => 'explicar porque este usuario teve ter esta regra',
|
||||
'Class:URP_UserOrg' => 'Organização usuário',
|
||||
'Class:URP_UserOrg+' => '',
|
||||
'Class:URP_UserOrg/Attribute:userid' => 'Usuário',
|
||||
'Class:URP_UserOrg/Attribute:userid+' => '',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_id' => 'Organização',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_id+' => '',
|
||||
'Class:URP_UserOrg/Attribute:reason' => 'Razão',
|
||||
'Class:URP_UserOrg/Attribute:reason+' => '',
|
||||
'Class:URP_ActionGrant' => 'action_permission',
|
||||
'Class:URP_ActionGrant+' => 'permissões nas classes',
|
||||
'Class:URP_ActionGrant/Attribute:profileid' => 'Profile',
|
||||
'Class:URP_ActionGrant/Attribute:profileid+' => 'profiles usadas',
|
||||
'Class:URP_ActionGrant/Attribute:class' => 'Class',
|
||||
'Class:URP_ActionGrant/Attribute:class+' => 'Target class',
|
||||
'Class:URP_ActionGrant/Attribute:permission' => 'Permission',
|
||||
'Class:URP_ActionGrant/Attribute:permission+' => 'allowed or not allowed?',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:no' => 'no',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:no+' => 'no',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:yes' => 'yes',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:yes+' => 'yes',
|
||||
'Class:URP_ActionGrant/Attribute:action' => 'Action',
|
||||
'Class:URP_ActionGrant/Attribute:action+' => 'operations to perform on the given class',
|
||||
'Class:URP_StimulusGrant' => 'stimulus_permission',
|
||||
'Class:URP_StimulusGrant+' => 'permissions on stimilus in the life cycle of the object',
|
||||
'Class:URP_StimulusGrant/Attribute:profileid' => 'Profile',
|
||||
'Class:URP_StimulusGrant/Attribute:profileid+' => 'usage profile',
|
||||
'Class:URP_StimulusGrant/Attribute:class' => 'Class',
|
||||
'Class:URP_StimulusGrant/Attribute:class+' => 'Target class',
|
||||
'Class:URP_StimulusGrant/Attribute:permission' => 'Permission',
|
||||
'Class:URP_StimulusGrant/Attribute:permission+' => 'allowed or not allowed?',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:no' => 'no',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:no+' => 'no',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:yes' => 'yes',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:yes+' => 'yes',
|
||||
'Class:URP_StimulusGrant/Attribute:stimulus' => 'Stimulus',
|
||||
'Class:URP_StimulusGrant/Attribute:stimulus+' => 'stimulus code',
|
||||
'Class:URP_AttributeGrant' => 'attribute_permission',
|
||||
'Class:URP_AttributeGrant+' => 'permissions at the attributes level',
|
||||
'Class:URP_AttributeGrant/Attribute:actiongrantid' => 'Action grant',
|
||||
'Class:URP_AttributeGrant/Attribute:actiongrantid+' => 'action grant',
|
||||
'Class:URP_AttributeGrant/Attribute:attcode' => 'Attribute',
|
||||
'Class:URP_AttributeGrant/Attribute:attcode+' => 'attribute code',
|
||||
'Class:AuditRule/Attribute:category_name' => 'Categoria',
|
||||
'Class:AuditRule/Attribute:category_name+' => 'Nome da categoria para esta regra',
|
||||
'Class:User' => 'Usuário',
|
||||
'Class:User+' => '',
|
||||
'Class:User/Attribute:finalclass' => 'Tipo de conta',
|
||||
'Class:User/Attribute:finalclass+' => '',
|
||||
'Class:User/Attribute:contactid' => 'Contato (pessoa)',
|
||||
'Class:User/Attribute:contactid+' => '',
|
||||
'Class:User/Attribute:last_name' => 'Último nome',
|
||||
'Class:User/Attribute:last_name+' => '',
|
||||
'Class:User/Attribute:first_name' => 'Primeiro nome',
|
||||
'Class:User/Attribute:first_name+' => '',
|
||||
'Class:User/Attribute:email' => 'Email',
|
||||
'Class:User/Attribute:email+' => '',
|
||||
'Class:User/Attribute:login' => 'Entrar',
|
||||
'Class:User/Attribute:login+' => '',
|
||||
'Class:User/Attribute:language' => 'Linguagem',
|
||||
'Class:User/Attribute:language+' => '',
|
||||
'Class:User/Attribute:language/Value:EN US' => 'Inglês',
|
||||
'Class:User/Attribute:language/Value:EN US+' => '',
|
||||
'Class:User/Attribute:language/Value:FR FR' => 'Francês',
|
||||
'Class:User/Attribute:language/Value:FR FR+' => '',
|
||||
'Class:User/Attribute:profile_list' => 'Profiles',
|
||||
'Class:User/Attribute:profile_list+' => '',
|
||||
'Class:User/Attribute:allowed_org_list' => 'Organizações permitidas',
|
||||
'Class:User/Attribute:allowed_org_list+' => '',
|
||||
'Class:User/Error:LoginMustBeUnique' => 'Login deve ser único - "%1s" já está sendo utilizado.',
|
||||
'Class:User/Error:AtLeastOneProfileIsNeeded' => 'Pelo menos um perfil deve ser atribuído a este usuário.',
|
||||
'Class:URP_Dimensions' => 'dimensão',
|
||||
'Class:URP_Dimensions+' => 'dimensão aplicação',
|
||||
'Class:URP_Dimensions/Attribute:name' => 'Nome',
|
||||
'Class:URP_Dimensions/Attribute:name+' => 'label',
|
||||
'Class:URP_Dimensions/Attribute:description' => 'Descrição',
|
||||
'Class:URP_Dimensions/Attribute:description+' => 'one line description',
|
||||
'Class:URP_Dimensions/Attribute:type' => 'Tipo',
|
||||
'Class:URP_Dimensions/Attribute:type+' => 'nome classe ou tipo dado (unidade projetada)',
|
||||
'Class:URP_UserProfile/Attribute:userlogin' => 'Login',
|
||||
'Class:URP_UserProfile/Attribute:userlogin+' => 'Login Usuario\'s',
|
||||
'Class:URP_UserProfile/Attribute:profile' => 'Profile',
|
||||
'Class:URP_UserProfile/Attribute:profile+' => 'Nome profile',
|
||||
'Class:URP_UserOrg/Attribute:userlogin' => 'Entrar',
|
||||
'Class:URP_UserOrg/Attribute:userlogin+' => '',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_name' => 'Organização',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_name+' => '',
|
||||
'Class:URP_ProfileProjection' => 'profile_projection',
|
||||
'Class:URP_ProfileProjection+' => 'profile projections',
|
||||
'Class:URP_ProfileProjection/Attribute:dimensionid' => 'Dimension',
|
||||
'Class:URP_ProfileProjection/Attribute:dimensionid+' => 'application dimension',
|
||||
'Class:URP_ProfileProjection/Attribute:dimension' => 'Dimension',
|
||||
'Class:URP_ProfileProjection/Attribute:dimension+' => 'application dimension',
|
||||
'Class:URP_ProfileProjection/Attribute:profileid' => 'Profile',
|
||||
'Class:URP_ProfileProjection/Attribute:profileid+' => 'usage profile',
|
||||
'Class:URP_ProfileProjection/Attribute:profile' => 'Profile',
|
||||
'Class:URP_ProfileProjection/Attribute:profile+' => 'Profile name',
|
||||
'Class:URP_ProfileProjection/Attribute:value' => 'Value expression',
|
||||
'Class:URP_ProfileProjection/Attribute:value+' => 'OQL expression (using $user) | constant | | +attribute code',
|
||||
'Class:URP_ProfileProjection/Attribute:attribute' => 'Attribute',
|
||||
'Class:URP_ProfileProjection/Attribute:attribute+' => 'Target attribute code (optional)',
|
||||
'Class:URP_ClassProjection' => 'class_projection',
|
||||
'Class:URP_ClassProjection+' => 'class projections',
|
||||
'Class:URP_ClassProjection/Attribute:dimensionid' => 'Dimension',
|
||||
'Class:URP_ClassProjection/Attribute:dimensionid+' => 'application dimension',
|
||||
'Class:URP_ClassProjection/Attribute:dimension' => 'Dimension',
|
||||
'Class:URP_ClassProjection/Attribute:dimension+' => 'application dimension',
|
||||
'Class:URP_ClassProjection/Attribute:class' => 'Class',
|
||||
'Class:URP_ClassProjection/Attribute:class+' => 'Target class',
|
||||
'Class:URP_ClassProjection/Attribute:value' => 'Value expression',
|
||||
'Class:URP_ClassProjection/Attribute:value+' => 'OQL expression (using $this) | constant | | +attribute code',
|
||||
'Class:URP_ClassProjection/Attribute:attribute' => 'Attribute',
|
||||
'Class:URP_ClassProjection/Attribute:attribute+' => 'Target attribute code (optional)',
|
||||
'Class:URP_ActionGrant/Attribute:profile' => 'Profile',
|
||||
'Class:URP_ActionGrant/Attribute:profile+' => 'usage profile',
|
||||
'Class:URP_StimulusGrant/Attribute:profile' => 'Profile',
|
||||
'Class:URP_StimulusGrant/Attribute:profile+' => 'usage profile',
|
||||
'Menu:WelcomeMenu' => 'Bem-vindo',
|
||||
'Menu:WelcomeMenu+' => 'Bem-vindo ao iTop',
|
||||
'Menu:WelcomeMenuPage' => 'Bem-vindo',
|
||||
'Menu:WelcomeMenuPage+' => 'Bem-vindo ao iTop',
|
||||
'UI:WelcomeMenu:Title' => 'Bem-vindo ao iTop',
|
||||
'UI:WelcomeMenu:LeftBlock' => '<p>iTop é um completo, livre, portal IT.</p>
|
||||
<ul>Inclui:
|
||||
<li>completo CMDB (Configuration management database) documentar e gerenciar inventários IT.</li>
|
||||
<li>módulo Gerenciador Incidente para monitorar e comunicar-se sobre todas as questões que ocorrem na TI.</li>
|
||||
<li>módulo Gerenciador Mudanças/Alterações para planejar e monitorar mudanças/alterações no ambiente TI.</li>
|
||||
<li>base de dados com erros conhecidos para agilizar a solução de incidentes.</li>
|
||||
<li>módulo falha para documentar todas as interrupções planejadas e notificar os contatos adequados.</li>
|
||||
<li>painéis para obter rapidamente uma visão geral de TI.</li>
|
||||
</ul>
|
||||
<p>Todos os módulos podem ser configurados, passo a passo, cada um, independente dos outros..</p>',
|
||||
'UI:WelcomeMenu:RightBlock' => '<p>iTop é um provedor de serviço, que permite gerenciar facilmente múltiplos clientes ou organizações.
|
||||
<ul>iTop, oferece um conjunto rico em recursos de processos de negócios que:
|
||||
<li>melhora a eficácia da gestão de TI</li>
|
||||
<li>melhora operações de TI</li>
|
||||
<li>melhora o desempenho da satisfação do cliente.</li>
|
||||
</ul>
|
||||
</p>
|
||||
<p>iTop é completamente aberto para ser integrado com infra-estrutura de IT atuais.</p>
|
||||
<p>
|
||||
<ul>Adopting this new generation of IT Operational portal will help you to:
|
||||
<li>Better manage a more and more complex IT environment.</li>
|
||||
<li>Implement ITIL processes at your own pace.</li>
|
||||
<li>Manage the most important asset of your IT: Documentation.</li>
|
||||
</ul>
|
||||
</p>',
|
||||
'UI:WelcomeMenu:AllOpenRequests' => 'Chamados Abertos: %1$d',
|
||||
'UI:WelcomeMenu:MyCalls' => 'Solicitações de usuários atribuído a mim',
|
||||
'UI:WelcomeMenu:OpenIncidents' => 'Incidentes Abertos: %1$d',
|
||||
'UI:WelcomeMenu:AllConfigItems' => 'Configuração Itens: %1$d',
|
||||
'UI:WelcomeMenu:MyIncidents' => 'Incidentes atribuídas a mim',
|
||||
'UI:AllOrganizations' => ' Todas Organizações ',
|
||||
'UI:YourSearch' => 'Pesquisar',
|
||||
'UI:LoggedAsMessage' => 'Conectado como %1$s',
|
||||
'UI:LoggedAsMessage+Admin' => 'Conectado como %1$s (Administrador)',
|
||||
'UI:Button:Logoff' => 'Sair',
|
||||
'UI:Button:GlobalSearch' => 'Pesquisar',
|
||||
'UI:Button:Search' => ' Pesquisar ',
|
||||
'UI:Button:Query' => ' Consultar ',
|
||||
'UI:Button:Ok' => 'Ok',
|
||||
'UI:Button:Cancel' => 'Cancelar',
|
||||
'UI:Button:Apply' => 'Aplicar',
|
||||
'UI:Button:Back' => ' << Voltar ',
|
||||
'UI:Button:Restart' => ' |<< Reiniciar ',
|
||||
'UI:Button:Next' => ' Proximo >> ',
|
||||
'UI:Button:Finish' => ' Finalizar ',
|
||||
'UI:Button:DoImport' => ' Executar para importar ! ',
|
||||
'UI:Button:Done' => ' Concluido ',
|
||||
'UI:Button:SimulateImport' => ' Simulate the Import ',
|
||||
'UI:Button:Test' => 'Testar!',
|
||||
'UI:Button:Evaluate' => ' Evaluate ',
|
||||
'UI:Button:AddObject' => ' Adicionar... ',
|
||||
'UI:Button:BrowseObjects' => ' Navegar... ',
|
||||
'UI:Button:Add' => ' Adicionar ',
|
||||
'UI:Button:AddToList' => ' << Adicionar ',
|
||||
'UI:Button:RemoveFromList' => ' Remover >> ',
|
||||
'UI:Button:FilterList' => ' Filtrar... ',
|
||||
'UI:Button:Create' => ' Criar ',
|
||||
'UI:Button:Delete' => ' Apagar ! ',
|
||||
'UI:Button:ChangePassword' => ' Alterar senha ',
|
||||
'UI:Button:ResetPassword' => ' Resetar senha ',
|
||||
'UI:SearchToggle' => 'Pesquisar',
|
||||
'UI:ClickToCreateNew' => 'Criar um(a) novo(a) %1$s',
|
||||
'UI:SearchFor_Class' => 'Pesquisa para %1$s objetos',
|
||||
'UI:NoObjectToDisplay' => 'Nenhum objeto encontrado.',
|
||||
'UI:Error:MandatoryTemplateParameter_object_id' => 'Parâmetro object_id é obrigatório quando link_attr é especificado. Verifique a definição do modelo.',
|
||||
'UI:Error:MandatoryTemplateParameter_target_attr' => 'Parâmetro target_attr é obrigatório quando link_attr é especificado. Verifique a definição do modelo.',
|
||||
'UI:Error:MandatoryTemplateParameter_group_by' => 'Parâmetro group_by é obrigatório. Verifique a definição do modelo.',
|
||||
'UI:Error:InvalidGroupByFields' => 'Inválido lista de campos para agrupar por: "%1$s".',
|
||||
'UI:Error:UnsupportedStyleOfBlock' => 'Erro: não suportado estilo de bloco: "%1$s".',
|
||||
'UI:Error:IncorrectLinkDefinition_LinkedClass_Class' => 'Incorreta definição link: a classe de objetos para gerenciar: %1$s não foi encontrado como uma chave externa na classe %2$s',
|
||||
'UI:Error:Object_Class_Id_NotFound' => 'Objeto: %1$s:%2$d não encontrado.',
|
||||
'UI:Error:WizardCircularReferenceInDependencies' => 'Erro: Referência circular nas dependências entre os campos, verifique o modelo de dados.',
|
||||
'UI:Error:UploadedFileTooBig' => 'O arquivo enviado é muito grande (Tamanho máximo permitido é %1$s. Verifique sua configuração do PHP para upload_max_filesize.',
|
||||
'UI:Error:UploadedFileTruncated.' => 'Envio de arquivo foi truncado!',
|
||||
'UI:Error:NoTmpDir' => 'O diretorio temporário não está definido.',
|
||||
'UI:Error:CannotWriteToTmp_Dir' => 'Desabilitado escrever o arquivo temporario no disco. upload_tmp_dir = "%1$s".',
|
||||
'UI:Error:UploadStoppedByExtension_FileName' => 'Upload parado por extensao. (Nome original arquivo = "%1$s").',
|
||||
'UI:Error:UploadFailedUnknownCause_Code' => 'Upload de arquivo falhou, causa desconhecida. (Erro codigo = "%1$s").',
|
||||
'UI:Error:1ParametersMissing' => 'Erro: o seguinte parametro deve ser especificado para esta operacao: %1$s.',
|
||||
'UI:Error:2ParametersMissing' => 'Erro: os seguinte parametros devem ser especificados para esta operacao: %1$s e %2$s.',
|
||||
'UI:Error:3ParametersMissing' => 'Erro: os seguinte parametros devem ser especificados para esta operacao: %1$s, %2$s e %3$s.',
|
||||
'UI:Error:4ParametersMissing' => 'Erro: os seguinte parametros devem ser especificados para esta operacao: %1$s, %2$s, %3$s e %4$s.',
|
||||
'UI:Error:IncorrectOQLQuery_Message' => 'Erro: Consulta OQL incorreta: %1$s',
|
||||
'UI:Error:AnErrorOccuredWhileRunningTheQuery_Message' => 'Um erro ocorreu enquanto executava a consulta: %1$s',
|
||||
'UI:Error:ObjectAlreadyUpdated' => 'Erro: o objeto já foi atualizado.',
|
||||
'UI:Error:ObjectCannotBeUpdated' => 'Erro: objeto nao pode ser atualizado.',
|
||||
'UI:Error:ObjectsAlreadyDeleted' => 'Erro: objeto já pode ter sido eliminada!',
|
||||
'UI:Error:BulkDeleteNotAllowedOn_Class' => 'Permissão negado para executar uma exclusão em massa de objetos da classe %1$s',
|
||||
'UI:Error:DeleteNotAllowedOn_Class' => 'Permissão negado para apagar objeto da classe %1$s',
|
||||
'UI:Error:BulkModifyNotAllowedOn_Class' => 'Você não tem permissão para realizar uma atualização em massa de objetos na classe %1$s',
|
||||
'UI:Error:ObjectAlreadyCloned' => 'Erro: o objeto ja foi clonado!',
|
||||
'UI:Error:ObjectAlreadyCreated' => 'Erro: o objeto ja foi criado!',
|
||||
'UI:Error:Invalid_Stimulus_On_Object_In_State' => 'Erro: invalid stimulus "%1$s" on object %2$s in state "%3$s".',
|
||||
'UI:GroupBy:Count' => 'Contagem',
|
||||
'UI:GroupBy:Count+' => 'Número de elementos',
|
||||
'UI:CountOfObjects' => '%1$d objetos que correspondem aos criterios.',
|
||||
'UI_CountOfObjectsShort' => '%1$d objetos.',
|
||||
'UI:NoObject_Class_ToDisplay' => 'Nenhum %1$s para mostrar',
|
||||
'UI:History:LastModified_On_By' => 'Ultima modificacao de %1$s por %2$s.',
|
||||
'UI:HistoryTab' => 'Historico',
|
||||
'UI:NotificationsTab' => 'Notificações',
|
||||
'UI:History:BulkImports' => 'Histórico',
|
||||
'UI:History:BulkImports+' => 'List of CSV imports (last first)',
|
||||
'UI:History:BulkImportDetails' => 'Changes resulting from the CSV import performed on %1$s (by %2$s)',
|
||||
'UI:History:Date' => 'Data',
|
||||
'UI:History:Date+' => 'Data da alteração',
|
||||
'UI:History:User' => 'Usuario',
|
||||
'UI:History:User+' => 'Usuario que fez alteração',
|
||||
'UI:History:Changes' => 'Alterações',
|
||||
'UI:History:Changes+' => 'Alterações feita no objeto',
|
||||
'UI:History:StatsCreations' => 'Criado',
|
||||
'UI:History:StatsCreations+' => '',
|
||||
'UI:History:StatsModifs' => 'Modified',
|
||||
'UI:History:StatsModifs+' => 'Count of objects modified',
|
||||
'UI:History:StatsDeletes' => 'Deleted',
|
||||
'UI:History:StatsDeletes+' => 'Count of objects deleted',
|
||||
'UI:Loading' => 'Carregando...',
|
||||
'UI:Menu:Actions' => 'Ações',
|
||||
'UI:Menu:New' => 'Novo...',
|
||||
'UI:Menu:Add' => 'Adicionar...',
|
||||
'UI:Menu:Manage' => 'Gerencia...',
|
||||
'UI:Menu:EMail' => 'eMail',
|
||||
'UI:Menu:CSVExport' => 'Exportar CSV',
|
||||
'UI:Menu:Modify' => 'Modificar...',
|
||||
'UI:Menu:Delete' => 'Apagar...',
|
||||
'UI:Menu:BulkDelete' => 'Apagar...',
|
||||
'UI:UndefinedObject' => 'indefinido',
|
||||
'UI:Document:OpenInNewWindow:Download' => 'Abrir em nova janela: %1$s, Download: %2$s',
|
||||
'UI:SelectAllToggle+' => 'Marque todos / Desmarque todos',
|
||||
'UI:TruncatedResults' => '%1$d objetos mostrados out of %2$d',
|
||||
'UI:DisplayAll' => 'Mostrar todos',
|
||||
'UI:CollapseList' => 'Recolher',
|
||||
'UI:CountOfResults' => '%1$d objeto(s)',
|
||||
'UI:ChangesLogTitle' => 'Alteracoes log (%1$d):',
|
||||
'UI:EmptyChangesLogTitle' => 'Alteracoes log esta limpo',
|
||||
'UI:SearchFor_Class_Objects' => 'Pesquisa para %1$s objetos',
|
||||
'UI:OQLQueryBuilderTitle' => 'Construir consulta OQL',
|
||||
'UI:OQLQueryTab' => 'Consulta OQL',
|
||||
'UI:SimpleSearchTab' => 'Pesquisa simples',
|
||||
'UI:Details+' => 'Detalhes',
|
||||
'UI:SearchValue:Any' => '* Qualquer *',
|
||||
'UI:SearchValue:Mixed' => '* mix *',
|
||||
'UI:SelectOne' => '-- selecione um --',
|
||||
'UI:Login:Welcome' => 'Bem-vindo ao iTop!',
|
||||
'UI:Login:IncorrectLoginPassword' => 'Usuario/senha incorreto(s), por favor, tente novamente.',
|
||||
'UI:Login:IdentifyYourself' => 'Identifique-se antes continuar...',
|
||||
'UI:Login:UserNamePrompt' => 'Nome usuario',
|
||||
'UI:Login:PasswordPrompt' => 'Senha',
|
||||
'UI:Login:ChangeYourPassword' => 'Alterar sua senha',
|
||||
'UI:Login:OldPasswordPrompt' => 'Senha antiga',
|
||||
'UI:Login:NewPasswordPrompt' => 'Nova senha',
|
||||
'UI:Login:RetypeNewPasswordPrompt' => 'Digite novamente a senha',
|
||||
'UI:Login:IncorrectOldPassword' => 'Erro: senha incorreta',
|
||||
'UI:LogOffMenu' => 'Sair',
|
||||
'UI:LogOff:ThankYou' => 'Obrigado por usar o sistema',
|
||||
'UI:LogOff:ClickHereToLoginAgain' => 'Clique aqui para acessar novamente...',
|
||||
'UI:ChangePwdMenu' => 'Alterar senha...',
|
||||
'UI:Login:PasswordChanged' => 'Senha configurada com sucesso!',
|
||||
'UI:AccessRO-All' => 'iTop is read-only',
|
||||
'UI:AccessRO-Users' => 'iTop is read-only for end-users',
|
||||
'UI:Login:RetypePwdDoesNotMatch' => 'A nova senha nao confere!',
|
||||
'UI:Button:Login' => 'Enter iTop',
|
||||
'UI:Login:Error:AccessRestricted' => 'iTop accesso restrito. Por favor, contate o suporte.',
|
||||
'UI:Login:Error:AccessAdmin' => 'Acesso restrito a pessoas com privilégios de administrador. Por favor, contate um administrador.',
|
||||
'UI:CSVImport:MappingSelectOne' => '-- selecione um --',
|
||||
'UI:CSVImport:MappingNotApplicable' => '-- ignore este campo --',
|
||||
'UI:CSVImport:NoData' => 'Conjunto vazio de dados..., forneca alguns dados!',
|
||||
'UI:Title:DataPreview' => 'Visualizar dado',
|
||||
'UI:CSVImport:ErrorOnlyOneColumn' => 'Erro: Os dados contem apenas uma coluna. Sera que voce selecionou o separador adequado?',
|
||||
'UI:CSVImport:FieldName' => 'Campo %1$d',
|
||||
'UI:CSVImport:DataLine1' => 'Dado linha 1',
|
||||
'UI:CSVImport:DataLine2' => 'Dado linha 2',
|
||||
'UI:CSVImport:idField' => 'id (Chave primaria)',
|
||||
'UI:Title:BulkImport' => 'iTop - Importacao em massa',
|
||||
'UI:Title:BulkImport+' => 'CSV Assistente de Importacao',
|
||||
'UI:Title:BulkSynchro_nbItem_ofClass_class' => 'Sincronização de %1$d objetos da classe %2$s',
|
||||
'UI:CSVImport:ClassesSelectOne' => '-- selecione um --',
|
||||
'UI:CSVImport:ErrorExtendedAttCode' => 'Erro interno: "%1$s" e um codigo incorreto, pois "%2$s" NAO e chave externa da classe "%3$s"',
|
||||
'UI:CSVImport:ObjectsWillStayUnchanged' => '%1$d objeto(s) permanecera inalterados.',
|
||||
'UI:CSVImport:ObjectsWillBeModified' => '%1$d objeto(s) sera modificado.',
|
||||
'UI:CSVImport:ObjectsWillBeAdded' => '%1$d objeto(s) sera adicionado.',
|
||||
'UI:CSVImport:ObjectsWillHaveErrors' => '%1$d objeto(s) tem erros.',
|
||||
'UI:CSVImport:ObjectsRemainedUnchanged' => '%1$d objeto(s) manteve-se inalterada.',
|
||||
'UI:CSVImport:ObjectsWereModified' => '%1$d objeto(s) foram modificados.',
|
||||
'UI:CSVImport:ObjectsWereAdded' => '%1$d objeto(s) foram adicionados.',
|
||||
'UI:CSVImport:ObjectsHadErrors' => '%1$d objeto(s) teve erros.',
|
||||
'UI:Title:CSVImportStep2' => 'Step 2 of 5: CSV opcoes dados',
|
||||
'UI:Title:CSVImportStep3' => 'Step 3 of 5: Mapeamento de dados',
|
||||
'UI:Title:CSVImportStep4' => 'Step 4 of 5: Simulacao Importacao',
|
||||
'UI:Title:CSVImportStep5' => 'Step 5 of 5: Importacao completado',
|
||||
'UI:CSVImport:LinesNotImported' => 'Linhas que nao pode ser carregadas:',
|
||||
'UI:CSVImport:LinesNotImported+' => 'As seguintes linhas nao foram importados, porque eles contem erros',
|
||||
'UI:CSVImport:SeparatorComma+' => ', (comma)',
|
||||
'UI:CSVImport:SeparatorSemicolon+' => '; (semicolon)',
|
||||
'UI:CSVImport:SeparatorTab+' => 'tab',
|
||||
'UI:CSVImport:SeparatorOther' => 'outros:',
|
||||
'UI:CSVImport:QualifierDoubleQuote+' => '" (aspa dupla)',
|
||||
'UI:CSVImport:QualifierSimpleQuote+' => '\' (simple quote)',
|
||||
'UI:CSVImport:QualifierOther' => 'outros:',
|
||||
'UI:CSVImport:TreatFirstLineAsHeader' => 'Tratar a primeira linha como um cabecalho (nome da coluna)',
|
||||
'UI:CSVImport:Skip_N_LinesAtTheBeginning' => 'Skip %1$s line(s) at the beginning of the file',
|
||||
'UI:CSVImport:CSVDataPreview' => 'CSV Data Preview',
|
||||
'UI:CSVImport:SelectFile' => 'Select the file to import:',
|
||||
'UI:CSVImport:Tab:LoadFromFile' => 'Load from a file',
|
||||
'UI:CSVImport:Tab:CopyPaste' => 'Copy and paste data',
|
||||
'UI:CSVImport:Tab:Templates' => 'Templates',
|
||||
'UI:CSVImport:PasteData' => 'Paste the data to import:',
|
||||
'UI:CSVImport:PickClassForTemplate' => 'Pick the template to download: ',
|
||||
'UI:CSVImport:SeparatorCharacter' => 'Separator character:',
|
||||
'UI:CSVImport:TextQualifierCharacter' => 'Text qualifier character',
|
||||
'UI:CSVImport:CommentsAndHeader' => 'Comments and header',
|
||||
'UI:CSVImport:SelectClass' => 'Select the class to import:',
|
||||
'UI:CSVImport:AdvancedMode' => 'Advanced mode',
|
||||
'UI:CSVImport:AdvancedMode+' => 'In advanced mode the "id" (primary key) of the objects can be used to update and rename objects.However the column "id" (if present) can only be used as a search criteria and can not be combined with any other search criteria.',
|
||||
'UI:CSVImport:SelectAClassFirst' => 'To configure the mapping, select a class first.',
|
||||
'UI:CSVImport:HeaderFields' => 'Fields',
|
||||
'UI:CSVImport:HeaderMappings' => 'Mappings',
|
||||
'UI:CSVImport:HeaderSearch' => 'Search?',
|
||||
'UI:CSVImport:AlertIncompleteMapping' => 'Please select a mapping for every field.',
|
||||
'UI:CSVImport:AlertNoSearchCriteria' => 'Please select at least one search criteria',
|
||||
'UI:CSVImport:Encoding' => 'Codificação de caracteres',
|
||||
'UI:UniversalSearchTitle' => 'iTop - Pesquisa universal',
|
||||
'UI:UniversalSearch:Error' => 'Erro: %1$s',
|
||||
'UI:UniversalSearch:LabelSelectTheClass' => 'Selecione a classe para pesquisa: ',
|
||||
'UI:Audit:Title' => 'iTop - CMDB Auditoria',
|
||||
'UI:Audit:InteractiveAudit' => 'Interactive Audit',
|
||||
'UI:Audit:HeaderAuditRule' => 'Audit Rule',
|
||||
'UI:Audit:HeaderNbObjects' => '# Objects',
|
||||
'UI:Audit:HeaderNbErrors' => '# Errors',
|
||||
'UI:Audit:PercentageOk' => '% Ok',
|
||||
'UI:RunQuery:Title' => 'iTop - OQL Query Evaluation',
|
||||
'UI:RunQuery:QueryExamples' => 'Query Examples',
|
||||
'UI:RunQuery:HeaderPurpose' => 'Purpose',
|
||||
'UI:RunQuery:HeaderPurpose+' => 'Explanation about the query',
|
||||
'UI:RunQuery:HeaderOQLExpression' => 'OQL Expression',
|
||||
'UI:RunQuery:HeaderOQLExpression+' => 'The query in OQL syntax',
|
||||
'UI:RunQuery:ExpressionToEvaluate' => 'Expression to evaluate: ',
|
||||
'UI:RunQuery:MoreInfo' => 'More information about the query: ',
|
||||
'UI:RunQuery:DevelopedQuery' => 'Redevelopped query expression: ',
|
||||
'UI:RunQuery:SerializedFilter' => 'Serialized filter: ',
|
||||
'UI:RunQuery:Error' => 'An error occured while running the query: %1$s',
|
||||
'UI:Schema:Title' => 'iTop objects schema',
|
||||
'UI:Schema:CategoryMenuItem' => 'Category <b>%1$s</b>',
|
||||
'UI:Schema:Relationships' => 'Relationships',
|
||||
'UI:Schema:AbstractClass' => 'Abstract class: no object from this class can be instantiated.',
|
||||
'UI:Schema:NonAbstractClass' => 'Non abstract class: objects from this class can be instantiated.',
|
||||
'UI:Schema:ClassHierarchyTitle' => 'Class hierarchy',
|
||||
'UI:Schema:AllClasses' => 'All classes',
|
||||
'UI:Schema:ExternalKey_To' => 'External key to %1$s',
|
||||
'UI:Schema:Columns_Description' => 'Columns: <em>%1$s</em>',
|
||||
'UI:Schema:Default_Description' => 'Default: "%1$s"',
|
||||
'UI:Schema:NullAllowed' => 'Null Allowed',
|
||||
'UI:Schema:NullNotAllowed' => 'Null NOT Allowed',
|
||||
'UI:Schema:Attributes' => 'Attributes',
|
||||
'UI:Schema:AttributeCode' => 'Attribute Code',
|
||||
'UI:Schema:AttributeCode+' => 'Internal code of the attribute',
|
||||
'UI:Schema:Label' => 'Label',
|
||||
'UI:Schema:Label+' => 'Label of the attribute',
|
||||
'UI:Schema:Type' => 'Type',
|
||||
'UI:Schema:Type+' => 'Data type of the attribute',
|
||||
'UI:Schema:Origin' => 'Origin',
|
||||
'UI:Schema:Origin+' => 'The base class in which this attribute is defined',
|
||||
'UI:Schema:Description' => 'Description',
|
||||
'UI:Schema:Description+' => 'Description of the attribute',
|
||||
'UI:Schema:AllowedValues' => 'Allowed values',
|
||||
'UI:Schema:AllowedValues+' => 'Restrictions on the possible values for this attribute',
|
||||
'UI:Schema:MoreInfo' => 'More info',
|
||||
'UI:Schema:MoreInfo+' => 'More information about the field defined in the database',
|
||||
'UI:Schema:SearchCriteria' => 'Search criteria',
|
||||
'UI:Schema:FilterCode' => 'Filter code',
|
||||
'UI:Schema:FilterCode+' => 'Code of this search criteria',
|
||||
'UI:Schema:FilterDescription' => 'Description',
|
||||
'UI:Schema:FilterDescription+' => 'Description of this search criteria',
|
||||
'UI:Schema:AvailOperators' => 'Available operators',
|
||||
'UI:Schema:AvailOperators+' => 'Possible operators for this search criteria',
|
||||
'UI:Schema:ChildClasses' => 'Child classes',
|
||||
'UI:Schema:ReferencingClasses' => 'Referencing classes',
|
||||
'UI:Schema:RelatedClasses' => 'Related classes',
|
||||
'UI:Schema:LifeCycle' => 'Life cycle',
|
||||
'UI:Schema:Triggers' => 'Triggers',
|
||||
'UI:Schema:Relation_Code_Description' => 'Relation <em>%1$s</em> (%2$s)',
|
||||
'UI:Schema:RelationDown_Description' => 'Down: %1$s',
|
||||
'UI:Schema:RelationUp_Description' => 'Up: %1$s',
|
||||
'UI:Schema:RelationPropagates' => '%1$s: propagate to %2$d levels, query: %3$s',
|
||||
'UI:Schema:RelationDoesNotPropagate' => '%1$s: does not propagates (%2$d levels), query: %3$s',
|
||||
'UI:Schema:Class_ReferencingClasses_From_By' => '%1$s is referenced by the class %2$s via the field %3$s',
|
||||
'UI:Schema:Class_IsLinkedTo_Class_Via_ClassAndAttribute' => '%1$s is linked to %2$s via %3$s::<em>%4$s</em>',
|
||||
'UI:Schema:Links:1-n' => 'Classes pointing to %1$s (1:n links):',
|
||||
'UI:Schema:Links:n-n' => 'Classes linked to %1$s (n:n links):',
|
||||
'UI:Schema:Links:All' => 'Graph of all related classes',
|
||||
'UI:Schema:NoLifeCyle' => 'There is no life cycle defined for this class.',
|
||||
'UI:Schema:LifeCycleTransitions' => 'Transitions',
|
||||
'UI:Schema:LifeCyleAttributeOptions' => 'Attribute options',
|
||||
'UI:Schema:LifeCycleHiddenAttribute' => 'Hidden',
|
||||
'UI:Schema:LifeCycleReadOnlyAttribute' => 'Read-only',
|
||||
'UI:Schema:LifeCycleMandatoryAttribute' => 'Mandatory',
|
||||
'UI:Schema:LifeCycleAttributeMustChange' => 'Must change',
|
||||
'UI:Schema:LifeCycleAttributeMustPrompt' => 'User will be prompted to change the value',
|
||||
'UI:Schema:LifeCycleEmptyList' => 'lista limpa',
|
||||
'UI:LinksWidget:Autocomplete+' => 'Type the first 3 characters...',
|
||||
'UI:Combo:SelectValue' => '--- select a value ---',
|
||||
'UI:Label:SelectedObjects' => 'Objetos selecionados: ',
|
||||
'UI:Label:AvailableObjects' => 'Objetos disponíveis: ',
|
||||
'UI:Link_Class_Attributes' => '%1$s atributos',
|
||||
'UI:AddObjectsOf_Class_LinkedWith_Class_Instance' => 'Adionar %1$s objetos ligados com %2$s: %3$s',
|
||||
'UI:AddObjectsOf_Class_LinkedWith_Class' => 'Adicionado %1$s objetos ligados com o %2$s',
|
||||
'UI:ManageObjectsOf_Class_LinkedWith_Class_Instance' => 'Manage %1$s objects linked with %2$s: %3$s',
|
||||
'UI:AddLinkedObjectsOf_Class' => 'Adicionado %1$ss...',
|
||||
'UI:RemoveLinkedObjectsOf_Class' => 'Apagado objeto(s) selecionado(s)',
|
||||
'UI:Message:EmptyList:UseAdd' => 'A lista está limpa, use o ícone "Adicionar..." para adicionar elementos.',
|
||||
'UI:Message:EmptyList:UseSearchForm' => 'Use o formulário Pesquisa para pesquisar objetos a ser adicionado.',
|
||||
'UI:Wizard:FinalStepTitle' => 'Passo Final: confirmação',
|
||||
'UI:Title:DeletionOf_Object' => 'Eliminação de %1$s',
|
||||
'UI:Title:BulkDeletionOf_Count_ObjectsOf_Class' => 'Bulk deletion of %1$d objects of class %2$s',
|
||||
'UI:Delete:NotAllowedToDelete' => 'Permissão negado para eliminar este objeto',
|
||||
'UI:Delete:NotAllowedToUpdate_Fields' => 'Permissão negado para atualizar o(s) seguinte(s) campo(s): %1$s',
|
||||
'UI:Error:NotEnoughRightsToDelete' => 'Este objeto não pode ser apagado pelo usuário não ter direitos administrativos',
|
||||
'UI:Error:CannotDeleteBecause' => 'This object could not be deleted because: %1$s',
|
||||
'UI:Error:CannotDeleteBecauseOfDepencies' => 'This object could not be deleted because some manual operations must be performed prior to that',
|
||||
'UI:Error:CannotDeleteBecauseManualOpNeeded' => 'Este objeto não pode ser excluído porque algumas operações manuais devem ser realizadas antes que',
|
||||
'UI:Archive_User_OnBehalfOf_User' => '%1$s em nome de %2$s',
|
||||
'UI:Delete:Deleted' => 'apagado',
|
||||
'UI:Delete:AutomaticallyDeleted' => 'eliminado automaticamente',
|
||||
'UI:Delete:AutomaticResetOf_Fields' => 'reset automático dos campo(s): %1$s',
|
||||
'UI:Delete:CleaningUpRefencesTo_Object' => 'Limpar todas as referências a %1$s...',
|
||||
'UI:Delete:CleaningUpRefencesTo_Several_ObjectsOf_Class' => 'Limpando todas as referências ao objeto %1$d da classe %2$s...',
|
||||
'UI:Delete:Done+' => 'What was done...',
|
||||
'UI:Delete:_Name_Class_Deleted' => '%1$s - %2$s eliminado.',
|
||||
'UI:Delete:ConfirmDeletionOf_Name' => 'Eliminação de %1$s',
|
||||
'UI:Delete:ConfirmDeletionOf_Count_ObjectsOf_Class' => 'Eliminação do objeto %1$d da classe %2$s',
|
||||
'UI:Delete:CannotDeleteBecause' => 'Não pode ser apagado: %1$s',
|
||||
'UI:Delete:ShouldBeDeletedAtomaticallyButNotPossible' => 'Deve ser automaticamente excluído, mas isso não é viável: %1$s',
|
||||
'UI:Delete:MustBeDeletedManuallyButNotPossible' => 'Deve ser excluído manualmente, mas isso não é viável: %1$s',
|
||||
'UI:Delete:WillBeDeletedAutomatically' => 'Será automaticamente excluído',
|
||||
'UI:Delete:MustBeDeletedManually' => 'Deve ser excluído manualmente',
|
||||
'UI:Delete:CannotUpdateBecause_Issue' => 'Devem ser atualizados automaticamente, mas: %1$s',
|
||||
'UI:Delete:WillAutomaticallyUpdate_Fields' => 'será automaticamente atualizado (reset: %1$s)',
|
||||
'UI:Delete:Count_Objects/LinksReferencing_Object' => '%1$d objects/links are referencing %2$s',
|
||||
'UI:Delete:Count_Objects/LinksReferencingTheObjects' => '%1$d objects/links are referencing some of the objects to be deleted',
|
||||
'UI:Delete:ReferencesMustBeDeletedToEnsureIntegrity' => 'To ensure Database integrity, any reference should be further eliminated',
|
||||
'UI:Delete:Consequence+' => 'What will be done',
|
||||
'UI:Delete:SorryDeletionNotAllowed' => 'Sorry, you are not allowed to delete this object, see the detailed explanations above',
|
||||
'UI:Delete:PleaseDoTheManualOperations' => 'Please perform the manual operations listed above prior to requesting the deletion of this object',
|
||||
'UI:Delect:Confirm_Object' => 'Deseja realmente apagar %1$s.',
|
||||
'UI:Delect:Confirm_Count_ObjectsOf_Class' => 'Por favor, confirme que deseja apagar o seguinte %1$d objetos da classe %2$s.',
|
||||
'UI:WelcomeToITop' => 'Bem-vindo ao iTop',
|
||||
'UI:DetailsPageTitle' => 'iTop - %1$s - %2$s detalhes',
|
||||
'UI:ErrorPageTitle' => 'iTop - Erro',
|
||||
'UI:ObjectDoesNotExist' => 'Desculpe, este objeto não existe (ou você não tem permissão para vê-lo).',
|
||||
'UI:SearchResultsPageTitle' => 'iTop - Pesquisa resultados',
|
||||
'UI:Search:NoSearch' => 'Nada para pesquisar',
|
||||
'UI:FullTextSearchTitle_Text' => 'Resultados para "%1$s":',
|
||||
'UI:Search:Count_ObjectsOf_Class_Found' => '%1$d objeto(s) da classe %2$s encontrado(s).',
|
||||
'UI:Search:NoObjectFound' => 'Nenhum objeto encontrado.',
|
||||
'UI:ModificationPageTitle_Object_Class' => 'iTop - %1$s - %2$s modificação',
|
||||
'UI:ModificationTitle_Class_Object' => 'Modificação de %1$s: <span class=\"hilite\">%2$s</span>',
|
||||
'UI:ClonePageTitle_Object_Class' => 'iTop - Clone %1$s - %2$s modificação',
|
||||
'UI:CloneTitle_Class_Object' => 'Clone de %1$s: <span class=\"hilite\">%2$s</span>',
|
||||
'UI:CreationPageTitle_Class' => 'iTop - Criação de um(a) novo(a) %1$s ',
|
||||
'UI:CreationTitle_Class' => 'Criação de um(a) novo(a) %1$s',
|
||||
'UI:SelectTheTypeOf_Class_ToCreate' => 'Selecione o tipo de %1$s a ser criado:',
|
||||
'UI:Class_Object_NotUpdated' => 'Nenhuma mudança detectada, %1$s (%2$s) <strong>não</strong> foi modificado.',
|
||||
'UI:Class_Object_Updated' => '%1$s (%2$s) atualizado.',
|
||||
'UI:BulkDeletePageTitle' => 'iTop - Excluir em massa',
|
||||
'UI:BulkDeleteTitle' => 'Marque os objetos que deseja excluir:',
|
||||
'UI:PageTitle:ObjectCreated' => 'iTop Objeto criado.',
|
||||
'UI:Title:Object_Of_Class_Created' => '%1$s - %2$s criado.',
|
||||
'UI:Apply_Stimulus_On_Object_In_State_ToTarget_State' => 'Applying %1$s on object: %2$s in state %3$s to target state: %4$s.',
|
||||
'UI:ObjectCouldNotBeWritten' => 'O objeto não pôde ser gravado: %1$s',
|
||||
'UI:PageTitle:FatalError' => 'iTop - Erro fatal',
|
||||
'UI:SystemIntrusion' => 'Acesso negado. Você tentou executar uma operação que não é permitido para você.',
|
||||
'UI:FatalErrorMessage' => 'Erro fatal, não pode continuar.',
|
||||
'UI:Error_Details' => 'Erro: %1$s.',
|
||||
'UI:PageTitle:ClassProjections' => 'iTop user management - class projections',
|
||||
'UI:PageTitle:ProfileProjections' => 'iTop user management - profile projections',
|
||||
'UI:UserManagement:Class' => 'Class',
|
||||
'UI:UserManagement:Class+' => 'Class of objects',
|
||||
'UI:UserManagement:ProjectedObject' => 'Object',
|
||||
'UI:UserManagement:ProjectedObject+' => 'Projected object',
|
||||
'UI:UserManagement:AnyObject' => '* any *',
|
||||
'UI:UserManagement:User' => 'User',
|
||||
'UI:UserManagement:User+' => 'User involved in the projection',
|
||||
'UI:UserManagement:Profile' => 'Profile',
|
||||
'UI:UserManagement:Profile+' => 'Profile in which the projection is specified',
|
||||
'UI:UserManagement:Action:Read' => 'Read',
|
||||
'UI:UserManagement:Action:Read+' => 'Read/display objects',
|
||||
'UI:UserManagement:Action:Modify' => 'Modify',
|
||||
'UI:UserManagement:Action:Modify+' => 'Create and edit (modify) objects',
|
||||
'UI:UserManagement:Action:Delete' => 'Delete',
|
||||
'UI:UserManagement:Action:Delete+' => 'Delete objects',
|
||||
'UI:UserManagement:Action:BulkRead' => 'Bulk Read (Export)',
|
||||
'UI:UserManagement:Action:BulkRead+' => 'List objects or export massively',
|
||||
'UI:UserManagement:Action:BulkModify' => 'Bulk Modify',
|
||||
'UI:UserManagement:Action:BulkModify+' => 'Massively create/edit (CSV import)',
|
||||
'UI:UserManagement:Action:BulkDelete' => 'Bulk Delete',
|
||||
'UI:UserManagement:Action:BulkDelete+' => 'Massively delete objects',
|
||||
'UI:UserManagement:Action:Stimuli' => 'Stimuli',
|
||||
'UI:UserManagement:Action:Stimuli+' => 'Allowed (compound) actions',
|
||||
'UI:UserManagement:Action' => 'Action',
|
||||
'UI:UserManagement:Action+' => 'Action performed by the user',
|
||||
'UI:UserManagement:TitleActions' => 'Actions',
|
||||
'UI:UserManagement:Permission' => 'Permission',
|
||||
'UI:UserManagement:Permission+' => 'User\'s permissions',
|
||||
'UI:UserManagement:Attributes' => 'Attributes',
|
||||
'UI:UserManagement:ActionAllowed:Yes' => 'Yes',
|
||||
'UI:UserManagement:ActionAllowed:No' => 'No',
|
||||
'UI:UserManagement:AdminProfile+' => 'Administrators have full read/write access to all objects in the database.',
|
||||
'UI:UserManagement:NoLifeCycleApplicable' => 'N/A',
|
||||
'UI:UserManagement:NoLifeCycleApplicable+' => 'No lifecycle has been defined for this class',
|
||||
'UI:UserManagement:GrantMatrix' => 'Grant Matrix',
|
||||
'UI:UserManagement:LinkBetween_User_And_Profile' => 'Link between %1$s and %2$s',
|
||||
'UI:UserManagement:LinkBetween_User_And_Org' => 'Link entre %1$s e %2$s',
|
||||
'Menu:AdminTools' => 'Ferramentas administrativa',
|
||||
'Menu:AdminTools+' => 'Ferramentas administrativa',
|
||||
'Menu:AdminTools?' => 'Ferramentas permitidas somente para usuário com profile administrador',
|
||||
'UI:ChangeManagementMenu' => 'Gerenciamento Mudanças',
|
||||
'UI:ChangeManagementMenu+' => 'Gerenciamento Mudanças',
|
||||
'UI:ChangeManagementMenu:Title' => 'Visão geral Mudanças',
|
||||
'UI-ChangeManagementMenu-ChangesByType' => 'Mudanças por tipo',
|
||||
'UI-ChangeManagementMenu-ChangesByStatus' => 'Mudanças por status',
|
||||
'UI-ChangeManagementMenu-ChangesByWorkgroup' => 'Mudanças por grupo de trabalho',
|
||||
'UI-ChangeManagementMenu-ChangesNotYetAssigned' => 'Mudanças não atribuídas',
|
||||
'UI:ConfigurationItemsMenu' => 'Configuração Itens',
|
||||
'UI:ConfigurationItemsMenu+' => 'Todos dispositivos',
|
||||
'UI:ConfigurationItemsMenu:Title' => 'Visão geral Configuração Itens',
|
||||
'UI-ConfigurationItemsMenu-ServersByCriticity' => 'Servidores por criticidade',
|
||||
'UI-ConfigurationItemsMenu-PCsByCriticity' => 'PCs por criticidade',
|
||||
'UI-ConfigurationItemsMenu-NWDevicesByCriticity' => 'Dispositivo de rede por criticidade',
|
||||
'UI-ConfigurationItemsMenu-ApplicationsByCriticity' => 'Aplicação por criticidade',
|
||||
'UI:ConfigurationManagementMenu' => 'Gerenciamento Configuração',
|
||||
'UI:ConfigurationManagementMenu+' => 'Gerenciamento Configuração',
|
||||
'UI:ConfigurationManagementMenu:Title' => 'Visão geral Infra-estrutura',
|
||||
'UI-ConfigurationManagementMenu-InfraByType' => 'Objetos Infra-estrutura por tipo',
|
||||
'UI-ConfigurationManagementMenu-InfraByStatus' => 'Objetos Infra-estrutura por status',
|
||||
'UI:ConfigMgmtMenuOverview:Title' => 'Painel para Gerenciamento Configuração',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIbyStatus' => 'Configuração Itens por status',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIByType' => 'Configuração Itens por tipo',
|
||||
'UI:RequestMgmtMenuOverview:Title' => 'Painel para Gerenciamento Solicitação',
|
||||
'UI-RequestManagementOverview-RequestByService' => 'Chamados usuários por serviço',
|
||||
'UI-RequestManagementOverview-RequestByPriority' => 'Chamados usuários por prioridade',
|
||||
'UI-RequestManagementOverview-RequestUnassigned' => 'Chamados usuários não atribuídos a agentes',
|
||||
'UI:IncidentMgmtMenuOverview:Title' => 'Painel para Gerenciamento Incidentes',
|
||||
'UI-IncidentManagementOverview-IncidentByService' => 'Incidentes por serviço',
|
||||
'UI-IncidentManagementOverview-IncidentByPriority' => 'Incidentes por prioridade',
|
||||
'UI-IncidentManagementOverview-IncidentUnassigned' => 'Incidentes não atribuídos para agentes',
|
||||
'UI:ChangeMgmtMenuOverview:Title' => 'Painel para Gerenciamento Mudanças',
|
||||
'UI-ChangeManagementOverview-ChangeByType' => 'Mudanças por tipo',
|
||||
'UI-ChangeManagementOverview-ChangeUnassigned' => 'Mudanças não atribuídos para agentes',
|
||||
'UI-ChangeManagementOverview-ChangeWithOutage' => 'Interrupções devido a mudanças',
|
||||
'UI:ServiceMgmtMenuOverview:Title' => 'Painel para Gerenciamento Serviço',
|
||||
'UI-ServiceManagementOverview-CustomerContractToRenew' => 'Contratos de clientes deverão ser renovados em 30 dias',
|
||||
'UI-ServiceManagementOverview-ProviderContractToRenew' => 'Contratos de prestação a serem renovados em 30 dias',
|
||||
'UI:ContactsMenu' => 'Contatos',
|
||||
'UI:ContactsMenu+' => 'Contatos',
|
||||
'UI:ContactsMenu:Title' => 'Visão global contatos',
|
||||
'UI-ContactsMenu-ContactsByLocation' => 'Contatos por Localização',
|
||||
'UI-ContactsMenu-ContactsByType' => 'Contatos por tipo',
|
||||
'UI-ContactsMenu-ContactsByStatus' => 'Contatos por status',
|
||||
'Menu:CSVImportMenu' => 'Importacao CSV',
|
||||
'Menu:CSVImportMenu+' => 'Bulk creation or update',
|
||||
'Menu:DataModelMenu' => 'Modelo dados',
|
||||
'Menu:DataModelMenu+' => 'Visao geral do Modelo dados',
|
||||
'Menu:ExportMenu' => 'Exportar',
|
||||
'Menu:ExportMenu+' => 'Exportar o resultado de qualquer consulta em HTML, CSV or XML',
|
||||
'Menu:NotificationsMenu' => 'Notificações',
|
||||
'Menu:NotificationsMenu+' => 'Configuração da notificações',
|
||||
'UI:NotificationsMenu:Title' => 'Configuração da <span class="hilite">Notificações</span>',
|
||||
'UI:NotificationsMenu:Help' => 'Ajuda',
|
||||
'UI:NotificationsMenu:HelpContent' => '<p>In iTop the notifications are fully customizable. They are based on two sets of objects: <i>triggers and actions</i>.</p>
|
||||
<p><i><b>Triggers</b></i> define when a notification will be executed. There are 3 types of triggers for covering 3 differents phases of an object life cycle:
|
||||
<ol>
|
||||
<li>the "OnCreate" triggers get executed when an object of the specified class is created</li>
|
||||
<li>the "OnStateEnter" triggers get executed before an object of the given class enters a specified state (coming from another state)</li>
|
||||
<li>the "OnStateLeave" triggers get executed when an object of the given class is leaving a specified state</li>
|
||||
</ol>
|
||||
</p>
|
||||
<p>
|
||||
<i><b>Actions</b></i> define the actions to be performed when the triggers execute. For now there is only one kind of action consisting in sending an email message.
|
||||
Such actions also define the template to be used for sending the email as well as the other parameters of the message like the recipients, importance, etc.
|
||||
</p>
|
||||
<p>A special page: <a href="../setup/email.test.php" target="_blank">email.test.php</a> is available for testing and troubleshooting your PHP mail configuration.</p>
|
||||
<p>To be executed, actions must be associated to triggers.
|
||||
When associated with a trigger, each action is given an "order" number, specifying in which order the actions are to be executed.</p>',
|
||||
'UI:NotificationsMenu:Triggers' => 'Triggers',
|
||||
'UI:NotificationsMenu:AvailableTriggers' => 'Triggers disponivel',
|
||||
'UI:NotificationsMenu:OnCreate' => 'Quando um objeto e criado',
|
||||
'UI:NotificationsMenu:OnStateEnter' => 'Quando um objeto entra em um determinado estado',
|
||||
'UI:NotificationsMenu:OnStateLeave' => 'Quando um objeto deixa um determinado estado',
|
||||
'UI:NotificationsMenu:Actions' => 'Acoes',
|
||||
'UI:NotificationsMenu:AvailableActions' => 'Acoes disponiveis',
|
||||
'Menu:AuditCategories' => 'Auditar Categorias',
|
||||
'Menu:AuditCategories+' => '',
|
||||
'Menu:Notifications:Title' => 'Auditar Categorias',
|
||||
'Menu:RunQueriesMenu' => 'Executar consultas',
|
||||
'Menu:RunQueriesMenu+' => 'Executar qualquer consulta',
|
||||
'Menu:DataAdministration' => 'Administracao de dados',
|
||||
'Menu:DataAdministration+' => 'Administracao de dados',
|
||||
'Menu:UniversalSearchMenu' => 'Pesquisa Universal',
|
||||
'Menu:UniversalSearchMenu+' => 'Pesquisa por nada...',
|
||||
'Menu:ApplicationLogMenu' => 'Log de l\'aplicacao',
|
||||
'Menu:ApplicationLogMenu+' => 'Log de l\'aplicacao',
|
||||
'Menu:ApplicationLogMenu:Title' => 'Log de l\'aplicacao',
|
||||
'Menu:UserManagementMenu' => 'Gerenciamento Usuario',
|
||||
'Menu:UserManagementMenu+' => 'Gerenciamento usuario',
|
||||
'Menu:ProfilesMenu' => 'Profiles',
|
||||
'Menu:ProfilesMenu+' => 'Profiles',
|
||||
'Menu:ProfilesMenu:Title' => 'Profiles',
|
||||
'Menu:UserAccountsMenu' => 'Contas usuarios',
|
||||
'Menu:UserAccountsMenu+' => 'Contas usuarios',
|
||||
'Menu:UserAccountsMenu:Title' => 'Contas usuarios',
|
||||
'UI:iTopVersion:Short' => 'iTop versão %1$s',
|
||||
'UI:iTopVersion:Long' => 'iTop versão %1$s-%2$s built on %3$s',
|
||||
'UI:PropertiesTab' => 'Propriedades',
|
||||
'UI:OpenDocumentInNewWindow_' => 'Abrir este documento em uma nova janela: %1$s',
|
||||
'UI:DownloadDocument_' => 'Baixar este documento: %1$s',
|
||||
'UI:Document:NoPreview' => 'Nã há visualização disponível para este tipo de documento',
|
||||
'UI:DeadlineMissedBy_duration' => 'Perdido por %1$s',
|
||||
'UI:Deadline_LessThan1Min' => '< 1 min',
|
||||
'UI:Deadline_Minutes' => '%1$d min',
|
||||
'UI:Deadline_Hours_Minutes' => '%1$dh %2$dmin',
|
||||
'UI:Deadline_Days_Hours_Minutes' => '%1$dd %2$dh %3$dmin',
|
||||
'UI:Help' => 'Ajuda',
|
||||
'UI:PasswordConfirm' => '(Confirmar)',
|
||||
'UI:BeforeAdding_Class_ObjectsSaveThisObject' => 'Antes de adicionar mais %1$s objetos, salvar este objeto.',
|
||||
'UI:DisplayThisMessageAtStartup' => 'Visualizar esta mensagem ao entrar',
|
||||
'UI:RelationshipGraph' => 'Visualização gráfica',
|
||||
'UI:RelationshipList' => 'Lista',
|
||||
'UI:OperationCancelled' => 'Operação cancelada',
|
||||
'Portal:Title' => 'Portal do usuário',
|
||||
'Portal:Refresh' => 'Atualizar',
|
||||
'Portal:Back' => 'Voltar',
|
||||
'Portal:CreateNewRequest' => 'Criar uma nova requisição',
|
||||
'Portal:ChangeMyPassword' => 'Alterar minha senha',
|
||||
'Portal:Disconnect' => 'Sair',
|
||||
'Portal:OpenRequests' => 'Minhas requisições abertas',
|
||||
'Portal:ResolvedRequests' => 'Minhas requisições resolvidas',
|
||||
'Portal:SelectService' => 'Selecione um serviço do catálogo:',
|
||||
'Portal:PleaseSelectOneService' => 'Por favor, selecione um serviço',
|
||||
'Portal:SelectSubcategoryFrom_Service' => 'Selecione uma sub-categoria para o serviço %1$s:',
|
||||
'Portal:PleaseSelectAServiceSubCategory' => 'Por favor, selecione uma sub-categoria',
|
||||
'Portal:DescriptionOfTheRequest' => 'Digite a descrição de sua solicitação:',
|
||||
'Portal:TitleRequestDetailsFor_Request' => 'Detalhes para requisição %1$s:',
|
||||
'Portal:NoOpenRequest' => 'Nenhuma requisição neste categoria.',
|
||||
'Portal:Button:CloseTicket' => 'Fechar este ticket',
|
||||
'Portal:EnterYourCommentsOnTicket' => 'Digite os seus comentários sobre a resolução deste incidente:',
|
||||
'Portal:ErrorNoContactForThisUser' => 'Erro: o usuátio atual não está associado com um contato/pessoa. Por favor, contate o administrador.',
|
||||
'Portal:Attachments' => 'Anexos',
|
||||
'Portal:AddAttachment' => ' Adicionar anexos ',
|
||||
'Portal:RemoveAttachment' => ' Remover anexos ',
|
||||
'Portal:Attachment_No_To_Ticket_Name' => 'Anexado #%1$d para %2$s (%3$s)',
|
||||
'Enum:Undefined' => 'Indefinido',
|
||||
'UI:DurationForm_Days_Hours_Minutes_Seconds' => '%1$s Dias %2$s Horas %3$s Minutos %4$s Segundos',
|
||||
'UI:ModifyAllPageTitle' => 'Modificar Todos',
|
||||
'UI:Modify_N_ObjectsOf_Class' => 'Modificando %1$d objetos da classe %2$s',
|
||||
'UI:Modify_M_ObjectsOf_Class_OutOf_N' => 'Modificando %1$d objetos da classe %2$s fora do %3$d',
|
||||
'UI:Menu:ModifyAll' => 'Modificar...',
|
||||
'UI:Button:ModifyAll' => 'Modificar todos',
|
||||
'UI:Button:PreviewModifications' => 'Modificações anteriores >>',
|
||||
'UI:ModifiedObject' => 'Objeto Modificado',
|
||||
'UI:BulkModifyStatus' => 'Operação',
|
||||
'UI:BulkModifyStatus+' => '',
|
||||
'UI:BulkModifyErrors' => 'Erros (se algum)',
|
||||
'UI:BulkModifyErrors+' => '',
|
||||
'UI:BulkModifyStatusOk' => 'Ok',
|
||||
'UI:BulkModifyStatusError' => 'Erro',
|
||||
'UI:BulkModifyStatusModified' => 'Modificado',
|
||||
'UI:BulkModifyStatusSkipped' => 'Ignorado',
|
||||
'UI:BulkModify_Count_DistinctValues' => '%1$d valores distintos:',
|
||||
'UI:BulkModify:Value_Exists_N_Times' => '%1$s, %2$d tempo',
|
||||
'UI:BulkModify:N_MoreValues' => '%1$d mais valores...',
|
||||
'UI:AttemptingToSetAReadOnlyAttribute_Name' => 'Tentativa de definir o campo só de leitura: %1$s',
|
||||
'UI:FailedToApplyStimuli' => 'A ação falhou.',
|
||||
'UI:StimulusModify_N_ObjectsOf_Class' => '%1$s: Modificando %2$d objetos da classe %3$s',
|
||||
'UI:CaseLogTypeYourTextHere' => 'Digite seu texto aqui:',
|
||||
'UI:CaseLog:DateFormat' => 'A-m-d H:i:s',
|
||||
'UI:CaseLog:Header_Date_UserName' => '%1$s - %2$s:',
|
||||
'UI:CaseLog:InitialValue' => 'Valor inicial:',
|
||||
'UI:AttemptingToSetASlaveAttribute_Name' => 'O campo %1$s não é gravável, porque é dominado pela sincronização de dados. Valor não definido.',
|
||||
'UI:ActionNotAllowed' => 'Você não tem permissão para executar esta ação sobre estes objetos.',
|
||||
'UI:BulkAction:NoObjectSelected' => 'Por favor, selecione pelo menos um objeto para realizar esta operação',
|
||||
'UI:AttemptingToChangeASlaveAttribute_Name' => 'O campo %1$s não é gravável, porque é dominado pela sincronização de dados. Relação mantém-se inalterado',
|
||||
));
|
||||
?>
|
||||
386
dictionaries/ru.dictionary.itop.core.php
Normal file
386
dictionaries/ru.dictionary.itop.core.php
Normal file
@@ -0,0 +1,386 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @author Vladimir Shilov <shilow@ukr.net>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'core/cmdb'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
//
|
||||
// Class: CMDBChange
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:CMDBChange' => 'Изменение',
|
||||
'Class:CMDBChange+' => 'Отслеживание изменений',
|
||||
'Class:CMDBChange/Attribute:date' => 'дата',
|
||||
'Class:CMDBChange/Attribute:date+' => 'дата и время регистрации изменений',
|
||||
'Class:CMDBChange/Attribute:userinfo' => 'разная информация',
|
||||
'Class:CMDBChange/Attribute:userinfo+' => 'изменение определённые -вызвавшим-',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOp
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:CMDBChangeOp' => 'Операция изменения',
|
||||
'Class:CMDBChangeOp+' => 'Отслеживание операции изменения',
|
||||
'Class:CMDBChangeOp/Attribute:change' => 'изменение',
|
||||
'Class:CMDBChangeOp/Attribute:change+' => 'изменение',
|
||||
'Class:CMDBChangeOp/Attribute:date' => 'дата',
|
||||
'Class:CMDBChangeOp/Attribute:date+' => 'дата и время изменения',
|
||||
'Class:CMDBChangeOp/Attribute:userinfo' => 'пользователь',
|
||||
'Class:CMDBChangeOp/Attribute:userinfo+' => 'кто сделал изменение',
|
||||
'Class:CMDBChangeOp/Attribute:objclass' => 'класс объекта',
|
||||
'Class:CMDBChangeOp/Attribute:objclass+' => 'класс объекта',
|
||||
'Class:CMDBChangeOp/Attribute:objkey' => 'id объекта',
|
||||
'Class:CMDBChangeOp/Attribute:objkey+' => 'id объекта',
|
||||
'Class:CMDBChangeOp/Attribute:finalclass' => 'тип',
|
||||
'Class:CMDBChangeOp/Attribute:finalclass+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpCreate
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:CMDBChangeOpCreate' => 'создание объекта',
|
||||
'Class:CMDBChangeOpCreate+' => 'Отслеживание создания объекта',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpDelete
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:CMDBChangeOpDelete' => 'удаление объекта',
|
||||
'Class:CMDBChangeOpDelete+' => 'Отслеживание удаления объекта',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpSetAttribute
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:CMDBChangeOpSetAttribute' => 'изменение объекта',
|
||||
'Class:CMDBChangeOpSetAttribute+' => 'Отслеживание изменения объекта',
|
||||
'Class:CMDBChangeOpSetAttribute/Attribute:attcode' => 'Атрибут',
|
||||
'Class:CMDBChangeOpSetAttribute/Attribute:attcode+' => 'код изменённого свойства',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpSetAttributeScalar
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:CMDBChangeOpSetAttributeScalar' => 'изменение свойства',
|
||||
'Class:CMDBChangeOpSetAttributeScalar+' => 'Отслеживание изменения скалярного свойства объекта',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue' => 'Предыдущее значение',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue+' => 'предыдущее значение атрибута',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue' => 'Новое значение',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue+' => 'новое значение атрибута',
|
||||
));
|
||||
// Used by CMDBChangeOp... & derived classes
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Change:ObjectCreated' => 'Объект создан',
|
||||
'Change:ObjectDeleted' => 'Объект удалён',
|
||||
'Change:AttName_SetTo_NewValue_PreviousValue_OldValue' => '%1$s установлено в %2$s (предыдущее значение: %3$s)',
|
||||
'Change:AttName_SetTo' => '%1$s установлено в %2$s',
|
||||
'Change:Text_AppendedTo_AttName' => '%1$s добавлено к %2$s',
|
||||
'Change:AttName_Changed_PreviousValue_OldValue' => '%1$s изменено, предыдущее значение: %2$s',
|
||||
'Change:AttName_Changed' => '%1$s изменено',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpSetAttributeBlob
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:CMDBChangeOpSetAttributeBlob' => 'изменение данных',
|
||||
'Class:CMDBChangeOpSetAttributeBlob+' => 'отслеживание изменения данных',
|
||||
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata' => 'Предыдущие данные',
|
||||
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata+' => 'предыдущее содержимое атрибута',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpSetAttributeText
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:CMDBChangeOpSetAttributeText' => 'изменение текста',
|
||||
'Class:CMDBChangeOpSetAttributeText+' => 'отслеживание изменения текста',
|
||||
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata' => 'Предыдущие данные',
|
||||
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata+' => 'предыдущее содержимое атрибута',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: Event
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:Event' => 'Журнал событий',
|
||||
'Class:Event+' => 'Внутренние событие приложения',
|
||||
'Class:Event/Attribute:message' => 'сообщение',
|
||||
'Class:Event/Attribute:message+' => 'короткое описание собітия',
|
||||
'Class:Event/Attribute:date' => 'дата',
|
||||
'Class:Event/Attribute:date+' => 'дата и время регистрации изменений',
|
||||
'Class:Event/Attribute:userinfo' => 'информация о пользователе',
|
||||
'Class:Event/Attribute:userinfo+' => 'идентификация пользователя, действия которого вызвали это событие',
|
||||
'Class:Event/Attribute:finalclass' => 'тип',
|
||||
'Class:Event/Attribute:finalclass+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: EventNotification
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:EventNotification' => 'Уведомление о событии',
|
||||
'Class:EventNotification+' => 'Отслеживание отосланных уведомлений',
|
||||
'Class:EventNotification/Attribute:trigger_id' => 'Триггер',
|
||||
'Class:EventNotification/Attribute:trigger_id+' => 'учётная запись пользователя',
|
||||
'Class:EventNotification/Attribute:action_id' => 'пользователь',
|
||||
'Class:EventNotification/Attribute:action_id+' => 'учётная запись пользователя',
|
||||
'Class:EventNotification/Attribute:object_id' => 'id объекта',
|
||||
'Class:EventNotification/Attribute:object_id+' => 'id объекта (класс заданный тригером ?)',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: EventNotificationEmail
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:EventNotificationEmail' => 'Отправка сообщений на e-mail',
|
||||
'Class:EventNotificationEmail+' => 'Отслеживание отправленных писем',
|
||||
'Class:EventNotificationEmail/Attribute:to' => 'Кому',
|
||||
'Class:EventNotificationEmail/Attribute:to+' => 'Кому',
|
||||
'Class:EventNotificationEmail/Attribute:cc' => 'Копия',
|
||||
'Class:EventNotificationEmail/Attribute:cc+' => 'Копия',
|
||||
'Class:EventNotificationEmail/Attribute:bcc' => 'Скрытая копия',
|
||||
'Class:EventNotificationEmail/Attribute:bcc+' => 'Скрытая копия',
|
||||
'Class:EventNotificationEmail/Attribute:from' => 'От',
|
||||
'Class:EventNotificationEmail/Attribute:from+' => 'Отправитель сообщения',
|
||||
'Class:EventNotificationEmail/Attribute:subject' => 'Тема',
|
||||
'Class:EventNotificationEmail/Attribute:subject+' => 'Тема',
|
||||
'Class:EventNotificationEmail/Attribute:body' => 'Тело',
|
||||
'Class:EventNotificationEmail/Attribute:body+' => 'Тело',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: EventIssue
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:EventIssue' => 'Выпуск события',
|
||||
'Class:EventIssue+' => 'Отслеживание выпуска (warning, error, др.)',
|
||||
'Class:EventIssue/Attribute:issue' => 'Выпуск',
|
||||
'Class:EventIssue/Attribute:issue+' => 'Что произошло',
|
||||
'Class:EventIssue/Attribute:impact' => 'Воздействие',
|
||||
'Class:EventIssue/Attribute:impact+' => 'Последствия',
|
||||
'Class:EventIssue/Attribute:page' => 'Страница',
|
||||
'Class:EventIssue/Attribute:page+' => 'Точка входа HTTP',
|
||||
'Class:EventIssue/Attribute:arguments_post' => 'Отправленные аргументы',
|
||||
'Class:EventIssue/Attribute:arguments_post+' => 'Аргументы HTTP POST',
|
||||
'Class:EventIssue/Attribute:arguments_get' => 'Аргументы URL',
|
||||
'Class:EventIssue/Attribute:arguments_get+' => 'Аргументы HTTP GET',
|
||||
'Class:EventIssue/Attribute:callstack' => 'Стек?вызовов',
|
||||
'Class:EventIssue/Attribute:callstack+' => 'Стек вызовов',
|
||||
'Class:EventIssue/Attribute:data' => 'Данные',
|
||||
'Class:EventIssue/Attribute:data+' => 'Подробнее',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: EventWebService
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:EventWebService' => 'События Web сервиса',
|
||||
'Class:EventWebService+' => 'Trace of an web service call',
|
||||
'Class:EventWebService/Attribute:verb' => 'Verb',
|
||||
'Class:EventWebService/Attribute:verb+' => 'Название операции',
|
||||
'Class:EventWebService/Attribute:result' => 'Результат',
|
||||
'Class:EventWebService/Attribute:result+' => 'Overall success/failure',
|
||||
'Class:EventWebService/Attribute:log_info' => 'Info log',
|
||||
'Class:EventWebService/Attribute:log_info+' => 'Result info log',
|
||||
'Class:EventWebService/Attribute:log_warning' => 'Warning log',
|
||||
'Class:EventWebService/Attribute:log_warning+' => 'Result warning log',
|
||||
'Class:EventWebService/Attribute:log_error' => 'Error log',
|
||||
'Class:EventWebService/Attribute:log_error+' => 'Result error log',
|
||||
'Class:EventWebService/Attribute:data' => 'Данные',
|
||||
'Class:EventWebService/Attribute:data+' => 'Result data',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: Action
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:Action' => 'Заказное действие',
|
||||
'Class:Action+' => 'Действие определённое пользователем',
|
||||
'Class:Action/Attribute:name' => 'Имя',
|
||||
'Class:Action/Attribute:name+' => '',
|
||||
'Class:Action/Attribute:description' => 'Описание',
|
||||
'Class:Action/Attribute:description+' => '',
|
||||
'Class:Action/Attribute:status' => 'Статус',
|
||||
'Class:Action/Attribute:status+' => 'В производстве или ?',
|
||||
'Class:Action/Attribute:status/Value:test' => 'Проходит проверку',
|
||||
'Class:Action/Attribute:status/Value:test+' => 'Проходит проверку',
|
||||
'Class:Action/Attribute:status/Value:enabled' => 'В производстве',
|
||||
'Class:Action/Attribute:status/Value:enabled+' => 'В производстве',
|
||||
'Class:Action/Attribute:status/Value:disabled' => 'Неактивный',
|
||||
'Class:Action/Attribute:status/Value:disabled+' => 'Неактивный',
|
||||
'Class:Action/Attribute:trigger_list' => 'Связанные триггеры',
|
||||
'Class:Action/Attribute:trigger_list+' => 'Триггеры привызанные к этому действию',
|
||||
'Class:Action/Attribute:finalclass' => 'Тип',
|
||||
'Class:Action/Attribute:finalclass+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: ActionNotification
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:ActionNotification' => 'Уведомление',
|
||||
'Class:ActionNotification+' => 'Уведомление (выдержка)',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: ActionEmail
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:ActionEmail' => 'Уведомление по e-mail',
|
||||
'Class:ActionEmail+' => '',
|
||||
'Class:ActionEmail/Attribute:test_recipient' => 'Проверка получателя',
|
||||
'Class:ActionEmail/Attribute:test_recipient+' => 'Назначение если статус "Test"',
|
||||
'Class:ActionEmail/Attribute:from' => 'От',
|
||||
'Class:ActionEmail/Attribute:from+' => 'Будет отослано в заголовке e-mail',
|
||||
'Class:ActionEmail/Attribute:reply_to' => 'Ответить на',
|
||||
'Class:ActionEmail/Attribute:reply_to+' => 'Будет отослано в заголовке e-mail',
|
||||
'Class:ActionEmail/Attribute:to' => 'Кому',
|
||||
'Class:ActionEmail/Attribute:to+' => 'Получатель e-mail',
|
||||
'Class:ActionEmail/Attribute:cc' => 'Копия',
|
||||
'Class:ActionEmail/Attribute:cc+' => 'Копия',
|
||||
'Class:ActionEmail/Attribute:bcc' => 'Скр. копия',
|
||||
'Class:ActionEmail/Attribute:bcc+' => 'Скрытая копия',
|
||||
'Class:ActionEmail/Attribute:subject' => 'тема',
|
||||
'Class:ActionEmail/Attribute:subject+' => 'Заголовок письма',
|
||||
'Class:ActionEmail/Attribute:body' => 'тело',
|
||||
'Class:ActionEmail/Attribute:body+' => 'Содержимое письма',
|
||||
'Class:ActionEmail/Attribute:importance' => 'значение',
|
||||
'Class:ActionEmail/Attribute:importance+' => 'Флаг значения',
|
||||
'Class:ActionEmail/Attribute:importance/Value:low' => 'низкий',
|
||||
'Class:ActionEmail/Attribute:importance/Value:low+' => 'низкий',
|
||||
'Class:ActionEmail/Attribute:importance/Value:normal' => 'нормальный',
|
||||
'Class:ActionEmail/Attribute:importance/Value:normal+' => 'нормальный',
|
||||
'Class:ActionEmail/Attribute:importance/Value:high' => 'высокий',
|
||||
'Class:ActionEmail/Attribute:importance/Value:high+' => 'высокий',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: Trigger
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:Trigger' => 'Триггер',
|
||||
'Class:Trigger+' => 'Заказной триггер события',
|
||||
'Class:Trigger/Attribute:description' => 'Описание',
|
||||
'Class:Trigger/Attribute:description+' => 'однострочное описание',
|
||||
'Class:Trigger/Attribute:action_list' => 'Действия триггера',
|
||||
'Class:Trigger/Attribute:action_list+' => 'Действия, выполняемые при активации триггера',
|
||||
'Class:Trigger/Attribute:finalclass' => 'Тип',
|
||||
'Class:Trigger/Attribute:finalclass+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: TriggerOnObject
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:TriggerOnObject' => 'Триггер (в зависимости класс)',
|
||||
'Class:TriggerOnObject+' => 'Триггер по даному классу объектов',
|
||||
'Class:TriggerOnObject/Attribute:target_class' => 'Целевой класс',
|
||||
'Class:TriggerOnObject/Attribute:target_class+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: TriggerOnStateChange
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:TriggerOnStateChange' => 'Триггер (на изменение состояния)',
|
||||
'Class:TriggerOnStateChange+' => 'Триггер на изменение состояния объекта',
|
||||
'Class:TriggerOnStateChange/Attribute:state' => 'Статус',
|
||||
'Class:TriggerOnStateChange/Attribute:state+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: TriggerOnStateEnter
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:TriggerOnStateEnter' => 'Триггер (на начало состояния)',
|
||||
'Class:TriggerOnStateEnter+' => 'Триггер на изменению состояния объекта - начало',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: TriggerOnStateLeave
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:TriggerOnStateLeave' => 'Триггер (на окончание состояния)',
|
||||
'Class:TriggerOnStateLeave+' => 'Триггер на изменению состояния объекта - окончание',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: TriggerOnObjectCreate
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:TriggerOnObjectCreate' => 'Триггер (на создание объекта)',
|
||||
'Class:TriggerOnObjectCreate+' => 'Триггер на создание объекта [дочерний класс] данного класса',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: lnkTriggerAction
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:lnkTriggerAction' => 'Действие/Триггер',
|
||||
'Class:lnkTriggerAction+' => 'Связь между триггером и действий',
|
||||
'Class:lnkTriggerAction/Attribute:action_id' => 'Действие',
|
||||
'Class:lnkTriggerAction/Attribute:action_id+' => 'Выполняемое действие',
|
||||
'Class:lnkTriggerAction/Attribute:action_name' => 'Действие',
|
||||
'Class:lnkTriggerAction/Attribute:action_name+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_id' => 'Триггер',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_id+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_name' => 'Триггер',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_name+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:order' => 'Порядок',
|
||||
'Class:lnkTriggerAction/Attribute:order+' => 'Порядок выполнения действий',
|
||||
));
|
||||
|
||||
|
||||
?>
|
||||
871
dictionaries/ru.dictionary.itop.ui.php
Normal file
871
dictionaries/ru.dictionary.itop.ui.php
Normal file
@@ -0,0 +1,871 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @author Vladimir Shilov <shilow@ukr.net>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'gui'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'application'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
//
|
||||
// Class: AuditCategory
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:AuditCategory' => 'Категория аудита',
|
||||
'Class:AuditCategory+' => 'Раздел внутри общего аудита',
|
||||
'Class:AuditCategory/Attribute:name' => 'Название категории',
|
||||
'Class:AuditCategory/Attribute:name+' => 'Краткое название для этой категории',
|
||||
'Class:AuditCategory/Attribute:description' => 'Описание категории аудита',
|
||||
'Class:AuditCategory/Attribute:description+' => 'Полное описание категории аудита',
|
||||
'Class:AuditCategory/Attribute:definition_set' => 'Набор определений',
|
||||
'Class:AuditCategory/Attribute:definition_set+' => 'OQL выражение, определяющее набор объектов для проверки',
|
||||
'Class:AuditCategory/Attribute:rules_list' => 'Правила аудита',
|
||||
'Class:AuditCategory/Attribute:rules_list+' => 'Правила аудита для этой категории',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: AuditRule
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:AuditRule' => 'Правило аудита',
|
||||
'Class:AuditRule+' => 'Правило для проверки данной категории аудита',
|
||||
'Class:AuditRule/Attribute:name' => 'Название правила',
|
||||
'Class:AuditRule/Attribute:name+' => 'Краткое название этого правила',
|
||||
'Class:AuditRule/Attribute:description' => 'Описание правила аудита',
|
||||
'Class:AuditRule/Attribute:description+' => 'Полное описание этого правила аудита',
|
||||
'Class:AuditRule/Attribute:query' => 'Запрос на исполнение',
|
||||
'Class:AuditRule/Attribute:query+' => 'OQL выражение на исполнение',
|
||||
'Class:AuditRule/Attribute:valid_flag' => 'Действительные объекты?',
|
||||
'Class:AuditRule/Attribute:valid_flag+' => 'Истина, если правило возвращает действительный объект, иначе ложь',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:true' => 'истина',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:true+' => 'истина',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:false' => 'ложь',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:false+' => 'ложь',
|
||||
'Class:AuditRule/Attribute:category_id' => 'Категория',
|
||||
'Class:AuditRule/Attribute:category_id+' => 'Категория этого правила',
|
||||
'Class:AuditRule/Attribute:category_name' => 'Категория',
|
||||
'Class:AuditRule/Attribute:category_name+' => 'Название категории для этого правила',
|
||||
));
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'addon/userrights'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
//
|
||||
// Class: User
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:User' => 'Пользователь',
|
||||
'Class:User+' => 'Пользовательский логин',
|
||||
'Class:User/Attribute:finalclass' => 'Тип счёта',
|
||||
'Class:User/Attribute:finalclass+' => '',
|
||||
'Class:User/Attribute:contactid' => 'Контакт (человек)',
|
||||
'Class:User/Attribute:contactid+' => 'Личные данные из бизнес-данных',
|
||||
'Class:User/Attribute:last_name' => 'Фамилия',
|
||||
'Class:User/Attribute:last_name+' => 'Фамилия соответсвующего контакта',
|
||||
'Class:User/Attribute:first_name' => 'Имя',
|
||||
'Class:User/Attribute:first_name+' => 'Имя соответсвующего контакта',
|
||||
'Class:User/Attribute:email' => 'e-mail',
|
||||
'Class:User/Attribute:email+' => 'e-mail соответсвующего контакта',
|
||||
'Class:User/Attribute:login' => 'Логин',
|
||||
'Class:User/Attribute:login+' => 'строка идентификации пользователя',
|
||||
'Class:User/Attribute:language' => 'Язык',
|
||||
'Class:User/Attribute:language+' => 'язык пользователя',
|
||||
'Class:User/Attribute:language/Value:RU RU' => 'Русский',
|
||||
'Class:User/Attribute:language/Value:RU RU+' => 'Русский (Россия)',
|
||||
'Class:User/Attribute:language/Value:EN US' => 'English',
|
||||
'Class:User/Attribute:language/Value:EN US+' => 'English (U.S.)',
|
||||
'Class:User/Attribute:language/Value:FR FR' => 'French',
|
||||
'Class:User/Attribute:language/Value:FR FR+' => 'French (France)',
|
||||
'Class:User/Attribute:profile_list' => 'Профили',
|
||||
'Class:User/Attribute:profile_list+' => 'Роли, предоставление прав этому человеку',
|
||||
'Class:User/Attribute:allowed_org_list' => 'Разрешённые организации',
|
||||
'Class:User/Attribute:allowed_org_list+' => 'Конечный пользователь имеет право видеть данные, принадлежащие к следующим организациям. Если ни одна организация не указан, нет никаких ограничений.',
|
||||
|
||||
'Class:User/Error:LoginMustBeUnique' => 'Логин должен быть уникальным - "%1s" уже используется.',
|
||||
'Class:User/Error:AtLeastOneProfileIsNeeded' => 'По крайней мере, один профиль должен быть отнесен к этому пользователю.',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_Profiles
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:URP_Profiles' => 'Профиль',
|
||||
'Class:URP_Profiles+' => 'Пользовательский профиль',
|
||||
'Class:URP_Profiles/Attribute:name' => 'Название',
|
||||
'Class:URP_Profiles/Attribute:name+' => 'метка',
|
||||
'Class:URP_Profiles/Attribute:description' => 'Описание',
|
||||
'Class:URP_Profiles/Attribute:description+' => 'однострочное описание',
|
||||
'Class:URP_Profiles/Attribute:user_list' => 'Пользователи',
|
||||
'Class:URP_Profiles/Attribute:user_list+' => 'лица, имеющие эту роль',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_Dimensions
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:URP_Dimensions' => 'размерность',
|
||||
'Class:URP_Dimensions+' => 'применение размерности (определение силосов)',
|
||||
'Class:URP_Dimensions/Attribute:name' => 'Название',
|
||||
'Class:URP_Dimensions/Attribute:name+' => 'метка',
|
||||
'Class:URP_Dimensions/Attribute:description' => 'Описание',
|
||||
'Class:URP_Dimensions/Attribute:description+' => 'краткое описание',
|
||||
'Class:URP_Dimensions/Attribute:type' => 'Тип',
|
||||
'Class:URP_Dimensions/Attribute:type+' => 'имя класса или типа данных (проекционный блок)',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_UserProfile
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:URP_UserProfile' => 'Пользователь в профиль',
|
||||
'Class:URP_UserProfile+' => 'профили пользователей',
|
||||
'Class:URP_UserProfile/Attribute:userid' => 'Пользователь',
|
||||
'Class:URP_UserProfile/Attribute:userid+' => 'учетная запись пользователя',
|
||||
'Class:URP_UserProfile/Attribute:userlogin' => 'Логин',
|
||||
'Class:URP_UserProfile/Attribute:userlogin+' => 'Логин пользователя',
|
||||
'Class:URP_UserProfile/Attribute:profileid' => 'Профиль',
|
||||
'Class:URP_UserProfile/Attribute:profileid+' => 'использование профиля',
|
||||
'Class:URP_UserProfile/Attribute:profile' => 'Профиль',
|
||||
'Class:URP_UserProfile/Attribute:profile+' => 'Название профиля',
|
||||
'Class:URP_UserProfile/Attribute:reason' => 'Причина',
|
||||
'Class:URP_UserProfile/Attribute:reason+' => 'объяснение, почему этому человеку назначена эта роль',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_UserOrg
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:URP_UserOrg' => 'Организации пользователя',
|
||||
'Class:URP_UserOrg+' => 'Разрешённые организации',
|
||||
'Class:URP_UserOrg/Attribute:userid' => 'Пользователь',
|
||||
'Class:URP_UserOrg/Attribute:userid+' => 'учетная запись пользователя',
|
||||
'Class:URP_UserOrg/Attribute:userlogin' => 'Логин',
|
||||
'Class:URP_UserOrg/Attribute:userlogin+' => 'Логин пользователя',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_id' => 'Организация',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_id+' => 'Разрешённая организация',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_name' => 'Организация',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_name+' => 'Разрешённая организация',
|
||||
'Class:URP_UserOrg/Attribute:reason' => 'Причина',
|
||||
'Class:URP_UserOrg/Attribute:reason+' => 'объяснение, почему этот человек имеет право видеть данные, принадлежащие к этой организации',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_ProfileProjection
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:URP_ProfileProjection' => 'проэктирование профилей',
|
||||
'Class:URP_ProfileProjection+' => 'проэктирование профилей',
|
||||
'Class:URP_ProfileProjection/Attribute:dimensionid' => 'Размерность',
|
||||
'Class:URP_ProfileProjection/Attribute:dimensionid+' => 'применение размерности',
|
||||
'Class:URP_ProfileProjection/Attribute:dimension' => 'Размерность',
|
||||
'Class:URP_ProfileProjection/Attribute:dimension+' => 'применение размерности',
|
||||
'Class:URP_ProfileProjection/Attribute:profileid' => 'Профиль',
|
||||
'Class:URP_ProfileProjection/Attribute:profileid+' => 'использование профиля',
|
||||
'Class:URP_ProfileProjection/Attribute:profile' => 'Профиль',
|
||||
'Class:URP_ProfileProjection/Attribute:profile+' => 'Название профиля',
|
||||
'Class:URP_ProfileProjection/Attribute:value' => 'Значение выражения',
|
||||
'Class:URP_ProfileProjection/Attribute:value+' => 'OQL выражение (используя $user) | константа | | +атрибут кода',
|
||||
'Class:URP_ProfileProjection/Attribute:attribute' => 'Атрибут',
|
||||
'Class:URP_ProfileProjection/Attribute:attribute+' => 'Целевой атрибут кода (необязательный)',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_ClassProjection
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:URP_ClassProjection' => 'прожктирование классов',
|
||||
'Class:URP_ClassProjection+' => 'прожктирование классов',
|
||||
'Class:URP_ClassProjection/Attribute:dimensionid' => 'Размерность',
|
||||
'Class:URP_ClassProjection/Attribute:dimensionid+' => 'применение размерности',
|
||||
'Class:URP_ClassProjection/Attribute:dimension' => 'Размерность',
|
||||
'Class:URP_ClassProjection/Attribute:dimension+' => 'применение размерности',
|
||||
'Class:URP_ClassProjection/Attribute:class' => 'Класс',
|
||||
'Class:URP_ClassProjection/Attribute:class+' => 'Целевой класс',
|
||||
'Class:URP_ClassProjection/Attribute:value' => 'Значение выражения',
|
||||
'Class:URP_ClassProjection/Attribute:value+' => 'OQL выражение (используя $this) | константа | | +атрибут кода',
|
||||
'Class:URP_ClassProjection/Attribute:attribute' => 'Атрибут',
|
||||
'Class:URP_ClassProjection/Attribute:attribute+' => 'Целевой атрибут кода (необязательный)',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_ActionGrant
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:URP_ActionGrant' => 'действие разрешений',
|
||||
'Class:URP_ActionGrant+' => 'разрешения на классы',
|
||||
'Class:URP_ActionGrant/Attribute:profileid' => 'Профиль',
|
||||
'Class:URP_ActionGrant/Attribute:profileid+' => 'использование профиля',
|
||||
'Class:URP_ActionGrant/Attribute:profile' => 'Профиль',
|
||||
'Class:URP_ActionGrant/Attribute:profile+' => 'использование профиля',
|
||||
'Class:URP_ActionGrant/Attribute:class' => 'Класс',
|
||||
'Class:URP_ActionGrant/Attribute:class+' => 'Целевой класс',
|
||||
'Class:URP_ActionGrant/Attribute:permission' => 'Разрешения',
|
||||
'Class:URP_ActionGrant/Attribute:permission+' => 'разрешено или нет?',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:yes' => 'да',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:yes+' => 'да',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:no' => 'нет',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:no+' => 'нет',
|
||||
'Class:URP_ActionGrant/Attribute:action' => 'Действие',
|
||||
'Class:URP_ActionGrant/Attribute:action+' => 'действие выполняемое на данном классе',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_StimulusGrant
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:URP_StimulusGrant' => 'разрешения стимулов',
|
||||
'Class:URP_StimulusGrant+' => 'разрешения на стимулы в жизненном цикле объекта',
|
||||
'Class:URP_StimulusGrant/Attribute:profileid' => 'Профиль',
|
||||
'Class:URP_StimulusGrant/Attribute:profileid+' => 'использование профиля',
|
||||
'Class:URP_StimulusGrant/Attribute:profile' => 'Профиль',
|
||||
'Class:URP_StimulusGrant/Attribute:profile+' => 'использование профиля',
|
||||
'Class:URP_StimulusGrant/Attribute:class' => 'Класс',
|
||||
'Class:URP_StimulusGrant/Attribute:class+' => 'Целевой класс',
|
||||
'Class:URP_StimulusGrant/Attribute:permission' => 'Разрешения',
|
||||
'Class:URP_StimulusGrant/Attribute:permission+' => 'разрешено или нет?',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:yes' => 'да',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:yes+' => 'да',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:no' => 'нет',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:no+' => 'нет',
|
||||
'Class:URP_StimulusGrant/Attribute:stimulus' => 'Стимулы',
|
||||
'Class:URP_StimulusGrant/Attribute:stimulus+' => 'код стимулов',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_AttributeGrant
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:URP_AttributeGrant' => 'разрешения атрибутов',
|
||||
'Class:URP_AttributeGrant+' => 'разрешения на уровне атрибутов',
|
||||
'Class:URP_AttributeGrant/Attribute:actiongrantid' => 'Действие предоставления',
|
||||
'Class:URP_AttributeGrant/Attribute:actiongrantid+' => 'действие предоставления',
|
||||
'Class:URP_AttributeGrant/Attribute:attcode' => 'Атрибут',
|
||||
'Class:URP_AttributeGrant/Attribute:attcode+' => 'Код атрибута',
|
||||
));
|
||||
|
||||
//
|
||||
// String from the User Interface: menu, messages, buttons, etc...
|
||||
//
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Menu:WelcomeMenu' => 'Добро пожаловать',
|
||||
'Menu:WelcomeMenu+' => 'Добро пожаловать в iTop',
|
||||
'Menu:WelcomeMenuPage' => 'Добро пожаловать',
|
||||
'Menu:WelcomeMenuPage+' => 'Добро пожаловать в iTop',
|
||||
'UI:WelcomeMenu:Title' => 'Добро пожаловать в iTop',
|
||||
|
||||
'UI:WelcomeMenu:LeftBlock' => '<p>iTop is a complete, OpenSource, IT Operational Portal.</p>
|
||||
<ul>Он включает:
|
||||
<li>A complete CMDB (Configuration management database) to document and manage the IT inventory.</li>
|
||||
<li>Модуль управления инцидентами для отслеживания и общения по вопросам IT.</li>
|
||||
<li>Модуль управления изменениями для планирования и отслеживания изменений в IT.</li>
|
||||
<li>База данных известных ошибок для ускорения устранения инцидентов.</li>
|
||||
<li>Модуль простоев для документирования всех запланированных простоев и оповещения соответстсвующих контактов.</li>
|
||||
<li>Панели для быстрого обзора IT.</li>
|
||||
</ul>
|
||||
<p>Все модули могут быть настроены, шаг за шагом, независмо друг от друга.</p>',
|
||||
|
||||
'UI:WelcomeMenu:RightBlock' => '<p>iTop ориентирован на предоставления сервисов, он позволяет IT специалистам легко управляться с несколькими заказчиками или организациями.
|
||||
<ul>iTop обеспечивает многофункциональный набор бизнес-процессов, которые:
|
||||
<li>Повышает эффективность управления IT</li>
|
||||
<li>Повышает производительность IT-операция</li>
|
||||
<li>Улучшает удовлетворенность клиентов и обеспечивает понимание бизнес-процессов.</li>
|
||||
</ul>
|
||||
</p>
|
||||
<p>iTop полностью открыт для интеграции в рамках текущего управления ИТ-инфраструктурой.</p>
|
||||
<p>
|
||||
<ul>Внедрение ИТ-портала нового поколения поможет вам:
|
||||
<li>Лучше управлять более и более сложными ИТ-окружениями.</li>
|
||||
<li>Реализовывать процессы ITIL в ваем собственном темпе.</li>
|
||||
<li>Управлять наиболее важнім активом ИТ: документацией.</li>
|
||||
</ul>
|
||||
</p>',
|
||||
'UI:WelcomeMenu:AllOpenRequests' => 'Открытые запросы: %1$d',
|
||||
'UI:WelcomeMenu:MyCalls' => 'Мои запросы',
|
||||
'UI:WelcomeMenu:OpenIncidents' => 'Открытые инциденты: %1$d',
|
||||
'UI:WelcomeMenu:AllConfigItems' => 'Кофигурационные единицы: %1$d',
|
||||
'UI:WelcomeMenu:MyIncidents' => 'Инциденты назначенные на меня',
|
||||
'UI:AllOrganizations' => ' Все организации ',
|
||||
'UI:YourSearch' => 'Ваш поиск',
|
||||
'UI:LoggedAsMessage' => 'Вы вошли как %1$s',
|
||||
'UI:LoggedAsMessage+Admin' => 'Вы вошли как %1$s (Администратор)',
|
||||
'UI:Button:Logoff' => 'Выход',
|
||||
'UI:Button:GlobalSearch' => 'Поиск',
|
||||
'UI:Button:Search' => ' Поиск ',
|
||||
'UI:Button:Query' => ' Запрос ',
|
||||
'UI:Button:Ok' => 'Ok',
|
||||
'UI:Button:Cancel' => 'Отмена',
|
||||
'UI:Button:Apply' => 'Применить',
|
||||
'UI:Button:Back' => ' << Назад ',
|
||||
'UI:Button:Next' => ' Вперёд >> ',
|
||||
'UI:Button:Finish' => ' Конец ',
|
||||
'UI:Button:DoImport' => ' Выполнить импорт ! ',
|
||||
'UI:Button:Done' => ' Сделать ',
|
||||
'UI:Button:SimulateImport' => ' Эмулировать импорт ',
|
||||
'UI:Button:Test' => 'Тестировать!',
|
||||
'UI:Button:Evaluate' => ' Оценка ',
|
||||
'UI:Button:AddObject' => ' Добавить... ',
|
||||
'UI:Button:BrowseObjects' => ' Обзор... ',
|
||||
'UI:Button:Add' => ' Добавить ',
|
||||
'UI:Button:AddToList' => ' << Добавить ',
|
||||
'UI:Button:RemoveFromList' => ' Удалить >> ',
|
||||
'UI:Button:FilterList' => ' Фильтр... ',
|
||||
'UI:Button:Create' => ' Создать ',
|
||||
'UI:Button:Delete' => ' Удалить ! ',
|
||||
'UI:Button:ChangePassword' => ' Сменить пароль ',
|
||||
'UI:Button:ResetPassword' => ' Сбросить пароль ',
|
||||
|
||||
'UI:SearchToggle' => 'Поиск',
|
||||
'UI:ClickToCreateNew' => 'Создать новый %1$s',
|
||||
'UI:SearchFor_Class' => 'Поиск для %1$s объектов',
|
||||
'UI:NoObjectToDisplay' => 'Нет объектов для отображения.',
|
||||
'UI:Error:MandatoryTemplateParameter_object_id' => 'Параметр object_id является обязательным если указан link_attr. Проверьте определение отображения шаблона.',
|
||||
'UI:Error:MandatoryTemplateParameter_target_attr' => 'Параметр object_id является обязательным если указан link_attr. Проверьте определение отображения шаблона',
|
||||
'UI:Error:MandatoryTemplateParameter_group_by' => 'Параметр group_by является обязательным. Проверьте определение отображения шаблона.',
|
||||
'UI:Error:InvalidGroupByFields' => 'Неверный список полей для группировки: "%1$s".',
|
||||
'UI:Error:UnsupportedStyleOfBlock' => 'Ошибка: неподдерживаемый стиль блока: "%1$s".',
|
||||
'UI:Error:IncorrectLinkDefinition_LinkedClass_Class' => 'Неправильное определение ссылки: класс объектов для управления: %1$s не был найден в качестве внешнего ключа в классе %2$s',
|
||||
'UI:Error:Object_Class_Id_NotFound' => 'Объект: %1$s:%2$d не найден.',
|
||||
'UI:Error:WizardCircularReferenceInDependencies' => 'Ошибка: Циклическая ссылка в зависимостях между полями, проверить модель данных.',
|
||||
'UI:Error:UploadedFileTooBig' => 'Загружаемый файл слишком большой. (Максимально разрешённый размер %1$s). Проверьте в конфинурации PHP параметры upload_max_filesize и post_max_size.',
|
||||
'UI:Error:UploadedFileTruncated.' => 'Загруженный файл был усечен !',
|
||||
'UI:Error:NoTmpDir' => 'Временный каталог не определен.',
|
||||
'UI:Error:CannotWriteToTmp_Dir' => ' Невозможно записать временный файл на диск. upload_tmp_dir = "%1$s".',
|
||||
'UI:Error:UploadStoppedByExtension_FileName' => 'Загрузка остановлена по расширению. (Имя файла = "%1$s").',
|
||||
'UI:Error:UploadFailedUnknownCause_Code' => 'Загрузка файла не удалась по неизвестной причине. (Код ошибки = "%1$s").',
|
||||
|
||||
'UI:Error:1ParametersMissing' => 'Ошибка: следующий параметр должен быть указан для этой операции: %1$s.',
|
||||
'UI:Error:2ParametersMissing' => 'Ошибка: следующие параметры должен быть указан для этой операции: %1$s и %2$s.',
|
||||
'UI:Error:3ParametersMissing' => 'Ошибка: следующие параметры должен быть указан для этой операции: %1$s, %2$s и %3$s.',
|
||||
'UI:Error:4ParametersMissing' => 'Ошибка: следующие параметры должен быть указан для этой операции: %1$s, %2$s, %3$s и %4$s.',
|
||||
'UI:Error:IncorrectOQLQuery_Message' => 'Ошибка: неправильній запрос OQL: %1$s',
|
||||
'UI:Error:AnErrorOccuredWhileRunningTheQuery_Message' => 'Ошибка при выполнении запроса: %1$s',
|
||||
'UI:Error:ObjectAlreadyUpdated' => 'Ошибка: объект уже обновлён.',
|
||||
'UI:Error:ObjectCannotBeUpdated' => 'Ошибка: объект не может быть обновлён.',
|
||||
'UI:Error:ObjectsAlreadyDeleted' => 'Ошибка: объект уже удалён!',
|
||||
'UI:Error:BulkDeleteNotAllowedOn_Class' => 'Вам не разрешено выполнять массовое удаления объектов класса %1$s',
|
||||
'UI:Error:DeleteNotAllowedOn_Class' => 'Вы не можете удалять объекты класса %1$s',
|
||||
'UI:Error:BulkModifyNotAllowedOn_Class' => 'Вам не разрешено выполнять массовое обновление объектов класса %1$s',
|
||||
'UI:Error:ObjectAlreadyCloned' => 'Ошибка: объект уже клонирован!',
|
||||
'UI:Error:ObjectAlreadyCreated' => 'Ошибка: объект уже создан!',
|
||||
'UI:Error:Invalid_Stimulus_On_Object_In_State' => 'Ошибка: недействительный стимул "%1$s" на объекте %2$s в состоянии "%3$s".',
|
||||
|
||||
|
||||
'UI:GroupBy:Count' => 'Счётчик',
|
||||
'UI:GroupBy:Count+' => 'Количество элементов',
|
||||
'UI:CountOfObjects' => '%1$d объектов соответствует критериям.',
|
||||
'UI_CountOfObjectsShort' => '%1$d объектов.',
|
||||
'UI:NoObject_Class_ToDisplay' => 'Нечего отображать %1$s',
|
||||
'UI:History:LastModified_On_By' => 'Последнее изменение %1$s by %2$s.',
|
||||
'UI:HistoryTab' => 'История',
|
||||
'UI:NotificationsTab' => 'Оповещения',
|
||||
'UI:History:Date' => 'Дата',
|
||||
'UI:History:Date+' => 'Дата изменения',
|
||||
'UI:History:User' => 'Пользователь',
|
||||
'UI:History:User+' => 'Пользователь сделавший изменение',
|
||||
'UI:History:Changes' => 'Изменения',
|
||||
'UI:History:Changes+' => 'Изменения, внесенные в объект',
|
||||
'UI:Loading' => 'Загрузка...',
|
||||
'UI:Menu:Actions' => 'Действия',
|
||||
'UI:Menu:New' => 'Новый...',
|
||||
'UI:Menu:Add' => 'Добавить...',
|
||||
'UI:Menu:Manage' => 'Управление...',
|
||||
'UI:Menu:EMail' => 'eMail',
|
||||
'UI:Menu:CSVExport' => 'Экспорт CSV',
|
||||
'UI:Menu:Modify' => 'Изменить...',
|
||||
'UI:Menu:Delete' => 'Удалить...',
|
||||
'UI:Menu:Manage' => 'Управление...',
|
||||
'UI:Menu:BulkDelete' => 'Удалить...',
|
||||
'UI:UndefinedObject' => 'неопределённый',
|
||||
'UI:Document:OpenInNewWindow:Download' => 'Открыть в новом окне: %1$s, Загрузка: %2$s',
|
||||
'UI:SelectAllToggle+' => 'Выбрать / Отменить всё',
|
||||
'UI:TruncatedResults' => '%1$d объектов отображено из %2$d',
|
||||
'UI:DisplayAll' => 'Показать всё',
|
||||
'UI:CollapseList' => 'Свернуть',
|
||||
'UI:CountOfResults' => '%1$d объект(ы)',
|
||||
'UI:ChangesLogTitle' => 'Журнал изменений (%1$d):',
|
||||
'UI:EmptyChangesLogTitle' => 'Журнал изменений пустой',
|
||||
'UI:SearchFor_Class_Objects' => 'Поиск объекта %1$s',
|
||||
'UI:OQLQueryBuilderTitle' => 'Коструктор запросов OQL',
|
||||
'UI:OQLQueryTab' => 'Запрос OQL',
|
||||
'UI:SimpleSearchTab' => 'Простой поиск',
|
||||
'UI:Details+' => 'Подробности',
|
||||
'UI:SearchValue:Any' => '* Любой *',
|
||||
'UI:SearchValue:Mixed' => '* смешанный *',
|
||||
'UI:SelectOne' => '-- выбрать один --',
|
||||
'UI:Login:Welcome' => 'Добро пожаловать в iTop!',
|
||||
'UI:Login:IncorrectLoginPassword' => 'Неправильный логин/пароль. Пожалуйста, попробуйте еще раз.',
|
||||
'UI:Login:IdentifyYourself' => 'Представтесть, прежде чем продолжить',
|
||||
'UI:Login:UserNamePrompt' => 'Имя пользователя',
|
||||
'UI:Login:PasswordPrompt' => 'Пароль',
|
||||
'UI:Login:ChangeYourPassword' => 'Изменение пароля',
|
||||
'UI:Login:OldPasswordPrompt' => 'Старый пароль',
|
||||
'UI:Login:NewPasswordPrompt' => 'Новый пароль',
|
||||
'UI:Login:RetypeNewPasswordPrompt' => 'Повтор нового пароля',
|
||||
'UI:Login:IncorrectOldPassword' => 'Ошибка: старый пароль неверный',
|
||||
'UI:LogOffMenu' => 'Выход',
|
||||
'UI:LogOff:ThankYou' => 'Спасибо за использование iTop',
|
||||
'UI:LogOff:ClickHereToLoginAgain' => 'Нажмите здесь, чтобы снова войти...',
|
||||
'UI:ChangePwdMenu' => 'Изменить пароль...',
|
||||
'UI:Login:RetypePwdDoesNotMatch' => 'Новый пароль и повторный пароль не совпадают!',
|
||||
'UI:Button:Login' => 'Введите iTop',
|
||||
'UI:Login:Error:AccessRestricted' => 'Доступ к iTop ограничен. Пожалуйста, свяжитесь с администратором iTop.',
|
||||
'UI:Login:Error:AccessAdmin' => 'Доступ ограничен для лиц с административными привилегиями. Пожалуйста, свяжитесь с администратором iTop.',
|
||||
'UI:CSVImport:MappingSelectOne' => '-- выбрать один --',
|
||||
'UI:CSVImport:MappingNotApplicable' => '-- игнорировать это поле --',
|
||||
'UI:CSVImport:NoData' => 'Пустой набор данных..., пожалуйста введите что-нибудь!',
|
||||
'UI:Title:DataPreview' => 'Предпросмотр данных',
|
||||
'UI:CSVImport:ErrorOnlyOneColumn' => 'Ошибка: Данные содежат только одну колонку. Выбран правильный разделитель?',
|
||||
'UI:CSVImport:FieldName' => 'Поле %1$d',
|
||||
'UI:CSVImport:DataLine1' => 'Строка данных 1',
|
||||
'UI:CSVImport:DataLine2' => 'Строка данных 2',
|
||||
'UI:CSVImport:idField' => 'id (Первичный ключ)',
|
||||
'UI:Title:BulkImport' => 'iTop - Пакетный импорт',
|
||||
'UI:Title:BulkImport+' => 'Мастер импорта CSV',
|
||||
'UI:CSVImport:ClassesSelectOne' => '-- выбрать один --',
|
||||
'UI:CSVImport:ErrorExtendedAttCode' => 'Внутренняя ошибка: "%1$s" некорректный код потому, что "%2$s" НЕ являеться внешним ключём класса "%3$s"',
|
||||
'UI:CSVImport:ObjectsWillStayUnchanged' => '%1$d объект(ы) останеться неизменным.',
|
||||
'UI:CSVImport:ObjectsWillBeModified' => '%1$d объект(ы) будет изменён.',
|
||||
'UI:CSVImport:ObjectsWillBeAdded' => '%1$d объект(ы) будет добавлен.',
|
||||
'UI:CSVImport:ObjectsWillHaveErrors' => '%1$d объект(ы) будут ошибочны.',
|
||||
'UI:CSVImport:ObjectsRemainedUnchanged' => '%1$d объект(ы) остался неизменённым.',
|
||||
'UI:CSVImport:ObjectsWereModified' => '%1$d объект(ы) изменён.',
|
||||
'UI:CSVImport:ObjectsWereAdded' => '%1$d объект(ы) был добавлен.',
|
||||
'UI:CSVImport:ObjectsHadErrors' => '%1$d объект(ы) содержит ошибки.',
|
||||
'UI:Title:CSVImportStep2' => 'Step 2 of 5: Опции данных CSV',
|
||||
'UI:Title:CSVImportStep3' => 'Step 3 of 5: Распределение данных',
|
||||
'UI:Title:CSVImportStep4' => 'Step 4 of 5: Симуляция импорта',
|
||||
'UI:Title:CSVImportStep5' => 'Step 5 of 5: Импорт завершён',
|
||||
'UI:CSVImport:LinesNotImported' => 'Строки небыли загружены:',
|
||||
'UI:CSVImport:LinesNotImported+' => 'Следующие строки не были импортированы, потому что они содержат ошибки',
|
||||
'UI:CSVImport:SeparatorComma+' => ', (запятая)',
|
||||
'UI:CSVImport:SeparatorSemicolon+' => '; (точка с запятой)',
|
||||
'UI:CSVImport:SeparatorTab+' => 'табулятор',
|
||||
'UI:CSVImport:SeparatorOther' => 'другое:',
|
||||
'UI:CSVImport:QualifierDoubleQuote+' => '" (двойная кавычка)',
|
||||
'UI:CSVImport:QualifierSimpleQuote+' => '\' (одинарная кавычка)',
|
||||
'UI:CSVImport:QualifierOther' => 'другое:',
|
||||
'UI:CSVImport:TreatFirstLineAsHeader' => 'Использовать первую строку как заголовок (названия столбцов)',
|
||||
'UI:CSVImport:Skip_N_LinesAtTheBeginning' => 'Пропустить %1$s строк(у) от начала файла',
|
||||
'UI:CSVImport:CSVDataPreview' => 'Предпросмотр данных CSV',
|
||||
'UI:CSVImport:SelectFile' => 'Выбор файла для иморта:',
|
||||
'UI:CSVImport:Tab:LoadFromFile' => 'Загрузить из файла',
|
||||
'UI:CSVImport:Tab:CopyPaste' => 'Копировать и вставить данные',
|
||||
'UI:CSVImport:Tab:Templates' => 'Шаблоны',
|
||||
'UI:CSVImport:PasteData' => 'Вставить данные для импорта:',
|
||||
'UI:CSVImport:PickClassForTemplate' => 'Выбор шаблона для загрузки: ',
|
||||
'UI:CSVImport:SeparatorCharacter' => 'Символ разделителя:',
|
||||
'UI:CSVImport:TextQualifierCharacter' => 'Символ экранирования текста',
|
||||
'UI:CSVImport:CommentsAndHeader' => 'Коментарии и заголовок',
|
||||
'UI:CSVImport:SelectClass' => 'Выбор класса импорта:',
|
||||
'UI:CSVImport:AdvancedMode' => 'Расширенный режим',
|
||||
'UI:CSVImport:AdvancedMode+' => 'В расширенном режиме "id" (первичный ключ) объекта может быть использован для обновления и переименования объектов.' .
|
||||
'Однако колонка "id" (if present) может быть использовать только как критерий поиска и не модет быть совмещена с любым другим критерием поиска.',
|
||||
'UI:CSVImport:SelectAClassFirst' => 'Для настройки рапределения, в первую очередь выберите класс.',
|
||||
'UI:CSVImport:HeaderFields' => 'Поля',
|
||||
'UI:CSVImport:HeaderMappings' => 'Распределение',
|
||||
'UI:CSVImport:HeaderSearch' => 'Поиск?',
|
||||
'UI:CSVImport:AlertIncompleteMapping' => 'Необходимо выбрать распределение для каждой ячейки.',
|
||||
'UI:CSVImport:AlertNoSearchCriteria' => 'Необходимо выбрать, по крайней мере один критерий',
|
||||
'UI:CSVImport:Encoding' => 'Кодировка символов',
|
||||
'UI:UniversalSearchTitle' => 'iTop - Универсальный поиск',
|
||||
'UI:UniversalSearch:Error' => 'Ошибка: %1$s',
|
||||
'UI:UniversalSearch:LabelSelectTheClass' => 'Выбор класса для поиска: ',
|
||||
|
||||
'UI:Audit:Title' => 'iTop - Аудит CMDB',
|
||||
'UI:Audit:InteractiveAudit' => 'Интерактивный аудит',
|
||||
'UI:Audit:HeaderAuditRule' => 'Правило аудита',
|
||||
'UI:Audit:HeaderNbObjects' => '# Объекты',
|
||||
'UI:Audit:HeaderNbErrors' => '# Ошибки',
|
||||
'UI:Audit:PercentageOk' => '% Ok',
|
||||
|
||||
'UI:RunQuery:Title' => 'iTop - Оценка запросов OQL',
|
||||
'UI:RunQuery:QueryExamples' => 'Примеры запросов',
|
||||
'UI:RunQuery:HeaderPurpose' => 'Цель',
|
||||
'UI:RunQuery:HeaderPurpose+' => 'Объяснение запросов',
|
||||
'UI:RunQuery:HeaderOQLExpression' => 'Выражение OQL',
|
||||
'UI:RunQuery:HeaderOQLExpression+' => 'Запрос в синтаксисе OQL',
|
||||
'UI:RunQuery:ExpressionToEvaluate' => 'Оценка віражения: ',
|
||||
'UI:RunQuery:MoreInfo' => 'Подробная информация о запросе: ',
|
||||
'UI:RunQuery:DevelopedQuery' => 'Переработанное выражение запроса: ',
|
||||
'UI:RunQuery:SerializedFilter' => 'Сериализованные фильты: ',
|
||||
'UI:RunQuery:Error' => 'Ошибка при выполнении запроса: %1$s',
|
||||
|
||||
'UI:Schema:Title' => 'iTop схема объектов',
|
||||
'UI:Schema:CategoryMenuItem' => 'Категория <b>%1$s</b>',
|
||||
'UI:Schema:Relationships' => 'Отношения',
|
||||
'UI:Schema:AbstractClass' => 'Абстрактный класс: ни один объект из этого класса может быть создан.',
|
||||
'UI:Schema:NonAbstractClass' => 'Не абстрактный класс: объекты этого класса могут быть созданы.',
|
||||
'UI:Schema:ClassHierarchyTitle' => 'Иерархия классов',
|
||||
'UI:Schema:AllClasses' => 'Все классы',
|
||||
'UI:Schema:ExternalKey_To' => 'Внешний ключ %1$s',
|
||||
'UI:Schema:Columns_Description' => 'Столбцы: <em>%1$s</em>',
|
||||
'UI:Schema:Default_Description' => 'По умолчанию: "%1$s"',
|
||||
'UI:Schema:NullAllowed' => 'Null разрешён',
|
||||
'UI:Schema:NullNotAllowed' => 'Null НЕ разрешён',
|
||||
'UI:Schema:Attributes' => 'Атрибуты',
|
||||
'UI:Schema:AttributeCode' => 'Код атрибута',
|
||||
'UI:Schema:AttributeCode+' => 'Внутренний код атрибута',
|
||||
'UI:Schema:Label' => 'Метка',
|
||||
'UI:Schema:Label+' => 'Метка атрибута',
|
||||
'UI:Schema:Type' => 'Тип',
|
||||
|
||||
'UI:Schema:Type+' => 'Тип данных атрибута',
|
||||
'UI:Schema:Origin' => 'Происхождение',
|
||||
'UI:Schema:Origin+' => 'Базовый класс, в котором этот атрибут определен',
|
||||
'UI:Schema:Description' => 'Описание',
|
||||
'UI:Schema:Description+' => 'Описание атрибута',
|
||||
'UI:Schema:AllowedValues' => 'Допустимые значения',
|
||||
'UI:Schema:AllowedValues+' => 'Ограничения на возможные значения для этого атрибута',
|
||||
'UI:Schema:MoreInfo' => 'Подробнее',
|
||||
'UI:Schema:MoreInfo+' => 'Более подробная информация о поле, определённом в базе данных',
|
||||
'UI:Schema:SearchCriteria' => 'Критерий поиска',
|
||||
'UI:Schema:FilterCode' => 'Код фильтра',
|
||||
'UI:Schema:FilterCode+' => 'Код критерия поиска',
|
||||
'UI:Schema:FilterDescription' => 'Описание',
|
||||
'UI:Schema:FilterDescription+' => 'Описание еритерия поиска',
|
||||
'UI:Schema:AvailOperators' => 'Доступные операторы',
|
||||
'UI:Schema:AvailOperators+' => 'Возможные операторы для этого критерия поиска',
|
||||
'UI:Schema:ChildClasses' => 'Дочерние классы',
|
||||
'UI:Schema:ReferencingClasses' => 'Привязки классов',
|
||||
'UI:Schema:RelatedClasses' => 'Зависимые классы',
|
||||
'UI:Schema:LifeCycle' => 'Жизненный цикл',
|
||||
'UI:Schema:Triggers' => 'Триггеры',
|
||||
'UI:Schema:Relation_Code_Description' => 'Зависимость <em>%1$s</em> (%2$s)',
|
||||
'UI:Schema:RelationDown_Description' => 'Вниз: %1$s',
|
||||
'UI:Schema:RelationUp_Description' => 'Вверх: %1$s',
|
||||
'UI:Schema:RelationPropagates' => '%1$s: распространяется на %2$d уровней, запрос: %3$s',
|
||||
'UI:Schema:RelationDoesNotPropagate' => '%1$s: не распространяется (%2$d уровней), запрос: %3$s',
|
||||
'UI:Schema:Class_ReferencingClasses_From_By' => '%1$s связан с классом %2$s через поле %3$s',
|
||||
'UI:Schema:Class_IsLinkedTo_Class_Via_ClassAndAttribute' => '%1$s связан с %2$s через %3$s::<em>%4$s</em>',
|
||||
'UI:Schema:Links:1-n' => 'Классы, указывающие на %1$s (1:n ссылки):',
|
||||
'UI:Schema:Links:n-n' => 'Классы связаны с %1$s (n:n сслыки):',
|
||||
'UI:Schema:Links:All' => 'График всех связанных классов',
|
||||
'UI:Schema:NoLifeCyle' => 'Не определён жизненный цикл для этих классов.',
|
||||
'UI:Schema:LifeCycleTransitions' => 'Переходы',
|
||||
'UI:Schema:LifeCyleAttributeOptions' => 'Варианты атрибутов',
|
||||
'UI:Schema:LifeCycleHiddenAttribute' => 'Скрытый',
|
||||
'UI:Schema:LifeCycleReadOnlyAttribute' => 'Только для чтения',
|
||||
'UI:Schema:LifeCycleMandatoryAttribute' => 'Обязательный',
|
||||
'UI:Schema:LifeCycleAttributeMustChange' => 'Необходимо изменить',
|
||||
'UI:Schema:LifeCycleAttributeMustPrompt' => 'Пользователю будет предложено изменить значение',
|
||||
'UI:Schema:LifeCycleEmptyList' => 'пустой список',
|
||||
|
||||
'UI:LinksWidget:Autocomplete+' => 'Введите первые 3 символа...',
|
||||
'UI:Combo:SelectValue' => '--- выбор значения ---',
|
||||
'UI:Label:SelectedObjects' => 'Выбранные объекты: ',
|
||||
'UI:Label:AvailableObjects' => 'Доступные объекты: ',
|
||||
'UI:Link_Class_Attributes' => '%1$s атрибуты',
|
||||
'UI:SelectAllToggle+' => 'Выбрать всё / Отменить всё',
|
||||
'UI:AddObjectsOf_Class_LinkedWith_Class_Instance' => 'Добавить %1$s объекты связанные с %2$s: %3$s',
|
||||
'UI:AddObjectsOf_Class_LinkedWith_Class' => 'Добавть %1$s объекты для связи с %2$s',
|
||||
'UI:ManageObjectsOf_Class_LinkedWith_Class_Instance' => 'Управление %1$s объектами связанными с %2$s: %3$s',
|
||||
'UI:AddLinkedObjectsOf_Class' => 'Добавить %1$ss...',
|
||||
'UI:RemoveLinkedObjectsOf_Class' => 'Удалить выбранные объекты',
|
||||
'UI:Message:EmptyList:UseAdd' => 'Список пуст, используй кнопку "Добавить ...", для добавения элементов.',
|
||||
'UI:Message:EmptyList:UseSearchForm' => 'Используйте форму поиска выше для поиска объектов, которые будут добавлены.',
|
||||
|
||||
'UI:Wizard:FinalStepTitle' => 'Последний шаг: подтверждение',
|
||||
'UI:Title:DeletionOf_Object' => 'Удаление %1$s',
|
||||
'UI:Title:BulkDeletionOf_Count_ObjectsOf_Class' => 'Пакетное удаление %1$d объектов класса %2$s',
|
||||
'UI:Delete:NotAllowedToDelete' => 'Вы не можете удалить этот объект',
|
||||
'UI:Delete:NotAllowedToUpdate_Fields' => 'Вы не можете обновить следующее(ие) поле(я): %1$s',
|
||||
'UI:Error:CannotDeleteBecause' => 'This object could not be deleted because: %1$s',
|
||||
'UI:Error:NotEnoughRightsToDelete' => 'Этот объект не может быть удален, потому что текущий пользователь не имеет достаточных прав',
|
||||
'UI:Error:CannotDeleteBecauseOfDepencies' => 'Этот объект не может быть удален, потому что некоторые ручные операции должны быть выполнены до этого',
|
||||
'UI:Archive_User_OnBehalfOf_User' => '%1$s от имени %2$s',
|
||||
'UI:Delete:AutomaticallyDeleted' => 'автоматически удалён',
|
||||
'UI:Delete:AutomaticResetOf_Fields' => 'автоматически сброшено поле(я): %1$s',
|
||||
'UI:Delete:CleaningUpRefencesTo_Object' => 'Очищенны все ссылки(связи?) на %1$s...',
|
||||
'UI:Delete:CleaningUpRefencesTo_Several_ObjectsOf_Class' => 'Очищенны все ссылки(связи?) на %1$d объектов класса %2$s...',
|
||||
'UI:Delete:Done+' => 'Что было сделано...',
|
||||
'UI:Delete:_Name_Class_Deleted' => '%1$s - %2$s удалено.',
|
||||
'UI:Delete:ConfirmDeletionOf_Name' => 'Удаление %1$s',
|
||||
'UI:Delete:ConfirmDeletionOf_Count_ObjectsOf_Class' => 'Удаление %1$d объектов класса %2$s',
|
||||
// 'UI:Delete:ShouldBeDeletedAtomaticallyButNotPossible' => 'Должно быть автоматичски удалено, но вы не можете это сделать',
|
||||
// 'UI:Delete:MustBeDeletedManuallyButNotPossible' => 'Необходимо удалить вручную - но вы не можете удалить этот объект, свяжитесь с администратором вашего приложения',
|
||||
'UI:Delete:WillBeDeletedAutomatically' => 'Будет удалено автоматически',
|
||||
'UI:Delete:MustBeDeletedManually' => 'Необходимо удалить вручную',
|
||||
'UI:Delete:CannotUpdateBecause_Issue' => 'Должно быть автоматически обновлено, но: %1$s',
|
||||
'UI:Delete:WillAutomaticallyUpdate_Fields' => 'будет автоматически обновлено (сброс: %1$s)',
|
||||
'UI:Delete:Count_Objects/LinksReferencing_Object' => '%1$d объектов/связей ссылаются(связаны?) %2$s',
|
||||
'UI:Delete:Count_Objects/LinksReferencingTheObjects' => '%1$d объектов/связей ссылаются на объекты, которые будут удалены',
|
||||
'UI:Delete:ReferencesMustBeDeletedToEnsureIntegrity' => 'Для обеспечения целостности базы данных, необходимо устранить все связи',
|
||||
'UI:Delete:Consequence+' => 'Что будет сделано',
|
||||
'UI:Delete:SorryDeletionNotAllowed' => 'К сожалению, вы не можете удалить этот объект, см. подробное объяснение выше',
|
||||
'UI:Delete:PleaseDoTheManualOperations' => 'Необходимо выполнить указанные ручные операции до запроса на удаление этого объекта',
|
||||
'UI:Delect:Confirm_Object' => 'Подтвердите удаление %1$s.',
|
||||
'UI:Delect:Confirm_Count_ObjectsOf_Class' => 'Подтвердите удаление %1$d объектов класса %2$s.',
|
||||
'UI:WelcomeToITop' => 'Добро пожаловать в iTop',
|
||||
'UI:DetailsPageTitle' => 'iTop - %1$s - %2$s подробности',
|
||||
'UI:ErrorPageTitle' => 'iTop - Ошибка',
|
||||
'UI:ObjectDoesNotExist' => 'Извните, этот объект не существует (или вы не можете его видеть).',
|
||||
'UI:SearchResultsPageTitle' => 'iTop - Результаты поиска',
|
||||
'UI:Search:NoSearch' => 'Ничего не найдено',
|
||||
'UI:FullTextSearchTitle_Text' => 'Результаты для "%1$s":',
|
||||
'UI:Search:Count_ObjectsOf_Class_Found' => '%1$d объект(ы) класса %2$s найдено.',
|
||||
'UI:Search:NoObjectFound' => 'Объекты не найдены.',
|
||||
'UI:ModificationPageTitle_Object_Class' => 'iTop - %1$s - %2$s модификации',
|
||||
'UI:ModificationTitle_Class_Object' => 'Модификации %1$s: <span class=\"hilite\">%2$s</span>',
|
||||
'UI:ClonePageTitle_Object_Class' => 'iTop - Клон %1$s - %2$s модификация',
|
||||
'UI:CloneTitle_Class_Object' => 'Клон %1$s: <span class=\"hilite\">%2$s</span>',
|
||||
'UI:CreationPageTitle_Class' => 'iTop - Создание нового %1$s ',
|
||||
'UI:CreationTitle_Class' => 'Создание нового %1$s',
|
||||
'UI:SelectTheTypeOf_Class_ToCreate' => 'Выбор типа %1$s для создания:',
|
||||
'UI:Class_Object_NotUpdated' => 'Изменений не обнаружено, %1$s (%2$s) <strong>не</strong> был изменён.',
|
||||
'UI:Class_Object_Updated' => '%1$s (%2$s) обновлён.',
|
||||
'UI:BulkDeletePageTitle' => 'iTop - Пакетное удаление',
|
||||
'UI:BulkDeleteTitle' => 'Выбор объектов для удаления:',
|
||||
'UI:PageTitle:ObjectCreated' => 'iTop Объект создан.',
|
||||
'UI:Title:Object_Of_Class_Created' => '%1$s - %2$s создан.',
|
||||
'UI:Apply_Stimulus_On_Object_In_State_ToTarget_State' => 'Применение %1$s на объект: %2$s в состоянии %3$s для целевого класса: %4$s.',
|
||||
'UI:ObjectCouldNotBeWritten' => 'Объект не может быть записан: %1$s',
|
||||
'UI:PageTitle:FatalError' => 'iTop - Фатальная ошибка',
|
||||
'UI:SystemIntrusion' => 'Доступ запрещён. Вы пытаетесь выполнить неразрешённую операцию.',
|
||||
'UI:FatalErrorMessage' => 'Фатальная ошибка, iTop не может продолжать.',
|
||||
'UI:Error_Details' => 'Ошибка: %1$s.',
|
||||
|
||||
'UI:PageTitle:ClassProjections' => 'iTop управление пользователями - проектирование классов',
|
||||
'UI:PageTitle:ProfileProjections' => 'iTop управление пользователями - проектирование профилей',
|
||||
'UI:UserManagement:Class' => 'Классs',
|
||||
'UI:UserManagement:Class+' => 'Класс объектов',
|
||||
'UI:UserManagement:ProjectedObject' => 'Объект',
|
||||
'UI:UserManagement:ProjectedObject+' => 'Проектируемый объект',
|
||||
'UI:UserManagement:AnyObject' => '* любой *',
|
||||
'UI:UserManagement:User' => 'Пользователь',
|
||||
'UI:UserManagement:User+' => 'Пользователь учавствует',
|
||||
'UI:UserManagement:Profile' => 'Профиль',
|
||||
'UI:UserManagement:Profile+' => 'Профиль, указанный в проектировании',
|
||||
'UI:UserManagement:Action:Read' => 'Чтение',
|
||||
'UI:UserManagement:Action:Read+' => 'Чтение/отображение объектов',
|
||||
'UI:UserManagement:Action:Modify' => 'Modify',
|
||||
'UI:UserManagement:Action:Modify+' => 'Создание и редактирование (изменение) объектов',
|
||||
'UI:UserManagement:Action:Delete' => 'Удаление',
|
||||
'UI:UserManagement:Action:Delete+' => 'Удаление объектов',
|
||||
'UI:UserManagement:Action:BulkRead' => 'Пакетное чтение (Экспорт)',
|
||||
'UI:UserManagement:Action:BulkRead+' => 'Список оъектов или массовый экспорт',
|
||||
'UI:UserManagement:Action:BulkModify' => 'Пакетное изменение',
|
||||
'UI:UserManagement:Action:BulkModify+' => 'Массовое создание/редактирование (импорт CSV)',
|
||||
'UI:UserManagement:Action:BulkDelete' => 'Пакетное удаление',
|
||||
'UI:UserManagement:Action:BulkDelete+' => 'Массовое удаление объектов',
|
||||
'UI:UserManagement:Action:Stimuli' => 'Стимулы',
|
||||
'UI:UserManagement:Action:Stimuli+' => 'Допустимые (составные) действия',
|
||||
'UI:UserManagement:Action' => 'Действие',
|
||||
'UI:UserManagement:Action+' => 'Действие, выполняемое пользователем',
|
||||
'UI:UserManagement:TitleActions' => 'Действия',
|
||||
'UI:UserManagement:Permission' => 'Разрешения',
|
||||
'UI:UserManagement:Permission+' => 'Пользовательские разрешения',
|
||||
'UI:UserManagement:Attributes' => 'Атрибуты',
|
||||
'UI:UserManagement:ActionAllowed:Yes' => 'Да',
|
||||
'UI:UserManagement:ActionAllowed:No' => 'Нет',
|
||||
'UI:UserManagement:AdminProfile+' => 'Администраторы имеют полный доступ на чтение/запись всех объектов в базе данных.',
|
||||
'UI:UserManagement:NoLifeCycleApplicable' => 'не определено',
|
||||
'UI:UserManagement:NoLifeCycleApplicable+' => 'Не определён жизненній цикл для данного класса',
|
||||
'UI:UserManagement:GrantMatrix' => 'Матрица разрешений',
|
||||
'UI:UserManagement:LinkBetween_User_And_Profile' => 'Связь между %1$s и %2$s',
|
||||
'UI:UserManagement:LinkBetween_User_And_Org' => 'Связь между %1$s и %2$s',
|
||||
|
||||
'Menu:AdminTools' => 'Инструменты админа',
|
||||
'Menu:AdminTools+' => 'Административные инструменты',
|
||||
'Menu:AdminTools?' => 'Инструменты доступны только для пользователей, имеющих профиль администратора',
|
||||
|
||||
'UI:ChangeManagementMenu' => 'Управление изменениями',
|
||||
'UI:ChangeManagementMenu+' => 'Управление изменениями',
|
||||
'UI:ChangeManagementMenu:Title' => 'Обзор изменений',
|
||||
'UI-ChangeManagementMenu-ChangesByType' => 'Изменения по типу',
|
||||
'UI-ChangeManagementMenu-ChangesByStatus' => 'Изменения по статутсу',
|
||||
'UI-ChangeManagementMenu-ChangesByWorkgroup' => 'Изменения по рабочей группе',
|
||||
'UI-ChangeManagementMenu-ChangesNotYetAssigned' => 'Не назначенные изменения',
|
||||
|
||||
'UI:ConfigurationItemsMenu'=> 'Элементы конфигурации',
|
||||
'UI:ConfigurationItemsMenu+'=> 'Все устройства',
|
||||
'UI:ConfigurationItemsMenu:Title' => 'Обзор элементов конфигурации',
|
||||
'UI-ConfigurationItemsMenu-ServersByCriticity' => 'Серверы по критичности',
|
||||
'UI-ConfigurationItemsMenu-PCsByCriticity' => 'ПК по критичности',
|
||||
'UI-ConfigurationItemsMenu-NWDevicesByCriticity' => 'Сетевые устройства по критичности',
|
||||
'UI-ConfigurationItemsMenu-ApplicationsByCriticity' => 'Приложения по критичности',
|
||||
|
||||
'UI:ConfigurationManagementMenu' => 'Управление конфигурациями',
|
||||
'UI:ConfigurationManagementMenu+' => 'Управление конфигурациями',
|
||||
'UI:ConfigurationManagementMenu:Title' => 'Обзор инфраструктуры',
|
||||
'UI-ConfigurationManagementMenu-InfraByType' => 'Объекты инфраструктуры по типу',
|
||||
'UI-ConfigurationManagementMenu-InfraByStatus' => 'Объекты инфраструктуры по статусу',
|
||||
|
||||
'UI:ConfigMgmtMenuOverview:Title' => 'Панель управления конфигурациями',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIbyStatus' => 'Элементы конфигурации по статусу',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIByType' => 'Элементы конфигурации по типу',
|
||||
|
||||
'UI:RequestMgmtMenuOverview:Title' => 'Панель управления запросами',
|
||||
'UI-RequestManagementOverview-RequestByService' => 'Пользовательские запросы по сервису',
|
||||
'UI-RequestManagementOverview-RequestByPriority' => 'Пользовательские запросы по приоритету',
|
||||
'UI-RequestManagementOverview-RequestUnassigned' => 'Пользовательские запросы не назначенные не на один агент',
|
||||
|
||||
'UI:IncidentMgmtMenuOverview:Title' => 'Панель управления инцидентами',
|
||||
'UI-IncidentManagementOverview-IncidentByService' => 'Инциденты по сервису',
|
||||
'UI-IncidentManagementOverview-IncidentByPriority' => 'Инциденты по приоритету',
|
||||
'UI-IncidentManagementOverview-IncidentUnassigned' => 'Инциденты не назначенные не на один агент',
|
||||
|
||||
'UI:ChangeMgmtMenuOverview:Title' => 'Панель управления изменениями',
|
||||
'UI-ChangeManagementOverview-ChangeByType' => 'Изменения по типу',
|
||||
'UI-ChangeManagementOverview-ChangeUnassigned' => 'Изменения не назначенные не на один агент',
|
||||
'UI-ChangeManagementOverview-ChangeWithOutage' => 'Отключения в связи с изменениями',
|
||||
|
||||
'UI:ServiceMgmtMenuOverview:Title' => 'Панель управления сервисами',
|
||||
'UI-ServiceManagementOverview-CustomerContractToRenew' => 'Договора с клиентами, которые будут обновлены в течении 30 дней',
|
||||
'UI-ServiceManagementOverview-ProviderContractToRenew' => 'Договора с поставщиками, которые будут обновлены в течении 30 дней',
|
||||
|
||||
'UI:ContactsMenu' => 'Договора',
|
||||
'UI:ContactsMenu+' => 'Договора',
|
||||
'UI:ContactsMenu:Title' => 'Обзор договоров',
|
||||
'UI-ContactsMenu-ContactsByLocation' => 'Договора по размещению',
|
||||
'UI-ContactsMenu-ContactsByType' => 'Договора по типу',
|
||||
'UI-ContactsMenu-ContactsByStatus' => 'Договора по статусу',
|
||||
|
||||
'Menu:CSVImportMenu' => 'Импорт CSV',
|
||||
'Menu:CSVImportMenu+' => 'Пакетное создание или обновление',
|
||||
|
||||
'Menu:DataModelMenu' => 'Модель данных',
|
||||
'Menu:DataModelMenu+' => 'Обзор модели данных',
|
||||
|
||||
'Menu:ExportMenu' => 'Экспорт',
|
||||
'Menu:ExportMenu+' => 'Экспорт результатов любого запроса в HTML, CSV или XML',
|
||||
|
||||
'Menu:NotificationsMenu' => 'Уведомления',
|
||||
'Menu:NotificationsMenu+' => 'Конфигурация уведомлений',
|
||||
'UI:NotificationsMenu:Title' => 'Конфигурация <span class="hilite">Уведомлений</span>',
|
||||
'UI:NotificationsMenu:Help' => 'Помощь',
|
||||
'UI:NotificationsMenu:HelpContent' => '<p>В iTop уведомления полностью настраиваемые. Они основаны на двух наборах объектов: <i>триггеры и действия</i>.</p>
|
||||
<p><i><b>Триггеры</b></i> оперделяют когда уведомление будет выполнено. Есть 3 типа триггеров обробатывающих 3 разных фазы жизненного цикла объекта:
|
||||
<ol>
|
||||
<li>the "OnCreate" триггеры сработают когда объект заданного класса будет создан</li>
|
||||
<li>the "OnStateEnter" триггеры сработают перед тем как объект заданного класса войдёт в заданное состояние (выйдет из другого состояния)</li>
|
||||
<li>the "OnStateLeave" триггеры сработают когда объекты заданного класса выйдут из заданного состояния</li>
|
||||
</ol>
|
||||
</p>
|
||||
<p>
|
||||
<i><b>Действия</b></i> определяют, какое действие будет выполнено при срабатывании триггера. Пока есть только одно действие, которое состоит в отправке сообщения на электронную почту.
|
||||
Эти действия также определяют шаблон, который будет использован для отправки электронного сообщения, а также другие параметры сообщения, такие как получатель, важность и т.д.
|
||||
</p>
|
||||
<p>Специальная страница: <a href="../setup/email.test.php" target="_blank">email.test.php</a> доступна для тестирования и устранения неполадок в настройка почты в PHP.</p>
|
||||
<p>Чтобы быть выполненными, действия необходимо ассоциировать с триггерами.
|
||||
При ассоциации с триггером, каждое действие получает "порядковый" номер, который определяет порядок выполнения действий.</p>',
|
||||
'UI:NotificationsMenu:Triggers' => 'Триггеры',
|
||||
'UI:NotificationsMenu:AvailableTriggers' => 'Доступные триггеры',
|
||||
'UI:NotificationsMenu:OnCreate' => 'При создании объекта',
|
||||
'UI:NotificationsMenu:OnStateEnter' => 'При входе объекта в заданное состояние',
|
||||
'UI:NotificationsMenu:OnStateLeave' => 'При выходе объекта из заданного состояния',
|
||||
'UI:NotificationsMenu:Actions' => 'Действия',
|
||||
'UI:NotificationsMenu:AvailableActions' => 'Доступные действия',
|
||||
|
||||
'Menu:AuditCategories' => 'Категории аудита',
|
||||
'Menu:AuditCategories+' => 'Категории аудита',
|
||||
'Menu:Notifications:Title' => 'Категории аудита',
|
||||
|
||||
'Menu:RunQueriesMenu' => 'Выполнение запросов',
|
||||
'Menu:RunQueriesMenu+' => 'Выполнение любых запросов',
|
||||
|
||||
'Menu:DataAdministration' => 'Административные данные',
|
||||
'Menu:DataAdministration+' => 'Административные данные',
|
||||
|
||||
'Menu:UniversalSearchMenu' => 'Универсальный поиск',
|
||||
'Menu:UniversalSearchMenu+' => 'Поиск чего угодно...',
|
||||
|
||||
'Menu:ApplicationLogMenu' => 'Логгирование приложения',
|
||||
'Menu:ApplicationLogMenu+' => 'Логгирование приложения',
|
||||
'Menu:ApplicationLogMenu:Title' => 'Логгирование приложения',
|
||||
|
||||
'Menu:UserManagementMenu' => 'Управление пользователями',
|
||||
'Menu:UserManagementMenu+' => 'Управление пользователями',
|
||||
|
||||
'Menu:ProfilesMenu' => 'Профили',
|
||||
'Menu:ProfilesMenu+' => 'Профили',
|
||||
'Menu:ProfilesMenu:Title' => 'Профили',
|
||||
|
||||
'Menu:UserAccountsMenu' => 'Учетные записи пользователей',
|
||||
'Menu:UserAccountsMenu+' => 'Учетные записи пользователей',
|
||||
'Menu:UserAccountsMenu:Title' => 'Учетные записи пользователей',
|
||||
|
||||
'UI:iTopVersion:Short' => 'iTop версия %1$s',
|
||||
'UI:iTopVersion:Long' => 'iTop версия %1$s-%2$s основан на %3$s',
|
||||
'UI:PropertiesTab' => 'Свойства',
|
||||
|
||||
'UI:OpenDocumentInNewWindow_' => 'Открыть этот документ в новом окне: %1$s',
|
||||
'UI:DownloadDocument_' => 'Скачать этот документ: %1$s',
|
||||
'UI:Document:NoPreview' => 'Не доступен предварительный просомтр для документов данного типа',
|
||||
|
||||
'UI:DeadlineMissedBy_duration' => 'Пропущен %1$s',
|
||||
'UI:Deadline_LessThan1Min' => '< 1 мин',
|
||||
'UI:Deadline_Minutes' => '%1$d мин',
|
||||
'UI:Deadline_Hours_Minutes' => '%1$dч %2$dмин',
|
||||
'UI:Deadline_Days_Hours_Minutes' => '%1$dд %2$dч %3$dмин',
|
||||
'UI:Help' => 'Помощь',
|
||||
'UI:PasswordConfirm' => '(Подтвердить)',
|
||||
'UI:BeforeAdding_Class_ObjectsSaveThisObject' => 'Перед добавлением %1$s объектво, сохраните этот объект.',
|
||||
'UI:DisplayThisMessageAtStartup' => 'Показать это сообщение при запуске',
|
||||
'UI:RelationshipGraph' => 'Графический вид',
|
||||
'UI:RelationshipList' => 'Список',
|
||||
|
||||
'Portal:Title' => 'Пользовательский iTop портал',
|
||||
'Portal:Refresh' => 'Обновить',
|
||||
'Portal:Back' => 'Назад',
|
||||
'Portal:CreateNewRequest' => 'Создать новый запрос',
|
||||
'Portal:ChangeMyPassword' => 'Изменить мой пароль',
|
||||
'Portal:Disconnect' => 'Отключить',
|
||||
'Portal:OpenRequests' => 'Мои открытые запросы',
|
||||
'Portal:ResolvedRequests' => 'Мои решённые запросы',
|
||||
'Portal:SelectService' => 'Выбери сервис из каталога:',
|
||||
'Portal:PleaseSelectOneService' => 'Необходимо выбрать хотя-бы один сервис',
|
||||
'Portal:SelectSubcategoryFrom_Service' => 'Выбери под-категорию для сервиса %1$s:',
|
||||
'Portal:PleaseSelectAServiceSubCategory' => 'Необходимо выбрать одну под-категорию',
|
||||
'Portal:DescriptionOfTheRequest' => 'Введи описание запроса:',
|
||||
'Portal:TitleRequestDetailsFor_Request' => 'Подробности запроса %1$s:',
|
||||
'Portal:NoOpenRequest' => 'Нет запросов в этой категории.',
|
||||
'Portal:Button:CloseTicket' => 'Закрыть этот "тикет"',
|
||||
'Portal:EnterYourCommentsOnTicket' => 'Введите ваши каментарии по решению этого "тикета":',
|
||||
'Portal:ErrorNoContactForThisUser' => 'Ошибка: текющий пользователь не ассоциирован с Контактом/Человеком. Пожалуйста свяжитесь с вашим администратором.',
|
||||
|
||||
'Enum:Undefined' => 'Неопределён',
|
||||
));
|
||||
|
||||
|
||||
|
||||
?>
|
||||
387
dictionaries/tr.dictionary.itop.core.php
Normal file
387
dictionaries/tr.dictionary.itop.core.php
Normal file
@@ -0,0 +1,387 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @author Izzet Sirin <izzet.sirin@htr.com.tr>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'core/cmdb'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
//
|
||||
// Class: CMDBChange
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:CMDBChange' => 'Değişiklik',
|
||||
'Class:CMDBChange+' => 'Değişiklik izleme',
|
||||
'Class:CMDBChange/Attribute:date' => 'tarih',
|
||||
'Class:CMDBChange/Attribute:date+' => 'değişikliğin yapıldığı tarih',
|
||||
'Class:CMDBChange/Attribute:userinfo' => 'diğer bilgiler',
|
||||
'Class:CMDBChange/Attribute:userinfo+' => 'ilave bilgiler',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOp
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:CMDBChangeOp' => 'Değişiklik işlemi',
|
||||
'Class:CMDBChangeOp+' => 'Değişiklik izleme',
|
||||
'Class:CMDBChangeOp/Attribute:change' => 'değişiklik',
|
||||
'Class:CMDBChangeOp/Attribute:change+' => 'değişiklik',
|
||||
'Class:CMDBChangeOp/Attribute:date' => 'tarih',
|
||||
'Class:CMDBChangeOp/Attribute:date+' => 'değişikliğin yapıldığı zaman',
|
||||
'Class:CMDBChangeOp/Attribute:userinfo' => 'kullanıcı',
|
||||
'Class:CMDBChangeOp/Attribute:userinfo+' => 'değişikliğ yapan',
|
||||
'Class:CMDBChangeOp/Attribute:objclass' => 'nesne sınıfı',
|
||||
'Class:CMDBChangeOp/Attribute:objclass+' => 'nesne sınıfı',
|
||||
'Class:CMDBChangeOp/Attribute:objkey' => 'nesne no',
|
||||
'Class:CMDBChangeOp/Attribute:objkey+' => 'nesne no',
|
||||
'Class:CMDBChangeOp/Attribute:finalclass' => 'tip',
|
||||
'Class:CMDBChangeOp/Attribute:finalclass+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpCreate
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:CMDBChangeOpCreate' => 'nesne yaratımı',
|
||||
'Class:CMDBChangeOpCreate+' => 'Nesne Yaratım izleme',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpDelete
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:CMDBChangeOpDelete' => 'nesne silimi',
|
||||
'Class:CMDBChangeOpDelete+' => 'Nesne silme izleme',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpSetAttribute
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:CMDBChangeOpSetAttribute' => 'nesne değişikliği',
|
||||
'Class:CMDBChangeOpSetAttribute+' => 'Nesne değişiminin izlemesi',
|
||||
'Class:CMDBChangeOpSetAttribute/Attribute:attcode' => 'Özellik',
|
||||
'Class:CMDBChangeOpSetAttribute/Attribute:attcode+' => 'Değişen özelliğin kodu',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpSetAttributeScalar
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:CMDBChangeOpSetAttributeScalar' => 'özellik değişimi',
|
||||
'Class:CMDBChangeOpSetAttributeScalar+' => 'Nesne özellik değişimi izleme',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue' => 'Önceki değer',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue+' => 'önceki değer',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue' => 'Yeni değer',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue+' => 'yeni değer',
|
||||
));
|
||||
// Used by CMDBChangeOp... & derived classes
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Change:ObjectCreated' => 'Nesne yaratıldı',
|
||||
'Change:ObjectDeleted' => 'Nesne silindi',
|
||||
'Change:AttName_SetTo_NewValue_PreviousValue_OldValue' => '%1$s\'nin değeri %2$s olarak atandı (önceki değer: %3$s)',
|
||||
'Change:AttName_SetTo' => '%1$s\'nin değeri %2$s olarak atandı',
|
||||
'Change:Text_AppendedTo_AttName' => '%2$s\'ye %1$s eklendi',
|
||||
'Change:AttName_Changed_PreviousValue_OldValue' => '%1$\'nin değeri deiştirildi, önceki değer: %2$s',
|
||||
'Change:AttName_Changed' => '%1$s değiştirildi',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpSetAttributeBlob
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:CMDBChangeOpSetAttributeBlob' => 'tarih değişimi',
|
||||
'Class:CMDBChangeOpSetAttributeBlob+' => 'tarih değişim izleme',
|
||||
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata' => 'Önceki veri',
|
||||
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata+' => 'önceki değer',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpSetAttributeText
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:CMDBChangeOpSetAttributeText' => 'metin değişikliği',
|
||||
'Class:CMDBChangeOpSetAttributeText+' => 'metin değişikliği izleme',
|
||||
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata' => 'Önceki veri',
|
||||
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata+' => 'önceki değer',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: Event
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:Event' => 'Olay kaydı',
|
||||
'Class:Event+' => 'Uygulama olayı',
|
||||
'Class:Event/Attribute:message' => 'mesaj',
|
||||
'Class:Event/Attribute:message+' => 'Olay tanımlama',
|
||||
'Class:Event/Attribute:date' => 'tarih',
|
||||
'Class:Event/Attribute:date+' => 'değişiklik tarihi',
|
||||
'Class:Event/Attribute:userinfo' => 'kullanıcı bigileri',
|
||||
'Class:Event/Attribute:userinfo+' => 'olay anındaki kullanıcı',
|
||||
'Class:Event/Attribute:finalclass' => 'tip',
|
||||
'Class:Event/Attribute:finalclass+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: EventNotification
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:EventNotification' => 'Olay uyarımı',
|
||||
'Class:EventNotification+' => 'Uyarının tarihçesi',
|
||||
'Class:EventNotification/Attribute:trigger_id' => 'Uyarı tetikçisi',
|
||||
'Class:EventNotification/Attribute:trigger_id+' => 'kullanıcı hesabı',
|
||||
'Class:EventNotification/Attribute:action_id' => 'kullanıcı',
|
||||
'Class:EventNotification/Attribute:action_id+' => 'kullanıcı hesabı',
|
||||
'Class:EventNotification/Attribute:object_id' => 'Nesne belirleyicisi',
|
||||
'Class:EventNotification/Attribute:object_id+' => 'nesne belirleyicisi (olayı tetikleyen nesne ?)',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: EventNotificationEmail
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:EventNotificationEmail' => 'E-posta gönderim işlemi',
|
||||
'Class:EventNotificationEmail+' => 'Gönderilen E-posta tarihçesi',
|
||||
'Class:EventNotificationEmail/Attribute:to' => 'Kime',
|
||||
'Class:EventNotificationEmail/Attribute:to+' => 'Kime',
|
||||
'Class:EventNotificationEmail/Attribute:cc' => 'Kopya',
|
||||
'Class:EventNotificationEmail/Attribute:cc+' => 'Kopya',
|
||||
'Class:EventNotificationEmail/Attribute:bcc' => 'Gizli Kopya',
|
||||
'Class:EventNotificationEmail/Attribute:bcc+' => 'Gizli Kopya',
|
||||
'Class:EventNotificationEmail/Attribute:from' => 'Kimden',
|
||||
'Class:EventNotificationEmail/Attribute:from+' => 'Mesajı gönderen',
|
||||
'Class:EventNotificationEmail/Attribute:subject' => 'Konu',
|
||||
'Class:EventNotificationEmail/Attribute:subject+' => 'Konu',
|
||||
'Class:EventNotificationEmail/Attribute:body' => 'Mesaj',
|
||||
'Class:EventNotificationEmail/Attribute:body+' => 'Mesaj',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: EventIssue
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:EventIssue' => 'Olay ekle',
|
||||
'Class:EventIssue+' => 'Olay tipi (uyarı, hata, vb.)',
|
||||
'Class:EventIssue/Attribute:issue' => 'Konu',
|
||||
'Class:EventIssue/Attribute:issue+' => 'Olan',
|
||||
'Class:EventIssue/Attribute:impact' => 'Etkisi',
|
||||
'Class:EventIssue/Attribute:impact+' => 'Sonuçları',
|
||||
'Class:EventIssue/Attribute:page' => 'Sayfa',
|
||||
'Class:EventIssue/Attribute:page+' => 'HTTP giriş noktası',
|
||||
'Class:EventIssue/Attribute:arguments_post' => 'Verilen değişkenlerin değerleri',
|
||||
'Class:EventIssue/Attribute:arguments_post+' => 'HTTP değişken değerleri',
|
||||
'Class:EventIssue/Attribute:arguments_get' => 'URL POST değişken değerleri',
|
||||
'Class:EventIssue/Attribute:arguments_get+' => 'HTTP GET değişken değerleri',
|
||||
'Class:EventIssue/Attribute:callstack' => 'Çağrım sırası',
|
||||
'Class:EventIssue/Attribute:callstack+' => 'Çağrım sırası',
|
||||
'Class:EventIssue/Attribute:data' => 'Veri',
|
||||
'Class:EventIssue/Attribute:data+' => 'Diğer bilgiler',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: EventWebService
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:EventWebService' => 'Web service olayı',
|
||||
'Class:EventWebService+' => 'web service çağrım sırası',
|
||||
'Class:EventWebService/Attribute:verb' => 'Fiil',
|
||||
'Class:EventWebService/Attribute:verb+' => 'Operasyonun adı',
|
||||
'Class:EventWebService/Attribute:result' => 'Sonuç',
|
||||
'Class:EventWebService/Attribute:result+' => 'Genel başarı/başarısızlık',
|
||||
'Class:EventWebService/Attribute:log_info' => 'Bilgi kaydı',
|
||||
'Class:EventWebService/Attribute:log_info+' => 'Sonuç bilgi kaydı',
|
||||
'Class:EventWebService/Attribute:log_warning' => 'Uyarı kaydı',
|
||||
'Class:EventWebService/Attribute:log_warning+' => 'Sonuç uyarı kaydı',
|
||||
'Class:EventWebService/Attribute:log_error' => 'Hata kaydı',
|
||||
'Class:EventWebService/Attribute:log_error+' => 'Sonuç hata kaydı',
|
||||
'Class:EventWebService/Attribute:data' => 'Veri',
|
||||
'Class:EventWebService/Attribute:data+' => 'Sonuç veri',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: Action
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:Action' => 'Özel işlem',
|
||||
'Class:Action+' => 'Kullanıcının tanımladığı işlemler',
|
||||
'Class:Action/Attribute:name' => 'Adı',
|
||||
'Class:Action/Attribute:name+' => '',
|
||||
'Class:Action/Attribute:description' => 'Tanımlama',
|
||||
'Class:Action/Attribute:description+' => '',
|
||||
'Class:Action/Attribute:status' => 'Durum',
|
||||
'Class:Action/Attribute:status+' => 'Kullanımda mı?',
|
||||
'Class:Action/Attribute:status/Value:test' => 'Test aşamasında',
|
||||
'Class:Action/Attribute:status/Value:test+' => 'Test aşamasında',
|
||||
'Class:Action/Attribute:status/Value:enabled' => 'Kullanımda',
|
||||
'Class:Action/Attribute:status/Value:enabled+' => 'Kullanımda',
|
||||
'Class:Action/Attribute:status/Value:disabled' => 'Etkin değil',
|
||||
'Class:Action/Attribute:status/Value:disabled+' => 'Etkin değil',
|
||||
'Class:Action/Attribute:trigger_list' => 'İlgili tetikleyiciler',
|
||||
'Class:Action/Attribute:trigger_list+' => 'İşleme bağlı tetikleyici',
|
||||
'Class:Action/Attribute:finalclass' => 'Tip',
|
||||
'Class:Action/Attribute:finalclass+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: ActionNotification
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:ActionNotification' => 'Bildirim',
|
||||
'Class:ActionNotification+' => 'Bildirim (soyut)',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: ActionEmail
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:ActionEmail' => 'E-posta bildirimi',
|
||||
'Class:ActionEmail+' => '',
|
||||
'Class:ActionEmail/Attribute:test_recipient' => 'Test alıcısı',
|
||||
'Class:ActionEmail/Attribute:test_recipient+' => 'Durumu "Test" olması durumundaki alıcı',
|
||||
'Class:ActionEmail/Attribute:from' => 'Kimden',
|
||||
'Class:ActionEmail/Attribute:from+' => 'e-posta başlığında gönderilecek',
|
||||
'Class:ActionEmail/Attribute:reply_to' => 'Yanıtla',
|
||||
'Class:ActionEmail/Attribute:reply_to+' => 'e-posta başlığında gönderilecek',
|
||||
'Class:ActionEmail/Attribute:to' => 'Kime',
|
||||
'Class:ActionEmail/Attribute:to+' => 'E-posta alıcısı',
|
||||
'Class:ActionEmail/Attribute:cc' => 'Kopya',
|
||||
'Class:ActionEmail/Attribute:cc+' => 'Kopya',
|
||||
'Class:ActionEmail/Attribute:bcc' => 'gizli kopya',
|
||||
'Class:ActionEmail/Attribute:bcc+' => 'Gizli alıcı',
|
||||
'Class:ActionEmail/Attribute:subject' => 'konu',
|
||||
'Class:ActionEmail/Attribute:subject+' => 'E-posta konusu',
|
||||
'Class:ActionEmail/Attribute:body' => 'E-posta içeriği',
|
||||
'Class:ActionEmail/Attribute:body+' => 'E-posta içeriği',
|
||||
'Class:ActionEmail/Attribute:importance' => 'önem derecesi',
|
||||
'Class:ActionEmail/Attribute:importance+' => 'önem derecesi',
|
||||
'Class:ActionEmail/Attribute:importance/Value:low' => 'düşük',
|
||||
'Class:ActionEmail/Attribute:importance/Value:low+' => 'düşük',
|
||||
'Class:ActionEmail/Attribute:importance/Value:normal' => 'normal',
|
||||
'Class:ActionEmail/Attribute:importance/Value:normal+' => 'normal',
|
||||
'Class:ActionEmail/Attribute:importance/Value:high' => 'yüksek',
|
||||
'Class:ActionEmail/Attribute:importance/Value:high+' => 'yüksek',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: Trigger
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:Trigger' => 'Tetikleyici',
|
||||
'Class:Trigger+' => 'Özel olay yürütücü',
|
||||
'Class:Trigger/Attribute:description' => 'Tanımlama',
|
||||
'Class:Trigger/Attribute:description+' => 'tek satır tanımlama',
|
||||
'Class:Trigger/Attribute:action_list' => 'Tetiklenen işlemler',
|
||||
'Class:Trigger/Attribute:action_list+' => 'Tetiklenen işlemler',
|
||||
'Class:Trigger/Attribute:finalclass' => 'Tip',
|
||||
'Class:Trigger/Attribute:finalclass+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: TriggerOnObject
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:TriggerOnObject' => 'Tetiklenen (sınıf bağımlılığı)',
|
||||
'Class:TriggerOnObject+' => 'Verilen sınıflar üzerinde işlemleri gerçekleştir',
|
||||
'Class:TriggerOnObject/Attribute:target_class' => 'Hedef sınıf',
|
||||
'Class:TriggerOnObject/Attribute:target_class+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: TriggerOnStateChange
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:TriggerOnStateChange' => 'Tetiklenen (durum değişikliğinde)',
|
||||
'Class:TriggerOnStateChange+' => 'Durum değişikliğinde tetiklenen işlemler',
|
||||
'Class:TriggerOnStateChange/Attribute:state' => 'Durum',
|
||||
'Class:TriggerOnStateChange/Attribute:state+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: TriggerOnStateEnter
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:TriggerOnStateEnter' => 'Tetiklenen (duruma girişte)',
|
||||
'Class:TriggerOnStateEnter+' => 'Durum değişikliğinde tetiklenen işlemler (duruma giriş)',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: TriggerOnStateLeave
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:TriggerOnStateLeave' => 'Tetiklenen (durum çıkışında)',
|
||||
'Class:TriggerOnStateLeave+' => 'Durum değişikliğinde tetiklenen işlemler (duruma çıkış)',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: TriggerOnObjectCreate
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:TriggerOnObjectCreate' => 'Tetiklenen (nesne yaratımında)',
|
||||
'Class:TriggerOnObjectCreate+' => 'Verilen sınıf tipi nesne yaratımında tetiklenen işlemler',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: lnkTriggerAction
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:lnkTriggerAction' => 'İşlem/Tetikleme',
|
||||
'Class:lnkTriggerAction+' => 'Tetikleme ve işlem arasındaki ilişki',
|
||||
'Class:lnkTriggerAction/Attribute:action_id' => 'İşlem',
|
||||
'Class:lnkTriggerAction/Attribute:action_id+' => 'Yapılacak işlem',
|
||||
'Class:lnkTriggerAction/Attribute:action_name' => 'İşlem',
|
||||
'Class:lnkTriggerAction/Attribute:action_name+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_id' => 'Tetikleme',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_id+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_name' => 'Tetikleme',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_name+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:order' => 'Order',
|
||||
'Class:lnkTriggerAction/Attribute:order+' => 'İşlem uygulama sırası',
|
||||
));
|
||||
|
||||
|
||||
?>
|
||||
870
dictionaries/tr.dictionary.itop.ui.php
Normal file
870
dictionaries/tr.dictionary.itop.ui.php
Normal file
@@ -0,0 +1,870 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @author Izzet Sirin <izzet.sirin@htr.com.tr>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'gui'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'application'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
//
|
||||
// Class: AuditCategory
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:AuditCategory' => 'Denetleme Kategorisi',
|
||||
'Class:AuditCategory+' => 'Denetlemedeki kategori',
|
||||
'Class:AuditCategory/Attribute:name' => 'Kategori Adı',
|
||||
'Class:AuditCategory/Attribute:name+' => 'Kategornin kısa adı',
|
||||
'Class:AuditCategory/Attribute:description' => 'Kategori tanımlaması',
|
||||
'Class:AuditCategory/Attribute:description+' => 'Kategori tanımlaması',
|
||||
'Class:AuditCategory/Attribute:definition_set' => 'Tanımlama seti',
|
||||
'Class:AuditCategory/Attribute:definition_set+' => 'Denetlenecek nesneler için OQL ifadesi',
|
||||
'Class:AuditCategory/Attribute:rules_list' => 'Denetlem kuralları',
|
||||
'Class:AuditCategory/Attribute:rules_list+' => 'Kategori için denetleme kuralları',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: AuditRule
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:AuditRule' => 'Denetleme Kuralı',
|
||||
'Class:AuditRule+' => 'Denetleme Kategorisi kuralı',
|
||||
'Class:AuditRule/Attribute:name' => 'Kural Adı',
|
||||
'Class:AuditRule/Attribute:name+' => 'Kural Adı',
|
||||
'Class:AuditRule/Attribute:description' => 'Kural tanımlaması',
|
||||
'Class:AuditRule/Attribute:description+' => 'Kural tanımlaması',
|
||||
'Class:AuditRule/Attribute:query' => 'Çalıştırılacak Sorgu',
|
||||
'Class:AuditRule/Attribute:query+' => 'Çalıştırılcak OQL ifadesi',
|
||||
'Class:AuditRule/Attribute:valid_flag' => 'Geçerli nesneler?',
|
||||
'Class:AuditRule/Attribute:valid_flag+' => 'Kural geçerli nesne döndürüse doğru, diğer durumda yanlış',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:true' => 'doğru',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:true+' => 'doğru',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:false' => 'yanlış',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:false+' => 'yanlış',
|
||||
'Class:AuditRule/Attribute:category_id' => 'Kategori',
|
||||
'Class:AuditRule/Attribute:category_id+' => 'Kuralın kategorisi',
|
||||
'Class:AuditRule/Attribute:category_name' => 'Kategori',
|
||||
'Class:AuditRule/Attribute:category_name+' => 'Kural için kategori adı',
|
||||
));
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'addon/userrights'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
//
|
||||
// Class: User
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:User' => 'Kullanıcı',
|
||||
'Class:User+' => 'Kullanıcı',
|
||||
'Class:User/Attribute:finalclass' => 'Hesap tipi',
|
||||
'Class:User/Attribute:finalclass+' => '',
|
||||
'Class:User/Attribute:contactid' => 'İrtibat (kişi)',
|
||||
'Class:User/Attribute:contactid+' => 'İrtibat detayları',
|
||||
'Class:User/Attribute:last_name' => 'Soyadı',
|
||||
'Class:User/Attribute:last_name+' => 'İrtibatın soyadı',
|
||||
'Class:User/Attribute:first_name' => 'Adı',
|
||||
'Class:User/Attribute:first_name+' => 'İrtibatın adı',
|
||||
'Class:User/Attribute:email' => 'E-posta',
|
||||
'Class:User/Attribute:email+' => 'Kişinin e-posta adresi',
|
||||
'Class:User/Attribute:login' => 'Kullanıcı adı',
|
||||
'Class:User/Attribute:login+' => 'Kullanıcı adı',
|
||||
'Class:User/Attribute:language' => 'Dil',
|
||||
'Class:User/Attribute:language+' => 'Dil',
|
||||
'Class:User/Attribute:language/Value:EN US' => 'English',
|
||||
'Class:User/Attribute:language/Value:EN US+' => 'English (U.S.)',
|
||||
'Class:User/Attribute:language/Value:FR FR' => 'French',
|
||||
'Class:User/Attribute:language/Value:FR FR+' => 'French (France)',
|
||||
'Class:User/Attribute:language/Value:TR TR' => 'Turkish',
|
||||
'Class:User/Attribute:language/Value:TR TR+' => 'Turkish (Turkey)',
|
||||
'Class:User/Attribute:profile_list' => 'Profiller',
|
||||
'Class:User/Attribute:profile_list+' => 'Kullanıcı rolü',
|
||||
'Class:User/Attribute:allowed_org_list' => 'Erişim yetkisi verilen kurumlar',
|
||||
'Class:User/Attribute:allowed_org_list+' => 'Kullanıcın erişime yetkili olduğu kurumlar. Kurum tanımlanmaz ise sınırlama olmaz.',
|
||||
|
||||
'Class:User/Error:LoginMustBeUnique' => 'Kullanıcı adı tekil olmalı - "%1s" mevcut bir kullanıcıya ait.',
|
||||
'Class:User/Error:AtLeastOneProfileIsNeeded' => 'En az bir profil kullanıcıya atanmalı',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_Profiles
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:URP_Profiles' => 'Profil',
|
||||
'Class:URP_Profiles+' => 'Kullanıcı profili',
|
||||
'Class:URP_Profiles/Attribute:name' => 'Adı',
|
||||
'Class:URP_Profiles/Attribute:name+' => 'Profil adı',
|
||||
'Class:URP_Profiles/Attribute:description' => 'Tanımlama',
|
||||
'Class:URP_Profiles/Attribute:description+' => 'Profil tanımlama',
|
||||
'Class:URP_Profiles/Attribute:user_list' => 'Kullanıcılar',
|
||||
'Class:URP_Profiles/Attribute:user_list+' => 'bu rolü kullanan kullanıcılar',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_Dimensions
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:URP_Dimensions' => 'boyut',
|
||||
'Class:URP_Dimensions+' => 'uygulama boyutları (silo kullanımları)',
|
||||
'Class:URP_Dimensions/Attribute:name' => 'Adı',
|
||||
'Class:URP_Dimensions/Attribute:name+' => 'Boyut adı',
|
||||
'Class:URP_Dimensions/Attribute:description' => 'Tanımlama',
|
||||
'Class:URP_Dimensions/Attribute:description+' => 'Tanımlama',
|
||||
'Class:URP_Dimensions/Attribute:type' => 'Tip',
|
||||
'Class:URP_Dimensions/Attribute:type+' => 'sınıf adı veya veri tipi (projection unit)',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_UserProfile
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:URP_UserProfile' => 'Kullanıcı Profili',
|
||||
'Class:URP_UserProfile+' => 'Kullanıcı Profili',
|
||||
'Class:URP_UserProfile/Attribute:userid' => 'Kullanıcı',
|
||||
'Class:URP_UserProfile/Attribute:userid+' => 'Kullanıcı hesabı',
|
||||
'Class:URP_UserProfile/Attribute:userlogin' => 'Kullanıcı adı',
|
||||
'Class:URP_UserProfile/Attribute:userlogin+' => 'Kullanıcı hesabı',
|
||||
'Class:URP_UserProfile/Attribute:profileid' => 'Profil',
|
||||
'Class:URP_UserProfile/Attribute:profileid+' => 'Kullanıcı profili',
|
||||
'Class:URP_UserProfile/Attribute:profile' => 'Profil',
|
||||
'Class:URP_UserProfile/Attribute:profile+' => 'Profil adı',
|
||||
'Class:URP_UserProfile/Attribute:reason' => 'Sebep',
|
||||
'Class:URP_UserProfile/Attribute:reason+' => 'Kullanıcının bu rolü alma sebebini açıklayınız',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_UserOrg
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:URP_UserOrg' => 'Kullanıcı Kurumu',
|
||||
'Class:URP_UserOrg+' => 'İzin verilen kurumlar',
|
||||
'Class:URP_UserOrg/Attribute:userid' => 'Kullanıcı',
|
||||
'Class:URP_UserOrg/Attribute:userid+' => 'Kullanıcı hesabı',
|
||||
'Class:URP_UserOrg/Attribute:userlogin' => 'Kullanıcı',
|
||||
'Class:URP_UserOrg/Attribute:userlogin+' => 'Kullanıcı hesabı',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_id' => 'Kurum',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_id+' => 'Erişim yetkisi kurumlar',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_name' => 'Kurumu',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_name+' => 'Erişim yetkisi verilen kurumlar',
|
||||
'Class:URP_UserOrg/Attribute:reason' => 'Sebep',
|
||||
'Class:URP_UserOrg/Attribute:reason+' => 'Kullanıcının bu rolü alma sebebini açıklayınız',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_ProfileProjection
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:URP_ProfileProjection' => 'profile_projection',
|
||||
'Class:URP_ProfileProjection+' => 'profile projections',
|
||||
'Class:URP_ProfileProjection/Attribute:dimensionid' => 'Boyut',
|
||||
'Class:URP_ProfileProjection/Attribute:dimensionid+' => 'uygulama boyutu',
|
||||
'Class:URP_ProfileProjection/Attribute:dimension' => 'Boyut',
|
||||
'Class:URP_ProfileProjection/Attribute:dimension+' => 'uygulama boyutu',
|
||||
'Class:URP_ProfileProjection/Attribute:profileid' => 'Profil',
|
||||
'Class:URP_ProfileProjection/Attribute:profileid+' => 'profil kullanımı',
|
||||
'Class:URP_ProfileProjection/Attribute:profile' => 'Profil',
|
||||
'Class:URP_ProfileProjection/Attribute:profile+' => 'Profil adı',
|
||||
'Class:URP_ProfileProjection/Attribute:value' => 'Değer ifadesi',
|
||||
'Class:URP_ProfileProjection/Attribute:value+' => 'OQL ifadesi (kullanıcı $user) | sabit | | +özellik kodu',
|
||||
'Class:URP_ProfileProjection/Attribute:attribute' => 'Attribute',
|
||||
'Class:URP_ProfileProjection/Attribute:attribute+' => 'Hedef özellik kodu (opsiyonel)',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_ClassProjection
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:URP_ClassProjection' => 'sınıf projeksiyonu',
|
||||
'Class:URP_ClassProjection+' => 'sınıf projeksiyonu',
|
||||
'Class:URP_ClassProjection/Attribute:dimensionid' => 'Boyut',
|
||||
'Class:URP_ClassProjection/Attribute:dimensionid+' => 'uygulama boyutu',
|
||||
'Class:URP_ClassProjection/Attribute:dimension' => 'Boyut',
|
||||
'Class:URP_ClassProjection/Attribute:dimension+' => 'uygulama boyutu',
|
||||
'Class:URP_ClassProjection/Attribute:class' => 'Sınıf',
|
||||
'Class:URP_ClassProjection/Attribute:class+' => 'Hedef sınıf',
|
||||
'Class:URP_ClassProjection/Attribute:value' => 'Değer ifadesi',
|
||||
'Class:URP_ClassProjection/Attribute:value+' => 'OQL ifadesi (kullanıcı $user) | sabit | | +özellik kodu',
|
||||
'Class:URP_ClassProjection/Attribute:attribute' => 'Özellik',
|
||||
'Class:URP_ClassProjection/Attribute:attribute+' => 'Hedef özellik kodu (opsiyonel)',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_ActionGrant
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:URP_ActionGrant' => 'işlem yetkileri',
|
||||
'Class:URP_ActionGrant+' => 'sınıf üzerindeki yetkiler',
|
||||
'Class:URP_ActionGrant/Attribute:profileid' => 'Profil',
|
||||
'Class:URP_ActionGrant/Attribute:profileid+' => 'Kullanım profili',
|
||||
'Class:URP_ActionGrant/Attribute:profile' => 'Profil',
|
||||
'Class:URP_ActionGrant/Attribute:profile+' => 'Kullanım profili',
|
||||
'Class:URP_ActionGrant/Attribute:class' => 'Sınıf',
|
||||
'Class:URP_ActionGrant/Attribute:class+' => 'Hedef sınıf',
|
||||
'Class:URP_ActionGrant/Attribute:permission' => 'Erişim yetkisi',
|
||||
'Class:URP_ActionGrant/Attribute:permission+' => 'yetkili veya yetkisiz?',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:yes' => 'evet',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:yes+' => 'evet',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:no' => 'hayır',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:no+' => 'hayır',
|
||||
'Class:URP_ActionGrant/Attribute:action' => 'İşlem',
|
||||
'Class:URP_ActionGrant/Attribute:action+' => 'verilen sınıf üzerinde uygulanacak işlemler',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_StimulusGrant
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:URP_StimulusGrant' => 'uyarı yetkileri',
|
||||
'Class:URP_StimulusGrant+' => 'nesnenin yaşam döngüsündeki uyarı yetkileri',
|
||||
'Class:URP_StimulusGrant/Attribute:profileid' => 'Profil',
|
||||
'Class:URP_StimulusGrant/Attribute:profileid+' => 'Kullanım profili',
|
||||
'Class:URP_StimulusGrant/Attribute:profile' => 'Profil',
|
||||
'Class:URP_StimulusGrant/Attribute:profile+' => 'Kullanım profili',
|
||||
'Class:URP_StimulusGrant/Attribute:class' => 'Sınıf',
|
||||
'Class:URP_StimulusGrant/Attribute:class+' => 'Hedef sınıf',
|
||||
'Class:URP_StimulusGrant/Attribute:permission' => 'Yetki',
|
||||
'Class:URP_StimulusGrant/Attribute:permission+' => 'yetkili veya yetkisiz?',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:yes' => 'evet',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:yes+' => 'evet',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:no' => 'hayır',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:no+' => 'hayır',
|
||||
'Class:URP_StimulusGrant/Attribute:stimulus' => 'Uyarı',
|
||||
'Class:URP_StimulusGrant/Attribute:stimulus+' => 'uyarı kodu',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_AttributeGrant
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:URP_AttributeGrant' => 'özellik yetkisi',
|
||||
'Class:URP_AttributeGrant+' => 'özellik seviyesinde yetki',
|
||||
'Class:URP_AttributeGrant/Attribute:actiongrantid' => 'İzin verilen işlem',
|
||||
'Class:URP_AttributeGrant/Attribute:actiongrantid+' => 'İşlem izni',
|
||||
'Class:URP_AttributeGrant/Attribute:attcode' => 'Özellik',
|
||||
'Class:URP_AttributeGrant/Attribute:attcode+' => 'Özellik kodu',
|
||||
));
|
||||
|
||||
//
|
||||
// String from the User Interface: menu, messages, buttons, etc...
|
||||
//
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Menu:WelcomeMenu' => 'Hoşgeldiniz',
|
||||
'Menu:WelcomeMenu+' => 'iTop\'a Hoşgeldiniz',
|
||||
'Menu:WelcomeMenuPage' => 'Hoşgeldiniz',
|
||||
'Menu:WelcomeMenuPage+' => 'iTop\'a Hoşgeldiniz',
|
||||
'UI:WelcomeMenu:Title' => 'iTop\'a Hoşgeldiniz',
|
||||
|
||||
'UI:WelcomeMenu:LeftBlock' => '<p>iTop açık kaynak Bilişim İşlem Potalıdır.</p>
|
||||
<ul>Kapsamı:
|
||||
<li>Bilişim altyapısının tanımlandığı ve dokümante edildiği Konfigürasyon Yönetimi CMDB (Configuration management database)modülü.</li>
|
||||
<li>Bilişim altyapısı ile ilgili tüm olayların takibi.</li>
|
||||
<li>Bilişim altyapısının değişim yönetimi.</li>
|
||||
<li>Bilinen hatalar bilgi kütüphanesi.</li>
|
||||
<li>Planlı kesintilerin kayıt altına alınması ve ilgililerin uyarılması.</li>
|
||||
<li>Özet gösterge ekranları</li>
|
||||
</ul>
|
||||
<p>Tüm modüller bağımsız olarak, adım adım kurulabilir.</p>',
|
||||
|
||||
'UI:WelcomeMenu:RightBlock' => '<p>iTop servis sağlayıcı maktığı ile hazırlanmış olup, birden fazla müşteri ve kuruma kolaylıkla hizmet vermeye imkan sağlar.
|
||||
<ul>iTop, zengin iş süreçleri tanımlama imkanıyla:
|
||||
<li>Bilişim yönetim etkinliğini</li>
|
||||
<li>Operasyon performansını</li>
|
||||
<li>Müşteri memnuniyetini ve yönetimin iş performansı hakkında bilgi sahibi olmasını sağlar.</li>
|
||||
</ul>
|
||||
</p>
|
||||
<p>iTop mevcut Bilşim altyapınızla entegre edilmeye açıktır.</p>
|
||||
<p>
|
||||
<ul>Yeni nesil operasyonel Bilişim portalı :
|
||||
<li>Bilişim ortamının daha iyi yönetilmesini.</li>
|
||||
<li>ITIL süreçlerinin kendi başınıza uygulanmaya.</li>
|
||||
<li>İşletmenin en önemli kaynağı olan dokümantasyonu yönetmesine imkan sağlar.</li>
|
||||
</ul>
|
||||
</p>',
|
||||
'UI:WelcomeMenu:AllOpenRequests' => 'Açık istekler: %1$d',
|
||||
'UI:WelcomeMenu:MyCalls' => 'İsteklerim',
|
||||
'UI:WelcomeMenu:OpenIncidents' => 'Açık Arızalar: %1$d',
|
||||
'UI:WelcomeMenu:AllConfigItems' => 'Konfigürasyon Kalemleri: %1$d',
|
||||
'UI:WelcomeMenu:MyIncidents' => 'Bana atanan hatalar',
|
||||
'UI:AllOrganizations' => ' Tüm Kurumlar ',
|
||||
'UI:YourSearch' => 'Arama',
|
||||
'UI:LoggedAsMessage' => '%1$s kullanıcısı ile bağlanıldı',
|
||||
'UI:LoggedAsMessage+Admin' => '%1$s (Administrator) kullanıcısı ile bağlanıldı',
|
||||
'UI:Button:Logoff' => 'Çıkış',
|
||||
'UI:Button:GlobalSearch' => 'Arama',
|
||||
'UI:Button:Search' => ' Arama ',
|
||||
'UI:Button:Query' => ' Sorgu ',
|
||||
'UI:Button:Ok' => 'Tamam',
|
||||
'UI:Button:Cancel' => 'İptal',
|
||||
'UI:Button:Apply' => 'Uygula',
|
||||
'UI:Button:Back' => ' << Geri ',
|
||||
'UI:Button:Next' => ' İleri >> ',
|
||||
'UI:Button:Finish' => ' Bitir ',
|
||||
'UI:Button:DoImport' => ' Dışardan Veri alı çalıştır ! ',
|
||||
'UI:Button:Done' => ' Biiti ',
|
||||
'UI:Button:SimulateImport' => ' Veri alışını simule et ',
|
||||
'UI:Button:Test' => 'Test!',
|
||||
'UI:Button:Evaluate' => ' Değerlendir ',
|
||||
'UI:Button:AddObject' => ' Ekle... ',
|
||||
'UI:Button:BrowseObjects' => ' Listele... ',
|
||||
'UI:Button:Add' => ' Ekle ',
|
||||
'UI:Button:AddToList' => ' << Ekle ',
|
||||
'UI:Button:RemoveFromList' => ' Sil >> ',
|
||||
'UI:Button:FilterList' => ' Filtreleme... ',
|
||||
'UI:Button:Create' => ' Yarat ',
|
||||
'UI:Button:Delete' => ' Sil ! ',
|
||||
'UI:Button:ChangePassword' => ' Şifre değiştir ',
|
||||
'UI:Button:ResetPassword' => ' Şifreyi sıfırla ',
|
||||
|
||||
'UI:SearchToggle' => 'Ara',
|
||||
'UI:ClickToCreateNew' => 'Yeni %1$s yarat',
|
||||
'UI:SearchFor_Class' => '%1$s Arama',
|
||||
'UI:NoObjectToDisplay' => 'Görüntülenecek nesne bulunamadı.',
|
||||
'UI:Error:MandatoryTemplateParameter_object_id' => 'link_attr tanımlandığında object_id alanı zorunludur. Görüntülme (Display) şablonun tanımlamasını kontrol ediniz.',
|
||||
'UI:Error:MandatoryTemplateParameter_target_attr' => 'link_attr tanımlandığında target_attr alanı zorunludur. Görüntülme (Display) şablonun tanımlamasını kontrol ediniz.',
|
||||
'UI:Error:MandatoryTemplateParameter_group_by' => 'group_by alanı zorunludur. Görüntülme (Display) şablonun tanımlamasını kontrol ediniz.',
|
||||
'UI:Error:InvalidGroupByFields' => 'group by geçersiz alan listesi: "%1$s".',
|
||||
'UI:Error:UnsupportedStyleOfBlock' => 'Hata: blok için desteklenmeyen stil: "%1$s".',
|
||||
'UI:Error:IncorrectLinkDefinition_LinkedClass_Class' => 'Hatalı ilişki tanımı: yönetilecek sınıfa: %1$s ait ilişki anahtarı (an external key) sınıfında %2$s bulunamadı',
|
||||
'UI:Error:Object_Class_Id_NotFound' => 'Nesne: %1$s:%2$d bulunamadı.',
|
||||
'UI:Error:WizardCircularReferenceInDependencies' => 'Hata: Alanlar arasında döngüsel bağımlılık (Circular reference in the dependencies) tespit edildi. Veri modelinizi kontrol ediniz.',
|
||||
'UI:Error:UploadedFileTooBig' => 'Yüklenmek istenen dosya çok büyük. (üst sınır %1$s). PHP configürasyonunu kontrol ediniz (upload_max_filesize ve post_max_size parametrelerini düzenleyiniz).',
|
||||
'UI:Error:UploadedFileTruncated.' => 'Yüklenen dosyanın tamamı yüklenemedi !',
|
||||
'UI:Error:NoTmpDir' => 'Gecici dizi (temporary directory) tanımlı değil.',
|
||||
'UI:Error:CannotWriteToTmp_Dir' => 'Geçici dosya diske yazılamadı. upload_tmp_dir = "%1$s".',
|
||||
'UI:Error:UploadStoppedByExtension_FileName' => 'Dosya yükleme dosya uzantısı nedeniyle duruduruldu. (Dosya adı = "%1$s").',
|
||||
'UI:Error:UploadFailedUnknownCause_Code' => 'Dosya yükleme bilinmeyen bir sebeple başarısız oldu. (Hata kodu = "%1$s").',
|
||||
|
||||
'UI:Error:1ParametersMissing' => 'Hata: Bu operasyon için %1$s parametresi tanımlanmalı.',
|
||||
'UI:Error:2ParametersMissing' => 'Hata: Bu operasyon için %1$s ve %2$s parametreleri tanımlanmalı.',
|
||||
'UI:Error:3ParametersMissing' => 'Hata: Bu operasyon için %1$s, %2$s ve %3$s parametreleri tanımlanmalı.',
|
||||
'UI:Error:4ParametersMissing' => 'Hata: Bu operasyon için %1$s, %2$s, %3$s ve %4$s parametreleri tanımlanmalı.',
|
||||
'UI:Error:IncorrectOQLQuery_Message' => 'Hata: hatalı OQL sorgusu: %1$s',
|
||||
'UI:Error:AnErrorOccuredWhileRunningTheQuery_Message' => 'Sorgu sırasında hata oluştu: %1$s',
|
||||
'UI:Error:ObjectAlreadyUpdated' => 'Hata: nesne hali hazırda güncellendi.',
|
||||
'UI:Error:ObjectCannotBeUpdated' => 'Hata: nesne güncellenemedi.',
|
||||
'UI:Error:ObjectsAlreadyDeleted' => 'Hata: nesne hali hazırda silinmiş!',
|
||||
'UI:Error:BulkDeleteNotAllowedOn_Class' => '%1$s sınıfına ait nesnelerin toplu silimine yetkiniz yok.',
|
||||
'UI:Error:DeleteNotAllowedOn_Class' => '%1$s sınıfına ait nesnelerin silimine yetkiniz yok.',
|
||||
'UI:Error:BulkModifyNotAllowedOn_Class' => '%1$s sınıfına ait nesnelerin toplu güncellenmesine yetkiniz yok.',
|
||||
'UI:Error:ObjectAlreadyCloned' => 'Hata: nesne hali hazırda klonlanmış!',
|
||||
'UI:Error:ObjectAlreadyCreated' => 'Hata: nesne hali hazırda yaratılmış!',
|
||||
'UI:Error:Invalid_Stimulus_On_Object_In_State' => 'Hata: "%3$s" durumundaki %2$s nesnesi için "%1$s" uyarısı geçersizdir.',
|
||||
|
||||
|
||||
'UI:GroupBy:Count' => 'Say',
|
||||
'UI:GroupBy:Count+' => 'Eleman sayısı',
|
||||
'UI:CountOfObjects' => 'Kritere uyan %1$d nesne bulundu.',
|
||||
'UI_CountOfObjectsShort' => '%1$d nesne.',
|
||||
'UI:NoObject_Class_ToDisplay' => '%1$s nesne listelenecek',
|
||||
'UI:History:LastModified_On_By' => '%1$s tarihinde %2$s tarafından değiştirilmiş.',
|
||||
'UI:HistoryTab' => 'Tarihçe',
|
||||
'UI:NotificationsTab' => 'Uyarılar',
|
||||
'UI:History:Date' => 'Tarih',
|
||||
'UI:History:Date+' => 'Değişiklik tarihi',
|
||||
'UI:History:User' => 'Kullanıcı',
|
||||
'UI:History:User+' => 'Değişikliğ yapan kullanıcı',
|
||||
'UI:History:Changes' => 'Değişiklikler',
|
||||
'UI:History:Changes+' => 'Nesneye yapılan değişiklikler',
|
||||
'UI:Loading' => 'Yükleniyor...',
|
||||
'UI:Menu:Actions' => 'İşlemler',
|
||||
'UI:Menu:New' => 'Yeni...',
|
||||
'UI:Menu:Add' => 'Ekle...',
|
||||
'UI:Menu:Manage' => 'Yönet...',
|
||||
'UI:Menu:EMail' => 'e-posta',
|
||||
'UI:Menu:CSVExport' => 'CSV olarak dışarı ver',
|
||||
'UI:Menu:Modify' => 'Düzenle...',
|
||||
'UI:Menu:Delete' => 'Sil...',
|
||||
'UI:Menu:Manage' => 'Yönet...',
|
||||
'UI:Menu:BulkDelete' => 'Sil...',
|
||||
'UI:UndefinedObject' => 'tanımsız',
|
||||
'UI:Document:OpenInNewWindow:Download' => 'Yeni pencerede aç: %1$s, Karşıdan yükle: %2$s',
|
||||
'UI:SelectAllToggle+' => 'Tümünü Seç / Tümünü seçme',
|
||||
'UI:TruncatedResults' => '%1$d / %2$d',
|
||||
'UI:DisplayAll' => 'Hepsini göster',
|
||||
'UI:CollapseList' => 'Gizle',
|
||||
'UI:CountOfResults' => '%1$d nesne',
|
||||
'UI:ChangesLogTitle' => 'değişiklik kaydı (%1$d):',
|
||||
'UI:EmptyChangesLogTitle' => 'deiğişiklik kaydı boş',
|
||||
'UI:SearchFor_Class_Objects' => '%1$s nesnelerini ara',
|
||||
'UI:OQLQueryBuilderTitle' => 'OQL Sorgu hazırlama',
|
||||
'UI:OQLQueryTab' => 'OQL Sorgu',
|
||||
'UI:SimpleSearchTab' => 'Basit arama',
|
||||
'UI:Details+' => 'Detaylar',
|
||||
'UI:SearchValue:Any' => '* Herhangi *',
|
||||
'UI:SearchValue:Mixed' => '* karışık *',
|
||||
'UI:SelectOne' => '-- Birini seçiniz --',
|
||||
'UI:Login:Welcome' => 'iTop\'a Hoşgeldiniz!',
|
||||
'UI:Login:IncorrectLoginPassword' => 'Hatalı kullanıcı/şifre tekrar deneyiniz.',
|
||||
'UI:Login:IdentifyYourself' => 'Devam etmeden önce kendinizi tanıtınız',
|
||||
'UI:Login:UserNamePrompt' => 'Kullanıcı Adı',
|
||||
'UI:Login:PasswordPrompt' => 'Şifre',
|
||||
'UI:Login:ChangeYourPassword' => 'Şifre Değiştir',
|
||||
'UI:Login:OldPasswordPrompt' => 'Mevcut şifre',
|
||||
'UI:Login:NewPasswordPrompt' => 'Yeni şifre',
|
||||
'UI:Login:RetypeNewPasswordPrompt' => 'Yeni şifre tekrar',
|
||||
'UI:Login:IncorrectOldPassword' => 'Hata: mevcut şifre hatalı',
|
||||
'UI:LogOffMenu' => 'Çıkış',
|
||||
'UI:LogOff:ThankYou' => 'iTop Kullanıdığınız için teşekkürler',
|
||||
'UI:LogOff:ClickHereToLoginAgain' => 'Tekrar bağlanmak için tıklayınız...',
|
||||
'UI:ChangePwdMenu' => 'Şifre değiştir...',
|
||||
'UI:Login:RetypePwdDoesNotMatch' => 'Yeni şifre eşlenmedi !',
|
||||
'UI:Button:Login' => 'iTop\'a Giriş',
|
||||
'UI:Login:Error:AccessRestricted' => 'iTop erişim sınırlandırıldı. Sistem yöneticisi ile irtibata geçiniz',
|
||||
'UI:Login:Error:AccessAdmin' => 'Erişim sistem yönetci hesaplaları ile mümkün. Sistem yöneticisi ile irtibata geçiniz.',
|
||||
'UI:CSVImport:MappingSelectOne' => '-- Birini seçiniz --',
|
||||
'UI:CSVImport:MappingNotApplicable' => '-- alanı ihmal et --',
|
||||
'UI:CSVImport:NoData' => 'Boş veri seti..., veri giriniz!',
|
||||
'UI:Title:DataPreview' => 'Veri öngörüntüleme',
|
||||
'UI:CSVImport:ErrorOnlyOneColumn' => 'Hata: Veri sadece bir kolon içeriyor. Doğru ayıraç karakteri seçtiniz mi ?',
|
||||
'UI:CSVImport:FieldName' => 'Alan %1$d',
|
||||
'UI:CSVImport:DataLine1' => 'Veri Satırı 1',
|
||||
'UI:CSVImport:DataLine2' => 'Veri Satırı 2',
|
||||
'UI:CSVImport:idField' => 'id (Tekil anahtar)',
|
||||
'UI:Title:BulkImport' => 'iTop - Toplu giriş',
|
||||
'UI:Title:BulkImport+' => 'CSV içeri aktarma aracı',
|
||||
'UI:CSVImport:ClassesSelectOne' => '-- Birini seçiniz --',
|
||||
'UI:CSVImport:ErrorExtendedAttCode' => 'Hata: "%1$s" hatalı kod, çünkü "%2$s" ile "%3$s" tekil ilişkide değil',
|
||||
'UI:CSVImport:ObjectsWillStayUnchanged' => '%1$d adet nesne değişmeyecek.',
|
||||
'UI:CSVImport:ObjectsWillBeModified' => '%1$d adet nesne değiştirilecek.',
|
||||
'UI:CSVImport:ObjectsWillBeAdded' => '%1$d adet nesne eklenecek.',
|
||||
'UI:CSVImport:ObjectsWillHaveErrors' => '%1$d adet nesnede hata oluştu.',
|
||||
'UI:CSVImport:ObjectsRemainedUnchanged' => '%1$d adet nesne değişmedi.',
|
||||
'UI:CSVImport:ObjectsWereModified' => '%1$d adet nesne güncellendi.',
|
||||
'UI:CSVImport:ObjectsWereAdded' => '%1$d adet nesne eklendi.',
|
||||
'UI:CSVImport:ObjectsHadErrors' => '%1$d adet nesnede hata tespit edildi.',
|
||||
'UI:Title:CSVImportStep2' => 'Step 2 of 5: CSV veri seçenekleri',
|
||||
'UI:Title:CSVImportStep3' => 'Step 3 of 5: Veri eşleme',
|
||||
'UI:Title:CSVImportStep4' => 'Step 4 of 5: Verinin içeri aktarım simülasyonu',
|
||||
'UI:Title:CSVImportStep5' => 'Step 5 of 5: İçeri aktarım tamamlandı',
|
||||
'UI:CSVImport:LinesNotImported' => 'Satırlar yüklenemedi:',
|
||||
'UI:CSVImport:LinesNotImported+' => 'Aşağıdaki satırlar hata nedeniyle yüklenemedi',
|
||||
'UI:CSVImport:SeparatorComma+' => ', (virgül)',
|
||||
'UI:CSVImport:SeparatorSemicolon+' => '; (noktalı virgül)',
|
||||
'UI:CSVImport:SeparatorTab+' => 'tab',
|
||||
'UI:CSVImport:SeparatorOther' => 'diğer:',
|
||||
'UI:CSVImport:QualifierDoubleQuote+' => '" (çift tırnak)',
|
||||
'UI:CSVImport:QualifierSimpleQuote+' => '\' (tırnak)',
|
||||
'UI:CSVImport:QualifierOther' => 'diğer:',
|
||||
'UI:CSVImport:TreatFirstLineAsHeader' => 'İlk satırı başlık olarak değerlendir(kolon isimleri)',
|
||||
'UI:CSVImport:Skip_N_LinesAtTheBeginning' => 'Skip %1$s line(s) at the beginning of the file',
|
||||
'UI:CSVImport:CSVDataPreview' => 'CSV Veri Görüntüleme',
|
||||
'UI:CSVImport:SelectFile' => 'İçeri aktarılacak dosyayı seçiniz:',
|
||||
'UI:CSVImport:Tab:LoadFromFile' => 'Dosyadan oku',
|
||||
'UI:CSVImport:Tab:CopyPaste' => 'Veriyi kopyala yapıştır',
|
||||
'UI:CSVImport:Tab:Templates' => 'Şablonlar',
|
||||
'UI:CSVImport:PasteData' => 'İçeri aktarılacak veriyi yapıştır:',
|
||||
'UI:CSVImport:PickClassForTemplate' => 'İndirilecek şablonu seçiniz: ',
|
||||
'UI:CSVImport:SeparatorCharacter' => 'Ayıraç karakteri:',
|
||||
'UI:CSVImport:TextQualifierCharacter' => 'Metin belirteç karakteri',
|
||||
'UI:CSVImport:CommentsAndHeader' => 'Yorum ve başlık',
|
||||
'UI:CSVImport:SelectClass' => 'İçeri aktarılacak sınıfı seçiniz:',
|
||||
'UI:CSVImport:AdvancedMode' => 'Uzman modu',
|
||||
'UI:CSVImport:AdvancedMode+' => 'Uzman modunda (In advanced mode) "id" (primary key) alanı nesnenin güncellenmesi ve adının değiştirilmesi için kullanılabilir.' .
|
||||
'"id" (mevcut ise) alanı tek sorgu kriteri olarak kullnılabilri ve diğer sorgu kriterleri ile birleştirilmez.',
|
||||
'UI:CSVImport:SelectAClassFirst' => 'Eşlemeyi yapmak için önce sınıfı seçiniz.',
|
||||
'UI:CSVImport:HeaderFields' => 'Alanlar',
|
||||
'UI:CSVImport:HeaderMappings' => 'Eşlemeler',
|
||||
'UI:CSVImport:HeaderSearch' => 'Arama?',
|
||||
'UI:CSVImport:AlertIncompleteMapping' => 'Lütfen tüm alanlar için alan eşlemesini yapınız.',
|
||||
'UI:CSVImport:AlertNoSearchCriteria' => 'Lütfen en az bir sorgu kriteri seçiniz.',
|
||||
'UI:CSVImport:Encoding' => 'Karakter kodlaması',
|
||||
'UI:UniversalSearchTitle' => 'iTop - Genel arama',
|
||||
'UI:UniversalSearch:Error' => 'Hata: %1$s',
|
||||
'UI:UniversalSearch:LabelSelectTheClass' => 'Aranacak sınıfı seçiniz: ',
|
||||
|
||||
'UI:Audit:Title' => 'iTop - CMDB Denetleme',
|
||||
'UI:Audit:InteractiveAudit' => 'Etkileşimli Denetleme',
|
||||
'UI:Audit:HeaderAuditRule' => 'Denetleme Kuralı',
|
||||
'UI:Audit:HeaderNbObjects' => 'Nesne Sayısı',
|
||||
'UI:Audit:HeaderNbErrors' => 'Hata sayısı',
|
||||
'UI:Audit:PercentageOk' => '% Tamam',
|
||||
|
||||
'UI:RunQuery:Title' => 'iTop - OQL Sorgu değerlendirme',
|
||||
'UI:RunQuery:QueryExamples' => 'Sorgu örnekleri',
|
||||
'UI:RunQuery:HeaderPurpose' => 'Amaç',
|
||||
'UI:RunQuery:HeaderPurpose+' => 'Sorgu açıklaması',
|
||||
'UI:RunQuery:HeaderOQLExpression' => 'OQL ifadesi',
|
||||
'UI:RunQuery:HeaderOQLExpression+' => 'OQL yapısında sorgu',
|
||||
'UI:RunQuery:ExpressionToEvaluate' => 'Değerlendirilecek ifade: ',
|
||||
'UI:RunQuery:MoreInfo' => 'Sorgu hakkında detaylı bilgi: ',
|
||||
'UI:RunQuery:DevelopedQuery' => 'Yeniden düzenlenen sorgu: ',
|
||||
'UI:RunQuery:SerializedFilter' => 'Özel filtre: ',
|
||||
'UI:RunQuery:Error' => 'Sorgu sırasında hata oluştu: %1$s',
|
||||
|
||||
'UI:Schema:Title' => 'iTop objects schema',
|
||||
'UI:Schema:CategoryMenuItem' => 'Kategori <b>%1$s</b>',
|
||||
'UI:Schema:Relationships' => 'İlişkiler',
|
||||
'UI:Schema:AbstractClass' => 'Soyut sınıf: bu sınıftan nesne türetilemez.',
|
||||
'UI:Schema:NonAbstractClass' => 'Soyut olmayan sınıf: bu sınıftan nesne türetilebilir.',
|
||||
'UI:Schema:ClassHierarchyTitle' => 'Sınıf ilişkisi',
|
||||
'UI:Schema:AllClasses' => 'Tüm sınıflar',
|
||||
'UI:Schema:ExternalKey_To' => 'Harici anahtar %1$s',
|
||||
'UI:Schema:Columns_Description' => 'Kolonlar: <em>%1$s</em>',
|
||||
'UI:Schema:Default_Description' => 'Öndeğer: "%1$s"',
|
||||
'UI:Schema:NullAllowed' => 'Boş olamaz',
|
||||
'UI:Schema:NullNotAllowed' => 'Boş olabilir',
|
||||
'UI:Schema:Attributes' => 'Özellikler',
|
||||
'UI:Schema:AttributeCode' => 'Özellik kodu',
|
||||
'UI:Schema:AttributeCode+' => 'Özellik için dahili kod',
|
||||
'UI:Schema:Label' => 'Etiket',
|
||||
'UI:Schema:Label+' => 'Özellik etiketi',
|
||||
'UI:Schema:Type' => 'Tip',
|
||||
|
||||
'UI:Schema:Type+' => 'Özellik veri tipi',
|
||||
'UI:Schema:Origin' => 'Kaynak',
|
||||
'UI:Schema:Origin+' => 'Özelliğin tanımlandığı ana sınıf',
|
||||
'UI:Schema:Description' => 'Tanımlama',
|
||||
'UI:Schema:Description+' => 'Özellik tanımı',
|
||||
'UI:Schema:AllowedValues' => 'Alabileceği değerler',
|
||||
'UI:Schema:AllowedValues+' => 'Özelliğin alabileceği değer kısıtları',
|
||||
'UI:Schema:MoreInfo' => 'Daha fazla bilgi',
|
||||
'UI:Schema:MoreInfo+' => 'Veritabanında tanımlı alan için daha fazla bilgi',
|
||||
'UI:Schema:SearchCriteria' => 'Arama kriteri',
|
||||
'UI:Schema:FilterCode' => 'Filtreleme kodu',
|
||||
'UI:Schema:FilterCode+' => 'Arama kriter kodu',
|
||||
'UI:Schema:FilterDescription' => 'Tanımlama',
|
||||
'UI:Schema:FilterDescription+' => 'Arama kiter kodu tanılaması',
|
||||
'UI:Schema:AvailOperators' => 'Kullanılabilir işlemler',
|
||||
'UI:Schema:AvailOperators+' => 'Arama kriteri için kullanılabilir işlemler',
|
||||
'UI:Schema:ChildClasses' => 'Alt sınıflar',
|
||||
'UI:Schema:ReferencingClasses' => 'Refrans sınıflar',
|
||||
'UI:Schema:RelatedClasses' => 'İlgili sınıflar',
|
||||
'UI:Schema:LifeCycle' => 'yaşam döngüsü',
|
||||
'UI:Schema:Triggers' => 'Tetikleyiciler',
|
||||
'UI:Schema:Relation_Code_Description' => 'İlişki <em>%1$s</em> (%2$s)',
|
||||
'UI:Schema:RelationDown_Description' => 'Aşağı: %1$s',
|
||||
'UI:Schema:RelationUp_Description' => 'Yukarı: %1$s',
|
||||
'UI:Schema:RelationPropagates' => '%1$s: %2$d seviye öteler, sorgu: %3$s',
|
||||
'UI:Schema:RelationDoesNotPropagate' => '%1$s: (%2$d seviye) ötelenmez, sorgu: %3$s',
|
||||
'UI:Schema:Class_ReferencingClasses_From_By' => '%1$s %2$s\'nın %3$s alanı ile ilişkilendirilmiştir',
|
||||
'UI:Schema:Class_IsLinkedTo_Class_Via_ClassAndAttribute' => '%1$s alanı %3$s::<em>%4$s</em> aracılığı %2$s ile ilişkilendirilmiştir',
|
||||
'UI:Schema:Links:1-n' => 'Sınıf bağlantısı %1$s (1:n links):',
|
||||
'UI:Schema:Links:n-n' => 'Sınıf bağlantısı %1$s (n:n links):',
|
||||
'UI:Schema:Links:All' => 'İlişkili sınıfların grafiği',
|
||||
'UI:Schema:NoLifeCyle' => 'Bu sınıf için yaşam döngüsü tanımlanmamış.',
|
||||
'UI:Schema:LifeCycleTransitions' => 'Geçişler',
|
||||
'UI:Schema:LifeCyleAttributeOptions' => 'Özellik seçenekleri',
|
||||
'UI:Schema:LifeCycleHiddenAttribute' => 'Gizli',
|
||||
'UI:Schema:LifeCycleReadOnlyAttribute' => 'Salt okunur',
|
||||
'UI:Schema:LifeCycleMandatoryAttribute' => 'Zorunlu Alan',
|
||||
'UI:Schema:LifeCycleAttributeMustChange' => 'Değiştirilmesi gereken',
|
||||
'UI:Schema:LifeCycleAttributeMustPrompt' => 'Kullanıcıdan değeri değüiştirmesi istenir',
|
||||
'UI:Schema:LifeCycleEmptyList' => 'boş liste',
|
||||
|
||||
'UI:LinksWidget:Autocomplete+' => 'İlk 3 karakteri giriniz...',
|
||||
'UI:Combo:SelectValue' => '--- değer seçiniz ---',
|
||||
'UI:Label:SelectedObjects' => 'Seçilen nesneler: ',
|
||||
'UI:Label:AvailableObjects' => 'Seçilebilir nesneler: ',
|
||||
'UI:Link_Class_Attributes' => '%1$s özellikler',
|
||||
'UI:SelectAllToggle+' => 'Tümünü seç / Tümünü seçme',
|
||||
'UI:AddObjectsOf_Class_LinkedWith_Class_Instance' => '%2$s: %3$s ile ilişkideki %1$s nesnelerini Ekle ',
|
||||
'UI:AddObjectsOf_Class_LinkedWith_Class' => '%2$s ile %1$s arasında yeni bağlantı oluştur ',
|
||||
'UI:ManageObjectsOf_Class_LinkedWith_Class_Instance' => '%2$s: %3$s ile bağlantılı %1$s nesnelerini yönet ',
|
||||
'UI:AddLinkedObjectsOf_Class' => '%1$s nesnelerini ekle...',
|
||||
'UI:RemoveLinkedObjectsOf_Class' => 'Seçili nesnleri sil',
|
||||
'UI:Message:EmptyList:UseAdd' => 'Liste boş, Yeni nesne ekleme için "Yeni..." seçiniz.',
|
||||
'UI:Message:EmptyList:UseSearchForm' => 'Eklemek istediğiniz nesneleri bulmak için yukarıdaki arama formunu kullanınız.',
|
||||
|
||||
'UI:Wizard:FinalStepTitle' => 'Final step: confirmation',
|
||||
'UI:Title:DeletionOf_Object' => '%1$s silimi',
|
||||
'UI:Title:BulkDeletionOf_Count_ObjectsOf_Class' => '%2$s sınıfına ait çoklu %1$d nesne silimi',
|
||||
'UI:Delete:NotAllowedToDelete' => 'Bu nesneyi silmek için yetkiniz yok',
|
||||
'UI:Delete:NotAllowedToUpdate_Fields' => '%1$s alanlarını güncellemek için yetkiniz yok',
|
||||
'UI:Error:CannotDeleteBecause' => 'This object could not be deleted because: %1$s',
|
||||
'UI:Error:NotEnoughRightsToDelete' => 'Nesne yetersiz yetki nedeniyle silinemedi',
|
||||
'UI:Error:CannotDeleteBecauseOfDepencies' => 'Bu nesneyi silmek için öncelikli dışarıdan yapılması gereken işlemler var',
|
||||
'UI:Archive_User_OnBehalfOf_User' => '%1$s on behalf of %2$s',
|
||||
'UI:Delete:AutomaticallyDeleted' => 'otomatik olarak silindi',
|
||||
'UI:Delete:AutomaticResetOf_Fields' => '%1$s alanlarını otomatik sıfırla',
|
||||
'UI:Delete:CleaningUpRefencesTo_Object' => '%1$s nesnesine verilen tüm referansları temizle...',
|
||||
'UI:Delete:CleaningUpRefencesTo_Several_ObjectsOf_Class' => '%2$s sınıfına ait %1$d nesnesinin tüm referanslarını temizle ...',
|
||||
'UI:Delete:Done+' => 'Ne yapıldı...',
|
||||
'UI:Delete:_Name_Class_Deleted' => '%1$s - %2$s silindi.',
|
||||
'UI:Delete:ConfirmDeletionOf_Name' => '%1$s\'in silimi',
|
||||
'UI:Delete:ConfirmDeletionOf_Count_ObjectsOf_Class' => '%2$s sınıfına ait %1$d nesnelerinin silimi ',
|
||||
// 'UI:Delete:ShouldBeDeletedAtomaticallyButNotPossible' => 'Otomatik silimesini mi istiyorsunuz, ancak buna yetkiniz yok',
|
||||
// 'UI:Delete:MustBeDeletedManuallyButNotPossible' => 'Manuel silinmeli - ancak bu nesneyi silmeye yetkiniz yok, lütfen sistem yöneticisiyle irtibata geçiniz.',
|
||||
'UI:Delete:WillBeDeletedAutomatically' => 'Otomatik olarak silinecek',
|
||||
'UI:Delete:MustBeDeletedManually' => 'Manuel silinmeli',
|
||||
'UI:Delete:CannotUpdateBecause_Issue' => 'Otomatik güncellenmeli, ancak: %1$s',
|
||||
'UI:Delete:WillAutomaticallyUpdate_Fields' => 'otomatik güncellenecek (reset: %1$s)',
|
||||
'UI:Delete:Count_Objects/LinksReferencing_Object' => '%1$d nesne/ilişki %2$s\'yi referans ediyor',
|
||||
'UI:Delete:Count_Objects/LinksReferencingTheObjects' => '%1$d silinmek istenen nesne/bağlantıları referans veriyor',
|
||||
'UI:Delete:ReferencesMustBeDeletedToEnsureIntegrity' => 'Veri tabanı doğruluğu(Database integrity) için yeni referans verilmesi engellenmelidir',
|
||||
'UI:Delete:Consequence+' => 'Ne yapılacak',
|
||||
'UI:Delete:SorryDeletionNotAllowed' => 'Bu nesneyi silmeye yetkiniz yok, yukarıdaki açıklamayı bakınız',
|
||||
'UI:Delete:PleaseDoTheManualOperations' => 'Bu nesneyi silmeden önce yukarıdaki işlemleri manuel olarak yapınız',
|
||||
'UI:Delect:Confirm_Object' => '%1$s\'i silmek istediğnizden emin misiniz?',
|
||||
'UI:Delect:Confirm_Count_ObjectsOf_Class' => '%1$d nesnesini (sınıfı %2$s) silmek istediğinizden emin misiniz?',
|
||||
'UI:WelcomeToITop' => 'iTop\'a Hoşgeldiniz',
|
||||
'UI:DetailsPageTitle' => 'iTop - %1$s - %2$s detayları',
|
||||
'UI:ErrorPageTitle' => 'iTop - Hata',
|
||||
'UI:ObjectDoesNotExist' => 'Nesne mevcut değil veya yetkiniz yok.',
|
||||
'UI:SearchResultsPageTitle' => 'iTop - Arama Sonuçları',
|
||||
'UI:Search:NoSearch' => 'Nothing to search for',
|
||||
'UI:FullTextSearchTitle_Text' => '"%1$s" için arama sonuçları:',
|
||||
'UI:Search:Count_ObjectsOf_Class_Found' => '%2$s sınıfına ait %1$d nesne bulundu.',
|
||||
'UI:Search:NoObjectFound' => 'Kayıt bulunamadı.',
|
||||
'UI:ModificationPageTitle_Object_Class' => 'iTop - %1$s - %2$s modifikasyon',
|
||||
'UI:ModificationTitle_Class_Object' => '%1$s: <span class=\"hilite\">%2$s</span> modifikasyonu',
|
||||
'UI:ClonePageTitle_Object_Class' => 'iTop - %1$s - %2$s modifikasyonunu klonlayınız',
|
||||
'UI:CloneTitle_Class_Object' => '%1$s klonu: <span class=\"hilite\">%2$s</span>',
|
||||
'UI:CreationPageTitle_Class' => 'iTop - Yeni %1$s yaratımı',
|
||||
'UI:CreationTitle_Class' => 'Yeni %1$s yarat',
|
||||
'UI:SelectTheTypeOf_Class_ToCreate' => 'Yaratılacak %1$s nesne tipini seçiniz',
|
||||
'UI:Class_Object_NotUpdated' => 'Değişiklik tespit edilemedi, %1$s (%2$s) <strong>güncellenmedi</strong>.',
|
||||
'UI:Class_Object_Updated' => '%1$s (%2$s) güncellendi.',
|
||||
'UI:BulkDeletePageTitle' => 'iTop - Toplu silme işlemi',
|
||||
'UI:BulkDeleteTitle' => 'Silmek istediğiniz nesneleri seçiniz:',
|
||||
'UI:PageTitle:ObjectCreated' => 'iTop Nesne yaratıldı.',
|
||||
'UI:Title:Object_Of_Class_Created' => '%1$s - %2$s yaratıldı.',
|
||||
'UI:Apply_Stimulus_On_Object_In_State_ToTarget_State' => '%1$s işlemi %2$s durumunda %3$s nesnesine uygulanır. Bir sonraki durum: %4$s.',
|
||||
'UI:ObjectCouldNotBeWritten' => 'Nesne kaydedilemedi: %1$s',
|
||||
'UI:PageTitle:FatalError' => 'iTop - Kritik Hata',
|
||||
'UI:SystemIntrusion' => 'Bu işlem için yetkiniz yok',
|
||||
'UI:FatalErrorMessage' => 'Kritik Hata, iTop devam edemiyor.',
|
||||
'UI:Error_Details' => 'Hata: %1$s.',
|
||||
|
||||
'UI:PageTitle:ClassProjections' => 'iTop Kullanıcı Yönetimi - sınıf koruması',
|
||||
'UI:PageTitle:ProfileProjections' => 'iTop Kullanıcı Yönetimi - profil koruması',
|
||||
'UI:UserManagement:Class' => 'Sınıf',
|
||||
'UI:UserManagement:Class+' => 'Nesnin sınıfı',
|
||||
'UI:UserManagement:ProjectedObject' => 'Nesne',
|
||||
'UI:UserManagement:ProjectedObject+' => 'Projected object',
|
||||
'UI:UserManagement:AnyObject' => '* herhangi *',
|
||||
'UI:UserManagement:User' => 'Kullanıcı',
|
||||
'UI:UserManagement:User+' => 'User involved in the projection',
|
||||
'UI:UserManagement:Profile' => 'Profil',
|
||||
'UI:UserManagement:Profile+' => 'Profile in which the projection is specified',
|
||||
'UI:UserManagement:Action:Read' => 'Oku',
|
||||
'UI:UserManagement:Action:Read+' => 'Nesneyi görüntüle',
|
||||
'UI:UserManagement:Action:Modify' => 'Güncelle',
|
||||
'UI:UserManagement:Action:Modify+' => 'Nesneyi yarat/güncelle',
|
||||
'UI:UserManagement:Action:Delete' => 'Sil',
|
||||
'UI:UserManagement:Action:Delete+' => 'Nesneleri sil',
|
||||
'UI:UserManagement:Action:BulkRead' => 'Toplu oku (dışarı aktar)',
|
||||
'UI:UserManagement:Action:BulkRead+' => 'Nesneleri listele veya toplu dışarı aktar',
|
||||
'UI:UserManagement:Action:BulkModify' => 'Toplu güncelleme',
|
||||
'UI:UserManagement:Action:BulkModify+' => 'Toplu yaratma/güncelleme(CSV içeri aktar)',
|
||||
'UI:UserManagement:Action:BulkDelete' => 'Toplu Silim',
|
||||
'UI:UserManagement:Action:BulkDelete+' => 'Nesneleri toplu olarak sil',
|
||||
'UI:UserManagement:Action:Stimuli' => 'Uyarı',
|
||||
'UI:UserManagement:Action:Stimuli+' => 'İzin verilen çoklu işlemler',
|
||||
'UI:UserManagement:Action' => 'İşlem',
|
||||
'UI:UserManagement:Action+' => 'İşlem kullanıcı tarafından yapıldı',
|
||||
'UI:UserManagement:TitleActions' => 'İşlemler',
|
||||
'UI:UserManagement:Permission' => 'Yetki',
|
||||
'UI:UserManagement:Permission+' => 'Kullanıcı yetkileri',
|
||||
'UI:UserManagement:Attributes' => 'Özellikler',
|
||||
'UI:UserManagement:ActionAllowed:Yes' => 'Evet',
|
||||
'UI:UserManagement:ActionAllowed:No' => 'Hayır',
|
||||
'UI:UserManagement:AdminProfile+' => 'Sistem Yöneticisi tüm okuma/yazma işlemleri için yetkilidir.',
|
||||
'UI:UserManagement:NoLifeCycleApplicable' => 'N/A',
|
||||
'UI:UserManagement:NoLifeCycleApplicable+' => 'Bu nesne için yaşam döngüsü tanımsız',
|
||||
'UI:UserManagement:GrantMatrix' => 'Yetkiler',
|
||||
'UI:UserManagement:LinkBetween_User_And_Profile' => '%1$s ve %2$s arasındaki ilişki',
|
||||
'UI:UserManagement:LinkBetween_User_And_Org' => '%1$s ve %2$s arasındaki ilişki',
|
||||
|
||||
'Menu:AdminTools' => 'Yönetim Araçları',
|
||||
'Menu:AdminTools+' => 'Yönetim Araçları',
|
||||
'Menu:AdminTools?' => 'Yönetici profiline izin verilen araçlar',
|
||||
|
||||
'UI:ChangeManagementMenu' => 'Değişiklik Yönetimi',
|
||||
'UI:ChangeManagementMenu+' => 'Değişiklik Yönetimi',
|
||||
'UI:ChangeManagementMenu:Title' => 'Değişiklik Özeti',
|
||||
'UI-ChangeManagementMenu-ChangesByType' => 'Değişiklik tipine göre',
|
||||
'UI-ChangeManagementMenu-ChangesByStatus' => 'Değişiklik durumuna göre',
|
||||
'UI-ChangeManagementMenu-ChangesByWorkgroup' => 'İş grubuna değişiklikler',
|
||||
'UI-ChangeManagementMenu-ChangesNotYetAssigned' => 'Atanmamış Değişiklikler',
|
||||
|
||||
'UI:ConfigurationItemsMenu'=> 'Konfigürasyon kalemleri',
|
||||
'UI:ConfigurationItemsMenu+'=> 'Tüm cihazlar',
|
||||
'UI:ConfigurationItemsMenu:Title' => 'Konfigürasyon Kalemlerinin Özeti',
|
||||
'UI-ConfigurationItemsMenu-ServersByCriticity' => 'Servers by criticity',
|
||||
'UI-ConfigurationItemsMenu-PCsByCriticity' => 'PCs by criticity',
|
||||
'UI-ConfigurationItemsMenu-NWDevicesByCriticity' => 'Network devices by criticity',
|
||||
'UI-ConfigurationItemsMenu-ApplicationsByCriticity' => 'Applications by criticity',
|
||||
|
||||
'UI:ConfigurationManagementMenu' => 'Konfigürasyon Yönetimi',
|
||||
'UI:ConfigurationManagementMenu+' => 'Konfigürasyon Yönetimi',
|
||||
'UI:ConfigurationManagementMenu:Title' => 'Altyapı Özeti',
|
||||
'UI-ConfigurationManagementMenu-InfraByType' => 'Infrastructure objects by type',
|
||||
'UI-ConfigurationManagementMenu-InfraByStatus' => 'Infrastructure objects by status',
|
||||
|
||||
'UI:ConfigMgmtMenuOverview:Title' => 'Konfigürasyon Yönetimi Gösterge Tablosu',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIbyStatus' => 'Durumlarına göre Konfigürasyon Kalemleri(KK)',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIByType' => 'Tiplerine göre Konfigürasyon Kalemleri(KK)',
|
||||
|
||||
'UI:RequestMgmtMenuOverview:Title' => 'Çağrı Yönetimi Gösterge Tablosu',
|
||||
'UI-RequestManagementOverview-RequestByService' => 'Hizmetlere göre çağrılar',
|
||||
'UI-RequestManagementOverview-RequestByPriority' => 'Önceliklere göre çağrılar',
|
||||
'UI-RequestManagementOverview-RequestUnassigned' => 'Henüz atanmamış çağrılar',
|
||||
|
||||
'UI:IncidentMgmtMenuOverview:Title' => 'Arıza Gösterge Tablosu',
|
||||
'UI-IncidentManagementOverview-IncidentByService' => 'Servislere göre arızalar',
|
||||
'UI-IncidentManagementOverview-IncidentByPriority' => 'Önceliklere göre arızalar',
|
||||
'UI-IncidentManagementOverview-IncidentUnassigned' => 'Henüz atanmamış arızalar',
|
||||
|
||||
'UI:ChangeMgmtMenuOverview:Title' => 'Değişiklik Yönetimi Gösterge Tablosu',
|
||||
'UI-ChangeManagementOverview-ChangeByType' => 'Tiplerine göre değişiklikler',
|
||||
'UI-ChangeManagementOverview-ChangeUnassigned' => 'Henüz atanmamış değişiklikler',
|
||||
'UI-ChangeManagementOverview-ChangeWithOutage' => 'Değişiklik nedeniyle devre dışı',
|
||||
|
||||
'UI:ServiceMgmtMenuOverview:Title' => 'Hizmet Yönetimi Gösterge Tablosu',
|
||||
'UI-ServiceManagementOverview-CustomerContractToRenew' => '30 gün içinde biten Müşteri Sözleşmeleri',
|
||||
'UI-ServiceManagementOverview-ProviderContractToRenew' => '30 gün içinde biten Tedarikçi Sözleşmeleri',
|
||||
|
||||
'UI:ContactsMenu' => 'İrtibatlar',
|
||||
'UI:ContactsMenu+' => 'İrtibatlar',
|
||||
'UI:ContactsMenu:Title' => 'İrtibatlar Özetleri',
|
||||
'UI-ContactsMenu-ContactsByLocation' => 'Yerleşkeye göre irtibatlar',
|
||||
'UI-ContactsMenu-ContactsByType' => 'Tipine göre irtibatlar',
|
||||
'UI-ContactsMenu-ContactsByStatus' => 'Durumuna göre irtibatlar',
|
||||
|
||||
'Menu:CSVImportMenu' => 'CSV dışardan al',
|
||||
'Menu:CSVImportMenu+' => 'Çoklu yaratım veya güncelleme',
|
||||
|
||||
'Menu:DataModelMenu' => 'Veri Modeli',
|
||||
'Menu:DataModelMenu+' => 'Veri Modeli Özeti',
|
||||
|
||||
'Menu:ExportMenu' => 'Dışarı ver',
|
||||
'Menu:ExportMenu+' => 'Sorgu sonucunu HTML, CSV veya XML olarak dışarı aktar',
|
||||
|
||||
'Menu:NotificationsMenu' => 'Uyarılar',
|
||||
'Menu:NotificationsMenu+' => 'Uyarıların yapılandırılması',
|
||||
'UI:NotificationsMenu:Title' => '<span class="hilite">Uyarıların</span> yapılandırılması',
|
||||
'UI:NotificationsMenu:Help' => 'Yardım',
|
||||
'UI:NotificationsMenu:HelpContent' => '<p>In iTop uyarı mekanizması ihtiyaca göre uyarlanabilir. Uyarılar iki tip nesne üzerine kurulmuştur: <i>tetikleme (triggers) ve işlemler (actions)</i>.</p>
|
||||
<p><i><b>Triggers</b></i> uyarının ne zaman yapılacağını belirler. 3 tip tetikleme vardır ve nesnenin 3 durumuna ilişkilendirilmiştir:
|
||||
<ol>
|
||||
<li>the "OnCreate" tetikleme nesne yaratıldığı zaman çalışır</li>
|
||||
<li>the "OnStateEnter" tetikleme nesne belli bir duruma girişinde çalışır</li>
|
||||
<li>the "OnStateLeave" tetikleme nesne belli bir durumdan çıkışında çalışır</li>
|
||||
</ol>
|
||||
</p>
|
||||
<p>
|
||||
<i><b>Actions</b></i> tetikleme olduğunda yapılacak işlemleri belirler. Şimdilik sadece e-posta gönderme işlemi yapılabilmektedir.
|
||||
E-posta için şablon tanımlanabilmektedir. Şablona parametreler girilebilmektedir (recipients, importance, etc.).
|
||||
</p>
|
||||
<p>Özel sayfa: <a href="../setup/email.test.php" target="_blank">email.test.php</a> PHP e-posta konfigürnunu test ediniz.</p>
|
||||
<p>İşlemin gerçekleşmesi için bir tetikleme ile ilişkilendirilmesi gerekir.
|
||||
Tetikleme gerçekleştiriğinde işlemler tanımlanan sıra numarası ile gerçekleştirilir.</p>',
|
||||
'UI:NotificationsMenu:Triggers' => 'Tetikleyiciler',
|
||||
'UI:NotificationsMenu:AvailableTriggers' => 'Kullanılabilir tetikleyiciler',
|
||||
'UI:NotificationsMenu:OnCreate' => 'Nesne yaratıldığında',
|
||||
'UI:NotificationsMenu:OnStateEnter' => 'Nesnenin durumuna girişinde',
|
||||
'UI:NotificationsMenu:OnStateLeave' => 'Nesnenin durumdan çıkışında',
|
||||
'UI:NotificationsMenu:Actions' => 'İşlemler',
|
||||
'UI:NotificationsMenu:AvailableActions' => 'Kullanılabilir işlemler',
|
||||
|
||||
'Menu:AuditCategories' => 'Denetleme Kategorileri',
|
||||
'Menu:AuditCategories+' => 'Denetleme Kategorileri',
|
||||
'Menu:Notifications:Title' => 'Denetleme Kategorileri',
|
||||
|
||||
'Menu:RunQueriesMenu' => 'Sorgu çalıştır',
|
||||
'Menu:RunQueriesMenu+' => 'Sorgu çalıştır',
|
||||
|
||||
'Menu:DataAdministration' => 'Veri Yönetimi',
|
||||
'Menu:DataAdministration+' => 'Veri Yönetimi',
|
||||
|
||||
'Menu:UniversalSearchMenu' => 'Genel sorgu',
|
||||
'Menu:UniversalSearchMenu+' => 'Herhangi bir arama...',
|
||||
|
||||
'Menu:ApplicationLogMenu' => 'Uygulama olay kayıtları',
|
||||
'Menu:ApplicationLogMenu+' => 'Uygulama olay kayıtları',
|
||||
'Menu:ApplicationLogMenu:Title' => 'Uygulama olay kayıtları',
|
||||
|
||||
'Menu:UserManagementMenu' => 'Kullanıcı Yönetimi',
|
||||
'Menu:UserManagementMenu+' => 'Kullanıcı Yönetimi',
|
||||
|
||||
'Menu:ProfilesMenu' => 'Profiller',
|
||||
'Menu:ProfilesMenu+' => 'Profiller',
|
||||
'Menu:ProfilesMenu:Title' => 'Profiller',
|
||||
|
||||
'Menu:UserAccountsMenu' => 'Kullanıcı Hesapları',
|
||||
'Menu:UserAccountsMenu+' => 'Kullanıcı Hesapları',
|
||||
'Menu:UserAccountsMenu:Title' => 'Kullanıcı Hesapları',
|
||||
|
||||
'UI:iTopVersion:Short' => 'iTop versiyonu %1$s',
|
||||
'UI:iTopVersion:Long' => 'iTop %3$s tarihli versiyonu %1$s-%2$s',
|
||||
'UI:PropertiesTab' => 'Özellikler',
|
||||
|
||||
'UI:OpenDocumentInNewWindow_' => 'Dokümanı yeni pencerede aç: %1$s',
|
||||
'UI:DownloadDocument_' => 'Dokümanı indir: %1$s',
|
||||
'UI:Document:NoPreview' => 'Bu tip doküman için öngösterim mevcut değil',
|
||||
|
||||
'UI:DeadlineMissedBy_duration' => '%1$s ile kaçırıldı',
|
||||
'UI:Deadline_LessThan1Min' => '< 1 dk.',
|
||||
'UI:Deadline_Minutes' => '%1$d dk.',
|
||||
'UI:Deadline_Hours_Minutes' => '%1$dh %2$ddk',
|
||||
'UI:Deadline_Days_Hours_Minutes' => '%1$d gün %2$d saat %3$d dk',
|
||||
'UI:Help' => 'Yardım',
|
||||
'UI:PasswordConfirm' => '(Onay)',
|
||||
'UI:BeforeAdding_Class_ObjectsSaveThisObject' => 'Yeni %1$s nesneleri eklemeden önce bu nesneyi kaydediniz.',
|
||||
'UI:DisplayThisMessageAtStartup' => 'Bu mesajı başlangıçta göster',
|
||||
'UI:RelationshipGraph' => 'Grafiksel gösterim',
|
||||
'UI:RelationshipList' => 'List',
|
||||
|
||||
'Portal:Title' => 'iTop Kullanıcı Portalı',
|
||||
'Portal:Refresh' => 'Yenile',
|
||||
'Portal:Back' => 'Geri',
|
||||
'Portal:CreateNewRequest' => 'Yeni istek yarat',
|
||||
'Portal:ChangeMyPassword' => 'Şifre değiştir',
|
||||
'Portal:Disconnect' => 'Çıkış',
|
||||
'Portal:OpenRequests' => 'Açık isteklerim',
|
||||
'Portal:ResolvedRequests' => 'Çözdüğüm istekler',
|
||||
'Portal:SelectService' => 'Kataloğdan servis seçiniz:',
|
||||
'Portal:PleaseSelectOneService' => 'Sevis seçiniz',
|
||||
'Portal:SelectSubcategoryFrom_Service' => '%1$s servis için alt kategorsi seçiniz:',
|
||||
'Portal:PleaseSelectAServiceSubCategory' => 'Alt kategori seçiniz',
|
||||
'Portal:DescriptionOfTheRequest' => 'İstek tanımlaması:',
|
||||
'Portal:TitleRequestDetailsFor_Request' => 'İsteğin detayı %1$s:',
|
||||
'Portal:NoOpenRequest' => 'Bu kategoride istek yok.',
|
||||
'Portal:Button:CloseTicket' => 'Çağrıyı kapat',
|
||||
'Portal:EnterYourCommentsOnTicket' => 'İsteğin çözümüne yönelik açıklamalar:',
|
||||
'Portal:ErrorNoContactForThisUser' => 'Hata: mevcut kullanıcının irtibat bilgisi yok. Sistem yöneticisi ile irtibata geçiniz.',
|
||||
|
||||
'Enum:Undefined' => 'Tanımsız',
|
||||
));
|
||||
|
||||
|
||||
|
||||
?>
|
||||
386
dictionaries/zh.dictionary.itop.core.php
Normal file
386
dictionaries/zh.dictionary.itop.core.php
Normal file
@@ -0,0 +1,386 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @author Robert Deng <denglx@gmail.com>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'core/cmdb'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
//
|
||||
// Class: CMDBChange
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:CMDBChange' => '变更',
|
||||
'Class:CMDBChange+' => '变更跟踪',
|
||||
'Class:CMDBChange/Attribute:date' => '日期',
|
||||
'Class:CMDBChange/Attribute:date+' => '变更被记录的日期和时间',
|
||||
'Class:CMDBChange/Attribute:userinfo' => '杂项. 信息',
|
||||
'Class:CMDBChange/Attribute:userinfo+' => '呼叫者已定义的信息',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOp
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:CMDBChangeOp' => '变更操作',
|
||||
'Class:CMDBChangeOp+' => '变更操作跟踪',
|
||||
'Class:CMDBChangeOp/Attribute:change' => '变更',
|
||||
'Class:CMDBChangeOp/Attribute:change+' => '变更',
|
||||
'Class:CMDBChangeOp/Attribute:date' => '日期',
|
||||
'Class:CMDBChangeOp/Attribute:date+' => '变更的日期和时间',
|
||||
'Class:CMDBChangeOp/Attribute:userinfo' => '用户',
|
||||
'Class:CMDBChangeOp/Attribute:userinfo+' => '变更造成者',
|
||||
'Class:CMDBChangeOp/Attribute:objclass' => '对象类',
|
||||
'Class:CMDBChangeOp/Attribute:objclass+' => '对象类',
|
||||
'Class:CMDBChangeOp/Attribute:objkey' => '对象 id',
|
||||
'Class:CMDBChangeOp/Attribute:objkey+' => '对象 id',
|
||||
'Class:CMDBChangeOp/Attribute:finalclass' => '类别',
|
||||
'Class:CMDBChangeOp/Attribute:finalclass+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpCreate
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:CMDBChangeOpCreate' => '对象创建',
|
||||
'Class:CMDBChangeOpCreate+' => '对象创建跟踪',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpDelete
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:CMDBChangeOpDelete' => '对象删除',
|
||||
'Class:CMDBChangeOpDelete+' => '对象删除跟踪',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpSetAttribute
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:CMDBChangeOpSetAttribute' => '对象变更',
|
||||
'Class:CMDBChangeOpSetAttribute+' => '对象属性变更跟踪',
|
||||
'Class:CMDBChangeOpSetAttribute/Attribute:attcode' => '属性',
|
||||
'Class:CMDBChangeOpSetAttribute/Attribute:attcode+' => '被修改属性的编码',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpSetAttributeScalar
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:CMDBChangeOpSetAttributeScalar' => '属性变更',
|
||||
'Class:CMDBChangeOpSetAttributeScalar+' => '对象标量属性变更跟踪',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue' => '原值',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:oldvalue+' => '属性原值',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue' => '新值',
|
||||
'Class:CMDBChangeOpSetAttributeScalar/Attribute:newvalue+' => '属性新值',
|
||||
));
|
||||
// Used by CMDBChangeOp... & derived classes
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Change:ObjectCreated' => 'Object created',
|
||||
'Change:ObjectDeleted' => 'Object deleted',
|
||||
'Change:AttName_SetTo_NewValue_PreviousValue_OldValue' => '%1$s set to %2$s (previous value: %3$s)',
|
||||
'Change:AttName_SetTo' => '%1$s set to %2$s',
|
||||
'Change:Text_AppendedTo_AttName' => '%1$s appended to %2$s',
|
||||
'Change:AttName_Changed_PreviousValue_OldValue' => '%1$s modified, previous value: %2$s',
|
||||
'Change:AttName_Changed' => '%1$s modified',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpSetAttributeBlob
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:CMDBChangeOpSetAttributeBlob' => '数据变更',
|
||||
'Class:CMDBChangeOpSetAttributeBlob+' => '数据变更跟踪',
|
||||
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata' => '原数据',
|
||||
'Class:CMDBChangeOpSetAttributeBlob/Attribute:prevdata+' => '属性原来的内容',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: CMDBChangeOpSetAttributeText
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:CMDBChangeOpSetAttributeText' => '文本变更',
|
||||
'Class:CMDBChangeOpSetAttributeText+' => '文本变更跟踪',
|
||||
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata' => '原数据',
|
||||
'Class:CMDBChangeOpSetAttributeText/Attribute:prevdata+' => '属性原来的内容',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: Event
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Event' => '记录事项',
|
||||
'Class:Event+' => '应用程序的内部事项',
|
||||
'Class:Event/Attribute:message' => '消息',
|
||||
'Class:Event/Attribute:message+' => '事项简述',
|
||||
'Class:Event/Attribute:date' => '日期',
|
||||
'Class:Event/Attribute:date+' => '变更被记录的日期和时间',
|
||||
'Class:Event/Attribute:userinfo' => '用户信息',
|
||||
'Class:Event/Attribute:userinfo+' => '用户标识, 该用户的活动触发了该事项',
|
||||
'Class:Event/Attribute:finalclass' => '类别',
|
||||
'Class:Event/Attribute:finalclass+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: EventNotification
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:EventNotification' => '通知事项',
|
||||
'Class:EventNotification+' => '被发送通知的踪迹',
|
||||
'Class:EventNotification/Attribute:trigger_id' => '触发器',
|
||||
'Class:EventNotification/Attribute:trigger_id+' => '用户帐户',
|
||||
'Class:EventNotification/Attribute:action_id' => '用户',
|
||||
'Class:EventNotification/Attribute:action_id+' => '用户帐户',
|
||||
'Class:EventNotification/Attribute:object_id' => '对象 id',
|
||||
'Class:EventNotification/Attribute:object_id+' => '对象 id (由触发器定义的类 ?)',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: EventNotificationEmail
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:EventNotificationEmail' => 'Email 发出事项',
|
||||
'Class:EventNotificationEmail+' => '被发送的Email的踪迹',
|
||||
'Class:EventNotificationEmail/Attribute:to' => 'TO',
|
||||
'Class:EventNotificationEmail/Attribute:to+' => 'TO',
|
||||
'Class:EventNotificationEmail/Attribute:cc' => 'CC',
|
||||
'Class:EventNotificationEmail/Attribute:cc+' => 'CC',
|
||||
'Class:EventNotificationEmail/Attribute:bcc' => 'BCC',
|
||||
'Class:EventNotificationEmail/Attribute:bcc+' => 'BCC',
|
||||
'Class:EventNotificationEmail/Attribute:from' => 'From',
|
||||
'Class:EventNotificationEmail/Attribute:from+' => '消息发送者',
|
||||
'Class:EventNotificationEmail/Attribute:subject' => '主题',
|
||||
'Class:EventNotificationEmail/Attribute:subject+' => '主题',
|
||||
'Class:EventNotificationEmail/Attribute:body' => '邮件体',
|
||||
'Class:EventNotificationEmail/Attribute:body+' => '邮件体',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: EventIssue
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:EventIssue' => '议题事项',
|
||||
'Class:EventIssue+' => '议题踪迹 (警告, 错误, 等等.)',
|
||||
'Class:EventIssue/Attribute:issue' => '议题',
|
||||
'Class:EventIssue/Attribute:issue+' => '发生了什么',
|
||||
'Class:EventIssue/Attribute:impact' => '影响',
|
||||
'Class:EventIssue/Attribute:impact+' => '结果是什么',
|
||||
'Class:EventIssue/Attribute:page' => '页面',
|
||||
'Class:EventIssue/Attribute:page+' => 'HTTP 入口',
|
||||
'Class:EventIssue/Attribute:arguments_post' => 'Posted arguments',
|
||||
'Class:EventIssue/Attribute:arguments_post+' => 'HTTP POST arguments',
|
||||
'Class:EventIssue/Attribute:arguments_get' => 'URL arguments',
|
||||
'Class:EventIssue/Attribute:arguments_get+' => 'HTTP GET arguments',
|
||||
'Class:EventIssue/Attribute:callstack' => 'Callstack',
|
||||
'Class:EventIssue/Attribute:callstack+' => 'Call stack',
|
||||
'Class:EventIssue/Attribute:data' => 'Data',
|
||||
'Class:EventIssue/Attribute:data+' => 'More information',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: EventWebService
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:EventWebService' => 'Web 服务事项',
|
||||
'Class:EventWebService+' => 'Web 服务调用的踪迹',
|
||||
'Class:EventWebService/Attribute:verb' => 'Verb',
|
||||
'Class:EventWebService/Attribute:verb+' => '操作的名称',
|
||||
'Class:EventWebService/Attribute:result' => '结果',
|
||||
'Class:EventWebService/Attribute:result+' => '概览 成功/失败',
|
||||
'Class:EventWebService/Attribute:log_info' => '信息记录',
|
||||
'Class:EventWebService/Attribute:log_info+' => '结果信息记录',
|
||||
'Class:EventWebService/Attribute:log_warning' => '警告记录',
|
||||
'Class:EventWebService/Attribute:log_warning+' => '结果警告记录',
|
||||
'Class:EventWebService/Attribute:log_error' => '错误记录',
|
||||
'Class:EventWebService/Attribute:log_error+' => '结果错误记录',
|
||||
'Class:EventWebService/Attribute:data' => '数据',
|
||||
'Class:EventWebService/Attribute:data+' => '结果数据',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: Action
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Action' => '客户化动作',
|
||||
'Class:Action+' => '用户定义的动作',
|
||||
'Class:Action/Attribute:name' => '名称',
|
||||
'Class:Action/Attribute:name+' => '',
|
||||
'Class:Action/Attribute:description' => '描述',
|
||||
'Class:Action/Attribute:description+' => '',
|
||||
'Class:Action/Attribute:status' => '状态',
|
||||
'Class:Action/Attribute:status+' => '生产中 或 ?',
|
||||
'Class:Action/Attribute:status/Value:test' => '测试中',
|
||||
'Class:Action/Attribute:status/Value:test+' => '测试中',
|
||||
'Class:Action/Attribute:status/Value:enabled' => '生产中',
|
||||
'Class:Action/Attribute:status/Value:enabled+' => '生产中',
|
||||
'Class:Action/Attribute:status/Value:disabled' => '非活动',
|
||||
'Class:Action/Attribute:status/Value:disabled+' => '非活动',
|
||||
'Class:Action/Attribute:trigger_list' => '相关触发器',
|
||||
'Class:Action/Attribute:trigger_list+' => '关联到该动作的触发器',
|
||||
'Class:Action/Attribute:finalclass' => '类别',
|
||||
'Class:Action/Attribute:finalclass+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: ActionNotification
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:ActionNotification' => '通知',
|
||||
'Class:ActionNotification+' => '通知 (摘要)',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: ActionEmail
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:ActionEmail' => 'Email 通知',
|
||||
'Class:ActionEmail+' => '',
|
||||
'Class:ActionEmail/Attribute:test_recipient' => '测试收件人',
|
||||
'Class:ActionEmail/Attribute:test_recipient+' => '状态被设置为"测试"时的目的地',
|
||||
'Class:ActionEmail/Attribute:from' => '来自',
|
||||
'Class:ActionEmail/Attribute:from+' => '将发送到邮件头',
|
||||
'Class:ActionEmail/Attribute:reply_to' => '回复到',
|
||||
'Class:ActionEmail/Attribute:reply_to+' => '将发送到邮件头',
|
||||
'Class:ActionEmail/Attribute:to' => 'To',
|
||||
'Class:ActionEmail/Attribute:to+' => '邮件的目的地',
|
||||
'Class:ActionEmail/Attribute:cc' => 'Cc',
|
||||
'Class:ActionEmail/Attribute:cc+' => 'Carbon Copy',
|
||||
'Class:ActionEmail/Attribute:bcc' => 'bcc',
|
||||
'Class:ActionEmail/Attribute:bcc+' => 'Blind Carbon Copy',
|
||||
'Class:ActionEmail/Attribute:subject' => '主题',
|
||||
'Class:ActionEmail/Attribute:subject+' => '邮件标题',
|
||||
'Class:ActionEmail/Attribute:body' => '邮件体',
|
||||
'Class:ActionEmail/Attribute:body+' => '邮件内容',
|
||||
'Class:ActionEmail/Attribute:importance' => '重要',
|
||||
'Class:ActionEmail/Attribute:importance+' => '重要标志',
|
||||
'Class:ActionEmail/Attribute:importance/Value:low' => '低',
|
||||
'Class:ActionEmail/Attribute:importance/Value:low+' => '低',
|
||||
'Class:ActionEmail/Attribute:importance/Value:normal' => '一般',
|
||||
'Class:ActionEmail/Attribute:importance/Value:normal+' => '一般',
|
||||
'Class:ActionEmail/Attribute:importance/Value:high' => '高',
|
||||
'Class:ActionEmail/Attribute:importance/Value:high+' => '高',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: Trigger
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:Trigger' => '触发器',
|
||||
'Class:Trigger+' => '客户化事项句柄',
|
||||
'Class:Trigger/Attribute:description' => '描述',
|
||||
'Class:Trigger/Attribute:description+' => '单行描述',
|
||||
'Class:Trigger/Attribute:action_list' => '被触发的动作',
|
||||
'Class:Trigger/Attribute:action_list+' => '触发器击发时执行的动作',
|
||||
'Class:Trigger/Attribute:finalclass' => '类别',
|
||||
'Class:Trigger/Attribute:finalclass+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: TriggerOnObject
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:TriggerOnObject' => '触发器 (类依赖的)',
|
||||
'Class:TriggerOnObject+' => '在一个给定类对象上的触发器',
|
||||
'Class:TriggerOnObject/Attribute:target_class' => '目标类',
|
||||
'Class:TriggerOnObject/Attribute:target_class+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: TriggerOnStateChange
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:TriggerOnStateChange' => '触发器 (状态变化时)',
|
||||
'Class:TriggerOnStateChange+' => '对象状态变化时的触发器',
|
||||
'Class:TriggerOnStateChange/Attribute:state' => '状态',
|
||||
'Class:TriggerOnStateChange/Attribute:state+' => '',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: TriggerOnStateEnter
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:TriggerOnStateEnter' => '触发器 (进入一个状态时)',
|
||||
'Class:TriggerOnStateEnter+' => '对象状态变化时触发器 - 进入时',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: TriggerOnStateLeave
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:TriggerOnStateLeave' => '触发器 (离开一个状态时)',
|
||||
'Class:TriggerOnStateLeave+' => '对象状态变化时触发器 - 离开时',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: TriggerOnObjectCreate
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:TriggerOnObjectCreate' => '触发器 (对象创建时)',
|
||||
'Class:TriggerOnObjectCreate+' => '一个给定类[子类]对象创建时触发器',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: lnkTriggerAction
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:lnkTriggerAction' => '动作/触发器',
|
||||
'Class:lnkTriggerAction+' => '触发器和动作间的链接',
|
||||
'Class:lnkTriggerAction/Attribute:action_id' => '动作',
|
||||
'Class:lnkTriggerAction/Attribute:action_id+' => '要执行的动作',
|
||||
'Class:lnkTriggerAction/Attribute:action_name' => '动作',
|
||||
'Class:lnkTriggerAction/Attribute:action_name+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_id' => '触发器',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_id+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_name' => '触发器',
|
||||
'Class:lnkTriggerAction/Attribute:trigger_name+' => '',
|
||||
'Class:lnkTriggerAction/Attribute:order' => '顺序',
|
||||
'Class:lnkTriggerAction/Attribute:order+' => '动作执行顺序',
|
||||
));
|
||||
|
||||
|
||||
?>
|
||||
869
dictionaries/zh.dictionary.itop.ui.php
Normal file
869
dictionaries/zh.dictionary.itop.ui.php
Normal file
@@ -0,0 +1,869 @@
|
||||
<?php
|
||||
// Copyright (C) 2010 Combodo SARL
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; version 3 of the License.
|
||||
//
|
||||
// This program 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 General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @author Robert Deng <denglx@gmail.com>
|
||||
* @license http://www.opensource.org/licenses/gpl-3.0.html LGPL
|
||||
*/
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'gui'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'application'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
//
|
||||
// Class: AuditCategory
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:AuditCategory' => '审计类目',
|
||||
'Class:AuditCategory+' => '全部审计中的一个区段',
|
||||
'Class:AuditCategory/Attribute:name' => '类目名称',
|
||||
'Class:AuditCategory/Attribute:name+' => '类目简称',
|
||||
'Class:AuditCategory/Attribute:description' => '审计类目描述',
|
||||
'Class:AuditCategory/Attribute:description+' => '该审计类目的详细描述',
|
||||
'Class:AuditCategory/Attribute:definition_set' => '定义',
|
||||
'Class:AuditCategory/Attribute:definition_set+' => '定义用于审计的对象的OQL表达式',
|
||||
'Class:AuditCategory/Attribute:rules_list' => '审计规则',
|
||||
'Class:AuditCategory/Attribute:rules_list+' => '该类目的审计规则',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: AuditRule
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:AuditRule' => '审计规则',
|
||||
'Class:AuditRule+' => '用于检查给定审计类目的规则',
|
||||
'Class:AuditRule/Attribute:name' => '规则名称',
|
||||
'Class:AuditRule/Attribute:name+' => '规则简称',
|
||||
'Class:AuditRule/Attribute:description' => '审计规则描述',
|
||||
'Class:AuditRule/Attribute:description+' => '审计规则详细描述',
|
||||
'Class:AuditRule/Attribute:query' => '要运行的查询',
|
||||
'Class:AuditRule/Attribute:query+' => '要运行的OQL表达式',
|
||||
'Class:AuditRule/Attribute:valid_flag' => '有效对象?',
|
||||
'Class:AuditRule/Attribute:valid_flag+' => '若规则返回有效对象则True,否则False',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:true' => 'true',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:true+' => 'true',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:false' => 'false',
|
||||
'Class:AuditRule/Attribute:valid_flag/Value:false+' => 'false',
|
||||
'Class:AuditRule/Attribute:category_id' => '类目',
|
||||
'Class:AuditRule/Attribute:category_id+' => '该规则对应的类目',
|
||||
'Class:AuditRule/Attribute:category_name' => '类目',
|
||||
'Class:AuditRule/Attribute:category_name+' => '该规则对应类目的名称',
|
||||
));
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Classes in 'addon/userrights'
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
//
|
||||
// Class: User
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:User' => '用户',
|
||||
'Class:User+' => '用户登录名',
|
||||
'Class:User/Attribute:finalclass' => '帐户类别',
|
||||
'Class:User/Attribute:finalclass+' => '',
|
||||
'Class:User/Attribute:contactid' => '联系人 (个人)',
|
||||
'Class:User/Attribute:contactid+' => '来自业务数据的个人明细信息',
|
||||
'Class:User/Attribute:last_name' => '名',
|
||||
'Class:User/Attribute:last_name+' => '对应联系人的名字',
|
||||
'Class:User/Attribute:first_name' => '姓',
|
||||
'Class:User/Attribute:first_name+' => '对应联系人的姓氏',
|
||||
'Class:User/Attribute:email' => 'Email',
|
||||
'Class:User/Attribute:email+' => '对应联系人的Email',
|
||||
'Class:User/Attribute:login' => '登录名',
|
||||
'Class:User/Attribute:login+' => '用户标识字符串',
|
||||
'Class:User/Attribute:language' => '语言',
|
||||
'Class:User/Attribute:language+' => '用户语言',
|
||||
'Class:User/Attribute:language/Value:EN US' => 'English',
|
||||
'Class:User/Attribute:language/Value:EN US+' => 'English (U.S.)',
|
||||
'Class:User/Attribute:language/Value:FR FR' => 'French',
|
||||
'Class:User/Attribute:language/Value:FR FR+' => 'French (France)',
|
||||
'Class:User/Attribute:profile_list' => '简档',
|
||||
'Class:User/Attribute:profile_list+' => '角色, 为该人员授权',
|
||||
'Class:User/Attribute:allowed_org_list' => '被许可的组织',
|
||||
'Class:User/Attribute:allowed_org_list+' => '终端用户被许可看到下述组织的数据. 如果没有指定的组织,则无限制.',
|
||||
|
||||
'Class:User/Error:LoginMustBeUnique' => '登录名必须唯一 - "%1s" 已经被使用.',
|
||||
'Class:User/Error:AtLeastOneProfileIsNeeded' => '至少一个简档必须指定给该用户.',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_Profiles
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:URP_Profiles' => '简档',
|
||||
'Class:URP_Profiles+' => '用户简档',
|
||||
'Class:URP_Profiles/Attribute:name' => '名称',
|
||||
'Class:URP_Profiles/Attribute:name+' => '标签',
|
||||
'Class:URP_Profiles/Attribute:description' => '描述',
|
||||
'Class:URP_Profiles/Attribute:description+' => '单行描述',
|
||||
'Class:URP_Profiles/Attribute:user_list' => '用户',
|
||||
'Class:URP_Profiles/Attribute:user_list+' => '拥有该角色的人员',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_Dimensions
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:URP_Dimensions' => '维度',
|
||||
'Class:URP_Dimensions+' => '应用维度 (定义纵深)',
|
||||
'Class:URP_Dimensions/Attribute:name' => '名称',
|
||||
'Class:URP_Dimensions/Attribute:name+' => '标签',
|
||||
'Class:URP_Dimensions/Attribute:description' => '描述',
|
||||
'Class:URP_Dimensions/Attribute:description+' => '单行描述',
|
||||
'Class:URP_Dimensions/Attribute:type' => '类别',
|
||||
'Class:URP_Dimensions/Attribute:type+' => '类名称或数据类别 (投影单位)',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_UserProfile
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:URP_UserProfile' => '简档目标用户',
|
||||
'Class:URP_UserProfile+' => '用户的简档',
|
||||
'Class:URP_UserProfile/Attribute:userid' => '用户',
|
||||
'Class:URP_UserProfile/Attribute:userid+' => '用户帐户',
|
||||
'Class:URP_UserProfile/Attribute:userlogin' => '登录名',
|
||||
'Class:URP_UserProfile/Attribute:userlogin+' => '用户的登录名',
|
||||
'Class:URP_UserProfile/Attribute:profileid' => '简档',
|
||||
'Class:URP_UserProfile/Attribute:profileid+' => '使用简档',
|
||||
'Class:URP_UserProfile/Attribute:profile' => '简档',
|
||||
'Class:URP_UserProfile/Attribute:profile+' => '简档名称',
|
||||
'Class:URP_UserProfile/Attribute:reason' => '原因',
|
||||
'Class:URP_UserProfile/Attribute:reason+' => '解释为什么该人员需要拥有该角色',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_UserOrg
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:URP_UserOrg' => '用户组织',
|
||||
'Class:URP_UserOrg+' => '被许可的组织',
|
||||
'Class:URP_UserOrg/Attribute:userid' => '用户',
|
||||
'Class:URP_UserOrg/Attribute:userid+' => '用户帐户',
|
||||
'Class:URP_UserOrg/Attribute:userlogin' => '登录名',
|
||||
'Class:URP_UserOrg/Attribute:userlogin+' => '用户的登录名',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_id' => '组织',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_id+' => '被许可的组织',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_name' => '组织',
|
||||
'Class:URP_UserOrg/Attribute:allowed_org_name+' => '被许可的组织',
|
||||
'Class:URP_UserOrg/Attribute:reason' => '原因',
|
||||
'Class:URP_UserOrg/Attribute:reason+' => '解释为什么该人员被许可查阅该组织的数据',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_ProfileProjection
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:URP_ProfileProjection' => '简档投射',
|
||||
'Class:URP_ProfileProjection+' => '简档投射',
|
||||
'Class:URP_ProfileProjection/Attribute:dimensionid' => '维度',
|
||||
'Class:URP_ProfileProjection/Attribute:dimensionid+' => '应用维度',
|
||||
'Class:URP_ProfileProjection/Attribute:dimension' => '维度',
|
||||
'Class:URP_ProfileProjection/Attribute:dimension+' => '应用维度',
|
||||
'Class:URP_ProfileProjection/Attribute:profileid' => '简档',
|
||||
'Class:URP_ProfileProjection/Attribute:profileid+' => '使用简档',
|
||||
'Class:URP_ProfileProjection/Attribute:profile' => '简档',
|
||||
'Class:URP_ProfileProjection/Attribute:profile+' => '简档名称',
|
||||
'Class:URP_ProfileProjection/Attribute:value' => '值表达式',
|
||||
'Class:URP_ProfileProjection/Attribute:value+' => 'OQL expression (using $user) | constant | | +attribute code',
|
||||
'Class:URP_ProfileProjection/Attribute:attribute' => '属性',
|
||||
'Class:URP_ProfileProjection/Attribute:attribute+' => '目标属性编码 (可选)',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_ClassProjection
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:URP_ClassProjection' => '类投射',
|
||||
'Class:URP_ClassProjection+' => '类投射',
|
||||
'Class:URP_ClassProjection/Attribute:dimensionid' => '维度',
|
||||
'Class:URP_ClassProjection/Attribute:dimensionid+' => '应用维度',
|
||||
'Class:URP_ClassProjection/Attribute:dimension' => '维度',
|
||||
'Class:URP_ClassProjection/Attribute:dimension+' => '应用维度',
|
||||
'Class:URP_ClassProjection/Attribute:class' => '类',
|
||||
'Class:URP_ClassProjection/Attribute:class+' => '目标类',
|
||||
'Class:URP_ClassProjection/Attribute:value' => '值表达式',
|
||||
'Class:URP_ClassProjection/Attribute:value+' => 'OQL expression (using $this) | constant | | +attribute code',
|
||||
'Class:URP_ClassProjection/Attribute:attribute' => '属性',
|
||||
'Class:URP_ClassProjection/Attribute:attribute+' => '目标属性编码 (可选)',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_ActionGrant
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:URP_ActionGrant' => '动作许可',
|
||||
'Class:URP_ActionGrant+' => '类上的许可',
|
||||
'Class:URP_ActionGrant/Attribute:profileid' => '简档',
|
||||
'Class:URP_ActionGrant/Attribute:profileid+' => '使用简档',
|
||||
'Class:URP_ActionGrant/Attribute:profile' => '简档',
|
||||
'Class:URP_ActionGrant/Attribute:profile+' => '使用简档',
|
||||
'Class:URP_ActionGrant/Attribute:class' => '类',
|
||||
'Class:URP_ActionGrant/Attribute:class+' => '目标类',
|
||||
'Class:URP_ActionGrant/Attribute:permission' => '许可',
|
||||
'Class:URP_ActionGrant/Attribute:permission+' => '允许或不允许?',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:yes' => '是',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:yes+' => '是',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:no' => '否',
|
||||
'Class:URP_ActionGrant/Attribute:permission/Value:no+' => '否',
|
||||
'Class:URP_ActionGrant/Attribute:action' => '动作',
|
||||
'Class:URP_ActionGrant/Attribute:action+' => '可用于给定类上的操作',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_StimulusGrant
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:URP_StimulusGrant' => '刺激许可',
|
||||
'Class:URP_StimulusGrant+' => '对象生命周期中刺激的许可',
|
||||
'Class:URP_StimulusGrant/Attribute:profileid' => '简档',
|
||||
'Class:URP_StimulusGrant/Attribute:profileid+' => '使用简档',
|
||||
'Class:URP_StimulusGrant/Attribute:profile' => '简档',
|
||||
'Class:URP_StimulusGrant/Attribute:profile+' => '使用简档',
|
||||
'Class:URP_StimulusGrant/Attribute:class' => '类',
|
||||
'Class:URP_StimulusGrant/Attribute:class+' => '目标类',
|
||||
'Class:URP_StimulusGrant/Attribute:permission' => '许可',
|
||||
'Class:URP_StimulusGrant/Attribute:permission+' => '允许或不允许?',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:yes' => '是',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:yes+' => '是',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:no' => '否',
|
||||
'Class:URP_StimulusGrant/Attribute:permission/Value:no+' => '否',
|
||||
'Class:URP_StimulusGrant/Attribute:stimulus' => '刺激',
|
||||
'Class:URP_StimulusGrant/Attribute:stimulus+' => '刺激编码',
|
||||
));
|
||||
|
||||
//
|
||||
// Class: URP_AttributeGrant
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:URP_AttributeGrant' => '属性许可',
|
||||
'Class:URP_AttributeGrant+' => '属性层次上的许可',
|
||||
'Class:URP_AttributeGrant/Attribute:actiongrantid' => '动作准许',
|
||||
'Class:URP_AttributeGrant/Attribute:actiongrantid+' => '动作准许',
|
||||
'Class:URP_AttributeGrant/Attribute:attcode' => '属性',
|
||||
'Class:URP_AttributeGrant/Attribute:attcode+' => '属性编码',
|
||||
));
|
||||
|
||||
//
|
||||
// String from the User Interface: menu, messages, buttons, etc...
|
||||
//
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Menu:WelcomeMenu' => '欢迎',
|
||||
'Menu:WelcomeMenu+' => '欢迎来到iTop',
|
||||
'Menu:WelcomeMenuPage' => '欢迎',
|
||||
'Menu:WelcomeMenuPage+' => '欢迎来到iTop',
|
||||
'UI:WelcomeMenu:Title' => '欢迎来到iTop',
|
||||
|
||||
'UI:WelcomeMenu:LeftBlock' => '<p>iTop 是完全的, 开发源码的, IT 操作门户.</p>
|
||||
<ul>系统包括:
|
||||
<li>完全的 CMDB (Configuration management database) 记录和管理 IT 资产清册.</li>
|
||||
<li>事件管理模块跟踪和传递所有发生在 IT 系统中的事件.</li>
|
||||
<li>变更管理模块规划和跟踪 IT 环境中发生的变化.</li>
|
||||
<li>已知的错误数据库加速事件的处理.</li>
|
||||
<li>停损模块记录所有计划的停机并通知对应的联系人.</li>
|
||||
<li>通过仪表板迅速获得 IT 的概览.</li>
|
||||
</ul>
|
||||
<p>所有模块可以各自独立地、一步一步地搭建.</p>',
|
||||
|
||||
'UI:WelcomeMenu:RightBlock' => '<p>iTop 是面向服务提供商的, 它使得 IT 工程师方便地管理多客户和多组织.
|
||||
<ul>iTop, 提供功能丰富的业务处理流程:
|
||||
<li>提高 IT 管理效率</li>
|
||||
<li>驱动 IT 操作能力</li>
|
||||
<li>提高用户满意度,从业务能力方面提供执行力.</li>
|
||||
</ul>
|
||||
</p>
|
||||
<p>iTop 是完全开放的,可被集成到您当前的IT管理架构中.</p>
|
||||
<p>
|
||||
<ul>利用这个新一代的 IT 操作门户, 可以帮助您:
|
||||
<li>更好地管理越来越复杂的 IT 环境.</li>
|
||||
<li>按照您的步骤实现 ITIL 流程.</li>
|
||||
<li>管理您的 IT 中最重要的设施: 文档化.</li>
|
||||
</ul>
|
||||
</p>',
|
||||
'UI:WelcomeMenu:AllOpenRequests' => '待处理的请求: %1$d',
|
||||
'UI:WelcomeMenu:MyCalls' => '我的请求',
|
||||
'UI:WelcomeMenu:OpenIncidents' => '待处理的事件: %1$d',
|
||||
'UI:WelcomeMenu:AllConfigItems' => '配置项: %1$d',
|
||||
'UI:WelcomeMenu:MyIncidents' => '指派给我的事件',
|
||||
'UI:AllOrganizations' => ' 所有组织 ',
|
||||
'UI:YourSearch' => '您的搜索',
|
||||
'UI:LoggedAsMessage' => '以 %1$s 登录',
|
||||
'UI:LoggedAsMessage+Admin' => '以 %1$s 登录(Administrator)',
|
||||
'UI:Button:Logoff' => '注销',
|
||||
'UI:Button:GlobalSearch' => '搜索',
|
||||
'UI:Button:Search' => '搜索',
|
||||
'UI:Button:Query' => ' 查询 ',
|
||||
'UI:Button:Ok' => '确认',
|
||||
'UI:Button:Cancel' => '取消',
|
||||
'UI:Button:Apply' => '应用',
|
||||
'UI:Button:Back' => ' << Back ',
|
||||
'UI:Button:Next' => ' Next >> ',
|
||||
'UI:Button:Finish' => ' 结束 ',
|
||||
'UI:Button:DoImport' => ' 运行导入 ! ',
|
||||
'UI:Button:Done' => ' 完成 ',
|
||||
'UI:Button:SimulateImport' => ' 激活导入 ',
|
||||
'UI:Button:Test' => '测试!',
|
||||
'UI:Button:Evaluate' => ' 评价 ',
|
||||
'UI:Button:AddObject' => ' 添加... ',
|
||||
'UI:Button:BrowseObjects' => ' 浏览... ',
|
||||
'UI:Button:Add' => ' 添加 ',
|
||||
'UI:Button:AddToList' => ' << 添加 ',
|
||||
'UI:Button:RemoveFromList' => ' 移除 >> ',
|
||||
'UI:Button:FilterList' => ' 过滤... ',
|
||||
'UI:Button:Create' => ' 创建 ',
|
||||
'UI:Button:Delete' => ' 删除 ! ',
|
||||
'UI:Button:ChangePassword' => ' 改变密码 ',
|
||||
'UI:Button:ResetPassword' => ' 重置密码 ',
|
||||
|
||||
'UI:SearchToggle' => '搜索',
|
||||
'UI:ClickToCreateNew' => '创建一个新的 %1$s',
|
||||
'UI:SearchFor_Class' => '搜索 %1$s 对象',
|
||||
'UI:NoObjectToDisplay' => '没有对象可显示.',
|
||||
'UI:Error:MandatoryTemplateParameter_object_id' => '当link_attr被指定时,参数 object_id 是必须的. 检查显示模板的定义.',
|
||||
'UI:Error:MandatoryTemplateParameter_target_attr' => '当 link_attr被指定时, 参数 target_attr 是必须的. 检查显示模板的定义.',
|
||||
'UI:Error:MandatoryTemplateParameter_group_by' => '参数 group_by 是必须的. 检查显示模板的定义.',
|
||||
'UI:Error:InvalidGroupByFields' => 'group by 的栏目列表是无效的: "%1$s".',
|
||||
'UI:Error:UnsupportedStyleOfBlock' => '错误: 不被支持的 block 格式: "%1$s".',
|
||||
'UI:Error:IncorrectLinkDefinition_LinkedClass_Class' => '错误的链接定义: the class of objects to manage: %1$s was not found as an external key in the class %2$s',
|
||||
'UI:Error:Object_Class_Id_NotFound' => 'Object: %1$s:%2$d not found.',
|
||||
'UI:Error:WizardCircularReferenceInDependencies' => '错误: 栏目之间的依赖性出现循环引用, 检查数据模型.',
|
||||
'UI:Error:UploadedFileTooBig' => '上传文件太大. (允许的最大限制是 %1$s). 检查您的 PHP configuration 中 upload_max_filesize 和 post_max_size.',
|
||||
'UI:Error:UploadedFileTruncated.' => '上传的文件被截断 !',
|
||||
'UI:Error:NoTmpDir' => '临时目录未定义.',
|
||||
'UI:Error:CannotWriteToTmp_Dir' => '无法向硬盘写入临时文件. upload_tmp_dir = "%1$s".',
|
||||
'UI:Error:UploadStoppedByExtension_FileName' => '上传因为扩展名被停止. (Original file name = "%1$s").',
|
||||
'UI:Error:UploadFailedUnknownCause_Code' => '文件上传失败, 未知原因. (Error code = "%1$s").',
|
||||
|
||||
'UI:Error:1ParametersMissing' => '错误: 必须为该操作指定下述参数: %1$s.',
|
||||
'UI:Error:2ParametersMissing' => '错误: 必须为该操作指定下述参数: %1$s and %2$s.',
|
||||
'UI:Error:3ParametersMissing' => '错误: 必须为该操作指定下述参数: %1$s, %2$s and %3$s.',
|
||||
'UI:Error:4ParametersMissing' => '错误: 必须为该操作指定下述参数: %1$s, %2$s, %3$s and %4$s.',
|
||||
'UI:Error:IncorrectOQLQuery_Message' => '错误: 错误的 OQL 查询: %1$s',
|
||||
'UI:Error:AnErrorOccuredWhileRunningTheQuery_Message' => '运行该查询时产生了一个错误: %1$s',
|
||||
'UI:Error:ObjectAlreadyUpdated' => '错误: 该对象已被更新.',
|
||||
'UI:Error:ObjectCannotBeUpdated' => '错误: 对象不能被更新.',
|
||||
'UI:Error:ObjectsAlreadyDeleted' => '错误: 对象已被删除!',
|
||||
'UI:Error:BulkDeleteNotAllowedOn_Class' => '您未被允许进行 %1$s 类对象的批量删除',
|
||||
'UI:Error:DeleteNotAllowedOn_Class' => '您未被允许删除 %1$s 类的对象',
|
||||
'UI:Error:BulkModifyNotAllowedOn_Class' => '您未被允许进行 %1$s 类对象的批量更新',
|
||||
'UI:Error:ObjectAlreadyCloned' => '错误: 该对象已被克隆!',
|
||||
'UI:Error:ObjectAlreadyCreated' => '错误: 该对象已被创建!',
|
||||
'UI:Error:Invalid_Stimulus_On_Object_In_State' => '错误: 在对象 %2$s 的 "%3$s" 状态上的无效刺激 "%1$s" .',
|
||||
|
||||
|
||||
'UI:GroupBy:Count' => '计数',
|
||||
'UI:GroupBy:Count+' => '元素数量',
|
||||
'UI:CountOfObjects' => '%1$d 个对象匹配给定的条件.',
|
||||
'UI_CountOfObjectsShort' => '%1$d 个对象.',
|
||||
'UI:NoObject_Class_ToDisplay' => '没有 %1$s 可以显示',
|
||||
'UI:History:LastModified_On_By' => '最后修改 %1$s 被 %2$s.',
|
||||
'UI:HistoryTab' => '历史',
|
||||
'UI:NotificationsTab' => '通知',
|
||||
'UI:History:Date' => '日期',
|
||||
'UI:History:Date+' => '变更日期',
|
||||
'UI:History:User' => '用户',
|
||||
'UI:History:User+' => '造成变更的用户',
|
||||
'UI:History:Changes' => '变更',
|
||||
'UI:History:Changes+' => '对该对象所做的变更',
|
||||
'UI:Loading' => '载入...',
|
||||
'UI:Menu:Actions' => '动作',
|
||||
'UI:Menu:New' => '新建...',
|
||||
'UI:Menu:Add' => '添加...',
|
||||
'UI:Menu:Manage' => '管理...',
|
||||
'UI:Menu:EMail' => 'eMail',
|
||||
'UI:Menu:CSVExport' => 'CSV 导出',
|
||||
'UI:Menu:Modify' => '修改...',
|
||||
'UI:Menu:Delete' => '删除...',
|
||||
'UI:Menu:Manage' => '管理...',
|
||||
'UI:Menu:BulkDelete' => '删除...',
|
||||
'UI:UndefinedObject' => '未定义',
|
||||
'UI:Document:OpenInNewWindow:Download' => '在新窗口打开: %1$s, 下载: %2$s',
|
||||
'UI:SelectAllToggle+' => '选择 / 清除选择 全部',
|
||||
'UI:TruncatedResults' => '%1$d objects displayed out of %2$d',
|
||||
'UI:DisplayAll' => '显示全部',
|
||||
'UI:CollapseList' => '收缩',
|
||||
'UI:CountOfResults' => '%1$d 个对象',
|
||||
'UI:ChangesLogTitle' => '变更记录 (%1$d):',
|
||||
'UI:EmptyChangesLogTitle' => '变更记录为空',
|
||||
'UI:SearchFor_Class_Objects' => '搜索 %1$s 对象',
|
||||
'UI:OQLQueryBuilderTitle' => 'OQL Query Builder',
|
||||
'UI:OQLQueryTab' => 'OQL 查询',
|
||||
'UI:SimpleSearchTab' => '简单搜索',
|
||||
'UI:Details+' => '明细',
|
||||
'UI:SearchValue:Any' => '* 任何 *',
|
||||
'UI:SearchValue:Mixed' => '* 混合 *',
|
||||
'UI:SelectOne' => '-- 选择一个 --',
|
||||
'UI:Login:Welcome' => '欢迎来到 iTop!',
|
||||
'UI:Login:IncorrectLoginPassword' => '错误的登录名/密码, 请重试.',
|
||||
'UI:Login:IdentifyYourself' => '在继续之前, 确定您自己的身份',
|
||||
'UI:Login:UserNamePrompt' => '用户名称',
|
||||
'UI:Login:PasswordPrompt' => '密码',
|
||||
'UI:Login:ChangeYourPassword' => '改变您的密码',
|
||||
'UI:Login:OldPasswordPrompt' => '旧密码',
|
||||
'UI:Login:NewPasswordPrompt' => '新密码',
|
||||
'UI:Login:RetypeNewPasswordPrompt' => '重复新密码',
|
||||
'UI:Login:IncorrectOldPassword' => '错误: 旧密码错误',
|
||||
'UI:LogOffMenu' => '注销',
|
||||
'UI:LogOff:ThankYou' => '谢谢使用iTop',
|
||||
'UI:LogOff:ClickHereToLoginAgain' => '点击这里再次登录...',
|
||||
'UI:ChangePwdMenu' => '改变密码...',
|
||||
'UI:Login:RetypePwdDoesNotMatch' => '新密码和重录的新密码不符!',
|
||||
'UI:Button:Login' => '进入 iTop',
|
||||
'UI:Login:Error:AccessRestricted' => 'iTop 访问被限制. 请联系iTop系统管理员.',
|
||||
'UI:Login:Error:AccessAdmin' => '有系统管理员权限才能访问. 请联系iTop系统管理员.',
|
||||
'UI:CSVImport:MappingSelectOne' => '-- 选择一个 --',
|
||||
'UI:CSVImport:MappingNotApplicable' => '-- 忽略该栏 --',
|
||||
'UI:CSVImport:NoData' => '空的数据..., 请提供数据!',
|
||||
'UI:Title:DataPreview' => '数据预览',
|
||||
'UI:CSVImport:ErrorOnlyOneColumn' => '错误: 数据仅包含一列. 您选择了合适的分隔字符了吗?',
|
||||
'UI:CSVImport:FieldName' => '栏 %1$d',
|
||||
'UI:CSVImport:DataLine1' => '数据行 1',
|
||||
'UI:CSVImport:DataLine2' => '数据行 2',
|
||||
'UI:CSVImport:idField' => 'id (主键)',
|
||||
'UI:Title:BulkImport' => 'iTop - 大批量导入',
|
||||
'UI:Title:BulkImport+' => 'CSV 导入 Wizard',
|
||||
'UI:CSVImport:ClassesSelectOne' => '-- 选择一个 --',
|
||||
'UI:CSVImport:ErrorExtendedAttCode' => '内部错误: "%1$s" 是错误的编码, 因为 "%2$s" 不是类 "%3$s" 的外部健',
|
||||
'UI:CSVImport:ObjectsWillStayUnchanged' => '%1$d 对象将保持不变.',
|
||||
'UI:CSVImport:ObjectsWillBeModified' => '%1$d 对象将被修改.',
|
||||
'UI:CSVImport:ObjectsWillBeAdded' => '%1$d 对象将被添加.',
|
||||
'UI:CSVImport:ObjectsWillHaveErrors' => '%1$d 对象将有错误.',
|
||||
'UI:CSVImport:ObjectsRemainedUnchanged' => '%1$d 对象保持不变.',
|
||||
'UI:CSVImport:ObjectsWereModified' => '%1$d 对象已被修改.',
|
||||
'UI:CSVImport:ObjectsWereAdded' => '%1$d 对象已被添加.',
|
||||
'UI:CSVImport:ObjectsHadErrors' => '%1$d 对象已有错误.',
|
||||
'UI:Title:CSVImportStep2' => '步骤 2 of 5: CSV 数据选项',
|
||||
'UI:Title:CSVImportStep3' => '步骤 3 of 5: 数据映射',
|
||||
'UI:Title:CSVImportStep4' => '步骤 4 of 5: 导入模拟',
|
||||
'UI:Title:CSVImportStep5' => '步骤 5 of 5: 导入完成',
|
||||
'UI:CSVImport:LinesNotImported' => '无法装载的行:',
|
||||
'UI:CSVImport:LinesNotImported+' => '以下行无法导入因为其中包含错误',
|
||||
'UI:CSVImport:SeparatorComma+' => ', (逗号)',
|
||||
'UI:CSVImport:SeparatorSemicolon+' => '; (分号)',
|
||||
'UI:CSVImport:SeparatorTab+' => 'tab',
|
||||
'UI:CSVImport:SeparatorOther' => '其他:',
|
||||
'UI:CSVImport:QualifierDoubleQuote+' => '" (双引号)',
|
||||
'UI:CSVImport:QualifierSimpleQuote+' => '\' (单引号)',
|
||||
'UI:CSVImport:QualifierOther' => '其他:',
|
||||
'UI:CSVImport:TreatFirstLineAsHeader' => '将第一行视做标题头(列名称)',
|
||||
'UI:CSVImport:Skip_N_LinesAtTheBeginning' => '跳过文件开始的 %1$s 行',
|
||||
'UI:CSVImport:CSVDataPreview' => 'CSV 数据预览',
|
||||
'UI:CSVImport:SelectFile' => '选择导入的文件:',
|
||||
'UI:CSVImport:Tab:LoadFromFile' => '从文件装载',
|
||||
'UI:CSVImport:Tab:CopyPaste' => '复制和粘贴数据',
|
||||
'UI:CSVImport:Tab:Templates' => '模板',
|
||||
'UI:CSVImport:PasteData' => '粘贴数据以导入:',
|
||||
'UI:CSVImport:PickClassForTemplate' => '选择下载的模板: ',
|
||||
'UI:CSVImport:SeparatorCharacter' => '分隔字符:',
|
||||
'UI:CSVImport:TextQualifierCharacter' => '文本限定字符',
|
||||
'UI:CSVImport:CommentsAndHeader' => '注释和头',
|
||||
'UI:CSVImport:SelectClass' => '选择类以导入:',
|
||||
'UI:CSVImport:AdvancedMode' => '高级模式',
|
||||
'UI:CSVImport:AdvancedMode+' => '在高级模式中,对象的"id" (主键) 可以被用来修改和重命名对象.' .
|
||||
'不管怎样,列 "id" (如果存在) 只能被用做一个搜索条件,不能与其它搜索条件混用.',
|
||||
'UI:CSVImport:SelectAClassFirst' => '首先选择一个类以配置映射.',
|
||||
'UI:CSVImport:HeaderFields' => '栏目',
|
||||
'UI:CSVImport:HeaderMappings' => '映射',
|
||||
'UI:CSVImport:HeaderSearch' => '搜索?',
|
||||
'UI:CSVImport:AlertIncompleteMapping' => '请为每个栏选择一个映射.',
|
||||
'UI:CSVImport:AlertNoSearchCriteria' => '请选择至少一个搜索条件',
|
||||
'UI:CSVImport:Encoding' => '字符编码',
|
||||
'UI:UniversalSearchTitle' => 'iTop - 通用搜索',
|
||||
'UI:UniversalSearch:Error' => '错误: %1$s',
|
||||
'UI:UniversalSearch:LabelSelectTheClass' => '选择类以搜索: ',
|
||||
|
||||
'UI:Audit:Title' => 'iTop - CMDB 审计',
|
||||
'UI:Audit:InteractiveAudit' => '交互审计',
|
||||
'UI:Audit:HeaderAuditRule' => '设计规则',
|
||||
'UI:Audit:HeaderNbObjects' => '# 对象',
|
||||
'UI:Audit:HeaderNbErrors' => '# 错误',
|
||||
'UI:Audit:PercentageOk' => '% Ok',
|
||||
|
||||
'UI:RunQuery:Title' => 'iTop - OQL 查询评估',
|
||||
'UI:RunQuery:QueryExamples' => '查询样例',
|
||||
'UI:RunQuery:HeaderPurpose' => '目的',
|
||||
'UI:RunQuery:HeaderPurpose+' => '该查询的解释',
|
||||
'UI:RunQuery:HeaderOQLExpression' => 'OQL 表达式',
|
||||
'UI:RunQuery:HeaderOQLExpression+' => 'OQL 语法表示的查询',
|
||||
'UI:RunQuery:ExpressionToEvaluate' => '待评估的表达式: ',
|
||||
'UI:RunQuery:MoreInfo' => '该查询的更多信息: ',
|
||||
'UI:RunQuery:DevelopedQuery' => '重新开发的查询表达式: ',
|
||||
'UI:RunQuery:SerializedFilter' => '序列化的过滤器: ',
|
||||
'UI:RunQuery:Error' => '运行该查询时产生了一个错误: %1$s',
|
||||
|
||||
'UI:Schema:Title' => 'iTop 对象 schema',
|
||||
'UI:Schema:CategoryMenuItem' => '类目 <b>%1$s</b>',
|
||||
'UI:Schema:Relationships' => '关联',
|
||||
'UI:Schema:AbstractClass' => '抽象类: 该类不能实例化对象.',
|
||||
'UI:Schema:NonAbstractClass' => '非抽象类: 该类可以实例化对象.',
|
||||
'UI:Schema:ClassHierarchyTitle' => '类层级',
|
||||
'UI:Schema:AllClasses' => '所有类',
|
||||
'UI:Schema:ExternalKey_To' => '%1$s的外部键',
|
||||
'UI:Schema:Columns_Description' => '列: <em>%1$s</em>',
|
||||
'UI:Schema:Default_Description' => '缺省: "%1$s"',
|
||||
'UI:Schema:NullAllowed' => '允许空',
|
||||
'UI:Schema:NullNotAllowed' => '不允许空',
|
||||
'UI:Schema:Attributes' => '属性',
|
||||
'UI:Schema:AttributeCode' => '属性编码',
|
||||
'UI:Schema:AttributeCode+' => '属性的内部编码',
|
||||
'UI:Schema:Label' => '标签',
|
||||
'UI:Schema:Label+' => '属性标签',
|
||||
'UI:Schema:Type' => '类别',
|
||||
|
||||
'UI:Schema:Type+' => '属性的数据类型',
|
||||
'UI:Schema:Origin' => '起源',
|
||||
'UI:Schema:Origin+' => '该属性被定义的基类',
|
||||
'UI:Schema:Description' => '描述',
|
||||
'UI:Schema:Description+' => '属性的描述',
|
||||
'UI:Schema:AllowedValues' => '允许值',
|
||||
'UI:Schema:AllowedValues+' => '该属性取值的限制',
|
||||
'UI:Schema:MoreInfo' => '更多信息',
|
||||
'UI:Schema:MoreInfo+' => '该栏目在数据库中被定义的更多信息',
|
||||
'UI:Schema:SearchCriteria' => '搜索条件',
|
||||
'UI:Schema:FilterCode' => '过滤器编码',
|
||||
'UI:Schema:FilterCode+' => '该搜索条件的编码',
|
||||
'UI:Schema:FilterDescription' => '描述',
|
||||
'UI:Schema:FilterDescription+' => '该搜索条件的描述',
|
||||
'UI:Schema:AvailOperators' => '可用的算子',
|
||||
'UI:Schema:AvailOperators+' => '该搜索条件可能的算子',
|
||||
'UI:Schema:ChildClasses' => '子类',
|
||||
'UI:Schema:ReferencingClasses' => '参考类',
|
||||
'UI:Schema:RelatedClasses' => '关联类',
|
||||
'UI:Schema:LifeCycle' => '生命周期',
|
||||
'UI:Schema:Triggers' => '触发器',
|
||||
'UI:Schema:Relation_Code_Description' => '关联 <em>%1$s</em> (%2$s)',
|
||||
'UI:Schema:RelationDown_Description' => 'Down: %1$s',
|
||||
'UI:Schema:RelationUp_Description' => 'Up: %1$s',
|
||||
'UI:Schema:RelationPropagates' => '%1$s: 繁殖到 %2$d 个层级, 查询: %3$s',
|
||||
'UI:Schema:RelationDoesNotPropagate' => '%1$s: 没有繁殖 (%2$d 层级), 查询: %3$s',
|
||||
'UI:Schema:Class_ReferencingClasses_From_By' => '%1$s 被类 %2$s 参照, 通过栏目 %3$s',
|
||||
'UI:Schema:Class_IsLinkedTo_Class_Via_ClassAndAttribute' => '%1$s 被链接到 %2$s 通过 %3$s::<em>%4$s</em>',
|
||||
'UI:Schema:Links:1-n' => '类指向 %1$s (1:n 链接):',
|
||||
'UI:Schema:Links:n-n' => '类链接到 %1$s (n:n 链接):',
|
||||
'UI:Schema:Links:All' => '全部相关类的图',
|
||||
'UI:Schema:NoLifeCyle' => '该类没有生命周期的定义.',
|
||||
'UI:Schema:LifeCycleTransitions' => '转换',
|
||||
'UI:Schema:LifeCyleAttributeOptions' => '属性选项',
|
||||
'UI:Schema:LifeCycleHiddenAttribute' => '隐藏',
|
||||
'UI:Schema:LifeCycleReadOnlyAttribute' => '只读',
|
||||
'UI:Schema:LifeCycleMandatoryAttribute' => '必须',
|
||||
'UI:Schema:LifeCycleAttributeMustChange' => '必须变更',
|
||||
'UI:Schema:LifeCycleAttributeMustPrompt' => '用户将被提示改变值',
|
||||
'UI:Schema:LifeCycleEmptyList' => '空列表',
|
||||
|
||||
'UI:LinksWidget:Autocomplete+' => '输入前3个字符...',
|
||||
'UI:Combo:SelectValue' => '--- 选择一个值 ---',
|
||||
'UI:Label:SelectedObjects' => '被选对象: ',
|
||||
'UI:Label:AvailableObjects' => '可用对象: ',
|
||||
'UI:Link_Class_Attributes' => '%1$s 属性',
|
||||
'UI:SelectAllToggle+' => '选择全部 / 清楚全部选择',
|
||||
'UI:AddObjectsOf_Class_LinkedWith_Class_Instance' => '添加 %1$s 个对象, 链接 %2$s: %3$s',
|
||||
'UI:AddObjectsOf_Class_LinkedWith_Class' => '添加 %1$s 个对象与 %2$s 链接',
|
||||
'UI:ManageObjectsOf_Class_LinkedWith_Class_Instance' => '管理 %1$s 个对象, 链接 %2$s: %3$s',
|
||||
'UI:AddLinkedObjectsOf_Class' => '添加 %1$s...',
|
||||
'UI:RemoveLinkedObjectsOf_Class' => '移除选择的对象',
|
||||
'UI:Message:EmptyList:UseAdd' => '列表是空的, 使用 "添加..." 按扭以添加元素.',
|
||||
'UI:Message:EmptyList:UseSearchForm' => '使用上面的搜索表单, 以搜索要添加的对象.',
|
||||
|
||||
'UI:Wizard:FinalStepTitle' => '最后步骤: 确认',
|
||||
'UI:Title:DeletionOf_Object' => '删除 %1$s',
|
||||
'UI:Title:BulkDeletionOf_Count_ObjectsOf_Class' => '批量删除 %1$d 个 %2$s 类的对象',
|
||||
'UI:Delete:NotAllowedToDelete' => '您未被允许删除该对象',
|
||||
'UI:Delete:NotAllowedToUpdate_Fields' => '您未被允许更新下述栏目: %1$s',
|
||||
'UI:Error:CannotDeleteBecause' => 'This object could not be deleted because: %1$s',
|
||||
'UI:Error:NotEnoughRightsToDelete' => '该对象不能被删除, 因为当前用户没有足够权限',
|
||||
'UI:Error:CannotDeleteBecauseOfDepencies' => '该对象不能被删除, 因为一些手工操作必须事先完成',
|
||||
'UI:Archive_User_OnBehalfOf_User' => '%1$s on behalf of %2$s',
|
||||
'UI:Delete:AutomaticallyDeleted' => '自动删除了',
|
||||
'UI:Delete:AutomaticResetOf_Fields' => '自动重置栏目: %1$s',
|
||||
'UI:Delete:CleaningUpRefencesTo_Object' => '清除所有对 %1$s 的参照...',
|
||||
'UI:Delete:CleaningUpRefencesTo_Several_ObjectsOf_Class' => '清除所有对 %2$s 类的 %1$d 个对象的参照...',
|
||||
'UI:Delete:Done+' => '做了什么...',
|
||||
'UI:Delete:_Name_Class_Deleted' => '%1$s - %2$s 删除了.',
|
||||
'UI:Delete:ConfirmDeletionOf_Name' => '删除 %1$s',
|
||||
'UI:Delete:ConfirmDeletionOf_Count_ObjectsOf_Class' => '删除 %2$s 类的 %1$d 个对象',
|
||||
// 'UI:Delete:ShouldBeDeletedAtomaticallyButNotPossible' => '应该自动删除, 但您未被允许这样做',
|
||||
// 'UI:Delete:MustBeDeletedManuallyButNotPossible' => '必须手工删除 - 但您未被允许删除该对象, 请联系您的应用程序系统管理员',
|
||||
'UI:Delete:WillBeDeletedAutomatically' => '将被自动删除',
|
||||
'UI:Delete:MustBeDeletedManually' => '必须手工删除',
|
||||
'UI:Delete:CannotUpdateBecause_Issue' => '应该被自动更新, 但是: %1$s',
|
||||
'UI:Delete:WillAutomaticallyUpdate_Fields' => '将被自动更新 (重置: %1$s)',
|
||||
'UI:Delete:Count_Objects/LinksReferencing_Object' => '%1$d 个对象/链接参照了 %2$s',
|
||||
'UI:Delete:Count_Objects/LinksReferencingTheObjects' => '%1$d 个对象/链接参照了一些将删除的对象',
|
||||
'UI:Delete:ReferencesMustBeDeletedToEnsureIntegrity' => '为确保数据库的完整性, 任何参照应该更进一步清除',
|
||||
'UI:Delete:Consequence+' => '将做什么',
|
||||
'UI:Delete:SorryDeletionNotAllowed' => '抱歉, 您未被允许删除该对象, 请看上述详细解释',
|
||||
'UI:Delete:PleaseDoTheManualOperations' => '在要求删除该对象之前, 请先手工完成上述列出的操作',
|
||||
'UI:Delect:Confirm_Object' => '请确认您要删除 %1$s.',
|
||||
'UI:Delect:Confirm_Count_ObjectsOf_Class' => '请确认您要删除下列 %2$s 类的 %1$d 个对象.',
|
||||
'UI:WelcomeToITop' => '欢迎来到 iTop',
|
||||
'UI:DetailsPageTitle' => 'iTop - %1$s - %2$s 详细内容',
|
||||
'UI:ErrorPageTitle' => 'iTop - 错误',
|
||||
'UI:ObjectDoesNotExist' => '抱歉, 该对象不存在 (或您未被允许浏览该对象).',
|
||||
'UI:SearchResultsPageTitle' => 'iTop - 搜索结果',
|
||||
'UI:Search:NoSearch' => '没有可搜索的内容',
|
||||
'UI:FullTextSearchTitle_Text' => '"%1$s" 的结果:',
|
||||
'UI:Search:Count_ObjectsOf_Class_Found' => '发现 %2$s 类的 %1$d 个对象.',
|
||||
'UI:Search:NoObjectFound' => '未发现对象.',
|
||||
'UI:ModificationPageTitle_Object_Class' => 'iTop - %1$s - %2$s 修改',
|
||||
'UI:ModificationTitle_Class_Object' => '修改 %1$s: <span class=\"hilite\">%2$s</span>',
|
||||
'UI:ClonePageTitle_Object_Class' => 'iTop - 克隆 %1$s - %2$s 修改',
|
||||
'UI:CloneTitle_Class_Object' => '克隆 %1$s: <span class=\"hilite\">%2$s</span>',
|
||||
'UI:CreationPageTitle_Class' => 'iTop - 创建一个新的 %1$s ',
|
||||
'UI:CreationTitle_Class' => '创建一个新的 %1$s',
|
||||
'UI:SelectTheTypeOf_Class_ToCreate' => '选择要创建的 %1$s 的类别:',
|
||||
'UI:Class_Object_NotUpdated' => '未发现变化, %1$s (%2$s) <strong>没有</strong> 被更新.',
|
||||
'UI:Class_Object_Updated' => '%1$s (%2$s) 更新了.',
|
||||
'UI:BulkDeletePageTitle' => 'iTop - 批量删除',
|
||||
'UI:BulkDeleteTitle' => '选择您要删除的对象:',
|
||||
'UI:PageTitle:ObjectCreated' => 'iTop 对象创建了.',
|
||||
'UI:Title:Object_Of_Class_Created' => '%1$s - %2$s 创建了.',
|
||||
'UI:Apply_Stimulus_On_Object_In_State_ToTarget_State' => '应用 %1$s 在对象: %2$s 上, 从 %3$s 状态到目标状态: %4$s.',
|
||||
'UI:ObjectCouldNotBeWritten' => '对象不能写入: %1$s',
|
||||
'UI:PageTitle:FatalError' => 'iTop - 致命错误',
|
||||
'UI:SystemIntrusion' => '访问被禁止. 您正尝试未被许可的操作.',
|
||||
'UI:FatalErrorMessage' => '致命错误, iTop 无法继续.',
|
||||
'UI:Error_Details' => '错误: %1$s.',
|
||||
|
||||
'UI:PageTitle:ClassProjections' => 'iTop 用户管理 - 类投射',
|
||||
'UI:PageTitle:ProfileProjections' => 'iTop 用户管理 - 简档投射',
|
||||
'UI:UserManagement:Class' => '类',
|
||||
'UI:UserManagement:Class+' => '对象的类',
|
||||
'UI:UserManagement:ProjectedObject' => '对象',
|
||||
'UI:UserManagement:ProjectedObject+' => '被投射的对象',
|
||||
'UI:UserManagement:AnyObject' => '* 任何 *',
|
||||
'UI:UserManagement:User' => '用户',
|
||||
'UI:UserManagement:User+' => '与该投射相关的用户',
|
||||
'UI:UserManagement:Profile' => '简档',
|
||||
'UI:UserManagement:Profile+' => '投射被指定的简档',
|
||||
'UI:UserManagement:Action:Read' => '读',
|
||||
'UI:UserManagement:Action:Read+' => '读/显示 对象',
|
||||
'UI:UserManagement:Action:Modify' => '修改',
|
||||
'UI:UserManagement:Action:Modify+' => '创建和编辑(修改)对象',
|
||||
'UI:UserManagement:Action:Delete' => '删除',
|
||||
'UI:UserManagement:Action:Delete+' => '删除对象',
|
||||
'UI:UserManagement:Action:BulkRead' => '大批量读 (导出)',
|
||||
'UI:UserManagement:Action:BulkRead+' => '列出对象或批量导出',
|
||||
'UI:UserManagement:Action:BulkModify' => '批量修改',
|
||||
'UI:UserManagement:Action:BulkModify+' => '批量创建/编辑 (CSV 导入)',
|
||||
'UI:UserManagement:Action:BulkDelete' => '批量删除',
|
||||
'UI:UserManagement:Action:BulkDelete+' => '批量删除对象',
|
||||
'UI:UserManagement:Action:Stimuli' => 'Stimuli',
|
||||
'UI:UserManagement:Action:Stimuli+' => '许可的 (复合的) 动作',
|
||||
'UI:UserManagement:Action' => '动作',
|
||||
'UI:UserManagement:Action+' => '该用户进行的动作',
|
||||
'UI:UserManagement:TitleActions' => '动作',
|
||||
'UI:UserManagement:Permission' => '许可',
|
||||
'UI:UserManagement:Permission+' => '用户的许可',
|
||||
'UI:UserManagement:Attributes' => '属性',
|
||||
'UI:UserManagement:ActionAllowed:Yes' => '是',
|
||||
'UI:UserManagement:ActionAllowed:No' => '否',
|
||||
'UI:UserManagement:AdminProfile+' => '系统管理员拥有数据库中所有对象的完全读/写访问权限.',
|
||||
'UI:UserManagement:NoLifeCycleApplicable' => 'N/A',
|
||||
'UI:UserManagement:NoLifeCycleApplicable+' => '该类未定义生命周期',
|
||||
'UI:UserManagement:GrantMatrix' => '授权矩阵',
|
||||
'UI:UserManagement:LinkBetween_User_And_Profile' => '链接 %1$s 和 %2$s',
|
||||
'UI:UserManagement:LinkBetween_User_And_Org' => '链接 %1$s 和 %2$s',
|
||||
|
||||
'Menu:AdminTools' => '管理工具',
|
||||
'Menu:AdminTools+' => '管理工具',
|
||||
'Menu:AdminTools?' => '具有系统管理员简档的用户才能获得的工具',
|
||||
|
||||
'UI:ChangeManagementMenu' => '变更管理',
|
||||
'UI:ChangeManagementMenu+' => '变更管理',
|
||||
'UI:ChangeManagementMenu:Title' => '变更概览',
|
||||
'UI-ChangeManagementMenu-ChangesByType' => '按类别划分的变更',
|
||||
'UI-ChangeManagementMenu-ChangesByStatus' => '按状态划分的变更',
|
||||
'UI-ChangeManagementMenu-ChangesByWorkgroup' => '按工作组划分的变更',
|
||||
'UI-ChangeManagementMenu-ChangesNotYetAssigned' => '尚未指派的变更',
|
||||
|
||||
'UI:ConfigurationItemsMenu'=> '配置项目',
|
||||
'UI:ConfigurationItemsMenu+'=> '所有设备',
|
||||
'UI:ConfigurationItemsMenu:Title' => '配置项概览',
|
||||
'UI-ConfigurationItemsMenu-ServersByCriticity' => '按关键性划分服务器',
|
||||
'UI-ConfigurationItemsMenu-PCsByCriticity' => '按关键性划分PC',
|
||||
'UI-ConfigurationItemsMenu-NWDevicesByCriticity' => '按关键性划分网络设备',
|
||||
'UI-ConfigurationItemsMenu-ApplicationsByCriticity' => '按关键性划分应用程序',
|
||||
|
||||
'UI:ConfigurationManagementMenu' => '配置管理',
|
||||
'UI:ConfigurationManagementMenu+' => '配置管理',
|
||||
'UI:ConfigurationManagementMenu:Title' => '基础架构概览',
|
||||
'UI-ConfigurationManagementMenu-InfraByType' => '按类别划分基础架构对象',
|
||||
'UI-ConfigurationManagementMenu-InfraByStatus' => '按状态划分基础架构对象',
|
||||
|
||||
'UI:ConfigMgmtMenuOverview:Title' => '配置管理仪表板',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIbyStatus' => '按状态配置项目',
|
||||
'UI-ConfigMgmtMenuOverview-FunctionalCIByType' => '按类别配置项目',
|
||||
|
||||
'UI:RequestMgmtMenuOverview:Title' => '请求管理仪表板',
|
||||
'UI-RequestManagementOverview-RequestByService' => '按服务划分用户请求',
|
||||
'UI-RequestManagementOverview-RequestByPriority' => '按优先级划分用户请求',
|
||||
'UI-RequestManagementOverview-RequestUnassigned' => '尚未指派办理人的用户请求',
|
||||
|
||||
'UI:IncidentMgmtMenuOverview:Title' => '事件管理仪表板',
|
||||
'UI-IncidentManagementOverview-IncidentByService' => '按服务级划分事件',
|
||||
'UI-IncidentManagementOverview-IncidentByPriority' => '按优先级划分事件',
|
||||
'UI-IncidentManagementOverview-IncidentUnassigned' => '尚未指派办理人的事件',
|
||||
|
||||
'UI:ChangeMgmtMenuOverview:Title' => '变更管理仪表板',
|
||||
'UI-ChangeManagementOverview-ChangeByType' => '按类别划分变更',
|
||||
'UI-ChangeManagementOverview-ChangeUnassigned' => '尚未指派办理人的变更',
|
||||
'UI-ChangeManagementOverview-ChangeWithOutage' => '变更引起的停机',
|
||||
|
||||
'UI:ServiceMgmtMenuOverview:Title' => '服务管理仪表板',
|
||||
'UI-ServiceManagementOverview-CustomerContractToRenew' => '客户联系人需在30日内更新',
|
||||
'UI-ServiceManagementOverview-ProviderContractToRenew' => '供应商联系人需在30日内更新',
|
||||
|
||||
'UI:ContactsMenu' => '联系人',
|
||||
'UI:ContactsMenu+' => '联系人',
|
||||
'UI:ContactsMenu:Title' => '联系人概览',
|
||||
'UI-ContactsMenu-ContactsByLocation' => '按地域划分联系人',
|
||||
'UI-ContactsMenu-ContactsByType' => '按类别划分联系人',
|
||||
'UI-ContactsMenu-ContactsByStatus' => '按状态划分联系人',
|
||||
|
||||
'Menu:CSVImportMenu' => 'CSV 导入',
|
||||
'Menu:CSVImportMenu+' => '大批量创建或修改',
|
||||
|
||||
'Menu:DataModelMenu' => '数据模型',
|
||||
'Menu:DataModelMenu+' => '数据模型概览',
|
||||
|
||||
'Menu:ExportMenu' => '导出',
|
||||
'Menu:ExportMenu+' => '以HTML, CSV or XML格式导出任何查询的结果',
|
||||
|
||||
'Menu:NotificationsMenu' => '通知',
|
||||
'Menu:NotificationsMenu+' => '通知的配置',
|
||||
'UI:NotificationsMenu:Title' => '配置 <span class="hilite">通知</span>',
|
||||
'UI:NotificationsMenu:Help' => '帮助',
|
||||
'UI:NotificationsMenu:HelpContent' => '<p>在 iTop 中, 通知可以被完全客户化定制. 它们是基于两个对象集: <i>触发器和动作</i>.</p>
|
||||
<p><i><b>触发器</b></i> 定义了什么时候一个通知将被执行. 有3种触发器, 覆盖了一个对象生命周期的3个阶段:
|
||||
<ol>
|
||||
<li>"OnCreate" 触发器, 当某个特定类的对象创建时将触发</li>
|
||||
<li>"OnStateEnter" 触发器, 在某个给定类的对象进入某个特定状态前将触发(从另外一个状态而来)</li>
|
||||
<li>"OnStateLeave" 触发器, 在某个给定类的对象离开某个特定状态时将触发</li>
|
||||
</ol>
|
||||
</p>
|
||||
<p>
|
||||
<i><b>动作</b></i> 定义了触发器触发时要执行的动作. 目前, 仅有一种动作存在于发送邮件过程中.
|
||||
这些动作还定义了用于发送邮件及收件人,重要性等的模板.
|
||||
</p>
|
||||
<p>一个专门页面: <a href="../setup/email.test.php" target="_blank">email.test.php</a> 可用于测试和调试您的 PHP mail 配置.</p>
|
||||
<p>若要执行, 动作必须和触发器相关联.
|
||||
当与一个触发器关联时, 每个动作都被赋予一个顺序号, 规定了按什么样的顺序执行这些动作.</p>',
|
||||
'UI:NotificationsMenu:Triggers' => '触发器',
|
||||
'UI:NotificationsMenu:AvailableTriggers' => '可用的触发器',
|
||||
'UI:NotificationsMenu:OnCreate' => '当一个对象被创建',
|
||||
'UI:NotificationsMenu:OnStateEnter' => '当一个对象进入给定状态',
|
||||
'UI:NotificationsMenu:OnStateLeave' => '当一个对象离开给定状态',
|
||||
'UI:NotificationsMenu:Actions' => '动作',
|
||||
'UI:NotificationsMenu:AvailableActions' => '有效的动作',
|
||||
|
||||
'Menu:AuditCategories' => '审计类目',
|
||||
'Menu:AuditCategories+' => '审计类目',
|
||||
'Menu:Notifications:Title' => '审计类目',
|
||||
|
||||
'Menu:RunQueriesMenu' => '运行查询',
|
||||
'Menu:RunQueriesMenu+' => '运行任何查询',
|
||||
|
||||
'Menu:DataAdministration' => '数据管理',
|
||||
'Menu:DataAdministration+' => '数据管理',
|
||||
|
||||
'Menu:UniversalSearchMenu' => '通用搜索',
|
||||
'Menu:UniversalSearchMenu+' => '搜索所有...',
|
||||
|
||||
'Menu:ApplicationLogMenu' => 'Log de l\'application',
|
||||
'Menu:ApplicationLogMenu+' => 'Log de l\'application',
|
||||
'Menu:ApplicationLogMenu:Title' => 'Log de l\'application',
|
||||
|
||||
'Menu:UserManagementMenu' => '用户管理',
|
||||
'Menu:UserManagementMenu+' => '用户管理',
|
||||
|
||||
'Menu:ProfilesMenu' => '简档',
|
||||
'Menu:ProfilesMenu+' => '简档',
|
||||
'Menu:ProfilesMenu:Title' => '简档',
|
||||
|
||||
'Menu:UserAccountsMenu' => '用户帐户',
|
||||
'Menu:UserAccountsMenu+' => '用户帐户',
|
||||
'Menu:UserAccountsMenu:Title' => '用户帐户',
|
||||
|
||||
'UI:iTopVersion:Short' => 'iTop version %1$s',
|
||||
'UI:iTopVersion:Long' => 'iTop version %1$s-%2$s built on %3$s',
|
||||
'UI:PropertiesTab' => '属性',
|
||||
|
||||
'UI:OpenDocumentInNewWindow_' => '在新窗口打开文档: %1$s',
|
||||
'UI:DownloadDocument_' => '下载该文档: %1$s',
|
||||
'UI:Document:NoPreview' => '该类文档无法预览',
|
||||
|
||||
'UI:DeadlineMissedBy_duration' => 'Missed by %1$s',
|
||||
'UI:Deadline_LessThan1Min' => '< 1 min',
|
||||
'UI:Deadline_Minutes' => '%1$d min',
|
||||
'UI:Deadline_Hours_Minutes' => '%1$dh %2$dmin',
|
||||
'UI:Deadline_Days_Hours_Minutes' => '%1$dd %2$dh %3$dmin',
|
||||
'UI:Help' => '帮助',
|
||||
'UI:PasswordConfirm' => '(确认)',
|
||||
'UI:BeforeAdding_Class_ObjectsSaveThisObject' => '在添加更多 %1$s 对象前, 保存该对象.',
|
||||
'UI:DisplayThisMessageAtStartup' => '在启动时显示该消息',
|
||||
'UI:RelationshipGraph' => '图览',
|
||||
'UI:RelationshipList' => '列表',
|
||||
|
||||
'Portal:Title' => 'iTop 用户门户',
|
||||
'Portal:Refresh' => '刷新',
|
||||
'Portal:Back' => '返回',
|
||||
'Portal:CreateNewRequest' => '创建一个新的请求',
|
||||
'Portal:ChangeMyPassword' => '改变我的密码',
|
||||
'Portal:Disconnect' => '断开',
|
||||
'Portal:OpenRequests' => '我的待解决的请求',
|
||||
'Portal:ResolvedRequests' => '我的已解决的请求',
|
||||
'Portal:SelectService' => '从类目中选择一个服务:',
|
||||
'Portal:PleaseSelectOneService' => '请选择一个服务',
|
||||
'Portal:SelectSubcategoryFrom_Service' => '从服务中选择一个子类 %1$s:',
|
||||
'Portal:PleaseSelectAServiceSubCategory' => '请选择一个子类',
|
||||
'Portal:DescriptionOfTheRequest' => '输入您的请求描述:',
|
||||
'Portal:TitleRequestDetailsFor_Request' => '请求明细内容 %1$s:',
|
||||
'Portal:NoOpenRequest' => '该类目中没有请求.',
|
||||
'Portal:Button:CloseTicket' => '关闭这个单据',
|
||||
'Portal:EnterYourCommentsOnTicket' => '输入您对于该单据解决情况的评述:',
|
||||
'Portal:ErrorNoContactForThisUser' => '错误: 当前用户没有和一个联系人或人员关联. 请联系您的系统管理员.',
|
||||
|
||||
'Enum:Undefined' => '未定义',
|
||||
));
|
||||
|
||||
|
||||
|
||||
?>
|
||||
@@ -62,11 +62,47 @@ a.internal {
|
||||
a.internal:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.code {
|
||||
background-color: #ccc;
|
||||
padding: 10px;
|
||||
border: 1px solid #999;
|
||||
font-family: Courier, Courier-New, monospace;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="banner"><span>Installation Help</span></div>
|
||||
<div id="content">
|
||||
<h1><a name="Installation">Completing the iTop installation</a></h1>
|
||||
<h2>cron.php - overview</h2>
|
||||
<p>In order to operate properly, iTop maintenance operations and asynchronous tasks must be executed on a regular basis.
|
||||
In order to ease the installation, all the background tasks have been grouped to be launched from a single file: <tt>webservices/cron.php</tt></p>
|
||||
<p>The following features require the activation of cron.php</p>
|
||||
<ul>
|
||||
<li><b>Asynchronous emails</b>. By default, this option is disabled. To enable it, set 'email_asynchronous' to 1 in the configuration file</li>
|
||||
<li><b>Check ticket SLA</b>. Tickets reaching the limits will be passed into Escalation TTO/TTR states</li>
|
||||
</ul>
|
||||
</p>
|
||||
<p>For more information about cron.php, check the <a href="https://sourceforge.net/apps/mediawiki/itop/index.php?title=Cron.php">Wiki</a></p>
|
||||
<h2>Scheduling cron.php on Windows</h2>
|
||||
<ol>
|
||||
<li>Edit the file <em><itop root></em>/webservices/<b>cron.params</b> to set the credentials used for cronified tasks (requires administator privileges)</li>
|
||||
<li>Edit the file <em><itop root></em>/webservices/<b>cron.cmd</b>, and set the relevant path for your installation of PHP. If you care about security, it is recommended to change also the path to the parameters file <em><itop root></em>/webservices/<b>cron.params</b> and move this file to a place where its content is not served by the web server.</li>
|
||||
<li>Schedule the execution of cron.cmd:
|
||||
<pre>schtasks.exe /create /tn "iTop CRON" /sc minute /mo 1 /tr "\"<em><itop root></em>/webservices/cron.cmd\""</pre>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
|
||||
<h2>Scheduling cron.php on Linux/Unix</h2>
|
||||
<ol>
|
||||
<li>Edit the file <em><itop root></em>/webservices/<b>cron.params</b> to set the credentials used for cronified tasks (requires administator privileges)</li>
|
||||
<li>If you care about security: move the file <em><itop root></em>/webservices/<b>cron.params</b> into a directory not in the scope of the web server (Apache), and make it be readable only by the account that will execute the cron</li>
|
||||
<li>Edit the crontab and add the following line:
|
||||
<pre>* * * * * /usr/bin/php <em><itop root></em>/webservices/cron.php --param_file=<em><itop root></em>/webservices/cron.params</pre>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<h1><a name="Modules">iTop Modules</a></h1>
|
||||
|
||||
<!-- Configuration Management Module -->
|
||||
@@ -75,7 +111,7 @@ a.internal:hover {
|
||||
<p>This module allows IT operators to document all items they have under their control, it implements a CMDB following the ITIL best practices. The module provides a logical model of the IT infrastructure by identifying, controlling, maintaining and verifying the version of all existing Configuration Items (CIs).
|
||||
Relationships between CIs are also documented in the Configuration Management module, so that IT engineers can easily analyze dependencies within the infrastructure and understand the impact due to incidents or changes.</p>
|
||||
<p>Out of the box, iTop 1.0 allows you to manage:</p>
|
||||
<ul>
|
||||
<ul>
|
||||
<li>Persons and Teams</li>
|
||||
<li>Locations</li>
|
||||
<li>Business Processes</li>
|
||||
@@ -89,7 +125,7 @@ Relationships between CIs are also documented in the Configuration Management mo
|
||||
<p><i>This module is the base for all other iTop modules and is automatically installed with iTop</i></p>
|
||||
|
||||
<!-- Service Management Module -->
|
||||
|
||||
|
||||
<h2 id="Service"><a name="ServiceMgmt">Service Management</a></h2>
|
||||
<p>This module allows you to define and maintain the Services provided by your organization, the contracts with your customers and providers and the available Service Levels for each of Service.</p>
|
||||
<p>Using this module, you can document:</p>
|
||||
|
||||
BIN
images/delete.png
Normal file
BIN
images/delete.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 842 B |
BIN
images/details_sep.gif
Normal file
BIN
images/details_sep.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 38 B |
BIN
images/itop-logo-external.png
Executable file
BIN
images/itop-logo-external.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 2.4 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user