Compare commits

...

13 Commits

Author SHA1 Message Date
odain
2dd30fc55a cleanup 2026-07-01 18:02:01 +02:00
odain
7a70e2460a N°9675 - geptile PR fixes + enhance regexp for cli php version 2026-07-01 17:51:13 +02:00
odain
e27dcbfb2d N°9675 - raise PHP CLI version issue as well 2026-07-01 17:04:56 +02:00
odain
825c9f3a0e N°9675 - enhance setup data consistency error feedback 2026-07-01 15:53:41 +02:00
odain
3024b1d492 N°9675 - raise first exception encountered when starting metamodel 2026-07-01 15:10:46 +02:00
Eric Espié
3a7439e970 N°9639 - Uninstallation Analysis result doesn't list all the object (#950)
* N°9639 - Uninstallation Analysis better count method

* N°9639 - Fix tests

* N°9639 - Refactor deletion plan handling with new entity classes for improved structure and clarity

* N°9639 - Refactor deletion plan methods to use class names instead of table names and add TotalCount method

* N°9639 - Add messages to tests

* N°9639 - Refactor data feature removal logic and update database queries for consistency

* N°9639 - Refactor SQL queries to use backticks for table and field names

* N°9639 - Enhance deletion logic and add circular reference handling in cleanup process

* N°9639 - Add filtering methods to DeletionPlan classes for improved data cleanup

* N°9639 - Add filtering methods to DeletionPlan classes for improved data cleanup

* N°9639 - Refactor DeletionPlanItem to remove unused queries and simplify constructor

* N°9639 - Refactor variable name for clarity in hierarchical key update process

* Update tests/php-unit-tests/unitary-tests/datamodels/2.x/combodo-data-feature-removal/simulate-audit-from-setup.php

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* N°9639 - Clarify comment on deletion plan to indicate prevention of infinite loops

* N°9639 - Remove unused deletion plan from DataFeatureRemovalController

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-06-30 09:37:30 +02:00
jf-cbd
7fca6424ab N°9723 - IsActionAllowed should work with non instantiated users objects (#947)
* Replace references to user objects keys since objects can be non-instantiated (so no key available) and replace them by equivalent code

* Rename test + use self variable for profile

---------

Co-authored-by: jf-cbd <jf-cbd@users.noreply.github.com>
2026-06-25 17:45:43 +02:00
jf-cbd
f09a73c45a N°7060 - create ReadOnly profiles (#935) 2026-06-25 17:38:48 +02:00
Vincent Dumas
5a174dd8fa N°9658 - Fix Profiles retrieval in User sample data loading (#948) 2026-06-25 12:08:21 +02:00
v-dumas
01f32086ec Fix tests for CI with 3.0 sample data and for commit on dev 2026-06-24 11:57:58 +02:00
v-dumas
5c59fdebaf Fix tests for CI with 3.0 sample data and for commit on dev 2026-06-24 11:01:48 +02:00
Vincent Dumas
363d0767d5 N°8142 user request and incident menu label (#903)
* N°8142 - User Request, Incident and Change menu standardization
2026-06-24 09:11:17 +02:00
odain-cbd
5202adb902 N°9717 - Bring unattended error feedbacks back (#943)
* Enhance unattended CLI to log fatal error just like setup wizardinstead of silent failure

* 💚 change unattended output in case of painless FATAL

* 💚 capture FATALs only

* Update setup/unattended-install/unattended-install.php

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-06-23 17:16:04 +02:00
148 changed files with 2303 additions and 682 deletions

View File

@@ -582,16 +582,26 @@ class UserRightsProfile extends UserRightsAddOnAPI
*/
public function ListProfiles($oUser)
{
$aRet = [];
$oSearch = new DBObjectSearch('URP_UserProfile');
$oSearch->AllowAllData();
$oSearch->NoContextParameters();
$oSearch->Addcondition('userid', $oUser->GetKey(), '=');
$oProfiles = new DBObjectSet($oSearch);
while ($oUserProfile = $oProfiles->Fetch()) {
$aRet[$oUserProfile->Get('profileid')] = $oUserProfile->Get('profileid_friendlyname');
if (count($oUser->ListChanges()) === 0) { // backward compatibility
$aRet = [];
$oSearch = new DBObjectSearch('URP_UserProfile');
$oSearch->AllowAllData();
$oSearch->NoContextParameters();
$oSearch->Addcondition('userid', $oUser->GetKey(), '=');
$oProfiles = new DBObjectSet($oSearch);
while ($oUserProfile = $oProfiles->Fetch()) {
$aRet[$oUserProfile->Get('profileid')] = $oUserProfile->Get('profileid_friendlyname');
}
return $aRet;
} else {
$aRet = [];
$oProfilesSet = $oUser->Get('profile_list');
foreach ($oProfilesSet as $oUserProfile) {
$aRet[$oUserProfile->Get('profileid')] = $oUserProfile->Get('profileid_friendlyname');
}
return $aRet;
}
return $aRet;
}
public function GetSelectFilter($oUser, $sClass, $aSettings = [])
@@ -705,26 +715,23 @@ class UserRightsProfile extends UserRightsAddOnAPI
protected function GetUserActionGrant($oUser, $sClass, $iActionCode)
{
$this->LoadCache();
// load and cache permissions for the current user on the given class
//
$iUser = $oUser->GetKey();
if (isset($this->m_aObjectActionGrants[$iUser][$sClass][$iActionCode])) {
$aTest = $this->m_aObjectActionGrants[$iUser][$sClass][$iActionCode];
if (is_array($aTest)) {
return $aTest;
if (count($oUser->ListChanges()) === 0) {
// load and cache permissions for the current user on the given class
if (isset($this->m_aObjectActionGrants[$oUser->GetKey()][$sClass][$iActionCode])) {
$aTest = $this->m_aObjectActionGrants[$oUser->GetKey()][$sClass][$iActionCode];
if (is_array($aTest)) {
return $aTest;
}
}
}
$sAction = self::$m_aActionCodes[$iActionCode];
$bStatus = null;
// Cache user's profiles
if (false === array_key_exists($iUser, $this->aUsersProfilesList)) {
$this->aUsersProfilesList[$iUser] = UserRights::ListProfiles($oUser);
}
$aProfileList = $this->GetProfileList($oUser);
// Call the API of UserRights because it caches the list for us
foreach ($this->aUsersProfilesList[$iUser] as $iProfile => $oProfile) {
foreach ($aProfileList as $iProfile => $oProfile) {
$bGrant = $this->GetProfileActionGrant($iProfile, $sClass, $sAction);
if (!is_null($bGrant)) {
if ($bGrant) {
@@ -742,7 +749,9 @@ class UserRightsProfile extends UserRightsAddOnAPI
$aRes = [
'permission' => $iPermission,
];
$this->m_aObjectActionGrants[$iUser][$sClass][$iActionCode] = $aRes;
if (count($oUser->ListChanges()) === 0) {
$this->m_aObjectActionGrants[$oUser->GetKey()][$sClass][$iActionCode] = $aRes;
}
return $aRes;
}
@@ -824,18 +833,14 @@ class UserRightsProfile extends UserRightsAddOnAPI
{
$this->LoadCache();
// Note: this code is VERY close to the code of IsActionAllowed()
$iUser = $oUser->GetKey();
// Cache user's profiles
if (false === array_key_exists($iUser, $this->aUsersProfilesList)) {
$this->aUsersProfilesList[$iUser] = UserRights::ListProfiles($oUser);
}
$aProfileList = $this->GetProfileList($oUser);
// Note: The object set is ignored because it was interesting to optimize for huge data sets
// and acceptable to consider only the root class of the object set
$bStatus = null;
// Call the API of UserRights because it caches the list for us
foreach ($this->aUsersProfilesList[$iUser] as $iProfile => $oProfile) {
foreach ($aProfileList as $iProfile => $oProfile) {
$bGrant = $this->GetClassStimulusGrant($iProfile, $sClass, $sStimulusCode);
if (!is_null($bGrant)) {
if ($bGrant) {
@@ -893,6 +898,25 @@ class UserRightsProfile extends UserRightsAddOnAPI
}
return $bHasSharing;
}
/**
* @param \User $oUser
*
* @return array
* @throws \Exception
*/
public function GetProfileList(User $oUser): array
{
if (count($oUser->ListChanges()) === 0) { // if user is already in db and not changed
$iUser = $oUser->GetKey();
if (false === array_key_exists($iUser, $this->aUsersProfilesList)) {
$aProfiles = UserRights::ListProfiles($oUser);
$this->aUsersProfilesList[$iUser] = $aProfiles;
}
return $this->aUsersProfilesList[$iUser];
}
return UserRights::ListProfiles($oUser);
}
}
UserRights::SelectModule('UserRightsProfile');

View File

@@ -916,7 +916,9 @@ class CMDBSource
$aColumn = [];
$aData = self::QueryToArray($sSql);
foreach ($aData as $aRow) {
@$aColumn[] = $aRow[$col];
if ($aRow[$col] !== null) {
$aColumn[] = $aRow[$col];
}
}
return $aColumn;
}

View File

@@ -5761,36 +5761,37 @@ abstract class MetaModel
self::$m_sEnvironment = $sEnvironment;
try {
if (!defined('MODULESROOT')) {
define('MODULESROOT', APPROOT.'env-'.self::$m_sEnvironment.'/');
if (!defined('MODULESROOT')) {
define('MODULESROOT', APPROOT.'env-'.self::$m_sEnvironment.'/');
self::$m_bTraceSourceFiles = $bTraceSourceFiles;
self::$m_bTraceSourceFiles = $bTraceSourceFiles;
// $config can be either a filename, or a Configuration object (volatile!)
if ($config instanceof Config) {
self::LoadConfig($config, $bAllowCache);
} else {
self::LoadConfig(new Config($config), $bAllowCache);
}
if ($bModelOnly) {
return;
}
// $config can be either a filename, or a Configuration object (volatile!)
if ($config instanceof Config) {
self::LoadConfig($config, $bAllowCache);
} else {
self::LoadConfig(new Config($config), $bAllowCache);
}
CMDBSource::SelectDB(self::$m_sDBName);
foreach (MetaModel::EnumPlugins('ModuleHandlerApiInterface') as $oPHPClass) {
$oPHPClass::OnMetaModelStarted();
if ($bModelOnly) {
// Event service must be initialized after the MetaModel startup, otherwise it cannot discover classes implementing the iEventServiceSetup interface
EventService::InitService();
EventService::FireEvent(new EventData(ApplicationEvents::APPLICATION_EVENT_METAMODEL_STARTED));
return;
}
ExpressionCache::Warmup();
} finally {
// Event service must be initialized after the MetaModel startup, otherwise it cannot discover classes implementing the iEventServiceSetup interface
EventService::InitService();
EventService::FireEvent(new EventData(ApplicationEvents::APPLICATION_EVENT_METAMODEL_STARTED));
}
CMDBSource::SelectDB(self::$m_sDBName);
foreach (MetaModel::EnumPlugins('ModuleHandlerApiInterface') as $oPHPClass) {
$oPHPClass::OnMetaModelStarted();
}
ExpressionCache::Warmup();
// Event service must be initialized after the MetaModel startup, otherwise it cannot discover classes implementing the iEventServiceSetup interface
EventService::InitService();
EventService::FireEvent(new EventData(ApplicationEvents::APPLICATION_EVENT_METAMODEL_STARTED));
}
/**

View File

@@ -1530,6 +1530,37 @@ class UserRights
}
}
/**
* @param User $oUser
* @param array $aExcludedProfilesId Administrator by default, but can also be other proofiles depending on needs (e.g. power portal user or REST profile)
* @return bool
* @throws ArchivedObjectException
* @throws CoreException
* @throws CoreUnexpectedValue
* @throws MySQLException
*/
public static function IsUserReadOnly(User $oUser, array $aExcludedProfilesId = [1]): bool
{
$oUserProfiles = $oUser->Get('profile_list');
$oUserRights = UserRights::GetModuleInstance();
while ($oUserProfile = $oUserProfiles->Fetch()) {
$iProfileId = $oUserProfile->Get('profileid');
if (in_array($iProfileId, $aExcludedProfilesId)) {
return false;
}
foreach (MetaModel::GetClasses('bizmodel,grant_by_profile') as $sClass) {
foreach (['w', 'bw', 'd', 'bd'] as $sWriteActionCode) {
$bIsGranted = $oUserRights->GetProfileActionGrant($iProfileId, $sClass, $sWriteActionCode);
if ($bIsGranted === true) {
return false;
}
}
}
}
return true;
}
/**
* @param string $sClass
* @param int $iActionCode see UR_ACTION_* constants

View File

@@ -18,6 +18,7 @@ use Combodo\iTop\DataFeatureRemoval\Helper\DataFeatureRemovalHelper;
use Combodo\iTop\DataFeatureRemoval\Helper\DataFeatureRemovalLog;
use Combodo\iTop\DataFeatureRemoval\Service\DataCleanupService;
use Combodo\iTop\DataFeatureRemoval\Service\DataFeatureRemoverExtensionService;
use Combodo\iTop\DataFeatureRemoval\Service\StaticDeletionPlan;
use Combodo\iTop\Setup\FeatureRemoval\DryRemovalRuntimeEnvironment;
use Combodo\iTop\Setup\FeatureRemoval\SetupAudit;
use ContextTag;
@@ -222,6 +223,7 @@ class DataFeatureRemovalController extends Controller
$bIsDirEmpty = count(scandir($sBuildDir)) === 2;
if ($bIsDirEmpty || $bForceCompilation) {
Session::Unset('bForceCompilation');
DataFeatureRemovalLog::Debug(
__METHOD__,
null,
@@ -272,7 +274,7 @@ class DataFeatureRemovalController extends Controller
private function GetDeletionPlanSummaryTable(array $aRemovedClasses): array
{
$sName = 'DeletionPlanSummary';
$oDataCleanupService = new DataCleanupService();
$oDataCleanupService = new StaticDeletionPlan();
$aDeletionPlanSummaryEntities = $oDataCleanupService->GetCleanupSummary($aRemovedClasses);
$aColumns = ['Class', 'Delete Count' , 'Update Count', 'Issue Count'];
$aRows = [];

View File

@@ -0,0 +1,37 @@
<?php
/*
* @copyright Copyright (C) 2010-2026 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
namespace Combodo\iTop\DataFeatureRemoval\Entity;
class DeletionPlanEntity
{
public readonly DeletionPlanItem $oDelete;
public readonly DeletionPlanItem $oUpdate;
public readonly DeletionPlanItem $oIssue;
/**
* @param \Combodo\iTop\DataFeatureRemoval\Entity\DeletionPlanItem $oDelete
* @param \Combodo\iTop\DataFeatureRemoval\Entity\DeletionPlanItem $oUpdate
* @param \Combodo\iTop\DataFeatureRemoval\Entity\DeletionPlanItem $oIssue
*/
public function __construct()
{
$this->oDelete = $oDelete ?? new DeletionPlanItem();
$this->oUpdate = $oUpdate ?? new DeletionPlanItem();
$this->oIssue = $oIssue ?? new DeletionPlanItem();
}
public function TotalCount(): int
{
return $this->oDelete->Count() + $this->oUpdate->Count() + $this->oIssue->Count();
}
public function FilterUpdatesByDeletes()
{
$this->oUpdate->FilterBy($this->oDelete);
}
}

View File

@@ -0,0 +1,36 @@
<?php
/*
* @copyright Copyright (C) 2010-2026 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
namespace Combodo\iTop\DataFeatureRemoval\Entity;
class DeletionPlanItem
{
public array $aIds = [];
/**
* @param array $aIds
*/
public function __construct(array $aIds = [])
{
$this->aIds = $aIds;
}
public function Merge(DeletionPlanItem $oItem): void
{
$this->aIds = array_unique(array_merge($this->aIds, $oItem->aIds));
}
public function Count(): int
{
return count($this->aIds);
}
public function FilterBy(DeletionPlanItem $oItem): void
{
$this->aIds = array_diff($this->aIds, $oItem->aIds);
}
}

View File

@@ -0,0 +1,219 @@
<?php
/*
* @copyright Copyright (C) 2010-2026 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
namespace Combodo\iTop\DataFeatureRemoval\Service;
use CMDBSource;
use Combodo\iTop\DataFeatureRemoval\Entity\DataCleanupSummaryEntity;
use Combodo\iTop\DataFeatureRemoval\Entity\DeletionPlanEntity;
use Combodo\iTop\DataFeatureRemoval\Entity\DeletionPlanItem;
use MetaModel;
class StaticDeletionPlan
{
/** @var array<DeletionPlanEntity> */
private array $aDeletionPlan = [];
/**
* Get a summary of the deletion plan computed for the classes.
* The result is used for display
*
* @param array|null $aClasses
*
* @return array<\Combodo\iTop\DataFeatureRemoval\Entity\DataCleanupSummaryEntity>
* @throws \CoreException
*/
public function GetCleanupSummary(?array $aClasses): array
{
$aSummary = [];
$aDeletionPlan = $this->GetStaticDeletionPlan($aClasses ?? []);
foreach ($aDeletionPlan as $sClass => $oDeletionPlanEntity) {
if ($oDeletionPlanEntity->TotalCount() === 0) {
continue;
}
$oDeletionPlanEntity->FilterUpdatesByDeletes();
$oDataCleanupSummary = new DataCleanupSummaryEntity($sClass);
$oDataCleanupSummary->iUpdateCount = $oDeletionPlanEntity->oUpdate->Count();
$oDataCleanupSummary->iDeleteCount = $oDeletionPlanEntity->oDelete->Count();
$oDataCleanupSummary->iIssueCount = $oDeletionPlanEntity->oIssue->Count();
$aSummary[$sClass] = $oDataCleanupSummary;
}
return $aSummary;
}
/**
* @param array $aClasses Classes to clean entirely
*
* @return array ['class' => DeletionPlanEntity];
*
* @throws \CoreException
*/
public function GetStaticDeletionPlan(array $aClasses): array
{
foreach ($aClasses as $sClass) {
$oDeletionPlanItem = $this->GetInitialClassDeletionPlan($sClass);
$oDeletionPlanEntity = new DeletionPlanEntity();
$oDeletionPlanEntity->oDelete->Merge($oDeletionPlanItem);
$this->aDeletionPlan[$sClass] = $oDeletionPlanEntity;
$this->DeletionPlanForReferencingClasses($sClass);
}
return $this->aDeletionPlan;
}
private function DeletionPlanForReferencingClasses(string $sClass): void
{
$sIdsToRemove = implode(', ', $this->aDeletionPlan[$sClass]->oDelete->aIds);
$aReferencingMe = MetaModel::EnumReferencingClasses($sClass);
foreach ($aReferencingMe as $sRemoteClass => $aExtKeys) {
if (!isset($this->aDeletionPlan[$sRemoteClass])) {
$this->aDeletionPlan[$sRemoteClass] = new DeletionPlanEntity();
}
$oDeletionPlanEntity = $this->aDeletionPlan[$sRemoteClass];
/** @var \AttributeExternalKey $oExtKeyAttDef */
foreach ($aExtKeys as $sExtKeyAttCode => $oExtKeyAttDef) {
// skip if this external key is behind an external field
if (!$oExtKeyAttDef->IsExternalKey(EXTKEY_ABSOLUTE)) {
continue;
}
if ($oExtKeyAttDef->IsNullAllowed()) {
// update
$oUpdateItem = $this->UpdateExtKeyNullable($sRemoteClass, $sExtKeyAttCode, $sIdsToRemove);
$oDeletionPlanEntity->oUpdate->Merge($oUpdateItem);
} else {
// delete
$aRemoteIdsToRemove = $this->GetRemoteIdsForExtKey($sRemoteClass, $sExtKeyAttCode, $sIdsToRemove);
$iDeletePropagationOption = $oExtKeyAttDef->GetDeletionPropagationOption();
if ($iDeletePropagationOption == DEL_MANUAL) {
// Issue, do not recurse
$oDeletionPlanItem = new DeletionPlanItem(aIds: $aRemoteIdsToRemove);
$oDeletionPlanEntity->oIssue->Merge($oDeletionPlanItem);
continue;
}
if (($iDeletePropagationOption == DEL_MOVEUP) && ($oExtKeyAttDef->IsHierarchicalKey())) {
// update hierarchical keys due to row cleanup in the same table
$sTargetIdsToRemove = implode(',', $this->aDeletionPlan[$sRemoteClass]->oDelete->aIds);
$oUpdateItem = $this->UpdateHierarchicalExtKey($sRemoteClass, $sExtKeyAttCode, $sTargetIdsToRemove);
$oDeletionPlanEntity->oUpdate->Merge($oUpdateItem);
}
// Delete entries in Remote Class
if (count($aRemoteIdsToRemove) !== 0) {
$oDeletionPlanEntity->oDelete->Merge(new DeletionPlanItem($aRemoteIdsToRemove));
// Infinite loops do not occurs due to the datamodel structure
$this->DeletionPlanForReferencingClasses($sRemoteClass);
}
}
}
}
}
/**
* @param string $sRemoteClass
* @param string $sExtKeyAttCode
* @param string $sIdsToRemoveInTargetClass
*
* @return \Combodo\iTop\DataFeatureRemoval\Entity\DeletionPlanItem
* @throws \CoreException
*/
public function UpdateExtKeyNullable(string $sRemoteClass, string $sExtKeyAttCode, string $sIdsToRemoveInTargetClass): DeletionPlanItem
{
$aIds = $this->GetRemoteIdsForExtKey($sRemoteClass, $sExtKeyAttCode, $sIdsToRemoveInTargetClass);
return new DeletionPlanItem($aIds);
}
/**
* @param string $sRemoteClass
* @param string $sExtKeyAttCode
* @param string $sIdsToRemoveInTargetClass
*
* @return \Combodo\iTop\DataFeatureRemoval\Entity\DeletionPlanItem
* @throws \CoreException
* @throws \MySQLException
*/
public function UpdateHierarchicalExtKey(string $sRemoteClass, string $sExtKeyAttCode, string $sIdsToRemoveInTargetClass): DeletionPlanItem
{
[$sDBTable, $sDBField, $sDBKey] = $this->GetDBInfoForAttcode($sRemoteClass, $sExtKeyAttCode);
$sSQL = <<<SQL
SELECT `$sDBKey`
FROM `$sDBTable` AS `updated`
INNER JOIN `$sDBTable` AS `removed` ON `updated`.`$sDBField` = `removed`.`$sDBKey`
WHERE `removed`.`$sDBKey` IN ($sIdsToRemoveInTargetClass)
SQL;
$aIds = CMDBSource::QueryToCol($sSQL, $sDBKey);
return new DeletionPlanItem($aIds);
}
/**
* @param string $sRemoteClass
* @param string $sExtKeyAttCode
* @param string $sIdsToRemoveInTargetClass
*
* @return array
* @throws \CoreException
* @throws \MySQLException
*/
public function GetRemoteIdsForExtKey(string $sRemoteClass, string $sExtKeyAttCode, string $sIdsToRemoveInTargetClass): array
{
if (\utils::IsNullOrEmptyString($sIdsToRemoveInTargetClass)) {
return [];
}
[$sDBTable, $sDBField, $sDBKey] = $this->GetDBInfoForAttcode($sRemoteClass, $sExtKeyAttCode);
$sSQL = "SELECT `$sDBKey` FROM `$sDBTable` WHERE `$sDBField` IN ($sIdsToRemoveInTargetClass)";
return CMDBSource::QueryToCol($sSQL, $sDBKey);
}
/**
* @param string $sClass
*
* @return \Combodo\iTop\DataFeatureRemoval\Entity\DeletionPlanItem
* @throws \CoreException
* @throws \MySQLException
*/
public function GetInitialClassDeletionPlan(string $sClass): DeletionPlanItem
{
$sTable = MetaModel::DBGetTable($sClass);
$sDBKey = MetaModel::DBGetKey($sClass);
$sSQL = "SELECT `$sDBKey` FROM `$sTable`";
$aIds = CMDBSource::QueryToCol($sSQL, $sDBKey);
return new DeletionPlanItem($aIds);
}
/**
* Get database table for an attcode
*
* @param string $sClass
* @param string $sExtKeyAttCode
*
* @return array
* @throws \CoreException
* @throws \Exception
*/
public function GetDBInfoForAttcode(string $sClass, string $sExtKeyAttCode): array
{
$sOriginClass = MetaModel::GetAttributeOrigin($sClass, $sExtKeyAttCode);
$sDBTable = MetaModel::DBGetTable($sOriginClass);
$oAttDef = MetaModel::GetAttributeDef($sOriginClass, $sExtKeyAttCode);
// External key is on a single DB column
$sDBField = array_keys($oAttDef->GetSQLColumns())[0];
$sDBKey = MetaModel::DBGetKey($sClass);
return [$sDBTable, $sDBField, $sDBKey];
}
}

View File

@@ -8,6 +8,8 @@ $baseDir = dirname($vendorDir);
return array(
'Combodo\\iTop\\DataFeatureRemoval\\Controller\\DataFeatureRemovalController' => $baseDir . '/src/Controller/DataFeatureRemovalController.php',
'Combodo\\iTop\\DataFeatureRemoval\\Entity\\DataCleanupSummaryEntity' => $baseDir . '/src/Entity/DataCleanupSummaryEntity.php',
'Combodo\\iTop\\DataFeatureRemoval\\Entity\\DeletionPlanEntity' => $baseDir . '/src/Entity/DeletionPlanEntity.php',
'Combodo\\iTop\\DataFeatureRemoval\\Entity\\DeletionPlanItem' => $baseDir . '/src/Entity/DeletionPlanItem.php',
'Combodo\\iTop\\DataFeatureRemoval\\Helper\\DataFeatureRemovalConfig' => $baseDir . '/src/Helper/DataFeatureRemovalConfig.php',
'Combodo\\iTop\\DataFeatureRemoval\\Helper\\DataFeatureRemovalException' => $baseDir . '/src/Helper/DataFeatureRemovalException.php',
'Combodo\\iTop\\DataFeatureRemoval\\Helper\\DataFeatureRemovalHelper' => $baseDir . '/src/Helper/DataFeatureRemovalHelper.php',
@@ -16,6 +18,7 @@ return array(
'Combodo\\iTop\\DataFeatureRemoval\\Service\\DataFeatureRemoverExtensionService' => $baseDir . '/src/Service/DataFeatureRemoverExtensionService.php',
'Combodo\\iTop\\DataFeatureRemoval\\Service\\ObjectService' => $baseDir . '/src/Service/ObjectService.php',
'Combodo\\iTop\\DataFeatureRemoval\\Service\\ObjectServiceSummary' => $baseDir . '/src/Service/ObjectServiceSummary.php',
'Combodo\\iTop\\DataFeatureRemoval\\Service\\StaticDeletionPlan' => $baseDir . '/src/Service/StaticDeletionPlan.php',
'Combodo\\iTop\\DataFeatureRemoval\\Service\\iObjectService' => $baseDir . '/src/Service/iObjectService.php',
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
);

View File

@@ -23,6 +23,8 @@ class ComposerStaticInit4f96a7199e2c0d90e547333758b26464
public static $classMap = array (
'Combodo\\iTop\\DataFeatureRemoval\\Controller\\DataFeatureRemovalController' => __DIR__ . '/../..' . '/src/Controller/DataFeatureRemovalController.php',
'Combodo\\iTop\\DataFeatureRemoval\\Entity\\DataCleanupSummaryEntity' => __DIR__ . '/../..' . '/src/Entity/DataCleanupSummaryEntity.php',
'Combodo\\iTop\\DataFeatureRemoval\\Entity\\DeletionPlanEntity' => __DIR__ . '/../..' . '/src/Entity/DeletionPlanEntity.php',
'Combodo\\iTop\\DataFeatureRemoval\\Entity\\DeletionPlanItem' => __DIR__ . '/../..' . '/src/Entity/DeletionPlanItem.php',
'Combodo\\iTop\\DataFeatureRemoval\\Helper\\DataFeatureRemovalConfig' => __DIR__ . '/../..' . '/src/Helper/DataFeatureRemovalConfig.php',
'Combodo\\iTop\\DataFeatureRemoval\\Helper\\DataFeatureRemovalException' => __DIR__ . '/../..' . '/src/Helper/DataFeatureRemovalException.php',
'Combodo\\iTop\\DataFeatureRemoval\\Helper\\DataFeatureRemovalHelper' => __DIR__ . '/../..' . '/src/Helper/DataFeatureRemovalHelper.php',
@@ -31,6 +33,7 @@ class ComposerStaticInit4f96a7199e2c0d90e547333758b26464
'Combodo\\iTop\\DataFeatureRemoval\\Service\\DataFeatureRemoverExtensionService' => __DIR__ . '/../..' . '/src/Service/DataFeatureRemoverExtensionService.php',
'Combodo\\iTop\\DataFeatureRemoval\\Service\\ObjectService' => __DIR__ . '/../..' . '/src/Service/ObjectService.php',
'Combodo\\iTop\\DataFeatureRemoval\\Service\\ObjectServiceSummary' => __DIR__ . '/../..' . '/src/Service/ObjectServiceSummary.php',
'Combodo\\iTop\\DataFeatureRemoval\\Service\\StaticDeletionPlan' => __DIR__ . '/../..' . '/src/Service/StaticDeletionPlan.php',
'Combodo\\iTop\\DataFeatureRemoval\\Service\\iObjectService' => __DIR__ . '/../..' . '/src/Service/iObjectService.php',
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
);

View File

@@ -21,11 +21,11 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [
'Menu:SearchChanges' => 'Hledat změny',
'Menu:SearchChanges+' => 'Hledat změnové tikety',
'Menu:Change:Shortcuts' => 'Odkazy',
'Menu:Change:Shortcuts+' => '',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => 'Změny čekající na přijetí',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => 'Změny čekající na schválení',
'Menu:WaitingApproval+' => '',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => 'Otevřené změny',
'Menu:Changes+' => 'Všechny otevřené změny',
'Menu:MyChanges' => 'Změny přidělené mně',

View File

@@ -20,11 +20,11 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
'Menu:SearchChanges' => 'Søg efter Changes',
'Menu:SearchChanges+' => 'Søg efter Change Tickets',
'Menu:Change:Shortcuts' => 'Genveje',
'Menu:Change:Shortcuts+' => '',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => 'Changes, som afventer accept',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => 'Changes, som afventer godkendelse',
'Menu:WaitingApproval+' => '',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => 'Offene Changes',
'Menu:Changes+' => 'Alle åbne Changes',
'Menu:MyChanges' => 'Mine Changes',

View File

@@ -19,8 +19,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
'Menu:NewChange+' => 'Einen neuen Change erstellen',
'Menu:SearchChanges' => 'Suche nach Changes',
'Menu:SearchChanges+' => 'Unter den bestehenden Changes suchen',
'Menu:Change:Shortcuts' => 'Shortcuts',
'Menu:Change:Shortcuts+' => '',
'Menu:Change:Shortcuts' => 'Changes~~',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => 'Changes, die auf Annahme warten',
'Menu:WaitingAcceptance+' => 'Changes, die auf Annahme warten',
'Menu:WaitingApproval' => 'Changes, die auf Genehmigung warten',

View File

@@ -30,16 +30,16 @@ Dict::Add('EN US', 'English', 'English', [
'Menu:NewChange+' => 'Create a new change ticket',
'Menu:SearchChanges' => 'Search for changes',
'Menu:SearchChanges+' => 'Search for change tickets',
'Menu:Change:Shortcuts' => 'Shortcuts',
'Menu:Change:Shortcuts+' => '',
'Menu:Change:Shortcuts' => 'Changes',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes',
'Menu:WaitingAcceptance' => 'Changes awaiting acceptance',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => 'Changes awaiting approval',
'Menu:WaitingApproval+' => '',
'Menu:WaitingApproval+' => 'Changes in planned status',
'Menu:Changes' => 'Open changes',
'Menu:Changes+' => 'All open changes',
'Menu:Changes+' => 'All changes which are not in closed status',
'Menu:MyChanges' => 'Changes assigned to me',
'Menu:MyChanges+' => 'Changes assigned to me (as Agent)',
'Menu:MyChanges+' => 'Non-closed changes assigned to me (as an Agent)',
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Changes by category for the last 7 days',
'UI-ChangeManagementOverview-Last-7-days' => 'Number of changes for the last 7 days',
'UI-ChangeManagementOverview-ChangeByDomain-last-7-days' => 'Changes by domain for the last 7 days',

View File

@@ -30,16 +30,16 @@ Dict::Add('EN GB', 'British English', 'British English', [
'Menu:NewChange+' => 'Create a new change ticket',
'Menu:SearchChanges' => 'Search for changes',
'Menu:SearchChanges+' => 'Search for change tickets',
'Menu:Change:Shortcuts' => 'Shortcuts',
'Menu:Change:Shortcuts+' => '',
'Menu:Change:Shortcuts' => 'Changes~~',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => 'Changes awaiting acceptance',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => 'Changes awaiting approval',
'Menu:WaitingApproval+' => '',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => 'Open changes',
'Menu:Changes+' => 'All open changes',
'Menu:Changes+' => 'All changes which are not in closed status',
'Menu:MyChanges' => 'Changes assigned to me',
'Menu:MyChanges+' => 'Changes assigned to me (as Agent)',
'Menu:MyChanges+' => 'Non-closed changes assigned to me (as an Agent)',
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Changes by category for the last 7 days',
'UI-ChangeManagementOverview-Last-7-days' => 'Number of changes for the last 7 days',
'UI-ChangeManagementOverview-ChangeByDomain-last-7-days' => 'Changes by domain for the last 7 days',

View File

@@ -18,16 +18,16 @@ Dict::Add('FR FR', 'French', 'Français', [
'Menu:NewChange+' => 'Créer un nouveau ticket de changement',
'Menu:SearchChanges' => 'Rechercher des changements',
'Menu:SearchChanges+' => 'Rechercher parmi les tickets de changement',
'Menu:Change:Shortcuts' => 'Raccourcis',
'Menu:Change:Shortcuts+' => '',
'Menu:WaitingAcceptance' => 'Changements en attente d\'acceptance',
'Menu:WaitingAcceptance+' => 'Changements en attente d\'acceptance',
'Menu:WaitingApproval' => 'Changements en attente d\'approbation',
'Menu:WaitingApproval+' => 'Changements en attente d\'approbation',
'Menu:Changes' => 'Changements ouverts',
'Menu:Changes+' => 'Tickets de changement ouverts',
'Menu:MyChanges' => 'Mes changements',
'Menu:MyChanges+' => 'Tickets de changement qui me sont assignés',
'Menu:Change:Shortcuts' => 'Changements',
'Menu:Change:Shortcuts+' => 'Raccourcis vers différents groupes de changements',
'Menu:WaitingAcceptance' => 'En attente de validation',
'Menu:WaitingAcceptance+' => 'Changements à l\'état nouveau, en attente d\'acceptation',
'Menu:WaitingApproval' => 'En attente d\'approbation',
'Menu:WaitingApproval+' => 'Changements dans l\'état programmé, en attente d\'approbation',
'Menu:Changes' => 'En cours',
'Menu:Changes+' => 'Tickets de changement qui ne sont pas dans l\'état fermé',
'Menu:MyChanges' => 'Qui me sont assignés',
'Menu:MyChanges+' => 'Changements ni fermés, ni résolus, dont je suis l\'agent assigné',
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Changements par catégorie',
'UI-ChangeManagementOverview-Last-7-days' => 'Changements par jour',
'UI-ChangeManagementOverview-ChangeByDomain-last-7-days' => 'Changements par domaine',

View File

@@ -19,11 +19,11 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [
'Menu:SearchChanges' => 'Cerca per cambi',
'Menu:SearchChanges+' => 'Cerca i cambi per tickets',
'Menu:Change:Shortcuts' => 'Scorciatoie',
'Menu:Change:Shortcuts+' => '',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => 'Modifiche in attesa di accettazione',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => 'Modifiche in attesa di approvazione',
'Menu:WaitingApproval+' => '',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => 'Modifiche aperte',
'Menu:Changes+' => 'Tutte le Modifiche aperte',
'Menu:MyChanges' => 'Modifiche assegnate a me',

View File

@@ -19,13 +19,13 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
'Menu:SearchChanges' => '変更検索',
'Menu:SearchChanges+' => '変更チケット検索',
'Menu:Change:Shortcuts' => 'ショートカット',
'Menu:Change:Shortcuts+' => '',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => '受理待ちの変更',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => '承認待ちの変更',
'Menu:WaitingApproval+' => '',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => 'オープン状態の変更',
'Menu:Changes+' => '',
'Menu:Changes+' => 'All changes which are not in closed status~~',
'Menu:MyChanges' => '担当している変更',
'Menu:MyChanges+' => '担当している変更(エージェントとして)',
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => '最近7日間のカテゴリ別の変更',

View File

@@ -21,11 +21,11 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Menu:SearchChanges' => 'Zoek naar changes',
'Menu:SearchChanges+' => 'Zoek naar changes',
'Menu:Change:Shortcuts' => 'Snelkoppelingen',
'Menu:Change:Shortcuts+' => '',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => 'Changes die acceptatie vereisen',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => 'Changes die goedkeuring vereisen',
'Menu:WaitingApproval+' => '',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => 'Open changes',
'Menu:Changes+' => 'Alle open changes',
'Menu:MyChanges' => 'Changes toegewezen aan mij',

View File

@@ -19,11 +19,11 @@ Dict::Add('PL PL', 'Polish', 'Polski', [
'Menu:SearchChanges' => 'Szukaj zmian',
'Menu:SearchChanges+' => 'Szukaj zgłoszeń zmian',
'Menu:Change:Shortcuts' => 'Skróty',
'Menu:Change:Shortcuts+' => '',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => 'Zmiany do akceptacji',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => 'Zmiany do zatwierdzenia',
'Menu:WaitingApproval+' => '',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => 'Otwarte zmiany',
'Menu:Changes+' => 'Wszystkie otwarte zmiany',
'Menu:MyChanges' => 'Zmiany przypisane do mnie',

View File

@@ -19,13 +19,13 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
'Menu:SearchChanges' => 'Pesquisar por mudanças',
'Menu:SearchChanges+' => 'Pesquisar por solicitações de mudança',
'Menu:Change:Shortcuts' => 'Atalhos',
'Menu:Change:Shortcuts+' => '',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => 'Mudanças aguardando aceitação',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => 'Mudanças aguardando aprovação',
'Menu:WaitingApproval+' => '',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => 'Mudanças abertas',
'Menu:Changes+' => '',
'Menu:Changes+' => 'All changes which are not in closed status~~',
'Menu:MyChanges' => 'Mudanças atribuídas a mim',
'Menu:MyChanges+' => 'Mudanças atribuídas a mim (como Agente)',
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Mudanças por categoria nos últimos 7 dias',

View File

@@ -23,11 +23,11 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Menu:WaitingAcceptance' => 'Zmeny očakávajúce prijatie',
'Menu:WaitingAcceptance+' => '~~',
'Menu:WaitingApproval' => 'Zmeny očakávajúce schválenie',
'Menu:WaitingApproval+' => '~~',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => 'Otvorené zmeny',
'Menu:Changes+' => 'All open changes~~',
'Menu:Changes+' => 'All changes which are not in closed status~~',
'Menu:MyChanges' => 'Zmeny pridelené mne',
'Menu:MyChanges+' => 'Changes assigned to me (as Agent)~~',
'Menu:MyChanges+' => 'Non-closed changes assigned to me (as an Agent)~~',
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Zmeny podľa kategórie za posledných 7 dní',
'UI-ChangeManagementOverview-Last-7-days' => 'Počet zmien za posledných 7 dní',
'UI-ChangeManagementOverview-ChangeByDomain-last-7-days' => 'Zmeny podľa domény za posledných 7 dní',

View File

@@ -20,13 +20,13 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Menu:SearchChanges' => 'Değişiklik ara',
'Menu:SearchChanges+' => 'Değişiklik isteği ara',
'Menu:Change:Shortcuts' => 'Kısayollar',
'Menu:Change:Shortcuts+' => '',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => 'Kabul bekleyen değişiklik talepleri',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => 'Onay bekleyen değişiklik talepleri',
'Menu:WaitingApproval+' => '',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => 'Açık değişiklikler',
'Menu:Changes+' => '',
'Menu:Changes+' => 'All changes which are not in closed status~~',
'Menu:MyChanges' => 'Bana atanan değişiklik istekleri',
'Menu:MyChanges+' => 'Bana atanan değişiklik istekleri',
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Son 7 gün için kategoriye göre değişiklikler',

View File

@@ -31,11 +31,11 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Menu:SearchChanges' => '搜索变更',
'Menu:SearchChanges+' => '搜索变更',
'Menu:Change:Shortcuts' => '快捷方式',
'Menu:Change:Shortcuts+' => '',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => '等待审核的变更',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => '等待批准的变更',
'Menu:WaitingApproval+' => '',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => '所有打开的变更',
'Menu:Changes+' => '所有打开的变更',
'Menu:MyChanges' => '分配给我的变更',

View File

@@ -21,11 +21,11 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [
'Menu:SearchChanges' => 'Hledat změny',
'Menu:SearchChanges+' => 'Hledat změnové tikety',
'Menu:Change:Shortcuts' => 'Odkazy',
'Menu:Change:Shortcuts+' => '',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => 'Změny čekající na přijetí',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => 'Změny čekající na schválení',
'Menu:WaitingApproval+' => '',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => 'Otevřené změny',
'Menu:Changes+' => 'Všechny otevřené změny',
'Menu:MyChanges' => 'Změny přidělené mně',

View File

@@ -20,13 +20,13 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
'Menu:SearchChanges' => 'Søg efter Changes',
'Menu:SearchChanges+' => '',
'Menu:Change:Shortcuts' => 'Genveje',
'Menu:Change:Shortcuts+' => '',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => 'Changes der afventer accept',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => 'Changes der afventer godkendelse',
'Menu:WaitingApproval+' => '',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => 'Åbne Changes',
'Menu:Changes+' => '',
'Menu:Changes+' => 'All changes which are not in closed status~~',
'Menu:MyChanges' => 'Changes tildelt til mig',
'Menu:MyChanges+' => '',
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Changes de sidste 7 dage efter kategori',

View File

@@ -19,8 +19,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
'Menu:NewChange+' => 'Einen neuen Change erstellen',
'Menu:SearchChanges' => 'Suche nach Changes',
'Menu:SearchChanges+' => 'Unter den bestehenden Changes suchen',
'Menu:Change:Shortcuts' => 'Shortcuts',
'Menu:Change:Shortcuts+' => '',
'Menu:Change:Shortcuts' => 'Changes~~',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => 'Changes, die auf Annahme warten',
'Menu:WaitingAcceptance+' => 'Changes, die auf Annahme warten',
'Menu:WaitingApproval' => 'Changes, die auf Genehmigung warten',

View File

@@ -30,16 +30,16 @@ Dict::Add('EN US', 'English', 'English', [
'Menu:NewChange+' => 'Create a new change ticket',
'Menu:SearchChanges' => 'Search for changes',
'Menu:SearchChanges+' => 'Search for change tickets',
'Menu:Change:Shortcuts' => 'Shortcuts',
'Menu:Change:Shortcuts+' => '',
'Menu:WaitingAcceptance' => 'Changes awaiting acceptance',
'Menu:Change:Shortcuts' => 'Changes',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes',
'Menu:WaitingAcceptance' => 'Awaiting acceptance',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => 'Changes awaiting approval',
'Menu:WaitingApproval+' => '',
'Menu:Changes' => 'Open changes',
'Menu:Changes+' => 'All open changes',
'Menu:MyChanges' => 'Changes assigned to me',
'Menu:MyChanges+' => 'Changes assigned to me (as Agent)',
'Menu:WaitingApproval' => 'Awaiting approval',
'Menu:WaitingApproval+' => 'Changes in planned status',
'Menu:Changes' => 'Open',
'Menu:Changes+' => 'All changes which are not in closed status',
'Menu:MyChanges' => 'Assigned to me',
'Menu:MyChanges+' => 'Non-closed changes assigned to me (as an Agent)',
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Changes by category for the last 7 days',
'UI-ChangeManagementOverview-Last-7-days' => 'Number of changes for the last 7 days',
'UI-ChangeManagementOverview-ChangeByDomain-last-7-days' => 'Changes by domain for the last 7 days',

View File

@@ -30,16 +30,16 @@ Dict::Add('EN GB', 'British English', 'British English', [
'Menu:NewChange+' => 'Create a new change ticket',
'Menu:SearchChanges' => 'Search for changes',
'Menu:SearchChanges+' => 'Search for change tickets',
'Menu:Change:Shortcuts' => 'Shortcuts',
'Menu:Change:Shortcuts+' => '',
'Menu:Change:Shortcuts' => 'Changes~~',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => 'Changes awaiting acceptance',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => 'Changes awaiting approval',
'Menu:WaitingApproval+' => '',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => 'Open changes',
'Menu:Changes+' => 'All open changes',
'Menu:Changes+' => 'All changes which are not in closed status',
'Menu:MyChanges' => 'Changes assigned to me',
'Menu:MyChanges+' => 'Changes assigned to me (as Agent)',
'Menu:MyChanges+' => 'Non-closed changes assigned to me (as an Agent)',
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Changes by category for the last 7 days',
'UI-ChangeManagementOverview-Last-7-days' => 'Number of changes for the last 7 days',
'UI-ChangeManagementOverview-ChangeByDomain-last-7-days' => 'Changes by domain for the last 7 days',

View File

@@ -18,16 +18,16 @@ Dict::Add('FR FR', 'French', 'Français', [
'Menu:NewChange+' => 'Créer un nouveau ticket de changement',
'Menu:SearchChanges' => 'Rechercher des changements',
'Menu:SearchChanges+' => 'Rechercher parmi les tickets de changement',
'Menu:Change:Shortcuts' => 'Raccourcis',
'Menu:Change:Shortcuts+' => '',
'Menu:WaitingAcceptance' => 'Changements en attente d\'acceptance',
'Menu:WaitingAcceptance+' => 'Changements en attente d\'acceptance',
'Menu:WaitingApproval' => 'Changement en attente d\'approbation',
'Menu:WaitingApproval+' => 'Changement en attente d\'approbation',
'Menu:Changes' => 'Changements ouverts',
'Menu:Changes+' => 'Tickets de changement ouverts',
'Menu:MyChanges' => 'Mes tickets de changement',
'Menu:MyChanges+' => 'Tickets de changement qui me sont assignés',
'Menu:Change:Shortcuts' => 'Changements',
'Menu:Change:Shortcuts+' => 'Raccourcis vers différents groupes de changements',
'Menu:WaitingAcceptance' => 'En attente d\'acceptation',
'Menu:WaitingAcceptance+' => 'Changements en attente d\'acceptation',
'Menu:WaitingApproval' => 'En attente d\'approbation',
'Menu:WaitingApproval+' => 'Changements dans l\'état planifié',
'Menu:Changes' => 'En cours',
'Menu:Changes+' => 'Tickets de changement qui ne sont pas dans l\'état fermé',
'Menu:MyChanges' => 'Qui me sont assignés',
'Menu:MyChanges+' => 'Changements non fermés dont je suis l\'agent assigné',
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Changements par catégorie',
'UI-ChangeManagementOverview-Last-7-days' => 'Changements par jour',
'UI-ChangeManagementOverview-ChangeByDomain-last-7-days' => 'Changements par domaine',

View File

@@ -23,7 +23,7 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [
'Menu:WaitingAcceptance' => 'Modifiche in attesa di accettazione',
'Menu:WaitingAcceptance+' => '~~',
'Menu:WaitingApproval' => 'Modifiche in attesa di approvazione',
'Menu:WaitingApproval+' => '~~',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => 'Modifiche aperte',
'Menu:Changes+' => 'Tutte le Modifiche aperte',
'Menu:MyChanges' => 'Modifiche assegnate a me',

View File

@@ -19,13 +19,13 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
'Menu:SearchChanges' => '変更検索',
'Menu:SearchChanges+' => '',
'Menu:Change:Shortcuts' => 'ショートカット',
'Menu:Change:Shortcuts+' => '',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => '受け付け待ちの変更',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => '承認待ちの変更',
'Menu:WaitingApproval+' => '',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => 'オープンな変更',
'Menu:Changes+' => '',
'Menu:Changes+' => 'All changes which are not in closed status~~',
'Menu:MyChanges' => '私に割り当てられた変更',
'Menu:MyChanges+' => '',
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => '最近7日間のカテゴリ別の変更',

View File

@@ -21,11 +21,11 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Menu:SearchChanges' => 'Zoek naar changes',
'Menu:SearchChanges+' => 'Zoek naar changes',
'Menu:Change:Shortcuts' => 'Snelkoppelingen',
'Menu:Change:Shortcuts+' => '',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => 'Changes die acceptatie vereisen',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => 'Changes die goedkeuring vereisen',
'Menu:WaitingApproval+' => '',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => 'Open changes',
'Menu:Changes+' => 'Alle open changes',
'Menu:MyChanges' => 'Changes toegewezen aan mij',

View File

@@ -19,11 +19,11 @@ Dict::Add('PL PL', 'Polish', 'Polski', [
'Menu:SearchChanges' => 'Szukaj zmian',
'Menu:SearchChanges+' => 'Szukaj zgłoszeń zmian',
'Menu:Change:Shortcuts' => 'Skróty',
'Menu:Change:Shortcuts+' => '',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => 'Zmiany do akceptacji',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => 'Zmiany do zatwierdzenia',
'Menu:WaitingApproval+' => '',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => 'Otwarte zmiany',
'Menu:Changes+' => 'Wszystkie otwarte zmiany',
'Menu:MyChanges' => 'Zmiany przypisane do mnie',

View File

@@ -19,11 +19,11 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
'Menu:SearchChanges' => 'Pesquisar por mudanças',
'Menu:SearchChanges+' => 'Pesquisar por solicitações de mudanças',
'Menu:Change:Shortcuts' => 'Atalhos',
'Menu:Change:Shortcuts+' => '',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => 'Mudanças aguardando aceitação',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => 'Mudanças aguardando aprovação',
'Menu:WaitingApproval+' => '',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => 'Mudanças abertas',
'Menu:Changes+' => 'Todas as mudanças abertas',
'Menu:MyChanges' => 'Mudanças atribuídas a mim',

View File

@@ -23,11 +23,11 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Menu:WaitingAcceptance' => 'Zmeny očakávajúce prijatie',
'Menu:WaitingAcceptance+' => '~~',
'Menu:WaitingApproval' => 'Zmeny očakávajúce schválenie',
'Menu:WaitingApproval+' => '~~',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => 'Otvorené zmeny',
'Menu:Changes+' => 'All open changes~~',
'Menu:Changes+' => 'All changes which are not in closed status~~',
'Menu:MyChanges' => 'Zmeny pridelené mne',
'Menu:MyChanges+' => 'Changes assigned to me (as Agent)~~',
'Menu:MyChanges+' => 'Non-closed changes assigned to me (as an Agent)~~',
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Zmeny podľa kategórie za posledných 7 dní',
'UI-ChangeManagementOverview-Last-7-days' => 'Počet zmien za posledných 7 dní',
'UI-ChangeManagementOverview-ChangeByDomain-last-7-days' => 'Zmeny podľa domény za posledných 7 dní',

View File

@@ -23,9 +23,9 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Menu:WaitingAcceptance' => 'Kabul bekleyen değişiklik talepleri',
'Menu:WaitingAcceptance+' => '~~',
'Menu:WaitingApproval' => 'Onay bekleyen değişiklik talepleri',
'Menu:WaitingApproval+' => '~~',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => 'Açık değişiklikler',
'Menu:Changes+' => 'All open changes~~',
'Menu:Changes+' => 'All changes which are not in closed status~~',
'Menu:MyChanges' => 'Bana atanan değişiklik istekleri',
'Menu:MyChanges+' => 'Bana atanan değişiklik istekleri',
'UI-ChangeManagementOverview-ChangeByCategory-last-7-days' => 'Son 7 gün için kategoriye göre değişiklikler',

View File

@@ -30,11 +30,11 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Menu:SearchChanges' => '搜索变更',
'Menu:SearchChanges+' => '搜索变更',
'Menu:Change:Shortcuts' => '快捷方式',
'Menu:Change:Shortcuts+' => '',
'Menu:Change:Shortcuts+' => 'Shortcuts to predefined sets of Changes~~',
'Menu:WaitingAcceptance' => '等待审核的变更',
'Menu:WaitingAcceptance+' => '',
'Menu:WaitingApproval' => '等待批准的变更',
'Menu:WaitingApproval+' => '',
'Menu:WaitingApproval+' => 'Changes in planned status~~',
'Menu:Changes' => '所有打开的变更',
'Menu:Changes+' => '所有打开的变更',
'Menu:MyChanges' => '分配给我的变更',

View File

@@ -242,8 +242,7 @@ class AjaxController extends Controller
throw new SecurityException('Access forbidden');
}
$sConfigFile = APPCONF.'production/config-itop.php';
@chmod($sConfigFile, 0770); // Allow overwriting the file
SetupUtils::CreateSetupToken();
header('Location: ../setup/');
}

View File

@@ -166,8 +166,6 @@ class UpdateController extends Controller
public function OperationRunSetup()
{
SetupUtils::CheckSetupToken(true);
$sConfigFile = APPCONF.'production/'.ITOP_CONFIG_FILE;
@chmod($sConfigFile, 0770);
$sRedirectURL = utils::GetAbsoluteUrlAppRoot().'setup/index.php';
header("Location: $sRedirectURL");
}

View File

@@ -46,10 +46,10 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [
]);
Dict::Add('CS CZ', 'Czech', 'Čeština', [
'Menu:ProblemManagement' => 'Správa problémů',
'Menu:ProblemManagement+' => 'Správa problémů',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Odkazy',
'Menu:FAQCategory' => 'Kategorie FAQ',
'Menu:FAQCategory+' => '',
'Menu:FAQCategory+' => 'A typology to categorize frequently asked questions (FAQ)~~',
'Menu:FAQ' => 'FAQ',
'Menu:FAQ+' => 'FAQ - Často kladené dotazy',
'Brick:Portal:FAQ:Menu' => 'FAQ',

View File

@@ -45,10 +45,10 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
]);
Dict::Add('DA DA', 'Danish', 'Dansk', [
'Menu:ProblemManagement' => 'Problem Management',
'Menu:ProblemManagement+' => 'Problem Management',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Genvej',
'Menu:FAQCategory' => 'FAQ-Kategorier',
'Menu:FAQCategory+' => '',
'Menu:FAQCategory+' => 'A typology to categorize frequently asked questions (FAQ)~~',
'Menu:FAQ' => 'FAQs',
'Menu:FAQ+' => '',
'Brick:Portal:FAQ:Menu' => 'FAQ~~',

View File

@@ -45,10 +45,10 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
]);
Dict::Add('DE DE', 'German', 'Deutsch', [
'Menu:ProblemManagement' => 'Problem Management',
'Menu:ProblemManagement+' => 'Problem Management',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Shortcuts',
'Menu:FAQCategory' => 'FAQ-Kategorien',
'Menu:FAQCategory+' => '',
'Menu:FAQCategory+' => 'A typology to categorize frequently asked questions (FAQ)~~',
'Menu:FAQ' => 'FAQs',
'Menu:FAQ+' => '',
'Brick:Portal:FAQ:Menu' => 'FAQ',

View File

@@ -85,12 +85,12 @@ Dict::Add('EN US', 'English', 'English', [
]);
Dict::Add('EN US', 'English', 'English', [
'Menu:ProblemManagement' => 'Problem management',
'Menu:ProblemManagement+' => 'Problem management',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload',
'Menu:Problem:Shortcuts' => 'Shortcuts',
'Menu:FAQCategory' => 'FAQ categories',
'Menu:FAQCategory+' => 'All FAQ categories',
'Menu:FAQCategory+' => 'A typology to categorize frequently asked questions (FAQ)',
'Menu:FAQ' => 'FAQs',
'Menu:FAQ+' => 'All FAQs',
'Menu:FAQ+' => 'All Frequently Asked Questions',
'Brick:Portal:FAQ:Menu' => 'FAQ',
'Brick:Portal:FAQ:Title' => 'Frequently Asked Questions',
'Brick:Portal:FAQ:Title+' => '<p>In a hurry?</p><p>Check out the list of most common questions and (maybe) find the expected answer right away.</p>',

View File

@@ -85,12 +85,12 @@ Dict::Add('EN GB', 'British English', 'British English', [
]);
Dict::Add('EN GB', 'British English', 'British English', [
'Menu:ProblemManagement' => 'Problem management',
'Menu:ProblemManagement+' => 'Problem management',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Shortcuts',
'Menu:FAQCategory' => 'FAQ categories',
'Menu:FAQCategory+' => 'All FAQ categories',
'Menu:FAQCategory+' => 'A typology to categorize frequently asked questions (FAQ)',
'Menu:FAQ' => 'FAQs',
'Menu:FAQ+' => 'All FAQs',
'Menu:FAQ+' => 'All Frequently Asked Questions',
'Brick:Portal:FAQ:Menu' => 'FAQ',
'Brick:Portal:FAQ:Title' => 'Frequently Asked Questions',
'Brick:Portal:FAQ:Title+' => '<p>In a hurry?</p><p>Check out the list of most common questions and (maybe) find the expected answer right away.</p>',

View File

@@ -42,7 +42,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
]);
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
'Menu:ProblemManagement' => 'Administración de Problemas',
'Menu:ProblemManagement+' => 'GestAdministraciónión de problemas',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Acceso Rápido',
'Menu:FAQCategory' => 'Categorías de FAQ',
'Menu:FAQCategory+' => 'Categorías FAQ',

View File

@@ -36,7 +36,7 @@ Dict::Add('FR FR', 'French', 'Français', [
Dict::Add('FR FR', 'French', 'Français', [
'Class:FAQCategory' => 'Catégorie de FAQ',
'Class:FAQCategory+' => 'Typologie. Segmentation des Questions fréquement posées (FAQ)',
'Class:FAQCategory+' => 'Segmentation de la Foire Aux Questions (FAQ)',
'Class:FAQCategory/Attribute:name' => 'Nom',
'Class:FAQCategory/Attribute:name+' => '',
'Class:FAQCategory/Attribute:faq_list' => 'FAQs',
@@ -50,7 +50,7 @@ Dict::Add('FR FR', 'French', 'Français', [
]);
Dict::Add('FR FR', 'French', 'Français', [
'Menu:ProblemManagement' => 'Gestion des problèmes',
'Menu:ProblemManagement+' => 'Gestion des problèmes',
'Menu:ProblemManagement+' => 'Un processus ITIL qui identifie la cause des incidents répétitifs, documente les Erreurs connues et les FAQs, afin de réduire la charge de travail du heldesk',
'Menu:Problem:Shortcuts' => 'Raccourcis',
'Menu:FAQCategory' => 'Catégories de FAQ',
'Menu:FAQCategory+' => 'Toutes les catégories de FAQ',

View File

@@ -44,7 +44,7 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [
]);
Dict::Add('HU HU', 'Hungarian', 'Magyar', [
'Menu:ProblemManagement' => 'Problémakezelés',
'Menu:ProblemManagement+' => '',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Gyorsgombok',
'Menu:FAQCategory' => 'Tudástár kategória',
'Menu:FAQCategory+' => 'Tudástár kategóriák',

View File

@@ -44,7 +44,7 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [
]);
Dict::Add('IT IT', 'Italian', 'Italiano', [
'Menu:ProblemManagement' => 'Gestione dei problemi',
'Menu:ProblemManagement+' => 'Gestione dei problemi',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Scorciatoia',
'Menu:FAQCategory' => 'Categoria FAQ',
'Menu:FAQCategory+' => 'Tutte le categorie FAQ',

View File

@@ -44,7 +44,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
]);
Dict::Add('JA JP', 'Japanese', '日本語', [
'Menu:ProblemManagement' => '問題管理',
'Menu:ProblemManagement+' => '問題管理',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'ショートカット',
'Menu:FAQCategory' => 'FAQカテゴリ',
'Menu:FAQCategory+' => '全てのFAQカテゴリ',

View File

@@ -46,7 +46,7 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
]);
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Menu:ProblemManagement' => 'Probleem Management',
'Menu:ProblemManagement+' => 'Probleem Management',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Snelkoppelingen',
'Menu:FAQCategory' => 'FAQ-categorieën',
'Menu:FAQCategory+' => 'Alle FAQ-categorieën',

View File

@@ -44,7 +44,7 @@ Dict::Add('PL PL', 'Polish', 'Polski', [
]);
Dict::Add('PL PL', 'Polish', 'Polski', [
'Menu:ProblemManagement' => 'Zarządzanie problemami',
'Menu:ProblemManagement+' => 'Zarządzanie problemami',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Skróty',
'Menu:FAQCategory' => 'Kategorie pytań FAQ',
'Menu:FAQCategory+' => 'Wszystkie kategorie pytań FAQ',

View File

@@ -44,7 +44,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
]);
Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
'Menu:ProblemManagement' => 'Gerencimento de problemas',
'Menu:ProblemManagement+' => '',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Atalhos',
'Menu:FAQCategory' => 'Categorias de FAQ',
'Menu:FAQCategory+' => 'Lista de Categorias de FAQ',

View File

@@ -45,7 +45,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
]);
Dict::Add('RU RU', 'Russian', 'Русский', [
'Menu:ProblemManagement' => 'Управление проблемами',
'Menu:ProblemManagement+' => 'Управление проблемами',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Ярлыки',
'Menu:FAQCategory' => 'Категории FAQ',
'Menu:FAQCategory+' => 'Категории FAQ',

View File

@@ -44,12 +44,12 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
]);
Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Menu:ProblemManagement' => 'Problem management~~',
'Menu:ProblemManagement+' => 'Problem management~~',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Shortcuts~~',
'Menu:FAQCategory' => 'FAQ categories~~',
'Menu:FAQCategory+' => 'All FAQ categories~~',
'Menu:FAQCategory+' => 'A typology to categorize frequently asked questions (FAQ)~~',
'Menu:FAQ' => 'FAQs~~',
'Menu:FAQ+' => 'All FAQs~~',
'Menu:FAQ+' => 'All Frequently Asked Questions~~',
'Brick:Portal:FAQ:Menu' => 'FAQ~~',
'Brick:Portal:FAQ:Title' => 'Frequently Asked Questions~~',
'Brick:Portal:FAQ:Title+' => '<p>In a hurry?</p><p>Check out the list of most common questions and (maybe) find the expected answer right away.</p>~~',

View File

@@ -45,7 +45,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
]);
Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Menu:ProblemManagement' => 'Problem yönetimi',
'Menu:ProblemManagement+' => 'Problem yönetimi',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Kısayollar',
'Menu:FAQCategory' => 'SSS kategorileri',
'Menu:FAQCategory+' => 'Tüm SSS kategorileri',

View File

@@ -85,7 +85,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
]);
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Menu:ProblemManagement' => '问题管理',
'Menu:ProblemManagement+' => '问题管理',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => '快捷方式',
'Menu:FAQCategory' => 'FAQ 类别',
'Menu:FAQCategory+' => '所有 FAQ 类别',

View File

@@ -1767,6 +1767,13 @@
<do_search>1</do_search>
<auto_reload>fast</auto_reload>
</menu>
<menu id="Incident:MySupportIncidents" xsi:type="OQLMenuNode" _delta="define">
<rank>3</rank>
<parent>Incident:Shortcuts</parent>
<oql><![CDATA[SELECT Incident WHERE caller_id = :current_contact_id AND status NOT IN ("closed")]]></oql>
<do_search/>
<auto_reload>fast</auto_reload>
</menu>
</menus>
<user_rights>
<profiles>

View File

@@ -25,6 +25,8 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [
'Menu:Incident:Shortcuts+' => '',
'Menu:Incident:MyIncidents' => 'Incidenty přidělené mně',
'Menu:Incident:MyIncidents+' => 'Incidenty přidělené mně (jako řešiteli)',
'Menu:Incident:MySupportIncidents' => 'Reported by me~~',
'Menu:Incident:MySupportIncidents+' => 'Non closed incidents where I am the caller~~',
'Menu:Incident:EscalatedIncidents' => 'Eskalované incidenty',
'Menu:Incident:EscalatedIncidents+' => 'Eskalované incidenty',
'Menu:Incident:OpenIncidents' => 'Všechny otevřené incidenty',

View File

@@ -24,10 +24,12 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
'Menu:Incident:Shortcuts+' => '',
'Menu:Incident:MyIncidents' => 'Mine Incidents',
'Menu:Incident:MyIncidents+' => '',
'Menu:Incident:MySupportIncidents' => 'Reported by me~~',
'Menu:Incident:MySupportIncidents+' => 'Non closed incidents where I am the caller~~',
'Menu:Incident:EscalatedIncidents' => 'Eskalerede Incidents',
'Menu:Incident:EscalatedIncidents+' => '',
'Menu:Incident:EscalatedIncidents+' => 'Incident which are under escalation, by status or hot flag~~',
'Menu:Incident:OpenIncidents' => 'Alle åbne Incidents',
'Menu:Incident:OpenIncidents+' => '',
'Menu:Incident:OpenIncidents+' => 'All incidents that are not closed~~',
'UI-IncidentManagementOverview-IncidentByPriority-last-14-days' => 'Incidents de sidste 14 dage efter prioritet',
'UI-IncidentManagementOverview-Last-14-days' => 'Antal Incidents de sidste 14 dage',
'UI-IncidentManagementOverview-OpenIncidentByStatus' => 'Åbne Incidents efter status',

View File

@@ -20,10 +20,12 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
'Menu:NewIncident+' => 'Einen neuen Incident dokumentieren',
'Menu:SearchIncidents' => 'Nach Incidents suchen',
'Menu:SearchIncidents+' => 'Suche nach einem bestehendem Incident',
'Menu:Incident:Shortcuts' => 'Shortcuts',
'Menu:Incident:Shortcuts' => 'Incidents',
'Menu:Incident:Shortcuts+' => '',
'Menu:Incident:MyIncidents' => 'Mir zugewiesene Incidents',
'Menu:Incident:MyIncidents+' => 'Incidents die mir als Bearbeiter zugewiesen sind',
'Menu:Incident:MySupportIncidents' => 'Reported by me~~',
'Menu:Incident:MySupportIncidents+' => 'Non closed incidents where I am the caller~~',
'Menu:Incident:EscalatedIncidents' => 'Eskalierte Incidents',
'Menu:Incident:EscalatedIncidents+' => 'Incidents die eskaliert sind',
'Menu:Incident:OpenIncidents' => 'Alle offenen Incidents',

View File

@@ -31,14 +31,16 @@ Dict::Add('EN US', 'English', 'English', [
'Menu:NewIncident+' => 'Create a new incident ticket',
'Menu:SearchIncidents' => 'Search for incidents',
'Menu:SearchIncidents+' => 'Search for incident tickets',
'Menu:Incident:Shortcuts' => 'Shortcuts',
'Menu:Incident:Shortcuts' => 'Incidents',
'Menu:Incident:Shortcuts+' => '',
'Menu:Incident:MyIncidents' => 'Incidents assigned to me',
'Menu:Incident:MyIncidents+' => 'Incidents assigned to me (as Agent)',
'Menu:Incident:EscalatedIncidents' => 'Escalated incidents',
'Menu:Incident:EscalatedIncidents+' => '',
'Menu:Incident:OpenIncidents' => 'All open incidents',
'Menu:Incident:OpenIncidents+' => '',
'Menu:Incident:MyIncidents' => 'Assigned to me',
'Menu:Incident:MyIncidents+' => 'Incidents assigned to me (as an Agent)',
'Menu:Incident:MySupportIncidents' => 'Reported by me',
'Menu:Incident:MySupportIncidents+' => 'Non closed incidents where I am the caller',
'Menu:Incident:EscalatedIncidents' => 'Under escalation',
'Menu:Incident:EscalatedIncidents+' => 'Incident which are under escalation, by status or hot flag',
'Menu:Incident:OpenIncidents' => 'Open',
'Menu:Incident:OpenIncidents+' => 'All incidents that are not closed',
'UI-IncidentManagementOverview-IncidentByPriority-last-14-days' => 'Last 14 days incident per priority',
'UI-IncidentManagementOverview-Last-14-days' => 'Last 14 days number of incidents',
'UI-IncidentManagementOverview-OpenIncidentByStatus' => 'Open incidents by status',
@@ -134,7 +136,7 @@ Dict::Add('EN US', 'English', 'English', [
'Class:Incident/Attribute:servicesubcategory_name' => 'Service subcategory name',
'Class:Incident/Attribute:servicesubcategory_name+' => '',
'Class:Incident/Attribute:escalation_flag' => 'Hot Flag',
'Class:Incident/Attribute:escalation_flag+' => '',
'Class:Incident/Attribute:escalation_flag+' => 'When set, the Ticket is added to the "Under escalation" menu',
'Class:Incident/Attribute:escalation_flag/Value:no' => 'No',
'Class:Incident/Attribute:escalation_flag/Value:no+' => '',
'Class:Incident/Attribute:escalation_flag/Value:yes' => 'Yes',

View File

@@ -31,14 +31,16 @@ Dict::Add('EN GB', 'British English', 'British English', [
'Menu:NewIncident+' => 'Create a new incident ticket',
'Menu:SearchIncidents' => 'Search for incidents',
'Menu:SearchIncidents+' => 'Search for incident tickets',
'Menu:Incident:Shortcuts' => 'Shortcuts',
'Menu:Incident:Shortcuts' => 'Incidents',
'Menu:Incident:Shortcuts+' => '',
'Menu:Incident:MyIncidents' => 'Incidents assigned to me',
'Menu:Incident:MyIncidents+' => 'Incidents assigned to me (as Agent)',
'Menu:Incident:EscalatedIncidents' => 'Escalated incidents',
'Menu:Incident:EscalatedIncidents+' => '',
'Menu:Incident:OpenIncidents' => 'All open incidents',
'Menu:Incident:OpenIncidents+' => '',
'Menu:Incident:MyIncidents' => 'Assigned to me',
'Menu:Incident:MyIncidents+' => 'Incidents assigned to me (as an Agent)',
'Menu:Incident:MySupportIncidents' => 'Reported by me~~',
'Menu:Incident:MySupportIncidents+' => 'Non closed incidents where I am the caller~~',
'Menu:Incident:EscalatedIncidents' => 'Under escalation',
'Menu:Incident:EscalatedIncidents+' => 'Incident which are under escalation, by status or hot flag',
'Menu:Incident:OpenIncidents' => 'Open',
'Menu:Incident:OpenIncidents+' => 'All incidents that are not closed~~',
'UI-IncidentManagementOverview-IncidentByPriority-last-14-days' => 'Last 14 days incident per priority',
'UI-IncidentManagementOverview-Last-14-days' => 'Last 14 days number of incidents',
'UI-IncidentManagementOverview-OpenIncidentByStatus' => 'Open incidents by status',

View File

@@ -21,6 +21,8 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
'Menu:Incident:Shortcuts+' => 'Accesos Rápidos',
'Menu:Incident:MyIncidents' => 'Incidentes Asignados a Mí',
'Menu:Incident:MyIncidents+' => 'Incidentes Asignados a Mí (como Analista)',
'Menu:Incident:MySupportIncidents' => 'Reported by me~~',
'Menu:Incident:MySupportIncidents+' => 'Non closed incidents where I am the caller~~',
'Menu:Incident:EscalatedIncidents' => 'Incidentes Escalados',
'Menu:Incident:EscalatedIncidents+' => 'Incidentes Escalados',
'Menu:Incident:OpenIncidents' => 'Incidentes Abiertos',

View File

@@ -19,13 +19,15 @@ Dict::Add('FR FR', 'French', 'Français', [
'Menu:NewIncident+' => 'Créer un nouveau ticket d\'incident',
'Menu:SearchIncidents' => 'Rechercher des incidents',
'Menu:SearchIncidents+' => 'Rechercher parmi les tickets d\'incidents',
'Menu:Incident:Shortcuts' => 'Raccourcis',
'Menu:Incident:Shortcuts' => 'Incidents',
'Menu:Incident:Shortcuts+' => '',
'Menu:Incident:MyIncidents' => 'Mes incidents',
'Menu:Incident:MyIncidents+' => 'Tickets d\'incident qui me sont assignés',
'Menu:Incident:EscalatedIncidents' => 'Incidents en cours d\'escalade',
'Menu:Incident:EscalatedIncidents+' => 'Ticket d\'incident en cours d\'escalade',
'Menu:Incident:OpenIncidents' => 'Incidents ouverts',
'Menu:Incident:MyIncidents' => 'Qui me sont assignés',
'Menu:Incident:MyIncidents+' => 'Les tickets d\'incident en cours qui me sont assignés',
'Menu:Incident:MySupportIncidents' => 'Que j\'ai déclarés',
'Menu:Incident:MySupportIncidents+' => 'Les incidents en cours dont je suis le demandeur',
'Menu:Incident:EscalatedIncidents' => 'En escalade',
'Menu:Incident:EscalatedIncidents+' => 'Ticket d\'incident en cours d\'escalade ou à surveiller',
'Menu:Incident:OpenIncidents' => 'En cours',
'Menu:Incident:OpenIncidents+' => 'Tous les tickets d\'incident ouverts',
'UI-IncidentManagementOverview-IncidentByPriority-last-14-days' => 'Incidents des 14 derniers jours par priorité',
'UI-IncidentManagementOverview-Last-14-days' => 'Incidents des 14 derniers jours',
@@ -120,7 +122,7 @@ Dict::Add('FR FR', 'French', 'Français', [
'Class:Incident/Attribute:servicesubcategory_name' => 'Nom Sous-catégorie de service',
'Class:Incident/Attribute:servicesubcategory_name+' => '',
'Class:Incident/Attribute:escalation_flag' => 'Ticket à surveiller',
'Class:Incident/Attribute:escalation_flag+' => '',
'Class:Incident/Attribute:escalation_flag+' => 'Ce Ticket sera ajouté au menu des incidents en cours d\'escalade',
'Class:Incident/Attribute:escalation_flag/Value:no' => 'Non',
'Class:Incident/Attribute:escalation_flag/Value:no+' => '',
'Class:Incident/Attribute:escalation_flag/Value:yes' => 'Oui',

View File

@@ -23,6 +23,8 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [
'Menu:Incident:Shortcuts+' => 'Gyorselérés gombok',
'Menu:Incident:MyIncidents' => 'Hozzám rendelt incidensek',
'Menu:Incident:MyIncidents+' => 'Hozzám rendelt incidensek (ügyintézőként)',
'Menu:Incident:MySupportIncidents' => 'Reported by me~~',
'Menu:Incident:MySupportIncidents+' => 'Non closed incidents where I am the caller~~',
'Menu:Incident:EscalatedIncidents' => 'Eszkalált incidensek',
'Menu:Incident:EscalatedIncidents+' => 'Eszkalált incidensek',
'Menu:Incident:OpenIncidents' => 'Nyitott incidensek',

View File

@@ -23,6 +23,8 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [
'Menu:Incident:Shortcuts+' => '~~',
'Menu:Incident:MyIncidents' => 'Incidenti assegnati a me',
'Menu:Incident:MyIncidents+' => 'Incidenti assegnati a me (come agente)',
'Menu:Incident:MySupportIncidents' => 'Reported by me~~',
'Menu:Incident:MySupportIncidents+' => 'Non closed incidents where I am the caller~~',
'Menu:Incident:EscalatedIncidents' => 'Evoluzione Incidente',
'Menu:Incident:EscalatedIncidents+' => 'Evoluzione Incidente',
'Menu:Incident:OpenIncidents' => 'Tutti gli incidenti aperti',

View File

@@ -23,6 +23,8 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
'Menu:Incident:Shortcuts+' => '',
'Menu:Incident:MyIncidents' => '担当しているインシデント',
'Menu:Incident:MyIncidents+' => '担当しているインシデント(エージェント)',
'Menu:Incident:MySupportIncidents' => 'Reported by me~~',
'Menu:Incident:MySupportIncidents+' => 'Non closed incidents where I am the caller~~',
'Menu:Incident:EscalatedIncidents' => 'エスカレーションされたインシデント',
'Menu:Incident:EscalatedIncidents+' => 'エスカレーションされたインシデント',
'Menu:Incident:OpenIncidents' => '全オープンインシデント',

View File

@@ -25,6 +25,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Menu:Incident:Shortcuts+' => '',
'Menu:Incident:MyIncidents' => 'Incidenten toegewezen aan mij',
'Menu:Incident:MyIncidents+' => 'Incidenten toegewezen aan mij (als Agent)',
'Menu:Incident:MySupportIncidents' => 'Reported by me~~',
'Menu:Incident:MySupportIncidents+' => 'Non closed incidents where I am the caller~~',
'Menu:Incident:EscalatedIncidents' => 'Geëscaleerde incidenten',
'Menu:Incident:EscalatedIncidents+' => 'Geëscaleerde incidenten',
'Menu:Incident:OpenIncidents' => 'Alle open incidenten',

View File

@@ -23,6 +23,8 @@ Dict::Add('PL PL', 'Polish', 'Polski', [
'Menu:Incident:Shortcuts+' => '',
'Menu:Incident:MyIncidents' => 'Incydenty przypisane do mnie',
'Menu:Incident:MyIncidents+' => 'Incydenty przypisane do mnie (jako Agent)',
'Menu:Incident:MySupportIncidents' => 'Reported by me~~',
'Menu:Incident:MySupportIncidents+' => 'Non closed incidents where I am the caller~~',
'Menu:Incident:EscalatedIncidents' => 'Pilne incydenty',
'Menu:Incident:EscalatedIncidents+' => 'Pilne incydenty',
'Menu:Incident:OpenIncidents' => 'Wszystkie otwarte incydenty',

View File

@@ -23,10 +23,12 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
'Menu:Incident:Shortcuts+' => '',
'Menu:Incident:MyIncidents' => 'Incidentes atribuídos para mim',
'Menu:Incident:MyIncidents+' => 'Incidentes atribuídos para mim (como Agente)',
'Menu:Incident:MySupportIncidents' => 'Reported by me~~',
'Menu:Incident:MySupportIncidents+' => 'Non closed incidents where I am the caller~~',
'Menu:Incident:EscalatedIncidents' => 'Incidentes escalonados',
'Menu:Incident:EscalatedIncidents+' => '',
'Menu:Incident:EscalatedIncidents+' => 'Incident which are under escalation, by status or hot flag~~',
'Menu:Incident:OpenIncidents' => 'Todos os incidentes abertos',
'Menu:Incident:OpenIncidents+' => '',
'Menu:Incident:OpenIncidents+' => 'All incidents that are not closed~~',
'UI-IncidentManagementOverview-IncidentByPriority-last-14-days' => 'Incidentes dos últimos 14 dias por prioridade',
'UI-IncidentManagementOverview-Last-14-days' => 'Incidentes dos últimos 14 dias por prioridade',
'UI-IncidentManagementOverview-OpenIncidentByStatus' => 'Incidentes abertos por status',

View File

@@ -24,6 +24,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'Menu:Incident:Shortcuts+' => 'Ярлыки',
'Menu:Incident:MyIncidents' => 'Назначенные мне',
'Menu:Incident:MyIncidents+' => 'Инциденты, назначенные мне (в качестве агента)',
'Menu:Incident:MySupportIncidents' => 'Reported by me~~',
'Menu:Incident:MySupportIncidents+' => 'Non closed incidents where I am the caller~~',
'Menu:Incident:EscalatedIncidents' => 'Эскалированные',
'Menu:Incident:EscalatedIncidents+' => 'Эскалированные инциденты',
'Menu:Incident:OpenIncidents' => 'Открытые',

View File

@@ -19,14 +19,16 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Menu:NewIncident+' => 'Create a new incident ticket~~',
'Menu:SearchIncidents' => 'Search for incidents~~',
'Menu:SearchIncidents+' => 'Search for incident tickets~~',
'Menu:Incident:Shortcuts' => 'Shortcuts~~',
'Menu:Incident:Shortcuts' => 'Incidents~~',
'Menu:Incident:Shortcuts+' => '~~',
'Menu:Incident:MyIncidents' => 'Incidents assigned to me~~',
'Menu:Incident:MyIncidents+' => 'Incidents assigned to me (as Agent)~~',
'Menu:Incident:EscalatedIncidents' => 'Escalated incidents~~',
'Menu:Incident:EscalatedIncidents+' => '~~',
'Menu:Incident:OpenIncidents' => 'All open incidents~~',
'Menu:Incident:OpenIncidents+' => '~~',
'Menu:Incident:MyIncidents' => 'Assigned to me~~',
'Menu:Incident:MyIncidents+' => 'Incidents assigned to me (as an Agent)~~',
'Menu:Incident:MySupportIncidents' => 'Reported by me~~',
'Menu:Incident:MySupportIncidents+' => 'Non closed incidents where I am the caller~~',
'Menu:Incident:EscalatedIncidents' => 'Under escalation~~',
'Menu:Incident:EscalatedIncidents+' => 'Incident which are under escalation, by status or hot flag~~',
'Menu:Incident:OpenIncidents' => 'Open~~',
'Menu:Incident:OpenIncidents+' => 'All incidents that are not closed~~',
'UI-IncidentManagementOverview-IncidentByPriority-last-14-days' => 'Last 14 days incident per priority~~',
'UI-IncidentManagementOverview-Last-14-days' => 'Last 14 days number of incidents~~',
'UI-IncidentManagementOverview-OpenIncidentByStatus' => 'Open incidents by status~~',

View File

@@ -19,14 +19,16 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Menu:NewIncident+' => 'Create a new incident ticket~~',
'Menu:SearchIncidents' => 'Search for incidents~~',
'Menu:SearchIncidents+' => 'Search for incident tickets~~',
'Menu:Incident:Shortcuts' => 'Shortcuts~~',
'Menu:Incident:Shortcuts' => 'Incidents~~',
'Menu:Incident:Shortcuts+' => '~~',
'Menu:Incident:MyIncidents' => 'Incidents assigned to me~~',
'Menu:Incident:MyIncidents+' => 'Incidents assigned to me (as Agent)~~',
'Menu:Incident:EscalatedIncidents' => 'Escalated incidents~~',
'Menu:Incident:EscalatedIncidents+' => '',
'Menu:Incident:OpenIncidents' => 'All open incidents~~',
'Menu:Incident:OpenIncidents+' => '',
'Menu:Incident:MyIncidents' => 'Assigned to me~~',
'Menu:Incident:MyIncidents+' => 'Incidents assigned to me (as an Agent)~~',
'Menu:Incident:MySupportIncidents' => 'Reported by me~~',
'Menu:Incident:MySupportIncidents+' => 'Non closed incidents where I am the caller~~',
'Menu:Incident:EscalatedIncidents' => 'Under escalation~~',
'Menu:Incident:EscalatedIncidents+' => 'Incident which are under escalation, by status or hot flag~~',
'Menu:Incident:OpenIncidents' => 'Open~~',
'Menu:Incident:OpenIncidents+' => 'All incidents that are not closed~~',
'UI-IncidentManagementOverview-IncidentByPriority-last-14-days' => 'Last 14 days incident per priority~~',
'UI-IncidentManagementOverview-Last-14-days' => 'Last 14 days number of incidents~~',
'UI-IncidentManagementOverview-OpenIncidentByStatus' => 'Open incidents by status~~',

View File

@@ -35,6 +35,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Menu:Incident:Shortcuts+' => '',
'Menu:Incident:MyIncidents' => '分配给我的事件',
'Menu:Incident:MyIncidents+' => '分配给我的事件',
'Menu:Incident:MySupportIncidents' => 'Reported by me~~',
'Menu:Incident:MySupportIncidents+' => 'Non closed incidents where I am the caller~~',
'Menu:Incident:EscalatedIncidents' => '已升级的事件',
'Menu:Incident:EscalatedIncidents+' => '已升级的事件',
'Menu:Incident:OpenIncidents' => '所有打开的事件',

View File

@@ -99,7 +99,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [
Dict::Add('CS CZ', 'Czech', 'Čeština', [
'Menu:ProblemManagement' => 'Správa problémů',
'Menu:ProblemManagement+' => 'Správa problémů',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Odkazy',
'Menu:NewError' => 'Nová známá chyba',
'Menu:NewError+' => 'Vytvoření nové známé chyby',

View File

@@ -98,7 +98,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
Dict::Add('DA DA', 'Danish', 'Dansk', [
'Menu:ProblemManagement' => 'Problem Management',
'Menu:ProblemManagement+' => 'Problem Management',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Genvej',
'Menu:NewError' => 'Ny kendt fejl',
'Menu:NewError+' => '',

View File

@@ -98,7 +98,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Menu:ProblemManagement' => 'Problem Management',
'Menu:ProblemManagement+' => 'Problem Management',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Shortcuts',
'Menu:NewError' => 'Neuer Known Error',
'Menu:NewError+' => 'Neuen Known Error dokumentieren',

View File

@@ -138,7 +138,7 @@ Dict::Add('EN US', 'English', 'English', [
Dict::Add('EN US', 'English', 'English', [
'Menu:ProblemManagement' => 'Problem Management',
'Menu:ProblemManagement+' => 'Problem Management',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload',
'Menu:Problem:Shortcuts' => 'Shortcuts',
'Menu:NewError' => 'New known error',
'Menu:NewError+' => 'Creation of a new known error',

View File

@@ -138,7 +138,7 @@ Dict::Add('EN GB', 'British English', 'British English', [
Dict::Add('EN GB', 'British English', 'British English', [
'Menu:ProblemManagement' => 'Problem Management',
'Menu:ProblemManagement+' => 'Problem Management',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Shortcuts',
'Menu:NewError' => 'New known error',
'Menu:NewError+' => 'Creation of a new known error',

View File

@@ -95,7 +95,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
'Menu:ProblemManagement' => 'Administración de Problemas',
'Menu:ProblemManagement+' => 'GestAdministraciónión de problemas',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Acceso Rápido',
'Menu:NewError' => 'Nuevo Error Conocido',
'Menu:NewError+' => 'Nuevo Error Conocido',

View File

@@ -97,7 +97,7 @@ Dict::Add('FR FR', 'French', 'Français', [
Dict::Add('FR FR', 'French', 'Français', [
'Menu:ProblemManagement' => 'Gestion des problèmes',
'Menu:ProblemManagement+' => 'Gestion des problèmes',
'Menu:ProblemManagement+' => 'Un processus ITIL qui identifie la cause des incidents répétitifs, documente les Erreurs connues et les FAQs, afin de réduire la charge de travail du heldesk',
'Menu:Problem:Shortcuts' => 'Raccourcis',
'Menu:NewError' => 'Nouvelle erreur connue',
'Menu:NewError+' => 'Créer une erreur connue',

View File

@@ -97,7 +97,7 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [
Dict::Add('HU HU', 'Hungarian', 'Magyar', [
'Menu:ProblemManagement' => 'Problémakezelés',
'Menu:ProblemManagement+' => '',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Gyorsgomb',
'Menu:NewError' => 'Új ismert hiba',
'Menu:NewError+' => '',

View File

@@ -97,7 +97,7 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [
Dict::Add('IT IT', 'Italian', 'Italiano', [
'Menu:ProblemManagement' => 'Gestione dei problemi',
'Menu:ProblemManagement+' => 'Gestione dei problemi',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Scorciatoia',
'Menu:NewError' => 'Nuovo errore conosciuto',
'Menu:NewError+' => 'Creazione di un nuovo errore conosciuto',

View File

@@ -97,7 +97,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
Dict::Add('JA JP', 'Japanese', '日本語', [
'Menu:ProblemManagement' => '問題管理',
'Menu:ProblemManagement+' => '問題管理',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'ショートカット',
'Menu:NewError' => '新規既知のエラー',
'Menu:NewError+' => '新規既知のエラーの作成',

View File

@@ -99,7 +99,7 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Menu:ProblemManagement' => 'Probleem Management',
'Menu:ProblemManagement+' => 'Probleem Management',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Snelkoppelingen',
'Menu:NewError' => 'Nieuwe gekende fout',
'Menu:NewError+' => 'Maak een nieuwe gekende fout aan',

View File

@@ -97,7 +97,7 @@ Dict::Add('PL PL', 'Polish', 'Polski', [
Dict::Add('PL PL', 'Polish', 'Polski', [
'Menu:ProblemManagement' => 'Zarządzanie problemami',
'Menu:ProblemManagement+' => 'Zarządzanie problemami',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Skróty',
'Menu:NewError' => 'Nowy znany błąd',
'Menu:NewError+' => 'Utworzenie nowego znanego błędu',

View File

@@ -97,7 +97,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
'Menu:ProblemManagement' => 'Gerenciamento de Problemas',
'Menu:ProblemManagement+' => 'Lista de Gerenciamento de Problemas',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Atalhos',
'Menu:NewError' => 'Novo erro conhecido',
'Menu:NewError+' => '',

View File

@@ -98,7 +98,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Menu:ProblemManagement' => 'Управление проблемами',
'Menu:ProblemManagement+' => 'Управление проблемами',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Ярлыки',
'Menu:NewError' => 'Новая известная ошибка',
'Menu:NewError+' => 'Создать новую известную ошибку',

View File

@@ -97,7 +97,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Menu:ProblemManagement' => 'Problem Management~~',
'Menu:ProblemManagement+' => 'Problem Management~~',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Shortcuts~~',
'Menu:NewError' => 'New known error~~',
'Menu:NewError+' => 'Creation of a new known error~~',

View File

@@ -98,7 +98,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Menu:ProblemManagement' => 'Problem Yönetimi',
'Menu:ProblemManagement+' => 'Problem Yönetimi',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => 'Kısayollar',
'Menu:NewError' => 'Yeni bilinen hata',
'Menu:NewError+' => 'Yeni bilinen hata yatarımı',

View File

@@ -138,7 +138,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Menu:ProblemManagement' => '问题管理',
'Menu:ProblemManagement+' => '问题管理',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Shortcuts' => '快捷方式',
'Menu:NewError' => '新建已知问题',
'Menu:NewError+' => '新建已知问题',

View File

@@ -14,18 +14,18 @@
*/
Dict::Add('CS CZ', 'Czech', 'Čeština', [
'Menu:ProblemManagement' => 'Správa problémů',
'Menu:ProblemManagement+' => 'Správa problémů',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Overview' => 'Přehled',
'Menu:Problem:Overview+' => 'Přehled',
'Menu:NewProblem' => 'Nový problém',
'Menu:NewProblem+' => 'Nový problém',
'Menu:NewProblem+' => 'Create a new problem ticket~~',
'Menu:SearchProblems' => 'Hledat problémy',
'Menu:SearchProblems+' => 'Hledat problémy',
'Menu:Problem:Shortcuts' => 'Odkazy',
'Menu:Problem:MyProblems' => 'Mé problémy',
'Menu:Problem:MyProblems+' => 'Mé problémy',
'Menu:Problem:MyProblems+' => 'Problems assigned to me which are neither resolved nor closed~~',
'Menu:Problem:OpenProblems' => 'Všechny otevřené problémy',
'Menu:Problem:OpenProblems+' => 'Všechny otevřené problémy',
'Menu:Problem:OpenProblems+' => 'All problem tickets which are not closed~~',
'UI-ProblemManagementOverview-ProblemByService' => 'Problémy podle služby',
'UI-ProblemManagementOverview-ProblemByService+' => 'Problémy podle služby',
'UI-ProblemManagementOverview-ProblemByPriority' => 'Problémy podle priority',

View File

@@ -13,18 +13,18 @@
*/
Dict::Add('DA DA', 'Danish', 'Dansk', [
'Menu:ProblemManagement' => 'Problem Management',
'Menu:ProblemManagement+' => 'Problem Management',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Overview' => 'Oversigt',
'Menu:Problem:Overview+' => 'Oversigt',
'Menu:NewProblem' => 'Nyt Problem',
'Menu:NewProblem+' => 'Nyt Problem',
'Menu:NewProblem+' => 'Create a new problem ticket~~',
'Menu:SearchProblems' => 'Søg efter problem',
'Menu:SearchProblems+' => 'Søg efter problem',
'Menu:Problem:Shortcuts' => 'Genvej',
'Menu:Problem:MyProblems' => 'Mine Problemer',
'Menu:Problem:MyProblems+' => 'Mine Problemer',
'Menu:Problem:MyProblems+' => 'Problems assigned to me which are neither resolved nor closed~~',
'Menu:Problem:OpenProblems' => 'Alle uløste problemer',
'Menu:Problem:OpenProblems+' => 'Alle uløste problemer',
'Menu:Problem:OpenProblems+' => 'All problem tickets which are not closed~~',
'UI-ProblemManagementOverview-ProblemByService' => 'Problemer efter ydelse',
'UI-ProblemManagementOverview-ProblemByService+' => 'Problemer efter ydelse',
'UI-ProblemManagementOverview-ProblemByPriority' => 'Problemer efter prioritet',

View File

@@ -13,16 +13,16 @@
*/
Dict::Add('DE DE', 'German', 'Deutsch', [
'Menu:ProblemManagement' => 'Problem Management',
'Menu:ProblemManagement+' => '',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Overview' => 'Übersicht',
'Menu:Problem:Overview+' => '',
'Menu:NewProblem' => 'Neues Problem',
'Menu:NewProblem+' => '',
'Menu:NewProblem+' => 'Create a new problem ticket~~',
'Menu:SearchProblems' => 'Nach Problemen suchen',
'Menu:SearchProblems+' => '',
'Menu:Problem:Shortcuts' => 'Shortcuts',
'Menu:Problem:MyProblems' => 'Meine Probleme',
'Menu:Problem:MyProblems+' => '',
'Menu:Problem:MyProblems+' => 'Problems assigned to me which are neither resolved nor closed~~',
'Menu:Problem:OpenProblems' => 'Alle offenen Probleme',
'Menu:Problem:OpenProblems+' => 'Alle offenen (noch nicht geschlossenen) Probleme',
'UI-ProblemManagementOverview-ProblemByService' => 'Probleme nach Service',

View File

@@ -49,18 +49,18 @@
Dict::Add('EN US', 'English', 'English', [
'Menu:ProblemManagement' => 'Problem management',
'Menu:ProblemManagement+' => 'Problem management',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload',
'Menu:Problem:Overview' => 'Overview',
'Menu:Problem:Overview+' => 'Overview',
'Menu:NewProblem' => 'New problem',
'Menu:NewProblem+' => 'New problem',
'Menu:NewProblem+' => 'Create a new problem ticket',
'Menu:SearchProblems' => 'Search for problems',
'Menu:SearchProblems+' => 'Search for problems',
'Menu:SearchProblems+' => 'Search for problems tickets',
'Menu:Problem:Shortcuts' => 'Shortcuts',
'Menu:Problem:MyProblems' => 'My problems',
'Menu:Problem:MyProblems+' => 'My problems',
'Menu:Problem:MyProblems+' => 'Problems assigned to me which are neither resolved nor closed',
'Menu:Problem:OpenProblems' => 'All open problems',
'Menu:Problem:OpenProblems+' => 'All open problems',
'Menu:Problem:OpenProblems+' => 'All problem tickets which are not closed',
'UI-ProblemManagementOverview-ProblemByService' => 'Problems by service',
'UI-ProblemManagementOverview-ProblemByService+' => 'Problems by service',
'UI-ProblemManagementOverview-ProblemByPriority' => 'Problems by priority',

View File

@@ -49,18 +49,18 @@
Dict::Add('EN GB', 'British English', 'British English', [
'Menu:ProblemManagement' => 'Problem management',
'Menu:ProblemManagement+' => 'Problem management',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Overview' => 'Overview',
'Menu:Problem:Overview+' => 'Overview',
'Menu:NewProblem' => 'New problem',
'Menu:NewProblem+' => 'New problem',
'Menu:NewProblem+' => 'Create a new problem ticket~~',
'Menu:SearchProblems' => 'Search for problems',
'Menu:SearchProblems+' => 'Search for problems',
'Menu:SearchProblems+' => 'Search for problems tickets',
'Menu:Problem:Shortcuts' => 'Shortcuts',
'Menu:Problem:MyProblems' => 'My problems',
'Menu:Problem:MyProblems+' => 'My problems',
'Menu:Problem:MyProblems+' => 'Problems assigned to me which are neither resolved nor closed',
'Menu:Problem:OpenProblems' => 'All open problems',
'Menu:Problem:OpenProblems+' => 'All open problems',
'Menu:Problem:OpenProblems+' => 'All problem tickets which are not closed',
'UI-ProblemManagementOverview-ProblemByService' => 'Problems by service',
'UI-ProblemManagementOverview-ProblemByService+' => 'Problems by service',
'UI-ProblemManagementOverview-ProblemByPriority' => 'Problems by priority',

View File

@@ -10,18 +10,18 @@
*/
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
'Menu:ProblemManagement' => 'Administración de Problemas',
'Menu:ProblemManagement+' => 'Administración de Problemas',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Overview' => 'Resumen de problemas',
'Menu:Problem:Overview+' => 'Resumen de problemas',
'Menu:NewProblem' => 'Nuevo problema',
'Menu:NewProblem+' => 'Nuevo problema',
'Menu:NewProblem+' => 'Create a new problem ticket~~',
'Menu:SearchProblems' => 'Búsqueda de problemas',
'Menu:SearchProblems+' => 'Búsqueda de problemas',
'Menu:Problem:Shortcuts' => 'Acceso rápido',
'Menu:Problem:MyProblems' => 'Problemas asignados a Mí',
'Menu:Problem:MyProblems+' => 'Problemas asignados a Mí',
'Menu:Problem:MyProblems+' => 'Problems assigned to me which are neither resolved nor closed~~',
'Menu:Problem:OpenProblems' => 'Problemas abiertos',
'Menu:Problem:OpenProblems+' => 'Problemas abiertos',
'Menu:Problem:OpenProblems+' => 'All problem tickets which are not closed~~',
'UI-ProblemManagementOverview-ProblemByService' => 'Problemas por Servicio',
'UI-ProblemManagementOverview-ProblemByService+' => 'Problemas por Servicio',
'UI-ProblemManagementOverview-ProblemByPriority' => 'Problemas por Prioridad',

View File

@@ -12,18 +12,18 @@
*/
Dict::Add('FR FR', 'French', 'Français', [
'Menu:ProblemManagement' => 'Gestion des problèmes',
'Menu:ProblemManagement+' => '',
'Menu:ProblemManagement+' => 'Un processus ITIL qui identifie la cause des incidents répétitifs, documente les Erreurs connues et les FAQs, afin de réduire la charge de travail du heldesk',
'Menu:Problem:Overview' => 'Vue d\'ensemble',
'Menu:Problem:Overview+' => '',
'Menu:NewProblem' => 'Nouveau problème',
'Menu:NewProblem+' => '',
'Menu:NewProblem+' => 'Créer un ticket de problème',
'Menu:SearchProblems' => 'Rechercher des problèmes',
'Menu:SearchProblems+' => '',
'Menu:SearchProblems+' => 'Faire une recherche parmi les tickets de problème existants',
'Menu:Problem:Shortcuts' => 'Raccourcis',
'Menu:Problem:MyProblems' => 'Mes problèmes',
'Menu:Problem:MyProblems+' => '',
'Menu:Problem:MyProblems+' => 'Les tickets de problème ni fermés ni résolus qui me sont assignés',
'Menu:Problem:OpenProblems' => 'Problèmes ouverts',
'Menu:Problem:OpenProblems+' => '',
'Menu:Problem:OpenProblems+' => 'Tous les tickets de problème non fermés',
'UI-ProblemManagementOverview-ProblemByService' => 'Problèmes par service',
'UI-ProblemManagementOverview-ProblemByService+' => '',
'UI-ProblemManagementOverview-ProblemByPriority' => 'Problèmes par priorité',

View File

@@ -12,18 +12,18 @@
*/
Dict::Add('HU HU', 'Hungarian', 'Magyar', [
'Menu:ProblemManagement' => 'Problémakezelés',
'Menu:ProblemManagement+' => '',
'Menu:ProblemManagement+' => 'An ITIL process that identifies root causes of incidents, documents Known Errors and FAQs, in order to reduce helpdesk workload~~',
'Menu:Problem:Overview' => 'Áttekintő',
'Menu:Problem:Overview+' => '',
'Menu:NewProblem' => 'Új probléma',
'Menu:NewProblem+' => '',
'Menu:NewProblem+' => 'Create a new problem ticket~~',
'Menu:SearchProblems' => 'Problémák keresése',
'Menu:SearchProblems+' => '',
'Menu:Problem:Shortcuts' => 'Gyorsgombok',
'Menu:Problem:MyProblems' => 'Saját problémák',
'Menu:Problem:MyProblems+' => '',
'Menu:Problem:MyProblems+' => 'Problems assigned to me which are neither resolved nor closed~~',
'Menu:Problem:OpenProblems' => 'Nyitott problémák',
'Menu:Problem:OpenProblems+' => '',
'Menu:Problem:OpenProblems+' => 'All problem tickets which are not closed~~',
'UI-ProblemManagementOverview-ProblemByService' => 'Problémák szolgáltatásonként',
'UI-ProblemManagementOverview-ProblemByService+' => '',
'UI-ProblemManagementOverview-ProblemByPriority' => 'Problémák prioritás szerint',

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