Page tree

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 48 Next »

If the API changes in an incompatible manner this is listed explicitly in the "important release notes" section of each releases changelog.


Client app setup data

RequestGET /editor/plugins_termportal_data
Params

locale=(en|de) Optional. default 'en'. See titles in l10n in example response below

Response
{
    "locale": "en",                                  // Current locale
    "role": {                                        // Roles assigned to current user
        "admin": true,
        "api": true,
        "editor": true,
        "pm": true,
        "termCustomerSearch": true,
        "termProposer": true,
        "termFinalizer": true,
        "termPM": true,
        "termPM_allClients": true,
        "termReviewer": true,
        "basic": true,
        "noRights": true
    },
    "permission": {                                  // Permissions to access
        "termportal": true,                          //  - TermPortal
        "itranslate": false                          //  - InstantTranslate
    },
    "activeItem": "termportal",                      // Item active by default or last active item
    "l10n": {                                        // Localization wordings
        "termportal": "TermPortal",
        "itranslate": "InstantTranslate",
        "logout": "Logout",
        "localeStore": [
            {
                "locale": "en",
                "name": "English"
            },
            {
                "locale": "de",
                "name": "German"
            }
        ],
        "set": "Set filter",
        "clear": "Clear filter",
        "requiredMsg": "This field is required",
        "found": "Search results",
        "termPlaceholder": "Type the term here, even using wildcard e.g. \"myterm*\"",
        "filters": "Filters",
        "client": "Client",
        "noCollections": "There are no TermCollections assigned to you.",
        "activeFilters": {
            "clientIds": "Clients",
            "collectionIds": "Term Collections",
            "noTermDefinedFor": "No term defined for language",
            "disabledDueToRefMode": "Filters are disabled while you're in ref-mode",
            "tbxCreatedBy": "Created by",
            "tbxUpdatedBy": "Updated by",
            "tbxCreatedGt": "Created since",
            "tbxCreatedLt": "Created until",
            "tbxCreatedAt": "Created at",
            "tbxUpdatedGt": "Updated since",
            "tbxUpdatedLt": "Updated until",
            "tbxUpdatedAt": "Updated at"
        },
        "processStatuses": {
            "unprocessed": "Unprocessed",
            "provisionallyProcessed": "Provisionally processed",
            "finalized": "Finalized",
            "rejected": "Rejected"
        },
        "statuses": {
            "preferredTerm": "Preferred",
            "admittedTerm": "Admitted",
            "deprecatedTerm": "Forbidden",
            "supersededTerm": "Forbidden"
        },
        "collections": "Term collections",
        "collection": "Term collection",
        "attributes": "Select an attribute",
        "noTermDefinedFor": "No term defined for language (\"en\" does NOT find \"en-US\")",
        "siblings": {
            "title": "Terms of entry of selected result",
            "langToShow": "Languages to show",
            "itranslate": {
                "label": "InstantTranslate into",
                "placeholder": "select language"
            }
        },
        "xref": {
            "xGraphic": {
                "title": "External images",
                "info": "Allows you to link to an external image, for example, on a website."
            },
            "externalCrossReference": {
                "title": "External references",
                "info": "Allows you to reference an external source, e. g. such as a website."
            },
            "value": {
                "renderer": "Double-click to specify name",
                "placeholder": "Specify name"
            },
            "target": {
                "renderer": "Double-click to specify url",
                "placeholder": "Specify Url"
            }
        },
        "ref": {
            "title": "Cross references",
            "entry": "Referenced entries",
            "language": "Referenced entries",
            "term": "Referenced terms",
            "target": "Double-click to specify TBX ID",
            "info": {
                "entry": "Refers to another term entry. Please insert the TBX ID of the other entry.",
                "term": "Refers to another term. Please insert the TBX ID of the other term."
            }
        },
        "term": "Terms",
        "termTbx": "Term",
        "entry": "Entry",
        "images": "Images",
        "image": "Image",
        "attrs": "Attributes",
        "attrAddComment": "Add comment",
        "actions": "Actions",
        "entryAttrs": "Entry attributes",
        "languageAttrs": "Language-level attributes",
        "termAttrs": "Term attributes",
        "termportalLangs": "TermPortal languages",
        "allOtherAvailableLangs": "All other languages available",
        "addedFromMT": "Added from MT",
        "propose": {
            "button": {
                "text": "Propose a new term entry",
                "text404": "Propose a new entry using searched word"
            },
            "please": {
                "collection": "Please select term collection",
                "language": "Please select language"
            },
            "termfield": {
                "placeholder": "Propose a new term",
                "errorMsg": "Term must contain at least one character that is not a whitespace",
                "label": "On saving the term proposal also a proposal for the source language term will be saved"
            },
            "notefield": {
                "placeholder": "Provide a comment",
                "errorMsg": "This field is required"
            },
            "multisource": "Please select one of the source terms below. They belong to different term entries. After selection you are able to add your new term translation to translate5 termPortal."
        },
        "attrWarn": {
            "entry": "Entry level attribute - changes will take place for all terms of this entry",
            "language": "Language level attribute - changes will take place for all [flag]-terms",
            "valueOverflow": "Value of this field if not fully visible due to field width"
        },
        "attrLabel": {
            "original": "Original label: ",
            "empty": "none"
        },
        "attrAlreadyAll": "All available attributes are already in use.",
        "attrDeleteOnStatusChange": "The values of {0} depend on the attribute {1}, whose values have just been changed.\n\n The new value of {1} does not correspond to any value of {0}.\n\n Therefore, the attribute {0} has been deleted.",
        "addTermProposal": "Propose a new Term",
        "batch": "Batch edit",
        "transfer": {
            "btn": {
                "text": "Start translation",
                "tooltip": {
                    "disabled": "Select exactly 1 client in filter window to make transfer possible",
                    "enabled": "Creates a translation project for selected terms"
                }
            },
            "title": "Create translation project for terms",
            "projectName": "Project name",
            "targetLang": "Target languages",
            "translated": "Send already translated terms to translation also?",
            "definition": "Translate definitions",
            "create": "Create project",
            "creating": "Your project '{0}' is being created",
            "created": "Your project '{0}' was successfully created"
        },
        "termDelete": "Do you really want to delete the term \"{0}\"?",
        "attrDelete": "Do you really want to delete the attribute \"{0}\"?",
        "save": "Save",
        "cancel": "Cancel",
        "delete": "Delete",
        "status": "Usage status",
        "processStatus": "Process status"
    },
    "filterWindow": {                                     // Filter window comboboxes data
        "collections": [
            {
                "id": "1",
                "title": "My Term Collection 1",
                "clients": "1"
            },
            {
                "id": "2",
                "title": "My Term Collection 2",
                "clients": "1,2"
            },
            ...
        ],
        "clients": [
            {
                "id": "1",
                "title": "My Customer 1"
            },
            {
                "id": "2",
                "title": "My Customer 2"
            },
            ...
        ],
        "attributes": {
            "1": {
                "id": "1",
                "title": "Some plaintext attribute",
                "system": "Some plaintext attribute",
                "alias": "attr-1",
                "dataType": "plainText",
                "picklistValues": null,
                "level": "entry,language,term",
                "isTbxBasic": 0,
                "type": "somePlainTextAttr",
                "collections": null
            },
            "2": {
                "id": "2",
                "title": "Some picklist attribute with custom title",
                "system": "Some picklist attribute",
                "alias": "attr-2",
                "dataType": "picklist",
                "picklistValues": "noun,verb,adjective,adverb,properNoun,other",
                "level": "term",
                "isTbxBasic": 1,
                "type": "somePickListAttr",
                "collections": "1,2"
            },
            ...
        },
        "processStatuses": [
            {
                "title": "Unprocessed",
                "alias": "unprocessed"
            },
            {
                "title": "Provisionally processed",
                "alias": "provisionallyProcessed"
            },
            {
                "title": "Finalized",
                "alias": "finalized"
            },
            {
                "title": "Rejected",
                "alias": "rejected"
            }
        ],
        "tbxCreatedBy": [
            {
                "id": "1",
                "name": "Person 1 specified in tbx <transacgrp>-node as creator"
            },
            {
                "id": "2",
                "name": "Person 2 specified in tbx <transacgrp>-node as creator"
            },
            ...
        ],
        "tbxUpdatedBy": [
            {
                "id": "1",
                "name": "Person 1 specified in tbx <transacgrp>-node as updater"
            },
            {
                "id": "2",
                "name": "Person 2 specified in tbx <transacgrp>-node as updater"
            },
            ...
        ]
    },
    "filterPanel": {
        "activeFilters": [                                // Active filters comboboxes data
            {
                "title": "Clients",
                "alias": "clientIds"
            },
            {
                "title": "Term Collections",
                "alias": "collectionIds"
            },
            {
                "title": "No term defined for language",
                "alias": "noTermDefinedFor"
            },
            {
                "title": "Process status",
                "alias": "processStatus"
            },
            {
                "title": "TBX-Entry-ID",
                "alias": "termEntryTbxId"
            },
            {
                "title": "TBX-Term-ID",
                "alias": "termTbxId"
            },
            {
                "title": "Created by",
                "alias": "tbxCreatedBy"
            },
            {
                "title": "Updated by",
                "alias": "tbxUpdatedBy"
            },
            {
                "title": "Created until",
                "alias": "tbxCreatedLt"
            },
            {
                "title": "Created since",
                "alias": "tbxCreatedGt"
            },
            {
                "title": "Created at",
                "alias": "tbxCreatedAt"
            },
            {
                "title": "Updated until",
                "alias": "tbxUpdatedLt"
            },
            {
                "title": "Updated since",
                "alias": "tbxUpdatedGt"
            },
            {
                "title": "Updated at",
                "alias": "tbxUpdatedAt"
            }
        ]
    },
    "lang": [                       // TermPortal languages with respect to TermPortal.showSubLanguages cfg
        {
            "id": "251",
            "value": "en-GB",
            "text": "English (UK) (en-GB)",
            "flag": "gb"
        },
        {
            "id": "252",
            "value": "en-US",
            "text": "English (US) (en-US)",
            "flag": "us"
        },
        {
            "id": "5,251,252,367,368,369,370,371,372,373,374,375,376,377",
            "value": "en",
            "text": "English (en)",
            "flag": "gb"
        },
        ...
    ],
    "langInclSubs": [           // TermPortal languages with no respect to TermPortal.showSubLanguages cfg
        {
            "id": "344",
            "value": "ar-SA",
            "text": "Arabic (Saudi Arabia) (ar-SA)",
            "flag": "sa"
        },
        {
            "id": "331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347",
            "value": "ar",
            "text": "Arabic (ar)",
            "flag": "sa"
        },
        ...
    ],
    "flag": {                   // [Language rfc5646 -> Flag filename] pairs
        "de": "de",
        "en": "gb",
        "es": "es",
        "en-gb": "gb",
        "en-us": "us",
        "fr": "fr",
        "ha": "",
        ...
    },
    "langAll": [                // All languages available
        {
            "_disabled": true,
            "value": "tp",
            "text": "TermPortal languages"
        },
        {
            "id": "251",
            "value": "en-GB",
            "text": "English (UK) (en-GB)",
            "flag": "gb"
        },
        {
            "id": "252",
            "value": "en-US",
            "text": "English (US) (en-US)",
            "flag": "us"
        },
        {
            "id": "5,251,252,367,368,369,370,371,372,373,374,375,376,377",
            "value": "en",
            "text": "English (en)",
            "flag": "gb"
        },
        ...
        {
            "_disabled": true,
            "value": "all",
            "text": "All other languages available"
        },
        {
            "id": "496",
            "value": "zh-HK",
            "text": "Chinese (Hong Kong) (zh-HK)",
            "flag": "hk"
        },
        {
            "id": "371",
            "value": "en-IE",
            "text": "English (Ireland) (en-IE)",
            "flag": "ie"
        },
    ],
    "language": "5,251,252,367,368,369,370,371,372,373,374,375,376,377", // Id of currently selected language. If comma-separated it 
                                                                         // means it’s not a certain sublanguage, so is containing all 
                                                                         // sublanguages ids
    "cfg": {                                       // Those of config options that client app rely on
        "commentAttributeMandatory": false,        // Comment attribute is required while making  a new term proposal. Not applicable to 
                                                   // making proposal for existing term
        "newTermAllLanguagesAvailable": false,     // Flag indicating whether or not all languages should be available for selection 
                                                   // while creating new term
        "liveSearchMinChars": "4",                 // Min chars for terms live search to work
        "itranslate": {                            
            "showSubLanguages": false              // Whether or not InstantTranslate.showSubLanguages config is turned on
        }
    },
    "right": {                      // Those of access rights that client app rely on
        "delete": {                   
            "attribute": true       // Whether DELETE-request to /editor/attribute is allowed
        },
        "deleteAny": {
            "attribute": true       // If false, not any but only certain attributes are deletable
        }
    }
}
Term search
RequestGET /editor/plugins_termportal_data/search
Params

query * Required. Search query. Wildcard characters '*' and '?' are supported for multi- and single-char searches, respectively. 


language Required. ID of language which searched terms belong to. See lang in Client app setup data response structure

limit Requred. Results limit per page. Integer value expected.

start Required. Results offset. Integer value expected.

clientIds Optional. Comma-separated list of integers, representing client IDs. See filterWindow.clients in Client app setup data response structure


collectionIds Optional. Comma-separated list of integers, representing collection IDs. See filterWindow.collections in Client app setup data response structure

processStatus Optional. Comma-separated list of any of 'unprocessed', 'provisionallyProcessed', 'finalized' and 'rejected'.

noTermDefinedFor Optional. ID of language, that term is not yet defined for

attr-x Optional. Attribute search, where 'x' - is the key in filterWindow.attributes (see Client app setup data response structure). If param name is mentioned among request params but no param value given, the search will return the terms having such attributes defined even despite having empty value. If param value is given, wildcard characters '*' and '?' are supported, first for multichar and second for single-char purpose. Multiple attributes search are supported, just use attr-x, attr-y etc

termEntryTbxId Optional. Partially known tbx ids are supported


termTbxId Optional. Partially known tbx ids are supported

tbxCreatedBy Optional. ID of person who was specified as creator in imported tbx data (see filterWindow.tbxCreatedBy array in Client app setup data response structure)

tbxCreatedGt Optional. Should be used to search terms created since certain date, inclusively, according to imported tbx data. Value is expected in format yyyy-mm-dd. Can be used with tbxCreatedLt if search by date range is needed.

tbxCreatedLt Optional. Should be used to search terms created until certain date, inclusively, according to imported tbx data. Value is expected in format yyyy-mm-dd. Can be used with tbxCreatedGt if search by date range is needed.

tbxCreatedAt Optional. Exact date of creation specified in imported tbx data. Date in format yyyy-mm-dd is expected. This can only be used if f tbxCreatedGt and tbxCreatedLt are NOT given

tbxUpdatedBy Optional. ID of person who was specified as updater in imported tbx data (see filterWindow.tbxUpdatedBy array in Client app setup data response structure)

tbxUpdatedGt Optional. Should be used to search terms updated since certain date, inclusively, according to imported tbx data. Value is expected in format yyyy-mm-dd. Can be used with tbxUpdatedLt if search by date range is needed.

tbxUpdatedLt Optional. Should be used to search terms updated until certain date, inclusively, according to imported tbx data. Value is expected in format yyyy-mm-dd. Can be used with tbxUpdatedGt if search by date range is needed.


tbxUpdatedAt Optional. Exact date of creation specified in imported tbx data. Date in format yyyy-mm-dd is expected. This can only be used if  tbxUpdatedGt and tbxUpdatedLt are NOT given

Response
{
    "totalCount": 5,
    "data": [
        {
            "id": "187459",
            "collectionId": "82",
            "termEntryId": "16610",
            "languageId": "5",
            "term": "federated database",
            "proposal": "",
            "processStatus": "provisionallyProcessed",
            "status": "admittedTerm",
            "definition": "language-level definition",
            "termEntryTbxId": "c6",
            "collectionName": "C:\\fakepath\\TBX-basic-sample"
        },
        {
            "id": "573874",
            "collectionId": "82",
            "termEntryId": "16611",
            "languageId": "5",
            "term": "progressive power lens1",
            "proposal": "progressive power lens",
            "processStatus": "provisionallyProcessed",
            "status": "deprecatedTerm",
            "definition": "entry-level def2",
            "termEntryTbxId": "c7",
            "collectionName": "C:\\fakepath\\TBX-basic-sample"
        },
        ...
    ]
}
Get attributes and siblings for a specific term
RequestPOST /editor/plugins_termportal_data/terminfo
ParamstermId Required. ID of term we need to get info about

Response contains attributes for this particular term itself, for it's language-level, and for it's ternEntry-level, under 'term', 'language' and 'entry' keys, respectively. Also, response object contains the array of all other terms that belong to the same termEntry that current term belongs to. FYI: the requested term is NOT excluded from the list of siblings.

Response
{
    "entry": {
        "client": "defaultcustomer",
        "tbx": "c6",
        "origination": "Pavel Perminov, 21.10.2021 00:00:00",
        "modification": "Pavel Perminov, 05.05.2022 14:07:02",
        "attributes": [
            {
                "id": "2020439",
                "elementName": "note",
                "value": "some entry-level comment",
                "type": null,
                "dataTypeId": "20",
                "language": null,
                "target": null,
                "deletable": true,
                "created": "Unknown user, 20.04.2022 18:49:18",
                "updated": "Pavel Perminov, 05.05.2022 15:06:50"
            },
            ...
        ],
        "hasComment": true,
        "xrefs": {
            "xGraphic": [
                {
                    "id": "2020461",
                    "elementName": "xref",
                    "value": "logo",
                    "type": "xGraphic",
                    "dataTypeId": "71",
                    "language": null,
                    "target": "https://mydomain.com/logo.png",
                    "deletable": true,
                    "created": "Pavel Perminov, 05.05.2022 13:59:51",
                    "updated": "Pavel Perminov, 05.05.2022 15:00:18",
                    "isValidUrl": true
                },
                {
                    "id": "2020460",
                    "elementName": "xref",
                    "value": null,
                    "type": "xGraphic",
                    "dataTypeId": "71",
                    "language": null,
                    "target": null,
                    "deletable": true,
                    "created": "Pavel Perminov, 05.05.2022 13:59:51",
                    "updated": "Pavel Perminov, 05.05.2022 13:59:51"
                },
                {
                    "id": "2020459",
                    "elementName": "xref",
                    "value": null,
                    "type": "xGraphic",
                    "dataTypeId": "71",
                    "language": null,
                    "target": null,
                    "deletable": true,
                    "created": "Pavel Perminov, 05.05.2022 13:59:44",
                    "updated": "Pavel Perminov, 05.05.2022 13:59:44"
                },
                ...
            ],
            "externalCrossReference": [
                {
                    "id": "2020458",
                    "elementName": "xref",
                    "value": "info page",
                    "type": "externalCrossReference",
                    "dataTypeId": "75",
                    "language": null,
                    "target": "https://wikipedia.org",
                    "deletable": true,
                    "created": "Pavel Perminov, 05.05.2022 13:58:58",
                    "updated": "Pavel Perminov, 05.05.2022 14:59:26",
                    "isValidUrl": true
                },
                {
                    "id": "2020457",
                    "elementName": "xref",
                    "value": null,
                    "type": "externalCrossReference",
                    "dataTypeId": "75",
                    "language": null,
                    "target": null,
                    "deletable": true,
                    "created": "Pavel Perminov, 05.05.2022 13:58:53",
                    "updated": "Pavel Perminov, 05.05.2022 13:58:53"
                },
                ...
            ]
        },
        "images": [
            {
                "id": "2020462",
                "elementName": "descrip",
                "value": "Image",
                "type": "figure",
                "dataTypeId": "85",
                "language": null,
                "target": "826561d7-cda4-4b49-a1b2-1a1225b07a2c",
                "deletable": true,
                "created": "Pavel Perminov, 05.05.2022 14:00:41",
                "updated": "Pavel Perminov, 05.05.2022 14:00:41",
                "src": "/editor/plugins/termimage/TermPortal/tc_82/ac9c6217-b92d-4a5d-bef7-8320123bd750.jpg"
            },
            ...
        ],
        "refs": [
            {
                "id": "2020456",
                "elementName": "ref",
                "value": null,
                "type": "crossReference",
                "dataTypeId": "78",
                "language": null,
                "target": null,
                "deletable": true,
                "created": "Pavel Perminov, 05.05.2022 13:58:40",
                "updated": "Pavel Perminov, 05.05.2022 13:58:40"
            },
            {
                "termEntryId": "16611",
                "collectionId": "82",
                "language": "en",
                "termId": "573874",
                "languageId": "5",
                "value": "progressive power lens1",
                "processStatus": "provisionallyProcessed",
                "status": "deprecatedTerm",
                "isValidTbx": true,
                "id": "2020453",
                "elementName": "ref",
                "type": "crossReference",
                "dataTypeId": "78",
                "target": "c7",
                "deletable": true,
                "created": "Pavel Perminov, 05.05.2022 13:54:58",
                "updated": "Pavel Perminov, 05.05.2022 14:55:20"
            },
            ...
        ]
    },
    "siblings": {
        "langToShow": [],
        "data": [
            {
                "id": "187459",
                "tbx": "450f86e8-7a31-4aa8-9c25-ce0a5f968262",
                "languageId": "5",
                "language": "en",
                "term": "federated database",
                "proposal": "",
                "collectionId": "82",
                "status": "admittedTerm",
                "processStatus": "provisionallyProcessed",
                "termEntryId": "16610",
                "termEntryTbxId": "c6",
                "createdBy": "2",
                "deletable": true,
                "images": [
                    {
                        "id": "2020462",
                        "elementName": "descrip",
                        "value": "Image",
                        "type": "figure",
                        "dataTypeId": "85",
                        "language": null,
                        "target": "826561d7-cda4-4b49-a1b2-1a1225b07a2c",
                        "deletable": true,
                        "created": "Pavel Perminov, 05.05.2022 14:00:41",
                        "updated": "Pavel Perminov, 05.05.2022 14:00:41",
                        "src": "/editor/plugins/termimage/TermPortal/tc_82/ac9c6217-b92d-4a5d-bef7-8320123bd750.jpg"
                    },
                    ...
                ]
            },
            {
                "id": "607613",
                "tbx": "idb96a459e-e866-4041-9542-a5547969fb23",
                "languageId": "5",
                "language": "en",
                "term": "more database",
                "proposal": "",
                "collectionId": "82",
                "status": "admittedTerm",
                "processStatus": "finalized",
                "termEntryId": "16610",
                "termEntryTbxId": "c6",
                "createdBy": "17",
                "deletable": true,
                "images": [
                    {
                        "id": "2020462",
                        "elementName": "descrip",
                        "value": "Image",
                        "type": "figure",
                        "dataTypeId": "85",
                        "language": null,
                        "target": "826561d7-cda4-4b49-a1b2-1a1225b07a2c",
                        "deletable": true,
                        "created": "Pavel Perminov, 05.05.2022 14:00:41",
                        "updated": "Pavel Perminov, 05.05.2022 14:00:41",
                        "src": "/editor/plugins/termimage/TermPortal/tc_82/ac9c6217-b92d-4a5d-bef7-8320123bd750.jpg"
                    },
                    ...
                ]
            },
            {
                "id": "187460",
                "tbx": "5c87200f-e4fc-4147-9494-662253811b56",
                "languageId": "253",
                "language": "fr",
                "term": "base de données fédérée",
                "proposal": "base de données fédérée1",
                "collectionId": "82",
                "status": "admittedTerm",
                "processStatus": "unprocessed",
                "termEntryId": "16610",
                "termEntryTbxId": "c6",
                "createdBy": "2",
                "deletable": true,
                "images": [
                    {
                        "id": "2020462",
                        "elementName": "descrip",
                        "value": "Image",
                        "type": "figure",
                        "dataTypeId": "85",
                        "language": null,
                        "target": "826561d7-cda4-4b49-a1b2-1a1225b07a2c",
                        "deletable": true,
                        "created": "Pavel Perminov, 05.05.2022 14:00:41",
                        "updated": "Pavel Perminov, 05.05.2022 14:00:41",
                        "src": "/editor/plugins/termimage/TermPortal/tc_82/ac9c6217-b92d-4a5d-bef7-8320123bd750.jpg"
                    },
                    ...
                ]
            }
        ]
    },
    "language": {
        "language": "en",
        "id": "5",
        "origination": "Pavel Perminov, 21.10.2021 14:10:30",
        "modification": "Pavel Perminov, 05.05.2022 14:07:02",
        "attributes": [
            {
                "id": "2020469",
                "elementName": "note",
                "value": "some language-level comment",
                "type": null,
                "dataTypeId": "20",
                "language": "en",
                "target": null,
                "deletable": true,
                "created": "Pavel Perminov, 05.05.2022 14:06:28",
                "updated": "Pavel Perminov, 05.05.2022 15:06:35"
            },
            ...
        ],
        "hasComment": true,
        "images": [
            {
                "id": "2020470",
                "elementName": "descrip",
                "value": "Image",
                "type": "figure",
                "dataTypeId": "85",
                "language": "en",
                "target": "770ffd14-b713-4ef8-958e-88ad9f31beb4",
                "deletable": true,
                "created": "Pavel Perminov, 05.05.2022 14:07:01",
                "updated": "Pavel Perminov, 05.05.2022 14:07:01",
                "src": "/editor/plugins/termimage/TermPortal/tc_82/80527568-48a9-483a-9b3c-d900ea613213.jpg"
            },
            ...
        ]
    },
    "term": {
        "id": "187459",
        "tbx": "450f86e8-7a31-4aa8-9c25-ce0a5f968262",
        "languageId": "5",
        "language": "en",
        "term": "federated database",
        "proposal": "",
        "collectionId": "82",
        "status": "admittedTerm",
        "processStatus": "provisionallyProcessed",
        "termEntryId": "16610",
        "termEntryTbxId": "c6",
        "origination": "Pavel Perminov, 21.10.2021 14:10:30",
        "modification": "Pavel Perminov, 05.05.2022 14:06:43",
        "attributes": [
            {
                "id": "669225",
                "elementName": "termNote",
                "value": "provisionallyProcessed",
                "type": "processStatus",
                "dataTypeId": "47",
                "language": "en",
                "target": "",
                "deletable": false,
                "created": "Unknown user, 20.10.2021 19:59:06",
                "updated": "Unknown user, 26.04.2022 12:30:39",
                "imported": {
                    "value": "finalized",
                    "target": ""
                }
            },
            {
                "id": "669226",
                "elementName": "termNote",
                "value": "admitted",
                "type": "administrativeStatus",
                "dataTypeId": "21",
                "language": "en",
                "target": "",
                "deletable": false,
                "created": "Unknown user, 20.10.2021 19:59:06",
                "updated": "Unknown user, 26.04.2022 12:30:39",
                "imported": {
                    "value": "admittedTerm-admn-sts",
                    "target": ""
                }
            },
            {
                "id": "2020468",
                "elementName": "note",
                "value": "Some term-level comment",
                "type": null,
                "dataTypeId": "20",
                "language": "en",
                "target": null,
                "deletable": true,
                "created": "Pavel Perminov, 05.05.2022 14:06:12",
                "updated": "Pavel Perminov, 05.05.2022 15:06:43"
            },
            ...
        ],
        "hasComment": true,
        "xrefs": {
            "xGraphic": [
                {
                    "id": "2020467",
                    "elementName": "xref",
                    "value": "term external image 1",
                    "type": "xGraphic",
                    "dataTypeId": "71",
                    "language": "en",
                    "target": "https://images.google.com",
                    "deletable": true,
                    "created": "Pavel Perminov, 05.05.2022 14:05:21",
                    "updated": "Pavel Perminov, 05.05.2022 15:05:41",
                    "isValidUrl": true
                },
                ...
            ],
            "externalCrossReference": [
                {
                    "id": "2020465",
                    "elementName": "xref",
                    "value": "term info page",
                    "type": "externalCrossReference",
                    "dataTypeId": "75",
                    "language": "en",
                    "target": "https://google.com",
                    "deletable": true,
                    "created": "Pavel Perminov, 05.05.2022 14:04:51",
                    "updated": "Pavel Perminov, 05.05.2022 15:05:05",
                    "isValidUrl": true
                },
                ...
            ]
        },
        "refs": [
            {
                "termEntryId": "16611",
                "collectionId": "82",
                "language": "en",
                "termId": "187461",
                "languageId": "5",
                "value": "progressive lens",
                "processStatus": "unprocessed",
                "status": "deprecatedTerm",
                "isValidTbx": true,
                "id": "2020463",
                "elementName": "ref",
                "type": "crossReference",
                "dataTypeId": "78",
                "target": "61806997-dfea-47df-a129-56f60b554df3",
                "deletable": true,
                "created": "Pavel Perminov, 05.05.2022 14:03:31",
                "updated": "Pavel Perminov, 05.05.2022 15:04:43"
            },
            ...
        ]
    }
}


Get attributes for a specific term
RequestPOST  /editor/plugins_termportal_data/siblinginfo
ParamstermId Required. ID of term we need to get info about
Response

Same as for 'terminfo', described above, except two things:

  1. Does NOT contain 'siblings'-key
  2. Does NOT contain termEntry-level attributes except 'refs', which are required due to that reference targets on termEntry-level are pointing to termEntries, which, in thir turn, anyway need to be somehow shown in TermPortal client app GUI, and the solution that was implemented to solve that problem assumes that terms are shown there, but they can be different depending on the language of term given by 'termId' request-param
Transfer terms to main translate5 app as project of type 'termtranslation'
RequestPOST /editor/plugins_termportal_data/transfer
ParamsclientId Required. Id of a customer, that newly created termtranslation-project will belong to

projectName Required. Project name

sourceLang Required. ID of source language. See lang in Client app setup data response

targetLang Required. Comma-separated list of target languages IDs. See langAll in Client app setup data response

terms=(all|none) Required. Terms selection mode. Used in conjunction with except param, e.g. the idea of possible selections are:

  1. "all except 1,2,3". To use this mode you need to run Term search-request at least once, for search params to be catched in session, because this mode assumes that terms to be involved are recognized indirectly - e.g by search rather than by explicit IDs list. So except-param is used for deselection, e.g to exclude some of search results (by IDs) from being transfered into termtranslation-project. If nothing should be excluded, except-param should be kept empty
  2. "none except 1,2,3". Ordinary mode - terms to be transfered for translation are selected directly by their IDs, provided by except-param

except Required if terms=none. Empty string or comma-separated list of term IDs

translated=(0|1) Required. Whether to transfer terms for translation even if they already have translation for given target languages

definition=(0|1) Required. Whether to transfer terms definition-attrs for translation as well

Response is containing json-object with key names from step1 to step5, and responses from the corresponding steps of project creation workflow

Response
{
    "step1": {
        "success": true,
        "rows": {
            "id": "586",
            "entityVersion": "3",
            "modified": "2022-05-06 09:09:03",
            "taskGuid": "{712ae3b6-7057-4a20-8de8-d4e7147db674}",
            "taskNr": "",
            "foreignId": "",
            "taskName": "test project",
            "foreignName": "",
            "sourceLang": "5",
            "targetLang": "0",
            "relaisLang": "0",
            "lockedInternalSessionUniqId": null,
            "locked": null,
            "lockingUser": null,
            "state": "project",
            "workflow": "default",
            "workflowStep": "1",
            "workflowStepName": "",
            "pmGuid": "{686cb35b-8c6b-4ce9-9de7-e6af721ff9f5}",
            "pmName": "Mustermann, Max (OID-35)",
            "wordCount": "0",
            "userCount": "0",
            "orderdate": "2022-05-06 00:00:00",
            "enddate": null,
            "referenceFiles": "0",
            "terminologie": "0",
            "enableSourceEditing": "0",
            "edit100PercentMatch": "0",
            "lockLocked": "1",
            "qmSubsegmentFlags": null,
            "emptyTargets": "0",
            "importAppVersion": "development",
            "customerId": "1",
            "usageMode": "cooperative",
            "segmentCount": "0",
            "segmentFinishCount": "0",
            "taskType": "termtranslation",
            "projectId": "586",
            "diffExportUsable": "0",
            "description": "",
            "created": "2022-05-06 09:08:54",
            "projectTasks": [
                {
                    "id": "587",
                    "entityVersion": "4",
                    "modified": "2022-05-06 09:08:56",
                    "taskGuid": "{b4f17c98-9350-4d71-8f07-28ddbe9bd209}",
                    "taskNr": "",
                    "foreignId": "",
                    "taskName": "test project - en / bg-BG",
                    "foreignName": "",
                    "sourceLang": "5",
                    "targetLang": "352",
                    "relaisLang": "0",
                    "lockedInternalSessionUniqId": "*translate5InternalLock*import",
                    "locked": "2022-05-06 08:08:53",
                    "lockingUser": "{00000000-0000-0000-0000-000000000000}",
                    "state": "import",
                    "workflow": "default",
                    "workflowStep": "1",
                    "workflowStepName": "no workflow",
                    "pmGuid": "{686cb35b-8c6b-4ce9-9de7-e6af721ff9f5}",
                    "pmName": "Mustermann, Max (OID-35)",
                    "wordCount": "0",
                    "userCount": "0",
                    "orderdate": "2022-05-06 00:00:00",
                    "enddate": null,
                    "referenceFiles": "0",
                    "terminologie": "0",
                    "enableSourceEditing": "0",
                    "edit100PercentMatch": "0",
                    "lockLocked": "1",
                    "qmSubsegmentFlags": null,
                    "emptyTargets": "0",
                    "importAppVersion": "development",
                    "customerId": "1",
                    "usageMode": "cooperative",
                    "segmentCount": "0",
                    "segmentFinishCount": "0",
                    "taskType": "termtranslationTask",
                    "projectId": "586",
                    "diffExportUsable": "0",
                    "description": "",
                    "created": "2022-05-06 09:08:54"
                },
                {
                    "id": "588",
                    "entityVersion": "6",
                    "modified": "2022-05-06 09:09:00",
                    "taskGuid": "{7a37f2af-ab76-44f8-ac45-182cc5ede849}",
                    "taskNr": "",
                    "foreignId": "",
                    "taskName": "test project - en / zh-TW",
                    "foreignName": "",
                    "sourceLang": "5",
                    "targetLang": "271",
                    "relaisLang": "0",
                    "lockedInternalSessionUniqId": "*translate5InternalLock*import",
                    "locked": "2022-05-06 08:08:53",
                    "lockingUser": "{00000000-0000-0000-0000-000000000000}",
                    "state": "import",
                    "workflow": "default",
                    "workflowStep": "1",
                    "workflowStepName": "no workflow",
                    "pmGuid": "{686cb35b-8c6b-4ce9-9de7-e6af721ff9f5}",
                    "pmName": "Mustermann, Max (OID-35)",
                    "wordCount": "0",
                    "userCount": "0",
                    "orderdate": "2022-05-06 00:00:00",
                    "enddate": null,
                    "referenceFiles": "0",
                    "terminologie": "0",
                    "enableSourceEditing": "0",
                    "edit100PercentMatch": "0",
                    "lockLocked": "1",
                    "qmSubsegmentFlags": null,
                    "emptyTargets": "0",
                    "importAppVersion": "development",
                    "customerId": "1",
                    "usageMode": "cooperative",
                    "segmentCount": "0",
                    "segmentFinishCount": "0",
                    "taskType": "termtranslationTask",
                    "projectId": "586",
                    "diffExportUsable": "0",
                    "description": "",
                    "created": "2022-05-06 09:08:54"
                }
            ]
        }
    },
    "step2": {
        "rows": {
            "id": "586",
            "entityVersion": "3",
            "modified": "2022-05-06 09:09:03",
            "taskGuid": "{712ae3b6-7057-4a20-8de8-d4e7147db674}",
            "taskNr": "",
            "foreignId": "",
            "taskName": "test project",
            "foreignName": "",
            "sourceLang": "5",
            "targetLang": "0",
            "relaisLang": "0",
            "lockedInternalSessionUniqId": null,
            "locked": null,
            "lockingUser": null,
            "state": "project",
            "workflow": "default",
            "workflowStep": "1",
            "workflowStepName": "",
            "pmGuid": "{686cb35b-8c6b-4ce9-9de7-e6af721ff9f5}",
            "pmName": "Mustermann, Max (OID-35)",
            "wordCount": "0",
            "userCount": "0",
            "orderdate": "2022-05-06 00:00:00",
            "enddate": null,
            "referenceFiles": "0",
            "terminologie": "0",
            "enableSourceEditing": "0",
            "edit100PercentMatch": "0",
            "lockLocked": "1",
            "emptyTargets": "0",
            "importAppVersion": "development",
            "customerId": "1",
            "usageMode": "cooperative",
            "segmentCount": "0",
            "segmentFinishCount": "0",
            "taskType": "termtranslation",
            "projectId": "586",
            "diffExportUsable": "0",
            "description": "",
            "created": "2022-05-06 09:08:54",
            "lockingUsername": null,
            "segmentFields": [],
            "userPrefs": [
                {
                    "id": null,
                    "taskGuid": null,
                    "workflow": null,
                    "workflowStep": null,
                    "anonymousCols": false,
                    "visibility": "show",
                    "userGuid": null,
                    "fields": "",
                    "notEditContent": false,
                    "taskUserAssocId": null
                }
            ],
            "notEditContent": false,
            "defaultSegmentLayout": true,
            "userTracking": [],
            "taskassocs": [],
            "pixelMapping": [],
            "lastErrors": [],
            "workflowProgressSummary": [
                {
                    "workflowStep": "no workflow",
                    "status": "edit",
                    "progress": 0,
                    "segmentWorkCount": {
                        "edited": 0,
                        "confirmed": 0,
                        "sum": 0
                    }
                },
                {
                    "workflowStep": "translation",
                    "status": "open",
                    "progress": 0,
                    "segmentWorkCount": {
                        "edited": 0,
                        "confirmed": 0,
                        "sum": 0
                    }
                },
                {
                    "workflowStep": "reviewing",
                    "status": "open",
                    "progress": 0,
                    "segmentWorkCount": {
                        "edited": 0,
                        "confirmed": 0,
                        "sum": 0
                    }
                },
                {
                    "workflowStep": "translatorCheck",
                    "status": "open",
                    "progress": 0,
                    "segmentWorkCount": {
                        "edited": 0,
                        "confirmed": 0,
                        "sum": 0
                    }
                },
                {
                    "workflowStep": "workflowEnded",
                    "status": "open",
                    "progress": 0,
                    "segmentWorkCount": {
                        "edited": 0,
                        "confirmed": 0,
                        "sum": 0
                    }
                },
                {
                    "workflowStep": "pmCheck",
                    "status": "open",
                    "progress": 0,
                    "segmentWorkCount": {
                        "edited": 0,
                        "confirmed": 0,
                        "sum": 0
                    }
                },
                {
                    "workflowStep": "visiting",
                    "status": "open",
                    "progress": 0,
                    "segmentWorkCount": {
                        "edited": 0,
                        "confirmed": 0,
                        "sum": 0
                    }
                }
            ]
        }
    },
    "step3": {
        "587": {
            "82": {
                "rows": {
                    "id": "298",
                    "languageResourceId": "82",
                    "taskGuid": "{b4f17c98-9350-4d71-8f07-28ddbe9bd209}",
                    "segmentsUpdateable": "0",
                    "autoCreatedOnImport": "0"
                }
            }
        },
        "588": {
            "82": {
                "rows": {
                    "id": "299",
                    "languageResourceId": "82",
                    "taskGuid": "{7a37f2af-ab76-44f8-ac45-182cc5ede849}",
                    "segmentsUpdateable": "0",
                    "autoCreatedOnImport": "0"
                }
            }
        }
    },
    "step4": {
        "rows": {
            "id": "586",
            "entityVersion": "3",
            "modified": "2022-05-06 09:09:03",
            "taskGuid": "{712ae3b6-7057-4a20-8de8-d4e7147db674}",
            "taskNr": "",
            "foreignId": "",
            "taskName": "test project",
            "foreignName": "",
            "sourceLang": "5",
            "targetLang": "0",
            "relaisLang": "0",
            "lockedInternalSessionUniqId": null,
            "locked": null,
            "lockingUser": null,
            "state": "project",
            "workflow": "default",
            "workflowStep": "1",
            "workflowStepName": "",
            "pmGuid": "{686cb35b-8c6b-4ce9-9de7-e6af721ff9f5}",
            "pmName": "Mustermann, Max (OID-35)",
            "wordCount": "0",
            "userCount": "0",
            "orderdate": "2022-05-06 00:00:00",
            "enddate": null,
            "referenceFiles": "0",
            "terminologie": "0",
            "enableSourceEditing": "0",
            "edit100PercentMatch": "0",
            "lockLocked": "1",
            "emptyTargets": "0",
            "importAppVersion": "development",
            "customerId": "1",
            "usageMode": "cooperative",
            "segmentCount": "0",
            "segmentFinishCount": "0",
            "taskType": "termtranslation",
            "projectId": "586",
            "diffExportUsable": "0",
            "description": "",
            "created": "2022-05-06 09:08:54",
            "lockingUsername": null,
            "segmentFields": [],
            "userPrefs": [
                {
                    "id": null,
                    "taskGuid": null,
                    "workflow": null,
                    "workflowStep": null,
                    "anonymousCols": false,
                    "visibility": "show",
                    "userGuid": null,
                    "fields": "",
                    "notEditContent": false,
                    "taskUserAssocId": null
                }
            ],
            "notEditContent": false,
            "defaultSegmentLayout": true,
            "userTracking": [],
            "taskassocs": [],
            "pixelMapping": [],
            "lastErrors": [],
            "workflowProgressSummary": [
                {
                    "workflowStep": "no workflow",
                    "status": "edit",
                    "progress": 0,
                    "segmentWorkCount": {
                        "edited": 0,
                        "confirmed": 0,
                        "sum": 0
                    }
                },
                {
                    "workflowStep": "translation",
                    "status": "open",
                    "progress": 0,
                    "segmentWorkCount": {
                        "edited": 0,
                        "confirmed": 0,
                        "sum": 0
                    }
                },
                {
                    "workflowStep": "reviewing",
                    "status": "open",
                    "progress": 0,
                    "segmentWorkCount": {
                        "edited": 0,
                        "confirmed": 0,
                        "sum": 0
                    }
                },
                {
                    "workflowStep": "translatorCheck",
                    "status": "open",
                    "progress": 0,
                    "segmentWorkCount": {
                        "edited": 0,
                        "confirmed": 0,
                        "sum": 0
                    }
                },
                {
                    "workflowStep": "workflowEnded",
                    "status": "open",
                    "progress": 0,
                    "segmentWorkCount": {
                        "edited": 0,
                        "confirmed": 0,
                        "sum": 0
                    }
                },
                {
                    "workflowStep": "pmCheck",
                    "status": "open",
                    "progress": 0,
                    "segmentWorkCount": {
                        "edited": 0,
                        "confirmed": 0,
                        "sum": 0
                    }
                },
                {
                    "workflowStep": "visiting",
                    "status": "open",
                    "progress": 0,
                    "segmentWorkCount": {
                        "edited": 0,
                        "confirmed": 0,
                        "sum": 0
                    }
                }
            ]
        }
    },
    "step5": {
        "rows": {
            "id": "586",
            "entityVersion": "3",
            "modified": "2022-05-06 09:09:03",
            "taskGuid": "{712ae3b6-7057-4a20-8de8-d4e7147db674}",
            "taskNr": "",
            "foreignId": "",
            "taskName": "test project",
            "foreignName": "",
            "sourceLang": "5",
            "targetLang": "0",
            "relaisLang": "0",
            "lockedInternalSessionUniqId": null,
            "locked": null,
            "lockingUser": null,
            "state": "project",
            "workflow": "default",
            "workflowStep": "1",
            "workflowStepName": "",
            "pmGuid": "{686cb35b-8c6b-4ce9-9de7-e6af721ff9f5}",
            "pmName": "Mustermann, Max (OID-35)",
            "wordCount": "0",
            "userCount": "0",
            "orderdate": "2022-05-06 00:00:00",
            "enddate": null,
            "referenceFiles": "0",
            "terminologie": "0",
            "enableSourceEditing": "0",
            "edit100PercentMatch": "0",
            "lockLocked": "1",
            "emptyTargets": "0",
            "importAppVersion": "development",
            "customerId": "1",
            "usageMode": "cooperative",
            "segmentCount": "0",
            "segmentFinishCount": "0",
            "taskType": "termtranslation",
            "projectId": "586",
            "diffExportUsable": "0",
            "description": "",
            "created": "2022-05-06 09:08:54",
            "lockingUsername": null,
            "segmentFields": [],
            "userPrefs": [
                {
                    "id": null,
                    "taskGuid": null,
                    "workflow": null,
                    "workflowStep": null,
                    "anonymousCols": false,
                    "visibility": "show",
                    "userGuid": null,
                    "fields": "",
                    "notEditContent": false,
                    "taskUserAssocId": null
                }
            ],
            "notEditContent": false,
            "defaultSegmentLayout": true,
            "userTracking": [],
            "taskassocs": [],
            "pixelMapping": [],
            "lastErrors": [],
            "workflowProgressSummary": [
                {
                    "workflowStep": "no workflow",
                    "status": "edit",
                    "progress": 0,
                    "segmentWorkCount": {
                        "edited": 0,
                        "confirmed": 0,
                        "sum": 0
                    }
                },
                {
                    "workflowStep": "translation",
                    "status": "open",
                    "progress": 0,
                    "segmentWorkCount": {
                        "edited": 0,
                        "confirmed": 0,
                        "sum": 0
                    }
                },
                {
                    "workflowStep": "reviewing",
                    "status": "open",
                    "progress": 0,
                    "segmentWorkCount": {
                        "edited": 0,
                        "confirmed": 0,
                        "sum": 0
                    }
                },
                {
                    "workflowStep": "translatorCheck",
                    "status": "open",
                    "progress": 0,
                    "segmentWorkCount": {
                        "edited": 0,
                        "confirmed": 0,
                        "sum": 0
                    }
                },
                {
                    "workflowStep": "workflowEnded",
                    "status": "open",
                    "progress": 0,
                    "segmentWorkCount": {
                        "edited": 0,
                        "confirmed": 0,
                        "sum": 0
                    }
                },
                {
                    "workflowStep": "pmCheck",
                    "status": "open",
                    "progress": 0,
                    "segmentWorkCount": {
                        "edited": 0,
                        "confirmed": 0,
                        "sum": 0
                    }
                },
                {
                    "workflowStep": "visiting",
                    "status": "open",
                    "progress": 0,
                    "segmentWorkCount": {
                        "edited": 0,
                        "confirmed": 0,
                        "sum": 0
                    }
                }
            ]
        }
    }
}
Create new term
RequestPOST /editor/term
ParamscollectionId Required. ID of TermCollection that new term should be created in See filterWindow.collections in Client app setup data response

language Required. Rfc5646-code of a new term's language. See langAll[*].value in Client app setup data response

term Required. Term text itself. String.

note Required if runtimeOptions.termportal.commentAttributeMandatory config is On. String.

termEntryId Optional. ID of termEntry, which new term should be attached under. If not given - new termEntry will be created.
Response
{
    "query": "test term",        // Same as given by term-param
    "language": "5",             // Language is returned as ID despite given as rfc5646
    "collectionIds": "82",       // Same as given by collectionId-param
    "termId": "607616",          // ID of created term
    "termEntryId": "92182",      // ID of created termEntry, or existing termEntry where new term was attached into
    "termTbxId": "id7657b259-6393-45fa-b53d-7e857d4882aa",
    "termEntryTbxId": "idaec78c6d-ea4b-46ab-bd84-9afa4070ecca"
}
Create proposal for existing term
RequestPUT /editor/term
ParamstermId Required. ID of existing term, for proposal to be created for

proposal Optional. If not given, the existing proposal will be deleted, so existing term will be kept with no proposal
Response
{
    "updated": "Pavel Perminov, 06.05.2022 20:47:28 ",
    "proposal": "polig1",
    "processStatus": "unprocessed"
}


Delete term
RequestDELETE /editor/term
ParamstermId Required. ID of term to be deleted

Response contains isLast-property, indicating whether deleted term was the last having it's language, or last for the whole termEntry

Response
{
    "isLast": "(false|language|entry)",                 // Whether deleted term was the last within it's language/entry
    "modified": "Pavel Perminov, 06.05.2022 20:59:07"
}
Create attribute
RequestPOST /editor/attribute
ParamstermId Required ID of term where attribute should be created, even if not at term-level

level=(entry|language|term) Required Level that the attribute should be created for

dataType Required Type of an attribute. Can be integer or string. See filterWindow.attributes[*].(id|type) in Client app setup data response

batch=(0|1) Optional Default 0. If this param is 1, it means that batch-mode is On so termId-param can accept comma-separated term IDs

except=(0|1) Optional Default 0. This param is only applicable when batch-mode is On. Before making request with except=1 you should preliminary run term search request at least once, so the IDs of found terms except given by termId-param would be involved

Batch-mode response example: as you can see, value of inserted.id contains comma-separated IDs of created attributes instead of just single integer value. Also please note that if attribute of some dataTypeId should be unique at it's level but it already exists, the response will contain existing-prop, having newly created attrs IDs as keys and existing attrs IDs as values. In the below example response two Comment-attributes on termEntry-level for different termEntries were created, but one of affected termEntries does already have Comment-attribute with ID=2020358. All attributes created in batch-mode are set up with isDraft=1 flag in the database, so they are drafts, and they need to be confirmed further, otherwise they will be deleted by daily cron job. 

Response in case of non-batch-mode would be the same as below, except that:

  1. inserted.id would contain single value instead of comma-separated values,
  2. there would be no existing-property in response json
  3. This is not mentioned in response, but not that isDraft would be =0,
Response
{
    "inserted": {
        "id": "2020477,2020478",
        "target": "",
        "value": null,
        "type": null,
        "language": null,
        "deletable": true,
        "dataTypeId": "20",
        "created": "Pavel Perminov, 09.05.2022 08:37:44",
        "updated": "Pavel Perminov, 09.05.2022 08:37:44"
    },
    "updated": "Pavel Perminov, 09.05.2022 08:37:44",
    "existing": {
        "2020478": 2020358 // "ID of draft attr": "ID of already existing attr at same level with same dataTypeId"
    }
}
Update attribute
RequestPUT /editor/attribute
ParamsattrId Required if draft0-param is not given. Comma separated IDs of attributes, whose values should be updated

dropId Optional Comma-separated list of IDs of draft-attributes, that should be deleted with preliminary usage of their values to spoof values of existing attributes identified by corresponding values from attrId-param

draft0 Required if attrId-param is not given. Comma-separated IDs of attributes, that currently are drafts, but should be un-drafted. Here can be IDs of attributes of types that can be non-unique within their level. Also, there can be IDs of attributes of types that should be unique within their levels, but that currently are unique, e.g. there were no existing attributes found of those types.

dataIndex=(value|target) Required if ALL attrs identified by attrId-param are of type xGraphic or externalCrossReference


value Required if it's a picklist-attribute

target Optional Must be valid termEntryTbxId (for termEntry-level attributes) or termTbxId (for term-level attributes)

termLang,mainLang Optional RFC5646-codes for preferred languages to return terms found by target-param. 

figure Required if ALL attrs identified by attrId-param are of type figure.

There are the following use cases each with set of request params involved:

  1. Value of some certain single attribute needs to be updated
    1. It's an attribute of a type that can be non-unique at it's level (e.g. of type xGraphic, externalCrossReference, crossReference and figure)
      1. xGraphic, externalCrossReference
        1. attrId
        2. dataIndex
        3. value
      2. crossReference
        1. attrId
        2. target
        3. termLang
        4. mainLang
      3. figure
        1. attrId
        2. figure
    2. It's an attribute of a type that should be unique at it's level (all other attribute types, mean other than mentioned in point 1.a)
      1. It's a picklist attribute (e.g. of type processStatus, administrativeStatus, termType, grammaticalGender and others)
        1. attrId
        2. value
      2. It's a plaintext attribute (e.g. of type definition, source, context, geographicalUsage, subjectField and others)
        1. attrId
        2. value
  2. Multiple attrs can be affected
    1. Batch-update draft attributes (but attributes will be remain drafts) - request params are same as described in point 1. Such usage is involved when user updates any attributes within batch-edit window. All attributes identified by comma-separated Ids given by attrId-param should be of same type, otherwise error response will be returned.
    2. Batch-confirm draft attributes, so attributes won't be drafts anymore. Such usage is involved when user press Save-button in batch-edit window
      1. attrId/attrId
      2. dropId
      3. draft0/draft0
Response [all levels]: figure
{
    "src": "/editor/plugins/termimage/TermPortal/tc_82/4a70516e-1ae0-4a02-96bc-139a18ff51e3.jpg",
    "updated": "Pavel Perminov, 10.05.2022 13:03:59"
}
Response [all levels]: externalCrossReference and xGraphic
{
    "updated": "Pavel Perminov, 10.05.2022 12:58:16",
    "isValidUrl": 1
}
Response [entry,term]: crossReference
{
    "updated": "Pavel Perminov, 10.05.2022 12:51:19",
    "isValidTbx": false,
    "id": "2020436",
    "collectionId": "82",
    "termEntryId": "16609",
    "language": "en",
    "termId": "222615",
    "termTbxId": "ida2526eba-c92e-4887-9137-df5838ac8f73",
    "dataTypeId": "78",
    "type": "crossReference",
    "value": null,
    "target": "asd",
    "isCreatedLocally": "1",
    "createdBy": null,
    "createdAt": "2022-04-18 21:41:05",
    "updatedBy": null,
    "updatedAt": "2022-05-10 13:51:19",
    "termEntryGuid": "08c9df82-8656-417c-888b-42f95c409b82",
    "langSetGuid": null,
    "termGuid": "791aecf8-753f-43d3-8207-c7351b659914",
    "guid": "8149f91f-98e9-4fee-a0dc-bd40cc7e5853",
    "elementName": "ref",
    "attrLang": "en",
    "isDescripGrp": "0",
    "isDraft": "0"
}
Response [term]: all other attr types
{
    "success": true,
    "updated": "Pavel Perminov, 10.05.2022 12:49:02",
    "status": {                            // Applicable on term-level only
        "status": "admittedTerm",
        "others": {
            "21": "regulatedTerm-admn-sts" // Info about which status-related attributes were changed to which values, 
        }                                  // in dataTypeId:value format. Currently those can be administrativeStatus-
     },                                    // and normativeAuthorization-attributes. There is special logic implemented
                                           // of how one status-related attr can affect other when changed, so this info
                                           // is used in TermPortal GUI to reflect those changes. Note: dataTypeId is 
                                           // used as attr key due to that those attrs are unique having their dataTypeId  
                                           // at their level (term-level)
     "icons": {         // Info about which icons for which terms should be updated both in center and left grids
        "222615": {     // Info for multiple term IDs here can be in case of batch-confirming draft attributes
            "status": "admittedTerm"          
            "processStatus": "unprocessed"
        }
    }
}
Response [entry,language]: definition
{
    "success": true,
    "updated": "Pavel Perminov, 10.05.2022 13:23:04",
    "definition": {
        "value": "language-level definition12",
        "affected": [      // In left panel of TermPortal GUI there is a grid showing found terms, and each grid row 
            "222615"       // have info-icon showing definition in tooltip on hover, so here is the list of IDs of                   
        ]                  // rows whose tooltips should be updated with new definition value. Logic of how entry- and/or 
     }                     // language-level definitions are replicated acrosss terms assumes that here can be more than 
 }                         // 1 ID even if definition-attr was updated not in batch-mode
Response [entry,language]: all other attr types
{
    "success": true,
    "updated": "Pavel Perminov, 10.05.2022 13:25:40"
}
Delete attribute
RequestDELETE /editor/attribute
ParamsattrId Required ID of attribute to be deleted. Can be also be comma-separated list of attribute IDs
Response
{
    "updated": "Pavel Perminov, 09.05.2022 10:24:17"
}
  • No labels