Compare commits

..

2 Commits

Author SHA1 Message Date
Molkobain
eaee52ff98 N°6644 - Tests: Restore proper CI branch, unit tests run and fix a typo 2025-12-17 11:00:41 +01:00
Molkobain
739b24bd02 N°6644 - Tests: Add static analysis for PHP 2025-12-17 10:40:16 +01:00
1230 changed files with 10077 additions and 16058 deletions

View File

@@ -26,23 +26,13 @@ jobs:
fi
- name: Add internal tag if member of the organization
- name: Add internal tag if member
if: env.is_member == 'true'
run: |
curl -X POST -H "Authorization: token ${{ secrets.PR_AUTOMATICALLY_ADD_TO_PROJECT }}" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/Combodo/iTop/issues/${{ github.event.pull_request.number }}/labels \
-d '{"labels":["internal"]}'
- name: Set PR author as assignee if member of the organization
if: env.is_member == 'true'
run: |
curl -L \
-X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.PR_AUTOMATICALLY_ADD_TO_PROJECT }}" \
https://api.github.com/repos/Combodo/iTop/issues/${{ github.event.pull_request.number }}/assignees \
-d '{"assignees":["${{ github.event.pull_request.user.login }}"]}'
env:
is_member: ${{ env.is_member }}
@@ -50,4 +40,4 @@ jobs:
uses: actions/add-to-project@v1.0.2
with:
project-url: ${{ env.project_url }}
github-token: ${{ secrets.PR_AUTOMATICALLY_ADD_TO_PROJECT }}
github-token: ${{ secrets.PR_AUTOMATICALLY_ADD_TO_PROJECT }}

3
.gitignore vendored
View File

@@ -58,9 +58,6 @@ tests/*/vendor/*
/tests/php-unit-tests/phpunit.xml
/tests/php-unit-tests/postbuild_integration.xml
# PHP CS Fixer: Cache file
/.php-cs-fixer.cache
# Jetbrains
/.idea/**

View File

@@ -6037,7 +6037,7 @@ JS
* @return void
* @since 3.1.0
*/
final public function AddAttributeFlags(string $sAttCode, int $iFlags, string $sTargetState = '', ?string $sReason = null): void
final public function AddAttributeFlags(string $sAttCode, int $iFlags, string $sTargetState = '', string $sReason = null): void
{
if (!isset($this->aAttributesFlags[$sTargetState])) {
$this->aAttributesFlags[$sTargetState] = [];
@@ -6060,7 +6060,7 @@ JS
* @return void
* @since 3.1.0
*/
final public function ForceAttributeFlags(string $sAttCode, int $iFlags, string $sTargetState = '', ?string $sReason = null): void
final public function ForceAttributeFlags(string $sAttCode, int $iFlags, string $sTargetState = '', string $sReason = null): void
{
if (!isset($this->aAttributesFlags[$sTargetState])) {
$this->aAttributesFlags[$sTargetState] = [];
@@ -6101,7 +6101,7 @@ JS
* @return void
* @since 3.1.0
*/
final public function AddInitialAttributeFlags(string $sAttCode, int $iFlags, ?string $sReason = null)
final public function AddInitialAttributeFlags(string $sAttCode, int $iFlags, string $sReason = null)
{
if (!isset($this->aInitialAttributesFlags)) {
$this->aInitialAttributesFlags = [];
@@ -6123,7 +6123,7 @@ JS
* @return void
* @since 3.1.0
*/
final public function ForceInitialAttributeFlags(string $sAttCode, int $iFlags, ?string $sReason = null)
final public function ForceInitialAttributeFlags(string $sAttCode, int $iFlags, string $sReason = null)
{
if (!isset($this->aInitialAttributesFlags)) {
$this->aInitialAttributesFlags = [];

View File

@@ -1026,7 +1026,7 @@ EOF
var dashboard = $('.ibo-dashboard#$sDivId')
dashboard.block();
$.post(GetAbsoluteUrlAppRoot()+'pages/ajax.render.php',
{ operation: 'toggle_dashboard', dashboard_id: '$sId', file: '$sFile', extra_params: $sExtraParams, reload_url: $sReloadURL },
{ operation: 'toggle_dashboard', dashboard_id: '$sId', file: '$sFile', extra_params: $sExtraParams, reload_url: '$sReloadURL' },
function(data) {
dashboard.html(data);
dashboard.unblock();

View File

@@ -1,10 +0,0 @@
<?php
/**
* @copyright Copyright (C) 2010-2026 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
class ForgotPasswordApplicationException extends Exception
{
}

View File

@@ -1,10 +0,0 @@
<?php
/**
* @copyright Copyright (C) 2010-2026 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
class ForgotPasswordUserInputException extends Exception
{
}

View File

@@ -243,12 +243,15 @@ class LoginTwigRenderer
public function GetDefaultVars()
{
$sVersionShort = Dict::Format('UI:iTopVersion:Short', ITOP_APPLICATION, ITOP_VERSION);
$sIconUrl = Utils::GetConfig()->Get('app_icon_url');
$sDisplayIcon = Branding::GetLoginLogoAbsoluteUrl();
$aVars = [
'sAppRootUrl' => utils::GetAbsoluteUrlAppRoot(),
'aPluginFormData' => $this->GetPluginFormData(),
'sItopVersion' => ITOP_VERSION,
'sVersionShort' => $sVersionShort,
'sIconUrl' => $sIconUrl,
'sDisplayIcon' => $sDisplayIcon,
];

View File

@@ -221,15 +221,15 @@ class LoginWebPage extends NiceWebPage
if ($oUser != null) {
if (!MetaModel::IsValidAttCode(get_class($oUser), 'reset_pwd_token')) {
throw new ForgotPasswordUserInputException('External accounts do not allow password reset');
throw new Exception(Dict::S('UI:ResetPwd-Error-NotPossible'));
}
if (!$oUser->CanChangePassword()) {
throw new ForgotPasswordUserInputException('The account does not allow password reset');
throw new Exception(Dict::S('UI:ResetPwd-Error-FixedPwd'));
}
$sTo = $oUser->GetResetPasswordEmail(); // throws Exceptions if not allowed
if ($sTo == '') {
throw new ForgotPasswordUserInputException('Missing email address for this account');
throw new Exception(Dict::S('UI:ResetPwd-Error-NoEmail'));
}
// This token allows the user to change the password without knowing the previous one
@@ -255,21 +255,17 @@ class LoginWebPage extends NiceWebPage
case EMAIL_SEND_ERROR:
default:
throw new ForgotPasswordApplicationException('Failed to send the password reset email for '.$oUser->Get('friendlyname').': '.implode(', ', $aIssues));
IssueLog::Error('Failed to send the email with the NEW password for '.$oUser->Get('friendlyname').': '.implode(', ', $aIssues));
throw new Exception(Dict::S('UI:ResetPwd-Error-Send'));
}
}
} catch (ForgotPasswordApplicationException $e) {
IssueLog::Error('Failed to process the forgot password request for user "'.$sAuthUser.'" [reason='.get_class($e).']: '.$e->getMessage());
} catch (ForgotPasswordUserInputException $e) {
IssueLog::Info('Failed to process the forgot password request for user "'.$sAuthUser.'" [reason='.get_class($e).']: '.$e->getMessage());
} catch (\Throwable $e) {
IssueLog::Error('Unexpected error while processing the forgot password request for user "'.$sAuthUser.'": '.$e->getMessage());
$oTwigContext = new LoginTwigRenderer();
$aVars = $oTwigContext->GetDefaultVars();
$oTwigContext->Render($this, 'forgotpwdsent.html.twig', $aVars);
} catch (Exception $e) {
$this->DisplayForgotPwdForm(true, $e->getMessage());
}
$oTwigContext = new LoginTwigRenderer();
$aVars = $oTwigContext->GetDefaultVars();
$oTwigContext->Render($this, 'forgotpwdsent.html.twig', $aVars);
}
public function DisplayResetPwdForm($sErrorMessage = null)

View File

@@ -34,7 +34,7 @@ interface iNewsroomProvider
* @param User $oUser The user for who to check if the provider is applicable.
* return bool
*/
public function IsApplicable(?User $oUser = null);
public function IsApplicable(User $oUser = null);
/**
* The human readable (localized) label for this provider
@@ -139,7 +139,7 @@ abstract class NewsroomProviderBase implements iNewsroomProvider
*/
abstract public function GetViewAllURL();
public function IsApplicable(?User $oUser = null)
public function IsApplicable(User $oUser = null)
{
return false;
}

View File

@@ -151,7 +151,7 @@ abstract class Query extends cmdbAbstractObject
* @return string|null
* @since 3.1.0
*/
abstract public function GetExportUrl(?array $aValues = null): ?string;
abstract public function GetExportUrl(array $aValues = null): ?string;
/**
* Update last export information.
@@ -227,7 +227,7 @@ class QueryOQL extends Query
}
/** @inheritdoc */
public function GetExportUrl(?array $aValues = null): ?string
public function GetExportUrl(array $aValues = null): ?string
{
try {
// retrieve attributes

View File

@@ -181,9 +181,6 @@ class utils
protected static function LoadParamFile($sParamFile)
{
if (utils::RealPath($sParamFile, APPROOT) !== false) {
throw new Exception("File '".utils::HtmlEntities($sParamFile)."' should be outside iTop");
}
if (!file_exists($sParamFile)) {
throw new Exception("Could not find the parameter file: '".utils::HtmlEntities($sParamFile)."'");
}
@@ -1287,7 +1284,7 @@ class utils
* @throws \CoreException
* @throws \Exception
*/
public static function ExecITopScript(string $sScriptName, array $aArguments, ?string $sAuthUser = null, ?string $sAuthPwd = null)
public static function ExecITopScript(string $sScriptName, array $aArguments, string $sAuthUser = null, string $sAuthPwd = null)
{
$aDisabled = explode(', ', ini_get('disable_functions'));
if (in_array('exec', $aDisabled)) {
@@ -1377,7 +1374,7 @@ class utils
* @return string A path to a folder into which any module can store cache data
* The corresponding folder is created or cleaned upon code compilation
*/
public static function GetCachePath(?string $sEnvironment = null): string
public static function GetCachePath(string $sEnvironment = null): string
{
if (is_null($sEnvironment)) {
$sEnvironment = MetaModel::GetEnvironment();

View File

@@ -4,7 +4,7 @@
"type": "project",
"license": "AGPL-3.0-only",
"require": {
"php": ">=8.1.0 <8.5.0",
"php": ">=8.1.0 <8.4.0",
"ext-ctype": "*",
"ext-dom": "*",
"ext-gd": "*",
@@ -12,7 +12,8 @@
"ext-json": "*",
"ext-mysqli": "*",
"ext-soap": "*",
"apereo/phpcas": "dev-master",
"apereo/phpcas": "~1.6.0",
"firebase/php-jwt": "^6.4.0",
"guzzlehttp/guzzle": "^7.5.1",
"league/oauth2-google": "^4.0.1",
"nikic/php-parser": "^4.14.0",
@@ -39,12 +40,6 @@
"symfony/stopwatch": "~6.4.0",
"symfony/web-profiler-bundle": "~6.4.0"
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/EsupPortail/phpCAS"
}
],
"suggest": {
"ext-libsodium": "Required to use the AttributeEncryptedString.",
"ext-openssl": "Can be used as a polyfill if libsodium is not installed",

1053
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -912,7 +912,7 @@ abstract class AttributeDefinition
return call_user_func($sComputeFunc);
}
abstract public function GetDefaultValue(?DBObject $oHostObject = null);
abstract public function GetDefaultValue(DBObject $oHostObject = null);
//
// To be overloaded in subclasses
@@ -1476,7 +1476,7 @@ class AttributeDashboard extends AttributeDefinition
return "";
}
public function GetDefaultValue(?DBObject $oHostObject = null)
public function GetDefaultValue(DBObject $oHostObject = null)
{
return null;
}
@@ -1622,7 +1622,7 @@ class AttributeLinkedSet extends AttributeDefinition
* @throws \CoreException
* @throws \CoreWarning
*/
public function GetDefaultValue(?DBObject $oHostObject = null)
public function GetDefaultValue(DBObject $oHostObject = null)
{
if ($oHostObject === null) {
return null;
@@ -2639,7 +2639,7 @@ class AttributeDBFieldVoid extends AttributeDefinition
return $this->Get("sql");
}
public function GetDefaultValue(?DBObject $oHostObject = null)
public function GetDefaultValue(DBObject $oHostObject = null)
{
return $this->MakeRealValue("", $oHostObject);
}
@@ -2728,7 +2728,7 @@ class AttributeDBField extends AttributeDBFieldVoid
return array_merge(parent::ListExpectedParams(), ["default_value", "is_null_allowed"]);
}
public function GetDefaultValue(?DBObject $oHostObject = null)
public function GetDefaultValue(DBObject $oHostObject = null)
{
return $this->MakeRealValue($this->Get("default_value"), $oHostObject);
}
@@ -2917,7 +2917,7 @@ class AttributeObjectKey extends AttributeDBFieldVoid
return "INT(11)".($bFullSpec ? " DEFAULT 0" : "");
}
public function GetDefaultValue(?DBObject $oHostObject = null)
public function GetDefaultValue(DBObject $oHostObject = null)
{
return 0;
}
@@ -3649,7 +3649,7 @@ class AttributeClass extends AttributeString
parent::__construct($sCode, $aParams);
}
public function GetDefaultValue(?DBObject $oHostObject = null)
public function GetDefaultValue(DBObject $oHostObject = null)
{
$sDefault = parent::GetDefaultValue($oHostObject);
if (!$this->IsNullAllowed() && $this->IsNull($sDefault)) {
@@ -3843,7 +3843,7 @@ class AttributeFinalClass extends AttributeString
$this->m_sValue = $sValue;
}
public function GetDefaultValue(?DBObject $oHostObject = null)
public function GetDefaultValue(DBObject $oHostObject = null)
{
return $this->m_sValue;
}
@@ -4259,9 +4259,6 @@ class AttributeText extends AttributeString
public static function RenderWikiHtml($sText, $bWikiOnly = false)
{
// N°8681 - Ensure to have a string value
$sText = $sText ?? '';
if (!$bWikiOnly) {
$sPattern = '/'.str_replace('/', '\/', utils::GetConfig()->Get('url_validation_pattern')).'/i';
if (preg_match_all(
@@ -4730,7 +4727,7 @@ class AttributeCaseLog extends AttributeLongText
}
}
public function GetDefaultValue(?DBObject $oHostObject = null)
public function GetDefaultValue(DBObject $oHostObject = null)
{
return new ormCaseLog();
}
@@ -6128,7 +6125,7 @@ class AttributeDateTime extends AttributeDBField
return $iUnixSeconds;
}
public function GetDefaultValue(?DBObject $oHostObject = null)
public function GetDefaultValue(DBObject $oHostObject = null)
{
$sDefaultValue = $this->Get('default_value');
if (utils::IsNotNullOrEmptyString($sDefaultValue)) {
@@ -6812,7 +6809,7 @@ class AttributeExternalKey extends AttributeDBFieldVoid
return $this->GetOptional('display_style', 'select');
}
public function GetDefaultValue(?DBObject $oHostObject = null)
public function GetDefaultValue(DBObject $oHostObject = null)
{
return 0;
}
@@ -7547,7 +7544,7 @@ class AttributeExternalField extends AttributeDefinition
return $oExtAttDef->GetSQLExpr();
}
public function GetDefaultValue(?DBObject $oHostObject = null)
public function GetDefaultValue(DBObject $oHostObject = null)
{
$oExtAttDef = $this->GetExtAttDef();
@@ -7910,12 +7907,12 @@ class AttributeBlob extends AttributeDefinition
return true;
}
public function GetDefaultValue(?DBObject $oHostObject = null)
public function GetDefaultValue(DBObject $oHostObject = null)
{
return new ormDocument('', '', '');
}
public function IsNullAllowed(?DBObject $oHostObject = null)
public function IsNullAllowed(DBObject $oHostObject = null)
{
return $this->GetOptional("is_null_allowed", false);
}
@@ -8295,7 +8292,7 @@ class AttributeImage extends AttributeBlob
return $oDoc;
}
public function GetDefaultValue(?DBObject $oHostObject = null)
public function GetDefaultValue(DBObject $oHostObject = null)
{
return new ormDocument('', '', '');
}
@@ -8481,7 +8478,7 @@ class AttributeStopWatch extends AttributeDefinition
return true;
}
public function GetDefaultValue(?DBObject $oHostObject = null)
public function GetDefaultValue(DBObject $oHostObject = null)
{
return $this->NewStopWatch();
}
@@ -9348,7 +9345,7 @@ class AttributeSubItem extends AttributeDefinition
return false;
}
public function GetDefaultValue(?DBObject $oHostObject = null)
public function GetDefaultValue(DBObject $oHostObject = null)
{
return null;
}
@@ -9566,7 +9563,7 @@ class AttributeOneWayPassword extends AttributeDefinition implements iAttributeN
return true;
}
public function GetDefaultValue(?DBObject $oHostObject = null)
public function GetDefaultValue(DBObject $oHostObject = null)
{
return "";
}
@@ -10146,7 +10143,7 @@ abstract class AttributeSet extends AttributeDBFieldVoid
return true;
}
public function GetDefaultValue(?DBObject $oHostObject = null)
public function GetDefaultValue(DBObject $oHostObject = null)
{
return null;
}
@@ -11359,7 +11356,7 @@ class AttributeTagSet extends AttributeSet
return new ormTagSet(MetaModel::GetAttributeOrigin($this->GetHostClass(), $this->GetCode()), $this->GetCode(), $this->GetMaxItems());
}
public function GetDefaultValue(?DBObject $oHostObject = null)
public function GetDefaultValue(DBObject $oHostObject = null)
{
$oTagSet = new ormTagSet(MetaModel::GetAttributeOrigin($this->GetHostClass(), $this->GetCode()), $this->GetCode(), $this->GetMaxItems());
$oTagSet->SetValues([]);
@@ -11867,7 +11864,7 @@ class AttributeFriendlyName extends AttributeDefinition
$this->m_sValue = $sValue;
}
public function GetDefaultValue(?DBObject $oHostObject = null)
public function GetDefaultValue(DBObject $oHostObject = null)
{
return $this->m_sValue;
}
@@ -12030,7 +12027,7 @@ class AttributeRedundancySettings extends AttributeDBField
return 20;
}
public function GetDefaultValue(?DBObject $oHostObject = null)
public function GetDefaultValue(DBObject $oHostObject = null)
{
$sRet = 'disabled';
if ($this->Get('enabled')) {
@@ -12466,7 +12463,7 @@ class AttributeCustomFields extends AttributeDefinition
return false;
} // See ReadValue...
public function GetDefaultValue(?DBObject $oHostObject = null)
public function GetDefaultValue(DBObject $oHostObject = null)
{
return new ormCustomFieldsValue($oHostObject, $this->GetCode());
}
@@ -13053,7 +13050,7 @@ class AttributeObsolescenceFlag extends AttributeBoolean
return null;
}
public function GetDefaultValue(?DBObject $oHostObject = null)
public function GetDefaultValue(DBObject $oHostObject = null)
{
return $this->MakeRealValue(false, $oHostObject);
}

View File

@@ -199,7 +199,7 @@ class CellStatus_SearchIssue extends CellStatus_Issue
* @param null $sAllowedValues : used for additional message that provides allowed values $sAllowedValues for current class
* @param string|null $sAllowedValuesSearch : used to search all allowed values
*/
public function __construct($sSerializedSearch, $sReason, $sClass = null, $sAllowedValues = null, ?string $sAllowedValuesSearch = null)
public function __construct($sSerializedSearch, $sReason, $sClass = null, $sAllowedValues = null, string $sAllowedValuesSearch = null)
{
parent::__construct(null, null, $sReason);
$this->sSerializedSearch = $sSerializedSearch;
@@ -873,7 +873,7 @@ class BulkChange
return $aResults;
}
protected function CreateObject(&$aResult, $iRow, $aRowData, ?CMDBChange $oChange = null)
protected function CreateObject(&$aResult, $iRow, $aRowData, CMDBChange $oChange = null)
{
$oTargetObj = MetaModel::NewObject($this->m_sClass);
@@ -962,7 +962,7 @@ class BulkChange
* @throws \MySQLException
* @throws \MySQLHasGoneAwayException
*/
protected function UpdateObject(&$aResult, $iRow, $oTargetObj, $aRowData, ?CMDBChange $oChange = null)
protected function UpdateObject(&$aResult, $iRow, $oTargetObj, $aRowData, CMDBChange $oChange = null)
{
$aResult[$iRow] = $this->PrepareObject($oTargetObj, $aRowData, $aErrors);
@@ -1005,7 +1005,7 @@ class BulkChange
*
* @throws \BulkChangeException
*/
protected function UpdateMissingObject(&$aResult, $iRow, $oTargetObj, ?CMDBChange $oChange = null)
protected function UpdateMissingObject(&$aResult, $iRow, $oTargetObj, CMDBChange $oChange = null)
{
$aResult[$iRow] = $this->PrepareMissingObject($oTargetObj, $aErrors);
@@ -1040,7 +1040,7 @@ class BulkChange
}
}
public function Process(?CMDBChange $oChange = null)
public function Process(CMDBChange $oChange = null)
{
if ($oChange) {
CMDBObject::SetCurrentChange($oChange);

View File

@@ -2569,7 +2569,7 @@ abstract class DBObject implements iDisplay
*
* @see \RestUtils::FindObjectFromKey for the same check in the REST endpoint
*/
final public function CheckChangedExtKeysValues(?callable $oIsObjectLoadableCallback = null)
final public function CheckChangedExtKeysValues(callable $oIsObjectLoadableCallback = null)
{
if (is_null($oIsObjectLoadableCallback)) {
$oIsObjectLoadableCallback = function ($sClass, $sId) {
@@ -3729,7 +3729,7 @@ abstract class DBObject implements iDisplay
* @throws \MySQLException
* @throws \OQLException
*/
private function ActivateOnObjectUpdateTriggers(?DBObject $oObject, ?array $aAttributes = null): void
private function ActivateOnObjectUpdateTriggers(?DBObject $oObject, array $aAttributes = null): void
{
if (is_null($oObject)) {
return;

View File

@@ -724,7 +724,7 @@ abstract class DBSearch
*
* @throws OQLException
*/
public static function FromOQL($sQuery, $aParams = null, ?ModelReflection $oMetaModel = null)
public static function FromOQL($sQuery, $aParams = null, ModelReflection $oMetaModel = null)
{
if (empty($sQuery)) {
return null;

View File

@@ -59,7 +59,7 @@ class DBUnionSearch extends DBSearch
public function AllowAllData($bAllowAllData = true)
{
foreach ($this->aSearches as $oSearch) {
$oSearch->AllowAllData($bAllowAllData);
$oSearch->AllowAllData();
}
}

View File

@@ -453,7 +453,7 @@ class DesignElement extends \DOMElement
* @throws Exception
* @since 3.1.2 3.2.0 N°6974
*/
public static function _FindNode(DOMNode $oParent, DesignElement $oRefNode, ?string $sSearchId = null): ?DesignElement
public static function _FindNode(DOMNode $oParent, DesignElement $oRefNode, string $sSearchId = null): ?DesignElement
{
$oNodes = self::_FindNodes($oParent, $oRefNode, $sSearchId);
if ($oNodes instanceof DOMNodeList) {
@@ -477,7 +477,7 @@ class DesignElement extends \DOMElement
* @return \DOMNodeList|false|mixed
* @since 3.1.2 3.2.0 N°6974
*/
public static function _FindNodes(DOMNode $oParent, DesignElement $oRefNode, ?string $sSearchId = null)
public static function _FindNodes(DOMNode $oParent, DesignElement $oRefNode, string $sSearchId = null)
{
if ($oParent instanceof DOMDocument) {
$oDoc = $oParent->firstChild->ownerDocument;

View File

@@ -632,7 +632,7 @@ class DisplayableGroupNode extends DisplayableNode
$this->aObjects = [];
}
public function AddObject(?DBObject $oObj = null)
public function AddObject(DBObject $oObj = null)
{
if (is_object($oObj)) {
$sPrevClass = $this->GetObjectClass();

View File

@@ -266,9 +266,6 @@ class InlineImage extends DBObject
*/
public static function FixUrls($sHtml)
{
// N°8681 - Ensure to have a string value
$sHtml = $sHtml ?? '';
$aNeedles = [];
$aReplacements = [];
// Find img tags with an attribute data-img-id

View File

@@ -1,20 +1,18 @@
<?php
/**
* @copyright Copyright (C) 2010-2026 Combodo SAS
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
use Combodo\iTop\Application\EventRegister\ApplicationEvents;
use Combodo\iTop\Core\Kpi\KpiLogData;
use Combodo\iTop\Service\Events\EventService;
use Combodo\iTop\Service\Events\iEventServiceSetup;
use Combodo\iTop\Service\Module\ModuleService;
/**
* Measures operations duration, memory usage, etc. (and some other KPIs)
*/
class ExecutionKPI implements iEventServiceSetup
class ExecutionKPI
{
protected static $m_bEnabled_Duration = false;
protected static $m_bEnabled_Memory = false;
@@ -25,18 +23,15 @@ class ExecutionKPI implements iEventServiceSetup
protected static $m_aStats = []; // Recurrent operations
protected static $m_aExecData = []; // One shot operations
/** @var true */
private static bool $bMetamodelStarted = false;
/**
* @var array[ExecutionKPI]
*/
protected static $m_aExecutionStack = []; // embedded execution stats
private static ?float $fLastReportTime = null;
private static ?float $iLastReportMemory = null;
// For stats
protected $m_fStarted = null;
protected $m_fChildrenDuration = 0; // Count embedded
protected $m_iInitialMemory = null;
private static array $aBootstrapOperations = [];
public static function EnableDuration($iLevel)
{
if ($iLevel > 0) {
@@ -76,7 +71,6 @@ class ExecutionKPI implements iEventServiceSetup
return true;
}
}
return false;
}
@@ -103,7 +97,7 @@ class ExecutionKPI implements iEventServiceSetup
$sFor = self::$m_sAllowedUser == '*' ? 'EVERYBODY' : "'".trim(self::$m_sAllowedUser)."'";
$sSlowQueries = '';
if (self::$m_fSlowQueries > 0) {
$sSlowQueries = '. Slow Queries: '.self::$m_fSlowQueries.'s';
$sSlowQueries = ". Slow Queries: ".self::$m_fSlowQueries."s";
}
$aExtensions = [];
@@ -133,7 +127,7 @@ class ExecutionKPI implements iEventServiceSetup
$sRequest .= ' operation: '.$_POST['operation'];
}
$fStop = microtime(true);
$fStop = MyHelpers::getmicrotime();
if (($fStop - $fItopStarted) > self::$m_fSlowQueries) {
// Invoke extensions to log the KPI operation
/** @var \iKPILoggerExtension $oExtensionInstance */
@@ -157,17 +151,17 @@ class ExecutionKPI implements iEventServiceSetup
$sTableStyle = 'background-color: #ccc; margin: 10px;';
$sHtml = '<hr/>';
$sHtml = "<hr/>";
$sHtml .= "<div style=\"background-color: grey; padding: 10px;\">";
$sHtml .= "<h3><a name=\"".md5($sExecId)."\">KPIs</a> - $sRequest</h3>";
$oStarted = DateTime::createFromFormat('U.u', $fItopStarted);
$sHtml .= '<p>'.$oStarted->format('Y-m-d H:i:s.u').'</p>';
$sHtml .= '<p>log_kpi_user_id: '.UserRights::GetUserId().'</p>';
$sHtml .= '<div>';
$sHtml .= "<p>log_kpi_user_id: ".UserRights::GetUserId()."</p>";
$sHtml .= "<div>";
$sHtml .= "<table border=\"1\" style=\"$sTableStyle\">";
$sHtml .= '<thead>';
$sHtml .= ' <th>Operation</th><th>Begin</th><th>End</th><th>Duration</th><th>Memory start</th><th>Memory end</th><th>Memory peak</th>';
$sHtml .= '</thead>';
$sHtml .= "<thead>";
$sHtml .= " <th>Operation</th><th>Begin</th><th>End</th><th>Duration</th><th>Memory start</th><th>Memory end</th><th>Memory peak</th>";
$sHtml .= "</thead>";
foreach (self::$m_aExecData as $aOpStats) {
$sOperation = $aOpStats['op'];
$sBegin = round($aOpStats['time_begin'], 3);
@@ -186,12 +180,12 @@ class ExecutionKPI implements iEventServiceSetup
}
}
$sHtml .= '<tr>';
$sHtml .= "<tr>";
$sHtml .= " <td>$sOperation</td><td>$sBegin</td><td>$sEnd</td><td>$sDuration</td><td>$sMemBegin</td><td>$sMemEnd</td><td>$sMemPeak</td>";
$sHtml .= '</tr>';
$sHtml .= "</tr>";
}
$sHtml .= '</table>';
$sHtml .= '</div>';
$sHtml .= "</table>";
$sHtml .= "</div>";
$aConsolidatedStats = [];
foreach (self::$m_aStats as $sOperation => $aOpStats) {
@@ -214,20 +208,20 @@ class ExecutionKPI implements iEventServiceSetup
}
}
$aConsolidatedStats[$sOperation] = [
'count' => $iTotalOp,
'count' => $iTotalOp,
'duration' => $fTotalOp,
'min' => $fMinOp,
'max' => $fMaxOp,
'avg' => $fTotalOp / $iTotalOp,
'min' => $fMinOp,
'max' => $fMaxOp,
'avg' => $fTotalOp / $iTotalOp,
'max_args' => $sMaxOpArguments,
];
}
$sHtml .= '<div>';
$sHtml .= "<div>";
$sHtml .= "<table border=\"1\" style=\"$sTableStyle\">";
$sHtml .= '<thead>';
$sHtml .= ' <th>Operation</th><th>Count</th><th>Duration</th><th>Min</th><th>Max</th><th>Avg</th>';
$sHtml .= '</thead>';
$sHtml .= "<thead>";
$sHtml .= " <th>Operation</th><th>Count</th><th>Duration</th><th>Min</th><th>Max</th><th>Avg</th>";
$sHtml .= "</thead>";
foreach ($aConsolidatedStats as $sOperation => $aOpStats) {
$sOperation = '<a href="#'.md5($sExecId.$sOperation).'">'.$sOperation.'</a>';
$sCount = $aOpStats['count'];
@@ -236,14 +230,14 @@ class ExecutionKPI implements iEventServiceSetup
$sMax = '<a href="#'.md5($sExecId.$aOpStats['max_args']).'">'.round($aOpStats['max'], 3).'</a>';
$sAvg = round($aOpStats['avg'], 3);
$sHtml .= '<tr>';
$sHtml .= "<tr>";
$sHtml .= " <td>$sOperation</td><td>$sCount</td><td>$sDuration</td><td>$sMin</td><td>$sMax</td><td>$sAvg</td>";
$sHtml .= '</tr>';
$sHtml .= "</tr>";
}
$sHtml .= '</table>';
$sHtml .= '</div>';
$sHtml .= "</table>";
$sHtml .= "</div>";
$sHtml .= '</div>';
$sHtml .= "</div>";
$sHtml .= "<p><a href=\"#end-".md5($sExecId)."\">Next page stats</a></p>";
@@ -293,18 +287,18 @@ class ExecutionKPI implements iEventServiceSetup
$sOperationHtml = '<a name="'.md5($sExecId.$sOperation).'">'.$sOperation.'</a>';
$sHtml .= "<h4>$sOperationHtml</h4>";
$sHtml .= "<table border=\"1\" style=\"$sTableStyle\">";
$sHtml .= '<thead>';
$sHtml .= ' <th>Operation details (+ blame caller if log_kpi_duration = 2)</th><th>Count</th><th>Duration</th><th>Min</th><th>Max</th>';
$sHtml .= '</thead>';
$sHtml .= "<thead>";
$sHtml .= " <th>Operation details (+ blame caller if log_kpi_duration = 2)</th><th>Count</th><th>Duration</th><th>Min</th><th>Max</th>";
$sHtml .= "</thead>";
$bDisplayHeader = false;
}
$sHtml .= '<tr>';
$sHtml .= "<tr>";
$sHtml .= " <td>$sHtmlArguments</td><td>$iCountInter</td><td>$sTotalInter</td><td>$sMinInter</td><td>$sMaxInter</td>";
$sHtml .= '</tr>';
$sHtml .= "</tr>";
}
}
if (!$bDisplayHeader) {
$sHtml .= '</table>';
$sHtml .= "</table>";
$sHtml .= "<p><a href=\"#".md5($sExecId)."\">Back to page stats</a></p>";
}
self::Report($sHtml);
@@ -339,50 +333,39 @@ class ExecutionKPI implements iEventServiceSetup
$aNewEntry = null;
if (is_null(static::$fLastReportTime)) {
static::$fLastReportTime = $fItopStarted;
}
if (is_null(static::$iLastReportMemory)) {
global $iItopInitialMemory;
static::$iLastReportMemory = $iItopInitialMemory;
}
$fStarted = static::$fLastReportTime;
$fStopped = microtime(true);
$fStarted = $this->m_fStarted;
$fStopped = $this->m_fStarted;
if (self::$m_bEnabled_Duration) {
$fStopped = MyHelpers::getmicrotime();
$aNewEntry = [
'op' => $sOperationDesc,
'time_begin' => $fStarted - $fItopStarted,
'time_begin' => $this->m_fStarted - $fItopStarted,
'time_end' => $fStopped - $fItopStarted,
];
// Reset for the next operation (if the object is recycled)
$this->m_fStarted = $fStopped;
}
static::$fLastReportTime = $fStopped;
$iInitialMemory = static::$iLastReportMemory;
$iCurrentMemory = $iInitialMemory;
$iPeakMemory = $iInitialMemory;
$iInitialMemory = is_null($this->m_iInitialMemory) ? 0 : $this->m_iInitialMemory;
$iCurrentMemory = 0;
$iPeakMemory = 0;
if (self::$m_bEnabled_Memory) {
$iCurrentMemory = self::memory_get_usage();
if (is_null($aNewEntry)) {
$aNewEntry = ['op' => $sOperationDesc];
}
$aNewEntry['mem_begin'] = $iInitialMemory;
$aNewEntry['mem_begin'] = $this->m_iInitialMemory;
$aNewEntry['mem_end'] = $iCurrentMemory;
$iPeakMemory = self::memory_get_peak_usage();
$aNewEntry['mem_peak'] = $iPeakMemory;
// Reset for the next operation (if the object is recycled)
static::$iLastReportMemory = $iCurrentMemory;
$this->m_iInitialMemory = $iCurrentMemory;
}
if (self::$m_bEnabled_Duration || self::$m_bEnabled_Memory) {
$aCallstack = ['callstack' => $this->GetCallStack()];
if (static::$bMetamodelStarted) {
foreach (static::$aBootstrapOperations as $oLog) {
$this->LogOperation($oLog);
}
static::$aBootstrapOperations = [];
// Invoke extensions to log the KPI operation
// Invoke extensions to log the KPI operation
/** @var \iKPILoggerExtension $oExtensionInstance */
foreach (MetaModel::EnumPlugins('iKPILoggerExtension') as $oExtensionInstance) {
$sExtension = ModuleService::GetInstance()->GetModuleNameFromCallStack(1);
$oKPILogData = new KpiLogData(
KpiLogData::TYPE_REPORT,
@@ -393,24 +376,9 @@ class ExecutionKPI implements iEventServiceSetup
$sExtension,
$iInitialMemory,
$iCurrentMemory,
$iPeakMemory,
$aCallstack
$iPeakMemory
);
$this->LogOperation($oKPILogData);
} else {
$oKPILogData = new KpiLogData(
KpiLogData::TYPE_REPORT,
'Step',
$sOperationDesc,
$fStarted,
$fStopped,
'',
$iInitialMemory,
$iCurrentMemory,
$iPeakMemory,
$aCallstack
);
static::$aBootstrapOperations[] = $oKPILogData;
$oExtensionInstance->LogOperation($oKPILogData);
}
}
@@ -420,21 +388,13 @@ class ExecutionKPI implements iEventServiceSetup
$this->ResetCounters();
}
private function LogOperation(KpiLogData $oKPILogData): void
{
/** @var \iKPILoggerExtension $oExtensionInstance */
foreach (MetaModel::EnumPlugins('iKPILoggerExtension') as $oExtensionInstance) {
$oExtensionInstance->LogOperation($oKPILogData);
}
}
/**
* Compute statistics for a call to an extension
* Note: not working in dev mode (with links to env-production)
*
* @param object|string $object object called
* @param string $sMethod method called on the object
* @param string $sMessage additional message
* @param string $sMethod method called on the object
* @param string $sMessage additional message
*
* @return bool true if an extension was found for this object::method
* @throws \ReflectionException
@@ -463,23 +423,21 @@ class ExecutionKPI implements iEventServiceSetup
$fDuration = 0;
if (self::$m_bEnabled_Duration) {
$fStopped = microtime(true);
$fStopped = MyHelpers::getmicrotime();
$fDuration = $fStopped - $this->m_fStarted;
$aCallstack = [];
if (self::$m_bGenerateLegacyReport) {
if (self::$m_bBlameCaller) {
$aCallstack = MyHelpers::get_callstack(1);
self::$m_aStats[$sOperation][$sArguments][] = [
'time' => $fDuration,
'callers' => $aCallstack,
'time' => $fDuration,
'callers' => $aCallstack,
];
} else {
self::$m_aStats[$sOperation][$sArguments][] = [
'time' => $fDuration,
'time' => $fDuration,
];
}
} else {
$aCallstack = ['callstack' => $this->GetCallStack()];
}
$iInitialMemory = is_null($this->m_iInitialMemory) ? 0 : $this->m_iInitialMemory;
@@ -490,45 +448,33 @@ class ExecutionKPI implements iEventServiceSetup
$iPeakMemory = self::memory_get_peak_usage();
}
if (static::$bMetamodelStarted) {
foreach (static::$aBootstrapOperations as $oLog) {
$this->LogOperation($oLog);
}
static::$aBootstrapOperations = [];
// Invoke extensions to log the KPI operation
/** @var \iKPILoggerExtension $oExtensionInstance */
foreach (MetaModel::EnumPlugins('iKPILoggerExtension') as $oExtensionInstance) {
//$sExtension = ModuleService::GetInstance()->GetModuleNameFromCallStack(1);
$sExtension = '';
$oKPILogData = new KpiLogData(
KpiLogData::TYPE_STATS,
$sOperation,
$sArguments,
$this->m_fStarted,
$fStopped,
'',
$sExtension,
$iInitialMemory,
$iCurrentMemory,
$iPeakMemory,
$aCallstack
);
$this->LogOperation($oKPILogData);
} else {
$oKPILogData = new KpiLogData(
KpiLogData::TYPE_STATS,
$sOperation,
$sArguments,
$this->m_fStarted,
$fStopped,
'',
$iInitialMemory,
$iCurrentMemory,
$iPeakMemory,
$aCallstack
);
static::$aBootstrapOperations[] = $oKPILogData;
$oExtensionInstance->LogOperation($oKPILogData);
}
}
}
protected function ResetCounters()
{
$this->m_fStarted = microtime(true);
if (self::$m_bEnabled_Duration) {
$this->m_fStarted = microtime(true);
}
if (self::$m_bEnabled_Memory) {
$this->m_iInitialMemory = self::memory_get_usage();
@@ -557,33 +503,7 @@ class ExecutionKPI implements iEventServiceSetup
if (function_exists('memory_get_peak_usage')) {
return memory_get_peak_usage($bRealUsage);
}
// PHP > 5.2.1 - this verb depends on a compilation option
return 0;
}
/*
* ModuleHandlerApiInterface methods
*/
public static function OnMetaModelStarted()
{
static::$bMetamodelStarted = true;
}
public function RegisterEventsAndListeners()
{
EventService::RegisterListener(ApplicationEvents::APPLICATION_EVENT_METAMODEL_STARTED, [$this, 'OnMetaModelStarted']);
}
private function GetCallStack(): string
{
$aCallStack = MyHelpers::get_callstack(2);
$sCallStack = "Call stack:\n";
foreach ($aCallStack as $index => $aLine) {
$sCallStack .= "#$index ".$aLine['File'].'('.$aLine['Line'].'): '.$aLine['Function']."\n";
}
return $sCallStack;
}
}

View File

@@ -1656,7 +1656,7 @@ class PHP_ParserGenerator_Data
function emit_code($out, PHP_ParserGenerator_Rule $rp, &$lineno)
{
$linecnt = 0;
/* Generate code to do the reduce action */
if ($rp->code) {
$this->tplt_linedir($out, $rp->line, $this->filename);

View File

@@ -1094,7 +1094,7 @@ static public $yy_action = array(
function yy_find_shift_action($iLookAhead)
{
$stateno = $this->yystack[$this->yyidx]->stateno;
/* if ($this->yyidx < 0) return self::YY_NO_ACTION; */
if (!isset(self::$yy_shift_ofst[$stateno])) {
// no shift actions
@@ -1781,7 +1781,7 @@ throw new OQLParserParseFailureException($this->m_sSourceQuery, $this->m_iLine,
function yy_syntax_error($yymajor, $TOKEN)
{
#line 25 "..\oql-parser.y"
throw new OQLParserSyntaxErrorException($this->m_sSourceQuery, $this->m_iLine, $this->m_iCol, $this->tokenName($yymajor), $TOKEN);
#line 1793 "..\oql-parser.php"
}
@@ -1820,7 +1820,7 @@ throw new OQLParserSyntaxErrorException($this->m_sSourceQuery, $this->m_iLine, $
// $yyact; /* The parser action. */
// $yyendofinput; /* True if we are at the end of input */
$yyerrorhit = 0; /* True if yymajor has invoked an error */
/* (re)initialize the parser, if necessary */
if ($this->yyidx === null || $this->yyidx < 0) {
/* if ($yymajor == 0) return; // not sure why this was here... */
@@ -1833,7 +1833,7 @@ throw new OQLParserSyntaxErrorException($this->m_sSourceQuery, $this->m_iLine, $
array_push($this->yystack, $x);
}
$yyendofinput = ($yymajor==0);
if (self::$yyTraceFILE) {
fprintf(
self::$yyTraceFILE,
@@ -1842,7 +1842,7 @@ throw new OQLParserSyntaxErrorException($this->m_sSourceQuery, $this->m_iLine, $
self::$yyTokenName[$yymajor]
);
}
do {
$yyact = $this->yy_find_shift_action($yymajor);
if ($yymajor < self::YYERRORSYMBOL
@@ -2016,7 +2016,7 @@ class OQLParser extends OQLParserRaw
$this->m_sSourceQuery = $sQuery;
// no constructor - parent::__construct();
}
public function doParse($token, $value, $iCurrPosition = 0)
{
$this->m_iColPrev = $this->m_iCol;
@@ -2030,7 +2030,7 @@ class OQLParser extends OQLParserRaw
$this->doParse(0, 0);
return $this->my_result;
}
public function __destruct()
{
// Bug in the original destructor, causing an infinite loop !

View File

@@ -370,7 +370,7 @@ class ormCaseLog
/**
* Produces an HTML representation, aimed at being used within the iTop framework
*/
public function GetAsHTML(?WebPage $oP = null, $bEditMode = false, $aTransfoHandler = null)
public function GetAsHTML(WebPage $oP = null, $bEditMode = false, $aTransfoHandler = null)
{
$bPrintableVersion = (utils::ReadParam('printable', '0') == '1');

View File

@@ -362,7 +362,8 @@ class ormDocument
throw new Exception("Invalid id ($id) for class '$sClass' - the object does not exist or you are not allowed to view it");
}
}
if (($sSecretField != null) && !hash_equals($oObj->Get($sSecretField), $sSecretValue)) {
if (($sSecretField != null) && ($oObj->Get($sSecretField) != $sSecretValue)) {
usleep(200);
throw new Exception("Invalid secret for class '$sClass' - the object does not exist or you are not allowed to view it");
}
/** @var \ormDocument $oDocument */

View File

@@ -93,7 +93,7 @@ class ormLinkSet implements iDBObjectSetIterator, Iterator, SeekableIterator
* @param DBObjectSet|null $oOriginalSet
* @throws Exception
*/
public function __construct($sHostClass, $sAttCode, ?DBObjectSet $oOriginalSet = null)
public function __construct($sHostClass, $sAttCode, DBObjectSet $oOriginalSet = null)
{
$this->sHostClass = $sHostClass;
$this->sAttCode = $sAttCode;
@@ -179,7 +179,7 @@ class ormLinkSet implements iDBObjectSetIterator, Iterator, SeekableIterator
assert($oLink instanceof $this->sClass);
$iObjectId = $oLink->GetKey();
if (array_key_exists($iObjectId, $this->aPreserved) && !$oLink->Equals(MetaModel::GetObject(get_class($oLink), $iObjectId, true))) {
if (array_key_exists($iObjectId, $this->aPreserved)) {
unset($this->aPreserved[$iObjectId]);
$this->aModified[$iObjectId] = $oLink;
$this->bHasDelta = true;

View File

@@ -98,9 +98,9 @@ class ormPassword
$bResult = false;
$aInfo = password_get_info($this->m_sHashed);
if (is_null($aInfo["algo"]) || $aInfo["algo"] === 0) {
// - Unknown algorithm, assume it's a legacy password
//unknown, assume it's a legacy password
$sHashedPwd = $this->ComputeHash($sClearTextPassword);
$bResult = hash_equals($this->m_sHashed, $sHashedPwd);
$bResult = ($this->m_sHashed == $sHashedPwd);
} else {
$bResult = password_verify($sClearTextPassword, $this->m_sHashed);
}

View File

@@ -72,12 +72,9 @@ $ibo-panel--icon--spacing--as-medallion--is-sticking: $ibo-panel--icon--spacing-
$ibo-panel--icon--bottom--as-medallion--is-sticking: -12px !default;
$ibo-panel--icon--border--as-medallion--is-sticking: 1px $ibo-panel--base-border-style $ibo-panel--base-border-color !default;
$ibo-panel--icon-background--size--must-contain: contain !default; // deprecated, to be removed in favor of $ibo-panel--icon-img--size--must-contain
$ibo-panel--icon-background--size--must-cover: cover !default; // deprecated, to be removed in favor of $ibo-panel--icon-img--size--must-cover
$ibo-panel--icon-background--size--must-zoomout: 66.67% !default; // deprecated, to be removed in favor of $ibo-panel--icon-img--size--must-zoomout
$ibo-panel--icon-img--size--must-contain: $ibo-panel--icon-background--size--must-contain !default; // TODO remove when dealing with N°9317
$ibo-panel--icon-img--size--must-cover: $ibo-panel--icon-background--size--must-cover !default; // TODO remove when dealing with N°9317
$ibo-panel--icon-img--size--must-zoomout: $ibo-panel--icon-background--size--must-zoomout !default; // TODO remove when dealing with N°9317
$ibo-panel--icon-background--size--must-contain: contain !default;
$ibo-panel--icon-background--size--must-cover: cover !default;
$ibo-panel--icon-background--size--must-zoomout: 66.67% !default;
$ibo-panel--title--font-size--is-sticking: $ibo-font-size-150 !default;
$ibo-panel--title--color: $ibo-color-grey-900 !default;
@@ -182,25 +179,24 @@ $ibo-panel--is-selectable--body--after--font-size: $ibo-font-size-700 !default;
min-height: $ibo-panel--icon--size;
}
.ibo-panel--icon-img, .ibo-panel--icon-background { // second class is deprecated, remove it when dealing with N°9317
.ibo-panel--icon-background {
width: 100%;
height: 100%;
background-position: center;
background-repeat: no-repeat;
background-size: $ibo-panel--icon-img--size--must-contain;
background-size: $ibo-panel--icon-background--size--must-contain;
}
.ibo-panel--icon-img--must-contain, .ibo-panel--icon-background--must-contain { // second class is deprecated, remove it when dealing with N°9317
background-size: $ibo-panel--icon-img--size--must-contain;
.ibo-panel--icon-background--must-contain {
background-size: $ibo-panel--icon-background--size--must-contain;
}
.ibo-panel--icon-img--must-cover, .ibo-panel--icon-background--must-cover { // second class is deprecated, remove it when dealing with N°9317
background-size: $ibo-panel--icon-img--size--must-cover;
.ibo-panel--icon-background--must-cover {
background-size: $ibo-panel--icon-background--size--must-cover;
}
.ibo-panel--icon-img--must-zoomout, .ibo-panel--icon-background--must-zoomout { // second class is deprecated, remove it when dealing with N°9317
width: $ibo-panel--icon-img--size--must-zoomout;
height: $ibo-panel--icon-img--size--must-zoomout;
.ibo-panel--icon-background--must-zoomout {
background-size: $ibo-panel--icon-background--size--must-zoomout;
}
.ibo-panel--title {

View File

@@ -11,12 +11,9 @@ $ibo-title--icon--size: 90px !default;
$ibo-title--icon--size-2: 80px !default;
$ibo-title--icon--size-3: 70px !default;
$ibo-title--icon-background--size--must-contain: contain !default; // deprecated, to be removed in favor of $ibo-title--icon-img--size--must-contain
$ibo-title--icon-background--size--must-cover: cover !default; // deprecated, to be removed in favor of $ibo-title--icon-img--size--must-cover
$ibo-title--icon-background--size--must-zoomout: 66.67% !default; // deprecated, to be removed in favor of $ibo-title--icon-img--size--must-zoomout
$ibo-title--icon-img--size--must-contain: $ibo-title--icon-background--size--must-contain !default; // TODO remove when dealing with N°9317
$ibo-title--icon-img--size--must-cover: $ibo-title--icon-background--size--must-cover !default; // TODO remove when dealing with N°9317
$ibo-title--icon-img--size--must-zoomout: $ibo-title--icon-background--size--must-zoomout !default; // TODO remove when dealing with N°9317
$ibo-title--icon-background--size--must-contain: contain !default;
$ibo-title--icon-background--size--must-cover: cover !default;
$ibo-title--icon-background--size--must-zoomout: 66.67% !default;
.ibo-title {
@@ -47,23 +44,24 @@ $ibo-title--icon-img--size--must-zoomout: $ibo-title--icon-background--size--mus
min-height: $ibo-title--icon--size-3;
}
.ibo-title--icon-img, .ibo-title--icon-background { // second class is deprecated, remove it when dealing with N°9317
.ibo-title--icon-background {
width: 100%;
height: 100%;
object-position: center;
background-size: $ibo-title--icon-img--size--must-contain;
background-position: center;
background-repeat: no-repeat;
background-size: $ibo-title--icon-background--size--must-contain;
}
.ibo-title--icon-img--must-contain, .ibo-title--icon-background--must-contain { // second class is deprecated, remove it when dealing with N°9317
background-size: $ibo-title--icon-img--size--must-contain;
.ibo-title--icon-background--must-contain {
background-size: $ibo-title--icon-background--size--must-contain;
}
.ibo-title--icon-img--must-cover, .ibo-title--icon-background--must-cover { // second class is deprecated, remove it when dealing with N°9317
background-size: $ibo-title--icon-img--size--must-cover;
.ibo-title--icon-background--must-cover {
background-size: $ibo-title--icon-background--size--must-cover;
}
.ibo-title--icon-img--must-zoomout, .ibo-title--icon-background--must-zoomout { // second class is deprecated, remove it when dealing with N°9317
background-size: $ibo-title--icon-img--size--must-zoomout;
.ibo-title--icon-background--must-zoomout {
background-size: $ibo-title--icon-background--size--must-zoomout;
}
.ibo-title--for-object-details {

View File

@@ -5,11 +5,9 @@
$ibo-multi-column--margin-x: -16px !default; /* This is to compensate columns padding and make the whole multicolumn align with the parent borders (cf. Bootstrap rows / cols) */
$ibo-multi-column--margin-y: $ibo-spacing-0 !default;
$ibo-multi-column--row-gap: $ibo-spacing-800 !default;
.ibo-multi-column {
display: flex;
flex-wrap: wrap;
margin: $ibo-multi-column--margin-y $ibo-multi-column--margin-x;
row-gap: $ibo-multi-column--row-gap;
}

View File

@@ -29,7 +29,7 @@ $ibo-vendors-selectize--element--active--background: $ibo-color-blue-100 !defaul
$ibo-vendors-selectize--element--active--color: $ibo-color-grey-900 !default;
$ibo-vendors-selectize--dropdown--background-color: $ibo-vendors-selectize-input--background-color !default;
$ibo-vendors-selectize--dropdown--color: $ibo-vendors-selectize-input--color !default;
$ibo-vendors-selectize--dropdown--color: $ibo-vendors-selectize-input--color!default;
$ibo-vendors-selectize--header--padding-x: 8px !default;
$ibo-vendors-selectize--header--padding-y: 5px !default;

View File

@@ -2,7 +2,7 @@
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<module_parameters>
<parameters id="authent-local" _delta="define">
<password_validation.pattern>^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\da-zA-Z]).{12,}$</password_validation.pattern>
<password_validation.pattern>^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\da-zA-Z]).{8,}$</password_validation.pattern>
<password_validation.message type="hash"/>
</parameters>
</module_parameters>

View File

@@ -29,7 +29,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Heslo nemůže uživatel změnit.',
'Class:UserLocal/Attribute:password_renewed_date' => 'Heslo bylo obnoveno',
'Class:UserLocal/Attribute:password_renewed_date+' => 'Termín, kdy bylo heslo změneno',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Heslo musí obsahovat minimálně 12 znaků a musí obsahovat minimálně jedno velké písmeno, jedno malé písmeno, jedno číslo a speciální znak.',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Heslo musí obsahovat minimálně 8 znaků a musí obsahovat minimálně jedno velké písmeno, jedno malé písmeno, jedno číslo a speciální znak.',
'UserLocal:password:expiration' => 'Níže uvedená pole vyžadují rozšíření',
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Nastavení exspirace "Jednorázového hesla" nelze u vlastního účtu uživatele.',
]);

View File

@@ -28,7 +28,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Password cannot be changed by the user.~~',
'Class:UserLocal/Attribute:password_renewed_date' => 'Password renewed on~~',
'Class:UserLocal/Attribute:password_renewed_date+' => 'When the password was last changed~~',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Password must be at least 12 characters and include uppercase, lowercase, numeric and special characters.~~',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Password must be at least 8 characters and include uppercase, lowercase, numeric and special characters.~~',
'UserLocal:password:expiration' => 'The fields below require an extension~~',
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Setting password expiration to "One-time password" is not allowed for your own User~~',
]);

View File

@@ -28,7 +28,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => '',
'Class:UserLocal/Attribute:password_renewed_date' => 'Letzte Passworterneuerung',
'Class:UserLocal/Attribute:password_renewed_date+' => 'Letztes Änderungsdatum',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Das Passwort muss mindestens 12 Zeichen lang sein und Großbuchstaben, Kleinbuchstaben, Zahlen und Sonderzeichen enthalten.',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Das Passwort entspricht nicht dem in den Konfigurationsregeln hinterlegten RegEx-Ausdruck',
'UserLocal:password:expiration' => 'Die folgenden Felder benötigen eine '.ITOP_APPLICATION_SHORT.' Erweiterung',
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Das setzen des Passwortablaufs auf "Einmalpasswort" ist für den eigenen Benutzer nicht erlaubt.',
]);

View File

@@ -55,7 +55,7 @@ Dict::Add('EN US', 'English', 'English', [
'Class:UserLocal/Attribute:password_renewed_date' => 'Password renewed on',
'Class:UserLocal/Attribute:password_renewed_date+' => 'When the password was last changed',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Password must be at least 12 characters and include uppercase, lowercase, numeric and special characters.',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Password must be at least 8 characters and include uppercase, lowercase, numeric and special characters.',
'UserLocal:password:expiration' => 'The fields below require an extension',
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Setting password expiration to "One-time password" is not allowed for your own User',
]);

View File

@@ -55,7 +55,7 @@ Dict::Add('EN GB', 'British English', 'British English', [
'Class:UserLocal/Attribute:password_renewed_date' => 'Password renewed on',
'Class:UserLocal/Attribute:password_renewed_date+' => 'When the password was last changed',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Password must be at least 12 characters and include uppercase, lowercase, numeric and special characters.',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Password must be at least 8 characters and include uppercase, lowercase, numeric and special characters.',
'UserLocal:password:expiration' => 'The fields below require an extension',
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Setting password expiration to "One-time password" is not allowed for your own User',
]);

View File

@@ -25,7 +25,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'El usuario no puede cambiar la contraseña.',
'Class:UserLocal/Attribute:password_renewed_date' => 'Renovación de contraseña',
'Class:UserLocal/Attribute:password_renewed_date+' => 'Cuando fue el último cambio de contraseña',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'La contraseña debe ser de al menos 12 caracteres e incluir mayúsculas, minúsculas, números y caracteres especiales.',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'La contraseña debe ser de al menos 8 caracteres e incluír mayúsculas, minúsculas, números y caracteres especiales.',
'UserLocal:password:expiration' => 'El siguiente campo requiere una extensión',
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Configurar expiración de contraseña para "ontraseña de un solo uso" no está permitido para su propio Usuario',
]);

View File

@@ -27,7 +27,7 @@ Dict::Add('FR FR', 'French', 'Français', [
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => '',
'Class:UserLocal/Attribute:password_renewed_date' => 'Mot de passe changé le',
'Class:UserLocal/Attribute:password_renewed_date+' => 'Dernière date à laquelle le mot de passe a été changé',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Le mot de passe doit contenir au moins 12 caractères, avec minuscule, majuscule, nombre et caractère spécial.',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Le mot de passe doit contenir au moins 8 caractères, avec minuscule, majuscule, nombre et caractère spécial.',
'UserLocal:password:expiration' => 'Les champs ci-dessous nécessitent une extension',
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Impossible de mettre "Usage unique" comme validité du mot de passe pour son propre utilisateur.',
]);

View File

@@ -27,7 +27,7 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'A felhasználó nem változtathat jelszót.',
'Class:UserLocal/Attribute:password_renewed_date' => 'Jelszó megújítás ideje',
'Class:UserLocal/Attribute:password_renewed_date+' => 'A jelszó legutóbbi módosításának időpontja',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'A jelszónak legalább 12 karakterből kell állnia, és tartalmaznia kell nagybetűket, kisbetűket, numerikus és speciális karaktereket.',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'A jelszónak legalább 8 karakterből kell állnia, és tartalmaznia kell nagybetűket, kisbetűket, numerikus és speciális karaktereket.',
'UserLocal:password:expiration' => 'Az alábbi mezőkhöz egy bővítmény szükséges',
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'A jelszó lejárati idejének beállítása "Egyszeri jelszóra" nem engedélyezett a saját Felhasználó számára.',
]);

View File

@@ -27,7 +27,7 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'La password non può essere cambiata dall\'utente.',
'Class:UserLocal/Attribute:password_renewed_date' => 'Rinnovo della password',
'Class:UserLocal/Attribute:password_renewed_date+' => 'Quando è stata cambiata l\'ultima volta la password',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'La password deve essere di almeno 12 caratteri e includere lettere maiuscole, minuscole, numeri e caratteri speciali.',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'La password deve essere di almeno 8 caratteri e includere lettere maiuscole, minuscole, numeri e caratteri speciali.',
'UserLocal:password:expiration' => 'I campi sottostanti richiedono un\'estensione',
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Impostare la scadenza della password su "Password monouso" non è consentito per il proprio utente',
]);

View File

@@ -28,7 +28,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Password cannot be changed by the user.~~',
'Class:UserLocal/Attribute:password_renewed_date' => 'Password renewed on~~',
'Class:UserLocal/Attribute:password_renewed_date+' => 'When the password was last changed~~',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Password must be at least 12 characters and include uppercase, lowercase, numeric and special characters.~~',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Password must be at least 8 characters and include uppercase, lowercase, numeric and special characters.~~',
'UserLocal:password:expiration' => 'The fields below require an extension~~',
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Setting password expiration to "One-time password" is not allowed for your own User~~',
]);

View File

@@ -28,7 +28,7 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'De gebruiker kan dit wachtwoord niet veranderen.',
'Class:UserLocal/Attribute:password_renewed_date' => 'Wachtwoord laatst aangepast',
'Class:UserLocal/Attribute:password_renewed_date+' => 'Tijdstip waarop het wachtwoord het laatst aangepast werd.',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Het wachtwoord bestaat uit minstens 12 tekens en bestaat uit een mix van minstens 1 hoofdletter, kleine letter, cijfer en speciaal teken.',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Het wachtwoord bestaat uit minstens 8 tekens en bestaat uit een mix van minstens 1 hoofdletter, kleine letter, cijfer en speciaal teken.',
'UserLocal:password:expiration' => 'De velden hieronder vereisen een extensie.',
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Je kan geen eenmalig wachtwoord instellen voor je eigen gebruiker.',
]);

View File

@@ -27,7 +27,7 @@ Dict::Add('PL PL', 'Polish', 'Polski', [
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Hasło nie może być zmienione przez użytkownika.',
'Class:UserLocal/Attribute:password_renewed_date' => 'Odnowienie hasła',
'Class:UserLocal/Attribute:password_renewed_date+' => 'Kiedy ostatnio zmieniano hasło',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Hasło musi mieć co najmniej 12 znaków i zawierać duże, małe litery, cyfry i znaki specjalne.',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Hasło musi mieć co najmniej 8 znaków i zawierać duże, małe litery, cyfry i znaki specjalne.',
'UserLocal:password:expiration' => 'Poniższe pola wymagają rozszerzenia',
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Ustawienie wygaśnięcia hasła "Hasło jednorazowe" nie jest dozwolone dla własnego użytkownika',
]);

View File

@@ -27,7 +27,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Senha não pode ser alterada pelo usuário',
'Class:UserLocal/Attribute:password_renewed_date' => 'Data da última alteração de senha',
'Class:UserLocal/Attribute:password_renewed_date+' => 'Quando a senha foi alterada anteriormente',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'A senha deve ter no mínimo 12 caracteres e incluir letras maiúsculas, minúsculas, números e símbolos',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'A senha deve ter no mínimo 8 caracteres e incluir letras maiúsculas, minúsculas, números e símbolos',
'UserLocal:password:expiration' => 'O campo abaixo requer uma extensão',
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Definir a expiração da senha para One-Time Password (OTP) não é permitido para o seu próprio usuário',
]);

View File

@@ -28,7 +28,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Password cannot be changed by the user.~~',
'Class:UserLocal/Attribute:password_renewed_date' => 'Дата изменения пароля',
'Class:UserLocal/Attribute:password_renewed_date+' => 'Когда пароль был изменен в последний раз',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Пароль должен содержать не менее 12 символов и включать прописные, строчные, числовые и специальные символы.',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Пароль должен содержать не менее 8 символов и включать прописные, строчные, числовые и специальные символы.',
'UserLocal:password:expiration' => 'Поля требуют наличия доп. расширения',
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Setting password expiration to "One-time password" is not allowed for your own User~~',
]);

View File

@@ -27,7 +27,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Password cannot be changed by the user.~~',
'Class:UserLocal/Attribute:password_renewed_date' => 'Password renewed on~~',
'Class:UserLocal/Attribute:password_renewed_date+' => 'When the password was last changed~~',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Password must be at least 12 characters and include uppercase, lowercase, numeric and special characters.~~',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Password must be at least 8 characters and include uppercase, lowercase, numeric and special characters.~~',
'UserLocal:password:expiration' => 'The fields below require an extension~~',
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Setting password expiration to "One-time password" is not allowed for your own User~~',
]);

View File

@@ -28,7 +28,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Password cannot be changed by the user.~~',
'Class:UserLocal/Attribute:password_renewed_date' => 'Password renewed on~~',
'Class:UserLocal/Attribute:password_renewed_date+' => 'When the password was last changed~~',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Password must be at least 12 characters and include uppercase, lowercase, numeric and special characters.~~',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Password must be at least 8 characters and include uppercase, lowercase, numeric and special characters.~~',
'UserLocal:password:expiration' => 'The fields below require an extension~~',
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Setting password expiration to "One-time password" is not allowed for your own User~~',
]);

View File

@@ -51,7 +51,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => '用户不允许修改密码.',
'Class:UserLocal/Attribute:password_renewed_date' => '密码更新',
'Class:UserLocal/Attribute:password_renewed_date+' => '上次修改密码的时间',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => '密码必须至少12个字符, 包含大小写, 数字和特殊字符.',
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => '密码必须至少8个字符, 包含大小写, 数字和特殊字符.',
'UserLocal:password:expiration' => '下面的区域需要插件扩展',
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => '不允许用户为自己设置 "一次性密码" 的失效期限',
]);

View File

@@ -10,87 +10,22 @@
*/
use Combodo\iTop\Core\MetaModel\HierarchicalKey;
use Combodo\iTop\DBTools\Enum\BinExitCode;
use Combodo\iTop\DBTools\Exception\AuthenticationException;
// env-xxx folders
if (file_exists(__DIR__.'/../../../approot.inc.php')) {
require_once __DIR__.'/../../../approot.inc.php';
}
// datamodel/2.x and data/xxx-modules folders
elseif (file_exists(__DIR__.'/../../../../approot.inc.php')) {
require_once __DIR__.'/../../../../approot.inc.php';
}
require_once('../../../approot.inc.php');
require_once APPROOT.'application/startup.inc.php';
// Prepare output page
$sPageTitle = "Database maintenance tools - Report";
$bIsModeCLI = utils::IsModeCLI();
if ($bIsModeCLI) {
$oP = new CLIPage($sPageTitle);
SetupUtils::CheckPhpAndExtensionsForCli($oP, BinExitCode::FATAL->value);
} else {
$oP = new WebPage($sPageTitle);
}
// Authentication logic
try {
utils::UseParamFile();
if ($bIsModeCLI) {
$sAuthUser = utils::ReadParam('auth_user', null, true, utils::ENUM_SANITIZATION_FILTER_RAW_DATA);
$sAuthPwd = utils::ReadParam('auth_pwd', null, true, utils::ENUM_SANITIZATION_FILTER_RAW_DATA);
if (utils::IsNullOrEmptyString($sAuthUser) || utils::IsNullOrEmptyString($sAuthPwd)) {
throw new AuthenticationException("Access credentials not provided, usage: php rebuildhk.php --auth_user=<login> --auth_pwd=<password> [--param_file=<file_path>]");
}
if (UserRights::CheckCredentials($sAuthUser, $sAuthPwd)) {
UserRights::Login($sAuthUser);
} else {
throw new AuthenticationException("Access wrong credentials ('$sAuthUser')");
}
} else {
// Check user rights and prompt if needed
LoginWebPage::DoLoginEx(null, true);
foreach (MetaModel::GetClasses() as $sClass) {
if (!MetaModel::HasTable($sClass)) {
continue;
}
if (!UserRights::IsAdministrator()) {
throw new AuthenticationException("Access restricted to administrators");
}
} catch (AuthenticationException $oException) {
$oP->p($oException->getMessage());
$oP->output();
exit(BinExitCode::ERROR->value);
} catch (Exception $oException) {
$oP->p("Error: ".$oException->GetMessage());
$oP->output();
exit(BinExitCode::FATAL->value);
}
// Business logic
try {
foreach (MetaModel::GetClasses() as $sClass) {
if (!MetaModel::HasTable($sClass)) {
continue;
}
foreach (MetaModel::ListAttributeDefs($sClass) as $sAttCode => $oAttDef) {
// Check (once) all the attributes that are hierarchical keys
if ((MetaModel::GetAttributeOrigin($sClass, $sAttCode) == $sClass) && $oAttDef->IsHierarchicalKey()) {
$oP->p("Rebuild hierarchical key $sAttCode from $sClass.");
HierarchicalKey::Rebuild($sClass, $sAttCode, $oAttDef);
}
foreach (MetaModel::ListAttributeDefs($sClass) as $sAttCode => $oAttDef) {
// Check (once) all the attributes that are hierarchical keys
if ((MetaModel::GetAttributeOrigin($sClass, $sAttCode) == $sClass) && $oAttDef->IsHierarchicalKey()) {
echo "Rebuild hierarchical key $sAttCode from $sClass.\n";
HierarchicalKey::Rebuild($sClass, $sAttCode, $oAttDef);
}
}
$oP->p("Done");
$oP->output();
} catch (AuthenticationException $oException) {
$oP->p($oException->getMessage());
$oP->output();
exit(BinExitCode::ERROR->value);
} catch (Exception $oException) {
$oP->p("Error: ".$oException->GetMessage());
$oP->output();
exit(BinExitCode::FATAL->value);
}
echo "Done\n";

View File

@@ -5,93 +5,22 @@
* @license http://opensource.org/licenses/AGPL-3.0
*/
use Combodo\iTop\DBTools\Enum\BinExitCode;
use Combodo\iTop\DBTools\Exception\AuthenticationException;
use Combodo\iTop\DBTools\Service\DBAnalyzerUtils;
// env-xxx folders
if (file_exists(__DIR__.'/../../../approot.inc.php')) {
require_once __DIR__.'/../../../approot.inc.php';
}
// datamodel/2.x and data/xxx-modules folders
elseif (file_exists(__DIR__.'/../../../../approot.inc.php')) {
require_once __DIR__.'/../../../../approot.inc.php';
require_once('../../../approot.inc.php');
require_once(APPROOT.'application/startup.inc.php');
require_once('../db_analyzer.class.inc.php');
require_once('../src/Service/DBAnalyzerUtils.php');
$oDBAnalyzer = new DatabaseAnalyzer(0);
$aResults = $oDBAnalyzer->CheckIntegrity([]);
if (empty($aResults)) {
echo "Database OK\n";
exit(0);
}
require_once APPROOT.'application/startup.inc.php';
require_once APPROOT.'application/loginwebpage.class.inc.php';
$sReportFile = DBAnalyzerUtils::GenerateReport($aResults);
require_once __DIR__.'/../db_analyzer.class.inc.php';
// Prepare output page
$sPageTitle = "Database maintenance tools - Report";
$bIsModeCLI = utils::IsModeCLI();
if ($bIsModeCLI) {
$oP = new CLIPage($sPageTitle);
SetupUtils::CheckPhpAndExtensionsForCli($oP, BinExitCode::FATAL->value);
} else {
$oP = new WebPage($sPageTitle);
}
// Authentication logic
try {
utils::UseParamFile();
if ($bIsModeCLI) {
$sAuthUser = utils::ReadParam('auth_user', null, true, utils::ENUM_SANITIZATION_FILTER_RAW_DATA);
$sAuthPwd = utils::ReadParam('auth_pwd', null, true, utils::ENUM_SANITIZATION_FILTER_RAW_DATA);
if (utils::IsNullOrEmptyString($sAuthUser) || utils::IsNullOrEmptyString($sAuthPwd)) {
throw new AuthenticationException("Access credentials not provided, usage: php report.php --auth_user=<login> --auth_pwd=<password> [--param_file=<file_path>]");
}
if (UserRights::CheckCredentials($sAuthUser, $sAuthPwd)) {
UserRights::Login($sAuthUser);
} else {
throw new AuthenticationException("Access wrong credentials ('$sAuthUser')");
}
} else {
// Check user rights and prompt if needed
LoginWebPage::DoLoginEx(null, true);
}
if (!UserRights::IsAdministrator()) {
throw new AuthenticationException("Access restricted to administrators");
}
} catch (AuthenticationException $oException) {
$sExceptionMessage = $oP instanceof WebPage ? utils::EscapeHtml($oException->getMessage()) : $oException->getMessage();
$oP->p($sExceptionMessage);
$oP->output();
exit(BinExitCode::ERROR->value);
} catch (Exception $oException) {
$sExceptionMessage = $oP instanceof WebPage ? utils::EscapeHtml($oException->getMessage()) : $oException->getMessage();
$oP->p("Error: ".$sExceptionMessage);
$oP->output();
exit(BinExitCode::FATAL->value);
}
// Business logic
try {
$oDBAnalyzer = new DatabaseAnalyzer(0);
$aResults = $oDBAnalyzer->CheckIntegrity([]);
if (empty($aResults)) {
$oP->p("Database OK");
$oP->output();
exit(BinExitCode::SUCCESS->value);
}
$sReportFile = DBAnalyzerUtils::GenerateReport($aResults);
$oP->p("Report generated: {$sReportFile}.log");
$oP->output();
} catch (AuthenticationException $oException) {
$sExceptionMessage = $oP instanceof WebPage ? utils::EscapeHtml($oException->getMessage()) : $oException->getMessage();
$oP->p($sExceptionMessage);
$oP->output();
exit(BinExitCode::ERROR->value);
} catch (Exception $oException) {
$sExceptionMessage = $oP instanceof WebPage ? utils::EscapeHtml($oException->getMessage()) : $oException->getMessage();
$oP->p("Error: ".$sExceptionMessage);
$oP->output();
exit(BinExitCode::FATAL->value);
}
echo "Report generated: {$sReportFile}.log\n";

View File

@@ -1,9 +0,0 @@
{
"name": "combodo/combodo-db-tools",
"license": "AGPL-3.0-only",
"autoload": {
"psr-4": {
"Combodo\\iTop\\DBTools\\": "src/"
}
}
}

View File

@@ -1,18 +0,0 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "38292b9b3a56c6c8776285a17c58034e",
"packages": [],
"packages-dev": [],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": {},
"prefer-stable": false,
"prefer-lowest": false,
"platform": {},
"platform-dev": {},
"plugin-api-version": "2.6.0"
}

View File

@@ -43,7 +43,6 @@ SetupWebPage::AddModule(
// Components
//
'datamodel' => [
'vendor/autoload.php',
'src/Service/DBToolsUtils.php',
'src/Service/DBAnalyzerUtils.php',
],

View File

@@ -1,18 +0,0 @@
<?php
/*
* @copyright Copyright (C) 2010-2026 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
namespace Combodo\iTop\DBTools\Enum;
/**
* Enum for the exit codes of the bin scripts
*/
enum BinExitCode: int
{
case SUCCESS = 0;
case ERROR = -1;
case FATAL = -2;
}

View File

@@ -1,12 +0,0 @@
<?php
/*
* @copyright Copyright (C) 2010-2026 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
namespace Combodo\iTop\DBTools\Exception;
class AuthenticationException extends \Exception
{
}

View File

@@ -1,22 +0,0 @@
<?php
// autoload.php @generated by Composer
if (PHP_VERSION_ID < 50600) {
if (!headers_sent()) {
header('HTTP/1.1 500 Internal Server Error');
}
$err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
if (!ini_get('display_errors')) {
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
fwrite(STDERR, $err);
} elseif (!headers_sent()) {
echo $err;
}
}
throw new RuntimeException($err);
}
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit38292b9b3a56c6c8776285a17c58034e::getLoader();

View File

@@ -1,579 +0,0 @@
<?php
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer\Autoload;
/**
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
*
* $loader = new \Composer\Autoload\ClassLoader();
*
* // register classes with namespaces
* $loader->add('Symfony\Component', __DIR__.'/component');
* $loader->add('Symfony', __DIR__.'/framework');
*
* // activate the autoloader
* $loader->register();
*
* // to enable searching the include path (eg. for PEAR packages)
* $loader->setUseIncludePath(true);
*
* In this example, if you try to use a class in the Symfony\Component
* namespace or one of its children (Symfony\Component\Console for instance),
* the autoloader will first look for the class under the component/
* directory, and it will then fallback to the framework/ directory if not
* found before giving up.
*
* This class is loosely based on the Symfony UniversalClassLoader.
*
* @author Fabien Potencier <fabien@symfony.com>
* @author Jordi Boggiano <j.boggiano@seld.be>
* @see https://www.php-fig.org/psr/psr-0/
* @see https://www.php-fig.org/psr/psr-4/
*/
class ClassLoader
{
/** @var \Closure(string):void */
private static $includeFile;
/** @var string|null */
private $vendorDir;
// PSR-4
/**
* @var array<string, array<string, int>>
*/
private $prefixLengthsPsr4 = array();
/**
* @var array<string, list<string>>
*/
private $prefixDirsPsr4 = array();
/**
* @var list<string>
*/
private $fallbackDirsPsr4 = array();
// PSR-0
/**
* List of PSR-0 prefixes
*
* Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
*
* @var array<string, array<string, list<string>>>
*/
private $prefixesPsr0 = array();
/**
* @var list<string>
*/
private $fallbackDirsPsr0 = array();
/** @var bool */
private $useIncludePath = false;
/**
* @var array<string, string>
*/
private $classMap = array();
/** @var bool */
private $classMapAuthoritative = false;
/**
* @var array<string, bool>
*/
private $missingClasses = array();
/** @var string|null */
private $apcuPrefix;
/**
* @var array<string, self>
*/
private static $registeredLoaders = array();
/**
* @param string|null $vendorDir
*/
public function __construct($vendorDir = null)
{
$this->vendorDir = $vendorDir;
self::initializeIncludeClosure();
}
/**
* @return array<string, list<string>>
*/
public function getPrefixes()
{
if (!empty($this->prefixesPsr0)) {
return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
}
return array();
}
/**
* @return array<string, list<string>>
*/
public function getPrefixesPsr4()
{
return $this->prefixDirsPsr4;
}
/**
* @return list<string>
*/
public function getFallbackDirs()
{
return $this->fallbackDirsPsr0;
}
/**
* @return list<string>
*/
public function getFallbackDirsPsr4()
{
return $this->fallbackDirsPsr4;
}
/**
* @return array<string, string> Array of classname => path
*/
public function getClassMap()
{
return $this->classMap;
}
/**
* @param array<string, string> $classMap Class to filename map
*
* @return void
*/
public function addClassMap(array $classMap)
{
if ($this->classMap) {
$this->classMap = array_merge($this->classMap, $classMap);
} else {
$this->classMap = $classMap;
}
}
/**
* Registers a set of PSR-0 directories for a given prefix, either
* appending or prepending to the ones previously set for this prefix.
*
* @param string $prefix The prefix
* @param list<string>|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
*
* @return void
*/
public function add($prefix, $paths, $prepend = false)
{
$paths = (array) $paths;
if (!$prefix) {
if ($prepend) {
$this->fallbackDirsPsr0 = array_merge(
$paths,
$this->fallbackDirsPsr0
);
} else {
$this->fallbackDirsPsr0 = array_merge(
$this->fallbackDirsPsr0,
$paths
);
}
return;
}
$first = $prefix[0];
if (!isset($this->prefixesPsr0[$first][$prefix])) {
$this->prefixesPsr0[$first][$prefix] = $paths;
return;
}
if ($prepend) {
$this->prefixesPsr0[$first][$prefix] = array_merge(
$paths,
$this->prefixesPsr0[$first][$prefix]
);
} else {
$this->prefixesPsr0[$first][$prefix] = array_merge(
$this->prefixesPsr0[$first][$prefix],
$paths
);
}
}
/**
* Registers a set of PSR-4 directories for a given namespace, either
* appending or prepending to the ones previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param list<string>|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function addPsr4($prefix, $paths, $prepend = false)
{
$paths = (array) $paths;
if (!$prefix) {
// Register directories for the root namespace.
if ($prepend) {
$this->fallbackDirsPsr4 = array_merge(
$paths,
$this->fallbackDirsPsr4
);
} else {
$this->fallbackDirsPsr4 = array_merge(
$this->fallbackDirsPsr4,
$paths
);
}
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
// Register directories for a new namespace.
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->prefixDirsPsr4[$prefix] = $paths;
} elseif ($prepend) {
// Prepend directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge(
$paths,
$this->prefixDirsPsr4[$prefix]
);
} else {
// Append directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge(
$this->prefixDirsPsr4[$prefix],
$paths
);
}
}
/**
* Registers a set of PSR-0 directories for a given prefix,
* replacing any others previously set for this prefix.
*
* @param string $prefix The prefix
* @param list<string>|string $paths The PSR-0 base directories
*
* @return void
*/
public function set($prefix, $paths)
{
if (!$prefix) {
$this->fallbackDirsPsr0 = (array) $paths;
} else {
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
}
}
/**
* Registers a set of PSR-4 directories for a given namespace,
* replacing any others previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param list<string>|string $paths The PSR-4 base directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function setPsr4($prefix, $paths)
{
if (!$prefix) {
$this->fallbackDirsPsr4 = (array) $paths;
} else {
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->prefixDirsPsr4[$prefix] = (array) $paths;
}
}
/**
* Turns on searching the include path for class files.
*
* @param bool $useIncludePath
*
* @return void
*/
public function setUseIncludePath($useIncludePath)
{
$this->useIncludePath = $useIncludePath;
}
/**
* Can be used to check if the autoloader uses the include path to check
* for classes.
*
* @return bool
*/
public function getUseIncludePath()
{
return $this->useIncludePath;
}
/**
* Turns off searching the prefix and fallback directories for classes
* that have not been registered with the class map.
*
* @param bool $classMapAuthoritative
*
* @return void
*/
public function setClassMapAuthoritative($classMapAuthoritative)
{
$this->classMapAuthoritative = $classMapAuthoritative;
}
/**
* Should class lookup fail if not found in the current class map?
*
* @return bool
*/
public function isClassMapAuthoritative()
{
return $this->classMapAuthoritative;
}
/**
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
*
* @param string|null $apcuPrefix
*
* @return void
*/
public function setApcuPrefix($apcuPrefix)
{
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
}
/**
* The APCu prefix in use, or null if APCu caching is not enabled.
*
* @return string|null
*/
public function getApcuPrefix()
{
return $this->apcuPrefix;
}
/**
* Registers this instance as an autoloader.
*
* @param bool $prepend Whether to prepend the autoloader or not
*
* @return void
*/
public function register($prepend = false)
{
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
if (null === $this->vendorDir) {
return;
}
if ($prepend) {
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
} else {
unset(self::$registeredLoaders[$this->vendorDir]);
self::$registeredLoaders[$this->vendorDir] = $this;
}
}
/**
* Unregisters this instance as an autoloader.
*
* @return void
*/
public function unregister()
{
spl_autoload_unregister(array($this, 'loadClass'));
if (null !== $this->vendorDir) {
unset(self::$registeredLoaders[$this->vendorDir]);
}
}
/**
* Loads the given class or interface.
*
* @param string $class The name of the class
* @return true|null True if loaded, null otherwise
*/
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
$includeFile = self::$includeFile;
$includeFile($file);
return true;
}
return null;
}
/**
* Finds the path to the file where the class is defined.
*
* @param string $class The name of the class
*
* @return string|false The path if found, false otherwise
*/
public function findFile($class)
{
// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
return false;
}
if (null !== $this->apcuPrefix) {
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
if ($hit) {
return $file;
}
}
$file = $this->findFileWithExtension($class, '.php');
// Search for Hack files if we are running on HHVM
if (false === $file && defined('HHVM_VERSION')) {
$file = $this->findFileWithExtension($class, '.hh');
}
if (null !== $this->apcuPrefix) {
apcu_add($this->apcuPrefix.$class, $file);
}
if (false === $file) {
// Remember that this class does not exist.
$this->missingClasses[$class] = true;
}
return $file;
}
/**
* Returns the currently registered loaders keyed by their corresponding vendor directories.
*
* @return array<string, self>
*/
public static function getRegisteredLoaders()
{
return self::$registeredLoaders;
}
/**
* @param string $class
* @param string $ext
* @return string|false
*/
private function findFileWithExtension($class, $ext)
{
// PSR-4 lookup
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
$first = $class[0];
if (isset($this->prefixLengthsPsr4[$first])) {
$subPath = $class;
while (false !== $lastPos = strrpos($subPath, '\\')) {
$subPath = substr($subPath, 0, $lastPos);
$search = $subPath . '\\';
if (isset($this->prefixDirsPsr4[$search])) {
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
foreach ($this->prefixDirsPsr4[$search] as $dir) {
if (file_exists($file = $dir . $pathEnd)) {
return $file;
}
}
}
}
}
// PSR-4 fallback dirs
foreach ($this->fallbackDirsPsr4 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
return $file;
}
}
// PSR-0 lookup
if (false !== $pos = strrpos($class, '\\')) {
// namespaced class name
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
} else {
// PEAR-like class name
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
}
if (isset($this->prefixesPsr0[$first])) {
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
if (0 === strpos($class, $prefix)) {
foreach ($dirs as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
return $file;
}
}
}
}
}
// PSR-0 fallback dirs
foreach ($this->fallbackDirsPsr0 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
return $file;
}
}
// PSR-0 include paths.
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
return $file;
}
return false;
}
/**
* @return void
*/
private static function initializeIncludeClosure()
{
if (self::$includeFile !== null) {
return;
}
/**
* Scope isolated include.
*
* Prevents access to $this/self from included files.
*
* @param string $file
* @return void
*/
self::$includeFile = \Closure::bind(static function($file) {
include $file;
}, null, null);
}
}

View File

@@ -1,378 +0,0 @@
<?php
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer;
use Composer\Autoload\ClassLoader;
use Composer\Semver\VersionParser;
/**
* This class is copied in every Composer installed project and available to all
*
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
*
* To require its presence, you can require `composer-runtime-api ^2.0`
*
* @final
*/
class InstalledVersions
{
/**
* @var mixed[]|null
* @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
*/
private static $installed;
/**
* @var bool
*/
private static $installedIsLocalDir;
/**
* @var bool|null
*/
private static $canGetVendors;
/**
* @var array[]
* @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
*/
private static $installedByVendor = array();
/**
* Returns a list of all package names which are present, either by being installed, replaced or provided
*
* @return string[]
* @psalm-return list<string>
*/
public static function getInstalledPackages()
{
$packages = array();
foreach (self::getInstalled() as $installed) {
$packages[] = array_keys($installed['versions']);
}
if (1 === \count($packages)) {
return $packages[0];
}
return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
}
/**
* Returns a list of all package names with a specific type e.g. 'library'
*
* @param string $type
* @return string[]
* @psalm-return list<string>
*/
public static function getInstalledPackagesByType($type)
{
$packagesByType = array();
foreach (self::getInstalled() as $installed) {
foreach ($installed['versions'] as $name => $package) {
if (isset($package['type']) && $package['type'] === $type) {
$packagesByType[] = $name;
}
}
}
return $packagesByType;
}
/**
* Checks whether the given package is installed
*
* This also returns true if the package name is provided or replaced by another package
*
* @param string $packageName
* @param bool $includeDevRequirements
* @return bool
*/
public static function isInstalled($packageName, $includeDevRequirements = true)
{
foreach (self::getInstalled() as $installed) {
if (isset($installed['versions'][$packageName])) {
return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;
}
}
return false;
}
/**
* Checks whether the given package satisfies a version constraint
*
* e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
*
* Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
*
* @param VersionParser $parser Install composer/semver to have access to this class and functionality
* @param string $packageName
* @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
* @return bool
*/
public static function satisfies(VersionParser $parser, $packageName, $constraint)
{
$constraint = $parser->parseConstraints((string) $constraint);
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
return $provided->matches($constraint);
}
/**
* Returns a version constraint representing all the range(s) which are installed for a given package
*
* It is easier to use this via isInstalled() with the $constraint argument if you need to check
* whether a given version of a package is installed, and not just whether it exists
*
* @param string $packageName
* @return string Version constraint usable with composer/semver
*/
public static function getVersionRanges($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
$ranges = array();
if (isset($installed['versions'][$packageName]['pretty_version'])) {
$ranges[] = $installed['versions'][$packageName]['pretty_version'];
}
if (array_key_exists('aliases', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
}
if (array_key_exists('replaced', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
}
if (array_key_exists('provided', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
}
return implode(' || ', $ranges);
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
*/
public static function getVersion($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['version'])) {
return null;
}
return $installed['versions'][$packageName]['version'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
*/
public static function getPrettyVersion($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['pretty_version'])) {
return null;
}
return $installed['versions'][$packageName]['pretty_version'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
*/
public static function getReference($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['reference'])) {
return null;
}
return $installed['versions'][$packageName]['reference'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
*/
public static function getInstallPath($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @return array
* @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
*/
public static function getRootPackage()
{
$installed = self::getInstalled();
return $installed[0]['root'];
}
/**
* Returns the raw installed.php data for custom implementations
*
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
* @return array[]
* @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
*/
public static function getRawData()
{
@trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
if (null === self::$installed) {
// only require the installed.php file if this file is loaded from its dumped location,
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
if (substr(__DIR__, -8, 1) !== 'C') {
self::$installed = include __DIR__ . '/installed.php';
} else {
self::$installed = array();
}
}
return self::$installed;
}
/**
* Returns the raw data of all installed.php which are currently loaded for custom implementations
*
* @return array[]
* @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
*/
public static function getAllRawData()
{
return self::getInstalled();
}
/**
* Lets you reload the static array from another file
*
* This is only useful for complex integrations in which a project needs to use
* this class but then also needs to execute another project's autoloader in process,
* and wants to ensure both projects have access to their version of installed.php.
*
* A typical case would be PHPUnit, where it would need to make sure it reads all
* the data it needs from this class, then call reload() with
* `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
* the project in which it runs can then also use this class safely, without
* interference between PHPUnit's dependencies and the project's dependencies.
*
* @param array[] $data A vendor/composer/installed.php data set
* @return void
*
* @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
*/
public static function reload($data)
{
self::$installed = $data;
self::$installedByVendor = array();
// when using reload, we disable the duplicate protection to ensure that self::$installed data is
// always returned, but we cannot know whether it comes from the installed.php in __DIR__ or not,
// so we have to assume it does not, and that may result in duplicate data being returned when listing
// all installed packages for example
self::$installedIsLocalDir = false;
}
/**
* @return array[]
* @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
*/
private static function getInstalled()
{
if (null === self::$canGetVendors) {
self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
}
$installed = array();
$copiedLocalDir = false;
if (self::$canGetVendors) {
$selfDir = strtr(__DIR__, '\\', '/');
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
$vendorDir = strtr($vendorDir, '\\', '/');
if (isset(self::$installedByVendor[$vendorDir])) {
$installed[] = self::$installedByVendor[$vendorDir];
} elseif (is_file($vendorDir.'/composer/installed.php')) {
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
$required = require $vendorDir.'/composer/installed.php';
self::$installedByVendor[$vendorDir] = $required;
$installed[] = $required;
if (self::$installed === null && $vendorDir.'/composer' === $selfDir) {
self::$installed = $required;
self::$installedIsLocalDir = true;
}
}
if (self::$installedIsLocalDir && $vendorDir.'/composer' === $selfDir) {
$copiedLocalDir = true;
}
}
}
if (null === self::$installed) {
// only require the installed.php file if this file is loaded from its dumped location,
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
if (substr(__DIR__, -8, 1) !== 'C') {
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
$required = require __DIR__ . '/installed.php';
self::$installed = $required;
} else {
self::$installed = array();
}
}
if (self::$installed !== array() && !$copiedLocalDir) {
$installed[] = self::$installed;
}
return $installed;
}
}

View File

@@ -1,15 +0,0 @@
<?php
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
'Combodo\\iTop\\DBTools\\Enum\\BinExitCode' => $baseDir . '/src/Enum/BinExitCode.php',
'Combodo\\iTop\\DBTools\\Exception\\AuthenticationException' => $baseDir . '/src/Exception/AuthenticationException.php',
'Combodo\\iTop\\DBTools\\Service\\BinUtils' => $baseDir . '/src/Service/BinUtils.php',
'Combodo\\iTop\\DBTools\\Service\\DBAnalyzerUtils' => $baseDir . '/src/Service/DBAnalyzerUtils.php',
'Combodo\\iTop\\DBTools\\Service\\DBToolsUtils' => $baseDir . '/src/Service/DBToolsUtils.php',
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
);

View File

@@ -1,9 +0,0 @@
<?php
// autoload_namespaces.php @generated by Composer
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
);

View File

@@ -1,10 +0,0 @@
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
'Combodo\\iTop\\DBTools\\' => array($baseDir . '/src'),
);

View File

@@ -1,37 +0,0 @@
<?php
// autoload_real.php @generated by Composer
class ComposerAutoloaderInit38292b9b3a56c6c8776285a17c58034e
{
private static $loader;
public static function loadClassLoader($class)
{
if ('Composer\Autoload\ClassLoader' === $class) {
require __DIR__ . '/ClassLoader.php';
}
}
/**
* @return \Composer\Autoload\ClassLoader
*/
public static function getLoader()
{
if (null !== self::$loader) {
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInit38292b9b3a56c6c8776285a17c58034e', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInit38292b9b3a56c6c8776285a17c58034e', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit38292b9b3a56c6c8776285a17c58034e::getInitializer($loader));
$loader->setClassMapAuthoritative(true);
$loader->register(true);
return $loader;
}
}

View File

@@ -1,41 +0,0 @@
<?php
// autoload_static.php @generated by Composer
namespace Composer\Autoload;
class ComposerStaticInit38292b9b3a56c6c8776285a17c58034e
{
public static $prefixLengthsPsr4 = array (
'C' =>
array (
'Combodo\\iTop\\DBTools\\' => 21,
),
);
public static $prefixDirsPsr4 = array (
'Combodo\\iTop\\DBTools\\' =>
array (
0 => __DIR__ . '/../..' . '/src',
),
);
public static $classMap = array (
'Combodo\\iTop\\DBTools\\Enum\\BinExitCode' => __DIR__ . '/../..' . '/src/Enum/BinExitCode.php',
'Combodo\\iTop\\DBTools\\Exception\\AuthenticationException' => __DIR__ . '/../..' . '/src/Exception/AuthenticationException.php',
'Combodo\\iTop\\DBTools\\Service\\BinUtils' => __DIR__ . '/../..' . '/src/Service/BinUtils.php',
'Combodo\\iTop\\DBTools\\Service\\DBAnalyzerUtils' => __DIR__ . '/../..' . '/src/Service/DBAnalyzerUtils.php',
'Combodo\\iTop\\DBTools\\Service\\DBToolsUtils' => __DIR__ . '/../..' . '/src/Service/DBToolsUtils.php',
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
);
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInit38292b9b3a56c6c8776285a17c58034e::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit38292b9b3a56c6c8776285a17c58034e::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInit38292b9b3a56c6c8776285a17c58034e::$classMap;
}, null, ClassLoader::class);
}
}

View File

@@ -1,5 +0,0 @@
{
"packages": [],
"dev": true,
"dev-package-names": []
}

View File

@@ -1,23 +0,0 @@
<?php return array(
'root' => array(
'name' => 'combodo/combodo-db-tools',
'pretty_version' => '1.0.0+no-version-set',
'version' => '1.0.0.0',
'reference' => null,
'type' => 'library',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'dev' => true,
),
'versions' => array(
'combodo/combodo-db-tools' => array(
'pretty_version' => '1.0.0+no-version-set',
'version' => '1.0.0.0',
'reference' => null,
'type' => 'library',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'dev_requirement' => false,
),
),
);

View File

@@ -199,15 +199,15 @@ function RaiseAlarm($sMessage)
//////////
// Main
try {
utils::UseParamFile();
} catch (Exception $e) {
echo "Error: ".$e->GetMessage()."\n";
exit;
}
if (utils::IsModeCLI()) {
try {
utils::UseParamFile();
} catch (Exception $e) {
echo 'Error: '.$e->GetMessage()."\n";
exit;
}
$oP = new CLIPage('Check backup utility');
SetupUtils::CheckPhpAndExtensionsForCli($oP);
SetupUtils::CheckPhpAndExtensionsForCli(new CLIPage('Check backup utility'));
echo date('Y-m-d H:i:s')." - running check-backup utility\n";
try {

View File

@@ -88,15 +88,16 @@ if (utils::IsModeCLI()) {
$oP = new CLIPage(GetOperationName());
SetupUtils::CheckPhpAndExtensionsForCli($oP);
try {
utils::UseParamFile();
} catch (Exception $e) {
ExitError($oP, $e->GetMessage());
}
} else {
$oP = new WebPage(GetOperationName());
}
try {
utils::UseParamFile();
} catch (Exception $e) {
ExitError($oP, $e->GetMessage());
}
ExecuteMainOperation($oP);
$oP->output();

View File

@@ -24,7 +24,7 @@ class DBRestore extends DBBackup
/** @var string */
private $sDBUser;
public function __construct(?\Config $oConfig = null)
public function __construct(\Config $oConfig = null)
{
parent::__construct($oConfig);

View File

@@ -19,7 +19,7 @@ Dict::Add('FR FR', 'French', 'Français', [
'Class:FAQ/Attribute:summary+' => '',
'Class:FAQ/Attribute:description' => 'Description',
'Class:FAQ/Attribute:description+' => '',
'Class:FAQ/Attribute:category_id' => 'Catégorie',
'Class:FAQ/Attribute:category_id' => 'Categorie',
'Class:FAQ/Attribute:category_id+' => '',
'Class:FAQ/Attribute:category_name' => 'Nom catégorie',
'Class:FAQ/Attribute:category_name+' => '',

View File

@@ -18,7 +18,7 @@ class HubNewsroomProvider extends NewsroomProviderBase
* {@inheritDoc}
* @see NewsroomProviderBase::IsApplicable()
*/
public function IsApplicable(?User $oUser = null)
public function IsApplicable(User $oUser = null)
{
if ($oUser !== null) {
return UserRights::IsAdministrator($oUser);

View File

@@ -27,7 +27,7 @@ class PortalCollector extends AbstractDataCollector
}
/** @inheritdoc */
public function collect(Request $request, Response $response, ?Throwable $exception = null): void
public function collect(Request $request, Response $response, Throwable $exception = null): void
{
$oRegister = $this->oTemplatesProviderService->GetRegister();
$aTemplatesDefinitions = $oRegister->GetTemplatesDefinitions();

View File

@@ -129,7 +129,7 @@ class ObjectFormHandlerHelper
* @throws \OQLException
* @throws \Exception
*/
public function HandleForm(Request $oRequest, $sMode, $sObjectClass, $sObjectId = null, ?array $aFormProperties = null)
public function HandleForm(Request $oRequest, $sMode, $sObjectClass, $sObjectId = null, array $aFormProperties = null)
{
$aFormData = [];
$sOperation = $this->oRequestManipulator->ReadParam('operation', '');

View File

@@ -40,7 +40,7 @@ class AppVariable implements ArrayAccess
/** @var DecoratedAppVariable */
private $decorated;
public function __construct(DecoratedAppVariable $decorated, ?ContainerInterface $container = null)
public function __construct(DecoratedAppVariable $decorated, ContainerInterface $container = null)
{
$this->decorated = $decorated;
$this->container = $container;

View File

@@ -57,7 +57,7 @@ class TemplatesTwigExtension extends AbstractExtension
* @return string the template path
* @throws \ReflectionException
*/
public function GetTemplate(string $sId, string $sProviderClass = self::DEFAULT_PROVIDER_CLASS, ?object $oProviderInstance = null): string
public function GetTemplate(string $sId, string $sProviderClass = self::DEFAULT_PROVIDER_CLASS, object $oProviderInstance = null): string
{
if ($oProviderInstance === null) {
return $this->oTemplatesService->GetTemplatePath($sProviderClass, $sId);

View File

@@ -238,11 +238,6 @@
<action id="action:bulk delete">allow</action>
</actions>
</group>
<group id="Ticketing">
<actions>
<action id="stimulus:ev_close">allow</action>
</actions>
</group>
<group id="UserRequest">
<actions>
<action id="stimulus:ev_approve">allow</action>
@@ -259,10 +254,8 @@
<group id="Incident">
<actions>
<action id="stimulus:ev_assign">allow</action>
<action id="stimulus:ev_dispatch">allow</action>
<action id="stimulus:ev_reassign">allow</action>
<action id="stimulus:ev_resolve">allow</action>
<action id="stimulus:ev_reopen">allow</action>
<action id="stimulus:ev_close">allow</action>
<action id="stimulus:ev_pending">allow</action>
</actions>

View File

@@ -392,6 +392,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [
Dict::Add('CS CZ', 'Czech', 'Čeština', [
'BooleanLabel:yes' => 'ano',
'BooleanLabel:no' => 'ne',
'UI:Login:Title' => ITOP_APPLICATION_SHORT.' login~~',
'UI:WelcomeMenu:Title' => 'Vítejte v '.ITOP_APPLICATION_SHORT, 'UI:WelcomeMenu:AllOpenRequests' => 'Otevřené požadavky: %1$d',
'UI:WelcomeMenu:MyCalls' => 'Mé požadavky',
'UI:WelcomeMenu:OpenIncidents' => 'Otevřené incidenty: %1$d',
@@ -549,9 +550,52 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [
'UI:SearchValue:CheckAll' => 'Vybrat vše',
'UI:SearchValue:UncheckAll' => 'Zrušit výběr',
'UI:SelectOne' => '-- zvolte jednu z možností --',
'UI:Login:Welcome' => 'Vítejte v '.ITOP_APPLICATION_SHORT.'!',
'UI:Login:IncorrectLoginPassword' => 'Nesprávné uživatelské jméno nebo heslo. Zkuste to prosím znovu.',
'UI:Login:IdentifyYourself' => 'Před pokračováním se prosím identifikujte.',
'UI:Login:UserNamePrompt' => 'Uživatelské jméno',
'UI:Login:PasswordPrompt' => 'Heslo',
'UI:Login:ForgotPwd' => 'Zapomněli jste své heslo?',
'UI:Login:ForgotPwdForm' => 'Zapomenuté heslo',
'UI:Login:ForgotPwdForm+' => ITOP_APPLICATION_SHORT.' vám může zaslat instrukce pro obnovení vašeho hesla.',
'UI:Login:ResetPassword' => 'Zaslat nyní!',
'UI:Login:ResetPwdFailed' => 'Chyba při odesílání emailu: %1$s',
'UI:Login:SeparatorOr' => 'Or~~',
'UI:ResetPwd-Error-WrongLogin' => '\'%1$s\' není platné uživatelské jméno',
'UI:ResetPwd-Error-NotPossible' => 'obnova hesla u externích účtů není možná.',
'UI:ResetPwd-Error-FixedPwd' => 'obnova hesla u tohoto účtu není povolená.',
'UI:ResetPwd-Error-NoContact' => 'účet není spojen s žádnou osobou.',
'UI:ResetPwd-Error-NoEmailAtt' => 'účet není spojen s osobou s uvedenou emailovou adresou. Kontaktujte administrátora.',
'UI:ResetPwd-Error-NoEmail' => 'chybí emailová adresa. Kontaktujte administrátora.',
'UI:ResetPwd-Error-Send' => 'technický problém při odesílání emailu. Kontaktujte administrátora.',
'UI:ResetPwd-EmailSent' => 'Zkontrolujte prosím svoji emailovou schránku a postupujte podle pokynů. Pokud žádný email neobdržíte, zkontrolujte prosím zadané uživatelské jméno.',
'UI:ResetPwd-EmailSubject' => 'Obnovení hesla pro '.ITOP_APPLICATION_SHORT, 'UI:ResetPwd-EmailBody' => '<body><p>Vyžádali jste obovení hesla pro '.ITOP_APPLICATION_SHORT.'.</p><p>Pokračujte kliknutím na následující <a href="%1$s">jednorázový odkaz</a> a zadejte nové heslo.</p>',
'UI:ResetPwd-Title' => 'Obnovení hesla',
'UI:ResetPwd-Error-InvalidToken' => 'Omlouváme se, ale heslo již bylo obnoveno nebo jste obdrželi více emailů. Ujistěte se, že používate odkaz z posledního emailu který jste obdrželi.',
'UI:ResetPwd-Error-EnterPassword' => 'Vložte nové heslo k účtu \'%1$s\'.',
'UI:ResetPwd-Ready' => 'Heslo bylo obnoveno.',
'UI:ResetPwd-Login' => 'Pro přihlášení klikněte zde...',
'UI:Login:About' => '',
'UI:Login:ChangeYourPassword' => 'Změnit heslo',
'UI:Login:OldPasswordPrompt' => 'Původní heslo',
'UI:Login:NewPasswordPrompt' => 'Nové heslo',
'UI:Login:RetypeNewPasswordPrompt' => 'Znovu nové heslo',
'UI:Login:IncorrectOldPassword' => 'Chyba: původní heslo je nesprávné',
'UI:LogOffMenu' => 'Odhlásit',
'UI:LogOff:ThankYou' => 'Děkujeme za užívání '.ITOP_APPLICATION_SHORT, 'UI:LogOff:ClickHereToLoginAgain' => 'Klikněte zde pro nové přihlášení...',
'UI:ChangePwdMenu' => 'Změnit heslo',
'UI:Login:PasswordChanged' => 'Heslo nastaveno úspěšně!',
'UI:Login:PasswordNotChanged' => 'Chyba: heslo je stejné jako přechozí!',
'UI:AccessRO-All' => ITOP_APPLICATION_SHORT.' je pouze ke čtení',
'UI:AccessRO-Users' => ITOP_APPLICATION_SHORT.' je pouze ke čtení pro koncové uživatele',
'UI:ApplicationEnvironment' => 'Aplikační prostředí: %1$s',
'UI:Login:RetypePwdDoesNotMatch' => 'Nová hesla se neshodují!',
'UI:Button:Login' => 'Přihlásit',
'UI:Login:Error:AccessRestricted' => 'Přístup je omezen. Kontaktujte administrátora.',
'UI:Login:Error:AccessAdmin' => 'Přístup vyhrazen osobám s administrátorskými právy. Kontaktujte administrátora.',
'UI:Login:Error:WrongOrganizationName' => 'Neznámá organizace',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Více kontaktů má stejný email',
'UI:Login:Error:NoValidProfiles' => 'Není zadán platný profil',
'UI:CSVImport:MappingSelectOne' => '-- zvolte jednu z možností --',
'UI:CSVImport:MappingNotApplicable' => '-- ignorovat --',
'UI:CSVImport:NoData' => 'Žádná data!',

View File

@@ -392,6 +392,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
Dict::Add('DA DA', 'Danish', 'Dansk', [
'BooleanLabel:yes' => 'yes~~',
'BooleanLabel:no' => 'no~~',
'UI:Login:Title' => ITOP_APPLICATION_SHORT.' login~~',
'UI:WelcomeMenu:Title' => 'Velkommen til '.ITOP_APPLICATION_SHORT, 'UI:WelcomeMenu:AllOpenRequests' => 'Åbne anmodninger: %1$d',
'UI:WelcomeMenu:MyCalls' => 'Mine brugerhenvendelser',
'UI:WelcomeMenu:OpenIncidents' => 'Åbne Incidents: %1$d',
@@ -549,9 +550,52 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
'UI:SearchValue:CheckAll' => 'Check All~~',
'UI:SearchValue:UncheckAll' => 'Uncheck All~~',
'UI:SelectOne' => '-- Vælg venligst --',
'UI:Login:Welcome' => 'Velkommen til '.ITOP_APPLICATION_SHORT.'!',
'UI:Login:IncorrectLoginPassword' => 'Ukorrekt login/adgangskode, venligst prøv igen.',
'UI:Login:IdentifyYourself' => 'Identificer dig før du fortsætter',
'UI:Login:UserNamePrompt' => 'Bruger Navn',
'UI:Login:PasswordPrompt' => 'Adgangskode',
'UI:Login:ForgotPwd' => 'Forgot your password?~~',
'UI:Login:ForgotPwdForm' => 'Forgot your password~~',
'UI:Login:ForgotPwdForm+' => ITOP_APPLICATION_SHORT.' can send you an email in which you will find instructions to follow to reset your account.~~',
'UI:Login:ResetPassword' => 'Send now!~~',
'UI:Login:ResetPwdFailed' => 'Failed to send an email: %1$s~~',
'UI:Login:SeparatorOr' => 'Or~~',
'UI:ResetPwd-Error-WrongLogin' => '\'%1$s\' is not a valid login~~',
'UI:ResetPwd-Error-NotPossible' => 'external accounts do not allow password reset.~~',
'UI:ResetPwd-Error-FixedPwd' => 'the account does not allow password reset.~~',
'UI:ResetPwd-Error-NoContact' => 'the account is not associated to a person.~~',
'UI:ResetPwd-Error-NoEmailAtt' => 'the account is not associated to a person having an email attribute. Please Contact your administrator.~~',
'UI:ResetPwd-Error-NoEmail' => 'missing an email address. Please Contact your administrator.~~',
'UI:ResetPwd-Error-Send' => 'email transport technical issue. Please Contact your administrator.~~',
'UI:ResetPwd-EmailSent' => 'Please check your email box and follow the instructions. If you receive no email, please check the login you typed.~~',
'UI:ResetPwd-EmailSubject' => 'Reset your '.ITOP_APPLICATION_SHORT.' password~~',
'UI:ResetPwd-EmailBody' => '<body><p>You have requested to reset your '.ITOP_APPLICATION_SHORT.' password.</p><p>Please follow this link (single usage) to <a href="%1$s">enter a new password</a></p>.~~',
'UI:ResetPwd-Title' => 'Reset password~~',
'UI:ResetPwd-Error-InvalidToken' => 'Sorry, either the password has already been reset, or you have received several emails. Please make sure that you use the link provided in the very last email received.~~',
'UI:ResetPwd-Error-EnterPassword' => 'Enter a new password for the account \'%1$s\'.~~',
'UI:ResetPwd-Ready' => 'The password has been changed.~~',
'UI:ResetPwd-Login' => 'Click here to login...~~',
'UI:Login:About' => 'Om',
'UI:Login:ChangeYourPassword' => 'Skift Adgangskode',
'UI:Login:OldPasswordPrompt' => 'Gammel Adgangskode',
'UI:Login:NewPasswordPrompt' => 'Ny Adgangskode',
'UI:Login:RetypeNewPasswordPrompt' => 'Gentag ny adgangskode',
'UI:Login:IncorrectOldPassword' => 'Fejl: den gamle adgangskode er forkert',
'UI:LogOffMenu' => 'Log ud',
'UI:LogOff:ThankYou' => 'Tak for at du brugte '.ITOP_APPLICATION_SHORT, 'UI:LogOff:ClickHereToLoginAgain' => 'Klik her for at logge ind igen...',
'UI:ChangePwdMenu' => 'Skift Adgangskode...',
'UI:Login:PasswordChanged' => 'Adgangskode oprettet med success!',
'UI:Login:PasswordNotChanged' => 'Error: Password is the same!~~',
'UI:AccessRO-All' => ITOP_APPLICATION_SHORT.' er skrivebeskyttet',
'UI:AccessRO-Users' => ITOP_APPLICATION_SHORT.' er skrivebeskyttet for slutbrugere',
'UI:ApplicationEnvironment' => 'Applikations miljø: %1$s',
'UI:Login:RetypePwdDoesNotMatch' => 'Ny adgangskode og gentaget adgangskode passer ikke sammen!',
'UI:Button:Login' => 'Enter '.ITOP_APPLICATION_SHORT, 'UI:Login:Error:AccessRestricted' => ITOP_APPLICATION_SHORT.' adgang er begrænset. Venligst, kontakt en '.ITOP_APPLICATION_SHORT.' administrator.',
'UI:Login:Error:AccessAdmin' => 'Adgang er begrænset til administratorer. Venligst, kontakt en '.ITOP_APPLICATION_SHORT.' administrator.',
'UI:Login:Error:WrongOrganizationName' => 'Unknown organization~~',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Multiple contacts have the same e-mail~~',
'UI:Login:Error:NoValidProfiles' => 'No valid profile provided~~',
'UI:CSVImport:MappingSelectOne' => '-- Vælg venligst --',
'UI:CSVImport:MappingNotApplicable' => '-- ignorer dette felt --',
'UI:CSVImport:NoData' => 'Tomt data sæt..., venligst angiv nogle data!',

View File

@@ -391,6 +391,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'BooleanLabel:yes' => 'Ja',
'BooleanLabel:no' => 'Nein',
'UI:Login:Title' => ITOP_APPLICATION_SHORT.' Login',
'UI:WelcomeMenu:Title' => 'Willkommen bei '.ITOP_APPLICATION_SHORT, 'UI:WelcomeMenu:AllOpenRequests' => 'Offene Requests: %1$d',
'UI:WelcomeMenu:MyCalls' => 'An mich gestellte Benutzeranfragen',
'UI:WelcomeMenu:OpenIncidents' => 'Offene Incidents: %1$d',
@@ -548,9 +549,54 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
'UI:SearchValue:CheckAll' => 'Alle auswählen',
'UI:SearchValue:UncheckAll' => 'Auswahl aufheben',
'UI:SelectOne' => 'bitte wählen',
'UI:Login:Welcome' => 'Willkommen bei '.ITOP_APPLICATION_SHORT.'!',
'UI:Login:IncorrectLoginPassword' => 'Ungültiges Passwort oder Login-Daten. Bitte versuchen Sie es erneut.',
'UI:Login:IdentifyYourself' => 'Bitte identifizieren Sie sich, bevor Sie fortfahren.',
'UI:Login:UserNamePrompt' => 'Benutzername',
'UI:Login:PasswordPrompt' => 'Passwort',
'UI:Login:ForgotPwd' => 'Neues Passwort zusenden',
'UI:Login:ForgotPwdForm' => 'Neues Passwort zusenden',
'UI:Login:ForgotPwdForm+' => ITOP_APPLICATION_SHORT.' kann Ihnen eine Mail mit Anweisungen senden, wie Sie Ihren Account/Passwort zurücksetzen können',
'UI:Login:ResetPassword' => 'Jetzt senden!',
'UI:Login:ResetPwdFailed' => 'Konnte keine E-Mail versenden: %1$s',
'UI:Login:SeparatorOr' => 'oder',
'UI:ResetPwd-Error-WrongLogin' => '\'%1$s\' ist kein gültiger Login',
'UI:ResetPwd-Error-NotPossible' => 'Passwort-Reset bei externem Benutzerkonto nicht möglich',
'UI:ResetPwd-Error-FixedPwd' => 'das Benutzerkonto erlaubt keinen Passwort-Reset. ',
'UI:ResetPwd-Error-NoContact' => 'das Benutzerkonto ist nicht mit einer Person verknüpft. ',
'UI:ResetPwd-Error-NoEmailAtt' => 'das Benutzerkonto ist nicht mit einer Person verknüpft, die eine Mailadresse besitzt. Bitte wenden Sie sich an Ihren Administrator. ',
'UI:ResetPwd-Error-NoEmail' => 'die E-Mail-Adresse dieses Accounts fehlt. Bitte kontaktieren Sie Ihren Administrator.',
'UI:ResetPwd-Error-Send' => 'Beim Versenden der E-Mail trat ein technisches Problem auf. Bitte kontaktieren Sie Ihren Administrator.',
'UI:ResetPwd-EmailSent' => 'Bitte schauen Sie in Ihre Mailbox und folgen Sie den Anweisungen.',
'UI:ResetPwd-EmailSubject' => 'Zurücksetzen Ihres '.ITOP_APPLICATION_SHORT.'-Passworts',
'UI:ResetPwd-EmailBody' => '<body><p>Sie haben das Zurücksetzen Ihres '.ITOP_APPLICATION_SHORT.' Passworts angefordert.</p><p>Bitte folgen Sie diesem Link (funktioniert nur einmalig) : <a href="%1$s">neues Passwort eingeben</a></p>.',
'UI:ResetPwd-Title' => 'Passwort zurücksetzen',
'UI:ResetPwd-Error-InvalidToken' => 'Entschuldigung, aber entweder das Passwort wurde bereits zurückgesetzt, oder Sie haben mehrere E-Mails für das Zurücksetzen erhalten. Bitte nutzen Sie den link in der letzten Mail, die Sie erhalten haben.',
'UI:ResetPwd-Error-EnterPassword' => 'Geben Sie ein neues Passwort für das Konto \'%1$s\' ein.',
'UI:ResetPwd-Ready' => 'Das Passwort wurde geändert. ',
'UI:ResetPwd-Login' => 'Klicken Sie hier um sich einzuloggen...',
'UI:Login:About' => 'iTop Powered by Combodo',
'UI:Login:ChangeYourPassword' => 'Ändern Sie Ihr Passwort',
'UI:Login:OldPasswordPrompt' => 'Altes Passwort',
'UI:Login:NewPasswordPrompt' => 'Neues Passwort',
'UI:Login:RetypeNewPasswordPrompt' => 'Wiederholen Sie Ihr neues Passwort',
'UI:Login:IncorrectOldPassword' => 'Fehler: das alte Passwort ist ungültig',
'UI:LogOffMenu' => 'Abmelden',
'UI:LogOff:ThankYou' => 'Vielen Dank dafür, dass Sie '.ITOP_APPLICATION_SHORT.' benutzen!',
'UI:LogOff:ClickHereToLoginAgain' => 'Klicken Sie hier, um sich wieder anzumelden...',
'UI:ChangePwdMenu' => 'Passwort ändern...',
'UI:Login:PasswordChanged' => 'Passwort erfolgreich gesetzt!',
'UI:Login:PasswordNotChanged' => 'Fehler: Das Passwort das gleiche!',
'UI:AccessRO-All' => ITOP_APPLICATION_SHORT.' ist nur lesbar',
'UI:AccessRO-Users' => ITOP_APPLICATION_SHORT.' ist nur lesbar für Endnutzer',
'UI:ApplicationEnvironment' => 'Applikationsumgebung: %1$s',
'UI:Login:RetypePwdDoesNotMatch' => 'Neues Passwort und das wiederholte Passwort stimmen nicht überein!',
'UI:Button:Login' => 'in '.ITOP_APPLICATION_SHORT.' anmelden',
'UI:Login:Error:AccessRestricted' => 'Der '.ITOP_APPLICATION_SHORT.'-Zugang ist gesperrt. Bitte kontaktieren Sie Ihren '.ITOP_APPLICATION_SHORT.'-Administrator.',
'UI:Login:Error:AccessAdmin' => 'Zugang nur für Personen mit Administratorrechten. Bitte kontaktieren Sie Ihren '.ITOP_APPLICATION_SHORT.'-Administrator.',
'UI:Login:Error:WrongOrganizationName' => 'Unbekannte Organisation',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Mehrere Kontakte mit gleicher E-Mail-Adresse',
'UI:Login:Error:NoValidProfiles' => 'Kein gültiges Profil ausgewählt',
'UI:CSVImport:MappingSelectOne' => 'Bitte wählen',
'UI:CSVImport:MappingNotApplicable' => '-- Dieses Feld ignorieren --',
'UI:CSVImport:NoData' => 'Keine Daten eingegeben ... bitte geben Sie Daten ein!',

View File

@@ -407,6 +407,7 @@ Dict::Add('EN US', 'English', 'English', [
Dict::Add('EN US', 'English', 'English', [
'BooleanLabel:yes' => 'yes',
'BooleanLabel:no' => 'no',
'UI:Login:Title' => ITOP_APPLICATION_SHORT.' login',
'UI:WelcomeMenu:Title' => 'Welcome to '.ITOP_APPLICATION_SHORT,
'UI:WelcomeMenu:AllOpenRequests' => 'Open requests: %1$d',
'UI:WelcomeMenu:MyCalls' => 'My requests',
@@ -569,9 +570,57 @@ Dict::Add('EN US', 'English', 'English', [
'UI:SearchValue:CheckAll' => 'Check All',
'UI:SearchValue:UncheckAll' => 'Uncheck All',
'UI:SelectOne' => '-- select one --',
'UI:Login:Welcome' => 'Welcome to '.ITOP_APPLICATION_SHORT.'!',
'UI:Login:IncorrectLoginPassword' => 'Incorrect login/password, please try again.',
'UI:Login:IdentifyYourself' => 'Identify yourself before continuing',
'UI:Login:UserNamePrompt' => 'User Name',
'UI:Login:PasswordPrompt' => 'Password',
'UI:Login:ForgotPwd' => 'Forgot your password?',
'UI:Login:ForgotPwdForm' => 'Forgot your password',
'UI:Login:ForgotPwdForm+' => ITOP_APPLICATION_SHORT.' can send you an email in which you will find instructions to follow to reset your account.',
'UI:Login:ResetPassword' => 'Send now!',
'UI:Login:ResetPwdFailed' => 'Failed to send an email: %1$s',
'UI:Login:SeparatorOr' => 'Or',
'UI:ResetPwd-Error-WrongLogin' => '\'%1$s\' is not a valid login',
'UI:ResetPwd-Error-NotPossible' => 'external accounts do not allow password reset.',
'UI:ResetPwd-Error-FixedPwd' => 'the account does not allow password reset.',
'UI:ResetPwd-Error-NoContact' => 'the account is not associated to a person.',
'UI:ResetPwd-Error-NoEmailAtt' => 'the account is not associated to a person having an email attribute. Please Contact your administrator.',
'UI:ResetPwd-Error-NoEmail' => 'missing an email address. Please Contact your administrator.',
'UI:ResetPwd-Error-Send' => 'email transport technical issue. Please Contact your administrator.',
'UI:ResetPwd-EmailSent' => 'Please check your email box and follow the instructions. If you receive no email, please check the login you typed.',
'UI:ResetPwd-EmailSubject' => 'Reset your '.ITOP_APPLICATION_SHORT.' password',
'UI:ResetPwd-EmailBody' => '<body><p>You have requested to reset your '.ITOP_APPLICATION_SHORT.' password.</p><p>Please follow this link (single usage) to <a href="%1$s">enter a new password</a></p>.',
'UI:ResetPwd-Title' => 'Reset password',
'UI:ResetPwd-Error-InvalidToken' => 'Sorry, either the password has already been reset, or you have received several emails. Please make sure that you use the link provided in the very last email received.',
'UI:ResetPwd-Error-EnterPassword' => 'Enter a new password for the account \'%1$s\'.',
'UI:ResetPwd-Ready' => 'The password has been changed.',
'UI:ResetPwd-Login' => 'Click here to login...',
'UI:Login:About' => ITOP_APPLICATION.' Powered by Combodo',
'UI:Login:ChangeYourPassword' => 'Change Your Password',
'UI:Login:OldPasswordPrompt' => 'Old password',
'UI:Login:NewPasswordPrompt' => 'New password',
'UI:Login:RetypeNewPasswordPrompt' => 'Retype new password',
'UI:Login:IncorrectOldPassword' => 'Error: the old password is incorrect',
'UI:LogOffMenu' => 'Log off',
'UI:LogOff:ThankYou' => 'Thank you for using '.ITOP_APPLICATION,
'UI:LogOff:ClickHereToLoginAgain' => 'Click here to login again...',
'UI:ChangePwdMenu' => 'Change Password...',
'UI:Login:PasswordChanged' => 'Password successfully set!',
'UI:Login:PasswordNotChanged' => 'Error: Password is the same!',
'UI:AccessRO-All' => ITOP_APPLICATION.' is read-only',
'UI:AccessRO-Users' => ITOP_APPLICATION.' is read-only for end-users',
'UI:ApplicationEnvironment' => 'Application environment: %1$s',
'UI:Login:RetypePwdDoesNotMatch' => 'New password and retyped new password do not match!',
'UI:Button:Login' => 'Enter '.ITOP_APPLICATION,
'UI:Login:Error:AccessRestricted' => ITOP_APPLICATION_SHORT.' access to this page is restricted. Please, contact an '.ITOP_APPLICATION_SHORT.' administrator.',
'UI:Login:Error:AccessAdmin' => 'Access restricted to people having administrator privileges. Please, contact an '.ITOP_APPLICATION_SHORT.' administrator.',
'UI:Login:Error:WrongOrganizationName' => 'Unknown organization',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Multiple contacts have the same e-mail',
'UI:Login:Error:NoValidProfiles' => 'No valid profile provided',
'UI:CSVImport:MappingSelectOne' => '-- select one --',
'UI:CSVImport:MappingNotApplicable' => '-- ignore this field --',
'UI:CSVImport:NoData' => 'Empty data set..., please provide some data!',

View File

@@ -407,6 +407,7 @@ Dict::Add('EN GB', 'British English', 'British English', [
Dict::Add('EN GB', 'British English', 'British English', [
'BooleanLabel:yes' => 'yes',
'BooleanLabel:no' => 'no',
'UI:Login:Title' => ITOP_APPLICATION_SHORT.' login',
'UI:WelcomeMenu:Title' => 'Welcome to '.ITOP_APPLICATION_SHORT,
'UI:WelcomeMenu:AllOpenRequests' => 'Open requests: %1$d',
'UI:WelcomeMenu:MyCalls' => 'My requests',
@@ -569,9 +570,57 @@ Dict::Add('EN GB', 'British English', 'British English', [
'UI:SearchValue:CheckAll' => 'Check All',
'UI:SearchValue:UncheckAll' => 'Uncheck All',
'UI:SelectOne' => '-- select one --',
'UI:Login:Welcome' => 'Welcome to '.ITOP_APPLICATION_SHORT.'!',
'UI:Login:IncorrectLoginPassword' => 'Incorrect login/password, please try again.',
'UI:Login:IdentifyYourself' => 'Identify yourself before continuing',
'UI:Login:UserNamePrompt' => 'User Name',
'UI:Login:PasswordPrompt' => 'Password',
'UI:Login:ForgotPwd' => 'Forgot your password?',
'UI:Login:ForgotPwdForm' => 'Forgot your password',
'UI:Login:ForgotPwdForm+' => ITOP_APPLICATION_SHORT.' can send you an email in which you will find instructions to follow to reset your account.',
'UI:Login:ResetPassword' => 'Send now!',
'UI:Login:ResetPwdFailed' => 'Failed to send an email: %1$s',
'UI:Login:SeparatorOr' => 'Or',
'UI:ResetPwd-Error-WrongLogin' => '\'%1$s\' is not a valid login',
'UI:ResetPwd-Error-NotPossible' => 'external accounts do not allow password reset.',
'UI:ResetPwd-Error-FixedPwd' => 'the account does not allow password reset.',
'UI:ResetPwd-Error-NoContact' => 'the account is not associated with a person.',
'UI:ResetPwd-Error-NoEmailAtt' => 'the account is not associated to a person having an email attribute. Please contact your administrator.',
'UI:ResetPwd-Error-NoEmail' => 'missing an email address. Please Contact your administrator.',
'UI:ResetPwd-Error-Send' => 'email transport technical issue. Please Contact your administrator.',
'UI:ResetPwd-EmailSent' => 'Please check your email box and follow the instructions. If you receive no email, please check the login you typed.',
'UI:ResetPwd-EmailSubject' => 'Reset your '.ITOP_APPLICATION_SHORT.' password',
'UI:ResetPwd-EmailBody' => '<body><p>You have requested to reset your '.ITOP_APPLICATION_SHORT.' password.</p><p>Please follow this link (single usage) to <a href="%1$s">enter a new password</a></p>.',
'UI:ResetPwd-Title' => 'Reset password',
'UI:ResetPwd-Error-InvalidToken' => 'Sorry, either the password has already been reset, or you have received several emails. Please make sure that you use the link provided in the very last email received.',
'UI:ResetPwd-Error-EnterPassword' => 'Enter a new password for the account \'%1$s\'.',
'UI:ResetPwd-Ready' => 'The password has been changed.',
'UI:ResetPwd-Login' => 'Click here to log in...',
'UI:Login:About' => ITOP_APPLICATION.' Powered by Combodo',
'UI:Login:ChangeYourPassword' => 'Change Your Password',
'UI:Login:OldPasswordPrompt' => 'Old password',
'UI:Login:NewPasswordPrompt' => 'New password',
'UI:Login:RetypeNewPasswordPrompt' => 'Retype new password',
'UI:Login:IncorrectOldPassword' => 'Error: the old password is incorrect',
'UI:LogOffMenu' => 'Log off',
'UI:LogOff:ThankYou' => 'Thank you for using '.ITOP_APPLICATION,
'UI:LogOff:ClickHereToLoginAgain' => 'Click here to log in again...',
'UI:ChangePwdMenu' => 'Change Password...',
'UI:Login:PasswordChanged' => 'Password successfully set!',
'UI:Login:PasswordNotChanged' => 'Error: Password is the same!',
'UI:AccessRO-All' => ITOP_APPLICATION.' is read-only',
'UI:AccessRO-Users' => ITOP_APPLICATION.' is read-only for end-users',
'UI:ApplicationEnvironment' => 'Application environment: %1$s',
'UI:Login:RetypePwdDoesNotMatch' => 'New password and retyped new password do not match!',
'UI:Button:Login' => 'Enter '.ITOP_APPLICATION,
'UI:Login:Error:AccessRestricted' => ITOP_APPLICATION_SHORT.' access to this page is restricted. Please, contact an '.ITOP_APPLICATION_SHORT.' administrator.',
'UI:Login:Error:AccessAdmin' => 'Access restricted to people having administrator privileges. Please, contact an '.ITOP_APPLICATION_SHORT.' administrator.',
'UI:Login:Error:WrongOrganizationName' => 'Unknown organisation',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Multiple contacts have the same e-mail',
'UI:Login:Error:NoValidProfiles' => 'No valid profile provided',
'UI:CSVImport:MappingSelectOne' => '-- select one --',
'UI:CSVImport:MappingNotApplicable' => '-- ignore this field --',
'UI:CSVImport:NoData' => 'Empty data set..., please provide some data!',

View File

@@ -390,6 +390,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
'BooleanLabel:yes' => 'Si',
'BooleanLabel:no' => 'No',
'UI:Login:Title' => 'Inicio de Sesión',
'UI:WelcomeMenu:Title' => 'Bienvenido a '.ITOP_APPLICATION_SHORT, 'UI:WelcomeMenu:AllOpenRequests' => 'Requerimientos Abiertos: %1$d',
'UI:WelcomeMenu:MyCalls' => 'Mis Requerimientos',
'UI:WelcomeMenu:OpenIncidents' => 'Incidentes Abiertos: %1$d',
@@ -547,9 +548,51 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
'UI:SearchValue:CheckAll' => 'Seleccionar Todo',
'UI:SearchValue:UncheckAll' => 'Deseleccionar Todo',
'UI:SelectOne' => '-- Seleccione uno --',
'UI:Login:Welcome' => 'Bienvenido a '.ITOP_APPLICATION_SHORT, 'UI:Login:IncorrectLoginPassword' => 'Usuario/Contraseña incorrecto, por favor intente otra vez.',
'UI:Login:IdentifyYourself' => 'Identifiquese antes de continuar',
'UI:Login:UserNamePrompt' => 'Usuario ',
'UI:Login:PasswordPrompt' => 'Contraseña',
'UI:Login:ForgotPwd' => '¿Olvidó su contraseña?',
'UI:Login:ForgotPwdForm' => 'Olvido de Contraseña',
'UI:Login:ForgotPwdForm+' => ITOP_APPLICATION_SHORT.' puede enviarle un correo en el cual encontrará las instrucciones a seguir para restablecer su contraseña.',
'UI:Login:ResetPassword' => 'Enviar Ahora',
'UI:Login:ResetPwdFailed' => 'Error al enviar correo-e: %1$s',
'UI:Login:SeparatorOr' => 'O',
'UI:ResetPwd-Error-WrongLogin' => '\'%1$s\' no es un usuario válido',
'UI:ResetPwd-Error-NotPossible' => 'Cuentas externas no permiten restablecimiento de contraseña.',
'UI:ResetPwd-Error-FixedPwd' => 'La cuenta no permite restablecimiento de contraseña.',
'UI:ResetPwd-Error-NoContact' => 'La cuenta no está asociada a una persona.',
'UI:ResetPwd-Error-NoEmailAtt' => 'La cuenta no está asociada a una persona con correo electrónico. Por favor contacte al administrador.',
'UI:ResetPwd-Error-NoEmail' => 'Falta dirección de correo electrónico. Por favor contacte al administrador.',
'UI:ResetPwd-Error-Send' => 'Falla al envar un correo. Por favor contacte al administrador.',
'UI:ResetPwd-EmailSent' => 'Por favor verifique su buzón de correo y siga las instrucciones. Si no recibe el mensaje, por favor verifique la cuenta proporcionada.',
'UI:ResetPwd-EmailSubject' => 'Restablecer contraseña de '.ITOP_APPLICATION_SHORT, 'UI:ResetPwd-EmailBody' => '<body><p>Ha solicitado restablecer su contraseña en '.ITOP_APPLICATION_SHORT.'.</p><p>Por favor de click en la siguiente liga: <a href="%1$s">proporcione una nueva contraseña</a></p>.',
'UI:ResetPwd-Title' => 'Restablecer Contraseña',
'UI:ResetPwd-Error-InvalidToken' => 'Lo siento, tal vez su contraseña ya ha sido cambiada, o ha recibido varios correos electrónicos. Por favor asegurese de haber dado click a la liga del último correo recibido.',
'UI:ResetPwd-Error-EnterPassword' => 'Contraseña Nueva para \'%1$s\'.',
'UI:ResetPwd-Ready' => 'La contraseña ha sido cambiada.',
'UI:ResetPwd-Login' => 'Click aquí para conectarse ',
'UI:Login:About' => 'Acerca de',
'UI:Login:ChangeYourPassword' => 'Cambie su Contraseña',
'UI:Login:OldPasswordPrompt' => 'Contraseña Actual',
'UI:Login:NewPasswordPrompt' => 'Contraseña Nueva',
'UI:Login:RetypeNewPasswordPrompt' => 'Confirme Contraseña Nueva',
'UI:Login:IncorrectOldPassword' => 'Error: la Contraseña Anterior es Incorrecta',
'UI:LogOffMenu' => 'Cerrar Sesión',
'UI:LogOff:ThankYou' => 'Gracias por usar '.ITOP_APPLICATION_SHORT, 'UI:LogOff:ClickHereToLoginAgain' => 'Click aquí para conectarse nuevamente',
'UI:ChangePwdMenu' => 'Cambiar Contraseña',
'UI:Login:PasswordChanged' => '¡Contraseña Exitosamente Cambiada!',
'UI:Login:PasswordNotChanged' => 'Error: ¡La contraseña es la misma!',
'UI:AccessRO-All' => ITOP_APPLICATION_SHORT.' está en modo de sólo lectura',
'UI:AccessRO-Users' => ITOP_APPLICATION_SHORT.' está en modo de sólo lectura para usuarios',
'UI:ApplicationEnvironment' => 'Ambiente: %1$s',
'UI:Login:RetypePwdDoesNotMatch' => '¡La Nueva Contraseña y su Confirmación No Coinciden!',
'UI:Button:Login' => 'Entrar',
'UI:Login:Error:AccessRestricted' => 'El acceso a '.ITOP_APPLICATION_SHORT.' está restringido. Por favor contacte al Administrador de '.ITOP_APPLICATION_SHORT.'.',
'UI:Login:Error:AccessAdmin' => 'Acceso restringido a usuarios con privilegio de administrador. Por favor contacte al Administrador de '.ITOP_APPLICATION_SHORT.'.',
'UI:Login:Error:WrongOrganizationName' => 'Organización desconocida',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Varios contactos tienen la misma dirección de correo electrónico',
'UI:Login:Error:NoValidProfiles' => 'Perfil inválido',
'UI:CSVImport:MappingSelectOne' => '-- seleccione uno --',
'UI:CSVImport:MappingNotApplicable' => '-- ignore este campo --',
'UI:CSVImport:NoData' => 'Conjunto de datos vacío..., por favor provea algun dato.',

View File

@@ -397,6 +397,7 @@ Dict::Add('FR FR', 'French', 'Français', [
Dict::Add('FR FR', 'French', 'Français', [
'BooleanLabel:yes' => 'oui',
'BooleanLabel:no' => 'non',
'UI:Login:Title' => ITOP_APPLICATION_SHORT.' login',
'UI:WelcomeMenu:Title' => 'Bienvenue dans '.ITOP_APPLICATION_SHORT, 'UI:WelcomeMenu:AllOpenRequests' => 'Requêtes en cours: %1$d',
'UI:WelcomeMenu:MyCalls' => 'Mes appels support',
'UI:WelcomeMenu:OpenIncidents' => 'Incidents en cours: %1$d',
@@ -562,9 +563,51 @@ Nous espérons que vous aimerez cette version autant que nous avons eu du plaisi
'UI:SearchValue:CheckAll' => 'Cocher',
'UI:SearchValue:UncheckAll' => 'Décocher',
'UI:SelectOne' => '-- choisir une valeur --',
'UI:Login:Welcome' => 'Bienvenue dans '.ITOP_APPLICATION_SHORT.'!',
'UI:Login:IncorrectLoginPassword' => 'Mot de passe ou identifiant incorrect.',
'UI:Login:IdentifyYourself' => 'Merci de vous identifier',
'UI:Login:UserNamePrompt' => 'Identifiant',
'UI:Login:PasswordPrompt' => 'Mot de passe',
'UI:Login:ForgotPwd' => 'Mot de passe oublié ?',
'UI:Login:ForgotPwdForm' => 'Mot de passe oublié',
'UI:Login:ForgotPwdForm+' => 'Vous pouvez demander à saisir un nouveau mot de passe. Vous allez recevoir un email et vous pourrez suivre les instructions.',
'UI:Login:ResetPassword' => 'Envoyer le message',
'UI:Login:ResetPwdFailed' => 'Impossible de vous faire parvenir le message: %1$s',
'UI:Login:SeparatorOr' => 'Ou',
'UI:ResetPwd-Error-WrongLogin' => 'le compte \'%1$s\' est inconnu.',
'UI:ResetPwd-Error-NotPossible' => 'les comptes "externes" ne permettent pas la saisie d\'un mot de passe dans '.ITOP_APPLICATION_SHORT.'.',
'UI:ResetPwd-Error-FixedPwd' => 'ce mode de saisie du mot de passe n\'est pas autorisé pour ce compte.',
'UI:ResetPwd-Error-NoContact' => 'le comte n\'est pas associé à une Personne.',
'UI:ResetPwd-Error-NoEmailAtt' => 'il manque un attribut de type "email" sur la Personne associée à ce compte. Veuillez contacter l\'administrateur de l\'application.',
'UI:ResetPwd-Error-NoEmail' => 'il manque une adresse email sur la Personne associée à ce compte. Veuillez contacter l\'administrateur de l\'application.',
'UI:ResetPwd-Error-Send' => 'erreur technique lors de l\'envoi de l\'email. Veuillez contacter l\'administrateur de l\'application.',
'UI:ResetPwd-EmailSent' => 'Veuillez vérifier votre boîte de réception. Ensuite, suivez les instructions données dans l\'email. Si vous ne recevez pas d\'email, merci de vérifier le login saisi',
'UI:ResetPwd-EmailSubject' => 'Changer votre mot de passe '.ITOP_APPLICATION_SHORT, 'UI:ResetPwd-EmailBody' => '<body><p>Vous avez demandé à changer votre mot de passe '.ITOP_APPLICATION_SHORT.' sans connaître le mot de passe précédent.</p><p>Veuillez suivre le lien suivant (usage unique) afin de pouvoir <a href="%1$s">saisir un nouveau mot de passe</a></p>.',
'UI:ResetPwd-Title' => 'Nouveau mot de passe',
'UI:ResetPwd-Error-InvalidToken' => 'Désolé, le mot de passe a déjà été modifié avec le lien que vous avez suivi, ou bien vous avez reçu plusieurs emails. Dans ce cas, veillez à utiliser le tout dernier lien reçu.',
'UI:ResetPwd-Error-EnterPassword' => 'Veuillez saisir le nouveau mot de passe pour \'%1$s\'.',
'UI:ResetPwd-Ready' => 'Le mot de passe a bien été changé.',
'UI:ResetPwd-Login' => 'Cliquez ici pour vous connecter...',
'UI:Login:About' => ITOP_APPLICATION.' Powered by Combodo~~',
'UI:Login:ChangeYourPassword' => 'Changer de mot de passe',
'UI:Login:OldPasswordPrompt' => 'Ancien mot de passe',
'UI:Login:NewPasswordPrompt' => 'Nouveau mot de passe',
'UI:Login:RetypeNewPasswordPrompt' => 'Resaisir le nouveau mot de passe',
'UI:Login:IncorrectOldPassword' => 'Erreur: l\'ancien mot de passe est incorrect',
'UI:LogOffMenu' => 'Déconnexion',
'UI:LogOff:ThankYou' => 'Merci d\'avoir utilisé '.ITOP_APPLICATION_SHORT, 'UI:LogOff:ClickHereToLoginAgain' => 'Cliquez ici pour vous reconnecter...',
'UI:ChangePwdMenu' => 'Changer de mot de passe...',
'UI:Login:PasswordChanged' => 'Mot de passe mis à jour !',
'UI:Login:PasswordNotChanged' => 'Erreur : le mot de passe est identique !',
'UI:AccessRO-All' => ITOP_APPLICATION_SHORT.' est en lecture seule',
'UI:AccessRO-Users' => ITOP_APPLICATION_SHORT.' est en lecture seule pour les utilisateurs finaux',
'UI:ApplicationEnvironment' => 'Environnement applicatif: %1$s',
'UI:Login:RetypePwdDoesNotMatch' => 'Les deux saisies du nouveau mot de passe ne sont pas identiques !',
'UI:Button:Login' => 'Entrer dans '.ITOP_APPLICATION_SHORT, 'UI:Login:Error:AccessRestricted' => 'L\'accès à cette page '.ITOP_APPLICATION_SHORT.' est soumis à autorisation. Merci de contacter votre administrateur '.ITOP_APPLICATION_SHORT.'.',
'UI:Login:Error:AccessAdmin' => 'Accès restreint aux utilisateurs possédant le profil Administrateur.',
'UI:Login:Error:WrongOrganizationName' => 'Organisation inconnue',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Email partagé par plusieurs contacts',
'UI:Login:Error:NoValidProfiles' => 'Pas de profil valide',
'UI:CSVImport:MappingSelectOne' => '-- choisir une valeur --',
'UI:CSVImport:MappingNotApplicable' => '-- ignorer ce champ --',
'UI:CSVImport:NoData' => 'Aucune donnée... merci de fournir des données !',

View File

@@ -394,6 +394,7 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [
Dict::Add('HU HU', 'Hungarian', 'Magyar', [
'BooleanLabel:yes' => 'Igen',
'BooleanLabel:no' => 'Nem',
'UI:Login:Title' => ITOP_APPLICATION_SHORT.' bejelentkezés',
'UI:WelcomeMenu:Title' => 'Üdvözli az '.ITOP_APPLICATION_SHORT, 'UI:WelcomeMenu:AllOpenRequests' => 'Nyitott kérelmek: %1$d',
'UI:WelcomeMenu:MyCalls' => 'Saját kérelmek',
'UI:WelcomeMenu:OpenIncidents' => 'Nyitott incidensek: %1$d',
@@ -551,9 +552,54 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [
'UI:SearchValue:CheckAll' => 'Összes bejelölése',
'UI:SearchValue:UncheckAll' => 'Bejelölés megszüntetése',
'UI:SelectOne' => '-- válasszon ki egyet --',
'UI:Login:Welcome' => 'Üdvözli az '.ITOP_APPLICATION_SHORT.'!',
'UI:Login:IncorrectLoginPassword' => 'Nem megfelelő bejelentkezési név/jelszó, kérjük próbálja újra.',
'UI:Login:IdentifyYourself' => 'Folytatás előtt azonosítsa magát',
'UI:Login:UserNamePrompt' => 'Felhasználónév',
'UI:Login:PasswordPrompt' => 'Jelszó',
'UI:Login:ForgotPwd' => 'Elfelejtette a jelszavát?',
'UI:Login:ForgotPwdForm' => 'Elfelejtett jelszó',
'UI:Login:ForgotPwdForm+' => ITOP_APPLICATION_SHORT.' küldhet Önnek egy emailt, amelyben utasításokat talál a fiókja visszaállításához.',
'UI:Login:ResetPassword' => 'Küldje most!',
'UI:Login:ResetPwdFailed' => 'Sikertelen email küldés: %1$s',
'UI:Login:SeparatorOr' => 'Vagy',
'UI:ResetPwd-Error-WrongLogin' => '\'%1$s\' nem érvényes fiók',
'UI:ResetPwd-Error-NotPossible' => 'a külső fiókok jelszava itt nem állítható vissza.',
'UI:ResetPwd-Error-FixedPwd' => 'a fiók nem teszi lehetővé a jelszó visszaállítását.',
'UI:ResetPwd-Error-NoContact' => 'a fiók nem személyhez tartozik',
'UI:ResetPwd-Error-NoEmailAtt' => 'a fiók nem olyan személyhez tartozik amelynek van email címe. Keresse a rendszergazdát.',
'UI:ResetPwd-Error-NoEmail' => 'hiányzik az email cím. Keresse a rendszergazdát.',
'UI:ResetPwd-Error-Send' => 'email továbbítási hiba. Keresse a rendszergazdát',
'UI:ResetPwd-EmailSent' => 'Kérjük, ellenőrizze az email postafiókját, és kövesse az utasításokat. Ha nem kap emailt, kérjük, ellenőrizze a beírt bejelentkezési adatait.',
'UI:ResetPwd-EmailSubject' => 'Állítsa vissza az '.ITOP_APPLICATION_SHORT.' jelszavát',
'UI:ResetPwd-EmailBody' => '<body><p>Ön vissza szeretné állítani az '.ITOP_APPLICATION_SHORT.' jelszavát.</p><p>Kattintson erre a linkre <a href="%1$s">új jelszó</a></p>.',
'UI:ResetPwd-Title' => 'Jelszó visszaállítás',
'UI:ResetPwd-Error-InvalidToken' => 'Sajnáljuk, de vagy már visszaállították a jelszót, vagy már több emailt is kapott. Kérjük, mindenképpen használja a legutolsó kapott emailben megadott linket.',
'UI:ResetPwd-Error-EnterPassword' => 'Adja meg az új jelszavát a %1$s a fiókjának',
'UI:ResetPwd-Ready' => 'A jelszó megváltozott',
'UI:ResetPwd-Login' => 'Jelentkezzen be...',
'UI:Login:About' => 'Névjegy',
'UI:Login:ChangeYourPassword' => 'Jelszó változtatás',
'UI:Login:OldPasswordPrompt' => 'Jelenlegi jelszó',
'UI:Login:NewPasswordPrompt' => 'Új jelszó',
'UI:Login:RetypeNewPasswordPrompt' => 'Jelszó megerősítése',
'UI:Login:IncorrectOldPassword' => 'Hiba: a jelenlegi jelszó hibás',
'UI:LogOffMenu' => 'Kilépés',
'UI:LogOff:ThankYou' => 'Köszönjük, hogy az '.ITOP_APPLICATION_SHORT.'-ot használja!',
'UI:LogOff:ClickHereToLoginAgain' => 'Ismételt bejelentkezéshez kattintson ide',
'UI:ChangePwdMenu' => 'Jelszó módosítás...',
'UI:Login:PasswordChanged' => 'Jelszó sikeresen beállítva!',
'UI:Login:PasswordNotChanged' => 'Error: Password is the same!~~',
'UI:AccessRO-All' => ITOP_APPLICATION_SHORT.' csak olvasás módban',
'UI:AccessRO-Users' => ITOP_APPLICATION_SHORT.' csak olvasás módban a végfelhasználók számára',
'UI:ApplicationEnvironment' => 'Alkalmazáskörnyezet: %1$s',
'UI:Login:RetypePwdDoesNotMatch' => 'A jelszavak nem egyeznek!',
'UI:Button:Login' => 'Belépés az '.ITOP_APPLICATION_SHORT.' alkalmazásba',
'UI:Login:Error:AccessRestricted' => ITOP_APPLICATION_SHORT.' hozzáférés korlátozva. Kérem forduljon az '.ITOP_APPLICATION_SHORT.' rendszergazdához!',
'UI:Login:Error:AccessAdmin' => 'Adminisztrátori hozzáférés korlátozott. Kérem forduljon az '.ITOP_APPLICATION_SHORT.' rendszergazdához!',
'UI:Login:Error:WrongOrganizationName' => 'Ismeretlen szervezeti egység',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Több kapcsolattartónál ugyanez az emailcím',
'UI:Login:Error:NoValidProfiles' => 'Érvénytelen a megadott profil',
'UI:CSVImport:MappingSelectOne' => '-- válasszon ki egyet --',
'UI:CSVImport:MappingNotApplicable' => '-- mező figyelmen kívül hagyása --',
'UI:CSVImport:NoData' => 'Üres mező..., kérem adjon meg adatot!',

View File

@@ -394,6 +394,7 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [
Dict::Add('IT IT', 'Italian', 'Italiano', [
'BooleanLabel:yes' => 'si',
'BooleanLabel:no' => 'no',
'UI:Login:Title' => ITOP_APPLICATION_SHORT.' login',
'UI:WelcomeMenu:Title' => 'Benveuto su '.ITOP_APPLICATION_SHORT, 'UI:WelcomeMenu:AllOpenRequests' => 'Apri le richieste: %1$d',
'UI:WelcomeMenu:MyCalls' => 'Le mie richieste',
'UI:WelcomeMenu:OpenIncidents' => 'Apri gli incidenti: %1$d',
@@ -551,9 +552,51 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [
'UI:SearchValue:CheckAll' => 'Seleziona tutti',
'UI:SearchValue:UncheckAll' => 'Deseleziona tutti',
'UI:SelectOne' => '-- selezionare uno --',
'UI:Login:Welcome' => 'Benvenuti su '.ITOP_APPLICATION_SHORT.'!',
'UI:Login:IncorrectLoginPassword' => 'Errato login/password, si prega di riprovare.',
'UI:Login:IdentifyYourself' => 'Identifica te stesso prima di continuare',
'UI:Login:UserNamePrompt' => 'Nome Utente',
'UI:Login:PasswordPrompt' => 'Password',
'UI:Login:ForgotPwd' => 'Hai dimenticato la password?',
'UI:Login:ForgotPwdForm' => 'Password dimenticata',
'UI:Login:ForgotPwdForm+' => ITOP_APPLICATION_SHORT.' può inviarti un\'email contenente le istruzioni da seguire per reimpostare il tuo account.',
'UI:Login:ResetPassword' => 'Invia ora!',
'UI:Login:ResetPwdFailed' => 'Impossibile inviare un\'email: %1$s',
'UI:Login:SeparatorOr' => 'O',
'UI:ResetPwd-Error-WrongLogin' => '\'%1$s\' non è un nome utente valido',
'UI:ResetPwd-Error-NotPossible' => 'gli account esterni non consentono la reimpostazione della password.',
'UI:ResetPwd-Error-FixedPwd' => 'l\'account non consente la reimpostazione della password.',
'UI:ResetPwd-Error-NoContact' => 'l\'account non è associato a una persona.',
'UI:ResetPwd-Error-NoEmailAtt' => 'l\'account non è associato a una persona con un attributo email. Per favore, contatta il tuo amministratore.',
'UI:ResetPwd-Error-NoEmail' => 'indirizzo email mancante. Per favore, contatta il tuo amministratore.',
'UI:ResetPwd-Error-Send' => 'problema tecnico nel trasporto dell\'email. Per favore, contatta il tuo amministratore.',
'UI:ResetPwd-EmailSent' => 'Controlla la tua casella email e segui le istruzioni. Se non ricevi alcuna email, verifica il nome utente che hai inserito.',
'UI:ResetPwd-EmailSubject' => 'Reimposta la password di '.ITOP_APPLICATION_SHORT, 'UI:ResetPwd-EmailBody' => '<body><p>Hai richiesto di reimpostare la password di '.ITOP_APPLICATION_SHORT.'.</p><p>Segui questo link (uso singolo) per <a href="%1$s">inserire una nuova password</a></p>.',
'UI:ResetPwd-Title' => 'Reimposta la password',
'UI:ResetPwd-Error-InvalidToken' => 'Spiacenti, o la password è già stata reimpostata, o hai ricevuto diverse email. Assicurati di utilizzare il link fornito nell\'ultima email ricevuta.',
'UI:ResetPwd-Error-EnterPassword' => 'Inserisci una nuova password per l\'account \'%1$s\'.',
'UI:ResetPwd-Ready' => 'La password è stata cambiata.',
'UI:ResetPwd-Login' => 'Clicca qui per accedere...',
'UI:Login:About' => ITOP_APPLICATION.' Sviluppato da Combodo',
'UI:Login:ChangeYourPassword' => 'Cambia la tua password',
'UI:Login:OldPasswordPrompt' => 'Vecchia password',
'UI:Login:NewPasswordPrompt' => 'Nuova password',
'UI:Login:RetypeNewPasswordPrompt' => 'Riscrivi la nuova password',
'UI:Login:IncorrectOldPassword' => 'Errore: la vecchia password non è corretta',
'UI:LogOffMenu' => 'Log off',
'UI:LogOff:ThankYou' => 'Grazie per aver scelto '.ITOP_APPLICATION_SHORT, 'UI:LogOff:ClickHereToLoginAgain' => 'Clicca qui per effettuare il login di nuovo...',
'UI:ChangePwdMenu' => 'Cambia Password...',
'UI:Login:PasswordChanged' => 'Password impostata con successo!',
'UI:Login:PasswordNotChanged' => 'Errore: La password è la stessa!',
'UI:AccessRO-All' => ITOP_APPLICATION_SHORT.' è di sola lettura',
'UI:AccessRO-Users' => ITOP_APPLICATION_SHORT.' è di sola lettura per gli utenti finali',
'UI:ApplicationEnvironment' => 'Ambiente dell\'applicazione: %1$s',
'UI:Login:RetypePwdDoesNotMatch' => 'Nuova password e la nuova password digitata nuovamente non corrispondono !',
'UI:Button:Login' => 'Entra in '.ITOP_APPLICATION_SHORT, 'UI:Login:Error:AccessRestricted' => 'L\'accesso a '.ITOP_APPLICATION_SHORT.' è limitato. Si prega di contattare un amministratore '.ITOP_APPLICATION_SHORT.'.',
'UI:Login:Error:AccessAdmin' => 'Accesso limitato alle persone che hanno privilegi di amministratore. Si prega di contattare un amministratore '.ITOP_APPLICATION_SHORT.'.',
'UI:Login:Error:WrongOrganizationName' => 'Organizzazione sconosciuta',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Più contatti hanno la stessa e-mail',
'UI:Login:Error:NoValidProfiles' => 'Nessun profilo valido fornito',
'UI:CSVImport:MappingSelectOne' => '-- seleziona uno --',
'UI:CSVImport:MappingNotApplicable' => '-- ignora questo campo --',
'UI:CSVImport:NoData' => 'Insieme di dati vuoto ..., si prega di fornire alcuni dati!',

View File

@@ -394,6 +394,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
Dict::Add('JA JP', 'Japanese', '日本語', [
'BooleanLabel:yes' => 'はい',
'BooleanLabel:no' => 'いいえ',
'UI:Login:Title' => ITOP_APPLICATION_SHORT.' login~~',
'UI:WelcomeMenu:Title' => 'ようこそ、'.ITOP_APPLICATION_SHORT.'へ',
'UI:WelcomeMenu:AllOpenRequests' => '要求を開く: %1$d',
'UI:WelcomeMenu:MyCalls' => '担当中の要求',
@@ -552,9 +553,54 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
'UI:SearchValue:CheckAll' => 'Check All~~',
'UI:SearchValue:UncheckAll' => 'Uncheck All~~',
'UI:SelectOne' => '-- 選んでください --',
'UI:Login:Welcome' => ITOP_APPLICATION_SHORT.'へようこそ',
'UI:Login:IncorrectLoginPassword' => 'ログイン/パスワードが正しくありません。再度入力ください。',
'UI:Login:IdentifyYourself' => '続けて作業を行う前に認証を受けてください。',
'UI:Login:UserNamePrompt' => 'ユーザー名',
'UI:Login:PasswordPrompt' => 'パスワード',
'UI:Login:ForgotPwd' => 'Forgot your password?~~',
'UI:Login:ForgotPwdForm' => 'Forgot your password~~',
'UI:Login:ForgotPwdForm+' => ITOP_APPLICATION_SHORT.' can send you an email in which you will find instructions to follow to reset your account.~~',
'UI:Login:ResetPassword' => 'Send now!~~',
'UI:Login:ResetPwdFailed' => 'Failed to send an email: %1$s~~',
'UI:Login:SeparatorOr' => 'Or~~',
'UI:ResetPwd-Error-WrongLogin' => '\'%1$s\' is not a valid login~~',
'UI:ResetPwd-Error-NotPossible' => 'external accounts do not allow password reset.~~',
'UI:ResetPwd-Error-FixedPwd' => 'the account does not allow password reset.~~',
'UI:ResetPwd-Error-NoContact' => 'the account is not associated to a person.~~',
'UI:ResetPwd-Error-NoEmailAtt' => 'the account is not associated to a person having an email attribute. Please Contact your administrator.~~',
'UI:ResetPwd-Error-NoEmail' => 'missing an email address. Please Contact your administrator.~~',
'UI:ResetPwd-Error-Send' => 'email transport technical issue. Please Contact your administrator.~~',
'UI:ResetPwd-EmailSent' => 'Please check your email box and follow the instructions. If you receive no email, please check the login you typed.~~',
'UI:ResetPwd-EmailSubject' => 'Reset your '.ITOP_APPLICATION_SHORT.' password~~',
'UI:ResetPwd-EmailBody' => '<body><p>You have requested to reset your '.ITOP_APPLICATION_SHORT.' password.</p><p>Please follow this link (single usage) to <a href="%1$s">enter a new password</a></p>.~~',
'UI:ResetPwd-Title' => 'Reset password~~',
'UI:ResetPwd-Error-InvalidToken' => 'Sorry, either the password has already been reset, or you have received several emails. Please make sure that you use the link provided in the very last email received.~~',
'UI:ResetPwd-Error-EnterPassword' => 'Enter a new password for the account \'%1$s\'.~~',
'UI:ResetPwd-Ready' => 'The password has been changed.~~',
'UI:ResetPwd-Login' => 'Click here to login...~~',
'UI:Login:About' => '',
'UI:Login:ChangeYourPassword' => 'パスワードを変更してください',
'UI:Login:OldPasswordPrompt' => '古いパスワード',
'UI:Login:NewPasswordPrompt' => '新しいパスワード',
'UI:Login:RetypeNewPasswordPrompt' => '新しいパスワードを再度入力してください。',
'UI:Login:IncorrectOldPassword' => 'エラー:既存パスワードが正しくありません。',
'UI:LogOffMenu' => 'ログオフ',
'UI:LogOff:ThankYou' => ITOP_APPLICATION_SHORT.'をご利用いただき、ありがとうございます。',
'UI:LogOff:ClickHereToLoginAgain' => '再度ログインするにはここをクリックしてください...',
'UI:ChangePwdMenu' => 'パスワードを変更する...',
'UI:Login:PasswordChanged' => 'パスワードは変更されました。',
'UI:Login:PasswordNotChanged' => 'Error: Password is the same!~~',
'UI:AccessRO-All' => ITOP_APPLICATION_SHORT.'は参照専用です。',
'UI:AccessRO-Users' => 'エンドユーザの方は'.ITOP_APPLICATION_SHORT.'は参照専用です。',
'UI:ApplicationEnvironment' => 'アプリケーション環境: %1$s',
'UI:Login:RetypePwdDoesNotMatch' => '2度入力された新しいパスワードが一致しません!',
'UI:Button:Login' => ITOP_APPLICATION_SHORT.'へ入る',
'UI:Login:Error:AccessRestricted' => ITOP_APPLICATION_SHORT.'へのアクセスは制限されています。'.ITOP_APPLICATION_SHORT.'管理者に問い合わせしてください。',
'UI:Login:Error:AccessAdmin' => '管理者権限をもつユーザにアクセスが制限されています。'.ITOP_APPLICATION_SHORT.'管理者に問い合わせしてください。',
'UI:Login:Error:WrongOrganizationName' => 'Unknown organization~~',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Multiple contacts have the same e-mail~~',
'UI:Login:Error:NoValidProfiles' => 'No valid profile provided~~',
'UI:CSVImport:MappingSelectOne' => '-- 選択ください --',
'UI:CSVImport:MappingNotApplicable' => '--このフィールドを無視する --',
'UI:CSVImport:NoData' => '空のデータセット..., データを提供してください。',

View File

@@ -392,8 +392,7 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'BooleanLabel:yes' => 'Ja',
'BooleanLabel:no' => 'Nee',
'UI:WelcomeMenu:Title' => 'Welkom in '.ITOP_APPLICATION_SHORT,
'UI:WelcomeMenu:AllOpenRequests' => 'Open aanvragen: %1$d',
'UI:Login:Title' => 'Aanmelden in '.ITOP_APPLICATION_SHORT, 'UI:WelcomeMenu:Title' => 'Welkom in '.ITOP_APPLICATION_SHORT, 'UI:WelcomeMenu:AllOpenRequests' => 'Open aanvragen: %1$d',
'UI:WelcomeMenu:MyCalls' => 'Mijn aanvragen',
'UI:WelcomeMenu:OpenIncidents' => 'Open incidenten: %1$d',
'UI:WelcomeMenu:AllConfigItems' => 'Configuratie-items: %1$d',
@@ -550,9 +549,51 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'UI:SearchValue:CheckAll' => 'Vink alles aan',
'UI:SearchValue:UncheckAll' => 'Vink alles uit',
'UI:SelectOne' => '-- selecteer --',
'UI:Login:Welcome' => 'Welkom in '.ITOP_APPLICATION_SHORT.'!',
'UI:Login:IncorrectLoginPassword' => 'Ongeldige gebruikersnaam of wachtwoord, probeer opnieuw.',
'UI:Login:IdentifyYourself' => 'Identificeer jezelf voordat je verder gaat',
'UI:Login:UserNamePrompt' => 'Gebruikersnaam',
'UI:Login:PasswordPrompt' => 'Wachtwoord',
'UI:Login:ForgotPwd' => 'Wachtwoord vergeten?',
'UI:Login:ForgotPwdForm' => 'Wachtwoord vergeten',
'UI:Login:ForgotPwdForm+' => ITOP_APPLICATION_SHORT.' kan je een e-mail sturen waarin de instructies voor het resetten van jouw account staan.',
'UI:Login:ResetPassword' => 'Stuur nu!',
'UI:Login:ResetPwdFailed' => 'E-mail sturen mislukt: %1$s',
'UI:Login:SeparatorOr' => 'Of',
'UI:ResetPwd-Error-WrongLogin' => '"%1$s" is geen geldige login',
'UI:ResetPwd-Error-NotPossible' => 'Het wachtwoord van externe accounts kan niet gereset worden.',
'UI:ResetPwd-Error-FixedPwd' => 'Deze account staat het resetten van het wachtwoord niet toe.',
'UI:ResetPwd-Error-NoContact' => 'Deze account is niet gelinkt aan een persoon.',
'UI:ResetPwd-Error-NoEmailAtt' => 'Deze account is niet gelinkt aan een persoon waarvan een e-mailadres gekend is. Neem contact op met jouw beheerder.',
'UI:ResetPwd-Error-NoEmail' => 'Er ontbreekt een e-mailadres. Neem contact op met jouw beheerder.',
'UI:ResetPwd-Error-Send' => 'Er is een technisch probleem bij het verzenden van de e-mail. Neem contact op met jouw beheerder.',
'UI:ResetPwd-EmailSent' => 'Kijk in jouw mailbox (eventueel bij ongewenste mail) en volg de instructies...',
'UI:ResetPwd-EmailSubject' => 'Reset jouw '.ITOP_APPLICATION_SHORT.'-wachtwoord',
'UI:ResetPwd-EmailBody' => '<body><p>Je hebt een reset van jouw '.ITOP_APPLICATION_SHORT.'-wachtwoord aangevraagd.</p><p>Klik op deze link (eenmalig te gebruiken) om <a href="%1$s">een nieuw wachtwoord in te voeren</a></p>.',
'UI:ResetPwd-Title' => 'Reset wachtwoord',
'UI:ResetPwd-Error-InvalidToken' => 'Sorry. Jouw wachtwoord is al gereset, of je hebt al meerdere e-mails ontvangen. Zorg ervoor dat je de link in de laatst ontvangen e-mail gebruikt.',
'UI:ResetPwd-Error-EnterPassword' => 'Voer het nieuwe wachtwoord voor de account "%1$s" in.',
'UI:ResetPwd-Ready' => 'Het wachtwoord is veranderd',
'UI:ResetPwd-Login' => 'Klik hier om in te loggen',
'UI:Login:About' => ITOP_APPLICATION, 'UI:Login:ChangeYourPassword' => 'Verander jouw wachtwoord',
'UI:Login:OldPasswordPrompt' => 'Oud wachtwoord',
'UI:Login:NewPasswordPrompt' => 'Nieuw wachtwoord',
'UI:Login:RetypeNewPasswordPrompt' => 'Herhaal nieuwe wachtwoord',
'UI:Login:IncorrectOldPassword' => 'Fout: het oude wachtwoord is incorrect',
'UI:LogOffMenu' => 'Log uit',
'UI:LogOff:ThankYou' => 'Bedankt voor het gebruiken van '.ITOP_APPLICATION, 'UI:LogOff:ClickHereToLoginAgain' => 'Klik hier om in te loggen',
'UI:ChangePwdMenu' => 'Verander wachtwoord',
'UI:Login:PasswordChanged' => 'Wachtwoord met succes aangepast',
'UI:Login:PasswordNotChanged' => 'Fout: Wachtwoord is hetzelfde!',
'UI:AccessRO-All' => ITOP_APPLICATION.' is alleen-lezen',
'UI:AccessRO-Users' => ITOP_APPLICATION.' is alleen-lezen voor eindgebruikers',
'UI:ApplicationEnvironment' => 'Omgeving van de applicatie: %1$s',
'UI:Login:RetypePwdDoesNotMatch' => 'Het nieuwe wachtwoord en de herhaling van het nieuwe wachtwoord komen niet overeen',
'UI:Button:Login' => 'Ga naar '.ITOP_APPLICATION, 'UI:Login:Error:AccessRestricted' => 'Geen toegang tot '.ITOP_APPLICATION_SHORT.'.Neem contact op met een '.ITOP_APPLICATION_SHORT.'-beheerder.',
'UI:Login:Error:AccessAdmin' => 'Alleen toegankelijk voor mensen met beheerdersrechten. Neem contact op met een '.ITOP_APPLICATION_SHORT.'-beheerder',
'UI:Login:Error:WrongOrganizationName' => 'Onbekende organisatie',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Meerdere contacten hebben hetzelfde e-mailadres',
'UI:Login:Error:NoValidProfiles' => 'Geen geldig profiel opgegeven',
'UI:CSVImport:MappingSelectOne' => '-- Selecteer --',
'UI:CSVImport:MappingNotApplicable' => '-- Negeer dit veld --',
'UI:CSVImport:NoData' => 'Lege dataset..., voeg data toe',

View File

@@ -393,6 +393,7 @@ Dict::Add('PL PL', 'Polish', 'Polski', [
Dict::Add('PL PL', 'Polish', 'Polski', [
'BooleanLabel:yes' => 'tak',
'BooleanLabel:no' => 'nie',
'UI:Login:Title' => ITOP_APPLICATION_SHORT.' login',
'UI:WelcomeMenu:Title' => 'Witaj w '.ITOP_APPLICATION_SHORT, 'UI:WelcomeMenu:AllOpenRequests' => 'Otwarte zgłoszenia: %1$d',
'UI:WelcomeMenu:MyCalls' => 'Moje zgłoszenia',
'UI:WelcomeMenu:OpenIncidents' => 'Otwarte incydenty: %1$d',
@@ -563,9 +564,51 @@ Dict::Add('PL PL', 'Polish', 'Polski', [
'UI:SearchValue:CheckAll' => 'Zaznacz wszystko',
'UI:SearchValue:UncheckAll' => 'Odznacz wszystko',
'UI:SelectOne' => '-- wybierz --',
'UI:Login:Welcome' => 'Witamy w '.ITOP_APPLICATION_SHORT.'!',
'UI:Login:IncorrectLoginPassword' => 'Nieprawidłowy login/hasło, spróbuj ponownie.',
'UI:Login:IdentifyYourself' => 'Zidentyfikuj się przed wejściem',
'UI:Login:UserNamePrompt' => 'Login',
'UI:Login:PasswordPrompt' => 'Hasło',
'UI:Login:ForgotPwd' => 'Zapomniałeś hasła?',
'UI:Login:ForgotPwdForm' => 'Resetowanie hasła',
'UI:Login:ForgotPwdForm+' => ITOP_APPLICATION_SHORT.' może wysłać Ci wiadomość e-mail, w której znajdziesz instrukcje dotyczące resetowania hasła.',
'UI:Login:ResetPassword' => 'Wyślij !',
'UI:Login:ResetPwdFailed' => 'Nie udało się wysłać e-maila: %1$s',
'UI:Login:SeparatorOr' => 'Lub',
'UI:ResetPwd-Error-WrongLogin' => '\'%1$s\'nie jest prawidłowym loginem',
'UI:ResetPwd-Error-NotPossible' => 'konta zewnętrzne nie pozwalają na resetowanie hasła.',
'UI:ResetPwd-Error-FixedPwd' => 'konto nie pozwala na resetowanie hasła.',
'UI:ResetPwd-Error-NoContact' => 'konto nie jest powiązane z osobą.',
'UI:ResetPwd-Error-NoEmailAtt' => 'konto nie jest powiązane z osobą mającą atrybut e-mail. Skontaktuj się z administratorem.',
'UI:ResetPwd-Error-NoEmail' => 'brak adresu e-mail. Skontaktuj się z administratorem.',
'UI:ResetPwd-Error-Send' => 'problem techniczny dotyczący transportu poczty elektronicznej. Skontaktuj się z administratorem.',
'UI:ResetPwd-EmailSent' => 'Sprawdź swoją skrzynkę e-mail i postępuj zgodnie z instrukcjami. Jeśli nie otrzymasz wiadomości e-mail, sprawdź wpisany login.',
'UI:ResetPwd-EmailSubject' => 'Reset hasła '.ITOP_APPLICATION_SHORT, 'UI:ResetPwd-EmailBody' => '<body><p>Poprosiłeś o zresetowanie hasła '.ITOP_APPLICATION_SHORT.'.</p><p>Proszę skorzystać z tego linku (jednorazowe użycie), <a href="%1$s">wpisz nowe hasło</a></p>.',
'UI:ResetPwd-Title' => 'Zresetuj hasło',
'UI:ResetPwd-Error-InvalidToken' => 'Przepraszamy, albo hasło zostało już zresetowane, albo otrzymałeś kilka e-maili. Upewnij się, że używasz linku podanego w ostatniej otrzymanej wiadomości e-mail.',
'UI:ResetPwd-Error-EnterPassword' => 'Wprowadź nowe hasło do konta \'%1$s\'.',
'UI:ResetPwd-Ready' => 'Hasło zostało zmienione.',
'UI:ResetPwd-Login' => 'Kliknij tutaj aby się zalogować...',
'UI:Login:About' => ITOP_APPLICATION.' Obsługiwane przez Combodo',
'UI:Login:ChangeYourPassword' => 'Zmień swoje hasło',
'UI:Login:OldPasswordPrompt' => 'Stare hasło',
'UI:Login:NewPasswordPrompt' => 'Nowe hasło',
'UI:Login:RetypeNewPasswordPrompt' => 'Powtórz nowe hasło',
'UI:Login:IncorrectOldPassword' => 'Błąd: stare hasło jest nieprawidłowe',
'UI:LogOffMenu' => 'Wyloguj',
'UI:LogOff:ThankYou' => 'Dziękujemy za użycie '.ITOP_APPLICATION, 'UI:LogOff:ClickHereToLoginAgain' => 'Kliknij tutaj, aby zalogować się ponownie...',
'UI:ChangePwdMenu' => 'Zmień hasło...',
'UI:Login:PasswordChanged' => 'Hasło ustawione pomyślnie!',
'UI:Login:PasswordNotChanged' => 'Błąd: Hasło jest takie samo!',
'UI:AccessRO-All' => ITOP_APPLICATION.' jest tylko do odczytu',
'UI:AccessRO-Users' => ITOP_APPLICATION.' jest tylko do odczytu dla użytkowników końcowych',
'UI:ApplicationEnvironment' => 'Środowisko aplikacji: %1$s',
'UI:Login:RetypePwdDoesNotMatch' => 'Nowe hasło i powtórzone nowe hasło nie pasują!',
'UI:Button:Login' => 'Wejdź do '.ITOP_APPLICATION, 'UI:Login:Error:AccessRestricted' => ITOP_APPLICATION_SHORT.' dostęp jest ograniczony. Prosimy o kontakt z administratorem '.ITOP_APPLICATION_SHORT.'.',
'UI:Login:Error:AccessAdmin' => 'Dostęp ograniczony do osób z uprawnieniami administratora. Prosimy o kontakt z administratorem '.ITOP_APPLICATION_SHORT.'.',
'UI:Login:Error:WrongOrganizationName' => 'Nieznana organizacja',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Wiele kontaktów ma ten sam adres e-mail',
'UI:Login:Error:NoValidProfiles' => 'Nie podano prawidłowego profilu',
'UI:CSVImport:MappingSelectOne' => '-- wybierz jeden --',
'UI:CSVImport:MappingNotApplicable' => '-- zignoruj to pole --',
'UI:CSVImport:NoData' => 'Pusty zestaw danych ... proszę podać dane!',

View File

@@ -390,8 +390,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
'BooleanLabel:yes' => 'Sim',
'BooleanLabel:no' => 'Não',
'UI:WelcomeMenu:Title' => 'Bem-vindo ao '.ITOP_APPLICATION_SHORT,
'UI:WelcomeMenu:AllOpenRequests' => 'Solicitações abertas: %1$d',
'UI:Login:Title' => 'Login no '.ITOP_APPLICATION_SHORT, 'UI:WelcomeMenu:Title' => 'Bem-vindo ao '.ITOP_APPLICATION_SHORT, 'UI:WelcomeMenu:AllOpenRequests' => 'Solicitações abertas: %1$d',
'UI:WelcomeMenu:MyCalls' => 'Minhas solicitações',
'UI:WelcomeMenu:OpenIncidents' => 'Incidentes abertos: %1$d',
'UI:WelcomeMenu:AllConfigItems' => 'Itens de Configuração: %1$d',
@@ -548,9 +547,54 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
'UI:SearchValue:CheckAll' => 'Marcar todos',
'UI:SearchValue:UncheckAll' => 'Desmarcar todos',
'UI:SelectOne' => '-- selecione um --',
'UI:Login:Welcome' => 'Bem-vindo ao '.ITOP_APPLICATION_SHORT.'!',
'UI:Login:IncorrectLoginPassword' => 'Usuário e/ou senha inválido(s), tente novamente',
'UI:Login:IdentifyYourself' => 'Identifique-se antes continuar',
'UI:Login:UserNamePrompt' => 'Usuário',
'UI:Login:PasswordPrompt' => 'Senha',
'UI:Login:ForgotPwd' => 'Esqueceu sua senha?',
'UI:Login:ForgotPwdForm' => 'Esqueceu sua senha',
'UI:Login:ForgotPwdForm+' => 'O '.ITOP_APPLICATION_SHORT.' pode enviar um e-mail em que você vai encontrar instruções para seguir para redefinir sua conta',
'UI:Login:ResetPassword' => 'Enviar agora',
'UI:Login:ResetPwdFailed' => 'Falha ao enviar e-mail: %1$s',
'UI:Login:SeparatorOr' => 'Ou',
'UI:ResetPwd-Error-WrongLogin' => '\'%1$s\' não é um login válido',
'UI:ResetPwd-Error-NotPossible' => 'Não é permitida alteração de senha de contas externas',
'UI:ResetPwd-Error-FixedPwd' => 'A conta não permite alteração de senha',
'UI:ResetPwd-Error-NoContact' => 'A conta não está associada a uma pessoa',
'UI:ResetPwd-Error-NoEmailAtt' => 'A conta não está associada a uma pessoa que contém um endereço de e-mail no '.ITOP_APPLICATION_SHORT.'.Por favor, contate o administrador',
'UI:ResetPwd-Error-NoEmail' => 'A conta não contém um endereço de e-mail. Por favor, contate o administrador',
'UI:ResetPwd-Error-Send' => 'Houve um problema técnico de transporte de e-mail. Por favor, contate o administrador',
'UI:ResetPwd-EmailSent' => 'Verifique sua caixa de e-mail e siga as instruções. Se você não receber nenhum e-mail, verifique a caixa de SPAM e o login que você digitou',
'UI:ResetPwd-EmailSubject' => 'Alterar a senha',
'UI:ResetPwd-EmailBody' => '<body><p>Você solicitou a alteração da senha do '.ITOP_APPLICATION_SHORT.'.</p><p>Por favor, siga este link (passo simples) para <a href="%1$s">digitar a nova senha</a></p>.',
'UI:ResetPwd-Title' => 'Alterar senha',
'UI:ResetPwd-Error-InvalidToken' => 'Desculpe, a senha já foi alterada, ou você deve ter recebido múltiplos e-mails. Por favor, certifique-se que você acessou o link fornecido no último e-mail recebido',
'UI:ResetPwd-Error-EnterPassword' => 'Digite a nova senha para a conta \'%1$s\'',
'UI:ResetPwd-Ready' => 'A senha foi alterada com sucesso',
'UI:ResetPwd-Login' => 'Clique para entrar...',
'UI:Login:About' => '',
'UI:Login:ChangeYourPassword' => 'Alterar sua senha',
'UI:Login:OldPasswordPrompt' => 'Senha antiga',
'UI:Login:NewPasswordPrompt' => 'Nova senha',
'UI:Login:RetypeNewPasswordPrompt' => 'Repetir nova senha',
'UI:Login:IncorrectOldPassword' => 'Erro: senha antiga incorreta',
'UI:LogOffMenu' => 'Sair',
'UI:LogOff:ThankYou' => 'Obrigado por usar o sistema',
'UI:LogOff:ClickHereToLoginAgain' => 'Clique aqui para entrar novamente...',
'UI:ChangePwdMenu' => 'Alterar senha...',
'UI:Login:PasswordChanged' => 'Senha alterada com sucesso',
'UI:Login:PasswordNotChanged' => 'Error: Password is the same!~~',
'UI:AccessRO-All' => 'Somente-leitura',
'UI:AccessRO-Users' => ITOP_APPLICATION.' é somente leitura para usuários finais',
'UI:ApplicationEnvironment' => 'Ambiente da aplicação: %1$s',
'UI:Login:RetypePwdDoesNotMatch' => '"Nova senha" e "Repetir nova senha" são diferentes. Tente novamente!',
'UI:Button:Login' => 'Login',
'UI:Login:Error:AccessRestricted' => 'Acesso restrito. Por favor, contacte o administrador',
'UI:Login:Error:AccessAdmin' => 'Acesso restrito somente para usuários com privilégios administrativos. Por favor, contacte o administrador',
'UI:Login:Error:WrongOrganizationName' => 'Organização não encontrada',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Vários contatos têm o mesmo e-mail',
'UI:Login:Error:NoValidProfiles' => 'Nenhum perfil válido fornecido',
'UI:CSVImport:MappingSelectOne' => '-- selecione um --',
'UI:CSVImport:MappingNotApplicable' => '-- ignorar este campo --',
'UI:CSVImport:NoData' => 'Nenhum dado configurado. Por favor, providencie alguns dados!',

View File

@@ -393,8 +393,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'BooleanLabel:yes' => 'да',
'BooleanLabel:no' => 'нет',
'UI:WelcomeMenu:Title' => 'Добро пожаловать в '.ITOP_APPLICATION_SHORT,
'UI:WelcomeMenu:AllOpenRequests' => 'Открытые запросы: %1$d',
'UI:Login:Title' => 'Вход в '.ITOP_APPLICATION_SHORT, 'UI:WelcomeMenu:Title' => 'Добро пожаловать в '.ITOP_APPLICATION_SHORT, 'UI:WelcomeMenu:AllOpenRequests' => 'Открытые запросы: %1$d',
'UI:WelcomeMenu:MyCalls' => 'Мои запросы',
'UI:WelcomeMenu:OpenIncidents' => 'Открытые инциденты: %1$d',
'UI:WelcomeMenu:AllConfigItems' => 'Конфигурационные единицы: %1$d',
@@ -551,9 +550,53 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
'UI:SearchValue:CheckAll' => 'Выбрать все',
'UI:SearchValue:UncheckAll' => 'Сбросить',
'UI:SelectOne' => '-- выбрать --',
'UI:Login:Welcome' => 'Добро пожаловать в '.ITOP_APPLICATION_SHORT.'!',
'UI:Login:IncorrectLoginPassword' => 'Неправильный логин/пароль. Пожалуйста, попробуйте еще раз.',
'UI:Login:IdentifyYourself' => 'Пожалуйста, представьтесь',
'UI:Login:UserNamePrompt' => 'Имя пользователя',
'UI:Login:PasswordPrompt' => 'Пароль',
'UI:Login:ForgotPwd' => 'Забыли пароль?',
'UI:Login:ForgotPwdForm' => 'Восстановление пароля',
'UI:Login:ForgotPwdForm+' => 'Введите свой логин для входа в систему и нажмите "Отправить". '.ITOP_APPLICATION_SHORT.' отправит email с инструкциями по восстановлению пароля на ваш электронный адрес.',
'UI:Login:ResetPassword' => 'Отправить',
'UI:Login:ResetPwdFailed' => 'Не удалось отправить email: %1$s',
'UI:Login:SeparatorOr' => 'или',
'UI:ResetPwd-Error-WrongLogin' => 'учетная запись с логином "%1$s" не найдена.',
'UI:ResetPwd-Error-NotPossible' => 'восстановление пароля для внешних учётных записей недоступно.',
'UI:ResetPwd-Error-FixedPwd' => 'восстановление пароля для данной учётной записи недоступно. Пожалуйста, обратитесь к администратору.',
'UI:ResetPwd-Error-NoContact' => 'данная учетная запись не ассоциирована с персоной. Пожалуйста, обратитесь к администратору.',
'UI:ResetPwd-Error-NoEmailAtt' => 'аккаунт не ассоциирован с персоной, имеющей атрибут электронной почты. Пожалуйста, обратитесь к администратору.',
'UI:ResetPwd-Error-NoEmail' => 'отсутствует адрес электронной почты. Пожалуйста, обратитесь к администратору.',
'UI:ResetPwd-Error-Send' => 'технические проблемы с отправкой электронной почты. Пожалуйста, обратитесь к администратору.',
'UI:ResetPwd-EmailSent' => 'Please check your email box and follow the instructions. If you receive no email, please check the login you typed.~~',
'UI:ResetPwd-EmailSubject' => 'Восстановление пароля',
'UI:ResetPwd-EmailBody' => '<body><p>Вы запросили восстановление пароля '.ITOP_APPLICATION_SHORT.'.</p><p>Пожалуйста, воспользуйтесь <a href="%1$s">этой ссылкой</a> для задания нового пароля.</p></body>',
'UI:ResetPwd-Title' => 'Восстановление пароля',
'UI:ResetPwd-Error-InvalidToken' => 'Извините, недействительная ссылка. Если вы запрашивали восстановление пароля несколько раз подряд, пожалуйста, убедитесь, что используете ссылку из последнего полученного письма.',
'UI:ResetPwd-Error-EnterPassword' => 'Введите новый пароль для учетной записи пользователя \'%1$s\'.',
'UI:ResetPwd-Ready' => 'Пароль успешно изменён.',
'UI:ResetPwd-Login' => 'Войти...',
'UI:Login:About' => '',
'UI:Login:ChangeYourPassword' => 'Изменение пароля',
'UI:Login:OldPasswordPrompt' => 'Старый пароль',
'UI:Login:NewPasswordPrompt' => 'Новый пароль',
'UI:Login:RetypeNewPasswordPrompt' => 'Повторите новый пароль',
'UI:Login:IncorrectOldPassword' => 'Ошибка: старый пароль неверный',
'UI:LogOffMenu' => 'Выход',
'UI:LogOff:ThankYou' => 'Спасибо за использование '.ITOP_APPLICATION_SHORT, 'UI:LogOff:ClickHereToLoginAgain' => 'Нажмите здесь, чтобы снова войти...',
'UI:ChangePwdMenu' => 'Изменить пароль...',
'UI:Login:PasswordChanged' => 'Пароль успешно изменён!',
'UI:Login:PasswordNotChanged' => 'Error: Password is the same!~~',
'UI:AccessRO-All' => 'Только чтение',
'UI:AccessRO-Users' => 'Только чтение для конечных пользователей',
'UI:ApplicationEnvironment' => 'Application environment: %1$s~~',
'UI:Login:RetypePwdDoesNotMatch' => 'Пароли не совпадают',
'UI:Button:Login' => 'Войти',
'UI:Login:Error:AccessRestricted' => 'Доступ к '.ITOP_APPLICATION_SHORT.' ограничен. Пожалуйста, свяжитесь с администратором '.ITOP_APPLICATION_SHORT.'.',
'UI:Login:Error:AccessAdmin' => 'Доступ ограничен для лиц с административными привилегиями. Пожалуйста, свяжитесь с администратором '.ITOP_APPLICATION_SHORT.'.',
'UI:Login:Error:WrongOrganizationName' => 'Неизвестная организация',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Несколько контактов имеют один и тот же адрес электронной почты',
'UI:Login:Error:NoValidProfiles' => 'Нет допустимого профиля',
'UI:CSVImport:MappingSelectOne' => '-- выберите значение --',
'UI:CSVImport:MappingNotApplicable' => '-- игнорировать это поле --',
'UI:CSVImport:NoData' => 'Пустой набор данных..., пожалуйста введите что-нибудь!',

View File

@@ -397,6 +397,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'BooleanLabel:yes' => 'yes~~',
'BooleanLabel:no' => 'no~~',
'UI:Login:Title' => ITOP_APPLICATION_SHORT.' login~~',
'UI:WelcomeMenu:Title' => 'Vitajte v '.ITOP_APPLICATION_SHORT,
'UI:WelcomeMenu:AllOpenRequests' => 'Otvoriť žiadosť: %1$d',
'UI:WelcomeMenu:MyCalls' => 'Moje žiadosti',
@@ -555,9 +556,54 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'UI:SearchValue:CheckAll' => 'Check All~~',
'UI:SearchValue:UncheckAll' => 'Uncheck All~~',
'UI:SelectOne' => '-- Vyberte jeden --',
'UI:Login:Welcome' => 'Vitajte v '.ITOP_APPLICATION_SHORT.'!',
'UI:Login:IncorrectLoginPassword' => 'Nesprávne prihlasovacie meno/heslo, prosím skúste znova.',
'UI:Login:IdentifyYourself' => 'Identifikujte sa pred pokračovaním',
'UI:Login:UserNamePrompt' => 'Užívateľské meno',
'UI:Login:PasswordPrompt' => 'Heslo',
'UI:Login:ForgotPwd' => 'Forgot your password?~~',
'UI:Login:ForgotPwdForm' => 'Forgot your password~~',
'UI:Login:ForgotPwdForm+' => ITOP_APPLICATION_SHORT.' can send you an email in which you will find instructions to follow to reset your account.~~',
'UI:Login:ResetPassword' => 'Send now!~~',
'UI:Login:ResetPwdFailed' => 'Failed to send an email: %1$s~~',
'UI:Login:SeparatorOr' => 'Or~~',
'UI:ResetPwd-Error-WrongLogin' => '\'%1$s\' is not a valid login~~',
'UI:ResetPwd-Error-NotPossible' => 'external accounts do not allow password reset.~~',
'UI:ResetPwd-Error-FixedPwd' => 'the account does not allow password reset.~~',
'UI:ResetPwd-Error-NoContact' => 'the account is not associated to a person.~~',
'UI:ResetPwd-Error-NoEmailAtt' => 'the account is not associated to a person having an email attribute. Please Contact your administrator.~~',
'UI:ResetPwd-Error-NoEmail' => 'missing an email address. Please Contact your administrator.~~',
'UI:ResetPwd-Error-Send' => 'email transport technical issue. Please Contact your administrator.~~',
'UI:ResetPwd-EmailSent' => 'Please check your email box and follow the instructions. If you receive no email, please check the login you typed.~~',
'UI:ResetPwd-EmailSubject' => 'Reset your '.ITOP_APPLICATION_SHORT.' password~~',
'UI:ResetPwd-EmailBody' => '<body><p>You have requested to reset your '.ITOP_APPLICATION_SHORT.' password.</p><p>Please follow this link (single usage) to <a href="%1$s">enter a new password</a></p>.~~',
'UI:ResetPwd-Title' => 'Reset password~~',
'UI:ResetPwd-Error-InvalidToken' => 'Sorry, either the password has already been reset, or you have received several emails. Please make sure that you use the link provided in the very last email received.~~',
'UI:ResetPwd-Error-EnterPassword' => 'Enter a new password for the account \'%1$s\'.~~',
'UI:ResetPwd-Ready' => 'The password has been changed.~~',
'UI:ResetPwd-Login' => 'Click here to login...~~',
'UI:Login:About' => 'O účte',
'UI:Login:ChangeYourPassword' => 'Zmeň heslo',
'UI:Login:OldPasswordPrompt' => 'Staré heslo',
'UI:Login:NewPasswordPrompt' => 'Nové heslo',
'UI:Login:RetypeNewPasswordPrompt' => 'Znova zadaj nové heslo',
'UI:Login:IncorrectOldPassword' => 'Chyba: staré heslo je nesprávne',
'UI:LogOffMenu' => 'Odhlásenie',
'UI:LogOff:ThankYou' => 'Ďakujeme za používanie '.ITOP_APPLICATION_SHORT,
'UI:LogOff:ClickHereToLoginAgain' => 'Kliknite sem pre nové prihlásenie...',
'UI:ChangePwdMenu' => 'Zmeniť heslo...',
'UI:Login:PasswordChanged' => 'Heslo úspešne nastavené !',
'UI:Login:PasswordNotChanged' => 'Error: Password is the same!~~',
'UI:AccessRO-All' => ITOP_APPLICATION_SHORT.' je iba na čítanie',
'UI:AccessRO-Users' => ITOP_APPLICATION_SHORT.' je iba na čítanie pre uživatelov',
'UI:ApplicationEnvironment' => 'Aplikačné prostredie: %1$s',
'UI:Login:RetypePwdDoesNotMatch' => 'Nové heslo a znova zadané nové heslo sa nezhodujú !',
'UI:Button:Login' => 'Vstup do '.ITOP_APPLICATION_SHORT,
'UI:Login:Error:AccessRestricted' => 'Prístup do '.ITOP_APPLICATION_SHORT.'u je obmedzený. Kontaktujte prosím '.ITOP_APPLICATION_SHORT.' administrátora.',
'UI:Login:Error:AccessAdmin' => 'Prístup je vyhradený len pre ľudí, ktorí majú oprávnenia od administrátora. Kontaktujte prosím '.ITOP_APPLICATION_SHORT.' administrátora.',
'UI:Login:Error:WrongOrganizationName' => 'Unknown organization~~',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Multiple contacts have the same e-mail~~',
'UI:Login:Error:NoValidProfiles' => 'No valid profile provided~~',
'UI:CSVImport:MappingSelectOne' => '-- vyberte jeden --',
'UI:CSVImport:MappingNotApplicable' => '-- ignorujte toto pole --',
'UI:CSVImport:NoData' => 'Prázdny dátový súbor..., prosím poskytnite nejaké dáta!',

View File

@@ -394,6 +394,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'BooleanLabel:yes' => 'evet',
'BooleanLabel:no' => 'hayır',
'UI:Login:Title' => ITOP_APPLICATION_SHORT.' login~~',
'UI:WelcomeMenu:Title' => ITOP_APPLICATION_SHORT.'\'a Hoşgeldiniz',
'UI:WelcomeMenu:AllOpenRequests' => 'Açık istekler: %1$d',
'UI:WelcomeMenu:MyCalls' => 'İsteklerim',
@@ -552,9 +553,54 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'UI:SearchValue:CheckAll' => 'Hepsini işaretleyin',
'UI:SearchValue:UncheckAll' => 'Hepsinin işaretini kaldırın',
'UI:SelectOne' => '-- Birini seçiniz --',
'UI:Login:Welcome' => ITOP_APPLICATION_SHORT.'\'a Hoşgeldiniz!',
'UI:Login:IncorrectLoginPassword' => 'Hatalı kullanıcı/şifre tekrar deneyiniz.',
'UI:Login:IdentifyYourself' => 'Devam etmeden önce kendinizi tanıtınız',
'UI:Login:UserNamePrompt' => 'Kullanıcı Adı',
'UI:Login:PasswordPrompt' => 'Şifre',
'UI:Login:ForgotPwd' => 'Şifrenizi mi unuttunuz?',
'UI:Login:ForgotPwdForm' => 'Şifrenizi mi unuttunuz?',
'UI:Login:ForgotPwdForm+' => ITOP_APPLICATION_SHORT.', hesabınızı sıfırlamak için izleyeceğiniz talimatları bulacağınız bir e-posta gönderebilir.',
'UI:Login:ResetPassword' => 'Şimdi gönder!',
'UI:Login:ResetPwdFailed' => 'Bir e-posta gönderilemedi: %1$s',
'UI:Login:SeparatorOr' => 'Or~~',
'UI:ResetPwd-Error-WrongLogin' => '\'%1$s\' geçerli bir giriş değil',
'UI:ResetPwd-Error-NotPossible' => 'Harici hesapların şifre sıfırlama izni yoktur.',
'UI:ResetPwd-Error-FixedPwd' => 'Hesabın şifre sıfırlama izni yoktur.',
'UI:ResetPwd-Error-NoContact' => 'Hesap bir kişiyle ilişkili değildir.',
'UI:ResetPwd-Error-NoEmailAtt' => 'Hesap, bir e-posta özelliğine sahip bir kişiyle ilişkili değildir. Lütfen yöneticinize başvurun.',
'UI:ResetPwd-Error-NoEmail' => 'Bir e-posta adresi eksik. Lütfen yöneticinize başvurun.',
'UI:ResetPwd-Error-Send' => 'E-posta ulaştırma teknik sorunu. Lütfen yöneticinize başvurun.',
'UI:ResetPwd-EmailSent' => 'Lütfen e-posta kutunuzu kontrol edin ve talimatları izleyin...',
'UI:ResetPwd-EmailSubject' => ITOP_APPLICATION_SHORT.'şifrenizi sıfırlayın',
'UI:ResetPwd-EmailBody' => '<body><p>'.ITOP_APPLICATION_SHORT.' şifrenizin sıfırlanması talebinde bulundunuz.</p><p> Yeni şifre oluşturmak için lütfen aşağıdaki tek kullanımlık bağlantıyı <a href=\\"%1$s\\">takip ediniz.</a></p>',
'UI:ResetPwd-Title' => 'Şifre sıfırla',
'UI:ResetPwd-Error-InvalidToken' => 'Üzgünüz, ya parola zaten sıfırlandı ya da birkaç e-posta aldınız. Lütfen aldığınız en son e-postada verilen bağlantıyı kullandığınızdan emin olun',
'UI:ResetPwd-Error-EnterPassword' => '\'%1$s\' hesabı için yeni bir şifre girin.',
'UI:ResetPwd-Ready' => 'Şifre değiştirildi.',
'UI:ResetPwd-Login' => 'Giriş yapmak için buraya tıklayın...',
'UI:Login:About' => ITOP_APPLICATION.' Powered by Combodo~~',
'UI:Login:ChangeYourPassword' => 'Şifre Değiştir',
'UI:Login:OldPasswordPrompt' => 'Mevcut şifre',
'UI:Login:NewPasswordPrompt' => 'Yeni şifre',
'UI:Login:RetypeNewPasswordPrompt' => 'Yeni şifre tekrar',
'UI:Login:IncorrectOldPassword' => 'Hata: mevcut şifre hatalı',
'UI:LogOffMenu' => ıkış',
'UI:LogOff:ThankYou' => ITOP_APPLICATION_SHORT.' Kullanıdığınız için teşekkürler',
'UI:LogOff:ClickHereToLoginAgain' => 'Tekrar bağlanmak için tıklayınız...',
'UI:ChangePwdMenu' => 'Şifre değiştir...',
'UI:Login:PasswordChanged' => 'Şifre başarıyla ayarlandı!',
'UI:Login:PasswordNotChanged' => 'Error: Password is the same!~~',
'UI:AccessRO-All' => ITOP_APPLICATION_SHORT.' salt okunurdur',
'UI:AccessRO-Users' => ITOP_APPLICATION_SHORT.' sadece son kullanıcılar için okunurdur',
'UI:ApplicationEnvironment' => 'Uygulama Ortamı: %1$s',
'UI:Login:RetypePwdDoesNotMatch' => 'Yeni şifre eşlenmedi !',
'UI:Button:Login' => ITOP_APPLICATION_SHORT.'\'a Giriş',
'UI:Login:Error:AccessRestricted' => ITOP_APPLICATION_SHORT.' erişim sınırlandırıldı. Sistem yöneticisi ile irtibata geçiniz',
'UI:Login:Error:AccessAdmin' => 'Erişim sistem yönetci hesaplaları ile mümkün. Sistem yöneticisi ile irtibata geçiniz.',
'UI:Login:Error:WrongOrganizationName' => 'Unknown organization~~',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Multiple contacts have the same e-mail~~',
'UI:Login:Error:NoValidProfiles' => 'No valid profile provided~~',
'UI:CSVImport:MappingSelectOne' => '-- Birini seçiniz --',
'UI:CSVImport:MappingNotApplicable' => '-- alanı ihmal et --',
'UI:CSVImport:NoData' => 'Boş veri seti..., veri giriniz!',

View File

@@ -1,58 +0,0 @@
<?php
/**
* @copyright Copyright (C) 2010-2026 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('CS CZ', 'Czech', 'Čeština', [
'UI:Login:Title' => ITOP_APPLICATION_SHORT.' login~~',
'UI:Login:Logo:AltText' => ITOP_APPLICATION_SHORT.' logo~~',
'UI:Login:Welcome' => 'Vítejte v '.ITOP_APPLICATION_SHORT.'!',
'UI:Login:IncorrectLoginPassword' => 'Nesprávné uživatelské jméno nebo heslo. Zkuste to prosím znovu.',
'UI:Login:IdentifyYourself' => 'Před pokračováním se prosím identifikujte.',
'UI:Login:UserNamePrompt' => 'Uživatelské jméno',
'UI:Login:PasswordPrompt' => 'Heslo',
'UI:Login:ForgotPwd' => 'Zapomněli jste své heslo?',
'UI:Login:ForgotPwdForm' => 'Zapomenuté heslo',
'UI:Login:ForgotPwdForm+' => ITOP_APPLICATION_SHORT.' vám může zaslat instrukce pro obnovení vašeho hesla.',
'UI:Login:ResetPassword' => 'Zaslat nyní!',
'UI:Login:ResetPwdFailed' => 'Chyba při odesílání emailu: %1$s',
'UI:Login:SeparatorOr' => 'Or~~',
'UI:ResetPwd-Error-WrongLogin' => '\'%1$s\' není platné uživatelské jméno',
'UI:ResetPwd-Error-NotPossible' => 'obnova hesla u externích účtů není možná.',
'UI:ResetPwd-Error-FixedPwd' => 'obnova hesla u tohoto účtu není povolená.',
'UI:ResetPwd-Error-NoContact' => 'účet není spojen s žádnou osobou.',
'UI:ResetPwd-Error-NoEmailAtt' => 'účet není spojen s osobou s uvedenou emailovou adresou. Kontaktujte administrátora.',
'UI:ResetPwd-Error-NoEmail' => 'chybí emailová adresa. Kontaktujte administrátora.',
'UI:ResetPwd-Error-Send' => 'technický problém při odesílání emailu. Kontaktujte administrátora.',
'UI:ResetPwd-EmailSent' => 'Zkontrolujte prosím svoji emailovou schránku a postupujte podle pokynů. Pokud žádný email neobdržíte, zkontrolujte prosím zadané uživatelské jméno.',
'UI:ResetPwd-EmailSubject' => 'Obnovení hesla pro '.ITOP_APPLICATION_SHORT,
'UI:ResetPwd-EmailBody' => '<body><p>Vyžádali jste obovení hesla pro '.ITOP_APPLICATION_SHORT.'.</p><p>Pokračujte kliknutím na následující <a href="%1$s">jednorázový odkaz</a> a zadejte nové heslo.</p>',
'UI:ResetPwd-Title' => 'Obnovení hesla',
'UI:ResetPwd-Error-InvalidToken' => 'Omlouváme se, ale heslo již bylo obnoveno nebo jste obdrželi více emailů. Ujistěte se, že používate odkaz z posledního emailu který jste obdrželi.',
'UI:ResetPwd-Error-EnterPassword' => 'Vložte nové heslo k účtu \'%1$s\'.',
'UI:ResetPwd-Ready' => 'Heslo bylo obnoveno.',
'UI:ResetPwd-Login' => 'Pro přihlášení klikněte zde...',
'UI:Login:About' => '',
'UI:Login:ChangeYourPassword' => 'Změnit heslo',
'UI:Login:OldPasswordPrompt' => 'Původní heslo',
'UI:Login:NewPasswordPrompt' => 'Nové heslo',
'UI:Login:RetypeNewPasswordPrompt' => 'Znovu nové heslo',
'UI:Login:IncorrectOldPassword' => 'Chyba: původní heslo je nesprávné',
'UI:LogOffMenu' => 'Odhlásit',
'UI:LogOff:ThankYou' => 'Děkujeme za užívání '.ITOP_APPLICATION_SHORT,
'UI:LogOff:ClickHereToLoginAgain' => 'Klikněte zde pro nové přihlášení...',
'UI:ChangePwdMenu' => 'Změnit heslo',
'UI:Login:PasswordChanged' => 'Heslo nastaveno úspěšně!',
'UI:Login:PasswordNotChanged' => 'Chyba: heslo je stejné jako přechozí!',
'UI:Login:RetypePwdDoesNotMatch' => 'Nová hesla se neshodují!',
'UI:Button:Login' => 'Přihlásit',
'UI:Login:Error:AccessRestricted' => 'Přístup je omezen. Kontaktujte administrátora.',
'UI:Login:Error:AccessAdmin' => 'Přístup vyhrazen osobám s administrátorskými právy. Kontaktujte administrátora.',
'UI:Login:Error:WrongOrganizationName' => 'Neznámá organizace',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Více kontaktů má stejný email',
'UI:Login:Error:NoValidProfiles' => 'Není zadán platný profil',
]);

View File

@@ -1,58 +0,0 @@
<?php
/**
* @copyright Copyright (C) 2010-2026 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('DA DA', 'Danish', 'Dansk', [
'UI:Login:Title' => ITOP_APPLICATION_SHORT.' login~~',
'UI:Login:Logo:AltText' => ITOP_APPLICATION_SHORT.' logo~~',
'UI:Login:Welcome' => 'Velkommen til '.ITOP_APPLICATION_SHORT.'!',
'UI:Login:IncorrectLoginPassword' => 'Ukorrekt login/adgangskode, venligst prøv igen.',
'UI:Login:IdentifyYourself' => 'Identificer dig før du fortsætter',
'UI:Login:UserNamePrompt' => 'Bruger Navn',
'UI:Login:PasswordPrompt' => 'Adgangskode',
'UI:Login:ForgotPwd' => 'Forgot your password?~~',
'UI:Login:ForgotPwdForm' => 'Forgot your password~~',
'UI:Login:ForgotPwdForm+' => ITOP_APPLICATION_SHORT.' can send you an email in which you will find instructions to follow to reset your account.~~',
'UI:Login:ResetPassword' => 'Send now!~~',
'UI:Login:ResetPwdFailed' => 'Failed to send an email: %1$s~~',
'UI:Login:SeparatorOr' => 'Or~~',
'UI:ResetPwd-Error-WrongLogin' => '\'%1$s\' is not a valid login~~',
'UI:ResetPwd-Error-NotPossible' => 'external accounts do not allow password reset.~~',
'UI:ResetPwd-Error-FixedPwd' => 'the account does not allow password reset.~~',
'UI:ResetPwd-Error-NoContact' => 'the account is not associated to a person.~~',
'UI:ResetPwd-Error-NoEmailAtt' => 'the account is not associated to a person having an email attribute. Please Contact your administrator.~~',
'UI:ResetPwd-Error-NoEmail' => 'missing an email address. Please Contact your administrator.~~',
'UI:ResetPwd-Error-Send' => 'email transport technical issue. Please Contact your administrator.~~',
'UI:ResetPwd-EmailSent' => 'Please check your email box and follow the instructions. If you receive no email, please check the login you typed.~~',
'UI:ResetPwd-EmailSubject' => 'Reset your '.ITOP_APPLICATION_SHORT.' password~~',
'UI:ResetPwd-EmailBody' => '<body><p>You have requested to reset your '.ITOP_APPLICATION_SHORT.' password.</p><p>Please follow this link (single usage) to <a href="%1$s">enter a new password</a></p>.~~',
'UI:ResetPwd-Title' => 'Reset password~~',
'UI:ResetPwd-Error-InvalidToken' => 'Sorry, either the password has already been reset, or you have received several emails. Please make sure that you use the link provided in the very last email received.~~',
'UI:ResetPwd-Error-EnterPassword' => 'Enter a new password for the account \'%1$s\'.~~',
'UI:ResetPwd-Ready' => 'The password has been changed.~~',
'UI:ResetPwd-Login' => 'Click here to login...~~',
'UI:Login:About' => 'Om',
'UI:Login:ChangeYourPassword' => 'Skift Adgangskode',
'UI:Login:OldPasswordPrompt' => 'Gammel Adgangskode',
'UI:Login:NewPasswordPrompt' => 'Ny Adgangskode',
'UI:Login:RetypeNewPasswordPrompt' => 'Gentag ny adgangskode',
'UI:Login:IncorrectOldPassword' => 'Fejl: den gamle adgangskode er forkert',
'UI:LogOffMenu' => 'Log ud',
'UI:LogOff:ThankYou' => 'Tak for at du brugte '.ITOP_APPLICATION_SHORT,
'UI:LogOff:ClickHereToLoginAgain' => 'Klik her for at logge ind igen...',
'UI:ChangePwdMenu' => 'Skift Adgangskode...',
'UI:Login:PasswordChanged' => 'Adgangskode oprettet med success!',
'UI:Login:PasswordNotChanged' => 'Error: Password is the same!~~',
'UI:Login:RetypePwdDoesNotMatch' => 'Ny adgangskode og gentaget adgangskode passer ikke sammen!',
'UI:Button:Login' => 'Enter '.ITOP_APPLICATION_SHORT,
'UI:Login:Error:AccessRestricted' => ITOP_APPLICATION_SHORT.' adgang er begrænset. Venligst, kontakt en '.ITOP_APPLICATION_SHORT.' administrator.',
'UI:Login:Error:AccessAdmin' => 'Adgang er begrænset til administratorer. Venligst, kontakt en '.ITOP_APPLICATION_SHORT.' administrator.',
'UI:Login:Error:WrongOrganizationName' => 'Unknown organization~~',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Multiple contacts have the same e-mail~~',
'UI:Login:Error:NoValidProfiles' => 'No valid profile provided~~',
]);

View File

@@ -1,58 +0,0 @@
<?php
/**
* @copyright Copyright (C) 2010-2026 Combodo SAS
* @license https://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('DE DE', 'German', 'Deutsch', [
'UI:Login:Title' => ITOP_APPLICATION_SHORT.' Login',
'UI:Login:Logo:AltText' => ITOP_APPLICATION_SHORT.' logo~~',
'UI:Login:Welcome' => 'Willkommen bei '.ITOP_APPLICATION_SHORT.'!',
'UI:Login:IncorrectLoginPassword' => 'Ungültiges Passwort oder Login-Daten. Bitte versuchen Sie es erneut.',
'UI:Login:IdentifyYourself' => 'Bitte identifizieren Sie sich, bevor Sie fortfahren.',
'UI:Login:UserNamePrompt' => 'Benutzername',
'UI:Login:PasswordPrompt' => 'Passwort',
'UI:Login:ForgotPwd' => 'Neues Passwort zusenden',
'UI:Login:ForgotPwdForm' => 'Neues Passwort zusenden',
'UI:Login:ForgotPwdForm+' => ITOP_APPLICATION_SHORT.' kann Ihnen eine Mail mit Anweisungen senden, wie Sie Ihren Account/Passwort zurücksetzen können',
'UI:Login:ResetPassword' => 'Jetzt senden!',
'UI:Login:ResetPwdFailed' => 'Konnte keine E-Mail versenden: %1$s',
'UI:Login:SeparatorOr' => 'oder',
'UI:ResetPwd-Error-WrongLogin' => '\'%1$s\' ist kein gültiger Login',
'UI:ResetPwd-Error-NotPossible' => 'Passwort-Reset bei externem Benutzerkonto nicht möglich',
'UI:ResetPwd-Error-FixedPwd' => 'das Benutzerkonto erlaubt keinen Passwort-Reset. ',
'UI:ResetPwd-Error-NoContact' => 'das Benutzerkonto ist nicht mit einer Person verknüpft. ',
'UI:ResetPwd-Error-NoEmailAtt' => 'das Benutzerkonto ist nicht mit einer Person verknüpft, die eine Mailadresse besitzt. Bitte wenden Sie sich an Ihren Administrator. ',
'UI:ResetPwd-Error-NoEmail' => 'die E-Mail-Adresse dieses Accounts fehlt. Bitte kontaktieren Sie Ihren Administrator.',
'UI:ResetPwd-Error-Send' => 'Beim Versenden der E-Mail trat ein technisches Problem auf. Bitte kontaktieren Sie Ihren Administrator.',
'UI:ResetPwd-EmailSent' => 'Bitte schauen Sie in Ihre Mailbox und folgen Sie den Anweisungen.',
'UI:ResetPwd-EmailSubject' => 'Zurücksetzen Ihres '.ITOP_APPLICATION_SHORT.'-Passworts',
'UI:ResetPwd-EmailBody' => '<body><p>Sie haben das Zurücksetzen Ihres '.ITOP_APPLICATION_SHORT.' Passworts angefordert.</p><p>Bitte folgen Sie diesem Link (funktioniert nur einmalig) : <a href="%1$s">neues Passwort eingeben</a></p>.',
'UI:ResetPwd-Title' => 'Passwort zurücksetzen',
'UI:ResetPwd-Error-InvalidToken' => 'Entschuldigung, aber entweder das Passwort wurde bereits zurückgesetzt, oder Sie haben mehrere E-Mails für das Zurücksetzen erhalten. Bitte nutzen Sie den link in der letzten Mail, die Sie erhalten haben.',
'UI:ResetPwd-Error-EnterPassword' => 'Geben Sie ein neues Passwort für das Konto \'%1$s\' ein.',
'UI:ResetPwd-Ready' => 'Das Passwort wurde geändert. ',
'UI:ResetPwd-Login' => 'Klicken Sie hier um sich einzuloggen...',
'UI:Login:About' => 'iTop Powered by Combodo',
'UI:Login:ChangeYourPassword' => 'Ändern Sie Ihr Passwort',
'UI:Login:OldPasswordPrompt' => 'Altes Passwort',
'UI:Login:NewPasswordPrompt' => 'Neues Passwort',
'UI:Login:RetypeNewPasswordPrompt' => 'Wiederholen Sie Ihr neues Passwort',
'UI:Login:IncorrectOldPassword' => 'Fehler: das alte Passwort ist ungültig',
'UI:LogOffMenu' => 'Abmelden',
'UI:LogOff:ThankYou' => 'Vielen Dank dafür, dass Sie '.ITOP_APPLICATION_SHORT.' benutzen!',
'UI:LogOff:ClickHereToLoginAgain' => 'Klicken Sie hier, um sich wieder anzumelden...',
'UI:ChangePwdMenu' => 'Passwort ändern...',
'UI:Login:PasswordChanged' => 'Passwort erfolgreich gesetzt!',
'UI:Login:PasswordNotChanged' => 'Fehler: Das Passwort das gleiche!',
'UI:Login:RetypePwdDoesNotMatch' => 'Neues Passwort und das wiederholte Passwort stimmen nicht überein!',
'UI:Button:Login' => 'in '.ITOP_APPLICATION_SHORT.' anmelden',
'UI:Login:Error:AccessRestricted' => 'Der '.ITOP_APPLICATION_SHORT.'-Zugang ist gesperrt. Bitte kontaktieren Sie Ihren '.ITOP_APPLICATION_SHORT.'-Administrator.',
'UI:Login:Error:AccessAdmin' => 'Zugang nur für Personen mit Administratorrechten. Bitte kontaktieren Sie Ihren '.ITOP_APPLICATION_SHORT.'-Administrator.',
'UI:Login:Error:WrongOrganizationName' => 'Unbekannte Organisation',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Mehrere Kontakte mit gleicher E-Mail-Adresse',
'UI:Login:Error:NoValidProfiles' => 'Kein gültiges Profil ausgewählt',
]);

View File

@@ -1,58 +0,0 @@
<?php
/*
* @copyright Copyright (C) 2010-2026 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('EN US', 'English', 'English', [
'UI:Login:Title' => ITOP_APPLICATION_SHORT.' login',
'UI:Login:Logo:AltText' => ITOP_APPLICATION_SHORT.' logo',
'UI:Login:Welcome' => 'Welcome to '.ITOP_APPLICATION_SHORT.'!',
'UI:Login:IncorrectLoginPassword' => 'Incorrect login/password, please try again.',
'UI:Login:IdentifyYourself' => 'Identify yourself before continuing',
'UI:Login:UserNamePrompt' => 'User Name',
'UI:Login:PasswordPrompt' => 'Password',
'UI:Login:ForgotPwd' => 'Forgot your password?',
'UI:Login:ForgotPwdForm' => 'Forgot your password',
'UI:Login:ForgotPwdForm+' => ITOP_APPLICATION_SHORT.' can send you an email in which you will find instructions to follow to reset your account.',
'UI:Login:ResetPassword' => 'Send now!',
'UI:Login:ResetPwdFailed' => 'Failed to send an email: %1$s',
'UI:Login:SeparatorOr' => 'Or',
'UI:ResetPwd-Error-WrongLogin' => '\'%1$s\' is not a valid login',
'UI:ResetPwd-Error-NotPossible' => 'external accounts do not allow password reset.',
'UI:ResetPwd-Error-FixedPwd' => 'the account does not allow password reset.',
'UI:ResetPwd-Error-NoContact' => 'the account is not associated to a person.',
'UI:ResetPwd-Error-NoEmailAtt' => 'the account is not associated to a person having an email attribute. Please Contact your administrator.',
'UI:ResetPwd-Error-NoEmail' => 'missing an email address. Please Contact your administrator.',
'UI:ResetPwd-Error-Send' => 'email transport technical issue. Please Contact your administrator.',
'UI:ResetPwd-EmailSent' => 'Please check your email box and follow the instructions. If you receive no email, please check the login you typed.',
'UI:ResetPwd-EmailSubject' => 'Reset your '.ITOP_APPLICATION_SHORT.' password',
'UI:ResetPwd-EmailBody' => '<body><p>You have requested to reset your '.ITOP_APPLICATION_SHORT.' password.</p><p>Please follow this link (single usage) to <a href="%1$s">enter a new password</a></p>.',
'UI:ResetPwd-Title' => 'Reset password',
'UI:ResetPwd-Error-InvalidToken' => 'Sorry, either the password has already been reset, or you have received several emails. Please make sure that you use the link provided in the very last email received.',
'UI:ResetPwd-Error-EnterPassword' => 'Enter a new password for the account \'%1$s\'.',
'UI:ResetPwd-Ready' => 'The password has been changed.',
'UI:ResetPwd-Login' => 'Click here to login...',
'UI:Login:About' => ITOP_APPLICATION.' Powered by Combodo',
'UI:Login:ChangeYourPassword' => 'Change Your Password',
'UI:Login:OldPasswordPrompt' => 'Old password',
'UI:Login:NewPasswordPrompt' => 'New password',
'UI:Login:RetypeNewPasswordPrompt' => 'Retype new password',
'UI:Login:IncorrectOldPassword' => 'Error: the old password is incorrect',
'UI:LogOffMenu' => 'Log off',
'UI:LogOff:ThankYou' => 'Thank you for using '.ITOP_APPLICATION,
'UI:LogOff:ClickHereToLoginAgain' => 'Click here to login again...',
'UI:ChangePwdMenu' => 'Change Password...',
'UI:Login:PasswordChanged' => 'Password successfully set!',
'UI:Login:PasswordNotChanged' => 'Error: Password is the same!',
'UI:Login:RetypePwdDoesNotMatch' => 'New password and retyped new password do not match!',
'UI:Button:Login' => 'Enter '.ITOP_APPLICATION,
'UI:Login:Error:AccessRestricted' => ITOP_APPLICATION_SHORT.' access to this page is restricted. Please, contact an '.ITOP_APPLICATION_SHORT.' administrator.',
'UI:Login:Error:AccessAdmin' => 'Access restricted to people having administrator privileges. Please, contact an '.ITOP_APPLICATION_SHORT.' administrator.',
'UI:Login:Error:WrongOrganizationName' => 'Unknown organization',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Multiple contacts have the same e-mail',
'UI:Login:Error:NoValidProfiles' => 'No valid profile provided',
]);

View File

@@ -1,58 +0,0 @@
<?php
/*
* @copyright Copyright (C) 2010-2026 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('EN GB', 'British English', 'British English', [
'UI:Login:Title' => ITOP_APPLICATION_SHORT.' login',
'UI:Login:Logo:AltText' => ITOP_APPLICATION_SHORT.' logo',
'UI:Login:Welcome' => 'Welcome to '.ITOP_APPLICATION_SHORT.'!',
'UI:Login:IncorrectLoginPassword' => 'Incorrect login/password, please try again.',
'UI:Login:IdentifyYourself' => 'Identify yourself before continuing',
'UI:Login:UserNamePrompt' => 'User Name',
'UI:Login:PasswordPrompt' => 'Password',
'UI:Login:ForgotPwd' => 'Forgot your password?',
'UI:Login:ForgotPwdForm' => 'Forgot your password',
'UI:Login:ForgotPwdForm+' => ITOP_APPLICATION_SHORT.' can send you an email in which you will find instructions to follow to reset your account.',
'UI:Login:ResetPassword' => 'Send now!',
'UI:Login:ResetPwdFailed' => 'Failed to send an email: %1$s',
'UI:Login:SeparatorOr' => 'Or',
'UI:ResetPwd-Error-WrongLogin' => '\'%1$s\' is not a valid login',
'UI:ResetPwd-Error-NotPossible' => 'external accounts do not allow password reset.',
'UI:ResetPwd-Error-FixedPwd' => 'the account does not allow password reset.',
'UI:ResetPwd-Error-NoContact' => 'the account is not associated with a person.',
'UI:ResetPwd-Error-NoEmailAtt' => 'the account is not associated to a person having an email attribute. Please contact your administrator.',
'UI:ResetPwd-Error-NoEmail' => 'missing an email address. Please Contact your administrator.',
'UI:ResetPwd-Error-Send' => 'email transport technical issue. Please Contact your administrator.',
'UI:ResetPwd-EmailSent' => 'Please check your email box and follow the instructions. If you receive no email, please check the login you typed.',
'UI:ResetPwd-EmailSubject' => 'Reset your '.ITOP_APPLICATION_SHORT.' password',
'UI:ResetPwd-EmailBody' => '<body><p>You have requested to reset your '.ITOP_APPLICATION_SHORT.' password.</p><p>Please follow this link (single usage) to <a href="%1$s">enter a new password</a></p>.',
'UI:ResetPwd-Title' => 'Reset password',
'UI:ResetPwd-Error-InvalidToken' => 'Sorry, either the password has already been reset, or you have received several emails. Please make sure that you use the link provided in the very last email received.',
'UI:ResetPwd-Error-EnterPassword' => 'Enter a new password for the account \'%1$s\'.',
'UI:ResetPwd-Ready' => 'The password has been changed.',
'UI:ResetPwd-Login' => 'Click here to log in...',
'UI:Login:About' => ITOP_APPLICATION.' Powered by Combodo',
'UI:Login:ChangeYourPassword' => 'Change Your Password',
'UI:Login:OldPasswordPrompt' => 'Old password',
'UI:Login:NewPasswordPrompt' => 'New password',
'UI:Login:RetypeNewPasswordPrompt' => 'Retype new password',
'UI:Login:IncorrectOldPassword' => 'Error: the old password is incorrect',
'UI:LogOffMenu' => 'Log off',
'UI:LogOff:ThankYou' => 'Thank you for using '.ITOP_APPLICATION,
'UI:LogOff:ClickHereToLoginAgain' => 'Click here to log in again...',
'UI:ChangePwdMenu' => 'Change Password...',
'UI:Login:PasswordChanged' => 'Password successfully set!',
'UI:Login:PasswordNotChanged' => 'Error: Password is the same!',
'UI:Login:RetypePwdDoesNotMatch' => 'New password and retyped new password do not match!',
'UI:Button:Login' => 'Enter '.ITOP_APPLICATION,
'UI:Login:Error:AccessRestricted' => ITOP_APPLICATION_SHORT.' access to this page is restricted. Please, contact an '.ITOP_APPLICATION_SHORT.' administrator.',
'UI:Login:Error:AccessAdmin' => 'Access restricted to people having administrator privileges. Please, contact an '.ITOP_APPLICATION_SHORT.' administrator.',
'UI:Login:Error:WrongOrganizationName' => 'Unknown organisation',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Multiple contacts have the same e-mail',
'UI:Login:Error:NoValidProfiles' => 'No valid profile provided',
]);

View File

@@ -1,58 +0,0 @@
<?php
/*
* @copyright Copyright (C) 2010-2026 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
'UI:Login:Title' => 'Inicio de Sesión',
'UI:Login:Logo:AltText' => ITOP_APPLICATION_SHORT.' logo~~',
'UI:Login:Welcome' => 'Bienvenido a '.ITOP_APPLICATION_SHORT,
'UI:Login:IncorrectLoginPassword' => 'Usuario/Contraseña incorrecto, por favor intente otra vez.',
'UI:Login:IdentifyYourself' => 'Identifiquese antes de continuar',
'UI:Login:UserNamePrompt' => 'Usuario ',
'UI:Login:PasswordPrompt' => 'Contraseña',
'UI:Login:ForgotPwd' => '¿Olvidó su contraseña?',
'UI:Login:ForgotPwdForm' => 'Olvido de Contraseña',
'UI:Login:ForgotPwdForm+' => ITOP_APPLICATION_SHORT.' puede enviarle un correo en el cual encontrará las instrucciones a seguir para restablecer su contraseña.',
'UI:Login:ResetPassword' => 'Enviar Ahora',
'UI:Login:ResetPwdFailed' => 'Error al enviar correo-e: %1$s',
'UI:Login:SeparatorOr' => 'O',
'UI:ResetPwd-Error-WrongLogin' => '\'%1$s\' no es un usuario válido',
'UI:ResetPwd-Error-NotPossible' => 'Cuentas externas no permiten restablecimiento de contraseña.',
'UI:ResetPwd-Error-FixedPwd' => 'La cuenta no permite restablecimiento de contraseña.',
'UI:ResetPwd-Error-NoContact' => 'La cuenta no está asociada a una persona.',
'UI:ResetPwd-Error-NoEmailAtt' => 'La cuenta no está asociada a una persona con correo electrónico. Por favor contacte al administrador.',
'UI:ResetPwd-Error-NoEmail' => 'Falta dirección de correo electrónico. Por favor contacte al administrador.',
'UI:ResetPwd-Error-Send' => 'Falla al envar un correo. Por favor contacte al administrador.',
'UI:ResetPwd-EmailSent' => 'Por favor verifique su buzón de correo y siga las instrucciones. Si no recibe el mensaje, por favor verifique la cuenta proporcionada.',
'UI:ResetPwd-EmailSubject' => 'Restablecer contraseña de '.ITOP_APPLICATION_SHORT,
'UI:ResetPwd-EmailBody' => '<body><p>Ha solicitado restablecer su contraseña en '.ITOP_APPLICATION_SHORT.'.</p><p>Por favor de click en la siguiente liga: <a href="%1$s">proporcione una nueva contraseña</a></p>.',
'UI:ResetPwd-Title' => 'Restablecer Contraseña',
'UI:ResetPwd-Error-InvalidToken' => 'Lo siento, tal vez su contraseña ya ha sido cambiada, o ha recibido varios correos electrónicos. Por favor asegurese de haber dado click a la liga del último correo recibido.',
'UI:ResetPwd-Error-EnterPassword' => 'Contraseña Nueva para \'%1$s\'.',
'UI:ResetPwd-Ready' => 'La contraseña ha sido cambiada.',
'UI:ResetPwd-Login' => 'Click aquí para conectarse ',
'UI:Login:About' => 'Acerca de',
'UI:Login:ChangeYourPassword' => 'Cambie su Contraseña',
'UI:Login:OldPasswordPrompt' => 'Contraseña Actual',
'UI:Login:NewPasswordPrompt' => 'Contraseña Nueva',
'UI:Login:RetypeNewPasswordPrompt' => 'Confirme Contraseña Nueva',
'UI:Login:IncorrectOldPassword' => 'Error: la Contraseña Anterior es Incorrecta',
'UI:LogOffMenu' => 'Cerrar Sesión',
'UI:LogOff:ThankYou' => 'Gracias por usar '.ITOP_APPLICATION_SHORT,
'UI:LogOff:ClickHereToLoginAgain' => 'Click aquí para conectarse nuevamente',
'UI:ChangePwdMenu' => 'Cambiar Contraseña',
'UI:Login:PasswordChanged' => '¡Contraseña Exitosamente Cambiada!',
'UI:Login:PasswordNotChanged' => 'Error: ¡La contraseña es la misma!',
'UI:Login:RetypePwdDoesNotMatch' => '¡La Nueva Contraseña y su Confirmación No Coinciden!',
'UI:Button:Login' => 'Entrar',
'UI:Login:Error:AccessRestricted' => 'El acceso a '.ITOP_APPLICATION_SHORT.' está restringido. Por favor contacte al Administrador de '.ITOP_APPLICATION_SHORT.'.',
'UI:Login:Error:AccessAdmin' => 'Acceso restringido a usuarios con privilegio de administrador. Por favor contacte al Administrador de '.ITOP_APPLICATION_SHORT.'.',
'UI:Login:Error:WrongOrganizationName' => 'Organización desconocida',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Varios contactos tienen la misma dirección de correo electrónico',
'UI:Login:Error:NoValidProfiles' => 'Perfil inválido',
]);

View File

@@ -1,58 +0,0 @@
<?php
/*
* @copyright Copyright (C) 2010-2026 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('FR FR', 'French', 'Français', [
'UI:Login:Title' => ITOP_APPLICATION_SHORT.' login',
'UI:Login:Logo:AltText' => 'Logo '.ITOP_APPLICATION_SHORT,
'UI:Login:Welcome' => 'Bienvenue dans '.ITOP_APPLICATION_SHORT.'!',
'UI:Login:IncorrectLoginPassword' => 'Mot de passe ou identifiant incorrect.',
'UI:Login:IdentifyYourself' => 'Merci de vous identifier',
'UI:Login:UserNamePrompt' => 'Identifiant',
'UI:Login:PasswordPrompt' => 'Mot de passe',
'UI:Login:ForgotPwd' => 'Mot de passe oublié ?',
'UI:Login:ForgotPwdForm' => 'Mot de passe oublié',
'UI:Login:ForgotPwdForm+' => 'Vous pouvez demander à saisir un nouveau mot de passe. Vous allez recevoir un email et vous pourrez suivre les instructions.',
'UI:Login:ResetPassword' => 'Envoyer le message',
'UI:Login:ResetPwdFailed' => 'Impossible de vous faire parvenir le message: %1$s',
'UI:Login:SeparatorOr' => 'Ou',
'UI:ResetPwd-Error-WrongLogin' => 'le compte \'%1$s\' est inconnu.',
'UI:ResetPwd-Error-NotPossible' => 'les comptes "externes" ne permettent pas la saisie d\'un mot de passe dans '.ITOP_APPLICATION_SHORT.'.',
'UI:ResetPwd-Error-FixedPwd' => 'ce mode de saisie du mot de passe n\'est pas autorisé pour ce compte.',
'UI:ResetPwd-Error-NoContact' => 'le comte n\'est pas associé à une Personne.',
'UI:ResetPwd-Error-NoEmailAtt' => 'il manque un attribut de type "email" sur la Personne associée à ce compte. Veuillez contacter l\'administrateur de l\'application.',
'UI:ResetPwd-Error-NoEmail' => 'il manque une adresse email sur la Personne associée à ce compte. Veuillez contacter l\'administrateur de l\'application.',
'UI:ResetPwd-Error-Send' => 'erreur technique lors de l\'envoi de l\'email. Veuillez contacter l\'administrateur de l\'application.',
'UI:ResetPwd-EmailSent' => 'Veuillez vérifier votre boîte de réception. Ensuite, suivez les instructions données dans l\'email. Si vous ne recevez pas d\'email, merci de vérifier le login saisi',
'UI:ResetPwd-EmailSubject' => 'Changer votre mot de passe '.ITOP_APPLICATION_SHORT,
'UI:ResetPwd-EmailBody' => '<body><p>Vous avez demandé à changer votre mot de passe '.ITOP_APPLICATION_SHORT.' sans connaître le mot de passe précédent.</p><p>Veuillez suivre le lien suivant (usage unique) afin de pouvoir <a href="%1$s">saisir un nouveau mot de passe</a></p>.',
'UI:ResetPwd-Title' => 'Nouveau mot de passe',
'UI:ResetPwd-Error-InvalidToken' => 'Désolé, le mot de passe a déjà été modifié avec le lien que vous avez suivi, ou bien vous avez reçu plusieurs emails. Dans ce cas, veillez à utiliser le tout dernier lien reçu.',
'UI:ResetPwd-Error-EnterPassword' => 'Veuillez saisir le nouveau mot de passe pour \'%1$s\'.',
'UI:ResetPwd-Ready' => 'Le mot de passe a bien été changé.',
'UI:ResetPwd-Login' => 'Cliquez ici pour vous connecter...',
'UI:Login:About' => ITOP_APPLICATION.' Powered by Combodo~~',
'UI:Login:ChangeYourPassword' => 'Changer de mot de passe',
'UI:Login:OldPasswordPrompt' => 'Ancien mot de passe',
'UI:Login:NewPasswordPrompt' => 'Nouveau mot de passe',
'UI:Login:RetypeNewPasswordPrompt' => 'Resaisir le nouveau mot de passe',
'UI:Login:IncorrectOldPassword' => 'Erreur: l\'ancien mot de passe est incorrect',
'UI:LogOffMenu' => 'Déconnexion',
'UI:LogOff:ThankYou' => 'Merci d\'avoir utilisé '.ITOP_APPLICATION_SHORT,
'UI:LogOff:ClickHereToLoginAgain' => 'Cliquez ici pour vous reconnecter...',
'UI:ChangePwdMenu' => 'Changer de mot de passe...',
'UI:Login:PasswordChanged' => 'Mot de passe mis à jour !',
'UI:Login:PasswordNotChanged' => 'Erreur : le mot de passe est identique !',
'UI:Login:RetypePwdDoesNotMatch' => 'Les deux saisies du nouveau mot de passe ne sont pas identiques !',
'UI:Button:Login' => 'Entrer dans '.ITOP_APPLICATION_SHORT,
'UI:Login:Error:AccessRestricted' => 'L\'accès à cette page '.ITOP_APPLICATION_SHORT.' est soumis à autorisation. Merci de contacter votre administrateur '.ITOP_APPLICATION_SHORT.'.',
'UI:Login:Error:AccessAdmin' => 'Accès restreint aux utilisateurs possédant le profil Administrateur.',
'UI:Login:Error:WrongOrganizationName' => 'Organisation inconnue',
'UI:Login:Error:MultipleContactsHaveSameEmail' => 'Email partagé par plusieurs contacts',
'UI:Login:Error:NoValidProfiles' => 'Pas de profil valide',
]);

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