mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-27 14:14:11 +01:00
Compare commits
58 Commits
feature/85
...
feature/92
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d54e71f0f9 | ||
|
|
fc967c06ce | ||
|
|
d4821b7edc | ||
|
|
62e09f1224 | ||
|
|
f82389d156 | ||
|
|
f558093f5d | ||
|
|
5201a1ed3b | ||
|
|
29920bfeb7 | ||
|
|
aede5ea7b8 | ||
|
|
da6c443a35 | ||
|
|
9c39efd9af | ||
|
|
d5f2303ed2 | ||
|
|
48e584503e | ||
|
|
454a1b26eb | ||
|
|
330539abd2 | ||
|
|
5357a0c060 | ||
|
|
fc22cce037 | ||
|
|
34c8a57814 | ||
|
|
2247691e58 | ||
|
|
076d49abc2 | ||
|
|
9fd0ffd84e | ||
|
|
d2f67dcb3c | ||
|
|
d5706fcbef | ||
|
|
807f2a88bc | ||
|
|
9d3311e623 | ||
|
|
9bf2cb7e1d | ||
|
|
54909520e9 | ||
|
|
d124f8ee58 | ||
|
|
3b62597092 | ||
|
|
c0a2771d4e | ||
|
|
6bd5a7b634 | ||
|
|
82b7ef86c7 | ||
|
|
4f878536a8 | ||
|
|
d937ec0350 | ||
|
|
985db46960 | ||
|
|
01adaadfad | ||
|
|
643752f8e7 | ||
|
|
0e0c09c420 | ||
|
|
f34373be6d | ||
|
|
4dba47798c | ||
|
|
49a7f3118d | ||
|
|
09afcb229c | ||
|
|
3df4ddc696 | ||
|
|
1fe401c102 | ||
|
|
6cb08ba361 | ||
|
|
f9db405343 | ||
|
|
4f1f144c51 | ||
|
|
ef8ade5d20 | ||
|
|
0b242d872a | ||
|
|
d9261b8342 | ||
|
|
4187f552a9 | ||
|
|
7f7ce0837e | ||
|
|
fd10887849 | ||
|
|
7df09541ac | ||
|
|
6d5660ca67 | ||
|
|
0013b8cfee | ||
|
|
7fb0ae48f9 | ||
|
|
e89a8edae0 |
14
.github/workflows/action.yml
vendored
14
.github/workflows/action.yml
vendored
@@ -26,13 +26,23 @@ jobs:
|
||||
|
||||
fi
|
||||
|
||||
- name: Add internal tag if member
|
||||
- name: Add internal tag if member of the organization
|
||||
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 }}
|
||||
|
||||
@@ -40,4 +50,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
3
.gitignore
vendored
@@ -58,6 +58,9 @@ 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/**
|
||||
|
||||
@@ -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 = [];
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2026 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
class ForgotPasswordApplicationException extends Exception
|
||||
{
|
||||
}
|
||||
10
application/exceptions/ForgotPasswordUserInputException.php
Normal file
10
application/exceptions/ForgotPasswordUserInputException.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2026 Combodo SAS
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
class ForgotPasswordUserInputException extends Exception
|
||||
{
|
||||
}
|
||||
@@ -243,15 +243,12 @@ 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,
|
||||
];
|
||||
|
||||
@@ -221,15 +221,15 @@ class LoginWebPage extends NiceWebPage
|
||||
|
||||
if ($oUser != null) {
|
||||
if (!MetaModel::IsValidAttCode(get_class($oUser), 'reset_pwd_token')) {
|
||||
throw new Exception(Dict::S('UI:ResetPwd-Error-NotPossible'));
|
||||
throw new ForgotPasswordUserInputException('External accounts do not allow password reset');
|
||||
}
|
||||
if (!$oUser->CanChangePassword()) {
|
||||
throw new Exception(Dict::S('UI:ResetPwd-Error-FixedPwd'));
|
||||
throw new ForgotPasswordUserInputException('The account does not allow password reset');
|
||||
}
|
||||
|
||||
$sTo = $oUser->GetResetPasswordEmail(); // throws Exceptions if not allowed
|
||||
if ($sTo == '') {
|
||||
throw new Exception(Dict::S('UI:ResetPwd-Error-NoEmail'));
|
||||
throw new ForgotPasswordUserInputException('Missing email address for this account');
|
||||
}
|
||||
|
||||
// This token allows the user to change the password without knowing the previous one
|
||||
@@ -255,17 +255,21 @@ class LoginWebPage extends NiceWebPage
|
||||
|
||||
case EMAIL_SEND_ERROR:
|
||||
default:
|
||||
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'));
|
||||
throw new ForgotPasswordApplicationException('Failed to send the password reset email for '.$oUser->Get('friendlyname').': '.implode(', ', $aIssues));
|
||||
}
|
||||
}
|
||||
|
||||
$oTwigContext = new LoginTwigRenderer();
|
||||
$aVars = $oTwigContext->GetDefaultVars();
|
||||
$oTwigContext->Render($this, 'forgotpwdsent.html.twig', $aVars);
|
||||
} catch (Exception $e) {
|
||||
$this->DisplayForgotPwdForm(true, $e->getMessage());
|
||||
} 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);
|
||||
}
|
||||
|
||||
public function DisplayResetPwdForm($sErrorMessage = null)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -181,6 +181,9 @@ 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)."'");
|
||||
}
|
||||
@@ -1284,7 +1287,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)) {
|
||||
@@ -1374,7 +1377,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();
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"type": "project",
|
||||
"license": "AGPL-3.0-only",
|
||||
"require": {
|
||||
"php": ">=8.1.0 <8.4.0",
|
||||
"php": ">=8.1.0 <8.5.0",
|
||||
"ext-ctype": "*",
|
||||
"ext-dom": "*",
|
||||
"ext-gd": "*",
|
||||
@@ -12,8 +12,7 @@
|
||||
"ext-json": "*",
|
||||
"ext-mysqli": "*",
|
||||
"ext-soap": "*",
|
||||
"apereo/phpcas": "~1.6.0",
|
||||
"firebase/php-jwt": "^6.4.0",
|
||||
"apereo/phpcas": "dev-master",
|
||||
"guzzlehttp/guzzle": "^7.5.1",
|
||||
"league/oauth2-google": "^4.0.1",
|
||||
"nikic/php-parser": "^4.14.0",
|
||||
@@ -40,6 +39,12 @@
|
||||
"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
1053
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -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,6 +4259,9 @@ 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(
|
||||
@@ -4727,7 +4730,7 @@ class AttributeCaseLog extends AttributeLongText
|
||||
}
|
||||
}
|
||||
|
||||
public function GetDefaultValue(DBObject $oHostObject = null)
|
||||
public function GetDefaultValue(?DBObject $oHostObject = null)
|
||||
{
|
||||
return new ormCaseLog();
|
||||
}
|
||||
@@ -6125,7 +6128,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)) {
|
||||
@@ -6809,7 +6812,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;
|
||||
}
|
||||
@@ -7544,7 +7547,7 @@ class AttributeExternalField extends AttributeDefinition
|
||||
return $oExtAttDef->GetSQLExpr();
|
||||
}
|
||||
|
||||
public function GetDefaultValue(DBObject $oHostObject = null)
|
||||
public function GetDefaultValue(?DBObject $oHostObject = null)
|
||||
{
|
||||
$oExtAttDef = $this->GetExtAttDef();
|
||||
|
||||
@@ -7907,12 +7910,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);
|
||||
}
|
||||
@@ -8292,7 +8295,7 @@ class AttributeImage extends AttributeBlob
|
||||
return $oDoc;
|
||||
}
|
||||
|
||||
public function GetDefaultValue(DBObject $oHostObject = null)
|
||||
public function GetDefaultValue(?DBObject $oHostObject = null)
|
||||
{
|
||||
return new ormDocument('', '', '');
|
||||
}
|
||||
@@ -8478,7 +8481,7 @@ class AttributeStopWatch extends AttributeDefinition
|
||||
return true;
|
||||
}
|
||||
|
||||
public function GetDefaultValue(DBObject $oHostObject = null)
|
||||
public function GetDefaultValue(?DBObject $oHostObject = null)
|
||||
{
|
||||
return $this->NewStopWatch();
|
||||
}
|
||||
@@ -9345,7 +9348,7 @@ class AttributeSubItem extends AttributeDefinition
|
||||
return false;
|
||||
}
|
||||
|
||||
public function GetDefaultValue(DBObject $oHostObject = null)
|
||||
public function GetDefaultValue(?DBObject $oHostObject = null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
@@ -9563,7 +9566,7 @@ class AttributeOneWayPassword extends AttributeDefinition implements iAttributeN
|
||||
return true;
|
||||
}
|
||||
|
||||
public function GetDefaultValue(DBObject $oHostObject = null)
|
||||
public function GetDefaultValue(?DBObject $oHostObject = null)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
@@ -10143,7 +10146,7 @@ abstract class AttributeSet extends AttributeDBFieldVoid
|
||||
return true;
|
||||
}
|
||||
|
||||
public function GetDefaultValue(DBObject $oHostObject = null)
|
||||
public function GetDefaultValue(?DBObject $oHostObject = null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
@@ -11356,7 +11359,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([]);
|
||||
@@ -11864,7 +11867,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;
|
||||
}
|
||||
@@ -12027,7 +12030,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')) {
|
||||
@@ -12463,7 +12466,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());
|
||||
}
|
||||
@@ -13050,7 +13053,7 @@ class AttributeObsolescenceFlag extends AttributeBoolean
|
||||
return null;
|
||||
}
|
||||
|
||||
public function GetDefaultValue(DBObject $oHostObject = null)
|
||||
public function GetDefaultValue(?DBObject $oHostObject = null)
|
||||
{
|
||||
return $this->MakeRealValue(false, $oHostObject);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -59,7 +59,7 @@ class DBUnionSearch extends DBSearch
|
||||
public function AllowAllData($bAllowAllData = true)
|
||||
{
|
||||
foreach ($this->aSearches as $oSearch) {
|
||||
$oSearch->AllowAllData();
|
||||
$oSearch->AllowAllData($bAllowAllData);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -70,7 +70,10 @@ class DesignDocument extends DOMDocument
|
||||
$this->preserveWhiteSpace = true; // otherwise the formatOutput option would have no effect
|
||||
}
|
||||
|
||||
public function loadXML(string $source, int $options = 0)
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function loadXML(string $source, int $options = 0): bool
|
||||
{
|
||||
return parent::loadXML($source, $options | LIBXML_BIGLINES);
|
||||
}
|
||||
@@ -450,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) {
|
||||
@@ -474,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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -266,6 +266,9 @@ 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
|
||||
|
||||
@@ -1,18 +1,20 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
||||
* @copyright Copyright (C) 2010-2026 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
|
||||
class ExecutionKPI implements iEventServiceSetup
|
||||
{
|
||||
protected static $m_bEnabled_Duration = false;
|
||||
protected static $m_bEnabled_Memory = false;
|
||||
@@ -23,15 +25,18 @@ class ExecutionKPI
|
||||
|
||||
protected static $m_aStats = []; // Recurrent operations
|
||||
protected static $m_aExecData = []; // One shot operations
|
||||
/**
|
||||
* @var array[ExecutionKPI]
|
||||
*/
|
||||
protected static $m_aExecutionStack = []; // embedded execution stats
|
||||
/** @var true */
|
||||
private static bool $bMetamodelStarted = false;
|
||||
|
||||
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) {
|
||||
@@ -71,6 +76,7 @@ class ExecutionKPI
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -97,7 +103,7 @@ class ExecutionKPI
|
||||
$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 = [];
|
||||
@@ -127,7 +133,7 @@ class ExecutionKPI
|
||||
$sRequest .= ' operation: '.$_POST['operation'];
|
||||
}
|
||||
|
||||
$fStop = MyHelpers::getmicrotime();
|
||||
$fStop = microtime(true);
|
||||
if (($fStop - $fItopStarted) > self::$m_fSlowQueries) {
|
||||
// Invoke extensions to log the KPI operation
|
||||
/** @var \iKPILoggerExtension $oExtensionInstance */
|
||||
@@ -151,17 +157,17 @@ class ExecutionKPI
|
||||
|
||||
$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);
|
||||
@@ -180,12 +186,12 @@ class ExecutionKPI
|
||||
}
|
||||
}
|
||||
|
||||
$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) {
|
||||
@@ -208,20 +214,20 @@ class ExecutionKPI
|
||||
}
|
||||
}
|
||||
$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'];
|
||||
@@ -230,14 +236,14 @@ class ExecutionKPI
|
||||
$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>";
|
||||
|
||||
@@ -287,18 +293,18 @@ class ExecutionKPI
|
||||
$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);
|
||||
@@ -333,39 +339,50 @@ class ExecutionKPI
|
||||
|
||||
$aNewEntry = null;
|
||||
|
||||
$fStarted = $this->m_fStarted;
|
||||
$fStopped = $this->m_fStarted;
|
||||
if (self::$m_bEnabled_Duration) {
|
||||
$fStopped = MyHelpers::getmicrotime();
|
||||
$aNewEntry = [
|
||||
'op' => $sOperationDesc,
|
||||
'time_begin' => $this->m_fStarted - $fItopStarted,
|
||||
'time_end' => $fStopped - $fItopStarted,
|
||||
];
|
||||
// Reset for the next operation (if the object is recycled)
|
||||
$this->m_fStarted = $fStopped;
|
||||
if (is_null(static::$fLastReportTime)) {
|
||||
static::$fLastReportTime = $fItopStarted;
|
||||
}
|
||||
|
||||
$iInitialMemory = is_null($this->m_iInitialMemory) ? 0 : $this->m_iInitialMemory;
|
||||
$iCurrentMemory = 0;
|
||||
$iPeakMemory = 0;
|
||||
if (is_null(static::$iLastReportMemory)) {
|
||||
global $iItopInitialMemory;
|
||||
static::$iLastReportMemory = $iItopInitialMemory;
|
||||
}
|
||||
|
||||
$fStarted = static::$fLastReportTime;
|
||||
$fStopped = microtime(true);
|
||||
if (self::$m_bEnabled_Duration) {
|
||||
$aNewEntry = [
|
||||
'op' => $sOperationDesc,
|
||||
'time_begin' => $fStarted - $fItopStarted,
|
||||
'time_end' => $fStopped - $fItopStarted,
|
||||
];
|
||||
}
|
||||
static::$fLastReportTime = $fStopped;
|
||||
|
||||
$iInitialMemory = static::$iLastReportMemory;
|
||||
$iCurrentMemory = $iInitialMemory;
|
||||
$iPeakMemory = $iInitialMemory;
|
||||
if (self::$m_bEnabled_Memory) {
|
||||
$iCurrentMemory = self::memory_get_usage();
|
||||
if (is_null($aNewEntry)) {
|
||||
$aNewEntry = ['op' => $sOperationDesc];
|
||||
}
|
||||
$aNewEntry['mem_begin'] = $this->m_iInitialMemory;
|
||||
$aNewEntry['mem_begin'] = $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)
|
||||
$this->m_iInitialMemory = $iCurrentMemory;
|
||||
static::$iLastReportMemory = $iCurrentMemory;
|
||||
}
|
||||
|
||||
if (self::$m_bEnabled_Duration || self::$m_bEnabled_Memory) {
|
||||
// Invoke extensions to log the KPI operation
|
||||
/** @var \iKPILoggerExtension $oExtensionInstance */
|
||||
foreach (MetaModel::EnumPlugins('iKPILoggerExtension') as $oExtensionInstance) {
|
||||
$aCallstack = ['callstack' => $this->GetCallStack()];
|
||||
if (static::$bMetamodelStarted) {
|
||||
foreach (static::$aBootstrapOperations as $oLog) {
|
||||
$this->LogOperation($oLog);
|
||||
}
|
||||
static::$aBootstrapOperations = [];
|
||||
// Invoke extensions to log the KPI operation
|
||||
$sExtension = ModuleService::GetInstance()->GetModuleNameFromCallStack(1);
|
||||
$oKPILogData = new KpiLogData(
|
||||
KpiLogData::TYPE_REPORT,
|
||||
@@ -376,9 +393,24 @@ class ExecutionKPI
|
||||
$sExtension,
|
||||
$iInitialMemory,
|
||||
$iCurrentMemory,
|
||||
$iPeakMemory
|
||||
$iPeakMemory,
|
||||
$aCallstack
|
||||
);
|
||||
$oExtensionInstance->LogOperation($oKPILogData);
|
||||
$this->LogOperation($oKPILogData);
|
||||
} else {
|
||||
$oKPILogData = new KpiLogData(
|
||||
KpiLogData::TYPE_REPORT,
|
||||
'Step',
|
||||
$sOperationDesc,
|
||||
$fStarted,
|
||||
$fStopped,
|
||||
'',
|
||||
$iInitialMemory,
|
||||
$iCurrentMemory,
|
||||
$iPeakMemory,
|
||||
$aCallstack
|
||||
);
|
||||
static::$aBootstrapOperations[] = $oKPILogData;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -388,13 +420,21 @@ class ExecutionKPI
|
||||
$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
|
||||
@@ -423,21 +463,23 @@ class ExecutionKPI
|
||||
|
||||
$fDuration = 0;
|
||||
if (self::$m_bEnabled_Duration) {
|
||||
$fStopped = MyHelpers::getmicrotime();
|
||||
$fStopped = microtime(true);
|
||||
$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;
|
||||
@@ -448,33 +490,45 @@ class ExecutionKPI
|
||||
$iPeakMemory = self::memory_get_peak_usage();
|
||||
}
|
||||
|
||||
// Invoke extensions to log the KPI operation
|
||||
/** @var \iKPILoggerExtension $oExtensionInstance */
|
||||
foreach (MetaModel::EnumPlugins('iKPILoggerExtension') as $oExtensionInstance) {
|
||||
//$sExtension = ModuleService::GetInstance()->GetModuleNameFromCallStack(1);
|
||||
$sExtension = '';
|
||||
if (static::$bMetamodelStarted) {
|
||||
foreach (static::$aBootstrapOperations as $oLog) {
|
||||
$this->LogOperation($oLog);
|
||||
}
|
||||
static::$aBootstrapOperations = [];
|
||||
$oKPILogData = new KpiLogData(
|
||||
KpiLogData::TYPE_STATS,
|
||||
$sOperation,
|
||||
$sArguments,
|
||||
$this->m_fStarted,
|
||||
$fStopped,
|
||||
$sExtension,
|
||||
'',
|
||||
$iInitialMemory,
|
||||
$iCurrentMemory,
|
||||
$iPeakMemory,
|
||||
$aCallstack
|
||||
);
|
||||
$oExtensionInstance->LogOperation($oKPILogData);
|
||||
$this->LogOperation($oKPILogData);
|
||||
} else {
|
||||
$oKPILogData = new KpiLogData(
|
||||
KpiLogData::TYPE_STATS,
|
||||
$sOperation,
|
||||
$sArguments,
|
||||
$this->m_fStarted,
|
||||
$fStopped,
|
||||
'',
|
||||
$iInitialMemory,
|
||||
$iCurrentMemory,
|
||||
$iPeakMemory,
|
||||
$aCallstack
|
||||
);
|
||||
static::$aBootstrapOperations[] = $oKPILogData;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected function ResetCounters()
|
||||
{
|
||||
if (self::$m_bEnabled_Duration) {
|
||||
$this->m_fStarted = microtime(true);
|
||||
}
|
||||
$this->m_fStarted = microtime(true);
|
||||
|
||||
if (self::$m_bEnabled_Memory) {
|
||||
$this->m_iInitialMemory = self::memory_get_usage();
|
||||
@@ -503,7 +557,33 @@ class ExecutionKPI
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 !
|
||||
|
||||
@@ -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');
|
||||
|
||||
|
||||
@@ -362,8 +362,7 @@ 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) && ($oObj->Get($sSecretField) != $sSecretValue)) {
|
||||
usleep(200);
|
||||
if (($sSecretField != null) && !hash_equals($oObj->Get($sSecretField), $sSecretValue)) {
|
||||
throw new Exception("Invalid secret for class '$sClass' - the object does not exist or you are not allowed to view it");
|
||||
}
|
||||
/** @var \ormDocument $oDocument */
|
||||
|
||||
@@ -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)) {
|
||||
if (array_key_exists($iObjectId, $this->aPreserved) && !$oLink->Equals(MetaModel::GetObject(get_class($oLink), $iObjectId, true))) {
|
||||
unset($this->aPreserved[$iObjectId]);
|
||||
$this->aModified[$iObjectId] = $oLink;
|
||||
$this->bHasDelta = true;
|
||||
|
||||
@@ -98,9 +98,9 @@ class ormPassword
|
||||
$bResult = false;
|
||||
$aInfo = password_get_info($this->m_sHashed);
|
||||
if (is_null($aInfo["algo"]) || $aInfo["algo"] === 0) {
|
||||
//unknown, assume it's a legacy password
|
||||
// - Unknown algorithm, assume it's a legacy password
|
||||
$sHashedPwd = $this->ComputeHash($sClearTextPassword);
|
||||
$bResult = ($this->m_sHashed == $sHashedPwd);
|
||||
$bResult = hash_equals($this->m_sHashed, $sHashedPwd);
|
||||
} else {
|
||||
$bResult = password_verify($sClearTextPassword, $this->m_sHashed);
|
||||
}
|
||||
|
||||
@@ -72,9 +72,12 @@ $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;
|
||||
$ibo-panel--icon-background--size--must-cover: cover !default;
|
||||
$ibo-panel--icon-background--size--must-zoomout: 66.67% !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--title--font-size--is-sticking: $ibo-font-size-150 !default;
|
||||
$ibo-panel--title--color: $ibo-color-grey-900 !default;
|
||||
@@ -179,24 +182,25 @@ $ibo-panel--is-selectable--body--after--font-size: $ibo-font-size-700 !default;
|
||||
min-height: $ibo-panel--icon--size;
|
||||
}
|
||||
|
||||
.ibo-panel--icon-background {
|
||||
.ibo-panel--icon-img, .ibo-panel--icon-background { // second class is deprecated, remove it when dealing with N°9317
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: $ibo-panel--icon-background--size--must-contain;
|
||||
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-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-cover {
|
||||
background-size: $ibo-panel--icon-background--size--must-cover;
|
||||
.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-zoomout {
|
||||
background-size: $ibo-panel--icon-background--size--must-zoomout;
|
||||
.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--title {
|
||||
|
||||
@@ -11,9 +11,12 @@ $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;
|
||||
$ibo-title--icon-background--size--must-cover: cover !default;
|
||||
$ibo-title--icon-background--size--must-zoomout: 66.67% !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 {
|
||||
@@ -44,24 +47,23 @@ $ibo-title--icon-background--size--must-zoomout: 66.67% !default;
|
||||
min-height: $ibo-title--icon--size-3;
|
||||
}
|
||||
|
||||
.ibo-title--icon-background {
|
||||
.ibo-title--icon-img, .ibo-title--icon-background { // second class is deprecated, remove it when dealing with N°9317
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: $ibo-title--icon-background--size--must-contain;
|
||||
object-position: center;
|
||||
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-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-cover {
|
||||
background-size: $ibo-title--icon-background--size--must-cover;
|
||||
.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-zoomout {
|
||||
background-size: $ibo-title--icon-background--size--must-zoomout;
|
||||
.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--for-object-details {
|
||||
|
||||
@@ -5,9 +5,11 @@
|
||||
|
||||
$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;
|
||||
}
|
||||
2
css/backoffice/vendors/_selectize.scss
vendored
2
css/backoffice/vendors/_selectize.scss
vendored
@@ -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;
|
||||
|
||||
@@ -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]).{8,}$</password_validation.pattern>
|
||||
<password_validation.pattern>^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\da-zA-Z]).{12,}$</password_validation.pattern>
|
||||
<password_validation.message type="hash"/>
|
||||
</parameters>
|
||||
</module_parameters>
|
||||
|
||||
@@ -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ě 8 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ě 12 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.',
|
||||
]);
|
||||
|
||||
@@ -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 8 characters and include uppercase, lowercase, numeric and special characters.~~',
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Password must be at least 12 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~~',
|
||||
]);
|
||||
|
||||
@@ -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 entspricht nicht dem in den Konfigurationsregeln hinterlegten RegEx-Ausdruck',
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Das Passwort muss mindestens 12 Zeichen lang sein und Großbuchstaben, Kleinbuchstaben, Zahlen und Sonderzeichen enthalten.',
|
||||
'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.',
|
||||
]);
|
||||
|
||||
@@ -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 8 characters and include uppercase, lowercase, numeric and special characters.',
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Password must be at least 12 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',
|
||||
]);
|
||||
|
||||
@@ -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 8 characters and include uppercase, lowercase, numeric and special characters.',
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Password must be at least 12 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',
|
||||
]);
|
||||
|
||||
@@ -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 8 caracteres e incluír mayúsculas, minúsculas, números y caracteres especiales.',
|
||||
'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.',
|
||||
'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',
|
||||
]);
|
||||
|
||||
@@ -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 8 caractères, avec minuscule, majuscule, nombre et caractère spécial.',
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Le mot de passe doit contenir au moins 12 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.',
|
||||
]);
|
||||
|
||||
@@ -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 8 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 12 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.',
|
||||
]);
|
||||
|
||||
@@ -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 8 caratteri e includere lettere maiuscole, minuscole, numeri e caratteri speciali.',
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'La password deve essere di almeno 12 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',
|
||||
]);
|
||||
|
||||
@@ -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 8 characters and include uppercase, lowercase, numeric and special characters.~~',
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Password must be at least 12 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~~',
|
||||
]);
|
||||
|
||||
@@ -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 8 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 12 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.',
|
||||
]);
|
||||
|
||||
@@ -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 8 znaków i zawierać duże, małe litery, cyfry i znaki specjalne.',
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Hasło musi mieć co najmniej 12 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',
|
||||
]);
|
||||
|
||||
@@ -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 8 caracteres e incluir letras maiúsculas, minúsculas, números e símbolos',
|
||||
'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',
|
||||
'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',
|
||||
]);
|
||||
|
||||
@@ -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' => 'Пароль должен содержать не менее 8 символов и включать прописные, строчные, числовые и специальные символы.',
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Пароль должен содержать не менее 12 символов и включать прописные, строчные, числовые и специальные символы.',
|
||||
'UserLocal:password:expiration' => 'Поля требуют наличия доп. расширения',
|
||||
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Setting password expiration to "One-time password" is not allowed for your own User~~',
|
||||
]);
|
||||
|
||||
@@ -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 8 characters and include uppercase, lowercase, numeric and special characters.~~',
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Password must be at least 12 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~~',
|
||||
]);
|
||||
|
||||
@@ -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 8 characters and include uppercase, lowercase, numeric and special characters.~~',
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Password must be at least 12 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~~',
|
||||
]);
|
||||
|
||||
@@ -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' => '密码必须至少8个字符, 包含大小写, 数字和特殊字符.',
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => '密码必须至少12个字符, 包含大小写, 数字和特殊字符.',
|
||||
'UserLocal:password:expiration' => '下面的区域需要插件扩展',
|
||||
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => '不允许用户为自己设置 "一次性密码" 的失效期限',
|
||||
]);
|
||||
|
||||
@@ -10,22 +10,87 @@
|
||||
*/
|
||||
|
||||
use Combodo\iTop\Core\MetaModel\HierarchicalKey;
|
||||
use Combodo\iTop\DBTools\Enum\BinExitCode;
|
||||
use Combodo\iTop\DBTools\Exception\AuthenticationException;
|
||||
|
||||
require_once('../../../approot.inc.php');
|
||||
// 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.'application/startup.inc.php';
|
||||
|
||||
foreach (MetaModel::GetClasses() as $sClass) {
|
||||
if (!MetaModel::HasTable($sClass)) {
|
||||
continue;
|
||||
}
|
||||
// Prepare output page
|
||||
$sPageTitle = "Database maintenance tools - Report";
|
||||
$bIsModeCLI = utils::IsModeCLI();
|
||||
if ($bIsModeCLI) {
|
||||
$oP = new CLIPage($sPageTitle);
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
SetupUtils::CheckPhpAndExtensionsForCli($oP, BinExitCode::FATAL->value);
|
||||
} else {
|
||||
$oP = new WebPage($sPageTitle);
|
||||
}
|
||||
|
||||
echo "Done\n";
|
||||
// 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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$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);
|
||||
}
|
||||
|
||||
@@ -5,22 +5,93 @@
|
||||
* @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;
|
||||
|
||||
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);
|
||||
// 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';
|
||||
}
|
||||
|
||||
$sReportFile = DBAnalyzerUtils::GenerateReport($aResults);
|
||||
require_once APPROOT.'application/startup.inc.php';
|
||||
require_once APPROOT.'application/loginwebpage.class.inc.php';
|
||||
|
||||
echo "Report generated: {$sReportFile}.log\n";
|
||||
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);
|
||||
}
|
||||
|
||||
9
datamodels/2.x/combodo-db-tools/composer.json
Normal file
9
datamodels/2.x/combodo-db-tools/composer.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "combodo/combodo-db-tools",
|
||||
"license": "AGPL-3.0-only",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Combodo\\iTop\\DBTools\\": "src/"
|
||||
}
|
||||
}
|
||||
}
|
||||
18
datamodels/2.x/combodo-db-tools/composer.lock
generated
Normal file
18
datamodels/2.x/combodo-db-tools/composer.lock
generated
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"_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"
|
||||
}
|
||||
@@ -43,6 +43,7 @@ SetupWebPage::AddModule(
|
||||
// Components
|
||||
//
|
||||
'datamodel' => [
|
||||
'vendor/autoload.php',
|
||||
'src/Service/DBToolsUtils.php',
|
||||
'src/Service/DBAnalyzerUtils.php',
|
||||
],
|
||||
|
||||
18
datamodels/2.x/combodo-db-tools/src/Enum/BinExitCode.php
Normal file
18
datamodels/2.x/combodo-db-tools/src/Enum/BinExitCode.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?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;
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
<?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
|
||||
{
|
||||
|
||||
}
|
||||
22
datamodels/2.x/combodo-db-tools/vendor/autoload.php
vendored
Normal file
22
datamodels/2.x/combodo-db-tools/vendor/autoload.php
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
<?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();
|
||||
579
datamodels/2.x/combodo-db-tools/vendor/composer/ClassLoader.php
vendored
Normal file
579
datamodels/2.x/combodo-db-tools/vendor/composer/ClassLoader.php
vendored
Normal file
@@ -0,0 +1,579 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
||||
378
datamodels/2.x/combodo-db-tools/vendor/composer/InstalledVersions.php
vendored
Normal file
378
datamodels/2.x/combodo-db-tools/vendor/composer/InstalledVersions.php
vendored
Normal file
@@ -0,0 +1,378 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
Copyright (c) 2020-present Fabien Potencier
|
||||
|
||||
Copyright (c) Nils Adermann, Jordi Boggiano
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -17,3 +18,4 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
15
datamodels/2.x/combodo-db-tools/vendor/composer/autoload_classmap.php
vendored
Normal file
15
datamodels/2.x/combodo-db-tools/vendor/composer/autoload_classmap.php
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
<?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',
|
||||
);
|
||||
9
datamodels/2.x/combodo-db-tools/vendor/composer/autoload_namespaces.php
vendored
Normal file
9
datamodels/2.x/combodo-db-tools/vendor/composer/autoload_namespaces.php
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
// autoload_namespaces.php @generated by Composer
|
||||
|
||||
$vendorDir = dirname(__DIR__);
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
);
|
||||
10
datamodels/2.x/combodo-db-tools/vendor/composer/autoload_psr4.php
vendored
Normal file
10
datamodels/2.x/combodo-db-tools/vendor/composer/autoload_psr4.php
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
// autoload_psr4.php @generated by Composer
|
||||
|
||||
$vendorDir = dirname(__DIR__);
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'Combodo\\iTop\\DBTools\\' => array($baseDir . '/src'),
|
||||
);
|
||||
37
datamodels/2.x/combodo-db-tools/vendor/composer/autoload_real.php
vendored
Normal file
37
datamodels/2.x/combodo-db-tools/vendor/composer/autoload_real.php
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
41
datamodels/2.x/combodo-db-tools/vendor/composer/autoload_static.php
vendored
Normal file
41
datamodels/2.x/combodo-db-tools/vendor/composer/autoload_static.php
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
||||
5
datamodels/2.x/combodo-db-tools/vendor/composer/installed.json
vendored
Normal file
5
datamodels/2.x/combodo-db-tools/vendor/composer/installed.json
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"packages": [],
|
||||
"dev": true,
|
||||
"dev-package-names": []
|
||||
}
|
||||
23
datamodels/2.x/combodo-db-tools/vendor/composer/installed.php
vendored
Normal file
23
datamodels/2.x/combodo-db-tools/vendor/composer/installed.php
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
<?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,
|
||||
),
|
||||
),
|
||||
);
|
||||
@@ -199,15 +199,15 @@ function RaiseAlarm($sMessage)
|
||||
//////////
|
||||
// Main
|
||||
|
||||
try {
|
||||
utils::UseParamFile();
|
||||
} catch (Exception $e) {
|
||||
echo "Error: ".$e->GetMessage()."\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
if (utils::IsModeCLI()) {
|
||||
SetupUtils::CheckPhpAndExtensionsForCli(new CLIPage('Check backup utility'));
|
||||
try {
|
||||
utils::UseParamFile();
|
||||
} catch (Exception $e) {
|
||||
echo 'Error: '.$e->GetMessage()."\n";
|
||||
exit;
|
||||
}
|
||||
$oP = new CLIPage('Check backup utility');
|
||||
SetupUtils::CheckPhpAndExtensionsForCli($oP);
|
||||
|
||||
echo date('Y-m-d H:i:s')." - running check-backup utility\n";
|
||||
try {
|
||||
|
||||
@@ -88,16 +88,15 @@ 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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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' => 'Categorie',
|
||||
'Class:FAQ/Attribute:category_id' => 'Catégorie',
|
||||
'Class:FAQ/Attribute:category_id+' => '',
|
||||
'Class:FAQ/Attribute:category_name' => 'Nom catégorie',
|
||||
'Class:FAQ/Attribute:category_name+' => '',
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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', '');
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -238,6 +238,11 @@
|
||||
<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>
|
||||
@@ -254,8 +259,10 @@
|
||||
<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>
|
||||
|
||||
@@ -392,7 +392,6 @@ 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',
|
||||
@@ -550,52 +549,9 @@ 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!',
|
||||
|
||||
@@ -392,7 +392,6 @@ 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',
|
||||
@@ -550,52 +549,9 @@ 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!',
|
||||
|
||||
@@ -391,7 +391,6 @@ 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',
|
||||
@@ -549,54 +548,9 @@ 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!',
|
||||
|
||||
@@ -407,7 +407,6 @@ 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',
|
||||
@@ -570,57 +569,9 @@ 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!',
|
||||
|
||||
@@ -407,7 +407,6 @@ 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',
|
||||
@@ -570,57 +569,9 @@ 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!',
|
||||
|
||||
@@ -390,7 +390,6 @@ 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',
|
||||
@@ -548,51 +547,9 @@ 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.',
|
||||
|
||||
@@ -397,7 +397,6 @@ 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',
|
||||
@@ -563,51 +562,9 @@ 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 !',
|
||||
|
||||
@@ -394,7 +394,6 @@ 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',
|
||||
@@ -552,54 +551,9 @@ 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!',
|
||||
|
||||
@@ -394,7 +394,6 @@ 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',
|
||||
@@ -552,51 +551,9 @@ 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!',
|
||||
|
||||
@@ -394,7 +394,6 @@ 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' => '担当中の要求',
|
||||
@@ -553,54 +552,9 @@ 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' => '空のデータセット..., データを提供してください。',
|
||||
|
||||
@@ -392,7 +392,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
|
||||
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
|
||||
'BooleanLabel:yes' => 'Ja',
|
||||
'BooleanLabel:no' => 'Nee',
|
||||
'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: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',
|
||||
@@ -549,51 +550,9 @@ 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',
|
||||
|
||||
@@ -393,7 +393,6 @@ 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',
|
||||
@@ -564,51 +563,9 @@ 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!',
|
||||
|
||||
@@ -390,7 +390,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
|
||||
Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
|
||||
'BooleanLabel:yes' => 'Sim',
|
||||
'BooleanLabel:no' => 'Não',
|
||||
'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: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',
|
||||
@@ -547,54 +548,9 @@ 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!',
|
||||
|
||||
@@ -393,7 +393,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', [
|
||||
'BooleanLabel:yes' => 'да',
|
||||
'BooleanLabel:no' => 'нет',
|
||||
'UI:Login:Title' => 'Вход в '.ITOP_APPLICATION_SHORT, 'UI:WelcomeMenu:Title' => 'Добро пожаловать в '.ITOP_APPLICATION_SHORT, 'UI:WelcomeMenu:AllOpenRequests' => 'Открытые запросы: %1$d',
|
||||
'UI:WelcomeMenu:Title' => 'Добро пожаловать в '.ITOP_APPLICATION_SHORT,
|
||||
'UI:WelcomeMenu:AllOpenRequests' => 'Открытые запросы: %1$d',
|
||||
'UI:WelcomeMenu:MyCalls' => 'Мои запросы',
|
||||
'UI:WelcomeMenu:OpenIncidents' => 'Открытые инциденты: %1$d',
|
||||
'UI:WelcomeMenu:AllConfigItems' => 'Конфигурационные единицы: %1$d',
|
||||
@@ -550,53 +551,9 @@ 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' => 'Пустой набор данных..., пожалуйста введите что-нибудь!',
|
||||
|
||||
@@ -397,7 +397,6 @@ 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',
|
||||
@@ -556,54 +555,9 @@ 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!',
|
||||
|
||||
@@ -394,7 +394,6 @@ 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',
|
||||
@@ -553,54 +552,9 @@ 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!',
|
||||
|
||||
58
dictionaries/ui/pages/login/cs.dictionary.itop.login.php
Normal file
58
dictionaries/ui/pages/login/cs.dictionary.itop.login.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?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',
|
||||
]);
|
||||
58
dictionaries/ui/pages/login/da.dictionary.itop.login.php
Normal file
58
dictionaries/ui/pages/login/da.dictionary.itop.login.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?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~~',
|
||||
]);
|
||||
58
dictionaries/ui/pages/login/de.dictionary.itop.login.php
Normal file
58
dictionaries/ui/pages/login/de.dictionary.itop.login.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?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',
|
||||
]);
|
||||
58
dictionaries/ui/pages/login/en.dictionary.itop.login.php
Normal file
58
dictionaries/ui/pages/login/en.dictionary.itop.login.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?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',
|
||||
]);
|
||||
58
dictionaries/ui/pages/login/en_gb.dictionary.itop.login.php
Normal file
58
dictionaries/ui/pages/login/en_gb.dictionary.itop.login.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?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',
|
||||
]);
|
||||
58
dictionaries/ui/pages/login/es_cr.dictionary.itop.login.php
Normal file
58
dictionaries/ui/pages/login/es_cr.dictionary.itop.login.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?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',
|
||||
]);
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user