The Advanced Task Manager for Optimizely provides CMS editors with enhanced oversight of administration tasks related to Awaiting Review in Content Approval processes. Change Approval support is available on CMS 12 only (see CMS 12 Support).
- Advanced filtering: Filter tasks by status, content type, site, and by content ID or name.
- Select all across pages: Select every item matching the current filters, not just those visible on the current page.
- Approve entire approval sequence: Approve the entire approval sequence in bulk or against individual tasks.
- Publish content after approval: Publish selected content immediately after approval, with rights-aware handling when only some items can be published.
- Scheduled publishing: Optionally schedule a future date and time for approved content to go live instead of publishing immediately.
- Approve blocks & media on a page: Open a modal from the filter bar, navigate the page hierarchy tree to pick a page, and approve all pending blocks and media it references in one action — with an optional publish step.
- Task ordering: Sort the task list by name, content type, type, submission date, started-by user, or deadline.
- Deadline field: Optional date/time property on pages and blocks that highlights time-sensitive tasks in the list with warning and danger states.
- User notifications: Tasks with unread notifications are highlighted automatically and marked as read on open.
To install the Advanced Task Manager, begin by adding the NuGet package using Optimizely NuGet:
dotnet add package AdvancedTaskManager
Add the AdvancedTaskManager handler in the Startup.cs within the ConfigureServices method. Here's an example with all available configurations:
public void ConfigureServices(IServiceCollection services)
{
services.AddAdvancedTaskManager(o =>
{
o.DeleteChangeApprovalTasks = true; //Default true
o.PageSize = 10; //Default 30
o.AddContentApprovalDeadlineProperty = true; //Default false
o.DeleteContentApprovalDeadlineProperty = true; //Default false
o.WarningDays = 4; //Default 4;
o.DateTimeFormat = "yyyy-MM-dd HH:mm"; //Default "yyyy-MM-dd HH:mm";
o.DateTimeFormatUserFriendly = "MMM dd, yyyy, h:mm:ss tt"; //Default "MMM dd, yyyy, h:mm:ss tt";
});
OR
services.AddAdvancedTaskManager();
...
}In addition, the configuration can be read from the appsettings.json:
"AdvancedTaskManager": {
"PageSize": 40,
"WarningDays": 6
"DeleteChangeApprovalTasks": true,
"PageSize": 10,
"AddContentApprovalDeadlineProperty": true,
"DeleteContentApprovalDeadlineProperty": true,
"WarningDays": 4,
"DateTimeFormat": "yyyy-MM-dd HH:mm",
"DateTimeFormatUserFriendly": "MMM dd, yyyy, h:mm:ss tt""
}The settings specified in the appsettings.json file will take precedence over any configurations defined in the Startup.
This solution incorporates an implementation of the IMenuProvider, guaranteeing the inclusion of the Advanced Task Manager administration pages in the CMS Admin menu titled Adv. Task Manager. No additional action is required, as Optimizely CMS will automatically scan and activate all instances of the IMenuProvider.
By default, access to the Admin UI is limited to users with the Administrators role. The solution enhances this by granting access to the Adv. Task Manager menu for specific roles, including CmsAdmins, Administrator, WebAdmins, WebEditors, and CMSEditors. You have the flexibility to configure your authorization policy when registering the AdvancedTaskManager handler.
Example:
services.AddAdvancedTaskManager(o => { },
policy =>
{
policy.RequireRole("MyRole");
});To integrate Optimizely Opti ID for authentication within your Optimizely CMS and other Optimizely One applications, it's necessary to define the configurePolicy for this module during your application startup. This involves a straightforward step of incorporating policy.AddAuthenticationSchemes(OptimizelyIdentityDefaults.SchemeName); into the configurePolicy, as illustrated in the example below.
services.AddAdvancedTaskManager(o => { },
policy =>
{
policy.RequireRole("MyRole");
policy.AddAuthenticationSchemes(OptimizelyIdentityDefaults.SchemeName);
});Presently, the User notifications and Tasks (Awaiting Review) are disjointed, offering only fundamental information and limited control to the editors.
This project has two goals:
-
Empower editors: Build a more versatile Approval Sequence tool for Content and Change Awaiting Review tasks, offering editors deeper insights.
-
Streamline approver workflow: Combine user notifications with tasks within a single interface, allowing approvers to efficiently handle tasks individually or in bulk.
By default, Change Approval is integrated into the Approval Sequence in Optimizely CMS. Therefore, Advanced Task Manager seamlessly incorporates content approval tasks. If the Change Approval NuGet package is installed, the tool will automatically display two tabs in the left-side menu:
- Content Approval
- Change Approval (CMS 12 only — see Requirements)
The tool furnishes the Editor with the following information regarding the task:
- Name
- Content type
- Type
- Submitted (UTC)
- Started by
The list of current features are as follows:
- Advanced filtering
- Select all across pages
- Approve entire approval sequence
- Publish content after approval
- Scheduled publishing
- Approve blocks & media on a page
- Deadline field for content approval
- User Notifications Linked to the Task
- Task ordering
Some features are disabled by default, but you can decide which ones are enabled by configuring options in startup.cs or appsettings.json.
The filter bar above the task list lets editors narrow down content approval tasks using any combination of:
- Language — filter by a specific language branch (existing behaviour).
- Status — show tasks that are In Review (default) or Ready to Publish (approved but not yet published).
- Type — show only Pages, Blocks, or Assets / Media.
- Site — in multi-site solutions, filter tasks to a specific site. The site dropdown is hidden on single-site installations.
- Content search — enter a content ID (integer) or part of the content name to find a specific item.
When one or more filters are active, badge pills appear below the filter bar. Each badge links directly to clearing that individual filter, and a Clear all link removes every filter at once. Navigating to a different page or language always resets pagination to page 1.
Checking the header checkbox selects all items visible on the current page. When there are more results than the configured page size, a banner appears:
All 30 items on this page are selected. Select all N items matching current filters.
Clicking that link calls the server and loads every matching approval ID into the selection, across all pages. The approval action then covers the complete set. To start over, a Clear selection link is shown in the same banner.
The tool prompts the editor to approve the entire Content Approval Sequence for single or multiple contents. A comment in the comment field is mandatory.
If the editor possesses publishing rights for content approval, the option to Publish selected content after approval will be enabled, allowing the editor to publish the content post-approval.
If the editor holds publishing rights for only some of the content after approving all, only the content the editor can publish will be processed. Warning messages will be displayed for content that the editor cannot publish.
When the Publish selected content after approval option is checked, an additional Schedule publishing for a specific date and time checkbox becomes available. Enabling it reveals a date/time picker. The selected datetime is sent alongside the approval request; Optimizely schedules the publish by setting IVersionable.StartPublish to the chosen time, so the content goes live automatically at that moment rather than immediately.
An Approve Page Dependencies button sits in the filter bar above the task list. Clicking it opens a modal that lets editors approve all pending blocks and media files referenced by a specific page in a single action.
How to use:
- Click the Approve Page Dependencies button in the filter bar.
- Navigate the page hierarchy tree to find and select the target page. The tree lazy-loads child pages as you expand nodes.
- Select one or more languages to process.
- Optionally edit the approval comment.
- Optionally check Publish approved content after approval to publish the blocks and media immediately after approving them (only shown when the current user has publish rights).
- Click Approve Dependencies. A spinner is shown while the request is in progress.
The system inspects all ContentArea and ContentReference property values on the selected page, identifies any blocks and media currently awaiting approval for the chosen languages, and approves (and optionally publishes) them all. The number of items approved is shown inline. If any items were approved the page refreshes automatically after 1.5 seconds.
The deadline property is a date/time attribute enabling editors to assign priority to content (Page or Block). This prioritization ensures that Approvers are informed about the urgency before approval.
By default, the functionality of the deadline property is deactivated and can be activated (if needed) by incorporating the following option in startup.cs or in appsettings.json.
services.AddAdvancedTaskManager(o =>
{
o.AddContentApprovalDeadlineProperty = true;
});"AdvancedTaskManager": {
"AddContentApprovalDeadlineProperty": true
}By enabling the Content approval deadline The property Content approval deadline will be added in all PageTyes and BlockTypes under Settings Tab.
The deadline property within the tool operates in three states:
- Warning
The Warning state, highlighted in green, alerts approvers to tasks requiring prompt attention for approval. By default, the Warning state spans a duration of 4 days. This implies that if the content deadline is within 4 days, the `deadline row`` will be highlighted in green.
To customize the duration of the Warning state, you can adjust the settings by Configuring option in the startup.cs or in appsettings.json.
services.AddAdvancedTaskManager(o =>
{
o.WarningDays = 8;
});"AdvancedTaskManager": {
"WarningDays": 8
}- Danger
The Danger state, highlighted in red, indicates that the deadline date/time has already passed.
- Normal
The Normal state is not associated with any specific color, signifying that there is still ample time for Approvers to prioritize the task.
If you set the AddContentApprovalDeadlineProperty option in the startup.cs or appsettings.json to false, it will hide the property and tab from the CMS editor UI.
If you wish to remove the property from the CMS, include the following option in the startup.cs or `appsettings.json:
services.AddAdvancedTaskManager(o =>
{
o.DeleteContentApprovalDeadlineProperty = true;
});"AdvancedTaskManager": {
"DeleteContentApprovalDeadlineProperty": true
}Please note that the AddContentApprovalDeadlineProperty will only trigger if DeleteContentApprovalDeadlineProperty element is set to false.
The tool facilitates the reading of user notifications linked to the task, enhancing the usefulness of the notification icon, rather than accumulating notifications.
Upon the editors opening or refreshing the tool, tasks with unread notifications are highlighted, and the notifications are subsequently marked as read automatically. This ensures that in the editor notification section, the notifications will be acknowledged as read.
The tool gives editors an option to sort through all the tasks with status Awaiting Review by the following columns:
- Order tasks by name
- Order tasks by content type
- Order tasks by type
- Order tasks by time/date
- Order tasks by a user who submitted the request
- Order task by the deadline
Note: The
EPiServer.ChangeApprovalpackage is not compatible with CMS 13. The Change Approval tab is unavailable until Optimizely publishes a CMS 13-compatible version. For full Change Approval support use the CMS 12 branch.
The table row for change approval task information functions as an accordion. Clicking on the row will reveal (or hide) the details of the change approval task.
There are four types of Change approval tasks:
The sandbox application serves as a testing polygon for evaluating new features and addressing bug fixes in the package.
ADMIN
Username: sysadmin
Password: Sandbox#123
EDITOR
Username: editor
Password: Sandbox#123
AUTHOR
Username: author
Password: Sandbox#123
If you can help please do so by contributing to the package! Reach out package maintainer for additional details if needed.
If you have new ideas or feature requests that can make this tool even more useful for you or the community, please feel free to open a new issue at the following link.
https://github.com/adnanzameer/optimizely-advancedtaskmanager/issues
For Optimizely CMS 12 / .NET 6, use version 3.x of this package https://github.com/adnanzameer/optimizely-advancedtaskmanager/tree/CMS12.
Visit the repository: AdvancedTaskManager on GitHub






















