Workspaces and Versioning

Extension Key: workspaces

Language: en

Version: 1.0.0

Keywords: forEditors, forAdmins, forIntermediates, forAdvanced

Copyright 2000-2011, Workspaces Team

This document is published under the Open Content License

available from http://www.opencontent.org/opl.shtml

The content of this document is related to TYPO3

- a GNU/GPL CMS/Framework available from www.typo3.org

Guide

This document is a Guide. Guides are designed to familiarize a reader with a specific topic in order to provide a working knowledge of that particular process. Readers should peruse the guide from cover to cover in order to gain a practical overview of the process. Once completed, the Guide becomes a practical reference tool that a reader will refer to as needed. Guides offer advice on how best to achieve a given task.

Table of Contents

Workspaces and Versioning	1

Introduction	3

About this document	3

What's new	3

Credits	3

Feedback	3

Administration	4

Versioning	4

Workspaces	6

Users Guide	9

Creating a custom workspace	18

Introduction

About this document

This document explains how versioning and workspaces function in TYPO3 and how they are set up. The first part explains the technical background for administrators or developers who want to make their extensions version aware. The second part is for users of workspaces, a short guide about what is possible and how to use workspaces. The last parts shows how to create a custom workspace.

What's new

The whole workspace module was rewritten for TYPO3 4.5, major improvements in stability and usability have been made.

Credits

This manual corresponds in large parts to the original version from Kasper found in the “Inside TYPO3” document. It was adjusted and updated to fit with the workspaces and versioning modules as found in TYPO3 4.5.

Feedback

If you find a bug either in this manual or in the workspaces / versioning extensions please use our bug tracker at http://forge.typo3.org/projects/typo3v4-workspaces/issues

If you have a question please ask on the projects mailing list / news group: typo3.project.workflow

Administration

Versioning

TYPO3 offers versioning of the database elements it manages. This versioning system allows you to work on future versions of content without affecting the live content. It is used by workflow systems to offer a process for such content, going from creation, editing to review and publishing.

Versioning is available in the core API by default, but to gain access to management tools you must install the system extensions versioning and workspaces.

Technical Details

Versioning must be enabled on a per-table basis in the [ctrl] section of the $TCA array entry for a table. In addition a fixed set of fields has to exist for the management of versions. All of these technical details are specified in the document “TYPO3 Core API” where you will also find other in-depth information.

Future and past versions of records in TYPO3 remain in the same table as the live version. However, all “offline” versions will have a pid value of “-1” which identifies them as “offline”. Further they have a field, “t3ver_oid” which points to their live (“online”) version.

When a future/past version is swapped with the live version it is done by swapping all field values except the uid and pid fields (and of course versioning related fields are manipulated according to their function). It means that online content is always identified by the same id as before and therefore all references are kept intact.

Versioning is easy for existing elements. However, moving, creating and deleting poses other problems. This is solved the following way:

Deleting elements is done by actually creating a new version of the element and setting a flag in the new version (t3ver_state=2) that indicates the live element must be deleted upon swapping the versions. Thus deletion is “scheduled” to happen when the versions are swapped.

Creating elements is done by first creating a placeholder element which is in fact live but carrying a flag (t3ver_state=1) that makes it invisible online. Then a new version of this placeholder is made which is what is modified until published.

Moving elements is done by first creating a placeholder element which is in fact live but carrying a flag (t3ver_state=3) that makes it invisible online. It also has a field, “t3ver_move_id”, holding the uid of the record to move (source record). In addition, a new version of the source record is made and has “t3ver_state” = 4 (move-to pointer). This version is simply necessary in order for the versioning system to have something to publish for the move operation. So in summary, two records are created for a move operation in a workspace: The placeholder (online, with state=3 and t3ver_move_id set) and a new version (state=4) of the online source record (the one being moved).

Unique fields

Unique fields like a page alias or user name are tricky in a versioning scenario because the publication process must perform a check if the field is unique in the “Live” situation. The implications of implementing this means that we have chosen a solution where unique fields are simply not swapped at all! It means that publication of a new version of a page cannot and will not alter the alias of the live version. The “Live” unique value will remain until changed in the live version.

You can hide fields with the “unique” keyword when there are offline versions. This is done with the display condition:

'displayCond' => 'VERSION:IS:false',

Life cycle

When a new version of an element is created, its publishing counter (t3ver_count) is set to zero. This means its life cycle state is interpreted as “Draft”; the element is in the pipeline to be published. When the element is published the life cycle state is “Live” and when it is swapped out again the publishing counter will be incremented and the life cycle is interpreted as “Archive”. Yet, the element can be continously published and unpublished and for each time the publishing counter will be incremented, telling how many times an element has been online.

Permissions

This is an overview of how permissions are handled in relation to versioning:

Display

Read permissions are evaluated based on the live version of pages (as the basic rule). The read permissions of the offline page version in a workspace is not observed.

The ID of the live record is used so the live records display-permissions get evaluated.

Versioning records

To create a new version the user must have read permission to the live record he requests to version

A new version of a page will inherit the owner user, group and permission settings from the live record

Publishing version

To publish, a user must have general publishing permission in the workspace, for instance be the owner of it or have access to the Live workspace.

In addition, the user must have read and edit access to the offline version being published plus edit access to the live version that a publishing action will substitute!

The permissions of a new version of a page follows the page when published.

Editing records

For all editing it is required that the stage of the versioned record (or root point) allows editing.

Page records:

Permission to edit is always evaluated based on the pages own permission settings and not the live records.

Records from non-pages tables:

Always based on the live parent page.

New records

When new records are created with a version and live place holder the permissions depend on the live page under which the record is created.

Moving records

Records can be moved as long as the source and destination root points has a stage that allows it.

New records created with a place holder element can be moved freely around.

Generally, the stage of a moved record has to allow for editing plus regular permissions for moving are observed.

Deleting records

If a record supports versioning it will be marked for deletion if all usual requirements are fulfilled at the time of the delete request: Delete access to record, no subpages if recursive deletion is not enabled and no disallowed table records are found. As soon as the record is marked for deletion any change to the record and subpages that would otherwise prevent deletion for the user will not be effective: The record will be deleted upon publication!

If you try to delete a Live record for which a version is found in the workspace, that version is deleted instead.

Detaching versions from a workspace and raising stage of versions can be done as long as the user has edit permission to the record.

Workspaces

Problems with versioning usability

One problem with raw versioning is that it easily requires a lot of administration and awareness from users. For instance, an author has to consciously create a new version of a page or content element before he must edit it. Maybe he forgets. So either he makes a change live or - if TYPO3 is configured for it - he will be denied access to editing but frustrated over an error message. Further, keeping track of versions across the system might be difficult since changes are often made at various places and should be published together.

Some of these problems are fixed when elements are always processed with a workflow that keeps track of them. But a workflow process might be too rigid for scenarios where a group of editors are concerned with the site content broadly and not the narrow scope of an element centred workflow.

Furthermore, the preview of future content is hard to implement unless you require people to request a preview of each individual new version - but most often they like to see the combined impact of all future versions!

The perfect solution

The concept of workspaces is the answer. Workspaces puts versioning into action in a very usable and transparent way offering all the flexibility from live editing but without sacrificing the important control of content publishing and review.

A workspace is a state in the backend of TYPO3. Basically there are two types of workspaces:

LIVE workspace: This is exactly the state TYPO3 has always been in. Any change you make will be instantly live. Nothing has changed, it just got a name.

Custom workspaces: When a user selects a custom workspace new rules apply to anything he does in the backend:

Any change he tries to make will not affect the live website. It's a safe playground.

Transparent versioning: He can edit pages and elements because a new version is made automatically and attached to the workspace. No training needed, no administrative overhead!

Previewing: Visiting the frontend website will display it as it will appear when all versions in the workspace is eventually published.

Overview of changes: The workspace manager module gives a clear overview of all changes that has been made inside the workspace across the site. This gives unparalleled control before publishing the content live.

Constraints: Only tables that support versioning can be edited. All management of files in fileadmin/ is disabled by default because they may affect the live website and thus would break the principle of “safe playground”. Records that do not support versioning can be allowed to be edited explicitly and file mounts can be defined inside of which files can be managed.

Can be configured additionally with owners, members and reviewers plus database- and file mounts plus other settings. A custom workspace is a great way to do team-based maintenance of (a section of) the website including a basic implementation of workflow states with editor-reviewer-publisher.

Analogy

The concept of workspaces can be compared with how SVN works for programmers; You check out the current source to your local computer (= entering a draft workspace), then you can change any script you like on your local computer (= transparent editing in the workspace), run tests of the changed code scripts (= previewing the workspace in the frontend), compare the changes you made with the source in SVN (= using the Workspace Manager modules overview to review the complete amount of changes made) and eventually you commit the changes to SVN (= publishing the content of the workspace).

Publishing and swapping

There are two ways to publish an element in a workspace; publish or swap. In both cases the draft content is published live. But when swapping it means the current live element is attached to the workspace when taken offline. This is contrary to the publish mode which pushes the live item out of any workspace and “into the archive”.

The swapping mode is useful if you have a temporary campaign, say a christmas special frontpage and website section. You create the christmas edition in a custom workspace and two weeks before christmas you swap in the christmas edition. All normal pages and elements that were unpublished are now in the workspace, waiting for christmas to pass by and eventually the old frontpage etc. will be swapped back in. The christmas edition is now back in the workspace and ready for next year.

More on Workspace types

Here is a clearer description of the various workspace types, their differences and applications:

Topic	Live workspace	Custom workspaces
Access	Users and groups must be specifically allowed access to the Live workspace. (Checkboxes in user/group record)	Granted through the workspace configuration which includes: - A list of editors (users and/or groups) - A list of reviewers (users and/or groups) - Owner users (initial creator)
Editing	Live content	Draft versions of live content Option: To allow editing of tables without versioning available.
DB mounts	From user profile	Specific DB mounts can be specified in which case they will overrule DB mounts from user profiles. Specific DB mounts are required to be within the DB mounts from the user profile (for security reasons) If no DB mounts specified for workspace, user profile mounts are used (default)
File mounts	From user profile	By default, all file manipulation access is banned! (Otherwise violation of “draft principle”) Optionally, file mounts can be specified for convenience reasons.
Scheduled publishing	N/A	The workspaces extension comes with a scheduler task that allows the use of the scheduler to publish your whole workspace on a certain day and time. You can also specify an unpublish time which requires the use of swapping as publishing type.
Reviewing	Only through a separate workflow system.	Members can raise content from “Editing” stage to the next configured stage. If no custom stages are configured the next stage is “Ready to publish”. Members can only edit content when its in “Editing stage”. Persons responsible for a certain stage (Reviewers) can edit content in the “Editing” stage and additionally in the stage they are responsible for. They can push content from “Editing” and from their stage to the next stage. Owners can operate all states of course. Owners are the only ones to edit content when in “Publish” mode. Thus “Publish” mode provides protection for content awaiting publication. Options available for automatic email notification between the roles.
Publishing (For all: Requires edit access to live element)	No limitations. Content can be edited live and even content from other workspaces can be published through the versioning API regardless of stage.	Workspace owners can publish (even without access to Live workspace). Reviewers/Members cannot publish unless they have access to online workspace as well (this default behavior can be disabled). Option: Restrict publishing to elements in "Publish" stage only. Option: Restrict publishing to workspace owner.
Settings	N/A	Users with permission to create a custom workspace can do so. Workspace owners can add other owners, reviewers and editors and change all workspace properties.
Auto versioning	N/A	Yes, but can be disabled so a conscious versioning actions is required.
Swapping	N/A	Yes, but can be disabled.
Other notes		Custom workspaces have a freeze flag that will shut down any update/edit/copy/move/delete etc. command in the workspace until it is unset again.
Module access	All backend modules can specify $MCONF['workspaces'] = “[online,offline,custom]” to limit access based on the current workspace of user.
Usage	Administrative purposes. First creation of site.	Specific projects on a site branch. Simple review-cycles. Informal team-work on site maintenance.

Generally, “admin” users have access to all functionality as usual.

Supporting workspaces in extensions

Since workspaces implies transparent support all over the backend and frontend it means that extensions must be programmed with this in mind. Although the ideal is complete transparency in backend and perfect previews in the frontend this is almost impossible to obtain. But a high level of consistency can be obtained by using API functions in TYPO3. These functions and the challenges they are invented to answer are discussed in “TYPO3 Core API”.

TYPO3 Core Api

http://typo3.org/documentation/document-library/core-documentation/doc_core_api/current/

Users Guide

This section shortly covers the workspace related features in the backend.

Most significantly workspaces have a selector box in the upper right corner of the backend.

In this selector box you can choose between the workspaces available. The whole backend reloads each time he changes workspace. This is necessary because the backend might be differently composed depending on the workspace the user is in.

You can easily see in which workspace you are currently in when looking at the top frame of your backend:

When the background is orange colored you are in a workspace. The workspace name is appended to your username (in this case @News).

When you are in a draft workspace (any workspace that is not live) and start editing a page or create a new page a new version of that page is automatically created for you.

A page which has a change in the current workspace is highlighted in the page tree:

The module Web > Workspaces allows you to monitor changes in a workspace:

This view shows you the live version and the workspace version. If you open the detail view of a change you can see a comparison view which helps you to understand what has changed in the draft version.

(In the example the text was added in the workspace version). You can also raise the stage of the content for review, you can publish, preview etc.

Previewing content in the workspace is easy. You can use the eye icon anywhere while working in a workspace, for example from the page module

or using the save-and-view of elements:

or using the workspaces module:

The workspaces preview is a simultaneous view of the live and workspace version. The default selection is to show the workspace version and to display a slider with which it is possible to change the display to the live version. With the select box in the upper right corner you can change the mode to for example vertical split:

The custom Workspace is adequately described in the content sensitive help so no more details will be given here.

The workspace technology offers a simple scheme for staging content through review to publication. In the Workspace Manager you can "raise content" to the next level and attach a comment while doing so:

The stage in this case is raised to "Approval by Head of Marketing" and will be reflected in the interface:

If the change that was made is rejected by the reviewer of the next stage it can be sent back with a comment, so that the “creator” of the content can adjust the element:

If the reviewer is ok with the change, he can send the change on to the next stage – either another review level or the “ready to publish” state. Depending on the configuration of the workspace the workspace owner or any member with access to the LIVE workspace can then publish the change. Note that it is possible for anyone that is allowed to publish to directly publish from any stage. A change does therefore not necessary need to have been in all stages.

Sending elements to another stage can either be done individually for each element with the arrow buttons in an elements row or via the select box in the bottom left corner. You can select multiple rows by using the checkbox of each row and then select the action you want to do:

You can also publish, swap or discard a whole workspace at once with the second select box on the bottom. This select box – called “Mass Actions” - is only active when no element is selected:

For each element in the list you can access control buttons for swap, send to previous/next stage, show preview, edit element, open the element in the page module and discard changes.

In the list view of the live workspace you can see which elements have versioned counterparts:

The system log will also reflect operations in the workspace. The "User" column is tagged with the id of the workspace in which the action took place:

Setting up access to workspaces: To give a user access to the live workspace you have to check the corresponding checkbox in his backend user record or in his backend user group record:

You can see to which workspace a user has permissions by taking a look at Tools > User Admin:

For custom workspaces users or groups are assigned directly in the configuration record of the workspace (List Module > Root Page > Workspaces):

Tip

In most typical cases the average backend user only works in a custom workspace and therefore cannot change live content before a supervisor with access to the Live workspace will enter the backend and publish the workspace content.

Creating a custom workspace

Go via the list module to the root page of your web site (ID 0)

Click on the “new record” icon:

Choose “Workspace” in the wizard

Fill in the form – most fields are self-explaining (for the user rights see chapter above)

Add as many stages as you may need (Without any custom stages you will have “Edit” and “Ready to Publish”)

Save and finished :-)

Workspaces and Versioning - workspaces	Creating a custom workspace

18

Workspaces and Versioning

workspaces

forEditors forAdmins forIntermediates forAdvanced

The keywords help with categorizing and tagging of the manuals. You can combine two or more keywords and add additional keywords yourself. Please use at least one keyword from both lists.
If your manual is NOT in english, see next tab "language"
----
forEditors (use this for editors / german "Redakteure")
forAdmins (use this for Administrators)
forDevelopers (use this for Developers)
forBeginners (manuals covering TYPO3 basics)
forIntermediates (manuals going into more depth)
forAdvanced (covering the most advanced TYPO3 topics)
see more: http://wiki.typo3.org/doc_template#tags
----

Susanne Moog

2011-01-25T20:14:05