mirror of
https://github.com/espocrm/espocrm.git
synced 2026-03-06 06:37:01 +00:00
Compare commits
77 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
62d1c0fae9 | ||
|
|
76546ff06c | ||
|
|
42af361ae4 | ||
|
|
440c6cee23 | ||
|
|
e659c79bf7 | ||
|
|
e017479f85 | ||
|
|
4824714b0d | ||
|
|
6ee936d522 | ||
|
|
ba172494b4 | ||
|
|
5c44a374d5 | ||
|
|
8aae2b18ba | ||
|
|
258e56c61d | ||
|
|
3084dddf1c | ||
|
|
eb6f9b602f | ||
|
|
cf508a540e | ||
|
|
5278e3bf06 | ||
|
|
5763f5b58e | ||
|
|
0666880786 | ||
|
|
e0113388d2 | ||
|
|
384f28ecae | ||
|
|
d7596c208c | ||
|
|
6d1ab5870f | ||
|
|
73dbfa38ec | ||
|
|
4adb068699 | ||
|
|
3e4c738ab1 | ||
|
|
cd92e4fcd8 | ||
|
|
fba191f22c | ||
|
|
8874c8827a | ||
|
|
34529a8ed9 | ||
|
|
8fd44acae2 | ||
|
|
4dd540ffc7 | ||
|
|
9c20116c9b | ||
|
|
926410d58f | ||
|
|
c64a107ad9 | ||
|
|
5dcd25946b | ||
|
|
d12865bbcb | ||
|
|
3fed415437 | ||
|
|
a03a13d3b9 | ||
|
|
e625951831 | ||
|
|
f533c68c9b | ||
|
|
2420746f1b | ||
|
|
2dfd00dd2e | ||
|
|
e043bb48e9 | ||
|
|
9aaef9d957 | ||
|
|
87449aae67 | ||
|
|
191d064fe1 | ||
|
|
dcb3e2feaf | ||
|
|
da9a423e59 | ||
|
|
3be4510e63 | ||
|
|
a6bb5a239b | ||
|
|
a5fb42609b | ||
|
|
40c2c1718e | ||
|
|
aeecfd63da | ||
|
|
1da1e6da9b | ||
|
|
bf9f23ebdd | ||
|
|
7beb4f8d83 | ||
|
|
991b859643 | ||
|
|
9bd74e08db | ||
|
|
cfdf65025d | ||
|
|
bf471e654c | ||
|
|
5feee1cf55 | ||
|
|
6af6fc017b | ||
|
|
8ee9a792fc | ||
|
|
9ef1c5928f | ||
|
|
64c933e365 | ||
|
|
32055f3d6e | ||
|
|
804acae44b | ||
|
|
6b3f37c00e | ||
|
|
4bdc4878cd | ||
|
|
625d2bc128 | ||
|
|
0af5bb1b4b | ||
|
|
7a0d59357c | ||
|
|
adbb46d02c | ||
|
|
ac3884179e | ||
|
|
7cf1af188d | ||
|
|
21b695e4ef | ||
|
|
fbda66defc |
5
.gitattributes
vendored
5
.gitattributes
vendored
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
35
application/Espo/Core/Exceptions/HasLogMessage.php
Normal file
35
application/Espo/Core/Exceptions/HasLogMessage.php
Normal 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;
|
||||
}
|
||||
@@ -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}.";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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&', '?entryPoint=attachment&', $html);
|
||||
if (!$skipInlineAttachmentHandling) {
|
||||
$html = str_replace('?entryPoint=attachment&', '?entryPoint=attachment&', $html);
|
||||
}
|
||||
|
||||
if ($this->entityManager) {
|
||||
if (!$skipInlineAttachmentHandling && $this->entityManager) {
|
||||
/** @var string $html */
|
||||
$html = preg_replace_callback(
|
||||
'/\?entryPoint=attachment\&id=([A-Za-z0-9]*)/',
|
||||
|
||||
@@ -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
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,7 @@
|
||||
"campaignLogRecords": "Log campagna",
|
||||
"campaign": "Campagna",
|
||||
"portalUsers": "Utenti portale",
|
||||
"originalLead": "Iniziativa originale",
|
||||
"originalLead": "Lead Originale",
|
||||
"contactsPrimary": "Contatti (primari)"
|
||||
},
|
||||
"options": {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"object": "Oggetto",
|
||||
"application": "Applicazione",
|
||||
"queueItem": "Articolo in coda",
|
||||
"isTest": "E'Test"
|
||||
"isTest": "È un Test"
|
||||
},
|
||||
"links": {
|
||||
"queueItem": "Articolo in coda",
|
||||
|
||||
@@ -18,7 +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."
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,7 @@
|
||||
"status": "Stato",
|
||||
"contact": "Contatti",
|
||||
"contacts": "Contatti",
|
||||
"priority": "Priorita'",
|
||||
"priority": "Priorità",
|
||||
"type": "Tipo",
|
||||
"description": "Descrizione",
|
||||
"attachments": "Allegati",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
},
|
||||
"links": {
|
||||
"accounts": "Account",
|
||||
"opportunities": "Opportunita'",
|
||||
"opportunities": "Opportunità",
|
||||
"folder": "Cartella",
|
||||
"contacts": "Contatti"
|
||||
},
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"attemptCount": "Prove",
|
||||
"emailAddress": "Indirizzo email",
|
||||
"massEmail": "Email massiva",
|
||||
"isTest": "E' un test"
|
||||
"isTest": "È un test"
|
||||
},
|
||||
"links": {
|
||||
"massEmail": "Email massiva"
|
||||
|
||||
@@ -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à"
|
||||
@@ -76,14 +76,14 @@
|
||||
"Compose Email": "Componi email",
|
||||
"Log Meeting": "Registra Riunione",
|
||||
"Log Call": "Registra Chiamata",
|
||||
"Archive Email": "Archivio Email",
|
||||
"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)",
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
},
|
||||
"links": {
|
||||
"cases": "Tickets",
|
||||
"opportunities": "Opportunita'",
|
||||
"opportunities": "Opportunità",
|
||||
"categories": "Categorie",
|
||||
"portals": "Portali"
|
||||
},
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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,8 +44,8 @@
|
||||
"All-Day": "Tutto il giorno\n"
|
||||
},
|
||||
"presetFilters": {
|
||||
"planned": "Pianificato",
|
||||
"held": "Effettuata",
|
||||
"planned": "Pianificate",
|
||||
"held": "Effettuate",
|
||||
"todays": "Di oggi"
|
||||
},
|
||||
"messages": {
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"Television": "Televisione"
|
||||
},
|
||||
"targetStatus": {
|
||||
"Opted Out": "Cancellato iscrizione",
|
||||
"Opted Out": "Iscrizione Cancellata",
|
||||
"Listed": "Elencato"
|
||||
}
|
||||
},
|
||||
|
||||
@@ -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,7 +36,7 @@
|
||||
},
|
||||
"labels": {
|
||||
"Create Task": "Crea Compito",
|
||||
"Complete": "Completo",
|
||||
"Complete": "Completato",
|
||||
"overdue": "in ritardo"
|
||||
},
|
||||
"presetFilters": {
|
||||
|
||||
@@ -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)"
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,10 @@
|
||||
"scope": "Opportunity",
|
||||
"field": "leadSource"
|
||||
},
|
||||
"Account.options.industry": {
|
||||
"scope": "Lead",
|
||||
"field": "industry"
|
||||
},
|
||||
"Meeting": {
|
||||
"scope": "Call"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
"entityDefs.Lead.fields.source.options": {
|
||||
"scope": "Opportunity",
|
||||
"field": "leadSource"
|
||||
},
|
||||
"entityDefs.Account.fields.industry.options": {
|
||||
"scope": "Lead",
|
||||
"field": "industry"
|
||||
}
|
||||
},
|
||||
"frontendHiddenPathList": [
|
||||
|
||||
@@ -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
|
||||
},
|
||||
|
||||
@@ -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}'."
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -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?",
|
||||
|
||||
@@ -271,7 +271,8 @@
|
||||
"Field": "Field",
|
||||
"Resolution": "Resolution",
|
||||
"Resolve Conflict": "Resolve Conflict",
|
||||
"Download": "Download"
|
||||
"Download": "Download",
|
||||
"Global Search": "Global Search"
|
||||
},
|
||||
"messages": {
|
||||
"pleaseWait": "Please wait...",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"fields": {
|
||||
"createdAt": "Data",
|
||||
"targetType": "Tipo di Obiettivo",
|
||||
"authToken": "Token di autenticazione",
|
||||
"authLogRecord": "Record di log auth",
|
||||
"userType": "Tipologia di utente"
|
||||
|
||||
@@ -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",
|
||||
@@ -176,8 +178,10 @@
|
||||
"lastChar": "Ultimo Carattere",
|
||||
"listPreviewSize": "Dimensione Anteprima in Vista Elenco",
|
||||
"onlyDefaultCurrency": "Solo valuta predefinita",
|
||||
"dynamicLogicInvalid": "Condizioni che rendono il campo non valido",
|
||||
"conversionDisabled": "Disattiva la Conversione",
|
||||
"decimalPlaces": "Posizioni Decimali"
|
||||
"decimalPlaces": "Posizioni Decimali",
|
||||
"globalRestrictions": "Restrizioni Globali"
|
||||
},
|
||||
"messages": {
|
||||
"selectEntityType": "Scegli il tipo di entità dal menu di sinistra.",
|
||||
@@ -196,7 +200,7 @@
|
||||
"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}).",
|
||||
"rebuildRequired": "È necessario eseguire la ricostruzione da CLI."
|
||||
@@ -233,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",
|
||||
@@ -241,7 +245,7 @@
|
||||
"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.",
|
||||
@@ -273,7 +277,7 @@
|
||||
"twoFactorCode": "Codice 2FA"
|
||||
},
|
||||
"strings": {
|
||||
"rebuildRequired": "E' richiesta la ricostruzione"
|
||||
"rebuildRequired": "È richiesta la ricostruzione"
|
||||
},
|
||||
"keywords": {
|
||||
"userInterface": "ui,tema,schede,logo,dashboard",
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -48,7 +48,11 @@
|
||||
"fromEmailAddress": "Dall'indirizzo (collegamento)",
|
||||
"replyToName": "Rispondi a Nome",
|
||||
"replyToAddress": "Indirizzo di risposta",
|
||||
"event": "Evento"
|
||||
"icsContents": "Contenuti ICS",
|
||||
"icsEventData": "Data Evento ICS",
|
||||
"icsEventUid": "Evento ICS UID",
|
||||
"event": "Evento",
|
||||
"icsEventDateStart": "Data Inizio Evento ICS"
|
||||
},
|
||||
"links": {
|
||||
"replied": "Risposto",
|
||||
@@ -75,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",
|
||||
@@ -92,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",
|
||||
@@ -114,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",
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
"body": "Corpo",
|
||||
"subject": "Oggetto",
|
||||
"attachments": "Allegato",
|
||||
"category": "Categoria"
|
||||
"category": "Categoria",
|
||||
"insertField": "Segnaposti"
|
||||
},
|
||||
"labels": {
|
||||
"Create EmailTemplate": "Crea Modello email",
|
||||
@@ -20,7 +21,7 @@
|
||||
"placeholderTexts": {
|
||||
"optOutLink": "Un link di cancellazione dell'iscrizione",
|
||||
"today": "Data odierna",
|
||||
"now": "Data e ora attuali\n\n",
|
||||
"now": "Data e ora attuali",
|
||||
"currentYear": "Anno corrente",
|
||||
"optOutUrl": "URL per un link di disiscrizione"
|
||||
},
|
||||
|
||||
@@ -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à.",
|
||||
|
||||
@@ -62,7 +62,10 @@
|
||||
"javascript: return this.dateTime.getDateShiftedFromToday(1, 'year');": "+1 anno"
|
||||
},
|
||||
"globalRestrictions": {
|
||||
"internal": "Interno"
|
||||
"forbidden": "Vietato",
|
||||
"internal": "Interno",
|
||||
"onlyAdmin": "Solo Admin",
|
||||
"readOnly": "Solo Lettura"
|
||||
}
|
||||
},
|
||||
"tooltips": {
|
||||
@@ -102,7 +105,8 @@
|
||||
"personName": {
|
||||
"salutation": "Saluto",
|
||||
"first": "Primo",
|
||||
"last": "Ultimo"
|
||||
"last": "Ultimo",
|
||||
"middle": "Secondo Nome"
|
||||
},
|
||||
"currency": {
|
||||
"converted": "(Convertito)",
|
||||
@@ -132,7 +136,9 @@
|
||||
"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. Puo' essere di tipi di entita' differenti."
|
||||
"linkParent": "Un record collegato tramite una relazione Belongs-To-Parent. Può essere di tipi di entità differenti."
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@
|
||||
},
|
||||
"fields": {
|
||||
"target": "Destinatario",
|
||||
"targetType": "Tipo di Obiettivo",
|
||||
"error": "Errore"
|
||||
},
|
||||
"messages": {
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"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,7 +45,7 @@
|
||||
"ArrayValue": "Valore di matrice",
|
||||
"ApiUser": "Utente API",
|
||||
"DashboardTemplate": "Modello di dashboard",
|
||||
"Currency": "Divisa",
|
||||
"Currency": "Valuta",
|
||||
"LayoutSet": "Layout",
|
||||
"Mass Action": "Azione Massiva",
|
||||
"Note": "Nota",
|
||||
@@ -76,7 +76,7 @@
|
||||
"ActionHistoryRecord": "Storico azioni",
|
||||
"AuthToken": "Tokens di autenticazione",
|
||||
"UniqueId": "ID univoci",
|
||||
"LastViewed": "Ultima visualizzazione",
|
||||
"LastViewed": "Ultime Visualizzazioni",
|
||||
"AuthLogRecord": "Auth log",
|
||||
"AuthFailLogRecord": "Registro Autenticazioni Fallite",
|
||||
"EmailTemplateCategory": "Categorie Modeli Email",
|
||||
@@ -88,7 +88,7 @@
|
||||
"DashboardTemplate": "Modelli di dashboard",
|
||||
"EmailAddress": "Indirizzo Email",
|
||||
"PhoneNumber": "Telefono",
|
||||
"Currency": "Divisa",
|
||||
"Currency": "Valuta",
|
||||
"LayoutSet": "Layout Set",
|
||||
"Note": "Note",
|
||||
"ImportError": "Errori di importazione"
|
||||
@@ -107,6 +107,7 @@
|
||||
"Loading...": "Caricamento in corso...",
|
||||
"Uploading...": "Caricamento...",
|
||||
"Sending...": "Invio...",
|
||||
"Merging...": "Unione in corso...",
|
||||
"Merged": "Fusione",
|
||||
"Removed": "Rimosso",
|
||||
"Posted": "Postato",
|
||||
@@ -119,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",
|
||||
@@ -135,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",
|
||||
@@ -178,7 +182,7 @@
|
||||
"Dashlet Options": "Opzioni dashlet",
|
||||
"Full Form": "Modulo completo",
|
||||
"Insert": "Inserisci",
|
||||
"Person": "Persone",
|
||||
"Person": "Persona",
|
||||
"First Name": "Nome",
|
||||
"Last Name": "Cognome",
|
||||
"Original": "Originale",
|
||||
@@ -187,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",
|
||||
@@ -211,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",
|
||||
@@ -235,6 +239,7 @@
|
||||
"Restore": "Ripristina",
|
||||
"View Followers": "Visualizza follower",
|
||||
"Convert Currency": "Converti valuta",
|
||||
"Middle Name": "Secondo Nome",
|
||||
"View on Map": "Vedi su Mappa",
|
||||
"Attached": "Allegato",
|
||||
"Preview": "Anteprima",
|
||||
@@ -242,7 +247,9 @@
|
||||
"Save & New": "Salva & Nuovo",
|
||||
"Field": "Campo",
|
||||
"Resolution": "Risoluzione",
|
||||
"Resolve Conflict": "Risolvere i conflitti"
|
||||
"Resolve Conflict": "Risolvere i conflitti",
|
||||
"Sort": "Ordina",
|
||||
"Global Search": "Ricerca Globale"
|
||||
},
|
||||
"messages": {
|
||||
"pleaseWait": "Attendere...",
|
||||
@@ -326,8 +333,8 @@
|
||||
"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": {
|
||||
@@ -378,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",
|
||||
@@ -400,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}",
|
||||
@@ -418,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",
|
||||
@@ -441,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}",
|
||||
@@ -519,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",
|
||||
@@ -569,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"
|
||||
@@ -709,6 +718,10 @@
|
||||
"required": "Richiesto",
|
||||
"maxLength": "Lunghezza Massima",
|
||||
"emailAddress": "Indirizzo Email Valido",
|
||||
"phoneNumber": "Numero di Telefono Valido"
|
||||
"phoneNumber": "Numero di Telefono Valido",
|
||||
"arrayOfString": "Array di Stringhe",
|
||||
"valid": "Valido",
|
||||
"max": "Valore Max",
|
||||
"min": "Valore Min"
|
||||
}
|
||||
}
|
||||
@@ -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,7 @@
|
||||
"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": {
|
||||
@@ -79,6 +80,8 @@
|
||||
"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"
|
||||
}
|
||||
},
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
{
|
||||
"fields": {
|
||||
"type": "Tipo",
|
||||
"import": "Importa",
|
||||
"lineNumber": "Linea Numero",
|
||||
"exportLineNumber": "Numero della linea di esportazione",
|
||||
"row": "Riga"
|
||||
|
||||
@@ -73,7 +73,8 @@
|
||||
},
|
||||
"labels": {
|
||||
"Create InboundEmail": "Crea un Account Email",
|
||||
"Actions": "Azioni"
|
||||
"Actions": "Azioni",
|
||||
"Main": "Principale"
|
||||
},
|
||||
"messages": {
|
||||
"couldNotConnectToImap": "Impossibile connettersi al server IMAP"
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -11,7 +11,9 @@
|
||||
"hidden": "Nascosto",
|
||||
"dynamicLogicStyled": "Condizioni che applicano lo stile.",
|
||||
"widthPx": "Larghezza (px)",
|
||||
"noLabel": "Nessuna Etichetta"
|
||||
"noLabel": "Nessuna Etichetta",
|
||||
"tabLabel": "Etichetta Scheda",
|
||||
"tabBreak": "Interruzione Scheda"
|
||||
},
|
||||
"options": {
|
||||
"align": {
|
||||
@@ -36,6 +38,7 @@
|
||||
"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."
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -2,14 +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",
|
||||
"followerManagementPermission": "Permessi di Gestione dei Seguaci"
|
||||
"followerManagementPermission": "Permessi di Gestione dei Follower"
|
||||
},
|
||||
"links": {
|
||||
"users": "Utenti"
|
||||
@@ -22,7 +22,7 @@
|
||||
"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.",
|
||||
"followerManagementPermission": "Permette di gestire i seguaci dei record."
|
||||
"followerManagementPermission": "Permette di gestire i follower dei record."
|
||||
},
|
||||
"labels": {
|
||||
"Access": "Accesso",
|
||||
@@ -40,7 +40,7 @@
|
||||
"all": "Tutti",
|
||||
"contact": "Contatto",
|
||||
"own": "proprio",
|
||||
"yes": "Si",
|
||||
"yes": "Sì",
|
||||
"not-set": "Non impostato"
|
||||
}
|
||||
},
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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",
|
||||
@@ -128,6 +128,7 @@
|
||||
"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)"
|
||||
},
|
||||
@@ -164,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.",
|
||||
@@ -174,12 +175,13 @@
|
||||
"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\".",
|
||||
"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à.",
|
||||
@@ -197,6 +199,8 @@
|
||||
"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."
|
||||
},
|
||||
@@ -206,12 +210,12 @@
|
||||
"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",
|
||||
@@ -233,7 +237,9 @@
|
||||
},
|
||||
"personNameFormat": {
|
||||
"firstLast": "Nome",
|
||||
"lastFirst": "Cognome"
|
||||
"lastFirst": "Cognome",
|
||||
"firstMiddleLast": "Nome Secondo Nome Cognome",
|
||||
"lastFirstMiddle": "Cognome Nome Secondo Nome"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"messages": {
|
||||
"infoMention": "Digita **@nome utente** per menzionare l'utente nel post.",
|
||||
"infoSyntax": "Sintassi di markdown disponibile",
|
||||
"couldNotAddFollowerUserHasNoAccessToStream": "Impossibile aggiungere l'utente '{userName}' ai seguaci. L'utente non ha accesso allo 'stream' del record."
|
||||
"couldNotAddFollowerUserHasNoAccessToStream": "Impossibile aggiungere l'utente '{userName}' ai follower. L'utente non ha accesso allo 'stream' del record."
|
||||
},
|
||||
"syntaxItems": {
|
||||
"code": "Codice",
|
||||
|
||||
@@ -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",
|
||||
@@ -114,7 +115,7 @@
|
||||
"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",
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -44,7 +44,6 @@
|
||||
"monitoredFolders": {
|
||||
"type": "array",
|
||||
"default": ["INBOX"],
|
||||
"options": ["INBOX"],
|
||||
"view": "views/email-account/fields/folders",
|
||||
"displayAsList": true,
|
||||
"noEmptyString": true,
|
||||
|
||||
@@ -43,7 +43,6 @@
|
||||
"monitoredFolders": {
|
||||
"type": "array",
|
||||
"default": ["INBOX"],
|
||||
"options": ["INBOX"],
|
||||
"view": "views/inbound-email/fields/folders",
|
||||
"displayAsList": true,
|
||||
"noEmptyString": true,
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
"chartColorAlternativeList": ["#7492cc", "#c29c4a", "#a1404a", "#6a5f96", "#b07e53"],
|
||||
"calendarColors": {
|
||||
"": "#a58dc7a0",
|
||||
"Meeting": "#6680b3",
|
||||
"Meeting": "#697da5",
|
||||
"Call": "#a1404a",
|
||||
"Task": "#5d8a55"
|
||||
},
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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']);
|
||||
|
||||
@@ -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
22
client/img/logo.svg
Normal 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 |
@@ -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();
|
||||
},
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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({});
|
||||
});
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
6
client/res/templates/fields/array/list-link.tpl
Normal file
6
client/res/templates/fields/array/list-link.tpl
Normal 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>
|
||||
@@ -970,7 +970,7 @@ function (
|
||||
resolve(options);
|
||||
|
||||
return;
|
||||
};
|
||||
}
|
||||
|
||||
this.requestUserData(data => {
|
||||
options = data;
|
||||
|
||||
@@ -766,7 +766,7 @@
|
||||
return new Promise((resolve, reject) => {
|
||||
this.require(
|
||||
subject,
|
||||
() => resolve(),
|
||||
(...args) => resolve(...args),
|
||||
() => reject()
|
||||
);
|
||||
});
|
||||
|
||||
@@ -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`.
|
||||
*/
|
||||
|
||||
@@ -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 || {};
|
||||
|
||||
@@ -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({
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
});
|
||||
});
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
@@ -271,7 +271,7 @@ define(
|
||||
.attr('tabindex', '0')
|
||||
.attr('data-action', 'addToContact')
|
||||
.attr('data-address', address)
|
||||
.text(this.translate('Add to Lead', 'labels', 'Email'))
|
||||
.text(this.translate('Add to Contact', 'labels', 'Email'))
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -43,6 +43,8 @@ function (Dep, RegExpPattern, /** module:ui/multi-select*/MultiSelect) {
|
||||
|
||||
listTemplate: 'fields/array/list',
|
||||
|
||||
listLinkTemplate: 'fields/array/list-link',
|
||||
|
||||
detailTemplate: 'fields/array/detail',
|
||||
|
||||
editTemplate: 'fields/array/edit',
|
||||
|
||||
@@ -770,8 +770,8 @@ define('views/fields/link-multiple', ['views/fields/base', 'helpers/record-modal
|
||||
fetch: function () {
|
||||
let data = {};
|
||||
|
||||
data[this.idsName] = this.ids;
|
||||
data[this.nameHashName] = this.nameHash;
|
||||
data[this.idsName] = Espo.Utils.clone(this.ids);
|
||||
data[this.nameHashName] = Espo.Utils.clone(this.nameHash);
|
||||
|
||||
return data;
|
||||
},
|
||||
|
||||
@@ -36,7 +36,7 @@ define('views/global-search/global-search', ['view'], function (Dep) {
|
||||
'keydown input.global-search-input': function (e) {
|
||||
let key = Espo.Utils.getKeyFromKeyEvent(e);
|
||||
|
||||
if (e.code === 'Enter') {
|
||||
if (e.code === 'Enter' || key === 'Enter' || key === 'Control+Enter') {
|
||||
this.runSearch();
|
||||
|
||||
return;
|
||||
|
||||
@@ -68,7 +68,7 @@ define('views/login', ['view'], function (Dep) {
|
||||
var companyLogoId = this.getConfig().get('companyLogoId');
|
||||
|
||||
if (!companyLogoId) {
|
||||
return this.getBasePath() + ('client/img/logo.png');
|
||||
return this.getBasePath() + ('client/img/logo.svg');
|
||||
}
|
||||
|
||||
return this.getBasePath() + '?entryPoint=LogoImage&id='+companyLogoId;
|
||||
|
||||
@@ -748,6 +748,8 @@ define('views/modal', ['view'], function (Dep) {
|
||||
}
|
||||
|
||||
this.$el.find('footer button[data-name="'+name+'"]').removeClass('hidden');
|
||||
|
||||
this.adjustButtons();
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
@@ -1063,7 +1063,7 @@ function (Dep, ViewRecordHelper, ActionItemSetup) {
|
||||
}
|
||||
|
||||
for (let i = 0; i < this.panelSoftLockedTypeList.length; i++) {
|
||||
var iType = this.panelSoftLockedTypeList[i];
|
||||
let iType = this.panelSoftLockedTypeList[i];
|
||||
|
||||
if (iType === softLockedType) {
|
||||
continue;
|
||||
@@ -1076,13 +1076,13 @@ function (Dep, ViewRecordHelper, ActionItemSetup) {
|
||||
}
|
||||
}
|
||||
|
||||
var middleView = this.getView('middle');
|
||||
let middleView = this.getView('middle');
|
||||
|
||||
if (middleView) {
|
||||
middleView.showPanelInternal(name);
|
||||
}
|
||||
|
||||
var bottomView = this.getView('bottom');
|
||||
let bottomView = this.getView('bottom');
|
||||
|
||||
if (bottomView) {
|
||||
if ('showPanel' in bottomView) {
|
||||
@@ -1090,16 +1090,24 @@ function (Dep, ViewRecordHelper, ActionItemSetup) {
|
||||
}
|
||||
}
|
||||
else if (this.bottomView) {
|
||||
this.once('after:render', () => {
|
||||
var bottomView = this.getView('bottom');
|
||||
this.once('ready', () => {
|
||||
let view = this.getView('bottom');
|
||||
|
||||
if (bottomView && 'showPanel' in bottomView) {
|
||||
bottomView.showPanel(name);
|
||||
if (view) {
|
||||
if ('processShowPanel' in view) {
|
||||
view.processShowPanel(name);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ('showPanel' in view) {
|
||||
view.showPanel(name);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var sideView = this.getView('side');
|
||||
let sideView = this.getView('side');
|
||||
|
||||
if (sideView) {
|
||||
if ('showPanel' in sideView) {
|
||||
@@ -1107,11 +1115,19 @@ function (Dep, ViewRecordHelper, ActionItemSetup) {
|
||||
}
|
||||
}
|
||||
else if (this.sideView) {
|
||||
this.once('after:render', () => {
|
||||
var sideView = this.getView('side');
|
||||
this.once('ready', () => {
|
||||
let view = this.getView('side');
|
||||
|
||||
if (sideView && 'showPanel' in sideView) {
|
||||
sideView.showPanel(name);
|
||||
if (view) {
|
||||
if ('processShowPanel' in view) {
|
||||
view.processShowPanel(name);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ('showPanel' in view) {
|
||||
view.showPanel(name);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -1154,13 +1170,13 @@ function (Dep, ViewRecordHelper, ActionItemSetup) {
|
||||
}
|
||||
}
|
||||
|
||||
var middleView = this.getView('middle');
|
||||
let middleView = this.getView('middle');
|
||||
|
||||
if (middleView) {
|
||||
middleView.hidePanelInternal(name);
|
||||
}
|
||||
|
||||
var bottomView = this.getView('bottom');
|
||||
let bottomView = this.getView('bottom');
|
||||
|
||||
if (bottomView) {
|
||||
if ('hidePanel' in bottomView) {
|
||||
@@ -1168,16 +1184,24 @@ function (Dep, ViewRecordHelper, ActionItemSetup) {
|
||||
}
|
||||
}
|
||||
else if (this.bottomView) {
|
||||
this.once('after:render', () => {
|
||||
var bottomView = this.getView('bottom');
|
||||
this.once('ready', () => {
|
||||
let view = this.getView('bottom');
|
||||
|
||||
if (bottomView && 'showPanel' in bottomView) {
|
||||
bottomView.hidePanel(name);
|
||||
if (view) {
|
||||
if ('processHidePanel' in view) {
|
||||
view.processHidePanel(name);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ('hidePanel' in view) {
|
||||
view.hidePanel(name);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var sideView = this.getView('side');
|
||||
let sideView = this.getView('side');
|
||||
|
||||
if (sideView) {
|
||||
if ('hidePanel' in sideView) {
|
||||
@@ -1185,18 +1209,25 @@ function (Dep, ViewRecordHelper, ActionItemSetup) {
|
||||
}
|
||||
}
|
||||
else if (this.sideView) {
|
||||
this.once('after:render', () => {
|
||||
var sideView = this.getView('side');
|
||||
this.once('ready', () => {
|
||||
let view = this.getView('side');
|
||||
|
||||
if (sideView && 'hidePanel' in sideView) {
|
||||
sideView.hidePanel(name);
|
||||
if (view) {
|
||||
if ('processHidePanel' in view) {
|
||||
view.processHidePanel(name);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ('hidePanel' in view) {
|
||||
view.hidePanel(name);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
this.recordHelper.setPanelStateParam(name, 'hidden', true);
|
||||
|
||||
|
||||
if (this.middlePanelDefs[name]) {
|
||||
this.controlMiddleTabVisibilityHide(this.middlePanelDefs[name].tabNumber);
|
||||
|
||||
|
||||
@@ -183,7 +183,7 @@ define('views/record/kanban', ['views/record/list'], function (Dep) {
|
||||
topBar: this.displayTotalCount || this.buttonList.length && !this.buttonsDisabled,
|
||||
showCount: this.showCount && this.collection.total > 0,
|
||||
buttonList: this.buttonList,
|
||||
displayTotalCount: this.displayTotalCount,
|
||||
displayTotalCount: this.displayTotalCount && this.collection.total >= 0,
|
||||
totalCount: this.collection.total,
|
||||
statusList: this.statusList,
|
||||
groupDataList: this.groupDataList,
|
||||
|
||||
@@ -394,52 +394,57 @@ define('views/record/panels-container', ['view'], function (Dep) {
|
||||
return data;
|
||||
},
|
||||
|
||||
showPanel: function (name, softLockedType, callback) {
|
||||
if (this.recordHelper.getPanelStateParam(name, 'hiddenLocked')) {
|
||||
/**
|
||||
* @param {string} name
|
||||
* @return {boolean}
|
||||
*/
|
||||
hasPanel: function (name) {
|
||||
return !!this.panelList.find(item => item.name === name);
|
||||
},
|
||||
|
||||
processShowPanel: function (name, callback, wasShown) {
|
||||
if (this.recordHelper.getPanelStateParam(name, 'hidden')) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (softLockedType) {
|
||||
this.recordHelper
|
||||
.setPanelStateParam(name, 'hidden' + Espo.Utils.upperCaseFirst(softLockedType) + 'Locked',
|
||||
false);
|
||||
if (!this.hasPanel(name)) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (var i = 0; i < this.panelSoftLockedTypeList.length; i++) {
|
||||
var iType = this.panelSoftLockedTypeList[i];
|
||||
this.panelList.filter(item => item.name === name).forEach(item => {
|
||||
item.hidden = false;
|
||||
|
||||
if (iType === softLockedType) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var iParam = 'hidden' + Espo.Utils.upperCaseFirst(iType) + 'Locked';
|
||||
|
||||
if (this.recordHelper.getPanelStateParam(name, iParam)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
let wasShown = this.recordHelper.getPanelStateParam(name, 'hidden') === false;
|
||||
|
||||
this.recordHelper.setPanelStateParam(name, 'hidden', false);
|
||||
|
||||
var isFound = false;
|
||||
|
||||
this.panelList.forEach(d => {
|
||||
if (d.name === name) {
|
||||
d.hidden = false;
|
||||
isFound = true;
|
||||
|
||||
this.controlTabVisibilityShow(d.tabNumber);
|
||||
if (typeof item.tabNumber !== 'undefined') {
|
||||
this.controlTabVisibilityShow(item.tabNumber);
|
||||
}
|
||||
});
|
||||
|
||||
if (!isFound) {
|
||||
this.showPanelFinalize(name, callback, wasShown);
|
||||
},
|
||||
|
||||
processHidePanel: function (name, callback) {
|
||||
if (!this.recordHelper.getPanelStateParam(name, 'hidden')) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.hasPanel(name)) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.panelList.filter(item => item.name === name).forEach(item => {
|
||||
item.hidden = true;
|
||||
|
||||
if (typeof item.tabNumber !== 'undefined') {
|
||||
this.controlTabVisibilityHide(item.tabNumber);
|
||||
}
|
||||
});
|
||||
|
||||
this.hidePanelFinalize(name, callback);
|
||||
},
|
||||
|
||||
showPanelFinalize: function (name, callback, wasShown) {
|
||||
if (this.isRendered()) {
|
||||
var view = this.getView(name);
|
||||
let view = this.getView(name);
|
||||
|
||||
if (view) {
|
||||
view.$el.closest('.panel').removeClass('hidden');
|
||||
@@ -448,7 +453,7 @@ define('views/record/panels-container', ['view'], function (Dep) {
|
||||
view.trigger('show');
|
||||
|
||||
if (!wasShown && view.getFieldViews) {
|
||||
var fields = view.getFieldViews();
|
||||
let fields = view.getFieldViews();
|
||||
|
||||
if (fields) {
|
||||
for (let i in fields) {
|
||||
@@ -482,38 +487,9 @@ define('views/record/panels-container', ['view'], function (Dep) {
|
||||
});
|
||||
},
|
||||
|
||||
hidePanel: function (name, locked, softLockedType, callback) {
|
||||
this.recordHelper.setPanelStateParam(name, 'hidden', true);
|
||||
|
||||
if (locked) {
|
||||
this.recordHelper.setPanelStateParam(name, 'hiddenLocked', true);
|
||||
}
|
||||
|
||||
if (softLockedType) {
|
||||
this.recordHelper.setPanelStateParam(
|
||||
name,
|
||||
'hidden' + Espo.Utils.upperCaseFirst(softLockedType) + 'Locked',
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
var isFound = false;
|
||||
|
||||
this.panelList.forEach(d => {
|
||||
if (d.name === name) {
|
||||
d.hidden = true;
|
||||
isFound = true;
|
||||
|
||||
this.controlTabVisibilityHide(d.tabNumber);
|
||||
}
|
||||
});
|
||||
|
||||
if (!isFound) {
|
||||
return;
|
||||
}
|
||||
|
||||
hidePanelFinalize: function (name, callback) {
|
||||
if (this.isRendered()) {
|
||||
var view = this.getView(name);
|
||||
let view = this.getView(name);
|
||||
|
||||
if (view) {
|
||||
view.$el.closest('.panel').addClass('hidden');
|
||||
@@ -537,6 +513,62 @@ define('views/record/panels-container', ['view'], function (Dep) {
|
||||
}
|
||||
},
|
||||
|
||||
showPanel: function (name, softLockedType, callback) {
|
||||
if (!this.hasPanel(name)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.recordHelper.getPanelStateParam(name, 'hiddenLocked')) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (softLockedType) {
|
||||
let param = 'hidden' + Espo.Utils.upperCaseFirst(softLockedType) + 'Locked';
|
||||
|
||||
this.recordHelper.setPanelStateParam(name, param, false);
|
||||
|
||||
for (let i = 0; i < this.panelSoftLockedTypeList.length; i++) {
|
||||
let iType = this.panelSoftLockedTypeList[i];
|
||||
|
||||
if (iType === softLockedType) {
|
||||
continue;
|
||||
}
|
||||
|
||||
let iParam = 'hidden' + Espo.Utils.upperCaseFirst(iType) + 'Locked';
|
||||
|
||||
if (this.recordHelper.getPanelStateParam(name, iParam)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let wasShown = this.recordHelper.getPanelStateParam(name, 'hidden') === false;
|
||||
|
||||
this.recordHelper.setPanelStateParam(name, 'hidden', false);
|
||||
|
||||
this.processShowPanel(name, callback, wasShown);
|
||||
},
|
||||
|
||||
hidePanel: function (name, locked, softLockedType, callback) {
|
||||
if (!this.hasPanel(name)) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.recordHelper.setPanelStateParam(name, 'hidden', true);
|
||||
|
||||
if (locked) {
|
||||
this.recordHelper.setPanelStateParam(name, 'hiddenLocked', true);
|
||||
}
|
||||
|
||||
if (softLockedType) {
|
||||
let param = 'hidden' + Espo.Utils.upperCaseFirst(softLockedType) + 'Locked';
|
||||
|
||||
this.recordHelper.setPanelStateParam(name, param, true);
|
||||
}
|
||||
|
||||
this.processHidePanel(name, callback);
|
||||
},
|
||||
|
||||
alterPanels: function (layoutData) {
|
||||
layoutData = layoutData || this.layoutData || {};
|
||||
|
||||
@@ -749,6 +781,26 @@ define('views/record/panels-container', ['view'], function (Dep) {
|
||||
this.$el.find(`.panel[data-tab="${tab}"]`).removeClass('tab-hidden');
|
||||
|
||||
this.adjustPanels();
|
||||
|
||||
this.panelList
|
||||
.filter(item => item.tabNumber === tab && item.name)
|
||||
.forEach(item => {
|
||||
let view = this.getView(item.name);
|
||||
|
||||
if (view) {
|
||||
view.trigger('tab-show');
|
||||
}
|
||||
});
|
||||
|
||||
this.panelList
|
||||
.filter(item => item.tabNumber !== tab && item.name)
|
||||
.forEach(item => {
|
||||
let view = this.getView(item.name);
|
||||
|
||||
if (view) {
|
||||
view.trigger('tab-hide');
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
@@ -344,5 +344,28 @@ define('views/record/panels/bottom', ['view'], function (Dep) {
|
||||
|
||||
this.createView(viewKey, viewName, o);
|
||||
},
|
||||
|
||||
/**
|
||||
* Is tab-hidden.
|
||||
*
|
||||
* @return {boolean}
|
||||
*/
|
||||
isTabHidden: function () {
|
||||
if (this.defs.tabNumber === -1 || typeof this.defs.tabNumber === 'undefined') {
|
||||
return false;
|
||||
}
|
||||
|
||||
let parentView = this.getParentView();
|
||||
|
||||
if (!parentView) {
|
||||
return this.defs.tabNumber > 0;
|
||||
}
|
||||
|
||||
if (parentView && parentView.hasTabs) {
|
||||
return parentView.currentTab !== defs.tabNumber;
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
@@ -384,5 +384,28 @@ define('views/record/panels/side', ['view'], function (Dep) {
|
||||
actionRefresh: function () {
|
||||
this.model.fetch();
|
||||
},
|
||||
|
||||
/**
|
||||
* Is tab-hidden.
|
||||
*
|
||||
* @return {boolean}
|
||||
*/
|
||||
isTabHidden: function () {
|
||||
if (this.defs.tabNumber === -1 || typeof this.defs.tabNumber === 'undefined') {
|
||||
return false;
|
||||
}
|
||||
|
||||
let parentView = this.getParentView();
|
||||
|
||||
if (!parentView) {
|
||||
return this.defs.tabNumber > 0;
|
||||
}
|
||||
|
||||
if (parentView && parentView.hasTabs) {
|
||||
return parentView.currentTab !== defs.tabNumber;
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
@@ -326,7 +326,9 @@ define('views/record/search', ['view'], function (Dep) {
|
||||
|
||||
events: {
|
||||
'keydown input[data-name="textFilter"]': function (e) {
|
||||
if (e.code === 'Enter') {
|
||||
let key = Espo.Utils.getKeyFromKeyEvent(e);
|
||||
|
||||
if (e.code === 'Enter' || key === 'Enter' || key === 'Control+Enter') {
|
||||
this.search();
|
||||
|
||||
this.hideApplyFiltersButton();
|
||||
@@ -449,8 +451,6 @@ define('views/record/search', ['view'], function (Dep) {
|
||||
if (this.isSearchedWithAdvancedFilter) {
|
||||
this.showResetFiltersButton();
|
||||
|
||||
console.log(this.$applyFilters.get(0));
|
||||
|
||||
this.$applyFilters.focus();
|
||||
|
||||
return;
|
||||
|
||||
@@ -26,14 +26,14 @@
|
||||
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
|
||||
************************************************************************/
|
||||
|
||||
define('views/site-portal/navbar', 'views/site/navbar', function (Dep) {
|
||||
define('views/site-portal/navbar', ['views/site/navbar'], function (Dep) {
|
||||
|
||||
return Dep.extend({
|
||||
|
||||
getLogoSrc: function () {
|
||||
var companyLogoId = this.getConfig().get('companyLogoId');
|
||||
if (!companyLogoId) {
|
||||
return this.getBasePath() + (this.getThemeManager().getParam('logo') || 'client/img/logo.png');
|
||||
return this.getBasePath() + (this.getThemeManager().getParam('logo') || 'client/img/logo.svg');
|
||||
}
|
||||
return this.getBasePath() + '?entryPoint=LogoImage&id='+companyLogoId+'&t=' + companyLogoId;
|
||||
},
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user