Approval Macro

Links
Developer Network
Name Approval Macro
Author(s)  
Priority High
Description Allow users to read and approve content
A page approval plugin implementation has been developed by Saikore. More details can be seen at the home page.


Often in organisations, knowing who has read and who has approved a document are very important things. However modern document management systems make read and approval checking very tedious to implement and monitor. I'm wondering if we can't come up with a simple agile/Wiki like solution to this problem.

Simple Macro Approach

Perhaps it could be as simple as a macro like:

{approval:Bob, Jim, John}

which would print out a table something like this:

Name Read Approved
Bob
Jim
John

As people start to read an approve the document, it might end up looking something more like this:

Name Read Approved
Bob
Jim
John

How does it get read or approved? Simple links really. Imagine you are John who is logged in and looking at the page, you would see something like this:

Name Read Approved
Bob
Jim
John Mark read Approve document

Simply by clicking on the links, you indicate that you have read the document, and give your approval for the document.

Why read and approved as separate steps? Well you might read the document, click the 'read' link and then add a comment requiring more information before you're willing to approve it.

It would be improved if the macro actually coloured the backgrounds of the cells I think, to make it look more like a FatCow test result. When the table turns green, your document is approved!

Thoughts?

Advanced Macro Approach

The following points give a very rough specification of how a simple 'wiki style' approval system might work.    I describe it as 'wiki style' because it does not require any administration and hence can be managed by the wiki community.   If you edit these specifications, please keep in mind that the approach taken here is to make the process as simple as possible for users.   

General Requirements

  • Anybody can register as an 'approver' of any page.   This would be done by clicking on an 'approval' icon which could be a tick icon (next to the the star and envelop icons at the top right of a standard page  e.g.    )
  • Users would be able to see a list of all the pages (and their approval status) that they have registered to approve.   This could be a similar mechnanism to the one that allows users to see favourites or watched pages.
  • Pages with registered approvers would display the list of people who have registered as approvers.  This could be in a table at the top (or bottom?) of the page, like this:
     Name Read  Approved 
     Jim
     Bob
     Fred
     
     
     Jo    
     Jill
     Mark read
    Approve document
  • Note that the table above is what 'Jill' would see if she viewed the page (and has registered as an approver).   Jim has read and approved the page, Bob has read and rejected the page, Fred has read the page, Jo has not done anything and Jill has not yet done anything either.   Jill can mark the page as 'read' or 'approved' (or unread and unapproved as per the page state) by clicking on the links.  It may be better to have the page automatically be marked as 'read' after a user first views it.
  • A page would be marked as 'unapproved' until all the people in the approval list have approved it.  An unapproved page would be marked as unapproved by some bold red text or background (or something....)    
  • Once the page is approved, it would have a special version number assigned (and perhaps a special label assigned such as 'APROVED_V1.1').  Some ideas from software version control might be applied here.
  • If a page is changed after it was approved, the approval (and read) status for all users would be reset to blank.  All users 'read' status would be reset on any page edit.
  • Users who view a page that is not approved would be able to easily navigate to the last approved version.   By default, the latest version would be viewed, but the user should have a preference somewhere so that their default is to see the last approved version.   The users choice for each page could be persisted per page.   There would need to be a very obvious visual indication of the approval state of the viewed page and easy navigation to the alternate version.    In this way new versions of an approved page can be easily accessed for reapproval developement.
  • Approvers can unregister without affecting the approval status of documents they approved in the past.   However, this may affect the approval state of pages that are currently unapproved (i.e. if the user was the only person left to approve a page and the users unregisters, then the page would be approved.
  • There may need to be some way of automatically unregistering approvers if they are inactive (account closed etc.)
  • The addition of macros on a page can invalidate the version number of a page by allowing changes without incrementing the version.    One way to get around this problem would be to prevent any page authorisation actions on a page with a macro.   Since this would disqualify many pages, some macros could be made acceptable if they identify themselves as being 'approvable'.   This could be done by introducting some sort of macro property (the default would be unapprovable for legacy macros).

Potential problems

This approach was conceived for an intranet application.   It would work because people on an intranet can generally be trusted to some extent and are at least accountable.   There may be problems with this approach on the Internet because casual users would be able to register as 'approvers' and then disappear, leaving a page that would never be approved.    This could be used as a form of vandalism.

Dynamic Data 

Dynamic data can invalidate the approval of a page because the page can change without an edit.   For instance, the {include...} macro could show different text based upon what is in the included page, independant on anything in the controlled Confluence repository.    Hence, using some macros, an approved page could change without the authorisers knowing about it.   

One way to get around this problem is to make macros and plugins 'unapprovable'.   Any page with a macro could not be approved.    However, some macros do have 'approvable' behaviour (such as the table of contents {toc} macro) and it would be very desirable to allow these macros to be used in approved pages.    One way to facilitate this is by adding an 'approvable' property to macros.   By default, all macros would not be 'approvable', but if the macro developer sets the 'approvable' property then the macro could be used.

Other Ideas

See http://meta.wikimedia.org/wiki/Article_validation for an extensive discussion of the issue in the Wikimedia community.

Labels

review review Delete
confluence confluence Delete
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.
  1. Jan 27, 2004

    Mathias Bogaert says:

    This would indeed be very useful, but the best would be to be able to attach som...

    This would indeed be very useful, but the best would be to be able to attach some sort of workflow to it. Eg. you create a proposal for an offer, but it needs to be approved by all managers before it is published in Confluence and sent to the customer. Also notifying all managers that the page has been approved would be nice. How about something like

    {approval:Bob, Jim, John|approved:notifyAll, publish}
    
  2. Jan 27, 2004

    zohar melamed says:

    Interesting You need to be able to specify groups/users so someone in a group....

    Interesting

    You need to be able to specify groups/users so someone in a group.

    I like Mathias's publish idea , so if a page has an approval macro on it , it is invisible to anyone but the potential approvers.....

    This will be more useful if it was linked to a page type and not controlled by users ( who would put the macro on the page anyway ?)

  3. Jan 28, 2004

    Knut Wannheden says:

    Interesting indeed! A couple of questions / thoughts: A user listed in the {a...

    Interesting indeed! A couple of questions / thoughts:

    • A user listed in the {approval} macro has to specify values for Read and Approved at the same time. If he only marks it Read and wants to wait with his approval, other readers see the value NO in his Approved cell. There's no undefined value.
    • Where will the actual imformation about who has read and approved the page be stored? In the page itself? Otherwise the metadata is split: the page states who needs to read and approve of it, whereas who actually has done so is stored elsewhere. Feels a little bit weird to me...
  4. Jan 28, 2004

    zohar melamed says:

    What about the page being in a non visible state pending approval, email sent to...

    What about the page being in a non visible state pending approval, email sent to all approvers, a

    Unknown macro: {pending-approval}

    macro to display all the pages expecting my approval.....

    Where will the actual imformation about who has read and approved the page be stored?

    Knut, you hit the nail on the head.

    Mike as we disscused in the past , some macros will need state management support, and the term portal springs to mind....

    The __actual __ page will be in real storage, but the PortalData approach would work fine to start with.

    // saving state 
     public void doEdit(PortletRequest request, PortletResponse response) throws PortletException{
            final PortletData data = request.getData();
            String someData = (String) data.getAttribute("some key");
      }
    
    // restoring state
     public void doView(PortletRequest request, PortletResponse response) throws PortletException{
            final PortletData data = request.getData();
            data.setAttribute("some key", someData);
      }

    so macros have a simple mechanism for persisting state acroos sessions.

  5. Feb 06, 2004

    Armond Avanes says:

    All perfect ideas and useful to implement indeed. But I really can't figure out ...

    All perfect ideas and useful to implement indeed.
    But I really can't figure out the relations here and the necessity for having it as a macro. We're gonna have a new macro which provides some meta-data for the page. Here are my concerns:

    1. Where are these approval information going to be stored? We have two ways, either in the page content itself (surrounded by {approval} macro) or some meta-data attached to the page object (like comments, file attachments and so on).

    2. The macro itself can be vannished right from the middle of the way or even having it removed after all have approved it. Kinda not acceptable for me. The meta-data (collected results from the approvers) are there attached to the page (somehow) but the someone has editted the page and moved the whole macro itself.

    Won't it be better to have such functionality (approval) as a core facility/action (like attach-page, add-comments, remove-comments, and so on) so that the users can activate an approval process on any specific page and collect their desired information? Then we can have a nice GUI (like permissions) to include any specific users or groups in the process?

  6. Feb 23, 2004

    Nathan Ollerenshaw says:

    Mike, Your original idea is perfect as is. I think the ideas about workflow e...

    Mike,

    Your original idea is perfect as is.

    I think the ideas about workflow etc are certainly fine ... but they muddy the issue a bit.

    If your idea was implemented as you originally stated, it would be perfect for us.

    \n

  7. Sep 21, 2004

    Mike Cannon-Brookes says:

    [~paulrene} added: Please see the simple com.telenor.confluence.utils.Storage cl...

    [~paulrene} added:
    Please see the simple com.telenor.confluence.utils.Storage class included in Portlet, Script, Hidden and TOC Macros that provide a method to serialize any (via XStream) java object, list, collection, etc to XML and store it in a Confluence page. This could be used as an simple internal storage system. I use it successfully for a simple deployment management portlet. Ok, I know it's crazy. Sorry.

    1. Sep 21, 2004

      Mike Cannon-Brookes says:

      Uhm, I mean of course Paul Rene Jørgensen - sorry mate!

      Uhm, I mean of course Paul Rene Jørgensen - sorry mate!

  8. Oct 21, 2005

    Martin Ollesch says:

    An approval system of page versions should be a real confluence extension not on...

    An approval system of page versions should be a real confluence extension not only a macro, because approval of documentation is very important in many companies and organisations. Actual imformation about who has approved the page shouldn't be stored in page, because the wouldn't be in accordance with audit requirements?

    I don't think a workflow is needed in Confluence right now, because JIRA offers a great and improving woklflow system. JIRA workflow could be used by linking JIRA issues to Confluence pages.

    In my opinion the following improvements would be sufficient:

    • Add function to approve or reject current version of page by login user
    • Add version to page info tab (recent changes or page history)
    • Show all users who approved/rejected a page version in page info tab (recent changes or page history)
    • Show version in page
      (see CONF-4333 and also CONF-4153)

    Another useful improvements would be the ability to control export of space/pages by tags (and maybe approval status) like checking out source by tags in CVS. This would require a kind of tagging mechanism in Confluence.

    All this would allow to create a snapshot of an approved and coherent version of a documentation, which would really satisfy our auditors .

    1. Oct 23, 2005

      Daniel Ostermeier says:

      Hi Martin, Confluence 2.0 due out in the next week or so (we are releasing 2.0R...

      Hi Martin,

      Confluence 2.0 due out in the next week or so (we are releasing 2.0RC1 today) includes the ability to add labels to content. These labels will then provide the basis for implementing features such as exporting all of those pages that are labelled with a particular label.

      In the current implementation supports the idea of 'personal' labels. We could potentially leverage these personal labels to indicate who has 'approved' what content, in a similar way to how we handle personal favourites.

      What labels currently do not support is the labelling of specific versions of content. This is certainly something that we can look at implementing post 2.0. I have created CONF-4387 to track this.

      Regards,
      -Daniel

      1. Oct 24, 2005

        Martin says:

        Hi Daniel, thanks very much! Exporting content by label will be a great improve...

        Hi Daniel,

        thanks very much! Exporting content by label will be a great improvement.

        Favourites are private flags. Will 'personal labels' be visible by public, so other users can see who has approved a page?

        Regards
        Martin

        1. Oct 24, 2005

          Daniel Ostermeier says:

          Personal labels are only visible to the owner of the label, meaning that only yo...

          Personal labels are only visible to the owner of the label, meaning that only you can see what you have marked as a favourite.

          Regards,
          -Daniel

          1. Oct 25, 2005

            Martin says:

            But how can others users than the one who 'approved' a page see this approval in...

            But how can others users than the one who 'approved' a page see this approval information (personal flag), if it's not somehow public or visible by other users.

            The information that a user has 'approved' a page is more important to other (public) users than to the 'approver'.

            Regards,
            Martin

  9. Mar 20, 2006

    Kamil Murat Eksioglu says:

    The original proposal (based on page approval, w/o any workflow implementation) ...

    The original proposal (based on page approval, w/o any workflow implementation) is fair enough and suficient; it may satisty lots of the requests. Further, it seems to be that it will comply with audit RQS.
    Important is the fast availability of that feature.

  10. Apr 10, 2006

    Ravi Ambros Wallau says:

    This feature is the only thing that can make we decide what tool to use, Conflue...

    This feature is the only thing that can make we decide what tool to use, Confluence or Twiki.

    I really liked Confluence... Easy to install, easy to use, beatiful, pro in may ways. But, without document approval, we can't make this choice...

    Do you have any idea of when this plugin will be "ready to go"?

    1. Apr 11, 2006

      Jens Schumacher says:

      There is currently no timeline for this feature. Please take a look at the corr...

      There is currently no timeline for this feature.

      Please take a look at the corresponding issue and vote for it if you want to push it's priority.

      http://jira.atlassian.com/browse/CONF-4153