mirror of
https://github.com/Combodo/iTop.git
synced 2026-05-21 00:02:17 +02:00
Merge branch 'develop' into feature/faf_event_service
# Conflicts: # application/cmdbabstract.class.inc.php # application/loginwebpage.class.inc.php # core/dbobject.class.php # core/log.class.inc.php # lib/composer/autoload_classmap.php # lib/composer/autoload_static.php # setup/compiler.class.inc.php # test/phpunit.xml.dist
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.7">
|
||||
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.1">
|
||||
<constants>
|
||||
</constants>
|
||||
<classes>
|
||||
|
||||
@@ -8,5 +8,5 @@
|
||||
Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'CAS:Error:UserNotAllowed' => 'Benutzer ist nicht zugelassen',
|
||||
'CAS:Login:SignIn' => 'Anmeldung mit CAS',
|
||||
'CAS:Login:SignInTooltip' => 'Hier klicken um sich am CAS-Server zu authentifizieren',
|
||||
'CAS:Login:SignInTooltip' => 'Hier klicken, um sich am CAS-Server zu authentifizieren',
|
||||
));
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
/**
|
||||
* Spanish Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
* @traductor Miguel Turrubiates <miguel_tf@yahoo.com>
|
||||
* @notas Utilizar codificación UTF-8 para mostrar acentos y otros caracteres especiales
|
||||
*/
|
||||
|
||||
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
|
||||
'CAS:Error:UserNotAllowed' => 'Usuario no permitido',
|
||||
'CAS:Login:SignIn' => 'Iniciar sesión con CAS',
|
||||
'CAS:Login:SignInTooltip' => 'Click para autenticarse con servidor CAS',
|
||||
));
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2013 XXXXX
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
Dict::Add('PL PL', 'Polish', 'Polski', array(
|
||||
'CAS:Error:UserNotAllowed' => 'Użytkownik niedozwolony',
|
||||
'CAS:Login:SignIn' => 'Zaloguj się za pomocą CAS',
|
||||
'CAS:Login:SignInTooltip' => 'Kliknij tutaj, aby uwierzytelnić się na serwerze CAS',
|
||||
));
|
||||
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2013 XXXXX
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
|
||||
'CAS:Error:UserNotAllowed' => 'Usuário não permitido',
|
||||
'CAS:Login:SignIn' => 'Autenticar com CAS',
|
||||
'CAS:Login:SignInTooltip' => 'Clique aqui para se autenticar no servidor CAS',
|
||||
));
|
||||
@@ -1,12 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2013 XXXXX
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
Dict::Add('ES CR', 'Spanish', 'Español, Castellaño', array(
|
||||
'CAS:Error:UserNotAllowed' => 'User not allowed~~',
|
||||
'CAS:Login:SignIn' => 'Sign in with CAS~~',
|
||||
'CAS:Login:SignInTooltip' => 'Click here to authenticate yourself with the CAS server~~',
|
||||
));
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'authent-cas/2.7.0',
|
||||
'authent-cas/3.1.0',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2013 XXXXX
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
|
||||
'CAS:Error:UserNotAllowed' => 'User not allowed~~',
|
||||
'CAS:Login:SignIn' => 'Sign in with CAS~~',
|
||||
'CAS:Login:SignInTooltip' => 'Click here to authenticate yourself with the CAS server~~',
|
||||
));
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2019 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license https://www.combodo.com/documentation/combodo-software-license.html
|
||||
*
|
||||
*/
|
||||
@@ -9,6 +9,7 @@ namespace Combodo\iTop\Cas;
|
||||
|
||||
use AbstractLoginFSMExtension;
|
||||
use CMDBObject;
|
||||
use Combodo\iTop\Application\Helper\Session;
|
||||
use DBObjectSearch;
|
||||
use DBObjectSet;
|
||||
use Dict;
|
||||
@@ -40,34 +41,34 @@ class CASLoginExtension extends AbstractLoginFSMExtension implements iLogoutExte
|
||||
|
||||
protected function OnStart(&$iErrorCode)
|
||||
{
|
||||
unset($_SESSION['phpCAS']);
|
||||
Session::Unset('phpCAS');
|
||||
return LoginWebPage::LOGIN_FSM_CONTINUE;
|
||||
}
|
||||
|
||||
protected function OnReadCredentials(&$iErrorCode)
|
||||
{
|
||||
if (!isset($_SESSION['login_mode']) || ($_SESSION['login_mode'] == 'cas'))
|
||||
if (Session::Get('login_mode') == 'cas')
|
||||
{
|
||||
static::InitCASClient();
|
||||
if (phpCAS::isAuthenticated())
|
||||
{
|
||||
$_SESSION['login_mode'] = 'cas';
|
||||
$_SESSION['auth_user'] = phpCAS::getUser();
|
||||
unset($_SESSION['login_will_redirect']);
|
||||
Session::Set('login_mode', 'cas');
|
||||
Session::Set('auth_user', phpCAS::getUser());
|
||||
Session::Unset('login_will_redirect');
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!isset($_SESSION['login_will_redirect']))
|
||||
if (!Session::IsSet('login_will_redirect'))
|
||||
{
|
||||
$_SESSION['login_will_redirect'] = true;
|
||||
Session::Set('login_will_redirect', true);
|
||||
}
|
||||
else
|
||||
{
|
||||
unset($_SESSION['login_will_redirect']);
|
||||
Session::Unset('login_will_redirect');
|
||||
$iErrorCode = LoginWebPage::EXIT_CODE_MISSINGLOGIN;
|
||||
return LoginWebPage::LOGIN_FSM_ERROR;
|
||||
}
|
||||
$_SESSION['login_mode'] = 'cas';
|
||||
Session::Set('login_mode', 'cas');
|
||||
phpCAS::forceAuthentication(); // Redirect to CAS and exit
|
||||
}
|
||||
}
|
||||
@@ -76,16 +77,16 @@ class CASLoginExtension extends AbstractLoginFSMExtension implements iLogoutExte
|
||||
|
||||
protected function OnCheckCredentials(&$iErrorCode)
|
||||
{
|
||||
if ($_SESSION['login_mode'] == 'cas')
|
||||
if (Session::Get('login_mode') == 'cas')
|
||||
{
|
||||
if (!isset($_SESSION['auth_user']))
|
||||
if (!Session::IsSet('auth_user'))
|
||||
{
|
||||
$iErrorCode = LoginWebPage::EXIT_CODE_WRONGCREDENTIALS;
|
||||
return LoginWebPage::LOGIN_FSM_ERROR;
|
||||
}
|
||||
if (Config::Get('cas_user_synchro' ))
|
||||
{
|
||||
self::DoUserProvisioning($_SESSION['auth_user']);
|
||||
self::DoUserProvisioning(Session::Get('auth_user'));
|
||||
}
|
||||
}
|
||||
return LoginWebPage::LOGIN_FSM_CONTINUE;
|
||||
@@ -93,24 +94,24 @@ class CASLoginExtension extends AbstractLoginFSMExtension implements iLogoutExte
|
||||
|
||||
protected function OnCredentialsOK(&$iErrorCode)
|
||||
{
|
||||
if ($_SESSION['login_mode'] == 'cas')
|
||||
if (Session::Get('login_mode') == 'cas')
|
||||
{
|
||||
$sAuthUser = $_SESSION['auth_user'];
|
||||
$sAuthUser = Session::Get('auth_user');
|
||||
if (!LoginWebPage::CheckUser($sAuthUser))
|
||||
{
|
||||
$iErrorCode = LoginWebPage::EXIT_CODE_NOTAUTHORIZED;
|
||||
return LoginWebPage::LOGIN_FSM_ERROR;
|
||||
}
|
||||
LoginWebPage::OnLoginSuccess($sAuthUser, 'external', $_SESSION['login_mode']);
|
||||
LoginWebPage::OnLoginSuccess($sAuthUser, 'external', Session::Get('login_mode'));
|
||||
}
|
||||
return LoginWebPage::LOGIN_FSM_CONTINUE;
|
||||
}
|
||||
|
||||
protected function OnError(&$iErrorCode)
|
||||
{
|
||||
if ($_SESSION['login_mode'] == 'cas')
|
||||
if (Session::Get('login_mode') == 'cas')
|
||||
{
|
||||
unset($_SESSION['phpCAS']);
|
||||
Session::Unset('phpCAS');
|
||||
if ($iErrorCode != LoginWebPage::EXIT_CODE_MISSINGLOGIN)
|
||||
{
|
||||
$oLoginWebPage = new LoginWebPage();
|
||||
@@ -123,9 +124,9 @@ class CASLoginExtension extends AbstractLoginFSMExtension implements iLogoutExte
|
||||
|
||||
protected function OnConnected(&$iErrorCode)
|
||||
{
|
||||
if ($_SESSION['login_mode'] == 'cas')
|
||||
if (Session::Get('login_mode') == 'cas')
|
||||
{
|
||||
$_SESSION['can_logoff'] = true;
|
||||
Session::Set('can_logoff', true);
|
||||
return LoginWebPage::CheckLoggedUser($iErrorCode);
|
||||
}
|
||||
return LoginWebPage::LOGIN_FSM_CONTINUE;
|
||||
@@ -496,7 +497,7 @@ class CASUserProvisioning
|
||||
}
|
||||
|
||||
// Now synchronize the profiles
|
||||
LoginWebPage::SynchroniseProfiles($oUser, $aProfiles, 'CAS/LDAP Synchro');
|
||||
LoginWebPage::SynchronizeProfiles($oUser, $aProfiles, 'CAS/LDAP Synchro');
|
||||
|
||||
phpCAS::log("Info: the user '".$oUser->GetName()."' (id=".$oUser->GetKey().") now has the following profiles: '".implode("', '", $aProfiles)."'.");
|
||||
if ($oUser->IsModified())
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2019 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license https://www.combodo.com/documentation/combodo-software-license.html
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{# @copyright Copyright (C) 2010-2019 Combodo SARL #}
|
||||
{# @copyright Copyright (C) 2010-2021 Combodo SARL #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
|
||||
<div class="sso-button" title="{{ aData.sTooltip }}" onclick="$('#login_mode').val('{{ aData.sLoginMode }}'); $('#login_form').submit(); return false;">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -20,7 +20,7 @@
|
||||
*
|
||||
* @author Lukáš Dvořák <lukas.dvorak@itopportal.cz>
|
||||
* @author Daniel Rokos <daniel.rokos@itopportal.cz>
|
||||
* @copyright Copyright (C) 2010-2014 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
// Dictionnay conventions
|
||||
@@ -37,5 +37,5 @@
|
||||
//
|
||||
Dict::Add('CS CZ', 'Czech', 'Čeština', array(
|
||||
'Class:UserExternal' => 'Externí uživatel',
|
||||
'Class:UserExternal+' => 'Uživatel definovaný mimo iTop',
|
||||
'Class:UserExternal+' => 'Uživatel definovaný mimo '.ITOP_APPLICATION_SHORT,
|
||||
));
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -17,10 +17,10 @@
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
/**
|
||||
* @author Erik Bøg <erik@boegmoeller.dk>
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @licence http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
Dict::Add('DA DA', 'Danish', 'Dansk', array(
|
||||
'Class:UserExternal' => 'Extern Bruger',
|
||||
'Class:UserExternal+' => 'Bruger udenfor iTop',
|
||||
'Class:UserExternal+' => 'Bruger udenfor '.ITOP_APPLICATION_SHORT,
|
||||
));
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2014 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -18,11 +18,11 @@
|
||||
/*
|
||||
* @author ITOMIG GmbH <martin.raenker@itomig.de>
|
||||
|
||||
* @copyright Copyright (C) 2017 Combodo SARL
|
||||
* @copyright Copyright (C) 2021 Combodo SARL
|
||||
* @licence http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
*/
|
||||
Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'Class:UserExternal' => 'Externer Benutzer',
|
||||
'Class:UserExternal+' => 'Benutzer außerhalb von iTop',
|
||||
'Class:UserExternal+' => 'Externe authentifizierter '.ITOP_APPLICATION_SHORT.'-Benutzer',
|
||||
));
|
||||
@@ -2,7 +2,7 @@
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2018 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* This file is part of iTop.
|
||||
@@ -37,5 +37,5 @@
|
||||
|
||||
Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:UserExternal' => 'External user',
|
||||
'Class:UserExternal+' => 'User authentified outside of iTop',
|
||||
'Class:UserExternal+' => 'User authentified outside of '.ITOP_APPLICATION_SHORT,
|
||||
));
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2018 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -15,10 +15,10 @@
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
/**
|
||||
* Localized data
|
||||
/**
|
||||
* Spanish Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2013 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
* @traductor Miguel Turrubiates <miguel_tf@yahoo.com>
|
||||
*/
|
||||
@@ -34,7 +34,7 @@
|
||||
//
|
||||
// Class: UserExternal
|
||||
//
|
||||
Dict::Add('ES CR', 'Spanish', 'Español, Castellaño', array(
|
||||
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
|
||||
'Class:UserExternal' => 'Usuario Externo',
|
||||
'Class:UserExternal+' => 'Usuario Autenticado fuera de iTop',
|
||||
'Class:UserExternal+' => 'Usuario Autenticado fuera de '.ITOP_APPLICATION_SHORT,
|
||||
));
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -16,10 +16,10 @@
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:UserExternal' => 'Utilisateur externe à iTop',
|
||||
'Class:UserExternal+' => 'Utilisateur authentifié à l\'extérieur d\'iTop',
|
||||
'Class:UserExternal' => 'Utilisateur externe à '.ITOP_APPLICATION_SHORT,
|
||||
'Class:UserExternal+' => 'Utilisateur authentifié à l\'extérieur de '.ITOP_APPLICATION_SHORT,
|
||||
));
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -16,7 +16,7 @@
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -18,7 +18,7 @@
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
// Dictionnay conventions
|
||||
@@ -35,5 +35,5 @@
|
||||
//
|
||||
Dict::Add('IT IT', 'Italian', 'Italiano', array(
|
||||
'Class:UserExternal' => 'Esterno utente',
|
||||
'Class:UserExternal+' => 'Utente autenticato al di fuori di iTop',
|
||||
'Class:UserExternal+' => 'Utente autenticato al di fuori di '.ITOP_APPLICATION_SHORT,
|
||||
));
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -16,8 +16,8 @@
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
/**
|
||||
* @author Hirofumi Kosaka <kosaka@rworks.jp>
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @author Hirofumi Kosaka <kosaka@rworks.jp>
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @licence http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
Dict::Add('JA JP', 'Japanese', '日本語', array(
|
||||
@@ -2,7 +2,7 @@
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2019 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
* @author Jeffrey Bostoen - <jbostoen.itop@outlook.com> (2018 - 2020)
|
||||
*
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2018 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* This file is part of iTop.
|
||||
*
|
||||
* iTop is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
// Dictionnay conventions
|
||||
// Class:<class_name>
|
||||
// Class:<class_name>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>
|
||||
// Class:<class_name>/Attribute:<attribute_code>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>+
|
||||
|
||||
//
|
||||
// Class: UserExternal
|
||||
//
|
||||
|
||||
Dict::Add('PL PL', 'Polish', 'Polski', array(
|
||||
'Class:UserExternal' => 'Użytkownik zewnętrzny',
|
||||
'Class:UserExternal+' => 'Użytkownik uwierzytelniony poza '.ITOP_APPLICATION_SHORT,
|
||||
));
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -16,7 +16,7 @@
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
|
||||
@@ -13,5 +13,5 @@
|
||||
//
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:UserExternal' => 'Внешний пользователь',
|
||||
'Class:UserExternal+' => 'Пользователь, аутентифицируемый вне iTop',
|
||||
'Class:UserExternal+' => 'Пользователь, аутентифицируемый вне '.ITOP_APPLICATION_SHORT,
|
||||
));
|
||||
@@ -2,7 +2,7 @@
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2018 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* This file is part of iTop.
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -19,7 +19,7 @@
|
||||
* Localized data
|
||||
*
|
||||
* @author Izzet Sirin <izzet.sirin@htr.com.tr>
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
// Dictionnay conventions
|
||||
@@ -36,5 +36,5 @@
|
||||
//
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:UserExternal' => 'Harici kullanıcı',
|
||||
'Class:UserExternal+' => 'iTop dışında yetki kontrolü yapılan kullanıcı',
|
||||
'Class:UserExternal+' => ITOP_APPLICATION_SHORT.' dışında yetki kontrolü yapılan kullanıcı',
|
||||
));
|
||||
@@ -3,7 +3,7 @@
|
||||
* Localized data
|
||||
*
|
||||
* @author Robert Deng <denglx@gmail.com>
|
||||
* @copyright Copyright (C) 2010-2018 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* This file is part of iTop.
|
||||
@@ -35,5 +35,5 @@
|
||||
//
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:UserExternal' => '外部用户',
|
||||
'Class:UserExternal+' => '用户在iTop 外部验证身份',
|
||||
'Class:UserExternal+' => '用户在 '.ITOP_APPLICATION_SHORT.' 外部验证身份',
|
||||
));
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -26,7 +26,7 @@
|
||||
* Similarly once inside iTop, there is no way for the users to change their password or
|
||||
* log off from the iTop application, this has to be handled outside of iTop.
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
@@ -37,7 +37,7 @@ class UserExternal extends User
|
||||
{
|
||||
$aParams = array
|
||||
(
|
||||
"category" => "addon/authentication,grant_by_profile",
|
||||
"category" => "addon/authentication,grant_by_profile,silo",
|
||||
"key_type" => "autoincrement",
|
||||
"name_attcode" => "login",
|
||||
"state_attcode" => "",
|
||||
@@ -45,7 +45,6 @@ class UserExternal extends User
|
||||
"db_table" => "",
|
||||
"db_key_field" => "id",
|
||||
"db_finalclass_field" => "",
|
||||
"display_template" => "",
|
||||
);
|
||||
MetaModel::Init_Params($aParams);
|
||||
MetaModel::Init_InheritAttributes();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2017 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -21,13 +21,13 @@
|
||||
* Authent External
|
||||
* Module definition file for the "External Authentication" module
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2017 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'authent-external/2.7.0',
|
||||
'authent-external/3.1.0',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
328
datamodels/2.x/authent-ldap/datamodel.authent-ldap.xml
Normal file
328
datamodels/2.x/authent-ldap/datamodel.authent-ldap.xml
Normal file
@@ -0,0 +1,328 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.1">
|
||||
<classes>
|
||||
<class id="UserLDAP" _delta="define">
|
||||
<parent>cmdbAbstractObject</parent>
|
||||
<php_parent>
|
||||
<name>UserInternal</name>
|
||||
</php_parent>
|
||||
<properties>
|
||||
<comment>/**
|
||||
* LDAP Authentication
|
||||
* User authentication Module, no password at all!
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2020 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/</comment>
|
||||
<category>addon/authentication,grant_by_profile,silo</category>
|
||||
<abstract>false</abstract>
|
||||
<key_type>autoincrement</key_type>
|
||||
<db_table>priv_user_ldap</db_table>
|
||||
<db_key_field>id</db_key_field>
|
||||
<db_final_class_field/>
|
||||
<naming>
|
||||
<format>%1$s</format>
|
||||
<attributes>
|
||||
<attribute id="login"/>
|
||||
</attributes>
|
||||
</naming>
|
||||
<display_template/>
|
||||
<icon/>
|
||||
<reconciliation>
|
||||
<attributes>
|
||||
<attribute id="login"/>
|
||||
</attributes>
|
||||
</reconciliation>
|
||||
</properties>
|
||||
<fields>
|
||||
<field id="ldap_server" xsi:type="AttributeString">
|
||||
<sql>ldap_server</sql>
|
||||
<default_value/>
|
||||
<is_null_allowed>true</is_null_allowed>
|
||||
</field>
|
||||
</fields>
|
||||
<methods>
|
||||
<method id="CheckCredentials">
|
||||
<comment><![CDATA[/**
|
||||
* Check the user's password against the LDAP server
|
||||
* Algorithm:
|
||||
* 1) Connect to the LDAP server, using a predefined account (or anonymously)
|
||||
* 2) Search for the specified user, based on a specific search query/pattern
|
||||
* 3) If exactly one user is found, continue, otherwise return false (wrong user or wrong query configured)
|
||||
* 3) Bind again to LDAP using the DN of the found user and the password
|
||||
* 4) If the bind is successful return true, otherwise return false (wrong password)
|
||||
*
|
||||
* @param string $sPassword The user's password to validate against the LDAP server
|
||||
*
|
||||
* @return boolean True if the password is Ok, false otherwise
|
||||
* @throws \ArchivedObjectException
|
||||
* @throws \CoreException
|
||||
*/]]></comment>
|
||||
<static>false</static>
|
||||
<access>public</access>
|
||||
<type>OQLMenuNode</type>
|
||||
<code><![CDATA[ public function CheckCredentials($sPassword)
|
||||
{
|
||||
$sServer = $this->Get('ldap_server');
|
||||
if (empty($sServer))
|
||||
{
|
||||
$sLDAPHost = MetaModel::GetModuleSetting('authent-ldap', 'host', 'localhost');
|
||||
$iLDAPPort = MetaModel::GetModuleSetting('authent-ldap', 'port', 389);
|
||||
|
||||
$sDefaultLDAPUser = MetaModel::GetModuleSetting('authent-ldap', 'default_user', '');
|
||||
$sDefaultLDAPPwd = MetaModel::GetModuleSetting('authent-ldap', 'default_pwd', '');
|
||||
$bLDAPStartTLS = MetaModel::GetModuleSetting('authent-ldap', 'start_tls', false);
|
||||
|
||||
$aOptions = MetaModel::GetModuleSetting('authent-ldap', 'options', array());
|
||||
$sLDAPUserQuery = MetaModel::GetModuleSetting('authent-ldap', 'user_query', '');
|
||||
$sBaseDN = MetaModel::GetModuleSetting('authent-ldap', 'base_dn', '');
|
||||
$bDebug = MetaModel::GetModuleSetting('authent-ldap', 'debug', false);
|
||||
}
|
||||
else
|
||||
{
|
||||
$aServers = MetaModel::GetModuleSetting('authent-ldap', 'servers', array());
|
||||
if (!array_key_exists($sServer, $aServers))
|
||||
{
|
||||
$bDebug = MetaModel::GetModuleSetting('authent-ldap', 'debug', false);
|
||||
$this->LogIssue($bDebug, "ldap_authentication: bad LDAP server configuration: '$sServer' not found");
|
||||
return false;
|
||||
}
|
||||
$aServerParams = $aServers[$sServer];
|
||||
$sLDAPHost = isset($aServerParams['host']) ? $aServerParams['host'] : 'localhost';
|
||||
$iLDAPPort = isset($aServerParams['port']) ? $aServerParams['port'] : 389;
|
||||
$sDefaultLDAPUser = isset($aServerParams['default_user']) ? $aServerParams['default_user'] : '';
|
||||
$sDefaultLDAPPwd = isset($aServerParams['default_pwd']) ? $aServerParams['default_pwd'] : '';
|
||||
$bLDAPStartTLS = isset($aServerParams['start_tls']) ? $aServerParams['start_tls'] : false;
|
||||
$aOptions = isset($aServerParams['options']) ? $aServerParams['options'] : array();
|
||||
$sLDAPUserQuery = isset($aServerParams['user_query']) ? $aServerParams['user_query'] : '';
|
||||
$sBaseDN = isset($aServerParams['base_dn']) ? $aServerParams['base_dn'] : '';
|
||||
$bDebug = isset($aServerParams['debug']) ? $aServerParams['debug'] : false;
|
||||
}
|
||||
|
||||
$hDS = @ldap_connect($sLDAPHost, $iLDAPPort);
|
||||
if ($hDS === false)
|
||||
{
|
||||
$this->LogIssue($bDebug, "ldap_authentication: can not connect to the LDAP server '$sLDAPHost' (port: $iLDAPPort). Check the configuration file config-itop.php.");
|
||||
return false;
|
||||
}
|
||||
if (array_key_exists(LDAP_OPT_DEBUG_LEVEL, $aOptions))
|
||||
{
|
||||
// Set debug level before trying to connect, so that debug info appear in the PHP error log if ldap_connect goes wrong
|
||||
$bRet = ldap_set_option($hDS, LDAP_OPT_DEBUG_LEVEL, $aOptions[LDAP_OPT_DEBUG_LEVEL]);
|
||||
$this->LogInfo($bDebug, "ldap_set_option('LDAP_OPT_DEBUG_LEVEL', '{$aOptions[LDAP_OPT_DEBUG_LEVEL]}') returned ".($bRet ? 'true' : 'false'));
|
||||
}
|
||||
foreach($aOptions as $name => $value)
|
||||
{
|
||||
$bRet = ldap_set_option($hDS, $name, $value);
|
||||
$this->LogInfo($bDebug, "ldap_set_option('$name', '$value') returned ".($bRet ? 'true' : 'false'));
|
||||
}
|
||||
if ($bLDAPStartTLS)
|
||||
{
|
||||
$this->LogInfo($bDebug, "ldap_authentication: start tls required.");
|
||||
$hStartTLS = ldap_start_tls($hDS);
|
||||
//$this->LogIssue($bDebug, "ldap_authentication: hStartTLS = '$hStartTLS'");
|
||||
if (!$hStartTLS)
|
||||
{
|
||||
$this->LogIssue($bDebug, "ldap_authentication: start tls failed.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if ($bind = @ldap_bind($hDS, $sDefaultLDAPUser, $sDefaultLDAPPwd))
|
||||
{
|
||||
// Search for the person, using the specified query expression
|
||||
$sLogin = $this->Get('login');
|
||||
$iContactId = $this->Get('contactid');
|
||||
$sFirstName = '';
|
||||
$sLastName = '';
|
||||
$sEMail = '';
|
||||
if ($iContactId > 0)
|
||||
{
|
||||
$oPerson = MetaModel::GetObject('Person', $iContactId);
|
||||
if (is_object($oPerson))
|
||||
{
|
||||
$sFirstName = $oPerson->Get('first_name');
|
||||
$sLastName = $oPerson->Get('name');
|
||||
$sEMail = $oPerson->Get('email');
|
||||
}
|
||||
}
|
||||
// %1$s => login
|
||||
// %2$s => first name
|
||||
// %3$s => last name
|
||||
// %4$s => email
|
||||
$sQuery = sprintf($sLDAPUserQuery, $sLogin, $sFirstName, $sLastName, $sEMail);
|
||||
$hSearchResult = @ldap_search($hDS, $sBaseDN, $sQuery);
|
||||
|
||||
$iCountEntries = ($hSearchResult !== false) ? @ldap_count_entries($hDS, $hSearchResult) : 0;
|
||||
switch($iCountEntries)
|
||||
{
|
||||
case 1:
|
||||
// Exactly one entry found, let's check the password by trying to bind with this user
|
||||
$aEntry = @ldap_get_entries($hDS, $hSearchResult);
|
||||
$sUserDN = $aEntry[0]['dn'];
|
||||
$bUserBind = @ldap_bind($hDS, $sUserDN, $sPassword);
|
||||
if (($bUserBind !== false) && !empty($sPassword))
|
||||
{
|
||||
@ldap_unbind($hDS);
|
||||
return true; // Password Ok
|
||||
}
|
||||
$this->LogIssue($bDebug, "ldap_authentication: wrong password for user: '$sUserDN'.");
|
||||
return false; // Wrong password
|
||||
break;
|
||||
|
||||
case 0:
|
||||
// User not found...
|
||||
$this->LogIssue($bDebug, "ldap_authentication: no entry found with the query '$sQuery', base_dn = '$sBaseDN'. User not found in LDAP.");
|
||||
break;
|
||||
|
||||
default:
|
||||
// More than one entry... maybe the query is not specific enough...
|
||||
$this->LogIssue($bDebug, "ldap_authentication: several (".@ldap_count_entries($hDS, $hSearchResult).") entries match the query '$sQuery', base_dn = '$sBaseDN', check that the query defined in config-itop.php is specific enough.");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Trace: invalid default user for LDAP initial binding
|
||||
$this->LogIssue($bDebug, "ldap_authentication: cannot bind to the LDAP server '$sLDAPHost' (port: $iLDAPPort), user='$sDefaultLDAPUser', pwd='****'. Error: '".ldap_error($hDS)."'. Check the configuration file config-itop.php.");
|
||||
return false;
|
||||
}
|
||||
}]]></code>
|
||||
</method>
|
||||
<method id="TrustWebServerContext">
|
||||
<static>false</static>
|
||||
<access>public</access>
|
||||
<type>OQLMenuNode</type>
|
||||
<code> public function TrustWebServerContext()
|
||||
{
|
||||
return false;
|
||||
}</code>
|
||||
</method>
|
||||
<method id="CanChangePassword">
|
||||
<static>false</static>
|
||||
<access>public</access>
|
||||
<type>OQLMenuNode</type>
|
||||
<code> public function CanChangePassword()
|
||||
{
|
||||
return false;
|
||||
}</code>
|
||||
</method>
|
||||
<method id="ChangePassword">
|
||||
<static>false</static>
|
||||
<access>public</access>
|
||||
<type>OQLMenuNode</type>
|
||||
<code> public function ChangePassword($sOldPassword, $sNewPassword)
|
||||
{
|
||||
return false;
|
||||
}</code>
|
||||
</method>
|
||||
<method id="LogIssue">
|
||||
<static>false</static>
|
||||
<access>protected</access>
|
||||
<type>OQLMenuNode</type>
|
||||
<code><![CDATA[ protected function LogIssue($bDebug, $sMessage, $aData = array())
|
||||
{
|
||||
if ($bDebug)
|
||||
{
|
||||
if (MetaModel::IsLogEnabledIssue() && MetaModel::IsValidClass('EventIssue'))
|
||||
{
|
||||
$oLog = new EventIssue();
|
||||
|
||||
$oLog->Set('message', $sMessage);
|
||||
$oLog->Set('userinfo', '');
|
||||
$oLog->Set('issue', 'LDAP Authentication');
|
||||
$oLog->Set('impact', 'User login rejected');
|
||||
$oLog->Set('data', $aData);
|
||||
$oLog->DBInsertNoReload();
|
||||
}
|
||||
}
|
||||
IssueLog::Error($sMessage);
|
||||
}]]></code>
|
||||
</method>
|
||||
<method id="LogInfo">
|
||||
<static>false</static>
|
||||
<access>protected</access>
|
||||
<type>OQLMenuNode</type>
|
||||
<code><![CDATA[ protected function LogInfo($bDebug, $sMessage)
|
||||
{
|
||||
if ($bDebug)
|
||||
{
|
||||
IssueLog::Info($sMessage);
|
||||
}
|
||||
}]]></code>
|
||||
</method>
|
||||
</methods>
|
||||
<presentation>
|
||||
<details>
|
||||
<items>
|
||||
<item id="contactid">
|
||||
<rank>10</rank>
|
||||
</item>
|
||||
<item id="org_id">
|
||||
<rank>20</rank>
|
||||
</item>
|
||||
<item id="email">
|
||||
<rank>30</rank>
|
||||
</item>
|
||||
<item id="login">
|
||||
<rank>40</rank>
|
||||
</item>
|
||||
<item id="language">
|
||||
<rank>50</rank>
|
||||
</item>
|
||||
<item id="status">
|
||||
<rank>60</rank>
|
||||
</item>
|
||||
<item id="profile_list">
|
||||
<rank>70</rank>
|
||||
</item>
|
||||
<item id="allowed_org_list">
|
||||
<rank>80</rank>
|
||||
</item>
|
||||
<item id="ldap_server">
|
||||
<rank>90</rank>
|
||||
</item>
|
||||
</items>
|
||||
</details>
|
||||
<search>
|
||||
<items>
|
||||
<item id="login">
|
||||
<rank>10</rank>
|
||||
</item>
|
||||
<item id="contactid">
|
||||
<rank>20</rank>
|
||||
</item>
|
||||
<item id="status">
|
||||
<rank>30</rank>
|
||||
</item>
|
||||
<item id="org_id">
|
||||
<rank>40</rank>
|
||||
</item>
|
||||
<item id="ldap_server">
|
||||
<rank>50</rank>
|
||||
</item>
|
||||
</items>
|
||||
</search>
|
||||
<list>
|
||||
<items>
|
||||
<item id="first_name">
|
||||
<rank>10</rank>
|
||||
</item>
|
||||
<item id="last_name">
|
||||
<rank>20</rank>
|
||||
</item>
|
||||
<item id="status">
|
||||
<rank>30</rank>
|
||||
</item>
|
||||
<item id="org_id">
|
||||
<rank>40</rank>
|
||||
</item>
|
||||
<item id="ldap_server">
|
||||
<rank>50</rank>
|
||||
</item>
|
||||
</items>
|
||||
</list>
|
||||
</presentation>
|
||||
</class>
|
||||
</classes>
|
||||
</itop_design>
|
||||
4
datamodels/2.x/authent-ldap/cs.dict.authent-ldap.php → datamodels/2.x/authent-ldap/dictionaries/cs.dict.authent-ldap.php
Executable file → Normal file
4
datamodels/2.x/authent-ldap/cs.dict.authent-ldap.php → datamodels/2.x/authent-ldap/dictionaries/cs.dict.authent-ldap.php
Executable file → Normal file
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -20,7 +20,7 @@
|
||||
*
|
||||
* @author Lukáš Dvořák <lukas.dvorak@itopportal.cz>
|
||||
* @author Daniel Rokos <daniel.rokos@itopportal.cz>
|
||||
* @copyright Copyright (C) 2010-2014 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
// Dictionnay conventions
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -17,7 +17,7 @@
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
/**
|
||||
* @author Erik Bøg <erik@boegmoeller.dk>
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @licence http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
Dict::Add('DA DA', 'Danish', 'Dansk', array(
|
||||
6
datamodels/2.x/authent-ldap/de.dict.authent-ldap.php → datamodels/2.x/authent-ldap/dictionaries/de.dict.authent-ldap.php
Executable file → Normal file
6
datamodels/2.x/authent-ldap/de.dict.authent-ldap.php → datamodels/2.x/authent-ldap/dictionaries/de.dict.authent-ldap.php
Executable file → Normal file
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2014 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -18,11 +18,11 @@
|
||||
/*
|
||||
* @author ITOMIG GmbH <martin.raenker@itomig.de>
|
||||
|
||||
* @copyright Copyright (C) 2017 Combodo SARL
|
||||
* @copyright Copyright (C) 2021 Combodo SARL
|
||||
* @licence http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
*/
|
||||
Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'Class:UserLDAP' => 'LDAP-Benutzer',
|
||||
'Class:UserLDAP+' => 'Benutzer, der über LDAP authentifiziert wird',
|
||||
'Class:UserLDAP+' => 'Benutzer, der via LDAP authentifiziert wird',
|
||||
));
|
||||
0
datamodels/2.x/authent-ldap/en.dict.authent-ldap.php → datamodels/2.x/authent-ldap/dictionaries/en.dict.authent-ldap.php
Executable file → Normal file
0
datamodels/2.x/authent-ldap/en.dict.authent-ldap.php → datamodels/2.x/authent-ldap/dictionaries/en.dict.authent-ldap.php
Executable file → Normal file
@@ -15,10 +15,10 @@
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
/**
|
||||
* Localized data
|
||||
/**
|
||||
* Spanish Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2013 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
* @traductor Miguel Turrubiates <miguel_tf@yahoo.com>
|
||||
*/
|
||||
@@ -34,7 +34,7 @@
|
||||
//
|
||||
// Class: UserLDAP
|
||||
//
|
||||
Dict::Add('ES CR', 'Spanish', 'Español, Castellaño', array(
|
||||
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
|
||||
'Class:UserLDAP' => 'Usuario LDAP',
|
||||
'Class:UserLDAP+' => 'Usuario Autenticado vía LDAP',
|
||||
));
|
||||
4
datamodels/2.x/authent-ldap/fr.dict.authent-ldap.php → datamodels/2.x/authent-ldap/dictionaries/fr.dict.authent-ldap.php
Executable file → Normal file
4
datamodels/2.x/authent-ldap/fr.dict.authent-ldap.php → datamodels/2.x/authent-ldap/dictionaries/fr.dict.authent-ldap.php
Executable file → Normal file
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -16,7 +16,7 @@
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
4
datamodels/2.x/authent-ldap/hu.dict.authent-ldap.php → datamodels/2.x/authent-ldap/dictionaries/hu.dict.authent-ldap.php
Executable file → Normal file
4
datamodels/2.x/authent-ldap/hu.dict.authent-ldap.php → datamodels/2.x/authent-ldap/dictionaries/hu.dict.authent-ldap.php
Executable file → Normal file
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -16,7 +16,7 @@
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
4
datamodels/2.x/authent-ldap/it.dict.authent-ldap.php → datamodels/2.x/authent-ldap/dictionaries/it.dict.authent-ldap.php
Executable file → Normal file
4
datamodels/2.x/authent-ldap/it.dict.authent-ldap.php → datamodels/2.x/authent-ldap/dictionaries/it.dict.authent-ldap.php
Executable file → Normal file
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -18,7 +18,7 @@
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
// Dictionnay conventions
|
||||
4
datamodels/2.x/authent-ldap/ja.dict.authent-ldap.php → datamodels/2.x/authent-ldap/dictionaries/ja.dict.authent-ldap.php
Executable file → Normal file
4
datamodels/2.x/authent-ldap/ja.dict.authent-ldap.php → datamodels/2.x/authent-ldap/dictionaries/ja.dict.authent-ldap.php
Executable file → Normal file
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -17,7 +17,7 @@
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
/**
|
||||
* @author Hirofumi Kosaka <kosaka@rworks.jp>
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @licence http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
Dict::Add('JA JP', 'Japanese', '日本語', array(
|
||||
@@ -2,7 +2,7 @@
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2019 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
* @author Hipska (2019)
|
||||
* @author Jeffrey Bostoen - <jbostoen.itop@outlook.com> (2018 - 2020)
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2018 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* This file is part of iTop.
|
||||
*
|
||||
* iTop is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
// Dictionnay conventions
|
||||
// Class:<class_name>
|
||||
// Class:<class_name>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>
|
||||
// Class:<class_name>/Attribute:<attribute_code>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>+
|
||||
|
||||
//
|
||||
// Class: UserLDAP
|
||||
//
|
||||
|
||||
Dict::Add('PL PL', 'Polish', 'Polski', array(
|
||||
'Class:UserLDAP' => 'Użytkownik LDAP',
|
||||
'Class:UserLDAP+' => 'Użytkownik uwierzytelniony przez LDAP',
|
||||
));
|
||||
4
datamodels/2.x/authent-ldap/pt_br.dict.authent-ldap.php → datamodels/2.x/authent-ldap/dictionaries/pt_br.dict.authent-ldap.php
Executable file → Normal file
4
datamodels/2.x/authent-ldap/pt_br.dict.authent-ldap.php → datamodels/2.x/authent-ldap/dictionaries/pt_br.dict.authent-ldap.php
Executable file → Normal file
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -16,7 +16,7 @@
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
|
||||
0
datamodels/2.x/authent-ldap/ru.dict.authent-ldap.php → datamodels/2.x/authent-ldap/dictionaries/ru.dict.authent-ldap.php
Executable file → Normal file
0
datamodels/2.x/authent-ldap/ru.dict.authent-ldap.php → datamodels/2.x/authent-ldap/dictionaries/ru.dict.authent-ldap.php
Executable file → Normal file
4
datamodels/2.x/authent-ldap/tr.dict.authent-ldap.php → datamodels/2.x/authent-ldap/dictionaries/tr.dict.authent-ldap.php
Executable file → Normal file
4
datamodels/2.x/authent-ldap/tr.dict.authent-ldap.php → datamodels/2.x/authent-ldap/dictionaries/tr.dict.authent-ldap.php
Executable file → Normal file
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -19,7 +19,7 @@
|
||||
* Localized data
|
||||
*
|
||||
* @author Izzet Sirin <izzet.sirin@htr.com.tr>
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
// Dictionnay conventions
|
||||
0
datamodels/2.x/authent-ldap/zh_cn.dict.authent-ldap.php → datamodels/2.x/authent-ldap/dictionaries/zh_cn.dict.authent-ldap.php
Executable file → Normal file
0
datamodels/2.x/authent-ldap/zh_cn.dict.authent-ldap.php → datamodels/2.x/authent-ldap/dictionaries/zh_cn.dict.authent-ldap.php
Executable file → Normal file
@@ -1,206 +1,16 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
|
||||
// PHP Data Model definition file
|
||||
|
||||
// WARNING - WARNING - WARNING
|
||||
// DO NOT EDIT THIS FILE (unless you know what you are doing)
|
||||
//
|
||||
// This file is part of iTop.
|
||||
// If you provide a datamodel.xxxx.xml file with your module,
|
||||
// this file WILL BE overwritten by the compilation of the
|
||||
// module (during the setup) if the datamodel.xxxx.xml file
|
||||
// contains the definition of new classes or menus.
|
||||
//
|
||||
// iTop is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// iTop is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
|
||||
/**
|
||||
* Authent LDAP
|
||||
* User authentication Module, no password at all!
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
|
||||
class UserLDAP extends UserInternal
|
||||
{
|
||||
public static function Init()
|
||||
{
|
||||
$aParams = array
|
||||
(
|
||||
"category" => "addon/authentication,grant_by_profile",
|
||||
"key_type" => "autoincrement",
|
||||
"name_attcode" => "login",
|
||||
"state_attcode" => "",
|
||||
"reconc_keys" => array('login'),
|
||||
"db_table" => "",
|
||||
"db_key_field" => "id",
|
||||
"db_finalclass_field" => "",
|
||||
"display_template" => "",
|
||||
);
|
||||
MetaModel::Init_Params($aParams);
|
||||
MetaModel::Init_InheritAttributes();
|
||||
|
||||
// Display lists
|
||||
MetaModel::Init_SetZListItems('details', array('contactid', 'org_id', 'email', 'login', 'language', 'status', 'profile_list', 'allowed_org_list')); // Attributes to be displayed for the complete details
|
||||
MetaModel::Init_SetZListItems('list', array('first_name', 'last_name', 'status', 'org_id')); // Attributes to be displayed for a list
|
||||
// Search criteria
|
||||
MetaModel::Init_SetZListItems('standard_search', array('login', 'contactid', 'status', 'org_id')); // Criteria of the std search form
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the user's password against the LDAP server
|
||||
* Algorithm:
|
||||
* 1) Connect to the LDAP server, using a predefined account (or anonymously)
|
||||
* 2) Search for the specified user, based on a specific search query/pattern
|
||||
* 3) If exactly one user is found, continue, otherwise return false (wrong user or wrong query configured)
|
||||
* 3) Bind again to LDAP using the DN of the found user and the password
|
||||
* 4) If the bind is successful return true, otherwise return false (wrong password)
|
||||
* @param string $sPassword The user's password to validate against the LDAP server
|
||||
* @return boolean True if the password is Ok, false otherwise
|
||||
*/
|
||||
public function CheckCredentials($sPassword)
|
||||
{
|
||||
$sLDAPHost = MetaModel::GetModuleSetting('authent-ldap', 'host', 'localhost');
|
||||
$iLDAPPort = MetaModel::GetModuleSetting('authent-ldap', 'port', 389);
|
||||
|
||||
$sDefaultLDAPUser = MetaModel::GetModuleSetting('authent-ldap', 'default_user', '');
|
||||
$sDefaultLDAPPwd = MetaModel::GetModuleSetting('authent-ldap', 'default_pwd', '');
|
||||
$bLDAPStartTLS = MetaModel::GetModuleSetting('authent-ldap', 'start_tls', false);
|
||||
|
||||
$aOptions = MetaModel::GetModuleSetting('authent-ldap', 'options', array());
|
||||
if (array_key_exists(LDAP_OPT_DEBUG_LEVEL, $aOptions))
|
||||
{
|
||||
// Set debug level before trying to connect, so that debug info appear in the PHP error log if ldap_connect goes wrong
|
||||
$bRet = ldap_set_option($hDS, LDAP_OPT_DEBUG_LEVEL, $aOptions[LDAP_OPT_DEBUG_LEVEL]);
|
||||
$this->LogMessage("ldap_set_option('$name', '$value') returned ".($bRet ? 'true' : 'false'));
|
||||
}
|
||||
$hDS = @ldap_connect($sLDAPHost, $iLDAPPort);
|
||||
if ($hDS === false)
|
||||
{
|
||||
$this->LogMessage("ldap_authentication: can not connect to the LDAP server '$sLDAPHost' (port: $iLDAPPort). Check the configuration file config-itop.php.");
|
||||
return false;
|
||||
}
|
||||
foreach($aOptions as $name => $value)
|
||||
{
|
||||
$bRet = ldap_set_option($hDS, $name, $value);
|
||||
$this->LogMessage("ldap_set_option('$name', '$value') returned ".($bRet ? 'true' : 'false'));
|
||||
}
|
||||
if ($bLDAPStartTLS)
|
||||
{
|
||||
$this->LogMessage("ldap_authentication: start tls required.");
|
||||
$hStartTLS = ldap_start_tls($hDS);
|
||||
//$this->LogMessage("ldap_authentication: hStartTLS = '$hStartTLS'");
|
||||
if (!$hStartTLS)
|
||||
{
|
||||
$this->LogMessage("ldap_authentication: start tls failed.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if ($bind = @ldap_bind($hDS, $sDefaultLDAPUser, $sDefaultLDAPPwd))
|
||||
{
|
||||
// Search for the person, using the specified query expression
|
||||
$sLDAPUserQuery = MetaModel::GetModuleSetting('authent-ldap', 'user_query', '');
|
||||
$sBaseDN = MetaModel::GetModuleSetting('authent-ldap', 'base_dn', '');
|
||||
|
||||
$sLogin = $this->Get('login');
|
||||
$iContactId = $this->Get('contactid');
|
||||
$sFirstName = '';
|
||||
$sLastName = '';
|
||||
$sEMail = '';
|
||||
if ($iContactId > 0)
|
||||
{
|
||||
$oPerson = MetaModel::GetObject('Person', $iContactId);
|
||||
if (is_object($oPerson))
|
||||
{
|
||||
$sFirstName = $oPerson->Get('first_name');
|
||||
$sLastName = $oPerson->Get('name');
|
||||
$sEMail = $oPerson->Get('email');
|
||||
}
|
||||
}
|
||||
// %1$s => login
|
||||
// %2$s => first name
|
||||
// %3$s => last name
|
||||
// %4$s => email
|
||||
$sQuery = sprintf($sLDAPUserQuery, $sLogin, $sFirstName, $sLastName, $sEMail);
|
||||
$hSearchResult = @ldap_search($hDS, $sBaseDN, $sQuery);
|
||||
|
||||
$iCountEntries = ($hSearchResult !== false) ? @ldap_count_entries($hDS, $hSearchResult) : 0;
|
||||
switch($iCountEntries)
|
||||
{
|
||||
case 1:
|
||||
// Exactly one entry found, let's check the password by trying to bind with this user
|
||||
$aEntry = ldap_get_entries($hDS, $hSearchResult);
|
||||
$sUserDN = $aEntry[0]['dn'];
|
||||
$bUserBind = @ldap_bind($hDS, $sUserDN, $sPassword);
|
||||
if (($bUserBind !== false) && !empty($sPassword))
|
||||
{
|
||||
ldap_unbind($hDS);
|
||||
return true; // Password Ok
|
||||
}
|
||||
$this->LogMessage("ldap_authentication: wrong password for user: '$sUserDN'.");
|
||||
return false; // Wrong password
|
||||
break;
|
||||
|
||||
case 0:
|
||||
// User not found...
|
||||
$this->LogMessage("ldap_authentication: no entry found with the query '$sQuery', base_dn = '$sBaseDN'. User not found in LDAP.");
|
||||
break;
|
||||
|
||||
default:
|
||||
// More than one entry... maybe the query is not specific enough...
|
||||
$this->LogMessage("ldap_authentication: several (".ldap_count_entries($hDS, $hSearchResult).") entries match the query '$sQuery', base_dn = '$sBaseDN', check that the query defined in config-itop.php is specific enough.");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Trace: invalid default user for LDAP initial binding
|
||||
$this->LogMessage("ldap_authentication: can not bind to the LDAP server '$sLDAPHost' (port: $iLDAPPort), user='$sDefaultLDAPUser', pwd='$sDefaultLDAPPwd'. Error: '".ldap_error($hDS)."'. Check the configuration file config-itop.php.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public function TrustWebServerContext()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function CanChangePassword()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public function ChangePassword($sOldPassword, $sNewPassword)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
protected function LogMessage($sMessage, $aData = array())
|
||||
{
|
||||
if (MetaModel::GetModuleSetting('authent-ldap', 'debug', false) && MetaModel::IsLogEnabledIssue())
|
||||
{
|
||||
if (MetaModel::IsValidClass('EventIssue'))
|
||||
{
|
||||
$oLog = new EventIssue();
|
||||
|
||||
$oLog->Set('message', $sMessage);
|
||||
$oLog->Set('userinfo', '');
|
||||
$oLog->Set('issue', 'LDAP Authentication');
|
||||
$oLog->Set('impact', 'User login rejected');
|
||||
$oLog->Set('data', $aData);
|
||||
$oLog->DBInsertNoReload();
|
||||
}
|
||||
|
||||
IssueLog::Error($sMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
// The recommended way to define new classes (for iTop 2.0 and later) is via the XML definition.
|
||||
// This file remains in the module's template only for the cases where there is:
|
||||
// - either no new class or menu defined in the XML file
|
||||
// - or no XML file at all supplied by the module
|
||||
@@ -9,7 +9,7 @@ if (function_exists('ldap_connect'))
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'authent-ldap/2.7.0',
|
||||
'authent-ldap/3.1.0',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
@@ -22,6 +22,7 @@ SetupWebPage::AddModule(
|
||||
),
|
||||
'mandatory' => false,
|
||||
'visible' => true,
|
||||
'installer' => 'AuthentLDAPInstaller',
|
||||
|
||||
// Components
|
||||
//
|
||||
@@ -58,8 +59,23 @@ SetupWebPage::AddModule(
|
||||
),
|
||||
'start_tls' => false,
|
||||
'debug' => false,
|
||||
'servers' => array(),
|
||||
),
|
||||
)
|
||||
);
|
||||
|
||||
// Module installation handler
|
||||
//
|
||||
class AuthentLDAPInstaller extends ModuleInstallerAPI
|
||||
{
|
||||
public static function AfterDataLoad(Config $oConfiguration, $sPreviousVersion, $sCurrentVersion)
|
||||
{
|
||||
// Create missing table entries
|
||||
$sUserLDAPTable = MetaModel::DBGetTable('UserLDAP');
|
||||
$sUserTable = MetaModel::DBGetTable('User');
|
||||
$sSQL = "insert into $sUserLDAPTable (id) select U.id from $sUserTable as U left join $sUserLDAPTable as L on U.id = L.id where U.finalclass='UserLDAP' and isnull(L.id);";
|
||||
CMDBSource::Query($sSQL);
|
||||
}
|
||||
}
|
||||
|
||||
} // if (function_exists('ldap_connect'))
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.7">
|
||||
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.1">
|
||||
|
||||
<module_parameters>
|
||||
<parameters id="authent-local" _delta="define">
|
||||
|
||||
13
datamodels/2.x/authent-local/cs.dict.authent-local.php → datamodels/2.x/authent-local/dictionaries/cs.dict.authent-local.php
Executable file → Normal file
13
datamodels/2.x/authent-local/cs.dict.authent-local.php → datamodels/2.x/authent-local/dictionaries/cs.dict.authent-local.php
Executable file → Normal file
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -20,7 +20,7 @@
|
||||
*
|
||||
* @author Lukáš Dvořák <lukas.dvorak@itopportal.cz>
|
||||
* @author Daniel Rokos <daniel.rokos@itopportal.cz>
|
||||
* @copyright Copyright (C) 2010-2014 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
// Dictionnay conventions
|
||||
@@ -36,8 +36,8 @@
|
||||
// Class: UserLocal
|
||||
//
|
||||
Dict::Add('CS CZ', 'Czech', 'Čeština', array(
|
||||
'Class:UserLocal' => 'interní uživatel iTop',
|
||||
'Class:UserLocal+' => 'Uživatel ověřen interně v iTop',
|
||||
'Class:UserLocal' => 'interní uživatel '.ITOP_APPLICATION_SHORT,
|
||||
'Class:UserLocal+' => 'Uživatel ověřen interně v '.ITOP_APPLICATION_SHORT,
|
||||
'Class:UserLocal/Attribute:password' => 'Heslo',
|
||||
'Class:UserLocal/Attribute:password+' => '',
|
||||
|
||||
@@ -49,10 +49,13 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array(
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'Expired~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => 'One-time Password~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Password cannot be changed by the user.~~',
|
||||
'Class:UserLocal/Attribute:password_renewed_date' => 'Password renewal~~',
|
||||
'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.~~',
|
||||
|
||||
'UserLocal:password:expiration' => 'The fields below require an extension~~'
|
||||
'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~~',
|
||||
));
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -16,13 +16,13 @@
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
/**
|
||||
* @author Erik Bøg <erik@boegmoeller.dk>
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @author Erik Bøg <erik@boegmoeller.dk>
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @licence http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
Dict::Add('DA DA', 'Danish', 'Dansk', array(
|
||||
'Class:UserLocal' => 'iTop-Bruger',
|
||||
'Class:UserLocal+' => 'Bruger der godkendes af iTop',
|
||||
'Class:UserLocal' => ITOP_APPLICATION_SHORT.'-Bruger',
|
||||
'Class:UserLocal+' => 'Bruger der godkendes af '.ITOP_APPLICATION_SHORT,
|
||||
'Class:UserLocal/Attribute:password' => 'Password',
|
||||
'Class:UserLocal/Attribute:password+' => 'Brugerens password',
|
||||
|
||||
@@ -34,10 +34,13 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'Expired~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => 'One-time Password~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Password cannot be changed by the user.~~',
|
||||
'Class:UserLocal/Attribute:password_renewed_date' => 'Password renewal~~',
|
||||
'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.~~',
|
||||
|
||||
'UserLocal:password:expiration' => 'The fields below require an extension~~'
|
||||
'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~~',
|
||||
));
|
||||
21
datamodels/2.x/authent-local/de.dict.authent-local.php → datamodels/2.x/authent-local/dictionaries/de.dict.authent-local.php
Executable file → Normal file
21
datamodels/2.x/authent-local/de.dict.authent-local.php → datamodels/2.x/authent-local/dictionaries/de.dict.authent-local.php
Executable file → Normal file
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2014 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -18,28 +18,31 @@
|
||||
/*
|
||||
* @author ITOMIG GmbH <martin.raenker@itomig.de>
|
||||
|
||||
* @copyright Copyright (C) 2017 Combodo SARL
|
||||
* @copyright Copyright (C) 2021 Combodo SARL
|
||||
* @licence http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
*/
|
||||
Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'Class:UserLocal' => 'iTop-Benutzer',
|
||||
'Class:UserLocal+' => 'Benutzer, von iTop authentifiziert',
|
||||
'Class:UserLocal' => ITOP_APPLICATION_SHORT.'-Benutzer',
|
||||
'Class:UserLocal+' => 'Benutzer, der von '.ITOP_APPLICATION_SHORT.' authentifiziert wird',
|
||||
'Class:UserLocal/Attribute:password' => 'Passwort',
|
||||
'Class:UserLocal/Attribute:password+' => 'Benutzerpasswort',
|
||||
|
||||
'Class:UserLocal/Attribute:expiration' => 'Passwortablauf',
|
||||
'Class:UserLocal/Attribute:expiration+' => 'Passwortablaufstatus (Statusabhängige Effekte müssen per Extension implementiert werden)',
|
||||
'Class:UserLocal/Attribute:expiration+' => 'Passwortablaufstatus (statusabhängige Effekte müssen per Extension implementiert werden)',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire' => 'kann ablaufen',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire' => 'Läuft nie ab',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire' => 'läuft nie ab',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'abgelaufen',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '',
|
||||
'Class:UserLocal/Attribute:password_renewed_date' => 'Passworterneuerung',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => 'einmaliges Passwort',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => '',
|
||||
'Class:UserLocal/Attribute:password_renewed_date' => 'Letzte Passworterneuerung',
|
||||
'Class:UserLocal/Attribute:password_renewed_date+' => 'Letztes Änderungsdatum',
|
||||
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Das Passwort muss mindestens 8 Zeichen lang sein und Großbuchstaben, Kleinbuchstaben, Zahlen und Sonderzeichen enthalten.',
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Das Passwort entspricht nicht dem in den Konfigurationsregeln hinterlegten RegEx-Ausdruck',
|
||||
|
||||
'UserLocal:password:expiration' => 'Die folgenden Felder benötigen eine iTop Erweiterung'
|
||||
'UserLocal:password:expiration' => 'Die folgenden Felder benötigen eine '.ITOP_APPLICATION_SHORT.' Erweiterung',
|
||||
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Setting password expiration to "One-time password" is not allowed for your own User~~',
|
||||
));
|
||||
11
datamodels/2.x/authent-local/en.dict.authent-local.php → datamodels/2.x/authent-local/dictionaries/en.dict.authent-local.php
Executable file → Normal file
11
datamodels/2.x/authent-local/en.dict.authent-local.php → datamodels/2.x/authent-local/dictionaries/en.dict.authent-local.php
Executable file → Normal file
@@ -36,8 +36,8 @@
|
||||
//
|
||||
|
||||
Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:UserLocal' => 'iTop user',
|
||||
'Class:UserLocal+' => 'User authentified by iTop',
|
||||
'Class:UserLocal' => ITOP_APPLICATION_SHORT.' user',
|
||||
'Class:UserLocal+' => 'User authentified by '.ITOP_APPLICATION_SHORT,
|
||||
'Class:UserLocal/Attribute:password' => 'Password',
|
||||
'Class:UserLocal/Attribute:password+' => 'User authentication string',
|
||||
|
||||
@@ -49,10 +49,13 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'Expired',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '',
|
||||
'Class:UserLocal/Attribute:password_renewed_date' => 'Password renewal',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => 'One-time Password',
|
||||
'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.',
|
||||
|
||||
'UserLocal:password:expiration' => 'The fields below require an extension'
|
||||
'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',
|
||||
));
|
||||
@@ -16,9 +16,9 @@
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
/**
|
||||
* Localized data
|
||||
* Spanish Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2013 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
* @traductor Miguel Turrubiates <miguel_tf@yahoo.com>
|
||||
*/
|
||||
@@ -34,24 +34,27 @@
|
||||
//
|
||||
// Class: UserLocal
|
||||
//
|
||||
Dict::Add('ES CR', 'Spanish', 'Español, Castellaño', array(
|
||||
'Class:UserLocal' => 'Usuario de iTop',
|
||||
'Class:UserLocal+' => 'Usuario Autenticado vía iTop',
|
||||
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
|
||||
'Class:UserLocal' => 'Usuario de '.ITOP_APPLICATION_SHORT,
|
||||
'Class:UserLocal+' => 'Usuario Autenticado vía '.ITOP_APPLICATION_SHORT,
|
||||
'Class:UserLocal/Attribute:password' => 'Contraseña',
|
||||
'Class:UserLocal/Attribute:password+' => 'Contraseña',
|
||||
|
||||
'Class:UserLocal/Attribute:expiration' => 'Password expiration~~',
|
||||
'Class:UserLocal/Attribute:expiration+' => 'Password expiration status (requires an extension to have an effect)~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire' => 'Can expire~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire' => 'Never expire~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'Expired~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:password_renewed_date' => 'Password renewal~~',
|
||||
'Class:UserLocal/Attribute:password_renewed_date+' => 'When the password was last changed~~',
|
||||
'Class:UserLocal/Attribute:expiration' => 'Expiración de contraseña',
|
||||
'Class:UserLocal/Attribute:expiration+' => 'Estatus de expiración de contraseña (requiere de una extensión para que tenga efecto)',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire' => 'Puede expirar',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire' => 'Nunca expirar',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'Expirado',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => 'One-time Password~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Password cannot be changed by the user.~~',
|
||||
'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' => 'Password must be at least 8 characters and include uppercase, lowercase, numeric and special characters.~~',
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'La contraseña debe ser de al menos 8 caracteres e incluír mayúsculas, minúsculas, números y caracteres especiales.',
|
||||
|
||||
'UserLocal:password:expiration' => 'The fields below require an extension~~'
|
||||
'UserLocal:password:expiration' => 'El siguiente campo requiere una extensión',
|
||||
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Setting password expiration to "One-time password" is not allowed for your own User~~',
|
||||
));
|
||||
19
datamodels/2.x/authent-local/fr.dict.authent-local.php → datamodels/2.x/authent-local/dictionaries/fr.dict.authent-local.php
Executable file → Normal file
19
datamodels/2.x/authent-local/fr.dict.authent-local.php → datamodels/2.x/authent-local/dictionaries/fr.dict.authent-local.php
Executable file → Normal file
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -16,27 +16,30 @@
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:UserLocal' => 'Utilisateur iTop',
|
||||
'Class:UserLocal+' => 'Utilisateur authentifié par iTop',
|
||||
'Class:UserLocal' => 'Utilisateur '.ITOP_APPLICATION_SHORT,
|
||||
'Class:UserLocal+' => 'Utilisateur authentifié par '.ITOP_APPLICATION_SHORT,
|
||||
'Class:UserLocal/Attribute:password' => 'Mot de passe',
|
||||
'Class:UserLocal/Attribute:password+' => '',
|
||||
|
||||
'Class:UserLocal/Attribute:expiration' => 'Validité du mot de passe',
|
||||
'Class:UserLocal/Attribute:expiration+' => 'Statut du mot de passe (nécessite une extension pour avoir un effet)',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire' => 'à durée limitée',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire' => 'Durée limitée',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire' => 'à validité permanente',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire' => 'Permanente',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'à changer',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'A changer à la prochaine connexion',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => 'Usage unique',
|
||||
'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.',
|
||||
|
||||
'UserLocal:password:expiration' => 'Les champs ci-dessous nécessitent une extension'
|
||||
'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.',
|
||||
));
|
||||
11
datamodels/2.x/authent-local/hu.dict.authent-local.php → datamodels/2.x/authent-local/dictionaries/hu.dict.authent-local.php
Executable file → Normal file
11
datamodels/2.x/authent-local/hu.dict.authent-local.php → datamodels/2.x/authent-local/dictionaries/hu.dict.authent-local.php
Executable file → Normal file
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -16,11 +16,11 @@
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Class:UserLocal' => 'iTop felhasználó',
|
||||
'Class:UserLocal' => ITOP_APPLICATION_SHORT.' felhasználó',
|
||||
'Class:UserLocal+' => '',
|
||||
'Class:UserLocal/Attribute:password' => 'Jelszó',
|
||||
'Class:UserLocal/Attribute:password+' => '',
|
||||
@@ -33,10 +33,13 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'Expired~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => 'One-time Password~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Password cannot be changed by the user.~~',
|
||||
'Class:UserLocal/Attribute:password_renewed_date' => 'Password renewal~~',
|
||||
'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.~~',
|
||||
|
||||
'UserLocal:password:expiration' => 'The fields below require an extension~~'
|
||||
'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~~',
|
||||
));
|
||||
13
datamodels/2.x/authent-local/it.dict.authent-local.php → datamodels/2.x/authent-local/dictionaries/it.dict.authent-local.php
Executable file → Normal file
13
datamodels/2.x/authent-local/it.dict.authent-local.php → datamodels/2.x/authent-local/dictionaries/it.dict.authent-local.php
Executable file → Normal file
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -18,7 +18,7 @@
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
// Dictionnay conventions
|
||||
@@ -34,8 +34,8 @@
|
||||
// Class: UserLocal
|
||||
//
|
||||
Dict::Add('IT IT', 'Italian', 'Italiano', array(
|
||||
'Class:UserLocal' => 'Utente iTop',
|
||||
'Class:UserLocal+' => 'Utente autenticato da iTop',
|
||||
'Class:UserLocal' => 'Utente '.ITOP_APPLICATION_SHORT,
|
||||
'Class:UserLocal+' => 'Utente autenticato da '.ITOP_APPLICATION_SHORT,
|
||||
'Class:UserLocal/Attribute:password' => 'Password',
|
||||
'Class:UserLocal/Attribute:password+' => 'user authentication string',
|
||||
|
||||
@@ -47,10 +47,13 @@ Dict::Add('IT IT', 'Italian', 'Italiano', array(
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'Expired~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => 'One-time Password~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Password cannot be changed by the user.~~',
|
||||
'Class:UserLocal/Attribute:password_renewed_date' => 'Password renewal~~',
|
||||
'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.~~',
|
||||
|
||||
'UserLocal:password:expiration' => 'The fields below require an extension~~'
|
||||
'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~~',
|
||||
));
|
||||
15
datamodels/2.x/authent-local/ja.dict.authent-local.php → datamodels/2.x/authent-local/dictionaries/ja.dict.authent-local.php
Executable file → Normal file
15
datamodels/2.x/authent-local/ja.dict.authent-local.php → datamodels/2.x/authent-local/dictionaries/ja.dict.authent-local.php
Executable file → Normal file
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -16,13 +16,13 @@
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
/**
|
||||
* @author Hirofumi Kosaka <kosaka@rworks.jp>
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @author Hirofumi Kosaka <kosaka@rworks.jp>
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @licence http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
Dict::Add('JA JP', 'Japanese', '日本語', array(
|
||||
'Class:UserLocal' => 'iTopユーザー',
|
||||
'Class:UserLocal+' => 'iTopローカル認証ユーザー',
|
||||
'Class:UserLocal' => ITOP_APPLICATION_SHORT.'ユーザー',
|
||||
'Class:UserLocal+' => ITOP_APPLICATION_SHORT.'ローカル認証ユーザー',
|
||||
'Class:UserLocal/Attribute:password' => 'パスワード',
|
||||
'Class:UserLocal/Attribute:password+' => '認証文字列',
|
||||
|
||||
@@ -34,10 +34,13 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'Expired~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => 'One-time Password~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Password cannot be changed by the user.~~',
|
||||
'Class:UserLocal/Attribute:password_renewed_date' => 'Password renewal~~',
|
||||
'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.~~',
|
||||
|
||||
'UserLocal:password:expiration' => 'The fields below require an extension~~'
|
||||
'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~~',
|
||||
));
|
||||
@@ -2,7 +2,7 @@
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2019 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
* @author Jeffrey Bostoen - <jbostoen.itop@outlook.com> (2018 - 2020)
|
||||
*
|
||||
@@ -25,10 +25,10 @@
|
||||
// Class: UserLocal
|
||||
//
|
||||
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
|
||||
'Class:UserLocal' => 'iTop-gebruiker',
|
||||
'Class:UserLocal+' => 'Gebruiker die aanmeldt met gegevens aangemaakt in het gebruikersbeheer van iTop',
|
||||
'Class:UserLocal' => ITOP_APPLICATION_SHORT.'-gebruiker',
|
||||
'Class:UserLocal+' => 'Gebruiker die aanmeldt met gegevens aangemaakt in het gebruikersbeheer van '.ITOP_APPLICATION_SHORT,
|
||||
'Class:UserLocal/Attribute:password' => 'Wachtwoord',
|
||||
'Class:UserLocal/Attribute:password+' => 'Het wachtwoord waarmee de gebruiker zich aanmeldt bij iTop',
|
||||
'Class:UserLocal/Attribute:password+' => 'Het wachtwoord waarmee de gebruiker zich aanmeldt bij '.ITOP_APPLICATION_SHORT,
|
||||
|
||||
'Class:UserLocal/Attribute:expiration' => 'Wachtwoord verloopt',
|
||||
'Class:UserLocal/Attribute:expiration+' => 'Of het wachtwoord al dan niet verlopen is (vereist een extensie vooraleer dit werkt)',
|
||||
@@ -38,10 +38,13 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'Moet veranderd worden',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => 'One-time Password~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Password cannot be changed by the user.~~',
|
||||
'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.',
|
||||
|
||||
'UserLocal:password:expiration' => 'De velden hieronder vereisen een extensie.'
|
||||
'UserLocal:password:expiration' => 'De velden hieronder vereisen een extensie.',
|
||||
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Setting password expiration to "One-time password" is not allowed for your own User~~',
|
||||
));
|
||||
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2018 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* This file is part of iTop.
|
||||
*
|
||||
* iTop is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
// Dictionnay conventions
|
||||
// Class:<class_name>
|
||||
// Class:<class_name>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>
|
||||
// Class:<class_name>/Attribute:<attribute_code>+
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>
|
||||
// Class:<class_name>/Attribute:<attribute_code>/Value:<value>+
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>
|
||||
// Class:<class_name>/Stimulus:<stimulus_code>+
|
||||
|
||||
//
|
||||
// Class: UserLocal
|
||||
//
|
||||
|
||||
Dict::Add('PL PL', 'Polish', 'Polski', array(
|
||||
'Class:UserLocal' => 'Użytkownik '.ITOP_APPLICATION_SHORT,
|
||||
'Class:UserLocal+' => 'Użytkownik uwierzytelniony przez '.ITOP_APPLICATION_SHORT,
|
||||
'Class:UserLocal/Attribute:password' => 'Hasło',
|
||||
'Class:UserLocal/Attribute:password+' => 'Ciąg uwierzytelniania użytkownika',
|
||||
|
||||
'Class:UserLocal/Attribute:expiration' => 'Wygaśnięcie hasła',
|
||||
'Class:UserLocal/Attribute:expiration+' => 'Stan wygaśnięcia hasła (wymaga rozszerzenia, aby zadziałało)',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire' => 'Może wygasnąć',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire' => 'Nigdy nie wygasa',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'Wygasło',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '',
|
||||
'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.',
|
||||
|
||||
'UserLocal:password:expiration' => 'Poniższe pola wymagają rozszerzenia'
|
||||
));
|
||||
31
datamodels/2.x/authent-local/pt_br.dict.authent-local.php → datamodels/2.x/authent-local/dictionaries/pt_br.dict.authent-local.php
Executable file → Normal file
31
datamodels/2.x/authent-local/pt_br.dict.authent-local.php → datamodels/2.x/authent-local/dictionaries/pt_br.dict.authent-local.php
Executable file → Normal file
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -16,7 +16,7 @@
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
|
||||
@@ -25,18 +25,21 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
|
||||
'Class:UserLocal/Attribute:password' => 'Senha',
|
||||
'Class:UserLocal/Attribute:password+' => '',
|
||||
|
||||
'Class:UserLocal/Attribute:expiration' => 'Password expiration~~',
|
||||
'Class:UserLocal/Attribute:expiration+' => 'Password expiration status (requires an extension to have an effect)~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire' => 'Can expire~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire' => 'Never expire~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'Expired~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:password_renewed_date' => 'Password renewal~~',
|
||||
'Class:UserLocal/Attribute:password_renewed_date+' => 'When the password was last changed~~',
|
||||
'Class:UserLocal/Attribute:expiration' => 'Expiração de senha',
|
||||
'Class:UserLocal/Attribute:expiration+' => 'Status de expiraçãoo de senha (requer uma extensão para fazer efeito)',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire' => 'Pode expirar',
|
||||
'Class:UserLocal/Attribute:expiration/Value:can_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire' => 'Nunca expira',
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'Expirada',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => 'One-time Password~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Password cannot be changed by the user.~~',
|
||||
'Class:UserLocal/Attribute:password_renewed_date' => 'Renovação de senha',
|
||||
'Class:UserLocal/Attribute:password_renewed_date+' => 'Quando a senha foi trocada antiormente',
|
||||
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'Password must be at least 8 characters and include uppercase, lowercase, numeric and special characters.~~',
|
||||
'Error:UserLocalPasswordValidator:UserPasswordPolicyRegex:ValidationFailed' => 'A senha deve ter no mínimo 8 caracteres e incluir letras maiúsculas, minúsculas, números e símbolos.',
|
||||
|
||||
'UserLocal:password:expiration' => 'The fields below require an extension~~'
|
||||
'UserLocal:password:expiration' => 'O campo abaixo requer uma extensão',
|
||||
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Setting password expiration to "One-time password" is not allowed for your own User~~',
|
||||
));
|
||||
9
datamodels/2.x/authent-local/ru.dict.authent-local.php → datamodels/2.x/authent-local/dictionaries/ru.dict.authent-local.php
Executable file → Normal file
9
datamodels/2.x/authent-local/ru.dict.authent-local.php → datamodels/2.x/authent-local/dictionaries/ru.dict.authent-local.php
Executable file → Normal file
@@ -12,8 +12,8 @@
|
||||
// Class: UserLocal
|
||||
//
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:UserLocal' => 'Пользователь iTop',
|
||||
'Class:UserLocal+' => 'Пользователь, аутентифицируемый через iTop',
|
||||
'Class:UserLocal' => 'Пользователь '.ITOP_APPLICATION_SHORT,
|
||||
'Class:UserLocal+' => 'Пользователь, аутентифицируемый через '.ITOP_APPLICATION_SHORT,
|
||||
'Class:UserLocal/Attribute:password' => 'Пароль',
|
||||
'Class:UserLocal/Attribute:password+' => 'Строка аутентификации пользователя',
|
||||
|
||||
@@ -25,10 +25,13 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'Истёкший',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => 'One-time Password~~',
|
||||
'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 символов и включать прописные, строчные, числовые и специальные символы.',
|
||||
|
||||
'UserLocal:password:expiration' => 'Поля требуют наличия доп. расширения'
|
||||
'UserLocal:password:expiration' => 'Поля требуют наличия доп. расширения',
|
||||
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Setting password expiration to "One-time password" is not allowed for your own User~~',
|
||||
));
|
||||
@@ -33,7 +33,7 @@
|
||||
// Class: UserLocal
|
||||
//
|
||||
Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
|
||||
'Class:UserLocal' => 'iTop užívateľ',
|
||||
'Class:UserLocal' => ITOP_APPLICATION_SHORT.' užívateľ',
|
||||
'Class:UserLocal+' => '',
|
||||
'Class:UserLocal/Attribute:password' => 'Heslo',
|
||||
'Class:UserLocal/Attribute:password+' => '',
|
||||
@@ -46,10 +46,13 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'Expired~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => 'One-time Password~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Password cannot be changed by the user.~~',
|
||||
'Class:UserLocal/Attribute:password_renewed_date' => 'Password renewal~~',
|
||||
'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.~~',
|
||||
|
||||
'UserLocal:password:expiration' => 'The fields below require an extension~~'
|
||||
'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~~',
|
||||
));
|
||||
13
datamodels/2.x/authent-local/tr.dict.authent-local.php → datamodels/2.x/authent-local/dictionaries/tr.dict.authent-local.php
Executable file → Normal file
13
datamodels/2.x/authent-local/tr.dict.authent-local.php → datamodels/2.x/authent-local/dictionaries/tr.dict.authent-local.php
Executable file → Normal file
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -19,7 +19,7 @@
|
||||
* Localized data
|
||||
*
|
||||
* @author Izzet Sirin <izzet.sirin@htr.com.tr>
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
// Dictionnay conventions
|
||||
@@ -35,8 +35,8 @@
|
||||
// Class: UserLocal
|
||||
//
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:UserLocal' => 'iTop kullanıcısı',
|
||||
'Class:UserLocal+' => 'Yetki kontorlünü iTop tarafından yapılan kullanıcı',
|
||||
'Class:UserLocal' => ITOP_APPLICATION_SHORT.' kullanıcısı',
|
||||
'Class:UserLocal+' => 'Yetki kontorlünü '.ITOP_APPLICATION_SHORT.' tarafından yapılan kullanıcı',
|
||||
'Class:UserLocal/Attribute:password' => 'Şifre',
|
||||
'Class:UserLocal/Attribute:password+' => 'şifre',
|
||||
|
||||
@@ -48,10 +48,13 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => 'Expired~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => 'One-time Password~~',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire+' => 'Password cannot be changed by the user.~~',
|
||||
'Class:UserLocal/Attribute:password_renewed_date' => 'Password renewal~~',
|
||||
'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.~~',
|
||||
|
||||
'UserLocal:password:expiration' => 'The fields below require an extension~~'
|
||||
'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~~',
|
||||
));
|
||||
@@ -34,8 +34,8 @@
|
||||
// Class: UserLocal
|
||||
//
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:UserLocal' => 'iTop 用户',
|
||||
'Class:UserLocal+' => '用户由 iTop 验证身份',
|
||||
'Class:UserLocal' => ITOP_APPLICATION_SHORT.' 用户',
|
||||
'Class:UserLocal+' => '用户由 '.ITOP_APPLICATION_SHORT.' 验证身份',
|
||||
'Class:UserLocal/Attribute:password' => '密码',
|
||||
'Class:UserLocal/Attribute:password+' => '用于验证用户身份的字符串',
|
||||
|
||||
@@ -47,10 +47,13 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Class:UserLocal/Attribute:expiration/Value:never_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire' => '已过期',
|
||||
'Class:UserLocal/Attribute:expiration/Value:force_expire+' => '',
|
||||
'Class:UserLocal/Attribute:expiration/Value:otp_expire' => 'One-time Password~~',
|
||||
'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 个字符,包含大小写、数字和特殊字符.',
|
||||
|
||||
'UserLocal:password:expiration' => 'The fields below require an extension~~'
|
||||
'UserLocal:password:expiration' => '下面的区域需要插件扩展',
|
||||
'Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed' => 'Setting password expiration to "One-time password" is not allowed for your own User~~',
|
||||
));
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// Copyright (C) 2010-2012 Combodo SARL
|
||||
// Copyright (C) 2010-2021 Combodo SARL
|
||||
//
|
||||
// This file is part of iTop.
|
||||
//
|
||||
@@ -21,7 +21,7 @@
|
||||
* Authent Local
|
||||
* User authentication Module, password stored in the local database
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2012 Combodo SARL
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
@@ -68,7 +68,8 @@ class UserLocal extends UserInternal
|
||||
const EXPIRE_CAN = 'can_expire';
|
||||
const EXPIRE_NEVER = 'never_expire';
|
||||
const EXPIRE_FORCE = 'force_expire';
|
||||
|
||||
const EXPIRE_ONE_TIME_PWD = 'otp_expire';
|
||||
|
||||
/** @var UserLocalPasswordValidity|null */
|
||||
protected $m_oPasswordValidity = null;
|
||||
|
||||
@@ -76,7 +77,7 @@ class UserLocal extends UserInternal
|
||||
{
|
||||
$aParams = array
|
||||
(
|
||||
"category" => "addon/authentication,grant_by_profile",
|
||||
"category" => "addon/authentication,grant_by_profile,silo",
|
||||
"key_type" => "autoincrement",
|
||||
"name_attcode" => "login",
|
||||
"state_attcode" => "",
|
||||
@@ -84,15 +85,14 @@ class UserLocal extends UserInternal
|
||||
"db_table" => "priv_user_local",
|
||||
"db_key_field" => "id",
|
||||
"db_finalclass_field" => "",
|
||||
"display_template" => "",
|
||||
);
|
||||
MetaModel::Init_Params($aParams);
|
||||
MetaModel::Init_InheritAttributes();
|
||||
|
||||
MetaModel::Init_AddAttribute(new AttributeOneWayPassword("password", array("allowed_values"=>null, "sql"=>"pwd", "default_value"=>null, "is_null_allowed"=>false, "depends_on"=>array())));
|
||||
|
||||
$sExpireEnum = implode(',', array(self::EXPIRE_CAN, self::EXPIRE_NEVER, self::EXPIRE_FORCE));
|
||||
MetaModel::Init_AddAttribute(new AttributeEnum("expiration", array("allowed_values"=>new ValueSetEnum($sExpireEnum), "sql"=>"expiration", "default_value"=>'never_expire', "is_null_allowed"=>false, "depends_on"=>array())));
|
||||
$sExpireEnum = implode(',', array(self::EXPIRE_CAN, self::EXPIRE_NEVER, self::EXPIRE_FORCE, self::EXPIRE_ONE_TIME_PWD));
|
||||
MetaModel::Init_AddAttribute(new AttributeEnum("expiration", array("allowed_values"=>new ValueSetEnum($sExpireEnum), "sql"=>"expiration", "default_value"=>self::EXPIRE_NEVER, "is_null_allowed"=>false, "depends_on"=>array())));
|
||||
MetaModel::Init_AddAttribute(new AttributeDate("password_renewed_date", array("allowed_values"=>null, "sql"=>"password_renewed_date", "default_value"=>"", "is_null_allowed"=>true, "depends_on"=>array())));
|
||||
|
||||
// Display lists
|
||||
@@ -137,6 +137,10 @@ class UserLocal extends UserInternal
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if($this->Get('expiration') == self::EXPIRE_ONE_TIME_PWD)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -185,6 +189,8 @@ class UserLocal extends UserInternal
|
||||
protected function OnInsert()
|
||||
{
|
||||
parent::OnInsert();
|
||||
$sToday = date(\AttributeDate::GetInternalFormat());
|
||||
$this->Set('password_renewed_date', $sToday);
|
||||
|
||||
$this->OnWrite();
|
||||
}
|
||||
@@ -203,6 +209,15 @@ class UserLocal extends UserInternal
|
||||
|
||||
$sNow = date(\AttributeDate::GetInternalFormat());
|
||||
$this->Set('password_renewed_date', $sNow);
|
||||
|
||||
// Reset the "force" expiration flag when the user updates her/his own password!
|
||||
if ($this->IsCurrentUser())
|
||||
{
|
||||
if (($this->Get('expiration') == self::EXPIRE_FORCE))
|
||||
{
|
||||
$this->Set('expiration', self::EXPIRE_CAN);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function IsPasswordValid()
|
||||
@@ -279,7 +294,13 @@ class UserLocal extends UserInternal
|
||||
{
|
||||
$this->m_aCheckIssues[] = $this->m_oPasswordValidity->getPasswordValidityMessage();
|
||||
}
|
||||
|
||||
|
||||
// A User cannot force a one-time password on herself/himself
|
||||
if ($this->IsCurrentUser()) {
|
||||
if (array_key_exists('expiration', $this->ListChanges()) && ($this->Get('expiration') == self::EXPIRE_ONE_TIME_PWD)) {
|
||||
$this->m_aCheckIssues[] = Dict::S('Class:UserLocal/Error:OneTimePasswordChangeIsNotAllowed');
|
||||
}
|
||||
}
|
||||
parent::DoCheckToWrite();
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'authent-local/2.7.1',
|
||||
'authent-local/3.1.0',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.1">
|
||||
<branding>
|
||||
<themes>
|
||||
<theme id="darkmoon" _delta="define">
|
||||
<variables>
|
||||
</variables>
|
||||
<imports>
|
||||
<import id="nord-scss-variables" xsi:type="variables">combodo-backoffice-darkmoon-theme/vendors/nord/src/sass/nord.scss</import>
|
||||
<import id="darkmoon-scss-variables" xsi:type="variables">combodo-backoffice-darkmoon-theme/scss/scss-variables.scss</import>
|
||||
</imports>
|
||||
<stylesheets>
|
||||
<stylesheet id="fullmoon">../css/backoffice/main.scss</stylesheet>
|
||||
<stylesheet id="editor">combodo-backoffice-darkmoon-theme/scss/editor.scss</stylesheet>
|
||||
</stylesheets>
|
||||
<precompiled_stylesheet>combodo-backoffice-darkmoon-theme/precompiled-themes/main.css</precompiled_stylesheet>
|
||||
</theme>
|
||||
</themes>
|
||||
</branding>
|
||||
</itop_design>
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* This file is part of iTop.
|
||||
*
|
||||
* iTop is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
Dict::Add('CS CZ', 'Czech', 'Čeština', array(
|
||||
'theme:darkmoon' => 'Dark moon~~',
|
||||
));
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* This file is part of iTop.
|
||||
*
|
||||
* iTop is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
Dict::Add('DA DA', 'Danish', 'Dansk', array(
|
||||
'theme:darkmoon' => 'Dark moon~~',
|
||||
));
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* This file is part of iTop.
|
||||
*
|
||||
* iTop is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'theme:darkmoon' => 'Dark moon~~',
|
||||
));
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* This file is part of iTop.
|
||||
*
|
||||
* iTop is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
Dict::Add('EN US', 'English', 'English', array(
|
||||
'theme:darkmoon' => 'Dark moon',
|
||||
));
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* This file is part of iTop.
|
||||
*
|
||||
* iTop is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
|
||||
'theme:darkmoon' => 'Dark moon~~',
|
||||
));
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* This file is part of iTop.
|
||||
*
|
||||
* iTop is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'theme:darkmoon' => 'Dark moon~~',
|
||||
));
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* This file is part of iTop.
|
||||
*
|
||||
* iTop is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'theme:darkmoon' => 'Dark moon~~',
|
||||
));
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* This file is part of iTop.
|
||||
*
|
||||
* iTop is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
Dict::Add('IT IT', 'Italian', 'Italiano', array(
|
||||
'theme:darkmoon' => 'Dark moon~~',
|
||||
));
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* This file is part of iTop.
|
||||
*
|
||||
* iTop is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
Dict::Add('JA JP', 'Japanese', '日本語', array(
|
||||
'theme:darkmoon' => 'Dark moon~~',
|
||||
));
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* This file is part of iTop.
|
||||
*
|
||||
* iTop is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
|
||||
'theme:darkmoon' => 'Dark moon~~',
|
||||
));
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* This file is part of iTop.
|
||||
*
|
||||
* iTop is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
|
||||
'theme:darkmoon' => 'Dark moon~~',
|
||||
));
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* This file is part of iTop.
|
||||
*
|
||||
* iTop is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'theme:darkmoon' => 'Dark moon~~',
|
||||
));
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* This file is part of iTop.
|
||||
*
|
||||
* iTop is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
|
||||
'theme:darkmoon' => 'Dark moon~~',
|
||||
));
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* This file is part of iTop.
|
||||
*
|
||||
* iTop is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'theme:darkmoon' => 'Dark moon~~',
|
||||
));
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Localized data
|
||||
*
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*
|
||||
* This file is part of iTop.
|
||||
*
|
||||
* iTop is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* iTop is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with iTop. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'theme:darkmoon' => 'Dark moon~~',
|
||||
));
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
// PHP Data Model definition file
|
||||
|
||||
// WARNING - WARNING - WARNING
|
||||
// DO NOT EDIT THIS FILE (unless you know what you are doing)
|
||||
//
|
||||
// If you use supply a datamodel.xxxx.xml file with your module
|
||||
// the this file WILL BE overwritten by the compilation of the
|
||||
// module (during the setup) if the datamodel.xxxx.xml file
|
||||
// contains the definition of new classes or menus.
|
||||
//
|
||||
// The recommended way to define new classes (for iTop 2.0) is via the XML definition.
|
||||
// This file remains in the module's template only for the cases where there is:
|
||||
// - either no new class or menu defined in the XML file
|
||||
// - or no XML file at all supplied by the module
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
//
|
||||
// iTop module definition file
|
||||
//
|
||||
|
||||
SetupWebPage::AddModule(
|
||||
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
|
||||
'combodo-backoffice-darkmoon-theme/3.1.0',
|
||||
array(
|
||||
// Identification
|
||||
//
|
||||
'label' => 'Backoffice: Darkmoon theme',
|
||||
'category' => 'business',
|
||||
|
||||
// Setup
|
||||
//
|
||||
'dependencies' => array(
|
||||
|
||||
),
|
||||
'mandatory' => true,
|
||||
'visible' => false,
|
||||
|
||||
// Components
|
||||
//
|
||||
'datamodel' => array(
|
||||
'model.combodo-backoffice-darkmoon-theme.php'
|
||||
),
|
||||
'webservice' => array(
|
||||
|
||||
),
|
||||
'data.struct' => array(
|
||||
// add your 'structure' definition XML files here,
|
||||
),
|
||||
'data.sample' => array(
|
||||
// add your sample data XML files here,
|
||||
),
|
||||
|
||||
// Documentation
|
||||
//
|
||||
'doc.manual_setup' => '', // hyperlink to manual setup documentation, if any
|
||||
'doc.more_information' => '', // hyperlink to more information, if any
|
||||
|
||||
// Default settings
|
||||
//
|
||||
'settings' => array(
|
||||
// Module specific settings go here, if any
|
||||
),
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
?>
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,829 @@
|
||||
|
||||
.cke_reset_all,
|
||||
.cke_reset_all *,
|
||||
.cke_reset_all a,
|
||||
.cke_reset_all textarea {
|
||||
color: $ibo-color-grey-950 !important;
|
||||
}
|
||||
.cke_reset_all fieldset {
|
||||
border: 2px groove #e0dfe3 !important;
|
||||
}
|
||||
.cke_chrome {
|
||||
border: 1px solid $ibo-color-grey-300 !important;
|
||||
}
|
||||
.cke_editable{
|
||||
background: $ibo-color-grey-100;
|
||||
}
|
||||
.cke_inner {
|
||||
background: $ibo-color-grey-300 !important;
|
||||
}
|
||||
.cke_top {
|
||||
border-bottom: 1px solid $ibo-color-grey-500 !important;
|
||||
background: $ibo-color-grey-200 !important;
|
||||
white-space: normal !important;
|
||||
}
|
||||
.cke_float .cke_top {
|
||||
border: 1px solid $ibo-color-grey-500 !important;
|
||||
}
|
||||
.cke_bottom {
|
||||
|
||||
border-top: 1px solid $ibo-color-grey-500 !important;
|
||||
background: $ibo-color-grey-200 !important;
|
||||
}
|
||||
.cke_browser_ios .cke_contents {
|
||||
overflow-y: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
.cke_resizer {
|
||||
border-color: transparent #bcbcbc transparent transparent;
|
||||
}
|
||||
.cke_resizer_rtl {
|
||||
border-color: transparent transparent transparent #bcbcbc;
|
||||
}
|
||||
.cke_panel {
|
||||
background-color: $ibo-color-grey-200;
|
||||
border: 1px solid #d1d1d1;
|
||||
}
|
||||
.cke_panel_listItem.cke_selected a,
|
||||
.cke_panel_listItem a:hover,
|
||||
.cke_panel_listItem a:focus,
|
||||
.cke_panel_listItem a:active {
|
||||
background-color: #e9e9e9;
|
||||
}
|
||||
.cke_panel_listItem a:focus {
|
||||
outline: 1px dotted #000;
|
||||
}
|
||||
|
||||
.cke_panel_grouptitle {
|
||||
color: #484848;
|
||||
border-bottom: 1px solid #d1d1d1;
|
||||
background: #f8f8f8;
|
||||
}
|
||||
.cke_colorblock,
|
||||
.cke_colorblock a {
|
||||
text-decoration: none;
|
||||
color: #000;
|
||||
}
|
||||
a:hover.cke_colorbox,
|
||||
a:focus.cke_colorbox,
|
||||
a:active.cke_colorbox {
|
||||
outline: 0;
|
||||
padding: 0;
|
||||
border: 2px solid #139ff7;
|
||||
}
|
||||
a:hover.cke_colorbox {
|
||||
border-color: #bcbcbc;
|
||||
}
|
||||
a.cke_colorauto,
|
||||
a.cke_colormore {
|
||||
border: #fff 1px solid;
|
||||
padding: 3px;
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
}
|
||||
a:hover.cke_colorauto,
|
||||
a:hover.cke_colormore,
|
||||
a:focus.cke_colorauto,
|
||||
a:focus.cke_colormore,
|
||||
a:active.cke_colorauto,
|
||||
a:active.cke_colormore {
|
||||
outline: 0;
|
||||
border: #139ff7 1px solid;
|
||||
background-color: #f8f8f8;
|
||||
}
|
||||
a:hover.cke_colorauto,
|
||||
a:hover.cke_colormore {
|
||||
border-color: #bcbcbc;
|
||||
}
|
||||
.cke_colorauto span.cke_colorbox {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
border: 1px solid #808080;
|
||||
margin-left: 1px;
|
||||
margin-top: 3px;
|
||||
}
|
||||
.cke_rtl .cke_colorauto span.cke_colorbox {
|
||||
margin-left: 0;
|
||||
margin-right: 1px;
|
||||
}
|
||||
span.cke_colorbox[style*="#ffffff"],
|
||||
span.cke_colorbox[style*="#FFFFFF"],
|
||||
span.cke_colorbox[style="background-color:#fff"],
|
||||
span.cke_colorbox[style="background-color:#FFF"],
|
||||
span.cke_colorbox[style*="rgb(255,255,255)"],
|
||||
span.cke_colorbox[style*="rgb(255, 255, 255)"] {
|
||||
border: 1px solid #808080;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
}
|
||||
.cke_toolbar {
|
||||
float: left;
|
||||
}
|
||||
.cke_rtl .cke_toolbar {
|
||||
float: right;
|
||||
}
|
||||
.cke_toolgroup {
|
||||
border: 0;
|
||||
float: left;
|
||||
margin: 1px 2px 6px 0;
|
||||
padding-right: 3px;
|
||||
}
|
||||
.cke_rtl .cke_toolgroup {
|
||||
float: right;
|
||||
margin: 1px 0 6px 2px;
|
||||
padding-left: 3px;
|
||||
padding-right: 0;
|
||||
}
|
||||
.cke_hc .cke_toolgroup {
|
||||
margin-right: 5px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.cke_hc.cke_rtl .cke_toolgroup {
|
||||
margin-right: 0;
|
||||
margin-left: 5px;
|
||||
}
|
||||
a.cke_button {
|
||||
display: inline-block;
|
||||
height: 18px;
|
||||
padding: 4px 6px;
|
||||
outline: 0;
|
||||
cursor: default;
|
||||
float: left;
|
||||
border: 0;
|
||||
position: relative;
|
||||
}
|
||||
a.cke_button_expandable {
|
||||
padding: 4px 5px;
|
||||
}
|
||||
.cke_rtl a.cke_button {
|
||||
float: right;
|
||||
}
|
||||
.cke_hc a.cke_button {
|
||||
border: 1px solid black;
|
||||
padding: 3px 5px;
|
||||
margin: 0 3px 5px 0;
|
||||
}
|
||||
.cke_hc.cke_rtl a.cke_button {
|
||||
margin: 0 0 5px 3px;
|
||||
}
|
||||
a.cke_button_on {
|
||||
background: #fff;
|
||||
border: 1px #bcbcbc solid;
|
||||
padding: 3px 5px;
|
||||
}
|
||||
a.cke_button_expandable.cke_button_on {
|
||||
padding: 3px 4px;
|
||||
}
|
||||
a.cke_button_off:hover,
|
||||
a.cke_button_off:focus,
|
||||
a.cke_button_off:active {
|
||||
background: #e5e5e5;
|
||||
border: 1px #bcbcbc solid;
|
||||
padding: 3px 5px;
|
||||
}
|
||||
a.cke_button_expandable.cke_button_off:hover,
|
||||
a.cke_button_expandable.cke_button_off:focus,
|
||||
a.cke_button_expandable.cke_button_off:active {
|
||||
padding: 3px 4px;
|
||||
}
|
||||
.cke_hc a.cke_button_on,
|
||||
.cke_hc a.cke_button_off:hover,
|
||||
.cke_hc a.cke_button_off:focus,
|
||||
.cke_hc a.cke_button_off:active {
|
||||
background: #e5e5e5;
|
||||
border: 3px solid #000;
|
||||
padding: 1px 3px;
|
||||
}
|
||||
a.cke_button_disabled:hover,
|
||||
a.cke_button_disabled:focus,
|
||||
a.cke_button_disabled:active {
|
||||
border: 0;
|
||||
padding: 4px 6px;
|
||||
background-color: transparent;
|
||||
}
|
||||
a.cke_button_expandable.cke_button_disabled:hover,
|
||||
a.cke_button_expandable.cke_button_disabled:active {
|
||||
padding: 4px 5px;
|
||||
}
|
||||
a.cke_button_disabled:focus {
|
||||
border: 1px #bcbcbc solid;
|
||||
padding: 3px 5px;
|
||||
}
|
||||
a.cke_button_expandable.cke_button_disabled:focus {
|
||||
padding: 3px 4px;
|
||||
}
|
||||
.cke_hc a.cke_button_disabled:hover,
|
||||
.cke_hc a.cke_button_disabled:focus,
|
||||
.cke_hc a.cke_button_disabled:active {
|
||||
border: 1px solid #acacac;
|
||||
padding: 3px 5px;
|
||||
margin: 0 3px 5px 0;
|
||||
}
|
||||
.cke_hc a.cke_button_disabled:focus {
|
||||
border: 3px solid #000;
|
||||
padding: 1px 3px;
|
||||
}
|
||||
.cke_hc.cke_rtl a.cke_button_disabled:hover,
|
||||
.cke_hc.cke_rtl a.cke_button_disabled:focus,
|
||||
.cke_hc.cke_rtl a.cke_button_disabled:active {
|
||||
margin: 0 0 5px 3px;
|
||||
}
|
||||
a.cke_button_disabled .cke_button_icon,
|
||||
a.cke_button_disabled .cke_button_arrow {
|
||||
opacity: 0.3;
|
||||
}
|
||||
.cke_hc a.cke_button_disabled {
|
||||
border-color: #acacac;
|
||||
}
|
||||
.cke_hc a.cke_button_disabled .cke_button_icon,
|
||||
.cke_hc a.cke_button_disabled .cke_button_label {
|
||||
opacity: 0.5;
|
||||
}
|
||||
.cke_toolgroup a.cke_button:last-child:after,
|
||||
.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
height: 18px;
|
||||
width: 0;
|
||||
border-right: 1px solid #bcbcbc;
|
||||
margin-top: 4px;
|
||||
top: 0;
|
||||
right: -3px;
|
||||
}
|
||||
.cke_rtl .cke_toolgroup a.cke_button:last-child:after,
|
||||
.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after {
|
||||
border-right: 0;
|
||||
right: auto;
|
||||
border-left: 1px solid #bcbcbc;
|
||||
top: 0;
|
||||
left: -3px;
|
||||
}
|
||||
.cke_hc .cke_toolgroup a.cke_button:last-child:after,
|
||||
.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,
|
||||
.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after {
|
||||
border-color: #000;
|
||||
top: 0;
|
||||
right: -7px;
|
||||
}
|
||||
.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,
|
||||
.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,
|
||||
.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after {
|
||||
top: 0;
|
||||
right: auto;
|
||||
left: -7px;
|
||||
}
|
||||
.cke_toolgroup a.cke_button:hover:last-child:after,
|
||||
.cke_toolgroup a.cke_button:focus:last-child:after,
|
||||
.cke_toolgroup a.cke_button.cke_button_on:last-child:after {
|
||||
top: -1px;
|
||||
right: -4px;
|
||||
}
|
||||
.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,
|
||||
.cke_rtl .cke_toolgroup a.cke_button:focus:last-child:after,
|
||||
.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after {
|
||||
top: -1px;
|
||||
right: auto;
|
||||
left: -4px;
|
||||
}
|
||||
.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,
|
||||
.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after {
|
||||
top: -2px;
|
||||
right: -9px;
|
||||
}
|
||||
.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,
|
||||
.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after {
|
||||
top: -2px;
|
||||
right: auto;
|
||||
left: -9px;
|
||||
}
|
||||
.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after {
|
||||
content: none;
|
||||
border: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
}
|
||||
.cke_button_icon {
|
||||
cursor: inherit;
|
||||
background-repeat: no-repeat;
|
||||
margin-top: 1px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
float: left;
|
||||
display: inline-block;
|
||||
}
|
||||
.cke_rtl .cke_button_icon {
|
||||
float: right;
|
||||
}
|
||||
.cke_hc .cke_button_icon {
|
||||
display: none;
|
||||
}
|
||||
.cke_button_label {
|
||||
display: none;
|
||||
padding-left: 3px;
|
||||
margin-top: 1px;
|
||||
line-height: 17px;
|
||||
vertical-align: middle;
|
||||
float: left;
|
||||
cursor: default;
|
||||
color: #484848;
|
||||
}
|
||||
.cke_rtl .cke_button_label {
|
||||
padding-right: 3px;
|
||||
padding-left: 0;
|
||||
float: right;
|
||||
}
|
||||
.cke_hc .cke_button_label {
|
||||
padding: 0;
|
||||
display: inline-block;
|
||||
font-size: 12px;
|
||||
}
|
||||
.cke_button_arrow {
|
||||
display: inline-block;
|
||||
margin: 8px 0 0 3px;
|
||||
width: 0;
|
||||
height: 0;
|
||||
cursor: default;
|
||||
vertical-align: top;
|
||||
border-left: 3px solid transparent;
|
||||
border-right: 3px solid transparent;
|
||||
border-top: 3px solid #484848;
|
||||
}
|
||||
.cke_rtl .cke_button_arrow {
|
||||
margin-right: 5px;
|
||||
margin-left: 0;
|
||||
}
|
||||
.cke_hc .cke_button_arrow {
|
||||
font-size: 10px;
|
||||
margin: 3px 0 0 3px;
|
||||
width: auto;
|
||||
border: 0;
|
||||
}
|
||||
.cke_toolbar_separator {
|
||||
float: left;
|
||||
background-color: #bcbcbc;
|
||||
margin: 4px 2px 0 2px;
|
||||
height: 18px;
|
||||
width: 1px;
|
||||
}
|
||||
.cke_rtl .cke_toolbar_separator {
|
||||
float: right;
|
||||
}
|
||||
.cke_hc .cke_toolbar_separator {
|
||||
background-color: #000;
|
||||
margin-left: 2px;
|
||||
margin-right: 5px;
|
||||
margin-bottom: 9px;
|
||||
}
|
||||
.cke_hc.cke_rtl .cke_toolbar_separator {
|
||||
margin-left: 5px;
|
||||
margin-right: 2px;
|
||||
}
|
||||
.cke_toolbar_break {
|
||||
display: block;
|
||||
clear: left;
|
||||
}
|
||||
.cke_rtl .cke_toolbar_break {
|
||||
clear: right;
|
||||
}
|
||||
a.cke_toolbox_collapser {
|
||||
width: 12px;
|
||||
height: 11px;
|
||||
float: right;
|
||||
margin: 11px 0 0;
|
||||
font-size: 0;
|
||||
cursor: default;
|
||||
text-align: center;
|
||||
border: 1px solid #bcbcbc;
|
||||
}
|
||||
.cke_rtl .cke_toolbox_collapser {
|
||||
float: left;
|
||||
}
|
||||
.cke_toolbox_collapser:hover {
|
||||
background: #e5e5e5;
|
||||
}
|
||||
.cke_toolbox_collapser.cke_toolbox_collapser_min {
|
||||
margin: 0 2px 4px;
|
||||
}
|
||||
.cke_toolbox_collapser .cke_arrow {
|
||||
display: inline-block;
|
||||
height: 0;
|
||||
width: 0;
|
||||
font-size: 0;
|
||||
margin-top: 1px;
|
||||
border: 3px solid transparent;
|
||||
border-bottom-color: #484848;
|
||||
}
|
||||
.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow {
|
||||
margin-top: 4px;
|
||||
border-bottom-color: transparent;
|
||||
border-top-color: #484848;
|
||||
}
|
||||
.cke_hc .cke_toolbox_collapser .cke_arrow {
|
||||
font-size: 8px;
|
||||
width: auto;
|
||||
border: 0;
|
||||
margin-top: 0;
|
||||
}
|
||||
.cke_menuitem span {
|
||||
cursor: default;
|
||||
}
|
||||
.cke_menubutton {
|
||||
display: block;
|
||||
}
|
||||
.cke_hc .cke_menubutton {
|
||||
padding: 2px;
|
||||
}
|
||||
.cke_menubutton:hover,
|
||||
.cke_menubutton:focus,
|
||||
.cke_menubutton:active {
|
||||
background-color: #e9e9e9;
|
||||
display: block;
|
||||
outline: 1px dotted;
|
||||
}
|
||||
.cke_menubutton:hover {
|
||||
outline: 0;
|
||||
}
|
||||
.cke_hc .cke_menubutton:hover,
|
||||
.cke_hc .cke_menubutton:focus,
|
||||
.cke_hc .cke_menubutton:active {
|
||||
border: 2px solid;
|
||||
padding: 0;
|
||||
}
|
||||
.cke_menubutton_disabled:hover,
|
||||
.cke_menubutton_disabled:focus,
|
||||
.cke_menubutton_disabled:active {
|
||||
background-color: transparent;
|
||||
outline: 0;
|
||||
}
|
||||
.cke_menubutton_inner {
|
||||
display: table-row;
|
||||
}
|
||||
.cke_menubutton_icon,
|
||||
.cke_menubutton_label,
|
||||
.cke_menuarrow {
|
||||
display: table-cell;
|
||||
}
|
||||
.cke_menubutton_icon {
|
||||
background-color: #f8f8f8;
|
||||
padding: 6px 4px;
|
||||
}
|
||||
.cke_hc .cke_menubutton_icon {
|
||||
height: 16px;
|
||||
width: 0;
|
||||
padding: 4px 0;
|
||||
}
|
||||
.cke_menubutton:hover .cke_menubutton_icon,
|
||||
.cke_menubutton:focus .cke_menubutton_icon,
|
||||
.cke_menubutton:active .cke_menubutton_icon {
|
||||
background-color: #e9e9e9;
|
||||
}
|
||||
.cke_menubutton_disabled:hover .cke_menubutton_icon,
|
||||
.cke_menubutton_disabled:focus .cke_menubutton_icon,
|
||||
.cke_menubutton_disabled:active .cke_menubutton_icon {
|
||||
background-color: #f8f8f8;
|
||||
outline: 0;
|
||||
}
|
||||
.cke_menuitem .cke_menubutton_on {
|
||||
background-color: #e9e9e9;
|
||||
border: 1px solid #dedede;
|
||||
outline: 0;
|
||||
}
|
||||
.cke_menubutton_on .cke_menubutton_icon {
|
||||
padding-right: 3px;
|
||||
background-color: #e9e9e9;
|
||||
}
|
||||
.cke_menubutton_label {
|
||||
padding: 0 5px;
|
||||
background-color: transparent;
|
||||
width: 100%;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.cke_menubutton_shortcut {
|
||||
color: #979797;
|
||||
}
|
||||
.cke_menubutton_disabled .cke_menubutton_label {
|
||||
opacity: 0.3;
|
||||
filter: alpha(opacity=30);
|
||||
}
|
||||
.cke_panel_frame .cke_menubutton_label {
|
||||
display: none;
|
||||
}
|
||||
.cke_menuseparator {
|
||||
background-color: #d1d1d1;
|
||||
height: 1px;
|
||||
}
|
||||
.cke_menuarrow {
|
||||
background: transparent url(images/arrow.png) no-repeat 0 10px;
|
||||
padding: 0 5px;
|
||||
}
|
||||
.cke_rtl .cke_menuarrow {
|
||||
background-position: 5px -13px;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
.cke_hc .cke_menuarrow {
|
||||
background-image: none;
|
||||
}
|
||||
.cke_menuarrow span {
|
||||
display: none;
|
||||
}
|
||||
.cke_hc .cke_menuarrow span {
|
||||
vertical-align: middle;
|
||||
display: inline;
|
||||
}
|
||||
.cke_combo {
|
||||
display: inline-block;
|
||||
float: left;
|
||||
position: relative;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.cke_rtl .cke_combo {
|
||||
float: right;
|
||||
}
|
||||
.cke_hc .cke_combo {
|
||||
margin-top: 1px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.cke_combo:after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
height: 18px;
|
||||
width: 0;
|
||||
border-right: 1px solid #bcbcbc;
|
||||
margin-top: 5px;
|
||||
top: 0;
|
||||
right: 0;
|
||||
}
|
||||
.cke_rtl .cke_combo:after {
|
||||
border-right: 0;
|
||||
border-left: 1px solid #bcbcbc;
|
||||
right: auto;
|
||||
left: 0;
|
||||
}
|
||||
.cke_hc .cke_combo:after {
|
||||
border-color: #000;
|
||||
}
|
||||
a.cke_combo_button {
|
||||
cursor: default;
|
||||
display: inline-block;
|
||||
float: left;
|
||||
margin: 0;
|
||||
padding: 1px;
|
||||
}
|
||||
.cke_rtl a.cke_combo_button {
|
||||
float: right;
|
||||
}
|
||||
.cke_hc a.cke_combo_button {
|
||||
padding: 4px;
|
||||
}
|
||||
.cke_combo_on a.cke_combo_button,
|
||||
.cke_combo_off a.cke_combo_button:hover,
|
||||
.cke_combo_off a.cke_combo_button:focus,
|
||||
.cke_combo_off a.cke_combo_button:active {
|
||||
background: #e5e5e5;
|
||||
border: 1px solid #bcbcbc;
|
||||
padding: 0 0 0 1px;
|
||||
margin-left: -1px;
|
||||
}
|
||||
.cke_combo_off a.cke_combo_button:focus {
|
||||
outline: 0;
|
||||
}
|
||||
.cke_combo_on a.cke_combo_button,
|
||||
.cke_combo_off a.cke_combo_button:active {
|
||||
background: #fff;
|
||||
}
|
||||
.cke_rtl .cke_combo_on a.cke_combo_button,
|
||||
.cke_rtl .cke_combo_off a.cke_combo_button:hover,
|
||||
.cke_rtl .cke_combo_off a.cke_combo_button:focus,
|
||||
.cke_rtl .cke_combo_off a.cke_combo_button:active {
|
||||
padding: 0 1px 0 0;
|
||||
margin-left: 0;
|
||||
margin-right: -1px;
|
||||
}
|
||||
.cke_hc .cke_combo_on a.cke_combo_button,
|
||||
.cke_hc .cke_combo_off a.cke_combo_button:hover,
|
||||
.cke_hc .cke_combo_off a.cke_combo_button:focus,
|
||||
.cke_hc .cke_combo_off a.cke_combo_button:active {
|
||||
border: 3px solid #000;
|
||||
padding: 1px 1px 1px 2px;
|
||||
}
|
||||
.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,
|
||||
.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,
|
||||
.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,
|
||||
.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active {
|
||||
padding: 1px 2px 1px 1px;
|
||||
}
|
||||
.cke_toolbar_start + .cke_combo_on a.cke_combo_button,
|
||||
.cke_toolbar_start + .cke_combo_off a.cke_combo_button:hover,
|
||||
.cke_toolbar_start + .cke_combo_off a.cke_combo_button:focus,
|
||||
.cke_toolbar_start + .cke_combo_off a.cke_combo_button:active {
|
||||
padding: 0 0 0 3px;
|
||||
margin-left: -3px;
|
||||
}
|
||||
.cke_rtl .cke_toolbar_start + .cke_combo_on a.cke_combo_button,
|
||||
.cke_rtl .cke_toolbar_start + .cke_combo_off a.cke_combo_button:hover,
|
||||
.cke_rtl .cke_toolbar_start + .cke_combo_off a.cke_combo_button:focus,
|
||||
.cke_rtl .cke_toolbar_start + .cke_combo_off a.cke_combo_button:active {
|
||||
padding: 0 3px 0 0;
|
||||
margin-left: 0;
|
||||
margin-right: -3px;
|
||||
}
|
||||
.cke_hc .cke_toolbar > .cke_toolbar_start + .cke_combo_on a.cke_combo_button,
|
||||
.cke_hc .cke_toolbar > .cke_toolbar_start + .cke_combo_off a.cke_combo_button:hover,
|
||||
.cke_hc .cke_toolbar > .cke_toolbar_start + .cke_combo_off a.cke_combo_button:focus,
|
||||
.cke_hc .cke_toolbar > .cke_toolbar_start + .cke_combo_off a.cke_combo_button:active {
|
||||
padding: 1px 1px 1px 7px;
|
||||
margin-left: -6px;
|
||||
}
|
||||
.cke_hc.cke_rtl .cke_toolbar > .cke_toolbar_start + .cke_combo_on a.cke_combo_button,
|
||||
.cke_hc.cke_rtl .cke_toolbar > .cke_toolbar_start + .cke_combo_off a.cke_combo_button:hover,
|
||||
.cke_hc.cke_rtl .cke_toolbar > .cke_toolbar_start + .cke_combo_off a.cke_combo_button:focus,
|
||||
.cke_hc.cke_rtl .cke_toolbar > .cke_toolbar_start + .cke_combo_off a.cke_combo_button:active {
|
||||
padding: 1px 7px 1px 1px;
|
||||
margin-left: 0;
|
||||
margin-right: -6px;
|
||||
}
|
||||
.cke_toolbox .cke_toolbar:first-child > .cke_toolbar_start + .cke_combo_on a.cke_combo_button,
|
||||
.cke_toolbox .cke_toolbar:first-child > .cke_toolbar_start + .cke_combo_off a.cke_combo_button:hover,
|
||||
.cke_toolbox .cke_toolbar:first-child > .cke_toolbar_start + .cke_combo_off a.cke_combo_button:focus,
|
||||
.cke_toolbox .cke_toolbar:first-child > .cke_toolbar_start + .cke_combo_off a.cke_combo_button:active,
|
||||
.cke_toolbar_break + .cke_toolbar > .cke_toolbar_start + .cke_combo_on a.cke_combo_button,
|
||||
.cke_toolbar_break + .cke_toolbar > .cke_toolbar_start + .cke_combo_off a.cke_combo_button:hover,
|
||||
.cke_toolbar_break + .cke_toolbar > .cke_toolbar_start + .cke_combo_off a.cke_combo_button:focus,
|
||||
.cke_toolbar_break + .cke_toolbar > .cke_toolbar_start + .cke_combo_off a.cke_combo_button:active {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
.cke_hc .cke_toolbox .cke_toolbar:first-child > .cke_toolbar_start + .cke_combo_on a.cke_combo_button,
|
||||
.cke_hc .cke_toolbox .cke_toolbar:first-child > .cke_toolbar_start + .cke_combo_off a.cke_combo_button:hover,
|
||||
.cke_hc .cke_toolbox .cke_toolbar:first-child > .cke_toolbar_start + .cke_combo_off a.cke_combo_button:focus,
|
||||
.cke_hc .cke_toolbox .cke_toolbar:first-child > .cke_toolbar_start + .cke_combo_off a.cke_combo_button:active,
|
||||
.cke_hc .cke_toolbar_break + .cke_toolbar > .cke_toolbar_start + .cke_combo_on a.cke_combo_button,
|
||||
.cke_hc .cke_toolbar_break + .cke_toolbar > .cke_toolbar_start + .cke_combo_off a.cke_combo_button:hover,
|
||||
.cke_hc .cke_toolbar_break + .cke_toolbar > .cke_toolbar_start + .cke_combo_off a.cke_combo_button:focus,
|
||||
.cke_hc .cke_toolbar_break + .cke_toolbar > .cke_toolbar_start + .cke_combo_off a.cke_combo_button:active {
|
||||
padding: 1px;
|
||||
margin: 0;
|
||||
}
|
||||
.cke_toolbar .cke_combo + .cke_toolbar_end,
|
||||
.cke_toolbar .cke_combo + .cke_toolgroup {
|
||||
margin-right: 0;
|
||||
margin-left: 2px;
|
||||
}
|
||||
.cke_rtl .cke_toolbar .cke_combo + .cke_toolbar_end,
|
||||
.cke_rtl .cke_toolbar .cke_combo + .cke_toolgroup {
|
||||
margin-left: 0;
|
||||
margin-right: 2px;
|
||||
}
|
||||
.cke_hc .cke_toolbar .cke_combo + .cke_toolbar_end,
|
||||
.cke_hc .cke_toolbar .cke_combo + .cke_toolgroup {
|
||||
margin-left: 5px;
|
||||
}
|
||||
.cke_hc.cke_rtl .cke_toolbar .cke_combo + .cke_toolbar_end,
|
||||
.cke_hc.cke_rtl .cke_toolbar .cke_combo + .cke_toolgroup {
|
||||
margin-left: 0;
|
||||
margin-right: 5px;
|
||||
}
|
||||
.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n + 2):after {
|
||||
content: none;
|
||||
border: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
}
|
||||
.cke_combo_text {
|
||||
line-height: 26px;
|
||||
padding-left: 10px;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
float: left;
|
||||
cursor: default;
|
||||
color: #484848;
|
||||
width: 60px;
|
||||
}
|
||||
.cke_rtl .cke_combo_text {
|
||||
float: right;
|
||||
text-align: right;
|
||||
padding-left: 0;
|
||||
padding-right: 10px;
|
||||
}
|
||||
.cke_hc .cke_combo_text {
|
||||
line-height: 18px;
|
||||
font-size: 12px;
|
||||
}
|
||||
.cke_combo_open {
|
||||
cursor: default;
|
||||
display: inline-block;
|
||||
font-size: 0;
|
||||
height: 19px;
|
||||
line-height: 17px;
|
||||
margin: 1px 10px 1px;
|
||||
width: 5px;
|
||||
}
|
||||
.cke_hc .cke_combo_open {
|
||||
height: 12px;
|
||||
}
|
||||
.cke_combo_arrow {
|
||||
cursor: default;
|
||||
margin: 11px 0 0;
|
||||
float: left;
|
||||
height: 0;
|
||||
width: 0;
|
||||
font-size: 0;
|
||||
border-left: 3px solid transparent;
|
||||
border-right: 3px solid transparent;
|
||||
border-top: 3px solid #484848;
|
||||
}
|
||||
.cke_hc .cke_combo_arrow {
|
||||
font-size: 10px;
|
||||
width: auto;
|
||||
border: 0;
|
||||
margin-top: 3px;
|
||||
}
|
||||
.cke_combo_label {
|
||||
display: none;
|
||||
float: left;
|
||||
line-height: 26px;
|
||||
vertical-align: top;
|
||||
margin-right: 5px;
|
||||
}
|
||||
.cke_rtl .cke_combo_label {
|
||||
float: right;
|
||||
margin-left: 5px;
|
||||
margin-right: 0;
|
||||
}
|
||||
.cke_combo_disabled .cke_combo_inlinelabel,
|
||||
.cke_combo_disabled .cke_combo_open {
|
||||
opacity: 0.3;
|
||||
}
|
||||
.cke_path {
|
||||
float: left;
|
||||
margin: -2px 0 2px;
|
||||
}
|
||||
a.cke_path_item,
|
||||
span.cke_path_empty {
|
||||
display: inline-block;
|
||||
float: left;
|
||||
padding: 3px 4px;
|
||||
margin-right: 2px;
|
||||
cursor: default;
|
||||
text-decoration: none;
|
||||
outline: 0;
|
||||
border: 0;
|
||||
color: #484848;
|
||||
font-weight: bold;
|
||||
font-size: 11px;
|
||||
}
|
||||
.cke_rtl .cke_path,
|
||||
.cke_rtl .cke_path_item,
|
||||
.cke_rtl .cke_path_empty {
|
||||
float: right;
|
||||
}
|
||||
a.cke_path_item:hover,
|
||||
a.cke_path_item:focus,
|
||||
a.cke_path_item:active {
|
||||
background-color: #e5e5e5;
|
||||
}
|
||||
.cke_hc a.cke_path_item:hover,
|
||||
.cke_hc a.cke_path_item:focus,
|
||||
.cke_hc a.cke_path_item:active {
|
||||
border: 2px solid;
|
||||
padding: 1px 2px;
|
||||
}
|
||||
.cke_button__source_label,
|
||||
.cke_button__sourcedialog_label {
|
||||
display: inline;
|
||||
}
|
||||
.cke_combopanel__fontsize {
|
||||
width: 135px;
|
||||
}
|
||||
textarea.cke_source {
|
||||
font-family: "Courier New", Monospace;
|
||||
font-size: small;
|
||||
background-color: #fff;
|
||||
white-space: pre-wrap;
|
||||
border: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
display: block;
|
||||
}
|
||||
.cke_wysiwyg_frame,
|
||||
.cke_wysiwyg_div {
|
||||
background-color: #fff;
|
||||
}
|
||||
.cke_notifications_area {
|
||||
pointer-events: none;
|
||||
}
|
||||
.cke_notification {
|
||||
pointer-events: auto;
|
||||
position: relative;
|
||||
margin: 10px;
|
||||
width: 300px;
|
||||
color: white;
|
||||
text-align: center;
|
||||
opacity: 0.95;
|
||||
filter: alpha(opacity = 95);
|
||||
-webkit-animation: fadeIn 0.7s;
|
||||
animation: fadeIn 0.7s;
|
||||
}
|
||||
.cke_notification_message a {
|
||||
color: #12306f;
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user