mirror of
https://github.com/espocrm/espocrm.git
synced 2026-03-03 02:27:01 +00:00
schema
This commit is contained in:
1
.idea/.gitignore
generated
vendored
1
.idea/.gitignore
generated
vendored
@@ -4,3 +4,4 @@
|
||||
!/fileTemplates
|
||||
!/inspectionProfiles
|
||||
!misc.xml
|
||||
!jsonSchemas.xml
|
||||
|
||||
420
.idea/jsonSchemas.xml
generated
Normal file
420
.idea/jsonSchemas.xml
generated
Normal file
@@ -0,0 +1,420 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="JsonSchemaMappingsProjectConfiguration">
|
||||
<state>
|
||||
<map>
|
||||
<entry key="JSON Schema version 7">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="name" value="JSON Schema version 7" />
|
||||
<option name="relativePathToSchema" value="http://json-schema.org/draft-07/schema" />
|
||||
<option name="schemaVersion" value="JSON Schema version 7" />
|
||||
<option name="applicationDefined" value="true" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="directory" value="true" />
|
||||
<option name="path" value="schema/layouts" />
|
||||
<option name="mappingKind" value="Directory" />
|
||||
</Item>
|
||||
<Item>
|
||||
<option name="directory" value="true" />
|
||||
<option name="path" value="schema/metadata" />
|
||||
<option name="mappingKind" value="Directory" />
|
||||
</Item>
|
||||
<Item>
|
||||
<option name="path" value="schema/module.json" />
|
||||
</Item>
|
||||
<Item>
|
||||
<option name="path" value="schema/routes.json" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="layouts/detail">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="generatedName" value="New Schema" />
|
||||
<option name="name" value="layouts/detail" />
|
||||
<option name="relativePathToSchema" value="schema/layouts/detail.json" />
|
||||
<option name="schemaVersion" value="JSON Schema version 7" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/Resources/layouts/*/detail.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/Resources/layouts/*/detailConvert.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/Resources/layouts/*/detailSmall.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="layouts/list">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="generatedName" value="New Schema" />
|
||||
<option name="name" value="layouts/list" />
|
||||
<option name="relativePathToSchema" value="schema/layouts/list.json" />
|
||||
<option name="schemaVersion" value="JSON Schema version 7" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/Resources/layouts/*/list.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/Resources/layouts/*/listFor*.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/Resources/layouts/*/listSmall.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="metadata/aclDefs">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="generatedName" value="New Schema" />
|
||||
<option name="name" value="metadata/aclDefs" />
|
||||
<option name="relativePathToSchema" value="schema/metadata/aclDefs.json" />
|
||||
<option name="schemaVersion" value="JSON Schema version 7" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/metadata/aclDefs/*.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="metadata/app/acl">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="generatedName" value="New Schema" />
|
||||
<option name="name" value="metadata/app/acl" />
|
||||
<option name="relativePathToSchema" value="schema/metadata/app/acl.json" />
|
||||
<option name="schemaVersion" value="JSON Schema version 7" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/Resources/metadata/app/acl.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="metadata/app/aclPortal">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="generatedName" value="New Schema" />
|
||||
<option name="name" value="metadata/app/aclPortal" />
|
||||
<option name="relativePathToSchema" value="schema/metadata/app/aclPortal.json" />
|
||||
<option name="schemaVersion" value="JSON Schema version 7" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/Resources/metadata/app/aclPortal.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="metadata/app/api">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="generatedName" value="New Schema" />
|
||||
<option name="name" value="metadata/app/api" />
|
||||
<option name="relativePathToSchema" value="schema/metadata/app/api.json" />
|
||||
<option name="schemaVersion" value="JSON Schema version 7" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/Resources/metadata/app/api.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="metadata/clientDefs">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="generatedName" value="New Schema" />
|
||||
<option name="name" value="metadata/clientDefs" />
|
||||
<option name="relativePathToSchema" value="schema/metadata/clientDefs.json" />
|
||||
<option name="schemaVersion" value="JSON Schema version 7" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/metadata/clientDefs/*.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="metadata/dashlets">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="generatedName" value="New Schema" />
|
||||
<option name="name" value="metadata/dashlets" />
|
||||
<option name="relativePathToSchema" value="schema/metadata/dashlets.json" />
|
||||
<option name="schemaVersion" value="JSON Schema version 7" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/metadata/dashlets/*.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="metadata/entityAcl">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="generatedName" value="New Schema" />
|
||||
<option name="name" value="metadata/entityAcl" />
|
||||
<option name="relativePathToSchema" value="schema/metadata/entityAcl.json" />
|
||||
<option name="schemaVersion" value="JSON Schema version 7" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/metadata/entityAcl/*.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="metadata/entityDefs">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="generatedName" value="New Schema" />
|
||||
<option name="name" value="metadata/entityDefs" />
|
||||
<option name="relativePathToSchema" value="schema/metadata/entityDefs.json" />
|
||||
<option name="schemaVersion" value="JSON Schema version 7" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/metadata/entityDefs/*.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="metadata/integrations">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="generatedName" value="New Schema" />
|
||||
<option name="name" value="metadata/integrations" />
|
||||
<option name="relativePathToSchema" value="schema/metadata/integrations.json" />
|
||||
<option name="schemaVersion" value="JSON Schema version 7" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/metadata/integrations/*.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="metadata/notificationDefs">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="generatedName" value="New Schema" />
|
||||
<option name="name" value="metadata/notificationDefs" />
|
||||
<option name="relativePathToSchema" value="schema/metadata/notificationDefs.json" />
|
||||
<option name="schemaVersion" value="JSON Schema version 7" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/metadata/notificationDefs/*.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="metadata/pdfDefs">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="generatedName" value="New Schema" />
|
||||
<option name="name" value="metadata/pdfDefs" />
|
||||
<option name="relativePathToSchema" value="schema/metadata/pdfDefs.json" />
|
||||
<option name="schemaVersion" value="JSON Schema version 7" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/metadata/pdfDefs/*.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="metadata/recordDefs">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="generatedName" value="New Schema" />
|
||||
<option name="name" value="metadata/recordDefs" />
|
||||
<option name="relativePathToSchema" value="schema/metadata/recordDefs.json" />
|
||||
<option name="schemaVersion" value="JSON Schema version 7" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/metadata/recordDefs/*.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="metadata/scopes">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="generatedName" value="New Schema" />
|
||||
<option name="name" value="metadata/scopes" />
|
||||
<option name="relativePathToSchema" value="schema/metadata/scopes.json" />
|
||||
<option name="schemaVersion" value="JSON Schema version 7" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/metadata/scopes/*.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="metadata/selectDefs">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="generatedName" value="New Schema" />
|
||||
<option name="name" value="metadata/selectDefs" />
|
||||
<option name="relativePathToSchema" value="schema/metadata/selectDefs.json" />
|
||||
<option name="schemaVersion" value="JSON Schema version 7" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/metadata/selectDefs/*.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="metadata/streamDefs">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="generatedName" value="New Schema" />
|
||||
<option name="name" value="metadata/streamDefs" />
|
||||
<option name="relativePathToSchema" value="schema/metadata/streamDefs.json" />
|
||||
<option name="schemaVersion" value="JSON Schema version 7" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/metadata/streamDefs/*.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="module">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="generatedName" value="New Schema" />
|
||||
<option name="name" value="module" />
|
||||
<option name="relativePathToSchema" value="schema/module.json" />
|
||||
<option name="schemaVersion" value="JSON Schema version 7" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/Resources/module.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
<entry key="routes">
|
||||
<value>
|
||||
<SchemaInfo>
|
||||
<option name="generatedName" value="New Schema" />
|
||||
<option name="name" value="routes" />
|
||||
<option name="relativePathToSchema" value="schema/routes.json" />
|
||||
<option name="schemaVersion" value="JSON Schema version 7" />
|
||||
<option name="patterns">
|
||||
<list>
|
||||
<Item>
|
||||
<option name="pattern" value="true" />
|
||||
<option name="path" value="*/Resources/routes.json" />
|
||||
<option name="mappingKind" value="Pattern" />
|
||||
</Item>
|
||||
</list>
|
||||
</option>
|
||||
</SchemaInfo>
|
||||
</value>
|
||||
</entry>
|
||||
</map>
|
||||
</state>
|
||||
</component>
|
||||
</project>
|
||||
109
schema/layouts/detail.json
Normal file
109
schema/layouts/detail.json
Normal file
@@ -0,0 +1,109 @@
|
||||
{
|
||||
"$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": {
|
||||
"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": "A row.",
|
||||
"items": {
|
||||
"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)."
|
||||
},
|
||||
"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."
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "boolean",
|
||||
"description": "False designates an empty cell."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
68
schema/layouts/list.json
Normal file
68
schema/layouts/list.json
Normal file
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"$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."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
40
schema/metadata/aclDefs.json
Normal file
40
schema/metadata/aclDefs.json
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"$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.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
165
schema/metadata/app/acl.json
Normal file
165
schema/metadata/app/acl.json
Normal file
@@ -0,0 +1,165 @@
|
||||
{
|
||||
"$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": {
|
||||
"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."
|
||||
},
|
||||
"scopeLevelTypesStrictDefaults": {
|
||||
"type": "object",
|
||||
"description": "Defaults by type. Not to be modified.",
|
||||
"properties": {
|
||||
"boolean": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/levelsBoolean"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
]
|
||||
},
|
||||
"record": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/levels"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"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 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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
165
schema/metadata/app/aclPortal.json
Normal file
165
schema/metadata/app/aclPortal.json
Normal file
@@ -0,0 +1,165 @@
|
||||
{
|
||||
"$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": {
|
||||
"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."
|
||||
},
|
||||
"scopeLevelTypesStrictDefaults": {
|
||||
"type": "object",
|
||||
"description": "Defaults by type. Not to be modified.",
|
||||
"properties": {
|
||||
"boolean": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/levelsBoolean"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
]
|
||||
},
|
||||
"record": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/levels"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
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."
|
||||
}
|
||||
}
|
||||
}
|
||||
572
schema/metadata/clientDefs.json
Normal file
572
schema/metadata/clientDefs.json
Normal file
@@ -0,0 +1,572 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/clientDefs.json",
|
||||
"title": "clientDefs",
|
||||
"description": "Front-end definitions for a scope.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"controller": {
|
||||
"description": "Defines a client controller class.",
|
||||
"type": "string"
|
||||
},
|
||||
"collection": {
|
||||
"description": "Defines a client record collection class.",
|
||||
"type": "string"
|
||||
},
|
||||
"model": {
|
||||
"description": "Defines a client model class.",
|
||||
"type": "string"
|
||||
},
|
||||
"acl": {
|
||||
"description": "Defines a client ACL class.",
|
||||
"type": "string"
|
||||
},
|
||||
"aclPortal": {
|
||||
"description": "Defines a client ACL class for portals.",
|
||||
"type": "string"
|
||||
},
|
||||
"createDisabled": {
|
||||
"description": "Disable the ability to create a record from the user interface.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"searchPanelDisabled": {
|
||||
"description": "Hides the search panel on the list view.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"views": {
|
||||
"description": "View classes. Available views: list, detail, edit, listRelated.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"recordViews": {
|
||||
"description": "Record view classes. Available views: list, detail, edit, detailQuick, editQuick, kanban, listRelated.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"modalViews": {
|
||||
"description": "Modal view classes. Available views: detail, edit, select, relatedList.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"saveErrorHandlers": {
|
||||
"description": "Save error handlers. https://docs.espocrm.com/development/frontend/save-error-handlers/",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"inlineEditDisabled": {
|
||||
"description": "Disable inline edit.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"exportDisabled": {
|
||||
"description": "Disable the export mass-action.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"massUpdateDisabled": {
|
||||
"description": "Disable the mass-update mass action.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"massRemoveDisabled": {
|
||||
"description": "Disable the remove mass action.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"massFollowDisabled": {
|
||||
"description": "Disable the follow mass-action.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"convertCurrencyDisabled": {
|
||||
"description": "Disable the convert-currency mass-action and action.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"mergeDisabled": {
|
||||
"description": "Disable the record merge functionality.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"filterList": {
|
||||
"description": "A list of primary filters.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"style": {
|
||||
"enum": ["default", "success", "warning", "danger", "info"]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"boolFilterList": {
|
||||
"description": "A list of bool filters.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"defaultFilterData": {
|
||||
"description": "A default filter data.",
|
||||
"type": "object"
|
||||
},
|
||||
"selectDefaultFilters": {
|
||||
"description": "A default filter on the select-records modal.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"filter": {
|
||||
"description": "A primary filter.",
|
||||
"type": "string"
|
||||
},
|
||||
"boolFilterList": {
|
||||
"description": "Bool filters.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"description": "Top-right menu for views (list, detail, edit). Action types: buttons, dropdowns. https://docs.espocrm.com/development/custom-buttons/",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"propertyNames": {
|
||||
"enum": ["buttons", "dropdown"]
|
||||
},
|
||||
"additionalProperties": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"labelTranslation": {
|
||||
"type": "string",
|
||||
"description": "A label translation path. Example: 'Campaign.links.trackingUrls'."
|
||||
},
|
||||
"link": {
|
||||
"type": "string",
|
||||
"description": "A link (href)."
|
||||
},
|
||||
"acl": {
|
||||
"enum": [
|
||||
"create",
|
||||
"read",
|
||||
"edit",
|
||||
"delete",
|
||||
"stream"
|
||||
],
|
||||
"description": "An action to check access to. If no access, the item is not displayed."
|
||||
},
|
||||
"aclScope": {
|
||||
"type": "string",
|
||||
"description": "A scope to check access to. If no access, the item is not displayed."
|
||||
},
|
||||
"action": {
|
||||
"type": "string",
|
||||
"description": "An action. To be used in javascript code for handling."
|
||||
},
|
||||
"style": {
|
||||
"enum": [
|
||||
"default",
|
||||
"success",
|
||||
"warning",
|
||||
"danger",
|
||||
"info"
|
||||
],
|
||||
"description": "A style."
|
||||
},
|
||||
"data": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"handler": {
|
||||
"type": "string",
|
||||
"description": "A handler class."
|
||||
}
|
||||
}
|
||||
},
|
||||
"initFunction": {
|
||||
"type": "string",
|
||||
"description": "An init function of the handler."
|
||||
},
|
||||
"accessDataList": {
|
||||
"$ref": "./components/accessDataList.json"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"sidePanels": {
|
||||
"description": "Definitions of side-panels for views (detail, edit, detailSmall, editSmall). Defined panels will be available in the layout manager.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"description": "A name.",
|
||||
"type": "string"
|
||||
},
|
||||
"label": {
|
||||
"description": "A translatable label.",
|
||||
"type": "string"
|
||||
},
|
||||
"view": {
|
||||
"description": "A view class.",
|
||||
"type": "string"
|
||||
},
|
||||
"options": {
|
||||
"description": "Options to be passed to the view.",
|
||||
"type": "object"
|
||||
},
|
||||
"isForm": {
|
||||
"description": "Whether the panel should display a form.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"notRefreshable": {
|
||||
"description": "Disable the ability to refresh the panel.",
|
||||
"type": "boolean"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"bottomPanels": {
|
||||
"description": "Definitions of bottom-panels for views (detail, edit, detailSmall, editSmall). Defined panels will be available in the layout manager.",
|
||||
"$ref": "#/properties/sidePanels"
|
||||
},
|
||||
"relationshipPanels": {
|
||||
"description": "Parameters to be applied for specific relationship panels.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"view": {
|
||||
"description": "A view class.",
|
||||
"type": "string"
|
||||
},
|
||||
"recordListView": {
|
||||
"description": "A record list view class.",
|
||||
"type": "string"
|
||||
},
|
||||
"rowActionsView": {
|
||||
"description": "A row-actions view class.",
|
||||
"type": "string"
|
||||
},
|
||||
"label": {
|
||||
"description": "A translatable label.",
|
||||
"type": "string"
|
||||
},
|
||||
"readOnly": {
|
||||
"description": "Read-only.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"selectDisabled": {
|
||||
"description": "Disable the ability to select related records.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"createDisabled": {
|
||||
"description": "Disable the ability to create related records.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"viewDisabled": {
|
||||
"description": "Disable the ability to view related records in a modal.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"unlinkDisabled": {
|
||||
"description": "Disable the ability to unlink related records.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"createRequiredAccess": {
|
||||
"description": "Access (to a current entity type) required for creating related records.",
|
||||
"type": "string",
|
||||
"enum": ["create", "read", "edit", "delete", "stream"]
|
||||
},
|
||||
"selectRequiredAccess": {
|
||||
"description": "Access (to a current entity type) required for selecting related records.",
|
||||
"type": "string",
|
||||
"enum": ["create", "read", "edit", "delete", "stream"]
|
||||
},
|
||||
"selectPrimaryFilterName": {
|
||||
"type": "string",
|
||||
"description": "A primary filter applied when selecting records."
|
||||
},
|
||||
"selectBoolFilterList": {
|
||||
"description": "Bool filters applied when selecting records.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"filterList": {
|
||||
"description": "Filters available in the dropdown.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"orderBy": {
|
||||
"description": "An order-by field.",
|
||||
"type": "string"
|
||||
},
|
||||
"orderDirection": {
|
||||
"description": "An order direction.",
|
||||
"type": "string",
|
||||
"enum": ["asc", "desc"]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalLayouts": {
|
||||
"description": "Additionals layouts for the entity type.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"massActionList": {
|
||||
"description": "Mass actions.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"checkAllResultMassActionList": {
|
||||
"description": "Mass actions available when selecting all results.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"massActionDefs": {
|
||||
"description": "Defenitions for mass actions.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"handler": {
|
||||
"description": "A handler class for the mass action.",
|
||||
"type": "string"
|
||||
},
|
||||
"initFunction": {
|
||||
"description": "An init function of the handler.",
|
||||
"type": "string"
|
||||
},
|
||||
"configCheck": {
|
||||
"description": "A config path (separated by the .) to check whether the action is enabled. The ! prefix reverts.",
|
||||
"type": "string"
|
||||
},
|
||||
"aclScope": {
|
||||
"description": "A scope access to which is required for the action.",
|
||||
"type": "string"
|
||||
},
|
||||
"acl": {
|
||||
"description": "An acl action access to which is required for the action.",
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"create",
|
||||
"read",
|
||||
"edit",
|
||||
"delete",
|
||||
"stream"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"detailActionList": {
|
||||
"description": "Detail view actions (available from the dropdown next to the Edit button).",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "A name."
|
||||
},
|
||||
"label": {
|
||||
"type": "string",
|
||||
"description": "A translatable label."
|
||||
},
|
||||
"handler": {
|
||||
"type": "string",
|
||||
"description": "A handler class for the action."
|
||||
},
|
||||
"initFunction": {
|
||||
"type": "string",
|
||||
"description": "An init function of the handler."
|
||||
},
|
||||
"checkVisibilityFunction": {
|
||||
"type": "string",
|
||||
"description": "The handler function that checks whether the action is available. Should return a boolean value. Called on model sync."
|
||||
},
|
||||
"configCheck": {
|
||||
"description": "A config path (separated by the .) to check whether the action is enabled. The ! prefix reverts.",
|
||||
"type": "string"
|
||||
},
|
||||
"aclScope": {
|
||||
"description": "A scope access to which is required for the action.",
|
||||
"type": "string"
|
||||
},
|
||||
"acl": {
|
||||
"description": "An acl action access to which is required for the action.",
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"create",
|
||||
"read",
|
||||
"edit",
|
||||
"delete",
|
||||
"stream"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"modalDetailActionList": {
|
||||
"description": "Modal detail view actions.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "A name."
|
||||
},
|
||||
"label": {
|
||||
"type": "string",
|
||||
"description": "A translatable label."
|
||||
},
|
||||
"handler": {
|
||||
"type": "string",
|
||||
"description": "A handler class for the action."
|
||||
},
|
||||
"initFunction": {
|
||||
"type": "string",
|
||||
"description": "An init function of the handler."
|
||||
},
|
||||
"checkVisibilityFunction": {
|
||||
"type": "string",
|
||||
"description": "The handler function that checks whether the action is available. Should return a boolean value. Called on model sync."
|
||||
},
|
||||
"configCheck": {
|
||||
"description": "A config path (separated by the .) to check whether the action is enabled. The ! prefix reverts.",
|
||||
"type": "string"
|
||||
},
|
||||
"aclScope": {
|
||||
"description": "A scope access to which is required for the action.",
|
||||
"type": "string"
|
||||
},
|
||||
"acl": {
|
||||
"description": "An acl action access to which is required for the action.",
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"create",
|
||||
"read",
|
||||
"edit",
|
||||
"delete",
|
||||
"stream"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"iconClass": {
|
||||
"description": "A scope icon CSS class.",
|
||||
"type": "string"
|
||||
},
|
||||
"color": {
|
||||
"description": "A scope color in HEX.",
|
||||
"type": "string"
|
||||
},
|
||||
"kanbanViewMode": {
|
||||
"description": "Whether the scope has the kanban view mode on the list view.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"allowInternalNotes": {
|
||||
"description": "If true, it will be possible to post internal posts in the stream. Internal posts are not visible in portals.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"isExpandedByDefault": {
|
||||
"description": "Actual for category scopes (e.g. DocumentFolder). If true, then by default it will be in expanded mode.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"dynamicLogic": {
|
||||
"description": "Dynamic logic definitions making a form dynamic.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"fields": {
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"visible": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"conditionGroup": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"conditionGroup": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"readOnly": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"conditionGroup": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"panels": {
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"visible": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"conditionGroup": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
52
schema/metadata/components/accessDataList.json
Normal file
52
schema/metadata/components/accessDataList.json
Normal file
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/components/accessDataList.json",
|
||||
"title": "components/accessDataList",
|
||||
"description": "Frontend access rules.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"action": {
|
||||
"enum": [
|
||||
"create",
|
||||
"read",
|
||||
"edit",
|
||||
"stream",
|
||||
"delete"
|
||||
],
|
||||
"description": "An ACL action to check."
|
||||
},
|
||||
"scope": {
|
||||
"type": "string",
|
||||
"description": "A scope to check."
|
||||
},
|
||||
"portalIdList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "A portal ID list. To check whether a user in one of portals."
|
||||
},
|
||||
"teamIdList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "A team ID list. To check whether a user in one of teams."
|
||||
},
|
||||
"isPortalOnly": {
|
||||
"type": "boolean",
|
||||
"description": "Allow for portal users only."
|
||||
},
|
||||
"inPortalDisabled": {
|
||||
"type": "boolean",
|
||||
"description": "Disable for portal users."
|
||||
},
|
||||
"isAdminOnly": {
|
||||
"type": "boolean",
|
||||
"description": "Allow for admin users only."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
39
schema/metadata/dashlets.json
Normal file
39
schema/metadata/dashlets.json
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"$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": "./components/accessDataList.json",
|
||||
"description": "Frontend access rules."
|
||||
},
|
||||
"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."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
67
schema/metadata/entityAcl.json
Normal file
67
schema/metadata/entityAcl.json
Normal file
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"$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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
647
schema/metadata/entityDefs.json
Normal file
647
schema/metadata/entityDefs.json
Normal file
@@ -0,0 +1,647 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://www.espocrm.com/schema/metadata/entityDefs.json",
|
||||
"title": "entityDefs",
|
||||
"description": "Entity type definitions.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"fields": {
|
||||
"type": "object",
|
||||
"description": "Fields.",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"description": "A field.",
|
||||
"allOf": [
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
"type": {
|
||||
"anyOf": [
|
||||
{"const": "enum"},
|
||||
{"const": "multiEnum"},
|
||||
{"const": "array"},
|
||||
{"const": "checklist"},
|
||||
{"const": "urlMultiple"}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"then": {
|
||||
"properties": {
|
||||
"options": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "Options."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
"type": {
|
||||
"anyOf": [
|
||||
{"const": "varchar"},
|
||||
{"const": "enum"},
|
||||
{"const": "url"}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"then": {
|
||||
"properties": {
|
||||
"maxLength": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "The max length of the database column."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
"type": {
|
||||
"anyOf": [
|
||||
{"const": "varchar"},
|
||||
{"const": "text"},
|
||||
{"const": "url"},
|
||||
{"const": "int"},
|
||||
{"const": "float"},
|
||||
{"const": "currency"},
|
||||
{"const": "date"},
|
||||
{"const": "datetime"},
|
||||
{"const": "datetimeOptional"},
|
||||
{"const": "link"},
|
||||
{"const": "multiEnum"},
|
||||
{"const": "urlMultiple"},
|
||||
{"const": "checklist"},
|
||||
{"const": "file"},
|
||||
{"const": "image"}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"then": {
|
||||
"properties": {
|
||||
"audited": {
|
||||
"type": "boolean",
|
||||
"description": "Changes of audited fields are logged in the stream."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
"type": {"const": "currency"}
|
||||
}
|
||||
},
|
||||
"then": {
|
||||
"properties": {
|
||||
"onlyDefaultCurrency": {
|
||||
"type": "boolean",
|
||||
"description": "Only default curreny."
|
||||
},
|
||||
"conversionDisabled": {
|
||||
"type": "boolean",
|
||||
"description": "Don't convert currency when the convert-currency action is applied for an entity."
|
||||
},
|
||||
"decimal": {
|
||||
"type": "boolean",
|
||||
"description": "Use the decimal type for more precision."
|
||||
},
|
||||
"precision": {
|
||||
"type": "integer",
|
||||
"description": "Precision (for decimal type)."
|
||||
},
|
||||
"scale": {
|
||||
"type": "scale",
|
||||
"description": "Scale (for decimal type)."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"description": "A field type.",
|
||||
"anyOf": [
|
||||
{"type": "string"},
|
||||
{
|
||||
"enum": [
|
||||
"checklist",
|
||||
"address",
|
||||
"array",
|
||||
"arrayInt",
|
||||
"attachmentMultiple",
|
||||
"autoincrement",
|
||||
"barcode",
|
||||
"bool",
|
||||
"checklist",
|
||||
"colorpicker",
|
||||
"currency",
|
||||
"date",
|
||||
"datetime",
|
||||
"datetimeOptional",
|
||||
"enum",
|
||||
"enumFloat",
|
||||
"enumInt",
|
||||
"file",
|
||||
"float",
|
||||
"foreign",
|
||||
"image",
|
||||
"int",
|
||||
"jsonArray",
|
||||
"jsonObject",
|
||||
"link",
|
||||
"linkMultiple",
|
||||
"linkOne",
|
||||
"linkParent",
|
||||
"multiEnum",
|
||||
"number",
|
||||
"password",
|
||||
"personName",
|
||||
"rangeCurrency",
|
||||
"rangeFloat",
|
||||
"rangeInt",
|
||||
"text",
|
||||
"url",
|
||||
"urlMultiple",
|
||||
"varchar",
|
||||
"wysiwyg"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"notStorable": {
|
||||
"type": "boolean",
|
||||
"description": "The field will be marked as not-storable, a DB column won't be created."
|
||||
},
|
||||
"readOnly": {
|
||||
"type": "boolean",
|
||||
"description": "Read-only fields are stripped from a payload received from the front-end. Fields are not editable."
|
||||
},
|
||||
"view": {
|
||||
"type": "string",
|
||||
"description": "A custom field view. If not specified, then a value from metadata > fields > {fieldType} > view is used."
|
||||
},
|
||||
"index": {
|
||||
"type": "boolean",
|
||||
"description": "To create a DB index for the field."
|
||||
},
|
||||
"dbType": {
|
||||
"type": "string",
|
||||
"description": "Overrides the type of the DB column.",
|
||||
"anyOf": [
|
||||
{"type": "string"},
|
||||
{
|
||||
"enum": [
|
||||
"string",
|
||||
"decimal",
|
||||
"float",
|
||||
"smallint",
|
||||
"integer",
|
||||
"bigint",
|
||||
"text",
|
||||
"date",
|
||||
"datetime",
|
||||
"boolean",
|
||||
"binary"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"disabled": {
|
||||
"type": "boolean",
|
||||
"description": "Disables the field."
|
||||
},
|
||||
"tooltip": {
|
||||
"type": ["string", "boolean"],
|
||||
"description": "Enable a tooltip for the field. A tooltip text is taken from the language by: {EntityType} > tooltips > {fieldName}. If defined as a string, then text will be taken from the language by: {EntityType} > tooltips > {value}."
|
||||
},
|
||||
"validatorClassNameMap": {
|
||||
"type": "object",
|
||||
"description": "Validators defined as validation-type => class-name map. Classes should implement Espo\\Core\\FieldValidation\\Validator interface. If not defined for a tyoe, metadata > fields > {fieldType} > validatorClassNameMap > {type} is used.",
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"validatorClassNameList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "A list of additional validators. Should implement Espo\\Core\\FieldValidation\\Validator interface."
|
||||
},
|
||||
"validationList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "A custom validation list for the field. Use this parameter to re-define validations applied for a specific field. By default, validations for a field type are applied."
|
||||
},
|
||||
"mandatoryValidationList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "A custom mandatory validation list for the field. Use this parameter to re-define mandatory validations applied for a specific field. By default, mandatory validations for a field type are applied."
|
||||
},
|
||||
"customizationDisabled": {
|
||||
"type": "boolean",
|
||||
"description": "Disables the ability to customize the field in the Entity Manager tool."
|
||||
},
|
||||
"fieldManagerParamList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "Parameters available in the Entity Manager tool when editing the field. Specify an empty array to disable all parameters."
|
||||
},
|
||||
"layoutAvailabilityList": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "A list of layout types there the field should be available. Specify an empty array to disable in all layouts.",
|
||||
},
|
||||
"textFilterDisabled": {
|
||||
"type": "boolean",
|
||||
"description": "Disables the ability to add the field to text filters (in the Entity Manager tool)."
|
||||
},
|
||||
"directAccessDisabled": {
|
||||
"type": "boolean",
|
||||
"description": "Disables the ability to add the field in formula-script, templates and some other tools."
|
||||
},
|
||||
"importDisabled": {
|
||||
"type": "boolean",
|
||||
"description": "Disables the ability to import the field."
|
||||
},
|
||||
"exportDisabled": {
|
||||
"type": "boolean",
|
||||
"description": "Disables the ability to export the field."
|
||||
},
|
||||
"isPersonalData": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the field may contain personal data."
|
||||
},
|
||||
"valueFactoryClassName": {
|
||||
"type": "string",
|
||||
"description": "A factory for value objects. For field types it's defined at metadata > fields. Here you can define a factory for a specific field.",
|
||||
|
||||
},
|
||||
"attributeExtractorClassName": {
|
||||
"type": "string",
|
||||
"description": "An extractor for value objects. For field types it's defined at metadata > fields. Here you can define an extractor for a specific field.",
|
||||
},
|
||||
"select": {
|
||||
"type": "object",
|
||||
"description": "A custom complex expression to be used for the field when reading from DB. It's possible to define leftJoins and joins that are needed to be applied when the field is being selected.",
|
||||
"properties": {
|
||||
"select": {
|
||||
"type": "string",
|
||||
"description": "A complex expression for the SELECT."
|
||||
},
|
||||
"leftJoins": {
|
||||
"description": "LEFT JOINs",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": [
|
||||
{
|
||||
"type": "string",
|
||||
"description": "A table or link. Table – CamelCase, link – camelCase."
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"description": "An alias."
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"description": "Join conditions."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"joins": {
|
||||
"description": "JOINs",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": [
|
||||
{
|
||||
"type": "string",
|
||||
"description": "A table or link. Table – CamelCase, link – camelCase."
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"description": "An alias."
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"description": "Join conditions."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"order": {
|
||||
"description": "Custom complex expressions to be used when ordering by the field. It's possible to define leftJoins and joins that are needed to be applied.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"order": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"description": "A complex expression for the ORDER."
|
||||
}
|
||||
}
|
||||
},
|
||||
"leftJoins": {
|
||||
"description": "LEFT JOINs",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": [
|
||||
{
|
||||
"type": "string",
|
||||
"description": "A table or link. Table – CamelCase, link – camelCase."
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"description": "An alias."
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"description": "Join conditions."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"joins": {
|
||||
"description": "JOINs",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": [
|
||||
{
|
||||
"type": "string",
|
||||
"description": "A table or link. Table – CamelCase, link – camelCase."
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"description": "An alias."
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"description": "Join conditions."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"additionalSelect": {
|
||||
"description": "Additional columns to be selected when order by the field is applied.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"where": {
|
||||
"description": "Custom where clause to be used when the field is met in a provided where-clause. It's possible to define leftJoins and joins that are needed to be applied. Every comparison operation that you need to support should have its own definitions.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"whereClause": {
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"leftJoins": {
|
||||
"type": "array",
|
||||
"description": "LEFT JOINs",
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": [
|
||||
{
|
||||
"type": "string",
|
||||
"description": "A table or link. Table – CamelCase, link – camelCase."
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"description": "An alias."
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"description": "Join conditions."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"joins": {
|
||||
"description": "JOINs",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "array",
|
||||
"items": [
|
||||
{
|
||||
"type": "string",
|
||||
"description": "A table or link. Table – CamelCase, link – camelCase."
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"description": "An alias."
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": true,
|
||||
"description": "Join conditions."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"distinct": {
|
||||
"type": "boolean",
|
||||
"description": "Apply DISTINCT to the query."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"links": {
|
||||
"description": "Links.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "A link.",
|
||||
"additionalProperties": true,
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"description": "A link type.",
|
||||
"enum": ["belongsTo", "hasMany", "hasOne", "belongsToParent", "hasChildren"]
|
||||
},
|
||||
"entity": {
|
||||
"type": "string",
|
||||
"description": "A foreign entity type."
|
||||
},
|
||||
"foreign": {
|
||||
"type": "string",
|
||||
"description": "A foreign link name."
|
||||
},
|
||||
"noJoin": {
|
||||
"type": "boolean",
|
||||
"description": "Prevents joining a foreign table when fetching a record. Available for belongsTo, hasOne."
|
||||
},
|
||||
"foreignName": {
|
||||
"type": "string",
|
||||
"description": "A field to be used as a name of a foreign record. Needed when a foreign entity type does not have the field name."
|
||||
},
|
||||
"audited": {
|
||||
"type": "boolean",
|
||||
"description": "Linking and unlinking will be logged in the Stream. Available for hasMany."
|
||||
},
|
||||
"layoutRelationshipsDisabled": {
|
||||
"type": "boolean",
|
||||
"description": "Makes the link not available in the Bottom Panels layout (in the Layout Manager tool). Available for hasMany"
|
||||
},
|
||||
"relationName": {
|
||||
"type": "string",
|
||||
"description": "A relationship name. Defines how a middle table will be named (for a many-to-many relationships). Available for hasMany",
|
||||
},
|
||||
"additionalColumns": {
|
||||
"type": "object",
|
||||
"description": "Additional columns to be created in a middle table (for a many-to-many relationships).",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"enum": ["varchar", "int", "float", "bool"]
|
||||
},
|
||||
"maxLength": {
|
||||
"type": "integer"
|
||||
},
|
||||
"default": {
|
||||
"type": ["integer", "string", "boolean", "null", "number"]
|
||||
},
|
||||
"dbType": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"conditions": {
|
||||
"type": "object",
|
||||
"description": "Where-conditions (for a many-to-many relationships). If multiple links share the same relationship name (middle table), conditions must be defined for each link. For many-to-many.",
|
||||
"additionalProperties": {
|
||||
"type": ["string", "integer", "number", "boolean", "null"]
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
"type": "object",
|
||||
"description": "Indexes for a middle table.",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"columns": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "Database columns of the index."
|
||||
},
|
||||
"unique": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the index is unique."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"notMergeable": {
|
||||
"type": "boolean",
|
||||
"description": "Disable merging related records when duplicate records are being merged. For hasMany, hasChildren."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
"type": "object",
|
||||
"description": "Indexes for a middle table.",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"description": "An index.",
|
||||
"properties": {
|
||||
"columns": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "Database columns of the index."
|
||||
},
|
||||
"unique": {
|
||||
"type": "boolean",
|
||||
"description": "Whether the index is unique."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"collection": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"orderBy": {
|
||||
"type": "string",
|
||||
"description": "The default order-by field."
|
||||
},
|
||||
"order": {
|
||||
"enum": ["asc", "desc"],
|
||||
"description": "The default order direction."
|
||||
},
|
||||
"textFilterFields": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "Fields used by the text filter."
|
||||
},
|
||||
"countDisabled": {
|
||||
"type": "boolean",
|
||||
"description": "Disable fetching a total records number (on the list view)."
|
||||
},
|
||||
"fullTextSearch": {
|
||||
"type": "boolean",
|
||||
"description": "Enable full-text search."
|
||||
},
|
||||
"fullTextSearchOrderType": {
|
||||
"enum": ["original", "relevance", "combined"],
|
||||
"description": "How to order result of full-text search."
|
||||
}
|
||||
}
|
||||
},
|
||||
"optimisticConcurrencyControl": {
|
||||
"type": "boolean",
|
||||
"description": "Enables optimistic concurrency control for the entity type."
|
||||
},
|
||||
"skipRebuild": {
|
||||
"type": "boolean",
|
||||
"description": "To skip database table creation for the entity type."
|
||||
}
|
||||
}
|
||||
}
|
||||
41
schema/metadata/integrations.json
Normal file
41
schema/metadata/integrations.json
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"$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": {
|
||||
"$ref": "./entityDefs.json#/properties/fields",
|
||||
"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": {
|
||||
"type": "string"
|
||||
},
|
||||
"description": "External account attributes to be hidden from the front-end."
|
||||
}
|
||||
}
|
||||
}
|
||||
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)."
|
||||
}
|
||||
}
|
||||
}
|
||||
16
schema/metadata/pdfDefs.json
Normal file
16
schema/metadata/pdfDefs.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"$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": {
|
||||
"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."
|
||||
}
|
||||
}
|
||||
}
|
||||
168
schema/metadata/recordDefs.json
Normal file
168
schema/metadata/recordDefs.json
Normal file
@@ -0,0 +1,168 @@
|
||||
{
|
||||
"$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"
|
||||
},
|
||||
"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. 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"
|
||||
},
|
||||
"updateDuplicateCheck": {
|
||||
"description": "If true, then duplicate checking will be processed while updating a record.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"relationships": {
|
||||
"description": "Relationship parameters. Key-object pairs, where keys are link names.",
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"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 functionallity linking through link-multiple field.",
|
||||
"type": "boolean"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"beforeReadHookClassNameList": {
|
||||
"description": "Before-read hooks. Should implement the Espo\\Core\\Record\\Hook\\ReadHook interface.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"beforeCreateHookClassNameList": {
|
||||
"description": "Before-create hooks. Should implement the Espo\\Core\\Record\\Hook\\CreateHook interface.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"beforeUpdateHookClassNameList": {
|
||||
"description": "Before-update hooks. Should implement the Espo\\Core\\Record\\Hook\\UpdateHook interface.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"beforeDeleteHookClassNameList": {
|
||||
"description": "Before-delete hooks. Should implement the Espo\\Core\\Record\\Hook\\DeleteHook interface.",
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
289
schema/metadata/scopes.json
Normal file
289
schema/metadata/scopes.json
Normal file
@@ -0,0 +1,289 @@
|
||||
{
|
||||
"$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"
|
||||
},
|
||||
"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"]
|
||||
},
|
||||
"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": ["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"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"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": "Wether the entity can be customized in the Entity Manager tool.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"isCustom": {
|
||||
"description": "Entities creted 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"
|
||||
},
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"languageIsGlobal": {
|
||||
"description": "Languge 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 avaialble in the front-end regardless of user roles.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"hasPersonalData": {
|
||||
"description": "Whether the entity may contain personal data.",
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
85
schema/metadata/selectDefs.json
Normal file
85
schema/metadata/selectDefs.json
Normal file
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"$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"
|
||||
},
|
||||
"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."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
34
schema/metadata/streamDefs.json
Normal file
34
schema/metadata/streamDefs.json
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"$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."
|
||||
}
|
||||
}
|
||||
}
|
||||
13
schema/module.json
Normal file
13
schema/module.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"$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."
|
||||
}
|
||||
}
|
||||
}
|
||||
58
schema/routes.json
Normal file
58
schema/routes.json
Normal file
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"$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": "An endpoint.",
|
||||
"properties": {
|
||||
"route": {
|
||||
"type": "string",
|
||||
"description": "A route. Example: `/MyScope/:id/myAction`."
|
||||
},
|
||||
"method": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"get",
|
||||
"post",
|
||||
"put",
|
||||
"delete",
|
||||
"options",
|
||||
"patch"
|
||||
],
|
||||
"description": "An HTTP method."
|
||||
},
|
||||
"noAuth": {
|
||||
"type": "boolean",
|
||||
"description": "Makes the endpoint not requiring authentication."
|
||||
},
|
||||
"actionClassName": {
|
||||
"type": "string",
|
||||
"description": "An action class. Should implement the interface Espo\\Core\\Api\\Action."
|
||||
},
|
||||
"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