User interface customization is simple to implement. All HTML text is pulled into the web app from a "skin" file which is editable. HTML in web apps is highly repetitive -- every page looks more or less the same. Identity Manager uses a simple macro system to factor out such commonalities, which allows customers to quickly customize the look and feel of the entire UI and ensure consistency between pages. This means that customers do not normally edit a skin file directly, but rather edit HTML snippets in a macro file and recompile a new skin. This is faster and more consistent.
Common elements, such as page layout and HTML preambles, are factored out into standard macros using an open source macro language (M4). Modifications made to M4 macros are propagated across the entire user interface. The application does specify navigation sequence (i.e., what each screen does and how one navigates from one screen to another) but this too is quite customizable using a variety of policy settings.
Note that M4 (at least as it is used in Identity Manager) is really just 3 keywords: include, define and ifelse. It is not something that administrators need to learn. Rather, what complexity does exist is in the information architecture (which UI elements are defined where). To customize the Identity Manager UI, all that is needed is an understanding of HTML and CSS, plus a bit of patience to find the right macro to edit -- so that a change will propagate to the entire UI.
All English text in the UI is stored in a language file, and translations are supported by installing multiple language files. The same instance of the software may be accessed by different users in different languages, at the same time -- just by specifying a language in the URL. This mechanism means that all UI text is customizable by customers, either by editing the language file directly or by signing into our software in a special "language translation" mode which allows a user to change UI text by clicking on it and editing in-app.
UI customizations are defined separately from the core UI, using an override scheme. This allows customizations to survive Identity Manager version upgrades with minimal intervention. For example, customers may define a new markup for HTML tables. This markup is placed in an override file and takes precedence over the default HTML table code. When Identity Manager is upgraded, the customized markup will continue to take precedence over default HTML code.
In addition to modifying HTML and CSS code, customers can change the values of a number of system variables which alter Identity Manager behavior. For example, password policy, intruder lockout frequency and duration, non-password authentication rules and more can all be adjusted from the Identity Manager administrative web portal. System variables also survive version upgrades.
Identity Manager behavioral modifications are made using plug-in points, rather than (as is common with many other applications) by modifying the source code of Identity Manager itself.
Plug-ins are scripts or executables installed on the Identity Manager server. Identity Manager components call plug-in programs to make business policy decisions or to look-up information. Examples include:
This architecture, which encapsulates business logic into stand-alone scripts or executables, has two important benefits: