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
Modifier and TypeFieldDescriptionprotected ContentHelper
The 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 AmetysObjectResolver
Ametys object resolverprotected List<ClientSideElement.Script>
The scriptsprotected ServiceManager
The service managerThe unresolved itemsprotected UserManager
Runtime users managerprotected WorkflowHelper
Workflow helperprotected WorkflowProvider
Workflow providerFields inherited from class org.ametys.core.ui.StaticFileImportsClientSideElement
_currentUserProvider, _dependencies, _featureName, _id, _pluginName, _rightManager, _rights, _rightsMode, _script
-
Constructor Summary
-
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 String
Get the default class name for workflow actionprotected String
Get the default class name for workflow menuprotected String
Get the default plugin nameprotected String
Get the selection target id (can be a Regexp)void
configure
(Configuration configuration) getReferencedClientSideElements
(Map<String, Object> contextParameters) This method returns theClientSideElement
referenced 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 contentsvoid
service
(ServiceManager manager) Methods inherited from class org.ametys.core.ui.StaticFileImportsClientSideElement
_configureDependencies, _configureImports, _configureRights, _configureRightsMode, getDependencies, getId, getPluginName, getRights, getScripts, hasRight, setPluginInfo, toString
Methods 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:
service
in interfaceServiceable
- Overrides:
service
in classStaticFileImportsClientSideElement
- Throws:
ServiceException
-
configure
- Specified by:
configure
in interfaceConfigurable
- Overrides:
configure
in 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:MenuClientSideElement
This method returns theClientSideElement
referenced by the menu through its menu or gallery items- Specified by:
getReferencedClientSideElements
in 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:ClientSideElement
This method return the scripts that will be used on client side. This class will be parametrized by initial and current parameters.- Specified by:
getScripts
in interfaceClientSideElement
- Overrides:
getScripts
in 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:StaticFileImportsClientSideElement
Configure the script- Overrides:
_configureScript
in 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
-