mirror of
https://git.code.sf.net/p/seeddms/code
synced 2025-05-11 20:21:16 +00:00
Merge branch 'seeddms-5.0.x' into seeddms-5.1.x
This commit is contained in:
commit
eebb3e996d
|
@ -68,6 +68,10 @@
|
|||
- make UserView look similar to UserList
|
||||
- log correct ip even after a reverse proxy (Closes #206)
|
||||
- fix sql error in table creation if sql mode is set to STRICT_TRANS_TABLE
|
||||
- menu entry 'Clear clipboard' will call ajax function and no longer
|
||||
redirects to new page
|
||||
- apply all login restrictions like guest login, restrict to ip address,
|
||||
disabled account when authenticating by ldap
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
Changes in version 4.3.27
|
||||
|
|
|
@ -145,8 +145,8 @@
|
|||
- URIs are supported, e.g.: ldaps://ldap.host.com
|
||||
- port: port of the authentification server
|
||||
- baseDN: top level of the LDAP directory tree
|
||||
- bindDN: XXX
|
||||
- bindPw: XXX
|
||||
- bindDN: use this dn for a first step bind, leave empty for annonymous bind
|
||||
- bindPw: use this password for a first step bind
|
||||
- filter: Additional filters which are to be checked
|
||||
-->
|
||||
<connector
|
||||
|
@ -165,9 +165,10 @@
|
|||
- host: hostname of the authentification server
|
||||
- port: port of the authentification server
|
||||
- baseDN: top level of the LDAP directory tree
|
||||
- bindDN: use this dn for a first step bind, leave empty for annonymous bind
|
||||
- bindPw: use this password for a first step bind
|
||||
- filter: Additional filters which are to be checked
|
||||
- accountDomainName: sample: example.com
|
||||
- bindDN: XXX
|
||||
- bindPw: XXX
|
||||
-->
|
||||
<connector
|
||||
enable = "false"
|
||||
|
|
53
inc/inc.ClassAuthentication.php
Normal file
53
inc/inc.ClassAuthentication.php
Normal file
|
@ -0,0 +1,53 @@
|
|||
<?php
|
||||
/**
|
||||
* Implementation of user authentication
|
||||
*
|
||||
* @category DMS
|
||||
* @package SeedDMS
|
||||
* @license GPL 2
|
||||
* @version @version@
|
||||
* @author Uwe Steinmann <uwe@steinmann.cx>
|
||||
* @copyright Copyright (C) 2010-2016 Uwe Steinmann
|
||||
* @version Release: @package_version@
|
||||
*/
|
||||
|
||||
/**
|
||||
* Abstract class to authenticate user
|
||||
*
|
||||
* @category DMS
|
||||
* @package SeedDMS
|
||||
* @author Uwe Steinmann <uwe@steinmann.cx>
|
||||
* @copyright Copyright (C) 2010-2016 Uwe Steinmann
|
||||
* @version Release: @package_version@
|
||||
*/
|
||||
abstract class SeedDMS_Authentication {
|
||||
/**
|
||||
* @var object $dms object of dms
|
||||
* @access protected
|
||||
*/
|
||||
private $dms;
|
||||
|
||||
/**
|
||||
* @var object $settings SeedDMS Settings
|
||||
* @access protected
|
||||
*/
|
||||
private $settings;
|
||||
|
||||
function __construct($dms, $settings) { /* {{{ */
|
||||
$this->dms = $dms;
|
||||
$this->settings = $settings;
|
||||
} /* }}} */
|
||||
|
||||
/**
|
||||
* Do Authentication
|
||||
*
|
||||
* This function must check the username and login. If authentication succeeds
|
||||
* the user object otherwise false must be returned. If authentication fails
|
||||
* the number of failed logins should be incremented and account disabled.
|
||||
*
|
||||
* @param string $username
|
||||
* @param string $password
|
||||
* @return object|boolean user object if authentication was successful otherwise false
|
||||
*/
|
||||
abstract function authenticate($username, $password);
|
||||
}
|
74
inc/inc.ClassDbAuthentication.php
Normal file
74
inc/inc.ClassDbAuthentication.php
Normal file
|
@ -0,0 +1,74 @@
|
|||
<?php
|
||||
/**
|
||||
* Implementation of user authentication
|
||||
*
|
||||
* @category DMS
|
||||
* @package SeedDMS
|
||||
* @license GPL 2
|
||||
* @version @version@
|
||||
* @author Uwe Steinmann <uwe@steinmann.cx>
|
||||
* @copyright Copyright (C) 2010-2016 Uwe Steinmann
|
||||
* @version Release: @package_version@
|
||||
*/
|
||||
|
||||
require_once "inc.ClassAuthentication.php";
|
||||
|
||||
/**
|
||||
* Abstract class to authenticate user against ѕeeddms database
|
||||
*
|
||||
* @category DMS
|
||||
* @package SeedDMS
|
||||
* @author Uwe Steinmann <uwe@steinmann.cx>
|
||||
* @copyright Copyright (C) 2010-2016 Uwe Steinmann
|
||||
* @version Release: @package_version@
|
||||
*/
|
||||
class SeedDMS_DbAuthentication extends SeedDMS_Authentication {
|
||||
/**
|
||||
* @var object $dms object of dms
|
||||
* @access protected
|
||||
*/
|
||||
private $dms;
|
||||
|
||||
/**
|
||||
* @var object $settings SeedDMS Settings
|
||||
* @access protected
|
||||
*/
|
||||
private $settings;
|
||||
|
||||
function __construct($dms, $settings) { /* {{{ */
|
||||
$this->dms = $dms;
|
||||
$this->settings = $settings;
|
||||
} /* }}} */
|
||||
|
||||
/**
|
||||
* Do Authentication
|
||||
*
|
||||
* @param string $username
|
||||
* @param string $password
|
||||
* @return object|boolean user object if authentication was successful otherwise false
|
||||
*/
|
||||
public function authenticate($username, $password) { /* {{{ */
|
||||
$settings = $this->settings;
|
||||
$dms = $this->dms;
|
||||
|
||||
// Try to find user with given login.
|
||||
if($user = $dms->getUserByLogin($username)) {
|
||||
$userid = $user->getID();
|
||||
|
||||
// Check if password matches (if not a guest user)
|
||||
// Assume that the password has been sent via HTTP POST. It would be careless
|
||||
// (and dangerous) for passwords to be sent via GET.
|
||||
if (($userid != $settings->_guestID) && (md5($password) != $user->getPwd()) || ($userid == $settings->_guestID) && $user->getPwd() && (md5($password) != $user->getPwd())) {
|
||||
/* if counting of login failures is turned on, then increment its value */
|
||||
if($settings->_loginFailure) {
|
||||
$failures = $user->addLoginFailure();
|
||||
if($failures >= $settings->_loginFailure)
|
||||
$user->setDisabled(true);
|
||||
}
|
||||
$user = false;
|
||||
}
|
||||
}
|
||||
|
||||
return $user;
|
||||
} /* }}} */
|
||||
}
|
163
inc/inc.ClassLdapAuthentication.php
Normal file
163
inc/inc.ClassLdapAuthentication.php
Normal file
|
@ -0,0 +1,163 @@
|
|||
<?php
|
||||
/**
|
||||
* Implementation of user authentication
|
||||
*
|
||||
* @category DMS
|
||||
* @package SeedDMS
|
||||
* @license GPL 2
|
||||
* @version @version@
|
||||
* @author Uwe Steinmann <uwe@steinmann.cx>
|
||||
* @copyright Copyright (C) 2010-2016 Uwe Steinmann
|
||||
* @version Release: @package_version@
|
||||
*/
|
||||
|
||||
require_once "inc.ClassAuthentication.php";
|
||||
|
||||
/**
|
||||
* Abstract class to authenticate user against ldap server
|
||||
*
|
||||
* @category DMS
|
||||
* @package SeedDMS
|
||||
* @author Uwe Steinmann <uwe@steinmann.cx>
|
||||
* @copyright Copyright (C) 2010-2016 Uwe Steinmann
|
||||
* @version Release: @package_version@
|
||||
*/
|
||||
class SeedDMS_LdapAuthentication extends SeedDMS_Authentication {
|
||||
/**
|
||||
* @var object $dms object of dms
|
||||
* @access protected
|
||||
*/
|
||||
private $dms;
|
||||
|
||||
/**
|
||||
* @var object $settings SeedDMS Settings
|
||||
* @access protected
|
||||
*/
|
||||
private $settings;
|
||||
|
||||
function __construct($dms, $settings) { /* {{{ */
|
||||
$this->dms = $dms;
|
||||
$this->settings = $settings;
|
||||
} /* }}} */
|
||||
|
||||
/**
|
||||
* Do ldap authentication
|
||||
*
|
||||
* This method supports active directory and open ldap servers. Others may work but
|
||||
* are not tested.
|
||||
* The authentication is done in two steps.
|
||||
* 1. First an anonymous bind is done and the user who wants to login is searched
|
||||
* for. If it is found the cn of that user will be used for the bind in step 2.
|
||||
* If the user cannot be found the second step will use a cn: cn=<username>,<basedn>
|
||||
* 2. A second bind with a password and cn will be executed. This is the actuall
|
||||
* authentication. If that succeeds the user is logged in. If the user doesn't
|
||||
* exist in the database, it will be created.
|
||||
*
|
||||
* @param string $username
|
||||
* @param string $password
|
||||
* @return object|boolean user object if authentication was successful otherwise false
|
||||
*/
|
||||
public function authenticate($username, $password) { /* {{{ */
|
||||
$settings = $this->settings;
|
||||
$dms = $this->dms;
|
||||
|
||||
if (isset($settings->_ldapPort) && is_int($settings->_ldapPort)) {
|
||||
$ds = ldap_connect($settings->_ldapHost, $settings->_ldapPort);
|
||||
} else {
|
||||
$ds = ldap_connect($settings->_ldapHost);
|
||||
}
|
||||
|
||||
if (!is_bool($ds)) {
|
||||
/* Check if ldap base dn is set, and use ldap server if it is */
|
||||
if (isset($settings->_ldapBaseDN)) {
|
||||
$ldapSearchAttribut = "uid=";
|
||||
$tmpDN = "cn=".$username.",".$settings->_ldapBaseDN;
|
||||
}
|
||||
|
||||
/* Active directory has a different base dn */
|
||||
if (isset($settings->_ldapType)) {
|
||||
if ($settings->_ldapType==1) {
|
||||
$ldapSearchAttribut = "sAMAccountName=";
|
||||
$tmpDN = $username.'@'.$settings->_ldapAccountDomainName;
|
||||
// Add the following if authentication with an Active Dir doesn't work
|
||||
// See https://sourceforge.net/p/seeddms/discussion/general/thread/19c70d8d/
|
||||
// and http://stackoverflow.com/questions/6222641/how-to-php-ldap-search-to-get-user-ou-if-i-dont-know-the-ou-for-base-dn
|
||||
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// Ensure that the LDAP connection is set to use version 3 protocol.
|
||||
// Required for most authentication methods, including SASL.
|
||||
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
|
||||
|
||||
// try an authenticated/anonymous bind first.
|
||||
// If it succeeds, get the DN for the user and use it for an authentication
|
||||
// with the users password.
|
||||
$bind = false;
|
||||
if (isset($settings->_ldapBindDN)) {
|
||||
$bind = @ldap_bind($ds, $settings->_ldapBindDN, $settings->_ldapBindPw);
|
||||
} else {
|
||||
$bind = @ldap_bind($ds);
|
||||
}
|
||||
$dn = false;
|
||||
/* If bind succeed, then get the dn of for the user */
|
||||
if ($bind) {
|
||||
if (isset($settings->_ldapFilter) && strlen($settings->_ldapFilter) > 0) {
|
||||
$search = ldap_search($ds, $settings->_ldapBaseDN, "(&(".$ldapSearchAttribut.$username.")".$settings->_ldapFilter.")");
|
||||
} else {
|
||||
$search = ldap_search($ds, $settings->_ldapBaseDN, $ldapSearchAttribut.$username);
|
||||
}
|
||||
if (!is_bool($search)) {
|
||||
$info = ldap_get_entries($ds, $search);
|
||||
if (!is_bool($info) && $info["count"]>0) {
|
||||
$dn = $info[0]['dn'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* If the previous bind failed, try it with the users creditionals
|
||||
* by simply setting $dn to a default string
|
||||
*/
|
||||
if (is_bool($dn)) {
|
||||
$dn = $tmpDN;
|
||||
}
|
||||
|
||||
/* No do the actual authentication of the user */
|
||||
$bind = @ldap_bind($ds, $dn, $password);
|
||||
$user = $dms->getUserByLogin($username);
|
||||
if ($bind) {
|
||||
// Successfully authenticated. Now check to see if the user exists within
|
||||
// the database. If not, add them in if _restricted is not set,
|
||||
// but do not add their password.
|
||||
if (is_bool($user) && !$settings->_restricted) {
|
||||
// Retrieve the user's LDAP information.
|
||||
if (isset($settings->_ldapFilter) && strlen($settings->_ldapFilter) > 0) {
|
||||
$search = ldap_search($ds, $settings->_ldapBaseDN, "(&(".$ldapSearchAttribut.$username.")".$settings->_ldapFilter.")");
|
||||
} else {
|
||||
$search = ldap_search($ds, $settings->_ldapBaseDN, $ldapSearchAttribut.$username);
|
||||
}
|
||||
|
||||
if (!is_bool($search)) {
|
||||
$info = ldap_get_entries($ds, $search);
|
||||
if (!is_bool($info) && $info["count"]==1 && $info[0]["count"]>0) {
|
||||
$user = $dms->addUser($username, null, $info[0]['cn'][0], $info[0]['mail'][0], $settings->_language, $settings->_theme, "", 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
} elseif($user) {
|
||||
$userid = $user->getID();
|
||||
if($settings->_loginFailure) {
|
||||
$failures = $user->addLoginFailure();
|
||||
if($failures >= $settings->_loginFailure)
|
||||
$user->setDisabled(true);
|
||||
}
|
||||
$user = false;
|
||||
}
|
||||
ldap_close($ds);
|
||||
|
||||
return $user;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} /* }}} */
|
||||
}
|
|
@ -247,14 +247,24 @@ class Settings { /* {{{ */
|
|||
var $_smtpUser = null;
|
||||
// SMTP : password
|
||||
var $_smtpPassword = null;
|
||||
// LDAP
|
||||
var $_ldapHost = ""; // URIs are supported, e.g.: ldaps://ldap.host.com
|
||||
var $_ldapPort = 389; // Optional.
|
||||
// LDAP Host, URIs are supported, e.g.: ldaps://ldap.host.com
|
||||
var $_ldapHost = "";
|
||||
// Port of ldap server, optional.
|
||||
var $_ldapPort = 389;
|
||||
// Base dn for searching users, if set the user will be search below base dn
|
||||
var $_ldapBaseDN = "";
|
||||
// Use this dn for an initial bind for searching the user
|
||||
var $_ldapBindDN = "";
|
||||
// Use this password for an initial bind for searching the user
|
||||
var $_ldapBindPw = "";
|
||||
// Used only by AD <username>@_ldapAccountDomainName will be used for a bind
|
||||
// when the user is validated
|
||||
var $_ldapAccountDomainName = "";
|
||||
var $_ldapType = 1; // 0 = ldap; 1 = AD
|
||||
// Type of Ldap server: 0 = ldap; 1 = AD
|
||||
var $_ldapType = 1;
|
||||
// Additional filter when searching for the user. If not set, the user will be searched
|
||||
// below basedn and the search term 'uid=<username>' or 'sAMAccountName=<username>'
|
||||
// if set the search will be (&(cn=<username>)<filter>)
|
||||
var $_ldapFilter = "";
|
||||
var $_converters = array(); // list of commands used to convert files to text for Indexer
|
||||
var $_extensions = array(); // configuration for extensions
|
||||
|
|
|
@ -123,6 +123,7 @@ URL: [url]',
|
|||
'attrdefgrp_show_detail' => '',
|
||||
'attrdefgrp_show_list' => '',
|
||||
'attrdefgrp_show_search' => '',
|
||||
'attrdefgrp_show_searchlist' => '',
|
||||
'attrdef_exists' => 'تعريف السمة بالفعل موجود',
|
||||
'attrdef_info' => '',
|
||||
'attrdef_in_use' => 'تعريف السمة مشغول حاليا',
|
||||
|
@ -415,6 +416,7 @@ URL: [url]',
|
|||
'error' => 'خطأ',
|
||||
'error_add_aro' => '',
|
||||
'error_add_permission' => '',
|
||||
'error_clearcache' => '',
|
||||
'error_importfs' => '',
|
||||
'error_no_document_selected' => 'لم يتم اختيار مستند',
|
||||
'error_no_folder_selected' => 'لم يتم اختيار مجلد',
|
||||
|
@ -1252,6 +1254,7 @@ URL: [url]',
|
|||
'splash_add_role' => '',
|
||||
'splash_add_to_transmittal' => '',
|
||||
'splash_add_user' => '',
|
||||
'splash_clearcache' => '',
|
||||
'splash_cleared_clipboard' => '',
|
||||
'splash_document_added' => '',
|
||||
'splash_document_checkedout' => '',
|
||||
|
|
|
@ -114,6 +114,7 @@ $text = array(
|
|||
'attrdefgrp_show_detail' => '',
|
||||
'attrdefgrp_show_list' => '',
|
||||
'attrdefgrp_show_search' => '',
|
||||
'attrdefgrp_show_searchlist' => '',
|
||||
'attrdef_exists' => 'Тази дефиниция на атрибути вече съществува',
|
||||
'attrdef_info' => '',
|
||||
'attrdef_in_use' => 'Тази дефиниция на атрибути все още се ползва',
|
||||
|
@ -370,6 +371,7 @@ $text = array(
|
|||
'error' => 'Грешка',
|
||||
'error_add_aro' => '',
|
||||
'error_add_permission' => '',
|
||||
'error_clearcache' => '',
|
||||
'error_importfs' => '',
|
||||
'error_no_document_selected' => 'Няма избрани документи',
|
||||
'error_no_folder_selected' => 'Няма избрани папки',
|
||||
|
@ -1117,6 +1119,7 @@ $text = array(
|
|||
'splash_add_role' => '',
|
||||
'splash_add_to_transmittal' => '',
|
||||
'splash_add_user' => '',
|
||||
'splash_clearcache' => '',
|
||||
'splash_cleared_clipboard' => '',
|
||||
'splash_document_added' => '',
|
||||
'splash_document_checkedout' => '',
|
||||
|
|
|
@ -119,6 +119,7 @@ URL: [url]',
|
|||
'attrdefgrp_show_detail' => '',
|
||||
'attrdefgrp_show_list' => '',
|
||||
'attrdefgrp_show_search' => '',
|
||||
'attrdefgrp_show_searchlist' => '',
|
||||
'attrdef_exists' => '',
|
||||
'attrdef_info' => '',
|
||||
'attrdef_in_use' => '',
|
||||
|
@ -375,6 +376,7 @@ URL: [url]',
|
|||
'error' => '',
|
||||
'error_add_aro' => '',
|
||||
'error_add_permission' => '',
|
||||
'error_clearcache' => '',
|
||||
'error_importfs' => '',
|
||||
'error_no_document_selected' => '',
|
||||
'error_no_folder_selected' => '',
|
||||
|
@ -1122,6 +1124,7 @@ URL: [url]',
|
|||
'splash_add_role' => '',
|
||||
'splash_add_to_transmittal' => '',
|
||||
'splash_add_user' => '',
|
||||
'splash_clearcache' => '',
|
||||
'splash_cleared_clipboard' => '',
|
||||
'splash_document_added' => '',
|
||||
'splash_document_checkedout' => '',
|
||||
|
|
|
@ -130,6 +130,7 @@ URL: [url]',
|
|||
'attrdefgrp_show_detail' => '',
|
||||
'attrdefgrp_show_list' => '',
|
||||
'attrdefgrp_show_search' => '',
|
||||
'attrdefgrp_show_searchlist' => '',
|
||||
'attrdef_exists' => 'Definice atributů již existuje',
|
||||
'attrdef_info' => '',
|
||||
'attrdef_in_use' => 'Definice atributů je ještě užívána',
|
||||
|
@ -422,6 +423,7 @@ URL: [url]',
|
|||
'error' => 'Error',
|
||||
'error_add_aro' => '',
|
||||
'error_add_permission' => '',
|
||||
'error_clearcache' => '',
|
||||
'error_importfs' => '',
|
||||
'error_no_document_selected' => 'Není vybrán žádný dokument.',
|
||||
'error_no_folder_selected' => 'Není vybrána žádná složka',
|
||||
|
@ -1261,6 +1263,7 @@ URL: [url]',
|
|||
'splash_add_role' => '',
|
||||
'splash_add_to_transmittal' => '',
|
||||
'splash_add_user' => 'Přidán nový uživatel',
|
||||
'splash_clearcache' => '',
|
||||
'splash_cleared_clipboard' => 'Schránka vymazána',
|
||||
'splash_document_added' => 'Dokument přidán',
|
||||
'splash_document_checkedout' => '',
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
//
|
||||
// Translators: Admin (2269), dgrutsch (21)
|
||||
// Translators: Admin (2272), dgrutsch (21)
|
||||
|
||||
$text = array(
|
||||
'2_factor_auth' => '2-Faktor Authentifizierung',
|
||||
|
@ -135,6 +135,7 @@ URL: [url]',
|
|||
'attrdefgrp_show_detail' => 'Details',
|
||||
'attrdefgrp_show_list' => 'Liste',
|
||||
'attrdefgrp_show_search' => 'Suche',
|
||||
'attrdefgrp_show_searchlist' => 'Suchergebnis',
|
||||
'attrdef_exists' => 'Attributdefinition existiert bereits',
|
||||
'attrdef_info' => 'Information',
|
||||
'attrdef_in_use' => 'Definition des Attributs noch in Gebrauch',
|
||||
|
@ -427,6 +428,7 @@ URL: [url]',
|
|||
'error' => 'Fehler',
|
||||
'error_add_aro' => 'Fehler beim Hinzufügen des Zugriffsobjekt',
|
||||
'error_add_permission' => 'Fehler beim Hinzufügen der Berechtigung',
|
||||
'error_clearcache' => 'Fehler beim Löschen des Cache',
|
||||
'error_importfs' => 'Fehler beim Importieren aus dem Dateisystem',
|
||||
'error_no_document_selected' => 'Kein Dokument ausgewählt',
|
||||
'error_no_folder_selected' => 'Kein Ordner ausgewählt',
|
||||
|
@ -1298,6 +1300,7 @@ URL: [url]',
|
|||
'splash_add_role' => 'Neue Rolle hinzugefügt',
|
||||
'splash_add_to_transmittal' => 'Zur Dokumentenliste hinzugefügt',
|
||||
'splash_add_user' => 'Neuen Benutzer hinzugefügt',
|
||||
'splash_clearcache' => 'Cache geleert',
|
||||
'splash_cleared_clipboard' => 'Zwischenablage geleert',
|
||||
'splash_document_added' => 'Dokument hinzugefügt',
|
||||
'splash_document_checkedout' => 'Dokument ausgecheckt',
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
//
|
||||
// Translators: Admin (1418), dgrutsch (7), netixw (14)
|
||||
// Translators: Admin (1421), dgrutsch (7), netixw (14)
|
||||
|
||||
$text = array(
|
||||
'2_factor_auth' => '2-factor authentication',
|
||||
|
@ -135,6 +135,7 @@ URL: [url]',
|
|||
'attrdefgrp_show_detail' => 'Details',
|
||||
'attrdefgrp_show_list' => 'List',
|
||||
'attrdefgrp_show_search' => 'Search',
|
||||
'attrdefgrp_show_searchlist' => 'Search result',
|
||||
'attrdef_exists' => 'Attribute definition already exists',
|
||||
'attrdef_info' => 'Information',
|
||||
'attrdef_in_use' => 'Attribute definition still in use',
|
||||
|
@ -427,6 +428,7 @@ URL: [url]',
|
|||
'error' => 'Error',
|
||||
'error_add_aro' => 'Error while adding access request object',
|
||||
'error_add_permission' => 'Error while add permission',
|
||||
'error_clearcache' => 'Error while clearing cache',
|
||||
'error_importfs' => 'Error while importing form file system',
|
||||
'error_no_document_selected' => 'No document selected',
|
||||
'error_no_folder_selected' => 'No folder selected',
|
||||
|
@ -1299,6 +1301,7 @@ URL: [url]',
|
|||
'splash_add_role' => 'Added new role',
|
||||
'splash_add_to_transmittal' => 'Add to transmittal',
|
||||
'splash_add_user' => 'New user added',
|
||||
'splash_clearcache' => 'Cache cleared',
|
||||
'splash_cleared_clipboard' => 'Clipboard cleared',
|
||||
'splash_document_added' => 'Document added',
|
||||
'splash_document_checkedout' => 'Document checked out',
|
||||
|
|
|
@ -130,6 +130,7 @@ URL: [url]',
|
|||
'attrdefgrp_show_detail' => '',
|
||||
'attrdefgrp_show_list' => '',
|
||||
'attrdefgrp_show_search' => '',
|
||||
'attrdefgrp_show_searchlist' => '',
|
||||
'attrdef_exists' => 'Definición de atributos ya existe',
|
||||
'attrdef_info' => '',
|
||||
'attrdef_in_use' => 'Definición de atributo en uso',
|
||||
|
@ -422,6 +423,7 @@ URL: [url]',
|
|||
'error' => 'Error',
|
||||
'error_add_aro' => '',
|
||||
'error_add_permission' => '',
|
||||
'error_clearcache' => '',
|
||||
'error_importfs' => '',
|
||||
'error_no_document_selected' => 'Ningún documento seleccionado',
|
||||
'error_no_folder_selected' => 'Ninguna carpeta seleccionada',
|
||||
|
@ -1267,6 +1269,7 @@ URL: [url]',
|
|||
'splash_add_role' => '',
|
||||
'splash_add_to_transmittal' => '',
|
||||
'splash_add_user' => 'Nuevo usuario agregado',
|
||||
'splash_clearcache' => '',
|
||||
'splash_cleared_clipboard' => 'Portapapeles limpiado',
|
||||
'splash_document_added' => 'Documento añadido',
|
||||
'splash_document_checkedout' => '',
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
//
|
||||
// Translators: Admin (1038), jeromerobert (50), lonnnew (9)
|
||||
// Translators: Admin (1046), jeromerobert (50), lonnnew (9)
|
||||
|
||||
$text = array(
|
||||
'2_factor_auth' => '',
|
||||
|
@ -130,6 +130,7 @@ URL : [url]',
|
|||
'attrdefgrp_show_detail' => '',
|
||||
'attrdefgrp_show_list' => '',
|
||||
'attrdefgrp_show_search' => '',
|
||||
'attrdefgrp_show_searchlist' => '',
|
||||
'attrdef_exists' => 'La définition d\'attribut existe déjà',
|
||||
'attrdef_info' => '',
|
||||
'attrdef_in_use' => 'La définition d\'attribut est en cours d\'utilisation',
|
||||
|
@ -422,6 +423,7 @@ URL: [url]',
|
|||
'error' => 'Erreur',
|
||||
'error_add_aro' => '',
|
||||
'error_add_permission' => '',
|
||||
'error_clearcache' => '',
|
||||
'error_importfs' => '',
|
||||
'error_no_document_selected' => 'Aucun document sélectionné',
|
||||
'error_no_folder_selected' => 'Aucun dossier sélectionné',
|
||||
|
@ -430,7 +432,7 @@ URL: [url]',
|
|||
'error_toogle_permission' => '',
|
||||
'es_ES' => 'Espagnol',
|
||||
'event_details' => 'Détails de l\'événement',
|
||||
'exclude_items' => '',
|
||||
'exclude_items' => 'Exclure des élements',
|
||||
'expired' => 'Expiré',
|
||||
'expires' => 'Expiration',
|
||||
'expiry_changed_email' => 'Date d\'expiration modifiée',
|
||||
|
@ -1243,6 +1245,7 @@ URL: [url]',
|
|||
'splash_add_role' => '',
|
||||
'splash_add_to_transmittal' => '',
|
||||
'splash_add_user' => 'Nouvel utilisateur ajouté',
|
||||
'splash_clearcache' => '',
|
||||
'splash_cleared_clipboard' => 'Presse-papier vidé',
|
||||
'splash_document_added' => 'Document ajouté',
|
||||
'splash_document_checkedout' => '',
|
||||
|
@ -1332,13 +1335,13 @@ URL: [url]',
|
|||
'timeline_full_add_version' => '',
|
||||
'timeline_full_status_change' => '',
|
||||
'timeline_selected_item' => '',
|
||||
'timeline_skip_add_file' => '',
|
||||
'timeline_skip_status_change_-1' => '',
|
||||
'timeline_skip_status_change_-3' => '',
|
||||
'timeline_skip_status_change_0' => '',
|
||||
'timeline_skip_status_change_1' => '',
|
||||
'timeline_skip_status_change_2' => '',
|
||||
'timeline_skip_status_change_3' => '',
|
||||
'timeline_skip_add_file' => 'avec attachements',
|
||||
'timeline_skip_status_change_-1' => 'rejetés',
|
||||
'timeline_skip_status_change_-3' => 'expirés',
|
||||
'timeline_skip_status_change_0' => 'en attente de revue',
|
||||
'timeline_skip_status_change_1' => 'en attente d\'approbation',
|
||||
'timeline_skip_status_change_2' => 'en mode release',
|
||||
'timeline_skip_status_change_3' => 'encore dans un workflow',
|
||||
'timeline_status_change' => 'Version [version] : [status]',
|
||||
'to' => 'Au',
|
||||
'toggle_manager' => 'Basculer \'Responsable\'',
|
||||
|
|
|
@ -135,6 +135,7 @@ Internet poveznica: [url]',
|
|||
'attrdefgrp_show_detail' => '',
|
||||
'attrdefgrp_show_list' => '',
|
||||
'attrdefgrp_show_search' => '',
|
||||
'attrdefgrp_show_searchlist' => '',
|
||||
'attrdef_exists' => 'Definicija atributa već postoji',
|
||||
'attrdef_info' => '',
|
||||
'attrdef_in_use' => 'Definicija atributa se već koristi',
|
||||
|
@ -427,6 +428,7 @@ Internet poveznica: [url]',
|
|||
'error' => 'Greška',
|
||||
'error_add_aro' => '',
|
||||
'error_add_permission' => '',
|
||||
'error_clearcache' => '',
|
||||
'error_importfs' => '',
|
||||
'error_no_document_selected' => 'Nije odabran dokument',
|
||||
'error_no_folder_selected' => 'Nije odabrana mapa',
|
||||
|
@ -1288,6 +1290,7 @@ Internet poveznica: [url]',
|
|||
'splash_add_role' => '',
|
||||
'splash_add_to_transmittal' => '',
|
||||
'splash_add_user' => 'Dodan novi korisnik',
|
||||
'splash_clearcache' => '',
|
||||
'splash_cleared_clipboard' => 'Očišćen međuspremnik',
|
||||
'splash_document_added' => 'Dokument dodan',
|
||||
'splash_document_checkedout' => 'Dokument odjavljen',
|
||||
|
|
|
@ -130,6 +130,7 @@ URL: [url]',
|
|||
'attrdefgrp_show_detail' => '',
|
||||
'attrdefgrp_show_list' => '',
|
||||
'attrdefgrp_show_search' => '',
|
||||
'attrdefgrp_show_searchlist' => '',
|
||||
'attrdef_exists' => 'Jellemző meghatározás már létezik',
|
||||
'attrdef_info' => '',
|
||||
'attrdef_in_use' => 'Jellemző meghatározás még használatban van',
|
||||
|
@ -422,6 +423,7 @@ URL: [url]',
|
|||
'error' => 'Hiba',
|
||||
'error_add_aro' => '',
|
||||
'error_add_permission' => '',
|
||||
'error_clearcache' => '',
|
||||
'error_importfs' => '',
|
||||
'error_no_document_selected' => 'Nincs kijelölt dokumentum',
|
||||
'error_no_folder_selected' => 'Nincs kijelölt mappa',
|
||||
|
@ -1266,6 +1268,7 @@ URL: [url]',
|
|||
'splash_add_role' => '',
|
||||
'splash_add_to_transmittal' => '',
|
||||
'splash_add_user' => 'Új felhasználó hozzáadva',
|
||||
'splash_clearcache' => '',
|
||||
'splash_cleared_clipboard' => 'Vágólap törölve',
|
||||
'splash_document_added' => '',
|
||||
'splash_document_checkedout' => '',
|
||||
|
|
|
@ -135,6 +135,7 @@ URL: [url]',
|
|||
'attrdefgrp_show_detail' => '',
|
||||
'attrdefgrp_show_list' => '',
|
||||
'attrdefgrp_show_search' => '',
|
||||
'attrdefgrp_show_searchlist' => '',
|
||||
'attrdef_exists' => 'Definizione di Attributo già esistente',
|
||||
'attrdef_info' => '',
|
||||
'attrdef_in_use' => 'Definizione di Attributo ancora in uso',
|
||||
|
@ -428,6 +429,7 @@ URL: [url]',
|
|||
'error' => 'Errore',
|
||||
'error_add_aro' => '',
|
||||
'error_add_permission' => '',
|
||||
'error_clearcache' => '',
|
||||
'error_importfs' => '',
|
||||
'error_no_document_selected' => 'Nessun documento selezionato',
|
||||
'error_no_folder_selected' => 'Nessuna cartella selezionata',
|
||||
|
@ -1290,6 +1292,7 @@ URL: [url]',
|
|||
'splash_add_role' => '',
|
||||
'splash_add_to_transmittal' => '',
|
||||
'splash_add_user' => 'Utente aggiunto',
|
||||
'splash_clearcache' => '',
|
||||
'splash_cleared_clipboard' => 'Appunti cancellati',
|
||||
'splash_document_added' => 'Documento aggiunto',
|
||||
'splash_document_checkedout' => 'Documento approvato',
|
||||
|
|
|
@ -135,6 +135,7 @@ URL: [url]',
|
|||
'attrdefgrp_show_detail' => '',
|
||||
'attrdefgrp_show_list' => '',
|
||||
'attrdefgrp_show_search' => '',
|
||||
'attrdefgrp_show_searchlist' => '',
|
||||
'attrdef_exists' => '이미 존재하는 속성',
|
||||
'attrdef_info' => '속성정보',
|
||||
'attrdef_in_use' => '사용중인 속성 정의',
|
||||
|
@ -427,6 +428,7 @@ URL: [url]',
|
|||
'error' => '오류',
|
||||
'error_add_aro' => '',
|
||||
'error_add_permission' => '',
|
||||
'error_clearcache' => '',
|
||||
'error_importfs' => '',
|
||||
'error_no_document_selected' => '선택되지 문서는',
|
||||
'error_no_folder_selected' => '어떤 폴더를 선택하지',
|
||||
|
@ -1281,6 +1283,7 @@ URL : [url]',
|
|||
'splash_add_role' => '',
|
||||
'splash_add_to_transmittal' => '',
|
||||
'splash_add_user' => '새 사용자 추가',
|
||||
'splash_clearcache' => '',
|
||||
'splash_cleared_clipboard' => '클립 보드 비우기',
|
||||
'splash_document_added' => '문서를 추가',
|
||||
'splash_document_checkedout' => '문서 체크아웃',
|
||||
|
|
|
@ -128,6 +128,7 @@ URL: [url]',
|
|||
'attrdefgrp_show_detail' => '',
|
||||
'attrdefgrp_show_list' => '',
|
||||
'attrdefgrp_show_search' => '',
|
||||
'attrdefgrp_show_searchlist' => '',
|
||||
'attrdef_exists' => 'Kenmerk definitie bestaat al',
|
||||
'attrdef_info' => 'Kenmerk info',
|
||||
'attrdef_in_use' => 'Kenmerk definitie nog in gebruikt',
|
||||
|
@ -420,6 +421,7 @@ URL: [url]',
|
|||
'error' => 'Fout',
|
||||
'error_add_aro' => 'Verzoek om toegang toegevoegd',
|
||||
'error_add_permission' => 'Voeg permissie toe',
|
||||
'error_clearcache' => '',
|
||||
'error_importfs' => '',
|
||||
'error_no_document_selected' => 'Geen document geselecteerd',
|
||||
'error_no_folder_selected' => 'Geen map geselecteerd',
|
||||
|
@ -1294,6 +1296,7 @@ URL: [url]',
|
|||
'splash_add_role' => 'Nieuwe rol toegevoegd',
|
||||
'splash_add_to_transmittal' => 'Toevoegen aan verzending',
|
||||
'splash_add_user' => 'Nieuwe gebruiker toegevoegd',
|
||||
'splash_clearcache' => '',
|
||||
'splash_cleared_clipboard' => 'Klembord leeg gemaakt',
|
||||
'splash_document_added' => 'Nieuw document toegevoegd',
|
||||
'splash_document_checkedout' => 'Document in gebruik genomen',
|
||||
|
|
|
@ -123,6 +123,7 @@ URL: [url]',
|
|||
'attrdefgrp_show_detail' => '',
|
||||
'attrdefgrp_show_list' => '',
|
||||
'attrdefgrp_show_search' => '',
|
||||
'attrdefgrp_show_searchlist' => '',
|
||||
'attrdef_exists' => 'Definicja atrybutu już istnieje',
|
||||
'attrdef_info' => '',
|
||||
'attrdef_in_use' => 'Definicja atrybutu nadal jest w użyciu',
|
||||
|
@ -415,6 +416,7 @@ URL: [url]',
|
|||
'error' => 'Błąd',
|
||||
'error_add_aro' => '',
|
||||
'error_add_permission' => '',
|
||||
'error_clearcache' => '',
|
||||
'error_importfs' => '',
|
||||
'error_no_document_selected' => 'Brak wybranych dokumentów',
|
||||
'error_no_folder_selected' => 'Brak wybranych katalogów',
|
||||
|
@ -1246,6 +1248,7 @@ URL: [url]',
|
|||
'splash_add_role' => '',
|
||||
'splash_add_to_transmittal' => '',
|
||||
'splash_add_user' => 'Dodano nowego użytkownika',
|
||||
'splash_clearcache' => '',
|
||||
'splash_cleared_clipboard' => 'Wyczyszczono schowek',
|
||||
'splash_document_added' => '',
|
||||
'splash_document_checkedout' => '',
|
||||
|
|
|
@ -130,6 +130,7 @@ URL: [url]',
|
|||
'attrdefgrp_show_detail' => '',
|
||||
'attrdefgrp_show_list' => '',
|
||||
'attrdefgrp_show_search' => '',
|
||||
'attrdefgrp_show_searchlist' => '',
|
||||
'attrdef_exists' => 'Definição de atributo já existe',
|
||||
'attrdef_info' => '',
|
||||
'attrdef_in_use' => 'Definição de atributo ainda em uso',
|
||||
|
@ -421,6 +422,7 @@ URL: [url]',
|
|||
'error' => 'Erro',
|
||||
'error_add_aro' => '',
|
||||
'error_add_permission' => '',
|
||||
'error_clearcache' => '',
|
||||
'error_importfs' => '',
|
||||
'error_no_document_selected' => 'Nenhum documento selecionado',
|
||||
'error_no_folder_selected' => 'Nenhuma pasta selecionada',
|
||||
|
@ -1264,6 +1266,7 @@ URL: [url]',
|
|||
'splash_add_role' => '',
|
||||
'splash_add_to_transmittal' => '',
|
||||
'splash_add_user' => 'Novo usuário adicionado',
|
||||
'splash_clearcache' => '',
|
||||
'splash_cleared_clipboard' => 'Área de transferência limpada',
|
||||
'splash_document_added' => 'Documento inserido',
|
||||
'splash_document_checkedout' => '',
|
||||
|
|
|
@ -135,6 +135,7 @@ URL: [url]',
|
|||
'attrdefgrp_show_detail' => '',
|
||||
'attrdefgrp_show_list' => '',
|
||||
'attrdefgrp_show_search' => '',
|
||||
'attrdefgrp_show_searchlist' => '',
|
||||
'attrdef_exists' => 'Definitie atribut exista deja',
|
||||
'attrdef_info' => '',
|
||||
'attrdef_in_use' => 'Definitie atribut inca in utilizare',
|
||||
|
@ -427,6 +428,7 @@ URL: [url]',
|
|||
'error' => 'Eroare',
|
||||
'error_add_aro' => '',
|
||||
'error_add_permission' => '',
|
||||
'error_clearcache' => '',
|
||||
'error_importfs' => '',
|
||||
'error_no_document_selected' => 'Nici un document selectat',
|
||||
'error_no_folder_selected' => 'Nici un folder selectat',
|
||||
|
@ -1289,6 +1291,7 @@ URL: [url]',
|
|||
'splash_add_role' => '',
|
||||
'splash_add_to_transmittal' => '',
|
||||
'splash_add_user' => 'Utilizator nou adăugat',
|
||||
'splash_clearcache' => '',
|
||||
'splash_cleared_clipboard' => 'Clipboard golit',
|
||||
'splash_document_added' => 'Document adăugat',
|
||||
'splash_document_checkedout' => 'Document verificat',
|
||||
|
|
|
@ -135,6 +135,7 @@ URL: [url]',
|
|||
'attrdefgrp_show_detail' => '',
|
||||
'attrdefgrp_show_list' => '',
|
||||
'attrdefgrp_show_search' => '',
|
||||
'attrdefgrp_show_searchlist' => '',
|
||||
'attrdef_exists' => 'Определение атрибута уже существует',
|
||||
'attrdef_info' => 'Информация',
|
||||
'attrdef_in_use' => 'Определение этого атрибута используется',
|
||||
|
@ -427,6 +428,7 @@ URL: [url]',
|
|||
'error' => 'Ошибка',
|
||||
'error_add_aro' => '',
|
||||
'error_add_permission' => '',
|
||||
'error_clearcache' => '',
|
||||
'error_importfs' => '',
|
||||
'error_no_document_selected' => 'Нет выбранных документов',
|
||||
'error_no_folder_selected' => 'Нет выбранных каталогов',
|
||||
|
@ -1296,6 +1298,7 @@ URL: [url]',
|
|||
'splash_add_role' => '',
|
||||
'splash_add_to_transmittal' => '',
|
||||
'splash_add_user' => 'Добавлен новый пользователь',
|
||||
'splash_clearcache' => '',
|
||||
'splash_cleared_clipboard' => 'Буфер обмена очищен',
|
||||
'splash_document_added' => 'Добавлен документ',
|
||||
'splash_document_checkedout' => 'Документ отправлен на обработку',
|
||||
|
|
|
@ -118,6 +118,7 @@ URL: [url]',
|
|||
'attrdefgrp_show_detail' => '',
|
||||
'attrdefgrp_show_list' => '',
|
||||
'attrdefgrp_show_search' => '',
|
||||
'attrdefgrp_show_searchlist' => '',
|
||||
'attrdef_exists' => '',
|
||||
'attrdef_info' => 'Informácia',
|
||||
'attrdef_in_use' => '',
|
||||
|
@ -374,6 +375,7 @@ URL: [url]',
|
|||
'error' => 'Chyba',
|
||||
'error_add_aro' => '',
|
||||
'error_add_permission' => '',
|
||||
'error_clearcache' => '',
|
||||
'error_importfs' => '',
|
||||
'error_no_document_selected' => '',
|
||||
'error_no_folder_selected' => '',
|
||||
|
@ -1121,6 +1123,7 @@ URL: [url]',
|
|||
'splash_add_role' => '',
|
||||
'splash_add_to_transmittal' => '',
|
||||
'splash_add_user' => '',
|
||||
'splash_clearcache' => '',
|
||||
'splash_cleared_clipboard' => '',
|
||||
'splash_document_added' => '',
|
||||
'splash_document_checkedout' => '',
|
||||
|
|
|
@ -123,6 +123,7 @@ URL: [url]',
|
|||
'attrdefgrp_show_detail' => '',
|
||||
'attrdefgrp_show_list' => '',
|
||||
'attrdefgrp_show_search' => '',
|
||||
'attrdefgrp_show_searchlist' => '',
|
||||
'attrdef_exists' => 'Attributdefinitionen finns redan',
|
||||
'attrdef_info' => '',
|
||||
'attrdef_in_use' => 'Attributdefinitionen används',
|
||||
|
@ -415,6 +416,7 @@ URL: [url]',
|
|||
'error' => 'Fel',
|
||||
'error_add_aro' => '',
|
||||
'error_add_permission' => '',
|
||||
'error_clearcache' => '',
|
||||
'error_importfs' => '',
|
||||
'error_no_document_selected' => 'Inget dokument har valts',
|
||||
'error_no_folder_selected' => 'Ingen katalog har valts',
|
||||
|
@ -1252,6 +1254,7 @@ URL: [url]',
|
|||
'splash_add_role' => '',
|
||||
'splash_add_to_transmittal' => '',
|
||||
'splash_add_user' => 'Ny användare tillagt',
|
||||
'splash_clearcache' => '',
|
||||
'splash_cleared_clipboard' => 'Urklipp rensat',
|
||||
'splash_document_added' => '',
|
||||
'splash_document_checkedout' => '',
|
||||
|
|
|
@ -129,6 +129,7 @@ URL: [url]',
|
|||
'attrdefgrp_show_detail' => '',
|
||||
'attrdefgrp_show_list' => '',
|
||||
'attrdefgrp_show_search' => '',
|
||||
'attrdefgrp_show_searchlist' => '',
|
||||
'attrdef_exists' => 'Nitelik tanımı zaten mevcut',
|
||||
'attrdef_info' => '',
|
||||
'attrdef_in_use' => 'Nitelik tanımı halen kullanımda',
|
||||
|
@ -421,6 +422,7 @@ URL: [url]',
|
|||
'error' => 'Hata',
|
||||
'error_add_aro' => '',
|
||||
'error_add_permission' => '',
|
||||
'error_clearcache' => '',
|
||||
'error_importfs' => '',
|
||||
'error_no_document_selected' => 'Hiçbir doküman seçilmedi',
|
||||
'error_no_folder_selected' => 'Hiçbir klasör seçilmedi',
|
||||
|
@ -1268,6 +1270,7 @@ URL: [url]',
|
|||
'splash_add_role' => '',
|
||||
'splash_add_to_transmittal' => '',
|
||||
'splash_add_user' => 'Yeni kullanıcı eklendi',
|
||||
'splash_clearcache' => '',
|
||||
'splash_cleared_clipboard' => 'Pano temizlendi',
|
||||
'splash_document_added' => 'Doküman eklendi',
|
||||
'splash_document_checkedout' => '',
|
||||
|
|
|
@ -135,6 +135,7 @@ URL: [url]',
|
|||
'attrdefgrp_show_detail' => '',
|
||||
'attrdefgrp_show_list' => '',
|
||||
'attrdefgrp_show_search' => '',
|
||||
'attrdefgrp_show_searchlist' => '',
|
||||
'attrdef_exists' => 'Визначення атрибуту вже існує',
|
||||
'attrdef_info' => 'Інформація',
|
||||
'attrdef_in_use' => 'Визначення цього атрибуту вже використовується',
|
||||
|
@ -427,6 +428,7 @@ URL: [url]',
|
|||
'error' => 'Помилка',
|
||||
'error_add_aro' => '',
|
||||
'error_add_permission' => '',
|
||||
'error_clearcache' => '',
|
||||
'error_importfs' => '',
|
||||
'error_no_document_selected' => 'Немає вибраних документів',
|
||||
'error_no_folder_selected' => 'Немає вибраних каталогів',
|
||||
|
@ -1289,6 +1291,7 @@ URL: [url]',
|
|||
'splash_add_role' => '',
|
||||
'splash_add_to_transmittal' => '',
|
||||
'splash_add_user' => 'Додано нового користувача',
|
||||
'splash_clearcache' => '',
|
||||
'splash_cleared_clipboard' => 'Буфер обміну очищено',
|
||||
'splash_document_added' => 'Додано документ',
|
||||
'splash_document_checkedout' => 'Документ відправлено на опрацювання',
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
//
|
||||
// Translators: Admin (640), fengjohn (5)
|
||||
// Translators: Admin (642), fengjohn (5)
|
||||
|
||||
$text = array(
|
||||
'2_factor_auth' => '',
|
||||
|
@ -118,6 +118,7 @@ URL: [url]',
|
|||
'attrdefgrp_show_detail' => '',
|
||||
'attrdefgrp_show_list' => '',
|
||||
'attrdefgrp_show_search' => '',
|
||||
'attrdefgrp_show_searchlist' => '',
|
||||
'attrdef_exists' => '',
|
||||
'attrdef_info' => '',
|
||||
'attrdef_in_use' => '属性定义仍在使用中',
|
||||
|
@ -257,7 +258,7 @@ URL: [url]',
|
|||
认你的操作',
|
||||
'creation_date' => '创建日期',
|
||||
'cs_CZ' => '捷克语',
|
||||
'current_password' => '',
|
||||
'current_password' => '当前密码',
|
||||
'current_quota' => '',
|
||||
'current_state' => '',
|
||||
'current_version' => '当前版本',
|
||||
|
@ -376,6 +377,7 @@ URL: [url]',
|
|||
'error' => '错误',
|
||||
'error_add_aro' => '',
|
||||
'error_add_permission' => '',
|
||||
'error_clearcache' => '',
|
||||
'error_importfs' => '',
|
||||
'error_no_document_selected' => '请选择文档',
|
||||
'error_no_folder_selected' => '请选择文件夹',
|
||||
|
@ -592,7 +594,7 @@ URL: [url]',
|
|||
'new_file_email_body' => '',
|
||||
'new_file_email_subject' => '',
|
||||
'new_folder' => '新建文件夹',
|
||||
'new_password' => '',
|
||||
'new_password' => '新密码',
|
||||
'new_subfolder_email' => '创建新文件夹',
|
||||
'new_subfolder_email_body' => '',
|
||||
'new_subfolder_email_subject' => '',
|
||||
|
@ -1123,6 +1125,7 @@ URL: [url]',
|
|||
'splash_add_role' => '',
|
||||
'splash_add_to_transmittal' => '',
|
||||
'splash_add_user' => '',
|
||||
'splash_clearcache' => '',
|
||||
'splash_cleared_clipboard' => '',
|
||||
'splash_document_added' => '',
|
||||
'splash_document_checkedout' => '',
|
||||
|
|
|
@ -118,6 +118,7 @@ URL: [url]',
|
|||
'attrdefgrp_show_detail' => '',
|
||||
'attrdefgrp_show_list' => '',
|
||||
'attrdefgrp_show_search' => '',
|
||||
'attrdefgrp_show_searchlist' => '',
|
||||
'attrdef_exists' => '',
|
||||
'attrdef_info' => '',
|
||||
'attrdef_in_use' => '',
|
||||
|
@ -374,6 +375,7 @@ URL: [url]',
|
|||
'error' => '錯誤',
|
||||
'error_add_aro' => '',
|
||||
'error_add_permission' => '',
|
||||
'error_clearcache' => '',
|
||||
'error_importfs' => '',
|
||||
'error_no_document_selected' => '請選擇文檔',
|
||||
'error_no_folder_selected' => '請選擇資料夾',
|
||||
|
@ -1121,6 +1123,7 @@ URL: [url]',
|
|||
'splash_add_role' => '',
|
||||
'splash_add_to_transmittal' => '',
|
||||
'splash_add_user' => '',
|
||||
'splash_clearcache' => '',
|
||||
'splash_cleared_clipboard' => '',
|
||||
'splash_document_added' => '',
|
||||
'splash_document_checkedout' => '',
|
||||
|
|
|
@ -245,6 +245,14 @@ switch($command) {
|
|||
}
|
||||
break; /* }}} */
|
||||
|
||||
case 'clearclipboard': /* {{{ */
|
||||
if($user) {
|
||||
$session->clearClipboard();
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode(array('success'=>true, 'message'=>getMLText('splash_cleared_clipboard')));
|
||||
}
|
||||
break; /* }}} */
|
||||
|
||||
case 'movefolder': /* {{{ */
|
||||
if($user) {
|
||||
if(!checkFormKey('movefolder', 'GET')) {
|
||||
|
|
|
@ -17,9 +17,11 @@
|
|||
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
include("../inc/inc.Settings.php");
|
||||
include("../inc/inc.LogInit.php");
|
||||
include("../inc/inc.Language.php");
|
||||
include("../inc/inc.Init.php");
|
||||
include("../inc/inc.Utils.php");
|
||||
include("../inc/inc.DBInit.php");
|
||||
include("../inc/inc.Language.php");
|
||||
include("../inc/inc.ClassUI.php");
|
||||
include("../inc/inc.Authentication.php");
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ else
|
|||
$basedir = $settings->_contentDir;
|
||||
|
||||
$v = new SeedDMS_Version;
|
||||
$dump_name = $basedir.date('Y-m-d\TH:i:s')."_".$v->_number.".sql";
|
||||
$dump_name = $basedir.date('Y-m-d\TH-i-s')."_".$v->_number.".sql";
|
||||
if(!$dms->createDump($dump_name))
|
||||
UI::exitError(getMLText("admin_tools"),getMLText("error_occured"));
|
||||
|
||||
|
|
216
op/op.Login.php
216
op/op.Login.php
|
@ -31,12 +31,12 @@ include("../inc/inc.ClassController.php");
|
|||
|
||||
include $settings->_rootDir . "languages/" . $settings->_language . "/lang.inc";
|
||||
|
||||
function _printMessage($heading, $message) {
|
||||
function _printMessage($heading, $message) { /* {{{ */
|
||||
global $dms, $theme;
|
||||
$view = UI::factory($theme, 'ErrorDlg', array('dms'=>$dms));
|
||||
$view->exitError($heading, $message, true);
|
||||
return;
|
||||
}
|
||||
} /* }}} */
|
||||
|
||||
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
|
||||
$controller = Controller::factory($tmp[1]);
|
||||
|
@ -63,6 +63,7 @@ if(isset($_POST['pwd'])) {
|
|||
}
|
||||
}
|
||||
|
||||
/* The password may only be empty if the guest user tries to log in */
|
||||
if($settings->_enableGuestLogin && (int) $settings->_guestID) {
|
||||
$guestUser = $dms->getUser((int) $settings->_guestID);
|
||||
if ((!isset($pwd) || strlen($pwd)==0) && ($login != $guestUser->getLogin())) {
|
||||
|
@ -87,169 +88,63 @@ if(isset($GLOBALS['SEEDDMS_HOOKS']['authentication'])) {
|
|||
}
|
||||
}
|
||||
|
||||
if (is_bool($user)) {
|
||||
if (isset($settings->_ldapHost) && strlen($settings->_ldapHost)>0) {
|
||||
if (isset($settings->_ldapPort) && is_int($settings->_ldapPort)) {
|
||||
$ds = ldap_connect($settings->_ldapHost, $settings->_ldapPort);
|
||||
} else {
|
||||
$ds = ldap_connect($settings->_ldapHost);
|
||||
}
|
||||
/* Authenticate against LDAP server {{{ */
|
||||
if (!$user && isset($settings->_ldapHost) && strlen($settings->_ldapHost)>0) {
|
||||
require_once("../inc/inc.ClassLdapAuthentication.php");
|
||||
$authobj = new SeedDMS_LdapAuthentication($dms, $settings);
|
||||
$user = $authobj->authenticate($login, $pwd);
|
||||
} /* }}} */
|
||||
|
||||
if (!is_bool($ds)) {
|
||||
/* Check if ldap base dn is set, and use ldap server if it is */
|
||||
if (isset($settings->_ldapBaseDN)) {
|
||||
$ldapSearchAttribut = "uid=";
|
||||
$tmpDN = "uid=".$login.",".$settings->_ldapBaseDN;
|
||||
}
|
||||
/* Authenticate against SeedDMS database {{{ */
|
||||
else {
|
||||
require_once("../inc/inc.ClassDbAuthentication.php");
|
||||
$authobj = new SeedDMS_DbAuthentication($dms, $settings);
|
||||
$user = $authobj->authenticate($login, $pwd);
|
||||
} /* }}} */
|
||||
|
||||
/* Active directory has a different base dn */
|
||||
if (isset($settings->_ldapType)) {
|
||||
if ($settings->_ldapType==1) {
|
||||
$ldapSearchAttribut = "sAMAccountName=";
|
||||
$tmpDN = $login.'@'.$settings->_ldapAccountDomainName;
|
||||
// Add the following if authentication with an Active Dir doesn't work
|
||||
// See https://sourceforge.net/p/seeddms/discussion/general/thread/19c70d8d/
|
||||
// and http://stackoverflow.com/questions/6222641/how-to-php-ldap-search-to-get-user-ou-if-i-dont-know-the-ou-for-base-dn
|
||||
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// Ensure that the LDAP connection is set to use version 3 protocol.
|
||||
// Required for most authentication methods, including SASL.
|
||||
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
|
||||
|
||||
// try an authenticated/anonymous bind first.
|
||||
// If it succeeds, get the DN for the user and use it for an authentication
|
||||
// with the users password.
|
||||
$bind = false;
|
||||
if (isset($settings->_ldapBindDN)) {
|
||||
$bind = @ldap_bind($ds, $settings->_ldapBindDN, $settings->_ldapBindPw);
|
||||
} else {
|
||||
$bind = @ldap_bind($ds);
|
||||
}
|
||||
$dn = false;
|
||||
/* If bind succeed, then get the dn of for the user */
|
||||
if ($bind) {
|
||||
if (isset($settings->_ldapFilter) && strlen($settings->_ldapFilter) > 0) {
|
||||
$search = ldap_search($ds, $settings->_ldapBaseDN, "(&(".$ldapSearchAttribut.$login.")".$settings->_ldapFilter.")");
|
||||
} else {
|
||||
$search = ldap_search($ds, $settings->_ldapBaseDN, $ldapSearchAttribut.$login);
|
||||
}
|
||||
if (!is_bool($search)) {
|
||||
$info = ldap_get_entries($ds, $search);
|
||||
if (!is_bool($info) && $info["count"]>0) {
|
||||
$dn = $info[0]['dn'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* If the previous bind failed, try it with the users creditionals
|
||||
* by simply setting $dn to a default string
|
||||
*/
|
||||
if (is_bool($dn)) {
|
||||
$dn = $tmpDN;
|
||||
}
|
||||
|
||||
/* No do the actual authentication of the user */
|
||||
$bind = @ldap_bind($ds, $dn, $pwd);
|
||||
if ($bind) {
|
||||
// Successfully authenticated. Now check to see if the user exists within
|
||||
// the database. If not, add them in if _restricted is not set,
|
||||
// but do not add their password.
|
||||
$user = $dms->getUserByLogin($login);
|
||||
if (is_bool($user) && !$settings->_restricted) {
|
||||
// Retrieve the user's LDAP information.
|
||||
if (isset($settings->_ldapFilter) && strlen($settings->_ldapFilter) > 0) {
|
||||
$search = ldap_search($ds, $settings->_ldapBaseDN, "(&(".$ldapSearchAttribut.$login.")".$settings->_ldapFilter.")");
|
||||
} else {
|
||||
$search = ldap_search($ds, $settings->_ldapBaseDN, $ldapSearchAttribut.$login);
|
||||
}
|
||||
|
||||
if (!is_bool($search)) {
|
||||
$info = ldap_get_entries($ds, $search);
|
||||
if (!is_bool($info) && $info["count"]==1 && $info[0]["count"]>0) {
|
||||
$user = $dms->addUser($login, null, $info[0]['cn'][0], $info[0]['mail'][0], $settings->_language, $settings->_theme, "");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!is_bool($user)) {
|
||||
$userid = $user->getID();
|
||||
}
|
||||
}
|
||||
ldap_close($ds);
|
||||
}
|
||||
}
|
||||
if(!$user) {
|
||||
_printMessage(getMLText("login_error_title"), getMLText("login_error_text"));
|
||||
exit;
|
||||
}
|
||||
|
||||
if (is_bool($user)) {
|
||||
//
|
||||
// LDAP Authentication did not succeed or is not configured. Try internal
|
||||
// authentication system.
|
||||
//
|
||||
|
||||
// Try to find user with given login.
|
||||
$user = $dms->getUserByLogin($login);
|
||||
if (!$user) {
|
||||
_printMessage(getMLText("login_error_title"), getMLText("login_error_text"));
|
||||
exit;
|
||||
}
|
||||
|
||||
$userid = $user->getID();
|
||||
|
||||
if (($userid == $settings->_guestID) && (!$settings->_enableGuestLogin)) {
|
||||
_printMessage(getMLText("login_error_title"), getMLText("guest_login_disabled"));
|
||||
exit;
|
||||
}
|
||||
|
||||
// Check if password matches (if not a guest user)
|
||||
// Assume that the password has been sent via HTTP POST. It would be careless
|
||||
// (and dangerous) for passwords to be sent via GET.
|
||||
if (($userid != $settings->_guestID) && (md5($pwd) != $user->getPwd()) || ($userid == $settings->_guestID) && $user->getPwd() && (md5($pwd) != $user->getPwd())) {
|
||||
_printMessage(getMLText("login_error_title"), getMLText("login_error_text"));
|
||||
/* if counting of login failures is turned on, then increment its value */
|
||||
if($settings->_loginFailure) {
|
||||
$failures = $user->addLoginFailure();
|
||||
if($failures >= $settings->_loginFailure)
|
||||
$user->setDisabled(true);
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
// Check if account is disabled
|
||||
if($user->isDisabled()) {
|
||||
_printMessage(getMLText("login_disabled_title"), getMLText("login_disabled_text"));
|
||||
exit;
|
||||
}
|
||||
|
||||
// control admin IP address if required
|
||||
// TODO: extend control to LDAP autentication
|
||||
if ($user->isAdmin() && ($_SERVER['REMOTE_ADDR'] != $settings->_adminIP ) && ( $settings->_adminIP != "") ){
|
||||
_printMessage(getMLText("login_error_title"), getMLText("invalid_user_id"));
|
||||
exit;
|
||||
}
|
||||
|
||||
if($settings->_enable2FactorAuthentication) {
|
||||
if($secret = $user->getSecret()) {
|
||||
require "vendor/robthree/twofactorauth/lib/Providers/Qr/IQRCodeProvider.php";
|
||||
require "vendor/robthree/twofactorauth/lib/Providers/Qr/BaseHTTPQRCodeProvider.php";
|
||||
require "vendor/robthree/twofactorauth/lib/Providers/Qr/GoogleQRCodeProvider.php";
|
||||
require "vendor/robthree/twofactorauth/lib/Providers/Rng/IRNGProvider.php";
|
||||
require "vendor/robthree/twofactorauth/lib/Providers/Rng/MCryptRNGProvider.php";
|
||||
require "vendor/robthree/twofactorauth/lib/TwoFactorAuthException.php";
|
||||
require "vendor/robthree/twofactorauth/lib/TwoFactorAuth.php";
|
||||
$tfa = new \RobThree\Auth\TwoFactorAuth('SeedDMS');
|
||||
if($tfa->verifyCode($secret, $_POST['twofactauth']) !== true) {
|
||||
_printMessage(getMLText("login_error_title"), getMLText("login_error_text"));
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Clear login failures if login was successful */
|
||||
$user->clearLoginFailures();
|
||||
|
||||
$userid = $user->getID();
|
||||
if (($userid == $settings->_guestID) && (!$settings->_enableGuestLogin)) {
|
||||
_printMessage(getMLText("login_error_title"), getMLText("guest_login_disabled"));
|
||||
exit;
|
||||
}
|
||||
|
||||
// Check if account is disabled
|
||||
if($user->isDisabled()) {
|
||||
_printMessage(getMLText("login_disabled_title"), getMLText("login_disabled_text"));
|
||||
exit;
|
||||
}
|
||||
|
||||
// control admin IP address if required
|
||||
if ($user->isAdmin() && ($_SERVER['REMOTE_ADDR'] != $settings->_adminIP ) && ( $settings->_adminIP != "") ){
|
||||
_printMessage(getMLText("login_error_title"), getMLText("invalid_user_id"));
|
||||
exit;
|
||||
}
|
||||
|
||||
if($settings->_enable2FactorAuthentication) {
|
||||
if($secret = $user->getSecret()) {
|
||||
require "vendor/robthree/twofactorauth/lib/Providers/Qr/IQRCodeProvider.php";
|
||||
require "vendor/robthree/twofactorauth/lib/Providers/Qr/BaseHTTPQRCodeProvider.php";
|
||||
require "vendor/robthree/twofactorauth/lib/Providers/Qr/GoogleQRCodeProvider.php";
|
||||
require "vendor/robthree/twofactorauth/lib/Providers/Rng/IRNGProvider.php";
|
||||
require "vendor/robthree/twofactorauth/lib/Providers/Rng/MCryptRNGProvider.php";
|
||||
require "vendor/robthree/twofactorauth/lib/TwoFactorAuthException.php";
|
||||
require "vendor/robthree/twofactorauth/lib/TwoFactorAuth.php";
|
||||
$tfa = new \RobThree\Auth\TwoFactorAuth('SeedDMS');
|
||||
if($tfa->verifyCode($secret, $_POST['twofactauth']) !== true) {
|
||||
_printMessage(getMLText("login_error_title"), getMLText("login_error_text"));
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Clear login failures if login was successful */
|
||||
$user->clearLoginFailures();
|
||||
|
||||
// Capture the user's language and theme settings.
|
||||
if (isset($_REQUEST["lang"]) && strlen($_REQUEST["lang"])>0 && is_numeric(array_search($_REQUEST["lang"],getLanguages())) ) {
|
||||
$lang = $_REQUEST["lang"];
|
||||
|
@ -344,7 +239,4 @@ else {
|
|||
header("Location: ".$settings->_httpRoot.(isset($settings->_siteDefaultPage) && strlen($settings->_siteDefaultPage)>0 ? $settings->_siteDefaultPage : "out/out.ViewFolder.php?folderid=".($user->getHomeFolder() ? $user->getHomeFolder() : $settings->_rootFolderID)));
|
||||
}
|
||||
|
||||
//_printMessage(getMLText("login_ok"),
|
||||
// "<p><a href='".$settings->_httpRoot.(isset($settings->_siteDefaultPage) && strlen($settings->_siteDefaultPage)>0 ? $settings->_siteDefaultPage : "out/out.ViewFolder.php")."'>".getMLText("continue")."</a></p>");
|
||||
|
||||
?>
|
||||
|
|
|
@ -376,8 +376,28 @@ $(document).ready( function() {
|
|||
url: url,
|
||||
dataType: 'json',
|
||||
success: function(data){
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
noty({text: data[i].text, type: data[i].type});
|
||||
if(data.success) {
|
||||
if(element.data('param1') == 'command=clearclipboard') {
|
||||
$("#main-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=mainclipboard')
|
||||
$("#menu-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=menuclipboard')
|
||||
}
|
||||
noty({
|
||||
text: data.message,
|
||||
type: 'success',
|
||||
dismissQueue: true,
|
||||
layout: 'topRight',
|
||||
theme: 'defaultTheme',
|
||||
timeout: 1500,
|
||||
});
|
||||
} else {
|
||||
noty({
|
||||
text: data.message,
|
||||
type: 'error',
|
||||
dismissQueue: true,
|
||||
layout: 'topRight',
|
||||
theme: 'defaultTheme',
|
||||
timeout: 3500,
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -240,7 +240,8 @@ $(document).ready(function () {
|
|||
if(isset($this->params['folder']) && $this->params['folder']->getAccessMode($this->params['user']) >= M_READWRITE) {
|
||||
$content .= " <li><a href=\"../op/op.MoveClipboard.php?targetid=".$this->params['folder']->getID()."&refferer=".urlencode($this->params['refferer'])."\">".getMLText("move_clipboard")."</a></li>\n";
|
||||
}
|
||||
$content .= " <li><a href=\"../op/op.ClearClipboard.php?refferer=".urlencode($this->params['refferer'])."\">".getMLText("clear_clipboard")."</a></li>\n";
|
||||
// $content .= " <li><a href=\"../op/op.ClearClipboard.php?refferer=".urlencode($this->params['refferer'])."\">".getMLText("clear_clipboard")."</a><a class=\"ajax-click\" data-href=\"../op/op.Ajax.php\" data-param1=\"command=clearclipboard\">kkk</a> </li>\n";
|
||||
$content .= " <li><a class=\"ajax-click\" data-href=\"../op/op.Ajax.php\" data-param1=\"command=clearclipboard\">".getMLText("clear_clipboard")."</a></li>\n";
|
||||
$content .= " </ul>\n";
|
||||
$content .= " </li>\n";
|
||||
$content .= " </ul>\n";
|
||||
|
|
Loading…
Reference in New Issue
Block a user