snapshot of https://github.com/espocrm/espocrm.git (master, 2026-09-18; blobs > 131072B omitted)
Some checks failed
Test / Test on PHP 8.3 (push) Failing after 5s
Test / Test on PHP 8.4 (push) Failing after 4s
Test / Test on PHP 8.5 (push) Failing after 3s
TypeScript static analysis / TypeScript check (push) Failing after 14s
Test Integration on MySQL / Test on PHP 8.3 (push) Failing after 1s
Test Integration on MySQL / Test on PHP 8.5 (push) Failing after 1s
Test Integration on PostgreSQL / Test on PHP 8.4 fix (push) Failing after 1s
Test Integration on PostgreSQL / Test on PHP 8.4 master (push) Failing after 1s
Some checks failed
Test / Test on PHP 8.3 (push) Failing after 5s
Test / Test on PHP 8.4 (push) Failing after 4s
Test / Test on PHP 8.5 (push) Failing after 3s
TypeScript static analysis / TypeScript check (push) Failing after 14s
Test Integration on MySQL / Test on PHP 8.3 (push) Failing after 1s
Test Integration on MySQL / Test on PHP 8.5 (push) Failing after 1s
Test Integration on PostgreSQL / Test on PHP 8.4 fix (push) Failing after 1s
Test Integration on PostgreSQL / Test on PHP 8.4 master (push) Failing after 1s
This commit is contained in:
37
schema/autoload.json
Normal file
37
schema/autoload.json
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/autoload.json",
|
||||
"title": "autoload",
|
||||
"description": "Composer definitions.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"psr-4": {
|
||||
"description": "A PSR-4 mapping. Example: {\"SomeLib\\\\\": \"custom/Espo/Modules/MyModule/vendor/some-lib/src\"}",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"psr-0": {
|
||||
"description": "A PSR-0 mapping.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"autoloadFileList": {
|
||||
"description": "Autoload PHP files.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"classmap": {
|
||||
"description": "A class-name => file-path mapping.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
121
schema/layouts/detail.json
Normal file
121
schema/layouts/detail.json
Normal file
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/layouts/detail.json",
|
||||
"description": "A detail view layout.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/panel"
|
||||
},
|
||||
"definitions": {
|
||||
"panel": {
|
||||
"type": "object",
|
||||
"description": "A panel.",
|
||||
"properties": {
|
||||
"label": {
|
||||
"type": "string",
|
||||
"description": "A translatable label."
|
||||
},
|
||||
"customLabel": {
|
||||
"type": "string",
|
||||
"description": "A custom label."
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "A name."
|
||||
},
|
||||
"style": {
|
||||
"enum": [
|
||||
"default",
|
||||
"success",
|
||||
"warning",
|
||||
"danger"
|
||||
]
|
||||
},
|
||||
"tabBreak": {
|
||||
"type": "boolean",
|
||||
"description": "Is a tab-break. The panel will be the first one in a tab."
|
||||
},
|
||||
"tabLabel": {
|
||||
"type": "string",
|
||||
"description": "A tab label. If starts with `$`, a translation of the `tabs` category is used."
|
||||
},
|
||||
"rows": {
|
||||
"type": "array",
|
||||
"description": "Rows.",
|
||||
"items": {
|
||||
"$ref": "#/definitions/row"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"row": {
|
||||
"type": "array",
|
||||
"description": "A cell.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "A name. Usually a field name."
|
||||
},
|
||||
"span": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"maximum": 4,
|
||||
"description": "A cell width."
|
||||
},
|
||||
"label": {
|
||||
"type": "string",
|
||||
"description": "A translatable label (using the `fields` category)."
|
||||
},
|
||||
"labelText": {
|
||||
"type": "string",
|
||||
"description": "A label text (not-translatable)."
|
||||
},
|
||||
"labelTranslation": {
|
||||
"type": "string",
|
||||
"description": "A translatable label path. As of v10.0.0."
|
||||
},
|
||||
"noLabel": {
|
||||
"type": "boolean",
|
||||
"description": "Do not show a label."
|
||||
},
|
||||
"view": {
|
||||
"type": "string",
|
||||
"description": "An overridden field view name."
|
||||
},
|
||||
"type": {
|
||||
"type": "string",
|
||||
"description": "An overridden field type."
|
||||
},
|
||||
"readOnly": {
|
||||
"type": "boolean",
|
||||
"description": "Makes the field read-only."
|
||||
},
|
||||
"inlineEditDisabled": {
|
||||
"type": "boolean",
|
||||
"description": "Disable inline edit."
|
||||
},
|
||||
"params": {
|
||||
"type": "object",
|
||||
"additionalProperties": true ,
|
||||
"description": "Overridden field parameters."
|
||||
},
|
||||
"options": {
|
||||
"type": "object",
|
||||
"additionalProperties": true ,
|
||||
"description": "Field view options."
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"const": false,
|
||||
"description": "False designates an empty cell."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
72
schema/layouts/list.json
Normal file
72
schema/layouts/list.json
Normal file
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/layouts/list.json",
|
||||
"description": "A list view layout.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"description": "A column.",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "A name. Usually a field name."
|
||||
},
|
||||
"label": {
|
||||
"type": "string",
|
||||
"description": "A translatable label. The `fields` category is used."
|
||||
},
|
||||
"customLabel": {
|
||||
"type": "string",
|
||||
"description": "A custom label."
|
||||
},
|
||||
"noLabel": {
|
||||
"type": "boolean",
|
||||
"description": "Disables label displaying in the header."
|
||||
},
|
||||
"width": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"maximum": 100,
|
||||
"description": "A width in percents."
|
||||
},
|
||||
"widthPx": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "A width in pixels. Ignored if the `width` is defined."
|
||||
},
|
||||
"align": {
|
||||
"enum": [
|
||||
"left",
|
||||
"right"
|
||||
],
|
||||
"description": "An alignment."
|
||||
},
|
||||
"notSortable": {
|
||||
"type": "boolean",
|
||||
"description": "Disables the ability to sort by the column."
|
||||
},
|
||||
"link": {
|
||||
"type": "boolean",
|
||||
"description": "A field value will be displayed as a link pointing to the detail view of the record. Usually it is used for Name fields."
|
||||
},
|
||||
"view": {
|
||||
"type": "string",
|
||||
"description": "An overridden field view name."
|
||||
},
|
||||
"params": {
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"description": "Overridden field parameters."
|
||||
},
|
||||
"options": {
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"description": "Field view options."
|
||||
},
|
||||
"hidden": {
|
||||
"type": "boolean",
|
||||
"description": "Hidden by default."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
52
schema/metadata/aclDefs.json
Normal file
52
schema/metadata/aclDefs.json
Normal file
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/aclDefs.json",
|
||||
"title": "aclDefs",
|
||||
"description": "ACL framework definitions for a scope.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"accessCheckerClassName": {
|
||||
"description": "An access checker class.",
|
||||
"type": "string"
|
||||
},
|
||||
"portalAccessCheckerClassName": {
|
||||
"description": "A portal access checker class.",
|
||||
"type": "string"
|
||||
},
|
||||
"ownershipCheckerClassName": {
|
||||
"description": "An ownership access checker class.",
|
||||
"type": "string"
|
||||
},
|
||||
"portalOwnershipCheckerClassName": {
|
||||
"description": "A portal ownership access checker class.",
|
||||
"type": "string"
|
||||
},
|
||||
"assignmentCheckerClassName": {
|
||||
"description": "assignment checker class.",
|
||||
"type": "string"
|
||||
},
|
||||
"readOwnerUserField": {
|
||||
"description": "Indicates what field is used for ownership checking.",
|
||||
"type": "string"
|
||||
},
|
||||
"linkCheckerClassNameMap": {
|
||||
"description": "Link checker classes for specific links. Should implement `Espo\\Core\\Acl\\LinkChecker`.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"link": {
|
||||
"type": "string",
|
||||
"description": "A link name to check access to a related record instead of an actual record. Actual if access checker is Espo\\Core\\Acl\\AccessChecker\\AccessCheckers\\Foreign."
|
||||
},
|
||||
"accountLink": {
|
||||
"type": "string",
|
||||
"description": "A link with Account that will be used when access control applied for portal users. As of v9.0.0."
|
||||
},
|
||||
"contactLink": {
|
||||
"type": "string",
|
||||
"description": "A link with Contact that will be used when access control applied for portal users. As of v9.0.0."
|
||||
}
|
||||
}
|
||||
}
|
||||
145
schema/metadata/app/acl.json
Normal file
145
schema/metadata/app/acl.json
Normal file
@@ -0,0 +1,145 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/acl.json",
|
||||
"title": "app/acl",
|
||||
"description": "Access control level parameters for the system (excluding portals).",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"mandatory": {
|
||||
"description": "Mandatory access levels for specific scopes. Forcibly applied.",
|
||||
"$ref": "#/definitions/group"
|
||||
},
|
||||
"adminMandatory": {
|
||||
"description": "Access levels forcibly applied for admin users. This section has the same parameters as the mandatory section: scopeLevel, scopeFieldLevel, fieldLevel.",
|
||||
"$ref": "#/definitions/group"
|
||||
},
|
||||
"strictDefault": {
|
||||
"description": "Access levels applied for regular and API users when access is not defined by Roles assigned to those users. This section has the same parameters as the mandatory section: scopeLevel, scopeFieldLevel, fieldLevel.",
|
||||
"$ref": "#/definitions/group"
|
||||
},
|
||||
"valuePermissionList": {
|
||||
"type": "array",
|
||||
"description": "A list of all available permissions in the system.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"const": "__APPEND__"},
|
||||
{"type": "string"}
|
||||
]
|
||||
}
|
||||
},
|
||||
"valuePermissionHighestLevels": {
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"$ref": "#/definitions/levelsAll"
|
||||
},
|
||||
"description": "Highest levels for permissions."
|
||||
},
|
||||
"permissionsStrictDefaults": {
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"$ref": "#/definitions/levelsAll"
|
||||
},
|
||||
"description": "Default permissions. Not to be modified."
|
||||
}
|
||||
},
|
||||
"definitions": {
|
||||
"levelsBoolean": {
|
||||
"enum": ["yes", "no"]
|
||||
},
|
||||
"levelsAll": {
|
||||
"enum": ["yes", "all", "team", "own", "no"]
|
||||
},
|
||||
"levels": {
|
||||
"enum": ["all", "team", "own", "no"]
|
||||
},
|
||||
"group": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"scopeLevel": {
|
||||
"$ref": "#/definitions/scopeLevel"
|
||||
},
|
||||
"scopeFieldLevel": {
|
||||
"$ref": "#/definitions/scopeFieldLevel"
|
||||
},
|
||||
"fieldLevel": {
|
||||
"$ref": "#/definitions/fieldLevel"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scopeLevel": {
|
||||
"type": "object",
|
||||
"description": "A scope level.",
|
||||
"additionalProperties": {
|
||||
"description": "A scope. True enables access to scopes that don't have actions. False fully restricts access to the scope. A string value makes the framework to use roles from another scope and apply them to our scope. It can be useful to have roles only for one parent scope, when child scopes use roles of the parent scope. `boolean:{scope}` format will convert a foreign scope data to the boolean type.",
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"create": {
|
||||
"$ref": "#/definitions/levelsBoolean",
|
||||
"description": "A 'create' access level."
|
||||
},
|
||||
"read": {
|
||||
"$ref": "#/definitions/levelsAll",
|
||||
"description": "A 'read' access level."
|
||||
},
|
||||
"edit": {
|
||||
"$ref": "#/definitions/levelsAll",
|
||||
"description": "An 'edit' access level."
|
||||
},
|
||||
"delete": {
|
||||
"$ref": "#/definitions/levels",
|
||||
"description": "A 'delete' access level."
|
||||
},
|
||||
"stream": {
|
||||
"$ref": "#/definitions/levels",
|
||||
"description": "A 'stream' access level."
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"fieldAccess": {
|
||||
"description": "Field levels. False disables access to a field.",
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"read": {
|
||||
"$ref": "#/definitions/levelsBoolean",
|
||||
"description": "A 'read' access level."
|
||||
},
|
||||
"edit": {
|
||||
"$ref": "#/definitions/levelsBoolean",
|
||||
"description": "An 'edit' access level."
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
]
|
||||
},
|
||||
"scopeFieldLevel": {
|
||||
"type": "object",
|
||||
"description": "Access for specific fields of specific scopes.",
|
||||
"additionalProperties": {
|
||||
"$ref": "#/definitions/fieldLevel"
|
||||
}
|
||||
},
|
||||
"fieldLevel": {
|
||||
"type": "object",
|
||||
"description": "A scope.",
|
||||
"additionalProperties": {
|
||||
"$ref": "#/definitions/fieldAccess"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
142
schema/metadata/app/aclPortal.json
Normal file
142
schema/metadata/app/aclPortal.json
Normal file
@@ -0,0 +1,142 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/aclPortal.json",
|
||||
"title": "app/aclPortal",
|
||||
"description": "Access control level parameters for portals.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"mandatory": {
|
||||
"description": "Mandatory access levels for specific scopes. Forcibly applied.",
|
||||
"$ref": "#/definitions/group"
|
||||
},
|
||||
"adminMandatory": {
|
||||
"description": "Access levels forcibly applied for admin users. This section has the same parameters as the mandatory section: scopeLevel, scopeFieldLevel, fieldLevel.",
|
||||
"$ref": "#/definitions/group"
|
||||
},
|
||||
"strictDefault": {
|
||||
"description": "Access levels applied for regular and API users when access is not defined by Roles assigned to those users. This section has the same parameters as the mandatory section: scopeLevel, scopeFieldLevel, fieldLevel.",
|
||||
"$ref": "#/definitions/group"
|
||||
},
|
||||
"valuePermissionList": {
|
||||
"type": "array",
|
||||
"description": "A list of all available permissions in the system.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"const": "__APPEND__"},
|
||||
{"type": "string"}
|
||||
]
|
||||
}
|
||||
},
|
||||
"valuePermissionHighestLevels": {
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"$ref": "#/definitions/levelsAll"
|
||||
},
|
||||
"description": "Highest levels for permissions."
|
||||
},
|
||||
"permissionsStrictDefaults": {
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"$ref": "#/definitions/levelsAll"
|
||||
},
|
||||
"description": "Default permissions. Not to be modified."
|
||||
}
|
||||
},
|
||||
"definitions": {
|
||||
"levelsBoolean": {
|
||||
"enum": ["yes", "no"]
|
||||
},
|
||||
"levelsAll": {
|
||||
"enum": ["yes", "all", "account", "contact", "own", "no"]
|
||||
},
|
||||
"levels": {
|
||||
"enum": ["all", "account", "contact", "own", "no"]
|
||||
},
|
||||
"group": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"scopeLevel": {
|
||||
"$ref": "#/definitions/scopeLevel"
|
||||
},
|
||||
"scopeFieldLevel": {
|
||||
"$ref": "#/definitions/scopeFieldLevel"
|
||||
},
|
||||
"fieldLevel": {
|
||||
"$ref": "#/definitions/fieldLevel"
|
||||
}
|
||||
}
|
||||
},
|
||||
"scopeLevel": {
|
||||
"type": "object",
|
||||
"description": "A scope level.",
|
||||
"additionalProperties": {
|
||||
"description": "A scope. True enables access to scopes that don't have actions. False fully restricts access to a scope. A string value makes the framework to use roles from another scope and apply it to our scope. It can be useful to have roles only for one parent scope, when child scopes uses roles of the parent scope.",
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"create": {
|
||||
"$ref": "#/definitions/levelsBoolean",
|
||||
"description": "A 'create' access level."
|
||||
},
|
||||
"read": {
|
||||
"$ref": "#/definitions/levels",
|
||||
"description": "A 'read' access level."
|
||||
},
|
||||
"edit": {
|
||||
"$ref": "#/definitions/levels"
|
||||
},
|
||||
"delete": {
|
||||
"$ref": "#/definitions/levels"
|
||||
},
|
||||
"stream": {
|
||||
"$ref": "#/definitions/levels"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"fieldAccess": {
|
||||
"description": "Field levels. False disables access to a field.",
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"read": {
|
||||
"$ref": "#/definitions/levelsBoolean",
|
||||
"description": "A 'read' access level."
|
||||
},
|
||||
"edit": {
|
||||
"$ref": "#/definitions/levelsBoolean",
|
||||
"description": "An 'edit' access level."
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
]
|
||||
},
|
||||
"scopeFieldLevel": {
|
||||
"type": "object",
|
||||
"description": "Access for specific fields of specific scopes.",
|
||||
"additionalProperties": {
|
||||
"$ref": "#/definitions/fieldLevel"
|
||||
}
|
||||
},
|
||||
"fieldLevel": {
|
||||
"type": "object",
|
||||
"description": "A scope.",
|
||||
"additionalProperties": {
|
||||
"$ref": "#/definitions/fieldAccess"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
16
schema/metadata/app/actions.json
Normal file
16
schema/metadata/app/actions.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/actions.json",
|
||||
"title": "app/actions",
|
||||
"description": "Record-Action framework definitions.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"description": "An action name.",
|
||||
"properties": {
|
||||
"implementationClassName": {
|
||||
"type": "string",
|
||||
"description": "An action class. Should implement Espo\\Core\\Action\\Action interface. Can be overridden for a specific entity type at: recordDefs > {EntityType} > actions > {action} > implementationClassName."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
17
schema/metadata/app/addressFormats.json
Normal file
17
schema/metadata/app/addressFormats.json
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/addressFormats.json",
|
||||
"title": "app/addressFormats",
|
||||
"description": "Address formats.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A format name.",
|
||||
"properties": {
|
||||
"formatterClassName": {
|
||||
"type": "string",
|
||||
"description": "A formatter class. Should implement Espo\\Core\\Field\\Address\\AddressFormatter interface."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
71
schema/metadata/app/adminPanel.json
Normal file
71
schema/metadata/app/adminPanel.json
Normal file
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/adminPanel.json",
|
||||
"title": "app/adminPanel",
|
||||
"description": "Defines what to display on the Administration page.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A panel name.",
|
||||
"properties": {
|
||||
"label": {
|
||||
"type": "string",
|
||||
"description": "A panel label. A translation path: Admin > labels > {label}."
|
||||
},
|
||||
"labelTranslation": {
|
||||
"type": "string",
|
||||
"description": "A label translation path. As of v10.0.3."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "Used for ordering panels on the page."
|
||||
},
|
||||
"itemList": {
|
||||
"type": "array",
|
||||
"description": "Items.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"const": "__APPEND__"},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"url": {
|
||||
"type": "string",
|
||||
"description": "A link URL. You can use an URL like #Admin/{myName}, in this case you also need to define a recordView."
|
||||
},
|
||||
"label": {
|
||||
"type": "string",
|
||||
"description": "An item (link) label. A translation path: Admin > labels > {label}."
|
||||
},
|
||||
"labelTranslation": {
|
||||
"type": "string",
|
||||
"description": "A label translation path. As of v10.0.3."
|
||||
},
|
||||
"iconClass": {
|
||||
"type": "string",
|
||||
"description": "A CSS class for the icon."
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "A translation key for a description text. A translation page: Admin > descriptions > {description}."
|
||||
},
|
||||
"recordView": {
|
||||
"type": "string",
|
||||
"description": "A record view. Optional. Needed if you defined the URL like #Admin/{myName}. The record view displays settings fields. https://docs.espocrm.com/development/custom-config-parameters/"
|
||||
},
|
||||
"view": {
|
||||
"type": "string",
|
||||
"description": "A view. Compatible with `recordView` as of v9.3."
|
||||
},
|
||||
"tabQuickSearch": {
|
||||
"type": "boolean",
|
||||
"description": "Makes available in the navbar tab quick search. As if v9.0."
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
60
schema/metadata/app/api.json
Normal file
60
schema/metadata/app/api.json
Normal file
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/api.json",
|
||||
"title": "app/api",
|
||||
"description": "API definitions.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"globalMiddlewareClassNameList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "A class list of global middlewares. Global middlewares applied for all API requests. Processed before authentication."
|
||||
},
|
||||
"routeMiddlewareClassNameListMap": {
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "array",
|
||||
"description": "A key in `{method}_{route}` format.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"description": "Middlewares for specific routes. Keys are composed in the form: {method}_{route}. Processed before authentication."
|
||||
},
|
||||
"actionMiddlewareClassNameListMap": {
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "array",
|
||||
"description": "A key in `{method}_{route}` format.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"description": "Middlewares for routes with actionClassName. Keys are composed in the form: {method}_{route}. Processed after authentication."
|
||||
},
|
||||
"controllerMiddlewareClassNameListMap": {
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "array",
|
||||
"description": "A controller name.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"description": "Middlewares for specific controllers. A controller-name => class-string-list map. Processed after authentication."
|
||||
},
|
||||
"controllerActionMiddlewareClassNameListMap": {
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "array",
|
||||
"description": "A key in `{ControllerName}_{method}_{actionName}` format.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"description": "Middlewares for specific controller actions. Keys are composed in the form: {ControllerName}_{method}_{actionName}. Processed after authentication."
|
||||
}
|
||||
}
|
||||
}
|
||||
17
schema/metadata/app/appParams.json
Normal file
17
schema/metadata/app/appParams.json
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/appParams.json",
|
||||
"title": "app/appParams",
|
||||
"description": "AppParams framework definitions. A name => Object map. https://docs.espocrm.com/development/app-params/",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A parameter name.",
|
||||
"properties": {
|
||||
"className": {
|
||||
"type": "string",
|
||||
"description": "An implementation class name. Should implement Espo\\Tools\\App\\AppParam interface."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
69
schema/metadata/app/authentication.json
Normal file
69
schema/metadata/app/authentication.json
Normal file
@@ -0,0 +1,69 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/authentication.json",
|
||||
"title": "app/authentication",
|
||||
"description": "Authentication definitions.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"beforeLoginHookClassNameList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"type": "string"},
|
||||
{"enum": ["__APPEND__"]}
|
||||
]
|
||||
},
|
||||
"description": "Array of hook class names. Fired before logging in before credentials are checked. Should implement Espo\\Core\\Authentication\\Hook\\BeforeLogin interface. Important: Need to have __APPEND__ item in the beginning of the array when extending."
|
||||
},
|
||||
"onLoginHookClassNameList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"type": "string"},
|
||||
{"enum": ["__APPEND__"]}
|
||||
]
|
||||
},
|
||||
"description": "Array of hook class names. Fired once logging in is about to success. Should implement Espo\\Core\\Authentication\\Hook\\OnLogin interface. As of v8.3. Important: Need to have __APPEND__ item in the beginning of the array when extending."
|
||||
},
|
||||
"onFailHookClassNameList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"type": "string"},
|
||||
{"enum": ["__APPEND__"]}
|
||||
]
|
||||
},
|
||||
"description": "Array of hook class names. Fired once logging in is failed. Should implement Espo\\Core\\Authentication\\Hook\\OnResult interface. Important: Need to have __APPEND__ item in the beginning of the array when extending."
|
||||
},
|
||||
"onSuccessHookClassNameList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"type": "string"},
|
||||
{"enum": ["__APPEND__"]}
|
||||
]
|
||||
},
|
||||
"description": "Array of hook class names. Fired once logging in is success (not by auth token). Should implement Espo\\Core\\Authentication\\Hook\\OnResult interface. Important: Need to have __APPEND__ item in the beginning of the array when extending."
|
||||
},
|
||||
"onSuccessByTokenHookClassNameList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"type": "string"},
|
||||
{"enum": ["__APPEND__"]}
|
||||
]
|
||||
},
|
||||
"description": "Array of hook class names. Fired once logging in by a token is success. Should implement Espo\\Core\\Authentication\\Hook\\OnResult interface. Important: Need to have __APPEND__ item in the beginning of the array when extending."
|
||||
},
|
||||
"onSecondStepRequiredHookClassNameList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"type": "string"},
|
||||
{"enum": ["__APPEND__"]}
|
||||
]
|
||||
},
|
||||
"description": "Array of hook class names. Fired once first step is success and second step is required. Should implement Espo\\Core\\Authentication\\Hook\\OnResult interface. Important: Need to have __APPEND__ item in the beginning of the array when extending."
|
||||
}
|
||||
}
|
||||
}
|
||||
35
schema/metadata/app/authentication2FAMethods.json
Normal file
35
schema/metadata/app/authentication2FAMethods.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/authentication2FAMethods.json",
|
||||
"title": "app/authentication2FAMethods",
|
||||
"description": "Definitions for 2-factor authentication methods.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A method name.",
|
||||
"properties": {
|
||||
"settings": {
|
||||
"type": "object",
|
||||
"description": "Settings.",
|
||||
"properties": {
|
||||
"isAvailable": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the method should be available as an option at Administration > Authentication > Available 2FA methods."
|
||||
}
|
||||
}
|
||||
},
|
||||
"userApplyView": {
|
||||
"type": "string",
|
||||
"description": "A front-end view for a user when they apply the 2FA method to their account."
|
||||
},
|
||||
"loginClassName": {
|
||||
"type": "string",
|
||||
"description": "A login class. Processes the second step of the login process. Should implement Espo\\Core\\Authentication\\TwoFactor\\Login interface."
|
||||
},
|
||||
"userSetupClassName": {
|
||||
"type": "string",
|
||||
"description": "A user-setup class. Provides needed data for a front-end for a user when they setup the 2FA method. Verifies entered user data before establishing the 2FA method for a user. Should implement Espo\\Core\\Authentication\\TwoFactor\\UserSetup interface."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
21
schema/metadata/app/cleanup.json
Normal file
21
schema/metadata/app/cleanup.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/cleanup.json",
|
||||
"title": "app/cleanup",
|
||||
"description": "Defines cleaning up classes. Fired by the Cleanup job.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A name.",
|
||||
"properties": {
|
||||
"className": {
|
||||
"type": "string",
|
||||
"description": "An implementation class. Should implement Espo\\Core\\Cleanup\\Cleanup interface."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "An order."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
81
schema/metadata/app/client.json
Normal file
81
schema/metadata/app/client.json
Normal file
@@ -0,0 +1,81 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/client.json",
|
||||
"title": "app/client",
|
||||
"description": "General definitions for the front-end client.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"scriptList": {
|
||||
"type": "array",
|
||||
"description": "JS files to include on the HTML page. Use __APPEND__ to append custom values w/o removing existing.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"type": "string"},
|
||||
{"enum": ["__APPEND__"]}
|
||||
]
|
||||
}
|
||||
},
|
||||
"developerModeScriptList": {
|
||||
"type": "array",
|
||||
"description": "JS files to include on the HTML page in the developer mode. Use __APPEND__ to append custom values w/o removing existing.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"type": "string"},
|
||||
{"enum": ["__APPEND__"]}
|
||||
]
|
||||
}
|
||||
},
|
||||
"linkList": {
|
||||
"type": "array",
|
||||
"description": "Link tags to include on the HTML page. Use __APPEND__ to append custom values w/o removing existing.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"href": {
|
||||
"type": "string",
|
||||
"description": "An URL."
|
||||
},
|
||||
"as": {
|
||||
"type": "string",
|
||||
"description": "An AS attribute value."
|
||||
},
|
||||
"type": {
|
||||
"type": "string",
|
||||
"description": "A TYPE attribute value."
|
||||
},
|
||||
"noTimestamp": {
|
||||
"type": "boolean",
|
||||
"description": "Disables cache busting."
|
||||
},
|
||||
"crossorigin": {
|
||||
"type": "boolean",
|
||||
"description": "Sets the crossorigin attribute."
|
||||
}
|
||||
}
|
||||
},
|
||||
{"enum": ["__APPEND__"]}
|
||||
]
|
||||
}
|
||||
},
|
||||
"cssList": {
|
||||
"type": "array",
|
||||
"description": "CSS files to include on the HTML page. Use __APPEND__ to append custom values w/o removing existing.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"type": "string"},
|
||||
{"enum": ["__APPEND__"]}
|
||||
]
|
||||
}
|
||||
},
|
||||
"favicon": {
|
||||
"type": "string",
|
||||
"description": "A favicon. SVG or PNG. The default value: client/img/favicon.svg."
|
||||
},
|
||||
"faviconAlternate": {
|
||||
"type": "string",
|
||||
"description": "An ico 16px favicon. The default value: client/img/favicon.ico."
|
||||
}
|
||||
}
|
||||
}
|
||||
19
schema/metadata/app/clientIcons.json
Normal file
19
schema/metadata/app/clientIcons.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/clientIcons.json",
|
||||
"title": "app/icons",
|
||||
"description": "Client icons.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"classList": {
|
||||
"description": "Icon classes.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"type": "string"},
|
||||
{"enum": ["__APPEND__"]}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
87
schema/metadata/app/clientNavbar.json
Normal file
87
schema/metadata/app/clientNavbar.json
Normal file
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/client.json",
|
||||
"title": "app/navbar",
|
||||
"description": "Navbar definitions.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"items": {
|
||||
"description": "Navbar item definitions.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"description": "An item.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"view": {
|
||||
"type": "string",
|
||||
"description": "A view."
|
||||
},
|
||||
"class": {
|
||||
"type": "string",
|
||||
"description": "A CSS class."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "An order position."
|
||||
},
|
||||
"disabled": {
|
||||
"type": "boolean",
|
||||
"description": "To disable."
|
||||
},
|
||||
"accessDataList": {
|
||||
"$ref": "../clientDefs.json#/definitions/accessDataList"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"menuItems": {
|
||||
"description": "Menu item definitions.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"description": "An item.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"labelTranslation": {
|
||||
"type": "string",
|
||||
"description": "A label translation path."
|
||||
},
|
||||
"link": {
|
||||
"type": "string",
|
||||
"description": "A link."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "An order position."
|
||||
},
|
||||
"groupIndex": {
|
||||
"type": "integer",
|
||||
"description": "A group index. Groups are separated by a divider."
|
||||
},
|
||||
"disabled": {
|
||||
"type": "boolean",
|
||||
"description": "An item will be hidden."
|
||||
},
|
||||
"handler": {
|
||||
"type": "string",
|
||||
"description": "A handler class."
|
||||
},
|
||||
"actionFunction": {
|
||||
"type": "string",
|
||||
"description": "An action function in the handler."
|
||||
},
|
||||
"configCheck": {
|
||||
"type": "string",
|
||||
"description": "A config path to check. Path items are separated by a dot. If a config value is not empty, then the action is allowed. The `!` prefix reverses the check."
|
||||
},
|
||||
"accessDataList": {
|
||||
"$ref": "../clientDefs.json#/definitions/accessDataList"
|
||||
},
|
||||
"iconClass": {
|
||||
"type": "string",
|
||||
"description": "An icon class. As of v10.0."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
18
schema/metadata/app/clientRecord.json
Normal file
18
schema/metadata/app/clientRecord.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/clientRecord.json",
|
||||
"title": "app/navbar",
|
||||
"description": "Client record definitions.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"panels": {
|
||||
"description": "Detail view panels. Can be referenced from clientDefs > sidePanels/bottomPanels. As of v9.0.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"description": "A panel.",
|
||||
"type": "object",
|
||||
"$ref": "../clientDefs.json#/definitions/panel"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
31
schema/metadata/app/clientRoutes.json
Normal file
31
schema/metadata/app/clientRoutes.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/clientRoutes.json",
|
||||
"title": "app/clientRoutes",
|
||||
"description": "Frontend routes.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A route. Example: `Account/test/:id`.",
|
||||
"properties": {
|
||||
"params": {
|
||||
"type": "object",
|
||||
"description": "Parameters.",
|
||||
"properties": {
|
||||
"controller": {
|
||||
"type": "string",
|
||||
"description": "A controller name."
|
||||
},
|
||||
"action": {
|
||||
"type": "string",
|
||||
"description": "An action name. Corresponds to the controller method `action{ActionName}`."
|
||||
}
|
||||
}
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "A route order."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
37
schema/metadata/app/complexExpression.json
Normal file
37
schema/metadata/app/complexExpression.json
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/complexExpression.json",
|
||||
"title": "app/complexExpression",
|
||||
"description": "Definitions for the complex expression editor.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"functionList": {
|
||||
"type": "array",
|
||||
"description": "Functions available in the editor when editing a complex expression.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "A name."
|
||||
},
|
||||
"insertText": {
|
||||
"type": "string",
|
||||
"description": "A text to insert in the editor."
|
||||
},
|
||||
"returnType": {
|
||||
"type": "string",
|
||||
"description": "A return type."
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"enum": ["__APPEND__"]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
64
schema/metadata/app/config.json
Normal file
64
schema/metadata/app/config.json
Normal file
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/config.json",
|
||||
"title": "app/config",
|
||||
"description": "Application config definitions.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"params": {
|
||||
"type": "object",
|
||||
"description": "Config parameters. https://docs.espocrm.com/development/metadata/app-config/#params",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A config parameter name.",
|
||||
"properties": {
|
||||
"level": {
|
||||
"description": "Defines availability of the config parameter in the front-end. default – available for logged-in users;\nglobal – available even before logging in (value is exposed to the world);\nsystem – never available;\ninternal – never available for read, admin can write (useful for passwords, secrets);\nadmin – available only for admin;\nsuperAdmin – available only for super-admin.",
|
||||
"anyOf": [
|
||||
{
|
||||
"const": "default",
|
||||
"description": "Available for logged-in users."
|
||||
},
|
||||
{
|
||||
"const": "global",
|
||||
"description": "Available even before logging in."
|
||||
},
|
||||
{
|
||||
"const": "system",
|
||||
"description": "Never available."
|
||||
},
|
||||
{
|
||||
"const": "internal",
|
||||
"description": "Never available for read, admin can write."
|
||||
},
|
||||
{
|
||||
"const": "admin",
|
||||
"description": "Available only for admin."
|
||||
},
|
||||
{
|
||||
"const": "superAdmin",
|
||||
"description": "Available only for super-admin."
|
||||
}
|
||||
]
|
||||
},
|
||||
"readOnly": {
|
||||
"type": "boolean",
|
||||
"description": "Disables the ability to change a parameter value for admin users. Useful for parameters that are supposed to be set either manually by writing into the config file or automatically by the application."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"entityTypeListParamList": {
|
||||
"description": "A list of config parameters values of which are arrays of entity types. Needed to let the application know what params need to be filtered to remove entity types not available for a user.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{"enum": ["__APPEND__"]}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
39
schema/metadata/app/consoleCommands.json
Normal file
39
schema/metadata/app/consoleCommands.json
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/consoleCommands.json",
|
||||
"title": "app/appParams",
|
||||
"description": "Console commands.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A command name. In camelCase format.",
|
||||
"properties": {
|
||||
"className": {
|
||||
"type": "string",
|
||||
"description": "An implementation class name. Should implement Espo\\Core\\Console\\Command interface."
|
||||
},
|
||||
"listed": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the command is listed when running bin/command."
|
||||
},
|
||||
"noSystemUser": {
|
||||
"type": "boolean",
|
||||
"description": "Do not load the system user."
|
||||
},
|
||||
"allowedOptions": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "Allowed options."
|
||||
},
|
||||
"allowedFlags": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "Allowed flags."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
25
schema/metadata/app/containerServices.json
Normal file
25
schema/metadata/app/containerServices.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/containerServices.json",
|
||||
"title": "app/containerServices",
|
||||
"description": "Definitions of container services. https://docs.espocrm.com/development/di/#container-services",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A service name.",
|
||||
"properties": {
|
||||
"className": {
|
||||
"type": "string",
|
||||
"description": "A service class."
|
||||
},
|
||||
"loaderClassName": {
|
||||
"type": "string",
|
||||
"description": "A service loader class. Should implement Espo\\Core\\Container\\Loader interface."
|
||||
},
|
||||
"settable": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the service can be set to the container externally (with the `set` method)."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
42
schema/metadata/app/currency.json
Normal file
42
schema/metadata/app/currency.json
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/currency.json",
|
||||
"title": "app/currency",
|
||||
"description": "Currency definitions.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"symbolMap": {
|
||||
"type": "object",
|
||||
"description": "A currency-code => symbol mapping.",
|
||||
"additionalProperties": {
|
||||
"type": "string",
|
||||
"description": "A 3-letter ISO 4217 currency code."
|
||||
}
|
||||
},
|
||||
"precisionMap": {
|
||||
"type": "object",
|
||||
"description": "A currency-code => precision mapping.",
|
||||
"additionalProperties": {
|
||||
"type": "number",
|
||||
"description": "Number of decimal places.",
|
||||
"minimum": 0,
|
||||
"maximum": 4
|
||||
}
|
||||
},
|
||||
"list": {
|
||||
"type": "array",
|
||||
"description": "A list of currencies available in the system. Values defined as 3-letter currency codes in ISO 4217 standard. Use __APPEND__ to add new currencies w/o deleting existing.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"enum": ["__APPEND__"]},
|
||||
{
|
||||
"type": "string",
|
||||
"minLength": 3,
|
||||
"maxLength": 3,
|
||||
"pattern": "^[A-Z]{3}$"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
17
schema/metadata/app/currencyConversion.json
Normal file
17
schema/metadata/app/currencyConversion.json
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/currencyConversion.json",
|
||||
"title": "app/currencyConversion",
|
||||
"description": "Currency conversion.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"entityConverterClassNameMap": {
|
||||
"type": "object",
|
||||
"description": "Currency converters.",
|
||||
"additionalProperties": {
|
||||
"type": "string",
|
||||
"description": "An entity currency converter. Should implement Espo\\Tools\\Currency\\Conversion\\EntityConverter."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
56
schema/metadata/app/databasePlatforms.json
Normal file
56
schema/metadata/app/databasePlatforms.json
Normal file
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/databasePlatforms.json",
|
||||
"title": "app/databasePlatforms",
|
||||
"description": "Database platform definitions.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"description": "A platform name.",
|
||||
"properties": {
|
||||
"dbalConnectionFactoryClass": {
|
||||
"type": "string",
|
||||
"description": "Should implementEspo\\Core\\Utils\\Database\\Dbal\\ConnectionFactory"
|
||||
},
|
||||
"detailsProviderClassName": {
|
||||
"type": "string",
|
||||
"description": "Should implement Espo\\Core\\Utils\\Database\\Dbal\\DetailsProvider."
|
||||
},
|
||||
"dbalTypeClassNameMap": {
|
||||
"type": "object",
|
||||
"description": "Custom database types.",
|
||||
"additionalProperties": {
|
||||
"type": "string",
|
||||
"description": "A database type. Should extend Doctrine\\DBAL\\Types\\Type."
|
||||
}
|
||||
},
|
||||
"indexHelperClassName": {
|
||||
"type": "string",
|
||||
"description": "Should implement Espo\\Core\\Utils\\Database\\Orm\\IndexHelper."
|
||||
},
|
||||
"columnPreparatorClassName": {
|
||||
"type": "string",
|
||||
"description": "Should implement Espo\\Core\\Utils\\Database\\Schema\\ColumnPreparator."
|
||||
},
|
||||
"preRebuildActionClassNameList": {
|
||||
"type": "array",
|
||||
"description": "Pre-rebuild actions. Should implement Espo\\Core\\Utils\\Database\\Schema\\RebuildAction.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"enum": ["__APPEND__"]},
|
||||
{"type": "string"}
|
||||
]
|
||||
}
|
||||
},
|
||||
"postRebuildActionClassNameList": {
|
||||
"type": "array",
|
||||
"description": "Post-rebuild actions. Should implement Espo\\Core\\Utils\\Database\\Schema\\RebuildAction.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"enum": ["__APPEND__"]},
|
||||
{"type": "string"}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
29
schema/metadata/app/dateTime.json
Normal file
29
schema/metadata/app/dateTime.json
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/dateTime.json",
|
||||
"title": "app/dateTime",
|
||||
"description": "Date-time definitions.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"dateFormatList": {
|
||||
"type": "array",
|
||||
"description": "A list of date formats available in the system.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"type": "string"},
|
||||
{"enum": ["__APPEND__"]}
|
||||
]
|
||||
}
|
||||
},
|
||||
"timeFormatList": {
|
||||
"type": "array",
|
||||
"description": "A list of time formats available in the system.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"type": "string"},
|
||||
{"enum": ["__APPEND__"]}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
53
schema/metadata/app/defaultDashboardLayouts.json
Normal file
53
schema/metadata/app/defaultDashboardLayouts.json
Normal file
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/defaultDashboardLayouts.json",
|
||||
"title": "app/defaultDashboardLayouts",
|
||||
"description": "Default dashboard layouts.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "A tab name."
|
||||
},
|
||||
"layout": {
|
||||
"type": "array",
|
||||
"description": "A layout.",
|
||||
"items": {
|
||||
"$ref": "#/definitions/dashlet"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"definitions": {
|
||||
"dashlet": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "string",
|
||||
"description": "An id."
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "A dashlet name."
|
||||
},
|
||||
"x": {
|
||||
"type": "integer"
|
||||
},
|
||||
"y": {
|
||||
"type": "integer"
|
||||
},
|
||||
"width": {
|
||||
"type": "integer"
|
||||
},
|
||||
"height": {
|
||||
"type": "integer"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
16
schema/metadata/app/defaultDashboardOptions.json
Normal file
16
schema/metadata/app/defaultDashboardOptions.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/defaultDashboardOptions.json",
|
||||
"title": "app/defaultDashboardOptions",
|
||||
"description": "Options for default dashboard dashlets.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A key.",
|
||||
"additionalProperties": {
|
||||
"description": "A dashlet ID.",
|
||||
"type": "object",
|
||||
"additionalProperties": true
|
||||
}
|
||||
}
|
||||
}
|
||||
38
schema/metadata/app/emailTemplate.json
Normal file
38
schema/metadata/app/emailTemplate.json
Normal file
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/emailTemplate.json",
|
||||
"title": "app/databasePlatforms",
|
||||
"description": "Email template definitions.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"placeholders": {
|
||||
"description": "Placeholders.",
|
||||
"additionalProperties": {
|
||||
"description": "A placeholder.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"className": {
|
||||
"type": "string",
|
||||
"description": "A class. Should implement Espo\\Tools\\EmailTemplate\\Placeholder."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "An order position."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"entityLinkMapping": {
|
||||
"description": "EntityType => link mapping. As of v9.2.0.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string",
|
||||
"description": "An entity type name mapped to a link."
|
||||
},
|
||||
"description": "A parent entity type name mapped to EntityType => link map.."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
57
schema/metadata/app/entityManager.json
Normal file
57
schema/metadata/app/entityManager.json
Normal file
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/entityManager.json",
|
||||
"title": "app/linkManager",
|
||||
"description": "Entity manager definitions.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"createHookClassNameList": {
|
||||
"type": "array",
|
||||
"description": "Hooks called when creating a new entity (in the Entity Manager tool). Use __APPEND__ for extending. Should implement Espo\\Tools\\EntityManager\\Hook\\CreateHook.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"const": "__APPEND__"},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"deleteHookClassNameList": {
|
||||
"type": "array",
|
||||
"description": "Hooks called when deleting an entity (in the Entity Manager tool). Use __APPEND__ for extending. Should implement Espo\\Tools\\EntityManager\\Hook\\DeleteHook.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"const": "__APPEND__"},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"beforeUpdateHookClassNameList": {
|
||||
"type": "array",
|
||||
"description": "Hooks called before updating an entity (in the Entity Manager tool). Can be used for validation purpose. Use __APPEND__ for extending. Should implement Espo\\Tools\\EntityManager\\Hook\\UpdateHook. As of v10.0.0.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"const": "__APPEND__"},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"updateHookClassNameList": {
|
||||
"type": "array",
|
||||
"description": "Hooks called when updating an entity (in the Entity Manager tool). Use __APPEND__ for extending. Should implement Espo\\Tools\\EntityManager\\Hook\\UpdateHook.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"const": "__APPEND__"},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
45
schema/metadata/app/entityManagerParams.json
Normal file
45
schema/metadata/app/entityManagerParams.json
Normal file
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/entityManagerParams.json",
|
||||
"title": "app/entityManagerParams",
|
||||
"description": "Additional entity parameters. Defined parameters are available in the entity manager. Global, template type and entity type specific parameters can be defined.",
|
||||
"type": "object",
|
||||
"propertyNames": {
|
||||
"anyOf": [
|
||||
{"const": "Global"},
|
||||
{"type": "string"}
|
||||
]
|
||||
},
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A scope name. If starts with `@`, then a template name.",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A parameter name.",
|
||||
"properties": {
|
||||
"location": {
|
||||
"description": "A metadata location. Where the parameter will be stored.",
|
||||
"enum": [
|
||||
"scopes",
|
||||
"entityDefs",
|
||||
"clientDefs",
|
||||
"recordDefs",
|
||||
"aclDefs"
|
||||
]
|
||||
},
|
||||
"param": {
|
||||
"type": "string",
|
||||
"description": "An actual parameter name in metadata. If omitted, the object item key will be used."
|
||||
},
|
||||
"fieldDefs": {
|
||||
"description": "Field definitions. The defined field will be rendered on the entity manager edit view.",
|
||||
"$ref": "./../entityDefs.json#/definitions/fieldDefs"
|
||||
},
|
||||
"groupIndex": {
|
||||
"type": "integer",
|
||||
"description": "An index to group related parameters into panels. As of v10.0."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
13
schema/metadata/app/entityTemplateList.json
Normal file
13
schema/metadata/app/entityTemplateList.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/entityTemplateList.json",
|
||||
"title": "app/entityTemplateList",
|
||||
"description": "A list of entity templates available when creating a new entity type in the Entity Manager tool. Use __APPEND__ to add new values without deleting existing.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"const": "__APPEND__"},
|
||||
{"type": "string"}
|
||||
]
|
||||
}
|
||||
}
|
||||
21
schema/metadata/app/entityTemplates.json
Normal file
21
schema/metadata/app/entityTemplates.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/entityTemplates.json",
|
||||
"title": "app/entityTemplates",
|
||||
"description": "Definitions for entity templates.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A template name.",
|
||||
"properties": {
|
||||
"entityClassName": {
|
||||
"type": "string",
|
||||
"description": "An entity class name. Should implement Espo\\ORM\\Entity."
|
||||
},
|
||||
"repositoryClassName": {
|
||||
"type": "string",
|
||||
"description": "An repository class name. Should implement Espo\\ORM\\Repository\\Repository."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
54
schema/metadata/app/entryPoints.json
Normal file
54
schema/metadata/app/entryPoints.json
Normal file
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/scheduledJobs.json",
|
||||
"title": "app/scheduledJobs",
|
||||
"description": "Entry points definitions. As of v10.1.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"description": "An entry point name. Should start with a lower case letter.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"className": {
|
||||
"type": "string",
|
||||
"description": "An entry point implementation. Should implement Espo\\Core\\EntryPoint\\EntryPoint."
|
||||
},
|
||||
"notExposed": {
|
||||
"type": "boolean",
|
||||
"description": "If true, the entry point is not available via the regular entryPoint request – can be called only programmatically."
|
||||
},
|
||||
"noAuth": {
|
||||
"type": "boolean",
|
||||
"description": "If true, authentication is not required."
|
||||
},
|
||||
"allowedMethods": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"enum": [
|
||||
"get",
|
||||
"post",
|
||||
"put",
|
||||
"delete",
|
||||
"options",
|
||||
"patch"
|
||||
]
|
||||
},
|
||||
"description": "Allowed HTTP methods.",
|
||||
"default": ["get"]
|
||||
},
|
||||
"consumes": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"description": "Media type.",
|
||||
"examples": [
|
||||
"application/json",
|
||||
"multipart/form-data",
|
||||
"application/x-www-form-urlencoded",
|
||||
"text/plain"
|
||||
]
|
||||
},
|
||||
"description": "If defined, restricts content types allowed for the entry point. If an empty array, the Content-Type header must be empty."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
82
schema/metadata/app/export.json
Normal file
82
schema/metadata/app/export.json
Normal file
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/export.json",
|
||||
"title": "app/export",
|
||||
"description": "Definitions for the Export framework.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"formatList": {
|
||||
"type": "array",
|
||||
"description": "Available export formats.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"const": "__APPEND__"},
|
||||
{"type": "string"}
|
||||
]
|
||||
}
|
||||
},
|
||||
"formatDefs": {
|
||||
"type": "object",
|
||||
"description": "Definitions for export formats. You can define here also custom params specific to your custom format.",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A format.",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"processorClassName": {
|
||||
"type": "string",
|
||||
"description": "A main processing class. Should implement Espo\\Tools\\Export\\Processor."
|
||||
},
|
||||
"additionalFieldsLoaderClassName": {
|
||||
"type": "string",
|
||||
"description": "An additional field loader class. Should implement Espo\\Tools\\Export\\AdditionalFieldsLoader."
|
||||
},
|
||||
"mimeType": {
|
||||
"type": "string",
|
||||
"pattern": "^[-\\w.]+/[-\\w.+]+$",
|
||||
"description": "A mime type of export files."
|
||||
},
|
||||
"fileExtension": {
|
||||
"type": "string",
|
||||
"pattern": "^[a-z]+$",
|
||||
"description": "An extension of export files."
|
||||
},
|
||||
"params": {
|
||||
"type": "object",
|
||||
"description": "Parameters.",
|
||||
"properties": {
|
||||
"fields": {
|
||||
"type": "object",
|
||||
"description": "Fields.",
|
||||
"additionalProperties": {
|
||||
"description": "A parameter name.",
|
||||
"$ref": "./../entityDefs.json#/definitions/fieldDefs"
|
||||
}
|
||||
},
|
||||
"layout": {
|
||||
"description": "A layout.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "./../../layouts/detail.json#/definitions/row"
|
||||
}
|
||||
},
|
||||
"dynamicLogic": {
|
||||
"description": "Dynamic logic.",
|
||||
"additionalProperties": {
|
||||
"description": "A field.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"visible": {
|
||||
"description": "Conditions making the parameter visible.",
|
||||
"$ref": "./../logicDefs.json#/definitions/dynamicLogicVisible"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
30
schema/metadata/app/fieldProcessing.json
Normal file
30
schema/metadata/app/fieldProcessing.json
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/fieldProcessing.json",
|
||||
"title": "app/fieldProcessing",
|
||||
"description": "Definitions for the Field Processing framework.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"readLoaderClassNameList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "A list of loader classes. Load additional fields when reading a record. Applied globally for all entity types. Should implement Espo\\Core\\FieldProcessing\\Loader."
|
||||
},
|
||||
"listLoaderClassNameList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "A list of loader classes for lists. Load additional fields when reading a list of record. Applied globally for all entity types. Should implement Espo\\Core\\FieldProcessing\\Loader."
|
||||
},
|
||||
"saverClassNameList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "A list of saver classes. Save additional fields. Applied globally for all entity types. Should implement Espo\\Core\\FieldProcessing\\Saver."
|
||||
}
|
||||
}
|
||||
}
|
||||
34
schema/metadata/app/file.json
Normal file
34
schema/metadata/app/file.json
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/file.json",
|
||||
"title": "app/file",
|
||||
"description": "Definitions for file attachments.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"extensionMimeTypeMap": {
|
||||
"type": "object",
|
||||
"description": "Mime types associated with file extensions.",
|
||||
"additionalProperties": {
|
||||
"type": "array",
|
||||
"description": "A file extension.",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"pattern": "^[-\\w.]+/[-\\w.+]+$"
|
||||
}
|
||||
}
|
||||
},
|
||||
"inlineMimeTypeList": {
|
||||
"type": "array",
|
||||
"description": "Mime types that can be downloaded as inline attachments.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"const": "__APPEND__"},
|
||||
{
|
||||
"type": "string",
|
||||
"pattern": "^[-\\w.]+/[-\\w.+]+$"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
17
schema/metadata/app/fileStorage.json
Normal file
17
schema/metadata/app/fileStorage.json
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/fileStorage.json",
|
||||
"title": "app/fileStorage",
|
||||
"description": "File storages.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"implementationClassNameMap": {
|
||||
"type": "object",
|
||||
"description": "Implementation classes for file storages. Should implement Espo\\Core\\FileStorage\\Storage.",
|
||||
"additionalProperties": {
|
||||
"description": "A storage name.",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
49
schema/metadata/app/formula.json
Normal file
49
schema/metadata/app/formula.json
Normal file
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/formula.json",
|
||||
"title": "app/formula",
|
||||
"description": "Definitions for the formula editor.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"functionList": {
|
||||
"type": "array",
|
||||
"description": "Functions.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "A name."
|
||||
},
|
||||
"insertText": {
|
||||
"type": "string",
|
||||
"description": "A text to insert in the editor."
|
||||
},
|
||||
"returnType": {
|
||||
"type": "string",
|
||||
"description": "A return type."
|
||||
},
|
||||
"unsafe": {
|
||||
"type": "boolean",
|
||||
"description": "Is unsafe. As of v8.3.0."
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"enum": ["__APPEND__"]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"functionClassNameMap": {
|
||||
"type": "object",
|
||||
"description": "Function implementations. Should implement Espo\\Core\\Formula\\Func.",
|
||||
"additionalProperties": {
|
||||
"type": "string",
|
||||
"description": "A function."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
16
schema/metadata/app/hook.json
Normal file
16
schema/metadata/app/hook.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/hook.json",
|
||||
"title": "app/hook",
|
||||
"description": "Definitions for the Hook framework.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"suppressClassNameList": {
|
||||
"type": "array",
|
||||
"description": "A list of hook classes that should be ignored. Provides the ability to disable built-in hooks.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
74
schema/metadata/app/image.json
Normal file
74
schema/metadata/app/image.json
Normal file
@@ -0,0 +1,74 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/image.json",
|
||||
"title": "app/image",
|
||||
"description": "Image definitions.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"allowedFileTypeList": {
|
||||
"type": "array",
|
||||
"description": "A list of allowed image mime types. Use __APPEND__ for extending.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string",
|
||||
"pattern": "^[-\\w.]+/[-\\w.+]+$"
|
||||
},
|
||||
{"const": "__APPEND__"}
|
||||
]
|
||||
}
|
||||
},
|
||||
"resizableFileTypeList": {
|
||||
"type": "array",
|
||||
"description": "A list of image mime types that can be resized to be served in a smaller size. Use __APPEND__ for extending.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string",
|
||||
"pattern": "^[-\\w.]+/[-\\w.+]+$"
|
||||
},
|
||||
{"const": "__APPEND__"}
|
||||
]
|
||||
}
|
||||
},
|
||||
"fixOrientationFileTypeList": {
|
||||
"type": "array",
|
||||
"description": "A list of image mime types orientation of which can be fixed using exif data. Use __APPEND__ for extending.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string",
|
||||
"pattern": "^[-\\w.]+/[-\\w.+]+$"
|
||||
},
|
||||
{"const": "__APPEND__"}
|
||||
]
|
||||
}
|
||||
},
|
||||
"previewFileTypeList": {
|
||||
"type": "array",
|
||||
"description": "A list of image mime types that can be previewed in the File or Attachment-Multiple fields. Use __APPEND__ for extending.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string",
|
||||
"pattern": "^[-\\w.]+/[-\\w.+]+$"
|
||||
},
|
||||
{"const": "__APPEND__"}
|
||||
]
|
||||
}
|
||||
},
|
||||
"sizes": {
|
||||
"type": "object",
|
||||
"description": "Size dimensions.",
|
||||
"additionalProperties": {
|
||||
"type": "array",
|
||||
"description": "A size name.",
|
||||
"minLength": 2,
|
||||
"maxLength": 2,
|
||||
"items": {
|
||||
"type": "integer"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
53
schema/metadata/app/jsLibs.json
Normal file
53
schema/metadata/app/jsLibs.json
Normal file
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/jsLibs.json",
|
||||
"title": "app/jsLibs",
|
||||
"description": "JS libraries definitions for the loader.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A lib name.",
|
||||
"properties": {
|
||||
"path": {
|
||||
"type": "string",
|
||||
"description": "A path to the lib file.",
|
||||
"examples": [
|
||||
"client/custom/modules/my-module/lib/some-lib.js"
|
||||
]
|
||||
},
|
||||
"devPath": {
|
||||
"type": "string",
|
||||
"description": "A path to the lib file for the developer mode.",
|
||||
"examples": [
|
||||
"client/custom/modules/my-module/lib/original/some-lib.js"
|
||||
]
|
||||
},
|
||||
"exportsTo": {
|
||||
"anyOf": [
|
||||
{"type": "string"},
|
||||
{"enum": ["window", "$.fn"]}
|
||||
],
|
||||
"description": "If the lib exposes itself w/o a module, an object to which the lib is exported. Use dots to define a path."
|
||||
},
|
||||
"exportsAs": {
|
||||
"type": "string",
|
||||
"description": "A key name by which the lib is available in a containing object."
|
||||
},
|
||||
"sourceMap": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the source map file is available."
|
||||
},
|
||||
"exposeAs": {
|
||||
"type": "string",
|
||||
"description": "If set, the lib will be exposed to the window object. A variable name the lib will be set to. To be used for backward compatibility reasons."
|
||||
},
|
||||
"aliases": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "Additional module IDs the lib will be available by. Can be useful for establishing backward compatibility or when another lib requires this lib by a different ID."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
41
schema/metadata/app/language.json
Normal file
41
schema/metadata/app/language.json
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/language.json",
|
||||
"title": "app/language",
|
||||
"description": "Application languages.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"list": {
|
||||
"type": "array",
|
||||
"description": "A list of languages available in the application. The name format: en_US.",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"pattern": "^[a-z]{2}_[A-Z]{2}$"
|
||||
}
|
||||
},
|
||||
"aclDependencies": {
|
||||
"type": "object",
|
||||
"description": "Rules making language translations available for a user when they don't have access to a scope.",
|
||||
"additionalProperties": {
|
||||
"description": "A language path, items are separated by dots.",
|
||||
"properties": {
|
||||
"scope": {
|
||||
"type": "string",
|
||||
"description": "If a user has access to the scope, they will have access to translations defined by a key."
|
||||
},
|
||||
"field": {
|
||||
"type": "string",
|
||||
"description": "If a user has access to the field (of a scope), they will have access to translations defined by a key."
|
||||
},
|
||||
"anyScopeList": {
|
||||
"type": "array",
|
||||
"description": "If a user has access to any of listed scopes, they will have access to translations defined by a key.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
26
schema/metadata/app/layouts.json
Normal file
26
schema/metadata/app/layouts.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/layouts.json",
|
||||
"title": "app/layouts",
|
||||
"description": "Layouts.",
|
||||
"type": "object",
|
||||
"propertyNames": {
|
||||
"anyOf": [
|
||||
{"type": "string"}
|
||||
]
|
||||
},
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A scope name.",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A layout name.",
|
||||
"properties": {
|
||||
"module": {
|
||||
"type": "string",
|
||||
"description": "A module in which the layout is located."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
33
schema/metadata/app/linkManager.json
Normal file
33
schema/metadata/app/linkManager.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/linkManager.json",
|
||||
"title": "app/linkManager",
|
||||
"description": "Link manager definitions.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"createHookClassNameList": {
|
||||
"type": "array",
|
||||
"description": "Hooks called when creating a new relationship (in the Entity Manager tool). Use __APPEND__ for extending. Should implement Espo\\Tools\\LinkManager\\Hook\\CreateHook.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"const": "__APPEND__"},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"deleteHookClassNameList": {
|
||||
"type": "array",
|
||||
"description": "Hooks called when deleting a relationship (in the Entity Manager tool). Use __APPEND__ for extending. Should implement Espo\\Tools\\LinkManager\\Hook\\DeleteHook.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"const": "__APPEND__"},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
17
schema/metadata/app/mapProviders.json
Normal file
17
schema/metadata/app/mapProviders.json
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/mapProviders.json",
|
||||
"title": "app/mapProviders",
|
||||
"description": "Map providers.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A provider name.",
|
||||
"properties": {
|
||||
"renderer": {
|
||||
"type": "string",
|
||||
"description": "A frontend renderer. Should extend handlers/map/renderer."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
16
schema/metadata/app/massActions.json
Normal file
16
schema/metadata/app/massActions.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/massActions.json",
|
||||
"title": "app/massActions",
|
||||
"description": "Mass Action framework definitions.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"description": "An action name.",
|
||||
"properties": {
|
||||
"implementationClassName": {
|
||||
"type": "string",
|
||||
"description": "An action class. Should implement Espo\\Core\\MassAction\\MassAction."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
70
schema/metadata/app/metadata.json
Normal file
70
schema/metadata/app/metadata.json
Normal file
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/metadata.json",
|
||||
"title": "app/metadata",
|
||||
"description": "Definitions for metadata itself.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"frontendHiddenPathList": {
|
||||
"type": "array",
|
||||
"description": "Sections of metadata (defined as paths) to be hidden from the front-end.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"const": "__APPEND__"},
|
||||
{
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"frontendNonAdminHiddenPathList": {
|
||||
"type": "array",
|
||||
"description": "Sections of metadata (defined as paths) to be hidden from the front-end for non-admin users.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"const": "__APPEND__"},
|
||||
{
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"additionalBuilderClassNameList": {
|
||||
"type": "array",
|
||||
"description": "Additional builders. Allows adding conditional metadata. Should implement Espo\\Core\\Utils\\Metadata\\AdditionalBuilder. As of v8.4.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"aclDependencies": {
|
||||
"type": "object",
|
||||
"description": "Rules making a metadata sections available for the user when they don't have access to the scope.",
|
||||
"additionalProperties": {
|
||||
"description": "A metadata path, items are separated by dots.",
|
||||
"properties": {
|
||||
"scope": {
|
||||
"type": "string",
|
||||
"description": "If the user has access to the scope, they will have access to the metadata section defined by the key."
|
||||
},
|
||||
"field": {
|
||||
"type": "string",
|
||||
"description": "If the user has access to the field (of the scope), they will have access to the metadata section defined by the key."
|
||||
},
|
||||
"anyScopeList": {
|
||||
"type": "array",
|
||||
"description": "If the user has access to any of the listed scopes, they will have access to the metadata section defined by the key. As of v9.2.5.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
35
schema/metadata/app/orm.json
Normal file
35
schema/metadata/app/orm.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/orm.json",
|
||||
"title": "app/orm",
|
||||
"description": "ORM definitions.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"platforms": {
|
||||
"type": "object",
|
||||
"description": "Platforms.",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A platform name.",
|
||||
"properties": {
|
||||
"queryComposerClassName": {
|
||||
"type": "string",
|
||||
"description": "A query composer. Should implement Espo\\ORM\\QueryComposer\\QueryComposer."
|
||||
},
|
||||
"pdoFactoryClassName": {
|
||||
"type": "string",
|
||||
"description": "A PDF factory. Should implement Espo\\ORM\\PDO\\PDOFactory."
|
||||
},
|
||||
"functionConverterClassNameMap": {
|
||||
"type": "object",
|
||||
"description": "Function converters. Should implement Espo\\ORM\\QueryComposer\\Part\\FunctionConverter.",
|
||||
"additionalProperties": {
|
||||
"description": "A function name. Only upper case letters and _ are allowed.",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
44
schema/metadata/app/pdfEngines.json
Normal file
44
schema/metadata/app/pdfEngines.json
Normal file
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/pdfEngines.json",
|
||||
"title": "app/pdfEngines",
|
||||
"description": "PDF printing engines.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "An engine name.",
|
||||
"properties": {
|
||||
"implementationClassNameMap": {
|
||||
"type": "object",
|
||||
"description": "Implementations.",
|
||||
"properties": {
|
||||
"entity": {
|
||||
"type": "string",
|
||||
"description": "An entity printer. Should implement Espo\\Tools\\Pdf\\EntityPrinter."
|
||||
},
|
||||
"collection": {
|
||||
"type": "string",
|
||||
"description": "An entity printer. Should implement Espo\\Tools\\Pdf\\CollectionPrinter."
|
||||
}
|
||||
}
|
||||
},
|
||||
"fontFaceList": {
|
||||
"type": "array",
|
||||
"description": "A list of fonts available for the engine.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"const": "__APPEND__"},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"additionalParams": {
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"description": "Additional engine-wise parameters."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
45
schema/metadata/app/popupNotifications.json
Normal file
45
schema/metadata/app/popupNotifications.json
Normal file
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/popupNotifications.json",
|
||||
"title": "app/popupNotifications",
|
||||
"description": "Popup notifications.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A name.",
|
||||
"properties": {
|
||||
"grouped": {
|
||||
"type": "boolean",
|
||||
"description": "Grouped popup notifications are fetched with a single API request."
|
||||
},
|
||||
"providerClassName": {
|
||||
"type": "string",
|
||||
"description": "A provider class. Actual only if the `grouped` parameter is set to true. Should implement Espo\\Tools\\PopupNotification\\Provider."
|
||||
},
|
||||
"useWebSocket": {
|
||||
"type": "boolean",
|
||||
"description": "If the WebSocked is configured and the parameter is set to true, notifications won't be polled in the front-end (except once, when page is loaded)."
|
||||
},
|
||||
"disabled": {
|
||||
"type": "boolean",
|
||||
"description": "Disables."
|
||||
},
|
||||
"portalDisabled": {
|
||||
"type": "boolean",
|
||||
"description": "Disables in portals."
|
||||
},
|
||||
"view": {
|
||||
"type": "string",
|
||||
"description": "A frontend view for the popup notification."
|
||||
},
|
||||
"interval": {
|
||||
"type": "integer",
|
||||
"description": "A polling interval in seconds. Actual if `grouped` is false."
|
||||
},
|
||||
"url": {
|
||||
"type": "string",
|
||||
"description": "An API endpoint used for polling. Actual if `grouped` is false."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
25
schema/metadata/app/portalContainerServices.json
Normal file
25
schema/metadata/app/portalContainerServices.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/portalContainerServices.json",
|
||||
"title": "app/portalContainerServices",
|
||||
"description": "Overriding of container services for portals. Provides the ability to define custom implementations for portals.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A service name.",
|
||||
"properties": {
|
||||
"className": {
|
||||
"type": "string",
|
||||
"description": "A service class."
|
||||
},
|
||||
"loaderClassName": {
|
||||
"type": "string",
|
||||
"description": "A service loader class. Should implement Espo\\Core\\Container\\Loader interface."
|
||||
},
|
||||
"settable": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the service can be set to the container externally (with the `set` method)."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
31
schema/metadata/app/reactions.json
Normal file
31
schema/metadata/app/reactions.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/reactions.json",
|
||||
"title": "app/language",
|
||||
"description": "Reactions.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"list": {
|
||||
"type": "array",
|
||||
"description": "A list of available reactions.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"type",
|
||||
"iconClass"
|
||||
],
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"maxLength": 10,
|
||||
"description": "A type."
|
||||
},
|
||||
"iconClass": {
|
||||
"type": "string",
|
||||
"description": "A CSS class for an icon."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
16
schema/metadata/app/rebuild.json
Normal file
16
schema/metadata/app/rebuild.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/rebuild.json",
|
||||
"title": "app/rebuild",
|
||||
"description": "Rebuild definitions.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"actionClassNameList": {
|
||||
"type": "array",
|
||||
"description": "Array of class names. Actions being processed when the application is being rebuilt. Should implement Espo\\Core\\Rebuild\\RebuildAction.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
131
schema/metadata/app/record.json
Normal file
131
schema/metadata/app/record.json
Normal file
@@ -0,0 +1,131 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/record.json",
|
||||
"title": "app/select",
|
||||
"description": "Record framework definitions.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"selectApplierClassNameList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"const": "__APPEND__"},
|
||||
{"type": "string"}
|
||||
]
|
||||
},
|
||||
"description": "Classes for additional handling of a select query. Should implement Espo\\Core\\Select\\Applier\\AdditionalApplier interface. An entity type is passed to the constructor in `$entityType` parameter. As of v9.0."
|
||||
},
|
||||
"createInputFilterClassNameList": {
|
||||
"description": "Create input filters. Should implement Espo\\Core\\Record\\Input\\Filter. As of v8.2.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"updateInputFilterClassNameList": {
|
||||
"description": "Update input filters. Should implement Espo\\Core\\Record\\Input\\Filter. As of v8.2.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"outputFilterClassNameList": {
|
||||
"description": "Output filters. Should implement Espo\\Core\\Record\\Output\\Filter. As of v8.2.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"beforeReadHookClassNameList": {
|
||||
"description": "Before-read hooks. Should implement the Espo\\Core\\Record\\Hook\\ReadHook interface.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"earlyBeforeCreateHookClassNameList": {
|
||||
"description": "Early-before-create hooks. Run before validation. Should implement the Espo\\Core\\Record\\Hook\\CreateHook or Espo\\Core\\Record\\Hook\\SaveHook interface. As of v9.0.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"beforeCreateHookClassNameList": {
|
||||
"description": "Before-create hooks. Should implement the Espo\\Core\\Record\\Hook\\CreateHook or Espo\\Core\\Record\\Hook\\SaveHook interface.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"afterCreateHookClassNameList": {
|
||||
"description": "After-create hooks. Should implement the Espo\\Core\\Record\\Hook\\CreateHook or Espo\\Core\\Record\\Hook\\SaveHook interface. As of v8.2.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"earlyBeforeUpdateHookClassNameList": {
|
||||
"description": "Early-before-update hooks. Run before validation. Should implement the Espo\\Core\\Record\\Hook\\UpdateHook or Espo\\Core\\Record\\Hook\\SaveHook interface. As of v9.0.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"beforeUpdateHookClassNameList": {
|
||||
"description": "Before-update hooks. Should implement the Espo\\Core\\Record\\Hook\\UpdateHook or Espo\\Core\\Record\\Hook\\SaveHook interface.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"afterUpdateHookClassNameList": {
|
||||
"description": "Before-update hooks. Should implement the Espo\\Core\\Record\\Hook\\UpdateHook or Espo\\Core\\Record\\Hook\\SaveHook interface. As of v8.2.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"beforeDeleteHookClassNameList": {
|
||||
"description": "Before-delete hooks. Should implement the Espo\\Core\\Record\\Hook\\DeleteHook interface.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"afterDeleteHookClassNameList": {
|
||||
"description": "Before-delete hooks. Should implement the Espo\\Core\\Record\\Hook\\DeleteHook interface. As of v8.2.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"beforeLinkHookClassNameList": {
|
||||
"description": "Before-link hooks. Should implement the Espo\\Core\\Record\\Hook\\LinkHook interface.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"beforeUnlinkHookClassNameList": {
|
||||
"description": "Before-unlink hooks. Should implement the Espo\\Core\\Record\\Hook\\UnlinkHook interface.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"afterLinkHookClassNameList": {
|
||||
"description": "After-link hooks. Should implement the Espo\\Core\\Record\\Hook\\LinkHook interface. As of v8.2.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"afterUnlinkHookClassNameList": {
|
||||
"description": "After-unlink hooks. Should implement the Espo\\Core\\Record\\Hook\\UnlinkHook interface. As of v8.2.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
32
schema/metadata/app/recordId.json
Normal file
32
schema/metadata/app/recordId.json
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/recordId.json",
|
||||
"title": "app/recordId",
|
||||
"description": "Record ID definitions.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"enum": [
|
||||
"id",
|
||||
"uuid4"
|
||||
],
|
||||
"description": "A type of generated IDs."
|
||||
},
|
||||
"length": {
|
||||
"type": "integer",
|
||||
"description": "ID column length. By default, set to 17."
|
||||
},
|
||||
"dbType": {
|
||||
"description": "An ID column data type. By default, set to string (equivalent to varchar in MySQL). Changing this parameter will change types of all ID columns once you run rebuild.",
|
||||
"anyOf": [
|
||||
{"type": "string"},
|
||||
{
|
||||
"enum": [
|
||||
"string",
|
||||
"uuid"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
21
schema/metadata/app/regExpPatterns.json
Normal file
21
schema/metadata/app/regExpPatterns.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/regExpPatterns.json",
|
||||
"title": "app/regExpPatterns",
|
||||
"description": "Predefined regular expression patterns. Predefined patterns can be used for field validation.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A pattern name.",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "A regular expression pattern."
|
||||
},
|
||||
"isSystem": {
|
||||
"type": "boolean",
|
||||
"description": "If true, the pattern won't be available when defining a validation for a field."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
17
schema/metadata/app/relationships.json
Normal file
17
schema/metadata/app/relationships.json
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/relationships.json",
|
||||
"title": "app/relationships",
|
||||
"description": "Definitions of specific named relationships.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"description": "A relationship name.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"converterClassName": {
|
||||
"type": "string",
|
||||
"description": "A converter. Converts metadata link definitions to ORM definitions. Should implement Espo\\Core\\Utils\\Database\\Orm\\LinkConverter."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
37
schema/metadata/app/scheduledJobs.json
Normal file
37
schema/metadata/app/scheduledJobs.json
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/scheduledJobs.json",
|
||||
"title": "app/scheduledJobs",
|
||||
"description": "Scheduled jobs definitions. Defined scheduled job will be available for the admin when creating a scheduled job.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"description": "A job name. Should start with an upper case letter.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "A name to be used for job records. Not important."
|
||||
},
|
||||
"isSystem": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the job is system."
|
||||
},
|
||||
"scheduling": {
|
||||
"type": "string",
|
||||
"description": "A default scheduling in crontab notation."
|
||||
},
|
||||
"jobClassName": {
|
||||
"type": "string",
|
||||
"description": "A job implementation. Should implement either Espo\\Core\\Job\\Job|Espo\\Core\\Job or Espo\\Core\\Job\\Job|Espo\\Core\\JobDataLess interfaces. Usage of the former requires having the preparator."
|
||||
},
|
||||
"preparatorClassName": {
|
||||
"type": "string",
|
||||
"description": "A preparator. Optional. The preparator is called by the application. It serves for creating job records. E.g. for email checking, the preparator creates jobs for each email account. Should implement Espo\\Core\\Job\\Preparator."
|
||||
},
|
||||
"isDefault": {
|
||||
"type": "boolean",
|
||||
"description": "Created upon installation or when running `populate-scheduled-jobs` command. As of v10.0."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
30
schema/metadata/app/select.json
Normal file
30
schema/metadata/app/select.json
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/select.json",
|
||||
"title": "app/select",
|
||||
"description": "Select framework definitions.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"boolFilterClassNameMap": {
|
||||
"type": "object",
|
||||
"description": "Bool filters available for all entity types. Should implement Espo\\Core\\Select\\Bool\\Filter.",
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"orderItemConverterClassNameMap": {
|
||||
"type": "object",
|
||||
"description": "Order item converters for field types. Should implement Espo\\Core\\Select\\Order\\ItemConverter.",
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"whereItemConverterClassNameMap": {
|
||||
"type": "object",
|
||||
"description": "Where item converters. Should implement Espo\\Core\\Select\\Where\\ItemConverter.",
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
17
schema/metadata/app/smsProviders.json
Normal file
17
schema/metadata/app/smsProviders.json
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/smsProviders.json",
|
||||
"title": "app/smsProviders",
|
||||
"description": "SMS providers.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A provider name.",
|
||||
"properties": {
|
||||
"senderClassName": {
|
||||
"type": "string",
|
||||
"description": "A sender class. Should implement Espo\\Core\\Sms\\Sender."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
11
schema/metadata/app/templateHelpers.json
Normal file
11
schema/metadata/app/templateHelpers.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/templateHelpers.json",
|
||||
"title": "app/templateHelpers",
|
||||
"description": "Template helpers for the back-end templating system (used for PDF printing, email templates).",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string",
|
||||
"description": "A helper name and its implementation. Should implement Espo\\Core\\Htmlizer\\Helper."
|
||||
}
|
||||
}
|
||||
35
schema/metadata/app/templates.json
Normal file
35
schema/metadata/app/templates.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/smsProviders.json",
|
||||
"title": "app/smsProviders",
|
||||
"description": "Templates (available at Administration > Templates). Usually used for system emails.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A template name. Should start with the lower case letter.",
|
||||
"properties": {
|
||||
"scopeList": {
|
||||
"type": "array",
|
||||
"description": "A list of scopes (entity types) for which the template is available.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"const": "__APPEND__"},
|
||||
{"type": "string"}
|
||||
]
|
||||
}
|
||||
},
|
||||
"scope": {
|
||||
"type": "string",
|
||||
"description": "A scope (entity types) for which the template is available. Use it if it's needed only for one entity type."
|
||||
},
|
||||
"scopeListConfigParam": {
|
||||
"type": "string",
|
||||
"description": "A config parameter defining for which entity types the template is available."
|
||||
},
|
||||
"module": {
|
||||
"type": "string",
|
||||
"description": "A module name."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
44
schema/metadata/app/webSocket.json
Normal file
44
schema/metadata/app/webSocket.json
Normal file
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/app/webSocket.json",
|
||||
"title": "app/webSocket",
|
||||
"description": "WebSocket definitions.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"categories": {
|
||||
"type": "object",
|
||||
"description": "Categories. Define custom WebSocket events here. You can use dots in category names. Must start with a lower case letter.",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A category.",
|
||||
"properties": {
|
||||
"paramList": {
|
||||
"type": "array",
|
||||
"items": {"type": "string"},
|
||||
"description": "Parameters passed within a topic. E.g. the topic name myGroupName.myCustomName.Account.someId. This makes a topic name unique for a specific record. For global events, omit this parameter."
|
||||
},
|
||||
"accessCheckCommand": {
|
||||
"type": "string",
|
||||
"description": "A console command that will be used to check whether a topic is allowed for a user when they attempting to subscribe. Parameter placeholders starts with the colon :. The userId parameter contains a user ID. If access checking is not needed, omit this parameter."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"messagers": {
|
||||
"type": "object",
|
||||
"description": "Provides the ability to implement other messagers rather than the default ZeroMQ. E.g. RabbitMQ.",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A messager.",
|
||||
"properties": {
|
||||
"senderClassName": {
|
||||
"description": "A sender. Should implement Espo\\Core\\WebSocket\\Sender."
|
||||
},
|
||||
"subscriberClassName": {
|
||||
"description": "A subscriber. Should implement Espo\\Core\\WebSocket\\Subscriber."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
126
schema/metadata/authenticationMethods.json
Normal file
126
schema/metadata/authenticationMethods.json
Normal file
@@ -0,0 +1,126 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/authenticationMethods.json",
|
||||
"title": "authenticationMethods",
|
||||
"description": "An authentication method.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"implementationClassName": {
|
||||
"type": "string",
|
||||
"description": "A login implementation. Should implement `Espo\\Core\\Authentication\\Login`."
|
||||
},
|
||||
"api": {
|
||||
"type": "boolean",
|
||||
"description": "Defines that the method is to be used for pure API request, not from the front-end."
|
||||
},
|
||||
"credentialsHeader": {
|
||||
"type": "string",
|
||||
"description": "A header that is supposed to contain credentials. Actual only for API methods.",
|
||||
"examples": [
|
||||
"Authorization",
|
||||
"X-Api-Key"
|
||||
]
|
||||
},
|
||||
"credentialsHeaderScheme": {
|
||||
"type": "string",
|
||||
"description": "An authorization header scheme. The header value should start with the specified value for this method to be used. Of omitted, the header is still checked for match. As of v10.1.",
|
||||
"examples": [
|
||||
"Bearer"
|
||||
]
|
||||
},
|
||||
"login": {
|
||||
"type": "object",
|
||||
"description": "A framework providing the ability to call custom code on Sign-In button click on the login page.",
|
||||
"properties": {
|
||||
"handler": {
|
||||
"type": "string",
|
||||
"description": "A front-end class (should extend the abstract class handlers/login)."
|
||||
},
|
||||
"fallback": {
|
||||
"type": "boolean",
|
||||
"description": "Defines that a regular username/password login method is also available on the login page."
|
||||
},
|
||||
"fallbackConfigParam": {
|
||||
"type": "string",
|
||||
"description": "A config parameter name to be used to check whether fallback login is allowed."
|
||||
},
|
||||
"portal": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the handler will be available for portals, (bool)."
|
||||
},
|
||||
"portalConfigParam": {
|
||||
"type": "string",
|
||||
"description": "A config parameter name to be used to check whether the handler will be available for portals."
|
||||
},
|
||||
"data": {
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"description": "Arbitrary data to be passed to the handler. Can be actual as application metadata is not yet available on the login page."
|
||||
}
|
||||
}
|
||||
},
|
||||
"portalDefault": {
|
||||
"type": "boolean",
|
||||
"description": "If true, the method will be applied for portals when the method is selected as the default in the settings and the portal does not have a specific authentication provider."
|
||||
},
|
||||
"settings": {
|
||||
"type": "object",
|
||||
"description": "Defines config parameters and a form on the admin UI.",
|
||||
"properties": {
|
||||
"isAvailable": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the method is available in the settings."
|
||||
},
|
||||
"layout": {
|
||||
"description": "A layout.",
|
||||
"$ref": "./../layouts/detail.json#/definitions/panel"
|
||||
},
|
||||
"fieldList": {
|
||||
"description": "Settings fields.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"dynamicLogic": {
|
||||
"type": "object",
|
||||
"description": "Dynamic logic.",
|
||||
"properties": {
|
||||
"fields": {
|
||||
"type": "object",
|
||||
"description": "Fields.",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A field.",
|
||||
"properties": {
|
||||
"visible": {
|
||||
"description": "Conditions making the field visible.",
|
||||
"$ref": "./logicDefs.json#/definitions/dynamicLogicVisible"
|
||||
},
|
||||
"required": {
|
||||
"$ref": "./logicDefs.json#/definitions/dynamicLogicRequired"
|
||||
},
|
||||
"readOnly": {
|
||||
"$ref": "./logicDefs.json#/definitions/dynamicLogicReadOnly"
|
||||
},
|
||||
"invalid": {
|
||||
"$ref": "./logicDefs.json#/definitions/dynamicLogicInvalid"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"provider": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"isAvailable": {
|
||||
"type": "boolean",
|
||||
"description": "Whether is available in the Authentication Provider entity."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
1122
schema/metadata/clientDefs.json
Normal file
1122
schema/metadata/clientDefs.json
Normal file
File diff suppressed because it is too large
Load Diff
38
schema/metadata/dashlets.json
Normal file
38
schema/metadata/dashlets.json
Normal file
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/dashlets.json",
|
||||
"title": "dashlets",
|
||||
"description": "Front-end definitions for a scope.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"view": {
|
||||
"type": "string",
|
||||
"description": "A front-end view class for a dashlet."
|
||||
},
|
||||
"aclScope": {
|
||||
"type": "string",
|
||||
"description": "A scope access to which is required to have access to the dashlet."
|
||||
},
|
||||
"accessDataList": {
|
||||
"$ref": "./clientDefs.json#/definitions/accessDataList"
|
||||
},
|
||||
"options": {
|
||||
"type": "object",
|
||||
"description": "Dashlet options definitions.",
|
||||
"properties": {
|
||||
"fields": {
|
||||
"$ref": "./entityDefs.json#/properties/fields"
|
||||
},
|
||||
"defaults": {
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"description": "Default options."
|
||||
},
|
||||
"layout": {
|
||||
"$ref": "./../layouts/detail.json",
|
||||
"description": "A layout."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
71
schema/metadata/entityAcl.json
Normal file
71
schema/metadata/entityAcl.json
Normal file
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/entityAcl.json",
|
||||
"title": "entityAcl",
|
||||
"description": "ACL definitions for fields and links of an entity type.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"fields": {
|
||||
"description": "Fields.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"forbidden": {
|
||||
"description": "Totally forbidden.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"internal": {
|
||||
"description": "Reading forbidden, writing allowed.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"onlyAdmin": {
|
||||
"description": "Forbidden for non admin users.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"readOnly": {
|
||||
"description": "Read-only for all users.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"nonAdminReadOnly": {
|
||||
"description": "Read-only for non-admin users.",
|
||||
"type": "boolean"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"links": {
|
||||
"description": "Links.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"forbidden": {
|
||||
"description": "Totally forbidden.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"internal": {
|
||||
"description": "Reading forbidden, writing allowed.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"onlyAdmin": {
|
||||
"description": "Forbidden for non admin users.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"readOnly": {
|
||||
"description": "Read-only for all users.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"nonAdminReadOnly": {
|
||||
"description": "Read-only for non-admin users.",
|
||||
"type": "boolean"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"systemWriteForbidden": {
|
||||
"type": "boolean",
|
||||
"description": "Restricts record update and removal in formula and other potential configuration tools. As of v10.0."
|
||||
}
|
||||
}
|
||||
}
|
||||
1771
schema/metadata/entityDefs.json
Normal file
1771
schema/metadata/entityDefs.json
Normal file
File diff suppressed because it is too large
Load Diff
190
schema/metadata/fields.json
Normal file
190
schema/metadata/fields.json
Normal file
@@ -0,0 +1,190 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/fields.json",
|
||||
"title": "fields",
|
||||
"description": "Field definitions.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"notMergeable": {
|
||||
"type": "boolean",
|
||||
"description": "Whether this field type is mergeable (when merging duplicate records)."
|
||||
},
|
||||
"notCreatable": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the field of this type can be created in the Entity Manager tool."
|
||||
},
|
||||
"composite": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the field is composite. It means it groups other fields and had no attributes that are not from the grouped fields."
|
||||
},
|
||||
"readOnly": {
|
||||
"type": "boolean",
|
||||
"description": "Is this field type Read Only (can't be edited)."
|
||||
},
|
||||
"skipOrmDefs": {
|
||||
"type": "boolean",
|
||||
"description": "Skip converting to defs for the ORM."
|
||||
},
|
||||
"filter": {
|
||||
"type": "boolean",
|
||||
"description": "Records can be filtered by this field (available as filter on the list view)."
|
||||
},
|
||||
"view": {
|
||||
"type": "string",
|
||||
"description": "A frontend view."
|
||||
},
|
||||
"params": {
|
||||
"type": "array",
|
||||
"description": "Field parameters.",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"const": "__APPEND__"},
|
||||
{
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "./entityDefs.json#/definitions/fieldDefs"
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"hidden": {
|
||||
"type": "boolean",
|
||||
"description": "Do not display the parameter in the field manager."
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "A name."
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"fieldDefs": {
|
||||
"description": "An object of field type definition",
|
||||
"$ref": "./entityDefs.json#/definitions/fieldDefs"
|
||||
},
|
||||
"translatedOptions": {
|
||||
"type": "boolean",
|
||||
"description": "Does the field have options that can be translated."
|
||||
},
|
||||
"hookClassName": {
|
||||
"type": "string",
|
||||
"description": "A hook class. Called after the field is created or edited in the Entity Manager tool."
|
||||
},
|
||||
"fields": {
|
||||
"type": "object",
|
||||
"description": "Definitions of additional fields that will be created with this field. E.g. for address field, separate fields (street, city, etc.) are created.",
|
||||
"additionalProperties": {
|
||||
"$ref": "./entityDefs.json#/definitions/fieldDefs"
|
||||
}
|
||||
},
|
||||
"naming": {
|
||||
"enum": ["suffix", "prefix"],
|
||||
"description": "The naming determines how additional fields will be named."
|
||||
},
|
||||
"actualFields": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "The list of actual attributes (which contain useful data). For example, for field type link in actualFields is ['id'], in notActualFields is ['name']. Means, if you load record with link field, you have values in {fieldName}Id and {fieldName}Name (suffix naming). But you need set only {fieldName}Id, if you want to update this field."
|
||||
},
|
||||
"notActualFields": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "The list of not actual attributes."
|
||||
},
|
||||
"personalData": {
|
||||
"type": "boolean",
|
||||
"description": "Where the field may contain personal data."
|
||||
},
|
||||
"textFilter": {
|
||||
"type": "boolean",
|
||||
"description": "The field will be available in the list of text filters (in the Entity Manager tool)."
|
||||
},
|
||||
"textFilterForeign": {
|
||||
"type": "boolean",
|
||||
"description": "The field will be available in the list of text filters as a foreign field."
|
||||
},
|
||||
"linkDefs": {
|
||||
"$ref": "./entityDefs.json#/definitions/linkDefs",
|
||||
"description": "If defined, a link with the same name as the field name will be created."
|
||||
},
|
||||
"fullTextSearch": {
|
||||
"type": "boolean",
|
||||
"description": "Full-text search will be available for the field."
|
||||
},
|
||||
"fullTextSearchColumnList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "Columns used in full-text search."
|
||||
},
|
||||
"default": {
|
||||
"description": "Currently is not used. A default value. Used when populating defaults for a new record. Usually to be set to null."
|
||||
},
|
||||
"valueFactoryClassName": {
|
||||
"type": "string",
|
||||
"description": "A factory that creates value-objects for this field. A value-object can be obtained by calling getValueObject method on an Entity. Should implement Espo\\ORM\\Value\\ValueFactory."
|
||||
},
|
||||
"attributeExtractorClassName": {
|
||||
"type": "string",
|
||||
"description": "A class that extracts values (attribute => value map) from a value-object. Used internally for obtaining values from a value-object and writing them to an entity. Should implement Espo\\ORM\\Value\\AttributeExtractor."
|
||||
},
|
||||
"validationList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"type": "string"},
|
||||
{"const": "__APPEND__"}
|
||||
]
|
||||
},
|
||||
"description": "Validations applied server-side."
|
||||
},
|
||||
"mandatoryValidationList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"type": "string"},
|
||||
{"const": "__APPEND__"}
|
||||
]
|
||||
},
|
||||
"description": "Validations applied server-side."
|
||||
},
|
||||
"validatorClassNameMap": {
|
||||
"type": "object",
|
||||
"description": "Validators. Should implement Espo\\Core\\FieldValidation\\Validator.",
|
||||
"additionalProperties": {
|
||||
"type": "string",
|
||||
"description": "A validation name."
|
||||
}
|
||||
},
|
||||
"duplicatorClassName": {
|
||||
"type": "string",
|
||||
"description": "Duplicates attributes of a field. Some fields can require some processing when an entity is being duplicated. Should implement Espo\\Core\\Record\\Duplicator\\FieldDuplicator."
|
||||
},
|
||||
"converterClassName": {
|
||||
"type": "string",
|
||||
"description": "A metadata converter. Converts field metadata to ORM metadata. Should implement Espo\\Core\\Utils\\Database\\Orm\\FieldConverter. Not applied if `fieldDefs` is specified."
|
||||
},
|
||||
"sanitizerClassName": {
|
||||
"type": "string",
|
||||
"description": "A sanitizer. Should implement Espo\\Core\\FieldSanitize\\Sanitizer."
|
||||
},
|
||||
"sanitizerClassNameList": {
|
||||
"type": "array",
|
||||
"items": {"type": "string"},
|
||||
"description": "Sanitizers. Classes should implement Espo\\Core\\FieldSanitize\\Sanitizer. As of v8.2."
|
||||
},
|
||||
"massUpdateActionList": {
|
||||
"type": "array",
|
||||
"items": {"type": "string"},
|
||||
"description": "Actions for mass update."
|
||||
}
|
||||
}
|
||||
}
|
||||
47
schema/metadata/integrations.json
Normal file
47
schema/metadata/integrations.json
Normal file
@@ -0,0 +1,47 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/integrations.json",
|
||||
"title": "integrations",
|
||||
"description": "Integrations.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"fields": {
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"$ref": "./entityDefs.json#/definitions/fieldDefs"
|
||||
},
|
||||
"description": "Field definitions for the integration (to be available at Administration > Integrations)."
|
||||
},
|
||||
"allowUserAccounts": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the integration supposes that users have their own accounts (at User > External Accounts)."
|
||||
},
|
||||
"userAccountAclScope": {
|
||||
"type": "string",
|
||||
"description": "A scope name, a user should have access to to be able to use the integration."
|
||||
},
|
||||
"view": {
|
||||
"type": "string",
|
||||
"description": "A front-end view for the integration page (at Administration > Integrations)."
|
||||
},
|
||||
"userView": {
|
||||
"type": "string",
|
||||
"description": "A front-end view for the external account page (at User > External Accounts)."
|
||||
},
|
||||
"params": {
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"description": "Any params needed for the integration."
|
||||
},
|
||||
"externalAccountSecretAttributeList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"const": "__APPEND__"},
|
||||
{"type": "string"}
|
||||
]
|
||||
},
|
||||
"description": "External account attributes to be hidden from the front-end."
|
||||
}
|
||||
}
|
||||
}
|
||||
298
schema/metadata/logicDefs.json
Normal file
298
schema/metadata/logicDefs.json
Normal file
@@ -0,0 +1,298 @@
|
||||
{
|
||||
"$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"
|
||||
},
|
||||
"readOnlySaved": {
|
||||
"$ref": "#/definitions/dynamicLogicReadOnlySaved"
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"dynamicLogicReadOnlySaved": {
|
||||
"type": "object",
|
||||
"description": "Saved-state conditions making the field read-only. As of v9.1.",
|
||||
"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"]
|
||||
}
|
||||
}
|
||||
}
|
||||
24
schema/metadata/notificationDefs.json
Normal file
24
schema/metadata/notificationDefs.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/notificationDefs.json",
|
||||
"title": "notificationDefs",
|
||||
"description": "Notification framework definitions for a scope.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"assignmentNotificatorClassName": {
|
||||
"type": "string",
|
||||
"description": "An assignment notificator. Should implement Espo\\Core\\Notification\\AssignmentNotificator interface. Processes assignment notifications. Called after entity is saved. By default, Espo\\Core\\Notification\\DefaultAssignmentNotificator is used."
|
||||
},
|
||||
"emailNotificationHandlerClassNameMap": {
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "Email notification handlers. Should implement Espo\\Core\\Notification\\EmailNotificationHandler interface. Handles a notification emails (supposed for adding CC, BCC addresses). Provides sender parameters for notification emails (e.g. setting Reply-To address)."
|
||||
},
|
||||
"forceAssignmentNotificator": {
|
||||
"type": "boolean",
|
||||
"description": "To force processing assignment notifications (upon record save). Otherwise, it may be bypassed in some scenarios (e.g. when the Stream is enabled for the entity type)."
|
||||
}
|
||||
}
|
||||
}
|
||||
33
schema/metadata/pdfDefs.json
Normal file
33
schema/metadata/pdfDefs.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/pdfDefs.json",
|
||||
"title": "pdfDefs",
|
||||
"description": "PDF printing definitions for a scope.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"dataLoaderClassNameList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"const": "__APPEND__"},
|
||||
{"type": "string"}
|
||||
]
|
||||
},
|
||||
"description": "List of classes that loads additional data for PDF. Classes should implement the interface Espo\\Tools\\Pdf\\DataLoader. Use __APPEND__ for extending."
|
||||
},
|
||||
"pdfA": {
|
||||
"type": "boolean",
|
||||
"description": "Use PDF/A. Since v9.2."
|
||||
},
|
||||
"attachmentProviderClassNameList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"anyOf": [
|
||||
{"const": "__APPEND__"},
|
||||
{"type": "string"}
|
||||
]
|
||||
},
|
||||
"description": "Attachment providers. Should implement `Espo\\Tools\\Pdf\\AttachmentProvider`. Since v9.2."
|
||||
}
|
||||
}
|
||||
}
|
||||
290
schema/metadata/recordDefs.json
Normal file
290
schema/metadata/recordDefs.json
Normal file
@@ -0,0 +1,290 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/recordDefs.json",
|
||||
"title": "recordDefs",
|
||||
"description": "Record framework definitions for a scope.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"duplicateWhereBuilderClassName": {
|
||||
"description": "A class for building a where clause for duplicate checking. Should implement Espo\\Core\\Duplicate\\WhereBuilder interface.",
|
||||
"type": "string"
|
||||
},
|
||||
"defaultsPopulatorClassName": {
|
||||
"description": "Populates default values when creating a record. Should implement Espo\\Core\\Record\\Defaults\\Populator. As of v8.2.",
|
||||
"type": "string"
|
||||
},
|
||||
"readLoaderClassNameList": {
|
||||
"description": "Classes to load additional fields for an entity. Should implement Espo\\Core\\FieldProcessing\\Loader interface.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"listLoaderClassNameList": {
|
||||
"description": "Classes to load additional fields for an entity for the list view. Should implement Espo\\Core\\FieldProcessing\\Loader interface.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"saverClassNameList": {
|
||||
"description": "Classes to save additional fields. Should implement Espo\\Core\\FieldProcessing\\Saver interface.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"selectApplierClassNameList": {
|
||||
"description": "Classes for additional handling of a select query. Use for joining additional fields. Do not use for access control logic. Should implement Espo\\Core\\Select\\Applier\\AdditionalApplier interface.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"description": "Actions. E.g. merge, convertCurrency.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"disabled": {
|
||||
"description": "Disables the action.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"allowed": {
|
||||
"description": "Allows the action for non-object scopes.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"implementationClassName": {
|
||||
"description": "A class name, should implement Espo\\Core\\Action\\Action interface.",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"massActions": {
|
||||
"description": "Mass actions. E.g. update, delete, convertCurrency, follow, unfollow, recalculateFormula.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"disabled": {
|
||||
"description": "Disables the action.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"allowed": {
|
||||
"description": "Allows the action for non-object scopes.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"implementationClassName": {
|
||||
"description": "A class name, should implement Espo\\Core\\MassAction\\MassAction interface.",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"actionsDisabled": {
|
||||
"description": "Disable actions in the back-end.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"massActionsDisabled": {
|
||||
"description": "Disable mass actions in the back-end.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"exportDisabled": {
|
||||
"description": "Disable export regardless ACL.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"actionHistoryDisabled": {
|
||||
"description": "Disable Action History processing. As of v8.2.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"updateDuplicateCheck": {
|
||||
"description": "If true, then duplicate checking will be processed while updating a record.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"forceSelectAllAttributes": {
|
||||
"type": "boolean",
|
||||
"description": "Always select all attributes when calling find. As of v8.2."
|
||||
},
|
||||
"mandatoryAttributeList": {
|
||||
"description": "Mandatory attributes to be selected when calling find. As of v8.2.",
|
||||
"type": "array",
|
||||
"items": {"type": "string"}
|
||||
},
|
||||
"duplicateLinkList": {
|
||||
"description": "Links to be copied when duplicating a record. As of v8.2.",
|
||||
"type": "array",
|
||||
"items": {"type": "string"}
|
||||
},
|
||||
"relationships": {
|
||||
"description": "Relationship parameters. Key-object pairs, where keys are link names.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A link.",
|
||||
"properties": {
|
||||
"countDisabled": {
|
||||
"type": "boolean",
|
||||
"description": "Disable total count. As of v8.2."
|
||||
},
|
||||
"selectAccessControlDisabled": {
|
||||
"description": "Disable access control when listing related records; only access to a parent record will be checked.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"linkRequiredAccess": {
|
||||
"description": "Access to a current record that is needed to be able to link and unlink records.",
|
||||
"type": "string",
|
||||
"enum": ["create", "read", "edit", "delete", "stream"]
|
||||
},
|
||||
"linkRequiredForeignAccess": {
|
||||
"description": "Access to a foreign record that is needed to be able to link and unlink.",
|
||||
"type": "string",
|
||||
"enum": ["create", "read", "edit", "delete", "stream"]
|
||||
},
|
||||
"linkForeignAccessCheckDisabled": {
|
||||
"description": "Disable foreign record access check when linking.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"linkCheckDisabled": {
|
||||
"description": "Disable a link-check functionality when linking through link or link-multiple field.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"mandatoryAttributeList": {
|
||||
"description": "Mandatory attributes to be selected when find related. As of v8.2.",
|
||||
"type": "array",
|
||||
"items": {"type": "string"}
|
||||
},
|
||||
"massLink": {
|
||||
"type": "boolean",
|
||||
"description": "Allow mass link. As of v8.2."
|
||||
},
|
||||
"linkOnlyNotLinked": {
|
||||
"type": "boolean",
|
||||
"description": "Allow linking only if a record is not linked with any. As of v8.3."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"loadAdditionalFieldsAfterUpdate": {
|
||||
"type": "boolean",
|
||||
"description": "Load additional fields after update. Needed for cases when additional fields need to be re-loaded since they are not actual after update."
|
||||
},
|
||||
"createInputFilterClassNameList": {
|
||||
"description": "Create input filters. Should implement Espo\\Core\\Record\\Input\\Filter. As of v8.2.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"updateInputFilterClassNameList": {
|
||||
"description": "Update input filters. Should implement Espo\\Core\\Record\\Input\\Filter. As of v8.2.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"outputFilterClassNameList": {
|
||||
"description": "Output filters. Should implement Espo\\Core\\Record\\Output\\Filter. As of v8.2.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"beforeReadHookClassNameList": {
|
||||
"description": "Before-read hooks. Should implement the Espo\\Core\\Record\\Hook\\ReadHook interface.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"earlyBeforeCreateHookClassNameList": {
|
||||
"description": "Early-before-create hooks. Run before validation. Should implement the Espo\\Core\\Record\\Hook\\CreateHook or Espo\\Core\\Record\\Hook\\SaveHook interface. As of v9.0.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"beforeCreateHookClassNameList": {
|
||||
"description": "Before-create hooks. Should implement the Espo\\Core\\Record\\Hook\\CreateHook or Espo\\Core\\Record\\Hook\\SaveHook interface.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"afterCreateHookClassNameList": {
|
||||
"description": "After-create hooks. Should implement the Espo\\Core\\Record\\Hook\\CreateHook or Espo\\Core\\Record\\Hook\\SaveHook interface. As of v8.2.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"earlyBeforeUpdateHookClassNameList": {
|
||||
"description": "Early-before-update hooks. Run before validation. Should implement the Espo\\Core\\Record\\Hook\\UpdateHook or Espo\\Core\\Record\\Hook\\SaveHook interface. As of v9.0.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"beforeUpdateHookClassNameList": {
|
||||
"description": "Before-update hooks. Should implement the Espo\\Core\\Record\\Hook\\UpdateHook or Espo\\Core\\Record\\Hook\\SaveHook interface.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"afterUpdateHookClassNameList": {
|
||||
"description": "Before-update hooks. Should implement the Espo\\Core\\Record\\Hook\\UpdateHook or Espo\\Core\\Record\\Hook\\SaveHook interface. As of v8.2.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"beforeDeleteHookClassNameList": {
|
||||
"description": "Before-delete hooks. Should implement the Espo\\Core\\Record\\Hook\\DeleteHook interface.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"afterDeleteHookClassNameList": {
|
||||
"description": "Before-delete hooks. Should implement the Espo\\Core\\Record\\Hook\\DeleteHook interface. As of v8.2.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"beforeLinkHookClassNameList": {
|
||||
"description": "Before-link hooks. Should implement the Espo\\Core\\Record\\Hook\\LinkHook interface.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"beforeUnlinkHookClassNameList": {
|
||||
"description": "Before-unlink hooks. Should implement the Espo\\Core\\Record\\Hook\\UnlinkHook interface.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"afterLinkHookClassNameList": {
|
||||
"description": "After-link hooks. Should implement the Espo\\Core\\Record\\Hook\\LinkHook interface. As of v8.2.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"afterUnlinkHookClassNameList": {
|
||||
"description": "After-unlink hooks. Should implement the Espo\\Core\\Record\\Hook\\UnlinkHook interface. As of v8.2.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"deletedRestorerClassName": {
|
||||
"type": "string",
|
||||
"description": "A deleted record restorer. Should implement `Espo\\Core\\Record\\Deleted\\Restorer`. As of v9.2."
|
||||
}
|
||||
}
|
||||
}
|
||||
373
schema/metadata/scopes.json
Normal file
373
schema/metadata/scopes.json
Normal file
@@ -0,0 +1,373 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/scopes.json",
|
||||
"title": "scopes",
|
||||
"description": "Scope definitions.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"entity": {
|
||||
"description": "Whether the scope represents an entity type.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"object": {
|
||||
"description": "Whether the entity is a business object. Means that it's not an entity for internal system purpose; an object entity represents some business entity.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"module": {
|
||||
"description": "The the name of the module, where this scope is defined.",
|
||||
"type": "string"
|
||||
},
|
||||
"stream": {
|
||||
"description": "Whether the entity has the stream.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"stars": {
|
||||
"description": "Enables stars.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"collaborators": {
|
||||
"description": "Enables collaborators.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"lockable": {
|
||||
"description": "Enables record locking.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"importable": {
|
||||
"description": "Whether the entity is available in the Import tool.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"layouts": {
|
||||
"description": "Whether the entity is available in the Layout Manager tool.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"tab": {
|
||||
"description": "Whether the scope is available as a navbar tab.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"tabAclPermission": {
|
||||
"description": "A permission level required for a user to have the scope available as a navbar tab. Examples: portal, massUpdate.",
|
||||
"type": ["string", "null"]
|
||||
},
|
||||
"tabPortal": {
|
||||
"description": "To allow the navbar tab for the portal even if aclPortal is false. As if v9.3.0.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"type": {
|
||||
"description": "A template type of the entity. E.g. Base, BasePlus, Person, Company, CategoryTree, Event.",
|
||||
"type": ["string", "null"]
|
||||
},
|
||||
"acl": {
|
||||
"description": "Whether the scope is available in Roles. Available values: true, false, \"boolean\". Boolean means that it will be available in roles w/o actions.",
|
||||
"anyOf": [
|
||||
{
|
||||
"type" : "boolean"
|
||||
},
|
||||
{
|
||||
"type" : "string",
|
||||
"enum": ["boolean"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"aclPortal": {
|
||||
"description": "Whether the scope is available in Portal Roles. Available values: true, false, \"boolean\". Boolean means that it will be available in roles w/o actions.",
|
||||
"anyOf": [
|
||||
{
|
||||
"type" : "boolean"
|
||||
},
|
||||
{
|
||||
"type" : "string",
|
||||
"enum": ["boolean"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"aclActionList": {
|
||||
"description": "A list of available actions in Roles.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"enum": ["create", "read", "edit", "delete", "stream"]
|
||||
}
|
||||
},
|
||||
"aclPortalActionList": {
|
||||
"description": "A list of available actions in Portal Roles.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"enum": ["create", "read", "edit", "delete", "stream"]
|
||||
}
|
||||
},
|
||||
"aclLevelList": {
|
||||
"description": "A list of available levels in Roles.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"enum": ["yes", "all", "team", "own", "no"]
|
||||
}
|
||||
},
|
||||
"aclPortalLevelList": {
|
||||
"description": "A list of available levels in Portal Roles.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"enum": ["all", "account", "contact","own", "no"]
|
||||
}
|
||||
},
|
||||
"aclActionLevelListMap": {
|
||||
"description": "Lists of available levels for specific actions in Roles.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"create": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": ["all", "team", "own", "no"]
|
||||
}
|
||||
},
|
||||
"read": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": ["all", "team", "own", "no"]
|
||||
}
|
||||
},
|
||||
"edit": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": ["all", "team", "own", "no"]
|
||||
}
|
||||
},
|
||||
"delete": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": ["all", "team", "own", "no"]
|
||||
}
|
||||
},
|
||||
"stream": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": ["all", "team", "own", "no"]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"aclPortalActionLevelListMap": {
|
||||
"description": "Lists of available levels for specific actions in Portal Roles.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"create": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"all",
|
||||
"account",
|
||||
"contact",
|
||||
"own",
|
||||
"no"
|
||||
]
|
||||
}
|
||||
},
|
||||
"read": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"all",
|
||||
"account",
|
||||
"contact",
|
||||
"own",
|
||||
"no"
|
||||
]
|
||||
}
|
||||
},
|
||||
"edit": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"all",
|
||||
"account",
|
||||
"contact",
|
||||
"own",
|
||||
"no"
|
||||
]
|
||||
}
|
||||
},
|
||||
"delete": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"all",
|
||||
"account",
|
||||
"contact",
|
||||
"own",
|
||||
"no"
|
||||
]
|
||||
}
|
||||
},
|
||||
"stream": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"all",
|
||||
"account",
|
||||
"contact",
|
||||
"own",
|
||||
"no"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"aclFieldLevelDisabled": {
|
||||
"type": "boolean",
|
||||
"description": "Disable field-level security."
|
||||
},
|
||||
"aclPortalFieldLevelDisabled": {
|
||||
"type": "boolean",
|
||||
"description": "Disable field-level security for portals."
|
||||
},
|
||||
"statusField": {
|
||||
"description": "Defines a field that should be used as a status field.",
|
||||
"type": "string"
|
||||
},
|
||||
"statusFieldLocked": {
|
||||
"description": "Disables the ability to change the status field.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"disabled": {
|
||||
"description": "Disables the scope in the system.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"customizable": {
|
||||
"description": "Weather the entity can be customized in the Entity Manager tool.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"isCustom": {
|
||||
"description": "Entities created in the Entity Manager tool marked as custom.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"notifications": {
|
||||
"description": "Whether notifications can be enabled for the entity.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"calendar": {
|
||||
"description": "Whether the entity can be displayed on the Calendar.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"calendarOneDay": {
|
||||
"description": "Display as one-day events in the calendar.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"activity": {
|
||||
"description": "Whether the entity can be displayed on the Activities panel.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"activityStatusList": {
|
||||
"description": "Status values that determine that a record should be shown in the Activities panel.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"historyStatusList": {
|
||||
"description": "Status values that determine that a record should be shown in the History panel.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"kanbanStatusIgnoreList": {
|
||||
"description": "Status values to be ignored on the Kanban view.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"kanbanOrderDisabled": {
|
||||
"description": "Disable the ability to order items for users.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"languageIsGlobal": {
|
||||
"description": "Language labels will be available for all users (not restricted by ACL).",
|
||||
"type": "boolean"
|
||||
},
|
||||
"languageAclDisabled": {
|
||||
"description": "Disables access control application for language labels. All labels of the scope will be available in the front-end regardless of user roles.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"hasPersonalData": {
|
||||
"description": "Whether the entity may contain personal data.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"preserveAuditLog": {
|
||||
"description": "Disables audit log cleanup. As of v9.0.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"exportFormatList": {
|
||||
"description": "A list of allowed export formats. E.g. csv, xlsx.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"currencyConversionAccessRequiredFieldList": {
|
||||
"description": "When a user converts currency of an entity, edit access to all listed fields is checked. Otherwise, the operation will be forbidden.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"duplicateCheckFieldList": {
|
||||
"description": "Fields to be check for duplicates. Requires recordDefs > duplicateWhereBuilderClassName set to Espo\\Classes\\DuplicateWhereBuilders\\General.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"lastViewed": {
|
||||
"type": "boolean",
|
||||
"description": "Force to be available in Last Viewed."
|
||||
},
|
||||
"accountLink": {
|
||||
"type": "string",
|
||||
"description": "A link determining the Account the record belongs to. The system falls back to 'account' if such a link exists. As of v10.0."
|
||||
},
|
||||
"parentLink": {
|
||||
"type": "string",
|
||||
"description": "A link determining the parent record. For example, a project is a parent for a task. The system falls back to 'parent' if such a link exists. As of v10.0."
|
||||
},
|
||||
"entityManager": {
|
||||
"description": "Entity manager items availability.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"layouts": {
|
||||
"type": "boolean",
|
||||
"description": "Layouts."
|
||||
},
|
||||
"edit": {
|
||||
"type": "boolean",
|
||||
"description": "Edit the entity."
|
||||
},
|
||||
"formula": {
|
||||
"type": "boolean",
|
||||
"description": "Formula scripts."
|
||||
},
|
||||
"fields": {
|
||||
"type": "boolean",
|
||||
"description": "Fields."
|
||||
},
|
||||
"relationships": {
|
||||
"type": "boolean",
|
||||
"description": "Relationships."
|
||||
},
|
||||
"addField": {
|
||||
"type": "boolean",
|
||||
"description": "The ability to add new fields."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
103
schema/metadata/selectDefs.json
Normal file
103
schema/metadata/selectDefs.json
Normal file
@@ -0,0 +1,103 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/selectDefs.json",
|
||||
"title": "selectDefs",
|
||||
"description": "Select framework definitions for a scope.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"accessControlFilterClassNameMap": {
|
||||
"description": "Access control filters. Classes should implement Espo\\Core\\Select\\AccessControl\\Filter interface.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"mandatory": {"type": "string"},
|
||||
"all": {"type": "string"},
|
||||
"onlyTeam": {"type": "string"},
|
||||
"onlyOwn": {"type": "string"},
|
||||
"portalAll": {"type": "string"},
|
||||
"portalOnlyAccount": {"type": "string"},
|
||||
"portalOnlyContact": {"type": "string"},
|
||||
"portalOnlyOwn": {"type": "string"}
|
||||
},
|
||||
"additionalProperties": {
|
||||
"type": "string",
|
||||
"description": "A filter."
|
||||
}
|
||||
},
|
||||
"primaryFilterClassNameMap": {
|
||||
"description": "Primary filters. Classes should implement Espo\\Core\\Select\\Primary\\Filter interface.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string",
|
||||
"description": "A filter."
|
||||
}
|
||||
},
|
||||
"boolFilterClassNameMap": {
|
||||
"description": "Bool filters. Classes should implement Espo\\Core\\Select\\Bool\\Filter interface.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string",
|
||||
"description": "A filter."
|
||||
}
|
||||
},
|
||||
"selectAttributesDependencyMap": {
|
||||
"description": "When a specific attribute is requested in the select parameter, attributes defined by the map will be selected.",
|
||||
"additionalProperties": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"description": "An attribute."
|
||||
}
|
||||
}
|
||||
},
|
||||
"whereItemConverterClassNameMap": {
|
||||
"description": "Implementations for custom where items. Classes should implement Espo\\Core\\Select\\Where\\ItemConverter interface. The key format: '{fieldName}_{conditionItemType}'.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string",
|
||||
"description": "A key in `{fieldName}_{conditionItemType}` format."
|
||||
}
|
||||
},
|
||||
"accessControlFilterResolverClassName": {
|
||||
"description": "A resolver is responsible for choosing an access filter. Should implement Espo\\Core\\Select\\AccessControl\\FilterResolver interface.",
|
||||
"type": "string"
|
||||
},
|
||||
"portalAccessControlFilterResolverClassName": {
|
||||
"description": "A resolver is responsible for choosing an access filter for portals. Should implement Espo\\Core\\Select\\AccessControl\\FilterResolver interface.",
|
||||
"type": "string"
|
||||
},
|
||||
"textFilterClassName": {
|
||||
"description": "A class that processes the text filter search. Should implement Espo\\Core\\Select\\Text\\Filter interface.",
|
||||
"type": "string"
|
||||
},
|
||||
"orderItemConverterClassNameMap": {
|
||||
"description": "An order converter converts order parameters passed from the frontend to an order data acceptable for ORM. One can implement a custom converter for a specific field. Classes should implement Espo\\Core\\Select\\Order\\ItemConverter interface.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string",
|
||||
"description": "A field."
|
||||
}
|
||||
},
|
||||
"ordererClassNameMap": {
|
||||
"description": "Provides the ability to apply custom order for a specific field. Classes should implement Espo\\Core\\Select\\Order\\Orderer interface.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string",
|
||||
"description": "A field."
|
||||
}
|
||||
},
|
||||
"additionalApplierClassNameList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "Additional appliers. Should implement Espo\\Core\\Select\\Applier\\AdditionalApplier interface. Since v9.1.0."
|
||||
},
|
||||
"textFilterUseContainsAttributeList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "Force the contains search for the specified attributes."
|
||||
}
|
||||
}
|
||||
}
|
||||
42
schema/metadata/streamDefs.json
Normal file
42
schema/metadata/streamDefs.json
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/streamDefs.json",
|
||||
"title": "pdfDefs",
|
||||
"description": "Stream definitions for a scope.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"followingUsersField": {
|
||||
"type": "string",
|
||||
"description": "A field (of a link-multiple type) that store users which should automatically follow a record. If not set, then the assignedUsers field is checked for existence and then used. E.g. for the Meeting, it's the users field."
|
||||
},
|
||||
"subscribersCleanup": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"enabled": {
|
||||
"type": "boolean",
|
||||
"description": "Enables the cleanup of subscribers."
|
||||
},
|
||||
"dateField": {
|
||||
"type": "string",
|
||||
"description": "A date (or date-time) field that stores a value after which followers will automatically unfollow a record."
|
||||
},
|
||||
"statusList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "A list of statuses records should have to be eligible for the subscribers cleanup. "
|
||||
}
|
||||
},
|
||||
"description": "Subscribers cleanup."
|
||||
},
|
||||
"bypassAssignedUserFollow": {
|
||||
"type": "boolean",
|
||||
"description": "Assigned users won't follow the record when they get assigned to it. If enabling, consider also enabling `forceAssignmentNotificator` in notificationDefs – otherwise, the assignee won't receive any notification. As of v10.0."
|
||||
},
|
||||
"allowInternalNotes": {
|
||||
"type": "boolean",
|
||||
"description": "Allow internal notes. As of v10.0."
|
||||
}
|
||||
}
|
||||
}
|
||||
21
schema/module.json
Normal file
21
schema/module.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/module.json",
|
||||
"title": "module",
|
||||
"description": "An Espo module.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order is used by the system to define which module to load first."
|
||||
},
|
||||
"jsTranspiled": {
|
||||
"type": "boolean",
|
||||
"description": "Indicates that JS files in the module are transpiled."
|
||||
},
|
||||
"bundled": {
|
||||
"type": "boolean",
|
||||
"description": "Indicates that frontend files in the module are bundled."
|
||||
}
|
||||
}
|
||||
}
|
||||
72
schema/routes.json
Normal file
72
schema/routes.json
Normal file
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/routes.json",
|
||||
"title": "routes",
|
||||
"description": "Backend API routes.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"description": "A route.",
|
||||
"properties": {
|
||||
"route": {
|
||||
"type": "string",
|
||||
"description": "A route path. Example: `/MyScope/:id/myAction`."
|
||||
},
|
||||
"method": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"get",
|
||||
"post",
|
||||
"put",
|
||||
"delete",
|
||||
"options",
|
||||
"patch"
|
||||
],
|
||||
"description": "An HTTP method."
|
||||
},
|
||||
"noAuth": {
|
||||
"type": "boolean",
|
||||
"description": "Makes the route not requiring authentication."
|
||||
},
|
||||
"actionClassName": {
|
||||
"type": "string",
|
||||
"description": "An action class. Should implement the interface Espo\\Core\\Api\\Action."
|
||||
},
|
||||
"consumes": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"description": "Media type.",
|
||||
"examples": [
|
||||
"application/json",
|
||||
"multipart/form-data",
|
||||
"application/x-www-form-urlencoded",
|
||||
"text/plain"
|
||||
]
|
||||
},
|
||||
"description": "If defined, restricts content types allowed for the endpoint. If an empty array, the Content-Type header must be empty. As of v10.1."
|
||||
},
|
||||
"params": {
|
||||
"type": "object",
|
||||
"description": "Parameters. If starts with a colon, then will be parsed from the URI. Example: `:id`.",
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
},
|
||||
"properties": {
|
||||
"controller": {
|
||||
"type": "string",
|
||||
"description": "A controller name."
|
||||
},
|
||||
"action": {
|
||||
"type": "string",
|
||||
"description": "A controller action name."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"route",
|
||||
"method"
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user