Skip to content

Repository files navigation

Advanced Task Manager for Optimizely

Description

Platform Platform

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).

Features

  • 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.

Installation

To install the Advanced Task Manager, begin by adding the NuGet package using Optimizely NuGet:

dotnet add package AdvancedTaskManager

Configuration

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.

Integrating Advanced Task Manager into the CMS

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.

Restricting Access to the Admin UI

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");
    });

Enabling Optimizely Opti ID Authentication

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);
    });

Overview

Presently, the User notifications and Tasks (Awaiting Review) are disjointed, offering only fundamental information and limited control to the editors.

Tasks pane

Dashboard

User Notification

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)

Advanced Task Manager - Content Approval

Advanced Task Manager - Change Approval

The tool furnishes the Editor with the following information regarding the task:

Content Approval

  • Name
  • Content type
  • Type
  • Submitted (UTC)
  • Started by

The list of current features are as follows:

Some features are disabled by default, but you can decide which ones are enabled by configuring options in startup.cs or appsettings.json.

Advanced Filtering

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.

Advanced Filtering

Select All Across Pages

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.

Select all pages

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.

All pages selected

Approve Entire Approval Sequence (Content Approval Only)

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.

Approve entire approval sequence

Approve entire model

Publish Content After Approval

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.

Publish content after approval

Publish content after approval

Publish content after approval

Scheduled Publishing

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.

Schedule

Approve Blocks & Media on a Page

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:

  1. Click the Approve Page Dependencies button in the filter bar.
  2. Navigate the page hierarchy tree to find and select the target page. The tree lazy-loads child pages as you expand nodes.
  3. Select one or more languages to process.
  4. Optionally edit the approval comment.
  5. 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).
  6. Click Approve Dependencies. A spinner is shown while the request is in progress.

Approve Blocks & Media on a Page

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.

Deadline Field for Content Approval Sequence (Optional)

Deadline field for the approval sequence

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.

Enable approval sequence deadline

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.

User Notifications Linked to the Task

User notification with task

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.

Task ordering

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

Sort

Information for Change Approval Tasks (CMS 12 only)

Note: The EPiServer.ChangeApproval package 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:

Security Setting Change

Securty setting change

Moving Content Change

Moving content change

Language Setting Change

Language setting change

Expiration Date Setting Change

Expiration date setting change

Sandbox App

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

Contributing

If you can help please do so by contributing to the package! Reach out package maintainer for additional details if needed.

Feature requests

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

CMS 12 Support

For Optimizely CMS 12 / .NET 6, use version 3.x of this package https://github.com/adnanzameer/optimizely-advancedtaskmanager/tree/CMS12.

Optimizely (Episerver) CMS 11 Support

Visit the repository: AdvancedTaskManager on GitHub

Changelog

Changelog

About

For Optimizley (Episerver) CMS 12+ - Advanced Task Management for Optimizely, providing enhanced oversight of the administration for Awaiting Review tasks in Content Approval and Change Approval processes.

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages