[TYPO3-core] Hard locking in the core
Kasper Skårhøj
kasper2007 at typo3.com
Fri Aug 31 22:01:01 CEST 2007
Hi Folks,
I have implemented hard locking of records in TYPO3 since it was
requested by Typoheads in Austria (redacted user). The deal is that I
implemented the APIs and they work on the UI. For them, it is a
feature necessary for a workflow engine they have dreamt up.
I already have a patch ready for the core for the first alpha
version. I am evaluating that with Boris now. But for now I will just
post the description of the feature and how it currently works, based
on this I would like to know if there are any objections on the core
team to this feature or other comments (additions/changes). I will
post the patch for review a bit later.
Here goes:
History:
redacted user approached me to have a hard locking feature built into
TYPO3 which would be necessary API wise for a workflow system they
were developing. I have now developed the alpha version of this API,
ready for testing.
Feature description:
There are three modes:
- [default] : The advisory locking we have had for long, managed by
t3lib_BEfunc:: (no changes to this)
- "single" : Hard locking, for individual records
- "extended" : Hard locking, for groups of records; locks for records
on the same page locks down other records on the page. Which tables
are included in this check depends on a TCA [ctrl] configuration
"extendedLocking" = TRUE. By default "pages" and "tt_content" are.
The modes are configured through $GLOBALS['TYPO3_CONF_VARS']['BE']
['recordLockingMode'].
The two new modes are managed through t3lib_locking - a new class
included with t3lib_BEfunc by default.
t3lib_locking has three public methods: is_locked(), lock() and unlock()
Explicit locking: A configuration, $GLOBALS['TYPO3_CONF_VARS']['BE']
['recordLockingExplicit'] = TRUE, means that records must be locked
explicitly before editing or operation on them. Default is that
records gets locked/unlocked implicitly when edited (see alt_doc.php
below). Explicit mode is evaluated inside t3lib_locking::is_locked();
function will also return "true" if no lock is found for the login
user (when "explicit" mode is set).
Across Workspaces: A configuration, $GLOBALS['TYPO3_CONF_VARS']['BE']
['recordLockingAcrossWS'] = TRUE, means that locks for versions in
other workspaces of all implicated records will block access. By
default only the live records and any versions in the current
workspace (unless in Live of course) is checked.
In "single" and "extended" modes:
- TCEmain will check if a record is lock by another user before
allowing any operation to it.
- alt_doc.php will check for other users locks and if found not edit
the record. Also, if implicit mode is on (default) a lock will be set/
updated for a record when loaded into the form. When the form is
closed the lock is cleared.
Documentation:
- $GLOBALS['TCA'][$table]['ctrl']['extendedLocking'] = TRUE
TODO:
- expiry of locks by time (kasper)
- clean-up during log-out (kasper)
- admin module for managing locks (podzeit et al)
- more backend feedback (podzeit et al)
- implicit locking support by other than alt_doc.php (podzeit et al?)
- optimized "is_locked" function (which currently make lots of
expensive look-ups for "extended" mode)
- interface missing for setting explicit locks (podzeit et al)
- kasper
----------------------------
NOTICE: NEW EMAIL for 2007: kasper2007 at typo3.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.netfielders.de/pipermail/typo3-team-core/attachments/20070831/25eaac09/attachment-0001.htm
More information about the TYPO3-team-core
mailing list