mirror of
https://github.com/espocrm/espocrm.git
synced 2026-03-10 05:17:00 +00:00
Compare commits
107 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9b170483da | ||
|
|
71ecc3c59e | ||
|
|
04039f5bc3 | ||
|
|
94d0bccd96 | ||
|
|
72a12636b3 | ||
|
|
bfbc69fb25 | ||
|
|
206dc36a78 | ||
|
|
65f285e93f | ||
|
|
41f842e581 | ||
|
|
9879f749e4 | ||
|
|
b88686816b | ||
|
|
08da60b1b0 | ||
|
|
987b838856 | ||
|
|
8ba79cce2a | ||
|
|
3a48b155e2 | ||
|
|
c5af04ec2b | ||
|
|
62f0b6ad04 | ||
|
|
e7787b18a3 | ||
|
|
e77127e2d5 | ||
|
|
a44a25f2e7 | ||
|
|
2ec595f8b0 | ||
|
|
9d61f22296 | ||
|
|
69a99667a3 | ||
|
|
f7c5e8773d | ||
|
|
1e7bdaa991 | ||
|
|
fcd40af7c9 | ||
|
|
8d949fa1fc | ||
|
|
d9504360d9 | ||
|
|
09c34ff006 | ||
|
|
dfc3f0a5d3 | ||
|
|
0a3f1dad50 | ||
|
|
3772e1e839 | ||
|
|
c4f5416adf | ||
|
|
fcdb9aca5d | ||
|
|
eaadcca1a9 | ||
|
|
f0bff56146 | ||
|
|
92e2177ed3 | ||
|
|
de72e6d6af | ||
|
|
32a8efad0e | ||
|
|
f8523cf2b6 | ||
|
|
4e1df42f36 | ||
|
|
9a60ee9fe6 | ||
|
|
19f1ef75fd | ||
|
|
b29172ad18 | ||
|
|
8f201944a4 | ||
|
|
6c9a350e43 | ||
|
|
6f1be59b4c | ||
|
|
5a15fcbbb5 | ||
|
|
9084e6b679 | ||
|
|
ccb4fb13a9 | ||
|
|
b07c3b62cf | ||
|
|
d4805acef7 | ||
|
|
0637304a4f | ||
|
|
8f9089f0a3 | ||
|
|
83ccec26ee | ||
|
|
db427c0bf1 | ||
|
|
0785ab9ee1 | ||
|
|
767dcd1e9f | ||
|
|
7e997b224b | ||
|
|
1c11442aea | ||
|
|
7a08eea518 | ||
|
|
cb14ca4627 | ||
|
|
7a6a8bc707 | ||
|
|
cc3ba89ab3 | ||
|
|
88135f93fe | ||
|
|
1148e391a6 | ||
|
|
f7c5706004 | ||
|
|
3120afb55e | ||
|
|
e991241ad2 | ||
|
|
22e7756083 | ||
|
|
f2e48df7ea | ||
|
|
3b4dc45984 | ||
|
|
d9b1418f36 | ||
|
|
443016790a | ||
|
|
ca9253ecd5 | ||
|
|
395b11474e | ||
|
|
1c7fb79b33 | ||
|
|
c6c16cd488 | ||
|
|
a56502b814 | ||
|
|
24137df013 | ||
|
|
b945473422 | ||
|
|
ab7db9d084 | ||
|
|
c36007f216 | ||
|
|
1d8cc18411 | ||
|
|
723fc52d1c | ||
|
|
073aedc18b | ||
|
|
035abf03cb | ||
|
|
50dbc60a5c | ||
|
|
dbdc83c544 | ||
|
|
1d743afd2a | ||
|
|
094bf69fab | ||
|
|
706226298a | ||
|
|
322bbb5d95 | ||
|
|
5c12c6133f | ||
|
|
417367838c | ||
|
|
6f1cc78329 | ||
|
|
a2faab036c | ||
|
|
a32441543c | ||
|
|
f4497402ca | ||
|
|
ef6548bc82 | ||
|
|
f1bf0b3dee | ||
|
|
ec23cae38d | ||
|
|
771e3237cf | ||
|
|
ae72146d14 | ||
|
|
20d6865323 | ||
|
|
89e13b0bac | ||
|
|
8fa36ac14c |
@@ -134,7 +134,7 @@ class Application
|
||||
public function runCron()
|
||||
{
|
||||
$auth = $this->createAuth();
|
||||
$auth->useNoAuth(true);
|
||||
$auth->useNoAuth();
|
||||
|
||||
$cronManager = new \Espo\Core\CronManager($this->container);
|
||||
$cronManager->run();
|
||||
@@ -327,6 +327,7 @@ class Application
|
||||
public function setupSystemUser()
|
||||
{
|
||||
$user = $this->getContainer()->get('entityManager')->getEntity('User', 'system');
|
||||
$user->set('isAdmin', true);
|
||||
$this->getContainer()->setUser($user);
|
||||
$this->getContainer()->get('entityManager')->setUser($user);
|
||||
}
|
||||
|
||||
@@ -111,6 +111,31 @@ class Container
|
||||
);
|
||||
}
|
||||
|
||||
protected function loadLog()
|
||||
{
|
||||
$config = $this->get('config');
|
||||
|
||||
$path = $config->get('logger.path', 'data/logs/espo.log');
|
||||
$rotation = $config->get('logger.rotation', true);
|
||||
|
||||
$log = new \Espo\Core\Utils\Log('Espo');
|
||||
$levelCode = $log->getLevelCode($config->get('logger.level', 'WARNING'));
|
||||
|
||||
if ($rotation) {
|
||||
$maxFileNumber = $config->get('logger.maxFileNumber', 30);
|
||||
$handler = new \Espo\Core\Utils\Log\Monolog\Handler\RotatingFileHandler($path, $maxFileNumber, $levelCode);
|
||||
} else {
|
||||
$handler = new \Espo\Core\Utils\Log\Monolog\Handler\StreamHandler($path, $levelCode);
|
||||
}
|
||||
$log->pushHandler($handler);
|
||||
|
||||
$errorHandler = new \Monolog\ErrorHandler($log);
|
||||
$errorHandler->registerExceptionHandler(null, false);
|
||||
$errorHandler->registerErrorHandler(array(), false);
|
||||
|
||||
return $log;
|
||||
}
|
||||
|
||||
protected function loadFileManager()
|
||||
{
|
||||
return new \Espo\Core\Utils\File\Manager(
|
||||
|
||||
@@ -386,6 +386,10 @@ class Xlsx extends \Espo\Core\Injectable
|
||||
$rowNumber++;
|
||||
}
|
||||
|
||||
$sheet->getStyle("A2:A$rowNumber")
|
||||
->getNumberFormat()
|
||||
->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_TEXT);
|
||||
|
||||
$startingRowNumber = 4;
|
||||
|
||||
foreach ($fieldList as $i => $name) {
|
||||
@@ -393,42 +397,37 @@ class Xlsx extends \Espo\Core\Injectable
|
||||
|
||||
$type = $typesCache[$name];
|
||||
|
||||
if ($col == 'A') {
|
||||
$sheet->getStyle("A2:A$rowNumber")
|
||||
->getNumberFormat()
|
||||
->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_TEXT);
|
||||
} else {
|
||||
switch($type) {
|
||||
case 'currency':
|
||||
case 'currencyConverted': {
|
||||
|
||||
} break;
|
||||
case 'int': {
|
||||
$sheet->getStyle($col.$startingRowNumber.':'.$col.$rowNumber)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('0');
|
||||
} break;
|
||||
case 'date': {
|
||||
$sheet->getStyle($col.$startingRowNumber.':'.$col.$rowNumber)
|
||||
->getNumberFormat()
|
||||
->setFormatCode($this->getInjection('dateTime')->getDateFormat());
|
||||
} break;
|
||||
case 'datetime': {
|
||||
$sheet->getStyle($col.$startingRowNumber.':'.$col.$rowNumber)
|
||||
->getNumberFormat()
|
||||
->setFormatCode($this->getInjection('dateTime')->getDateTimeFormat());
|
||||
} break;
|
||||
case 'datetimeOptional': {
|
||||
$sheet->getStyle($col.$startingRowNumber.':'.$col.$rowNumber)
|
||||
->getNumberFormat()
|
||||
->setFormatCode($this->getInjection('dateTime')->getDateTimeFormat());
|
||||
} break;
|
||||
default: {
|
||||
$sheet->getStyle($col.$startingRowNumber.':'.$col.$rowNumber)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('@');
|
||||
} break;
|
||||
}
|
||||
switch($type) {
|
||||
case 'currency':
|
||||
case 'currencyConverted': {
|
||||
|
||||
} break;
|
||||
case 'int': {
|
||||
$sheet->getStyle($col.$startingRowNumber.':'.$col.$rowNumber)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('0');
|
||||
} break;
|
||||
case 'date': {
|
||||
$sheet->getStyle($col.$startingRowNumber.':'.$col.$rowNumber)
|
||||
->getNumberFormat()
|
||||
->setFormatCode($this->getInjection('dateTime')->getDateFormat());
|
||||
} break;
|
||||
case 'datetime': {
|
||||
$sheet->getStyle($col.$startingRowNumber.':'.$col.$rowNumber)
|
||||
->getNumberFormat()
|
||||
->setFormatCode($this->getInjection('dateTime')->getDateTimeFormat());
|
||||
} break;
|
||||
case 'datetimeOptional': {
|
||||
$sheet->getStyle($col.$startingRowNumber.':'.$col.$rowNumber)
|
||||
->getNumberFormat()
|
||||
->setFormatCode($this->getInjection('dateTime')->getDateTimeFormat());
|
||||
} break;
|
||||
default: {
|
||||
$sheet->getStyle($col.$startingRowNumber.':'.$col.$rowNumber)
|
||||
->getNumberFormat()
|
||||
->setFormatCode('@');
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -70,6 +70,11 @@ class AttributeFetcher
|
||||
if ($parent = $entity->get($relationName)) {
|
||||
return $parent->get('name');
|
||||
}
|
||||
} else if ($entity->getAttributeParam($attribute, 'isLinkMultipleIdList') && $methodName == 'get') {
|
||||
$relationName = $entity->getAttributeParam($attribute, 'relation');
|
||||
if (!$entity->has($attribute)) {
|
||||
$entity->loadLinkMultipleField($relationName);
|
||||
}
|
||||
}
|
||||
|
||||
return $entity->$methodName($attribute);
|
||||
|
||||
@@ -27,33 +27,24 @@
|
||||
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
|
||||
************************************************************************/
|
||||
|
||||
namespace Espo\Core\Loaders;
|
||||
namespace Espo\Core\Formula\Functions\ArrayGroup;
|
||||
|
||||
class Log extends Base
|
||||
use \Espo\Core\Exceptions\Error;
|
||||
|
||||
class LengthType extends \Espo\Core\Formula\Functions\Base
|
||||
{
|
||||
public function load()
|
||||
public function process(\StdClass $item)
|
||||
{
|
||||
$config = $this->getContainer()->get('config');
|
||||
|
||||
$path = $config->get('logger.path', 'data/logs/espo.log');
|
||||
$rotation = $config->get('logger.rotation', true);
|
||||
|
||||
$log = new \Espo\Core\Utils\Log('Espo');
|
||||
$levelCode = $log->getLevelCode($config->get('logger.level', 'WARNING'));
|
||||
|
||||
if ($rotation) {
|
||||
$maxFileNumber = $config->get('logger.maxFileNumber', 30);
|
||||
$handler = new \Espo\Core\Utils\Log\Monolog\Handler\RotatingFileHandler($path, $maxFileNumber, $levelCode);
|
||||
} else {
|
||||
$handler = new \Espo\Core\Utils\Log\Monolog\Handler\StreamHandler($path, $levelCode);
|
||||
if (!property_exists($item, 'value')) {
|
||||
throw new Error();
|
||||
}
|
||||
$log->pushHandler($handler);
|
||||
|
||||
$errorHandler = new \Monolog\ErrorHandler($log);
|
||||
$errorHandler->registerExceptionHandler(null, false);
|
||||
$errorHandler->registerErrorHandler(array(), false);
|
||||
$list = $this->evaluate($item->value[0]);
|
||||
|
||||
return $log;
|
||||
if (!is_array($list)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return count($list);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
<?php
|
||||
<?php
|
||||
/************************************************************************
|
||||
* This file is part of EspoCRM.
|
||||
*
|
||||
@@ -54,10 +54,20 @@ class AddLinkMultipleIdType extends \Espo\Core\Formula\Functions\Base
|
||||
if (!is_string($link)) {
|
||||
throw new Error();
|
||||
}
|
||||
if (!is_string($id)) {
|
||||
throw new Error();
|
||||
}
|
||||
|
||||
$this->getEntity()->addLinkMultipleId($link, $id);
|
||||
if (is_array($id)) {
|
||||
$idList = $id;
|
||||
foreach ($idList as $id) {
|
||||
if (!is_string($id)) {
|
||||
throw new Error();
|
||||
}
|
||||
$this->getEntity()->addLinkMultipleId($link, $id);
|
||||
}
|
||||
} else {
|
||||
if (!is_string($id)) {
|
||||
throw new Error();
|
||||
}
|
||||
$this->getEntity()->addLinkMultipleId($link, $id);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
<?php
|
||||
<?php
|
||||
/************************************************************************
|
||||
* This file is part of EspoCRM.
|
||||
*
|
||||
@@ -40,6 +40,12 @@ class ValueType extends Base
|
||||
throw new Error();
|
||||
}
|
||||
|
||||
return $item->value;
|
||||
$value = $item->value;
|
||||
|
||||
if (is_string($value)) {
|
||||
$value = str_replace("\\n", "\n", $value);
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
<?php
|
||||
<?php
|
||||
/************************************************************************
|
||||
* This file is part of EspoCRM.
|
||||
*
|
||||
@@ -47,7 +47,7 @@ class VariableType extends Base
|
||||
}
|
||||
|
||||
if (!property_exists($this->getVariables(), $name)) {
|
||||
throw new Error();
|
||||
return null;
|
||||
}
|
||||
|
||||
return $this->getVariables()->$name;
|
||||
|
||||
@@ -393,6 +393,9 @@ class Parser
|
||||
{
|
||||
$functionContent = trim($functionContent);
|
||||
|
||||
$isString = false;
|
||||
$isSingleQuote = false;
|
||||
|
||||
if ($functionContent === '') {
|
||||
return [];
|
||||
}
|
||||
@@ -400,13 +403,35 @@ class Parser
|
||||
$commaIndexList = [];
|
||||
$braceCounter = 0;
|
||||
for ($i = 0; $i < strlen($functionContent); $i++) {
|
||||
if ($functionContent[$i] === '(') {
|
||||
$braceCounter++;
|
||||
} else if ($functionContent[$i] === ')') {
|
||||
$braceCounter--;
|
||||
if ($functionContent[$i] === "'" && ($i === 0 || $functionContent[$i - 1] !== "\\")) {
|
||||
if (!$isString) {
|
||||
$isString = true;
|
||||
$isSingleQuote = true;
|
||||
} else {
|
||||
if ($isSingleQuote) {
|
||||
$isString = false;
|
||||
}
|
||||
}
|
||||
} else if ($functionContent[$i] === "\"" && ($i === 0 || $functionContent[$i - 1] !== "\\")) {
|
||||
if (!$isString) {
|
||||
$isString = true;
|
||||
$isSingleQuote = false;
|
||||
} else {
|
||||
if (!$isSingleQuote) {
|
||||
$isString = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($braceCounter === 0 && $functionContent[$i] === ',') {
|
||||
if (!$isString) {
|
||||
if ($functionContent[$i] === '(') {
|
||||
$braceCounter++;
|
||||
} else if ($functionContent[$i] === ')') {
|
||||
$braceCounter--;
|
||||
}
|
||||
}
|
||||
|
||||
if ($braceCounter === 0 && !$isString && $functionContent[$i] === ',') {
|
||||
$commaIndexList[] = $i;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,6 +121,8 @@ class Htmlizer
|
||||
$v = [];
|
||||
}
|
||||
foreach ($v as $k => $w) {
|
||||
$keyRaw = $k . '_RAW';
|
||||
$v[$keyRaw] = $v[$k];
|
||||
$v[$k] = $this->format($v[$k]);
|
||||
}
|
||||
$newList[] = $v;
|
||||
@@ -134,6 +136,8 @@ class Htmlizer
|
||||
$data[$field] = get_object_vars($value);
|
||||
}
|
||||
foreach ($data[$field] as $k => $w) {
|
||||
$keyRaw = $k . '_RAW';
|
||||
$data[$field][$keyRaw] = $data[$field][$k];
|
||||
$data[$field][$k] = $this->format($data[$field][$k]);
|
||||
}
|
||||
}
|
||||
@@ -142,7 +146,9 @@ class Htmlizer
|
||||
}
|
||||
|
||||
if (array_key_exists($field, $data)) {
|
||||
$data[$field] = $this->format($data[$field]);
|
||||
$keyRaw = $field . '_RAW';
|
||||
$data[$keyRaw] = $data[$field];
|
||||
$data[$field] = $this->format($data[$field]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -171,12 +177,54 @@ class Htmlizer
|
||||
public function render(Entity $entity, $template, $id = null, $additionalData = array(), $skipLinks = false)
|
||||
{
|
||||
$code = \LightnCandy::compile($template, [
|
||||
'flags' => \LightnCandy::FLAG_HANDLEBARSJS,
|
||||
'helpers' => [
|
||||
'file' => function ($context, $options) {
|
||||
if (count($context) && $context[0]) {
|
||||
$id = $context[0];
|
||||
return "?entryPoint=attachment&id=" . $id;
|
||||
}
|
||||
},
|
||||
'numberFormat' => function ($context, $options) {
|
||||
if ($context && isset($context[0])) {
|
||||
$number = $context[0];
|
||||
|
||||
$decimals = 0;
|
||||
$decimalPoint = '.';
|
||||
$thousandsSeparator = ',';
|
||||
|
||||
if (isset($options['decimals'])) {
|
||||
$decimals = $options['decimals'];
|
||||
}
|
||||
if (isset($options['decimalPoint'])) {
|
||||
$decimalPoint = $options['decimalPoint'];
|
||||
}
|
||||
if (isset($options['thousandsSeparator'])) {
|
||||
$thousandsSeparator = $options['thousandsSeparator'];
|
||||
}
|
||||
return number_format($number, $decimals, $decimalPoint, $thousandsSeparator);
|
||||
}
|
||||
return '';
|
||||
}
|
||||
],
|
||||
'hbhelpers' => [
|
||||
'ifEqual' => function () {
|
||||
$args = func_get_args();
|
||||
$context = $args[count($args) - 1];
|
||||
if ($args[0] === $args[1]) {
|
||||
return $context['fn']();
|
||||
} else {
|
||||
return $context['inverse'] ? $context['inverse']() : '';
|
||||
}
|
||||
},
|
||||
'ifNotEqual' => function () {
|
||||
$args = func_get_args();
|
||||
$context = $args[count($args) - 1];
|
||||
if ($args[0] !== $args[1]) {
|
||||
return $context['fn']();
|
||||
} else {
|
||||
return $context['inverse'] ? $context['inverse']() : '';
|
||||
}
|
||||
}
|
||||
]
|
||||
]);
|
||||
|
||||
@@ -45,7 +45,12 @@ class EntityManager extends Base
|
||||
'metadata' => $this->getContainer()->get('ormMetadata')->getData(),
|
||||
'repositoryFactoryClassName' => '\\Espo\\Core\\ORM\\RepositoryFactory',
|
||||
'driver' => $config->get('database.driver'),
|
||||
'platform' => $config->get('database.platform')
|
||||
'platform' => $config->get('database.platform'),
|
||||
'sslCA' => $config->get('database.sslCA'),
|
||||
'sslCert' => $config->get('database.sslCert'),
|
||||
'sslKey' => $config->get('database.sslKey'),
|
||||
'sslCAPath' => $config->get('database.sslCAPath'),
|
||||
'sslCipher' => $config->get('database.sslCipher')
|
||||
);
|
||||
|
||||
$entityManager = new \Espo\Core\ORM\EntityManager($params);
|
||||
|
||||
@@ -203,8 +203,10 @@ class Importer
|
||||
} catch (\Exception $e) {}
|
||||
}
|
||||
|
||||
$inlineAttachmentList = [];
|
||||
|
||||
if (!$fetchOnlyHeader) {
|
||||
$parser->fetchContentParts($email, $message);
|
||||
$parser->fetchContentParts($email, $message, $inlineAttachmentList);
|
||||
|
||||
if ($this->getFiltersMatcher()->match($email, $filterList)) {
|
||||
return false;
|
||||
@@ -299,6 +301,14 @@ class Importer
|
||||
|
||||
$this->getEntityManager()->saveEntity($email);
|
||||
|
||||
foreach ($inlineAttachmentList as $attachment) {
|
||||
$attachment->set(array(
|
||||
'relatedId' => $email->id,
|
||||
'relatedType' => 'Email'
|
||||
));
|
||||
$this->getEntityManager()->saveEntity($attachment);
|
||||
}
|
||||
|
||||
return $email;
|
||||
}
|
||||
|
||||
|
||||
@@ -143,7 +143,7 @@ class MailMimeParser
|
||||
return $addressList;
|
||||
}
|
||||
|
||||
public function fetchContentParts(\Espo\Entities\Email $email, $message)
|
||||
public function fetchContentParts(\Espo\Entities\Email $email, $message, &$inlineAttachmentList = [])
|
||||
{
|
||||
$this->loadContent($message);
|
||||
|
||||
@@ -202,6 +202,7 @@ class MailMimeParser
|
||||
if ($contentId) {
|
||||
$inlineIds[$contentId] = $attachment->id;
|
||||
}
|
||||
$inlineAttachmentList[] = $attachment;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -133,7 +133,7 @@ class PhpMimeMailParser
|
||||
return $addressList;
|
||||
}
|
||||
|
||||
public function fetchContentParts(\Espo\Entities\Email $email, $message)
|
||||
public function fetchContentParts(\Espo\Entities\Email $email, $message, &$inlineAttachmentList = [])
|
||||
{
|
||||
$this->loadContent($message);
|
||||
|
||||
@@ -187,6 +187,7 @@ class PhpMimeMailParser
|
||||
if ($contentId) {
|
||||
$inlineIds[$contentId] = $attachment->id;
|
||||
}
|
||||
$inlineAttachmentList[] = $attachment;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -125,7 +125,7 @@ class ZendMail
|
||||
return $addressList;
|
||||
}
|
||||
|
||||
public function fetchContentParts(\Espo\Entities\Email $email, $message)
|
||||
public function fetchContentParts(\Espo\Entities\Email $email, $message, &$inlineAttachmentList = [])
|
||||
{
|
||||
$zendMessage = $message->getZendMessage();
|
||||
|
||||
@@ -133,10 +133,10 @@ class ZendMail
|
||||
|
||||
if ($zendMessage->isMultipart()) {
|
||||
foreach (new \RecursiveIteratorIterator($zendMessage) as $part) {
|
||||
$this->importPartDataToEmail($email, $part, $inlineIds);
|
||||
$this->importPartDataToEmail($email, $part, $inlineIds, null, $inlineAttachmentList);
|
||||
}
|
||||
} else {
|
||||
$this->importPartDataToEmail($email, $zendMessage, $inlineIds, 'text/plain');
|
||||
$this->importPartDataToEmail($email, $zendMessage, $inlineIds, 'text/plain', $inlineAttachmentList);
|
||||
}
|
||||
|
||||
if (!$email->get('body') && $email->get('bodyPlain')) {
|
||||
@@ -156,7 +156,7 @@ class ZendMail
|
||||
}
|
||||
}
|
||||
|
||||
protected function importPartDataToEmail(\Espo\Entities\Email $email, $part, &$inlineIds = array(), $defaultContentType = null)
|
||||
protected function importPartDataToEmail(\Espo\Entities\Email $email, $part, &$inlineIds = array(), $defaultContentType = null, &$inlineAttachmentList = [])
|
||||
{
|
||||
try {
|
||||
$type = null;
|
||||
@@ -275,6 +275,7 @@ class ZendMail
|
||||
}
|
||||
} else if ($disposition == 'inline') {
|
||||
$inlineIds[$contentId] = $attachment->id;
|
||||
$inlineAttachmentList[] = $attachment;
|
||||
}
|
||||
}
|
||||
} catch (\Exception $e) {}
|
||||
|
||||
@@ -92,26 +92,35 @@ class Base implements Injectable
|
||||
|
||||
public function process(Entity $entity)
|
||||
{
|
||||
if ($entity->has('assignedUserId') && $entity->get('assignedUserId')) {
|
||||
$assignedUserId = $entity->get('assignedUserId');
|
||||
if ($assignedUserId != $this->getUser()->id && $entity->isFieldChanged('assignedUserId')) {
|
||||
$notification = $this->getEntityManager()->getEntity('Notification');
|
||||
$notification->set(array(
|
||||
'type' => 'Assign',
|
||||
'userId' => $assignedUserId,
|
||||
'data' => array(
|
||||
'entityType' => $entity->getEntityType(),
|
||||
'entityId' => $entity->id,
|
||||
'entityName' => $entity->get('name'),
|
||||
'isNew' => $entity->isNew(),
|
||||
'userId' => $this->getUser()->id,
|
||||
'userName' => $this->getUser()->get('name')
|
||||
)
|
||||
));
|
||||
$this->getEntityManager()->saveEntity($notification);
|
||||
if (!$entity->get('assignedUserId')) return;
|
||||
if (!$entity->isFieldChanged('assignedUserId')) return;
|
||||
|
||||
$assignedUserId = $entity->get('assignedUserId');
|
||||
|
||||
if ($entity->hasAttribute('createdById') && $entity->hasAttribute('modifiedById')) {
|
||||
if ($entity->isNew()) {
|
||||
$isNotSelfAssignment = $assignedUserId !== $entity->get('createdById');
|
||||
} else {
|
||||
$isNotSelfAssignment = $assignedUserId !== $entity->get('modifiedById');
|
||||
}
|
||||
} else {
|
||||
$isNotSelfAssignment = $assignedUserId !== $this->getUser()->id;
|
||||
}
|
||||
if (!$isNotSelfAssignment) return;
|
||||
|
||||
$notification = $this->getEntityManager()->getEntity('Notification');
|
||||
$notification->set(array(
|
||||
'type' => 'Assign',
|
||||
'userId' => $assignedUserId,
|
||||
'data' => array(
|
||||
'entityType' => $entity->getEntityType(),
|
||||
'entityId' => $entity->id,
|
||||
'entityName' => $entity->get('name'),
|
||||
'isNew' => $entity->isNew(),
|
||||
'userId' => $this->getUser()->id,
|
||||
'userName' => $this->getUser()->get('name')
|
||||
)
|
||||
));
|
||||
$this->getEntityManager()->saveEntity($notification);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -50,6 +50,23 @@ class Entity extends \Espo\ORM\Entity
|
||||
$defs['additionalColumns'] = $columns;
|
||||
}
|
||||
|
||||
$foreignEntityType = $this->getRelationParam($field, 'entity');
|
||||
if ($foreignEntityType && $this->entityManager) {
|
||||
$foreignEntityDefs = $this->entityManager->getMetadata()->get($foreignEntityType);
|
||||
if ($foreignEntityDefs && !empty($foreignEntityDefs['collection'])) {
|
||||
$collectionDefs = $foreignEntityDefs['collection'];
|
||||
if (!empty($foreignEntityDefs['collection']['orderBy'])) {
|
||||
$orderBy = $foreignEntityDefs['collection']['orderBy'];
|
||||
$order = 'ASC';
|
||||
if (array_key_exists('order', $foreignEntityDefs['collection'])) {
|
||||
$order = $foreignEntityDefs['collection']['order'];
|
||||
}
|
||||
$defs['orderBy'] = $orderBy;
|
||||
$defs['order'] = $order;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$collection = $this->get($field, $defs);
|
||||
$ids = array();
|
||||
$names = new \stdClass();
|
||||
|
||||
@@ -49,6 +49,8 @@ class RDB extends \Espo\ORM\Repositories\RDB implements Injectable
|
||||
|
||||
protected $hooksDisabled = false;
|
||||
|
||||
protected $processFieldsAfterSaveDisabled = false;
|
||||
|
||||
protected function addDependency($name)
|
||||
{
|
||||
$this->dependencies[] = $name;
|
||||
@@ -262,10 +264,12 @@ class RDB extends \Espo\ORM\Repositories\RDB implements Injectable
|
||||
}
|
||||
parent::afterSave($entity, $options);
|
||||
|
||||
$this->processEmailAddressSave($entity);
|
||||
$this->processPhoneNumberSave($entity);
|
||||
$this->processSpecifiedRelationsSave($entity);
|
||||
$this->processFileFieldsSave($entity);
|
||||
if (!$this->processFieldsAfterSaveDisabled) {
|
||||
$this->processEmailAddressSave($entity);
|
||||
$this->processPhoneNumberSave($entity);
|
||||
$this->processSpecifiedRelationsSave($entity);
|
||||
$this->processFileFieldsSave($entity);
|
||||
}
|
||||
|
||||
if (!$this->hooksDisabled) {
|
||||
$this->getEntityManager()->getHookManager()->process($this->entityType, 'afterSave', $entity, $options);
|
||||
@@ -336,6 +340,24 @@ class RDB extends \Espo\ORM\Repositories\RDB implements Injectable
|
||||
));
|
||||
$this->getEntityManager()->saveEntity($attachment);
|
||||
}
|
||||
|
||||
if (!$entity->isNew()) {
|
||||
|
||||
foreach ($this->getMetadata()->get(['entityDefs', $entity->getEntityType(), 'fields']) as $name => $defs) {
|
||||
if (!empty($defs['type']) && in_array($defs['type'], ['file', 'image'])) {
|
||||
$attribute = $name . 'Id';
|
||||
if ($entity->isAttributeChanged($attribute)) {
|
||||
$previousAttachmentId = $entity->getFetched($attribute);
|
||||
if ($previousAttachmentId) {
|
||||
$attachment = $this->getEntityManager()->getEntity('Attachment', $previousAttachmentId);
|
||||
if ($attachment) {
|
||||
$this->getEntityManager()->removeEntity($attachment);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected function processEmailAddressSave(Entity $entity)
|
||||
|
||||
@@ -821,7 +821,7 @@ class Base
|
||||
$dt->setTime(0, 0, 0);
|
||||
$dt->setTimezone(new \DateTimeZone('UTC'));
|
||||
$from = $dt->format($format);
|
||||
$dt->modify('+1 day');
|
||||
$dt->modify('+1 day -1 second');
|
||||
$to = $dt->format($format);
|
||||
$where['value'] = [$from, $to];
|
||||
break;
|
||||
@@ -911,8 +911,7 @@ class Base
|
||||
$dt = new \DateTime($value, new \DateTimeZone($timeZone));
|
||||
$dt->setTimezone(new \DateTimeZone('UTC'));
|
||||
$from = $dt->format($format);
|
||||
|
||||
$dt->modify('+1 day');
|
||||
$dt->modify('+1 day -1 second');
|
||||
$to = $dt->format($format);
|
||||
$where['value'] = [$from, $to];
|
||||
break;
|
||||
@@ -937,6 +936,7 @@ class Base
|
||||
|
||||
$dt = new \DateTime($value[1], new \DateTimeZone($timeZone));
|
||||
$dt->setTimezone(new \DateTimeZone('UTC'));
|
||||
$dt->modify('-1 second');
|
||||
$to = $dt->format($format);
|
||||
|
||||
$where['value'] = [$from, $to];
|
||||
@@ -1006,6 +1006,9 @@ class Base
|
||||
case 'like':
|
||||
$part[$attribute . '*'] = $item['value'];
|
||||
break;
|
||||
case 'notLike':
|
||||
$part[$attribute . '!*'] = $item['value'];
|
||||
break;
|
||||
case 'equals':
|
||||
case 'on':
|
||||
$part[$attribute . '='] = $item['value'];
|
||||
@@ -1019,6 +1022,9 @@ class Base
|
||||
case 'contains':
|
||||
$part[$attribute . '*'] = '%' . $item['value'] . '%';
|
||||
break;
|
||||
case 'notContains':
|
||||
$part[$attribute . '!*'] = '%' . $item['value'] . '%';
|
||||
break;
|
||||
case 'notEquals':
|
||||
case 'notOn':
|
||||
$part[$attribute . '!='] = $item['value'];
|
||||
|
||||
@@ -36,13 +36,16 @@ class Person extends \Espo\Services\Record
|
||||
protected function getDuplicateWhereClause(Entity $entity, $data = array())
|
||||
{
|
||||
$data = array(
|
||||
'OR' => array(
|
||||
array(
|
||||
'firstName' => $entity->get('firstName'),
|
||||
'lastName' => $entity->get('lastName'),
|
||||
)
|
||||
)
|
||||
'OR' => []
|
||||
);
|
||||
$toCheck = false;
|
||||
if ($entity->get('firstName') || $entity->get('lastName')) {
|
||||
$part = [];
|
||||
$part['firstName'] = $entity->get('firstName');
|
||||
$part['lastName'] = $entity->get('lastName');
|
||||
$data['OR'][] = $part;
|
||||
$toCheck = true;
|
||||
}
|
||||
if (
|
||||
($entity->get('emailAddress') || $entity->get('emailAddressData'))
|
||||
&&
|
||||
@@ -62,8 +65,12 @@ class Person extends \Espo\Services\Record
|
||||
$data['OR'][] = array(
|
||||
'emailAddress' => $emailAddress
|
||||
);
|
||||
$toCheck = true;
|
||||
}
|
||||
}
|
||||
if (!$toCheck) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"labels": {
|
||||
"Create {entityType}": "Crea {entityTypeTranslated}"
|
||||
}
|
||||
}
|
||||
"labels": {
|
||||
"Create {entityType}": "Crea {entityTypeTranslated}"
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,10 @@
|
||||
{
|
||||
"labels": {
|
||||
"Create {entityType}": "Crea {entityTypeTranslated}"
|
||||
}
|
||||
}
|
||||
"links": {
|
||||
"meetings": "Meeting",
|
||||
"calls": "Chiamate",
|
||||
"tasks": "Task"
|
||||
},
|
||||
"labels": {
|
||||
"Create {entityType}": "Crea {entityTypeTranslated}"
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,15 @@
|
||||
{
|
||||
"labels": {
|
||||
"Create {entityType}": "Crea {entityTypeTranslated}"
|
||||
}
|
||||
}
|
||||
"fields": {
|
||||
"billingAddress": "Indirizzo di Fatturazione",
|
||||
"shippingAddress": "Indirizzo di Spedizione",
|
||||
"website": "Website"
|
||||
},
|
||||
"links": {
|
||||
"meetings": "Meetings",
|
||||
"calls": "Chiamate",
|
||||
"tasks": "Tasks"
|
||||
},
|
||||
"labels": {
|
||||
"Create {entityType}": "Crea {entityTypeTranslated}"
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,36 @@
|
||||
{
|
||||
"labels": {
|
||||
"Create {entityType}": "Crea {entityTypeTranslated}"
|
||||
"fields": {
|
||||
"parent": "Parente",
|
||||
"dateStart": "Data Inizio",
|
||||
"dateEnd": "Data Termine",
|
||||
"duration": "Durata",
|
||||
"status": "Stato",
|
||||
"reminders": "Avvisi"
|
||||
},
|
||||
"links": {
|
||||
"parent": "Parente"
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
"Planned": "Pianificato",
|
||||
"Held": "Held",
|
||||
"Not Held": "Not Held"
|
||||
}
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"Create {entityType}": "Crea {entityTypeTranslated}",
|
||||
"Schedule {entityType}": "Programma {entityTypeTranslated}",
|
||||
"Log {entityType}": "Log {entityTypeTranslated}",
|
||||
"Set Held": "Imposta Held",
|
||||
"Set Not Held": "Imposta Not Held"
|
||||
},
|
||||
"massActions": {
|
||||
"setHeld": "Set Held",
|
||||
"setNotHeld": "Imposta Not Held"
|
||||
},
|
||||
"presetFilters": {
|
||||
"planned": "Pianificato",
|
||||
"held": "Held",
|
||||
"todays": "Oggi"
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,13 @@
|
||||
{
|
||||
"labels": {
|
||||
"Create {entityType}": "Crea {entityTypeTranslated}"
|
||||
}
|
||||
}
|
||||
"fields": {
|
||||
"address": "Indirizzo"
|
||||
},
|
||||
"links": {
|
||||
"meetings": "Meetings",
|
||||
"calls": "Chiamate",
|
||||
"tasks": "Tasks"
|
||||
},
|
||||
"labels": {
|
||||
"Create {entityType}": "Crea {entityTypeTranslated}"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"links": {
|
||||
"meetings": "Sastanci",
|
||||
"meetings": "Ročišta",
|
||||
"calls": "Pozivi",
|
||||
"tasks": "Zadaci"
|
||||
},
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"website": "Sajt"
|
||||
},
|
||||
"links": {
|
||||
"meetings": "Sastanci",
|
||||
"meetings": "Ročišta",
|
||||
"calls": "Pozivi",
|
||||
"tasks": "Zadaci"
|
||||
},
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"address": "Adresa"
|
||||
},
|
||||
"links": {
|
||||
"meetings": "Sastanci",
|
||||
"meetings": "Ročišta",
|
||||
"calls": "Pozivi",
|
||||
"tasks": "Zadaci"
|
||||
},
|
||||
|
||||
@@ -99,7 +99,7 @@ class Auth
|
||||
return $this->getContainer()->get('entityManager');
|
||||
}
|
||||
|
||||
public function useNoAuth($isAdmin = false)
|
||||
public function useNoAuth()
|
||||
{
|
||||
$entityManager = $this->getContainer()->get('entityManager');
|
||||
|
||||
@@ -108,7 +108,7 @@ class Auth
|
||||
throw new Error("System user is not found");
|
||||
}
|
||||
|
||||
$user->set('isAdmin', $isAdmin);
|
||||
$user->set('isAdmin', true);
|
||||
$user->set('ipAddress', $_SERVER['REMOTE_ADDR']);
|
||||
|
||||
$entityManager->setUser($user);
|
||||
|
||||
@@ -146,51 +146,64 @@ class Converter
|
||||
{
|
||||
$entityDefs = $this->getEntityDefs(true);
|
||||
|
||||
$ormMeta = array();
|
||||
foreach($entityDefs as $entityName => $entityMeta) {
|
||||
$ormMetadata = array();
|
||||
foreach($entityDefs as $entityName => $entityMetadata) {
|
||||
|
||||
if (empty($entityMeta)) {
|
||||
if (empty($entityMetadata)) {
|
||||
$GLOBALS['log']->critical('Orm\Converter:process(), Entity:'.$entityName.' - metadata cannot be converted into ORM format');
|
||||
continue;
|
||||
}
|
||||
|
||||
$ormMeta = Util::merge($ormMeta, $this->convertEntity($entityName, $entityMeta));
|
||||
$ormMetadata = Util::merge($ormMetadata, $this->convertEntity($entityName, $entityMetadata));
|
||||
}
|
||||
|
||||
$ormMeta = $this->afterProcess($ormMeta);
|
||||
$ormMetadata = $this->afterProcess($ormMetadata);
|
||||
|
||||
return $ormMeta;
|
||||
return $ormMetadata;
|
||||
}
|
||||
|
||||
protected function convertEntity($entityName, $entityMeta)
|
||||
protected function convertEntity($entityName, $entityMetadata)
|
||||
{
|
||||
$ormMeta = array();
|
||||
$ormMeta[$entityName] = array(
|
||||
$ormMetadata = array();
|
||||
$ormMetadata[$entityName] = array(
|
||||
'fields' => array(
|
||||
),
|
||||
'relations' => array(
|
||||
),
|
||||
)
|
||||
);
|
||||
|
||||
foreach ($this->permittedEntityOptions as $optionName) {
|
||||
if (isset($entityMeta[$optionName])) {
|
||||
$ormMeta[$entityName][$optionName] = $entityMeta[$optionName];
|
||||
if (isset($entityMetadata[$optionName])) {
|
||||
$ormMetadata[$entityName][$optionName] = $entityMetadata[$optionName];
|
||||
}
|
||||
}
|
||||
|
||||
$ormMeta[$entityName]['fields'] = $this->convertFields($entityName, $entityMeta);
|
||||
$ormMeta = $this->correctFields($entityName, $ormMeta);
|
||||
$ormMetadata[$entityName]['fields'] = $this->convertFields($entityName, $entityMetadata);
|
||||
$ormMetadata = $this->correctFields($entityName, $ormMetadata);
|
||||
|
||||
$convertedLinks = $this->convertLinks($entityName, $entityMeta, $ormMeta);
|
||||
$convertedLinks = $this->convertLinks($entityName, $entityMetadata, $ormMetadata);
|
||||
|
||||
$ormMeta = Util::merge($ormMeta, $convertedLinks);
|
||||
$ormMetadata = Util::merge($ormMetadata, $convertedLinks);
|
||||
|
||||
return $ormMeta;
|
||||
if (!empty($entityMetadata['collection']) && is_array($entityMetadata['collection'])) {
|
||||
$collectionDefs = $entityMetadata['collection'];
|
||||
$ormMetadata[$entityName]['collection'] = array();
|
||||
if (array_key_exists('sortBy', $collectionDefs)) {
|
||||
$ormMetadata[$entityName]['collection']['orderBy'] = $collectionDefs['sortBy'];
|
||||
}
|
||||
$ormMetadata[$entityName]['collection']['order'] = 'ASC';
|
||||
if (array_key_exists('asc', $collectionDefs)) {
|
||||
$ormMetadata[$entityName]['collection']['order'] = $collectionDefs['asc'] ? 'ASC' : 'DESC';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return $ormMetadata;
|
||||
}
|
||||
|
||||
public function afterProcess(array $ormMeta)
|
||||
public function afterProcess(array $ormMetadata)
|
||||
{
|
||||
foreach ($ormMeta as $entityName => &$entityParams) {
|
||||
foreach ($ormMetadata as $entityName => &$entityParams) {
|
||||
foreach ($entityParams['fields'] as $fieldName => &$fieldParams) {
|
||||
|
||||
/* remove fields without type */
|
||||
@@ -225,18 +238,18 @@ class Converter
|
||||
}
|
||||
}
|
||||
|
||||
return $ormMeta;
|
||||
return $ormMetadata;
|
||||
}
|
||||
|
||||
/**
|
||||
* Metadata conversion from Espo format into Doctrine
|
||||
*
|
||||
* @param string $entityName
|
||||
* @param array $entityMeta
|
||||
* @param array $entityMetadata
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function convertFields($entityName, &$entityMeta)
|
||||
protected function convertFields($entityName, &$entityMetadata)
|
||||
{
|
||||
//List of unmerged fields with default field defenitions in $outputMeta
|
||||
$unmergedFields = array(
|
||||
@@ -249,7 +262,7 @@ class Converter
|
||||
'dbType' => 'varchar'
|
||||
),
|
||||
'name' => array(
|
||||
'type' => isset($entityMeta['fields']['name']['type']) ? $entityMeta['fields']['name']['type'] : Entity::VARCHAR,
|
||||
'type' => isset($entityMetadata['fields']['name']['type']) ? $entityMetadata['fields']['name']['type'] : Entity::VARCHAR,
|
||||
'notStorable' => true
|
||||
),
|
||||
'deleted' => array(
|
||||
@@ -258,7 +271,7 @@ class Converter
|
||||
)
|
||||
);
|
||||
|
||||
foreach($entityMeta['fields'] as $fieldName => $fieldParams) {
|
||||
foreach($entityMetadata['fields'] as $fieldName => $fieldParams) {
|
||||
|
||||
/** check if "fields" option exists in $fieldMeta */
|
||||
$fieldTypeMeta = $this->getMetadataHelper()->getFieldDefsByType($fieldParams);
|
||||
@@ -278,10 +291,10 @@ class Converter
|
||||
if (isset($fieldTypeMeta['linkDefs'])) {
|
||||
$linkDefs = $this->getMetadataHelper()->getLinkDefsInFieldMeta($entityName, $fieldParams, $fieldTypeMeta['linkDefs']);
|
||||
if (isset($linkDefs)) {
|
||||
if (!isset($entityMeta['links'])) {
|
||||
$entityMeta['links'] = array();
|
||||
if (!isset($entityMetadata['links'])) {
|
||||
$entityMetadata['links'] = array();
|
||||
}
|
||||
$entityMeta['links'] = Util::merge( array($fieldName => $linkDefs), $entityMeta['links'] );
|
||||
$entityMetadata['links'] = Util::merge( array($fieldName => $linkDefs), $entityMetadata['links'] );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -292,17 +305,17 @@ class Converter
|
||||
/**
|
||||
* Correct fields defenitions based on \Espo\Custom\Core\Utils\Database\Orm\Fields
|
||||
*
|
||||
* @param array $ormMeta
|
||||
* @param array $ormMetadata
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function correctFields($entityName, array $ormMeta)
|
||||
protected function correctFields($entityName, array $ormMetadata)
|
||||
{
|
||||
$entityDefs = $this->getEntityDefs();
|
||||
|
||||
$entityMeta = $ormMeta[$entityName];
|
||||
$entityMetadata = $ormMetadata[$entityName];
|
||||
//load custom field definitions and customCodes
|
||||
foreach ($entityMeta['fields'] as $fieldName => $fieldParams) {
|
||||
foreach ($entityMetadata['fields'] as $fieldName => $fieldParams) {
|
||||
if (empty($fieldParams['type'])) continue;
|
||||
|
||||
$fieldType = ucfirst($fieldParams['type']);
|
||||
@@ -312,14 +325,14 @@ class Converter
|
||||
}
|
||||
|
||||
if (class_exists($className) && method_exists($className, 'load')) {
|
||||
$helperClass = new $className($this->metadata, $ormMeta, $entityDefs);
|
||||
$helperClass = new $className($this->metadata, $ormMetadata, $entityDefs);
|
||||
$fieldResult = $helperClass->process($fieldName, $entityName);
|
||||
if (isset($fieldResult['unset'])) {
|
||||
$ormMeta = Util::unsetInArray($ormMeta, $fieldResult['unset']);
|
||||
$ormMetadata = Util::unsetInArray($ormMetadata, $fieldResult['unset']);
|
||||
unset($fieldResult['unset']);
|
||||
}
|
||||
|
||||
$ormMeta = Util::merge($ormMeta, $fieldResult);
|
||||
$ormMetadata = Util::merge($ormMetadata, $fieldResult);
|
||||
}
|
||||
|
||||
$defaultAttributes = $this->metadata->get(['entityDefs', $entityName, 'fields', $fieldName, 'defaultAttributes']);
|
||||
@@ -333,7 +346,7 @@ class Converter
|
||||
)
|
||||
)
|
||||
);
|
||||
$ormMeta = Util::merge($ormMeta, $defaultMetadataPart);
|
||||
$ormMetadata = Util::merge($ormMetadata, $defaultMetadataPart);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -341,24 +354,24 @@ class Converter
|
||||
//add a field 'isFollowed' for scopes with 'stream => true'
|
||||
$scopeDefs = $this->getMetadata()->get('scopes.'.$entityName);
|
||||
if (isset($scopeDefs['stream']) && $scopeDefs['stream']) {
|
||||
if (!isset($entityMeta['fields']['isFollowed'])) {
|
||||
$ormMeta[$entityName]['fields']['isFollowed'] = array(
|
||||
if (!isset($entityMetadata['fields']['isFollowed'])) {
|
||||
$ormMetadata[$entityName]['fields']['isFollowed'] = array(
|
||||
'type' => 'varchar',
|
||||
'notStorable' => true,
|
||||
);
|
||||
|
||||
$ormMeta[$entityName]['fields']['followersIds'] = array(
|
||||
$ormMetadata[$entityName]['fields']['followersIds'] = array(
|
||||
'type' => 'jsonArray',
|
||||
'notStorable' => true,
|
||||
);
|
||||
$ormMeta[$entityName]['fields']['followersNames'] = array(
|
||||
$ormMetadata[$entityName]['fields']['followersNames'] = array(
|
||||
'type' => 'jsonObject',
|
||||
'notStorable' => true,
|
||||
);
|
||||
}
|
||||
} //END: add a field 'isFollowed' for stream => true
|
||||
|
||||
return $ormMeta;
|
||||
return $ormMetadata;
|
||||
}
|
||||
|
||||
protected function convertField($entityName, $fieldName, array $fieldParams, $fieldTypeMeta = null)
|
||||
@@ -397,16 +410,20 @@ class Converter
|
||||
return $fieldDefs;
|
||||
}
|
||||
|
||||
protected function convertLinks($entityName, $entityMeta, $ormMeta)
|
||||
protected function convertLinks($entityName, $entityMetadata, $ormMetadata)
|
||||
{
|
||||
if (!isset($entityMeta['links'])) {
|
||||
if (!isset($entityMetadata['links'])) {
|
||||
return array();
|
||||
}
|
||||
|
||||
$relationships = array();
|
||||
foreach ($entityMeta['links'] as $linkName => $linkParams) {
|
||||
foreach ($entityMetadata['links'] as $linkName => $linkParams) {
|
||||
|
||||
$convertedLink = $this->getRelationManager()->convert($linkName, $linkParams, $entityName, $ormMeta);
|
||||
if (isset($linkParams['skipOrmDefs']) && $linkParams['skipOrmDefs'] === true) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$convertedLink = $this->getRelationManager()->convert($linkName, $linkParams, $entityName, $ormMetadata);
|
||||
|
||||
if (isset($convertedLink)) {
|
||||
$relationships = Util::merge($convertedLink, $relationships);
|
||||
|
||||
82
application/Espo/Core/Utils/Database/Orm/Fields/File.php
Normal file
82
application/Espo/Core/Utils/Database/Orm/Fields/File.php
Normal file
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
/************************************************************************
|
||||
* This file is part of EspoCRM.
|
||||
*
|
||||
* EspoCRM - Open Source CRM application.
|
||||
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
|
||||
* Website: http://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\Utils\Database\Orm\Fields;
|
||||
|
||||
class File extends Base
|
||||
{
|
||||
protected function load($fieldName, $entityName)
|
||||
{
|
||||
$fieldParams = $this->getFieldParams();
|
||||
|
||||
$data = array(
|
||||
$entityName => array (
|
||||
'fields' => array(
|
||||
$fieldName.'Id' => array(
|
||||
'type' => 'foreignId',
|
||||
'index' => false
|
||||
),
|
||||
$fieldName.'Name' => array(
|
||||
'type' => 'foreign'
|
||||
)
|
||||
)
|
||||
),
|
||||
'unset' => array(
|
||||
$entityName => array(
|
||||
'fields.'.$fieldName
|
||||
)
|
||||
)
|
||||
);
|
||||
if (!empty($fieldParams['notStorable'])) {
|
||||
$data[$entityName]['fields'][$fieldName.'Id']['notStorable'] = true;
|
||||
$data[$entityName]['fields'][$fieldName.'Name']['type'] = 'varchar';
|
||||
}
|
||||
|
||||
if (!empty($fieldParams['defaultAttributes']) && array_key_exists($fieldName.'Id', $fieldParams['defaultAttributes'])) {
|
||||
$data[$entityName]['fields'][$fieldName.'Id']['default'] = $fieldParams['defaultAttributes'][$fieldName.'Id'];
|
||||
}
|
||||
|
||||
if (empty($fieldParams['notStorable'])) {
|
||||
$data[$entityName]['fields'][$fieldName . 'Name']['relation'] = $fieldName;
|
||||
$data[$entityName]['fields'][$fieldName . 'Name']['foreign'] = 'name';
|
||||
|
||||
$linkName = $fieldName;
|
||||
$data[$entityName]['relations'] = array();
|
||||
$data[$entityName]['relations'][$linkName] = array(
|
||||
'type' => 'belongsTo',
|
||||
'entity' => 'Attachment',
|
||||
'key' => $linkName.'Id',
|
||||
'foreignKey' => 'id',
|
||||
'foreign' => null
|
||||
);
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
35
application/Espo/Core/Utils/Database/Orm/Fields/Image.php
Normal file
35
application/Espo/Core/Utils/Database/Orm/Fields/Image.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/************************************************************************
|
||||
* This file is part of EspoCRM.
|
||||
*
|
||||
* EspoCRM - Open Source CRM application.
|
||||
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
|
||||
* Website: http://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\Utils\Database\Orm\Fields;
|
||||
|
||||
class Image extends File
|
||||
{
|
||||
|
||||
}
|
||||
@@ -39,6 +39,8 @@ class LinkMultiple extends Base
|
||||
$fieldName.'Ids' => array(
|
||||
'type' => 'varchar',
|
||||
'notStorable' => true,
|
||||
'isLinkMultipleIdList' => true,
|
||||
'relation' => $fieldName
|
||||
),
|
||||
$fieldName.'Names' => array(
|
||||
'type' => 'varchar',
|
||||
|
||||
@@ -103,7 +103,7 @@ class RelationManager
|
||||
return false;
|
||||
}
|
||||
|
||||
public function convert($linkName, $linkParams, $entityName, $ormMeta)
|
||||
public function convert($linkName, $linkParams, $entityName, $ormMetadata)
|
||||
{
|
||||
$entityDefs = $this->getMetadata()->get('entityDefs');
|
||||
|
||||
@@ -132,7 +132,7 @@ class RelationManager
|
||||
}
|
||||
|
||||
if (isset($className) && $className !== false) {
|
||||
$helperClass = new $className($this->metadata, $ormMeta, $entityDefs);
|
||||
$helperClass = new $className($this->metadata, $ormMetadata, $entityDefs);
|
||||
return $helperClass->process($linkName, $entityName, $foreignLink['name'], $foreignEntityName);
|
||||
}
|
||||
//END: relationDefs defined in separate file
|
||||
|
||||
@@ -38,6 +38,10 @@ class BelongsTo extends Base
|
||||
$foreignEntityName = $this->getForeignEntityName();
|
||||
$foreignLinkName = $this->getForeignLinkName();
|
||||
|
||||
$index = true;
|
||||
if (!empty($linkParams['noIndex'])) {
|
||||
$index = false;
|
||||
}
|
||||
|
||||
$noForeignName = false;
|
||||
if (!empty($linkParams['noForeignName'])) {
|
||||
@@ -71,7 +75,7 @@ class BelongsTo extends Base
|
||||
'fields' => array(
|
||||
$linkName.'Id' => array(
|
||||
'type' => 'foreignId',
|
||||
'index' => true
|
||||
'index' => $index
|
||||
)
|
||||
),
|
||||
'relations' => array(
|
||||
|
||||
@@ -251,16 +251,11 @@ class Converter
|
||||
case 'manyMany':
|
||||
$tableName = $relationParams['relationName'];
|
||||
|
||||
//check for duplication tables
|
||||
//check for duplicate tables
|
||||
if (!isset($tables[$tableName])) { //no needs to create the table if it already exists
|
||||
$tables[$tableName] = $this->prepareManyMany($entityName, $relationParams, $tables);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'belongsTo':
|
||||
$columnName = Util::toUnderScore($relationParams['key']);
|
||||
$tables[$entityName]->addIndex(array($columnName));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,4 +93,9 @@ class OrmMetadata
|
||||
return $this->data;
|
||||
}
|
||||
|
||||
public function get($key = null, $default = null)
|
||||
{
|
||||
$result = Util::getValueByKey($this->getData(), $key, $default);
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
@@ -602,5 +602,18 @@ class Util
|
||||
|
||||
return $array;
|
||||
}
|
||||
|
||||
/**
|
||||
* Array keys exists
|
||||
*
|
||||
* @param array $keys
|
||||
* @param array $array
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
static public function arrayKeysExists(array $keys, array $array)
|
||||
{
|
||||
return !array_diff_key(array_flip($keys), $array);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -115,6 +115,7 @@ return array ( 'defaultPermissions' =>
|
||||
'smtpPassword',
|
||||
'cron',
|
||||
'authenticationMethod',
|
||||
'adminPanelIframeUrl',
|
||||
'ldapHost',
|
||||
'ldapPort',
|
||||
'ldapSecurity',
|
||||
|
||||
@@ -36,7 +36,7 @@ use \Espo\Core\Exceptions\Error;
|
||||
|
||||
class Avatar extends Image
|
||||
{
|
||||
public static $authRequired = false;
|
||||
public static $authRequired = true;
|
||||
|
||||
public static $notStrictAuth = true;
|
||||
|
||||
@@ -88,14 +88,7 @@ class Avatar extends Image
|
||||
exit;
|
||||
}
|
||||
|
||||
if (isset($_GET['attachmentId'])) {
|
||||
$id = $_GET['attachmentId'];
|
||||
if ($id == 'false') {
|
||||
$id = false;
|
||||
}
|
||||
} else {
|
||||
$id = $user->get('avatarId');
|
||||
}
|
||||
$id = $user->get('avatarId');
|
||||
|
||||
$size = null;
|
||||
if (!empty($_GET['size'])) {
|
||||
|
||||
@@ -75,7 +75,10 @@ class NextNumber extends \Espo\Core\Hooks\Base
|
||||
'fieldName' => $fieldName,
|
||||
'entityType' => $entity->getEntityType()
|
||||
))->findOne();
|
||||
if (!$nextNumber) continue;
|
||||
if (!$nextNumber) {
|
||||
$this->getEntityManager()->getPdo()->query('UNLOCK TABLES');
|
||||
continue;
|
||||
}
|
||||
$entity->set($fieldName, $this->composeNumberAttribute($nextNumber));
|
||||
|
||||
$value = $nextNumber->get('value');
|
||||
|
||||
@@ -45,6 +45,8 @@ class Cleanup extends \Espo\Core\Jobs\Base
|
||||
|
||||
protected $cleanupAttachmentsPeriod = '1 month';
|
||||
|
||||
protected $cleanupAttachmentsFromPeriod = '3 months';
|
||||
|
||||
protected $cleanupRemindersPeriod = '15 days';
|
||||
|
||||
public function run()
|
||||
@@ -186,6 +188,57 @@ class Cleanup extends \Espo\Core\Jobs\Base
|
||||
}
|
||||
}
|
||||
|
||||
$fromPeriod = '-' . $this->getConfig()->get('cleanupAttachmentsFromPeriod', $this->cleanupAttachmentsFromPeriod);
|
||||
$datetimeFrom = new \DateTime();
|
||||
$datetimeFrom->modify($fromPeriod);
|
||||
|
||||
$scopeList = array_keys($this->getMetadata()->get(['scopes']));
|
||||
foreach ($scopeList as $scope) {
|
||||
if (!$this->getMetadata()->get(['scopes', $scope, 'entity'])) continue;
|
||||
if (!$this->getMetadata()->get(['scopes', $scope, 'object']) && $scope !== 'Note') continue;
|
||||
if (!$this->getMetadata()->get(['entityDefs', $scope, 'fields', 'modifiedAt'])) continue;
|
||||
|
||||
$hasAttachmentField = false;
|
||||
if ($scope === 'Note') {
|
||||
$hasAttachmentField = true;
|
||||
}
|
||||
if (!$hasAttachmentField) {
|
||||
foreach ($this->getMetadata()->get(['entityDefs', $scope, 'fields']) as $field => $defs) {
|
||||
if (empty($defs['type'])) continue;
|
||||
if (in_array($defs['type'], ['file', 'image', 'attachmentMultiple'])) {
|
||||
$hasAttachmentField = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!$hasAttachmentField) continue;
|
||||
|
||||
$deletedEntityList = $this->getEntityManager()->getRepository($scope)->where([
|
||||
'deleted' => 1,
|
||||
'modifiedAt<' => $datetime->format('Y-m-d H:i:s'),
|
||||
'modifiedAt>' => $datetimeFrom->format('Y-m-d H:i:s'),
|
||||
|
||||
])->find(['withDeleted' => true]);
|
||||
foreach ($deletedEntityList as $deletedEntity) {
|
||||
$attachmentToRemoveList = $this->getEntityManager()->getRepository('Attachment')->where(array(
|
||||
'OR' => array(
|
||||
array(
|
||||
'relatedType' => $scope,
|
||||
'relatedId' => $deletedEntity->id
|
||||
),
|
||||
array(
|
||||
'parentType' => $scope,
|
||||
'parentId' => $deletedEntity->id
|
||||
)
|
||||
)
|
||||
))->find();
|
||||
|
||||
foreach ($attachmentToRemoveList as $attachmentToRemove) {
|
||||
$this->getEntityManager()->removeEntity($attachmentToRemove);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$sql = "DELETE FROM attachment WHERE deleted = 1 AND created_at < ".$pdo->quote($datetime->format('Y-m-d H:i:s'));
|
||||
$sth = $pdo->query($sql);
|
||||
}
|
||||
|
||||
@@ -66,12 +66,20 @@ class CheckEmailAccounts extends \Espo\Core\Jobs\Base
|
||||
foreach ($collection as $entity) {
|
||||
$running = $this->getEntityManager()->getRepository('Job')->where(array(
|
||||
'scheduledJobId' => $data['id'],
|
||||
'status' => ['Running', 'Pending'],
|
||||
'status' => 'Running',
|
||||
'targetType' => 'EmailAccount',
|
||||
'targetId' => $entity->id
|
||||
))->findOne();
|
||||
if ($running) continue;
|
||||
|
||||
$countPending = $this->getEntityManager()->getRepository('Job')->where(array(
|
||||
'scheduledJobId' => $data['id'],
|
||||
'status' => 'Pending',
|
||||
'targetType' => 'EmailAccount',
|
||||
'targetId' => $entity->id
|
||||
))->count();
|
||||
if ($countPending > 1) continue;
|
||||
|
||||
$job = $this->getEntityManager()->getEntity('Job');
|
||||
|
||||
$jobEntity = $this->getEntityManager()->getEntity('Job');
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
"current": "current",
|
||||
"time": "time",
|
||||
"User List": "User List",
|
||||
"Manage Users": "Manage Users"
|
||||
"Manage Users": "Manage Users",
|
||||
"View Calendar": "View Calendar"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,12 +9,14 @@
|
||||
"application": "Application",
|
||||
"queueItem": "Queue Item",
|
||||
"stringData": "String Data",
|
||||
"stringAdditionalData": "String Additional Data"
|
||||
"stringAdditionalData": "String Additional Data",
|
||||
"isTest": "Is Test"
|
||||
},
|
||||
"links": {
|
||||
"queueItem": "Queue Item",
|
||||
"parent": "Parent",
|
||||
"object": "Object"
|
||||
"object": "Object",
|
||||
"campaign": "Campaign"
|
||||
},
|
||||
"options": {
|
||||
"action": {
|
||||
|
||||
@@ -48,6 +48,7 @@
|
||||
},
|
||||
"presetFilters": {
|
||||
"portalUsers": "Portal Users",
|
||||
"notPortalUsers": "Not Portal Users"
|
||||
"notPortalUsers": "Not Portal Users",
|
||||
"accountActive": "Active"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,8 @@
|
||||
"campaign": "Campagne",
|
||||
"targetLists": "Listes de cibles",
|
||||
"targetList": "Liste de cibles",
|
||||
"originalLead": "Original Lead"
|
||||
"originalLead": "Original Lead",
|
||||
"contactIsInactive": "Inactive"
|
||||
},
|
||||
"links": {
|
||||
"contacts": "Contacts",
|
||||
@@ -88,12 +89,14 @@
|
||||
"Support": "Support",
|
||||
"Testing, Inspection & Certification": "Testing, Inspection & Certification",
|
||||
"Wholesale": "Wholesale",
|
||||
"Water": "Water"
|
||||
"Water": "Water",
|
||||
"Travel": "Travel"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"Create Account": "Créer un compte",
|
||||
"Copy Billing": "Copie de facturation"
|
||||
"Copy Billing": "Copie de facturation",
|
||||
"Set Primary": "Set Primary"
|
||||
},
|
||||
"presetFilters": {
|
||||
"customers": "Clients",
|
||||
|
||||
@@ -23,12 +23,12 @@
|
||||
},
|
||||
"links": {
|
||||
"targetLists": "Listes de cibles",
|
||||
"excludingTargetLists": "Exclure les listes de cibles",
|
||||
"excludingTargetLists": "Excluant les listes de cibles",
|
||||
"accounts": "Comptes",
|
||||
"contacts": "Contacts",
|
||||
"leads": "Prospects",
|
||||
"opportunities": "Opportunités",
|
||||
"campaignLogRecords": "Enregistrer",
|
||||
"campaignLogRecords": "Logs",
|
||||
"massEmails": "Emails groupés",
|
||||
"trackingUrls": "Tracking URLs"
|
||||
},
|
||||
|
||||
@@ -17,7 +17,10 @@
|
||||
"targetList": "Liste de cibles",
|
||||
"portalUser": "Utilisateur Portail",
|
||||
"originalLead": "Original Lead",
|
||||
"acceptanceStatus": "Acceptance Status"
|
||||
"acceptanceStatus": "Acceptance Status",
|
||||
"accountIsInactive": "Account Inactive",
|
||||
"acceptanceStatusMeetings": "Acceptance Status (Meetings)",
|
||||
"acceptanceStatusCalls": "Acceptance Status (Calls)"
|
||||
},
|
||||
"links": {
|
||||
"opportunities": "Opportunités",
|
||||
@@ -45,6 +48,7 @@
|
||||
},
|
||||
"presetFilters": {
|
||||
"portalUsers": "Utilisateurs Portail",
|
||||
"notPortalUsers": "N'est pas un utilisateur Portail"
|
||||
"notPortalUsers": "N'est pas un utilisateur Portail",
|
||||
"accountActive": "Active"
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"labels": {
|
||||
"Create KnowledgeBaseArticle": "Créer un article",
|
||||
"Any": "Any",
|
||||
"Send in Email": "Send in Email",
|
||||
"Send in Email": "Envoyer par mail",
|
||||
"Move Up": "Move Up",
|
||||
"Move Down": "Move Down",
|
||||
"Move to Top": "Move to Top",
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"Converted To": "Converti en",
|
||||
"Create Lead": "Créer un prospect",
|
||||
"Convert": "Convertir",
|
||||
"convert": "convertir"
|
||||
"convert": "convert"
|
||||
},
|
||||
"fields": {
|
||||
"name": "Nom",
|
||||
@@ -27,7 +27,9 @@
|
||||
"targetList": "Liste de cibles",
|
||||
"industry": "Industry",
|
||||
"acceptanceStatus": "Acceptance Status",
|
||||
"opportunityAmountCurrency": "Opportunity Amount Currency"
|
||||
"opportunityAmountCurrency": "Opportunity Amount Currency",
|
||||
"acceptanceStatusMeetings": "Acceptance Status (Meetings)",
|
||||
"acceptanceStatusCalls": "Acceptance Status (Calls)"
|
||||
},
|
||||
"links": {
|
||||
"targetLists": "Listes de cibles",
|
||||
|
||||
@@ -50,4 +50,4 @@
|
||||
"actual": "Actual",
|
||||
"complete": "Complete"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -45,6 +45,6 @@
|
||||
"todays": "Aujourd'hui"
|
||||
},
|
||||
"messages": {
|
||||
"nothingHasBeenSent": "Nothing were sent"
|
||||
"nothingHasBeenSent": "Aucun envoi effectué"
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,8 @@
|
||||
"amountWeightedConverted": "Montant pondéré",
|
||||
"campaign": "Campagne",
|
||||
"originalLead": "Original Lead",
|
||||
"amountCurrency": "Amount Currency"
|
||||
"amountCurrency": "Amount Currency",
|
||||
"contactRole": "Contact Role"
|
||||
},
|
||||
"links": {
|
||||
"contacts": "Contacts",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"targetLists": "Listes de cibles"
|
||||
},
|
||||
"fields": {
|
||||
"acceptanceStatus": "Acceptance Status"
|
||||
"acceptanceStatus": "Acceptance Status",
|
||||
"acceptanceStatusMeetings": "Acceptance Status (Meetings)",
|
||||
"acceptanceStatusCalls": "Acceptance Status (Calls)"
|
||||
}
|
||||
}
|
||||
@@ -11,13 +11,15 @@
|
||||
"industry": "Azienda",
|
||||
"type": "Tipo",
|
||||
"contactRole": "Titolo",
|
||||
"contactIsInactive": "Inattivo",
|
||||
"campaign": "Campagna",
|
||||
"targetLists": "Liste di Destinazione",
|
||||
"targetList": "Lista di Destinazione"
|
||||
"targetList": "Lista di Destinazione",
|
||||
"originalLead": "Lead di Origine"
|
||||
},
|
||||
"links": {
|
||||
"contacts": "Contatti",
|
||||
"opportunities": "Opportunita'",
|
||||
"opportunities": "Opportunità",
|
||||
"cases": "Casi",
|
||||
"documents": "Documenti",
|
||||
"meetingsPrimary": "Meeting (ampliato)",
|
||||
@@ -27,7 +29,8 @@
|
||||
"targetLists": "Liste di Destinazione",
|
||||
"campaignLogRecords": "Log Campagna",
|
||||
"campaign": "Campagna",
|
||||
"portalUsers": "Utenti portale"
|
||||
"portalUsers": "Utenti portale",
|
||||
"originalLead": "Lead di Origine"
|
||||
},
|
||||
"options": {
|
||||
"type": {
|
||||
@@ -37,44 +40,67 @@
|
||||
"Reseller": "Rivenditore"
|
||||
},
|
||||
"industry": {
|
||||
"Aerospace": "Aerospaziale",
|
||||
"Agriculture": "Agricultura",
|
||||
"Advertising": "Pubblicità",
|
||||
"Apparel & Accessories": "Abbigliamento e Accessori",
|
||||
"Architecture": "Architettura",
|
||||
"Automotive": "Settore Automobilistico",
|
||||
"Banking": "Bancario",
|
||||
"Biotechnology": "Biotecnologie",
|
||||
"Building Materials & Equipment": "Materiali da costruzione e attrezzature",
|
||||
"Chemical": "Chimico",
|
||||
"Construction": "Costruzioni",
|
||||
"Computer": "Computer",
|
||||
"Education": "Insegnante",
|
||||
"Defense": "Difesa",
|
||||
"Creative": "Creativo",
|
||||
"Culture": "Cultura",
|
||||
"Consulting": "Consulenze",
|
||||
"Education": "Educazione",
|
||||
"Electronics": "Elettronica",
|
||||
"Electric Power": "Elettricità",
|
||||
"Energy": "Energia",
|
||||
"Entertainment & Leisure": "Intrattenimento e tempo libero",
|
||||
"Finance": "Finanza",
|
||||
"Food & Beverage": "Prodotti alimentari e bevande",
|
||||
"Grocery": "Drogheria",
|
||||
"Food & Beverage": "Cibi e bevande",
|
||||
"Grocery": "Derrate alimentari",
|
||||
"Hospitality": "Alberghiero",
|
||||
"Healthcare": "Assistenza sanitaria",
|
||||
"Insurance": "Assicurazioni",
|
||||
"Legal": "Legale",
|
||||
"Manufacturing": "Manifatturiero",
|
||||
"Publishing": "Editoriale",
|
||||
"Mass Media": "Mass Media",
|
||||
"Mining": "Estrazione mineraria",
|
||||
"Music": "Musica",
|
||||
"Marketing": "Marketing",
|
||||
"Publishing": "Editoria",
|
||||
"Petroleum": "Petrolio",
|
||||
"Real Estate": "Immobiliare",
|
||||
"Retail": "Vendita al dettaglio",
|
||||
"Shipping": "Logistica",
|
||||
"Service": "Servizi",
|
||||
"Support": "Supporto",
|
||||
"Sports": "Sport",
|
||||
"Software": "Software",
|
||||
"Technology": "Technologia",
|
||||
"Telecommunications": "Telecommunicazioni",
|
||||
"Television": "Televisione",
|
||||
"Testing, Inspection & Certification": "Testing, Ispezione e Certificazione",
|
||||
"Transportation": "Trasporti",
|
||||
"Venture Capital": "Capitale di rischio"
|
||||
"Travel": "Viaggi",
|
||||
"Venture Capital": "Investimenti",
|
||||
"Wholesale": "Vendita all'ingrosso",
|
||||
"Water": "Acqua"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"Create Account": "Crea Account",
|
||||
"Copy Billing": "Copia di Fatturazione"
|
||||
"Copy Billing": "Copia info di Fatturazione",
|
||||
"Set Primary": "Imposta come Primario"
|
||||
},
|
||||
"presetFilters": {
|
||||
"customers": "Clienti",
|
||||
"partners": "Partner"
|
||||
"partners": "Partner",
|
||||
"recentlyCreated": "Creati di Recente"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"layouts": {
|
||||
"detailConvert": "Convert Lead",
|
||||
"detailConvert": "Converti Lead",
|
||||
"listForAccount": "Lista (di Account)"
|
||||
}
|
||||
}
|
||||
@@ -9,12 +9,12 @@
|
||||
},
|
||||
"labels": {
|
||||
"Today": "Oggi",
|
||||
"Create": "Creare",
|
||||
"Shared": "Diviso",
|
||||
"Create": "Crea",
|
||||
"Shared": "Condiviso",
|
||||
"Add User": "Aggiungi Utente",
|
||||
"current": "attuale",
|
||||
"time": "ora",
|
||||
"User List": "Lista Utente",
|
||||
"User List": "Lista Utenti",
|
||||
"Manage Users": "Gestione Utenti"
|
||||
}
|
||||
}
|
||||
@@ -1,24 +1,25 @@
|
||||
{
|
||||
"fields": {
|
||||
"name": "Nome",
|
||||
"parent": "Genitore",
|
||||
"parent": "Parente",
|
||||
"status": "Stato",
|
||||
"dateStart": "Data d'inizio",
|
||||
"dateEnd": "Data di fine",
|
||||
"dateEnd": "Data di termine",
|
||||
"direction": "Direzione",
|
||||
"duration": "Durata",
|
||||
"description": "Descrizione",
|
||||
"users": "Utenti",
|
||||
"contacts": "Contatti",
|
||||
"leads": "Comando",
|
||||
"leads": "Lead",
|
||||
"reminders": "Promemoria",
|
||||
"account": "Account"
|
||||
"account": "Account",
|
||||
"acceptanceStatus": "Stato Accettazione"
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
"Planned": "Pianificato",
|
||||
"Held": "Tenere",
|
||||
"Not Held": "Lasciare"
|
||||
"Held": "Held",
|
||||
"Not Held": "Non Held"
|
||||
},
|
||||
"direction": {
|
||||
"Outbound": "in Uscita",
|
||||
@@ -32,18 +33,18 @@
|
||||
}
|
||||
},
|
||||
"massActions": {
|
||||
"setHeld": "Trattenuto",
|
||||
"setNotHeld": "Non Trattenuto"
|
||||
"setHeld": "Imposta Held",
|
||||
"setNotHeld": "Imposta Non Held"
|
||||
},
|
||||
"labels": {
|
||||
"Create Call": "Creare delle chiamate",
|
||||
"Set Held": "Trattenuto",
|
||||
"Set Not Held": "Non Trattenuto",
|
||||
"Create Call": "Crea chiamata",
|
||||
"Set Held": "Imposta Held",
|
||||
"Set Not Held": "Imposta non Held",
|
||||
"Send Invitations": "Inviare inviti"
|
||||
},
|
||||
"presetFilters": {
|
||||
"planned": "Pianificato",
|
||||
"held": "Held",
|
||||
"todays": "Today's"
|
||||
"todays": "Oggi"
|
||||
}
|
||||
}
|
||||
@@ -5,9 +5,9 @@
|
||||
"status": "Stato",
|
||||
"type": "Tipo",
|
||||
"startDate": "Data d'Inizio",
|
||||
"endDate": "Data di Fine",
|
||||
"targetLists": "Liste di Destinazione",
|
||||
"excludingTargetLists": "Escludi data di Destinazione",
|
||||
"endDate": "Data di Termine",
|
||||
"targetLists": "Liste di Target",
|
||||
"excludingTargetLists": "Escludi Lista Target",
|
||||
"sentCount": "Inviato",
|
||||
"openedCount": "Aperto",
|
||||
"clickedCount": "Cliccato",
|
||||
@@ -15,22 +15,22 @@
|
||||
"bouncedCount": "Bounced",
|
||||
"hardBouncedCount": "Hard Bounced",
|
||||
"softBouncedCount": "Soft Bounced",
|
||||
"leadCreatedCount": "Leads Created",
|
||||
"revenue": "Entrata",
|
||||
"revenueConverted": "Entrata (convertita)",
|
||||
"leadCreatedCount": "Lead Creata",
|
||||
"revenue": "Fatturato",
|
||||
"revenueConverted": "Fatturato (convertito)",
|
||||
"budget": "Budget",
|
||||
"budgetConverted": "Budget (convertito)"
|
||||
},
|
||||
"links": {
|
||||
"targetLists": "Liste di Destinazione",
|
||||
"excludingTargetLists": "Escludi Liste di Destinazione",
|
||||
"targetLists": "Liste di Target",
|
||||
"excludingTargetLists": "Escludi Liste di Target",
|
||||
"accounts": "Account",
|
||||
"contacts": "Contatti",
|
||||
"leads": "Comando",
|
||||
"opportunities": "Opportunita'",
|
||||
"leads": "Lead",
|
||||
"opportunities": "Opportunità",
|
||||
"campaignLogRecords": "Log",
|
||||
"massEmails": "Email Massiva",
|
||||
"trackingUrls": "Tracking URLs"
|
||||
"trackingUrls": "URL di Tracking"
|
||||
},
|
||||
"options": {
|
||||
"type": {
|
||||
@@ -49,23 +49,27 @@
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"Create Campaign": "Create Campaign",
|
||||
"Target Lists": "Liste di Destinazione",
|
||||
"Create Campaign": "Crea Campaigna",
|
||||
"Target Lists": "Liste di Target",
|
||||
"Statistics": "Statistiche",
|
||||
"hard": "duro",
|
||||
"soft": "leggeto",
|
||||
"hard": "hard",
|
||||
"soft": "soft",
|
||||
"Unsubscribe": "Annulla l'iscrizione",
|
||||
"Mass Emails": "Email Massive",
|
||||
"Email Templates": "Modelli Email"
|
||||
"Email Templates": "Modelli Email",
|
||||
"Unsubscribe again": "Disiscriviti ancora",
|
||||
"Subscribe again": "Iscriviti ancora",
|
||||
"Create Target List": "Crea Lista Target"
|
||||
},
|
||||
"presetFilters": {
|
||||
"active": "Attivo"
|
||||
},
|
||||
"messages": {
|
||||
"unsubscribed": "Sei stato rimosso dalla nostra mailing list ."
|
||||
"unsubscribed": "Sei stato rimosso dalla nostra mailing list.",
|
||||
"subscribedAgain": "Ti sei iscritto nuovamente."
|
||||
},
|
||||
"tooltips": {
|
||||
"targetLists": "Obiettivi che devono ricevere i messaggi .",
|
||||
"excludingTargetLists": "Obiettivi che non dovrebbe ricevere messaggi."
|
||||
"targetLists": "Target che devono ricevere i messaggi.",
|
||||
"excludingTargetLists": "Target che non dovrebbe ricevere messaggi."
|
||||
}
|
||||
}
|
||||
@@ -3,27 +3,27 @@
|
||||
"action": "Azione",
|
||||
"actionDate": "Data",
|
||||
"data": "Data",
|
||||
"campaign": "Campagnia",
|
||||
"campaign": "Campagna",
|
||||
"parent": "Target",
|
||||
"object": "Oggetto",
|
||||
"application": "Applicazione",
|
||||
"queueItem": "Queue Item",
|
||||
"queueItem": "Item in Coda",
|
||||
"stringData": "String Data",
|
||||
"stringAdditionalData": "String Additional Data"
|
||||
"stringAdditionalData": "String Data Addizionale"
|
||||
},
|
||||
"links": {
|
||||
"queueItem": "Queue Item",
|
||||
"parent": "Genitore",
|
||||
"queueItem": "Item in Coda",
|
||||
"parent": "Parente",
|
||||
"object": "Object"
|
||||
},
|
||||
"options": {
|
||||
"action": {
|
||||
"Sent": "Inviato",
|
||||
"Opened": "Aperto",
|
||||
"Opted Out": "Rinuncia",
|
||||
"Opted Out": "Rimosso",
|
||||
"Bounced": "Bounced",
|
||||
"Clicked": "Cliccato",
|
||||
"Lead Created": "Lead Created"
|
||||
"Lead Created": "Lead Creata"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
@@ -32,9 +32,9 @@
|
||||
"presetFilters": {
|
||||
"sent": "Inviato",
|
||||
"opened": "Aperto",
|
||||
"optedOut": "Rinuncia",
|
||||
"optedOut": "Rimosso",
|
||||
"bounced": "Bounced",
|
||||
"clicked": "Clicked",
|
||||
"leadCreated": "Lead Created"
|
||||
"clicked": "Cliccato",
|
||||
"leadCreated": "Lead Creata"
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"fields": {
|
||||
"url": "URL",
|
||||
"urlToUse": "Codice da inserire al posto dell' URL",
|
||||
"campaign": "Campagnia"
|
||||
"urlToUse": "Codice da inserire al posto dell'URL",
|
||||
"campaign": "Campagna"
|
||||
},
|
||||
"links": {
|
||||
"campaign": "Campagnia"
|
||||
"campaign": "Campagna"
|
||||
},
|
||||
"labels": {
|
||||
"Create CampaignTrackingUrl": "Creazione URL di monitoraggio"
|
||||
"Create CampaignTrackingUrl": "Creazione URL di Tracking"
|
||||
}
|
||||
}
|
||||
@@ -4,9 +4,9 @@
|
||||
"number": "Numero",
|
||||
"status": "Stato",
|
||||
"account": "Account",
|
||||
"contact": "Contatti",
|
||||
"contact": "Contatto",
|
||||
"contacts": "Contatti",
|
||||
"priority": "Priorita'",
|
||||
"priority": "Priorità",
|
||||
"type": "Tipo",
|
||||
"description": "Descrizione",
|
||||
"inboundEmail": "Email in entrata",
|
||||
@@ -17,11 +17,11 @@
|
||||
"account": "Account",
|
||||
"contact": "Contatto (Primario)",
|
||||
"Contacts": "Contatti",
|
||||
"meetings": "Meetings",
|
||||
"meetings": "Meeting",
|
||||
"calls": "Chiamate",
|
||||
"tasks": "Tasks",
|
||||
"tasks": "Task",
|
||||
"emails": "Email",
|
||||
"articles": "Knowledge Base Articles",
|
||||
"articles": "Articoli del Knowledge Base",
|
||||
"lead": "Lead"
|
||||
},
|
||||
"options": {
|
||||
@@ -30,7 +30,7 @@
|
||||
"Assigned": "Assegnato",
|
||||
"Pending": "In attesa",
|
||||
"Closed": "Chiuso",
|
||||
"Rejected": "Rigettato",
|
||||
"Rejected": "Rifiutato",
|
||||
"Duplicate": "Duplicato"
|
||||
},
|
||||
"priority": {
|
||||
@@ -40,7 +40,7 @@
|
||||
"Urgent": "Urgente"
|
||||
},
|
||||
"type": {
|
||||
"Question": "Domande",
|
||||
"Question": "Domanda",
|
||||
"Incident": "Incidente",
|
||||
"Problem": "Problema"
|
||||
}
|
||||
@@ -48,9 +48,9 @@
|
||||
"labels": {
|
||||
"Create Case": "Crea Caso",
|
||||
"Close": "Chiuso",
|
||||
"Reject": "Rigettato",
|
||||
"Reject": "Rifiutato",
|
||||
"Closed": "Chiuso",
|
||||
"Rejected": "Rigettato"
|
||||
"Rejected": "Rifiutato"
|
||||
},
|
||||
"presetFilters": {
|
||||
"open": "Aperto",
|
||||
|
||||
@@ -9,24 +9,31 @@
|
||||
"phoneNumber": "Telefono",
|
||||
"accountType": "Tipo di Account",
|
||||
"doNotCall": "Non chiamare",
|
||||
"address": "Indirizzi",
|
||||
"opportunityRole": "Opportunity Role",
|
||||
"address": "Indirizzo",
|
||||
"opportunityRole": "Ruolo Opportunità",
|
||||
"description": "Descrizione",
|
||||
"campaign": "Campaign",
|
||||
"campaign": "Campagna",
|
||||
"targetLists": "Liste di destinazione",
|
||||
"targetList": "Lista di destinazione",
|
||||
"portalUser": "Portal User"
|
||||
"portalUser": "Utente Portale",
|
||||
"originalLead": "Lead di Origine",
|
||||
"acceptanceStatus": "Stato Accettazione",
|
||||
"accountIsInactive": "Account Inattivo",
|
||||
"acceptanceStatusMeetings": "Stato Accettazione (Meeting)",
|
||||
"acceptanceStatusCalls": "Stato Accettazione (Chiamate)"
|
||||
},
|
||||
"links": {
|
||||
"opportunities": "Opportunita'",
|
||||
"opportunities": "Opportunità",
|
||||
"cases": "Casi",
|
||||
"targetLists": "Liste di destinazione",
|
||||
"targetLists": "Liste di Target",
|
||||
"campaignLogRecords": "Log Campagna",
|
||||
"campaign": "Campagna",
|
||||
"account": "Account (Primario)",
|
||||
"accounts": "Account",
|
||||
"casesPrimary": "Casi (Primario)",
|
||||
"portalUser": "Portale Utente"
|
||||
"portalUser": "Portale Utente",
|
||||
"originalLead": "Lead di Origine",
|
||||
"documents": "Documenti"
|
||||
},
|
||||
"labels": {
|
||||
"Create Contact": "Crea Contatto"
|
||||
@@ -41,6 +48,7 @@
|
||||
},
|
||||
"presetFilters": {
|
||||
"portalUsers": "Portale Utenti",
|
||||
"notPortalUsers": "Nessun Portale Utenti"
|
||||
"notPortalUsers": "Nessun Portale Utenti",
|
||||
"accountActive": "Attivo"
|
||||
}
|
||||
}
|
||||
@@ -8,18 +8,18 @@
|
||||
"status": "Stato",
|
||||
"file": "File",
|
||||
"type": "Tipo",
|
||||
"source": "Fonte",
|
||||
"publishDate": "Data di pubblicazione",
|
||||
"expirationDate": "Data di scadenza",
|
||||
"description": "Descrizione",
|
||||
"accounts": "Accounts",
|
||||
"accounts": "Account",
|
||||
"folder": "Cartella"
|
||||
},
|
||||
"links": {
|
||||
"accounts": "Account",
|
||||
"opportunities": "Opportunita'",
|
||||
"opportunities": "Opportunità",
|
||||
"folder": "Cartella",
|
||||
"leads": "Comando"
|
||||
"leads": "Lead",
|
||||
"contacts": "Contatti"
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
"labels": {
|
||||
"Create Lead": "Crea Guida",
|
||||
"Create Contact": "Crea Contatto",
|
||||
"Create Task": "Create Task",
|
||||
"Add to Contact": "Aggiungi ai Contatti",
|
||||
"Add to Lead": "Aggiungi alle Lead",
|
||||
"Create Task": "Crea Task",
|
||||
"Create Case": "Crea Caso"
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
"status": "Stato",
|
||||
"target": "Target",
|
||||
"sentAt": "Data invio",
|
||||
"attemptCount": "Prove",
|
||||
"attemptCount": "Tentativi",
|
||||
"emailAddress": "Indirizzo Email",
|
||||
"massEmail": "Email Massiva",
|
||||
"isTest": "è un test"
|
||||
@@ -17,7 +17,8 @@
|
||||
"status": {
|
||||
"Pending": "In attesa",
|
||||
"Sent": "Inviato",
|
||||
"Failed": "Fallito"
|
||||
"Failed": "Fallito",
|
||||
"Sending": "In invio"
|
||||
}
|
||||
},
|
||||
"presetFilters": {
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
"links": {
|
||||
"parent": "Genitore",
|
||||
"contacts": "Contatti",
|
||||
"opportunities": "Opportunita'",
|
||||
"leads": "Comando",
|
||||
"opportunities": "Opportunità",
|
||||
"leads": "Lead",
|
||||
"meetings": "Meeting",
|
||||
"calls": "Chiamate",
|
||||
"tasks": "Task",
|
||||
@@ -13,73 +13,75 @@
|
||||
"documents": "Documenti",
|
||||
"account": "Account",
|
||||
"opportunity": "Opportunità",
|
||||
"contact": "Contatti"
|
||||
"contact": "Contatto"
|
||||
},
|
||||
"scopeNames": {
|
||||
"Account": "Account",
|
||||
"Contact": "Contatti",
|
||||
"Lead": "Guida",
|
||||
"Lead": "Lead",
|
||||
"Target": "Target",
|
||||
"Opportunity": "Opportunità",
|
||||
"Meeting": "Meeting",
|
||||
"Calendar": "Calendario",
|
||||
"Call": "Chiamata",
|
||||
"Task": "Task",
|
||||
"Case": "Casi",
|
||||
"Document": "Document",
|
||||
"Case": "Caso",
|
||||
"Document": "Documento",
|
||||
"DocumentFolder": "Cartella Documenti",
|
||||
"Campaign": "Campagna",
|
||||
"TargetList": "Elenco destinazioni",
|
||||
"TargetList": "Elenco Target",
|
||||
"MassEmail": "Email Massima",
|
||||
"EmailQueueItem": "Email Queue Item",
|
||||
"CampaignTrackingUrl": "Tracking URL",
|
||||
"Activities": "Attivià",
|
||||
"KnowledgeBaseArticle": "Consocenza di Base degli Aticolo ",
|
||||
"KnowledgeBaseCategory": "Consocenza di Basec della Categoria "
|
||||
"CampaignTrackingUrl": "URL di Tracking",
|
||||
"Activities": "Attività",
|
||||
"KnowledgeBaseArticle": "Articolo Knowledge Base",
|
||||
"KnowledgeBaseCategory": "Categoria Knowledge Base",
|
||||
"CampaignLogRecord": "Log Record della Campagna"
|
||||
},
|
||||
"scopeNamesPlural": {
|
||||
"Account": "Account",
|
||||
"Contact": "Contatti",
|
||||
"Lead": "Comando",
|
||||
"Target": "Targets",
|
||||
"Opportunity": "Opportunita'",
|
||||
"Lead": "Lead",
|
||||
"Target": "Target",
|
||||
"Opportunity": "Opportunità",
|
||||
"Meeting": "Meeting",
|
||||
"Calendar": "Calendario",
|
||||
"Call": "Chiamate",
|
||||
"Task": "Tasks",
|
||||
"Task": "Task",
|
||||
"Case": "Casi",
|
||||
"Document": "Documenti",
|
||||
"DocumentFolder": "Cartella Documenti",
|
||||
"Campaign": "Campagna",
|
||||
"TargetList": "Liste di Destinazione",
|
||||
"Campaign": "Campagne",
|
||||
"TargetList": "Liste di Target",
|
||||
"MassEmail": "Email Massive",
|
||||
"EmailQueueItem": "Email Queue Items",
|
||||
"CampaignTrackingUrl": "Tracking URLs",
|
||||
"Activities": "Attivià",
|
||||
"KnowledgeBaseArticle": "Conoscenza di Base",
|
||||
"KnowledgeBaseCategory": "Conoscenza di Base Categorie"
|
||||
"CampaignTrackingUrl": "URL di Tracking",
|
||||
"Activities": "Attività",
|
||||
"KnowledgeBaseArticle": "Knowledge Base",
|
||||
"KnowledgeBaseCategory": "Categorie della Knowledge Base",
|
||||
"CampaignLogRecord": "Log Record della Campagna"
|
||||
},
|
||||
"dashlets": {
|
||||
"Leads": "Le mie Guide",
|
||||
"Leads": "Le Mie Lead",
|
||||
"Opportunities": "Le mie Opportunità",
|
||||
"Tasks": "I miei Task",
|
||||
"Cases": "I miei Casi",
|
||||
"Calendar": "Calendario",
|
||||
"Calls": "Le mie Chiamate",
|
||||
"Meetings": "I miei Meeting",
|
||||
"OpportunitiesByStage": "Opportunità di stage",
|
||||
"OpportunitiesByLeadSource": "Opportunities by Lead Source",
|
||||
"OpportunitiesByStage": "Opportunità ordinate per Stato",
|
||||
"OpportunitiesByLeadSource": "Opportunità ordinate per provenienza Lead",
|
||||
"SalesByMonth": "Vendite per Mese",
|
||||
"SalesPipeline": "Canale di Vendita",
|
||||
"Activities": "le mie Attività"
|
||||
"Activities": "Le mie Attività"
|
||||
},
|
||||
"labels": {
|
||||
"Create InboundEmail": "Creare Email in entrata",
|
||||
"Activities": "Attivià",
|
||||
"History": "History",
|
||||
"Create InboundEmail": "Crea Email in ingresso",
|
||||
"Activities": "Attività",
|
||||
"History": "Storico",
|
||||
"Attendees": "Partecipanti",
|
||||
"Schedule Meeting": "Scehdula Meeting",
|
||||
"Schedule Call": "Programma di chiamata",
|
||||
"Schedule Call": "Schedula chiamata",
|
||||
"Compose Email": "Componi email",
|
||||
"Log Meeting": "Log Meeting",
|
||||
"Log Call": "Log Chiamata",
|
||||
@@ -88,20 +90,20 @@
|
||||
"Tasks": "Task"
|
||||
},
|
||||
"fields": {
|
||||
"billingAddressCity": "Citta'",
|
||||
"addressCity": "Citta'",
|
||||
"billingAddressCity": "Città",
|
||||
"addressCity": "Città",
|
||||
"billingAddressCountry": "Nazione",
|
||||
"addressCountry": "Nazione",
|
||||
"billingAddressPostalCode": "Codice Postale",
|
||||
"addressPostalCode": "Codice Postale",
|
||||
"billingAddressState": "Stati",
|
||||
"addressState": "Stati",
|
||||
"billingAddressStreet": "Strada",
|
||||
"addressStreet": "Strada",
|
||||
"billingAddressMap": "Map",
|
||||
"addressMap": "Map",
|
||||
"shippingAddressCity": "Citta' (Spedizione)",
|
||||
"shippingAddressStreet": "Strada (Spedizione)",
|
||||
"billingAddressState": "Stato",
|
||||
"addressState": "Stato",
|
||||
"billingAddressStreet": "via",
|
||||
"addressStreet": "via",
|
||||
"billingAddressMap": "Mappa",
|
||||
"addressMap": "Mappa",
|
||||
"shippingAddressCity": "Città (Spedizione)",
|
||||
"shippingAddressStreet": "via (Spedizione)",
|
||||
"shippingAddressCountry": "Nazione (Spedizione)",
|
||||
"shippingAddressState": "Stato (Spedizione)",
|
||||
"shippingAddressPostalCode": "Codice Postale (Spedizione)",
|
||||
|
||||
@@ -1,16 +1,18 @@
|
||||
{
|
||||
"labels": {
|
||||
"Create KnowledgeBaseArticle": "Crea Articolo",
|
||||
"Any": "Tutto",
|
||||
"Any": "Qualsiasi",
|
||||
"Send in Email": "Spedisci via Email",
|
||||
"Move Up": "Sposta in Alto",
|
||||
"Move Down": "Sposta in Basso"
|
||||
"Move Down": "Sposta in Basso",
|
||||
"Move to Top": "Sposta in Cima",
|
||||
"Move to Bottom": "Sposta in Fondo"
|
||||
},
|
||||
"fields": {
|
||||
"name": "Nome",
|
||||
"status": "Stato",
|
||||
"type": "Tipo",
|
||||
"attachments": "Allegato",
|
||||
"attachments": "Allegati",
|
||||
"publishDate": "Data di pubblicazione",
|
||||
"expirationDate": "Data di Scadenza",
|
||||
"description": "Descrizione",
|
||||
@@ -21,7 +23,7 @@
|
||||
},
|
||||
"links": {
|
||||
"cases": "Casi",
|
||||
"opportunities": "Opportunita'",
|
||||
"opportunities": "Opportunità",
|
||||
"categories": "Categorie",
|
||||
"portals": "Portali"
|
||||
},
|
||||
@@ -37,6 +39,7 @@
|
||||
}
|
||||
},
|
||||
"tooltips": {
|
||||
"portals": "L'articolo sarà disponibile nei portali specificati."
|
||||
},
|
||||
"presetFilters": {
|
||||
"published": "Pubblicato"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"labels": {
|
||||
"Create KnowledgeBaseCategory": "Crea Categoria",
|
||||
"Manage Categories": "Gestione categorie",
|
||||
"Manage Categories": "Gestione Categorie",
|
||||
"Articles": "Articoli"
|
||||
},
|
||||
"links": {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"labels": {
|
||||
"Converted To": "Convertito in",
|
||||
"Create Lead": "Crea Guida",
|
||||
"Convert": "Convertire",
|
||||
"convert": "convertire"
|
||||
"Create Lead": "Crea Lead",
|
||||
"Convert": "Converti",
|
||||
"convert": "converti"
|
||||
},
|
||||
"fields": {
|
||||
"name": "Nome",
|
||||
@@ -13,25 +13,30 @@
|
||||
"phoneNumber": "Telefono",
|
||||
"accountName": "Nome utente",
|
||||
"doNotCall": "Non chiamare",
|
||||
"address": "Indirizzi",
|
||||
"address": "Indirizzo",
|
||||
"status": "Stato",
|
||||
"source": "Provenienza",
|
||||
"opportunityAmount": "Opportunity Amount",
|
||||
"opportunityAmountConverted": "Opportunity Amount (converted)",
|
||||
"opportunityAmount": "Ammontare Opportunità",
|
||||
"opportunityAmountConverted": "Ammontare Opportunità (convertito)",
|
||||
"description": "Descrizione",
|
||||
"createdAccount": "Account",
|
||||
"createdContact": "Contatti",
|
||||
"createdContact": "Contatto",
|
||||
"createdOpportunity": "Opportunità",
|
||||
"campaign": "Campagnia",
|
||||
"targetLists": "Liste di destinazione",
|
||||
"targetList": "Lista di destinazione"
|
||||
"campaign": "Campagna",
|
||||
"targetLists": "Liste di Target",
|
||||
"targetList": "Lista di Target",
|
||||
"industry": "Settore",
|
||||
"acceptanceStatus": "Stato Accettazione",
|
||||
"opportunityAmountCurrency": "Valuta dell'Ammontare dell'Opportunità",
|
||||
"acceptanceStatusMeetings": "Stato Accettazione (Meeting)",
|
||||
"acceptanceStatusCalls": "Stato Accettazione (Chiamate)"
|
||||
},
|
||||
"links": {
|
||||
"targetLists": "Liste di destinazione",
|
||||
"targetLists": "Liste di Target",
|
||||
"campaignLogRecords": "Log Campagna",
|
||||
"campaign": "Campagna",
|
||||
"createdAccount": "Account",
|
||||
"createdContact": "Contatti",
|
||||
"createdContact": "Contatto",
|
||||
"createdOpportunity": "Opportunità",
|
||||
"cases": "Casi",
|
||||
"documents": "Documenti"
|
||||
@@ -40,7 +45,7 @@
|
||||
"status": {
|
||||
"New": "Nuovo",
|
||||
"Assigned": "Assegnato",
|
||||
"In Process": "In corso",
|
||||
"In Process": "In Corso",
|
||||
"Converted": "Convertito",
|
||||
"Recycled": "Recuperato",
|
||||
"Dead": "Fuori uso"
|
||||
@@ -49,7 +54,7 @@
|
||||
"": "Nessun",
|
||||
"Call": "Chiamata",
|
||||
"Email": "Email",
|
||||
"Existing Customer": "Cliente esistente",
|
||||
"Existing Customer": "Cliente Esistente",
|
||||
"Partner": "Partner",
|
||||
"Public Relations": "Pubbliche Relazioni",
|
||||
"Web Site": "Sito Web",
|
||||
|
||||
@@ -3,22 +3,22 @@
|
||||
"name": "Nome",
|
||||
"status": "Stato",
|
||||
"storeSentEmails": "Archiviare Email Inviate",
|
||||
"startAt": "Data d'inizio",
|
||||
"startAt": "Data d'Inizio",
|
||||
"fromAddress": "Indirizzo mittente",
|
||||
"fromName": "Dal nome",
|
||||
"replyToAddress": "Rispondi aa Indirizzo",
|
||||
"replyToName": "Rispondi a Nome",
|
||||
"fromName": "Mittente",
|
||||
"replyToAddress": "Indirizzo Email per il Reply-To",
|
||||
"replyToName": "Nome per il Reply-To",
|
||||
"campaign": "Campagna",
|
||||
"emailTemplate": "Modello Email",
|
||||
"inboundEmail": "Email Account",
|
||||
"targetLists": "Liste di Destinazione",
|
||||
"excludingTargetLists": "Escludi Liste di Destinazione",
|
||||
"optOutEntirely": "Opt-Out Entirely"
|
||||
"targetLists": "Liste di Target",
|
||||
"excludingTargetLists": "Liste di Target Escluse",
|
||||
"optOutEntirely": "Opt-Out da tutto"
|
||||
},
|
||||
"links": {
|
||||
"targetLists": "Liste di Destinazione",
|
||||
"excludingTargetLists": "Excluding Target Lists",
|
||||
"queueItems": "Queue Items",
|
||||
"targetLists": "Liste di Target",
|
||||
"excludingTargetLists": "Target List Escluse",
|
||||
"queueItems": "Item in Coda",
|
||||
"campaign": "Campagna",
|
||||
"emailTemplate": "Modello Email",
|
||||
"inboundEmail": "Email Account"
|
||||
@@ -27,23 +27,27 @@
|
||||
"status": {
|
||||
"Draft": "Bozza",
|
||||
"Pending": "In attesa",
|
||||
"In Process": "In corso",
|
||||
"Complete": "Completo",
|
||||
"In Process": "In Corso",
|
||||
"Complete": "Completato",
|
||||
"Canceled": "Cancellato",
|
||||
"Failed": "Fallito"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"Create MassEmail": "Crea Email Massive",
|
||||
"Create MassEmail": "Crea Email Massiva",
|
||||
"Send Test": "Invia Test"
|
||||
},
|
||||
"messages": {
|
||||
"selectAtLeastOneTarget": "Selezionare almeno un destinatario.",
|
||||
"selectAtLeastOneTarget": "Selezionare almeno un target.",
|
||||
"testSent": "L'Email di prova dovrebbe essere stata inviata"
|
||||
},
|
||||
"tooltips": {
|
||||
"optOutEntirely": "Gli Indirizzi e-mail dei destinatari che non sono state sottoscritte saranno contrassegnati come rinunciatari e non riceveranno più e-mail di massive.",
|
||||
"targetLists": "Destinatari che devono ricevere i messaggi.",
|
||||
"excludingTargetLists": "Destinatari che non devono ricevere i messaggi."
|
||||
"optOutEntirely": "Gli Indirizzi e-mail dei destinatari che si sono disiscritti saranno contrassegnati come opted-out e non riceveranno più e-mail massive.",
|
||||
"targetLists": "Target che devono ricevere i messaggi.",
|
||||
"excludingTargetLists": "Target che non devono ricevere i messaggi."
|
||||
},
|
||||
"presetFilters": {
|
||||
"actual": "Attuale",
|
||||
"complete": "Completato"
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"fields": {
|
||||
"name": "Nome",
|
||||
"parent": "Genitore",
|
||||
"parent": "Parente",
|
||||
"status": "Stato",
|
||||
"dateStart": "Data d'inizio",
|
||||
"dateEnd": "Data di fine",
|
||||
@@ -9,9 +9,10 @@
|
||||
"description": "Descrizione",
|
||||
"users": "Utenti",
|
||||
"contacts": "Contatti",
|
||||
"leads": "Comando",
|
||||
"leads": "Lead",
|
||||
"reminders": "Promemoria",
|
||||
"account": "Account"
|
||||
"account": "Account",
|
||||
"acceptanceStatus": "Stato Accettazione"
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
@@ -23,17 +24,17 @@
|
||||
"None": "Nessun",
|
||||
"Accepted": "Accettato",
|
||||
"Declined": "Declinato",
|
||||
"Tentative": "Tentativo"
|
||||
"Tentative": "Provvisorio"
|
||||
}
|
||||
},
|
||||
"massActions": {
|
||||
"setHeld": "Trattenuto",
|
||||
"setNotHeld": "Non Trattenuto"
|
||||
"setHeld": "Impostato su Held",
|
||||
"setNotHeld": "Impostato su Not Held"
|
||||
},
|
||||
"labels": {
|
||||
"Create Meeting": "Create Meeting",
|
||||
"Set Held": "Trattenuto",
|
||||
"Set Not Held": "Non Trattenuto",
|
||||
"Create Meeting": "Crea Meeting",
|
||||
"Set Held": "Imposta Held",
|
||||
"Set Not Held": "Imposta Not Held",
|
||||
"Send Invitations": "Inviare inviti",
|
||||
"on time": "puntuale",
|
||||
"before": "prima"
|
||||
@@ -41,6 +42,9 @@
|
||||
"presetFilters": {
|
||||
"planned": "Pianificato",
|
||||
"held": "Held",
|
||||
"todays": "Di Oggi"
|
||||
"todays": "Oggi"
|
||||
},
|
||||
"messages": {
|
||||
"nothingHasBeenSent": "Nessun messaggio inviato"
|
||||
}
|
||||
}
|
||||
@@ -5,19 +5,23 @@
|
||||
"stage": "Stage",
|
||||
"amount": "Importo",
|
||||
"probability": "Probabilità, %",
|
||||
"leadSource": "Lead Source",
|
||||
"leadSource": "Origine della Lead",
|
||||
"doNotCall": "Non chiamare",
|
||||
"closeDate": "Data di chiusura",
|
||||
"contacts": "Contatti",
|
||||
"description": "Descrizione",
|
||||
"amountConverted": "Importo (convertito)",
|
||||
"amountWeightedConverted": "Importo Ponderato",
|
||||
"campaign": "Campagna"
|
||||
"campaign": "Campagna",
|
||||
"originalLead": "Lead di Provenienza",
|
||||
"amountCurrency": "Valuta dell'importo",
|
||||
"contactRole": "Ruolo Contatto"
|
||||
},
|
||||
"links": {
|
||||
"contacts": "Contatti",
|
||||
"documents": "Documentsi",
|
||||
"campaign": "Campagna"
|
||||
"documents": "Documenti",
|
||||
"campaign": "Campagna",
|
||||
"originalLead": "Lead di Provenienza"
|
||||
},
|
||||
"options": {
|
||||
"stage": {
|
||||
@@ -26,8 +30,8 @@
|
||||
"Needs Analysis": "Necessita di analisi",
|
||||
"Value Proposition": "Proposta di Valore",
|
||||
"Id. Decision Makers": "Id. Responsabile",
|
||||
"Perception Analysis": "Percezione dell'Analisi",
|
||||
"Proposal/Price Quote": "Proposta / Preventivo",
|
||||
"Perception Analysis": "Analisi Percezione",
|
||||
"Proposal/Price Quote": "Proposta/Preventivo",
|
||||
"Negotiation/Review": "Negoziazione/Revisione",
|
||||
"Closed Won": "Chiuso Positivamente",
|
||||
"Closed Lost": "Chiuso Negativamente"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"links": {
|
||||
"articles": "Consocenza di Base degli Articoli"
|
||||
"articles": "Articoli della Knowledge Base"
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"options": {
|
||||
"job": {
|
||||
"ProcessMassEmail": "Send Mass Emails",
|
||||
"ControlKnowledgeBaseArticleStatus": "Controllo dello stato di conoscenza di base"
|
||||
"ProcessMassEmail": "Invia Email Massiva",
|
||||
"ControlKnowledgeBaseArticleStatus": "Controllo dello stato degli articolo della Knowledge Base"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,15 +2,17 @@
|
||||
"fields": {
|
||||
"name": "Nome",
|
||||
"description": "Descrizione",
|
||||
"entryCount": "Contatore iniziale",
|
||||
"entryCount": "Conteggio Elementi",
|
||||
"campaigns": "Campagne",
|
||||
"endDate": "Data di finee",
|
||||
"targetLists": "Lista di destinazione"
|
||||
"endDate": "Data di termine",
|
||||
"targetLists": "Lista di Target",
|
||||
"includingActionList": "Includendo",
|
||||
"excludingActionList": "Escludendo"
|
||||
},
|
||||
"links": {
|
||||
"accounts": "Account",
|
||||
"contacts": "Contatti",
|
||||
"leads": "Comando",
|
||||
"leads": "Lead",
|
||||
"campaigns": "Campagne",
|
||||
"massEmails": "Email Massive"
|
||||
},
|
||||
@@ -24,9 +26,9 @@
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"Create TargetList": "Crea lista di destinazione",
|
||||
"Opted Out": "Rinuncia",
|
||||
"Cancel Opt-Out": "Cancella Opt-Out",
|
||||
"Opt-Out": "Opt-Out"
|
||||
"Create TargetList": "Crea lista di Target",
|
||||
"Opted Out": "Disiscritto",
|
||||
"Cancel Opt-Out": "Annulla Disiscrizione",
|
||||
"Opt-Out": "Disiscrizione"
|
||||
}
|
||||
}
|
||||
@@ -1,21 +1,22 @@
|
||||
{
|
||||
"fields": {
|
||||
"name": "Nome",
|
||||
"parent": "Genitore",
|
||||
"parent": "Parente",
|
||||
"status": "Stato",
|
||||
"dateStart": "Data d'inizio",
|
||||
"dateEnd": "Data di scadenza",
|
||||
"dateStartDate": "Data d'Inizio (tutto il giorno)",
|
||||
"dateEndDate": "Data di Fine (tutto il giorno)",
|
||||
"priority": "Priorita'",
|
||||
"dateEndDate": "Data di Termine (tutto il giorno)",
|
||||
"priority": "Priorità",
|
||||
"description": "Descrizione",
|
||||
"isOverdue": "In ritardo",
|
||||
"account": "Account",
|
||||
"dateCompleted": "Data completata",
|
||||
"attachments": "Allegato"
|
||||
"dateCompleted": "Data Completamento",
|
||||
"attachments": "Allegati",
|
||||
"reminders": "Promemoria"
|
||||
},
|
||||
"links": {
|
||||
"attachments": "Allegato"
|
||||
"attachments": "Allegati"
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
@@ -23,7 +24,7 @@
|
||||
"Started": "Iniziato",
|
||||
"Completed": "Completato",
|
||||
"Canceled": "Cancellato",
|
||||
"Deferred": "Prorogare"
|
||||
"Deferred": "Prorogato"
|
||||
},
|
||||
"priority": {
|
||||
"Low": "Basso",
|
||||
@@ -39,8 +40,8 @@
|
||||
"presetFilters": {
|
||||
"actual": "Attuale",
|
||||
"completed": "Completato",
|
||||
"todays": "Di Oggi",
|
||||
"deferred": "Prorogare",
|
||||
"deferred": "Prorogato",
|
||||
"todays": "Oggi",
|
||||
"overdue": "In RItardo"
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,10 @@
|
||||
{
|
||||
"fields": {
|
||||
"acceptanceStatus": "Stato Accettazione",
|
||||
"acceptanceStatusMeetings": "Stato Accettazione (Meeting)",
|
||||
"acceptanceStatusCalls": "Stato Accettazione (Chiamate)"
|
||||
},
|
||||
"links": {
|
||||
"targetLists": "Liste di destinazione"
|
||||
"targetLists": "Liste di Target"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"fields": {
|
||||
"name": "Ime",
|
||||
"name": "Naziv",
|
||||
"emailAddress": "Email",
|
||||
"website": "Sajt",
|
||||
"phoneNumber": "Telefon",
|
||||
@@ -15,14 +15,14 @@
|
||||
"targetLists": "Liste meta",
|
||||
"targetList": "Lista meta",
|
||||
"originalLead": "Originalni izvor",
|
||||
"contactIsInactive": "Neaktivan"
|
||||
"contactIsInactive": "Neaktivano"
|
||||
},
|
||||
"links": {
|
||||
"contacts": "Kontakti",
|
||||
"opportunities": "Prilike",
|
||||
"cases": "Predmeti",
|
||||
"documents": "Dokumenti",
|
||||
"meetingsPrimary": "Sastanci (priošireno)",
|
||||
"meetingsPrimary": "Ročišta (prošireno)",
|
||||
"callsPrimary": "Pozivi (prošireno)",
|
||||
"tasksPrimary": "Zadaci (prošireno)",
|
||||
"emailsPrimary": "E-pošta (prošireno)",
|
||||
@@ -34,7 +34,7 @@
|
||||
},
|
||||
"options": {
|
||||
"type": {
|
||||
"Customer": "Stranka",
|
||||
"Customer": "Klijent",
|
||||
"Investor": "Investitor",
|
||||
"Partner": "Partner",
|
||||
"Reseller": "Prodavac"
|
||||
@@ -94,13 +94,13 @@
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"Create Account": "Napravi stranku",
|
||||
"Create Account": "Napravi pravno lice",
|
||||
"Copy Billing": "Prekopiraj adresu",
|
||||
"Set Primary": "Podesi primarno"
|
||||
},
|
||||
"presetFilters": {
|
||||
"customers": "Stranke",
|
||||
"customers": "Klijenti",
|
||||
"partners": "Partneri",
|
||||
"recentlyCreated": "Nedavno napravljen"
|
||||
"recentlyCreated": "Nedavno napravljena"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"layouts": {
|
||||
"detailConvert": "Pretvori izvor",
|
||||
"listForAccount": "List (za stranke)"
|
||||
"listForAccount": "Lista (za pravna lica)"
|
||||
}
|
||||
}
|
||||
@@ -12,7 +12,7 @@
|
||||
"contacts": "Kontakti",
|
||||
"leads": "Izvori",
|
||||
"reminders": "Podsetnici",
|
||||
"account": "Stranke",
|
||||
"account": "Pravno lice",
|
||||
"acceptanceStatus": "Staus prihvatanja"
|
||||
},
|
||||
"options": {
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"links": {
|
||||
"targetLists": "Liste meta",
|
||||
"excludingTargetLists": "Isključujući liste meta",
|
||||
"accounts": "Stranke",
|
||||
"accounts": "Pravna lica",
|
||||
"contacts": "Kontakti",
|
||||
"leads": "Izvori",
|
||||
"opportunities": "Prilike",
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"name": "Ime",
|
||||
"number": "Broj",
|
||||
"status": "Status",
|
||||
"account": "Stranka",
|
||||
"account": "Pravno lice",
|
||||
"contact": "Kontakt",
|
||||
"contacts": "Kontakti",
|
||||
"priority": "Prioritet",
|
||||
@@ -14,10 +14,10 @@
|
||||
},
|
||||
"links": {
|
||||
"inboundEmail": "Dolazni email",
|
||||
"account": "Stranka",
|
||||
"account": "Pravno lice",
|
||||
"contact": "Kontakt (osnovni)",
|
||||
"Contacts": "Kontakti",
|
||||
"meetings": "Sastanci",
|
||||
"meetings": "Ročišta",
|
||||
"calls": "Pozivi",
|
||||
"tasks": "Zadaci",
|
||||
"emails": "E-poruke",
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
"emailAddress": "E-mail",
|
||||
"title": "Naslov",
|
||||
"accountRole": "Naslov",
|
||||
"account": "Stranka",
|
||||
"accounts": "Stranke",
|
||||
"account": "Pravno lice",
|
||||
"accounts": "Pravna lica",
|
||||
"phoneNumber": "Telefon",
|
||||
"accountType": "Tip računa",
|
||||
"accountType": "Tip pravnog lica",
|
||||
"doNotCall": "Ne zovi",
|
||||
"address": "Adresa",
|
||||
"opportunityRole": "Uloga prilika",
|
||||
@@ -18,8 +18,8 @@
|
||||
"portalUser": "Korisnik portala",
|
||||
"originalLead": "Originalni izvor",
|
||||
"acceptanceStatus": "Status prihvatanja",
|
||||
"accountIsInactive": "Stranka neaktivna",
|
||||
"acceptanceStatusMeetings": "Status prihvatanja (sastanci)",
|
||||
"accountIsInactive": "Neaktivno pravno lice",
|
||||
"acceptanceStatusMeetings": "Status prihvatanja (Ročišta)",
|
||||
"acceptanceStatusCalls": "Status prihvatanja (pozivi)"
|
||||
},
|
||||
"links": {
|
||||
@@ -28,8 +28,8 @@
|
||||
"targetLists": "Liste meta",
|
||||
"campaignLogRecords": "Dnevnik kampanje",
|
||||
"campaign": "Kampanja",
|
||||
"account": "Stranka (osnovna)",
|
||||
"accounts": "Stranke",
|
||||
"account": "Pravno lice (osnovno)",
|
||||
"accounts": "Pravna lica",
|
||||
"casesPrimary": "Predmeti (osnovni)",
|
||||
"portalUser": "Korisnik portala",
|
||||
"originalLead": "Originalni izvor",
|
||||
@@ -48,6 +48,7 @@
|
||||
},
|
||||
"presetFilters": {
|
||||
"portalUsers": "Korisnici portala",
|
||||
"notPortalUsers": "Nisu korisnici portala"
|
||||
"notPortalUsers": "Nisu korisnici portala",
|
||||
"accountActive": "Aktivan"
|
||||
}
|
||||
}
|
||||
@@ -11,11 +11,11 @@
|
||||
"publishDate": "Datum objave",
|
||||
"expirationDate": "Rok upotrebe",
|
||||
"description": "Opis",
|
||||
"accounts": "Stranke",
|
||||
"accounts": "Pravna lica",
|
||||
"folder": "Fascikla"
|
||||
},
|
||||
"links": {
|
||||
"accounts": "Stranke",
|
||||
"accounts": "Pravna lica",
|
||||
"opportunities": "Prilike",
|
||||
"folder": "Fascikla",
|
||||
"leads": "Izvori",
|
||||
|
||||
@@ -4,24 +4,24 @@
|
||||
"contacts": "Kontakti",
|
||||
"opportunities": "Prilike",
|
||||
"leads": "Izvori",
|
||||
"meetings": "Sastanci",
|
||||
"meetings": "Ročišta",
|
||||
"calls": "Pozivi",
|
||||
"tasks": "Zadaci",
|
||||
"emails": "E-poruke",
|
||||
"accounts": "Stranke",
|
||||
"accounts": "Pravna lica",
|
||||
"cases": "Predmeti",
|
||||
"documents": "Dokumenti",
|
||||
"account": "Stranka",
|
||||
"account": "Pravno lice",
|
||||
"opportunity": "Prilika",
|
||||
"contact": "Kontakt"
|
||||
},
|
||||
"scopeNames": {
|
||||
"Account": "Stranka",
|
||||
"Account": "Pravno lice",
|
||||
"Contact": "Kontakt",
|
||||
"Lead": "Izvor",
|
||||
"Target": "Meta",
|
||||
"Opportunity": "Prilika",
|
||||
"Meeting": "Sastanak",
|
||||
"Meeting": "Ročište",
|
||||
"Calendar": "Kalendar",
|
||||
"Call": "Poziv",
|
||||
"Task": "Zadatak",
|
||||
@@ -39,12 +39,12 @@
|
||||
"CampaignLogRecord": "Upis dnevnika kampanje"
|
||||
},
|
||||
"scopeNamesPlural": {
|
||||
"Account": "Stranke",
|
||||
"Account": "Pravna lica",
|
||||
"Contact": "Kontakti",
|
||||
"Lead": "Izvori",
|
||||
"Target": "Mete",
|
||||
"Opportunity": "Prilike",
|
||||
"Meeting": "Sastanci",
|
||||
"Meeting": "Ročišta",
|
||||
"Calendar": "Kalendar",
|
||||
"Call": "Pozivi",
|
||||
"Task": "Zadaci",
|
||||
@@ -68,7 +68,7 @@
|
||||
"Cases": "Moji predmeti",
|
||||
"Calendar": "Kalendar",
|
||||
"Calls": "Moji pozivi",
|
||||
"Meetings": "Moji Sastanci",
|
||||
"Meetings": "Moja ročišta",
|
||||
"OpportunitiesByStage": "Prilike po fazama",
|
||||
"OpportunitiesByLeadSource": "Prilike po izvorima",
|
||||
"SalesByMonth": "Prodaja po mesecima",
|
||||
@@ -80,10 +80,10 @@
|
||||
"Activities": "Aktivnosti",
|
||||
"History": "Istorija",
|
||||
"Attendees": "Zvanice",
|
||||
"Schedule Meeting": "Zakaži sastanak",
|
||||
"Schedule Meeting": "Zakaži ročište",
|
||||
"Schedule Call": "Zakaži poziv",
|
||||
"Compose Email": "Sastavi e-poruku",
|
||||
"Log Meeting": "Upiši Sastanak",
|
||||
"Log Meeting": "Upiši ročište",
|
||||
"Log Call": "Upiši poziv",
|
||||
"Archive Email": "Arhiva E-pošte",
|
||||
"Create Task": "Napravi Zadatak",
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"opportunityAmount": "Vrednost prilike",
|
||||
"opportunityAmountConverted": "Vrednost prilike (konvertovano)",
|
||||
"description": "Opis",
|
||||
"createdAccount": "Stranka",
|
||||
"createdAccount": "Pravno lice",
|
||||
"createdContact": "Kontakt",
|
||||
"createdOpportunity": "Prilika",
|
||||
"campaign": "Kampanja",
|
||||
@@ -28,14 +28,14 @@
|
||||
"industry": "Industrija",
|
||||
"acceptanceStatus": "Status prihvatanja",
|
||||
"opportunityAmountCurrency": "Iznos prilike u valuti",
|
||||
"acceptanceStatusMeetings": "Status prihvatanja (sastanci)",
|
||||
"acceptanceStatusMeetings": "Status prihvatanja (Ročišta)",
|
||||
"acceptanceStatusCalls": "Status prihvatanja (pozivi)"
|
||||
},
|
||||
"links": {
|
||||
"targetLists": "Liste meta",
|
||||
"campaignLogRecords": "Dnevnik kampanje",
|
||||
"campaign": "Kampanja",
|
||||
"createdAccount": "Stranka",
|
||||
"createdAccount": "Pravno lice",
|
||||
"createdContact": "Kontakt",
|
||||
"createdOpportunity": "Prilika",
|
||||
"cases": "Predmeti",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"fields": {
|
||||
"name": "Ime",
|
||||
"name": "Naziv",
|
||||
"parent": "Roditelj",
|
||||
"status": "Status",
|
||||
"dateStart": "Početni datum",
|
||||
@@ -11,13 +11,13 @@
|
||||
"contacts": "Kontakti",
|
||||
"leads": "Izvori",
|
||||
"reminders": "Podsetnici",
|
||||
"account": "Stranka",
|
||||
"account": "Pravno lice",
|
||||
"acceptanceStatus": "Status prihvatanja"
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
"Planned": "Planiran",
|
||||
"Held": "Održan",
|
||||
"Held": "Održano",
|
||||
"Not Held": "Nije održano"
|
||||
},
|
||||
"acceptanceStatus": {
|
||||
@@ -32,17 +32,17 @@
|
||||
"setNotHeld": "Podesi kao nije održano"
|
||||
},
|
||||
"labels": {
|
||||
"Create Meeting": "Napravi sastanak",
|
||||
"Create Meeting": "Napravi ročište",
|
||||
"Set Held": "Podesi održano",
|
||||
"Set Not Held": "Podesi nije održano",
|
||||
"Send Invitations": "Pošalji Pozivnice",
|
||||
"Send Invitations": "Pošalji pozive",
|
||||
"on time": "na vreme",
|
||||
"before": "pre"
|
||||
},
|
||||
"presetFilters": {
|
||||
"planned": "Planirano",
|
||||
"held": "Održano",
|
||||
"todays": "Današnji"
|
||||
"todays": "Današnja"
|
||||
},
|
||||
"messages": {
|
||||
"nothingHasBeenSent": "Ništa nije poslato"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"fields": {
|
||||
"name": "Ime",
|
||||
"account": "Stranka",
|
||||
"account": "Pravno lice",
|
||||
"stage": "Faza",
|
||||
"amount": "Iznos",
|
||||
"probability": "Verovatnoća,%",
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
"excludingActionList": "Isključujući"
|
||||
},
|
||||
"links": {
|
||||
"accounts": "Stranke",
|
||||
"accounts": "Pravna lica",
|
||||
"contacts": "Kontakti",
|
||||
"leads": "Izvori",
|
||||
"campaigns": "Kampanje",
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
"priority": "Prioritet",
|
||||
"description": "Opis",
|
||||
"isOverdue": "kasni",
|
||||
"account": "Stranka",
|
||||
"account": "Pravno lice",
|
||||
"dateCompleted": "Datum završetka",
|
||||
"attachments": "Prilozi",
|
||||
"reminders": "Podsetnici"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
},
|
||||
"fields": {
|
||||
"acceptanceStatus": "Status prihvatanja",
|
||||
"acceptanceStatusMeetings": "Status prihvatanja (sastanci)",
|
||||
"acceptanceStatusMeetings": "Status prihvatanja (Ročišta)",
|
||||
"acceptanceStatusCalls": "Status prihvatanja (pozivi)"
|
||||
}
|
||||
}
|
||||
@@ -48,6 +48,7 @@
|
||||
},
|
||||
"relationshipPanels": {
|
||||
"contacts": {
|
||||
"filterList": ["all", "accountActive"],
|
||||
"layout":"listForAccount"
|
||||
},
|
||||
"opportunities":{
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
{
|
||||
"name":"statistics",
|
||||
"label":"Statistics",
|
||||
"view":"crm:views/campaign/record/panels/statistics",
|
||||
"view":"crm:views/campaign/record/panels/campaign-stats",
|
||||
"hidden": false
|
||||
}
|
||||
]
|
||||
|
||||
@@ -99,7 +99,8 @@
|
||||
"type": "varchar"
|
||||
},
|
||||
"account": {
|
||||
"type": "link"
|
||||
"type": "link",
|
||||
"view": "crm:views/contact/fields/account"
|
||||
},
|
||||
"accounts": {
|
||||
"type": "linkMultiple",
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
<p>{{assignerUserName}} te ha asignado {{entityTypeLowerFirst}} a ti.</p>
|
||||
<p><strong>{{name}}</strong></p>
|
||||
<p>Comienzo: {{dateStart}}</p>
|
||||
{{#if description}}
|
||||
<p>{{{description}}}</p>
|
||||
{{/if}}
|
||||
<p><a href="{{recordUrl}}">Ver registro</a></p>
|
||||
@@ -0,0 +1,13 @@
|
||||
<p>Asunto: {{name}}</p>
|
||||
<p>Comienzo: {{dateStart}}</p>
|
||||
{{#if isUser}}
|
||||
{{#if description}}
|
||||
<p>{{{description}}}</p>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
<p>
|
||||
<a href="{{acceptLink}}">Aceptar</a>, <a href="{{declineLink}}">Declinar</a>, <a href="{{tentativeLink}}">Provisional</a>
|
||||
</p>
|
||||
{{#if isUser}}
|
||||
<p><a href="{{recordUrl}}">Ver registro</a></p>
|
||||
{{/if}}
|
||||
@@ -0,0 +1 @@
|
||||
Invitacion a {{{entityTypeLowerFirst}}} '{{{name}}}'
|
||||
@@ -0,0 +1,4 @@
|
||||
<p>Asunto: {{name}}</p>
|
||||
<p>Fecha Final: {{dateEnd}}</p>
|
||||
|
||||
<p><a href="{{recordUrl}}">Ver registro</a></p>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user