Package org.ametys.cms.clientsideelement
Class WorkflowStepsClientSideElement
java.lang.Object
org.ametys.runtime.plugin.component.AbstractLogEnabled
org.ametys.core.ui.StaticFileImportsClientSideElement
org.ametys.cms.clientsideelement.WorkflowStepsClientSideElement
- All Implemented Interfaces:
ClientSideElement,MenuClientSideElement,LogEnabled,PluginAware,Configurable,Serviceable
- Direct Known Subclasses:
AbstractFormEntriesWorkflowStepsClientSideElement
public class WorkflowStepsClientSideElement
extends StaticFileImportsClientSideElement
implements MenuClientSideElement
This element creates multiple toggle buttons representing a workflow.
A menu represent workflow actions.
The awaited configuration is:
<workflow name="WORKFLOWNAME">
<action>
<menu-1-label>I18N_KEY</menu-1-label>
</action>
<workflow-actions mode="exclude">
<action>22</action>
<action>222</action>
</workflow-actions>
<workflow-steps mode="include">
<step>1</step>
<step>2</step>
</workflow-steps>
<steps>
<step id="1">
<workflow-actions mode="include">
<action>2</action>
</workflow-actions>
<comments mode="include">
<action>3</action>
</comments>
<action>
<menu-1-label />
</action>
</step>
</steps>
</workflow>
Where WORKFLOWNAME is the name of the workflow such as 'content'. MANDATORY
Where <action> is optional to override the default configuration of every step button and step menu
The attribute name="..." is optional to specify the JS class used.
Where <workflow-actions< is optional to restrict the available actions in the menu. Default value is <workflow-actions mode="exclude"/>
The attribute mode="include" indicates that the list of actions ids will replace the one automatically determined (even if it only can by a sublist). Listing ids here ensure that no new actions will appear in this menu if the workflow is modified.
The attribute mode="exclude" (default value) indicates that the list of actions ids will be removed from the one automatically determined (it only can by a sublist of it). Listing ids here ensure that when the workflow has a new action it will be added here.
Where <steps> is optional and allows you to configure each step specifically.
The <step> id attribute is MANDATORY
The <workflow-actions> is identical to the one at the root of <workflow> but only for this specific step
Where <comments< is identical to <workflow-actions< but to display to the user a dialog box to enter comments. The workflow has to support comments on that action. To avoid comments, set <comments mode="include"/>
The <action> is identical to the one at the root of <workflow> but only for this specific step
Here is a declaration sample in a plugin.xml file
<extension id="org.ametys.cms.workflow.WorkflowSteps"
point="org.ametys.core.ui.RibbonControlsManager"
class="org.ametys.cms.clientsideelement.WorkflowStepsClientSideElement">
<workflow name="content">
<steps>
<step id="1"> <!-- Draft -->
<workflow-actions mode="exclude">
<action>2</action><!-- Edit -->
</workflow-actions>
<comments mode="include">
<action>3</action><!-- propose -->
</comments>
</step>
</steps>
</workflow>
</extension>
Default configuration is proposed upon the StaticFileImportsClientSideElement.
- default js class is "Ametys.plugins.cms.content.controller.WorkflowMenu"
- default js files are loaded : /plugins/cms/resources/js/Ametys/plugins/cms/content/controller/WorkflowMenu.js and /plugins/cms/resources/js/Ametys/plugins/cms/content/actions/WorkflowAction.js
- default js parameters are
- label (to the i18nkey application:WORFKLOW_STEP_NAME)
- description (to the i18nkey application:WORFKLOW_STEP_NAME_DESCRIPTION)
- footerDescription (to the i18nkey application:WORFKLOW_STEP_NAME_FOOTER)
- selection-target-id (to ^content$)
- icon-small, icon-medium, icon-large (to /plugins/cms/resources_workflow/WORFKLOW_STEP_NAME-small.png for an application i18nkey, or /plugins/PLUGINNAME/resources/img/workflow/WORFKLOW_STEP_NAME-small.png for a plugin i18nkey)
- workflow-step (tp the value configured avove)
- workflow-name (to the value configured above)
- selection-enable-multiselection (true)
- selection-description-empty : i18nkey plugin.cms:CONTENT_WORKFLOW_NOSELECTION_DESCRIPTION
- selection-description-nomatch : i18nkey plugin.cms:CONTENT_WORKFLOW_NOMATCH_DESCRIPTION
- selection-description-multiselectionforbidden : i18nkey plugin.cms:CONTENT_WORKFLOW_NOMULTISELECT_DESCRIPTION
- additionnal js parameters are
- noaction-available-description : i18nkey for description when no actions are available, plugin.cms:CONTENT_WORKFLOW_NOACTIONAVAILABLE_DESCRIPTION
- refreshing-description : i18nkey for description when refreshing, plugin.cms:CONTENT_WORKFLOW_REFRESH_DESCRIPTION
- contentselected-start-description : i18nkey for description of the current content selection (start of the description) : plugin.cms:CONTENT_WORKFLOW_DESCRIPTION_BEGIN
- contentselected-end-description : i18nkey for description of the current content selection (end of the description) : plugin.cms:CONTENT_WORKFLOW_DESCRIPTION_END
- editing-description : i18nkey for description when the content is beeing edited : plugin.cms:CONTENT_WORKFLOW_EDITING_DESCRIPTION
So there is no need to define a <class> by default or import js files.
Additionnal i18nkeys used are plugin.cms:CONTENT_WORKFLOW_DESCRIPTION and plugin.cms:CONTENT_WORKFLOW_LOCKED_DESCRIPTION
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.ametys.core.ui.ClientSideElement
ClientSideElement.Script, ClientSideElement.ScriptFile -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected ContentHelperThe content helperprotected ThreadSafeComponentManager<ClientSideElement>The client side element component manager for menu items.protected Map<String,List<ClientSideElement>> The menu itemsprotected List<ClientSideElement>The referenced client side elementprotected AmetysObjectResolverAmetys object resolverprotected List<ClientSideElement.Script>The scriptsprotected ServiceManagerThe service managerThe unresolved itemsprotected UserManagerRuntime users managerprotected WorkflowHelperWorkflow helperprotected WorkflowProviderWorkflow providerFields inherited from class org.ametys.core.ui.StaticFileImportsClientSideElement
_currentUserProvider, _dependencies, _featureName, _id, _pluginName, _rightManager, _rights, _rightsMode, _script -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected void_additionalMenuItemConfiguration(Configuration itemConf, DefaultConfiguration classConf, int actionId, Map<String, Object> parameters) Additional configuration for menu itemsprotected void_configureDefaultDescriptions(Map<String, Object> parameters) Configure the default descriptionprotected void_configureMenuItems(ClientSideElement.Script script, Configuration configuration) Configure the menu itemsprotected void_configureParameters(Map<String, Object> parameters) Configure parameters recursivelyprotected ClientSideElement.Script_configureScript(Configuration configuration) Configure the scriptprotected void_configureScripts(Configuration workflowConfiguration, List<Integer> stepIds, Map<Integer, Configuration> stepsConfiguration, List<Integer> allowedActionIds, com.opensymphony.workflow.loader.WorkflowDescriptor workflowDescriptor) Configure the list of Scripts, for each step available to the workflow.protected void_configureWorkflow(Configuration configuration) Read the workflow configuration, to set up the scripts.protected void_configureWorkflowStep(com.opensymphony.workflow.loader.WorkflowDescriptor workflowDescriptor, Integer stepId, Map<String, Object> stepParameters, Configuration stepConfiguration, List<Integer> allowedActionIds) Configure the parameters specific to the workflow, for the given step_configureWorkflowStepActions(String workflowName, Integer stepId, List<Integer> currentStepActions, List<Integer> allowedStepActions, Configuration stepActionsConfiguration) Get the list of actions available for a step, from the configuration_getAllowedActions(com.opensymphony.workflow.loader.WorkflowDescriptor workflowDescriptor, List<Integer> stepIds, boolean actionsIncludeMode, List<Integer> configuredActions) Get the actions allowed for the current workflow and only for the specified steps._getAllowedSteps(com.opensymphony.workflow.loader.WorkflowDescriptor workflowDescriptor, boolean stepsIncludeMode, List<Integer> configuredSteps) Get the steps allowed for the current workflowprotected StringGet the default class name for workflow actionprotected StringGet the default class name for workflow menuprotected StringGet the default plugin nameprotected StringGet the selection target id (can be a Regexp)voidconfigure(Configuration configuration) getReferencedClientSideElements(Map<String, Object> contextParameters) This method returns theClientSideElementreferenced by the menu through its menu or gallery itemsgetScripts(boolean ignoreRights, Map<String, Object> contextParameters) This method return the scripts that will be used on client side.getWorkflowState(List<String> contentsId, String scriptId) Get the workflow state of contentsvoidservice(ServiceManager manager) Methods inherited from class org.ametys.core.ui.StaticFileImportsClientSideElement
_configureDependencies, _configureImports, _configureRights, _configureRightsMode, getDependencies, getId, getPluginName, getRights, getScripts, hasRight, setPluginInfo, toStringMethods inherited from class org.ametys.runtime.plugin.component.AbstractLogEnabled
getLogger, setLogger
-
Field Details
-
_smanager
The service manager -
_userManager
Runtime users manager -
_workflowProvider
Workflow provider -
_workflowHelper
Workflow helper -
_resolver
Ametys object resolver -
_contentHelper
The content helper -
_referencedClientSideElement
The referenced client side element -
_unresolvedMenuItems
The unresolved items -
_scripts
The scripts
-
Constructor Details
-
WorkflowStepsClientSideElement
public WorkflowStepsClientSideElement()
-
-
Method Details
-
service
- Specified by:
servicein interfaceServiceable- Overrides:
servicein classStaticFileImportsClientSideElement- Throws:
ServiceException
-
configure
- Specified by:
configurein interfaceConfigurable- Overrides:
configurein classStaticFileImportsClientSideElement- Throws:
ConfigurationException
-
_configureWorkflow
Read the workflow configuration, to set up the scripts.- Parameters:
configuration- The configuration- Throws:
ConfigurationException- If an error occurs
-
_getAllowedSteps
protected List<Integer> _getAllowedSteps(com.opensymphony.workflow.loader.WorkflowDescriptor workflowDescriptor, boolean stepsIncludeMode, List<Integer> configuredSteps) Get the steps allowed for the current workflow- Parameters:
workflowDescriptor- The workflow descriptorstepsIncludeMode- True if the step listed should be the only steps included, false if they should be excluded from all available workflow's steps.configuredSteps- A list of step ids.- Returns:
- The steps allowed.
-
_getAllowedActions
protected List<Integer> _getAllowedActions(com.opensymphony.workflow.loader.WorkflowDescriptor workflowDescriptor, List<Integer> stepIds, boolean actionsIncludeMode, List<Integer> configuredActions) Get the actions allowed for the current workflow and only for the specified steps.- Parameters:
workflowDescriptor- The workflow descriptorstepIds- The list of steps specifiedactionsIncludeMode- True if the action listed should be the only actions included, false if they should be excluded from all available workflow's actions.configuredActions- A list of actions ids.- Returns:
- The actions allowed.
-
_configureScripts
protected void _configureScripts(Configuration workflowConfiguration, List<Integer> stepIds, Map<Integer, Configuration> stepsConfiguration, List<Integer> allowedActionIds, com.opensymphony.workflow.loader.WorkflowDescriptor workflowDescriptor) throws ConfigurationExceptionConfigure the list of Scripts, for each step available to the workflow.- Parameters:
workflowConfiguration- The configurationstepIds- The list of stepsstepsConfiguration- The parameters for each stepallowedActionIds- The list of globally allowed actions for this workflowworkflowDescriptor- The descriptor for the current workflow- Throws:
ConfigurationException- If an error occurs
-
_getDefaultMenuClassName
Get the default class name for workflow menu- Returns:
- the default class name
-
_getDefaultActionClassName
Get the default class name for workflow action- Returns:
- the default class name
-
_configureWorkflowStep
protected void _configureWorkflowStep(com.opensymphony.workflow.loader.WorkflowDescriptor workflowDescriptor, Integer stepId, Map<String, Object> stepParameters, Configuration stepConfiguration, List<Integer> allowedActionIds) throws ConfigurationExceptionConfigure the parameters specific to the workflow, for the given step- Parameters:
workflowDescriptor- The descriptor of the workflowstepId- The stepstepParameters- The parameters of the stepstepConfiguration- The step configurationallowedActionIds- The list of globally allowed actions- Throws:
ConfigurationException- If an error occurs
-
_configureWorkflowStepActions
protected List<Integer> _configureWorkflowStepActions(String workflowName, Integer stepId, List<Integer> currentStepActions, List<Integer> allowedStepActions, Configuration stepActionsConfiguration) throws ConfigurationException Get the list of actions available for a step, from the configuration- Parameters:
workflowName- The name of the current workflowstepId- The stepcurrentStepActions- All the actions available for this stepallowedStepActions- The actions allowed by the configuration for this stepstepActionsConfiguration- The configuration for the step actions- Returns:
- The list of actions for the step
- Throws:
ConfigurationException- If an error occurs
-
getReferencedClientSideElements
public List<ClientSideElement> getReferencedClientSideElements(Map<String, Object> contextParameters) Description copied from interface:MenuClientSideElementThis method returns theClientSideElementreferenced by the menu through its menu or gallery items- Specified by:
getReferencedClientSideElementsin interfaceMenuClientSideElement- Parameters:
contextParameters- Contextuals parameters transmitted by the environment.- Returns:
- the referenced client side elements.
-
getScripts
public List<ClientSideElement.Script> getScripts(boolean ignoreRights, Map<String, Object> contextParameters) Description copied from interface:ClientSideElementThis method return the scripts that will be used on client side. This class will be parametrized by initial and current parameters.- Specified by:
getScriptsin interfaceClientSideElement- Overrides:
getScriptsin classStaticFileImportsClientSideElement- Parameters:
ignoreRights- True to ignore the rights verification.contextParameters- Contextuals parameters transmitted by the environment.- Returns:
- The list of scripts or an empty list.
-
_configureScript
protected ClientSideElement.Script _configureScript(Configuration configuration) throws ConfigurationException Description copied from class:StaticFileImportsClientSideElementConfigure the script- Overrides:
_configureScriptin classStaticFileImportsClientSideElement- Parameters:
configuration- the global configuration- Returns:
- The script created
- Throws:
ConfigurationException- The configuration is incorrect
-
_configureParameters
Configure parameters recursively- Parameters:
parameters- The parameters map to fill- Throws:
ConfigurationException- The configuration is incorrect
-
_getDefaultPluginName
Get the default plugin name- Returns:
- the default plugin name
-
_getSelectionTargetId
Get the selection target id (can be a Regexp)- Returns:
- the selection target id
-
_configureMenuItems
Configure the menu items- Parameters:
script- The parameters map to fillconfiguration- The items configuration
-
_additionalMenuItemConfiguration
protected void _additionalMenuItemConfiguration(Configuration itemConf, DefaultConfiguration classConf, int actionId, Map<String, Object> parameters) Additional configuration for menu items- Parameters:
itemConf- The item configurationclassConf- The class configurationactionId- The workflow action idparameters- The script parameters
-
_configureDefaultDescriptions
Configure the default description- Parameters:
parameters- The parameters
-
getWorkflowState
Get the workflow state of contents- Parameters:
contentsId- The ids of contents to test workflow statusscriptId- The script id- Returns:
- The workflow state
-