mirror of
https://github.com/espocrm/espocrm.git
synced 2026-03-04 10:47:01 +00:00
Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f896a2d71a | ||
|
|
dd6704ace5 | ||
|
|
1dc4d44a65 | ||
|
|
bfb28ea178 | ||
|
|
ec6f3a22f2 | ||
|
|
5a0c7c330c | ||
|
|
f64df5af87 | ||
|
|
d4dc7a4051 | ||
|
|
d676f85c8f | ||
|
|
ab382f2387 |
@@ -72,7 +72,10 @@ class Importer
|
||||
$email->set('isBeingImported', true);
|
||||
|
||||
$subject = $message->subject;
|
||||
if ($subject !== '0' && empty(trim($subject))) {
|
||||
if (!empty($subject) && is_string($subject)) {
|
||||
$subject = trim($subject);
|
||||
}
|
||||
if ($subject !== '0' && empty($subject)) {
|
||||
$subject = '(No Subject)';
|
||||
}
|
||||
|
||||
|
||||
@@ -47,9 +47,9 @@ class LDAP extends Base
|
||||
*/
|
||||
protected $ldapFieldMap = array(
|
||||
'userName' => 'userNameAttribute',
|
||||
'firstName' => 'userTitleAttribute',
|
||||
'lastName' => 'userFirstNameAttribute',
|
||||
'title' => 'userLastNameAttribute',
|
||||
'firstName' => 'userFirstNameAttribute',
|
||||
'lastName' => 'userLastNameAttribute',
|
||||
'title' => 'userTitleAttribute',
|
||||
'emailAddress' => 'userEmailAddressAttribute',
|
||||
'phoneNumber' => 'userPhoneNumberAttribute',
|
||||
);
|
||||
@@ -108,33 +108,34 @@ class LDAP extends Base
|
||||
|
||||
$ldapClient = $this->getLdapClient();
|
||||
|
||||
//login LDAP admin user (ldapUsername, ldapPassword)
|
||||
//login LDAP system user (ldapUsername, ldapPassword)
|
||||
try {
|
||||
$ldapClient->bind();
|
||||
} catch (\Exception $e) {
|
||||
$options = $this->getUtils()->getLdapClientOptions();
|
||||
$GLOBALS['log']->error('LDAP: Authentication failed for user ['.$options['username'].'], details: ' . $e->getMessage());
|
||||
return;
|
||||
$GLOBALS['log']->error('LDAP: Could not connect to LDAP server ['.$options['host'].'], details: ' . $e->getMessage());
|
||||
|
||||
$adminUser = $this->adminLogin($username, $password);
|
||||
if (!isset($adminUser)) {
|
||||
return null;
|
||||
}
|
||||
$GLOBALS['log']->info('LDAP: Administrator ['.$username.'] was logged in by Espo method.');
|
||||
}
|
||||
|
||||
$userDn = $this->findLdapUserDnByUsername($username);
|
||||
$GLOBALS['log']->debug('Found DN for ['.$username.']: ['.$userDn.'].');
|
||||
if (!isset($userDn)) {
|
||||
$GLOBALS['log']->error('LDAP: Authentication failed for user ['.$username.'], details: user is not found.');
|
||||
return;
|
||||
}
|
||||
if (!isset($adminUser)) {
|
||||
$userDn = $this->findLdapUserDnByUsername($username);
|
||||
$GLOBALS['log']->debug('Found DN for ['.$username.']: ['.$userDn.'].');
|
||||
if (!isset($userDn)) {
|
||||
$GLOBALS['log']->error('LDAP: Authentication failed for user ['.$username.'], details: user is not found.');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
$ldapClient->bind($userDn, $password);
|
||||
} catch (\Exception $e) {
|
||||
|
||||
$admin = $this->adminLogin($username, $password);
|
||||
if (!isset($admin)) {
|
||||
try {
|
||||
$ldapClient->bind($userDn, $password);
|
||||
} catch (\Exception $e) {
|
||||
$GLOBALS['log']->error('LDAP: Authentication failed for user ['.$username.'], details: ' . $e->getMessage());
|
||||
return null;
|
||||
}
|
||||
|
||||
$GLOBALS['log']->info('LDAP: Administrator ['.$username.'] was logged in by Espo method.');
|
||||
}
|
||||
|
||||
$user = $this->getEntityManager()->getRepository('User')->findOne(array(
|
||||
@@ -263,7 +264,7 @@ class LDAP extends Base
|
||||
}
|
||||
|
||||
$searchString = '(&(objectClass='.$options['userObjectClass'].')('.$options['userNameAttribute'].'='.$username.')'.$loginFilterString.')';
|
||||
$result = $ldapClient->search($searchString, null, LDAP\Client::SEARCH_SCOPE_ONE);
|
||||
$result = $ldapClient->search($searchString, null, LDAP\Client::SEARCH_SCOPE_SUB);
|
||||
$GLOBALS['log']->debug('LDAP: user search string: "' . $searchString . '"');
|
||||
|
||||
foreach ($result as $item) {
|
||||
|
||||
@@ -146,6 +146,6 @@ return array ( 'defaultPermissions' =>
|
||||
'ldapUserTitleAttribute' => 'title',
|
||||
'ldapUserEmailAddressAttribute' => 'mail',
|
||||
'ldapUserPhoneNumberAttribute' => 'telephoneNumber',
|
||||
'ldapUserObjectClass' => 'user',
|
||||
'ldapUserObjectClass' => 'person',
|
||||
);
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"title": "Título",
|
||||
"accountRole": "Título",
|
||||
"account": "Cuenta",
|
||||
"accounts": "Cuentas",
|
||||
"accounts": "Empresas",
|
||||
"phoneNumber": "Teléfono",
|
||||
"accountType": "Tipo de Cuenta",
|
||||
"doNotCall": "No Llamar",
|
||||
@@ -24,7 +24,7 @@
|
||||
"campaignLogRecords": "Registro de Campaña",
|
||||
"campaign": "Campaña",
|
||||
"account": "Cuentas (Primaria)",
|
||||
"accounts": "Cuentas",
|
||||
"accounts": "Empresas",
|
||||
"casesPrimary": "Casos (Primaria)",
|
||||
"portalUser": "Usuarios de portal"
|
||||
},
|
||||
|
||||
@@ -12,11 +12,11 @@
|
||||
"publishDate": "Publicar Fecha",
|
||||
"expirationDate": "Fecha de Expiración",
|
||||
"description": "Descripción",
|
||||
"accounts": "Cuentas",
|
||||
"accounts": "Empresas",
|
||||
"folder": "Carpeta"
|
||||
},
|
||||
"links": {
|
||||
"accounts": "Cuentas",
|
||||
"accounts": "Empresas",
|
||||
"opportunities": "Oportunidades",
|
||||
"folder": "Carpeta",
|
||||
"leads": "Leads"
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"calls": "Llamadas",
|
||||
"tasks": "Tareas",
|
||||
"emails": "Correos",
|
||||
"accounts": "Cuentas",
|
||||
"accounts": "Empresas",
|
||||
"cases": "Casos",
|
||||
"documents": "Documentos",
|
||||
"account": "Cuenta",
|
||||
@@ -38,7 +38,7 @@
|
||||
"KnowledgeBaseCategory": "Categoría de base de conocimientos"
|
||||
},
|
||||
"scopeNamesPlural": {
|
||||
"Account": "Cuentas",
|
||||
"Account": "Empresas",
|
||||
"Contact": "Contactos",
|
||||
"Lead": "Potenciales",
|
||||
"Target": "Objetivos",
|
||||
|
||||
@@ -731,8 +731,22 @@ class Activities extends \Espo\Core\Services\Base
|
||||
'leftJoins' => ['users'],
|
||||
'whereClause' => array(
|
||||
'usersMiddle.userId' => $userId,
|
||||
'dateStart>=' => $from,
|
||||
'dateStart<' => $to,
|
||||
array(
|
||||
'OR' => array(
|
||||
array(
|
||||
'dateStart>=' => $from,
|
||||
'dateStart<' => $to
|
||||
),
|
||||
array(
|
||||
'dateEnd>=' => $from,
|
||||
'dateEnd<' => $to
|
||||
),
|
||||
array(
|
||||
'dateStart<=' => $from,
|
||||
'dateEnd>=' => $to
|
||||
)
|
||||
)
|
||||
),
|
||||
'usersMiddle.status!=' => 'Declined'
|
||||
),
|
||||
'customJoin' => ''
|
||||
@@ -762,8 +776,22 @@ class Activities extends \Espo\Core\Services\Base
|
||||
'leftJoins' => ['users'],
|
||||
'whereClause' => array(
|
||||
'usersMiddle.userId' => $userId,
|
||||
'dateStart>=' => $from,
|
||||
'dateStart<' => $to,
|
||||
array(
|
||||
'OR' => array(
|
||||
array(
|
||||
'dateStart>=' => $from,
|
||||
'dateStart<' => $to
|
||||
),
|
||||
array(
|
||||
'dateEnd>=' => $from,
|
||||
'dateEnd<' => $to
|
||||
),
|
||||
array(
|
||||
'dateStart<=' => $from,
|
||||
'dateEnd>=' => $to
|
||||
)
|
||||
)
|
||||
),
|
||||
'usersMiddle.status!=' => 'Declined'
|
||||
),
|
||||
'customJoin' => ''
|
||||
@@ -864,6 +892,10 @@ class Activities extends \Espo\Core\Services\Base
|
||||
'dateEnd>=' => $from,
|
||||
'dateEnd<' => $to,
|
||||
),
|
||||
array(
|
||||
'dateStart<=' => $from,
|
||||
'dateEnd>=' => $to
|
||||
),
|
||||
array(
|
||||
'dateEndDate!=' => null,
|
||||
'dateEndDate>=' => $from,
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
"ldapPassword": "The password to access to LDAP server.",
|
||||
"ldapAuth": "Access credentials for the LDAP server.",
|
||||
"ldapUserNameAttribute": "The attribute to identify the user. \nE.g. \"userPrincipalName\" or \"sAMAccountName\" for Active Directory, \"uid\" for OpenLDAP.",
|
||||
"ldapUserObjectClass": "ObjectClass attribute for searching users. E.g. \"user\" for AD, \"inetOrgPerson\" for OpenLDAP.",
|
||||
"ldapUserObjectClass": "ObjectClass attribute for searching users. E.g. \"person\" for AD, \"inetOrgPerson\" for OpenLDAP.",
|
||||
"ldapAccountCanonicalForm": "The type of your account canonical form. There are 4 options:<br>- 'Dn' - the form in the format 'CN=tester,OU=espocrm,DC=test, DC=lan'.<br>- 'Username' - the form 'tester'.<br>- 'Backslash' - the form 'COMPANY\\tester'.<br>- 'Principal' - the form 'tester@company.com'.",
|
||||
"ldapBindRequiresDn": "The option to format the username in the DN form.",
|
||||
"ldapBaseDn": "The default base DN used for searching users. E.g. \"OU=users,OU=espocrm,DC=test, DC=lan\".",
|
||||
|
||||
@@ -100,7 +100,6 @@
|
||||
"ldapUsername": "El sistema de usuario DN completo que permite a los usuarios buscar otros. E.g. \"CN=LDAP usuario del sistema,OU=users,OU=espocrm, DC=test,DC=lan\".",
|
||||
"ldapPassword": "La contraseña para acceder al servidor LDAP.",
|
||||
"ldapAuth": "Credenciales de acceso para el servidor LDAP.",
|
||||
"ldapUserNameAttribute": "El atributo para identificar al usuario. Para Active Directory puede ser \"userPrincipalName\" o \"sAMAccountName\".",
|
||||
"ldapBindRequiresDn": "La opción para formatear el nombre de usuario en el formulario de DN.",
|
||||
"ldapBaseDn": "La base DN predeterminado utilizado para la búsqueda de los usuarios. E.g. \"OU=users,OU=espocrm,DC=test, DC=lan\".",
|
||||
"ldapTryUsernameSplit": "La opción de dividir un nombre de usuario con el dominio.",
|
||||
|
||||
@@ -18,9 +18,9 @@
|
||||
"newPasswordConfirm": "Confirmar Contraseña Nueva",
|
||||
"avatar": "Avatar",
|
||||
"isActive": "Está Activo",
|
||||
"isPortalUser": "Is un usuario del portal",
|
||||
"isPortalUser": "Es un usuario del portal",
|
||||
"contact": "Contacto",
|
||||
"accounts": "Cuentas",
|
||||
"accounts": "Empresas",
|
||||
"account": "Cuenta (Primaria)",
|
||||
"sendAccessInfo": "Enviar correo electrónico con los accesos a la información del usuario",
|
||||
"portal": "Portal",
|
||||
@@ -33,7 +33,7 @@
|
||||
"portals": "Portales",
|
||||
"portalRoles": "Roles del portal",
|
||||
"contact": "Contacto",
|
||||
"accounts": "Cuentas",
|
||||
"accounts": "Empresas",
|
||||
"account": "Cuenta (Primaria)"
|
||||
},
|
||||
"labels": {
|
||||
@@ -58,8 +58,8 @@
|
||||
"isActive": "Si lo desmarca, el usuario no podrá iniciar sesión.",
|
||||
"teams": "Equipos a los que este usuario pertenece. Nivel de control de acceso se hereda de los roles de equipo.",
|
||||
"roles": "Roles de acceso adicionales. Úsalo si el usuario no pertenece a ningún equipo o si necesita ampliar el nivel de control de acceso sólo para este usuario.",
|
||||
"portalRoles": "Los roles de portal adicionales. Lo utilizan para extender el nivel de control de acceso exclusivo para este usuario.",
|
||||
"portals": "Portales donde el usuario tiene acceso a."
|
||||
"portalRoles": "Los roles del portal se utilizan para extender el nivel de control de acceso exclusivo para este usuario.",
|
||||
"portals": "El usuario tiene accesos a los siguientes portales."
|
||||
},
|
||||
"messages": {
|
||||
"passwordWillBeSent": "La Contraseña será enviada al correo electrónico del usuario",
|
||||
|
||||
@@ -151,7 +151,7 @@ Espo.define('views/email/record/list', 'views/record/list', function (Dep) {
|
||||
|
||||
ids.forEach(function (id) {
|
||||
this.removeRecordFromList(id);
|
||||
this.collection.trigger('moving-to-trash', model);
|
||||
this.collection.trigger('moving-to-trash', id);
|
||||
}, this);
|
||||
},
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "espocrm",
|
||||
"version": "4.2.2",
|
||||
"version": "4.2.3",
|
||||
"description": "",
|
||||
"main": "index.php",
|
||||
"repository": {
|
||||
|
||||
Reference in New Issue
Block a user