uPortal has Portlet Lifecycle features to support workflow and "delegated administration" use cases WRT portal content, but there are a number of issues with them...
MAINTENANCE mode is tracked with a parameter (instead of a column), and has a very surprising approach to evaluating whether a portlet is in maintenance (viz. the presence of the parameter means a portlet is in maintenance, even if the value is false)
The current approach – based on columns of UP_PORTLET_DEF – is woefully in-extensible (you can't change columns every time you want to add or remove a lifecycle state)
For uPortal 5, we should do the painful work of overhauling this system.
Instead of storing all lifecycle info in the portlet's (only) row in UP_PORTLET_DEF, we should move lifecycle info to its own table and establish a one-to-many relationship between the 2 tables. This approach will allow us to...
Store all lifecycle info in the same table
Extend the system with new lifecycle states in the future, if needed
This plan has impacts on Import/Export; we need to
Represent all lifecycle info in the <lifebcycle> element
Provide a new portlet-definition XSD that supports allows that
Provide an "upgrader" that supports backwards-compatibility with portlet entity files that reference the existing XSD