November Happy Hour will be moved to Thursday December 5th.

Bartosz Sekula
Jul 2, 2019
  4550
(5 votes)

New version of Advanced Reviews (v0.2.0)

Together with Grzegorz Wiecheć we have just published a new version of our Open Source project Advanced Reviews

This version contains a few major bugfixes and improvements that we gathered during the past 3 weeks from both internal and external developers.

Release notes for v0.2.0 can be found here:

https://github.com/advanced-cms/advanced-reviews/issues?q=is%3Aissue+sort%3Aupdated-desc+milestone%3A0.2.0+is%3Aclosed

This documentation can also be found on our github page

https://github.com/advanced-cms/advanced-reviews

The nuget is available on the EPiServer nuget feed at:

https://nuget.episerver.com/package/?id=Advanced.CMS.AdvancedReviews&v=0.2.0

Introduction

Previously, we did not have much documentation so this time we focus a bit more to describe how it actually works in details.

This project is a set of useful enhancements that may gradually improve the reviewing process in organizations using EPiServer as their CMS.

It solves a few major issues the Authors identified during their journey with EPiServer and after working on a number of EPiServer related enterprise solutions.

Feature list

Preview unpublished content

Allow editors to preview unpublished and unreviewed content.

As we all know, an EPiServer page is usually not self-contained but rather consists of many other content items like blocks or media files.

In such scenarios it is very hard for reviewers to see the "big picture". Let's say a page consists of several blocks and a few images. Now, in case the page author changed all those blocks and images the reviewer will have to manually go through all of them and approve them individually without, in fact, being able to see those changes in the actual page context.

This project gives the editors a way to generate a unique URL that will present the page exactly as they see it. The preview engine will ignore content status and the content approval process.

preview_unpublished_content.gif

Context aware smart reviewing

In the current workflow, the reviewer can just provide a single comment that has to include all comments for a particular content version. Then, it is the editor's responsibility to match the issues raised by the reviewer with specific parts of the page.

This project aims at moving the comments closer to the specific page fragments which will help editors to understand & fix the issues faster. Pin review 1

You can also take screenshots of your page and highlight specific parts to make it clear to the editor what the concern is. Pin review 2

It is also important to set the priority to each comment to make it clear to the editor which comments are important and which ones are just cosmetic or optional. Pin review 3

After receiving such comments the author of the content will see all issues raised by the reviewer.

Pin answer 1

The author can respond to each of them individually by adding a reply message or attaching another screenshot with explanations.

Once a Pin is reviewed it can be marked as Resolved

Pin answer 2

All pins are saved and can be reviewed at any time in a dedicated Review pane.

Pin answer 3

Integration with default approval workflow

Let's say we configure a very basic approval workflow with a single approval step and a single reviewer.

We will also force the reviewer to provide a comment when either approving or declining the changes. Configure approval

Later on, an editor decides to send the page for review. Approval 1

The reviewer can now use Pins to comment on specific parts of the page and use those comments to populate the Decline message Approval answer

If the reviewer ever tries to approve content that still has some unresolved Pins, a prompt will be shown. Approval prompt

Each pin is in fact a standalone Thread the can go on until both Reviewer and the Author are satisfied with the end result.

External reviewers

This feature is a combination of the previous ones. It is to allow external reviewers, so the user that may not be a part of your organization, or simply users who are reluctant to learn EPiServer to access unpublished data and provide feedback if needed.

Expirable token based urls

All generated links are token-based. You can generate as many links as needed, each of them can be revoked at any time.

Additionally, all urls are time limited (the TimeSpan can be configured, please look further down) which means that after a specific amount of time such link will no longer work.

Visual content reviews

You can visually express issues in reviewed content by highlighting or adding screenshots

Once you decide to attach a screenshot then we will automatically determine the dimensions of the EPiServer property that was clicked on and preselect it. The default crop can be changed according to your needs.

The highlighting tool allows you to clear and redraw.

Screenshot manipulation

External reviews

Allow to display draft content version without logging to Episerver.

External review component

This is an Edit mode component used to generate external review links. There are two types of links:

  • view - external reviewer can preview draft content version
  • editable - external reviewver can add comments using advanced review widget

Share dialog

Editor can share external review links using share dialog. The [#link#] constant will be replaced with link to content.

External review share dialog

Below is an email example:

External review email example

All features are also described in details in our demo:

Advanced Reviews

Jul 02, 2019

Comments

valdis
valdis Jul 4, 2019 10:35 AM

btw, advanced reviews now also works with Twitter bootstrap aware content area renderer. or... actually it's vice versa :) thx for great plugin!

Bartosz Sekula
Bartosz Sekula Jul 6, 2019 10:55 AM

cool :) I saw you expected that your BootstrapAwareContentAreaRenderer was registered for ContentAreaRenderer and thrown exception if the cast was unsuccessful right? now I see you change to just create a new instance if the cast fails.

what we are doing is:

context.Services.Intercept<ContentAreaRenderer>(
                (locator, defaultContentAreaRenderer) => new DraftContentAreaRenderer(defaultContentAreaRenderer));

and then in the DraftContentAreaRenderer we just fallback to default unless we are in the 'external reviewer' context.

do you think also we should also change something in our code? any ideas for improvements are also very welcome :)

Please login to comment.
Latest blogs
Optimizely SaaS CMS + Coveo Search Page

Short on time but need a listing feature with filters, pagination, and sorting? Create a fully functional Coveo-powered search page driven by data...

Damian Smutek | Nov 21, 2024 | Syndicated blog

Optimizely SaaS CMS DAM Picker (Interim)

Simplify your Optimizely SaaS CMS workflow with the Interim DAM Picker Chrome extension. Seamlessly integrate your DAM system, streamlining asset...

Andy Blyth | Nov 21, 2024 | Syndicated blog

Optimizely CMS Roadmap

Explore Optimizely CMS's latest roadmap, packed with developer-focused updates. From SaaS speed to Visual Builder enhancements, developer tooling...

Andy Blyth | Nov 21, 2024 | Syndicated blog

Set Default Culture in Optimizely CMS 12

Take control over culture-specific operations like date and time formatting.

Tomas Hensrud Gulla | Nov 15, 2024 | Syndicated blog

I'm running Optimizely CMS on .NET 9!

It works 🎉

Tomas Hensrud Gulla | Nov 12, 2024 | Syndicated blog

Recraft's image generation with AI-Assistant for Optimizely

Recraft V3 model is outperforming all other models in the image generation space and we are happy to share: Recraft's new model is now available fo...

Luc Gosso (MVP) | Nov 8, 2024 | Syndicated blog