Install
Works with Drupal: ^11.3 || ^12Using Composer to manage Drupal site dependencies
Alternative installation files
Release notes
WARNING: THERE IS NO MIGRATION PATH. YOU MUST REINSTALL FROM SCRATCH.
Do not update an existing site to this release. Orchestra ships no update hooks, and none is coming until the first beta release. A site on an earlier alpha holds a database this code does not match.
Uninstall the Orchestra modules, drop what they leave behind, and install 1.0.0-alpha24 fresh. Every instance, token, task, incident, variable, attachment and delegation from an earlier alpha is lost, and that is expected.
Between alpha23 and alpha24 in particular, a token stores the workflow its step belongs to, in a new workflow base field. A theme overriding an Orchestra template should also read "For theme developers" below: several templates are renamed, split or removed.
New
- A theme can lay out one application's pages and emails, not only one workflow's. The step form, the instance page, the request and task cards and the Easy Email template ids all take an application level between the tenant and the workflow:
orchestra-step-form--hr--withdraw.html.twiglays out thewithdrawstep in every workflow of thehrapplication. The instance page offers suggestions for the first time, and each of its parts (meta, status, state, timeline, source, back) is a template of its own with the same suggestions. #3632834: Add an application level to the template suggestions of the step form, the instance page and the list cards, and to the email template ids - A list's action link and a task's operations have templates of their own,
orchestra-action-link.html.twigandorchestra-task-operations.html.twig, with tenant, application, workflow and step suggestions. The operations template also gets the operations as data, so an override can show them as a row of buttons instead of a dropdown. #3632866: Render the list action links and task operations through templates of their own, with tenant, application, workflow and step suggestions - An instance's status and state, a task's state and outcome, and a token's state each have a template of their own, instead of one template for all five. Each takes tenant, application, workflow and step suggestions, and gets its entity and the machine name of what it shows. A card says its kind in its classes (
orchestra-card--request,orchestra-card--task), so a theme can style the pills of the request lists apart from those of the task lists. #3632898: Give an instance's status and state, a task's state and outcome, and a token's state each a template of their own, and name the instance detail's templates after it #3633111: Give the status, state and outcome pills tenant, application, workflow and step template suggestions, the card its kind as a class, and each state-shaped Views field a wrapper of its own - /orchestra/requests shows each request's current step, as the Views list of requests already did, and the status and the state are two columns, each under its own heading, on the cards and on the instance page. #3632911: Show each request's current step on /orchestra/requests, give the status and the state a column each, and give the instance detail parts and the status and state templates the data they show
- A request card can show a webform answer, such as the city of an address. The documentation explains how: store the submission values on the instance, then add the Process variable field to the Views list of requests. Every card also gets the process instance it shows, and the Process variable column reads its values in one query. #3632968: Give every card its process instance, read the Process variable column in one select, and document showing a webform answer on a card
Fixes worth naming
- update.php could end in a fatal error on a site with Orchestra Group (
TypeError: GroupsVariable::__construct(): Argument #8 ($memoryCache) must be of type MemoryCacheInterface, UpdateBackend given), when cron ran at the end of the update. #3632684: Type the cache.memory arguments as CacheBackendInterface, so update.php does not crash - A step resume through the API wrote variables of any size, and a name longer than 255 characters failed inside storage with a generic error. A resume now refuses what a start and
setVariable()refuse, naming the variable, before anything is written. #3633205: Check the variables a step resume writes as start() and setVariable() check them - Resuming an incident overwrote every variable with the value the form showed, including one another branch had written since the form was opened. Only the values the operator changes are written now. #3633206: Keep concurrent writes on incident resume, uninstall orchestra_server cleanly, use the resolved Kessai client, keep node id case, and fix five more defects
- Orchestra Server could not be uninstalled once a consumer existed: the uninstall stopped on a field already deleted. #3633206
- The payment steps crashed on a site whose payments are settled by Kessai on another host, and on a site with both, paid through the local engine while the rest of the module read through the client. They now take the payment client the site resolved. #3633206
- Saving in the Complete Modeler lowercased node ids, so a node drawn in BPMN.io, such as
Activity_0p1z9vg, was renamed even when nothing was edited, and lost its layout and translations. #3633206 - On a site served from a subdirectory, some links doubled the base path (
/sub/sub/...): the instance page's back link, the webform's escape buttons and the step links sent to a calling site. #3633206 - A local workflow could not be deleted while a remote subprocess step named a workflow of the same name on another site. The Complete Modeler also refuses a remote child process the remote does not list, instead of failing when the first token reaches the step. #3633206
- The bulk actions on processes and tokens now say for each row what they did, including a row they skipped and a cancel that lost to another actor, instead of leaving the row blank. #3633206
Changed
- An instance whose workflow sets no status shows its engine state as a marker (a dot and its label) on /orchestra/requests and the instance page, as the Views list already did, instead of in the status pill. #3632898
- The submitted data on the instance page is headed "Submission" instead of "Your submission", which also reads right for an operator. #3632911
- Warnings from remote subprocesses, webform steps, the Workflows list and content tasks are logged on the
orchestrachannel, where operators filtering on Orchestra see them, instead of channels of their own. #3633207: Say instance for a process instance in code, type every class constant, fold four duplicated helpers and correct ten documentation errors - The workflow, step and task label columns of the Views lists load the page's workflows once, instead of once per row. #3633206
For theme developers
orchestra_status_tagandorchestra_lifecycle_markerare replaced byorchestra_instance_status,orchestra_instance_state,orchestra_task_state,orchestra_task_outcomeandorchestra_token_state. #3632898- The instance page's templates are named after it:
orchestra_instancebecomesorchestra_instance_detail, and its partsorchestra_instance_detail_meta,_status,_state,_timeline,_sourceand_back. The parts get data instead of prebuilt markup. #3632898 #3632911 - The card row gets the row's fields as they are, keyed by id, and the shipped
orchestra-card-row--request.html.twigandorchestra-card-row--task.html.twigplace them.orchestra_card_columnis removed, and theorchestra-card__col*classes becomeorchestra-card__field*. A theme overridingorchestra-card-row.html.twigto restyle the shipped lists now overrides the request or task template. #3632980: Hand the card template its row's fields as they are, and place them by id in the shipped request and task templates - The five state-shaped Views fields each render through a wrapper named after their plugin (
views_view_field__orchestra_instance_statusand so on). The sharedviews_view_field__orchestra_state_labelis removed. #3633111
For module developers
TokenInterface::getWorkflowId()names the workflow a token's step belongs to, the embedded child's inside an embedded subprocess, read from the token's own row. #3633145: Store on each token the workflow its step belongs toVariableResolver::readValueOfInstances()reads one process variable for a set of instances in one query. #3632968SubprocessTaskInterface::getChildWorkflowId(array $configuration)says which workflow of this site a subprocess node runs.WorkItemManagerInterface::getLabel()takes the workflow a caller has already loaded, andInternalPathPolicy::buildUrl()builds a Url from an address this site made without doubling the base path. #3633206TemplateScope::createForWorkflow()takes the config factory instead of the entity type manager. #3632866
Housekeeping
- The remote client is tested against the real API endpoints, including an operation step claimed by one person and completed through the API. #3632123: Test the remote client against the real API doors, and a claimed operation step completed through the API
- Code says instance for a process instance, every class constant is typed, four duplicated helpers are folded into one each, and ten documentation errors are corrected. #3633207
- The codebase metrics page is refreshed: 1,676 files and 162,208 lines of code.