Compare commits

...

15 Commits

Author SHA1 Message Date
Anne-Cath
3ff97be963 use new method GetOwnerOrganizationAttCode in Attachment
+ test
2024-12-16 15:42:47 +01:00
Anne-Cath
add7743b6f Add tests 2024-12-16 15:27:28 +01:00
Anne-Cath
2415d3d5d3 Add tests 2024-12-16 14:56:23 +01:00
Anne-Cath
77989b6bd8 Add tests 2024-12-16 14:55:56 +01:00
Anne-Cath
f26ed0ea71 indentation 2024-12-16 14:17:26 +01:00
Anne-Cath
309b6bd900 Replace UserRightsProfile::GetOwnerOrganizationAttCode($sClass) by UserRights::GetOwnerOrganizationAttCode($sClass) 2024-12-09 10:53:09 +01:00
Anne-Cath
83f1476de4 Refactor
+ use new function in Attachment
2024-11-25 15:22:35 +01:00
Anne-Cath
c2d0c310a9 N°7963 - Inlineimage::SetDefaultOrgId blend field name between Person and linked class 2024-11-13 11:17:35 +01:00
Timothee
e7488b2c89 N°7721 default configuration parameter 2024-11-12 14:48:58 +01:00
Stephen Abello
8ac4086e71 N°7793 Fix primary color being set to blue due to a mistake 2024-11-12 13:52:03 +01:00
Benjamin Dalsass
6b5273fa1c N°1000 - Portal: filter BrowseBrick result varies if in list or tree (#673)
* N°1000 - Portal: filter BrowseBrick result varies if in list or tree

* N°1000 - Portal: filter BrowseBrick result varies if in list or tree
- replace html separators by css class

* N°1000 - Portal: filter BrowseBrick result varies if in list or tree
- replace html separators by css class

* N°1000 - Portal: filter BrowseBrick result varies if in list or tree
- add alteration comment to Tree List Filter jQuery plugin 1.0
- remove display none to tree-item-filter-data
2024-11-12 11:02:43 +01:00
jf-cbd
9b1e854bf7 Update translations 2024-11-12 09:27:35 +01:00
Lars Kaltefleiter
926700856d Fix some typos in en translations (#678) 2024-11-08 10:56:10 +01:00
Stephen Abello
ab93d59a77 Merge branch 'support/3.1' into support/3.2
# Conflicts:
#	sources/Core/Email/EmailLaminas.php
2024-11-08 09:41:48 +01:00
Karel Vlk
c70d62a51e 🐛 N°7916 SF#2274 EmailLaminas.php: Keep charset with part header in multipart email (#672)
* 🐛 N°2274 EmailLaminas.php: Keep charset with part header in multipart email

* Add a unit test

---------

Co-authored-by: Stephen Abello <stephen.abello@combodo.com>
2024-11-08 09:38:57 +01:00
100 changed files with 499 additions and 343 deletions

View File

@@ -648,7 +648,7 @@ class UserRightsProfile extends UserRightsAddOnAPI
$aConditions = array();
// Determine if this class is part of a silo and build the filter for it
$sAttCode = self::GetOwnerOrganizationAttCode($sClass);
$sAttCode = UserRights::GetOwnerOrganizationAttCode($sClass);
if (!is_null($sAttCode))
{
$aUserOrgs = $this->GetUserOrgs($oUser, $sClass);
@@ -834,7 +834,7 @@ class UserRightsProfile extends UserRightsAddOnAPI
// But currently we are checking wether the objects might be written...
// Let's exclude the objects based on the relevant criteria
$sOrgAttCode = self::GetOwnerOrganizationAttCode($sClass);
$sOrgAttCode = UserRights::GetOwnerOrganizationAttCode($sClass);
if (!is_null($sOrgAttCode))
{
$aUserOrgs = $this->GetUserOrgs($oUser, $sClass);
@@ -938,31 +938,11 @@ class UserRightsProfile extends UserRightsAddOnAPI
* @param string $sClass
* @return string|null Find out which attribute is corresponding the dimension 'owner org'
* returns null if no such attribute has been found (no filtering should occur)
* @deprecated 3.3.0 use @UserRights::GetOwnerOrganizationAttCode instead
*/
public static function GetOwnerOrganizationAttCode($sClass)
{
$sAttCode = null;
$aCallSpec = array($sClass, 'MapContextParam');
if (($sClass == 'Organization') || is_subclass_of($sClass, 'Organization'))
{
$sAttCode = 'id';
}
elseif (is_callable($aCallSpec))
{
$sAttCode = call_user_func($aCallSpec, 'org_id'); // Returns null when there is no mapping for this parameter
if (!MetaModel::IsValidAttCode($sClass, $sAttCode))
{
// Skip silently. The data model checker will tell you something about this...
$sAttCode = null;
}
}
elseif(MetaModel::IsValidAttCode($sClass, 'org_id'))
{
$sAttCode = 'org_id';
}
return $sAttCode;
return UserRights::GetOwnerOrganizationAttCode($sClass);
}
/**

View File

@@ -778,7 +778,7 @@ exit;
// Determine how to position the objects of this class
//
$sAttCode = self::GetOwnerOrganizationAttCode($sClass);
$sAttCode = UserRights::GetOwnerOrganizationAttCode($sClass);
if (is_null($sAttCode))
{
// No filtering for this object
@@ -909,7 +909,7 @@ exit;
// But currently we are checking wether the objects might be written...
// Let's exclude the objects based on the relevant criteria
$sOrgAttCode = self::GetOwnerOrganizationAttCode($sClass);
$sOrgAttCode = UserRights::GetOwnerOrganizationAttCode($sClass);
if (!is_null($sOrgAttCode))
{
$aUserOrgs = $this->GetUserOrgs($oUser, $sClass);
@@ -1015,28 +1015,7 @@ exit;
*/
public static function GetOwnerOrganizationAttCode($sClass)
{
$sAttCode = null;
$aCallSpec = array($sClass, 'MapContextParam');
if (($sClass == 'Organization') || is_subclass_of($sClass, 'Organization'))
{
$sAttCode = 'id';
}
elseif (is_callable($aCallSpec))
{
$sAttCode = call_user_func($aCallSpec, 'org_id'); // Returns null when there is no mapping for this parameter
if (!MetaModel::IsValidAttCode($sClass, $sAttCode))
{
// Skip silently. The data model checker will tell you something about this...
$sAttCode = null;
}
}
elseif(MetaModel::IsValidAttCode($sClass, 'org_id'))
{
$sAttCode = 'org_id';
}
return $sAttCode;
return UserRights::GetOwnerOrganizationAttCode($sClass);;
}
/**

View File

@@ -71,7 +71,7 @@ define('DEFAULT_MAX_DISPLAY_LIMIT', 30);
define('DEFAULT_STANDARD_RELOAD_INTERVAL', 5 * 60);
define('DEFAULT_FAST_RELOAD_INTERVAL', 1 * 60);
define('DEFAULT_SECURE_CONNECTION_REQUIRED', false);
define('DEFAULT_ALLOWED_LOGIN_TYPES', 'form|external|basic');
define('DEFAULT_ALLOWED_LOGIN_TYPES', 'form|external|basic|token');
define('DEFAULT_EXT_AUTH_VARIABLE', '$_SERVER[\'REMOTE_USER\']');
define('DEFAULT_ENCRYPTION_KEY', '@iT0pEncr1pti0n!'); // We'll use a random generated key later (if possible)
define('DEFAULT_ENCRYPTION_LIB', 'Mcrypt'); // We'll define the best encryption available later

View File

@@ -140,36 +140,21 @@ class InlineImage extends DBObject
*/
public function SetDefaultOrgId()
{
// First check that the organization CAN be fetched from the target class
//
$sClass = $this->Get('item_class');
$aCallSpec = array($sClass, 'MapContextParam');
if (is_callable($aCallSpec))
{
$sAttCode = call_user_func($aCallSpec, 'org_id'); // Returns null when there is no mapping for this parameter
if (MetaModel::IsValidAttCode($sClass, $sAttCode))
{
// Second: check that the organization CAN be fetched from the current user
//
if (MetaModel::IsValidClass('Person'))
{
$aCallSpec = array($sClass, 'MapContextParam');
if (is_callable($aCallSpec))
{
$sAttCode = call_user_func($aCallSpec, 'org_id'); // Returns null when there is no mapping for this parameter
if (MetaModel::IsValidAttCode($sClass, $sAttCode))
{
// OK - try it
//
$oCurrentPerson = MetaModel::GetObject('Person', UserRights::GetContactId(), false);
if ($oCurrentPerson)
{
$this->Set('item_org_id', $oCurrentPerson->Get($sAttCode));
}
}
}
}
}
// If the item class has no organization attribute, then no need to set the organization id
if (is_null(UserRights::GetOwnerOrganizationAttCode( $this->Get('item_class')))) {
// No need for silos
return;
}
// get organization attribute code for the person class
$sOrgAttrCodeForPerson = UserRights::GetOwnerOrganizationAttCode('Person');
if (is_null($sOrgAttrCodeForPerson)) {
// No need for silos
return;
}
$oCurrentPerson = MetaModel::GetObject('Person', UserRights::GetContactId(), false);
if ($oCurrentPerson) {
$this->Set('item_org_id', $oCurrentPerson->Get($sOrgAttrCodeForPerson));
}
}

View File

@@ -2033,6 +2033,36 @@ class UserRights
{
return self::$m_sLastLoginStatus;
}
/**
* @param string $sClass
* @return string|null Find out which attribute is corresponding the dimension 'owner org'
* returns null if no such attribute has been found (no filtering should occur)
* @since 3.3.0
*/
public static function GetOwnerOrganizationAttCode($sClass)
{
$sAttCode = null;
$aCallSpec = array($sClass, 'MapContextParam');
if (($sClass == 'Organization') || is_subclass_of($sClass, 'Organization')) {
$sAttCode = 'id';
}
elseif (is_callable($aCallSpec)) {
$sAttCode = call_user_func($aCallSpec, 'org_id'); // Returns null when there is no mapping for this parameter
if (!MetaModel::IsValidAttCode($sClass, $sAttCode)) {
// Skip silently. The data model checker will tell you something about this...
$sAttCode = null;
}
}
elseif(MetaModel::IsValidAttCode($sClass, 'org_id')) {
$sAttCode = 'org_id';
}
return $sAttCode;
}
}
/**

View File

@@ -5,16 +5,16 @@
/* Semantic palettes */
/* - Primary color of the brand */
$common-color-primary-100: $common-color-blue-100 !default;
$common-color-primary-200: $common-color-blue-200 !default;
$common-color-primary-300: $common-color-blue-300 !default;
$common-color-primary-400: $common-color-blue-400 !default;
$common-color-primary-500: $common-color-blue-500 !default;
$common-color-primary-600: $common-color-blue-600 !default;
$common-color-primary-700: $common-color-blue-700 !default;
$common-color-primary-800: $common-color-blue-800 !default;
$common-color-primary-900: $common-color-blue-900 !default;
$common-color-primary-950: $common-color-blue-950 !default;
$common-color-primary-100: $common-color-orange-100 !default;
$common-color-primary-200: $common-color-orange-200 !default;
$common-color-primary-300: $common-color-orange-300 !default;
$common-color-primary-400: $common-color-orange-400 !default;
$common-color-primary-500: $common-color-orange-500 !default;
$common-color-primary-600: $common-color-orange-600 !default;
$common-color-primary-700: $common-color-orange-700 !default;
$common-color-primary-800: $common-color-orange-800 !default;
$common-color-primary-900: $common-color-orange-900 !default;
$common-color-primary-950: $common-color-orange-950 !default;
/* - Secondary color of the brand */
$common-color-secondary-100: $common-color-grey-100 !default;

View File

@@ -37,6 +37,6 @@
Dict::Add('EN US', 'English', 'English', array(
'Class:UserLDAP' => 'LDAP user',
'Class:UserLDAP+' => 'User authentified by LDAP',
'Class:UserLDAP+' => 'User authenticated by LDAP',
'UserLDAP:server' => 'LDAP specifics',
));

View File

@@ -11,6 +11,6 @@
*/
Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Class:UserLDAP' => 'LDAP užívateľ',
'Class:UserLDAP+' => 'User authentified by LDAP~~',
'Class:UserLDAP+' => 'User authenticated by LDAP~~',
'UserLDAP:server' => 'LDAP specifics~~',
]);

View File

@@ -17,7 +17,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [
'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)~~',
'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)~~',
'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~',
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class~~',
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contain a valid class~~',
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~',
'DBTools:Analyze' => 'Analyzuj',
'DBTools:Base' => 'Base~~',
@@ -41,7 +41,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [
'DBTools:LostAttachments:Button:Busy' => 'Please wait...~~',
'DBTools:LostAttachments:Button:Restore' => 'Restore~~',
'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.~~',
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, is does not retrieve deleted data.~~',
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, it does not retrieve deleted data.~~',
'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools~~',
'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analyzing the database.~~',
'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyze results:~~',

View File

@@ -17,7 +17,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)~~',
'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)~~',
'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~',
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class~~',
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contain a valid class~~',
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~',
'DBTools:Analyze' => 'Analyze~~',
'DBTools:Base' => 'Base~~',
@@ -41,7 +41,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
'DBTools:LostAttachments:Button:Busy' => 'Please wait...~~',
'DBTools:LostAttachments:Button:Restore' => 'Restore~~',
'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.~~',
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, is does not retrieve deleted data.~~',
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, it does not retrieve deleted data.~~',
'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools~~',
'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analyzing the database.~~',
'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyze results:~~',

View File

@@ -59,7 +59,7 @@ Dict::Add('EN US', 'English', 'English', array(
'DBAnalyzer-Integrity-HKInvalid' => 'Broken hierarchical key `%1$s`',
'DBAnalyzer-Fetch-Count-Error' => 'Fetch count error in `%1$s`, %2$d entries fetched / %3$d counted',
'DBAnalyzer-Integrity-FinalClass' => 'Field `%2$s`.`%1$s` must have the same value as `%3$s`.`%1$s`',
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class',
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contain a valid class',
));
// Database Info
@@ -72,7 +72,7 @@ Dict::Add('EN US', 'English', 'English', array(
// Lost attachments
Dict::Add('EN US', 'English', 'English', array(
'DBTools:LostAttachments' => 'Lost attachments',
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, is does not retrieve deleted data.',
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, it does not retrieve deleted data.',
'DBTools:LostAttachments:Button:Analyze' => 'Analyze',
'DBTools:LostAttachments:Button:Restore' => 'Restore',

View File

@@ -17,7 +17,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)~~',
'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)~~',
'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~',
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class~~',
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contain a valid class~~',
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~',
'DBTools:Analyze' => 'Analyze~~',
'DBTools:Base' => 'Base~~',
@@ -41,7 +41,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
'DBTools:LostAttachments:Button:Busy' => 'Please wait...~~',
'DBTools:LostAttachments:Button:Restore' => 'Restore~~',
'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.~~',
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, is does not retrieve deleted data.~~',
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, it does not retrieve deleted data.~~',
'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools~~',
'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analyzing the database.~~',
'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyze results:~~',

View File

@@ -18,7 +18,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'DBAnalyzer-Integrity-InvalidValue' => 'Недопустимое значение для %1$s (столбец: `%2$s.%3$s`)',
'DBAnalyzer-Integrity-MissingExtKey' => 'Отсутствует внешний ключ %1$s (столбец: `%2$s.%3$s`)',
'DBAnalyzer-Integrity-OrphanRecord' => 'Сиротская запись в `%1$s`, она должна иметь свой аналог в таблице `%2$s`',
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class~~',
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contain a valid class~~',
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Некоторые учетные записи пользователей не имеют профилей',
'DBTools:Analyze' => 'Анализировать',
'DBTools:Base' => 'База',

View File

@@ -17,7 +17,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)~~',
'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)~~',
'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~',
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class~~',
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contain a valid class~~',
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~',
'DBTools:Analyze' => 'Analyze~~',
'DBTools:Base' => 'Base~~',
@@ -41,7 +41,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'DBTools:LostAttachments:Button:Busy' => 'Please wait...~~',
'DBTools:LostAttachments:Button:Restore' => 'Restore~~',
'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.~~',
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, is does not retrieve deleted data.~~',
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, it does not retrieve deleted data.~~',
'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools~~',
'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analyzing the database.~~',
'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyze results:~~',

View File

@@ -17,7 +17,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'DBAnalyzer-Integrity-InvalidValue' => 'Invalid value for %1$s (column: `%2$s.%3$s`)~~',
'DBAnalyzer-Integrity-MissingExtKey' => 'Missing external key %1$s (column: `%2$s.%3$s`)~~',
'DBAnalyzer-Integrity-OrphanRecord' => 'Orphan record in `%1$s`, it should have its counterpart in table `%2$s`~~',
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contains a valid class~~',
'DBAnalyzer-Integrity-RootFinalClass' => 'Field `%2$s`.`%1$s` must contain a valid class~~',
'DBAnalyzer-Integrity-UsersWithoutProfile' => 'Some user accounts have no profile at all~~',
'DBTools:Analyze' => 'Analyze~~',
'DBTools:Base' => 'Base~~',
@@ -41,7 +41,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'DBTools:LostAttachments:Button:Busy' => 'Please wait...~~',
'DBTools:LostAttachments:Button:Restore' => 'Restore~~',
'DBTools:LostAttachments:Button:Restore:Confirm' => 'This action cannot be undone, please confirm that you want to restore the selected files.~~',
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, is does not retrieve deleted data.~~',
'DBTools:LostAttachments:Disclaimer' => 'Here you can search your database for lost or misplaced attachments. This is NOT a data recovery tool, it does not retrieve deleted data.~~',
'DBTools:LostAttachments:History' => 'Attachment "%1$s" restored with DB tools~~',
'DBTools:LostAttachments:Step:Analyze' => 'First, search for lost/misplaced attachments by analyzing the database.~~',
'DBTools:LostAttachments:Step:AnalyzeResults' => 'Analyze results:~~',

View File

@@ -160,26 +160,20 @@
$this->Set('item_class', $sClass);
$this->Set('item_id', $iItemId);
$aCallSpec = array($sClass, 'MapContextParam');
if (is_callable($aCallSpec))
{
$sAttCode = call_user_func($aCallSpec, 'org_id'); // Returns null when there is no mapping for this parameter
if (MetaModel::IsValidAttCode($sClass, $sAttCode))
{
$iOrgId = $oItem->Get($sAttCode);
if ($iOrgId > 0)
{
if ($iOrgId != $this->Get('item_org_id'))
{
$this->Set('item_org_id', $iOrgId);
if ($bUpdateOnChange)
{
$this->DBUpdate();
}
}
}
}
$sAttCode = UserRights::GetOwnerOrganizationAttCode( $sClass);
if (is_null($sAttCode)) {
// No need for silos
return;
}
$iOrgId = $oItem->Get($sAttCode);
if ($iOrgId > 0) {
if ($iOrgId != $this->Get('item_org_id')) {
$this->Set('item_org_id', $iOrgId);
if ($bUpdateOnChange) {
$this->DBUpdate();
}
}
}
}]]></code>
</method>
<method id="SetDefaultOrgId">
@@ -193,24 +187,15 @@
<code><![CDATA[ public function SetDefaultOrgId()
{
// Check that the organization CAN be fetched from the current user
//
if (MetaModel::IsValidClass('Person'))
{
$aCallSpec = array('Person', 'MapContextParam');
if (is_callable($aCallSpec))
{
$sAttCode = call_user_func($aCallSpec, 'org_id'); // Returns null when there is no mapping for this parameter
if (MetaModel::IsValidAttCode('Person', $sAttCode))
{
// OK - try it
//
$oCurrentPerson = MetaModel::GetObject('Person', UserRights::GetContactId(), false);
if ($oCurrentPerson)
{
$this->Set('item_org_id', $oCurrentPerson->Get($sAttCode));
}
}
}
$sOrgAttrCodeForPerson = UserRights::GetOwnerOrganizationAttCode('Person');
if (is_null($sOrgAttrCodeForPerson)) {
// No need for silos
return;
}
$oCurrentPerson = MetaModel::GetObject('Person', UserRights::GetContactId(), false);
if ($oCurrentPerson) {
$this->Set('item_org_id', $oCurrentPerson->Get($sOrgAttrCodeForPerson));
}
}]]></code>
</method>

View File

@@ -643,7 +643,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [
'Class:Subnet/Tab:FreeIPs-count' => 'Počet volných adres: %1$s',
'Class:Subnet/Tab:FreeIPs-explain' => 'Tady je výčet volných IP adres (10)',
'Class:Subnet/Tab:IPUsage' => 'Využití IP',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
'Class:Subnet/Tab:IPUsage-explain' => 'Rozhraní, která mají IP adresu v rozsahu: <em>%1$s</em>-<em>%2$s</em>',
'Class:Tablet' => 'Tablet',
'Class:Tablet+' => '',

View File

@@ -153,7 +153,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
'Class:FunctionalCI/Attribute:organization_name' => 'Organisationsnavn',
'Class:FunctionalCI/Attribute:organization_name+' => '',
'Class:FunctionalCI/Attribute:softwares_list' => 'Software',
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the softwares installed on this configuration item~~',
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the software installed on this configuration item~~',
'Class:FunctionalCI/Tab:OpenedTickets' => 'Active Tickets~~',
'Class:FunctionalCI/Tab:OpenedTickets+' => 'Active Tickets which are impacting this functional CI~~',
'Class:Group' => 'Gruppe',
@@ -642,7 +642,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
'Class:Subnet/Tab:FreeIPs-count' => 'Ledige IP: %1$s',
'Class:Subnet/Tab:FreeIPs-explain' => 'Her er et udtræk af 10 ledige IP adresser',
'Class:Subnet/Tab:IPUsage' => 'IP Brug',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
'Class:Subnet/Tab:IPUsage-explain' => 'Interfaces der har en IP i området: <em>%1$s</em> til <em>%2$s</em>',
'Class:Tablet' => 'Tablet',
'Class:Tablet+' => '',

View File

@@ -129,7 +129,7 @@ Dict::Add('EN US', 'English', 'English', array(
'Class:FunctionalCI/Attribute:applicationsolution_list' => 'Application solutions',
'Class:FunctionalCI/Attribute:applicationsolution_list+' => 'All the application solutions depending on this configuration item',
'Class:FunctionalCI/Attribute:softwares_list' => 'Softwares',
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the softwares installed on this configuration item',
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the software installed on this configuration item',
'Class:FunctionalCI/Attribute:finalclass' => 'CI sub-class',
'Class:FunctionalCI/Attribute:finalclass+' => 'Name of the final class',
'Class:FunctionalCI/Tab:OpenedTickets' => 'Active Tickets',
@@ -1557,7 +1557,7 @@ Dict::Add('EN US', 'English', 'English', array(
'Server:otherinfo' => 'Other information',
'Server:power' => 'Power supply',
'Class:Subnet/Tab:IPUsage' => 'IP Usage',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not',
'Class:Subnet/Tab:IPUsage-explain' => 'Interfaces having an IP in the range: <em>%1$s</em> to <em>%2$s</em>',
'Class:Subnet/Tab:FreeIPs' => 'Free IPs',
'Class:Subnet/Tab:FreeIPs-count' => 'Free IPs: %1$s',

View File

@@ -641,7 +641,7 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [
'Class:Subnet/Tab:FreeIPs-count' => 'Szabad IP címek: %1$s',
'Class:Subnet/Tab:FreeIPs-explain' => '10 szabad IP cím kivonata',
'Class:Subnet/Tab:IPUsage' => 'IP felhasználás',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
'Class:Subnet/Tab:IPUsage-explain' => 'A hálózati csatolók a következő tartományba esnek: <em>%1$s</em> - <em>%2$s</em>',
'Class:Tablet' => 'Táblagép',
'Class:Tablet+' => '~~',

View File

@@ -152,7 +152,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
'Class:FunctionalCI/Attribute:organization_name' => '組織名',
'Class:FunctionalCI/Attribute:organization_name+' => '共通名',
'Class:FunctionalCI/Attribute:softwares_list' => 'ソフトウエア',
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the softwares installed on this configuration item~~',
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the software installed on this configuration item~~',
'Class:FunctionalCI/Tab:OpenedTickets' => 'Active Tickets~~',
'Class:FunctionalCI/Tab:OpenedTickets+' => 'Active Tickets which are impacting this functional CI~~',
'Class:Group' => 'グループ',
@@ -641,7 +641,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
'Class:Subnet/Tab:FreeIPs-count' => 'フリーIP: %1$s',
'Class:Subnet/Tab:FreeIPs-explain' => '10個のフリーなIPアドレス',
'Class:Subnet/Tab:IPUsage' => 'IP 利用',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
'Class:Subnet/Tab:IPUsage-explain' => 'インターフェースは、レンジ: <em>%1$s</em> から <em>%2$s</em>の中のIPを持っています。',
'Class:Tablet' => 'タブレット',
'Class:Tablet+' => '',

View File

@@ -641,7 +641,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
'Class:Subnet/Tab:FreeIPs-count' => 'IPs livres: %1$s',
'Class:Subnet/Tab:FreeIPs-explain' => 'Aqui uma faixa de 10 endereços IPs livres',
'Class:Subnet/Tab:IPUsage' => 'IP usado',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
'Class:Subnet/Tab:IPUsage-explain' => 'Placas de rede contendo IP na faixa: <em>%1$s</em> para <em>%2$s</em>',
'Class:Tablet' => 'Tablet',
'Class:Tablet+' => '',

View File

@@ -642,7 +642,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:Subnet/Tab:FreeIPs-count' => 'Свободных IP-адресов: %1$s',
'Class:Subnet/Tab:FreeIPs-explain' => 'Вот выборка из 10 свободных IP-адресов',
'Class:Subnet/Tab:IPUsage' => 'Использование IP-адресов',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
'Class:Subnet/Tab:IPUsage-explain' => 'Интерфейсы с IP-адресом в диапазоне: <em>%1$s</em> - <em>%2$s</em>',
'Class:Tablet' => 'Планшет',
'Class:Tablet+' => '',

View File

@@ -152,7 +152,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Class:FunctionalCI/Attribute:organization_name' => 'Názov Organizácie',
'Class:FunctionalCI/Attribute:organization_name+' => 'Common name~~',
'Class:FunctionalCI/Attribute:softwares_list' => 'Softvér',
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the softwares installed on this configuration item~~',
'Class:FunctionalCI/Attribute:softwares_list+' => 'All the software installed on this configuration item~~',
'Class:FunctionalCI/Tab:OpenedTickets' => 'Active Tickets~~',
'Class:FunctionalCI/Tab:OpenedTickets+' => 'Active Tickets which are impacting this functional CI~~',
'Class:Group' => 'Skupina',
@@ -641,7 +641,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Class:Subnet/Tab:FreeIPs-count' => 'Voľných IP adries: %1$s',
'Class:Subnet/Tab:FreeIPs-explain' => 'Tu je extrakt 10 voľných IP adries',
'Class:Subnet/Tab:IPUsage' => 'Využívanosť IP adries',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
'Class:Subnet/Tab:IPUsage-explain' => 'Rozhrania majúce IP adresu v rozsahu: <em>%1$s</em> do <em>%2$s</em>',
'Class:Tablet' => 'Tablet',
'Class:Tablet+' => '~~',

View File

@@ -642,7 +642,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Class:Subnet/Tab:FreeIPs-count' => 'Boş IPler: %1$s',
'Class:Subnet/Tab:FreeIPs-explain' => 'Boş IP adresleri',
'Class:Subnet/Tab:IPUsage' => 'IP Kullanımı',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet are used or not~~',
'Class:Subnet/Tab:IPUsage+' => 'Which IP within this Subnet is used or not~~',
'Class:Subnet/Tab:IPUsage-explain' => '<em>%1$s</em> - <em>%2$s</em> aralığındaki IPye sahip arayüzler',
'Class:Tablet' => 'Tablet',
'Class:Tablet+' => '~~',

View File

@@ -207,9 +207,9 @@ Dict::Add('EN US', 'English', 'English', array(
'Class:Incident/Attribute:user_satisfaction+' => '',
'Class:Incident/Attribute:user_satisfaction/Value:1' => 'Very satisfied',
'Class:Incident/Attribute:user_satisfaction/Value:1+' => '',
'Class:Incident/Attribute:user_satisfaction/Value:2' => 'Fairly statisfied',
'Class:Incident/Attribute:user_satisfaction/Value:2' => 'Fairly satisfied',
'Class:Incident/Attribute:user_satisfaction/Value:2+' => '',
'Class:Incident/Attribute:user_satisfaction/Value:3' => 'Rather Dissatified',
'Class:Incident/Attribute:user_satisfaction/Value:3' => 'Rather dissatisfied',
'Class:Incident/Attribute:user_satisfaction/Value:3+' => '',
'Class:Incident/Attribute:user_satisfaction/Value:4' => 'Very Dissatisfied',
'Class:Incident/Attribute:user_satisfaction/Value:4+' => '',

View File

@@ -160,9 +160,9 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Class:Incident/Attribute:user_satisfaction+' => '~~',
'Class:Incident/Attribute:user_satisfaction/Value:1' => 'Very satisfied~~',
'Class:Incident/Attribute:user_satisfaction/Value:1+' => '~~',
'Class:Incident/Attribute:user_satisfaction/Value:2' => 'Fairly statisfied~~',
'Class:Incident/Attribute:user_satisfaction/Value:2' => 'Fairly satisfied~~',
'Class:Incident/Attribute:user_satisfaction/Value:2+' => '~~',
'Class:Incident/Attribute:user_satisfaction/Value:3' => 'Rather Dissatified~~',
'Class:Incident/Attribute:user_satisfaction/Value:3' => 'Rather dissatisfied~~',
'Class:Incident/Attribute:user_satisfaction/Value:3+' => '~~',
'Class:Incident/Attribute:user_satisfaction/Value:4' => 'Very Dissatisfied~~',
'Class:Incident/Attribute:user_satisfaction/Value:4+' => '~~',

View File

@@ -160,9 +160,9 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Class:Incident/Attribute:user_satisfaction+' => '~~',
'Class:Incident/Attribute:user_satisfaction/Value:1' => 'Very satisfied~~',
'Class:Incident/Attribute:user_satisfaction/Value:1+' => '',
'Class:Incident/Attribute:user_satisfaction/Value:2' => 'Fairly statisfied~~',
'Class:Incident/Attribute:user_satisfaction/Value:2' => 'Fairly satisfied~~',
'Class:Incident/Attribute:user_satisfaction/Value:2+' => '',
'Class:Incident/Attribute:user_satisfaction/Value:3' => 'Rather Dissatified~~',
'Class:Incident/Attribute:user_satisfaction/Value:3' => 'Rather dissatisfied~~',
'Class:Incident/Attribute:user_satisfaction/Value:3+' => '',
'Class:Incident/Attribute:user_satisfaction/Value:4' => 'Very Dissatisfied~~',
'Class:Incident/Attribute:user_satisfaction/Value:4+' => '',

View File

@@ -42,7 +42,7 @@ Erase the field to recalculate default value~~',
'Class:OAuthClient/Attribute:token_expiration+' => '~~',
'Class:OAuthClientAzure' => 'OAuth client for Microsoft Azure~~',
'Class:OAuthClientAzure/Attribute:advanced_scope' => 'Advanced scope~~',
'Class:OAuthClientAzure/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence on the “Scope” selection which is then ignored~~',
'Class:OAuthClientAzure/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence over the “Scope” selection which is then ignored~~',
'Class:OAuthClientAzure/Attribute:scope' => 'Scope~~',
'Class:OAuthClientAzure/Attribute:scope+' => 'Usually default selection is appropriate~~',
'Class:OAuthClientAzure/Attribute:scope/Value:IMAP' => 'IMAP~~',
@@ -64,7 +64,7 @@ Erase the field to recalculate default value~~',
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)~~',
'Class:OAuthClientGoogle' => 'OAuth client for Google~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope' => 'Advanced scope~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence on the “Scope” selection which is then ignored~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence over the “Scope” selection which is then ignored~~',
'Class:OAuthClientGoogle/Attribute:scope' => 'Scope~~',
'Class:OAuthClientGoogle/Attribute:scope+' => 'Usually default selection is appropriate~~',
'Class:OAuthClientGoogle/Attribute:scope/Value:IMAP' => 'IMAP~~',
@@ -87,12 +87,12 @@ Erase the field to recalculate default value~~',
'Menu:OAuthClient' => 'OAuth client~~',
'Menu:OAuthClient+' => '~~',
'Menu:RegenerateTokens' => 'Regenerate access token...~~',
'OAuthClient:Name/UseForSMTPMustBeUnique' => 'The combination Login (%1$s) and Use for SMTP (%2$s) has already be used for OAuth Client~~',
'OAuthClient:Name/UseForSMTPMustBeUnique' => 'The combination Login (%1$s) and Use for SMTP (%2$s) has already been used for OAuth Client~~',
'OAuthClient:baseinfo' => 'Base Information~~',
'OAuthClient:scope' => 'Scope~~',
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Mailbox creation~~',
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client~~',
'itop-oauth-client:Message:RegenerateToken' => 'Regenerate access token to to take into account the changes~~',
'itop-oauth-client:Message:RegenerateToken' => 'Regenerate access token to take into account the changes~~',
'itop-oauth-client:Message:TokenCreated' => 'Access token created~~',
'itop-oauth-client:Message:TokenError' => 'Access token not generated due to server error~~',
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated~~',

View File

@@ -42,7 +42,7 @@ Erase the field to recalculate default value~~',
'Class:OAuthClient/Attribute:token_expiration+' => '~~',
'Class:OAuthClientAzure' => 'OAuth client for Microsoft Azure~~',
'Class:OAuthClientAzure/Attribute:advanced_scope' => 'Advanced scope~~',
'Class:OAuthClientAzure/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence on the “Scope” selection which is then ignored~~',
'Class:OAuthClientAzure/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence over the “Scope” selection which is then ignored~~',
'Class:OAuthClientAzure/Attribute:scope' => 'Scope~~',
'Class:OAuthClientAzure/Attribute:scope+' => 'Usually default selection is appropriate~~',
'Class:OAuthClientAzure/Attribute:scope/Value:IMAP' => 'IMAP~~',
@@ -64,7 +64,7 @@ Erase the field to recalculate default value~~',
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)~~',
'Class:OAuthClientGoogle' => 'OAuth client for Google~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope' => 'Advanced scope~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence on the “Scope” selection which is then ignored~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence over the “Scope” selection which is then ignored~~',
'Class:OAuthClientGoogle/Attribute:scope' => 'Scope~~',
'Class:OAuthClientGoogle/Attribute:scope+' => 'Usually default selection is appropriate~~',
'Class:OAuthClientGoogle/Attribute:scope/Value:IMAP' => 'IMAP~~',
@@ -87,12 +87,12 @@ Erase the field to recalculate default value~~',
'Menu:OAuthClient' => 'OAuth client~~',
'Menu:OAuthClient+' => '~~',
'Menu:RegenerateTokens' => 'Regenerate access token...~~',
'OAuthClient:Name/UseForSMTPMustBeUnique' => 'The combination Login (%1$s) and Use for SMTP (%2$s) has already be used for OAuth Client~~',
'OAuthClient:Name/UseForSMTPMustBeUnique' => 'The combination Login (%1$s) and Use for SMTP (%2$s) has already been used for OAuth Client~~',
'OAuthClient:baseinfo' => 'Base Information~~',
'OAuthClient:scope' => 'Scope~~',
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Mailbox creation~~',
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client~~',
'itop-oauth-client:Message:RegenerateToken' => 'Regenerate access token to to take into account the changes~~',
'itop-oauth-client:Message:RegenerateToken' => 'Regenerate access token to take into account the changes~~',
'itop-oauth-client:Message:TokenCreated' => 'Access token created~~',
'itop-oauth-client:Message:TokenError' => 'Access token not generated due to server error~~',
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated~~',

View File

@@ -19,12 +19,12 @@ Dict::Add('EN US', 'English', 'English', [
'itop-oauth-client:TestSMTP' => 'Email send test',
'itop-oauth-client:MissingOAuthClient' => 'Missing Oauth client for user name %1$s',
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client',
'itop-oauth-client:Message:RegenerateToken' => 'Regenerate access token to to take into account the changes',
'itop-oauth-client:Message:RegenerateToken' => 'Regenerate access token to take into account the changes',
'itop-oauth-client:Message:TokenCreated' => 'Access token created',
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated',
'itop-oauth-client:Message:TokenError' => 'Access token not generated due to server error',
'OAuthClient:Name/UseForSMTPMustBeUnique' => 'The combination Login (%1$s) and Use for SMTP (%2$s) has already be used for OAuth Client',
'OAuthClient:Name/UseForSMTPMustBeUnique' => 'The combination Login (%1$s) and Use for SMTP (%2$s) has already been used for OAuth Client',
'OAuthClient:baseinfo' => 'Base Information',
'OAuthClient:scope' => 'Scope',
@@ -82,7 +82,7 @@ Dict::Add('EN US', 'English', 'English', array(
'Class:OAuthClientAzure/Attribute:scope/Value:IMAP' => 'IMAP',
'Class:OAuthClientAzure/Attribute:scope/Value:IMAP+' => '',
'Class:OAuthClientAzure/Attribute:advanced_scope' => 'Advanced scope',
'Class:OAuthClientAzure/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence on the “Scope” selection which is then ignored',
'Class:OAuthClientAzure/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence over the “Scope” selection which is then ignored',
'Class:OAuthClientAzure/Attribute:used_scope' => 'Used scope',
'Class:OAuthClientAzure/Attribute:used_scope+' => '',
'Class:OAuthClientAzure/Attribute:used_scope/Value:simple' => 'Simple',
@@ -111,7 +111,7 @@ Dict::Add('EN US', 'English', 'English', array(
'Class:OAuthClientGoogle/Attribute:scope/Value:IMAP' => 'IMAP',
'Class:OAuthClientGoogle/Attribute:scope/Value:IMAP+' => '',
'Class:OAuthClientGoogle/Attribute:advanced_scope' => 'Advanced scope',
'Class:OAuthClientGoogle/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence on the “Scope” selection which is then ignored',
'Class:OAuthClientGoogle/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence over the “Scope” selection which is then ignored',
'Class:OAuthClientGoogle/Attribute:used_scope' => 'Used scope',
'Class:OAuthClientGoogle/Attribute:used_scope+' => '',
'Class:OAuthClientGoogle/Attribute:used_scope/Value:simple' => 'Simple',

View File

@@ -42,7 +42,7 @@ Erase the field to recalculate default value~~',
'Class:OAuthClient/Attribute:token_expiration+' => '~~',
'Class:OAuthClientAzure' => 'OAuth ügyfél Microsoft Azure-hoz',
'Class:OAuthClientAzure/Attribute:advanced_scope' => 'Advanced scope~~',
'Class:OAuthClientAzure/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence on the “Scope” selection which is then ignored~~',
'Class:OAuthClientAzure/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence over the “Scope” selection which is then ignored~~',
'Class:OAuthClientAzure/Attribute:scope' => 'Scope~~',
'Class:OAuthClientAzure/Attribute:scope+' => 'Usually default selection is appropriate~~',
'Class:OAuthClientAzure/Attribute:scope/Value:IMAP' => 'IMAP~~',
@@ -64,7 +64,7 @@ Erase the field to recalculate default value~~',
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)',
'Class:OAuthClientGoogle' => 'OAuth ügyfél a Google-höz',
'Class:OAuthClientGoogle/Attribute:advanced_scope' => 'Advanced scope~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence on the “Scope” selection which is then ignored~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence over the “Scope” selection which is then ignored~~',
'Class:OAuthClientGoogle/Attribute:scope' => 'Scope~~',
'Class:OAuthClientGoogle/Attribute:scope+' => 'Usually default selection is appropriate~~',
'Class:OAuthClientGoogle/Attribute:scope/Value:IMAP' => 'IMAP~~',
@@ -87,12 +87,12 @@ Erase the field to recalculate default value~~',
'Menu:OAuthClient' => 'OAuth ügyfél',
'Menu:OAuthClient+' => '~~',
'Menu:RegenerateTokens' => 'Hozzáférési tokenek újragenerálása...',
'OAuthClient:Name/UseForSMTPMustBeUnique' => 'The combination Login (%1$s) and Use for SMTP (%2$s) has already be used for OAuth Client~~',
'OAuthClient:Name/UseForSMTPMustBeUnique' => 'The combination Login (%1$s) and Use for SMTP (%2$s) has already been used for OAuth Client~~',
'OAuthClient:baseinfo' => 'Base Information~~',
'OAuthClient:scope' => 'Scope~~',
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Postafiók létrehozás',
'itop-oauth-client:Message:MissingToken' => 'Hozzáférési token generálása az OAuth ügyfél használata előtt',
'itop-oauth-client:Message:RegenerateToken' => 'Regenerate access token to to take into account the changes~~',
'itop-oauth-client:Message:RegenerateToken' => 'Regenerate access token to take into account the changes~~',
'itop-oauth-client:Message:TokenCreated' => 'Hozzáférési token kész',
'itop-oauth-client:Message:TokenError' => 'Access token not generated due to server error~~',
'itop-oauth-client:Message:TokenRecreated' => 'Hozzáférési token újragenerálva',

View File

@@ -42,7 +42,7 @@ Erase the field to recalculate default value~~',
'Class:OAuthClient/Attribute:token_expiration+' => '~~',
'Class:OAuthClientAzure' => 'OAuth client for Microsoft Azure~~',
'Class:OAuthClientAzure/Attribute:advanced_scope' => 'Advanced scope~~',
'Class:OAuthClientAzure/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence on the “Scope” selection which is then ignored~~',
'Class:OAuthClientAzure/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence over the “Scope” selection which is then ignored~~',
'Class:OAuthClientAzure/Attribute:scope' => 'Scope~~',
'Class:OAuthClientAzure/Attribute:scope+' => 'Usually default selection is appropriate~~',
'Class:OAuthClientAzure/Attribute:scope/Value:IMAP' => 'IMAP~~',
@@ -64,7 +64,7 @@ Erase the field to recalculate default value~~',
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)~~',
'Class:OAuthClientGoogle' => 'OAuth client for Google~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope' => 'Advanced scope~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence on the “Scope” selection which is then ignored~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence over the “Scope” selection which is then ignored~~',
'Class:OAuthClientGoogle/Attribute:scope' => 'Scope~~',
'Class:OAuthClientGoogle/Attribute:scope+' => 'Usually default selection is appropriate~~',
'Class:OAuthClientGoogle/Attribute:scope/Value:IMAP' => 'IMAP~~',
@@ -87,12 +87,12 @@ Erase the field to recalculate default value~~',
'Menu:OAuthClient' => 'OAuth client~~',
'Menu:OAuthClient+' => '~~',
'Menu:RegenerateTokens' => 'Regenerate access token...~~',
'OAuthClient:Name/UseForSMTPMustBeUnique' => 'The combination Login (%1$s) and Use for SMTP (%2$s) has already be used for OAuth Client~~',
'OAuthClient:Name/UseForSMTPMustBeUnique' => 'The combination Login (%1$s) and Use for SMTP (%2$s) has already been used for OAuth Client~~',
'OAuthClient:baseinfo' => 'Base Information~~',
'OAuthClient:scope' => 'Scope~~',
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Mailbox creation~~',
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client~~',
'itop-oauth-client:Message:RegenerateToken' => 'Regenerate access token to to take into account the changes~~',
'itop-oauth-client:Message:RegenerateToken' => 'Regenerate access token to take into account the changes~~',
'itop-oauth-client:Message:TokenCreated' => 'Access token created~~',
'itop-oauth-client:Message:TokenError' => 'Access token not generated due to server error~~',
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated~~',

View File

@@ -43,7 +43,7 @@ Erase the field to recalculate default value~~',
'Class:OAuthClient/Attribute:token_expiration+' => '',
'Class:OAuthClientAzure' => 'OAuth client for Microsoft Azure~~',
'Class:OAuthClientAzure/Attribute:advanced_scope' => 'Advanced scope~~',
'Class:OAuthClientAzure/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence on the “Scope” selection which is then ignored~~',
'Class:OAuthClientAzure/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence over the “Scope” selection which is then ignored~~',
'Class:OAuthClientAzure/Attribute:scope' => 'Scope~~',
'Class:OAuthClientAzure/Attribute:scope+' => 'Usually default selection is appropriate~~',
'Class:OAuthClientAzure/Attribute:scope/Value:IMAP' => 'IMAP',
@@ -65,7 +65,7 @@ Erase the field to recalculate default value~~',
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)',
'Class:OAuthClientGoogle' => 'OAuth client for Google~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope' => 'Advanced scope~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence on the “Scope” selection which is then ignored~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence over the “Scope” selection which is then ignored~~',
'Class:OAuthClientGoogle/Attribute:scope' => 'Scope~~',
'Class:OAuthClientGoogle/Attribute:scope+' => 'Usually default selection is appropriate~~',
'Class:OAuthClientGoogle/Attribute:scope/Value:IMAP' => 'IMAP',
@@ -88,12 +88,12 @@ Erase the field to recalculate default value~~',
'Menu:OAuthClient' => 'OAuth client~~',
'Menu:OAuthClient+' => '',
'Menu:RegenerateTokens' => 'Regenerate access token...~~',
'OAuthClient:Name/UseForSMTPMustBeUnique' => 'The combination Login (%1$s) and Use for SMTP (%2$s) has already be used for OAuth Client~~',
'OAuthClient:Name/UseForSMTPMustBeUnique' => 'The combination Login (%1$s) and Use for SMTP (%2$s) has already been used for OAuth Client~~',
'OAuthClient:baseinfo' => 'Base Information~~',
'OAuthClient:scope' => 'Scope~~',
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Mailbox creation~~',
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client~~',
'itop-oauth-client:Message:RegenerateToken' => 'Regenerate access token to to take into account the changes~~',
'itop-oauth-client:Message:RegenerateToken' => 'Regenerate access token to take into account the changes~~',
'itop-oauth-client:Message:TokenCreated' => 'Access token created~~',
'itop-oauth-client:Message:TokenError' => 'Access token not generated due to server error~~',
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated~~',

View File

@@ -42,7 +42,7 @@ Erase the field to recalculate default value~~',
'Class:OAuthClient/Attribute:token_expiration+' => '~~',
'Class:OAuthClientAzure' => 'OAuth client for Microsoft Azure~~',
'Class:OAuthClientAzure/Attribute:advanced_scope' => 'Advanced scope~~',
'Class:OAuthClientAzure/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence on the “Scope” selection which is then ignored~~',
'Class:OAuthClientAzure/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence over the “Scope” selection which is then ignored~~',
'Class:OAuthClientAzure/Attribute:scope' => 'Scope~~',
'Class:OAuthClientAzure/Attribute:scope+' => 'Usually default selection is appropriate~~',
'Class:OAuthClientAzure/Attribute:scope/Value:IMAP' => 'IMAP~~',
@@ -64,7 +64,7 @@ Erase the field to recalculate default value~~',
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)~~',
'Class:OAuthClientGoogle' => 'OAuth client for Google~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope' => 'Advanced scope~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence on the “Scope” selection which is then ignored~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence over the “Scope” selection which is then ignored~~',
'Class:OAuthClientGoogle/Attribute:scope' => 'Scope~~',
'Class:OAuthClientGoogle/Attribute:scope+' => 'Usually default selection is appropriate~~',
'Class:OAuthClientGoogle/Attribute:scope/Value:IMAP' => 'IMAP~~',
@@ -87,12 +87,12 @@ Erase the field to recalculate default value~~',
'Menu:OAuthClient' => 'OAuth client~~',
'Menu:OAuthClient+' => '~~',
'Menu:RegenerateTokens' => 'Regenerate access token...~~',
'OAuthClient:Name/UseForSMTPMustBeUnique' => 'The combination Login (%1$s) and Use for SMTP (%2$s) has already be used for OAuth Client~~',
'OAuthClient:Name/UseForSMTPMustBeUnique' => 'The combination Login (%1$s) and Use for SMTP (%2$s) has already been used for OAuth Client~~',
'OAuthClient:baseinfo' => 'Base Information~~',
'OAuthClient:scope' => 'Scope~~',
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Mailbox creation~~',
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client~~',
'itop-oauth-client:Message:RegenerateToken' => 'Regenerate access token to to take into account the changes~~',
'itop-oauth-client:Message:RegenerateToken' => 'Regenerate access token to take into account the changes~~',
'itop-oauth-client:Message:TokenCreated' => 'Access token created~~',
'itop-oauth-client:Message:TokenError' => 'Access token not generated due to server error~~',
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated~~',

View File

@@ -42,7 +42,7 @@ Erase the field to recalculate default value~~',
'Class:OAuthClient/Attribute:token_expiration+' => '~~',
'Class:OAuthClientAzure' => 'OAuth client for Microsoft Azure~~',
'Class:OAuthClientAzure/Attribute:advanced_scope' => 'Advanced scope~~',
'Class:OAuthClientAzure/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence on the “Scope” selection which is then ignored~~',
'Class:OAuthClientAzure/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence over the “Scope” selection which is then ignored~~',
'Class:OAuthClientAzure/Attribute:scope' => 'Scope~~',
'Class:OAuthClientAzure/Attribute:scope+' => 'Usually default selection is appropriate~~',
'Class:OAuthClientAzure/Attribute:scope/Value:IMAP' => 'IMAP~~',
@@ -64,7 +64,7 @@ Erase the field to recalculate default value~~',
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)~~',
'Class:OAuthClientGoogle' => 'OAuth client for Google~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope' => 'Advanced scope~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence on the “Scope” selection which is then ignored~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence over the “Scope” selection which is then ignored~~',
'Class:OAuthClientGoogle/Attribute:scope' => 'Scope~~',
'Class:OAuthClientGoogle/Attribute:scope+' => 'Usually default selection is appropriate~~',
'Class:OAuthClientGoogle/Attribute:scope/Value:IMAP' => 'IMAP~~',
@@ -87,12 +87,12 @@ Erase the field to recalculate default value~~',
'Menu:OAuthClient' => 'OAuth client~~',
'Menu:OAuthClient+' => '~~',
'Menu:RegenerateTokens' => 'Regenerate access token...~~',
'OAuthClient:Name/UseForSMTPMustBeUnique' => 'The combination Login (%1$s) and Use for SMTP (%2$s) has already be used for OAuth Client~~',
'OAuthClient:Name/UseForSMTPMustBeUnique' => 'The combination Login (%1$s) and Use for SMTP (%2$s) has already been used for OAuth Client~~',
'OAuthClient:baseinfo' => 'Base Information~~',
'OAuthClient:scope' => 'Scope~~',
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Mailbox creation~~',
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client~~',
'itop-oauth-client:Message:RegenerateToken' => 'Regenerate access token to to take into account the changes~~',
'itop-oauth-client:Message:RegenerateToken' => 'Regenerate access token to take into account the changes~~',
'itop-oauth-client:Message:TokenCreated' => 'Access token created~~',
'itop-oauth-client:Message:TokenError' => 'Access token not generated due to server error~~',
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated~~',

View File

@@ -40,7 +40,7 @@ Erase the field to recalculate default value~~',
'Class:OAuthClient/Attribute:token_expiration+' => '~~',
'Class:OAuthClientAzure' => 'OAuth client for Microsoft Azure~~',
'Class:OAuthClientAzure/Attribute:advanced_scope' => 'Advanced scope~~',
'Class:OAuthClientAzure/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence on the “Scope” selection which is then ignored~~',
'Class:OAuthClientAzure/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence over the “Scope” selection which is then ignored~~',
'Class:OAuthClientAzure/Attribute:scope' => 'Scope~~',
'Class:OAuthClientAzure/Attribute:scope+' => 'Usually default selection is appropriate~~',
'Class:OAuthClientAzure/Attribute:scope/Value:IMAP' => 'IMAP~~',
@@ -62,7 +62,7 @@ Erase the field to recalculate default value~~',
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)~~',
'Class:OAuthClientGoogle' => 'OAuth client for Google~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope' => 'Advanced scope~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence on the “Scope” selection which is then ignored~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence over the “Scope” selection which is then ignored~~',
'Class:OAuthClientGoogle/Attribute:scope' => 'Scope~~',
'Class:OAuthClientGoogle/Attribute:scope+' => 'Usually default selection is appropriate~~',
'Class:OAuthClientGoogle/Attribute:scope/Value:IMAP' => 'IMAP~~',
@@ -85,12 +85,12 @@ Erase the field to recalculate default value~~',
'Menu:OAuthClient' => 'OAuth client~~',
'Menu:OAuthClient+' => '~~',
'Menu:RegenerateTokens' => 'Regenerate access token...~~',
'OAuthClient:Name/UseForSMTPMustBeUnique' => 'The combination Login (%1$s) and Use for SMTP (%2$s) has already be used for OAuth Client~~',
'OAuthClient:Name/UseForSMTPMustBeUnique' => 'The combination Login (%1$s) and Use for SMTP (%2$s) has already been used for OAuth Client~~',
'OAuthClient:baseinfo' => 'Base Information~~',
'OAuthClient:scope' => 'Scope~~',
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Mailbox creation~~',
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client~~',
'itop-oauth-client:Message:RegenerateToken' => 'Regenerate access token to to take into account the changes~~',
'itop-oauth-client:Message:RegenerateToken' => 'Regenerate access token to take into account the changes~~',
'itop-oauth-client:Message:TokenCreated' => 'Access token created~~',
'itop-oauth-client:Message:TokenError' => 'Access token not generated due to server error~~',
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated~~',

View File

@@ -42,7 +42,7 @@ Erase the field to recalculate default value~~',
'Class:OAuthClient/Attribute:token_expiration+' => '~~',
'Class:OAuthClientAzure' => 'OAuth client for Microsoft Azure~~',
'Class:OAuthClientAzure/Attribute:advanced_scope' => 'Advanced scope~~',
'Class:OAuthClientAzure/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence on the “Scope” selection which is then ignored~~',
'Class:OAuthClientAzure/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence over the “Scope” selection which is then ignored~~',
'Class:OAuthClientAzure/Attribute:scope' => 'Scope~~',
'Class:OAuthClientAzure/Attribute:scope+' => 'Usually default selection is appropriate~~',
'Class:OAuthClientAzure/Attribute:scope/Value:IMAP' => 'IMAP~~',
@@ -64,7 +64,7 @@ Erase the field to recalculate default value~~',
'Class:OAuthClientAzure/Name' => '%1$s (%2$s)~~',
'Class:OAuthClientGoogle' => 'OAuth client for Google~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope' => 'Advanced scope~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence on the “Scope” selection which is then ignored~~',
'Class:OAuthClientGoogle/Attribute:advanced_scope+' => 'As soon as you enter something here it takes precedence over the “Scope” selection which is then ignored~~',
'Class:OAuthClientGoogle/Attribute:scope' => 'Scope~~',
'Class:OAuthClientGoogle/Attribute:scope+' => 'Usually default selection is appropriate~~',
'Class:OAuthClientGoogle/Attribute:scope/Value:IMAP' => 'IMAP~~',
@@ -87,12 +87,12 @@ Erase the field to recalculate default value~~',
'Menu:OAuthClient' => 'OAuth client~~',
'Menu:OAuthClient+' => '~~',
'Menu:RegenerateTokens' => 'Regenerate access token...~~',
'OAuthClient:Name/UseForSMTPMustBeUnique' => 'The combination Login (%1$s) and Use for SMTP (%2$s) has already be used for OAuth Client~~',
'OAuthClient:Name/UseForSMTPMustBeUnique' => 'The combination Login (%1$s) and Use for SMTP (%2$s) has already been used for OAuth Client~~',
'OAuthClient:baseinfo' => 'Base Information~~',
'OAuthClient:scope' => 'Scope~~',
'itop-oauth-client/Operation:CreateMailBox/Title' => 'Mailbox creation~~',
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client~~',
'itop-oauth-client:Message:RegenerateToken' => 'Regenerate access token to to take into account the changes~~',
'itop-oauth-client:Message:RegenerateToken' => 'Regenerate access token to take into account the changes~~',
'itop-oauth-client:Message:TokenCreated' => 'Access token created~~',
'itop-oauth-client:Message:TokenError' => 'Access token not generated due to server error~~',
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated~~',

View File

@@ -67,7 +67,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
'Error:HTTP:400' => 'Bad request~~',
'Error:HTTP:401' => 'Authentication~~',
'Error:HTTP:404' => 'Page not found~~',
'Error:HTTP:500' => 'Oops! An error has occured.~~',
'Error:HTTP:500' => 'Oops! An error has occurred.~~',
'Error:HTTP:GetHelp' => 'Please contact your %1$s administrator if the problem keeps happening.~~',
'Error:XHR:Fail' => 'Could not load data, please contact your %1$s administrator~~',
'Page:DefaultTitle' => '%1$s User portal~~',
@@ -103,12 +103,12 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
'Portal:Datatables:Language:ZeroRecords' => 'No result~~',
'Portal:EnvironmentBanner:GoToProduction' => 'Go back to PRODUCTION mode~~',
'Portal:EnvironmentBanner:Title' => 'You are currently in <strong>%1$s</strong> mode~~',
'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting again this form.~~',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting again this form.~~',
'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.~~',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.~~',
'Portal:ErrorUserLoggedOut' => 'You are logged out and need to log in again in order to continue.~~',
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>~~',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">Open</a> / <a href="%4$s" class="file_download_link">Download</a>~~',
'Portal:File:None' => 'No file~~',
'Portal:Form:Caselog:Entry:Close:Tooltip' => 'Close this entry~~',
'Portal:Form:Close:Warning' => 'Do you want to leave this form ? Data entered may be lost~~',
'Portal:Form:Close:Warning' => 'Do you want to leave this form? Data entered may be lost~~',
]);

View File

@@ -37,7 +37,7 @@ Dict::Add('EN US', 'English', 'English', array(
'Error:HTTP:400' => 'Bad request',
'Error:HTTP:401' => 'Authentication',
'Error:HTTP:404' => 'Page not found',
'Error:HTTP:500' => 'Oops! An error has occured.',
'Error:HTTP:500' => 'Oops! An error has occurred.',
'Error:HTTP:GetHelp' => 'Please contact your %1$s administrator if the problem keeps happening.',
'Error:XHR:Fail' => 'Could not load data, please contact your %1$s administrator',
'Portal:ErrorUserLoggedOut' => 'You are logged out and need to log in again in order to continue.',
@@ -67,9 +67,9 @@ Dict::Add('EN US', 'English', 'English', array(
// Object form
Dict::Add('EN US', 'English', 'English', array(
'Portal:Form:Caselog:Entry:Close:Tooltip' => 'Close this entry',
'Portal:Form:Close:Warning' => 'Do you want to leave this form ? Data entered may be lost',
'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting again this form.',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting again this form.',
'Portal:Form:Close:Warning' => 'Do you want to leave this form? Data entered may be lost',
'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.',
));
// UserProfile brick

View File

@@ -103,12 +103,12 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [
'Portal:Datatables:Language:ZeroRecords' => 'Nessun Risultato',
'Portal:EnvironmentBanner:GoToProduction' => 'Ritorna alla modalità Produzione',
'Portal:EnvironmentBanner:Title' => 'Sei attualmente in modalità <strong>%1$s</strong>',
'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting again this form.~~',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting again this form.~~',
'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.~~',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.~~',
'Portal:ErrorUserLoggedOut' => 'Sei disconnesso, bisogna effettuare un nuovo accesso per continuare',
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">Open</a> / <a href="%4$s" class="file_download_link">Download</a>~~',
'Portal:File:None' => 'Nessun File',
'Portal:Form:Caselog:Entry:Close:Tooltip' => 'Close this entry~~',
'Portal:Form:Close:Warning' => 'Do you want to leave this form ? Data entered may be lost~~',
'Portal:Form:Close:Warning' => 'Do you want to leave this form? Data entered may be lost~~',
]);

View File

@@ -67,7 +67,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
'Error:HTTP:400' => 'Bad request~~',
'Error:HTTP:401' => 'Authentication~~',
'Error:HTTP:404' => 'Page not found~~',
'Error:HTTP:500' => 'Oops! An error has occured.~~',
'Error:HTTP:500' => 'Oops! An error has occurred.~~',
'Error:HTTP:GetHelp' => 'Please contact your %1$s administrator if the problem keeps happening.~~',
'Error:XHR:Fail' => 'Could not load data, please contact your %1$s administrator~~',
'Page:DefaultTitle' => '%1$s User portal~~',
@@ -103,12 +103,12 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
'Portal:Datatables:Language:ZeroRecords' => 'No result~~',
'Portal:EnvironmentBanner:GoToProduction' => 'Go back to PRODUCTION mode~~',
'Portal:EnvironmentBanner:Title' => 'You are currently in <strong>%1$s</strong> mode~~',
'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting again this form.~~',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting again this form.~~',
'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.~~',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.~~',
'Portal:ErrorUserLoggedOut' => 'You are logged out and need to log in again in order to continue.~~',
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>~~',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">Open</a> / <a href="%4$s" class="file_download_link">Download</a>~~',
'Portal:File:None' => 'No file~~',
'Portal:Form:Caselog:Entry:Close:Tooltip' => 'Close this entry~~',
'Portal:Form:Close:Warning' => 'Do you want to leave this form ? Data entered may be lost~~',
'Portal:Form:Close:Warning' => 'Do you want to leave this form? Data entered may be lost~~',
]);

View File

@@ -104,8 +104,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'Portal:Datatables:Language:ZeroRecords' => 'Нет записей',
'Portal:EnvironmentBanner:GoToProduction' => 'Вернуться в режим PRODUCTION',
'Portal:EnvironmentBanner:Title' => 'Вы находитесь в режиме <strong>%1$s</strong>',
'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting again this form.~~',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting again this form.~~',
'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.~~',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.~~',
'Portal:ErrorUserLoggedOut' => 'Вы вышли из системы. Выполните вход, чтобы продолжить работу.',
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">Открыть</a> / <a href="%4$s" class="file_download_link">Скачать</a>',

View File

@@ -67,7 +67,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Error:HTTP:400' => 'Bad request~~',
'Error:HTTP:401' => 'Authentication~~',
'Error:HTTP:404' => 'Page not found~~',
'Error:HTTP:500' => 'Oops! An error has occured.~~',
'Error:HTTP:500' => 'Oops! An error has occurred.~~',
'Error:HTTP:GetHelp' => 'Please contact your %1$s administrator if the problem keeps happening.~~',
'Error:XHR:Fail' => 'Could not load data, please contact your %1$s administrator~~',
'Page:DefaultTitle' => '%1$s User portal~~',
@@ -103,12 +103,12 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Portal:Datatables:Language:ZeroRecords' => 'No result~~',
'Portal:EnvironmentBanner:GoToProduction' => 'Go back to PRODUCTION mode~~',
'Portal:EnvironmentBanner:Title' => 'You are currently in <strong>%1$s</strong> mode~~',
'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting again this form.~~',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting again this form.~~',
'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.~~',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.~~',
'Portal:ErrorUserLoggedOut' => 'You are logged out and need to log in again in order to continue.~~',
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>~~',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">Open</a> / <a href="%4$s" class="file_download_link">Download</a>~~',
'Portal:File:None' => 'No file~~',
'Portal:Form:Caselog:Entry:Close:Tooltip' => 'Close this entry~~',
'Portal:Form:Close:Warning' => 'Do you want to leave this form ? Data entered may be lost~~',
'Portal:Form:Close:Warning' => 'Do you want to leave this form? Data entered may be lost~~',
]);

View File

@@ -67,7 +67,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Error:HTTP:400' => 'Bad request~~',
'Error:HTTP:401' => 'Authentication~~',
'Error:HTTP:404' => 'Page not found~~',
'Error:HTTP:500' => 'Oops! An error has occured.~~',
'Error:HTTP:500' => 'Oops! An error has occurred.~~',
'Error:HTTP:GetHelp' => 'Please contact your %1$s administrator if the problem keeps happening.~~',
'Error:XHR:Fail' => 'Could not load data, please contact your %1$s administrator~~',
'Page:DefaultTitle' => '%1$s User portal~~',
@@ -103,12 +103,12 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Portal:Datatables:Language:ZeroRecords' => 'No result~~',
'Portal:EnvironmentBanner:GoToProduction' => 'Go back to PRODUCTION mode~~',
'Portal:EnvironmentBanner:Title' => 'You are currently in <strong>%1$s</strong> mode~~',
'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting again this form.~~',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting again this form.~~',
'Portal:Error:ObjectCannotBeCreated' => 'Error: object cannot be created. Check associated objects and attachments before submitting this form again.~~',
'Portal:Error:ObjectCannotBeUpdated' => 'Error: object cannot be updated. Check associated objects and attachments before submitting this form again.~~',
'Portal:ErrorUserLoggedOut' => 'You are logged out and need to log in again in order to continue.~~',
'Portal:File:DisplayInfo' => '<a href="%2$s" class="file_download_link">%1$s</a>~~',
'Portal:File:DisplayInfo+' => '%1$s (%2$s) <a href="%3$s" class="file_open_link" target="_blank">Open</a> / <a href="%4$s" class="file_download_link">Download</a>~~',
'Portal:File:None' => 'No file~~',
'Portal:Form:Caselog:Entry:Close:Tooltip' => 'Close this entry~~',
'Portal:Form:Close:Warning' => 'Do you want to leave this form ? Data entered may be lost~~',
'Portal:Form:Close:Warning' => 'Do you want to leave this form? Data entered may be lost~~',
]);

File diff suppressed because one or more lines are too long

View File

@@ -821,6 +821,23 @@ table .group-actions .item-action-wrapper .panel-body > p:last-child{
font-size: 1em;
}
/* tree list filter data */
.list-group-item .tree-item-wrapper .tree-item-filter-data{
padding-top: 8px;
color: $gray;
font-size: .9em;
}
/* tree list filter data span items */
.list-group-item .tree-item-wrapper .tree-item-filter-data span:not(:last-child):after{
content: '';
margin: 0 5px;
}
/* tree list filter data label span items */
.list-group-item .tree-item-wrapper .tree-item-filter-data .tree-item-filter-data-label{
font-weight: bold;
}
/****************************************************************/
/* - Mosaic mode */
/* */

View File

@@ -6,6 +6,11 @@
* Project Website: http://wiki.aiwsolutions.net/dOQKO
**/
/**
* Altered to allow filtering tree list with extra data.
* Add an attribute data-tree-additional-search to tree-item-wrapper element with extra data you want the search to include.
*/
jQuery.fn.treeListFilter = function(list, timeout, callback) {
var list = jQuery(list);
var input = this;
@@ -41,6 +46,7 @@ jQuery.fn.treeListFilter = function(list, timeout, callback) {
// Modified the search so it looks for each parts of the search and not the entire sentance
// Modified the text to remove accents (latinise())
var text = liObject.find('.tree-item-wrapper').text();
text+= liObject.find('.tree-item-wrapper').attr('data-tree-additional-search');
var textLC = text.toLowerCase().latinise();
var filterValues = filterValue.split(' ');
var display = true;

View File

@@ -26,11 +26,13 @@ use AttributeImage;
use AttributeSet;
use AttributeTagSet;
use Combodo\iTop\Portal\Brick\BrowseBrick;
use DBObject;
use DBSearch;
use Dict;
use MetaModel;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use UserRights;
use utils;
/**
* Class BrowseBrickHelper
@@ -514,6 +516,7 @@ class BrowseBrickHelper
'name' => $aCurrentRowValues[0]->Get($aLevelsProperties[$aCurrentRowKeys[0]]['name_att']),
'class' => get_class($aCurrentRowValues[0]),
'subitems' => array(),
'filter_data' => $this->GetFilterData($aLevelsProperties[$aCurrentRowKeys[0]], $aCurrentRowKeys[0], $aCurrentRowValues[0]),
'action_rules_token' => $this->PrepareActionRulesForItems($aCurrentRowObjects, $aCurrentRowKeys[0], $aLevelsProperties),
);
@@ -564,4 +567,49 @@ class BrowseBrickHelper
$this->AddToTreeItems($aItems[$sCurrentIndex]['subitems'], $aCurrentRowSliced, $aLevelsProperties, $aCurrentRowObjects);
}
}
/**
* Get data to allow filtering tree with invisible fields.
*
* @param array $aLevelProperties tree level properties
* @param string $sRowKey row key
* @param \DBObject $oRowValue row value
*
* @return string[]
* @throws \ArchivedObjectException
* @throws \CoreException
* @throws \Exception
*/
private function GetFilterData(array $aLevelProperties, string $sRowKey, DBObject $oRowValue) : array
{
// result
$sValues = "";
$sValuesAndCodes = "";
// iterate throw level properties fields...
foreach ($aLevelProperties['fields'] as $aField) {
// retrieve the object class
$sFieldObjectClass = get_class($oRowValue);
// retrieve the field object attribute definition
$oAttDef = MetaModel::GetAttributeDef($sFieldObjectClass, $aField['code']);
// get field value (HTML representation)
$sValue = $oAttDef->GetAsHTML($oRowValue->Get($aField['code']));
// do not print empty fields
if(!utils::IsNullOrEmptyString($sValue)){
// append to result
$sValues .= $sValue;
$sValuesAndCodes .= '<span><span class="tree-item-filter-data-label">' . $aField['label'] . ':</span> ' . $sValue . '</span>';
}
}
return [
'values' => $sValues,
'values_and_codes' => $sValuesAndCodes
];
}
}

View File

@@ -149,6 +149,9 @@
}
}
// hide/show tree items filter data when search input is empty/notEmpty
$('.tree-item-filter-data').toggle($('#brick_search_field').val() !== '');
expandAll();
};
// Load current node childnodes throught AJAX
@@ -197,10 +200,12 @@
var liElem = $('<li></li>').addClass('list-group-item');
var spanElem = $('<span></span>').addClass('tree-item-wrapper').attr('data-item-id', item.id).attr('data-level-alias', item.level_alias);
spanElem.attr('data-tree-additional-search', item['filter_data']['values']);
var nameElem = $('<a></a>').addClass('tree-item').text(item.name);
// Building node
$('ul[data-level-id="'+nodeId+'"]').append(liElem);
spanElem.append(nameElem);
spanElem.append('<div class="tree-item-filter-data">' + item['filter_data']['values_and_codes'] + '</div>');
liElem.append(spanElem);
// Delegating a click on <span> to its child <a> element

View File

@@ -9,7 +9,7 @@ Dict::Add('EN US', 'English', 'English', array(
'Menu:RequestManagement+' => '',
'Menu:RequestManagementProvider' => 'Helpdesk provider',
'Menu:RequestManagementProvider+' => '',
'Menu:UserRequest:Provider' => 'Open request transfered to provider',
'Menu:UserRequest:Provider' => 'Open request transferred to provider',
'Menu:UserRequest:Provider+' => '',
'Menu:UserRequest:Overview' => 'Overview',
'Menu:UserRequest:Overview+' => '',
@@ -215,9 +215,9 @@ Dict::Add('EN US', 'English', 'English', array(
'Class:UserRequest/Attribute:user_satisfaction/Value:1+' => '',
'Class:UserRequest/Attribute:user_satisfaction/Value:2' => 'Fairly satisfied',
'Class:UserRequest/Attribute:user_satisfaction/Value:2+' => '',
'Class:UserRequest/Attribute:user_satisfaction/Value:3' => 'Rather dissatified',
'Class:UserRequest/Attribute:user_satisfaction/Value:3' => 'Rather dissatisfied',
'Class:UserRequest/Attribute:user_satisfaction/Value:3+' => '',
'Class:UserRequest/Attribute:user_satisfaction/Value:4' => 'Very dissatified',
'Class:UserRequest/Attribute:user_satisfaction/Value:4' => 'Very dissatisfied',
'Class:UserRequest/Attribute:user_satisfaction/Value:4+' => '',
'Class:UserRequest/Attribute:user_comment' => 'User comment',
'Class:UserRequest/Attribute:user_comment+' => '',

View File

@@ -176,9 +176,9 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Class:UserRequest/Attribute:user_satisfaction/Value:1+' => '',
'Class:UserRequest/Attribute:user_satisfaction/Value:2' => 'Fairly satisfied~~',
'Class:UserRequest/Attribute:user_satisfaction/Value:2+' => '',
'Class:UserRequest/Attribute:user_satisfaction/Value:3' => 'Rather dissatified~~',
'Class:UserRequest/Attribute:user_satisfaction/Value:3' => 'Rather dissatisfied~~',
'Class:UserRequest/Attribute:user_satisfaction/Value:3+' => '',
'Class:UserRequest/Attribute:user_satisfaction/Value:4' => 'Very dissatified~~',
'Class:UserRequest/Attribute:user_satisfaction/Value:4' => 'Very dissatisfied~~',
'Class:UserRequest/Attribute:user_satisfaction/Value:4+' => '',
'Class:UserRequest/Error:CannotAssignParentRequestIdToSelf' => 'Cannot assign the Parent request to the request itself~~',
'Class:UserRequest/Method:ResolveChildTickets' => 'ResolveChildTickets~~',
@@ -227,7 +227,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Menu:UserRequest:OpenRequests+' => '',
'Menu:UserRequest:Overview' => 'Overview~~',
'Menu:UserRequest:Overview+' => '',
'Menu:UserRequest:Provider' => 'Open request transfered to provider~~',
'Menu:UserRequest:Provider' => 'Open request transferred to provider~~',
'Menu:UserRequest:Provider+' => '',
'Menu:UserRequest:Shortcuts' => 'Shortcuts~~',
'Menu:UserRequest:Shortcuts+' => '~~',

View File

@@ -9,7 +9,7 @@ Dict::Add('EN US', 'English', 'English', array(
'Menu:RequestManagement+' => '',
'Menu:RequestManagementProvider' => 'Helpdesk provider',
'Menu:RequestManagementProvider+' => '',
'Menu:UserRequest:Provider' => 'Open requests transfered to provider',
'Menu:UserRequest:Provider' => 'Open requests transferred to provider',
'Menu:UserRequest:Provider+' => '',
'Menu:UserRequest:Overview' => 'Overview',
'Menu:UserRequest:Overview+' => '',
@@ -217,9 +217,9 @@ Dict::Add('EN US', 'English', 'English', array(
'Class:UserRequest/Attribute:user_satisfaction/Value:1+' => '',
'Class:UserRequest/Attribute:user_satisfaction/Value:2' => 'Fairly satisfied',
'Class:UserRequest/Attribute:user_satisfaction/Value:2+' => '',
'Class:UserRequest/Attribute:user_satisfaction/Value:3' => 'Rather dissatified',
'Class:UserRequest/Attribute:user_satisfaction/Value:3' => 'Rather dissatisfied',
'Class:UserRequest/Attribute:user_satisfaction/Value:3+' => '',
'Class:UserRequest/Attribute:user_satisfaction/Value:4' => 'Very dissatified',
'Class:UserRequest/Attribute:user_satisfaction/Value:4' => 'Very dissatisfied',
'Class:UserRequest/Attribute:user_satisfaction/Value:4+' => '',
'Class:UserRequest/Attribute:user_comment' => 'User comment',
'Class:UserRequest/Attribute:user_comment+' => '',

View File

@@ -175,9 +175,9 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Class:UserRequest/Attribute:user_satisfaction/Value:1+' => '',
'Class:UserRequest/Attribute:user_satisfaction/Value:2' => 'Fairly satisfied~~',
'Class:UserRequest/Attribute:user_satisfaction/Value:2+' => '',
'Class:UserRequest/Attribute:user_satisfaction/Value:3' => 'Rather dissatified~~',
'Class:UserRequest/Attribute:user_satisfaction/Value:3' => 'Rather dissatisfied~~',
'Class:UserRequest/Attribute:user_satisfaction/Value:3+' => '',
'Class:UserRequest/Attribute:user_satisfaction/Value:4' => 'Very dissatified~~',
'Class:UserRequest/Attribute:user_satisfaction/Value:4' => 'Very dissatisfied~~',
'Class:UserRequest/Attribute:user_satisfaction/Value:4+' => '',
'Class:UserRequest/Error:CannotAssignParentRequestIdToSelf' => 'Cannot assign the Parent request to the request itself~~',
'Class:UserRequest/Method:ResolveChildTickets' => 'ResolveChildTickets~~',
@@ -228,7 +228,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Menu:UserRequest:OpenRequests+' => '',
'Menu:UserRequest:Overview' => 'Overview~~',
'Menu:UserRequest:Overview+' => '',
'Menu:UserRequest:Provider' => 'Open requests transfered to provider~~',
'Menu:UserRequest:Provider' => 'Open requests transferred to provider~~',
'Menu:UserRequest:Provider+' => '',
'Menu:UserRequest:Shortcuts' => 'Shortcuts~~',
'Menu:UserRequest:Shortcuts+' => '~~',

View File

@@ -72,7 +72,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
'Class:DeliveryModel' => 'Leverings model',
'Class:DeliveryModel+' => '',
'Class:DeliveryModel/Attribute:contacts_list' => 'Kontakt',
'Class:DeliveryModel/Attribute:contacts_list+' => 'All the contacts (Teams and Person) for this delivery model~~',
'Class:DeliveryModel/Attribute:contacts_list+' => 'All the contacts (Teams and Persons) for this delivery model~~',
'Class:DeliveryModel/Attribute:customers_list' => 'Kunde',
'Class:DeliveryModel/Attribute:customers_list+' => 'All the customers having this delivering model~~',
'Class:DeliveryModel/Attribute:description' => 'Beskrivelse',

View File

@@ -41,7 +41,7 @@ Dict::Add('EN US', 'English', 'English', array(
'Menu:Service:Overview+' => '',
'UI-ServiceManagementMenu-ContractsBySrvLevel' => 'Contracts by service level',
'UI-ServiceManagementMenu-ContractsByStatus' => 'Contracts by status',
'UI-ServiceManagementMenu-ContractsEndingIn30Days' => 'Contracts ending in less then 30 days',
'UI-ServiceManagementMenu-ContractsEndingIn30Days' => 'Contracts ending in less than 30 days',
'Menu:ProviderContract' => 'Provider contracts',
'Menu:ProviderContract+' => 'Provider contracts',
@@ -528,7 +528,7 @@ Dict::Add('EN US', 'English', 'English', array(
'Class:DeliveryModel/Attribute:description' => 'Description',
'Class:DeliveryModel/Attribute:description+' => '',
'Class:DeliveryModel/Attribute:contacts_list' => 'Contacts',
'Class:DeliveryModel/Attribute:contacts_list+' => 'All the contacts (Teams and Person) for this delivery model',
'Class:DeliveryModel/Attribute:contacts_list+' => 'All the contacts (Teams and Persons) for this delivery model',
'Class:DeliveryModel/Attribute:customers_list' => 'Customers',
'Class:DeliveryModel/Attribute:customers_list+' => 'All the customers having this delivering model',
));

View File

@@ -71,7 +71,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
'Class:DeliveryModel' => '提供モデル',
'Class:DeliveryModel+' => '',
'Class:DeliveryModel/Attribute:contacts_list' => '連絡先',
'Class:DeliveryModel/Attribute:contacts_list+' => 'All the contacts (Teams and Person) for this delivery model~~',
'Class:DeliveryModel/Attribute:contacts_list+' => 'All the contacts (Teams and Persons) for this delivery model~~',
'Class:DeliveryModel/Attribute:customers_list' => '顧客',
'Class:DeliveryModel/Attribute:customers_list+' => 'All the customers having this delivering model~~',
'Class:DeliveryModel/Attribute:description' => '説明',

View File

@@ -71,7 +71,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Class:DeliveryModel' => 'Model dodávky',
'Class:DeliveryModel+' => '~~',
'Class:DeliveryModel/Attribute:contacts_list' => 'Kontakty',
'Class:DeliveryModel/Attribute:contacts_list+' => 'All the contacts (Teams and Person) for this delivery model~~',
'Class:DeliveryModel/Attribute:contacts_list+' => 'All the contacts (Teams and Persons) for this delivery model~~',
'Class:DeliveryModel/Attribute:customers_list' => 'Zákazníci',
'Class:DeliveryModel/Attribute:customers_list+' => 'All the customers having this delivering model~~',
'Class:DeliveryModel/Attribute:description' => 'Popis',

View File

@@ -71,7 +71,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Class:DeliveryModel' => 'Delivery Model~~',
'Class:DeliveryModel+' => '~~',
'Class:DeliveryModel/Attribute:contacts_list' => 'Contacts~~',
'Class:DeliveryModel/Attribute:contacts_list+' => 'All the contacts (Teams and Person) for this delivery model~~',
'Class:DeliveryModel/Attribute:contacts_list+' => 'All the contacts (Teams and Persons) for this delivery model~~',
'Class:DeliveryModel/Attribute:customers_list' => 'Customers~~',
'Class:DeliveryModel/Attribute:customers_list+' => 'All the customers having this delivering model~~',
'Class:DeliveryModel/Attribute:description' => 'Description~~',

View File

@@ -68,7 +68,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
'Class:DeliveryModel' => 'Leverings model',
'Class:DeliveryModel+' => '',
'Class:DeliveryModel/Attribute:contacts_list' => 'Kontakt',
'Class:DeliveryModel/Attribute:contacts_list+' => 'All the contacts (Teams and Person) for this delivery model~~',
'Class:DeliveryModel/Attribute:contacts_list+' => 'All the contacts (Teams and Persons) for this delivery model~~',
'Class:DeliveryModel/Attribute:customers_list' => 'Kunde',
'Class:DeliveryModel/Attribute:customers_list+' => 'All the customers having this delivering model~~',
'Class:DeliveryModel/Attribute:description' => 'Beskrivelse',

View File

@@ -40,7 +40,7 @@ Dict::Add('EN US', 'English', 'English', array(
'Menu:Service:Overview+' => '',
'UI-ServiceManagementMenu-ContractsBySrvLevel' => 'Contracts by service level',
'UI-ServiceManagementMenu-ContractsByStatus' => 'Contracts by status',
'UI-ServiceManagementMenu-ContractsEndingIn30Days' => 'Contracts ending in less then 30 days',
'UI-ServiceManagementMenu-ContractsEndingIn30Days' => 'Contracts ending in less than 30 days',
'Menu:ProviderContract' => 'Provider contracts',
'Menu:ProviderContract+' => 'Provider contracts',
'Menu:CustomerContract' => 'Customer contracts',
@@ -486,7 +486,7 @@ Dict::Add('EN US', 'English', 'English', array(
'Class:DeliveryModel/Attribute:description' => 'Description',
'Class:DeliveryModel/Attribute:description+' => '',
'Class:DeliveryModel/Attribute:contacts_list' => 'Contacts',
'Class:DeliveryModel/Attribute:contacts_list+' => 'All the contacts (Teams and Person) for this delivery model',
'Class:DeliveryModel/Attribute:contacts_list+' => 'All the contacts (Teams and Persons) for this delivery model',
'Class:DeliveryModel/Attribute:customers_list' => 'Customers',
'Class:DeliveryModel/Attribute:customers_list+' => 'All the customers having this delivering model',
));

View File

@@ -67,7 +67,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
'Class:DeliveryModel' => '提供モデル',
'Class:DeliveryModel+' => '',
'Class:DeliveryModel/Attribute:contacts_list' => '連絡先',
'Class:DeliveryModel/Attribute:contacts_list+' => 'All the contacts (Teams and Person) for this delivery model~~',
'Class:DeliveryModel/Attribute:contacts_list+' => 'All the contacts (Teams and Persons) for this delivery model~~',
'Class:DeliveryModel/Attribute:customers_list' => '顧客',
'Class:DeliveryModel/Attribute:customers_list+' => 'All the customers having this delivering model~~',
'Class:DeliveryModel/Attribute:description' => '説明',

View File

@@ -67,7 +67,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Class:DeliveryModel' => 'Model dodávky',
'Class:DeliveryModel+' => '~~',
'Class:DeliveryModel/Attribute:contacts_list' => 'Kontakty',
'Class:DeliveryModel/Attribute:contacts_list+' => 'All the contacts (Teams and Person) for this delivery model~~',
'Class:DeliveryModel/Attribute:contacts_list+' => 'All the contacts (Teams and Persons) for this delivery model~~',
'Class:DeliveryModel/Attribute:customers_list' => 'Zákazníci',
'Class:DeliveryModel/Attribute:customers_list+' => 'All the customers having this delivering model~~',
'Class:DeliveryModel/Attribute:description' => 'Popis',

View File

@@ -142,7 +142,7 @@ if (!class_exists('StructureInstaller'))
$sPersonClass = 'Person';
$sPersonStateAttCode = MetaModel::GetStateAttributeCode($sPersonClass);
$sPersonOwnerOrgAttCode = UserRightsProfile::GetOwnerOrganizationAttCode($sPersonClass);
$sPersonOwnerOrgAttCode = UserRights::GetOwnerOrganizationAttCode($sPersonClass);
$iClassesWithLogCount = 0;
$aCreatedTriggerIds = [];
@@ -177,7 +177,7 @@ if (!class_exists('StructureInstaller'))
);
// Filter on class owner org. if any
$sClassOwnerOrgAttCode = UserRightsProfile::GetOwnerOrganizationAttCode($sClass);
$sClassOwnerOrgAttCode = UserRights::GetOwnerOrganizationAttCode($sClass);
$oOwnerOrgExpr = empty($sClassOwnerOrgAttCode) ? null : new BinaryExpression(
new FieldExpression($sPersonOwnerOrgAttCode),
'=',

View File

@@ -48,7 +48,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
'Class:Action' => 'Brugerdefineret handling',
'Class:Action+' => '',
'Class:Action/Attribute:asynchronous' => 'Asynchronous~~',
'Class:Action/Attribute:asynchronous+' => 'Whether this action should be executed in background or not~~',
'Class:Action/Attribute:asynchronous+' => 'Whether this action should be executed in the background or not~~',
'Class:Action/Attribute:asynchronous/Value:no' => 'No~~',
'Class:Action/Attribute:asynchronous/Value:use_global_setting' => 'Use global setting~~',
'Class:Action/Attribute:asynchronous/Value:yes' => 'Yes~~',

View File

@@ -20,7 +20,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
'Class:AuditCategory/Attribute:description' => 'Beskrivelse af Audit-kategori',
'Class:AuditCategory/Attribute:description+' => 'Udførlig beskrivelse af denne Audit-kategori',
'Class:AuditCategory/Attribute:domains_list' => 'Domains~~',
'Class:AuditCategory/Attribute:domains_list+' => 'Domains which includes this category~~',
'Class:AuditCategory/Attribute:domains_list+' => 'Domains which include this category~~',
'Class:AuditCategory/Attribute:name' => 'Kategori navn',
'Class:AuditCategory/Attribute:name+' => 'Kort navn for denne kategori',
'Class:AuditCategory/Attribute:ok_error_tolerance' => 'Warning threshold~~',

View File

@@ -126,7 +126,7 @@ Dict::Add('EN US', 'English', 'English', array(
'Core:AttributeIPAddress+' => 'IP address',
'Core:AttributeOQL' => 'OQL',
'Core:AttributeOQL+' => 'Object Query Langage expression',
'Core:AttributeOQL+' => 'Object Query Language expression',
'Core:AttributeEnum' => 'Enum',
'Core:AttributeEnum+' => 'List of predefined alphanumeric strings',
@@ -362,7 +362,7 @@ Dict::Add('EN US', 'English', 'English', array(
'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' => 'Event sub-class',
'Class:Event/Attribute:finalclass+' => 'Name of the final class: specifies the sort of event which occured',
'Class:Event/Attribute:finalclass+' => 'Name of the final class: specifies the sort of event which occurred',
));
//
@@ -432,7 +432,7 @@ Dict::Add('EN US', 'English', 'English', array(
Dict::Add('EN US', 'English', 'English', array(
'Class:EventWebService' => 'Web service event',
'Class:EventWebService+' => 'Trace of an web service call',
'Class:EventWebService+' => 'Trace of a web service call',
'Class:EventWebService/Attribute:verb' => 'Verb',
'Class:EventWebService/Attribute:verb+' => 'Name of the operation',
'Class:EventWebService/Attribute:result' => 'Result',
@@ -537,7 +537,7 @@ Dict::Add('EN US', 'English', 'English', array(
'Class:Action/Attribute:trigger_list' => 'Related Triggers',
'Class:Action/Attribute:trigger_list+' => 'Triggers linked to this action',
'Class:Action/Attribute:asynchronous' => 'Asynchronous',
'Class:Action/Attribute:asynchronous+' => 'Whether this action should be executed in background or not',
'Class:Action/Attribute:asynchronous+' => 'Whether this action should be executed in the background or not',
'Class:Action/Attribute:asynchronous/Value:use_global_setting' => 'Use global setting',
'Class:Action/Attribute:asynchronous/Value:yes' => 'Yes',
'Class:Action/Attribute:asynchronous/Value:no' => 'No',
@@ -724,7 +724,7 @@ Dict::Add('EN US', 'English', 'English', array(
Dict::Add('EN US', 'English', 'English', array(
'Class:TriggerOnPortalUpdate' => 'Trigger (when updated from the portal)',
'Class:TriggerOnPortalUpdate+' => 'Trigger on a end-user\'s update from the portal',
'Class:TriggerOnPortalUpdate+' => 'Trigger on an end-user\'s update from the portal',
));
//

View File

@@ -36,7 +36,7 @@ It groups all audit rules applying to that object scope',
'Class:AuditCategory/Attribute:warning_error_tolerance' => 'Error threshold',
'Class:AuditCategory/Attribute:warning_error_tolerance+' => 'Percentage of invalid objects below which the result is in error (red)',
'Class:AuditCategory/Attribute:domains_list' => 'Domains',
'Class:AuditCategory/Attribute:domains_list+' => 'Domains which includes this category',
'Class:AuditCategory/Attribute:domains_list+' => 'Domains which include this category',
));
//
@@ -333,7 +333,7 @@ Dict::Add('EN US', 'English', 'English', array(
Dict::Add('EN US', 'English', 'English', array(
'Class:URP_StimulusGrant' => 'stimulus_permission',
'Class:URP_StimulusGrant+' => 'permissions on stimilus in the life cycle of the object',
'Class:URP_StimulusGrant+' => 'permissions on stimulus 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',
@@ -844,7 +844,7 @@ Dict::Add('EN US', 'English', 'English', array(
'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:RelationDoesNotPropagate' => '%1$s: does not propagate (%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):',
@@ -897,7 +897,7 @@ 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 fields: %1$s',
'UI:Error:ActionNotAllowed' => 'You are not allowed to do this action',
'UI:Error:NotEnoughRightsToDelete' => 'This object could not be deleted because the current user do not have sufficient rights',
'UI:Error:NotEnoughRightsToDelete' => 'This object could not be deleted because the current user does 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',
@@ -1095,7 +1095,7 @@ When associated with a trigger, each action is given an "order" number, specifyi
'UI:Document:NoPreview' => 'No preview is available for this type of document',
'UI:Download-CSV' => 'Download %1$s',
'UI:DeadlineMissedBy_duration' => 'Missed by %1$s',
'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',
@@ -1225,7 +1225,7 @@ When associated with a trigger, each action is given an "order" number, specifyi
'UI:Favorites:ShowObsoleteData' => 'Show obsolete data',
'UI:Favorites:ShowObsoleteData+' => 'Show obsolete data in search results and lists of items to select',
'UI:NavigateAwayConfirmationMessage' => 'Any modification will be discarded.',
'UI:CancelConfirmationMessage' => 'You will loose your changes. Continue anyway?',
'UI:CancelConfirmationMessage' => 'You will lose your changes. Continue anyway?',
'UI:AutoApplyConfirmationMessage' => 'Some changes have not been applied yet. Do you want '.ITOP_APPLICATION_SHORT.' to take them into account?',
'UI:Create_Class_InState' => 'Create the %1$s in state: ',
'UI:OrderByHint_Values' => 'Sort order: %1$s',
@@ -1263,7 +1263,7 @@ When associated with a trigger, each action is given an "order" number, specifyi
'UI:Dashboard:EditCustom' => 'Edit custom version...',
'UI:Dashboard:CreateCustom' => 'Create a custom version...',
'UI:Dashboard:DeleteCustom' => 'Delete custom version...',
'UI:Dashboard:RevertConfirm' => 'Every changes made to the original version will be lost. Please confirm that you want to do this.',
'UI:Dashboard:RevertConfirm' => 'Every change made to the original version will be lost. Please confirm that you want to do this.',
'UI:ExportDashBoard' => 'Export to a file',
'UI:ImportDashBoard' => 'Import from a file...',
'UI:ImportDashboardTitle' => 'Import From a File',
@@ -1360,7 +1360,7 @@ When associated with a trigger, each action is given an "order" number, specifyi
// ---
'UI:DashletHeaderStatic:Label' => 'Header',
'UI:DashletHeaderStatic:Description' => 'Displays an horizontal separator',
'UI:DashletHeaderStatic:Description' => 'Displays a horizontal separator',
'UI:DashletHeaderStatic:Prop-Title' => 'Title',
'UI:DashletHeaderStatic:Prop-Title:Default' => 'Contacts',
'UI:DashletHeaderStatic:Prop-Icon' => 'Icon',

View File

@@ -165,7 +165,7 @@ Elle s\'applique à tous les objets dans le périmètre de sa catégorie d\'audi
'Class:URP_Profiles/Attribute:user_list' => 'Utilisateurs',
'Class:URP_Profiles/Attribute:user_list+' => 'Comptes utilisateur (logins) ayant ce profil',
'Class:URP_StimulusGrant' => 'stimulus_permission',
'Class:URP_StimulusGrant+' => 'permissions on stimilus in the life cycle of the object',
'Class:URP_StimulusGrant+' => 'permissions on stimulus in the life cycle of the object',
'Class:URP_StimulusGrant/Attribute:class' => 'Class',
'Class:URP_StimulusGrant/Attribute:class+' => 'Target class',
'Class:URP_StimulusGrant/Attribute:permission' => 'Permission',

View File

@@ -47,7 +47,7 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [
'Class:Action' => 'Egyéni művelet',
'Class:Action+' => 'A felhasználó által meghatározott művelet',
'Class:Action/Attribute:asynchronous' => 'Asynchronous~~',
'Class:Action/Attribute:asynchronous+' => 'Whether this action should be executed in background or not~~',
'Class:Action/Attribute:asynchronous+' => 'Whether this action should be executed in the background or not~~',
'Class:Action/Attribute:asynchronous/Value:no' => 'No~~',
'Class:Action/Attribute:asynchronous/Value:use_global_setting' => 'Use global setting~~',
'Class:Action/Attribute:asynchronous/Value:yes' => 'Yes~~',

View File

@@ -20,7 +20,7 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [
'Class:AuditCategory/Attribute:description' => 'Leírás',
'Class:AuditCategory/Attribute:description+' => '',
'Class:AuditCategory/Attribute:domains_list' => 'Domains~~',
'Class:AuditCategory/Attribute:domains_list+' => 'Domains which includes this category~~',
'Class:AuditCategory/Attribute:domains_list+' => 'Domains which include this category~~',
'Class:AuditCategory/Attribute:name' => 'Kategórianév',
'Class:AuditCategory/Attribute:name+' => '',
'Class:AuditCategory/Attribute:ok_error_tolerance' => 'Warning threshold~~',

View File

@@ -47,7 +47,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
'Class:Action' => 'カスタムアクション',
'Class:Action+' => 'ユーザ定義アクション',
'Class:Action/Attribute:asynchronous' => 'Asynchronous~~',
'Class:Action/Attribute:asynchronous+' => 'Whether this action should be executed in background or not~~',
'Class:Action/Attribute:asynchronous+' => 'Whether this action should be executed in the background or not~~',
'Class:Action/Attribute:asynchronous/Value:no' => 'No~~',
'Class:Action/Attribute:asynchronous/Value:use_global_setting' => 'Use global setting~~',
'Class:Action/Attribute:asynchronous/Value:yes' => 'Yes~~',

View File

@@ -20,7 +20,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
'Class:AuditCategory/Attribute:description' => '監査カテゴリ説明',
'Class:AuditCategory/Attribute:description+' => '監査カテゴリの説明',
'Class:AuditCategory/Attribute:domains_list' => 'Domains~~',
'Class:AuditCategory/Attribute:domains_list+' => 'Domains which includes this category~~',
'Class:AuditCategory/Attribute:domains_list+' => 'Domains which include this category~~',
'Class:AuditCategory/Attribute:name' => 'カテゴリ名',
'Class:AuditCategory/Attribute:name+' => 'カテゴリの短縮名',
'Class:AuditCategory/Attribute:ok_error_tolerance' => 'Warning threshold~~',

View File

@@ -21,7 +21,7 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Class:AuditCategory/Attribute:description' => 'Audit categorie beschrijving',
'Class:AuditCategory/Attribute:description+' => 'Uitgebreide beschrijving van deze Audit categorie',
'Class:AuditCategory/Attribute:domains_list' => 'Domeinen',
'Class:AuditCategory/Attribute:domains_list+' => 'Domains which includes this category~~',
'Class:AuditCategory/Attribute:domains_list+' => 'Domains which include this category~~',
'Class:AuditCategory/Attribute:name' => 'Naam categorie',
'Class:AuditCategory/Attribute:name+' => 'Afkorting van de naam van deze categorie',
'Class:AuditCategory/Attribute:ok_error_tolerance' => 'Warning threshold~~',

View File

@@ -47,7 +47,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
'Class:Action' => 'Ação personalizada',
'Class:Action+' => 'Ações definidas pelo usuário',
'Class:Action/Attribute:asynchronous' => 'Asynchronous~~',
'Class:Action/Attribute:asynchronous+' => 'Whether this action should be executed in background or not~~',
'Class:Action/Attribute:asynchronous+' => 'Whether this action should be executed in the background or not~~',
'Class:Action/Attribute:asynchronous/Value:no' => 'No~~',
'Class:Action/Attribute:asynchronous/Value:use_global_setting' => 'Use global setting~~',
'Class:Action/Attribute:asynchronous/Value:yes' => 'Yes~~',

View File

@@ -20,7 +20,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
'Class:AuditCategory/Attribute:description' => 'Descrição',
'Class:AuditCategory/Attribute:description+' => 'Longa descrição para esta categoria de auditoria',
'Class:AuditCategory/Attribute:domains_list' => 'Domains~~',
'Class:AuditCategory/Attribute:domains_list+' => 'Domains which includes this category~~',
'Class:AuditCategory/Attribute:domains_list+' => 'Domains which include this category~~',
'Class:AuditCategory/Attribute:name' => 'Nome',
'Class:AuditCategory/Attribute:name+' => 'Nome curto para esta categoria',
'Class:AuditCategory/Attribute:ok_error_tolerance' => 'Warning threshold~~',

View File

@@ -48,7 +48,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:Action' => 'Действие',
'Class:Action+' => 'Действие, определённое пользователем',
'Class:Action/Attribute:asynchronous' => 'Asynchronous~~',
'Class:Action/Attribute:asynchronous+' => 'Whether this action should be executed in background or not~~',
'Class:Action/Attribute:asynchronous+' => 'Whether this action should be executed in the background or not~~',
'Class:Action/Attribute:asynchronous/Value:no' => 'No~~',
'Class:Action/Attribute:asynchronous/Value:use_global_setting' => 'Use global setting~~',
'Class:Action/Attribute:asynchronous/Value:yes' => 'Yes~~',
@@ -370,7 +370,7 @@ If omitted the From (label) is used.~~',
'Class:EventRestService/Attribute:version' => 'Version',
'Class:EventRestService/Attribute:version+' => 'Argument \'version\'',
'Class:EventWebService' => 'События Web-сервиса',
'Class:EventWebService+' => 'Trace of an web service call~~',
'Class:EventWebService+' => 'Trace of a web service call~~',
'Class:EventWebService/Attribute:data' => 'Данные',
'Class:EventWebService/Attribute:data+' => 'Результаты данных',
'Class:EventWebService/Attribute:log_error' => 'Лог ошибок',

View File

@@ -21,7 +21,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:AuditCategory/Attribute:description' => 'Описание категории аудита',
'Class:AuditCategory/Attribute:description+' => 'Полное описание категории аудита',
'Class:AuditCategory/Attribute:domains_list' => 'Domains~~',
'Class:AuditCategory/Attribute:domains_list+' => 'Domains which includes this category~~',
'Class:AuditCategory/Attribute:domains_list+' => 'Domains which include this category~~',
'Class:AuditCategory/Attribute:name' => 'Название категории',
'Class:AuditCategory/Attribute:name+' => 'Краткое название для этой категории',
'Class:AuditCategory/Attribute:ok_error_tolerance' => 'Warning threshold~~',
@@ -799,7 +799,7 @@ Domain usually correspond to who is responsible for checking and fixing errors~~
'UI:DashletHeaderDynamic:Prop-Title' => 'Заголовок',
'UI:DashletHeaderDynamic:Prop-Title:Default' => 'Контакты',
'UI:DashletHeaderDynamic:Prop-Values' => 'Значения',
'UI:DashletHeaderStatic:Description' => 'Displays an horizontal separator~~',
'UI:DashletHeaderStatic:Description' => 'Displays a horizontal separator~~',
'UI:DashletHeaderStatic:Label' => 'Заголовок',
'UI:DashletHeaderStatic:Prop-Icon' => 'Иконка',
'UI:DashletHeaderStatic:Prop-Title' => 'Заголовок',

View File

@@ -47,7 +47,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Class:Action' => 'Vlastná akcia',
'Class:Action+' => 'User defined action~~',
'Class:Action/Attribute:asynchronous' => 'Asynchronous~~',
'Class:Action/Attribute:asynchronous+' => 'Whether this action should be executed in background or not~~',
'Class:Action/Attribute:asynchronous+' => 'Whether this action should be executed in the background or not~~',
'Class:Action/Attribute:asynchronous/Value:no' => 'No~~',
'Class:Action/Attribute:asynchronous/Value:use_global_setting' => 'Use global setting~~',
'Class:Action/Attribute:asynchronous/Value:yes' => 'Yes~~',
@@ -287,7 +287,7 @@ You can use in the OQL :this->attribute_code with an attribute code of the objec
'Class:Event/Attribute:date' => 'Dátum',
'Class:Event/Attribute:date+' => 'date and time at which the changes have been recorded~~',
'Class:Event/Attribute:finalclass' => 'Typ',
'Class:Event/Attribute:finalclass+' => 'Name of the final class: specifies the sort of event which occured~~',
'Class:Event/Attribute:finalclass+' => 'Name of the final class: specifies the sort of event which occurred~~',
'Class:Event/Attribute:message' => 'Správa',
'Class:Event/Attribute:message+' => 'short description of the event~~',
'Class:Event/Attribute:userinfo' => 'Informácie o užívateľovi',
@@ -383,7 +383,7 @@ You can use in the OQL :this->attribute_code with an attribute code of the objec
'Class:EventRestService/Attribute:version' => 'Version~~',
'Class:EventRestService/Attribute:version+' => 'Argument \'version\'~~',
'Class:EventWebService' => 'Udalosť Webovej služby',
'Class:EventWebService+' => 'Trace of an web service call~~',
'Class:EventWebService+' => 'Trace of a web service call~~',
'Class:EventWebService/Attribute:data' => 'Dáta',
'Class:EventWebService/Attribute:data+' => 'Result data~~',
'Class:EventWebService/Attribute:log_error' => 'Záznam Chyby',
@@ -582,7 +582,7 @@ This icon is shown in the tooltip of the “Lock” symbol on '.ITOP_APPLICATION
'Class:TriggerOnObjectUpdate/Attribute:target_attcodes' => 'Target fields~~',
'Class:TriggerOnObjectUpdate/Attribute:target_attcodes+' => '~~',
'Class:TriggerOnPortalUpdate' => 'Spúštač (pri aktualizácií z portálu)',
'Class:TriggerOnPortalUpdate+' => 'Trigger on a end-user\'s update from the portal~~',
'Class:TriggerOnPortalUpdate+' => 'Trigger on an end-user\'s update from the portal~',
'Class:TriggerOnStateChange' => 'Spúšťač (pri zmene stavu)',
'Class:TriggerOnStateChange+' => 'Trigger on object state change~~',
'Class:TriggerOnStateChange/Attribute:state' => 'Stav',
@@ -705,7 +705,7 @@ Ak je čas vynechaný, predvolený čas je 00:00:00
'Core:AttributeMetaEnum' => 'Computed enum~~',
'Core:AttributeMetaEnum+' => '~~',
'Core:AttributeOQL' => 'OQL',
'Core:AttributeOQL+' => 'Object Query Langage expression~~',
'Core:AttributeOQL+' => 'Object Query Language expression~~',
'Core:AttributeObsolescenceDate' => 'Obsolescence date~~',
'Core:AttributeObsolescenceDate+' => '~~',
'Core:AttributeObsolescenceDate/Label' => 'Obsolescence date~~',

View File

@@ -21,7 +21,7 @@ It groups all audit rules applying to that object scope~~',
'Class:AuditCategory/Attribute:description' => 'Popis kategórie auditu',
'Class:AuditCategory/Attribute:description+' => 'Long description for this audit category~~',
'Class:AuditCategory/Attribute:domains_list' => 'Domains~~',
'Class:AuditCategory/Attribute:domains_list+' => 'Domains which includes this category~~',
'Class:AuditCategory/Attribute:domains_list+' => 'Domains which include this category~~',
'Class:AuditCategory/Attribute:name' => 'Názov kategórie',
'Class:AuditCategory/Attribute:name+' => 'Identify a scope of objects to audit~~',
'Class:AuditCategory/Attribute:ok_error_tolerance' => 'Warning threshold~~',
@@ -164,7 +164,7 @@ It is applied on the scope of objects defined by the audit category~~',
'Class:URP_Profiles/Attribute:user_list' => 'Užívatelia',
'Class:URP_Profiles/Attribute:user_list+' => 'persons having this role~~',
'Class:URP_StimulusGrant' => 'Povolenia stimulu',
'Class:URP_StimulusGrant+' => 'permissions on stimilus in the life cycle of the object~~',
'Class:URP_StimulusGrant+' => 'permissions on stimulus in the life cycle of the object~~',
'Class:URP_StimulusGrant/Attribute:class' => 'Trieda',
'Class:URP_StimulusGrant/Attribute:class+' => 'Target class~~',
'Class:URP_StimulusGrant/Attribute:permission' => 'Povolenie',

View File

@@ -48,7 +48,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Class:Action' => 'Özel işlem',
'Class:Action+' => 'Kullanıcının tanımladığı işlemler',
'Class:Action/Attribute:asynchronous' => 'Asynchronous~~',
'Class:Action/Attribute:asynchronous+' => 'Whether this action should be executed in background or not~~',
'Class:Action/Attribute:asynchronous+' => 'Whether this action should be executed in the background or not~~',
'Class:Action/Attribute:asynchronous/Value:no' => 'No~~',
'Class:Action/Attribute:asynchronous/Value:use_global_setting' => 'Use global setting~~',
'Class:Action/Attribute:asynchronous/Value:yes' => 'Yes~~',

View File

@@ -20,7 +20,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Class:AuditCategory/Attribute:description' => 'Kategori tanımlaması',
'Class:AuditCategory/Attribute:description+' => 'Kategori tanımlaması',
'Class:AuditCategory/Attribute:domains_list' => 'Domains~~',
'Class:AuditCategory/Attribute:domains_list+' => 'Domains which includes this category~~',
'Class:AuditCategory/Attribute:domains_list+' => 'Domains which include this category~~',
'Class:AuditCategory/Attribute:name' => 'Kategori Adı',
'Class:AuditCategory/Attribute:name+' => 'Kategornin kısa adı',
'Class:AuditCategory/Attribute:ok_error_tolerance' => 'Warning threshold~~',

View File

@@ -30,7 +30,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Edits:Tooltip' => 'Show / hide fields edits on this tab~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Logs:Menu:Hint' => 'Choose which logs to display on this tab~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Logs:Title' => 'Logs~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Logs:Tooltip' => 'Show / hide logs entries on this tab~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Logs:Tooltip' => 'Show / hide log entries on this tab~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Transitions:Title' => 'State changes~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Transitions:Tooltip' => 'Show / hide state changes on this tab~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Info:AuthorsCount:Tooltip' => 'Number of persons interacting in the visible entries~~',

View File

@@ -29,7 +29,7 @@ Dict::Add('EN US', 'English', 'English', array(
'UI:Layout:ActivityPanel:Tab:Activity:Title' => 'Activity',
'UI:Layout:ActivityPanel:Tab:Log:DraftIndicator:Tooltip' => 'Draft entry',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Logs:Title' => 'Logs',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Logs:Tooltip' => 'Show / hide logs entries on this tab',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Logs:Tooltip' => 'Show / hide log entries on this tab',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Logs:Menu:Hint' => 'Choose which logs to display on this tab',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Transitions:Title' => 'State changes',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Transitions:Tooltip' => 'Show / hide state changes on this tab',

View File

@@ -30,7 +30,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Edits:Tooltip' => 'Show / hide fields edits on this tab~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Logs:Menu:Hint' => 'Choose which logs to display on this tab~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Logs:Title' => 'Logs~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Logs:Tooltip' => 'Show / hide logs entries on this tab~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Logs:Tooltip' => 'Show / hide log entries on this tab~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Transitions:Title' => 'State changes~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Transitions:Tooltip' => 'Show / hide state changes on this tab~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Info:AuthorsCount:Tooltip' => 'Number of persons interacting in the visible entries~~',

View File

@@ -30,7 +30,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Edits:Tooltip' => 'Show / hide fields edits on this tab~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Logs:Menu:Hint' => 'Choose which logs to display on this tab~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Logs:Title' => 'Logs~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Logs:Tooltip' => 'Show / hide logs entries on this tab~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Logs:Tooltip' => 'Show / hide log entries on this tab~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Transitions:Title' => 'State changes~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Transitions:Tooltip' => 'Show / hide state changes on this tab~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Info:AuthorsCount:Tooltip' => 'Number of persons interacting in the visible entries~~',

View File

@@ -30,7 +30,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Edits:Tooltip' => 'Show / hide fields edits on this tab~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Logs:Menu:Hint' => 'Choose which logs to display on this tab~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Logs:Title' => 'Logs~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Logs:Tooltip' => 'Show / hide logs entries on this tab~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Logs:Tooltip' => 'Show / hide log entries on this tab~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Transitions:Title' => 'State changes~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Filter:Transitions:Tooltip' => 'Show / hide state changes on this tab~~',
'UI:Layout:ActivityPanel:Tab:Toolbar:Info:AuthorsCount:Tooltip' => 'Number of persons interacting in the visible entries~~',

View File

@@ -10,5 +10,5 @@
*
*/
Dict::Add('DA DA', 'Danish', 'Dansk', [
'UIBlock:Error:CannotGetBlocks' => 'Could not retrieve blocks from content area "%1$s" as it does seem to exists for page content "%2$s"~~',
'UIBlock:Error:CannotGetBlocks' => 'Could not retrieve blocks from content area "%1$s" as it does seem to exist for page content "%2$s"~~',
]);

View File

@@ -5,5 +5,5 @@
*/
Dict::Add('EN US', 'English', 'English', [
'UIBlock:Error:CannotGetBlocks' => 'Could not retrieve blocks from content area "%1$s" as it does seem to exists for page content "%2$s"',
'UIBlock:Error:CannotGetBlocks' => 'Could not retrieve blocks from content area "%1$s" as it does seem to exist for page content "%2$s"',
]);

View File

@@ -10,5 +10,5 @@
*
*/
Dict::Add('JA JP', 'Japanese', '日本語', [
'UIBlock:Error:CannotGetBlocks' => 'Could not retrieve blocks from content area "%1$s" as it does seem to exists for page content "%2$s"~~',
'UIBlock:Error:CannotGetBlocks' => 'Could not retrieve blocks from content area "%1$s" as it does seem to exist for page content "%2$s"~~',
]);

View File

@@ -10,5 +10,5 @@
*
*/
Dict::Add('RU RU', 'Russian', 'Русский', [
'UIBlock:Error:CannotGetBlocks' => 'Could not retrieve blocks from content area "%1$s" as it does seem to exists for page content "%2$s"~~',
'UIBlock:Error:CannotGetBlocks' => 'Could not retrieve blocks from content area "%1$s" as it does seem to exist for page content "%2$s"~~',
]);

View File

@@ -10,5 +10,5 @@
*
*/
Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'UIBlock:Error:CannotGetBlocks' => 'Could not retrieve blocks from content area "%1$s" as it does seem to exists for page content "%2$s"~~',
'UIBlock:Error:CannotGetBlocks' => 'Could not retrieve blocks from content area "%1$s" as it does seem to exist for page content "%2$s"~~',
]);

View File

@@ -10,5 +10,5 @@
*
*/
Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'UIBlock:Error:CannotGetBlocks' => 'Could not retrieve blocks from content area "%1$s" as it does seem to exists for page content "%2$s"~~',
'UIBlock:Error:CannotGetBlocks' => 'Could not retrieve blocks from content area "%1$s" as it does seem to exist for page content "%2$s"~~',
]);

View File

@@ -47,7 +47,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:Action' => '自定义操作',
'Class:Action+' => '用户定义的操作',
'Class:Action/Attribute:asynchronous' => 'Asynchronous~~',
'Class:Action/Attribute:asynchronous+' => 'Whether this action should be executed in background or not~~',
'Class:Action/Attribute:asynchronous+' => 'Whether this action should be executed in the background or not~~',
'Class:Action/Attribute:asynchronous/Value:no' => 'No~~',
'Class:Action/Attribute:asynchronous/Value:use_global_setting' => 'Use global setting~~',
'Class:Action/Attribute:asynchronous/Value:yes' => 'Yes~~',

View File

@@ -445,19 +445,6 @@ class EMailLaminas extends Email
$oBody->addPart($oAdditionalPart);
}
if ($oBody->isMultiPart()) {
$oContentTypeHeader = $this->m_oMessage->getHeaders();
foreach ($oContentTypeHeader as $oHeader) {
if (!$oHeader instanceof ContentType) {
continue;
}
$oHeader->setType(Mime::MULTIPART_MIXED);
$oHeader->addParameter('boundary', $oBody->getMime()->boundary());
break;
}
}
$this->m_oMessage->setBody($oBody);
}
@@ -478,22 +465,13 @@ class EMailLaminas extends Email
$oNewPart = new Part($sText);
$oNewPart->encoding = Mime::ENCODING_8BIT;
$oNewPart->type = $sMimeType;
$this->m_oMessage->getBody()->addPart($oNewPart);
// setBody called only to refresh Content-Type to multipart/mixed
$this->m_oMessage->setBody($this->m_oMessage->getBody()->addPart($oNewPart));
}
public function AddAttachment($data, $sFileName, $sMimeType)
{
$oBody = $this->m_oMessage->getBody();
if (!$oBody->isMultiPart()) {
$multipart_content = new Part($oBody->generateMessage());
$multipart_content->setType($oBody->getParts()[0]->getType());
$multipart_content->setBoundary($oBody->getMime()->boundary());
$oBody = new \Laminas\Mime\Message();
$oBody->addPart($multipart_content);
}
if (!array_key_exists('attachments', $this->m_aData)) {
$this->m_aData['attachments'] = array();
}
@@ -504,23 +482,8 @@ class EMailLaminas extends Email
$oNewAttachment->disposition = Mime::DISPOSITION_ATTACHMENT;
$oNewAttachment->encoding = Mime::ENCODING_BASE64;
$oBody->addPart($oNewAttachment);
if ($oBody->isMultiPart()) {
$oContentTypeHeader = $this->m_oMessage->getHeaders();
foreach ($oContentTypeHeader as $oHeader) {
if (!$oHeader instanceof ContentType) {
continue;
}
$oHeader->setType(Mime::MULTIPART_MIXED);
$oHeader->addParameter('boundary', $oBody->getMime()->boundary());
break;
}
}
$this->m_oMessage->setBody($oBody);
// setBody called only to refresh Content-Type to multipart/mixed
$this->m_oMessage->setBody($this->m_oMessage->getBody()->addPart($oNewAttachment));
}
public function SetSubject($sSubject)

View File

@@ -1087,10 +1087,10 @@ abstract class ItopDataTestCase extends ItopTestCase
* @param string $sClass
* @param array $aValues
*
* @return DBObject
* @return int
* @throws Exception
*/
protected function GivenObjectInDB($sClass, $aValues)
protected function GivenObjectInDB($sClass, $aValues):int
{
// Check and complete the values
foreach ($aValues as $sAttCode => $oValue) {
@@ -1406,4 +1406,37 @@ abstract class ItopDataTestCase extends ItopTestCase
self::markTestSkipped("Test skipped: module '$sModule' is not present");
}
}
protected function GivenUserLoggedInWithContact(int $iContactOrgId)
{
$iContactId = $this->GivenObjectInDB('Person', [
'first_name' => 'TestContact',
'name' => 'TestContact',
'org_id' => $iContactOrgId]);
$sLogin = 'demo_test_'.uniqid(__CLASS__, true);
$iUser = $this->GivenObjectInDB('UserLocal', [
'login' => $sLogin,
'password' => 'tagada-Secret,007',
'language' => 'EN US',
'contactid' => $iContactId,
'profile_list' => [
'profileid:'.self::$aURP_Profiles['Configuration Manager']
]
]);
\UserRights::Login($sLogin);
}
protected function GivenUserLoggedInWithoutContact()
{
$sLogin = 'demo_test_'.uniqid(__CLASS__, true);
$iUser = $this->GivenObjectInDB('UserLocal', [
'login' => $sLogin,
'password' => 'tagada-Secret,007',
'language' => 'EN US',
'profile_list' => [
'profileid:'.self::$aURP_Profiles['Configuration Manager']
]
]);
\UserRights::Login($sLogin);
}
}

View File

@@ -45,4 +45,43 @@ class EMailTest extends ItopTestCase {
$oConfig->Set('email_transport', $sCurrentEmailTransport);
$oConfig->Set('email_asynchronous', $sCurrentEmailAsync);
}
/**
* @return void
* @throws \ConfigException
* @throws \CoreException
* @covers Email::SetBody()
* @covers Email::Send()
*/
public function testCheckPartsHeadersOnSendEmailWithAttachment(): void
{
$oConfig = utils::GetConfig();
$sCurrentEmailTransport = $oConfig->Get('email_transport');
$sCurrentEmailAsync = $oConfig->Get('email_asynchronous');
// Set our email transport to file, so we can read it after
$oConfig->Set('email_transport', 'LogFile');
$oConfig->Set('email_asynchronous', false);
$oEmail = new Email();
$oEmail->SetRecipientTO('email@email.com');
$oEmail->SetRecipientFrom('email2@email2.com');
$oEmail->SetSubject('dummy subject');
$oEmail->SetBody('dummy body', 'text/plain');
$oEmail->AddAttachment('Dummy attachment', 'attachment.txt', 'text/plain');
// Send the mail and check if there's any issue
$aIssues = [];
$oEmail->Send($aIssues);
$this->assertEmpty($aIssues);
// Check if our charset is correctly set
// We know this file may be used by other future test, but as we can't configure output filename, it is what it is
$sEmailContent = file_get_contents(APPROOT.'log/mail.log');
$this->assertStringContainsString('Content-Type: text/plain; charset=UTF-8', $sEmailContent);
// Set our previous email transport value back, so it doesn't affect other tests
$oConfig->Set('email_transport', $sCurrentEmailTransport);
$oConfig->Set('email_asynchronous', $sCurrentEmailAsync);
}
}

View File

@@ -59,4 +59,33 @@ class InlineImageTest extends ItopDataTestCase
],
];
}
public function testSetDefaultOrgIdWhenLoggedInWithContact()
{
$iContactOrgId = $this->GivenObjectInDB('Organization', ['name' => 'TestOrg']);
$this->GivenUserLoggedInWithContact($iContactOrgId);
$oInlineImage = \MetaModel::NewObject('InlineImage',['item_class' => 'UserRequest']);
$oInlineImage->SetDefaultOrgId();
$this->assertEquals($iContactOrgId, $oInlineImage->Get('item_org_id'),'The org_id should be the one of the contact');
$oInlineImage = \MetaModel::NewObject('InlineImage',['item_class' => 'TriggerOnObjectCreate']);
$oInlineImage->SetDefaultOrgId();
$this->assertEquals(0, $oInlineImage->Get('item_org_id'),'The org_id should be left undefined');
}
public function testSetDefaultOrgIdWhenLoggedInWithoutContact()
{
$this->GivenUserLoggedInWithoutContact();
$oInlineImage = \MetaModel::NewObject('InlineImage',['item_class' => 'UserRequest']);
$oInlineImage->SetDefaultOrgId();
$this->assertEquals(0, $oInlineImage->Get('item_org_id'),'The org_id should be left undefined');
$oInlineImage = \MetaModel::NewObject('InlineImage',['item_class' => 'TriggerOnObjectCreate']);
$oInlineImage->SetDefaultOrgId();
$this->assertEquals(0, $oInlineImage->Get('item_org_id'),'The org_id should be left undefined');
}
}

View File

@@ -488,4 +488,18 @@ class UserRightsTest extends ItopDataTestCase
'with Admins hidden' => [true, 0],
];
}
public function testGetOwnerOrganizationAttCode()
{
$this->assertEquals('id', UserRights::GetOwnerOrganizationAttCode('Organization'));
$this->assertEquals('org_id', UserRights::GetOwnerOrganizationAttCode('Server'));
$this->assertEquals('org_id', UserRights::GetOwnerOrganizationAttCode('UserRequest'));
$this->assertEquals('item_org_id', UserRights::GetOwnerOrganizationAttCode('InlineImage'));
$this->assertEquals('item_org_id', UserRights::GetOwnerOrganizationAttCode('Attachment'));
$this->assertNull(UserRights::GetOwnerOrganizationAttCode('TriggerOnObjectCreation'));
$this->assertNull(UserRights::GetOwnerOrganizationAttCode('lnkPersonToTeam'));
}
}

View File

@@ -69,4 +69,46 @@ class TestAttachment extends ItopDataTestCase
$oDocument = $oAttachment->Get('contents');
$this->sRemoveAttachmentName = $oDocument->GetFileName();
}
public function testSetItemOnObjectWithDefinedOrganization()
{
$iOrgId = $this->GivenObjectInDB('Organization', ['name' => 'TestOrg']);
$oUserRequest = $this->GivenObject('UserRequest', ['title' => 'TestUserRequest', 'org_id'=>$iOrgId]);
$oAttachment = new \Attachment();
$oAttachment->SetItem($oUserRequest);
$this->assertEquals($iOrgId, $oAttachment->Get('item_org_id'),'The org_id should be the one of the contact');
}
public function testSetItemOnObjectWithoutDefinedOrganization()
{
$oUserRequest = $this->GivenObject('TriggerOnObjectCreate', ['target_class' => 'UserRequest','description'=>'TestUserRequest']);
$oAttachment = new \Attachment();
$oAttachment->SetItem($oUserRequest);
$this->assertEquals(0, $oAttachment->Get('item_org_id'),'The org_id should be the one of the contact');
}
public function testSetDefaultOrgIdWhenLoggedInWithContact()
{
$iContactOrgId = $this->GivenObjectInDB('Organization', ['name' => 'TestOrg']);
$this->GivenUserLoggedInWithContact($iContactOrgId);
$oAttachment = new \Attachment();
$oAttachment->SetDefaultOrgId();
$this->assertEquals($iContactOrgId, $oAttachment->Get('item_org_id'),'The org_id should be the one of the contact');
}
public function testSetDefaultOrgIdWhenLoggedInWithoutContact()
{
$this->GivenUserLoggedInWithoutContact();
$oAttachment = new \Attachment();
$oAttachment->SetDefaultOrgId();
$this->assertEquals(0, $oAttachment->Get('item_org_id'),'The org_id should be left undefined');
}
}