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 2s
Test Integration on MySQL / Test on PHP 8.5 (push) Failing after 0s
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:
upstream-mirror
2026-09-18 04:19:15 +05:00
commit 7cc7e6b4f3
10077 changed files with 900756 additions and 0 deletions

View 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"
}
}
}
}

View 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"
}
}
}
}

View 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."
}
}
}
}

View 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."
}
}
}
}

View 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."
}
}
}
]
}
}
}
}
}

View 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."
}
}
}

View 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."
}
}
}
}

View 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."
}
}
}

View 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."
}
}
}
}

View 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."
}
}
}
}

View 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."
}
}
}

View 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__"]}
]
}
}
}
}

View 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."
}
}
}
}
}
}

View 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"
}
}
}
}

View 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."
}
}
}
}

View 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__"]
}
]
}
}
}
}

View 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__"]}
]
}
}
}
}

View 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."
}
}
}
}

View 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)."
}
}
}
}

View 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}$"
}
]
}
}
}
}

View 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."
}
}
}
}

View 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"}
]
}
}
}
}
}

View 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__"]}
]
}
}
}
}

View 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"
}
}
}
}
}

View 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
}
}
}

View 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.."
}
}
}
}

View 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"
}
]
}
}
}
}

View 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."
}
}
}
}
}

View 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"}
]
}
}

View 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."
}
}
}
}

View 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."
}
}
}
}

View 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"
}
}
}
}
}
}
}
}
}
}
}

View 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."
}
}
}

View 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.+]+$"
}
]
}
}
}
}

View 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"
}
}
}
}

View 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."
}
}
}
}

View 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"
}
}
}
}

View 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"
}
}
}
}
}

View 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."
}
}
}
}

View 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"
}
}
}
}
}
}
}

View 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."
}
}
}
}
}

View 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"
}
]
}
}
}
}

View 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."
}
}
}
}

View 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."
}
}
}
}

View 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"
}
}
}
}
}
}
}

View 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"
}
}
}
}
}
}
}

View 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."
}
}
}
}

View 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."
}
}
}
}

View 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)."
}
}
}
}

View 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."
}
}
}
}
}
}

View 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"
}
}
}
}

View 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"
}
}
}
}

View 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"
]
}
]
}
}
}

View 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."
}
}
}
}

View 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."
}
}
}
}

View 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."
}
}
}
}

View 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"
}
}
}
}

View 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."
}
}
}
}

View 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."
}
}

View 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."
}
}
}
}

View 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."
}
}
}
}
}
}