dynamic logic move
This commit is contained in:
Generated
+19
@@ -1386,6 +1386,25 @@
|
|||||||
</SchemaInfo>
|
</SchemaInfo>
|
||||||
</value>
|
</value>
|
||||||
</entry>
|
</entry>
|
||||||
|
<entry key="metadata/logicDefs">
|
||||||
|
<value>
|
||||||
|
<SchemaInfo>
|
||||||
|
<option name="generatedName" value="New Schema" />
|
||||||
|
<option name="name" value="metadata/logicDefs" />
|
||||||
|
<option name="relativePathToSchema" value="schema/metadata/logicDefs.json" />
|
||||||
|
<option name="schemaVersion" value="JSON Schema version 7" />
|
||||||
|
<option name="patterns">
|
||||||
|
<list>
|
||||||
|
<Item>
|
||||||
|
<option name="pattern" value="true" />
|
||||||
|
<option name="path" value="*/metadata/logicDefs/*.json" />
|
||||||
|
<option name="mappingKind" value="Pattern" />
|
||||||
|
</Item>
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</SchemaInfo>
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
<entry key="metadata/notificationDefs">
|
<entry key="metadata/notificationDefs">
|
||||||
<value>
|
<value>
|
||||||
<SchemaInfo>
|
<SchemaInfo>
|
||||||
|
|||||||
Vendored
+6
@@ -82,6 +82,12 @@
|
|||||||
],
|
],
|
||||||
"url": "./schema/metadata/integrations.json"
|
"url": "./schema/metadata/integrations.json"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"fileMatch": [
|
||||||
|
"*/metadata/logicDefs/*.json"
|
||||||
|
],
|
||||||
|
"url": "./schema/metadata/logicDefs.json"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"fileMatch": [
|
"fileMatch": [
|
||||||
"*/metadata/notificationDefs/*.json"
|
"*/metadata/notificationDefs/*.json"
|
||||||
|
|||||||
@@ -31,19 +31,24 @@ namespace Espo\Core\Upgrades\Migrations\V9_1;
|
|||||||
|
|
||||||
use Espo\Core\ORM\Repository\Option\SaveOption;
|
use Espo\Core\ORM\Repository\Option\SaveOption;
|
||||||
use Espo\Core\Upgrades\Migration\Script;
|
use Espo\Core\Upgrades\Migration\Script;
|
||||||
|
use Espo\Core\Utils\Metadata;
|
||||||
|
use Espo\Core\Utils\ObjectUtil;
|
||||||
use Espo\Modules\Crm\Entities\KnowledgeBaseArticle;
|
use Espo\Modules\Crm\Entities\KnowledgeBaseArticle;
|
||||||
use Espo\ORM\EntityManager;
|
use Espo\ORM\EntityManager;
|
||||||
use Espo\Tools\Email\Util;
|
use Espo\Tools\Email\Util;
|
||||||
|
use stdClass;
|
||||||
|
|
||||||
class AfterUpgrade implements Script
|
class AfterUpgrade implements Script
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private EntityManager $entityManager,
|
private EntityManager $entityManager,
|
||||||
|
private Metadata $metadata,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
public function run(): void
|
public function run(): void
|
||||||
{
|
{
|
||||||
$this->processKbArticles();
|
$this->processKbArticles();
|
||||||
|
$this->processDynamicLogicMetadata();
|
||||||
}
|
}
|
||||||
|
|
||||||
private function processKbArticles(): void
|
private function processKbArticles(): void
|
||||||
@@ -71,4 +76,32 @@ class AfterUpgrade implements Script
|
|||||||
$this->entityManager->saveEntity($article, [SaveOption::SKIP_HOOKS => true]);
|
$this->entityManager->saveEntity($article, [SaveOption::SKIP_HOOKS => true]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function processDynamicLogicMetadata(): void
|
||||||
|
{
|
||||||
|
/** @var string[] $scopes */
|
||||||
|
$scopes = array_keys($this->metadata->get('clientDefs', []));
|
||||||
|
|
||||||
|
foreach ($scopes as $scope) {
|
||||||
|
$customClientDefs = $this->metadata->getCustom('clientDefs', $scope);
|
||||||
|
|
||||||
|
if (!$customClientDefs instanceof stdClass) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
!property_exists($customClientDefs, 'dynamicLogic') ||
|
||||||
|
!$customClientDefs->dynamicLogic instanceof stdClass
|
||||||
|
) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->metadata->saveCustom('logicDefs', $scope, $customClientDefs->dynamicLogic);
|
||||||
|
|
||||||
|
$customClientDefs = ObjectUtil::clone($customClientDefs);
|
||||||
|
unset($customClientDefs->dynamicLogic);
|
||||||
|
|
||||||
|
$this->metadata->saveCustom('clientDefs', $scope, $customClientDefs);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,162 @@
|
|||||||
|
<?php
|
||||||
|
/************************************************************************
|
||||||
|
* This file is part of EspoCRM.
|
||||||
|
*
|
||||||
|
* EspoCRM – Open Source CRM application.
|
||||||
|
* Copyright (C) 2014-2025 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
|
||||||
|
* Website: https://www.espocrm.com
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program 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 Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://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 Affero General Public License version 3.
|
||||||
|
*
|
||||||
|
* In accordance with Section 7(b) of the GNU Affero General Public License version 3,
|
||||||
|
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
|
||||||
|
************************************************************************/
|
||||||
|
|
||||||
|
namespace Espo\Core\Utils\Metadata\AdditionalBuilder;
|
||||||
|
|
||||||
|
use Espo\Core\Utils\Metadata\AdditionalBuilder;
|
||||||
|
use Espo\Core\Utils\ObjectUtil;
|
||||||
|
use stdClass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Establishes backward compatibility of clientDefs > {scope} > dynamicLogic.
|
||||||
|
* The dynamic logic is NOT supposed to be set in custom clientDefs as of v9.1.
|
||||||
|
* The custom dynamic logic is supposed to be moved to logicDefs by an upgrade script.
|
||||||
|
* But extensions can have a dynamic logic defined in clientDefs as they may be supposed
|
||||||
|
* to be compatible with older Espo versions.
|
||||||
|
*
|
||||||
|
* @noinspection PhpUnused
|
||||||
|
*/
|
||||||
|
class LogicDefsBc implements AdditionalBuilder
|
||||||
|
{
|
||||||
|
public function build(stdClass $data): void
|
||||||
|
{
|
||||||
|
if (!isset($data->clientDefs)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var array<string, stdClass> $clientDefs */
|
||||||
|
$clientDefs = get_object_vars($data->clientDefs);
|
||||||
|
|
||||||
|
foreach ($clientDefs as $scope => $defs) {
|
||||||
|
$this->processScope($scope, $data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function processScope(string $scope, stdClass $data): void
|
||||||
|
{
|
||||||
|
if (!isset($data->clientDefs->$scope)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var stdClass $clientDefs */
|
||||||
|
$clientDefs = $data->clientDefs->$scope;
|
||||||
|
|
||||||
|
if (!isset($clientDefs->dynamicLogic)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var stdClass $dynamicLogic */
|
||||||
|
$dynamicLogic = $clientDefs->dynamicLogic;
|
||||||
|
|
||||||
|
$keys = [
|
||||||
|
'fields',
|
||||||
|
'panels',
|
||||||
|
];
|
||||||
|
|
||||||
|
$subKeys = [
|
||||||
|
'visible',
|
||||||
|
'required',
|
||||||
|
'readOnly',
|
||||||
|
'invalid',
|
||||||
|
];
|
||||||
|
|
||||||
|
$data->logicDefs ??= (object) [];
|
||||||
|
$data->logicDefs->$scope ??= (object) [];
|
||||||
|
|
||||||
|
/** @var stdClass $logicDefs */
|
||||||
|
$logicDefs = $data->logicDefs->$scope;
|
||||||
|
|
||||||
|
$customFile = "custom/Espo/Custom/Resources/metadata/logicDefs/$scope.json";
|
||||||
|
|
||||||
|
$customLogicDefs = file_exists($customFile) ?
|
||||||
|
json_decode(file_get_contents($customFile) ?: '') :
|
||||||
|
null;
|
||||||
|
|
||||||
|
if (!$customLogicDefs instanceof stdClass) {
|
||||||
|
$customLogicDefs = (object) [];
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($keys as $key) {
|
||||||
|
if (!isset($dynamicLogic->$key)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var array<string, stdClass> $defs */
|
||||||
|
$defs = get_object_vars($dynamicLogic->$key);
|
||||||
|
|
||||||
|
foreach ($defs as $name => $subDefs) {
|
||||||
|
|
||||||
|
foreach ($subKeys as $subKey) {
|
||||||
|
if (!property_exists($subDefs, $subKey)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
isset($customLogicDefs->$key->$name) &&
|
||||||
|
property_exists($customLogicDefs->$key->$name, $subKey)
|
||||||
|
) {
|
||||||
|
// Overridden in custom.
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var stdClass|null $item */
|
||||||
|
$item = $subDefs->$subKey;
|
||||||
|
|
||||||
|
$logicDefs->$key ??= (object) [];
|
||||||
|
$logicDefs->$key->$name ??= (object) [];
|
||||||
|
|
||||||
|
$logicDefs->$key->$name->$subKey = $item !== null ?
|
||||||
|
ObjectUtil::clone($item) :
|
||||||
|
null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($dynamicLogic->options)) {
|
||||||
|
/** @var array<string, stdClass[]> $defs */
|
||||||
|
$defs = get_object_vars($dynamicLogic->options);
|
||||||
|
|
||||||
|
foreach ($defs as $name => $subDefs) {
|
||||||
|
if (
|
||||||
|
isset($customLogicDefs->options) &&
|
||||||
|
property_exists($customLogicDefs->options, $name)
|
||||||
|
) {
|
||||||
|
// Overridden in custom.
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$logicDefs->options ??= (object) [];
|
||||||
|
|
||||||
|
$logicDefs->options->$name = $subDefs !== null ?
|
||||||
|
array_map(fn ($it) => ObjectUtil::clone($it), $subDefs) :
|
||||||
|
null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -80,166 +80,6 @@
|
|||||||
"filterList": [
|
"filterList": [
|
||||||
"active"
|
"active"
|
||||||
],
|
],
|
||||||
"dynamicLogic": {
|
|
||||||
"fields": {
|
|
||||||
"targetLists": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "or",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "type",
|
|
||||||
"value": "Email"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "type",
|
|
||||||
"value": "Newsletter"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "type",
|
|
||||||
"value": "Informational Email"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "type",
|
|
||||||
"value": "Mail"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"excludingTargetLists": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "or",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "type",
|
|
||||||
"value": "Email"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "type",
|
|
||||||
"value": "Newsletter"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "type",
|
|
||||||
"value": "Informational Email"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "type",
|
|
||||||
"value": "Mail"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"contactsTemplate": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "type",
|
|
||||||
"value": "Mail"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"leadsTemplate": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "type",
|
|
||||||
"value": "Mail"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"accountsTemplate": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "type",
|
|
||||||
"value": "Mail"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"usersTemplate": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "type",
|
|
||||||
"value": "Mail"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"mailMergeOnlyWithAddress": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "type",
|
|
||||||
"value": "Mail"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"panels": {
|
|
||||||
"massEmails": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "in",
|
|
||||||
"attribute": "type",
|
|
||||||
"value": [
|
|
||||||
"Email",
|
|
||||||
"Newsletter",
|
|
||||||
"Informational Email"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"trackingUrls": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "in",
|
|
||||||
"attribute": "type",
|
|
||||||
"value": ["Email", "Newsletter"]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"mailMerge": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "in",
|
|
||||||
"attribute": "type",
|
|
||||||
"value": ["Mail"]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"boolFilterList": ["onlyMy"],
|
"boolFilterList": ["onlyMy"],
|
||||||
"iconClass": "fas fa-chart-line"
|
"iconClass": "fas fa-chart-line"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,49 +8,5 @@
|
|||||||
"defaultSidePanel": {
|
"defaultSidePanel": {
|
||||||
"edit": false,
|
"edit": false,
|
||||||
"editSmall": false
|
"editSmall": false
|
||||||
},
|
|
||||||
"dynamicLogic": {
|
|
||||||
"fields": {
|
|
||||||
"url": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "action",
|
|
||||||
"value": "Redirect"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"required": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "action",
|
|
||||||
"value": "Redirect"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"message": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "action",
|
|
||||||
"value": "Show Message"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"required": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "action",
|
|
||||||
"value": "Show Message"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -104,20 +104,6 @@
|
|||||||
"filter": "open"
|
"filter": "open"
|
||||||
},
|
},
|
||||||
"allowInternalNotes": true,
|
"allowInternalNotes": true,
|
||||||
"dynamicLogic": {
|
|
||||||
"fields": {
|
|
||||||
"number": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "id"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"additionalLayouts": {
|
"additionalLayouts": {
|
||||||
"detailPortal": {
|
"detailPortal": {
|
||||||
"type": "detail"
|
"type": "detail"
|
||||||
|
|||||||
@@ -98,33 +98,6 @@
|
|||||||
"filterList": [
|
"filterList": [
|
||||||
"portalUsers"
|
"portalUsers"
|
||||||
],
|
],
|
||||||
"dynamicLogic": {
|
|
||||||
"fields": {
|
|
||||||
"title": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "accountId"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"portalUser": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "portalUserId",
|
|
||||||
"data": {
|
|
||||||
"field": "portalUser"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"color": "#a4c5e0",
|
"color": "#a4c5e0",
|
||||||
"iconClass": "fas fa-id-badge"
|
"iconClass": "fas fa-id-badge"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,65 +28,6 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dynamicLogic": {
|
|
||||||
"fields": {
|
|
||||||
"status": {
|
|
||||||
"readOnly": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "and",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"type": "or",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "status",
|
|
||||||
"value": "Complete"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "status",
|
|
||||||
"value": "In Process"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "status",
|
|
||||||
"value": "Failed"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "id"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"options": {
|
|
||||||
"status": [
|
|
||||||
{
|
|
||||||
"optionList": [
|
|
||||||
"Draft",
|
|
||||||
"Pending"
|
|
||||||
],
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "in",
|
|
||||||
"attribute": "status",
|
|
||||||
"value": [
|
|
||||||
"Draft",
|
|
||||||
"Pending"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"filterList": [
|
"filterList": [
|
||||||
{
|
{
|
||||||
"name":"actual"
|
"name":"actual"
|
||||||
|
|||||||
@@ -99,21 +99,6 @@
|
|||||||
"selectHandler": "handlers/select-related/same-account-many"
|
"selectHandler": "handlers/select-related/same-account-many"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dynamicLogic": {
|
|
||||||
"fields": {
|
|
||||||
"lastStage": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "stage",
|
|
||||||
"value": "Closed Lost"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"color": "#9fc77e",
|
"color": "#9fc77e",
|
||||||
"iconClass": "fas fa-dollar-sign"
|
"iconClass": "fas fa-dollar-sign"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,29 +88,5 @@
|
|||||||
"massSelect": true
|
"massSelect": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dynamicLogic": {
|
|
||||||
"fields": {
|
|
||||||
"entryCount": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "id"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"optedOutCount": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "id"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"iconClass":"fas fa-crosshairs"
|
"iconClass":"fas fa-crosshairs"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,21 +46,6 @@
|
|||||||
"checkVisibilityFunction": "isCompleteAvailable"
|
"checkVisibilityFunction": "isCompleteAvailable"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"dynamicLogic": {
|
|
||||||
"fields": {
|
|
||||||
"dateCompleted": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "status",
|
|
||||||
"value": "Completed"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"filterList": [
|
"filterList": [
|
||||||
"actual",
|
"actual",
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,160 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"targetLists": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "or",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "type",
|
||||||
|
"value": "Email"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "type",
|
||||||
|
"value": "Newsletter"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "type",
|
||||||
|
"value": "Informational Email"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "type",
|
||||||
|
"value": "Mail"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"excludingTargetLists": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "or",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "type",
|
||||||
|
"value": "Email"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "type",
|
||||||
|
"value": "Newsletter"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "type",
|
||||||
|
"value": "Informational Email"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "type",
|
||||||
|
"value": "Mail"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"contactsTemplate": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "type",
|
||||||
|
"value": "Mail"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"leadsTemplate": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "type",
|
||||||
|
"value": "Mail"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"accountsTemplate": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "type",
|
||||||
|
"value": "Mail"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"usersTemplate": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "type",
|
||||||
|
"value": "Mail"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mailMergeOnlyWithAddress": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "type",
|
||||||
|
"value": "Mail"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"panels": {
|
||||||
|
"massEmails": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "in",
|
||||||
|
"attribute": "type",
|
||||||
|
"value": [
|
||||||
|
"Email",
|
||||||
|
"Newsletter",
|
||||||
|
"Informational Email"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"trackingUrls": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "in",
|
||||||
|
"attribute": "type",
|
||||||
|
"value": ["Email", "Newsletter"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mailMerge": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "in",
|
||||||
|
"attribute": "type",
|
||||||
|
"value": ["Mail"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"url": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "action",
|
||||||
|
"value": "Redirect"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"required": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "action",
|
||||||
|
"value": "Redirect"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "action",
|
||||||
|
"value": "Show Message"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"required": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "action",
|
||||||
|
"value": "Show Message"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"number": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "id"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"title": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "accountId"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"portalUser": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "portalUserId",
|
||||||
|
"data": {
|
||||||
|
"field": "portalUser"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"status": {
|
||||||
|
"readOnly": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "and",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"type": "or",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "status",
|
||||||
|
"value": "Complete"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "status",
|
||||||
|
"value": "In Process"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "status",
|
||||||
|
"value": "Failed"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "id"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"status": [
|
||||||
|
{
|
||||||
|
"optionList": [
|
||||||
|
"Draft",
|
||||||
|
"Pending"
|
||||||
|
],
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "in",
|
||||||
|
"attribute": "status",
|
||||||
|
"value": [
|
||||||
|
"Draft",
|
||||||
|
"Pending"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"lastStage": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "stage",
|
||||||
|
"value": "Closed Lost"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"entryCount": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "id"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"optedOutCount": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "id"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"dateCompleted": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "status",
|
||||||
|
"value": "Completed"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -51,6 +51,7 @@
|
|||||||
"Espo\\Core\\Utils\\Metadata\\AdditionalBuilder\\Fields",
|
"Espo\\Core\\Utils\\Metadata\\AdditionalBuilder\\Fields",
|
||||||
"Espo\\Core\\Utils\\Metadata\\AdditionalBuilder\\FilterFields",
|
"Espo\\Core\\Utils\\Metadata\\AdditionalBuilder\\FilterFields",
|
||||||
"Espo\\Core\\Utils\\Metadata\\AdditionalBuilder\\DeleteIdField",
|
"Espo\\Core\\Utils\\Metadata\\AdditionalBuilder\\DeleteIdField",
|
||||||
"Espo\\Core\\Utils\\Metadata\\AdditionalBuilder\\StreamUpdatedAtField"
|
"Espo\\Core\\Utils\\Metadata\\AdditionalBuilder\\StreamUpdatedAtField",
|
||||||
|
"Espo\\Core\\Utils\\Metadata\\AdditionalBuilder\\LogicDefsBc"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -123,84 +123,6 @@
|
|||||||
"selectHandler": "handlers/email/select-user"
|
"selectHandler": "handlers/email/select-user"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dynamicLogic":{
|
|
||||||
"fields": {
|
|
||||||
"replied": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "repliedId",
|
|
||||||
"data": {
|
|
||||||
"field": "replied"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"replies": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "repliesIds",
|
|
||||||
"data": {
|
|
||||||
"field": "replies"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"folderString": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "or",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"type": "and",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "isUsers"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "groupFolderId"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"sendAt": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "in",
|
|
||||||
"attribute": "status",
|
|
||||||
"value": ["Draft"]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"panels": {
|
|
||||||
"event": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "icsEventDateStart"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"filterList":[
|
"filterList":[
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -35,55 +35,6 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dynamicLogic": {
|
|
||||||
"fields": {
|
|
||||||
"smtpUsername": {
|
|
||||||
"required": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "and",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "useSmtp"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "smtpAuth"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"fetchSince": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "useImap"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"readOnly": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "fetchData"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"required": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "useImap"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"filterList": [
|
"filterList": [
|
||||||
{
|
{
|
||||||
"name": "active"
|
"name": "active"
|
||||||
|
|||||||
@@ -23,137 +23,5 @@
|
|||||||
},
|
},
|
||||||
"boolFilterList": [
|
"boolFilterList": [
|
||||||
"onlyMy"
|
"onlyMy"
|
||||||
],
|
]
|
||||||
"dynamicLogic": {
|
|
||||||
"fields": {
|
|
||||||
"parent": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"attribute": "isGlobal",
|
|
||||||
"type": "isFalse"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"required": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"attribute": "isGlobal",
|
|
||||||
"type": "isFalse"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"emailFolder": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"attribute": "action",
|
|
||||||
"type": "equals",
|
|
||||||
"value": "Move to Folder"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"required": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"attribute": "action",
|
|
||||||
"type": "equals",
|
|
||||||
"value": "Move to Folder"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"groupEmailFolder": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"attribute": "action",
|
|
||||||
"type": "equals",
|
|
||||||
"value": "Move to Group Folder"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"required": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"attribute": "action",
|
|
||||||
"type": "equals",
|
|
||||||
"value": "Move to Group Folder"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"markAsRead": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"attribute": "parentType",
|
|
||||||
"type": "equals",
|
|
||||||
"value": "User"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"skipNotification": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"attribute": "parentType",
|
|
||||||
"type": "equals",
|
|
||||||
"value": "User"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"options": {
|
|
||||||
"action": [
|
|
||||||
{
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"attribute": "isGlobal",
|
|
||||||
"type": "isTrue"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"optionList": [
|
|
||||||
"Skip"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"attribute": "parentType",
|
|
||||||
"type": "equals",
|
|
||||||
"value": "User"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"optionList": [
|
|
||||||
"Skip",
|
|
||||||
"Move to Folder",
|
|
||||||
"None"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"attribute": "parentType",
|
|
||||||
"type": "equals",
|
|
||||||
"value": "InboundEmail"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"optionList": [
|
|
||||||
"Skip",
|
|
||||||
"Move to Group Folder"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"conditionGroup": [],
|
|
||||||
"optionList": [
|
|
||||||
"Skip"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,65 +29,6 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dynamicLogic": {
|
|
||||||
"fields": {
|
|
||||||
"smtpUsername": {
|
|
||||||
"required": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "and",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "useSmtp"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "smtpAuth"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"fetchSince": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "useImap"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"readOnly": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "fetchData"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"required": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "useImap"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"isSystem": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "id"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"searchPanelDisabled": true,
|
"searchPanelDisabled": true,
|
||||||
"relationshipPanels": {
|
"relationshipPanels": {
|
||||||
"filters": {
|
"filters": {
|
||||||
|
|||||||
@@ -5,243 +5,6 @@
|
|||||||
"detail": "views/lead-capture/record/detail",
|
"detail": "views/lead-capture/record/detail",
|
||||||
"list": "views/lead-capture/record/list"
|
"list": "views/lead-capture/record/list"
|
||||||
},
|
},
|
||||||
"dynamicLogic": {
|
|
||||||
"fields": {
|
|
||||||
"targetList": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "subscribeToTargetList"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"required": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "subscribeToTargetList"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"subscribeContactToTargetList": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "subscribeToTargetList"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"optInConfirmationLifetime": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "optInConfirmation"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"required": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "optInConfirmation"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"optInConfirmationSuccessMessage": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "optInConfirmation"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"createLeadBeforeOptInConfirmation": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "optInConfirmation"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"smtpAccount": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "optInConfirmation"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"skipOptInConfirmationIfSubscribed": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "and",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "optInConfirmation"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "targetListId",
|
|
||||||
"data": {
|
|
||||||
"field": "targetList"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"optInConfirmationEmailTemplate": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "optInConfirmation"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"required": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "optInConfirmation"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"apiKey": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "id"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"phoneNumberCountry": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "contains",
|
|
||||||
"attribute": "fieldList",
|
|
||||||
"value": "phoneNumber"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"formSuccessText": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "formEnabled"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"formTitle": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "formEnabled"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"formTheme": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "formEnabled"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"formText": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "formEnabled"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"formSuccessRedirectUrl": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "formEnabled"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"formLanguage": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "formEnabled"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"formFrameAncestors": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "formEnabled"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"formCaptcha": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "formEnabled"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"panels": {
|
|
||||||
"form": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "id"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "formEnabled"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"sidePanels": {
|
"sidePanels": {
|
||||||
"detail": [
|
"detail": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,59 +6,5 @@
|
|||||||
"selectDisabled": true,
|
"selectDisabled": true,
|
||||||
"unlinkDisabled": true
|
"unlinkDisabled": true
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"dynamicLogic": {
|
|
||||||
"fields": {
|
|
||||||
"authorizationRedirectUri": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "id"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"clientId": {
|
|
||||||
"required": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "isActive"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"clientSecret": {
|
|
||||||
"required": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "isActive"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"authorizationEndpoint": {
|
|
||||||
"required": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "isActive"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"tokenEndpoint": {
|
|
||||||
"required": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "isActive"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,19 +6,5 @@
|
|||||||
"edit": "views/preferences/edit"
|
"edit": "views/preferences/edit"
|
||||||
},
|
},
|
||||||
"acl": "acl/preferences",
|
"acl": "acl/preferences",
|
||||||
"aclPortal": "acl-portal/preferences",
|
"aclPortal": "acl-portal/preferences"
|
||||||
"dynamicLogic": {
|
|
||||||
"fields": {
|
|
||||||
"assignmentEmailNotificationsIgnoreEntityTypeList": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "receiveAssignmentEmailNotifications"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,109 +5,5 @@
|
|||||||
"edit": "views/template/record/edit"
|
"edit": "views/template/record/edit"
|
||||||
},
|
},
|
||||||
"mergeDisabled": true,
|
"mergeDisabled": true,
|
||||||
"dynamicLogic": {
|
|
||||||
"fields": {
|
|
||||||
"entityType": {
|
|
||||||
"readOnly": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "id"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"footer": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "printFooter"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"footerPosition": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "printFooter"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"header": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "printHeader"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"headerPosition": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "printHeader"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "entityType"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"pageWidth": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "pageFormat",
|
|
||||||
"value": "Custom"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"required": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "pageFormat",
|
|
||||||
"value": "Custom"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"pageHeight": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "pageFormat",
|
|
||||||
"value": "Custom"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"required": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "pageFormat",
|
|
||||||
"value": "Custom"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"iconClass": "fas fa-file-pdf"
|
"iconClass": "fas fa-file-pdf"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -122,49 +122,5 @@
|
|||||||
"selectRecords": {
|
"selectRecords": {
|
||||||
"orderBy": "userNameOwnFirst"
|
"orderBy": "userNameOwnFirst"
|
||||||
},
|
},
|
||||||
"iconClass": "fas fa-user-circle",
|
"iconClass": "fas fa-user-circle"
|
||||||
"dynamicLogic": {
|
|
||||||
"fields": {
|
|
||||||
"avatarColor": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "avatarId",
|
|
||||||
"value": null,
|
|
||||||
"data": {
|
|
||||||
"field": "avatar"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "in",
|
|
||||||
"attribute": "type",
|
|
||||||
"value": [
|
|
||||||
"regular",
|
|
||||||
"admin",
|
|
||||||
"api"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"options": {
|
|
||||||
"authMethod": [
|
|
||||||
{
|
|
||||||
"optionList": [
|
|
||||||
"ApiKey",
|
|
||||||
"Hmac"
|
|
||||||
],
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "type",
|
|
||||||
"value": "api"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,29 +14,5 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"dynamicLogic": {
|
|
||||||
"fields": {
|
|
||||||
"event": {
|
|
||||||
"readOnly": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "id"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"secretKey": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "id"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,89 +15,5 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"dynamicLogic": {
|
|
||||||
"fields": {
|
|
||||||
"weekday0TimeRanges": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "weekday0"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"weekday1TimeRanges": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "weekday1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"weekday2TimeRanges": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "weekday2"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"weekday3TimeRanges": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "weekday3"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"weekday4TimeRanges": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "weekday4"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"weekday5TimeRanges": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "weekday5"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"weekday6TimeRanges": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isTrue",
|
|
||||||
"attribute": "weekday6"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"teams": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "teamsIds"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,44 +16,6 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dynamicLogic": {
|
|
||||||
"fields": {
|
|
||||||
"timeRanges": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "equals",
|
|
||||||
"attribute": "type",
|
|
||||||
"value": "Working"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"users": {
|
|
||||||
"visible": {
|
|
||||||
"conditionGroup": [
|
|
||||||
{
|
|
||||||
"type": "or",
|
|
||||||
"value": [
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "id"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "isNotEmpty",
|
|
||||||
"attribute": "usersIds"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "isEmpty",
|
|
||||||
"attribute": "calendarsIds"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"filterList": [
|
"filterList": [
|
||||||
"actual"
|
"actual"
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"replied": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "repliedId",
|
||||||
|
"data": {
|
||||||
|
"field": "replied"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"replies": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "repliesIds",
|
||||||
|
"data": {
|
||||||
|
"field": "replies"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"folderString": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "or",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"type": "and",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "isUsers"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "groupFolderId"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sendAt": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "in",
|
||||||
|
"attribute": "status",
|
||||||
|
"value": ["Draft"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"panels": {
|
||||||
|
"event": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "icsEventDateStart"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"smtpUsername": {
|
||||||
|
"required": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "and",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "useSmtp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "smtpAuth"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fetchSince": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "useImap"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"readOnly": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "fetchData"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"required": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "useImap"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,132 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"parent": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"attribute": "isGlobal",
|
||||||
|
"type": "isFalse"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"required": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"attribute": "isGlobal",
|
||||||
|
"type": "isFalse"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"emailFolder": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"attribute": "action",
|
||||||
|
"type": "equals",
|
||||||
|
"value": "Move to Folder"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"required": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"attribute": "action",
|
||||||
|
"type": "equals",
|
||||||
|
"value": "Move to Folder"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"groupEmailFolder": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"attribute": "action",
|
||||||
|
"type": "equals",
|
||||||
|
"value": "Move to Group Folder"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"required": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"attribute": "action",
|
||||||
|
"type": "equals",
|
||||||
|
"value": "Move to Group Folder"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"markAsRead": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"attribute": "parentType",
|
||||||
|
"type": "equals",
|
||||||
|
"value": "User"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"skipNotification": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"attribute": "parentType",
|
||||||
|
"type": "equals",
|
||||||
|
"value": "User"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"action": [
|
||||||
|
{
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"attribute": "isGlobal",
|
||||||
|
"type": "isTrue"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"optionList": [
|
||||||
|
"Skip"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"attribute": "parentType",
|
||||||
|
"type": "equals",
|
||||||
|
"value": "User"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"optionList": [
|
||||||
|
"Skip",
|
||||||
|
"Move to Folder",
|
||||||
|
"None"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"attribute": "parentType",
|
||||||
|
"type": "equals",
|
||||||
|
"value": "InboundEmail"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"optionList": [
|
||||||
|
"Skip",
|
||||||
|
"Move to Group Folder"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"conditionGroup": [],
|
||||||
|
"optionList": [
|
||||||
|
"Skip"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"smtpUsername": {
|
||||||
|
"required": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "and",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "useSmtp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "smtpAuth"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fetchSince": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "useImap"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"readOnly": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "fetchData"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"required": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "useImap"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"isSystem": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "id"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,237 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"targetList": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "subscribeToTargetList"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"required": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "subscribeToTargetList"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"subscribeContactToTargetList": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "subscribeToTargetList"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"optInConfirmationLifetime": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "optInConfirmation"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"required": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "optInConfirmation"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"optInConfirmationSuccessMessage": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "optInConfirmation"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"createLeadBeforeOptInConfirmation": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "optInConfirmation"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"smtpAccount": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "optInConfirmation"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"skipOptInConfirmationIfSubscribed": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "and",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "optInConfirmation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "targetListId",
|
||||||
|
"data": {
|
||||||
|
"field": "targetList"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"optInConfirmationEmailTemplate": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "optInConfirmation"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"required": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "optInConfirmation"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"apiKey": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "id"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"phoneNumberCountry": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "contains",
|
||||||
|
"attribute": "fieldList",
|
||||||
|
"value": "phoneNumber"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"formSuccessText": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "formEnabled"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"formTitle": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "formEnabled"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"formTheme": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "formEnabled"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"formText": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "formEnabled"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"formSuccessRedirectUrl": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "formEnabled"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"formLanguage": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "formEnabled"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"formFrameAncestors": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "formEnabled"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"formCaptcha": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "formEnabled"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"panels": {
|
||||||
|
"form": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "id"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "formEnabled"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"authorizationRedirectUri": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "id"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"clientId": {
|
||||||
|
"required": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "isActive"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"clientSecret": {
|
||||||
|
"required": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "isActive"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"authorizationEndpoint": {
|
||||||
|
"required": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "isActive"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tokenEndpoint": {
|
||||||
|
"required": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "isActive"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"assignmentEmailNotificationsIgnoreEntityTypeList": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "receiveAssignmentEmailNotifications"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,104 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"entityType": {
|
||||||
|
"readOnly": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "id"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"footer": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "printFooter"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"footerPosition": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "printFooter"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"header": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "printHeader"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"headerPosition": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "printHeader"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"body": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "entityType"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pageWidth": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "pageFormat",
|
||||||
|
"value": "Custom"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"required": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "pageFormat",
|
||||||
|
"value": "Custom"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pageHeight": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "pageFormat",
|
||||||
|
"value": "Custom"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"required": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "pageFormat",
|
||||||
|
"value": "Custom"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"avatarColor": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "avatarId",
|
||||||
|
"value": null,
|
||||||
|
"data": {
|
||||||
|
"field": "avatar"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "in",
|
||||||
|
"attribute": "type",
|
||||||
|
"value": [
|
||||||
|
"regular",
|
||||||
|
"admin",
|
||||||
|
"api"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"authMethod": [
|
||||||
|
{
|
||||||
|
"optionList": [
|
||||||
|
"ApiKey",
|
||||||
|
"Hmac"
|
||||||
|
],
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "type",
|
||||||
|
"value": "api"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"event": {
|
||||||
|
"readOnly": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "id"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"secretKey": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "id"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"weekday0TimeRanges": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "weekday0"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"weekday1TimeRanges": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "weekday1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"weekday2TimeRanges": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "weekday2"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"weekday3TimeRanges": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "weekday3"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"weekday4TimeRanges": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "weekday4"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"weekday5TimeRanges": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "weekday5"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"weekday6TimeRanges": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isTrue",
|
||||||
|
"attribute": "weekday6"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"teams": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "teamsIds"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"timeRanges": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "equals",
|
||||||
|
"attribute": "type",
|
||||||
|
"value": "Working"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"users": {
|
||||||
|
"visible": {
|
||||||
|
"conditionGroup": [
|
||||||
|
{
|
||||||
|
"type": "or",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "id"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "isNotEmpty",
|
||||||
|
"attribute": "usersIds"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "isEmpty",
|
||||||
|
"attribute": "calendarsIds"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -92,6 +92,7 @@ class MetadataService
|
|||||||
unset($data->clientDefs->$scope);
|
unset($data->clientDefs->$scope);
|
||||||
unset($data->entityAcl->$scope);
|
unset($data->entityAcl->$scope);
|
||||||
unset($data->scopes->$scope);
|
unset($data->scopes->$scope);
|
||||||
|
unset($data->logicDefs->$scope);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -50,4 +50,6 @@ class MetadataType
|
|||||||
public const PDF_DEFS = 'pdfDefs';
|
public const PDF_DEFS = 'pdfDefs';
|
||||||
|
|
||||||
public const FORMULA = 'formula';
|
public const FORMULA = 'formula';
|
||||||
|
|
||||||
|
public const LOGIC_DEFS = 'logicDefs';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ class Renamer
|
|||||||
MetadataType::RECORD_DEFS,
|
MetadataType::RECORD_DEFS,
|
||||||
MetadataType::SCOPES,
|
MetadataType::SCOPES,
|
||||||
MetadataType::SELECT_DEFS,
|
MetadataType::SELECT_DEFS,
|
||||||
|
MetadataType::LOGIC_DEFS,
|
||||||
];
|
];
|
||||||
|
|
||||||
private NameUtil $nameUtil;
|
private NameUtil $nameUtil;
|
||||||
|
|||||||
@@ -300,106 +300,95 @@ class FieldManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
$metadataToBeSaved = false;
|
$metadataToBeSaved = false;
|
||||||
$clientDefsToBeSet = false;
|
$logicDefsToBeSet = false;
|
||||||
|
|
||||||
$clientDefs = [];
|
$logicDefs = [];
|
||||||
|
|
||||||
if (array_key_exists('dynamicLogicVisible', $fieldDefs)) {
|
if (array_key_exists('dynamicLogicVisible', $fieldDefs)) {
|
||||||
if (!is_null($fieldDefs['dynamicLogicVisible'])) {
|
if (!is_null($fieldDefs['dynamicLogicVisible'])) {
|
||||||
$this->prepareClientDefsFieldsDynamicLogic($clientDefs, $name);
|
$this->prepareLogicDefsFields($logicDefs, $name);
|
||||||
|
|
||||||
$clientDefs['dynamicLogic']['fields'][$name]['visible'] = $fieldDefs['dynamicLogicVisible'];
|
$logicDefs['fields'][$name]['visible'] = $fieldDefs['dynamicLogicVisible'];
|
||||||
|
|
||||||
$clientDefsToBeSet = true;
|
$logicDefsToBeSet = true;
|
||||||
} else {
|
} else if ($this->metadata->get(['logicDefs', $scope, 'fields', $name, 'visible'])) {
|
||||||
if (
|
$this->prepareLogicDefsFields($logicDefs, $name);
|
||||||
$this->metadata->get(['clientDefs', $scope, 'dynamicLogic', 'fields', $name, 'visible'])
|
|
||||||
) {
|
|
||||||
$this->prepareClientDefsFieldsDynamicLogic($clientDefs, $name);
|
|
||||||
|
|
||||||
$clientDefs['dynamicLogic']['fields'][$name]['visible'] = null;
|
$logicDefs['fields'][$name]['visible'] = null;
|
||||||
$clientDefsToBeSet = true;
|
$logicDefsToBeSet = true;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (array_key_exists('dynamicLogicReadOnly', $fieldDefs)) {
|
if (array_key_exists('dynamicLogicReadOnly', $fieldDefs)) {
|
||||||
if (!is_null($fieldDefs['dynamicLogicReadOnly'])) {
|
if (!is_null($fieldDefs['dynamicLogicReadOnly'])) {
|
||||||
$this->prepareClientDefsFieldsDynamicLogic($clientDefs, $name);
|
$this->prepareLogicDefsFields($logicDefs, $name);
|
||||||
|
|
||||||
$clientDefs['dynamicLogic']['fields'][$name]['readOnly'] = $fieldDefs['dynamicLogicReadOnly'];
|
$logicDefs['fields'][$name]['readOnly'] = $fieldDefs['dynamicLogicReadOnly'];
|
||||||
$clientDefsToBeSet = true;
|
$logicDefsToBeSet = true;
|
||||||
} else {
|
} else if ($this->metadata->get(['logicDefs', $scope, 'fields', $name, 'readOnly'])) {
|
||||||
if (
|
$this->prepareLogicDefsFields($logicDefs, $name);
|
||||||
$this->metadata->get(['clientDefs', $scope, 'dynamicLogic', 'fields', $name, 'readOnly'])
|
|
||||||
) {
|
|
||||||
$this->prepareClientDefsFieldsDynamicLogic($clientDefs, $name);
|
|
||||||
|
|
||||||
$clientDefs['dynamicLogic']['fields'][$name]['readOnly'] = null;
|
$logicDefs['fields'][$name]['readOnly'] = null;
|
||||||
|
|
||||||
$clientDefsToBeSet = true;
|
$logicDefsToBeSet = true;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (array_key_exists('dynamicLogicRequired', $fieldDefs)) {
|
if (array_key_exists('dynamicLogicRequired', $fieldDefs)) {
|
||||||
if (!is_null($fieldDefs['dynamicLogicRequired'])) {
|
if (!is_null($fieldDefs['dynamicLogicRequired'])) {
|
||||||
$this->prepareClientDefsFieldsDynamicLogic($clientDefs, $name);
|
$this->prepareLogicDefsFields($logicDefs, $name);
|
||||||
|
|
||||||
$clientDefs['dynamicLogic']['fields'][$name]['required'] = $fieldDefs['dynamicLogicRequired'];
|
$logicDefs['fields'][$name]['required'] = $fieldDefs['dynamicLogicRequired'];
|
||||||
$clientDefsToBeSet = true;
|
$logicDefsToBeSet = true;
|
||||||
} else {
|
} else if ($this->metadata->get(['logicDefs', $scope, 'fields', $name, 'required'])) {
|
||||||
if (
|
$this->prepareLogicDefsFields($logicDefs, $name);
|
||||||
$this->metadata->get(['clientDefs', $scope, 'dynamicLogic', 'fields', $name, 'required'])
|
|
||||||
) {
|
|
||||||
$this->prepareClientDefsFieldsDynamicLogic($clientDefs, $name);
|
|
||||||
|
|
||||||
$clientDefs['dynamicLogic']['fields'][$name]['required'] = null;
|
$logicDefs['fields'][$name]['required'] = null;
|
||||||
|
|
||||||
$clientDefsToBeSet = true;
|
$logicDefsToBeSet = true;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (array_key_exists('dynamicLogicOptions', $fieldDefs)) {
|
if (array_key_exists('dynamicLogicOptions', $fieldDefs)) {
|
||||||
if (!is_null($fieldDefs['dynamicLogicOptions'])) {
|
if (!is_null($fieldDefs['dynamicLogicOptions'])) {
|
||||||
$this->prepareClientDefsOptionsDynamicLogic($clientDefs, $name);
|
$this->prepareLogicDefsOptions($logicDefs, $name);
|
||||||
|
|
||||||
$clientDefs['dynamicLogic']['options'][$name] = $fieldDefs['dynamicLogicOptions'];
|
$logicDefs['options'][$name] = $fieldDefs['dynamicLogicOptions'];
|
||||||
|
|
||||||
$clientDefsToBeSet = true;
|
$logicDefsToBeSet = true;
|
||||||
} else {
|
} else {
|
||||||
if ($this->metadata->get(['clientDefs', $scope, 'dynamicLogic', 'options', $name])) {
|
if ($this->metadata->get(['logicDefs', $scope, 'options', $name])) {
|
||||||
$this->prepareClientDefsOptionsDynamicLogic($clientDefs, $name);
|
$this->prepareLogicDefsOptions($logicDefs, $name);
|
||||||
|
|
||||||
$clientDefs['dynamicLogic']['options'][$name] = null;
|
$logicDefs['options'][$name] = null;
|
||||||
|
|
||||||
$clientDefsToBeSet = true;
|
$logicDefsToBeSet = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (array_key_exists('dynamicLogicInvalid', $fieldDefs)) {
|
if (array_key_exists('dynamicLogicInvalid', $fieldDefs)) {
|
||||||
if (!is_null($fieldDefs['dynamicLogicInvalid'])) {
|
if (!is_null($fieldDefs['dynamicLogicInvalid'])) {
|
||||||
$this->prepareClientDefsFieldsDynamicLogic($clientDefs, $name);
|
$this->prepareLogicDefsFields($logicDefs, $name);
|
||||||
|
|
||||||
$clientDefs['dynamicLogic']['fields'][$name]['invalid'] = $fieldDefs['dynamicLogicInvalid'];
|
$logicDefs['fields'][$name]['invalid'] = $fieldDefs['dynamicLogicInvalid'];
|
||||||
$clientDefsToBeSet = true;
|
|
||||||
|
$logicDefsToBeSet = true;
|
||||||
} else {
|
} else {
|
||||||
if (
|
if (
|
||||||
$this->metadata->get(['clientDefs', $scope, 'dynamicLogic', 'fields', $name, 'invalid'])
|
$this->metadata->get(['logicDefs', $scope, 'fields', $name, 'invalid'])
|
||||||
) {
|
) {
|
||||||
$this->prepareClientDefsFieldsDynamicLogic($clientDefs, $name);
|
$this->prepareLogicDefsFields($logicDefs, $name);
|
||||||
|
|
||||||
$clientDefs['dynamicLogic']['fields'][$name]['invalid'] = null;
|
$logicDefs['fields'][$name]['invalid'] = null;
|
||||||
|
|
||||||
$clientDefsToBeSet = true;
|
$logicDefsToBeSet = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($clientDefsToBeSet) {
|
if ($logicDefsToBeSet) {
|
||||||
$this->metadata->set('clientDefs', $scope, $clientDefs);
|
$this->metadata->set('logicDefs', $scope, $logicDefs);
|
||||||
|
|
||||||
$metadataToBeSaved = true;
|
$metadataToBeSaved = true;
|
||||||
}
|
}
|
||||||
@@ -424,41 +413,21 @@ class FieldManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array<string, mixed> $clientDefs
|
* @param array<string, mixed> $logicDefs
|
||||||
* @param string $name
|
|
||||||
*/
|
*/
|
||||||
private function prepareClientDefsFieldsDynamicLogic(&$clientDefs, $name): void
|
private function prepareLogicDefsFields(array &$logicDefs, string $name): void
|
||||||
{
|
{
|
||||||
if (!array_key_exists('dynamicLogic', $clientDefs)) {
|
$logicDefs['fields'] ??= [];
|
||||||
$clientDefs['dynamicLogic'] = [];
|
$logicDefs['fields'][$name] ??= [];
|
||||||
}
|
|
||||||
|
|
||||||
if (!array_key_exists('fields', $clientDefs['dynamicLogic'])) {
|
|
||||||
$clientDefs['dynamicLogic']['fields'] = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!array_key_exists($name, $clientDefs['dynamicLogic']['fields'])) {
|
|
||||||
$clientDefs['dynamicLogic']['fields'][$name] = [];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array<string, mixed> $clientDefs
|
* @param array<string, mixed> $logicDefs
|
||||||
* @param string $name
|
|
||||||
*/
|
*/
|
||||||
private function prepareClientDefsOptionsDynamicLogic(&$clientDefs, $name): void
|
private function prepareLogicDefsOptions(array &$logicDefs, string $name): void
|
||||||
{
|
{
|
||||||
if (!array_key_exists('dynamicLogic', $clientDefs)) {
|
$logicDefs['options'] ??= [];
|
||||||
$clientDefs['dynamicLogic'] = [];
|
$logicDefs['options'][$name] ??= [];
|
||||||
}
|
|
||||||
|
|
||||||
if (!array_key_exists('options', $clientDefs['dynamicLogic'])) {
|
|
||||||
$clientDefs['dynamicLogic']['options'] = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!array_key_exists($name, $clientDefs['dynamicLogic']['options'])) {
|
|
||||||
$clientDefs['dynamicLogic']['options'][$name] = [];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -511,9 +480,9 @@ class FieldManager
|
|||||||
|
|
||||||
$this->metadata->delete('entityDefs', $scope, $unsets);
|
$this->metadata->delete('entityDefs', $scope, $unsets);
|
||||||
|
|
||||||
$this->metadata->delete('clientDefs', $scope, [
|
$this->metadata->delete('logicDefs', $scope, [
|
||||||
"dynamicLogic.fields.$name",
|
"fields.$name",
|
||||||
"dynamicLogic.options.$name",
|
"options.$name",
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->metadata->save();
|
$this->metadata->save();
|
||||||
@@ -558,9 +527,9 @@ class FieldManager
|
|||||||
|
|
||||||
$this->metadata->delete('entityDefs', $scope, ['fields.' . $name]);
|
$this->metadata->delete('entityDefs', $scope, ['fields.' . $name]);
|
||||||
|
|
||||||
$this->metadata->delete('clientDefs', $scope, [
|
$this->metadata->delete('logicDefs', $scope, [
|
||||||
'dynamicLogic.fields.' . $name,
|
"fields.$name",
|
||||||
'dynamicLogic.options.' . $name,
|
"options.$name",
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->metadata->save();
|
$this->metadata->save();
|
||||||
|
|||||||
@@ -451,8 +451,8 @@ class FieldManagerEditView extends View {
|
|||||||
const promiseList = [];
|
const promiseList = [];
|
||||||
|
|
||||||
if (!defs.dynamicLogicVisibleDisabled) {
|
if (!defs.dynamicLogicVisibleDisabled) {
|
||||||
const isVisible = this.getMetadata()
|
const isVisible =
|
||||||
.get(['clientDefs', this.scope, 'dynamicLogic', 'fields', this.field, 'visible']);
|
this.getMetadata().get(['logicDefs', this.scope, 'fields', this.field, 'visible']);
|
||||||
|
|
||||||
this.model.set(
|
this.model.set(
|
||||||
'dynamicLogicVisible',
|
'dynamicLogicVisible',
|
||||||
@@ -472,8 +472,8 @@ class FieldManagerEditView extends View {
|
|||||||
const readOnly = this.getMetadata().get(['fields', this.type, 'readOnly']);
|
const readOnly = this.getMetadata().get(['fields', this.type, 'readOnly']);
|
||||||
|
|
||||||
if (!defs.dynamicLogicRequiredDisabled && !readOnly && hasRequired) {
|
if (!defs.dynamicLogicRequiredDisabled && !readOnly && hasRequired) {
|
||||||
const dynamicLogicRequired = this.getMetadata()
|
const dynamicLogicRequired =
|
||||||
.get(['clientDefs', this.scope, 'dynamicLogic', 'fields', this.field, 'required']);
|
this.getMetadata().get(['logicDefs', this.scope, 'fields', this.field, 'required']);
|
||||||
|
|
||||||
this.model.set('dynamicLogicRequired', dynamicLogicRequired);
|
this.model.set('dynamicLogicRequired', dynamicLogicRequired);
|
||||||
|
|
||||||
@@ -489,7 +489,7 @@ class FieldManagerEditView extends View {
|
|||||||
|
|
||||||
if (!defs.dynamicLogicReadOnlyDisabled && !readOnly) {
|
if (!defs.dynamicLogicReadOnlyDisabled && !readOnly) {
|
||||||
const dynamicLogicReadOnly = this.getMetadata()
|
const dynamicLogicReadOnly = this.getMetadata()
|
||||||
.get(['clientDefs', this.scope, 'dynamicLogic', 'fields', this.field, 'readOnly']);
|
.get(['logicDefs', this.scope, 'fields', this.field, 'readOnly']);
|
||||||
|
|
||||||
this.model.set('dynamicLogicReadOnly', dynamicLogicReadOnly);
|
this.model.set('dynamicLogicReadOnly', dynamicLogicReadOnly);
|
||||||
|
|
||||||
@@ -506,8 +506,8 @@ class FieldManagerEditView extends View {
|
|||||||
const typeDynamicLogicOptions = this.getMetadata().get(['fields', this.type, 'dynamicLogicOptions']);
|
const typeDynamicLogicOptions = this.getMetadata().get(['fields', this.type, 'dynamicLogicOptions']);
|
||||||
|
|
||||||
if (typeDynamicLogicOptions && !defs.dynamicLogicOptionsDisabled) {
|
if (typeDynamicLogicOptions && !defs.dynamicLogicOptionsDisabled) {
|
||||||
const dynamicLogicOptions = this.getMetadata()
|
const dynamicLogicOptions =
|
||||||
.get(['clientDefs', this.scope, 'dynamicLogic', 'options', this.field]);
|
this.getMetadata().get(['logicDefs', this.scope, 'options', this.field]);
|
||||||
|
|
||||||
this.model.set('dynamicLogicOptions', dynamicLogicOptions);
|
this.model.set('dynamicLogicOptions', dynamicLogicOptions);
|
||||||
|
|
||||||
@@ -522,8 +522,8 @@ class FieldManagerEditView extends View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!defs.dynamicLogicInvalidDisabled && !readOnly) {
|
if (!defs.dynamicLogicInvalidDisabled && !readOnly) {
|
||||||
const dynamicLogicInvalid = this.getMetadata()
|
const dynamicLogicInvalid =
|
||||||
.get(['clientDefs', this.scope, 'dynamicLogic', 'fields', this.field, 'invalid']);
|
this.getMetadata().get(['logicDefs', this.scope, 'fields', this.field, 'invalid']);
|
||||||
|
|
||||||
this.model.set('dynamicLogicInvalid', dynamicLogicInvalid);
|
this.model.set('dynamicLogicInvalid', dynamicLogicInvalid);
|
||||||
|
|
||||||
|
|||||||
@@ -2062,8 +2062,7 @@ class DetailRecordView extends BaseRecordView {
|
|||||||
|
|
||||||
this.initDependency();
|
this.initDependency();
|
||||||
|
|
||||||
const dynamicLogic = Espo.Utils.clone(
|
const dynamicLogic = {...this.getMetadata().get(`logicDefs.${this.entityType}`, {})};
|
||||||
this.getMetadata().get(['clientDefs', this.entityType, 'dynamicLogic']) || {});
|
|
||||||
|
|
||||||
this.dynamicLogicDefs = _.extend(dynamicLogic, this.dynamicLogicDefs);
|
this.dynamicLogicDefs = _.extend(dynamicLogic, this.dynamicLogicDefs);
|
||||||
|
|
||||||
|
|||||||
@@ -68,7 +68,7 @@
|
|||||||
"properties": {
|
"properties": {
|
||||||
"visible": {
|
"visible": {
|
||||||
"description": "Conditions making the parameter visible.",
|
"description": "Conditions making the parameter visible.",
|
||||||
"$ref": "./../clientDefs.json#/definitions/dynamicLogicVisible"
|
"$ref": "./../logicDefs.json#/definitions/dynamicLogicVisible"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,16 +80,16 @@
|
|||||||
"properties": {
|
"properties": {
|
||||||
"visible": {
|
"visible": {
|
||||||
"description": "Conditions making the field visible.",
|
"description": "Conditions making the field visible.",
|
||||||
"$ref": "./clientDefs.json#/definitions/dynamicLogicVisible"
|
"$ref": "./logicDefs.json#/definitions/dynamicLogicVisible"
|
||||||
},
|
},
|
||||||
"required": {
|
"required": {
|
||||||
"$ref": "./clientDefs.json#/definitions/dynamicLogicRequired"
|
"$ref": "./logicDefs.json#/definitions/dynamicLogicRequired"
|
||||||
},
|
},
|
||||||
"readOnly": {
|
"readOnly": {
|
||||||
"$ref": "./clientDefs.json#/definitions/dynamicLogicReadOnly"
|
"$ref": "./logicDefs.json#/definitions/dynamicLogicReadOnly"
|
||||||
},
|
},
|
||||||
"invalid": {
|
"invalid": {
|
||||||
"$ref": "./clientDefs.json#/definitions/dynamicLogicInvalid"
|
"$ref": "./logicDefs.json#/definitions/dynamicLogicInvalid"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -746,74 +746,6 @@
|
|||||||
"isExpandedByDefault": {
|
"isExpandedByDefault": {
|
||||||
"description": "Actual for category scopes (e.g. DocumentFolder). If true, then by default it will be in expanded mode.",
|
"description": "Actual for category scopes (e.g. DocumentFolder). If true, then by default it will be in expanded mode.",
|
||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
},
|
|
||||||
"dynamicLogic": {
|
|
||||||
"description": "Dynamic logic definitions making a form dynamic.",
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"fields": {
|
|
||||||
"type": "object",
|
|
||||||
"description": "Fields.",
|
|
||||||
"additionalProperties": {
|
|
||||||
"type": "object",
|
|
||||||
"description": "A field name.",
|
|
||||||
"properties": {
|
|
||||||
"visible": {
|
|
||||||
"description": "Conditions making the field visible.",
|
|
||||||
"$ref": "#/definitions/dynamicLogicVisible"
|
|
||||||
},
|
|
||||||
"required": {
|
|
||||||
"$ref": "#/definitions/dynamicLogicRequired"
|
|
||||||
},
|
|
||||||
"readOnly": {
|
|
||||||
"$ref": "#/definitions/dynamicLogicReadOnly"
|
|
||||||
},
|
|
||||||
"invalid": {
|
|
||||||
"$ref": "#/definitions/dynamicLogicInvalid"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"panels": {
|
|
||||||
"type": "object",
|
|
||||||
"description": "Panels.",
|
|
||||||
"additionalProperties": {
|
|
||||||
"type": "object",
|
|
||||||
"description": "A panel name.",
|
|
||||||
"properties": {
|
|
||||||
"visible": {
|
|
||||||
"description": "Conditions making the panel visible.",
|
|
||||||
"$ref": "#/definitions/dynamicLogicVisible"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"options": {
|
|
||||||
"type": "object",
|
|
||||||
"description": "Enum options.",
|
|
||||||
"additionalProperties": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "A field name.",
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"optionList": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {"type": "string"},
|
|
||||||
"description": "Options."
|
|
||||||
},
|
|
||||||
"conditionGroup": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "An AND where clause.",
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/definitions/dynamicLogicItem"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"definitions": {
|
"definitions": {
|
||||||
@@ -910,216 +842,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dynamicLogicVisible": {
|
|
||||||
"type": "object",
|
|
||||||
"description": "Conditions making the element visible.",
|
|
||||||
"properties": {
|
|
||||||
"conditionGroup": {
|
|
||||||
"description": "An AND where clause.",
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/definitions/dynamicLogicItem"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"dynamicLogicRequired": {
|
|
||||||
"type": "object",
|
|
||||||
"description": "Conditions making the field required.",
|
|
||||||
"properties": {
|
|
||||||
"conditionGroup": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "An AND where clause.",
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/definitions/dynamicLogicItem"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"dynamicLogicReadOnly": {
|
|
||||||
"type": "object",
|
|
||||||
"description": "Conditions making the field read-only.",
|
|
||||||
"properties": {
|
|
||||||
"conditionGroup": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "An AND where clause.",
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/definitions/dynamicLogicItem"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"dynamicLogicInvalid": {
|
|
||||||
"type": "object",
|
|
||||||
"description": "Conditions making the field invalid.",
|
|
||||||
"properties": {
|
|
||||||
"conditionGroup": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "An AND where clause.",
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/definitions/dynamicLogicItem"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"dynamicLogicItem": {
|
|
||||||
"type": "object",
|
|
||||||
"description": "A logic node.",
|
|
||||||
"anyOf": [
|
|
||||||
{
|
|
||||||
"if": {
|
|
||||||
"properties": {
|
|
||||||
"type": {
|
|
||||||
"anyOf": [
|
|
||||||
{"const": "and"},
|
|
||||||
{"const": "or"}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"then": {
|
|
||||||
"properties": {
|
|
||||||
"value": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "Sub-items.",
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/definitions/dynamicLogicItem"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["type", "value"]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"if": {
|
|
||||||
"properties": {
|
|
||||||
"type": {
|
|
||||||
"anyOf": [
|
|
||||||
{"const": "not"}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"then": {
|
|
||||||
"properties": {
|
|
||||||
"value": {
|
|
||||||
"type": "object",
|
|
||||||
"$ref": "#/definitions/dynamicLogicItem"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["type", "value"]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"if": {
|
|
||||||
"properties": {
|
|
||||||
"type": {
|
|
||||||
"anyOf": [
|
|
||||||
{"const": "equals"},
|
|
||||||
{"const": "notEquals"},
|
|
||||||
{"const": "greaterThan"},
|
|
||||||
{"const": "lessThan"},
|
|
||||||
{"const": "greaterThanOrEquals"},
|
|
||||||
{"const": "lessThanOrEquals"},
|
|
||||||
{"const": "isEmpty"},
|
|
||||||
{"const": "isNotEmpty"},
|
|
||||||
{"const": "isTrue"},
|
|
||||||
{"const": "isFalse"},
|
|
||||||
{"const": "in"},
|
|
||||||
{"const": "notIn"},
|
|
||||||
{"const": "isToday"},
|
|
||||||
{"const": "inFuture"},
|
|
||||||
{"const": "inPast"},
|
|
||||||
{"const": "contains"},
|
|
||||||
{"const": "notContains"},
|
|
||||||
{"const": "has"},
|
|
||||||
{"const": "notHas"},
|
|
||||||
{"const": "startsWith"},
|
|
||||||
{"const": "endsWith"},
|
|
||||||
{"const": "matches"}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"then": {
|
|
||||||
"properties": {
|
|
||||||
"value": {
|
|
||||||
"description": "A value.",
|
|
||||||
"anyOf": [
|
|
||||||
{"type": "string"},
|
|
||||||
{"type": "boolean"},
|
|
||||||
{"type": "integer"},
|
|
||||||
{"type": "integer"},
|
|
||||||
{"type": "number"},
|
|
||||||
{"type": "null"},
|
|
||||||
{
|
|
||||||
"type": "array",
|
|
||||||
"items": {"type": "string"}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "array",
|
|
||||||
"items": {"type": "integer"}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "array",
|
|
||||||
"items": {"type": "number"}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"attribute": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "An attribute."
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["type", "attribute"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"properties": {
|
|
||||||
"type": {
|
|
||||||
"description": "A type.",
|
|
||||||
"enum": [
|
|
||||||
"and",
|
|
||||||
"or",
|
|
||||||
"not",
|
|
||||||
"equals",
|
|
||||||
"notEquals",
|
|
||||||
"greaterThan",
|
|
||||||
"lessThan",
|
|
||||||
"greaterThanOrEquals",
|
|
||||||
"lessThanOrEquals",
|
|
||||||
"isEmpty",
|
|
||||||
"isNotEmpty",
|
|
||||||
"isTrue",
|
|
||||||
"isFalse",
|
|
||||||
"in",
|
|
||||||
"notIn",
|
|
||||||
"isToday",
|
|
||||||
"inFuture",
|
|
||||||
"inPast",
|
|
||||||
"contains",
|
|
||||||
"notContains",
|
|
||||||
"has",
|
|
||||||
"notHas",
|
|
||||||
"startsWith",
|
|
||||||
"endsWith",
|
|
||||||
"matches"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"data": {
|
|
||||||
"type": "object",
|
|
||||||
"description": "Additional data. Not used for logic.",
|
|
||||||
"additionalProperties": true,
|
|
||||||
"properties": {
|
|
||||||
"field": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "A field."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["type"]
|
|
||||||
},
|
|
||||||
"actionDefs": {
|
"actionDefs": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
|||||||
@@ -0,0 +1,282 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://www.espocrm.com/schema/metadata/clientDefs.json",
|
||||||
|
"title": "clientDefs",
|
||||||
|
"description": "Dynamic logic for entity types.",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"fields": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Fields.",
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "A field name.",
|
||||||
|
"properties": {
|
||||||
|
"visible": {
|
||||||
|
"$ref": "#/definitions/dynamicLogicVisible"
|
||||||
|
},
|
||||||
|
"required": {
|
||||||
|
"$ref": "#/definitions/dynamicLogicRequired"
|
||||||
|
},
|
||||||
|
"readOnly": {
|
||||||
|
"$ref": "#/definitions/dynamicLogicReadOnly"
|
||||||
|
},
|
||||||
|
"invalid": {
|
||||||
|
"$ref": "#/definitions/dynamicLogicInvalid"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"panels": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Panels.",
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "A panel name.",
|
||||||
|
"properties": {
|
||||||
|
"visible": {
|
||||||
|
"description": "Conditions making the panel visible.",
|
||||||
|
"$ref": "#/definitions/dynamicLogicVisible"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Enum options.",
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "A field name.",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"optionList": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {"type": "string"},
|
||||||
|
"description": "Options."
|
||||||
|
},
|
||||||
|
"conditionGroup": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "An AND where clause.",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/dynamicLogicItem"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"definitions": {
|
||||||
|
"dynamicLogicVisible": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Conditions making the element visible.",
|
||||||
|
"properties": {
|
||||||
|
"conditionGroup": {
|
||||||
|
"description": "An AND where clause.",
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/dynamicLogicItem"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dynamicLogicRequired": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Conditions making the field required.",
|
||||||
|
"properties": {
|
||||||
|
"conditionGroup": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "An AND where clause.",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/dynamicLogicItem"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dynamicLogicReadOnly": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Conditions making the field read-only.",
|
||||||
|
"properties": {
|
||||||
|
"conditionGroup": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "An AND where clause.",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/dynamicLogicItem"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dynamicLogicInvalid": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Conditions making the field invalid.",
|
||||||
|
"properties": {
|
||||||
|
"conditionGroup": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "An AND where clause.",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/dynamicLogicItem"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dynamicLogicItem": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "A logic node.",
|
||||||
|
"anyOf": [
|
||||||
|
{
|
||||||
|
"if": {
|
||||||
|
"properties": {
|
||||||
|
"type": {
|
||||||
|
"anyOf": [
|
||||||
|
{"const": "and"},
|
||||||
|
{"const": "or"}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"then": {
|
||||||
|
"properties": {
|
||||||
|
"value": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "Sub-items.",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/dynamicLogicItem"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["type", "value"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": {
|
||||||
|
"properties": {
|
||||||
|
"type": {
|
||||||
|
"anyOf": [
|
||||||
|
{"const": "not"}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"then": {
|
||||||
|
"properties": {
|
||||||
|
"value": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/dynamicLogicItem"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["type", "value"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"if": {
|
||||||
|
"properties": {
|
||||||
|
"type": {
|
||||||
|
"anyOf": [
|
||||||
|
{"const": "equals"},
|
||||||
|
{"const": "notEquals"},
|
||||||
|
{"const": "greaterThan"},
|
||||||
|
{"const": "lessThan"},
|
||||||
|
{"const": "greaterThanOrEquals"},
|
||||||
|
{"const": "lessThanOrEquals"},
|
||||||
|
{"const": "isEmpty"},
|
||||||
|
{"const": "isNotEmpty"},
|
||||||
|
{"const": "isTrue"},
|
||||||
|
{"const": "isFalse"},
|
||||||
|
{"const": "in"},
|
||||||
|
{"const": "notIn"},
|
||||||
|
{"const": "isToday"},
|
||||||
|
{"const": "inFuture"},
|
||||||
|
{"const": "inPast"},
|
||||||
|
{"const": "contains"},
|
||||||
|
{"const": "notContains"},
|
||||||
|
{"const": "has"},
|
||||||
|
{"const": "notHas"},
|
||||||
|
{"const": "startsWith"},
|
||||||
|
{"const": "endsWith"},
|
||||||
|
{"const": "matches"}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"then": {
|
||||||
|
"properties": {
|
||||||
|
"value": {
|
||||||
|
"description": "A value.",
|
||||||
|
"anyOf": [
|
||||||
|
{"type": "string"},
|
||||||
|
{"type": "boolean"},
|
||||||
|
{"type": "integer"},
|
||||||
|
{"type": "integer"},
|
||||||
|
{"type": "number"},
|
||||||
|
{"type": "null"},
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"items": {"type": "string"}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"items": {"type": "integer"}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"items": {"type": "number"}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"attribute": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "An attribute."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["type", "attribute"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"type": {
|
||||||
|
"description": "A type.",
|
||||||
|
"enum": [
|
||||||
|
"and",
|
||||||
|
"or",
|
||||||
|
"not",
|
||||||
|
"equals",
|
||||||
|
"notEquals",
|
||||||
|
"greaterThan",
|
||||||
|
"lessThan",
|
||||||
|
"greaterThanOrEquals",
|
||||||
|
"lessThanOrEquals",
|
||||||
|
"isEmpty",
|
||||||
|
"isNotEmpty",
|
||||||
|
"isTrue",
|
||||||
|
"isFalse",
|
||||||
|
"in",
|
||||||
|
"notIn",
|
||||||
|
"isToday",
|
||||||
|
"inFuture",
|
||||||
|
"inPast",
|
||||||
|
"contains",
|
||||||
|
"notContains",
|
||||||
|
"has",
|
||||||
|
"notHas",
|
||||||
|
"startsWith",
|
||||||
|
"endsWith",
|
||||||
|
"matches"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"data": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Additional data. Not used for logic.",
|
||||||
|
"additionalProperties": true,
|
||||||
|
"properties": {
|
||||||
|
"field": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "A field."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["type"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user