Compare commits

...

89 Commits
7.2.0 ... 7.2.7

Author SHA1 Message Date
Yuri Kuznetsov
62d1c0fae9 attachment csp 2022-11-04 10:36:00 +02:00
Yuri Kuznetsov
76546ff06c logo svg 2022-11-04 10:27:17 +02:00
David
42af361ae4 Fix czech translation (#2491)
* fixed require promise

* czech translation fix

Co-authored-by: David Moškoř <david.moskor@apertia.cz>
2022-11-02 20:50:11 +02:00
Yuri Kuznetsov
440c6cee23 it_IT 2022-11-02 20:49:25 +02:00
Yuri Kuznetsov
e659c79bf7 v 2022-10-31 17:21:33 +02:00
Yuri Kuznetsov
e017479f85 fix panel heading overflow 2022-10-31 17:21:06 +02:00
Yuri Kuznetsov
4824714b0d fix non-storable varchar default maxlength validation 2022-10-31 08:56:56 +02:00
Yuri Kuznetsov
6ee936d522 bottom layout edit impr 2022-10-26 16:29:52 +03:00
Yuri Kuznetsov
ba172494b4 fix kanban with disable total 2022-10-24 17:26:29 +03:00
Yuri Kuznetsov
5c44a374d5 glass table text bold 700 2022-10-24 12:13:46 +03:00
Yuri Kuznetsov
8aae2b18ba glass fix 2022-10-24 12:06:46 +03:00
Yuri Kuznetsov
258e56c61d fix 2022-10-24 12:06:41 +03:00
Yuri Kuznetsov
3084dddf1c fix url field pattern 2022-10-24 09:44:43 +03:00
Yuri Kuznetsov
eb6f9b602f upgrade 2022-10-23 16:40:40 +03:00
Yuri Kuznetsov
cf508a540e Merge branch 'fix' of https://github.com/espocrm/espocrm into fix 2022-10-23 16:36:19 +03:00
Yuri Kuznetsov
5278e3bf06 v 2022-10-23 16:25:17 +03:00
David
5763f5b58e fixed require promise (#2473)
Co-authored-by: David Moškoř <david.moskor@apertia.cz>
2022-10-20 18:55:50 +03:00
Taras Machyshyn
0666880786 IIS web.config fixes 2022-10-19 13:18:45 +03:00
Yuri Kuznetsov
e0113388d2 typo fix 2022-10-11 13:04:26 +03:00
Yuri Kuznetsov
384f28ecae cleanup 2022-10-11 13:02:25 +03:00
Yuri Kuznetsov
d7596c208c fix 2022-10-05 09:35:07 +03:00
Yuri Kuznetsov
6d1ab5870f fix avatar 2022-10-04 08:52:40 +03:00
Yuri Kuznetsov
73dbfa38ec css fix 2022-09-29 14:46:37 +03:00
Yuri Kuznetsov
4adb068699 fix lead capture source 2022-09-29 09:02:55 +03:00
Yuri Kuznetsov
3e4c738ab1 fix link multiple cloning fetch 2022-09-28 15:08:12 +03:00
Yuri Kuznetsov
cd92e4fcd8 fix util array to object to preserve lists 2022-09-27 09:49:14 +03:00
Yuri Kuznetsov
fba191f22c global search label 2022-09-27 08:57:51 +03:00
Yuri Kuznetsov
8874c8827a fix 2022-09-24 13:07:22 +03:00
Yuri Kuznetsov
34529a8ed9 numpad enter 2022-09-23 10:40:05 +03:00
Yuri Kuznetsov
8fd44acae2 entry point 404 2022-09-21 14:40:28 +03:00
Yuri Kuznetsov
4dd540ffc7 cleanup 2022-09-21 11:27:36 +03:00
Yuri Kuznetsov
9c20116c9b v 2022-09-20 20:21:47 +03:00
Yuri Kuznetsov
926410d58f upgrade file 2022-09-20 20:21:11 +03:00
Yuri Kuznetsov
c64a107ad9 dif docs 2022-09-20 20:20:54 +03:00
Yuri Kuznetsov
5dcd25946b diff mandatory files 2022-09-20 20:09:15 +03:00
Yuri Kuznetsov
d12865bbcb lf command 2022-09-20 18:10:38 +03:00
Yuri Kuznetsov
3fed415437 clnup 2022-09-20 17:18:22 +03:00
Yuri Kuznetsov
a03a13d3b9 fix auth token error 500 2022-09-20 17:05:11 +03:00
Yuri Kuznetsov
e625951831 array link-list fix 2022-09-20 12:14:28 +03:00
Yuri Kuznetsov
f533c68c9b fix enum empty value not selected 2022-09-19 15:37:52 +03:00
Yuri Kuznetsov
2420746f1b folders save fix 2022-09-16 21:46:42 +03:00
Yuri Kuznetsov
2dfd00dd2e cs fix 2022-09-16 21:46:09 +03:00
Yuri Kuznetsov
e043bb48e9 css fix 2022-09-16 14:23:44 +03:00
Yuri Kuznetsov
9aaef9d957 v 2022-09-16 10:08:10 +03:00
Yuri Kuznetsov
87449aae67 cleanup 2022-09-16 10:06:48 +03:00
Yuri Kuznetsov
191d064fe1 exception log message interface 2022-09-16 10:01:22 +03:00
Yuri Kuznetsov
dcb3e2feaf typo fix 2022-09-16 09:44:22 +03:00
Yuri Kuznetsov
da9a423e59 css fix 2022-09-15 19:04:46 +03:00
Yuri Kuznetsov
3be4510e63 css fix 2022-09-15 18:55:02 +03:00
Yuri Kuznetsov
a6bb5a239b style fix 2022-09-15 18:05:38 +03:00
Yuri Kuznetsov
a5fb42609b calendar style fix 2022-09-15 16:30:09 +03:00
Yuri Kuznetsov
40c2c1718e calendar minor none 2022-09-15 16:19:09 +03:00
Yuri Kuznetsov
aeecfd63da color fix 2022-09-15 15:53:55 +03:00
Yuri Kuznetsov
1da1e6da9b fix 2022-09-15 15:52:16 +03:00
Yuri Kuznetsov
bf9f23ebdd dev 2022-09-15 15:45:16 +03:00
Yuri Kuznetsov
7beb4f8d83 fix 2022-09-15 15:33:36 +03:00
Yuri Kuznetsov
991b859643 calendar now circle 2022-09-15 15:31:40 +03:00
Yuri Kuznetsov
9bd74e08db disable email fields layout 2022-09-15 14:52:36 +03:00
Yuri Kuznetsov
cfdf65025d fix stream post input event 2022-09-15 13:32:29 +03:00
Yuri Kuznetsov
bf471e654c calendar now indicator 2022-09-15 12:42:53 +03:00
Yuri Kuznetsov
5feee1cf55 calendar today text color 2022-09-15 12:21:51 +03:00
Yuri Kuznetsov
6af6fc017b lead capture fix 2022-09-15 10:44:39 +03:00
Yuri Kuznetsov
8ee9a792fc lead industry acl fix 2022-09-15 10:09:37 +03:00
Yuri Kuznetsov
9ef1c5928f fix campaign bottom view 2022-09-14 16:50:50 +03:00
Yuri Kuznetsov
64c933e365 v 2022-09-14 12:52:15 +03:00
Yuri Kuznetsov
32055f3d6e fix upload in chunks check 2022-09-14 10:10:45 +03:00
Yuri Kuznetsov
804acae44b fix extension check 2022-09-13 20:51:34 +03:00
Yuri Kuznetsov
6b3f37c00e panel show hide ref 2022-09-13 20:32:24 +03:00
Yuri Kuznetsov
4bdc4878cd fix bottom tab layout 2022-09-13 17:41:33 +03:00
Yuri Kuznetsov
625d2bc128 fix tab race condition error 2022-09-13 17:27:44 +03:00
Yuri Kuznetsov
0af5bb1b4b fix bottom tabs fetch 2022-09-13 14:26:48 +03:00
Yuri Kuznetsov
7a0d59357c panel hide/show concurrency issue fix 2022-09-13 14:16:55 +03:00
Yuri Kuznetsov
adbb46d02c system template inline attachments 2022-09-13 10:12:28 +03:00
Yuri Kuznetsov
ac3884179e cs fix 2022-09-13 10:08:31 +03:00
Yuri Kuznetsov
7cf1af188d fix attachment replated validation 2022-09-13 09:36:47 +03:00
Yuri Kuznetsov
21b695e4ef style fix 2022-09-13 09:30:50 +03:00
Yuri Kuznetsov
fbda66defc fix 2022-09-13 09:25:49 +03:00
Yuri Kuznetsov
beb4435ee0 diff closest 2022-09-12 15:07:32 +03:00
Yuri Kuznetsov
6a4c78c1cb fix language settings 2022-09-12 14:51:05 +03:00
Yuri Kuznetsov
dc7f5d8e66 fix grunt zip 2022-09-12 14:06:54 +03:00
Yuri Kuznetsov
872a4c2f2c fix typo 2022-09-12 12:35:27 +03:00
Yuri Kuznetsov
8a5204bc4c css fix 2022-09-12 12:03:26 +03:00
Yuri Kuznetsov
acbf6a1742 v 2022-09-12 11:22:07 +03:00
Yuri Kuznetsov
b2d3d56a85 attachment-multiple link 2022-09-12 11:20:48 +03:00
Yuri Kuznetsov
8b83fa640f note relate icon 2022-09-12 10:45:16 +03:00
Yuri Kuznetsov
5a95abed73 v 2022-09-12 09:05:25 +03:00
Yuri Kuznetsov
ca1d689c3a it_IT 2022-09-12 09:04:35 +03:00
Yuri Kuznetsov
0c750789b1 auth cookie fallback 2022-09-11 16:01:04 +03:00
Yuri Kuznetsov
ccb6c19c72 url field fix encode 2022-09-10 09:59:44 +03:00
140 changed files with 1588 additions and 669 deletions

5
.gitattributes vendored
View File

@@ -8,4 +8,9 @@
*.tpl text eol=crlf
*.html text eol=crlf
bin/command text eol=lf
.gitattributes text eol=crlf
.gitignore text eol=crlf
*.png binary

View File

@@ -381,7 +381,7 @@ module.exports = grunt => {
});
grunt.registerTask('upgrade', () => {
cp.execSync("node diff --all --vendor", {stdio: 'inherit'});
cp.execSync("node diff --closest", {stdio: 'inherit'});
});
grunt.registerTask('unit-tests-run', () => {
@@ -396,7 +396,7 @@ module.exports = grunt => {
cp.execSync("composer run-script setConfigParams", {stdio: 'ignore'});
});
grunt.registerTask('zip', () => {
grunt.registerTask('zip', function () { // Don't change to arrow-function.
const archiver = require('archiver');
let resolve = this.async();
@@ -425,8 +425,9 @@ module.exports = grunt => {
archive
.directory(currentPath + '/build/' + folder, folder)
.pipe(zipOutput)
.finalize();
.pipe(zipOutput);
archive.finalize();
});
grunt.registerTask('npm-install', () => {

View File

@@ -0,0 +1,47 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Classes\FieldValidators\Attachment;
use Espo\Classes\FieldValidators\LinkParentType;
use Espo\ORM\Entity;
class Related extends LinkParentType
{
public function checkValid(Entity $entity, string $field): bool
{
$typeValue = $entity->get($field . 'Type');
if ($typeValue === 'TemplateManager') {
return true;
}
return parent::checkValid($entity, $field);
}
}

View File

@@ -30,6 +30,7 @@
namespace Espo\Classes\FieldValidators;
use Espo\Core\Utils\Metadata;
use Espo\ORM\Defs;
use Espo\ORM\Entity;
class VarcharType
@@ -37,10 +38,12 @@ class VarcharType
private Metadata $metadata;
private const DEFAULT_MAX_LENGTH = 255;
private Defs $defs;
public function __construct(Metadata $metadata)
public function __construct(Metadata $metadata, Defs $defs)
{
$this->metadata = $metadata;
$this->defs = $defs;
}
public function checkRequired(Entity $entity, string $field): bool
@@ -54,6 +57,14 @@ class VarcharType
return true;
}
$fieldDefs = $this->defs
->getEntity($entity->getEntityType())
->getField($field);
if ($fieldDefs->isNotStorable() && !$validationValue) {
return true;
}
$value = $entity->get($field);
$maxLength = $validationValue ?? self::DEFAULT_MAX_LENGTH;

View File

@@ -89,7 +89,7 @@ class Auth
$hasAuthData = (bool) ($username || $authenticationMethod);
if (!$hasAuthData && $this->isEntryPoint) {
if (!$hasAuthData) {
$password = $this->obtainTokenFromCookies($request);
if ($password) {

View File

@@ -34,6 +34,7 @@ use Espo\Core\Exceptions\HasBody;
use Espo\Core\{
Api\Request,
Api\Response,
Exceptions\HasLogMessage,
Utils\Log,
Utils\Config,
};
@@ -121,14 +122,16 @@ class ErrorOutput
$message = $exception->getMessage();
$statusCode = $exception->getCode();
if ($exception instanceof HasLogMessage) {
$message = $exception->getLogMessage();
}
if ($route) {
$this->processRoute($route, $request, $exception);
}
$logLevel = 'error';
$messageLineFile = null;
$messageLineFile =
'line: ' . $exception->getLine() . ', ' .
'file: ' . $exception->getFile();
@@ -176,10 +179,10 @@ class ErrorOutput
}
if ($toPrintBody) {
$codeDesription = $this->getCodeDescription($statusCode);
$codeDescription = $this->getCodeDescription($statusCode);
$statusText = isset($codeDesription) ?
$statusCode . ' '. $codeDesription :
$statusText = isset($codeDescription) ?
$statusCode . ' '. $codeDescription :
'HTTP ' . $statusCode;
if ($message) {

View File

@@ -32,6 +32,7 @@ namespace Espo\Core\EntryPoint;
use Espo\Core\Exceptions\NotFound;
use Espo\Core\{
Exceptions\NotFoundSilent,
InjectableFactory,
Utils\ClassFinder,
Api\Request,
@@ -44,7 +45,6 @@ use Espo\Core\{
class EntryPointManager
{
private InjectableFactory $injectableFactory;
private ClassFinder $classFinder;
public function __construct(InjectableFactory $injectableFactory, ClassFinder $classFinder)
@@ -53,12 +53,15 @@ class EntryPointManager
$this->classFinder = $classFinder;
}
/**
* @throws NotFound
*/
public function checkAuthRequired(string $name): bool
{
$className = $this->getClassName($name);
if (!$className) {
throw new NotFound("Entry point '{$name}' not found.");
throw new NotFoundSilent("Entry point '{$name}' not found.");
}
$noAuth = false;
@@ -75,23 +78,29 @@ class EntryPointManager
return $className::$authRequired ?? true;
}
/**
* @throws NotFound
*/
public function checkNotStrictAuth(string $name): bool
{
$className = $this->getClassName($name);
if (!$className) {
throw new NotFound("Entry point '{$name}' not found.");
throw new NotFoundSilent("Entry point '{$name}' not found.");
}
return $className::$notStrictAuth ?? false;
}
/**
* @throws NotFound
*/
public function run(string $name, Request $request, Response $response): void
{
$className = $this->getClassName($name);
if (!$className) {
throw new NotFound("Entry point '{$name}' not found.");
throw new NotFoundSilent("Entry point '{$name}' not found.");
}
$entryPoint = $this->injectableFactory->create($className);

View File

@@ -33,6 +33,7 @@ use Espo\Core\Exceptions\BadRequest;
use Espo\Core\Application\Runner\Params as RunnerParams;
use Espo\Core\EntryPoint\EntryPointManager;
use Espo\Core\ApplicationUser;
use Espo\Core\Exceptions\NotFound;
use Espo\Core\Portal\Application as PortalApplication;
use Espo\Core\Authentication\AuthenticationFactory;
use Espo\Core\Authentication\AuthToken\Manager as AuthTokenManager;
@@ -89,7 +90,7 @@ class Starter
/**
* @throws BadRequest
* @throws \Espo\Core\Exceptions\NotFound
* @throws NotFound
*/
public function start(?string $entryPoint = null, bool $final = false): void
{
@@ -110,8 +111,19 @@ class Starter
throw new BadRequest("No 'entryPoint' param.");
}
$authRequired = $this->entryPointManager->checkAuthRequired($entryPoint);
$authNotStrict = $this->entryPointManager->checkNotStrictAuth($entryPoint);
$responseWrapped = new ResponseWrapper(new Response());
try {
$authRequired = $this->entryPointManager->checkAuthRequired($entryPoint);
$authNotStrict = $this->entryPointManager->checkNotStrictAuth($entryPoint);
}
catch (NotFound $exception) {
$this->errorOutput->processWithBodyPrinting($requestWrapped, $responseWrapped, $exception);
(new ResponseEmitter())->emit($responseWrapped->getResponse());
return;
}
if ($authRequired && !$authNotStrict && !$final) {
$portalId = $this->detectPortalId($requestWrapped);
@@ -123,8 +135,6 @@ class Starter
}
}
$responseWrapped = new ResponseWrapper(new Response());
$this->processRequest(
$entryPoint,
$requestWrapped,

View File

@@ -0,0 +1,35 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
* Website: https://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace Espo\Core\Exceptions;
interface HasLogMessage
{
public function getLogMessage(): string;
}

View File

@@ -32,10 +32,11 @@ namespace Espo\Core\FieldValidation\Exceptions;
use Espo\Core\Exceptions\BadRequest;
use Espo\Core\Exceptions\Error\Body;
use Espo\Core\Exceptions\HasLogMessage;
use Espo\Core\FieldValidation\Failure;
use LogicException;
class ValidationError extends BadRequest
class ValidationError extends BadRequest implements HasLogMessage
{
private ?Failure $failure = null;
@@ -75,4 +76,18 @@ class ValidationError extends BadRequest
return $this->failure;
}
public function getLogMessage(): string
{
if (!$this->failure) {
return "Field validation failure.";
}
$entityType = $this->failure->getEntityType();
$field = $this->failure->getField();
$type = $this->failure->getType();
return "Field validation failure; " .
"entityType: {$entityType}, field: {$field}, type: {$type}.";
}
}

View File

@@ -133,7 +133,8 @@ class Htmlizer
string $template,
?string $cacheId = null,
?array $additionalData = null,
bool $skipLinks = false
bool $skipLinks = false,
bool $skipInlineAttachmentHandling = false
): string {
$template = str_replace('<tcpdf ', '', $template);
@@ -188,9 +189,11 @@ class Htmlizer
$html = $renderer($data);
$html = str_replace('?entryPoint=attachment&amp;', '?entryPoint=attachment&', $html);
if (!$skipInlineAttachmentHandling) {
$html = str_replace('?entryPoint=attachment&amp;', '?entryPoint=attachment&', $html);
}
if ($this->entityManager) {
if (!$skipInlineAttachmentHandling && $this->entityManager) {
/** @var string $html */
$html = preg_replace_callback(
'/\?entryPoint=attachment\&id=([A-Za-z0-9]*)/',

View File

@@ -39,25 +39,16 @@ use LogicException;
class TemplateRenderer
{
/**
* @var ?array<string,mixed>
*/
/** @var ?array<string,mixed> */
private $data = null;
private ?User $user = null;
private ?Entity $entity = null;
private bool $skipRelations = false;
private bool $skipInlineAttachmentHandling = false;
private bool $applyAcl = false;
private bool $useUserTimezone = false;
private HtmlizerFactory $htmlizerFactory;
private ApplicationState $applicationState;
private ?string $template = null;
public function __construct(HtmlizerFactory $htmlizerFactory, ApplicationState $applicationState)
@@ -107,6 +98,12 @@ class TemplateRenderer
return $this;
}
public function setSkipInlineAttachmentHandling(bool $skipInlineAttachmentHandling = true): self
{
$this->skipInlineAttachmentHandling = $skipInlineAttachmentHandling;
return $this;
}
public function setApplyAcl(bool $applyAcl = true): self
{
$this->applyAcl = $applyAcl;
@@ -149,7 +146,8 @@ class TemplateRenderer
$template,
null,
$this->data,
$this->skipRelations
$this->skipRelations,
$this->skipInlineAttachmentHandling
);
}

View File

@@ -1,13 +1,13 @@
{
"fields": {
"parent": "Genitore",
"dateStart": "Data inizio",
"dateEnd": "Data termine",
"dateStart": "Data Inizio",
"dateEnd": "Data Fine",
"duration": "Durata",
"status": "Stato",
"reminders": "Promemoria",
"dateStartDate": "Data inizio (tutto il giorno)",
"dateEndDate": "Data fine (tutto il giorno)",
"dateStartDate": "Data Inizio (tutto il giorno)",
"dateEndDate": "Data Fine (tutto il giorno)",
"isAllDay": "È tutto il giorno"
},
"links": {
@@ -22,8 +22,8 @@
},
"labels": {
"Create {entityType}": "Crea {entityTypeTranslated}",
"Schedule {entityType}": "Pianificazione {entityTypeTranslated}",
"Log {entityType}": "Registro {entityTypeTranslated}",
"Schedule {entityType}": "Pianifica {entityTypeTranslated}",
"Log {entityType}": "Registra {entityTypeTranslated}",
"Set Held": "Effettuata",
"Set Not Held": "Non Effettuata"
},

View File

@@ -305,8 +305,17 @@ class Util
*/
private static function arrayToObjectInternal($value)
{
if (is_array($value)) {
return (object) array_map(fn($v) => self::arrayToObjectInternal($v), $value);
if (!is_array($value)) {
return $value;
}
// @todo Change to `array_is_list` when PHP 8.1 is the min supported.
$isList = $value === array_values($value);
$value = array_map(fn($v) => self::arrayToObjectInternal($v), $value);
if (!$isList) {
$value = (object) $value;
}
return $value;

View File

@@ -111,6 +111,7 @@ class Attachment implements EntryPoint
$response
->setHeader('Pragma', 'public')
->setHeader('Content-Length', (string) $size)
->setHeader('Content-Security-Policy', "default-src 'self'")
->setBody($stream);
}

View File

@@ -75,10 +75,14 @@ class Avatar extends Image implements Di\MetadataAware
$sum += ord($hash[$i]);
}
$x = intval($sum % 128) + 1;
$x = $sum % 128 + 1;
$colorList = $this->metadata->get(['app', 'avatars', 'colorList']) ?? $this->colorList;
if ($x === 128) {
$x--;
}
$index = intval($x * count($colorList) / 128);
return $colorList[$index];

View File

@@ -174,6 +174,7 @@ class Invitations
$subjectTpl,
'invitation-email-subject-' . $entity->getEntityType(),
$data,
true,
true
);
@@ -182,7 +183,8 @@ class Invitations
$bodyTpl,
'invitation-email-body-' . $entity->getEntityType(),
$data,
false
false,
true
);
$email->set('subject', $subject);

View File

@@ -13,12 +13,12 @@
"campaign": "Campagna",
"targetLists": "Liste di destinazione",
"targetList": "Lista di destinazione",
"originalLead": "Iniziativa originale",
"originalLead": "Lead Originale",
"contactIsInactive": "Inattivo"
},
"links": {
"contacts": "Contatti",
"opportunities": "Opportunita'",
"opportunities": "Opportunità",
"cases": "Ticket",
"documents": "Documenti",
"meetingsPrimary": "Riunioni (ampliato)",
@@ -29,7 +29,8 @@
"campaignLogRecords": "Log campagna",
"campaign": "Campagna",
"portalUsers": "Utenti portale",
"originalLead": "Iniziativa originale"
"originalLead": "Lead Originale",
"contactsPrimary": "Contatti (primari)"
},
"options": {
"type": {

View File

@@ -12,7 +12,7 @@
"Create": "Crea",
"Shared": "Diviso",
"Add User": "Aggiungi Utente",
"current": "Attuale",
"current": "In Corso",
"time": "ora",
"User List": "Elenco utenti",
"Manage Users": "Gestione utenti",

View File

@@ -3,15 +3,15 @@
"name": "Nome",
"parent": "Genitore",
"status": "Stato",
"dateStart": "Data inizio",
"dateEnd": "Data termine",
"dateStart": "Data Inizio",
"dateEnd": "Data Fine",
"direction": "Direzione",
"duration": "Durata",
"description": "Descrizione",
"users": "Utenti",
"contacts": "Contatti",
"reminders": "Promemoria",
"acceptanceStatus": "Stato accettazione"
"acceptanceStatus": "Stato Accettazione"
},
"options": {
"status": {

View File

@@ -29,7 +29,7 @@
"excludingTargetLists": "Esclusioni da liste di destinazione",
"accounts": "Account",
"contacts": "Contatti",
"opportunities": "Opportunita'",
"opportunities": "Opportunità",
"massEmails": "Email massiva",
"contactsTemplate": "Modello contatti",
"leadsTemplate": "Modello Leads",

View File

@@ -6,7 +6,7 @@
"object": "Oggetto",
"application": "Applicazione",
"queueItem": "Articolo in coda",
"isTest": "E'Test"
"isTest": "È un Test"
},
"links": {
"queueItem": "Articolo in coda",

View File

@@ -18,6 +18,7 @@
}
},
"tooltips": {
"url": "Il destinatario sara' reindirizzato a questa posizione dopo aver seguito il link."
"url": "Il destinatario sarà reindirizzato a questa posizione dopo aver seguito il link.",
"message": "Il messaggio verrà mostrato al destinatario dopo che avrà seguito il link. Il Markdown è supportato."
}
}

View File

@@ -5,7 +5,7 @@
"status": "Stato",
"contact": "Contatti",
"contacts": "Contatti",
"priority": "Priorita'",
"priority": "Priorità",
"type": "Tipo",
"description": "Descrizione",
"attachments": "Allegati",

View File

@@ -7,19 +7,19 @@
"accountType": "Tipo di Account",
"doNotCall": "Non chiamare",
"address": "Indirizzo",
"opportunityRole": "Ruolo opportunità",
"opportunityRole": "Ruolo Opportunità",
"description": "Descrizione",
"targetLists": "Liste di destinazione",
"targetList": "Lista di destinazione",
"originalLead": "Lead originale",
"acceptanceStatus": "Stato accettazione",
"acceptanceStatus": "Stato Accettazione",
"accountIsInactive": "Account inattivo",
"acceptanceStatusMeetings": "Stato accettazione (riunioni)",
"acceptanceStatusCalls": "Stato accettazione (chiamate)",
"acceptanceStatusMeetings": "Stato Accettazione (Riunioni)",
"acceptanceStatusCalls": "Stato Accettazione (Chiamate)",
"title": "Titolo Account"
},
"links": {
"opportunities": "Opportunita'",
"opportunities": "Opportunità",
"cases": "Ticket",
"targetLists": "Liste di destinazione",
"campaignLogRecords": "Log campagna",

View File

@@ -14,7 +14,7 @@
},
"links": {
"accounts": "Account",
"opportunities": "Opportunita'",
"opportunities": "Opportunità",
"folder": "Cartella",
"contacts": "Contatti"
},

View File

@@ -5,7 +5,7 @@
"Create Task": "Crea Compito",
"Create Case": "Crea Caso",
"Add to Contact": "Aggiungi al contatto",
"Add to Lead": "Aggiungi all'iniziativa"
"Add to Lead": "Aggiungi al Lead"
},
"fields": {
"tasks": "Compiti"

View File

@@ -6,7 +6,7 @@
"attemptCount": "Prove",
"emailAddress": "Indirizzo email",
"massEmail": "Email massiva",
"isTest": "E' un test"
"isTest": "È un test"
},
"links": {
"massEmail": "Email massiva"

View File

@@ -2,7 +2,7 @@
"links": {
"parent": "Genitore",
"contacts": "Contatti",
"opportunities": "Opportunita'",
"opportunities": "Opportunità",
"meetings": "Riunioni",
"calls": "Chiamate",
"tasks": "Compiti",
@@ -35,7 +35,7 @@
"scopeNamesPlural": {
"Account": "Account",
"Contact": "Contatti",
"Opportunity": "Opportunita'",
"Opportunity": "Opportunità",
"Meeting": "Riunioni",
"Calendar": "Calendario",
"Call": "Chiamate",
@@ -43,7 +43,7 @@
"Case": "Tickets",
"Document": "Documenti",
"DocumentFolder": "Cartella documenti",
"Campaign": "Campagna",
"Campaign": "Campagne",
"TargetList": "Liste di destinazione",
"MassEmail": "Email massive",
"EmailQueueItem": "Elementi della coda e-mail",
@@ -54,14 +54,14 @@
},
"dashlets": {
"Leads": "I miei Lead",
"Opportunities": "Le mie opportunità",
"Opportunities": "Le mie Opportunità",
"Tasks": "I miei Compiti",
"Cases": "I miei Tickets",
"Calendar": "Calendario",
"Calls": "Le mie chiamate",
"Meetings": "Le mie riunioni",
"OpportunitiesByStage": "Opportunità di stage",
"OpportunitiesByLeadSource": "Opportunità per Lead Source",
"OpportunitiesByStage": "Opportunità per Stadio",
"OpportunitiesByLeadSource": "Opportunità per Provenienza Lead",
"SalesByMonth": "Vendite per Mese",
"SalesPipeline": "Canale di vendita",
"Activities": "Le mie attività"
@@ -74,16 +74,16 @@
"Schedule Meeting": "Pianifica Riunione",
"Schedule Call": "Pianifica chiamata",
"Compose Email": "Componi email",
"Log Meeting": "Registro riunione",
"Log Call": "Registro chiamata",
"Archive Email": "Archivio Email",
"Log Meeting": "Registra Riunione",
"Log Call": "Registra Chiamata",
"Archive Email": "Archivia Email",
"Create Task": "Crea Compito",
"Tasks": "Compiti",
"Scheduler": "Pianificatore"
},
"fields": {
"billingAddressCity": "Citta'",
"addressCity": "Citta'",
"billingAddressCity": "Città",
"addressCity": "Città",
"billingAddressCountry": "Nazione",
"addressCountry": "Nazione",
"billingAddressPostalCode": "Codice Postale",
@@ -92,7 +92,7 @@
"addressState": "Provincia",
"billingAddressStreet": "Via",
"addressStreet": "Via",
"shippingAddressCity": "Citta' (Spedizione)",
"shippingAddressCity": "Città (Spedizione)",
"shippingAddressStreet": "Via (Spedizione)",
"shippingAddressCountry": "Nazione (Spedizione)",
"shippingAddressState": "Stato (Spedizione)",

View File

@@ -23,7 +23,7 @@
},
"links": {
"cases": "Tickets",
"opportunities": "Opportunita'",
"opportunities": "Opportunità",
"categories": "Categorie",
"portals": "Portali"
},

View File

@@ -15,8 +15,8 @@
"address": "Indirizzo",
"status": "Stato",
"source": "Provenienza",
"opportunityAmount": "Importo opportunità",
"opportunityAmountConverted": "Importo opportunità (convertito)",
"opportunityAmount": "Importo Opportunità",
"opportunityAmountConverted": "Importo Opportunità (convertito)",
"description": "Descrizione",
"createdContact": "Contatti",
"createdOpportunity": "Opportunità",
@@ -24,10 +24,10 @@
"targetLists": "Liste di destinazione",
"targetList": "Lista di destinazione",
"industry": "Settore",
"acceptanceStatus": "Stato accettazione",
"acceptanceStatus": "Stato Accettazione",
"opportunityAmountCurrency": "Valuta dell'importo della proposta",
"acceptanceStatusMeetings": "Stato accettazione (riunioni)",
"acceptanceStatusCalls": "Stato accettazione (chiamate)",
"acceptanceStatusMeetings": "Stato Accettazione (Riunioni)",
"acceptanceStatusCalls": "Stato Accettazione (Chiamate)",
"convertedAt": "Convertito a"
},
"links": {

View File

@@ -3,7 +3,7 @@
"name": "Nome",
"status": "Stato",
"storeSentEmails": "Archivia email inviate",
"startAt": "Data inizio",
"startAt": "Data Inizio",
"fromAddress": "Indirizzo mittente",
"fromName": "Dal nome",
"replyToAddress": "Rispondi aa Indirizzo",
@@ -50,7 +50,7 @@
"storeSentEmails": "Le email verranno salvate nel CRM"
},
"presetFilters": {
"actual": "Attuale",
"actual": "In Corso",
"complete": "Completo"
}
}

View File

@@ -3,23 +3,23 @@
"name": "Nome",
"parent": "Genitore",
"status": "Stato",
"dateStart": "Data inizio",
"dateEnd": "Data termine",
"dateStart": "Data Inizio",
"dateEnd": "Data Fine",
"duration": "Durata",
"description": "Descrizione",
"users": "Utenti",
"contacts": "Contatti",
"leads": "Iniziative",
"reminders": "Promemoria",
"acceptanceStatus": "Stato accettazione",
"dateStartDate": "Data inizio (tutto il giorno)",
"dateEndDate": "Data fine (tutto il giorno)",
"acceptanceStatus": "Stato Accettazione",
"dateStartDate": "Data Inizio (tutto il giorno)",
"dateEndDate": "Data Fine (tutto il giorno)",
"isAllDay": "È tutto il giorno",
"Acceptance": "Accettazione"
},
"options": {
"status": {
"Planned": "Pianificato",
"Planned": "Pianificata",
"Held": "Effettuata",
"Not Held": "Non Effettuata"
},
@@ -27,7 +27,7 @@
"None": "Nessuno",
"Accepted": "Accettato",
"Declined": "Declinato",
"Tentative": "Tentativo"
"Tentative": "Provvisorio"
}
},
"massActions": {
@@ -44,12 +44,13 @@
"All-Day": "Tutto il giorno\n"
},
"presetFilters": {
"planned": "Pianificato",
"held": "Effettuata",
"planned": "Pianificate",
"held": "Effettuate",
"todays": "Di oggi"
},
"messages": {
"nothingHasBeenSent": "Nulla è stato inviato",
"selectAcceptanceStatus": "Imposta il tuo stato di accettazione."
"selectAcceptanceStatus": "Imposta il tuo stato di accettazione.",
"sendInvitationsConfirmation": "Invia email di invito ai partecipanti?"
}
}

View File

@@ -23,7 +23,7 @@
"Television": "Televisione"
},
"targetStatus": {
"Opted Out": "Cancellato iscrizione",
"Opted Out": "Iscrizione Cancellata",
"Listed": "Elencato"
}
},

View File

@@ -3,11 +3,11 @@
"name": "Nome",
"parent": "Genitore",
"status": "Stato",
"dateStart": "Data inizio",
"dateStart": "Data Inizio",
"dateEnd": "Data di scadenza",
"dateStartDate": "Data inizio (tutto il giorno)",
"dateEndDate": "Data termine (tutto il giorno)",
"priority": "Priorita'",
"dateStartDate": "Data Inizio (tutto il giorno)",
"dateEndDate": "Data Fine (tutto il giorno)",
"priority": "Priorità",
"description": "Descrizione",
"isOverdue": "In ritardo",
"dateCompleted": "Completato in data",
@@ -36,11 +36,11 @@
},
"labels": {
"Create Task": "Crea Compito",
"Complete": "Completo",
"Complete": "Completato",
"overdue": "in ritardo"
},
"presetFilters": {
"actual": "Attuale",
"actual": "In Corso",
"completed": "Completato",
"todays": "Di oggi",
"overdue": "In ritardo",

View File

@@ -3,8 +3,8 @@
"targetLists": "Liste di destinazione"
},
"fields": {
"acceptanceStatus": "Stato accettazione",
"acceptanceStatusMeetings": "Stato accettazione (riunioni)",
"acceptanceStatusCalls": "Stato accettazione (chiamate)"
"acceptanceStatus": "Stato Accettazione",
"acceptanceStatusMeetings": "Stato Accettazione (Riunioni)",
"acceptanceStatusCalls": "Stato Accettazione (Chiamate)"
}
}

View File

@@ -4,6 +4,10 @@
"scope": "Opportunity",
"field": "leadSource"
},
"Account.options.industry": {
"scope": "Lead",
"field": "industry"
},
"Meeting": {
"scope": "Call"
}

View File

@@ -3,6 +3,10 @@
"entityDefs.Lead.fields.source.options": {
"scope": "Opportunity",
"field": "leadSource"
},
"entityDefs.Account.fields.industry.options": {
"scope": "Lead",
"field": "industry"
}
},
"frontendHiddenPathList": [

View File

@@ -66,6 +66,8 @@
"type": "enum",
"view": "crm:views/lead/fields/industry",
"customizationOptionsDisabled": true,
"optionsPath": "entityDefs.Account.fields.industry.options",
"translation": "Account.options.industry",
"default": "",
"isSorted": true
},

View File

@@ -147,7 +147,7 @@ class RelationDefs
{
if (!$this->hasForeignEntityType()) {
throw new RuntimeException(
"No 'entity' paramater defined in the relation '{$this->name}'."
"No 'entity' parameter defined in the relation '{$this->name}'."
);
}
@@ -170,7 +170,7 @@ class RelationDefs
{
if (!$this->hasForeignRelationName()) {
throw new RuntimeException(
"No 'foreign' paramater defined in the relation '{$this->name}'."
"No 'foreign' parameter defined in the relation '{$this->name}'."
);
}
@@ -193,7 +193,7 @@ class RelationDefs
{
if (!$this->hasForeignKey()) {
throw new RuntimeException(
"No 'foreignKey' paramater defined in the relation '{$this->name}'."
"No 'foreignKey' parameter defined in the relation '{$this->name}'."
);
}
@@ -216,7 +216,7 @@ class RelationDefs
{
if (!$this->hasKey()) {
throw new RuntimeException(
"No 'key' paramater defined in the relation '{$this->name}'."
"No 'key' parameter defined in the relation '{$this->name}'."
);
}
@@ -224,7 +224,7 @@ class RelationDefs
}
/**
* Whether a mid key is defined. For Many-to-Many relationships only.
* Whether a mid-key is defined. For Many-to-Many relationships only.
*/
public function hasMidKey(): bool
{
@@ -232,14 +232,14 @@ class RelationDefs
}
/**
* Get a mid key. For Many-to-Many relationships only.
* Get a mid-key. For Many-to-Many relationships only.
* @throws RuntimeException
*/
public function getMidKey(): string
{
if (!$this->hasMidKey()) {
throw new RuntimeException(
"No 'midKey' paramater defined in the relation '{$this->name}'."
"No 'midKey' parameter defined in the relation '{$this->name}'."
);
}
@@ -247,7 +247,7 @@ class RelationDefs
}
/**
* Whether a foreign mid key is defined. For Many-to-Many relationships only.
* Whether a foreign mid-key is defined. For Many-to-Many relationships only.
* @throws RuntimeException
*/
public function hasForeignMidKey(): bool
@@ -256,14 +256,14 @@ class RelationDefs
}
/**
* Get a foreign mid key. For Many-to-Many relationships only.
* Get a foreign mid-key. For Many-to-Many relationships only.
* @throws RuntimeException
*/
public function getForeignMidKey(): string
{
if (!$this->hasForeignMidKey()) {
throw new RuntimeException(
"No 'foreignMidKey' paramater defined in the relation '{$this->name}'."
"No 'foreignMidKey' parameter defined in the relation '{$this->name}'."
);
}
@@ -286,7 +286,7 @@ class RelationDefs
{
if (!$this->hasRelationshipName()) {
throw new RuntimeException(
"No 'relationName' paramater defined in the relation '{$this->name}'."
"No 'relationName' parameter defined in the relation '{$this->name}'."
);
}

View File

@@ -53,7 +53,7 @@
"Posted": "Zasláno",
"Linked": "Nalinkováno",
"Unlinked": "Odlinkováno",
"Done": "Hovoto",
"Done": "Hotovo",
"Access denied": "Přístup odepřen",
"Access": "Přístup",
"Are you sure?": "Jste si jisti?",

View File

@@ -271,7 +271,8 @@
"Field": "Field",
"Resolution": "Resolution",
"Resolve Conflict": "Resolve Conflict",
"Download": "Download"
"Download": "Download",
"Global Search": "Global Search"
},
"messages": {
"pleaseWait": "Please wait...",

View File

@@ -1,6 +1,7 @@
{
"fields": {
"createdAt": "Data",
"targetType": "Tipo di Obiettivo",
"authToken": "Token di autenticazione",
"authLogRecord": "Record di log auth",
"userType": "Tipologia di utente"

View File

@@ -32,7 +32,6 @@
"Currency": "Valuta",
"Integrations": "Integrazioni",
"Extensions": "Estensioni",
"Upload": "Caricamento",
"Installing...": "Installazione...",
"Upgrading...": "Aggiornamento...",
"Upgraded successfully": "Aggiornamento completato",
@@ -64,14 +63,17 @@
"Permissions": "Permessi",
"Success": "Successo",
"Fail": "Fallito",
"is recommended": "E' raccomandato",
"is recommended": "È consigliato",
"extension is missing": "Manca l'estensione",
"PDF Templates": "Modelli PDF",
"Webhooks": "Webhooks\n",
"Email Addresses": "Indirizzi Email",
"Phone Numbers": "Telefono",
"Phone Numbers": "Numeri di Telefono",
"Messaging": "Messaggistica",
"Misc": "Varie"
"Misc": "Varie",
"Job Settings": "Impostazioni Job",
"Configuration Instructions": "Istruzioni di Configurazione",
"Formula Sandbox": "Sandbox Formule"
},
"layouts": {
"list": "Elenco",
@@ -175,7 +177,11 @@
"codeType": "Tipo Codice",
"lastChar": "Ultimo Carattere",
"listPreviewSize": "Dimensione Anteprima in Vista Elenco",
"onlyDefaultCurrency": "Solo valuta predefinita"
"onlyDefaultCurrency": "Solo valuta predefinita",
"dynamicLogicInvalid": "Condizioni che rendono il campo non valido",
"conversionDisabled": "Disattiva la Conversione",
"decimalPlaces": "Posizioni Decimali",
"globalRestrictions": "Restrizioni Globali"
},
"messages": {
"selectEntityType": "Scegli il tipo di entità dal menu di sinistra.",
@@ -194,9 +200,10 @@
"upgradeDone": "EspoCRM è stato aggiornato alla versione **{version}**.",
"downloadUpgradePackage": "Scarica i pacchetti di aggiornamento [qui]({url}).",
"upgradeInfo": "Controlla la [documentazione]({url}) su come aggiornare l'istanza di EspoCRM.",
"upgradeRecommendation": "Questo modo di aggiornamento non è raccomandato. È meglio eseguire l'aggiornamento dalla CLI.",
"upgradeRecommendation": "Questo modo di aggiornamento non è consigliato. È meglio eseguire l'aggiornamento dalla CLI.",
"newVersionIsAvailable": "È disponibile la nuova versione di EspoCRM {latestVersion}. Seguire le [istruzioni](https://www.espocrm.com/documentation/administration/upgrading/) per aggiornare l'istanza.",
"formulaFunctions": "Più funzioni possono essere trovate nella [documentazione]({documentationUrl})."
"formulaFunctions": "Più funzioni possono essere trovate nella [documentazione]({documentationUrl}).",
"rebuildRequired": "È necessario eseguire la ricostruzione da CLI."
},
"descriptions": {
"settings": "Impostazioni di sistema dell'applicazione.",
@@ -230,7 +237,7 @@
"labelManager": "Personalizza etichette dell'applicazione",
"authLog": "Cronologia login.",
"leadCapture": "Punti di ingresso API per Web-to-Lead.",
"attachments": "Tutti gli allegati di file memorizzati nel sistema.",
"attachments": "Tutti gli allegati memorizzati nel sistema.",
"templateManager": "Personalizza i modelli di messaggi.\n",
"systemRequirements": "Requisiti di sistema per EspoCRM.\n",
"apiUsers": "Utenti separati per integrazione.\n\n",
@@ -238,7 +245,11 @@
"pdfTemplates": "Modelli per la stampa in PDF.",
"webhooks": "Gestisci i webhook.",
"dashboardTemplates": "Distribuire dashboard agli utenti.",
"phoneNumbers": "Tutti i numeri telefonici sono archiviati nel sistema."
"phoneNumbers": "Tutti i numeri telefonici archiviati nel sistema.",
"emailAddresses": "Tutti gli indirizzi email memorizzati nel sistema.",
"layoutSets": "Raccolte di layout che possono essere assegnati a team e portali.",
"sms": "Impostazioni SMS.",
"formulaSandbox": "Scrivi e testa gli script delle formule."
},
"logicalOperators": {
"and": "And"
@@ -262,15 +273,18 @@
"notePostNoParent": "Nota su post (nessun genitore)",
"noteStatus": "Nota sull'aggiornamento dello stato",
"passwordChangeLink": "Collegamento per la modifica della password",
"noteEmailReceived": "Nota sull'e-mail ricevuta"
"noteEmailReceived": "Nota sull'e-mail ricevuta",
"twoFactorCode": "Codice 2FA"
},
"strings": {
"rebuildRequired": "E' richiesta la ricostruzione"
"rebuildRequired": "È richiesta la ricostruzione"
},
"keywords": {
"userInterface": "ui,tema,schede,logo,dashboard",
"authLog": "storico log",
"authTokens": "storico log di accesso",
"templateManager": "notifiche"
"entityManager": "campi,relazioni,rapporti",
"templateManager": "notifiche",
"authentication": "password,sicurezza,ldap"
}
}

View File

@@ -8,14 +8,14 @@
"denialReason": "Ragione Negazione",
"portal": "Portale",
"user": "Utente",
"authToken": "Token autorizzazione creato",
"authToken": "Token di Autorizzazione Creato",
"requestUrl": "Url di richiesta",
"requestMethod": "Metodo di richiesta",
"authTokenIsActive": "Il token di autorizzazione è attivo",
"authenticationMethod": "Metodo di autenticazione"
},
"links": {
"authToken": "Token di autorizzazione creato",
"authToken": "Token di Autorizzazione Creato",
"user": "Utente",
"portal": "Portale",
"actionHistoryRecords": "Cronologia delle azioni"

View File

@@ -1 +1,164 @@
{}
{
"names": {
"AED": "Dirham degli Emirati Arabi Uniti",
"AFN": "Afgano Afghani",
"ALL": "Lek Albanese",
"AMD": "Dram Armeno",
"ANG": "Fiorino delle Antille Olandesi",
"AOA": "Kwanza Angolano",
"ARS": "Peso Argentino",
"AUD": "Dollaro Australiano",
"AWG": "Fiorino Arubano",
"AZN": "Manat Azero",
"BAM": "Marco Bosniaco",
"BBD": "Dollaro Barbadiano",
"BDT": "Taka Bengalese",
"BGN": "Lev Bulgaro",
"BHD": "Dinaro del Bahrein",
"BIF": "Franco del Burundi",
"BMD": "Dollaro Bermudiano",
"BND": "Dollaro del Brunei",
"BOB": "Boliviano",
"BRL": "Real Brasiliano",
"BSD": "Dollaro delle Bahamas",
"BTN": "Ngultrum del Bhutan",
"BWP": "Pula del Botswana",
"BYN": "Rublo Bielorusso",
"BZD": "Dollaro del Belize",
"CAD": "Dollaro Canadese",
"CDF": "Franco Congolese",
"CHF": "Franco Svizzero",
"CHW": "WIR Franco",
"CLF": "Unità di conto cilena (UF)",
"CLP": "Peso Cileno",
"CNH": "Yuan Cinese (offshore)",
"CNY": "Yuan Cinese",
"COP": "Peso Colombiano",
"COU": "Unità di Valore Reale Colombiano",
"CRC": "Colón Costaricano",
"CUC": "Peso Cubano Convertibile",
"CUP": "Peso Cubano",
"CVE": "Escudo Capoverdiano",
"CZK": "Corona Ceca",
"DJF": "Franco Gibutiano",
"DKK": "Corona Danese",
"DOP": "Peso Dominicano",
"DZD": "Dinaro Algerino",
"EGP": "Sterlina Egiziana",
"ERN": "Nacfa Eritreo",
"ETB": "Birr Etiope",
"FJD": "Dollaro delle Figi",
"FKP": "Sterlina delle Falkland",
"GBP": "Sterlina Britannica",
"GEL": "Lari Georgiano",
"GHS": "Cedi Ghanese",
"GIP": "Sterlina di Gibilterra",
"GMD": "Dalasi Gambese",
"GNF": "Franco Guineano",
"GTQ": "Quetzal Guatemalteco",
"GYD": "Dollaro della Guyana",
"HKD": "Dollaro di Hong Kong",
"HNL": "Lempira Honduregna",
"HRK": "Kuna Croata",
"HTG": "Gourde Haitiano",
"HUF": "Fiorino Ungherese",
"IDR": "Rupia Indonesiana",
"ILS": "Nuovo Shekel Israeliano",
"INR": "Rupia Indiana",
"IQD": "Dinaro Iracheno",
"IRR": "Riyal Iraniano",
"ISK": "Corona Islandese",
"JMD": "Dollaro Giamaicano",
"JOD": "Dinaro Giordano",
"JPY": "Yen Giapponese",
"KES": "Scellino Keniota",
"KGS": "Som Kirghiso",
"KHR": "Riel Cambogiano",
"KMF": "Franco delle Comore",
"KPW": "Won Nordcoreano",
"KRW": "Won Sudcoreano",
"KWD": "Dinaro Kuwaitiano",
"KYD": "Dollaro delle Cayman",
"KZT": "Tenge Kazako",
"LAK": "Kip Laotiano",
"LBP": "Lira Libanese",
"LKR": "Rupia Singalese",
"LRD": "Dollaro Liberiano",
"LSL": "Loti Lesothiano",
"LYD": "Dinaro Libico",
"MAD": "Dirham Marocchino",
"MDL": "Leu Moldavo",
"MGA": "Ariary Malgascio",
"MKD": "Dinaro Macedone",
"MMK": "Kyat Birmano",
"MNT": "Tugrik Mongolo",
"MOP": "Pataca di Macao",
"MRO": "Ouguiya Mauritana",
"MUR": "Rupia Mauriziana",
"MWK": "Kwacha Malawiano",
"MXN": "Peso Messicano",
"MYR": "Ringgit Malaysiano",
"MZN": "Metical Mozambicano",
"NAD": "Dollaro Namibiano",
"NGN": "Naira Nigeriana",
"NIO": "Córdoba Nicaraguense",
"NOK": "Corona Norvegese",
"NPR": "Rupia Nepalese",
"NZD": "Dollaro Neozelandese",
"OMR": "Riyal dell'Oman",
"PAB": "Balboa Panamense",
"PEN": "Nuevo Sol Peruviano",
"PGK": "Kina Papuana",
"PHP": "Peso Filippino",
"PKR": "Rupia Pakistana",
"PLN": "Złoty Polacco",
"PYG": "Guaraní Paraguaiano",
"QAR": "Riyal del Qatar",
"RON": "Leu Romeno",
"RSD": "Dinaro Serbo",
"RUB": "Rublo Russo",
"RWF": "Franco Ruandese",
"SAR": "Riyal Saudita",
"SBD": "Dollaro delle Salomone",
"SCR": "Rupia delle Seychelles",
"SDG": "Sterlina Sudanese",
"SEK": "Corona Svedese",
"SGD": "Dollaro di Singapore",
"SHP": "Sterlina di Sant'Elena",
"SLL": "Leone Sierraleonese",
"SOS": "Scellino Somalo",
"SRD": "Dollaro Surinamese",
"SSP": "Sterlina Sudsudanese",
"STN": "Dobra di São Tomé e Príncipe (2018)",
"SYP": "Lira Siriana",
"SZL": "Lilangeni dell'eSwatini",
"SVC": "Colón Salvadoregno",
"THB": "Baht Thailandese",
"TJS": "Somoni Tagiko",
"TND": "Dinaro Tunisino",
"TOP": "Paʻanga Tongano",
"TRY": "Lira Turca",
"TTD": "Dollaro di Trinidad e Tobago",
"TWD": "Dollaro Taiwanese",
"TZS": "Scellino Tanzaniano",
"UAH": "Grivnia Ucraina",
"UGX": "Scellino Ugandese",
"USD": "Dollaro Statunitense",
"USN": "Dollaro Statunitense (Next day)",
"UYI": "Peso uruguaiano (Indexed Units)",
"UYU": "Peso Uruguaiano",
"UZS": "Som Uzbeko",
"VEF": "Bolívar Venezuelano",
"VND": "Dong Vietnamita",
"VUV": "Vatu Vanuatu",
"WST": "Tālā Samoano",
"XAF": "Franco CFA BEAC",
"XCD": "Dollaro dei Caraibi Orientali",
"XOF": "Franco CFA BCEAO",
"XPF": "Franco CFP",
"YER": "Riyal Yemenita",
"ZAR": "Rand Sudafricano",
"ZMW": "Kwacha Zambiano",
"ZWL": "Dollaro Zimbabwese"
}
}

View File

@@ -4,10 +4,10 @@
"dateFrom": "Data da",
"dateTo": "Data a",
"autorefreshInterval": "Intervallo di aggiornamento automatico",
"displayRecords": "Visualizza i record",
"displayRecords": "Record da Visualizzare",
"isDoubleHeight": "Altezza 2x",
"mode": "Modo",
"enabledScopeList": "Cose da visualizzare",
"mode": "Modalità",
"enabledScopeList": "Cosa visualizzare",
"users": "Utenti",
"entityType": "Tipo di entità",
"primaryFilter": "Filtro primario",

View File

@@ -18,7 +18,10 @@
"contains": "Contiene",
"has": "Contiene",
"notContains": "Non contiene",
"notHas": "Non contiene"
"notHas": "Non contiene",
"startsWith": "Inizia Con",
"endsWith": "Finisce Con",
"matches": "Corrispondenze (regex)"
}
},
"labels": {

View File

@@ -47,7 +47,12 @@
"replyToEmailAddresses": "Rispondi-a indirizzo email",
"fromEmailAddress": "Dall'indirizzo (collegamento)",
"replyToName": "Rispondi a Nome",
"replyToAddress": "Indirizzo di risposta"
"replyToAddress": "Indirizzo di risposta",
"icsContents": "Contenuti ICS",
"icsEventData": "Data Evento ICS",
"icsEventUid": "Evento ICS UID",
"event": "Evento",
"icsEventDateStart": "Data Inizio Evento ICS"
},
"links": {
"replied": "Risposto",
@@ -74,8 +79,8 @@
}
},
"labels": {
"Create Email": "Archivio email",
"Archive Email": "Archivio email",
"Create Email": "Archivia Email",
"Archive Email": "Archivia Email",
"Compose": "Componi",
"Reply": "Rispondi",
"Reply to All": "Rispondi a tutti",
@@ -91,7 +96,7 @@
"Mark Read": "Contrassegna come letto",
"Sending...": "Invio...",
"Save Draft": "Salva Bozza",
"Mark all as read": "Contrassegna tutti come letto",
"Mark all as read": "Contrassegna tutte come lette",
"Show Plain Text": "Visualizza testo normale",
"Mark as Important": "Contrassegna come Importante",
"Unmark Importance": "Deselezione come Importante",
@@ -102,7 +107,8 @@
"Folders": "Cartelle",
"View Users": "Visualizza utenti",
"No Subject": "Nessun Oggetto",
"Insert Field": "Inserisci Campo"
"Insert Field": "Inserisci Campo",
"Event": "Evento"
},
"messages": {
"testEmailSent": "L'email di prova è stata inviata",
@@ -112,7 +118,7 @@
"noSmtpSetup": "SMTP non configurato: {link}",
"sendConfirm": "Invia email?",
"removeSelectedRecordsConfirmation": "Sei sicuro di voler rimuovere le mail selezionate?\n\nSaranno rimosse anche per gli altri utenti.",
"removeRecordConfirmation": "Sei sicuro di voler rimuovere la mail selezionata?\n\nSara' rimossa anche per gli altri utenti."
"removeRecordConfirmation": "Sei sicuro di voler rimuovere la mail selezionata?\n\nSarà rimossa anche per gli altri utenti."
},
"presetFilters": {
"sent": "Inviato",

View File

@@ -46,6 +46,8 @@
},
"tooltips": {
"monitoredFolders": "Cartelle multiple devono essere separate dalla virgola.\n\nÈ possibile aggiungere una cartella \"Inviata\" per sincronizzare le email inviate da un client di posta elettronica esterno.",
"storeSentEmails": "Le e-mail inviate verranno archiviate sul server IMAP. Il campo Indirizzo e-mail deve corrispondere all'indirizzo da cui verranno inviate le e-mail."
"storeSentEmails": "Le e-mail inviate verranno archiviate sul server IMAP. Il campo Indirizzo e-mail deve corrispondere all'indirizzo da cui verranno inviate le e-mail.",
"useSmtp": "La possibilità di inviare email.",
"emailAddress": "Il record utente (utente assegnato) deve avere lo stesso indirizzo email per poter utilizzare questo account di posta elettronica per l'invio."
}
}

View File

@@ -5,7 +5,8 @@
"body": "Corpo",
"subject": "Oggetto",
"attachments": "Allegato",
"category": "Categoria"
"category": "Categoria",
"insertField": "Segnaposti"
},
"labels": {
"Create EmailTemplate": "Crea Modello email",
@@ -15,12 +16,16 @@
"oneOff": "Controllare se avete intenzione di utilizzare questo modello una sola volta. Per esempio. per Email Massive."
},
"presetFilters": {
"actual": "Attuale"
"actual": "Attivo"
},
"placeholderTexts": {
"optOutLink": "Un link di cancellazione dell'iscrizione",
"today": "Data odierna",
"now": "Data e ora attuali\n\n",
"currentYear": "Anno corrente"
"now": "Data e ora attuali",
"currentYear": "Anno corrente",
"optOutUrl": "URL per un link di disiscrizione"
},
"messages": {
"infoText": "placeholders disponibili:\n\n{optOutUrl} &#8211; URL per un link di disiscrizione;\n\n{optOutLink} &#8211; un link di disiscrizione."
}
}

View File

@@ -38,10 +38,10 @@
"options": {
"type": {
"": "Nessuno",
"Person": "Persone",
"Person": "Persona",
"CategoryTree": "Albero delle Categorie",
"Event": "Evento",
"Company": "Compagnia"
"Company": "Azienda"
},
"linkType": {
"manyToMany": "Molti-a-molti",
@@ -61,7 +61,7 @@
"entityCreated": "L'Entità è stata creata",
"linkAlreadyExists": "Nome del link in conflitto.",
"linkConflict": "Conflitto: link o campo con lo stesso nome già esistente",
"confirmRemove": "Sei sicuro di voler rimuovere questo tipo di entita' dal sistema?"
"confirmRemove": "Sei sicuro di voler rimuovere questo tipo di entità dal sistema?"
},
"tooltips": {
"statusField": "Gli aggiornamenti a questo campo verranno registrati nel flusso attività.",

View File

@@ -4,5 +4,9 @@
"exportAllFields": "Esporta tutti i campi",
"format": "Formato",
"status": "Stato"
},
"messages": {
"exportProcessed": "L'esportazione è stata elaborata. Scarica il [file]({url}).",
"infoText": "L'esportazione è in fase di elaborazione in idle da parte di cron. Può richiedere un po' di tempo per essere completata. La chiusura di questa finestra di dialogo non influirà sul processo di esecuzione."
}
}

View File

@@ -60,6 +60,12 @@
"javascript: return this.dateTime.getDateShiftedFromToday(10, 'months');": "+10 mesi",
"javascript: return this.dateTime.getDateShiftedFromToday(11, 'months');": "+11 mesi",
"javascript: return this.dateTime.getDateShiftedFromToday(1, 'year');": "+1 anno"
},
"globalRestrictions": {
"forbidden": "Vietato",
"internal": "Interno",
"onlyAdmin": "Solo Admin",
"readOnly": "Solo Lettura"
}
},
"tooltips": {
@@ -76,7 +82,16 @@
"readOnly": "Il valore del campo non può essere specificato dall'utente. Ma può essere calcolato da una formula.",
"maxFileSize": "Se vuoto o 0 allora nessun limite.",
"fileAccept": "Quali tipi di file accettare. È possibile aggiungere elementi personalizzati.",
"barcodeLastChar": "Per tipo EAN-13."
"barcodeLastChar": "Per tipo EAN-13.",
"conversionDisabled": "L'azione di conversione della valuta non verrà applicata a questo campo.",
"cutHeight": "Un testo maggiore di un valore specificato verrà troncato e verrà visualizzato il pulsante 'Mostra altro'.",
"urlStrip": "Rimuove il protocollo e lo slash finale.",
"pattern": "Un'espressione regolare per verificare il valore di un campo. Definire un'espressione o selezionarne una predefinita.",
"options": "Un elenco di possibili valori e delle rispettive etichette.",
"optionsArray": "Un elenco di possibili valori e delle rispettive etichette. Se vuoto, il campo consente di inserire valori personalizzati.",
"maxCount": "Numero massimo di elementi selezionabili.",
"displayAsList": "Ogni elemento è inserito in una nuova riga.",
"optionsVarchar": "Un elenco di valori per il completamento automatico."
},
"fieldParts": {
"address": {
@@ -90,7 +105,8 @@
"personName": {
"salutation": "Saluto",
"first": "Primo",
"last": "Ultimo"
"last": "Ultimo",
"middle": "Secondo Nome"
},
"currency": {
"converted": "(Convertito)",
@@ -102,8 +118,27 @@
},
"fieldInfo": {
"varchar": "Una singola linea di testo.",
"enum": "Selectbox, si può selezionare un solo valore.",
"text": "Un testo multilinea con supporto markdown.",
"date": "Data senza ora",
"datetime": "Data e ora",
"linkParent": "Un record collegato tramite una relazione Belongs-To-Parent. Puo' essere di tipi di entita' differenti."
"currency": "Un importo in valuta. Un numero float con un codice di valuta.",
"int": "Un numero intero.",
"float": "Un numero con una parte decimale.",
"bool": "Un checkbox. Due valori possibili: true e false.",
"multiEnum": "Un elenco di valori; è possibile selezionare più valori. L'elenco è ordinato.",
"checklist": "Un elenco di checkbox.",
"array": "Un elenco di valori, simile al campo Multi-Enum.",
"address": "Un indirizzo con via, città, regione, codice postale e nazione.",
"url": "Per la memorizzazione dei link.",
"wysiwyg": "Un testo con supporto HTML.",
"attachmentMultiple": "Consente il caricamento di più file.",
"number": "Un numero autoincrementante di tipo stringa con un possibile prefisso e una lunghezza specifica.",
"autoincrement": "Un numero intero di sola lettura e autoincrementante.",
"barcode": "Un codice a barre. Può essere stampato in PDF.",
"email": "Un insieme di indirizzi email con i relativi parametri: Opted-out, Invalido, Primario.",
"phone": "Un insieme di numeri di telefono con i relativi parametri: Tipo, Opted-out, Invalido, Primario.",
"foreign": "Campo di un record correlato. Di Sola Lettura.",
"linkParent": "Un record collegato tramite una relazione Belongs-To-Parent. Può essere di tipi di entità differenti."
}
}

View File

@@ -1,14 +1,21 @@
{
"labels": {
"Check Syntax": "Controlla Sintassi",
"Run": "Avvia"
},
"fields": {
"target": "Destinatario",
"targetType": "Tipo di Obiettivo",
"error": "Errore"
},
"messages": {
"runSuccess": "Eseguito con successo.",
"runError": "Errore",
"checkSyntaxSuccess": "La Sintassi è corretta",
"checkSyntaxError": "Errore di Sintassi"
"checkSyntaxError": "Errore di Sintassi",
"emptyScript": "Lo script è vuoto."
},
"tooltips": {
"output": "Mostra i risultati con la funzione `output\\printLine`."
}
}

View File

@@ -19,12 +19,12 @@
"Attachment": "Allegato",
"EmailFolder": "Casella Email",
"PortalUser": "Utente portale",
"ScheduledJobLogRecord": "Registro registro lavori pianificato",
"ScheduledJobLogRecord": "Registro lavoro pianificato",
"PasswordChangeRequest": "Richiesta di cambio password",
"ActionHistoryRecord": "Record di cronologia delle azioni",
"AuthToken": "Token di autenticazione",
"UniqueId": "ID univoco",
"LastViewed": "Ultima visualizzazione",
"LastViewed": "Ultima Visualizzazione",
"Settings": "Impostazioni",
"FieldManager": "Gestione campo",
"Integration": "Integrazione",
@@ -45,9 +45,11 @@
"ArrayValue": "Valore di matrice",
"ApiUser": "Utente API",
"DashboardTemplate": "Modello di dashboard",
"Currency": "Divisa",
"Currency": "Valuta",
"LayoutSet": "Layout",
"Mass Action": "Azione Massiva"
"Mass Action": "Azione Massiva",
"Note": "Nota",
"ImportError": "Errore di importazione"
},
"scopeNamesPlural": {
"Email": "Email",
@@ -69,14 +71,14 @@
"Attachment": "Allegato",
"EmailFolder": "Caselle Email",
"PortalUser": "Utenti portale",
"ScheduledJobLogRecord": "Record registro lavori pianificati",
"ScheduledJobLogRecord": "Record registro lavoro pianificato",
"PasswordChangeRequest": "Richiesta di cambio password",
"ActionHistoryRecord": "Storico azioni",
"AuthToken": "Tokens di autenticazione",
"UniqueId": "ID univoci",
"LastViewed": "Ultima visualizzazione",
"LastViewed": "Ultime Visualizzazioni",
"AuthLogRecord": "Auth log",
"AuthFailLogRecord": "Registro fallito autent",
"AuthFailLogRecord": "Registro Autenticazioni Fallite",
"EmailTemplateCategory": "Categorie Modeli Email",
"Import": "Importa",
"LeadCapture": "Cattura Lead",
@@ -86,8 +88,10 @@
"DashboardTemplate": "Modelli di dashboard",
"EmailAddress": "Indirizzo Email",
"PhoneNumber": "Telefono",
"Currency": "Divisa",
"LayoutSet": "Layout Set"
"Currency": "Valuta",
"LayoutSet": "Layout Set",
"Note": "Note",
"ImportError": "Errori di importazione"
},
"labels": {
"Misc": "Varie",
@@ -103,6 +107,7 @@
"Loading...": "Caricamento in corso...",
"Uploading...": "Caricamento...",
"Sending...": "Invio...",
"Merging...": "Unione in corso...",
"Merged": "Fusione",
"Removed": "Rimosso",
"Posted": "Postato",
@@ -115,13 +120,13 @@
"Are you sure?": "Sei sicuro?",
"Record has been removed": "Il record è stato rimosso",
"Wrong username/password": "I dati forniti non sono corretti",
"Post cannot be empty": "Il Post puo' essere vuoto",
"Removing...": "Cancellazione...",
"Post cannot be empty": "Il post non può essere vuoto",
"Removing...": "Rimozione...",
"Unlinking...": "Disconnessione...",
"Username can not be empty!": "L'Username non può essere vuota!",
"Cache is not enabled": "Cache non abilitata",
"Cache has been cleared": "Cache gia' liberata",
"Rebuild has been done": "Rebuild gia' concluso",
"Cache has been cleared": "La cache è stata svuotata",
"Rebuild has been done": "Ricostruzione effettuata",
"Saving...": "Salvataggio...",
"Modified": "Modificato",
"Created": "Creato",
@@ -131,28 +136,31 @@
"Details": "Dettagli",
"Add Field": "Aggiungi Campo",
"Add Dashlet": "Aggiungi Dashlet",
"Filter": "Filtro",
"Edit Dashboard": "Modifica Dashboard",
"Add": "Aggiungi",
"Add Item": "Aggiungi articolo",
"More": "Altro",
"Search": "Cerca",
"Only My": "Solo il mio",
"Only My": "Solo i miei",
"Open": "Aperto",
"Admin": "Admministratore",
"About": "A riguardo",
"Refresh": "Ricarica",
"Remove": "Elimina",
"Options": "Opzioni",
"Log Out": "Esci",
"Preferences": "Preferenze",
"State": "Provincia",
"Street": "Via",
"Country": "Nazione",
"City": "Citta'",
"PostalCode": "Codici Postale",
"City": "Città",
"PostalCode": "Codice Postale",
"Followed": "Segui",
"Follow": "Segui",
"Clear Local Cache": "Cancella la cache locale",
"Clear Local Cache": "Svuota La Cache Locale",
"Actions": "Azioni",
"Delete": "Cancellare",
"Delete": "Elimina",
"Update": "Aggiorna",
"Save": "Salva",
"Edit": "Modifica",
@@ -168,12 +176,13 @@
"Active": "Attivo",
"Inactive": "Inattivo",
"Write your comment here": "Scrivi il tuo commento qui",
"Post": "Pubblica",
"Stream": "Flusso attività",
"Show more": "Mostra altro",
"Dashlet Options": "Opzioni dashlet",
"Full Form": "Modulo completo",
"Insert": "Inserisci",
"Person": "Persone",
"Person": "Persona",
"First Name": "Nome",
"Last Name": "Cognome",
"Original": "Originale",
@@ -182,19 +191,19 @@
"change": "modifica",
"Change": "Modifica",
"Primary": "Primario",
"Save Filter": "Salva filtro",
"Save Filter": "Salva Filtro",
"Administration": "Amministrazione",
"Run Import": "Avvia importazione",
"Duplicate": "Duplicato",
"Duplicate": "Duplica",
"Notifications": "Notifiche",
"Mark all read": "Contrassegna tutti come letto",
"Mark all read": "Contrassegna tutte come lette",
"See more": "Vedi altro",
"Today": "Oggi",
"Tomorrow": "Domani",
"Yesterday": "Ieri",
"Submit": "Invio",
"Close": "Chiudi",
"Yes": "Si",
"Yes": "Sì",
"Value": "Valore",
"Current version": "Versione in uso",
"List View": "Vista elenco",
@@ -206,8 +215,8 @@
"From": "Da",
"To": "A",
"Create Post": "Crea Post",
"Previous Entry": "Anteprima Accesso",
"Next Entry": "Prossimo accesso",
"Previous Entry": "Voce Precedente",
"Next Entry": "Voce Successiva",
"View List": "Visualizza elenco",
"Attach File": "Allega File",
"Skip": "Salta",
@@ -230,13 +239,17 @@
"Restore": "Ripristina",
"View Followers": "Visualizza follower",
"Convert Currency": "Converti valuta",
"Middle Name": "Secondo Nome",
"View on Map": "Vedi su Mappa",
"Attached": "Allegato",
"Preview": "Anteprima",
"Save & Continue Editing": "Salva e continua a modificare",
"Save & New": "Salva & Nuovo",
"Field": "Campo",
"Resolution": "Risoluzione"
"Resolution": "Risoluzione",
"Resolve Conflict": "Risolvere i conflitti",
"Sort": "Ordina",
"Global Search": "Ricerca Globale"
},
"messages": {
"pleaseWait": "Attendere...",
@@ -300,11 +313,28 @@
"fieldExceedsMaxCount": "Il conteggio supera il massimo consentito {maxCount}",
"notUpdated": "Non aggiornato",
"maintenanceMode": "L'applicazione è attualmente in modalità manutenzione. Solo gli utenti amministratori hanno accesso.\n\nLa modalità di manutenzione può essere disabilitata in Amministrazione → Impostazioni.",
"fieldInvalid": "{field} non è valido"
"fieldInvalid": "{field} non è valido",
"resolveSaveConflict": "Il record è stato modificato. È necessario risolvere il conflitto prima di poter salvare il record.",
"massActionProcessed": "L'azione di massa è stata elaborata.",
"fieldUrlExceedsMaxLength": "L'URL codificato supera la lunghezza massima di {maxLength}",
"fieldNotMatchingPattern": "{field} non corrisponde al pattern `{pattern}`",
"fieldNotMatchingPattern$noBadCharacters": "{field} contiene caratteri non ammessi",
"fieldNotMatchingPattern$noAsciiSpecialCharacters": "{field} non dovrebbe contenere caratteri speciali ASCII",
"fieldNotMatchingPattern$latinLetters": "{field} può contenere solo lettere latine",
"fieldNotMatchingPattern$latinLettersDigits": "{field} può contenere solo lettere latine e numeri.",
"fieldNotMatchingPattern$latinLettersDigitsWhitespace": "{field} può contenere solo lettere latine, numeri e spazi vuoti",
"fieldNotMatchingPattern$latinLettersWhitespace": "{field} può contenere solo lettere latine e spazi vuoti",
"fieldNotMatchingPattern$digits": "{field} può contenere solo numeri",
"fieldPhoneInvalidCharacters": "Sono consentite solo numeri, lettere latine e caratteri `-+_@:#().`.",
"arrayItemMaxLength": "L'elemento non dovrebbe essere più lungo di {max} caratteri",
"validationFailure": "Errore di convalida nel backend.\n\nCampo: `{field}`\nConvalida: `{type}`",
"confirmAppRefresh": "L'applicazione è stata aggiornata. Si consiglia di aggiornare la pagina per garantirne il corretto funzionamento.",
"error404": "L'url richiesto non può essere elaborato.",
"error403": "Non hai l'accesso a quest'area."
},
"boolFilters": {
"onlyMy": "Solo il mio",
"followed": "Seguito",
"onlyMy": "Solo i miei",
"followed": "Seguiti",
"onlyMyTeam": "My team"
},
"presetFilters": {
@@ -355,7 +385,8 @@
"targetListIsOptedOut": "È stato cancellato (lista target)",
"type": "Tipo",
"phoneNumberIsOptedOut": "Il numero di telefono è Opted-Ou",
"types": "Modello"
"types": "Modello",
"middleName": "Secondo Nome"
},
"links": {
"assignedUser": "Utente assegnato",
@@ -377,12 +408,12 @@
"entityRemoved": "{user} Ha rimosso {entityType} {entity}"
},
"streamMessages": {
"post": "{user} Ha pubblicato {entityType} {entity}",
"post": "{user} ha scritto {entityType} {entity}",
"attach": "{user} Ha allegato a {entityType} {entity}",
"status": "{user} Ha aggiornato {field} di {entityType} {entity}",
"update": "{user} Ha aggiornato {entityType} {entity}",
"postTargetTeam": "{user} Ha pubblicato al team {target}",
"postTargetTeams": "{user} Ha pubblicato ai team {target}",
"status": "{user} ha aggiornato {field} di {entityType} {entity}",
"update": "{user} ha aggiornato {entityType} {entity}",
"postTargetTeam": "{user} ha scritto al team {target}",
"postTargetTeams": "{user} ha scritto ai team {target}",
"postTargetPortal": "{user} Ha postato sul portale {target}",
"postTargetPortals": "{user} Ha postato sui portali {target}",
"postTarget": "{user} Ha postato a {target}",
@@ -395,20 +426,20 @@
"mentionYouInPostTarget": "{user} Ti ha menzionato in un post riguardante {target}",
"mentionYouInPostTargetAll": "{user} Ti ha menzionato in un post visibile a tutti",
"mentionYouInPostTargetNoTarget": "{user} Ti ha menzionato in un post",
"create": "{user} Creato {entityType} {entity}",
"createThis": "{user} Ha creato {entityType}",
"createAssignedThis": "{user} Ha creato {entity} assegnandolo a {assignee}",
"createAssigned": "{user} Ha creato {entityType} {entity} assegnato a {assignee}",
"create": "{user} ha creato {entityType} {entity}",
"createThis": "{user} ha creato {entityType}",
"createAssignedThis": "{user} ha creato {entityType} assegnandolo a {assignee}",
"createAssigned": "{user} ha creato {entityType} {entity} assegnato a {assignee}",
"assign": "{user} Ha assegnato {entityType} {entity} a {assignee}",
"assignThis": "{user} Ha assegnato {entityType} a {assignee}",
"postThis": "{user} Pubblicato",
"postThis": "{user} ha scritto",
"attachThis": "{user} Ha allegato",
"statusThis": "{user} Ha aggiornato {field}",
"updateThis": "{user} Ha aggiornato {entityType}",
"createRelatedThis": "{user} Ha creato {relatedEntityType} {relatedEntity} correlato al {entityType}",
"createRelated": "{user} Ha creato {relatedEntityType} {relatedEntity} correlato al {entityType} {entity}",
"relate": "{user} Si è collegato a {relatedEntityType} {relatedEntity} con {entityType} {entity}",
"relateThis": "{user} Si è collegato a {relatedEntityType} {relatedEntity} con {entityType}",
"statusThis": "{user} ha aggiornato {field}",
"updateThis": "{user} ha aggiornato {entityType}",
"createRelatedThis": "{user} ha creato {relatedEntityType} {relatedEntity} correlato al {entityType}",
"createRelated": "{user} ha creato {relatedEntityType} {relatedEntity} correlato al {entityType} {entity}",
"relate": "{user} si è collegato a {relatedEntityType} {relatedEntity} con {entityType} {entity}",
"relateThis": "{user} si è collegato a {relatedEntityType} {relatedEntity} con {entityType}",
"emailReceivedFromThis": "Email ricevuta da {from}",
"emailReceivedInitialFromThis": "Email ricevuta da {from}, {entityType} è stato creato",
"emailReceivedThis": "Email ricevuta",
@@ -418,13 +449,13 @@
"emailReceivedInitialFrom": "Email ricevuta da {from}, {entityType} {entity} creata",
"emailReceived": "Email ricevute in relazione a {entityType} {entity}",
"emailReceivedInitial": "Email ricevuta: {entityType} {entity} creato",
"emailSent": "{by} Email inviata relativa a {entityType} {entity}",
"emailSentThis": "{by} Email inviata",
"postTargetSelf": "{user} Auto-pubblicato",
"postTargetSelfAndOthers": "{user} Ha pubblicato a {target}",
"createAssignedYou": "{user} Ha creato {entityType} {entity} e lo ha assegnato a te",
"createAssignedThisSelf": "{user} Ha creato questo {entityType} e lo ha auto-assegnato",
"createAssignedSelf": "{user} Ha creato {entityType} {entity} e lo ha auto-assegnato",
"emailSent": "{by} ha inviato un'email relativa a {entityType} {entity}",
"emailSentThis": "{by} ha inviato un'email",
"postTargetSelf": "{user} si è autopubblicato",
"postTargetSelfAndOthers": "{user} ha scritto su {target} e a se stesso",
"createAssignedYou": "{user} ha creato {entityType} {entity} e lo ha assegnato a te",
"createAssignedThisSelf": "{user} ha creato questo {entityType} e lo ha auto-assegnato",
"createAssignedSelf": "{user} ha creato {entityType} {entity} e lo ha auto-assegnato",
"assignYou": "{user} Ha assegnato {entityType} {entity} a te",
"assignThisVoid": "{user} Ha revocato questo {entityType}",
"assignVoid": "{user} Ha revocato {entityType} {entity}",
@@ -496,16 +527,17 @@
"before": "Prima",
"between": "Fra",
"today": "Oggi",
"past": "Passato",
"future": "Futuro",
"currentMonth": "Mese in corso",
"lastMonth": "Ultimo mese",
"currentQuarter": "Trimestre in corso",
"lastQuarter": "Ultimo trimestre",
"currentYear": "Anno in corso",
"lastYear": "Ultimo anno",
"lastSevenDays": "Ultimi 7 giorni",
"lastXDays": "Ultimi X giorni",
"nextXDays": "Successivi X giorni",
"currentMonth": "Mese Corrente",
"lastMonth": "Ultimo Mese",
"currentQuarter": "Trimestre in Corso",
"lastQuarter": "Ultimo Trimestre",
"currentYear": "Anno in Corso",
"lastYear": "Ultimo Anno",
"lastSevenDays": "Ultimi 7 Giorni",
"lastXDays": "Ultimi X Giorni",
"nextXDays": "Successivi X Giorni",
"ever": "Mai",
"isEmpty": "Vuoto",
"olderThanXDays": "Più vecchio di X giorni",
@@ -513,7 +545,7 @@
"nextMonth": "Prossimo mese",
"currentFiscalYear": "Anno fiscale corrente",
"lastFiscalYear": "L'ultimo anno fiscale",
"currentFiscalQuarter": "Attuale trimestre fiscale",
"currentFiscalQuarter": "Trimestre fiscale In Corso",
"lastFiscalQuarter": "Ultimo trimestre fiscale\n"
},
"searchRanges": {
@@ -546,8 +578,8 @@
"notEquals": "Diverso",
"greaterThan": "Maggiore di",
"lessThan": "Minore di",
"greaterThanOrEquals": "Maggiore-uguale a ",
"lessThanOrEquals": "Minore di o uguale a",
"greaterThanOrEquals": "Maggiore di o Uguale a",
"lessThanOrEquals": "Minore di o Uguale a",
"between": "Fra",
"isEmpty": "È vuoto",
"isNotEmpty": "Non vuoto"
@@ -671,5 +703,25 @@
},
"listViewModes": {
"list": "Lista"
},
"themes": {
"Dark": "Scuro",
"Violet": "Violetto",
"Hazyblue": "Blu Nebuloso",
"Glass": "Vetro"
},
"themeNavbars": {
"side": "Navbar Verticale",
"top": "Navbar Orizzontale"
},
"fieldValidations": {
"required": "Richiesto",
"maxLength": "Lunghezza Massima",
"emailAddress": "Indirizzo Email Valido",
"phoneNumber": "Numero di Telefono Valido",
"arrayOfString": "Array di Stringhe",
"valid": "Valido",
"max": "Valore Max",
"min": "Valore Min"
}
}

View File

@@ -13,11 +13,11 @@
"Show records": "Mostra i record",
"Remove Duplicates": "Rimuovi duplicati",
"importedCount": "Importato (count)",
"duplicateCount": "Duplicato (count)",
"duplicateCount": "Duplicati (count)",
"updatedCount": "Aggiornato (conteggio)",
"Create Only": "Crea Solo",
"Create Only": "Crea Solamente",
"Create and Update": "Crea & Aggiorna",
"Update Only": "Aggiorna solo",
"Update Only": "Aggiorna solamente",
"Update by": "Aggiorna da",
"Set as Not Duplicate": "Imposta come non duplicati",
"First Row Value": "Primo valore di riga",
@@ -49,7 +49,8 @@
"Import Results": "Risultati Importazioni",
"Silent Mode": "Modalità silenziosa",
"New import with same params": "Nuovo import con gli stessi parametri",
"Run Manually": "Avvia Manualmente"
"Run Manually": "Avvia Manualmente",
"Export": "Esporta"
},
"messages": {
"utf8": "Dovrebbe avere codifica UTF-8",
@@ -60,7 +61,8 @@
"confirmRevert": "Questa operazione rimuoverà tutti i record importati definitivamente. Sei sicuro?",
"confirmRemoveDuplicates": "Questo rimuoverà permanentemente tutti i record importati che sono stati riconosciuti come duplicati. Sei sicuro?",
"removeImportLog": "Questo rimuoverà il registro di importazione. Tutti i record importati verranno mantenuti. Usalo se sei sicuro che l'importazione va bene.",
"confirmRemoveImportLog": "Cosi' facendo rimuoverai il log di importazione. Tutti i record importati rimarranno a sistema. Non sarai in grado di ripristinare i risultati di importazione. Sei sicuro?"
"confirmRemoveImportLog": "Così facendo rimuoverai il log di importazione. Tutti i record importati rimarranno a sistema. Non sarai in grado di ripristinare i risultati di importazione. Sei sicuro?",
"noErrors": "Nessun errore."
},
"fields": {
"entityType": "Tipo di entità",
@@ -78,11 +80,20 @@
"personNameFormat": {
"f l": "Nome",
"l f": "Cognome",
"f m l": "Nome Secondo Nome Cognome",
"l f m": "Cognome Nome Secondo Nome",
"l, f": "Cognome, Nome"
}
},
"strings": {
"commandToRun": "Comando da eseguire (da CLI)",
"saveAsDefault": "Salva come predefinito"
},
"tooltips": {
"manualMode": "Se questa opzione è selezionata, sarà necessario eseguire l'importazione manualmente da CLI. Il comando verrà mostrato dopo aver impostato l'importazione.",
"silentMode": "La maggior parte degli script after-save verrà saltata, le note dello stream non verranno create. L'importazione sarà più veloce."
},
"links": {
"errors": "Errori"
}
}

View File

@@ -1 +1,16 @@
{}
{
"fields": {
"type": "Tipo",
"import": "Importa",
"lineNumber": "Linea Numero",
"exportLineNumber": "Numero della linea di esportazione",
"row": "Riga"
},
"options": {
"type": {
"Validation": "Convalida",
"Access": "Accesso",
"Not-Found": "Non Trovato"
}
}
}

View File

@@ -48,7 +48,8 @@
"monitoredFolders": "Se più cartelle, devono essere separate da virgola",
"smtpIsShared": "Se selezionato, gli utenti saranno in grado di inviare e-mail utilizzando questo SMTP. La disponibilità è controllata dai ruoli tramite l'autorizzazione dell'account e-mail di gruppo.",
"smtpIsForMassEmail": "Se selezionato, SMTP sarà disponibile per l'e-mail di massa.",
"storeSentEmails": "Le email inviate saranno memorizzate sul server IMAP"
"storeSentEmails": "Le email inviate saranno memorizzate sul server IMAP",
"useSmtp": "La possibilità di inviare email."
},
"links": {
"filters": "Filtri",
@@ -72,7 +73,8 @@
},
"labels": {
"Create InboundEmail": "Crea un Account Email",
"Actions": "Azioni"
"Actions": "Azioni",
"Main": "Principale"
},
"messages": {
"couldNotConnectToImap": "Impossibile connettersi al server IMAP"

View File

@@ -1,22 +1,23 @@
{
"fields": {
"status": "Stato",
"executeTime": "Esegui a",
"executeTime": "Esegui il",
"attempts": "Tentativi rimasti",
"failedAttempts": "Tentativo fallito",
"failedAttempts": "Tentativi falliti",
"serviceName": "Servizio",
"methodName": "Metodo",
"scheduledJob": "Lavoro programmato",
"method": "Metodo",
"scheduledJobJob": "Nome lavoro programmato",
"executedAt": "Eseguito a",
"executedAt": "Eseguito il",
"startedAt": "Iniziato alle",
"targetType": "Tipo di obiettivo",
"targetType": "Tipo di Obiettivo",
"targetId": "ID target",
"number": "Numero",
"queue": "Coda",
"job": "Lavoro",
"group": "Gruppo"
"group": "Gruppo",
"className": "Nome Classe"
},
"options": {
"status": {

View File

@@ -8,7 +8,12 @@
"sticked": "Fissato",
"isLarge": "Misura carattere grande",
"dynamicLogicVisible": "Condizioni che rendono visibile il pannello",
"hidden": "Nascosto"
"hidden": "Nascosto",
"dynamicLogicStyled": "Condizioni che applicano lo stile.",
"widthPx": "Larghezza (px)",
"noLabel": "Nessuna Etichetta",
"tabLabel": "Etichetta Scheda",
"tabBreak": "Interruzione Scheda"
},
"options": {
"align": {
@@ -28,6 +33,18 @@
},
"tooltips": {
"link": "Se selezionato, verrà visualizzato un valore di campo come collegamento che punta alla vista di dettaglio del record. Di solito è usato per i campi *Nome*.",
"panelStyle": "Un colore per il pannello"
"hiddenPanel": "È necessario fare clic su \"Mostra altro\" per visualizzare il pannello.",
"sticked": "Il pannello sarà attaccato a quello sovrastante. Non ci saranno spazi tra i pannelli.",
"panelStyle": "Un colore per il pannello",
"dynamicLogicVisible": "Se impostato, il pannello sarà nascosto a meno che la condizione non sia soddisfatta.",
"dynamicLogicStyled": "Un colore verrà applicato se viene soddisfatta una condizione specifica. Il colore è definito dal parametro *Stile*.",
"tabBreak": "Una scheda separata per il pannello e per tutti i pannelli successivi fino alla successiva interruzione di scheda.",
"notSortable": "Disabilita la possibilità di ordinare per colonna.",
"width": "Larghezza della colonna in percentuale. Si consiglia di avere una colonna con la larghezza non impostata, di solito è il campo *Nome*.",
"widthPx": "Larghezza della colonna in pixel. Ha effetto solo se il valore (%) non è impostato. Rende fissa la larghezza della colonna."
},
"messages": {
"cantBeEmpty": "Il layout non può essere vuoto.",
"fieldsIncompatible": "I campi non possono essere presenti contemporaneamente nel layout: {fields}."
}
}

View File

@@ -1,5 +1,9 @@
{
"fields": {
"layoutList": "Layout"
},
"labels": {
"Create LayoutSet": "Crea gruppo di layout",
"Edit Layouts": "Modifica i layout"
}
}

View File

@@ -8,5 +8,8 @@
"Running": "In esecuzione",
"Failed": "Fallito"
}
},
"messages": {
"infoText": "L'azione di massa è in fase di elaborazione in idle da parte di cron. Può richiedere del tempo per essere completata. La chiusura di questa finestra di dialogo non influirà sul processo di esecuzione."
}
}

View File

@@ -1,6 +1,5 @@
{
"fields": {
"post": "Posta",
"attachments": "Allegato",
"users": "Utenti",
"portals": "Portali",

View File

@@ -24,7 +24,8 @@
"layoutSet": "Layout"
},
"tooltips": {
"portalRoles": "I Ruoli specificati verranno applicati a tutti gli utenti di questo portale ."
"portalRoles": "I Ruoli specificati verranno applicati a tutti gli utenti di questo portale .",
"layoutSet": "Fornisce la possibilità di avere layout diversi da quelli standard."
},
"labels": {
"Create Portal": "Crea Portale",

View File

@@ -9,7 +9,7 @@
"Field Level": "Livello del campo"
},
"fields": {
"exportPermission": "Esporta permessi",
"exportPermission": "Permessi di Esportazione",
"massUpdatePermission": "Autorizzazione per l'aggiornamento di massa"
},
"tooltips": {

View File

@@ -2,13 +2,14 @@
"fields": {
"name": "Nome",
"roles": "Ruoli",
"assignmentPermission": "Assegnazione permessi",
"assignmentPermission": "Permessi di Assegnazione",
"userPermission": "Autorizzazioni utente",
"portalPermission": "Autorizzazione portale",
"groupEmailAccountPermission": "Permesso account email di gruppo",
"exportPermission": "Esporta permessi",
"exportPermission": "Permessi di Esportazione",
"dataPrivacyPermission": "Autorizzazione privacy dati",
"massUpdatePermission": "Autorizzazione per l'aggiornamento di massa"
"massUpdatePermission": "Autorizzazione per l'aggiornamento di massa",
"followerManagementPermission": "Permessi di Gestione dei Follower"
},
"links": {
"users": "Utenti"
@@ -20,7 +21,8 @@
"groupEmailAccountPermission": "Definisce un accesso agli account di posta elettronica di gruppo, una possibilità di inviare e-mail dal gruppo SMTP.",
"dataPrivacyPermission": "Consente di visualizzare e cancellare i dati personali.",
"exportPermission": "Definisce se gli utenti hanno la possibilità di esportare record.",
"massUpdatePermission": "Definisce se gli utenti hanno la possibilità di eseguire aggiornamenti di massa dei record."
"massUpdatePermission": "Definisce se gli utenti hanno la possibilità di eseguire aggiornamenti di massa dei record.",
"followerManagementPermission": "Permette di gestire i follower dei record."
},
"labels": {
"Access": "Accesso",
@@ -38,7 +40,7 @@
"all": "Tutti",
"contact": "Contatto",
"own": "proprio",
"yes": "Si",
"yes": "Sì",
"not-set": "Non impostato"
}
},

View File

@@ -6,7 +6,7 @@
},
"labels": {
"Create ScheduledJob": "Crea un Job schedulato",
"As often as possible": "Il piu' spesso possibile"
"As often as possible": "Il più spesso possibile"
},
"options": {
"job": {

View File

@@ -27,7 +27,7 @@
"tabList": "Elenco schede",
"quickCreateList": "Elenco creazione rapida",
"exportDelimiter": "Delimitatore esportazione",
"globalSearchEntityList": "Ricerca globale entità - elenco",
"globalSearchEntityList": "Elenco Entità Ricerca Globale",
"authenticationMethod": "Metodo di autenticazione",
"ldapAccountCanonicalForm": "Account Form",
"ldapAccountDomainName": "Account Nome di Dominio",
@@ -38,7 +38,7 @@
"ldapOptReferrals": "Scegliere rinvii",
"exportDisabled": "Disabilita esporta (sarà consentito solo all'admin)",
"b2cMode": "Modalità B2C",
"avatarsDisabled": "Disabilita avatars",
"avatarsDisabled": "Disabilita avatar",
"displayListViewRecordCount": "Mostra totale trovati (in vista elenco)",
"theme": "Tema",
"userThemesDisabled": "Disabilita scelta tema agli utenti",
@@ -67,11 +67,11 @@
"assignmentNotificationsEntityList": "Entità da notificare al momento dell'assegnazione",
"assignmentEmailNotifications": "Notifiche al momento dell'assegnazione.",
"assignmentEmailNotificationsEntityList": "Ambiti di notifica assegnazione email",
"streamEmailNotifications": "Notifica gli aggiornamenti nel flusso attività per gli utenti interni",
"portalStreamEmailNotifications": "Notifica gli aggiornamenti nel flusso attività per gli utenti del portale",
"streamEmailNotificationsEntityList": "Notifiche email flusso scopi",
"streamEmailNotifications": "Notifiche sugli aggiornamenti nello Stream per gli utenti interni",
"portalStreamEmailNotifications": "Notifiche sugli aggiornamenti nello Stream per gli utenti del portale",
"streamEmailNotificationsEntityList": "Scopi Notifiche Email Flusso Attività",
"calendarEntityList": "Elenco calendario delle entità",
"mentionEmailNotifications": "Notifica via email in caso di menzioni nei posts",
"mentionEmailNotifications": "Notifica via email in caso di menzioni nei post",
"massEmailDisableMandatoryOptOutLink": "Disabilita il link obbligatorio di cancellazione dell'iscrizione",
"activitiesEntityList": "Elenco attività delle entità",
"historyEntityList": "Elenco storico delle entità",
@@ -80,7 +80,7 @@
"followCreatedEntities": "Segui i record creati",
"aclAllowDeleteCreated": "Consenti di rimuovere i record creati\n",
"adminNotifications": "Notifiche di sistema nel pannello di amministrazione",
"adminNotificationsNewVersion": "Mostra notifica quando è disponibile la nuova versione di EspoCRM",
"adminNotificationsNewVersion": "Mostra una notifica quando è disponibile una nuova versione di EspoCRM",
"massEmailMaxPerHourCount": "Numero massimo di messaggi di posta elettronica inviati per ora.",
"maxEmailAccountCount": "Numero massimo di account email personali per utente",
"streamEmailNotificationsTypeList": "Cosa notificare",
@@ -91,21 +91,21 @@
"textFilterUseContainsForVarchar": "Utilizza l'operatore ' Contains ' quando si filtrano i campi varchar",
"emailAddressIsOptedOutByDefault": "Contrassegni i nuovi indirizzi del email come cancellati dall'iscrizione",
"outboundEmailBccAddress": "CCN indirizzi per client esterni",
"adminNotificationsNewExtensionVersion": "Mostra notifica quando sono disponibili nuove versioni di estensioni",
"adminNotificationsNewExtensionVersion": "Mostra una notifica quando sono disponibili nuove versioni delle estensioni",
"cleanupDeletedRecords": "Pulisci i record eliminati",
"ldapPortalUserLdapAuth": "Utilizza l'autenticazione LDAP per gli utenti del portale",
"ldapPortalUserPortals": "Portali predefiniti per un utente del portale",
"ldapPortalUserRoles": "Ruoli predefiniti per un utente del portale\n",
"addressCountryList": "Elenco paese completamento automatico elenco",
"addressCountryList": "Elenco Paesi Completamento Automatico",
"fiscalYearShift": "Inizio dell'anno fiscale\n",
"jobRunInParallel": "I lavori vengono eseguiti in parallelo",
"jobRunInParallel": "Lavori Eseguiti in Parallelo",
"jobMaxPortion": "Porzione massima di lavori",
"jobPoolConcurrencyNumber": "Numero di concorrenza del pool di lavori",
"daemonInterval": "Intervallo Daemon",
"daemonMaxProcessNumber": "Numero massimo di processi Daemon",
"daemonProcessTimeout": "Timeout Processo Daemon",
"addressCityList": "Elenco di completamento automatico della città dell'indirizzo",
"addressStateList": "Elenco stato completamento indirizzo automatico",
"addressCityList": "Elenco Città Completamento Automatico",
"addressStateList": "Elenco Province Completamento Automatico",
"cronDisabled": "Disabilita cron",
"maintenanceMode": "Modalità manutenzione",
"useWebSocket": "Usa WebSocket",
@@ -121,8 +121,16 @@
"auth2FA": "Abilita autenticazione a 2 fattori",
"auth2FAMethodList": "Metodi 2FA disponibili\n",
"personNameFormat": "Formato nome persona",
"newNotificationCountInTitle": "Visualizza il numero delle nuove notifiche nel titolo della pagina",
"massEmailVerp": "Usa VERP",
"smsProvider": "Provider SMS"
"passwordRecoveryForInternalUsersDisabled": "Disabilita il recupero della password per gli utenti interni",
"passwordRecoveryNoExposure": "Evita l'esposizione dell'indirizzo email nel modulo di recupero della password",
"auth2FAForced": "Forza gli utenti normali a impostare la 2FA",
"smsProvider": "Provider SMS",
"outboundSmsFromNumber": "SMS Dal Numero",
"recordsPerPageSelect": "Elementi per pagina (Selezione)",
"attachmentUploadMaxSize": "Dimensione Massima di Upload (Mb)",
"attachmentUploadChunkSize": "Dimensione del blocco di Upload (Mb)"
},
"tooltips": {
"recordsPerPage": "Numero di records inizialmente mostrati in vista elenco .",
@@ -157,7 +165,7 @@
"outboundEmailIsShared": "Consenti agli utenti di inviare e-mail da questo indirizzo.\n",
"aclAllowDeleteCreated": "Gli utenti saranno in grado di rimuovere i record che hanno creato anche se non dispongono dell'accesso all'eliminazione.",
"textFilterUseContainsForVarchar": "Se non selezionata, viene utilizzato l'operatore ' inizia con '. È possibile utilizzare il carattere jolly '%'.",
"streamEmailNotificationsEntityList": "Notifiche e-mail sugli aggiornamenti di flusso dei record seguiti. Gli utenti riceveranno notifiche e-mail solo per i tipi di entità specificati.",
"streamEmailNotificationsEntityList": "Notifiche via Email sugli aggiornamenti del flusso attività dei record seguiti. Gli utenti riceveranno notifiche via e-mail solo per i tipi di entità specificati.",
"authTokenPreventConcurrent": "Gli utenti non potranno essere collegati simultaneamente su più dispositivi.",
"emailAddressIsOptedOutByDefault": "Quando si crea un nuovo record di email addess sarà contrassegnato come opt-out.",
"cleanupDeletedRecords": "I record rimossi verranno eliminati dal database dopo un po' di tempo.",
@@ -167,13 +175,34 @@
"jobRunInParallel": "I lavori verranno eseguiti in processi paralleli.",
"jobPoolConcurrencyNumber": "Numero massimo di processi eseguiti contemporaneamente.",
"jobMaxPortion": "Numero massimo di lavori elaborati per una esecuzione.",
"daemonInterval": "Intervallo tra process cron viene eseguito in secondi.",
"daemonInterval": "Intervallo tra le esecuzioni del processo cron, in secondi.",
"daemonMaxProcessNumber": "Numero massimo di processi cron eseguiti contemporaneamente.",
"daemonProcessTimeout": "Tempo di esecuzione massimo (in secondi) allocato per un singolo processo cron",
"cronDisabled": "Cron non funzionerà.",
"maintenanceMode": "Solo gli amministratori avranno accesso al sistema.",
"ldapAccountCanonicalForm": "Il tipo di modulo canonico del tuo account. Ci sono 4 opzioni:\n\n- \"Dn\": il modulo nel formato \"CN = tester, OU = espocrm, DC = test, DC = lan\".\n\n- \"Nome utente\": il modulo \"tester\".\n\n- \"Barra rovesciata\": il modulo \"AZIENDA \\ tester\".\n\n- \"Principal\": il modulo \"tester@company.com\".",
"useWebSocket": "WebSocket permette una comunicazione interattiva bidirezionale tra un server e un browser. Richiede la configurazione del daemon WebSocket sul tuo server. Controlla la documentazione per maggiori informazioni."
"massEmailVerp": "Variable envelope Return Path. Per una migliore gestione dei messaggi respinti. Assicurarsi che il proprio provider SMTP lo supporti.",
"displayListViewRecordCount": "Il numero totale di record sarà visualizzato nella vista elenco.",
"currencyList": "Quali valute saranno disponibili nel sistema.",
"activitiesEntityList": "Quali record saranno disponibili nel pannello Attività.",
"historyEntityList": "Quali record saranno disponibili nel pannello Storico.",
"calendarEntityList": "Quali record saranno disponibili nel Calendario.",
"addressStateList": "Suggerimenti di Stato per i campi degli indirizzi.",
"addressCityList": "Suggerimenti per le città per i campi degli indirizzi.",
"addressCountryList": "Suggerimenti per i Paesi per i campi degli indirizzi.",
"exportDisabled": "Gli utenti non saranno in grado di esportare i record. Solo gli amministratori potranno farlo.",
"globalSearchEntityList": "Quali record si possono ricercare con la Ricerca globale.",
"siteUrl": "L'URL di quest'istanza di EspoCRM. È necessario cambiarlo nel caso in cui ci si sposti su un altro dominio.",
"useCache": "Non è consigliabile disabilitarlo, a meno che non sia per scopi di sviluppo.",
"useWebSocket": "WebSocket permette una comunicazione interattiva bidirezionale tra un server e un browser. Richiede la configurazione del daemon WebSocket sul tuo server. Controlla la documentazione per maggiori informazioni.",
"passwordRecoveryForInternalUsersDisabled": "Solo gli utenti dei portali potranno recuperare la password.",
"passwordRecoveryNoExposure": "Non sarà possibile determinare se uno specifico indirizzo email è registrato nel sistema.",
"emailAddressLookupEntityTypeList": "Per il riempimento automatico degli indirizzi e-mail.",
"emailNotificationsDelay": "Un messaggio può essere modificato entro l'intervallo di tempo specificato prima dell'invio della notifica.",
"outboundEmailFromAddress": "L'indirizzo email del sistema.",
"smtpServer": "Se vuoto, verrà utilizzato l'account e-mail di gruppo con l'indirizzo email corrispondente.",
"busyRangesEntityList": "Cosa viene preso in considerazione quando vengono mostrati gli intervalli di tempo occupati nello scheduler e nella timeline.",
"recordsPerPageSelect": "Numero di record visualizzati inizialmente quando si selezionano i record."
},
"labels": {
"System": "Sistema",
@@ -181,16 +210,17 @@
"In-app Notifications": "Notifiche In-app",
"Email Notifications": "Notifiche Email",
"Currency Settings": "Impostazioni di valuta",
"Currency Rates": "Tasso di Cambio",
"Currency Rates": "Tassi di Cambio",
"Mass Email": "Email massiva",
"Test Connection": "Prova della connessione",
"Connecting": "Connessione...",
"Activities": "Attività",
"Admin Notifications": "Notifiche di amministratore",
"Admin Notifications": "Notifiche Admin",
"Search": "Ricerca",
"Misc": "Varie",
"2-Factor Authentication": "Autenticazione a 2 fattori",
"Group Tab": "Gruppo Schede"
"Group Tab": "Gruppo Schede",
"Attachments": "Allegati"
},
"messages": {
"ldapTestConnection": "La connessione è stata stabilita con successo"
@@ -207,7 +237,9 @@
},
"personNameFormat": {
"firstLast": "Nome",
"lastFirst": "Cognome"
"lastFirst": "Cognome",
"firstMiddleLast": "Nome Secondo Nome Cognome",
"lastFirstMiddle": "Cognome Nome Secondo Nome"
}
}
}

View File

@@ -1,7 +1,8 @@
{
"messages": {
"infoMention": "Digita **@nome utente** per menzionare l'utente nel post.",
"infoSyntax": "Sintassi di markdown disponibile"
"infoSyntax": "Sintassi di markdown disponibile",
"couldNotAddFollowerUserHasNoAccessToStream": "Impossibile aggiungere l'utente '{userName}' ai follower. L'utente non ha accesso allo 'stream' del record."
},
"syntaxItems": {
"code": "Codice",

View File

@@ -14,7 +14,8 @@
},
"tooltips": {
"roles": "Ruoli di accesso. Gli utenti di questo team hanno ottenuto il livello di controllo per i ruoli selezionati.",
"positionList": "Posizioni disponibili in questa squadra. E.g. Venditore, Manager."
"positionList": "Posizioni disponibili in questa squadra. E.g. Venditore, Manager.",
"layoutSet": "Fornisce la possibilità di avere layout diversi da quelli standard. Il set di layout verrà applicato agli utenti che hanno impostato questo team come Team Predefinito."
},
"labels": {
"Create Team": "Crea Team"

View File

@@ -23,9 +23,9 @@
"position": "Posizione nel team",
"ipAddress": "Indirizzo IP",
"passwordPreview": "Mostra password",
"isSuperAdmin": "E' super amministratore",
"isSuperAdmin": "È Super Amministratore",
"lastAccess": "Ultimo accesso",
"type": "Genere",
"type": "Tipo",
"secretKey": "Chiave segreta",
"authMethod": "Metodo di autenticazione",
"yourPassword": "La tua password attuale",
@@ -43,7 +43,8 @@
"contact": "Contatti",
"account": "Account (Primario}",
"tasks": "Compiti",
"dashboardTemplate": "Modello di dashboard"
"dashboardTemplate": "Modello di dashboard",
"userData": "Dati Utente"
},
"labels": {
"Create User": "Crea Utente",
@@ -67,6 +68,7 @@
"Security": "Sicurezza",
"Reset 2FA": "Ripristina 2FA",
"Secret": "Segreto",
"Send Password Change Link": "Invia Link per il Cambio Password",
"Send Code": "Invia Codice"
},
"tooltips": {
@@ -102,10 +104,18 @@
"generateAndSendNewPassword": "Una nuova password verrà generata e inviata all'indirizzo e-mail dell'utente.",
"security2FaResetConfimation": "Sei sicuro di voler ripristinare le attuali impostazioni 2FA?",
"ldapUserInEspoNotFound": "Utente non trovato in EspoCRM. Contatta lamministratore di sistema per creare un utente.",
"auth2FARequiredHeader": "Autenticazione a 2 fattori richiesta"
"auth2FARequiredHeader": "Autenticazione a 2 fattori richiesta",
"auth2FARequired": "È necessario impostare l'autenticazione a due fattori. Usa un'applicazione di autenticazione sul tuo cellulare (ad esempio, Google Authenticator).",
"sendPasswordChangeLinkConfirmation": "Verrà inviata una mail con un link univoco che consentirà all'utente di modificare la propria password. Il link scadrà dopo un determinato periodo di tempo.",
"yourAuthenticationCode": "Codice di autenticazione: {code}.",
"choose2FaSmsPhoneNumber": "Seleziona un numero di telefono da utilizzare per la 2FA.",
"choose2FaEmailAddress": "Seleziona un indirizzo email che verrà utilizzato per la 2FA. Si consiglia di utilizzare un indirizzo email non principale.",
"enterCodeSentInEmail": "Inserisci il codice inviato al tuo indirizzo email.",
"enterCodeSentBySms": "Inserisci il codice inviato via SMS al tuo numero di telefono.",
"passwordChangeRequestNotFound": "La richiesta di modifica della password non è stata trovata. Potrebbe essere scaduta. Prova ad avviare un nuovo recupero della password dalla [Pagina di Login]({url})."
},
"boolFilters": {
"onlyMyTeam": "Solo per il mio Team"
"onlyMyTeam": "Solo il mio Team"
},
"presetFilters": {
"active": "Attivo",

View File

@@ -29,7 +29,7 @@
"isSystem": true
},
"uriOptionalProtocol": {
"pattern": "((a-zA-Z0-9)\\:\\/\\/)?[a-zA-Z0-9%\\.\\/\\?\\:@\\-_=#]+\\.([a-zA-Z0-9%\\&\\.\\/\\?\\:@\\-_=#])*",
"pattern": "((a-zA-Z0-9)\\:\\/\\/)?[a-zA-Z0-9%\\.\\/\\?\\:@\\-_=#$!+*\\(\\)',]+\\.([a-zA-Z0-9%\\&\\.\\/\\?\\:@\\-_=#$!+*\\(\\)',])*",
"isSystem": true
}
}

View File

@@ -22,7 +22,8 @@
"related": {
"type": "linkParent",
"noLoad": true,
"view": "views/attachment/fields/parent"
"view": "views/attachment/fields/parent",
"validatorClassName": "Espo\\Classes\\FieldValidators\\Attachment\\Related"
},
"sourceId": {
"type": "varchar",

View File

@@ -3,7 +3,8 @@
"name": {
"type": "varchar",
"required": true,
"trim": true
"trim": true,
"layoutDefaultSidePanelDisabled": true
},
"subject": {
"type": "varchar",
@@ -19,7 +20,8 @@
"notStorable": true,
"textFilterDisabled": true,
"layoutFiltersDisabled": true,
"customizationDisabled": true
"customizationDisabled": true,
"layoutDefaultSidePanelDisabled": true
},
"fromAddress": {
"type": "varchar",
@@ -27,15 +29,18 @@
"notStorable": true,
"textFilterDisabled": true,
"layoutFiltersDisabled": true,
"customizationDisabled": true
"customizationDisabled": true,
"layoutDefaultSidePanelDisabled": true
},
"fromString": {
"type": "varchar",
"customizationDisabled": true
"customizationDisabled": true,
"layoutDefaultSidePanelDisabled": true
},
"replyToString": {
"type": "varchar",
"customizationDisabled": true
"customizationDisabled": true,
"layoutDefaultSidePanelDisabled": true
},
"replyToName": {
"type": "varchar",
@@ -43,7 +48,8 @@
"notStorable": true,
"textFilterDisabled": true,
"layoutFiltersDisabled": true,
"customizationDisabled": true
"customizationDisabled": true,
"layoutDefaultSidePanelDisabled": true
},
"replyToAddress": {
"type": "varchar",
@@ -51,7 +57,8 @@
"notStorable": true,
"textFilterDisabled": true,
"layoutFiltersDisabled": true,
"customizationDisabled": true
"customizationDisabled": true,
"layoutDefaultSidePanelDisabled": true
},
"addressNameMap": {
"type": "jsonObject",
@@ -65,7 +72,8 @@
"required": true,
"view": "views/email/fields/from-address-varchar",
"textFilterDisabled": true,
"customizationDisabled": true
"customizationDisabled": true,
"layoutDefaultSidePanelDisabled": true
},
"to": {
"type": "varchar",
@@ -74,28 +82,32 @@
"view": "views/email/fields/email-address-varchar",
"textFilterDisabled": true,
"validatorClassName": "Espo\\Classes\\FieldValidators\\Email\\EmailAddresses",
"customizationDisabled": true
"customizationDisabled": true,
"layoutDefaultSidePanelDisabled": true
},
"cc": {
"type": "varchar",
"notStorable": true,
"view": "views/email/fields/email-address-varchar",
"customizationDisabled": true,
"textFilterDisabled": true
"textFilterDisabled": true,
"layoutDefaultSidePanelDisabled": true
},
"bcc": {
"type": "varchar",
"notStorable": true,
"view": "views/email/fields/email-address-varchar",
"customizationDisabled": true,
"textFilterDisabled": true
"textFilterDisabled": true,
"layoutDefaultSidePanelDisabled": true
},
"replyTo": {
"type": "varchar",
"notStorable": true,
"view": "views/email/fields/email-address-varchar",
"textFilterDisabled": true,
"customizationDisabled": true
"customizationDisabled": true,
"layoutDefaultSidePanelDisabled": true
},
"personStringData": {
"type": "varchar",
@@ -151,7 +163,8 @@
"notStorable": true,
"default": null,
"textFilterDisabled": true,
"customizationDisabled": true
"customizationDisabled": true,
"layoutAvailabilityList": []
},
"isUsers": {
"type": "bool",
@@ -200,44 +213,52 @@
"maxLength": 300,
"readOnly": true,
"textFilterDisabled": true,
"customizationDisabled": true
"customizationDisabled": true,
"layoutAvailabilityList": []
},
"emailAddress": {
"type": "base",
"notStorable": true,
"view": "views/email/fields/email-address",
"customizationDisabled": true
"customizationDisabled": true,
"layoutDefaultSidePanelDisabled": true
},
"fromEmailAddress": {
"type": "link",
"view": "views/email/fields/from-email-address",
"textFilterDisabled": true,
"customizationDisabled": true
"customizationDisabled": true,
"layoutAvailabilityList": []
},
"toEmailAddresses": {
"type": "linkMultiple",
"customizationDisabled": true
"customizationDisabled": true,
"layoutAvailabilityList": []
},
"ccEmailAddresses": {
"type": "linkMultiple",
"customizationDisabled": true
"customizationDisabled": true,
"layoutAvailabilityList": []
},
"replyToEmailAddresses": {
"type": "linkMultiple",
"customizationDisabled": true
"customizationDisabled": true,
"layoutAvailabilityList": []
},
"bodyPlain": {
"type": "text",
"seeMoreDisabled": true,
"clientReadOnly": true,
"customizationDisabled": true
"customizationDisabled": true,
"layoutDefaultSidePanelDisabled": true
},
"body": {
"type": "wysiwyg",
"view": "views/email/fields/body",
"attachmentField": "attachments",
"useIframe": true,
"customizationDisabled": true
"customizationDisabled": true,
"layoutDefaultSidePanelDisabled": true
},
"isHtml": {
"type": "bool",
@@ -262,12 +283,14 @@
},
"attachments": {
"type": "attachmentMultiple",
"sourceList": ["Document"]
"sourceList": ["Document"],
"layoutDefaultSidePanelDisabled": true
},
"hasAttachment": {
"type": "bool",
"readOnly": true,
"customizationDisabled": true
"customizationDisabled": true,
"layoutDefaultSidePanelDisabled": true
},
"parent": {
"type": "linkParent",
@@ -280,7 +303,8 @@
},
"dateSent": {
"type": "datetime",
"customizationDisabled": true
"customizationDisabled": true,
"layoutDefaultSidePanelDisabled": true
},
"deliveryDate": {
"type": "datetime",
@@ -412,33 +436,38 @@
"layoutListDisabled": true,
"layoutMassUpdateDisabled": true,
"dbType": "text",
"customizationDisabled": true
"customizationDisabled": true,
"layoutAvailabilityList": []
},
"icsEventData": {
"type": "jsonObject",
"readOnly": true,
"directAccessDisabled": true,
"notStorable": true,
"customizationDisabled": true
"customizationDisabled": true,
"layoutAvailabilityList": []
},
"icsEventUid": {
"type": "varchar",
"maxLength": 255,
"index": true,
"customizationDisabled": true
"customizationDisabled": true,
"layoutAvailabilityList": []
},
"icsEventDateStart": {
"type": "datetimeOptional",
"readOnly": true,
"notStorable": true,
"customizationDisabled": true
"customizationDisabled": true,
"layoutAvailabilityList": []
},
"createEvent": {
"type": "base",
"disabled": true,
"notStorable": true,
"view": "views/email/fields/create-event",
"customizationDisabled": true
"customizationDisabled": true,
"layoutAvailabilityList": []
},
"createdEvent": {
"type": "linkParent",
@@ -446,7 +475,8 @@
"view": "views/email/fields/created-event",
"fieldManagerParamList": [
"tooltipText"
]
],
"layoutAvailabilityList": []
}
},
"links": {
@@ -551,7 +581,8 @@
"type": "varchar",
"len": "4"
}
}
},
"layoutDefaultSidePanelDisabled": true
},
"bccEmailAddresses": {
"type": "hasMany",
@@ -565,7 +596,8 @@
"type": "varchar",
"len": "4"
}
}
},
"layoutDefaultSidePanelDisabled": true
},
"replyToEmailAddresses": {
"type": "hasMany",

View File

@@ -44,7 +44,6 @@
"monitoredFolders": {
"type": "array",
"default": ["INBOX"],
"options": ["INBOX"],
"view": "views/email-account/fields/folders",
"displayAsList": true,
"noEmptyString": true,

View File

@@ -43,7 +43,6 @@
"monitoredFolders": {
"type": "array",
"default": ["INBOX"],
"options": ["INBOX"],
"view": "views/inbound-email/fields/folders",
"displayAsList": true,
"noEmptyString": true,

View File

@@ -68,8 +68,9 @@
},
"leadSource": {
"type": "enum",
"view": "crm:views/opportunity/fields/lead-source",
"customizationOptionsDisabled": true,
"optionsPath": "entityDefs.Lead.fields.source.options",
"translation": "Lead.options.source",
"default": "Web Site"
},
"apiKey": {

View File

@@ -235,7 +235,6 @@
},
"language": {
"type": "enum",
"options": ["en_US"],
"default": "en_US",
"view": "views/settings/fields/language",
"isSorted": true

View File

@@ -1,12 +1,4 @@
{
"assignmentNotificatorClassName": "Espo\\Classes\\AssignmentNotificators\\Email",
"readLoaderClassNameList": [
"Espo\\Classes\\FieldProcessing\\Email\\AddressDataLoader",
"Espo\\Classes\\FieldProcessing\\Email\\UserColumnsLoader"
],
"listLoaderClassNameList": [
"Espo\\Classes\\FieldProcessing\\Email\\StringDataLoader"
],
"massActions": {
"update": {
"allowed": true

View File

@@ -10,7 +10,7 @@
"chartColorAlternativeList": ["#7492cc", "#c29c4a", "#a1404a", "#6a5f96", "#b07e53"],
"calendarColors": {
"": "#a58dc7a0",
"Meeting": "#6680b3",
"Meeting": "#697da5",
"Call": "#a1404a",
"Task": "#5d8a55"
},

View File

@@ -22,8 +22,8 @@
"logo": {
"param": "navbar",
"valueMap": {
"side": "client/img/logo-39.png",
"top": "client/img/logo-39.png"
"side": "client/img/logo.svg",
"top": "client/img/logo.svg"
}
}
},

View File

@@ -158,7 +158,7 @@ class Attachment extends Record
unset($data->parentId);
unset($data->relatedId);
$isBeingUploaded = (bool) $data->isBeingUploaded;
$isBeingUploaded = (bool) ($data->isBeingUploaded ?? false);
$contents = '';
@@ -283,6 +283,18 @@ class Attachment extends Record
}
}
private function getFieldType(AttachmentEntity $attachment): ?string
{
$field = $attachment->getTargetField();
$entityType = $attachment->getParentType() ?? $attachment->getRelatedType();
if (!$field || !$entityType) {
return null;
}
return $this->metadata->get(['entityDefs', $entityType, 'fields', $field, 'type']);
}
/**
* @throws Forbidden
*/
@@ -295,10 +307,8 @@ class Attachment extends Record
return;
}
$fieldType = $this->metadata->get(['entityDefs', $entityType, 'fields', $field, 'type']);
if (
$fieldType === self::FIELD_TYPE_IMAGE ||
$this->getFieldType($attachment) === self::FIELD_TYPE_IMAGE ||
$attachment->getRole() === AttachmentEntity::ROLE_INLINE_ATTACHMENT
) {
$this->checkAttachmentTypeImage($attachment);
@@ -306,7 +316,7 @@ class Attachment extends Record
return;
}
$extension = self::getFileExtension($attachment) ?? '';
$extension = strtolower(self::getFileExtension($attachment) ?? '');
$mimeType = $this->getMimeTypeUtil()->getMimeTypeByExtension($extension) ??
$attachment->getType();
@@ -759,13 +769,15 @@ class Attachment extends Record
return;
}
try {
$this->checkAttachmentTypeImage($attachment, $filePath);
}
catch (Forbidden $e) {
$this->entityManager->removeEntity($attachment);
if ($this->getFieldType($attachment) === self::FIELD_TYPE_IMAGE) {
try {
$this->checkAttachmentTypeImage($attachment, $filePath);
}
catch (Forbidden $e) {
$this->entityManager->removeEntity($attachment);
throw new ForbiddenSilent($e->getMessage());
throw new ForbiddenSilent($e->getMessage());
}
}
$attachment->set('isBeingUploaded', false);

View File

@@ -179,6 +179,8 @@ class Kanban
$repository = $this->entityManager->getRDBRepository($this->entityType);
$hasMore = false;
foreach ($statusList as $status) {
if (in_array($status, $statusIgnoreList)) {
continue;
@@ -248,6 +250,8 @@ class Kanban
$totalSub = -1;
unset($collectionSub[count($collectionSub) - 1]);
$hasMore = true;
}
else {
$totalSub = -2;
@@ -277,14 +281,7 @@ class Kanban
$total = $repository->clone($query)->count();
}
else {
if ($maxSize && count($collection) > $maxSize) {
$total = -1;
unset($collection[count($collection) - 1]);
}
else {
$total = -2;
}
$total = $hasMore ? -1 : -2;
}
return new Result($collection, $total, $additionalData);
@@ -310,7 +307,7 @@ class Kanban
protected function getStatusList(): array
{
assert(is_string($this->entityType));
$statusField = $this->getStatusField();
$statusList = $this->metadata->get(['entityDefs', $this->entityType, 'fields', $statusField, 'options']);

View File

@@ -730,6 +730,12 @@ class LeadCapture
$lead->set('campaignId', $leadCapture->getCampaignId());
}
$teamId = $leadCapture->getTargetTeamId();
if ($teamId) {
$lead->addLinkMultipleId('teams', $teamId);
}
// Skipping the 'required' validation.
$validationParams = FieldValidationParams::create()->withTypeSkipFieldList('required', $fieldList);

22
client/img/logo.svg Normal file
View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="318" height="78" enable-background="new 0 0 307.813 75" overflow="visible" version="1.1" viewBox="0 0 318 78" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<switch transform="matrix(1.089 0 0 1.089 -.89733 -.52658)">
<foreignObject width="1" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/">
</foreignObject>
<g transform="matrix(.96767 0 0 .96767 3.9659 -1.2011)">
<path d="m169.53 21.864c-7.453 2.972-9.569 11.987-9.005 19.212 1.587 2.982 3.845 5.562 5.783 8.312l4.262-1.083c-1.796-4.447-1.689-9.424-0.806-14.066 0.585-3.001 2.309-6.476 5.634-7.032 5.307-0.847 10.733-0.271 16.088-0.369 0.091-2.196 0.115-4.392 0.107-6.585-7.333 0.387-15.043-1.038-22.063 1.611zm52.714-1.294c-8.12-0.952-16.332-0.149-24.492-0.387-0.021 6.43-3e-3 12.854 0.078 19.274 2.625-0.849 5.251-1.739 7.909-2.532 0.042-3.272 0.028-6.527-0.071-9.789 4.869-0.029 9.874-0.757 14.639 0.451 1.838 0.298 2.051 2.25 2.687 3.641 2.541-0.891 5.111-1.717 7.672-2.574-0.703-4.246-4.129-7.633-8.422-8.084zm23.522-0.593c-3.954 0.072-7.912 0.064-11.864 0.047 0.051 2.544 0.063 5.074 0.072 7.617 4.263-1.482 8.553-2.889 12.848-4.268-0.35-1.128-0.706-2.268-1.056-3.396z" fill="#fff"/>
<path d="m161.96 69.125c7.886-3.717 15.757-7.463 23.72-11.018 5.563 0.359 11.146 0.021 16.722 0.193 1.14-0.036 2.292-0.061 3.432-0.088-0.011-3.195-0.025-6.38-0.082-9.564 3.428-1.502 10.227-4.623 10.227-4.623l15.215 13.941 11.096 0.106-0.715-26.236 0.803-0.211 9.005 26.344 8.834-0.066 8.99-28.394-0.308 28.434 8.074-0.021-0.231-37.932-9.279 0.071 30.625-14.141s-37.593 14.279-56.404 21.385c-2.996 1.022-5.878 2.315-8.853 3.394-2.278 0.867-4.558 1.713-6.834 2.58-20.071 7.526-39.945 15.604-60.126 22.803-6.777-10.522-15.314-19.854-21.768-30.585zm72.116-17.961c-0.108 0.154-0.324 0.458-0.429 0.611-3.448-3.018-6.765-6.189-10.21-9.205 1.745-1.096 3.47-2.242 5.026-3.597 1.625-1.386 3.479-2.469 5.345-3.499 0.293 5.227 0.258 10.452 0.268 15.69zm23.942-9.67c-0.857 2.578-1.825 5.137-2.793 7.682-1.644-6.217-3.94-12.238-5.856-18.383-0.119-0.52-0.366-1.574-0.487-2.093 3.428-1.709 10.585-4.854 15.229-6.815-1.647 5.969-4.306 14.029-6.093 19.609z" fill="#ffb300"/>
<g fill="#fff">
<path d="m45.672 58.148h-18.526c-2.861 0-5.614-0.651-8.257-1.953-2.861-1.409-5.043-3.651-6.547-6.725-1.503-3.074-2.254-6.455-2.254-10.145 0-3.652 0.724-6.961 2.173-9.926 1.594-3.219 3.803-5.569 6.628-7.052 1.557-0.795 3.052-1.355 4.482-1.682 1.43-0.325 3.07-0.488 4.917-0.488h17.168v6.789h-15.886c-1.415 0-2.602 0.187-3.563 0.558-0.961 0.372-1.912 1.037-2.855 1.994s-1.597 1.887-1.959 2.791c-0.363 0.902-0.543 2.027-0.543 3.375h25.023v6.789h-25.025c0 1.24 0.164 2.325 0.491 3.256 0.327 0.93 0.919 1.887 1.776 2.871 0.856 0.985 1.749 1.732 2.677 2.242 0.929 0.512 2.03 0.767 3.306 0.767h16.774z"/>
<path d="m76.499 49.519c0 2.397-0.771 4.449-2.312 6.154-1.541 1.706-3.49 2.56-5.846 2.56h-18.653v-5.113h15.326c1.087 0 2.001-0.272 2.744-0.817s1.115-1.327 1.115-2.345c0-2.362-1.595-3.543-4.783-3.543h-7.825c-1.666 0-3.278-0.79-4.836-2.369-1.559-1.58-2.336-3.287-2.336-5.119 0-2.585 0.579-4.667 1.738-6.248 1.34-1.794 3.313-2.692 5.922-2.692h17.928v5.364h-15.938c-0.614 0-1.147 0.289-1.599 0.868s-0.677 1.235-0.677 1.972c0 0.807 0.298 1.498 0.896 2.076 0.597 0.579 1.311 0.867 2.144 0.867h8.415c2.643 0 4.733 0.79 6.271 2.369 1.536 1.579 2.306 3.584 2.306 6.016z"/>
<path d="m109.29 43.414c0 4.495-1.166 8.074-3.497 10.738s-5.395 3.996-9.188 3.996h-8.186v10.309h-7.627v-38.472h15.09c4.27 0 7.6 1.269 9.989 3.806 2.279 2.428 3.419 5.637 3.419 9.623zm-7.627 0.405c0-2.356-0.754-4.286-2.262-5.793-1.509-1.505-3.388-2.258-5.641-2.258h-5.341v16.429h5.886c2.179 0 3.951-0.771 5.313-2.313 1.363-1.54 2.045-3.562 2.045-6.065z"/>
<path d="m145.1 43.967c0 4.896-1.557 8.65-4.669 11.261-2.86 2.394-6.751 3.591-11.673 3.591-4.923 0-8.742-1.087-11.456-3.264-3.15-2.502-4.724-6.401-4.724-11.696 0-4.424 1.701-7.906 5.104-10.446 3.04-2.283 6.786-3.427 11.238-3.427 4.887 0 8.805 1.225 11.754 3.673s4.426 5.884 4.426 10.308zm-8.382-0.065c0-2.285-0.716-4.197-2.146-5.738-1.432-1.54-3.379-2.312-5.841-2.312-2.246 0-4.103 0.79-5.57 2.366-1.467 1.577-2.2 3.563-2.2 5.955 0 2.756 0.743 4.949 2.228 6.581s3.405 2.448 5.76 2.448c2.679 0 4.673-0.852 5.977-2.557 1.193-1.557 1.792-3.805 1.792-6.743z"/>
</g>
</g>
</switch>
</svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@@ -591,6 +591,7 @@ define('crm:views/calendar/calendar', ['view', 'lib!full-calendar'], function (D
timezone: this.getDateTime().timeZone,
longPressDelay: 300,
eventColor: this.colors[''],
nowIndicator: true,
windowResize: () => {
this.adjustSize();
},

View File

@@ -56,19 +56,24 @@ define('crm:views/campaign/record/detail-bottom', 'views/record/detail-bottom',
index: -1,
});
this.listenTo(this.model, 'change', function () {
this.listenTo(this.model, 'change', () => {
this.manageMassEmails();
}, this);
});
},
afterRender: function () {
Dep.prototype.setupPanels.call(this);
Dep.prototype.afterRender.call(this);
this.manageMassEmails();
},
manageMassEmails: function () {
var parentView = this.getParentView();
if (!parentView) return;
if (!parentView) {
return;
}
if (~['Email', 'Newsletter'].indexOf(this.model.get('type'))) {
parentView.showPanel('massEmails');
parentView.showPanel('trackingUrls');

View File

@@ -26,17 +26,7 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
Espo.define('crm:views/lead/fields/industry', 'views/fields/enum', function (Dep) {
return Dep.extend({
setup: function () {
this.params.options = this.getMetadata().get('entityDefs.Account.fields.industry.options');
this.params.translation = 'Account.options.industry';
Dep.prototype.setup.call(this);
}
});
define('crm:views/lead/fields/industry', ['views/fields/enum'], function (Dep) {
return Dep.extend({});
});

View File

@@ -2,16 +2,16 @@
<h4>{{{title}}}</h4>
</div>
<div class="button-container">
<div class="btn-group">
<button class="btn btn-primary" data-action="save">{{translate 'Save'}}</button>
<button class="btn btn-default" data-action="cancel">{{translate 'Cancel'}}</button>
<button class="btn btn-default" data-action="resetToDefault">{{translate 'Reset to Default' scope='Admin'}}</button>
<button class="btn btn-primary btn-xs-wide" data-action="save">{{translate 'Save'}}</button>
<button class="btn btn-default btn-xs-wide" data-action="cancel">{{translate 'Cancel'}}</button>
<button class="btn btn-default btn-xs-wide" data-action="resetToDefault"
>{{translate 'Reset to Default' scope='Admin'}}</button>
</div>
</div>
{{#if hasSubject}}
<div class="subject-field">{{{subjectField}}}</div>
{{/if}}
<div class="body-field">{{{bodyField}}}</div>
<div class="body-field">{{{bodyField}}}</div>

View File

@@ -3,7 +3,10 @@
<span class="fas fa-paperclip small text-muted" title="{{translate 'hasAttachment' category='fields' scope='Email'}}"></span>
</span>
{{/if}}
{{#unless isRead}}<strong>{{/unless}}
<a href="#{{scope}}/view/{{model.id}}" class="link{{#if isImportant}} text-warning{{/if}}{{#if inTrash}} text-muted{{/if}}" data-id="{{model.id}}" title="{{value}}">{{value}}</a>
{{#unless isRead}}</strong>{{/unless}}
<a
href="#{{scope}}/view/{{model.id}}"
class="link{{#if isImportant}} text-warning{{/if}}{{#if inTrash}} text-muted{{/if}}{{#unless isRead}} text-bold{{/unless}}"
data-id="{{model.id}}"
title="{{value}}"
>{{value}}</a>

View File

@@ -0,0 +1,6 @@
<a
href="#{{scope}}/view/{{model.id}}"
class="link"
data-id="{{model.id}}"
title="{{value}}"
>{{#if value}}{{{value}}}{{else}}{{translate 'None'}}{{/if}}</a>

View File

@@ -970,7 +970,7 @@ function (
resolve(options);
return;
};
}
this.requestUserData(data => {
options = data;

View File

@@ -766,7 +766,7 @@
return new Promise((resolve, reject) => {
this.require(
subject,
() => resolve(),
(...args) => resolve(...args),
() => reject()
);
});

View File

@@ -599,6 +599,8 @@ define('utils', [], function () {
getKeyFromKeyEvent: function (e) {
let key = e.code;
key = keyMap[key] || key;
if (e.shiftKey) {
key = 'Shift+' + key;
}
@@ -615,6 +617,10 @@ define('utils', [], function () {
},
};
const keyMap = {
'NumpadEnter': 'Enter',
};
/**
* @deprecated Use `Espo.Utils`.
*/

View File

@@ -437,7 +437,7 @@ function (marked, DOMPurify, /** typeof Handlebars */Handlebars) {
return value.indexOf(name) !== -1;
}
return value === name;
return value === name || !value && !name;
};
options.hash = options.hash || {};

View File

@@ -739,7 +739,7 @@ define('views/admin/entity-manager/edit', ['view', 'model'], function (Dep, Mode
if (
this.getMetadata()
.get(['entityDefs', foreignEntityType, 'fields', item, 'foreingAccessDisabled'])
.get(['entityDefs', foreignEntityType, 'fields', item, 'foreignAccessDisabled'])
) {
return false;
}

View File

@@ -26,7 +26,7 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
define('views/admin/layouts/base', 'view', function (Dep) {
define('views/admin/layouts/base', ['view'], function (Dep) {
return Dep.extend({

View File

@@ -36,10 +36,35 @@ define('views/admin/layouts/bottom-panels-detail', ['views/admin/layouts/side-pa
TAB_BREAK_KEY: '_tabBreak_{n}',
setup: function () {
Dep.prototype.setup.call(this);
this.on('update-item', (name, attributes) => {
if (this.isTabName(name)) {
let $li = $("#layout ul > li[data-name='" + name + "']");
$li.find('.left > span')
.text(this.composeTabBreakLabel(attributes));
}
});
},
composeTabBreakLabel: function (item) {
let label = '. . . ' + this.translate('tabBreak', 'fields', 'LayoutManager');
if (item.tabLabel) {
label += ' : ' + item.tabLabel;
}
return label;
},
readDataFromLayout: function (layout) {
var panelListAll = [];
var labels = {};
var params = {};
let panelListAll = [];
let labels = {};
let params = {};
layout = Espo.Utils.cloneDeep(layout);
@@ -84,7 +109,7 @@ define('views/admin/layouts/bottom-panels-detail', ['views/admin/layouts/side-pa
if (item.tabBreak) {
panelListAll.push(name);
labels[name] = '. . . ' + this.translate('tabBreak', 'fields', 'LayoutManager');
labels[name] = this.composeTabBreakLabel(item);
params[name] = {
name: item.name,
@@ -254,23 +279,39 @@ define('views/admin/layouts/bottom-panels-detail', ['views/admin/layouts/side-pa
},
onDrop: function () {
let tabBreakIndex = 0;
let tabBreakIndex = -1;
let $tabBreak = null;
this.$el.find('ul.enabled').children().each((i, li) => {
let $li = $(li);
let name = $li.attr('data-name');
if (this.isTabName(name)) {
if (name === this.TAB_BREAK_KEY) {
$tabBreak = $li.clone();
if (name !== this.TAB_BREAK_KEY) {
let itemIndex = parseInt(name.split('_')[2]);
$li.attr('data-name', this.TAB_BREAK_KEY.slice(0, -3) + tabBreakIndex);
if (itemIndex > tabBreakIndex) {
tabBreakIndex = itemIndex;
}
}
}
});
tabBreakIndex++;
tabBreakIndex++;
this.$el.find('ul.enabled').children().each((i, li) => {
let $li = $(li);
let name = $li.attr('data-name');
if (this.isTabName(name) && name === this.TAB_BREAK_KEY) {
$tabBreak = $li.clone();
let realName = this.TAB_BREAK_KEY.slice(0, -3) + tabBreakIndex;
$li.attr('data-name', realName);
delete this.itemsData[realName];
}
});
@@ -326,9 +367,11 @@ define('views/admin/layouts/bottom-panels-detail', ['views/admin/layouts/side-pa
newLayout[name] = layout[name];
if (this.isTabName(name) && this.itemsData[name]) {
if (this.isTabName(name) && name !== this.TAB_BREAK_KEY /*&& this.itemsData[name]*/) {
let data = this.itemsData[name] || {};
newLayout[name].tabBreak = true;
newLayout[name].tabLabel = this.itemsData[name].tabLabel;
newLayout[name].tabLabel = data.tabLabel;
}
else {
delete newLayout[name].tabBreak;

View File

@@ -26,14 +26,18 @@
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
define('views/email-account/fields/folders', 'views/fields/array', function (Dep) {
define('views/email-account/fields/folders', ['views/fields/array'], function (Dep) {
return Dep.extend({
getFoldersUrl: 'EmailAccount/action/getFolders',
setupOptions: function () {
this.params.options = ['INBOX'];
},
fetchFolders: function () {
return new Promise(function (resolve) {
return new Promise(resolve => {
var data = {
host: this.model.get('host'),
port: this.model.get('port'),
@@ -52,54 +56,45 @@ define('views/email-account/fields/folders', 'views/fields/array', function (Dep
}
Espo.Ajax.postRequest(this.getFoldersUrl, data)
.then(
function (folders) {
resolve(folders);
}.bind(this)
)
.fail(
function (xhr) {
Espo.Ui.error(this.translate('couldNotConnectToImap', 'messages', 'EmailAccount'));
.then(folders => {
resolve(folders);
})
.catch(xhr =>{
Espo.Ui.error(this.translate('couldNotConnectToImap', 'messages', 'EmailAccount'));
xhr.errorIsHandled = true;
xhr.errorIsHandled = true;
resolve(["INBOX"]);
}.bind(this)
);
}.bind(this));
resolve(["INBOX"]);
});
});
},
actionAddItem: function () {
Espo.Ui.notify(this.translate('loading', 'messages'));
this.fetchFolders()
.then(
function (options) {
Espo.Ui.notify(false);
.then(options => {
Espo.Ui.notify(false);
this.createView( 'addModal', this.addItemModalView, {options: options})
.then(
function (view) {
view.render();
this.createView( 'addModal', this.addItemModalView, {options: options})
.then(view => {
view.render();
view.once('add', function (item) {
this.addValue(item);
view.once('add', item =>{
this.addValue(item);
view.close();
}.bind(this));
view.close();
});
view.once('add-mass', function (items) {
items.forEach(function (item) {
this.addValue(item);
}.bind(this));
view.close();
}.bind(this));
}.bind(this)
);
}.bind(this)
);
view.once('add-mass', items => {
items.forEach(item => {
this.addValue(item);
});
view.close();
});
});
});
},
});
});

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