Compare commits
222 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 17ea760851 | |||
| f3d11aede3 | |||
| 8053d65f33 | |||
| 01809d2cc3 | |||
| ac8e3d1a69 | |||
| b669ccf733 | |||
| 8c42c6bf0b | |||
| 97bdd22795 | |||
| 0f3cd7913c | |||
| 502cfc8d76 | |||
| d31e826305 | |||
| 28a62a2581 | |||
| deff6bad36 | |||
| f2bc80b7d9 | |||
| b5b5cac0ac | |||
| 308f30510b | |||
| 574513a9c8 | |||
| f37bc7d46b | |||
| 9f5db434df | |||
| 1c8abd6e36 | |||
| c95fcd6fbd | |||
| e6009366e8 | |||
| 286502d872 | |||
| 0749bdc006 | |||
| 72ef137dbe | |||
| f624bdef5c | |||
| 9730680e41 | |||
| c59fa40615 | |||
| 4dc08dd37c | |||
| e76c7564dc | |||
| 802bac82f0 | |||
| c64cc13e4c | |||
| 30be62eabe | |||
| 1c1703b349 | |||
| 6916f3242c | |||
| d2630a5c3f | |||
| 3e02776fcd | |||
| 376bfe63e0 | |||
| 950a3b4703 | |||
| 2f5ffb7421 | |||
| 043ef8ef3e | |||
| a959a2deaf | |||
| 65a3f4e5f3 | |||
| 97355ad024 | |||
| 99300d2d61 | |||
| e070d9d9f1 | |||
| 8f9bb79978 | |||
| 405a5c29df | |||
| 4f2a2b290b | |||
| fd5218c10b | |||
| 73ab4aa42e | |||
| 66a60b1257 | |||
| c975954944 | |||
| 86799ed742 | |||
| 1da6eca3be | |||
| a462158582 | |||
| 152b8991d3 | |||
| 5adcf013d7 | |||
| 9d6401cbd3 | |||
| 9f178bb467 | |||
| f3b2cc9bcb | |||
| b18a8c1b2b | |||
| 30dd7e560b | |||
| ca35a4df75 | |||
| fe0a6d1a8b | |||
| f9223087df | |||
| f3980ef9a1 | |||
| 93553d18fc | |||
| e35561093d | |||
| b0742aa0c6 | |||
| efad2b142a | |||
| 362f895e72 | |||
| 224b73eb89 | |||
| c4cf45e7f8 | |||
| cb45e57a99 | |||
| e7f62f79ef | |||
| 6fb21ccd77 | |||
| f55d814cbb | |||
| 8fa22a6c7d | |||
| b86ca3a4ec | |||
| ab51e70ff4 | |||
| 0bde83c0e7 | |||
| 589754851c | |||
| 253930ba6d | |||
| 09c19bbba5 | |||
| ac96ebffa5 | |||
| f01715452f | |||
| 875b01dcd6 | |||
| 61def7e332 | |||
| 86b24ff618 | |||
| 1d29d74204 | |||
| 2cf820e181 | |||
| bf8ab4dec2 | |||
| 7b772bde3c | |||
| dfbad82ba8 | |||
| 84938d88fc | |||
| ed5f66729d | |||
| ee5218c46d | |||
| 6758d71e2e | |||
| 1eec3d88cf | |||
| 34f1c196f1 | |||
| a87e2fb5db | |||
| cecafa5e28 | |||
| a0e5f2d8ec | |||
| 47080f9b78 | |||
| dd15767263 | |||
| a698085196 | |||
| 2d4e1a94a4 | |||
| dad49b9ac8 | |||
| c5c1abaeff | |||
| eb4f933753 | |||
| 931f27cb70 | |||
| e6e00d4c7f | |||
| 3cf48129c6 | |||
| b50bf02e90 | |||
| 431e3428b3 | |||
| 6d2e056b10 | |||
| 1cbfacc864 | |||
| f2b51d321f | |||
| 0fe0b8906c | |||
| 0876f03fe4 | |||
| dd239af810 | |||
| 5f2fae940c | |||
| 02f94875b1 | |||
| 52536f9803 | |||
| 7f963bd9f3 | |||
| fcfbd478ca | |||
| d7164dd588 | |||
| d20b2768e1 | |||
| 68301c52c1 | |||
| 57aa9fa817 | |||
| 910291796b | |||
| e4a661721f | |||
| 4068a20b8e | |||
| c3be6db4f3 | |||
| 80678c97f0 | |||
| 711d20f874 | |||
| 7f299e1aa2 | |||
| ab612a3f32 | |||
| c0c244adc6 | |||
| 46a985076e | |||
| 7f82fab69b | |||
| 12ed1b3383 | |||
| eab279dd12 | |||
| e59a927faa | |||
| 1c1cb13c4d | |||
| 45a37eabe2 | |||
| bbe6d81aa2 | |||
| 5d19b1bb72 | |||
| 866f05fea5 | |||
| bd22554756 | |||
| 703e170773 | |||
| a226242e69 | |||
| 1438f8aa10 | |||
| 79564bab81 | |||
| 5c7dd0b536 | |||
| 7e340b8b78 | |||
| a026dc577c | |||
| ed6c56629e | |||
| 97574707e5 | |||
| 942726eb74 | |||
| e1eb3f804e | |||
| 2133a1390c | |||
| 7fab959a2f | |||
| 88f64ab82f | |||
| 1563d63051 | |||
| 82026658e2 | |||
| 26eec19a62 | |||
| f548db2783 | |||
| 2da689e7e9 | |||
| 8afb4804c3 | |||
| 56b8902969 | |||
| 95cee6c845 | |||
| dc58bcbd91 | |||
| 8d3698e6a3 | |||
| c04526dc11 | |||
| 6a0d622344 | |||
| 74797e0768 | |||
| 6fd0851dc9 | |||
| 41e2773781 | |||
| bf03412bf0 | |||
| 6b25aa1274 | |||
| 634acdd770 | |||
| f2f01adfc9 | |||
| 9cd2d1d21f | |||
| fa144847e5 | |||
| 17138f715b | |||
| 0babd05bff | |||
| c5f14e55c5 | |||
| 03918c8ada | |||
| 80c7008a6c | |||
| 3d143cd3f0 | |||
| 365264b393 | |||
| 3b4aea4966 | |||
| cb77bc9085 | |||
| 691aff990b | |||
| 0f6ca667d9 | |||
| ba41229a83 | |||
| 7c9d28098b | |||
| eccf9e4d85 | |||
| 96dffc0b74 | |||
| 308d0bfc0c | |||
| f9dcf2db7d | |||
| 88798f2b86 | |||
| 28ecdc46b6 | |||
| 6a30031f49 | |||
| d4f23e391f | |||
| 79b7463886 | |||
| eddae25d7f | |||
| 5e9c85fc06 | |||
| b44adb34ec | |||
| f0f6cac84a | |||
| 17e87f58c3 | |||
| 273698e2fc | |||
| 66f88e0e8e | |||
| de945008fb | |||
| 5f91505b8e | |||
| 6a25c283ec | |||
| 74fa9289a7 | |||
| ab4b975912 | |||
| 2260089301 | |||
| 9dd35f1e32 |
@@ -33,39 +33,38 @@ use \Espo\Core\Exceptions\Forbidden;
|
||||
|
||||
class ActionHistoryRecord extends \Espo\Core\Controllers\Record
|
||||
{
|
||||
public function actionUpdate($params, $data, $request)
|
||||
public function beforeUpdate()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionCreate($params, $data, $request)
|
||||
public function beforeCreate()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionListLinked($params, $data, $request)
|
||||
public function beforeListLinked()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionMassUpdate($params, $data, $request)
|
||||
public function beforeMassUpdate()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionCreateLink($params, $data, $request)
|
||||
public function beforeCreateLink()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionRemoveLink($params, $data, $request)
|
||||
public function beforeRemoveLink()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionMassDelete($params, $data, $request)
|
||||
public function beforeMassDelete()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -40,27 +40,27 @@ class AuthLogRecord extends \Espo\Core\Controllers\Record
|
||||
}
|
||||
}
|
||||
|
||||
public function actionUpdate($params, $data, $request)
|
||||
public function beforeUpdate()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionMassUpdate($params, $data, $request)
|
||||
public function beforeMassUpdate()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionCreate($params, $data, $request)
|
||||
public function beforeCreate()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionCreateLink($params, $data, $request)
|
||||
public function beforeCreateLink()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionRemoveLink($params, $data, $request)
|
||||
public function beforeRemoveLink()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
@@ -80,17 +80,17 @@ class AuthToken extends \Espo\Core\Controllers\Record
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionCreate($params, $data, $request)
|
||||
public function beforeCreate()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionCreateLink($params, $data, $request)
|
||||
public function beforeCreateLink()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionRemoveLink($params, $data, $request)
|
||||
public function beforeRemoveLink()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
@@ -94,25 +94,6 @@ class Extension extends \Espo\Core\Controllers\Record
|
||||
return true;
|
||||
}
|
||||
|
||||
public function actionCreate($params, $data, $request)
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionUpdate($params, $data, $request)
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionPatch($params, $data, $request)
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionListLinked($params, $data, $request)
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionDelete($params, $data, $request)
|
||||
{
|
||||
@@ -129,22 +110,42 @@ class Extension extends \Espo\Core\Controllers\Record
|
||||
return true;
|
||||
}
|
||||
|
||||
public function actionMassUpdate($params, $data, $request)
|
||||
public function beforeCreate()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionMassDelete($params, $data, $request)
|
||||
public function beforeUpdate()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionCreateLink($params, $data, $request)
|
||||
public function beforePatch()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionRemoveLink($params, $data, $request)
|
||||
public function beforeListLinked()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function beforeMassUpdate()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function beforeMassDelete()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function beforeCreateLink()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function beforeRemoveLink()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
@@ -47,17 +47,27 @@ class ExternalAccount extends \Espo\Core\Controllers\Record
|
||||
public function actionList($params, $data, $request)
|
||||
{
|
||||
$integrations = $this->getEntityManager()->getRepository('Integration')->find();
|
||||
$arr = array();
|
||||
|
||||
$list = [];
|
||||
foreach ($integrations as $entity) {
|
||||
if ($entity->get('enabled') && $this->getMetadata()->get('integrations.' . $entity->id .'.allowUserAccounts')) {
|
||||
$arr[] = array(
|
||||
|
||||
$userAccountAclScope = $this->getMetadata()->get(['integrations', $entity->id, 'userAccountAclScope']);
|
||||
|
||||
if ($userAccountAclScope) {
|
||||
if (!$this->getAcl()->checkScope($userAccountAclScope)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
$list[] = [
|
||||
'id' => $entity->id
|
||||
);
|
||||
];
|
||||
}
|
||||
}
|
||||
return array(
|
||||
'list' => $arr
|
||||
);
|
||||
return [
|
||||
'list' => $list
|
||||
];
|
||||
}
|
||||
|
||||
public function actionGetOAuth2Info($params, $data, $request)
|
||||
|
||||
@@ -43,27 +43,27 @@ class Import extends \Espo\Core\Controllers\Record
|
||||
}
|
||||
}
|
||||
|
||||
public function actionPatch($params, $data, $request)
|
||||
public function beforePatch()
|
||||
{
|
||||
throw new BadRequest();
|
||||
}
|
||||
|
||||
public function actionUpdate($params, $data, $request)
|
||||
public function beforeUpdate()
|
||||
{
|
||||
throw new BadRequest();
|
||||
}
|
||||
|
||||
public function actionMassUpdate($params, $data, $request)
|
||||
public function beforeMassUpdate()
|
||||
{
|
||||
throw new BadRequest();
|
||||
}
|
||||
|
||||
public function actionCreateLink($params, $data, $request)
|
||||
public function beforeCreateLink()
|
||||
{
|
||||
throw new BadRequest();
|
||||
}
|
||||
|
||||
public function actionRemoveLink($params, $data, $request)
|
||||
public function beforeRemoveLink()
|
||||
{
|
||||
throw new BadRequest();
|
||||
}
|
||||
|
||||
@@ -41,37 +41,37 @@ class Job extends \Espo\Core\Controllers\Record
|
||||
}
|
||||
}
|
||||
|
||||
public function actionCreate($params, $data, $request)
|
||||
public function beforeCreate()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionUpdate($params, $data, $request)
|
||||
public function beforeUpdate()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionPatch($params, $data, $request)
|
||||
public function beforePatch()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionListLinked($params, $data, $request)
|
||||
public function beforeListLinked()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionMassUpdate($params, $data, $request)
|
||||
public function beforeMassUpdate()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionCreateLink($params, $data, $request)
|
||||
public function beforeCreateLink()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
public function actionRemoveLink($params, $data, $request)
|
||||
public function beforeRemoveLink()
|
||||
{
|
||||
throw new Forbidden();
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ class Notification extends \Espo\Core\Controllers\Record
|
||||
{
|
||||
public static $defaultAction = 'list';
|
||||
|
||||
public function actionList($params, $data, $request)
|
||||
public function getActionList($params, $data, $request, $response)
|
||||
{
|
||||
$userId = $this->getUser()->id;
|
||||
|
||||
@@ -73,29 +73,28 @@ class Notification extends \Espo\Core\Controllers\Record
|
||||
return $this->getService('Notification')->markAllRead($userId);
|
||||
}
|
||||
|
||||
public function actionExport($params, $data, $request)
|
||||
public function beforeExport()
|
||||
{
|
||||
throw new Error();
|
||||
}
|
||||
|
||||
public function actionMassUpdate($params, $data, $request)
|
||||
public function beforeMassUpdate()
|
||||
{
|
||||
throw new Error();
|
||||
}
|
||||
|
||||
public function actionCreateLink($params, $data, $request)
|
||||
public function beforeCreateLink()
|
||||
{
|
||||
throw new Error();
|
||||
}
|
||||
|
||||
public function actionRemoveLink($params, $data, $request)
|
||||
public function beforeRemoveLink()
|
||||
{
|
||||
throw new Error();
|
||||
}
|
||||
|
||||
public function actionMerge($params, $data, $request)
|
||||
public function beforeMerge()
|
||||
{
|
||||
throw new Error();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,13 @@ class Settings extends \Espo\Core\Controllers\Base
|
||||
{
|
||||
$data = $this->getServiceFactory()->create('Settings')->getConfigData();
|
||||
|
||||
$data->jsLibs = $this->getMetadata()->get('app.jsLibs');
|
||||
$data->jsLibs = $this->getMetadata()->get(['app', 'jsLibs']);
|
||||
|
||||
unset($data->loginView);
|
||||
$loginView = $this->getMetadata()->get(['clientDefs', 'App', 'loginView']);
|
||||
if ($loginView) {
|
||||
$data->loginView = $loginView;
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
@@ -113,17 +113,13 @@ class User extends \Espo\Core\Controllers\Record
|
||||
return $this->getRecordService()->generateNewApiKeyForEntity($data->id)->getValueMap();
|
||||
}
|
||||
|
||||
public function actionCreateLink($params, $data, $request)
|
||||
public function beforeCreateLink()
|
||||
{
|
||||
if (!$this->getUser()->isAdmin()) throw new Forbidden();
|
||||
|
||||
return parent::actionCreateLink($params, $data, $request);
|
||||
}
|
||||
|
||||
public function actionRemoveLink($params, $data, $request)
|
||||
public function beforeRemoveLink($params, $data, $request)
|
||||
{
|
||||
if (!$this->getUser()->isAdmin()) throw new Forbidden();
|
||||
|
||||
return parent::actionRemoveLink($params, $data, $request);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ class Upgrade extends Base
|
||||
return;
|
||||
}
|
||||
|
||||
fwrite(\STDOUT, "EspoCRM will be upgaded to version {$nextVersion} now. Type 'Y' to continue.\n");
|
||||
fwrite(\STDOUT, "EspoCRM will be upgraded to version {$nextVersion} now. Enter [Y] to continue.\n");
|
||||
|
||||
if (!$this->confirm()) {
|
||||
echo "Upgrade canceled.\n";
|
||||
|
||||
@@ -115,7 +115,7 @@ class Container
|
||||
$rotation = $config->get('logger.rotation', true);
|
||||
|
||||
$log = new \Espo\Core\Utils\Log('Espo');
|
||||
$levelCode = $log->getLevelCode($config->get('logger.level', 'WARNING'));
|
||||
$levelCode = $log::toMonologLevel($config->get('logger.level', 'WARNING'));
|
||||
|
||||
if ($rotation) {
|
||||
$maxFileNumber = $config->get('logger.maxFileNumber', 30);
|
||||
@@ -127,7 +127,7 @@ class Container
|
||||
|
||||
$errorHandler = new \Monolog\ErrorHandler($log);
|
||||
$errorHandler->registerExceptionHandler(null, false);
|
||||
$errorHandler->registerErrorHandler(array(), false);
|
||||
$errorHandler->registerErrorHandler([], false);
|
||||
|
||||
return $log;
|
||||
}
|
||||
|
||||
@@ -119,6 +119,7 @@ class DataManager
|
||||
$metadata->init(true);
|
||||
|
||||
$ormData = $this->getContainer()->get('ormMetadata')->getData(true);
|
||||
$this->getContainer()->get('entityManager')->setMetadata($ormData);
|
||||
|
||||
$this->updateCacheTimestamp();
|
||||
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/************************************************************************
|
||||
* This file is part of EspoCRM.
|
||||
*
|
||||
* EspoCRM - Open Source CRM application.
|
||||
* Copyright (C) 2014-2019 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
|
||||
* Website: https://www.espocrm.com
|
||||
*
|
||||
* EspoCRM is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* EspoCRM is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of this program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU General Public License version 3.
|
||||
*
|
||||
* In accordance with Section 7(b) of the GNU General Public License version 3,
|
||||
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
|
||||
************************************************************************/
|
||||
|
||||
namespace Espo\Core\Exceptions;
|
||||
|
||||
class ForbiddenSilent extends Forbidden
|
||||
{
|
||||
public $logLevel = 'notice';
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/************************************************************************
|
||||
* This file is part of EspoCRM.
|
||||
*
|
||||
* EspoCRM - Open Source CRM application.
|
||||
* Copyright (C) 2014-2019 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
|
||||
* Website: https://www.espocrm.com
|
||||
*
|
||||
* EspoCRM is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* EspoCRM is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of this program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU General Public License version 3.
|
||||
*
|
||||
* In accordance with Section 7(b) of the GNU General Public License version 3,
|
||||
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
|
||||
************************************************************************/
|
||||
|
||||
namespace Espo\Core\Exceptions;
|
||||
|
||||
class NotFoundSilent extends NotFound
|
||||
{
|
||||
public $logLevel = 'notice';
|
||||
}
|
||||
@@ -491,7 +491,14 @@ class Xlsx extends \Espo\Core\Injectable
|
||||
|
||||
$sheet->setCellValue("$col$rowNumber", $value);
|
||||
}
|
||||
|
||||
} else if ($type == 'multiEnum' || $type == 'array') {
|
||||
if (!empty($row[$name])) {
|
||||
$array = json_decode($row[$name]);
|
||||
if (is_array($array)) {
|
||||
$value = implode(', ', $array);
|
||||
$sheet->setCellValue("$col$rowNumber", $value, \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_STRING);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (array_key_exists($name, $row)) {
|
||||
$sheet->setCellValueExplicit("$col$rowNumber", $row[$name], \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_STRING);
|
||||
|
||||
@@ -69,7 +69,7 @@ class ClientManager
|
||||
$externalAccountEntity = $this->clientMap[$hash]['externalAccountEntity'];
|
||||
$externalAccountEntity->set('accessToken', $data['accessToken']);
|
||||
$externalAccountEntity->set('tokenType', $data['tokenType']);
|
||||
$this->getEntityManager()->saveEntity($externalAccountEntity);
|
||||
$this->getEntityManager()->saveEntity($externalAccountEntity, ['isTokenRenewal' => true]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,7 +87,12 @@ class ClientManager
|
||||
|
||||
$className = $this->getMetadata()->get("integrations.{$integration}.clientClassName");
|
||||
|
||||
$redirectUri = $this->getConfig()->get('siteUrl') . '?entryPoint=oauthCallback'; // TODO move to client class
|
||||
$redirectUri = $this->getConfig()->get('siteUrl') . '?entryPoint=oauthCallback';
|
||||
|
||||
$redirectUriPath = $this->getMetadata()->get(['integrations', $integration, 'params', 'redirectUriPath']);
|
||||
if ($redirectUriPath) {
|
||||
$redirectUri = rtrim($this->getConfig()->get('siteUrl'), '/') . '/' . $redirectUriPath;
|
||||
}
|
||||
|
||||
if (!$externalAccountEntity) {
|
||||
throw new Error("External Account {$integration} not found for {$userId}");
|
||||
|
||||
@@ -187,7 +187,11 @@ class Client
|
||||
|
||||
$curlOptHttpHeader = array();
|
||||
foreach ($httpHeaders as $key => $value) {
|
||||
$curlOptHttpHeader[] = "{$key}: {$value}";
|
||||
if (is_int($key) && !is_string($key)) {
|
||||
$curlOptHttpHeader[] = $value;
|
||||
continue;
|
||||
}
|
||||
$curlOptHttpHeader[] = "{$key}: {$value}";
|
||||
}
|
||||
$curlOptions[CURLOPT_HTTPHEADER] = $curlOptHttpHeader;
|
||||
|
||||
|
||||
@@ -147,6 +147,7 @@ class Htmlizer
|
||||
}
|
||||
|
||||
$type = $entity->getAttributeType($attribute);
|
||||
$fieldType = $entity->getAttributeParam($attribute, 'fieldType');
|
||||
|
||||
if ($type == Entity::DATETIME) {
|
||||
if (!empty($data[$attribute])) {
|
||||
@@ -194,6 +195,14 @@ class Htmlizer
|
||||
unset($data[$attribute]);
|
||||
}
|
||||
|
||||
if ($fieldType === 'currency' && $this->metadata) {
|
||||
if ($entity->getAttributeParam($attribute, 'attributeRole') === 'currency') {
|
||||
if ($currencyValue = $data[$attribute]) {
|
||||
$data[$attribute . 'Symbol'] = $this->metadata->get(['app', 'currency', 'symbolMap', $currencyValue]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (array_key_exists($attribute, $data)) {
|
||||
$keyRaw = $attribute . '_RAW';
|
||||
$data[$keyRaw] = $data[$attribute];
|
||||
|
||||
@@ -201,7 +201,7 @@ class Importer
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
$email->set('body', '(Not fetched)');
|
||||
$email->set('body', 'Not fetched. The email size exceeds the limit.');
|
||||
$email->set('isHtml', false);
|
||||
}
|
||||
|
||||
|
||||
@@ -50,9 +50,9 @@ class Application extends \Espo\Core\Application
|
||||
$portal = $this->getContainer()->get('entityManager')->getEntity('Portal', $portalId);
|
||||
|
||||
if (!$portal) {
|
||||
$portal = $this->getContainer()->get('entityManager')->getRepository('Portal')->where(array(
|
||||
$portal = $this->getContainer()->get('entityManager')->getRepository('Portal')->where([
|
||||
'customId' => $portalId
|
||||
))->findOne();
|
||||
])->findOne();
|
||||
}
|
||||
|
||||
if (!$portal) {
|
||||
|
||||
@@ -1844,6 +1844,35 @@ class Base
|
||||
return false;
|
||||
}
|
||||
|
||||
public function hasLinkJoined($join, array &$result)
|
||||
{
|
||||
if (in_array($join, $result['joins'])) {
|
||||
return true;
|
||||
}
|
||||
|
||||
foreach ($result['joins'] as $item) {
|
||||
if (is_array($item) && count($item) > 1) {
|
||||
if ($item[0] == $join) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (in_array($join, $result['leftJoins'])) {
|
||||
return true;
|
||||
}
|
||||
|
||||
foreach ($result['leftJoins'] as $item) {
|
||||
if (is_array($item) && count($item) > 1) {
|
||||
if ($item[0] == $join) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function addJoin($join, array &$result)
|
||||
{
|
||||
if (empty($result['joins'])) {
|
||||
@@ -1969,7 +1998,7 @@ class Base
|
||||
|
||||
if ($useFullTextSearch) {
|
||||
foreach ($fieldList as $field) {
|
||||
if (strpos($item, '.') !== false) {
|
||||
if (strpos($field, '.') !== false) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -48,4 +48,23 @@ class Event extends \Espo\Services\Record
|
||||
$reminders = $this->getRepository()->getEntityReminderList($entity);
|
||||
$entity->set('reminders', $reminders);
|
||||
}
|
||||
|
||||
public function getSelectAttributeList($params)
|
||||
{
|
||||
$attributeList = parent::getSelectAttributeList($params);
|
||||
if (is_array($attributeList)) {
|
||||
if (array_key_exists('select', $params)) {
|
||||
$passedAttributeList = $params['select'];
|
||||
if (in_array('duration', $passedAttributeList)) {
|
||||
if (!in_array('dateStart', $attributeList)) {
|
||||
$attributeList[] = 'dateStart';
|
||||
}
|
||||
if (!in_array('dateEnd', $attributeList)) {
|
||||
$attributeList[] = 'dateEnd';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $attributeList;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"labels": {
|
||||
"Create {entityType}": "Klant {entityTypeTranslated}"
|
||||
}
|
||||
}
|
||||
"labels": {
|
||||
"Create {entityType}": "Klant {entityTypeTranslated}"
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,10 @@
|
||||
{
|
||||
"labels": {
|
||||
"Create {entityType}": "Klant {entityTypeTranslated}"
|
||||
}
|
||||
}
|
||||
"links": {
|
||||
"meetings": "vergaderingen",
|
||||
"calls": "gesprekken",
|
||||
"tasks": "taken"
|
||||
},
|
||||
"labels": {
|
||||
"Create {entityType}": "Klant {entityTypeTranslated}"
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,14 @@
|
||||
{
|
||||
"labels": {
|
||||
"Create {entityType}": "Klant {entityTypeTranslated}"
|
||||
}
|
||||
}
|
||||
"fields": {
|
||||
"billingAddress": "Facturatie adres",
|
||||
"shippingAddress": "Verzendingsadres"
|
||||
},
|
||||
"links": {
|
||||
"meetings": "vergaderingen",
|
||||
"calls": "gesprekken",
|
||||
"tasks": "taken"
|
||||
},
|
||||
"labels": {
|
||||
"Create {entityType}": "Klant {entityTypeTranslated}"
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,36 @@
|
||||
{
|
||||
"labels": {
|
||||
"Create {entityType}": "Klant {entityTypeTranslated}"
|
||||
"fields": {
|
||||
"parent": "Ouder",
|
||||
"dateStart": "Datum Start",
|
||||
"dateEnd": "Datum einde",
|
||||
"duration": "Looptijd",
|
||||
"status": "staat",
|
||||
"reminders": "herinneringen",
|
||||
"dateStartDate": "Startdatum (de hele dag)",
|
||||
"dateEndDate": "Datum einde (hele dag)",
|
||||
"isAllDay": "Is de hele dag"
|
||||
},
|
||||
"links": {
|
||||
"parent": "Ouder"
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
"Planned": "Gepland",
|
||||
"Held": "Vastgehouden",
|
||||
"Not Held": "Niet vastgehouden"
|
||||
}
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"Create {entityType}": "Klant {entityTypeTranslated}",
|
||||
"Schedule {entityType}": "Schema {entityTypeTranslated}",
|
||||
"Set Held": "Held instellen",
|
||||
"Set Not Held": "Set not Held"
|
||||
},
|
||||
"massActions": {
|
||||
"setHeld": "Held instellen",
|
||||
"setNotHeld": "Set not Held"
|
||||
},
|
||||
"presetFilters": {
|
||||
"planned": "Gepland"
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,13 @@
|
||||
{
|
||||
"labels": {
|
||||
"Create {entityType}": "Klant {entityTypeTranslated}"
|
||||
}
|
||||
}
|
||||
"fields": {
|
||||
"address": "Adres"
|
||||
},
|
||||
"links": {
|
||||
"meetings": "vergaderingen",
|
||||
"calls": "gesprekken",
|
||||
"tasks": "taken"
|
||||
},
|
||||
"labels": {
|
||||
"Create {entityType}": "Klant {entityTypeTranslated}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{}
|
||||
@@ -0,0 +1 @@
|
||||
{}
|
||||
@@ -0,0 +1 @@
|
||||
{}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"fields": {
|
||||
"status": "Tình trạng"
|
||||
},
|
||||
"presetFilters": {
|
||||
"todays": "Hôm nay"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"fields": {
|
||||
"address": "Địa chỉ"
|
||||
}
|
||||
}
|
||||
@@ -61,6 +61,8 @@ abstract class Base
|
||||
|
||||
protected $packagePostfix = 'z';
|
||||
|
||||
protected $scriptParams = [];
|
||||
|
||||
/**
|
||||
* Directory name of files in a package
|
||||
*/
|
||||
@@ -291,7 +293,7 @@ abstract class Base
|
||||
$script = new $scriptName();
|
||||
|
||||
try {
|
||||
$script->run($this->getContainer());
|
||||
$script->run($this->getContainer(), $this->scriptParams);
|
||||
} catch (\Exception $e) {
|
||||
$this->throwErrorAndRemovePackage($e->getMessage());
|
||||
}
|
||||
|
||||
@@ -39,6 +39,8 @@ class Install extends \Espo\Core\Upgrades\Actions\Base\Install
|
||||
{
|
||||
$this->findExtension();
|
||||
if (!$this->isNew()) {
|
||||
$this->scriptParams['isUpgrade'] = true;
|
||||
|
||||
$this->compareVersion();
|
||||
$this->uninstallExtension();
|
||||
$this->deleteExtension();
|
||||
|
||||
@@ -71,22 +71,62 @@ class Output
|
||||
echo $data;
|
||||
}
|
||||
|
||||
public function processError(string $message = 'Error', int $code = 500, bool $toPrint = false, $exception = null)
|
||||
public function processError(string $message = 'Error', int $statusCode = 500, bool $toPrint = false, $exception = null)
|
||||
{
|
||||
$currentRoute = $this->getSlim()->router()->getCurrentRoute();
|
||||
|
||||
if (isset($currentRoute)) {
|
||||
$inputData = $this->getSlim()->request()->getBody();
|
||||
$inputData = $this->clearPasswords($inputData);
|
||||
$GLOBALS['log']->error('API ['.$this->getSlim()->request()->getMethod().']:'.$currentRoute->getPattern().', Params:'.print_r($currentRoute->getParams(), true).', InputData: '.$inputData.' - '.$message);
|
||||
|
||||
$routePattern = $currentRoute->getPattern();
|
||||
$routeParams = $currentRoute->getParams();
|
||||
$method = $this->getSlim()->request()->getMethod();
|
||||
|
||||
$logMessage = "API ($statusCode) ";
|
||||
$logMessageItemList = [];
|
||||
if ($message) $logMessageItemList[] = $message;
|
||||
$logMessageItemList[] .= "$method " . $_SERVER['REQUEST_URI'];
|
||||
if ($inputData) $logMessageItemList[] = "Input data: " . $inputData;
|
||||
if ($routePattern) $logMessageItemList[] = "Route pattern: ". $routePattern;
|
||||
if (!empty($routeParams)) $logMessageItemList[] = "Route params: ". print_r($routeParams, true);
|
||||
|
||||
$logMessage .= implode("; ", $logMessageItemList);
|
||||
|
||||
$GLOBALS['log']->log('debug', $logMessage);
|
||||
}
|
||||
|
||||
$this->displayError($message, $code, $toPrint, $exception);
|
||||
$this->displayError($message, $statusCode, $toPrint, $exception);
|
||||
}
|
||||
|
||||
public function displayError(string $text, int $statusCode = 500, bool $toPrint = false, $exception = null)
|
||||
{
|
||||
$GLOBALS['log']->error('Display Error: '.$text.', Code: '.$statusCode.' URL: '.$_SERVER['REQUEST_URI']);
|
||||
$logLevel = 'error';
|
||||
$messageLineFile = null;
|
||||
|
||||
if ($exception) {
|
||||
$messageLineFile = 'line: ' . $exception->getLine() . ', file: ' . $exception->getFile();
|
||||
}
|
||||
|
||||
if ($exception && !empty($exception->logLevel)) {
|
||||
$logLevel = $exception->logLevel;
|
||||
}
|
||||
|
||||
$logMessageItemList = [];
|
||||
|
||||
if ($text) $logMessageItemList[] = "{$text}";
|
||||
|
||||
if (!empty($this->slim)) {
|
||||
$logMessageItemList[] = $this->getSlim()->request()->getMethod() . ' ' .$_SERVER['REQUEST_URI'];
|
||||
}
|
||||
|
||||
if ($messageLineFile) {
|
||||
$logMessageItemList[] = $messageLineFile;
|
||||
}
|
||||
|
||||
$logMessage = "($statusCode) " . implode("; ", $logMessageItemList);
|
||||
|
||||
$GLOBALS['log']->log($logLevel, $logMessage);
|
||||
|
||||
ob_clean();
|
||||
|
||||
|
||||
@@ -98,19 +98,45 @@ class ClientManager
|
||||
|
||||
if ($isDeveloperMode) {
|
||||
$useCache = $this->getConfig()->get('useCacheInDeveloperMode');
|
||||
$jsFileList = $this->getMetadata()->get(['app', 'client', 'developerModeScriptList']);
|
||||
$jsFileList = $this->getMetadata()->get(['app', 'client', 'developerModeScriptList'], []);
|
||||
$loaderCacheTimestamp = 'null';
|
||||
} else {
|
||||
$useCache = $this->getConfig()->get('useCache');
|
||||
$jsFileList = $this->getMetadata()->get(['app', 'client', 'scriptList']);
|
||||
$jsFileList = $this->getMetadata()->get(['app', 'client', 'scriptList'], []);
|
||||
$loaderCacheTimestamp = $cacheTimestamp;
|
||||
}
|
||||
|
||||
$cssFileList = $this->getMetadata()->get(['app', 'client', 'cssList'], []);
|
||||
|
||||
$linkList = $this->getMetadata()->get(['app', 'client', 'linkList'], []);
|
||||
|
||||
$scriptsHtml = '';
|
||||
foreach ($jsFileList as $jsFile) {
|
||||
$src = $this->basePath . $jsFile . '?r=' . $cacheTimestamp;
|
||||
$scriptsHtml .= ' ' .
|
||||
'<script type="text/javascript" src="'.$src.'" data-base-path="'.$this->basePath.'"></script>' . "\n";
|
||||
$scriptsHtml .= "\n " .
|
||||
"<script type=\"text/javascript\" src=\"{$src}\" data-base-path=\"{$this->basePath}\"></script>";
|
||||
}
|
||||
|
||||
$additionalStyleSheetsHtml = '';
|
||||
foreach ($cssFileList as $cssFile) {
|
||||
$src = $this->basePath . $cssFile . '?r=' . $cacheTimestamp;
|
||||
$additionalStyleSheetsHtml .= "\n <link rel=\"stylesheet\" href=\"{$src}\">";
|
||||
}
|
||||
|
||||
$linksHtml = '';
|
||||
foreach ($linkList as $item) {
|
||||
$href = $this->basePath . $item['href'];
|
||||
if (empty($item['noTimestamp'])) {
|
||||
$href .= '?r=' . $cacheTimestamp;
|
||||
}
|
||||
$as = $item['as'] ?? '';
|
||||
$rel = $item['rel'] ?? '';
|
||||
$type = $item['type'] ?? '';
|
||||
$additinalPlaceholder = '';
|
||||
if (!empty($item['crossorigin'])) {
|
||||
$additinalPlaceholder .= ' crossorigin';
|
||||
}
|
||||
$linksHtml .= "\n <link rel=\"{$rel}\" href=\"{$href}\" as=\"{$as}\" as=\"{$type}\"{$additinalPlaceholder}>";
|
||||
}
|
||||
|
||||
$data = [
|
||||
@@ -124,7 +150,9 @@ class ClientManager
|
||||
'basePath' => $this->basePath,
|
||||
'useCache' => $useCache ? 'true' : 'false',
|
||||
'appClientClassName' => 'app',
|
||||
'scriptsHtml' => $scriptsHtml
|
||||
'scriptsHtml' => $scriptsHtml,
|
||||
'additionalStyleSheetsHtml' => $additionalStyleSheetsHtml,
|
||||
'linksHtml' => $linksHtml,
|
||||
];
|
||||
|
||||
$html = file_get_contents($htmlFilePath);
|
||||
|
||||
@@ -31,6 +31,7 @@ namespace Espo\Core\Utils\Database\Orm;
|
||||
|
||||
use Espo\Core\Utils\Util;
|
||||
use Espo\ORM\Entity;
|
||||
use Espo\Core\Utils\Database\Schema\Utils as SchemaUtils;
|
||||
|
||||
class Converter
|
||||
{
|
||||
@@ -90,7 +91,7 @@ class Converter
|
||||
'select' => 'select',
|
||||
'orderBy' => 'orderBy',
|
||||
'where' => 'where',
|
||||
'storeArrayValues' => 'storeArrayValues'
|
||||
'storeArrayValues' => 'storeArrayValues',
|
||||
);
|
||||
|
||||
protected $idParams = array(
|
||||
@@ -188,10 +189,8 @@ class Converter
|
||||
{
|
||||
$ormMetadata = array();
|
||||
$ormMetadata[$entityName] = array(
|
||||
'fields' => array(
|
||||
),
|
||||
'relations' => array(
|
||||
)
|
||||
'fields' => [],
|
||||
'relations' => []
|
||||
);
|
||||
|
||||
foreach ($this->permittedEntityOptions as $optionName) {
|
||||
@@ -208,6 +207,7 @@ class Converter
|
||||
$ormMetadata = Util::merge($ormMetadata, $convertedLinks);
|
||||
|
||||
$this->applyFullTextSearch($ormMetadata, $entityName);
|
||||
$this->applyIndexes($ormMetadata, $entityName);
|
||||
|
||||
if (!empty($entityMetadata['collection']) && is_array($entityMetadata['collection'])) {
|
||||
$collectionDefs = $entityMetadata['collection'];
|
||||
@@ -291,7 +291,7 @@ class Converter
|
||||
*/
|
||||
protected function convertFields($entityName, &$entityMetadata)
|
||||
{
|
||||
//List of unmerged fields with default field defenitions in $outputMeta
|
||||
//List of unmerged fields with default field definitions in $outputMeta
|
||||
$unmergedFields = array(
|
||||
'name',
|
||||
);
|
||||
@@ -344,7 +344,7 @@ class Converter
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct fields defenitions based on \Espo\Custom\Core\Utils\Database\Orm\Fields
|
||||
* Correct fields definitions based on \Espo\Custom\Core\Utils\Database\Orm\Fields
|
||||
*
|
||||
* @param array $ormMetadata
|
||||
*
|
||||
@@ -506,6 +506,10 @@ class Converter
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($fieldParams['type'])) {
|
||||
$values['fieldType'] = $fieldParams['type'];
|
||||
}
|
||||
|
||||
return $values;
|
||||
}
|
||||
|
||||
@@ -552,4 +556,18 @@ class Converter
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
protected function applyIndexes(&$ormMetadata, $entityType)
|
||||
{
|
||||
if (!isset($ormMetadata[$entityType]['indexes'])) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($ormMetadata[$entityType]['indexes'] as $indexName => &$indexData) {
|
||||
if (!isset($indexData['key'])) {
|
||||
$indexType = SchemaUtils::getIndexTypeByIndexDefs($indexData);
|
||||
$indexData['key'] = SchemaUtils::generateIndexName($indexName, $indexType);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,6 +100,8 @@ class Currency extends Base
|
||||
'sql' => $converedFieldName . " {direction}",
|
||||
'leftJoins' => $leftJoins,
|
||||
],
|
||||
'attributeRole' => 'valueConverted',
|
||||
'fieldType' => 'currency',
|
||||
];
|
||||
|
||||
$defs[$entityType]['fields'][$fieldName]['orderBy'] = [
|
||||
@@ -108,6 +110,12 @@ class Currency extends Base
|
||||
];
|
||||
}
|
||||
|
||||
$defs[$entityType]['fields'][$fieldName]['attributeRole'] = 'value';
|
||||
$defs[$entityType]['fields'][$fieldName]['fieldType'] = 'currency';
|
||||
|
||||
$defs[$entityType]['fields'][$fieldName . 'Currency']['attributeRole'] = 'currency';
|
||||
$defs[$entityType]['fields'][$fieldName . 'Currency']['fieldType'] = 'currency';
|
||||
|
||||
return $defs;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,25 +31,47 @@ namespace Espo\Core\Utils\Database\Orm\Fields;
|
||||
|
||||
class Email extends Base
|
||||
{
|
||||
protected function load($fieldName, $entityName)
|
||||
protected function load($fieldName, $entityType)
|
||||
{
|
||||
return array(
|
||||
$entityName => array(
|
||||
'fields' => array(
|
||||
$fieldName => array(
|
||||
$foreignJoinAlias = "{$fieldName}{$entityType}Foreign";
|
||||
$foreignJoinMiddleAlias = "{$fieldName}{$entityType}ForeignMiddle";
|
||||
|
||||
return [
|
||||
$entityType => [
|
||||
'fields' => [
|
||||
$fieldName => [
|
||||
'select' => [
|
||||
'sql' => 'emailAddresses.name',
|
||||
'leftJoins' => [['emailAddresses', 'emailAddresses', ['primary' => 1]]],
|
||||
],
|
||||
'selectForeign' => [
|
||||
'sql' => "{$foreignJoinAlias}.name",
|
||||
'leftJoins' => [
|
||||
[
|
||||
'EntityEmailAddress',
|
||||
$foreignJoinMiddleAlias,
|
||||
[
|
||||
"{$foreignJoinMiddleAlias}.entityId:" => "{alias}.id",
|
||||
"{$foreignJoinMiddleAlias}.primary" => 1,
|
||||
]
|
||||
],
|
||||
[
|
||||
'EmailAddress',
|
||||
$foreignJoinAlias,
|
||||
[
|
||||
"{$foreignJoinAlias}.id:" => "{$foreignJoinMiddleAlias}.emailAddressId",
|
||||
]
|
||||
]
|
||||
],
|
||||
],
|
||||
'fieldType' => 'email',
|
||||
'where' =>
|
||||
array (
|
||||
'LIKE' => \Espo\Core\Utils\Util::toUnderScore($entityName) . ".id IN (
|
||||
'where' => [
|
||||
'LIKE' => \Espo\Core\Utils\Util::toUnderScore($entityType) . ".id IN (
|
||||
SELECT entity_id
|
||||
FROM entity_email_address
|
||||
JOIN email_address ON email_address.id = entity_email_address.email_address_id
|
||||
WHERE
|
||||
entity_email_address.deleted = 0 AND entity_email_address.entity_type = '{$entityName}' AND
|
||||
entity_email_address.deleted = 0 AND entity_email_address.entity_type = '{$entityType}' AND
|
||||
email_address.deleted = 0 AND email_address.lower LIKE {value}
|
||||
)",
|
||||
'=' => array(
|
||||
@@ -82,31 +104,34 @@ class Email extends Base
|
||||
'sql' => 'emailAddressesMultiple.lower IS NOT NULL',
|
||||
'distinct' => true
|
||||
)
|
||||
),
|
||||
],
|
||||
'orderBy' => [
|
||||
'sql' => 'emailAddresses.lower {direction}',
|
||||
'leftJoins' => [['emailAddresses', 'emailAddresses', ['primary' => 1]]],
|
||||
],
|
||||
),
|
||||
$fieldName .'Data' => array(
|
||||
],
|
||||
$fieldName .'Data' => [
|
||||
'type' => 'text',
|
||||
'notStorable' => true
|
||||
),
|
||||
$fieldName .'IsOptedOut' => array(
|
||||
'notStorable' => true,
|
||||
'notExportable' => true,
|
||||
],
|
||||
$fieldName .'IsOptedOut' => [
|
||||
'type' => 'bool',
|
||||
'notStorable' => true,
|
||||
'select' => 'emailAddresses.opt_out',
|
||||
'where' => [
|
||||
'= TRUE' => [
|
||||
'sql' => 'emailAddresses.opt_out = true AND emailAddresses.opt_out IS NOT NULL'
|
||||
'sql' => 'emailAddresses.opt_out = true AND emailAddresses.opt_out IS NOT NULL',
|
||||
'leftJoins' => [['emailAddresses', 'emailAddresses', ['primary' => 1]]],
|
||||
],
|
||||
'= FALSE' => [
|
||||
'sql' => 'emailAddresses.opt_out = false OR emailAddresses.opt_out IS NULL'
|
||||
'sql' => 'emailAddresses.opt_out = false OR emailAddresses.opt_out IS NULL',
|
||||
'leftJoins' => [['emailAddresses', 'emailAddresses', ['primary' => 1]]],
|
||||
]
|
||||
],
|
||||
'orderBy' => 'emailAddresses.opt_out {direction}'
|
||||
)
|
||||
),
|
||||
]
|
||||
],
|
||||
'relations' => [
|
||||
'emailAddresses' => [
|
||||
'type' => 'manyMany',
|
||||
@@ -117,7 +142,7 @@ class Email extends Base
|
||||
'emailAddressId'
|
||||
],
|
||||
'conditions' => [
|
||||
'entityType' => $entityName
|
||||
'entityType' => $entityType
|
||||
],
|
||||
'additionalColumns' => [
|
||||
'entityType' => [
|
||||
@@ -131,7 +156,7 @@ class Email extends Base
|
||||
]
|
||||
]
|
||||
]
|
||||
)
|
||||
);
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,25 +35,30 @@ class Link extends Base
|
||||
{
|
||||
$fieldParams = $this->getFieldParams();
|
||||
|
||||
$data = array(
|
||||
$entityName => array (
|
||||
'fields' => array(
|
||||
$fieldName.'Id' => array(
|
||||
$data = [
|
||||
$entityName => [
|
||||
'fields' => [
|
||||
$fieldName.'Id' => [
|
||||
'type' => 'foreignId',
|
||||
'index' => $fieldName
|
||||
),
|
||||
$fieldName.'Name' => array(
|
||||
'index' => $fieldName,
|
||||
'attributeRole' => 'id',
|
||||
'fieldType' => 'link',
|
||||
],
|
||||
$fieldName.'Name' => [
|
||||
'type' => 'varchar',
|
||||
'notStorable' => true
|
||||
)
|
||||
)
|
||||
),
|
||||
'unset' => array(
|
||||
$entityName => array(
|
||||
'fields.'.$fieldName
|
||||
)
|
||||
)
|
||||
);
|
||||
'notStorable' => true,
|
||||
'attributeRole' => 'name',
|
||||
'fieldType' => 'link',
|
||||
]
|
||||
]
|
||||
],
|
||||
'unset' => [
|
||||
$entityName => [
|
||||
'fields.' . $fieldName
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
if (!empty($fieldParams['notStorable'])) {
|
||||
$data[$entityName]['fields'][$fieldName.'Id']['notStorable'] = true;
|
||||
}
|
||||
@@ -64,4 +69,4 @@ class Link extends Base
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,12 +41,16 @@ class LinkMultiple extends Base
|
||||
'notStorable' => true,
|
||||
'isLinkMultipleIdList' => true,
|
||||
'relation' => $fieldName,
|
||||
'isUnordered' => true
|
||||
'isUnordered' => true,
|
||||
'attributeRole' => 'idList',
|
||||
'fieldType' => 'linkMultiple',
|
||||
],
|
||||
$fieldName.'Names' => [
|
||||
'type' => 'jsonObject',
|
||||
'notStorable' => true,
|
||||
'isLinkMultipleNameMap' => true
|
||||
'isLinkMultipleNameMap' => true,
|
||||
'attributeRole' => 'nameMap',
|
||||
'fieldType' => 'linkMultiple',
|
||||
]
|
||||
]
|
||||
],
|
||||
@@ -71,7 +75,8 @@ class LinkMultiple extends Base
|
||||
$data[$entityName]['fields'][$fieldName . 'Columns'] = [
|
||||
'type' => 'jsonObject',
|
||||
'notStorable' => true,
|
||||
'columns' => $columns
|
||||
'columns' => $columns,
|
||||
'attributeRole' => 'columnsMap',
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -33,33 +33,39 @@ class LinkParent extends Base
|
||||
{
|
||||
protected function load($fieldName, $entityName)
|
||||
{
|
||||
$data = array(
|
||||
$entityName => array (
|
||||
'fields' => array(
|
||||
$fieldName.'Id' => array(
|
||||
$data = [
|
||||
$entityName => [
|
||||
'fields' => [
|
||||
$fieldName.'Id' => [
|
||||
'type' => 'foreignId',
|
||||
'index' => $fieldName
|
||||
),
|
||||
$fieldName.'Type' => array(
|
||||
'index' => $fieldName,
|
||||
'attributeRole' => 'id',
|
||||
'fieldType' => 'linkParent',
|
||||
],
|
||||
$fieldName.'Type' => [
|
||||
'type' => 'foreignType',
|
||||
'notNull' => false,
|
||||
'index' => $fieldName,
|
||||
'len' => 100
|
||||
),
|
||||
$fieldName.'Name' => array(
|
||||
'len' => 100,
|
||||
'attributeRole' => 'type',
|
||||
'fieldType' => 'linkParent',
|
||||
],
|
||||
$fieldName.'Name' => [
|
||||
'type' => 'varchar',
|
||||
'notStorable' => true,
|
||||
'relation' => $fieldName,
|
||||
'isParentName' => true
|
||||
)
|
||||
)
|
||||
),
|
||||
'unset' => array(
|
||||
$entityName => array(
|
||||
'isParentName' => true,
|
||||
'attributeRole' => 'name',
|
||||
'fieldType' => 'linkParent',
|
||||
]
|
||||
]
|
||||
],
|
||||
'unset' => [
|
||||
$entityName => [
|
||||
'fields.'.$fieldName
|
||||
)
|
||||
)
|
||||
);
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
$fieldParams = $this->getFieldParams();
|
||||
|
||||
@@ -72,4 +78,4 @@ class LinkParent extends Base
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,25 +31,48 @@ namespace Espo\Core\Utils\Database\Orm\Fields;
|
||||
|
||||
class Phone extends Base
|
||||
{
|
||||
protected function load($fieldName, $entityName)
|
||||
protected function load($fieldName, $entityType)
|
||||
{
|
||||
return array(
|
||||
$entityName => array(
|
||||
'fields' => array(
|
||||
$foreignJoinAlias = "{$fieldName}{$entityType}Foreign";
|
||||
$foreignJoinMiddleAlias = "{$fieldName}{$entityType}ForeignMiddle";
|
||||
|
||||
return [
|
||||
$entityType => [
|
||||
'fields' => [
|
||||
$fieldName => array(
|
||||
'select' => [
|
||||
'sql' => 'phoneNumbers.name',
|
||||
'leftJoins' => [['phoneNumbers', 'phoneNumbers', ['primary' => 1]]],
|
||||
],
|
||||
'selectForeign' => [
|
||||
'sql' => "{$foreignJoinAlias}.name",
|
||||
'leftJoins' => [
|
||||
[
|
||||
'EntityPhoneNumber',
|
||||
$foreignJoinMiddleAlias,
|
||||
[
|
||||
"{$foreignJoinMiddleAlias}.entityId:" => "{alias}.id",
|
||||
"{$foreignJoinMiddleAlias}.primary" => 1,
|
||||
]
|
||||
],
|
||||
[
|
||||
'PhoneNumber',
|
||||
$foreignJoinAlias,
|
||||
[
|
||||
"{$foreignJoinAlias}.id:" => "{$foreignJoinMiddleAlias}.phoneNumberId",
|
||||
]
|
||||
]
|
||||
],
|
||||
],
|
||||
'fieldType' => 'phone',
|
||||
'where' =>
|
||||
array (
|
||||
'LIKE' => \Espo\Core\Utils\Util::toUnderScore($entityName) . ".id IN (
|
||||
'LIKE' => \Espo\Core\Utils\Util::toUnderScore($entityType) . ".id IN (
|
||||
SELECT entity_id
|
||||
FROM entity_phone_number
|
||||
JOIN phone_number ON phone_number.id = entity_phone_number.phone_number_id
|
||||
WHERE
|
||||
entity_phone_number.deleted = 0 AND entity_phone_number.entity_type = '{$entityName}' AND
|
||||
entity_phone_number.deleted = 0 AND entity_phone_number.entity_type = '{$entityType}' AND
|
||||
phone_number.deleted = 0 AND phone_number.name LIKE {value}
|
||||
)",
|
||||
'=' => array(
|
||||
@@ -90,18 +113,36 @@ class Phone extends Base
|
||||
),
|
||||
$fieldName .'Data' => array(
|
||||
'type' => 'text',
|
||||
'notStorable' => true
|
||||
'notStorable' => true,
|
||||
'notExportable' => true,
|
||||
),
|
||||
$fieldName .'IsOptedOut' => [
|
||||
'type' => 'bool',
|
||||
'notStorable' => true,
|
||||
'select' => 'phoneNumbers.opt_out',
|
||||
'where' => [
|
||||
'= TRUE' => [
|
||||
'sql' => 'phoneNumbers.opt_out = true AND phoneNumbers.opt_out IS NOT NULL',
|
||||
'leftJoins' => [['phoneNumbers', 'phoneNumbers', ['primary' => 1]]],
|
||||
],
|
||||
'= FALSE' => [
|
||||
'sql' => 'phoneNumbers.opt_out = false OR phoneNumbers.opt_out IS NULL',
|
||||
'leftJoins' => [['phoneNumbers', 'phoneNumbers', ['primary' => 1]]],
|
||||
]
|
||||
],
|
||||
'orderBy' => 'phoneNumbers.opt_out {direction}'
|
||||
],
|
||||
$fieldName . 'Numeric' => [
|
||||
'type' => 'varchar',
|
||||
'notStorable' => true,
|
||||
'notExportable' => true,
|
||||
'where' => [
|
||||
'LIKE' => \Espo\Core\Utils\Util::toUnderScore($entityName) . ".id IN (
|
||||
'LIKE' => \Espo\Core\Utils\Util::toUnderScore($entityType) . ".id IN (
|
||||
SELECT entity_id
|
||||
FROM entity_phone_number
|
||||
JOIN phone_number ON phone_number.id = entity_phone_number.phone_number_id
|
||||
WHERE
|
||||
entity_phone_number.deleted = 0 AND entity_phone_number.entity_type = '{$entityName}' AND
|
||||
entity_phone_number.deleted = 0 AND entity_phone_number.entity_type = '{$entityType}' AND
|
||||
phone_number.deleted = 0 AND phone_number.numeric LIKE {value}
|
||||
)",
|
||||
'=' => [
|
||||
@@ -134,9 +175,9 @@ class Phone extends Base
|
||||
'sql' => 'phoneNumbersNumericMultiple.numeric IS NOT NULL',
|
||||
'distinct' => true
|
||||
]
|
||||
]
|
||||
],
|
||||
]
|
||||
),
|
||||
],
|
||||
'relations' => [
|
||||
'phoneNumbers' => [
|
||||
'type' => 'manyMany',
|
||||
@@ -147,7 +188,7 @@ class Phone extends Base
|
||||
'phoneNumberId'
|
||||
],
|
||||
'conditions' => [
|
||||
'entityType' => $entityName
|
||||
'entityType' => $entityType
|
||||
],
|
||||
'additionalColumns' => [
|
||||
'entityType' => [
|
||||
@@ -161,7 +202,7 @@ class Phone extends Base
|
||||
]
|
||||
]
|
||||
]
|
||||
)
|
||||
);
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,20 +35,29 @@ class Attachments extends HasChildren
|
||||
{
|
||||
$parentRelation = parent::load($linkName, $entityName);
|
||||
|
||||
$relation = array(
|
||||
$entityName => array (
|
||||
'fields' => array(
|
||||
$linkName.'Types' => array(
|
||||
$relation = [
|
||||
$entityName => [
|
||||
'fields' => [
|
||||
$linkName.'Types' => [
|
||||
'type' => 'jsonObject',
|
||||
'notStorable' => true,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
],
|
||||
],
|
||||
'relations' => [
|
||||
$linkName => [
|
||||
'conditions' => [
|
||||
'OR' => [
|
||||
['field' => null],
|
||||
['field' => $linkName],
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
$relation = \Espo\Core\Utils\Util::merge($parentRelation, $relation);
|
||||
|
||||
return $relation;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -205,7 +205,6 @@ class Converter
|
||||
}
|
||||
|
||||
$primaryColumns = array();
|
||||
$uniqueColumns = array();
|
||||
|
||||
foreach ($entityParams['fields'] as $fieldName => $fieldParams) {
|
||||
|
||||
@@ -234,26 +233,24 @@ class Converter
|
||||
if (!$tables[$entityName]->hasColumn($columnName)) {
|
||||
$tables[$entityName]->addColumn($columnName, $fieldType, $this->getDbFieldParams($fieldParams));
|
||||
}
|
||||
|
||||
//add unique
|
||||
if ($fieldParams['type'] != 'id' && isset($fieldParams['unique'])) {
|
||||
$uniqueColumns = $this->getKeyList($columnName, $fieldParams['unique'], $uniqueColumns);
|
||||
} //END: add unique
|
||||
}
|
||||
|
||||
$tables[$entityName]->setPrimaryKey($primaryColumns);
|
||||
|
||||
if (!empty($indexList[$entityName])) {
|
||||
foreach($indexList[$entityName] as $indexName => $indexParams) {
|
||||
$indexColumnList = $indexParams['columns'];
|
||||
$indexFlagList = isset($indexParams['flags']) ? $indexParams['flags'] : array();
|
||||
$tables[$entityName]->addIndex($indexColumnList, $indexName, $indexFlagList);
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($uniqueColumns)) {
|
||||
foreach($uniqueColumns as $uniqueItem) {
|
||||
$tables[$entityName]->addUniqueIndex($uniqueItem);
|
||||
switch ($indexParams['type']) {
|
||||
case 'index':
|
||||
case 'fulltext':
|
||||
$indexFlagList = isset($indexParams['flags']) ? $indexParams['flags'] : array();
|
||||
$tables[$entityName]->addIndex($indexParams['columns'], $indexName, $indexFlagList);
|
||||
break;
|
||||
|
||||
case 'unique':
|
||||
$tables[$entityName]->addUniqueIndex($indexParams['columns'], $indexName);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -320,7 +317,7 @@ class Converter
|
||||
'type' => 'foreignId',
|
||||
'len' => $this->idParams['len'],
|
||||
)));
|
||||
$table->addIndex(array($columnName));
|
||||
$table->addIndex(array($columnName), SchemaUtils::generateIndexName($columnName));
|
||||
|
||||
$uniqueIndex[] = $columnName;
|
||||
}
|
||||
@@ -349,7 +346,7 @@ class Converter
|
||||
}
|
||||
|
||||
if (!empty($uniqueIndex)) {
|
||||
$table->addUniqueIndex($uniqueIndex);
|
||||
$table->addUniqueIndex($uniqueIndex, SchemaUtils::generateIndexName($columnName, 'unique'));
|
||||
}
|
||||
//END: add unique indexes
|
||||
|
||||
@@ -421,26 +418,7 @@ class Converter
|
||||
}
|
||||
|
||||
/**
|
||||
* Get key list (index, unique). Ex. index => true OR index => 'somename'
|
||||
* @param string $columnName Column name (underscore field name)
|
||||
* @param bool | string $keyValue
|
||||
* @return array
|
||||
*/
|
||||
protected function getKeyList($columnName, $keyValue, array $keyList)
|
||||
{
|
||||
if ($keyValue === true) {
|
||||
$tableIndexName = SchemaUtils::generateIndexName($columnName);
|
||||
$keyList[$tableIndexName] = array($columnName);
|
||||
} else if (is_string($keyValue)) {
|
||||
$tableIndexName = SchemaUtils::generateIndexName($keyValue);
|
||||
$keyList[$tableIndexName][] = $columnName;
|
||||
}
|
||||
|
||||
return $keyList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get custom table defenition in "application/Espo/Core/Utils/Database/Schema/tables/" and in metadata 'additionalTables'
|
||||
* Get custom table definition in "application/Espo/Core/Utils/Database/Schema/tables/" and in metadata 'additionalTables'
|
||||
*
|
||||
* @param array $ormMeta
|
||||
*
|
||||
|
||||
@@ -43,30 +43,35 @@ class Utils
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isset($fieldParams['index'])) {
|
||||
$keyValue = $fieldParams['index'];
|
||||
$columnName = Util::toUnderScore($fieldName);
|
||||
$indexType = static::getIndexTypeByFieldDefs($fieldParams);
|
||||
if (!$indexType) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!isset($indexList[$entityName])) {
|
||||
$indexList[$entityName] = [];
|
||||
}
|
||||
if (!isset($indexList[$entityName])) {
|
||||
$indexList[$entityName] = [];
|
||||
}
|
||||
|
||||
if ($keyValue === true) {
|
||||
$tableIndexName = static::generateIndexName($columnName);
|
||||
$indexList[$entityName][$tableIndexName]['columns'] = array($columnName);
|
||||
} else if (is_string($keyValue)) {
|
||||
$tableIndexName = static::generateIndexName($keyValue);
|
||||
$indexList[$entityName][$tableIndexName]['columns'][] = $columnName;
|
||||
}
|
||||
$keyValue = $fieldParams[$indexType];
|
||||
$columnName = Util::toUnderScore($fieldName);
|
||||
|
||||
if ($keyValue === true) {
|
||||
$tableIndexName = static::generateIndexName($columnName, $indexType);
|
||||
$indexList[$entityName][$tableIndexName]['type'] = $indexType;
|
||||
$indexList[$entityName][$tableIndexName]['columns'] = array($columnName);
|
||||
} else if (is_string($keyValue)) {
|
||||
$tableIndexName = static::generateIndexName($keyValue, $indexType);
|
||||
$indexList[$entityName][$tableIndexName]['type'] = $indexType;
|
||||
$indexList[$entityName][$tableIndexName]['columns'][] = $columnName;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($entityParams['indexes']) && is_array($entityParams['indexes'])) {
|
||||
foreach ($entityParams['indexes'] as $indexName => $indexParams) {
|
||||
$tableIndexName = static::generateIndexName($indexName);
|
||||
$indexType = static::getIndexTypeByIndexDefs($indexParams);
|
||||
$tableIndexName = static::generateIndexName($indexName, $indexType);
|
||||
|
||||
if (isset($indexParams['flags']) && is_array($indexParams['flags'])) {
|
||||
|
||||
$skipIndex = false;
|
||||
foreach ($ignoreFlags as $ignoreFlag) {
|
||||
if (($flagKey = array_search($ignoreFlag, $indexParams['flags'])) !== false) {
|
||||
@@ -83,6 +88,7 @@ class Utils
|
||||
}
|
||||
|
||||
if (is_array($indexParams['columns'])) {
|
||||
$indexList[$entityName][$tableIndexName]['type'] = $indexType;
|
||||
$indexList[$entityName][$tableIndexName]['columns'] = Util::toUnderScore($indexParams['columns']);
|
||||
}
|
||||
}
|
||||
@@ -92,8 +98,42 @@ class Utils
|
||||
return $indexList;
|
||||
}
|
||||
|
||||
public static function generateIndexName($name, $prefix = 'IDX', $maxLength = 30)
|
||||
public static function getIndexTypeByFieldDefs(array $fieldDefs)
|
||||
{
|
||||
if ($fieldDefs['type'] != 'id' && isset($fieldDefs['unique']) && $fieldDefs['unique']) {
|
||||
return 'unique';
|
||||
}
|
||||
|
||||
if (isset($fieldDefs['index']) && $fieldDefs['index']) {
|
||||
return 'index';
|
||||
}
|
||||
}
|
||||
|
||||
public static function getIndexTypeByIndexDefs(array $indexDefs)
|
||||
{
|
||||
if (isset($indexDefs['unique']) && $indexDefs['unique']) {
|
||||
return 'unique';
|
||||
}
|
||||
|
||||
if (isset($indexDefs['flags']) && in_array('fulltext', $indexDefs['flags'])) {
|
||||
return 'fulltext';
|
||||
}
|
||||
|
||||
return 'index';
|
||||
}
|
||||
|
||||
public static function generateIndexName($name, $type = 'index', $maxLength = 60)
|
||||
{
|
||||
switch ($type) {
|
||||
case 'unique':
|
||||
$prefix = 'UNIQ';
|
||||
break;
|
||||
|
||||
default:
|
||||
$prefix = 'IDX';
|
||||
break;
|
||||
}
|
||||
|
||||
$nameList = [];
|
||||
$nameList[] = strtoupper($prefix);
|
||||
$nameList[] = strtoupper( Util::toUnderScore($name) );
|
||||
|
||||
@@ -251,4 +251,9 @@ class DateTime
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static function getSystemNowString()
|
||||
{
|
||||
return date(self::$systemDateTimeFormat);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -588,7 +588,7 @@ class FieldManager
|
||||
}
|
||||
|
||||
/**
|
||||
* Add all needed block for a field defenition
|
||||
* Add all needed block for a field definition
|
||||
*
|
||||
* @param string $scope
|
||||
* @param string $fieldName
|
||||
|
||||
@@ -28,28 +28,21 @@
|
||||
************************************************************************/
|
||||
|
||||
namespace Espo\Core\Utils\Log\Monolog;
|
||||
|
||||
class Logger extends \Monolog\Logger
|
||||
{
|
||||
protected $defaultLevelName = 'DEBUG';
|
||||
|
||||
|
||||
/**
|
||||
* Get Level Code
|
||||
* @param string $level Ex. DEBUG, ...
|
||||
* @return int
|
||||
*/
|
||||
public function getLevelCode($levelName)
|
||||
public function setLevel($levelName)
|
||||
{
|
||||
$levelName = strtoupper($levelName);
|
||||
$level = static::toMonologLevel($levelName);
|
||||
|
||||
$levels = $this->getLevels();
|
||||
|
||||
if (isset($levels[$levelName])) {
|
||||
return $levels[$levelName];
|
||||
$handlers = $this->getHandlers();
|
||||
foreach ($handlers as $handler) {
|
||||
if ($handler->getLevel() > $level) {
|
||||
$className = get_class($handler);
|
||||
$handler->setLevel($level);
|
||||
}
|
||||
}
|
||||
|
||||
return $levels[$this->defaultLevelName];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,11 +41,16 @@ class Helper
|
||||
*/
|
||||
protected $copiedDefParams = array(
|
||||
'readOnly',
|
||||
'disabled',
|
||||
'notStorable',
|
||||
'layoutListDisabled',
|
||||
'layoutDetailDisabled',
|
||||
'layoutMassUpdateDisabled',
|
||||
'layoutFiltersDisabled',
|
||||
'directAccessDisabled',
|
||||
'customizationDisabled',
|
||||
'importDisabled',
|
||||
'exportDisabled',
|
||||
);
|
||||
|
||||
public function __construct(\Espo\Core\Utils\Metadata $metadata)
|
||||
@@ -59,9 +64,9 @@ class Helper
|
||||
}
|
||||
|
||||
/**
|
||||
* Get field defenition by type in metadata, "fields" key
|
||||
* Get field definition by type in metadata, "fields" key
|
||||
*
|
||||
* @param array | string $fieldDef - It can be a string or field defenition from entityDefs
|
||||
* @param array | string $fieldDef - It can be a string or field definition from entityDefs
|
||||
* @return array | null
|
||||
*/
|
||||
public function getFieldDefsByType($fieldDef)
|
||||
|
||||
@@ -52,8 +52,6 @@ class ThemeManager
|
||||
|
||||
public function getStylesheet()
|
||||
{
|
||||
return $this->metadata->get('themes.' . $this->getName() . '.stylesheet', 'client/css/espo.css');
|
||||
return $this->metadata->get(['themes', $this->getName(), 'stylesheet'], 'client/css/espo/espo.css');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -80,9 +80,10 @@ class Pusher implements WampServerInterface
|
||||
if ($checkCommand) {
|
||||
$checkResult = shell_exec($checkCommand);
|
||||
if ($checkResult !== 'true') {
|
||||
if ($this->isDebugMode) $this->log("check access failed for topic {$topicId} for user {$userId}");
|
||||
if ($this->isDebugMode) $this->log("{$connectionId}: check access failed for topic {$topicId} for user {$userId}");
|
||||
return;
|
||||
}
|
||||
if ($this->isDebugMode) $this->log("{$connectionId}: check access succeed for topic {$topicId} for user {$userId}");
|
||||
}
|
||||
|
||||
if (!in_array($topicId, $this->connectionIdTopicIdListMap[$connectionId])) {
|
||||
@@ -110,20 +111,37 @@ class Pusher implements WampServerInterface
|
||||
if ($index !== false) {
|
||||
if ($this->isDebugMode) $this->log("{$connectionId}: remove topic {$topicId} for user {$userId}");
|
||||
unset($this->connectionIdTopicIdListMap[$connectionId][$index]);
|
||||
$this->connectionIdTopicIdListMap[$connectionId][$index] = array_values($this->connectionIdTopicIdListMap[$connectionId][$index]);
|
||||
$this->connectionIdTopicIdListMap[$connectionId] = array_values($this->connectionIdTopicIdListMap[$connectionId]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected function getCategoryData(string $topicId) : array
|
||||
{
|
||||
$arr = explode('.', $topicId);
|
||||
$category = $arr[0];
|
||||
|
||||
if (array_key_exists($category, $this->categoriesData)) {
|
||||
$data = $this->categoriesData[$category];
|
||||
} else if (array_key_exists($topicId, $this->categoriesData)) {
|
||||
$data = $this->categoriesData[$topicId];
|
||||
} else {
|
||||
$data = [];
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
protected function getParamsFromTopicId(string $topicId) : array
|
||||
{
|
||||
$arr = explode('.', $topicId);
|
||||
$category = $arr[0];
|
||||
|
||||
$data = $this->getCategoryData($topicId);
|
||||
|
||||
$params = [];
|
||||
|
||||
if (array_key_exists('paramList', $this->categoriesData[$category])) {
|
||||
foreach ($this->categoriesData[$category]['paramList'] as $i => $item) {
|
||||
if (array_key_exists('paramList', $data)) {
|
||||
foreach ($data['paramList'] as $i => $item) {
|
||||
if (isset($arr[$i + 1])) {
|
||||
$params[$item] = $arr[$i + 1];
|
||||
} else {
|
||||
@@ -146,10 +164,12 @@ class Pusher implements WampServerInterface
|
||||
return null;
|
||||
}
|
||||
|
||||
$category = $this->getTopicCategory($topic);
|
||||
if (!array_key_exists('accessCheckCommand', $this->categoriesData[$category])) return null;
|
||||
$data = $this->getCategoryData($topic->getId());
|
||||
|
||||
if (!array_key_exists('accessCheckCommand', $data)) return null;
|
||||
|
||||
$command = $this->phpExecutablePath . " command.php " . $data['accessCheckCommand'];
|
||||
|
||||
$command = $this->phpExecutablePath . " command.php " . $this->categoriesData[$category]['accessCheckCommand'];
|
||||
foreach ($params as $key => $value) {
|
||||
$command = str_replace(':' . $key, $value, $command);
|
||||
}
|
||||
|
||||
@@ -101,6 +101,7 @@ return [
|
||||
'portalUserLimit',
|
||||
'stylesheet',
|
||||
'userItems',
|
||||
'globalItems',
|
||||
'internalSmtpServer',
|
||||
'internalSmtpPort',
|
||||
'internalSmtpAuth',
|
||||
@@ -193,6 +194,11 @@ return [
|
||||
'adminNotificationsNewExtensionVersion',
|
||||
'leadCaptureAllowOrigin',
|
||||
'cronDisabled',
|
||||
'defaultPortalId',
|
||||
'cleanupDeletedRecords',
|
||||
'authTokenPreventConcurrent',
|
||||
'emailParser',
|
||||
'latestVersion',
|
||||
],
|
||||
'superAdminItems' => [
|
||||
'jobMaxPortion',
|
||||
@@ -215,10 +221,30 @@ return [
|
||||
'superAdminSystemItems' => [
|
||||
],
|
||||
'userItems' => [
|
||||
'outboundEmailFromAddress',
|
||||
'outboundEmailFromName',
|
||||
'outboundEmailBccAddress',
|
||||
'integrations',
|
||||
|
||||
],
|
||||
'globalItems' => [
|
||||
'cacheTimestamp',
|
||||
'language',
|
||||
'isDeveloperMode',
|
||||
'dateFormat',
|
||||
'timeFormat',
|
||||
'timeZone',
|
||||
'decimalMark',
|
||||
'weekStart',
|
||||
'thousandSeparator',
|
||||
'companyLogoId',
|
||||
'applicationName',
|
||||
'jsLibs',
|
||||
'maintenanceMode',
|
||||
'siteUrl',
|
||||
'useCache',
|
||||
'useCacheInDeveloperMode',
|
||||
'isDeveloperMode',
|
||||
'version',
|
||||
'useWebSocket',
|
||||
'webSocketUrl',
|
||||
'aclAllowDeleteCreated',
|
||||
],
|
||||
'isInstalled' => false,
|
||||
'ldapUserNameAttribute' => 'sAMAccountName',
|
||||
|
||||
@@ -87,6 +87,17 @@ class Stream extends \Espo\Core\Hooks\Base
|
||||
if ($this->checkHasStream($entity)) {
|
||||
$this->getStreamService()->unfollowAllUsersFromEntity($entity);
|
||||
}
|
||||
|
||||
$query = $this->getEntityManager()->getQuery();
|
||||
$sql = "
|
||||
UPDATE `note`
|
||||
SET `deleted` = 1, `modified_at` = '".date('Y-m-d H:i:s')."'
|
||||
WHERE
|
||||
(
|
||||
(related_id = ".$query->quote($entity->id)." AND related_type = ".$query->quote($entity->getEntityType()) .")
|
||||
)
|
||||
";
|
||||
$this->getEntityManager()->getPDO()->query($sql);
|
||||
}
|
||||
|
||||
protected function handleCreateRelated(Entity $entity)
|
||||
|
||||
@@ -205,25 +205,25 @@ class Cleanup extends \Espo\Core\Jobs\Base
|
||||
}
|
||||
|
||||
if ($this->getConfig()->get('cleanupOrphanAttachments')) {
|
||||
$collection = $this->getEntityManager()->getRepository('Attachment')->where(array(
|
||||
array(
|
||||
'role' => 'Attachment'
|
||||
),
|
||||
'OR' => array(
|
||||
array(
|
||||
$collection = $this->getEntityManager()->getRepository('Attachment')->where([
|
||||
[
|
||||
'role' => 'Attachment',
|
||||
],
|
||||
'OR' => [
|
||||
[
|
||||
'parentId' => null,
|
||||
'parentType!=' => null,
|
||||
'relatedType=' => null
|
||||
),
|
||||
array(
|
||||
'relatedType=' => null,
|
||||
],
|
||||
[
|
||||
'parentType' => null,
|
||||
'relatedId' => null,
|
||||
'relatedType!=' => null
|
||||
)
|
||||
),
|
||||
'relatedType!=' => null,
|
||||
]
|
||||
],
|
||||
'createdAt<' => $datetime->format('Y-m-d H:i:s'),
|
||||
'createdAt>' => '2017-05-10 00:00:00'
|
||||
))->limit(0, 5000)->find();
|
||||
'createdAt>' => '2018-01-01 00:00:00',
|
||||
])->limit(0, 5000)->find();
|
||||
|
||||
foreach ($collection as $e) {
|
||||
$this->getEntityManager()->removeEntity($e);
|
||||
@@ -428,13 +428,12 @@ class Cleanup extends \Espo\Core\Jobs\Base
|
||||
{
|
||||
if (!$this->getConfig()->get('cleanupDeletedRecords')) return;
|
||||
$period = '-' . $this->getConfig()->get('cleanupDeletedRecordsPeriod', $this->cleanupDeletedRecordsPeriod);
|
||||
$datetime = new \DateTime('-' . $period);
|
||||
$datetime = new \DateTime($period);
|
||||
|
||||
$scopeList = array_keys($this->getMetadata()->get(['scopes']));
|
||||
foreach ($scopeList as $scope) {
|
||||
if (!$this->getMetadata()->get(['scopes', $scope, 'entity'])) continue;
|
||||
if ($scope === 'Attachment') continue;
|
||||
if (!$this->getMetadata()->get(['entityDefs', $scope, 'fields', 'modifiedAt'])) continue;
|
||||
|
||||
if (!$this->getEntityManager()->hasRepository($scope)) continue;
|
||||
$repository = $this->getEntityManager()->getRepository($scope);
|
||||
@@ -444,10 +443,17 @@ class Cleanup extends \Espo\Core\Jobs\Base
|
||||
if (!method_exists($repository, 'select')) continue;
|
||||
if (!method_exists($repository, 'deleteFromDb')) continue;
|
||||
|
||||
$deletedEntityList = $repository->select(['id', 'deleted'])->where([
|
||||
$whereClause = [
|
||||
'deleted' => 1,
|
||||
'modifiedAt<' => $datetime->format('Y-m-d H:i:s')
|
||||
])->find(['withDeleted' => true]);
|
||||
];
|
||||
|
||||
if ($this->getMetadata()->get(['entityDefs', $scope, 'fields', 'modifiedAt'])) {
|
||||
$whereClause['modifiedAt<'] = $datetime->format('Y-m-d H:i:s');
|
||||
} else if ($this->getMetadata()->get(['entityDefs', $scope, 'fields', 'createdAt'])) {
|
||||
$whereClause['createdAt<'] = $datetime->format('Y-m-d H:i:s');
|
||||
}
|
||||
|
||||
$deletedEntityList = $repository->select(['id', 'deleted'])->where($whereClause)->find(['withDeleted' => true]);
|
||||
foreach ($deletedEntityList as $e) {
|
||||
$this->cleanupDeletedEntity($e);
|
||||
}
|
||||
|
||||
@@ -88,12 +88,12 @@ class SubscribeAgain extends \Espo\Core\EntryPoints\Base
|
||||
}
|
||||
|
||||
$link = null;
|
||||
$m = array(
|
||||
$m = [
|
||||
'Account' => 'accounts',
|
||||
'Contact' => 'contacts',
|
||||
'Lead' => 'leads',
|
||||
'User' => 'users'
|
||||
);
|
||||
];
|
||||
if (!empty($m[$target->getEntityType()])) {
|
||||
$link = $m[$target->getEntityType()];
|
||||
}
|
||||
@@ -115,7 +115,11 @@ class SubscribeAgain extends \Espo\Core\EntryPoints\Base
|
||||
}
|
||||
|
||||
$data = [
|
||||
'queueItemId' => $queueItemId
|
||||
'actionData' => [
|
||||
'queueItemId' => $queueItemId,
|
||||
],
|
||||
'view' => $this->getMetadata()->get(['clientDefs', 'Campaign', 'subscribeView']),
|
||||
'template' => $this->getMetadata()->get(['clientDefs', 'Campaign', 'subscribeTemplate']),
|
||||
];
|
||||
|
||||
$runScript = "
|
||||
|
||||
@@ -88,12 +88,12 @@ class Unsubscribe extends \Espo\Core\EntryPoints\Base
|
||||
}
|
||||
|
||||
$link = null;
|
||||
$m = array(
|
||||
$m = [
|
||||
'Account' => 'accounts',
|
||||
'Contact' => 'contacts',
|
||||
'Lead' => 'leads',
|
||||
'User' => 'users'
|
||||
);
|
||||
];
|
||||
if (!empty($m[$target->getEntityType()])) {
|
||||
$link = $m[$target->getEntityType()];
|
||||
}
|
||||
@@ -115,7 +115,11 @@ class Unsubscribe extends \Espo\Core\EntryPoints\Base
|
||||
}
|
||||
|
||||
$data = [
|
||||
'queueItemId' => $queueItemId
|
||||
'actionData' => [
|
||||
'queueItemId' => $queueItemId,
|
||||
],
|
||||
'view' => $this->getMetadata()->get(['clientDefs', 'Campaign', 'unsubscribeView']),
|
||||
'template' => $this->getMetadata()->get(['clientDefs', 'Campaign', 'unsubscribeTemplate']),
|
||||
];
|
||||
|
||||
$runScript = "
|
||||
@@ -137,4 +141,3 @@ class Unsubscribe extends \Espo\Core\EntryPoints\Base
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -38,7 +38,9 @@ class Opportunity extends \Espo\Core\ORM\Repositories\RDB
|
||||
if ($entity->isNew()) {
|
||||
if (!$entity->has('probability') && $entity->get('stage')) {
|
||||
$probability = $this->getMetadata()->get('entityDefs.Opportunity.fields.stage.probabilityMap.' . $entity->get('stage'), 0);
|
||||
$entity->set('probability', $probability);
|
||||
if (!is_null($probability)) {
|
||||
$entity->set('probability', $probability);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,5 +3,9 @@
|
||||
"detailConvert": "Convertir Referencia",
|
||||
"listForAccount": "Listado (por Cuentas)",
|
||||
"listForContact": "Lista (para Contactos)"
|
||||
},
|
||||
"templates": {
|
||||
"invitation": "Invitación",
|
||||
"reminder": "Recordatorio"
|
||||
}
|
||||
}
|
||||
@@ -24,7 +24,8 @@
|
||||
"leadsTemplate": "Formato de Referencias",
|
||||
"accountsTemplate": "Formato de Cuentas",
|
||||
"usersTemplate": "Formato de Usuarios",
|
||||
"mailMergeOnlyWithAddress": "Saltar registros sin dirección capturada"
|
||||
"mailMergeOnlyWithAddress": "Saltar registros sin dirección capturada",
|
||||
"optedInCount": "Opt-In aceptado"
|
||||
},
|
||||
"links": {
|
||||
"targetLists": "Listas de Intereses",
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
"Opted Out": "Rechazado",
|
||||
"Bounced": "Rebotados",
|
||||
"Clicked": "Leído",
|
||||
"Lead Created": "Referencias Creadas"
|
||||
"Lead Created": "Referencias Creadas",
|
||||
"Opted In": "Opt-In aceptado"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
@@ -37,6 +38,7 @@
|
||||
"optedOut": "Rechazado",
|
||||
"bounced": "Rebotados",
|
||||
"clicked": "Leído",
|
||||
"leadCreated": "Referencia Creada"
|
||||
"leadCreated": "Referencia Creada",
|
||||
"optedIn": "Opt-In aceptado"
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,6 @@
|
||||
"fields": {
|
||||
"name": "Nombre",
|
||||
"emailAddress": "Correo electrónico",
|
||||
"title": "Título",
|
||||
"accountRole": "Título",
|
||||
"account": "Cuenta",
|
||||
"accounts": "Cuentas",
|
||||
@@ -20,7 +19,8 @@
|
||||
"acceptanceStatus": "Estatus de Aprobación",
|
||||
"accountIsInactive": "Cuenta Inactiva",
|
||||
"acceptanceStatusMeetings": "Estatus de Aceptación (Presentaciones)",
|
||||
"acceptanceStatusCalls": "Estátus de Aceptación (Llamadas)"
|
||||
"acceptanceStatusCalls": "Estátus de Aceptación (Llamadas)",
|
||||
"title": "Título de la Cuenta Primaria"
|
||||
},
|
||||
"links": {
|
||||
"opportunities": "Oportunidades",
|
||||
@@ -41,7 +41,6 @@
|
||||
},
|
||||
"options": {
|
||||
"opportunityRole": {
|
||||
"": "",
|
||||
"Decision Maker": "Tomador de Desiciones",
|
||||
"Evaluator": "Evaluador",
|
||||
"Influencer": "Factor de Influencia"
|
||||
|
||||
@@ -12,7 +12,8 @@
|
||||
"leads": "Referencias",
|
||||
"reminders": "Recordatorios",
|
||||
"account": "Cuenta",
|
||||
"acceptanceStatus": "Estátus de aprobación"
|
||||
"acceptanceStatus": "Estátus de aprobación",
|
||||
"Acceptance": "Aceptación"
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"layouts": {
|
||||
"detailConvert": "Pretvori izvor",
|
||||
"listForAccount": "Lista (za Tvrtke)"
|
||||
"listForAccount": "Lista (za Tvrtke)",
|
||||
"listForContact": "Lista (za Kontakte)"
|
||||
}
|
||||
}
|
||||
@@ -15,7 +15,12 @@
|
||||
"revenue": "Prihod",
|
||||
"revenueConverted": "Prihod (konvertiran)",
|
||||
"budget": "Budžet",
|
||||
"budgetConverted": "Budžet (konvertiran)"
|
||||
"budgetConverted": "Budžet (konvertiran)",
|
||||
"contactsTemplate": "Template Kontakata",
|
||||
"leadsTemplate": "Template Prilika",
|
||||
"accountsTemplate": "Template Klijenata",
|
||||
"usersTemplate": "Template Korisnika",
|
||||
"mailMergeOnlyWithAddress": "Preskoči zapise bez popunjene adrese"
|
||||
},
|
||||
"links": {
|
||||
"targetLists": "Liste meta",
|
||||
@@ -26,7 +31,11 @@
|
||||
"opportunities": "Prilike",
|
||||
"campaignLogRecords": "Dnevnik",
|
||||
"massEmails": "Masovna e-pošta",
|
||||
"trackingUrls": "Praćenje URL-ova"
|
||||
"trackingUrls": "Praćenje URL-ova",
|
||||
"contactsTemplate": "Template Kontakata",
|
||||
"leadsTemplate": "Template Prilika",
|
||||
"accountsTemplate": "Template Klijenata",
|
||||
"usersTemplate": "Template Korisnika"
|
||||
},
|
||||
"options": {
|
||||
"type": {
|
||||
@@ -52,7 +61,8 @@
|
||||
"Email Templates": "Šablone e-pošte",
|
||||
"Unsubscribe again": "Ponovo se odjavite",
|
||||
"Subscribe again": "Ponovo se prijavite",
|
||||
"Create Target List": "Napravite listu meta"
|
||||
"Create Target List": "Napravite listu meta",
|
||||
"Generate Mail Merge PDF": "Generiranje Mail Merge PDF-a"
|
||||
},
|
||||
"presetFilters": {
|
||||
"active": "Aktivne"
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
"fields": {
|
||||
"name": "Ime",
|
||||
"emailAddress": "E-mail",
|
||||
"title": "Naslov",
|
||||
"accountRole": "Naslov",
|
||||
"account": "Tvrtka",
|
||||
"accounts": "Tvrtke",
|
||||
@@ -41,7 +40,6 @@
|
||||
},
|
||||
"options": {
|
||||
"opportunityRole": {
|
||||
"": "Nema",
|
||||
"Decision Maker": "Donositelj odluka",
|
||||
"Influencer": "Utjecajna osoba"
|
||||
}
|
||||
|
||||
@@ -1 +1,5 @@
|
||||
{}
|
||||
{
|
||||
"fields": {
|
||||
"futureDays": "Slijedećih X Dana"
|
||||
}
|
||||
}
|
||||
@@ -3,5 +3,8 @@
|
||||
"detailConvert": "Converti Lead",
|
||||
"listForAccount": "Elenco (per Account)",
|
||||
"listForContact": "Lista (per contatto)"
|
||||
},
|
||||
"templates": {
|
||||
"reminder": "Promemoria"
|
||||
}
|
||||
}
|
||||
@@ -24,7 +24,7 @@
|
||||
"Inbound": "in Ingresso"
|
||||
},
|
||||
"acceptanceStatus": {
|
||||
"None": "Nessun",
|
||||
"None": "Nessuno",
|
||||
"Accepted": "Accettato",
|
||||
"Declined": "Rifiutato",
|
||||
"Tentative": "Provvisorio"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"fields": {
|
||||
"action": "Azione",
|
||||
"actionDate": "Data",
|
||||
"campaign": "Campagnia",
|
||||
"campaign": "Campagna",
|
||||
"object": "Oggetto",
|
||||
"application": "Applicazione"
|
||||
},
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"fields": {
|
||||
"urlToUse": "Codice da inserire al posto dell' URL",
|
||||
"campaign": "Campagnia"
|
||||
"campaign": "Campagna"
|
||||
},
|
||||
"links": {
|
||||
"campaign": "Campagnia"
|
||||
"campaign": "Campagna"
|
||||
},
|
||||
"labels": {
|
||||
"Create CampaignTrackingUrl": "Creazione URL di monitoraggio"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"phoneNumber": "Telefono",
|
||||
"accountType": "Tipo di Account",
|
||||
"doNotCall": "Non chiamare",
|
||||
"address": "Indirizzi",
|
||||
"address": "Indirizzo",
|
||||
"description": "Descrizione",
|
||||
"targetLists": "Liste di destinazione",
|
||||
"targetList": "Lista di destinazione",
|
||||
@@ -33,7 +33,6 @@
|
||||
},
|
||||
"options": {
|
||||
"opportunityRole": {
|
||||
"": "--Nessun--",
|
||||
"Decision Maker": "Responsabile",
|
||||
"Evaluator": "Valutatore"
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
"Canceled": "Cancellato"
|
||||
},
|
||||
"type": {
|
||||
"": "Nessun",
|
||||
"": "Nessuno",
|
||||
"Contract": "Contratto",
|
||||
"License Agreement": "Contratto di licenza"
|
||||
}
|
||||
|
||||
@@ -21,11 +21,12 @@
|
||||
"Call": "Chiamata",
|
||||
"Task": "Compito",
|
||||
"Case": "Casi",
|
||||
"Document": "Documenti",
|
||||
"DocumentFolder": "Cartella Documenti",
|
||||
"Campaign": "Campagna",
|
||||
"TargetList": "Lista di destinazione",
|
||||
"MassEmail": "Email Massima",
|
||||
"Activities": "Attivià",
|
||||
"Activities": "Attività",
|
||||
"KnowledgeBaseArticle": "Consocenza di Base degli Aticolo ",
|
||||
"KnowledgeBaseCategory": "Consocenza di Basec della Categoria "
|
||||
},
|
||||
@@ -43,7 +44,7 @@
|
||||
"Campaign": "Campagna",
|
||||
"TargetList": "Liste di destinazione",
|
||||
"MassEmail": "Email Massive",
|
||||
"Activities": "Attivià",
|
||||
"Activities": "Attività",
|
||||
"KnowledgeBaseArticle": "Conoscenza di Base",
|
||||
"KnowledgeBaseCategory": "Conoscenza di Base Categorie"
|
||||
},
|
||||
@@ -58,11 +59,11 @@
|
||||
"OpportunitiesByStage": "Opportunità di stage",
|
||||
"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à",
|
||||
"Activities": "Attività",
|
||||
"Attendees": "Partecipanti",
|
||||
"Schedule Meeting": "Pianifica Riunione",
|
||||
"Schedule Call": "Pianifica chiamata",
|
||||
|
||||
@@ -12,13 +12,13 @@
|
||||
"phoneNumber": "Telefono",
|
||||
"accountName": "Nome utente",
|
||||
"doNotCall": "Non chiamare",
|
||||
"address": "Indirizzi",
|
||||
"address": "Indirizzo",
|
||||
"status": "Stato",
|
||||
"source": "Provenienza",
|
||||
"description": "Descrizione",
|
||||
"createdContact": "Contatti",
|
||||
"createdOpportunity": "Opportunità",
|
||||
"campaign": "Campagnia",
|
||||
"campaign": "Campagna",
|
||||
"targetLists": "Liste di destinazione",
|
||||
"targetList": "Lista di destinazione",
|
||||
"industry": "Settore",
|
||||
@@ -46,7 +46,7 @@
|
||||
"Dead": "Fuori uso"
|
||||
},
|
||||
"source": {
|
||||
"": "Nessun",
|
||||
"": "Nessuno",
|
||||
"Call": "Chiamata",
|
||||
"Existing Customer": "Cliente esistente",
|
||||
"Public Relations": "Pubbliche Relazioni",
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"Not Held": "Non trattenuto"
|
||||
},
|
||||
"acceptanceStatus": {
|
||||
"None": "Nessun",
|
||||
"None": "Nessuno",
|
||||
"Accepted": "Accettato",
|
||||
"Declined": "Declinato",
|
||||
"Tentative": "Tentativo"
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
},
|
||||
"links": {
|
||||
"contacts": "Contatti",
|
||||
"documents": "Documentsi",
|
||||
"documents": "Documenti",
|
||||
"campaign": "Campagna"
|
||||
},
|
||||
"options": {
|
||||
|
||||
@@ -1,76 +1,66 @@
|
||||
{
|
||||
"fields": {
|
||||
"name": "Record Naam",
|
||||
"emailAddress": "E-mail",
|
||||
"website": "Website",
|
||||
"phoneNumber": "Telefoon",
|
||||
"billingAddress": "Factuur Adres",
|
||||
"shippingAddress": "Verzend Adres",
|
||||
"description": "Beschrijving",
|
||||
"sicCode": "Sic Code",
|
||||
"industry": "Industrie",
|
||||
"type": "Type",
|
||||
"contactRole": "Titel",
|
||||
"campaign": "Campaign"
|
||||
"fields": {
|
||||
"name": "Record Naam",
|
||||
"emailAddress": "E-mail",
|
||||
"phoneNumber": "Telefoon",
|
||||
"billingAddress": "Factuur Adres",
|
||||
"shippingAddress": "Verzend Adres",
|
||||
"description": "Beschrijving",
|
||||
"industry": "Industrie",
|
||||
"contactRole": "Titel",
|
||||
"targetLists": "Doellijsten",
|
||||
"targetList": "Doellijst",
|
||||
"originalLead": "Oorspronkelijke lead",
|
||||
"contactIsInactive": "Inactief"
|
||||
},
|
||||
"links": {
|
||||
"contacts": "Contacten",
|
||||
"opportunities": "Kansen",
|
||||
"cases": "Casus",
|
||||
"documents": "Documenten",
|
||||
"targetLists": "Doellijsten",
|
||||
"portalUsers": "Portal-gebruikers",
|
||||
"originalLead": "Oorspronkelijke lead"
|
||||
},
|
||||
"options": {
|
||||
"type": {
|
||||
"Customer": "Klant",
|
||||
"Investor": "Investeerder"
|
||||
},
|
||||
"links": {
|
||||
"contacts": "Contacten",
|
||||
"opportunities": "Kansen",
|
||||
"cases": "Casus",
|
||||
"documents": "Documenten",
|
||||
"meetingsPrimary": "Meetings (expanded)",
|
||||
"callsPrimary": "Calls (expanded)",
|
||||
"tasksPrimary": "Tasks (expanded)",
|
||||
"emailsPrimary": "Emails (expanded)",
|
||||
"targetLists": "Doellijsten",
|
||||
"campaignLogRecords": "Campaign Log",
|
||||
"campaign": "Campaign"
|
||||
},
|
||||
"options": {
|
||||
"type": {
|
||||
"Customer": "Klant",
|
||||
"Investor": "Investeerder",
|
||||
"Partner": "Partner",
|
||||
"Reseller": "Reseller"
|
||||
},
|
||||
"industry": {
|
||||
"Agriculture": "Agriculture",
|
||||
"Advertising": "Advertising",
|
||||
"Apparel & Accessories": "Apparel & Accessories",
|
||||
"Automotive": "Automotive",
|
||||
"Banking": "Bankwezen",
|
||||
"Biotechnology": "Biotechnology",
|
||||
"Chemical": "Chemical",
|
||||
"Computer": "Computer",
|
||||
"Education": "Onderwijs",
|
||||
"Electronics": "Electronica",
|
||||
"Energy": "Energy",
|
||||
"Entertainment & Leisure": "Entertainment & Leisure",
|
||||
"Finance": "Finance",
|
||||
"Food & Beverage": "Food & Beverage",
|
||||
"Grocery": "Grocery",
|
||||
"Healthcare": "Healthcare",
|
||||
"Insurance": "Verzekeringen",
|
||||
"Legal": "Legal",
|
||||
"Manufacturing": "Manufacturing",
|
||||
"Publishing": "Publishing",
|
||||
"Real Estate": "Real Estate",
|
||||
"Service": "Service",
|
||||
"Sports": "Sports",
|
||||
"Software": "Software",
|
||||
"Technology": "Technology",
|
||||
"Telecommunications": "Telecommunications",
|
||||
"Television": "Television",
|
||||
"Transportation": "Transportation",
|
||||
"Venture Capital": "Venture Capital"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"Create Account": "Klant Aanmaken",
|
||||
"Copy Billing": "Kopieer van Factuur"
|
||||
},
|
||||
"presetFilters": {
|
||||
"customers": "Customers",
|
||||
"partners": "Partners"
|
||||
"industry": {
|
||||
"Banking": "Bankwezen",
|
||||
"Building Materials & Equipment": "Bouwmaterialen en -apparatuur",
|
||||
"Education": "Onderwijs",
|
||||
"Electronics": "Electronica",
|
||||
"Insurance": "Verzekeringen",
|
||||
"Aerospace": "ruimte",
|
||||
"Architecture": "Architectuur",
|
||||
"Construction": "Bouw",
|
||||
"Defense": "Verdediging",
|
||||
"Creative": "Creatief",
|
||||
"Culture": "Cultuur",
|
||||
"Consulting": "Overleg plegen",
|
||||
"Electric Power": "Elektrische energie",
|
||||
"Hospitality": "Gastvrijheid",
|
||||
"Mass Media": "Massa media",
|
||||
"Mining": "Mijnbouw",
|
||||
"Music": "Muziek",
|
||||
"Petroleum": "petroleum",
|
||||
"Retail": "Kleinhandel",
|
||||
"Shipping": "Verzenden",
|
||||
"Support": "Ondersteuning",
|
||||
"Testing, Inspection & Certification": "Testen, inspectie en certificering",
|
||||
"Wholesale": "Groothandel",
|
||||
"Travel": "Reizen"
|
||||
}
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"Create Account": "Klant Aanmaken",
|
||||
"Copy Billing": "Kopieer van Factuur",
|
||||
"Set Primary": "Primair instellen"
|
||||
},
|
||||
"presetFilters": {
|
||||
"customers": "Klanten",
|
||||
"recentlyCreated": "Recent gemaakt"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,10 @@
|
||||
{
|
||||
"layouts": {
|
||||
"detailConvert": "Omzetten Lead",
|
||||
"listForAccount": "List (for Account)"
|
||||
}
|
||||
}
|
||||
"layouts": {
|
||||
"detailConvert": "Omzetten Lead",
|
||||
"listForContact": "Lijst (voor contact)"
|
||||
},
|
||||
"templates": {
|
||||
"invitation": "Uitnodiging",
|
||||
"reminder": "Herinnering"
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,19 @@
|
||||
{
|
||||
"modes": {
|
||||
"month": "Month",
|
||||
"week": "Week",
|
||||
"day": "Dag",
|
||||
"agendaWeek": "Week",
|
||||
"agendaDay": "Dag"
|
||||
},
|
||||
"labels": {
|
||||
"Today": "Vandaag",
|
||||
"Create": "Aanmaken"
|
||||
}
|
||||
}
|
||||
"modes": {
|
||||
"day": "Dag",
|
||||
"agendaDay": "Dag",
|
||||
"timeline": "Tijdlijn"
|
||||
},
|
||||
"labels": {
|
||||
"Today": "Vandaag",
|
||||
"Create": "Aanmaken",
|
||||
"Shared": "gedeeld",
|
||||
"Add User": "Voeg gebruiker toe",
|
||||
"current": "actueel",
|
||||
"time": "tijd",
|
||||
"User List": "gebruikers lijst",
|
||||
"Manage Users": "Gebruikers beheren",
|
||||
"View Calendar": "Bekijk Agenda",
|
||||
"Create Shared View": "Maak gedeelde weergave"
|
||||
}
|
||||
}
|
||||
@@ -1,51 +1,40 @@
|
||||
{
|
||||
"fields": {
|
||||
"name": "Record Naam",
|
||||
"parent": "Behorende bij",
|
||||
"status": "Status",
|
||||
"dateStart": "Start Datum",
|
||||
"dateEnd": "Eind Datum",
|
||||
"direction": "Richting",
|
||||
"duration": "Duur",
|
||||
"description": "Beschrijving",
|
||||
"users": "Gebruikers",
|
||||
"contacts": "Contacten",
|
||||
"leads": "Leads",
|
||||
"reminders": "Herineringen",
|
||||
"account": "Account"
|
||||
"fields": {
|
||||
"name": "Record Naam",
|
||||
"parent": "Behorende bij",
|
||||
"dateStart": "Start Datum",
|
||||
"dateEnd": "Eind Datum",
|
||||
"direction": "Richting",
|
||||
"duration": "Duur",
|
||||
"description": "Beschrijving",
|
||||
"users": "Gebruikers",
|
||||
"contacts": "Contacten",
|
||||
"reminders": "Herineringen",
|
||||
"acceptanceStatus": "Acceptatiestatus"
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
"Planned": "Gepland",
|
||||
"Held": "Vastgehouden",
|
||||
"Not Held": "Niet vastgehouden"
|
||||
},
|
||||
"links": {
|
||||
"direction": {
|
||||
"Outbound": "Uitgaande",
|
||||
"Inbound": "Binnenkomende"
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
"Planned": "Gepland",
|
||||
"Held": "Vasthouden",
|
||||
"Not Held": "Niet Vasthouden"
|
||||
},
|
||||
"direction": {
|
||||
"Outbound": "Uitgaande",
|
||||
"Inbound": "Binnenkomende"
|
||||
},
|
||||
"acceptanceStatus": {
|
||||
"None": "None",
|
||||
"Accepted": "Geaccepteerd",
|
||||
"Declined": "Geweigerd",
|
||||
"Tentative": "Tentative"
|
||||
}
|
||||
},
|
||||
"massActions": {
|
||||
"setHeld": "Set Held",
|
||||
"setNotHeld": "Set Not Held"
|
||||
},
|
||||
"labels": {
|
||||
"Create Call": "Tel. Gesprek Aanmaken",
|
||||
"Set Held": "Set Held",
|
||||
"Set Not Held": "Set Not Held",
|
||||
"Send Invitations": "Uitnodiging versturen"
|
||||
},
|
||||
"presetFilters": {
|
||||
"planned": "Gepland",
|
||||
"held": "Vasthouden",
|
||||
"todays": "Huidig"
|
||||
"acceptanceStatus": {
|
||||
"None": "Geen",
|
||||
"Accepted": "Geaccepteerd",
|
||||
"Declined": "Geweigerd"
|
||||
}
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"Create Call": "Tel. Gesprek Aanmaken",
|
||||
"Send Invitations": "Uitnodiging versturen"
|
||||
},
|
||||
"presetFilters": {
|
||||
"planned": "Gepland",
|
||||
"held": "Vasthouden",
|
||||
"todays": "Huidig"
|
||||
}
|
||||
}
|
||||
@@ -1,64 +1,56 @@
|
||||
{
|
||||
"fields": {
|
||||
"name": "Record Naam",
|
||||
"description": "Beschrijving",
|
||||
"status": "Status",
|
||||
"type": "Type",
|
||||
"startDate": "Start Date",
|
||||
"endDate": "End Date",
|
||||
"targetLists": "Doellijsten",
|
||||
"excludingTargetLists": "Excluding Target Lists",
|
||||
"sentCount": "Verstuur",
|
||||
"openedCount": "Opened",
|
||||
"clickedCount": "Clicked",
|
||||
"optedOutCount": "Opted Out",
|
||||
"bouncedCount": "Bounced",
|
||||
"hardBouncedCount": "Hard Bounced",
|
||||
"softBouncedCount": "Soft Bounced",
|
||||
"leadCreatedCount": "Leads Created",
|
||||
"revenue": "Revenue",
|
||||
"revenueConverted": "revenue (converted)",
|
||||
"budget": "Budget"
|
||||
"fields": {
|
||||
"name": "Record Naam",
|
||||
"description": "Beschrijving",
|
||||
"targetLists": "Doellijsten",
|
||||
"sentCount": "Verstuur",
|
||||
"revenueConverted": "revenue (converted)",
|
||||
"budgetConverted": "Budget (omgezet)",
|
||||
"contactsTemplate": "Contacten-sjabloon",
|
||||
"leadsTemplate": "Leads sjabloon",
|
||||
"accountsTemplate": "Accounts-sjabloon",
|
||||
"usersTemplate": "Gebruikers sjabloon",
|
||||
"mailMergeOnlyWithAddress": "Records overslaan zonder ingevuld adres",
|
||||
"budgetCurrency": "Budgetvaluta"
|
||||
},
|
||||
"links": {
|
||||
"targetLists": "Doellijsten",
|
||||
"accounts": "Klanten",
|
||||
"contacts": "Contacten",
|
||||
"opportunities": "Kansen",
|
||||
"contactsTemplate": "Contacten-sjabloon",
|
||||
"leadsTemplate": "Leads sjabloon",
|
||||
"accountsTemplate": "Accounts-sjabloon",
|
||||
"usersTemplate": "Gebruikers sjabloon"
|
||||
},
|
||||
"options": {
|
||||
"type": {
|
||||
"Email": "E-mail"
|
||||
},
|
||||
"links": {
|
||||
"targetLists": "Doellijsten",
|
||||
"excludingTargetLists": "Excluding Target Lists",
|
||||
"accounts": "Klanten",
|
||||
"contacts": "Contacten",
|
||||
"leads": "Leads",
|
||||
"opportunities": "Kansen",
|
||||
"campaignLogRecords": "Log",
|
||||
"massEmails": "Mass Emails",
|
||||
"trackingUrls": "Tracking URLs"
|
||||
},
|
||||
"options": {
|
||||
"type": {
|
||||
"Email": "E-mail",
|
||||
"Web": "Web",
|
||||
"Television": "Television",
|
||||
"Radio": "Radio",
|
||||
"Newsletter": "Newsletter",
|
||||
"Mail": "Mail"
|
||||
},
|
||||
"status": {
|
||||
"Planning": "Planning",
|
||||
"Active": "Actief",
|
||||
"Inactive": "Inactief",
|
||||
"Complete": "Complete"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"Create Campaign": "Create Campaign",
|
||||
"Target Lists": "Doellijsten",
|
||||
"Statistics": "Statistics",
|
||||
"hard": "hard",
|
||||
"soft": "soft",
|
||||
"Unsubscribe": "Unsubscribe"
|
||||
},
|
||||
"presetFilters": {
|
||||
"active": "Actief"
|
||||
},
|
||||
"messages": {
|
||||
"unsubscribed": "You have been unsubscribed from our mailing list."
|
||||
"status": {
|
||||
"Active": "Actief",
|
||||
"Inactive": "Inactief",
|
||||
"Complete": "Compleet"
|
||||
}
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"Target Lists": "Doellijsten",
|
||||
"Mass Emails": "Massale e-mails",
|
||||
"Email Templates": "E-mailsjablonen",
|
||||
"Unsubscribe again": "Afmelden opnieuw",
|
||||
"Subscribe again": "Abonneer opnieuw",
|
||||
"Create Target List": "Maak een doellijst",
|
||||
"Mail Merge": "Mailmerge",
|
||||
"Generate Mail Merge PDF": "Genereer Mail Merge PDF"
|
||||
},
|
||||
"presetFilters": {
|
||||
"active": "Actief"
|
||||
},
|
||||
"tooltips": {
|
||||
"targetLists": "Doelen die berichten zouden moeten ontvangen.",
|
||||
"excludingTargetLists": "Doelen die geen berichten mogen ontvangen."
|
||||
},
|
||||
"messages": {
|
||||
"subscribedAgain": "U bent opnieuw ingeschreven."
|
||||
}
|
||||
}
|
||||
@@ -1,33 +1,25 @@
|
||||
{
|
||||
"fields": {
|
||||
"action": "Actie",
|
||||
"actionDate": "Datum",
|
||||
"data": "Data",
|
||||
"campaign": "Campaign",
|
||||
"parent": "Target",
|
||||
"object": "Object",
|
||||
"application": "Application",
|
||||
"queueItem": "Queue Item"
|
||||
},
|
||||
"options": {
|
||||
"action": {
|
||||
"Sent": "Verstuur",
|
||||
"Opened": "Opened",
|
||||
"Opted Out": "Opted Out",
|
||||
"Bounced": "Bounced",
|
||||
"Clicked": "Clicked",
|
||||
"Lead Created": "Lead Created"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"All": "Alles"
|
||||
},
|
||||
"presetFilters": {
|
||||
"sent": "Verstuur",
|
||||
"opened": "Opened",
|
||||
"optedOut": "Opted Out",
|
||||
"bounced": "Bounced",
|
||||
"clicked": "Clicked",
|
||||
"leadCreated": "Lead Created"
|
||||
"fields": {
|
||||
"action": "Actie",
|
||||
"actionDate": "Datum",
|
||||
"stringData": "Stringgegevens",
|
||||
"stringAdditionalData": "String extra gegevens"
|
||||
},
|
||||
"links": {
|
||||
"queueItem": "Wachtrij-item",
|
||||
"parent": "Ouder",
|
||||
"object": "Voorwerp",
|
||||
"campaign": "Campagne"
|
||||
},
|
||||
"options": {
|
||||
"action": {
|
||||
"Sent": "Verstuur"
|
||||
}
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"All": "Alles"
|
||||
},
|
||||
"presetFilters": {
|
||||
"sent": "Verstuur"
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1 @@
|
||||
{
|
||||
"fields": {
|
||||
"url": "URL",
|
||||
"urlToUse": "Code to insert instead of URL",
|
||||
"campaign": "Campaign"
|
||||
},
|
||||
"links": {
|
||||
"campaign": "Campaign"
|
||||
},
|
||||
"labels": {
|
||||
"Create CampaignTrackingUrl": "Create Tracking URL"
|
||||
}
|
||||
}
|
||||
{}
|
||||
@@ -1,56 +1,44 @@
|
||||
{
|
||||
"fields": {
|
||||
"name": "Record Naam",
|
||||
"number": "Number",
|
||||
"status": "Status",
|
||||
"account": "Account",
|
||||
"contact": "Contact",
|
||||
"contacts": "Contacten",
|
||||
"priority": "Prioriteit",
|
||||
"type": "Type",
|
||||
"description": "Beschrijving",
|
||||
"inboundEmail": "Inbound Email"
|
||||
"fields": {
|
||||
"name": "Record Naam",
|
||||
"contacts": "Contacten",
|
||||
"priority": "Prioriteit",
|
||||
"description": "Beschrijving",
|
||||
"attachments": "Bijlagen",
|
||||
"inboundEmail": "Groeps e-mailaccount"
|
||||
},
|
||||
"links": {
|
||||
"Contacts": "Contacten",
|
||||
"emails": "E-mails",
|
||||
"articles": "Knowledge Base-artikelen",
|
||||
"attachments": "Bijlagen",
|
||||
"inboundEmail": "Groeps e-mailaccount"
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
"New": "Nieuw",
|
||||
"Assigned": "Toegewezen",
|
||||
"Pending": "In afwachting",
|
||||
"Closed": "Gesloten",
|
||||
"Rejected": "Afgewezen",
|
||||
"Duplicate": "Duplicaat"
|
||||
},
|
||||
"links": {
|
||||
"inboundEmail": "Inbound Email",
|
||||
"account": "Account",
|
||||
"contact": "Contact (Primary)",
|
||||
"Contacts": "Contacten",
|
||||
"meetings": "Meetings",
|
||||
"calls": "Calls",
|
||||
"tasks": "Tasks",
|
||||
"emails": "E-mails"
|
||||
"priority": {
|
||||
"Low": "Laag",
|
||||
"Normal": "Normaal",
|
||||
"High": "Hoog"
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
"New": "Nieuw",
|
||||
"Assigned": "Toegewezen",
|
||||
"Pending": "In afwachting",
|
||||
"Closed": "Gesloten",
|
||||
"Rejected": "Afgewezen",
|
||||
"Duplicate": "Dupliceer"
|
||||
},
|
||||
"priority" : {
|
||||
"Low": "Laag",
|
||||
"Normal": "Normaal",
|
||||
"High": "Hoog",
|
||||
"Urgent": "Urgent"
|
||||
},
|
||||
"type": {
|
||||
"Question": "Vraag",
|
||||
"Incident": "Incident",
|
||||
"Problem": "Probleem"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"Create Case": "Create Case",
|
||||
"Close": "Sluit",
|
||||
"Reject": "Reject",
|
||||
"Closed": "Gesloten",
|
||||
"Rejected": "Afgewezen"
|
||||
},
|
||||
"presetFilters": {
|
||||
"open": "Open",
|
||||
"closed": "Gesloten"
|
||||
"type": {
|
||||
"Question": "Vraag",
|
||||
"Problem": "Probleem"
|
||||
}
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"Close": "Sluit",
|
||||
"Closed": "Gesloten",
|
||||
"Rejected": "Afgewezen"
|
||||
},
|
||||
"presetFilters": {
|
||||
"closed": "Gesloten"
|
||||
}
|
||||
}
|
||||
@@ -1,40 +1,46 @@
|
||||
{
|
||||
"fields": {
|
||||
"name": "Record Naam",
|
||||
"emailAddress": "E-mail",
|
||||
"title": "Titel",
|
||||
"account": "Account",
|
||||
"accounts": "Klanten",
|
||||
"phoneNumber": "Telefoon",
|
||||
"accountType": "Klant Type",
|
||||
"doNotCall": "Niet Bellen",
|
||||
"address": "Adres",
|
||||
"opportunityRole": "Functie Kansen",
|
||||
"accountRole": "Titel",
|
||||
"description": "Beschrijving",
|
||||
"campaign": "Campaign",
|
||||
"targetLists": "Doellijsten",
|
||||
"targetList": "Target List"
|
||||
},
|
||||
"links": {
|
||||
"opportunities": "Kansen",
|
||||
"cases": "Casus",
|
||||
"targetLists": "Doellijsten",
|
||||
"campaignLogRecords": "Campaign Log",
|
||||
"campaign": "Campaign",
|
||||
"account": "Account (Primary)",
|
||||
"accounts": "Klanten",
|
||||
"casesPrimary": "Cases (Primary)"
|
||||
},
|
||||
"labels": {
|
||||
"Create Contact": "Contact Aanmaken"
|
||||
},
|
||||
"options": {
|
||||
"opportunityRole": {
|
||||
"": "--Geen--",
|
||||
"Decision Maker": "Beslisser",
|
||||
"Evaluator": "Evaluator",
|
||||
"Influencer": "Beinvloeder"
|
||||
}
|
||||
"fields": {
|
||||
"name": "Record Naam",
|
||||
"emailAddress": "E-mail",
|
||||
"accountRole": "Titel",
|
||||
"accounts": "Klanten",
|
||||
"phoneNumber": "Telefoon",
|
||||
"accountType": "Klant Type",
|
||||
"doNotCall": "Niet Bellen",
|
||||
"address": "Adres",
|
||||
"opportunityRole": "Functie Kansen",
|
||||
"description": "Beschrijving",
|
||||
"targetLists": "Doellijsten",
|
||||
"portalUser": "Portalgebruiker",
|
||||
"originalLead": "Oorspronkelijke lead",
|
||||
"acceptanceStatus": "Acceptatiestatus",
|
||||
"accountIsInactive": "account inactief",
|
||||
"acceptanceStatusMeetings": "Acceptatiestatus (vergaderingen)",
|
||||
"acceptanceStatusCalls": "Acceptatiestatus (oproepen)",
|
||||
"title": "Primair Account titel"
|
||||
},
|
||||
"links": {
|
||||
"opportunities": "Kansen",
|
||||
"cases": "Casus",
|
||||
"targetLists": "Doellijsten",
|
||||
"accounts": "Klanten",
|
||||
"portalUser": "Portalgebruiker",
|
||||
"originalLead": "Oorspronkelijke lead",
|
||||
"documents": "documenten",
|
||||
"tasksPrimary": "Taken (uitgebreid)"
|
||||
},
|
||||
"labels": {
|
||||
"Create Contact": "Contact Aanmaken"
|
||||
},
|
||||
"options": {
|
||||
"opportunityRole": {
|
||||
"Decision Maker": "Beslisser",
|
||||
"Influencer": "Beinvloeder"
|
||||
}
|
||||
}
|
||||
},
|
||||
"presetFilters": {
|
||||
"portalUsers": "Portal-gebruikers",
|
||||
"notPortalUsers": "Geen portalgebruikers",
|
||||
"accountActive": "Actief"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"fields": {
|
||||
"futureDays": "Volgende X dagen",
|
||||
"useLastStage": "Groeperen op laatst bereikte fase"
|
||||
}
|
||||
}
|
||||
@@ -1,42 +1,34 @@
|
||||
{
|
||||
"labels": {
|
||||
"Create Document": "Document Aanmaken",
|
||||
"Details": "Details"
|
||||
"labels": {
|
||||
"Create Document": "Document Aanmaken"
|
||||
},
|
||||
"fields": {
|
||||
"name": "Record Naam",
|
||||
"file": "Bestand",
|
||||
"publishDate": "Publicatiedatum",
|
||||
"expirationDate": "Vervaldatum",
|
||||
"description": "Beschrijving",
|
||||
"accounts": "Klanten"
|
||||
},
|
||||
"links": {
|
||||
"accounts": "Klanten",
|
||||
"opportunities": "Kansen",
|
||||
"leads": "leads",
|
||||
"contacts": "Contacten"
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
"Active": "Actief",
|
||||
"Draft": "Concept",
|
||||
"Expired": "Vervallen",
|
||||
"Canceled": "Geannuleerd"
|
||||
},
|
||||
"fields": {
|
||||
"name": "Record Naam",
|
||||
"status": "Status",
|
||||
"file": "Bestand",
|
||||
"type": "Type",
|
||||
"source": "Bron",
|
||||
"publishDate": "Publicatiedatum",
|
||||
"expirationDate": "Vervaldatum",
|
||||
"description": "Beschrijving",
|
||||
"accounts": "Klanten",
|
||||
"folder": "Folder"
|
||||
},
|
||||
"links": {
|
||||
"accounts": "Klanten",
|
||||
"opportunities": "Kansen",
|
||||
"folder": "Folder"
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
"Active": "Actief",
|
||||
"Draft": "Concept",
|
||||
"Expired": "Vervallen",
|
||||
"Canceled": "Geannuleerd"
|
||||
},
|
||||
"type": {
|
||||
"": "None",
|
||||
"Contract": "Contract",
|
||||
"NDA": "NDA",
|
||||
"EULA": "EULA",
|
||||
"License Agreement": "Licentie Overeenkomst"
|
||||
}
|
||||
},
|
||||
"presetFilters": {
|
||||
"active": "Actief",
|
||||
"draft": "Concept"
|
||||
"type": {
|
||||
"License Agreement": "Licentie Overeenkomst"
|
||||
}
|
||||
}
|
||||
},
|
||||
"presetFilters": {
|
||||
"active": "Actief",
|
||||
"draft": "Concept"
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,8 @@
|
||||
{
|
||||
"labels": {
|
||||
"Create DocumentFolder": "Create Document Folder",
|
||||
"Manage Categories": "Manage Folders",
|
||||
"Documents": "Documenten"
|
||||
},
|
||||
"links": {
|
||||
"documents": "Documenten"
|
||||
}
|
||||
}
|
||||
"labels": {
|
||||
"Documents": "Documenten"
|
||||
},
|
||||
"links": {
|
||||
"documents": "Documenten"
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,9 @@
|
||||
{
|
||||
"labels": {
|
||||
"Create Lead": "Lead Aanmaken",
|
||||
"Create Contact": "Contact Aanmaken",
|
||||
"Create Task": "Taak Aanmaken",
|
||||
"Create Case": "Create Case"
|
||||
}
|
||||
}
|
||||
"labels": {
|
||||
"Create Lead": "Lead Aanmaken",
|
||||
"Create Contact": "Contact Aanmaken",
|
||||
"Create Task": "Taak Aanmaken",
|
||||
"Add to Contact": "Toevoegen aan Contact",
|
||||
"Add to Lead": "Toevoegen aan lead"
|
||||
}
|
||||
}
|
||||
@@ -1,28 +1,20 @@
|
||||
{
|
||||
"fields": {
|
||||
"name": "Record Naam",
|
||||
"status": "Status",
|
||||
"target": "Target",
|
||||
"sentAt": "Datum verzonden",
|
||||
"attemptCount": "Attempts",
|
||||
"emailAddress": "E-mailadres",
|
||||
"massEmail": "Mass Email",
|
||||
"isTest": "Is Test"
|
||||
},
|
||||
"links": {
|
||||
"target": "Target",
|
||||
"massEmail": "Mass Email"
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
"Pending": "In afwachting",
|
||||
"Sent": "Verstuur",
|
||||
"Failed": "Failed"
|
||||
}
|
||||
},
|
||||
"presetFilters": {
|
||||
"pending": "In afwachting",
|
||||
"sent": "Verstuur",
|
||||
"failed": "Failed"
|
||||
"fields": {
|
||||
"name": "Record Naam",
|
||||
"sentAt": "Datum verzonden",
|
||||
"emailAddress": "E-mailadres"
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
"Pending": "In afwachting",
|
||||
"Sent": "Verzonden",
|
||||
"Failed": "Mislukt",
|
||||
"Sending": "Bezig met verzenden"
|
||||
}
|
||||
}
|
||||
},
|
||||
"presetFilters": {
|
||||
"pending": "In afwachting",
|
||||
"sent": "Verstuur",
|
||||
"failed": "Mislukt"
|
||||
}
|
||||
}
|
||||
@@ -1,107 +1,85 @@
|
||||
{
|
||||
"scopeNames": {
|
||||
"Account": "Account",
|
||||
"Contact": "Contact",
|
||||
"Lead": "Lead",
|
||||
"Target": "Target",
|
||||
"Opportunity": "Kans",
|
||||
"Meeting": "Vergadering",
|
||||
"Calendar": "Kalender",
|
||||
"Call": "Tel. Gesprek",
|
||||
"Task": "Taak",
|
||||
"Case": "Kwestie",
|
||||
"Document": "Document",
|
||||
"DocumentFolder": "Document Folder",
|
||||
"Campaign": "Campaign",
|
||||
"TargetList": "Target List",
|
||||
"MassEmail": "Mass Email",
|
||||
"EmailQueueItem": "Email Queue Item",
|
||||
"CampaignTrackingUrl": "Tracking URL"
|
||||
},
|
||||
"scopeNamesPlural": {
|
||||
"Account": "Klanten",
|
||||
"Contact": "Contacten",
|
||||
"Lead": "Leads",
|
||||
"Target": "Targets",
|
||||
"Opportunity": "Kansen",
|
||||
"Meeting": "Meetings",
|
||||
"Calendar": "Kalender",
|
||||
"Call": "Calls",
|
||||
"Task": "Tasks",
|
||||
"Case": "Casus",
|
||||
"Document": "Documenten",
|
||||
"DocumentFolder": "Document Folders",
|
||||
"Campaign": "Campaigns",
|
||||
"TargetList": "Doellijsten",
|
||||
"MassEmail": "Mass Emails",
|
||||
"EmailQueueItem": "Email Queue Items",
|
||||
"CampaignTrackingUrl": "Tracking URLs"
|
||||
},
|
||||
"dashlets": {
|
||||
"Leads": "Mijn Leads",
|
||||
"Opportunities": "Mijn Kansen",
|
||||
"Tasks": "Mijn Taken",
|
||||
"Cases": "Mijn Casus",
|
||||
"Calendar": "Kalender",
|
||||
"Calls": "Mijn Tel.gesprekken",
|
||||
"Meetings": "Mijn Afspraken",
|
||||
"OpportunitiesByStage": "Status van Kansen",
|
||||
"OpportunitiesByLeadSource": "Kansen per Leadbron",
|
||||
"SalesByMonth": "Verkopen per maand",
|
||||
"SalesPipeline": "Verkoop mogelijkheden",
|
||||
"Activities": "My Activities"
|
||||
},
|
||||
"labels": {
|
||||
"Create InboundEmail": "E-mail Gebruiker Instellen",
|
||||
"Activities": "Activiteiten",
|
||||
"History": "Historie",
|
||||
"Attendees": "Genodigden",
|
||||
"Schedule Meeting": "Afspraak Plannen",
|
||||
"Schedule Call": "Geplande Oproep",
|
||||
"Compose Email": "E-mail aanmaken",
|
||||
"Log Meeting": "Afspraak vastleggen",
|
||||
"Log Call": "Tel. Gesprek Vastleggen",
|
||||
"Archive Email": "Archiveer Email",
|
||||
"Create Task": "Taak Aanmaken",
|
||||
"Tasks": "Tasks"
|
||||
},
|
||||
"fields": {
|
||||
"billingAddressCity": "Plaats",
|
||||
"billingAddressCountry": "Land",
|
||||
"billingAddressPostalCode": "Postcode",
|
||||
"billingAddressState": "Provincie",
|
||||
"billingAddressStreet": "Straat",
|
||||
"addressCity": "Plaats",
|
||||
"addressStreet": "Straat",
|
||||
"addressCountry": "Land",
|
||||
"addressState": "Provincie",
|
||||
"addressPostalCode": "Postcode",
|
||||
"shippingAddressCity": "Plaats (Verzending)",
|
||||
"shippingAddressStreet": "Straat (Verzending)",
|
||||
"shippingAddressCountry": "Land (Verzending)",
|
||||
"shippingAddressState": "Provincie (Verzending)",
|
||||
"shippingAddressPostalCode": "Postcode (Verzending)"
|
||||
},
|
||||
"links": {
|
||||
"contacts": "Contacten",
|
||||
"opportunities": "Kansen",
|
||||
"leads": "Leads",
|
||||
"meetings": "Meetings",
|
||||
"calls": "Calls",
|
||||
"tasks": "Tasks",
|
||||
"emails": "E-mails",
|
||||
"accounts": "Klanten",
|
||||
"cases": "Casus",
|
||||
"documents": "Documenten",
|
||||
"account": "Account",
|
||||
"opportunity": "Kans",
|
||||
"contact": "Contact",
|
||||
"parent": "Behorende bij"
|
||||
},
|
||||
"options": {
|
||||
"reminderTypes": {
|
||||
"Popup": "Popup",
|
||||
"Email": "E-mail"
|
||||
}
|
||||
"links": {
|
||||
"parent": "Behorende bij",
|
||||
"contacts": "Contacten",
|
||||
"opportunities": "Kansen",
|
||||
"emails": "E-mails",
|
||||
"accounts": "Klanten",
|
||||
"cases": "Casus",
|
||||
"documents": "Documenten",
|
||||
"opportunity": "Kans"
|
||||
},
|
||||
"scopeNames": {
|
||||
"Opportunity": "Kans",
|
||||
"Meeting": "Vergadering",
|
||||
"Calendar": "Kalender",
|
||||
"Call": "Tel. Gesprek",
|
||||
"Task": "Taak",
|
||||
"Activities": "Activiteiten",
|
||||
"KnowledgeBaseArticle": "Kennisbank-artikel",
|
||||
"KnowledgeBaseCategory": "Kennisbank-categorie"
|
||||
},
|
||||
"scopeNamesPlural": {
|
||||
"Account": "Klanten",
|
||||
"Contact": "Contacten",
|
||||
"Opportunity": "Kansen",
|
||||
"Calendar": "Kalender",
|
||||
"Case": "Casus",
|
||||
"Document": "Documenten",
|
||||
"TargetList": "Doellijsten",
|
||||
"Activities": "Activiteiten",
|
||||
"KnowledgeBaseArticle": "Kennisbank",
|
||||
"KnowledgeBaseCategory": "Kennisbank-categorieën"
|
||||
},
|
||||
"dashlets": {
|
||||
"Leads": "Mijn Leads",
|
||||
"Opportunities": "Mijn Kansen",
|
||||
"Tasks": "Mijn Taken",
|
||||
"Cases": "Mijn Casus",
|
||||
"Calendar": "Kalender",
|
||||
"Calls": "Mijn Tel.gesprekken",
|
||||
"Meetings": "Mijn Afspraken",
|
||||
"OpportunitiesByStage": "Kansen per fase",
|
||||
"OpportunitiesByLeadSource": "Kansen per Leadbron",
|
||||
"SalesByMonth": "Verkopen per maand",
|
||||
"SalesPipeline": "Verkoop mogelijkheden"
|
||||
},
|
||||
"labels": {
|
||||
"Create InboundEmail": "E-mail Gebruiker Instellen",
|
||||
"Activities": "Activiteiten",
|
||||
"History": "Historie",
|
||||
"Attendees": "Genodigden",
|
||||
"Schedule Meeting": "Afspraak Plannen",
|
||||
"Schedule Call": "Geplande Oproep",
|
||||
"Compose Email": "E-mail aanmaken",
|
||||
"Log Meeting": "Afspraak vastleggen",
|
||||
"Log Call": "Tel. Gesprek Vastleggen",
|
||||
"Archive Email": "Archiveer E-mail",
|
||||
"Create Task": "Taak Aanmaken"
|
||||
},
|
||||
"fields": {
|
||||
"billingAddressCity": "Plaats",
|
||||
"addressCity": "Plaats",
|
||||
"billingAddressCountry": "Land",
|
||||
"addressCountry": "Land",
|
||||
"billingAddressPostalCode": "Postcode",
|
||||
"addressPostalCode": "Postcode",
|
||||
"billingAddressState": "Provincie",
|
||||
"addressState": "Provincie",
|
||||
"billingAddressStreet": "Straat",
|
||||
"addressStreet": "Straat",
|
||||
"billingAddressMap": "Kaart",
|
||||
"addressMap": "Kaart",
|
||||
"shippingAddressCity": "Plaats (Verzending)",
|
||||
"shippingAddressStreet": "Straat (Verzending)",
|
||||
"shippingAddressCountry": "Land (Verzending)",
|
||||
"shippingAddressState": "Provincie (Verzending)",
|
||||
"shippingAddressPostalCode": "Postcode (Verzending)",
|
||||
"shippingAddressMap": "Kaart (verzending)"
|
||||
},
|
||||
"options": {
|
||||
"reminderTypes": {
|
||||
"Email": "E-mail"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"labels": {
|
||||
"Create KnowledgeBaseArticle": "Artikel maken",
|
||||
"Any": "elk",
|
||||
"Send in Email": "Stuur een e-mail",
|
||||
"Move Up": "Naar boven gaan",
|
||||
"Move Down": "Naar beneden verplaatsen",
|
||||
"Move to Top": "Verplaats naar boven",
|
||||
"Move to Bottom": "Verplaats naar beneden"
|
||||
},
|
||||
"fields": {
|
||||
"name": "Naam",
|
||||
"status": "status",
|
||||
"attachments": "Bijlagen",
|
||||
"publishDate": "Publiceer datum",
|
||||
"expirationDate": "vervaldatum",
|
||||
"description": "Beschrijving",
|
||||
"body": "Lichaam",
|
||||
"categories": "Categorieën",
|
||||
"language": "Taal",
|
||||
"portals": "portals"
|
||||
},
|
||||
"links": {
|
||||
"cases": "Casus",
|
||||
"opportunities": "Kansen",
|
||||
"categories": "Categorieën",
|
||||
"portals": "portals"
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
"In Review": "In beoordeling",
|
||||
"Draft": "Concept",
|
||||
"Archived": "gearchiveerd",
|
||||
"Published": "Gepubliceerd"
|
||||
},
|
||||
"type": {
|
||||
"Article": "Artikel"
|
||||
}
|
||||
},
|
||||
"presetFilters": {
|
||||
"published": "Gepubliceerd"
|
||||
},
|
||||
"tooltips": {
|
||||
"portals": "Artikel is alleen beschikbaar in bepaalde portals."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"labels": {
|
||||
"Create KnowledgeBaseCategory": "Categorie maken",
|
||||
"Manage Categories": "Beheer Categorieën",
|
||||
"Articles": "artikelen"
|
||||
},
|
||||
"links": {
|
||||
"articles": "artikelen"
|
||||
}
|
||||
}
|
||||
@@ -1,63 +1,56 @@
|
||||
{
|
||||
"labels": {
|
||||
"Converted To": "Geconverteerd naar",
|
||||
"Create Lead": "Lead Aanmaken",
|
||||
"Convert": "Converteren",
|
||||
"convert": "converteren"
|
||||
"labels": {
|
||||
"Converted To": "Geconverteerd naar",
|
||||
"Create Lead": "Lead Aanmaken",
|
||||
"Convert": "Converteren",
|
||||
"convert": "converteren"
|
||||
},
|
||||
"fields": {
|
||||
"name": "Record Naam",
|
||||
"emailAddress": "E-mail",
|
||||
"title": "Titel",
|
||||
"phoneNumber": "Telefoon",
|
||||
"accountName": "Naam Klant",
|
||||
"doNotCall": "Niet Bellen",
|
||||
"address": "Adres",
|
||||
"source": "Bron",
|
||||
"opportunityAmount": "Bedrag Kansen",
|
||||
"opportunityAmountConverted": "Bedrag Kans (geconverteerd)",
|
||||
"description": "Beschrijving",
|
||||
"createdOpportunity": "Kans",
|
||||
"targetLists": "Doellijsten",
|
||||
"industry": "Industrie",
|
||||
"acceptanceStatus": "Acceptatiestatus",
|
||||
"opportunityAmountCurrency": "Opportunity Bedrag Valuta",
|
||||
"acceptanceStatusMeetings": "Acceptatiestatus (vergaderingen)",
|
||||
"acceptanceStatusCalls": "Acceptatiestatus (oproepen)"
|
||||
},
|
||||
"links": {
|
||||
"targetLists": "Doellijsten",
|
||||
"createdOpportunity": "Kans",
|
||||
"cases": "Casus",
|
||||
"documents": "documenten"
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
"New": "Nieuw",
|
||||
"Assigned": "Toegewezen",
|
||||
"In Process": "In Behandeling",
|
||||
"Converted": "Geconverteerd",
|
||||
"Recycled": "Opnieuw verwerkt",
|
||||
"Dead": "Vervallen"
|
||||
},
|
||||
"fields": {
|
||||
"name": "Record Naam",
|
||||
"emailAddress": "E-mail",
|
||||
"title": "Titel",
|
||||
"website": "Website",
|
||||
"phoneNumber": "Telefoon",
|
||||
"accountName": "Naam Klant",
|
||||
"doNotCall": "Niet Bellen",
|
||||
"address": "Adres",
|
||||
"status": "Status",
|
||||
"source": "Bron",
|
||||
"opportunityAmount": "Bedrag Kansen",
|
||||
"opportunityAmountConverted": "Bedrag Kans (geconverteerd)",
|
||||
"description": "Beschrijving",
|
||||
"createdAccount": "Account",
|
||||
"createdContact": "Contact",
|
||||
"createdOpportunity": "Kans",
|
||||
"campaign": "Campaign",
|
||||
"targetLists": "Doellijsten",
|
||||
"targetList": "Target List"
|
||||
},
|
||||
"links": {
|
||||
"targetLists": "Doellijsten",
|
||||
"campaignLogRecords": "Campaign Log",
|
||||
"campaign": "Campaign",
|
||||
"createdAccount": "Account",
|
||||
"createdContact": "Contact",
|
||||
"createdOpportunity": "Kans"
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
"New": "Nieuw",
|
||||
"Assigned": "Toegewezen",
|
||||
"In Process": "In Behandeling",
|
||||
"Converted": "Geconverteerd",
|
||||
"Recycled": "Opnieuw verwerkt",
|
||||
"Dead": "Dood"
|
||||
},
|
||||
"source": {
|
||||
"": "None",
|
||||
"Call": "Tel. Gesprek",
|
||||
"Email": "E-mail",
|
||||
"Existing Customer": "Bestaande Klant",
|
||||
"Partner": "Partner",
|
||||
"Public Relations": "Public Relations",
|
||||
"Web Site": "Webpagina",
|
||||
"Campaign": "Campaign",
|
||||
"Other": "Overig"
|
||||
}
|
||||
},
|
||||
"presetFilters": {
|
||||
"active": "Actief",
|
||||
"converted": "Geconverteerd",
|
||||
"actual": "Werkelijke"
|
||||
"source": {
|
||||
"Call": "Tel. Gesprek",
|
||||
"Email": "E-mail",
|
||||
"Existing Customer": "Bestaande Klant",
|
||||
"Web Site": "Webpagina",
|
||||
"Other": "Overig"
|
||||
}
|
||||
}
|
||||
},
|
||||
"presetFilters": {
|
||||
"active": "Actief",
|
||||
"actual": "Werkelijke",
|
||||
"converted": "Geconverteerd"
|
||||
}
|
||||
}
|
||||
@@ -1,47 +1,39 @@
|
||||
{
|
||||
"fields": {
|
||||
"name": "Record Naam",
|
||||
"status": "Status",
|
||||
"storeSentEmails": "Store Sent Emails",
|
||||
"startAt": "Start Datum",
|
||||
"fromAddress": "Van Adres",
|
||||
"fromName": "Van Naam",
|
||||
"replyToAddress": "Reply-to Address",
|
||||
"replyToName": "Reply-to Name",
|
||||
"campaign": "Campaign",
|
||||
"emailTemplate": "E-mail Template",
|
||||
"inboundEmail": "Email Account",
|
||||
"targetLists": "Doellijsten",
|
||||
"excludingTargetLists": "Excluding Target Lists",
|
||||
"optOutEntirely": "Opt-Out Entirely"
|
||||
},
|
||||
"links": {
|
||||
"targetLists": "Doellijsten",
|
||||
"excludingTargetLists": "Excluding Target Lists",
|
||||
"queueItems": "Queue Items",
|
||||
"campaign": "Campaign",
|
||||
"emailTemplate": "E-mail Template",
|
||||
"inboundEmail": "Email Account"
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
"Draft": "Concept",
|
||||
"Pending": "In afwachting",
|
||||
"In Process": "In Behandeling",
|
||||
"Complete": "Complete",
|
||||
"Canceled": "Geannuleerd",
|
||||
"Failed": "Failed"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"Create MassEmail": "Create Mass Email",
|
||||
"Send Test": "Send Test"
|
||||
},
|
||||
"messages": {
|
||||
"selectAtLeastOneTarget": "Select at least one target.",
|
||||
"testSent": "Test email(s) supposed to be sent"
|
||||
},
|
||||
"tooltips": {
|
||||
"optOutEntirely": "Email addresses of recipients that unsubscribed will be marked as opted out and they will not receive any mass emails anymore."
|
||||
"fields": {
|
||||
"name": "Record Naam",
|
||||
"startAt": "Start Datum",
|
||||
"fromAddress": "Van Adres",
|
||||
"fromName": "Van Naam",
|
||||
"emailTemplate": "E-mail Template",
|
||||
"targetLists": "Doellijsten",
|
||||
"smtpAccount": "SMTP-account"
|
||||
},
|
||||
"links": {
|
||||
"targetLists": "Doellijsten",
|
||||
"emailTemplate": "E-mail Template"
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
"Draft": "Concept",
|
||||
"Pending": "In afwachting",
|
||||
"In Process": "In Behandeling",
|
||||
"Complete": "Compleet",
|
||||
"Canceled": "Geannuleerd",
|
||||
"Failed": "Mislukt"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tooltips": {
|
||||
"targetLists": "Doelen die berichten zouden moeten ontvangen.",
|
||||
"excludingTargetLists": "Doelen die geen berichten mogen ontvangen.",
|
||||
"storeSentEmails": "E-mails worden opgeslagen in CRM."
|
||||
},
|
||||
"presetFilters": {
|
||||
"actual": "werkelijk",
|
||||
"complete": "Compleet"
|
||||
},
|
||||
"labels": {
|
||||
"System SMTP": "Systeem SMTP",
|
||||
"system": "systeem",
|
||||
"group": "groep"
|
||||
}
|
||||
}
|
||||
@@ -1,48 +1,45 @@
|
||||
{
|
||||
"fields": {
|
||||
"name": "Record Naam",
|
||||
"parent": "Behorende bij",
|
||||
"status": "Status",
|
||||
"dateStart": "Start Datum",
|
||||
"dateEnd": "Eind Datum",
|
||||
"duration": "Duur",
|
||||
"description": "Beschrijving",
|
||||
"users": "Gebruikers",
|
||||
"contacts": "Contacten",
|
||||
"leads": "Leads",
|
||||
"reminders": "Herineringen",
|
||||
"account": "Account"
|
||||
"fields": {
|
||||
"name": "Record Naam",
|
||||
"parent": "Behorende bij",
|
||||
"dateStart": "Start Datum",
|
||||
"dateEnd": "Eind Datum",
|
||||
"duration": "Duur",
|
||||
"description": "Beschrijving",
|
||||
"users": "Gebruikers",
|
||||
"contacts": "Contacten",
|
||||
"reminders": "Herineringen",
|
||||
"acceptanceStatus": "Acceptatiestatus",
|
||||
"dateStartDate": "Startdatum (de hele dag)",
|
||||
"dateEndDate": "Datum einde (hele dag)",
|
||||
"isAllDay": "Is de hele dag",
|
||||
"Acceptance": "Aanvaarding"
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
"Planned": "Gepland",
|
||||
"Held": "Vastgehouden",
|
||||
"Not Held": "Niet vastgehouden"
|
||||
},
|
||||
"links": {
|
||||
},
|
||||
"options": {
|
||||
"status": {
|
||||
"Planned": "Gepland",
|
||||
"Held": "Vasthouden",
|
||||
"Not Held": "Niet Vasthouden"
|
||||
},
|
||||
"acceptanceStatus": {
|
||||
"None": "None",
|
||||
"Accepted": "Geaccepteerd",
|
||||
"Declined": "Geweigerd",
|
||||
"Tentative": "Tentative"
|
||||
}
|
||||
},
|
||||
"massActions": {
|
||||
"setHeld": "Set Held",
|
||||
"setNotHeld": "Set Not Held"
|
||||
},
|
||||
"labels": {
|
||||
"Create Meeting": "Plan Vergadering",
|
||||
"Set Held": "Set Held",
|
||||
"Set Not Held": "Set Not Held",
|
||||
"Send Invitations": "Uitnodiging versturen",
|
||||
"on time": "op tijd",
|
||||
"before": "voordat"
|
||||
},
|
||||
"presetFilters": {
|
||||
"planned": "Gepland",
|
||||
"held": "Vasthouden",
|
||||
"todays": "Huidig"
|
||||
"acceptanceStatus": {
|
||||
"None": "Geen",
|
||||
"Accepted": "Geaccepteerd",
|
||||
"Declined": "Geweigerd"
|
||||
}
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"Create Meeting": "Plan Vergadering",
|
||||
"Send Invitations": "Uitnodiging versturen",
|
||||
"on time": "op tijd",
|
||||
"before": "voordat",
|
||||
"All-Day": "Hele dag"
|
||||
},
|
||||
"presetFilters": {
|
||||
"planned": "Gepland",
|
||||
"held": "Vasthouden",
|
||||
"todays": "Huidig"
|
||||
},
|
||||
"messages": {
|
||||
"nothingHasBeenSent": "Er is niets verzonden"
|
||||
}
|
||||
}
|
||||
@@ -1,46 +1,46 @@
|
||||
{
|
||||
"fields": {
|
||||
"name": "Record Naam",
|
||||
"account": "Account",
|
||||
"stage": "Stadium",
|
||||
"amount": "Aantal",
|
||||
"probability": "Waarschijnlijkheid, %",
|
||||
"leadSource": "Leadbron",
|
||||
"doNotCall": "Niet Bellen",
|
||||
"closeDate": "Datum gesloten",
|
||||
"contacts": "Contacten",
|
||||
"description": "Beschrijving",
|
||||
"amountConverted": "Bedrag (geconverteerd)",
|
||||
"amountWeightedConverted": "Afgewogen bedrag",
|
||||
"campaign": "Campaign"
|
||||
},
|
||||
"links": {
|
||||
"contacts": "Contacten",
|
||||
"documents": "Documenten",
|
||||
"campaign": "Campaign"
|
||||
},
|
||||
"options": {
|
||||
"stage": {
|
||||
"Prospecting": "Prospectie",
|
||||
"Qualification": "Kwalificatie",
|
||||
"Proposal": "Voorstel",
|
||||
"Negotiation": "Onderhandeling",
|
||||
"Needs Analysis": "Analyse behoefte",
|
||||
"Value Proposition": "Waarde voorstel",
|
||||
"Id. Decision Makers": "Id. Beslissers",
|
||||
"Perception Analysis": "Perceptie Analyse",
|
||||
"Proposal/Price Quote": "Voorstel/Offerte",
|
||||
"Negotiation/Review": "Onderhandeling/Beoordeling",
|
||||
"Closed Won": "Gesloten Gewonnen",
|
||||
"Closed Lost": "Gesloten Verloren"
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"Create Opportunity": "Kans aanmaken"
|
||||
},
|
||||
"presetFilters": {
|
||||
"open": "Open",
|
||||
"won": "Gewonnen",
|
||||
"lost": "Lost"
|
||||
"fields": {
|
||||
"name": "Record Naam",
|
||||
"stage": "Stadium",
|
||||
"amount": "Aantal",
|
||||
"probability": "Waarschijnlijkheid, %",
|
||||
"leadSource": "Leadbron",
|
||||
"doNotCall": "Niet Bellen",
|
||||
"closeDate": "Datum gesloten",
|
||||
"contacts": "Contacten",
|
||||
"description": "Beschrijving",
|
||||
"amountConverted": "Bedrag (geconverteerd)",
|
||||
"amountWeightedConverted": "Afgewogen bedrag",
|
||||
"originalLead": "Oorspronkelijke lead",
|
||||
"amountCurrency": "Bedrag valuta",
|
||||
"contactRole": "Neem contact op met de functie",
|
||||
"lastStage": "Laatste fase"
|
||||
},
|
||||
"links": {
|
||||
"contacts": "Contacten",
|
||||
"documents": "Documenten",
|
||||
"originalLead": "Oorspronkelijke lead"
|
||||
},
|
||||
"options": {
|
||||
"stage": {
|
||||
"Prospecting": "Prospectie",
|
||||
"Qualification": "Kwalificatie",
|
||||
"Needs Analysis": "Analyse behoefte",
|
||||
"Value Proposition": "Waarde voorstel",
|
||||
"Id. Decision Makers": "Id. Beslissers",
|
||||
"Perception Analysis": "Perceptie Analyse",
|
||||
"Proposal/Price Quote": "Voorstel/Offerte",
|
||||
"Negotiation/Review": "Onderhandeling/Beoordeling",
|
||||
"Closed Won": "Gesloten Gewonnen",
|
||||
"Closed Lost": "Gesloten Verloren",
|
||||
"Proposal": "Voorstel",
|
||||
"Negotiation": "Onderhandeling"
|
||||
}
|
||||
}
|
||||
},
|
||||
"labels": {
|
||||
"Create Opportunity": "Kans aanmaken"
|
||||
},
|
||||
"presetFilters": {
|
||||
"won": "Gewonnen"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"links": {
|
||||
"articles": "Knowledge Base-artikelen"
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user